@deephaven/grid 0.24.1-beta.3 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GridMetricCalculator.d.ts","sourceRoot":"","sources":["../src/GridMetricCalculator.ts"],"names":[],"mappings":"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"}
@@ -203,8 +203,6 @@ export class GridMetricCalculator {
203
203
  var rowHeightValues = Array.from(visibleRowHeights.values());
204
204
  var maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;
205
205
  var maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;
206
- var lastLeft = this.getLastLeft(state, null, width - gridX - scrollBarSize - rowFooterWidth);
207
- var lastTop = this.getLastTop(state, null, height - gridY - scrollBarSize - floatingBottomHeight);
208
206
 
209
207
  // How much total space the content will take
210
208
  var scrollableContentWidth = leftOffset + maxX + rowFooterWidth;
@@ -213,11 +211,22 @@ export class GridMetricCalculator {
213
211
  // Visible space available in the canvas viewport
214
212
  var scrollableViewportWidth = width - gridX;
215
213
  var scrollableViewportHeight = height - gridY;
214
+ var lastLeftWithoutScroll = this.getLastLeft(state, null, scrollableViewportWidth - rowFooterWidth);
215
+ var lastLeftWithScroll = this.getLastLeft(state, null, scrollableViewportWidth - rowFooterWidth - scrollBarSize);
216
+ var lastTopWithoutScroll = this.getLastTop(state, null, scrollableViewportHeight - floatingBottomHeight);
217
+ var lastTopWithScroll = this.getLastTop(state, null, scrollableViewportHeight - floatingBottomHeight - scrollBarSize);
218
+ var lastLeft = lastLeftWithScroll;
219
+ var lastTop = lastTopWithScroll;
220
+ if (lastLeftWithoutScroll === 0 && lastTopWithoutScroll === 0) {
221
+ // Fully visible without any scroll bars
222
+ lastLeft = 0;
223
+ lastTop = 0;
224
+ }
216
225
 
217
226
  // Calculate some metrics for the scroll bars
218
- var hasHorizontalBar = lastLeft > 0 || scrollableContentWidth > scrollableViewportWidth;
227
+ var hasHorizontalBar = lastLeft > 0;
219
228
  var horizontalBarHeight = hasHorizontalBar ? scrollBarSize : 0;
220
- var hasVerticalBar = lastTop > 0 || scrollableContentHeight > scrollableViewportHeight - horizontalBarHeight;
229
+ var hasVerticalBar = lastTop > 0;
221
230
  var verticalBarWidth = hasVerticalBar ? scrollBarSize : 0;
222
231
  var barWidth = width - rowHeaderWidth - verticalBarWidth;
223
232
  var barHeight = height - columnHeaderHeight - horizontalBarHeight;
@@ -521,11 +530,11 @@ export class GridMetricCalculator {
521
530
  lastLeft = right;
522
531
  }
523
532
  var x = 0;
524
- while (lastLeft > 0) {
533
+ while (lastLeft >= 0) {
525
534
  var columnWidth = this.getVisibleColumnWidth(lastLeft, state);
526
535
  x += columnWidth;
527
536
  if (x >= visibleWidth) {
528
- return Math.min(lastLeft + 1, right !== null && right !== void 0 ? right : columnCount - 1);
537
+ return clamp(lastLeft + 1, 0, right !== null && right !== void 0 ? right : columnCount - 1);
529
538
  }
530
539
  lastLeft -= 1;
531
540
  }
@@ -553,11 +562,11 @@ export class GridMetricCalculator {
553
562
  lastTop = bottom;
554
563
  }
555
564
  var y = 0;
556
- while (lastTop > 0) {
565
+ while (lastTop >= 0) {
557
566
  var rowHeight = this.getVisibleRowHeight(lastTop, state);
558
567
  y += rowHeight;
559
568
  if (y >= visibleHeight) {
560
- return Math.min(lastTop + 1, rowCount - 1);
569
+ return clamp(lastTop + 1, 0, rowCount - 1);
561
570
  }
562
571
  lastTop -= 1;
563
572
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GridMetricCalculator.js","names":["clamp","GridUtils","isExpandableGridModel","getOrThrow","map","key","defaultValue","undefined","value","get","Error","trimMap","cacheSize","GridMetricCalculator","CACHE_SIZE","targetSize","Math","floor","size","iter","keys","delete","next","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","Map","x","i","set","constructor","userColumnWidths","userRowHeights","calculatedColumnWidths","calculatedRowHeights","fontWidths","modelRows","modelColumns","movedRows","movedColumns","getMetrics","state","left","top","leftOffset","topOffset","width","height","theme","model","draggingColumn","rowHeight","rowHeaderWidth","rowFooterWidth","columnWidth","columnHeaderHeight","minScrollHandleSize","scrollBarSize","clear","columnCount","rowCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnHeaderMaxDepth","firstRow","getFirstRow","firstColumn","getFirstColumn","gridX","getGridX","gridY","getGridY","treePaddingX","hasExpandableRows","calculateTreePaddingX","treePaddingY","visibleRowHeights","getVisibleRowHeights","visibleColumnWidths","getVisibleColumnWidths","visibleRows","Array","from","visibleColumns","getFloatingRowHeights","getFloatingColumnWidths","visibleColumnXs","getVisibleColumnXs","visibleRowYs","getVisibleRowYs","bottom","length","right","bottomViewport","getBottomViewport","rightViewport","getRightViewport","floatingTopHeight","getFloatingTopHeight","floatingBottomHeight","getFloatingBottomHeight","floatingLeftWidth","getFloatingLeftWidth","floatingRightWidth","getFloatingRightWidth","columnWidthValues","values","rowHeightValues","maxX","reduce","w","maxY","y","h","lastLeft","getLastLeft","lastTop","getLastTop","scrollableContentWidth","scrollableContentHeight","scrollableViewportWidth","scrollableViewportHeight","hasHorizontalBar","horizontalBarHeight","hasVerticalBar","verticalBarWidth","barWidth","barHeight","barLeft","barTop","horizontalHandlePercent","verticalHandlePercent","handleWidth","handleHeight","leftColumnWidth","topRowHeight","leftOffsetPercent","topOffsetPercent","horizontalScrollPercent","verticalScrollPercent","scrollX","scrollY","floatingRows","getFloatingRowYs","floatingColumns","getFloatingColumnXs","draggingColumns","range","push","has","getVisibleColumnWidth","allRows","concat","allColumns","getModelRows","getModelColumns","visibleRowTreeBoxes","getVisibleRowTreeBoxes","topVisible","getTopVisible","leftVisible","getLeftVisible","bottomVisible","getBottomVisible","rightVisible","getRightVisible","getVisibleHeight","getVisibleWidth","getFirstIndex","itemSizes","getModelIndex","modelIndex","getModelColumn","bind","getModelRow","visibleWidth","min","visibleHeight","getVisibleRowHeight","getTopForTopVisible","getTopForBottomVisible","availableHeight","getLeftForLeftVisible","getLeftForRightVisible","availableWidth","rowHeights","row","columnWidths","column","columnWidthMap","rowHeightMap","treeDepthIndent","treeHorizontalPadding","forEach","modelRow","isRowExpandable","depth","depthForRow","x1","x2","y1","y2","floatingWidth","floatingHeight","rowY","columnX","getLastIndexViewport","items","itemXs","maxSize","defaultItemSize","lastIndex","dataSize","ceil","getVisibleItemSize","userSizes","calculateSize","calculatedSize","calculateRowHeight","modelColumn","calculateColumnWidth","visibleRow","visibleColumn","hasVisibleColumn","autoSizeRows","cachedValue","autoSizeColumns","minColumnWidth","headerWidth","calculateColumnHeaderWidth","dataWidth","calculateColumnDataWidth","headerFont","headerHorizontalPadding","headerText","textForColumnHeader","headerFontWidth","getWidthForFont","font","cellHorizontalPadding","fontWidth","rowsPerPage","iterateAllItems","text","textForCell","cellPadding","MAX_COLUMN_WIDTH","treePadding","context","textMetrics","measureText","setColumnWidth","resetColumnWidth","setRowHeight","resetRowHeight"],"sources":["../src/GridMetricCalculator.ts"],"sourcesContent":["import clamp from 'lodash.clamp';\nimport GridModel from './GridModel';\nimport type {\n GridMetrics,\n BoxCoordinates,\n Coordinate,\n CoordinateMap,\n VisibleIndex,\n VisibleToModelMap,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n SizeMap,\n} from './GridMetrics';\nimport GridUtils from './GridUtils';\nimport { GridFont, GridTheme } from './GridTheme';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n\nexport interface GridMetricState {\n // The top/left cell of the scrolled viewport\n left: VisibleIndex;\n top: VisibleIndex;\n\n // The scroll offset within the top/left of the viewport\n leftOffset: Coordinate;\n topOffset: Coordinate;\n\n // Width and height of the total canvas area\n width: number;\n height: number;\n\n // The canvas context\n context: CanvasRenderingContext2D;\n\n // The grid theme\n theme: GridTheme;\n\n // The model used by the grid\n model: GridModel;\n\n // Moved columns/rows in the grid\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n\n // Whether the scrollbars are currently being dragged\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n\n draggingColumn: DraggingColumn | null;\n}\n\n/**\n * Retrieve a value from a map. If the value is not found and no default value is provided, throw.\n * Use when the value _must_ be present\n * @param map The map to get the value from\n * @param key The key to fetch the value for\n * @param defaultValue A default value to set if the key is not present\n * @returns The value set for that key\n */\nexport function getOrThrow<K, V>(\n map: Map<K, V>,\n key: K,\n defaultValue: V | undefined = undefined\n): V {\n const value = map.get(key) ?? defaultValue;\n if (value !== undefined) {\n return value;\n }\n\n throw new Error(`Missing value for key ${key}`);\n}\n\n/**\n * Trim the provided map in place. Trims oldest inserted items down to the target size if the cache size is exceeded.\n * Instead of trimming one item on every tick, we trim half the items so there isn't a cache clear on every new item.\n * @param map The map to trim\n * @param cacheSize The maximum number of elements to cache\n * @param targetSize The number of elements to reduce the cache down to if `cacheSize` is exceeded\n */\nexport function trimMap(\n map: Map<unknown, unknown>,\n cacheSize = GridMetricCalculator.CACHE_SIZE,\n targetSize = Math.floor(cacheSize / 2)\n): void {\n if (map.size > cacheSize) {\n const iter = map.keys();\n while (map.size > targetSize) {\n map.delete(iter.next().value);\n }\n }\n}\n\n/**\n * Get the coordinates of floating items in one dimension.\n * Can be used for getting the y coordinates of floating rows, or x coordinates of floating columns, calculated using the `sizeMap` passed in.\n * @param startCount The number of floating items at the start (ie. `floatingTopRowCount` for rows, `floatingLeftColumnCount` for columns)\n * @param endCount The number of floating items at the end (ie. `floatingBottomRowCount` for rows, `floatingRightColumnCount` for columns)\n * @param totalCount Total number of items in this dimension (ie. `rowCount` for rows, `columnCount` for columns)\n * @param max The max coordinate value (ie. `maxY` for rows, `maxX` for columns)\n * @param sizeMap Map from index to size of item (ie. `rowHeightMap` for rows, `columnWidthMap` for columns)\n */\nexport function getFloatingCoordinates(\n startCount: number,\n endCount: number,\n totalCount: number,\n max: number,\n sizeMap: SizeMap\n): CoordinateMap {\n const coordinates = new Map();\n let x = 0;\n for (let i = 0; i < startCount && i < totalCount; i += 1) {\n coordinates.set(i, x);\n x += getOrThrow(sizeMap, i);\n }\n\n x = max;\n for (let i = 0; i < endCount && totalCount - i - 1 >= 0; i += 1) {\n x -= getOrThrow(sizeMap, totalCount - i - 1);\n coordinates.set(totalCount - i - 1, x);\n }\n return coordinates;\n}\n\n/**\n * Class to calculate all the metrics for drawing a grid.\n * Call getMetrics() with the state to get the full metrics.\n * Override this class and override the individual methods to provide additional functionality.\n */\nexport class GridMetricCalculator {\n /** The size of the caches this calculator stores */\n static CACHE_SIZE = 10000;\n\n /** The maximum column width as a percentage of the full grid */\n static MAX_COLUMN_WIDTH = 0.8;\n\n /** User set column widths */\n protected userColumnWidths: ModelSizeMap;\n\n /** User set row heights */\n protected userRowHeights: ModelSizeMap;\n\n /** Calculated column widths based on cell contents */\n protected calculatedColumnWidths: ModelSizeMap;\n\n /** Calculated row heights based on cell contents */\n protected calculatedRowHeights: ModelSizeMap;\n\n /** Cache of fonts to estimated width of one char */\n protected fontWidths: Map<string, number>;\n\n /** Map from visible index to model index for rows (e.g. reversing movedRows operations) */\n protected modelRows: VisibleToModelMap;\n\n /** Map from visible index to model index for columns (e.g. reversing movedColumns operations) */\n protected modelColumns: VisibleToModelMap;\n\n /** List of moved row operations. Need to track the previous value so we know if modelRows needs to be cleared. */\n protected movedRows: MoveOperation[];\n\n /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */\n protected movedColumns: MoveOperation[];\n\n constructor({\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n calculatedRowHeights = new Map(),\n fontWidths = new Map(),\n modelRows = new Map(),\n modelColumns = new Map(),\n movedRows = [] as MoveOperation[],\n movedColumns = [] as MoveOperation[],\n } = {}) {\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.fontWidths = fontWidths;\n\n // Need to track the last moved rows/columns array so we know if we need to reset our models cache\n this.modelRows = modelRows;\n this.modelColumns = modelColumns;\n this.movedRows = movedRows;\n this.movedColumns = movedColumns;\n }\n\n /**\n * Get the metrics for the provided metric state\n * @params state The state to get metrics for\n * @returns The full metrics\n */\n getMetrics(state: GridMetricState): GridMetrics {\n const {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n theme,\n model,\n movedRows,\n movedColumns,\n draggingColumn,\n } = state;\n const {\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n columnWidth,\n columnHeaderHeight,\n minScrollHandleSize,\n scrollBarSize,\n } = theme;\n\n if (movedRows !== this.movedRows) {\n this.movedRows = movedRows;\n this.modelRows.clear();\n }\n\n if (movedColumns !== this.movedColumns) {\n this.movedColumns = movedColumns;\n this.modelColumns.clear();\n }\n\n const {\n columnCount,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnHeaderMaxDepth,\n } = model;\n\n // Get some basic metrics\n const firstRow = this.getFirstRow(state);\n const firstColumn = this.getFirstColumn(state);\n\n const gridX = this.getGridX(state);\n const gridY = this.getGridY(state);\n\n const treePaddingX =\n isExpandableGridModel(model) && model.hasExpandableRows\n ? this.calculateTreePaddingX(state)\n : 0;\n const treePaddingY = 0; // We don't support trees on columns (at least not yet)\n\n let visibleRowHeights = this.getVisibleRowHeights(state);\n let visibleColumnWidths = this.getVisibleColumnWidths(\n state,\n firstColumn,\n treePaddingX\n );\n\n // Calculate the metrics for the main grid\n const visibleRows = Array.from(visibleRowHeights.keys());\n const visibleColumns = Array.from(visibleColumnWidths.keys());\n\n // Add the floating row heights/column widths\n // TODO #316: Create an allRowHeights/allColumnWidths maps\n visibleRowHeights = new Map([\n ...visibleRowHeights,\n ...this.getFloatingRowHeights(state),\n ]);\n visibleColumnWidths = new Map([\n ...visibleColumnWidths,\n ...this.getFloatingColumnWidths(state),\n ]);\n\n let visibleColumnXs = this.getVisibleColumnXs(\n visibleColumnWidths,\n visibleColumns,\n leftOffset\n );\n let visibleRowYs = this.getVisibleRowYs(\n visibleRowHeights,\n visibleRows,\n topOffset\n );\n\n const bottom =\n visibleRows.length > 0 ? visibleRows[visibleRows.length - 1] : top;\n const right =\n visibleColumns.length > 0\n ? visibleColumns[visibleColumns.length - 1]\n : left;\n\n const bottomViewport = this.getBottomViewport(\n state,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n const rightViewport = this.getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n );\n\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n\n const columnWidthValues = Array.from(visibleColumnWidths.values());\n const rowHeightValues = Array.from(visibleRowHeights.values());\n const maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;\n const maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;\n\n const lastLeft = this.getLastLeft(\n state,\n null,\n width - gridX - scrollBarSize - rowFooterWidth\n );\n const lastTop = this.getLastTop(\n state,\n null,\n height - gridY - scrollBarSize - floatingBottomHeight\n );\n\n // How much total space the content will take\n const scrollableContentWidth = leftOffset + maxX + rowFooterWidth;\n const scrollableContentHeight = topOffset + maxY;\n\n // Visible space available in the canvas viewport\n const scrollableViewportWidth = width - gridX;\n const scrollableViewportHeight = height - gridY;\n\n // Calculate some metrics for the scroll bars\n const hasHorizontalBar =\n lastLeft > 0 || scrollableContentWidth > scrollableViewportWidth;\n const horizontalBarHeight = hasHorizontalBar ? scrollBarSize : 0;\n const hasVerticalBar =\n lastTop > 0 ||\n scrollableContentHeight > scrollableViewportHeight - horizontalBarHeight;\n const verticalBarWidth = hasVerticalBar ? scrollBarSize : 0;\n const barWidth = width - rowHeaderWidth - verticalBarWidth;\n const barHeight = height - columnHeaderHeight - horizontalBarHeight;\n const barLeft = rowHeaderWidth;\n const barTop = columnHeaderHeight;\n\n // How big the scroll handle is relative to the bar\n const horizontalHandlePercent =\n columnCount === 1\n ? barWidth / scrollableContentWidth\n : (columnCount - lastLeft) / columnCount;\n\n const verticalHandlePercent =\n rowCount === 1\n ? barHeight / scrollableContentHeight\n : (rowCount - lastTop) / rowCount;\n\n const handleWidth = hasHorizontalBar\n ? clamp(\n barWidth * horizontalHandlePercent,\n minScrollHandleSize,\n barWidth - 1\n )\n : 0;\n const handleHeight = hasVerticalBar\n ? clamp(\n barHeight * verticalHandlePercent,\n minScrollHandleSize,\n barHeight - 1\n )\n : 0;\n\n const leftColumnWidth = getOrThrow(visibleColumnWidths, left, 0);\n const topRowHeight = getOrThrow(visibleRowHeights, top, 0);\n const leftOffsetPercent =\n leftColumnWidth > 0 ? leftOffset / leftColumnWidth : 0;\n const topOffsetPercent = topRowHeight > 0 ? topOffset / topRowHeight : 0;\n\n // How much of the available space has been scrolled\n const horizontalScrollPercent =\n columnCount === 1\n ? leftOffset / (scrollableContentWidth - scrollableViewportWidth)\n : (left + leftOffsetPercent) / lastLeft;\n const verticalScrollPercent =\n rowCount === 1\n ? topOffset / (scrollableContentHeight - scrollableViewportHeight)\n : (top + topOffsetPercent) / lastTop;\n\n const scrollX = hasHorizontalBar\n ? horizontalScrollPercent * (barWidth - handleWidth)\n : 0;\n const scrollY = hasVerticalBar\n ? verticalScrollPercent * (barHeight - handleHeight)\n : 0;\n\n // Now add the floating sections positions\n let floatingRows: ModelIndex[] = [];\n if (floatingTopRowCount > 0 || floatingBottomRowCount > 0) {\n floatingRows = [\n ...Array(floatingTopRowCount).keys(),\n ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1),\n ];\n visibleRowYs = new Map([\n ...visibleRowYs,\n ...this.getFloatingRowYs(\n state,\n visibleRowHeights,\n Math.floor(height - gridY - horizontalBarHeight)\n ),\n ]);\n }\n\n let floatingColumns: ModelIndex[] = [];\n if (floatingLeftColumnCount > 0 || floatingRightColumnCount > 0) {\n floatingColumns = [\n ...Array(floatingLeftColumnCount).keys(),\n ...[...Array(floatingRightColumnCount).keys()].map(\n i => columnCount - i - 1\n ),\n ];\n visibleColumnXs = new Map([\n ...visibleColumnXs,\n ...this.getFloatingColumnXs(\n state,\n visibleColumnWidths,\n Math.floor(width - gridX - verticalBarWidth)\n ),\n ]);\n }\n\n const draggingColumns: VisibleIndex[] = [];\n if (draggingColumn) {\n for (\n let i = draggingColumn.range[0];\n i <= draggingColumn.range[1];\n i += 1\n ) {\n draggingColumns.push(i);\n if (!visibleColumnWidths.has(i)) {\n visibleColumnWidths.set(i, this.getVisibleColumnWidth(i, state));\n }\n\n if (!visibleColumnXs.has(i)) {\n visibleColumnXs.set(i, 0);\n }\n }\n }\n\n const allRows = visibleRows.concat(floatingRows);\n const allColumns = visibleColumns\n .concat(floatingColumns)\n .concat(draggingColumns);\n const modelRows = this.getModelRows(allRows, state);\n const modelColumns = this.getModelColumns(allColumns, state);\n\n const visibleRowTreeBoxes = this.getVisibleRowTreeBoxes(\n visibleRowHeights,\n modelRows,\n state\n );\n\n // Calculate the visible viewport based on scroll position and floating sections\n const topVisible = this.getTopVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows\n );\n const leftVisible = this.getLeftVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns\n );\n const bottomVisible =\n lastTop > 0\n ? this.getBottomVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows,\n gridY\n )\n : bottom;\n const rightVisible =\n lastLeft > 0\n ? this.getRightVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n )\n : right;\n\n const {\n fontWidths,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths,\n } = this;\n\n return {\n // Row/Column metrics from model\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n rowCount,\n columnWidth,\n columnCount,\n columnHeaderHeight,\n\n // Floating row and column counts\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n\n // The grid offset from the top left\n gridX,\n gridY,\n\n // Index of non-hidden row/columns\n firstRow,\n firstColumn,\n\n // The amount of padding for tree (if applicable)\n treePaddingX,\n treePaddingY,\n\n // What viewport is currently visible, limited by data size\n left,\n top,\n bottom,\n right,\n topOffset,\n leftOffset,\n\n // Bottom and right that are fully visible, not overlapped by scroll bars or anything\n topVisible,\n leftVisible,\n bottomVisible,\n rightVisible,\n\n // Bottom and right of the viewport, not limited by data size\n bottomViewport,\n rightViewport,\n\n // Canvas width/height\n width,\n height,\n\n // Max x/y coordinate of the grid (does not include headers)\n maxX,\n maxY,\n\n // Last valid column/row that can be the left/top of the grid\n lastLeft,\n lastTop,\n\n // Scroll bar metrics\n barHeight,\n barTop,\n barWidth,\n barLeft,\n handleHeight,\n handleWidth,\n hasHorizontalBar,\n hasVerticalBar,\n verticalBarWidth,\n horizontalBarHeight,\n\n // The vertical x/y scroll amount\n scrollX,\n scrollY,\n\n scrollableContentWidth,\n scrollableContentHeight,\n\n scrollableViewportWidth,\n scrollableViewportHeight,\n\n // Array of visible rows/columns, by grid index\n visibleRows,\n visibleColumns,\n\n // Array of floating rows/columns, by grid index\n floatingRows,\n floatingColumns,\n\n // Array of all rows/columns, visible and floating, by grid index\n allRows,\n allColumns,\n\n // Map of the height/width of visible rows/columns\n // TODO #316: This should be split into allRowHeights/visibleRowHeights/floatingRowHeights ideally\n visibleRowHeights,\n visibleColumnWidths,\n\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n\n // Map of the X/Y coordinates of the rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n\n // The boxes user can click on for expanding/collapsing tree rows\n visibleRowTreeBoxes,\n\n // Mapping from visible row indexes to the model row/columns they pull from\n modelRows,\n modelColumns,\n\n movedRows,\n movedColumns,\n\n // Map of the width of the fonts\n fontWidths,\n\n // Map of user set column/row width/height\n userColumnWidths,\n userRowHeights,\n\n // Map of calculated row/column height/width\n calculatedRowHeights,\n calculatedColumnWidths,\n\n columnHeaderMaxDepth,\n };\n }\n\n /**\n * The x offset of the grid\n * @param state The current grid state\n * @returns x value of the left side of the first cell\n */\n getGridX(state: GridMetricState): Coordinate {\n const { theme } = state;\n const { rowHeaderWidth } = theme;\n\n return rowHeaderWidth;\n }\n\n /**\n * The y offset of the grid\n * @param state The current grid state\n * @returns y value of the top side of the first cell\n */\n getGridY(state: GridMetricState): Coordinate {\n const { theme, model } = state;\n const { columnHeaderHeight } = theme;\n const { columnHeaderMaxDepth } = model;\n\n return columnHeaderMaxDepth * columnHeaderHeight;\n }\n\n /**\n * The height of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleRowHeights All the visible row heights\n * @returns The visible height in pixels\n */\n getVisibleHeight(\n state: GridMetricState,\n visibleRowHeights: SizeMap = this.getFloatingRowHeights(state)\n ): number {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n\n return (\n height - floatingBottomHeight - floatingTopHeight - gridY - scrollBarSize\n );\n }\n\n /**\n * The width of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleColumnWidths All the visible column widths\n * @returns The visible width in pixels\n */\n getVisibleWidth(\n state: GridMetricState,\n visibleColumnWidths: SizeMap = this.getFloatingColumnWidths(state)\n ): number {\n const { width, theme } = state;\n const { scrollBarSize, rowFooterWidth } = theme;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n\n return (\n width -\n floatingLeftWidth -\n floatingRightWidth -\n gridX -\n scrollBarSize -\n rowFooterWidth\n );\n }\n\n /**\n * Retrieve the index of the first non-hidden item\n * @param itemSizes The size of the items in this dimension\n * @param getModelIndex A function to map from the Index to the ModelIndex\n * @param state The current grid state\n * @returns The first item that is not hidden\n */\n getFirstIndex(\n itemSizes: ModelSizeMap,\n getModelIndex: (\n visibleIndex: VisibleIndex,\n state: GridMetricState\n ) => ModelIndex,\n state: GridMetricState\n ): VisibleIndex {\n // We only need to check at the very most the number of items the user has hidden + 1\n const max = itemSizes.size + 1;\n for (let i = 0; i < max; i += 1) {\n const modelIndex = getModelIndex(i, state);\n if (itemSizes.get(modelIndex) !== 0) {\n return i;\n }\n }\n return 0;\n }\n\n /**\n * Get the first column index that isn't hidden\n * @param state The current grid state\n * @returns The first column that is not hidden\n */\n getFirstColumn(state: GridMetricState): VisibleIndex {\n return this.getFirstIndex(\n this.userColumnWidths,\n this.getModelColumn.bind(this),\n state\n );\n }\n\n /**\n * Get the first row index that isn't hidden\n * @param state The current grid state\n * @returns The first row that is not hidden\n */\n getFirstRow(state: GridMetricState): VisibleIndex {\n return this.getFirstIndex(\n this.userRowHeights,\n this.getModelRow.bind(this),\n state\n );\n }\n\n /**\n * Get the last column that can be the left most column (e.g. scrolled to the right)\n * If no right column is provided, then the last column is used.\n * @param state The current grid state\n * @param right The right-most column to be visible, or null to default to last cell\n * @param visibleWidth The width of the \"visible\" area (excluding floating items)\n * @returns The index of the last left visible column\n */\n getLastLeft(\n state: GridMetricState,\n right: VisibleIndex | null,\n visibleWidth: number\n ): VisibleIndex {\n const { model } = state;\n const { columnCount, floatingRightColumnCount } = model;\n\n let lastLeft = Math.max(0, columnCount - floatingRightColumnCount - 1);\n if (right != null) {\n lastLeft = right;\n }\n let x = 0;\n while (lastLeft > 0) {\n const columnWidth = this.getVisibleColumnWidth(lastLeft, state);\n x += columnWidth;\n\n if (x >= visibleWidth) {\n return Math.min(lastLeft + 1, right ?? columnCount - 1);\n }\n\n lastLeft -= 1;\n }\n\n return 0;\n }\n\n /**\n * The last row that can be the top row (e.g. scrolled to the bottom)\n * If no bottom row is provided, then the last row that is not floating is used\n * @param state The current grid state\n * @param bottom The bottom-most row to be visible, or null to default to last cell\n * @param visibleHeight The height of the \"visible\" area (excluding floating items)\n * @returns The index of the last top visible row\n */\n getLastTop(\n state: GridMetricState,\n bottom: VisibleIndex | null,\n visibleHeight: number\n ): VisibleIndex {\n const { model } = state;\n const { rowCount, floatingBottomRowCount } = model;\n\n let lastTop = Math.max(0, rowCount - floatingBottomRowCount - 1);\n if (bottom != null) {\n lastTop = bottom;\n }\n let y = 0;\n while (lastTop > 0) {\n const rowHeight = this.getVisibleRowHeight(lastTop, state);\n y += rowHeight;\n\n if (y >= visibleHeight) {\n return Math.min(lastTop + 1, rowCount - 1);\n }\n\n lastTop -= 1;\n }\n\n return 0;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `topVisible` is completely visible, taking the floating rows into account.\n * The `top` row is at the top underneath any floating rows, whereas `topVisible` is visible below the floating rows.\n * If there are no floating rows, they should be the same value.\n * @param state The grid metric state\n * @param topVisible The top row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForTopVisible(\n state: GridMetricState,\n topVisible: VisibleIndex\n ): VisibleIndex {\n const floatingTopHeight = this.getFloatingTopHeight(state);\n let top = topVisible;\n let y = 0;\n while (top > 0 && y < floatingTopHeight) {\n top -= 1;\n y += this.getVisibleRowHeight(top, state);\n }\n return top;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `bottomVisible` is completely visible\n * at the bottom of the visible viewport, taking the floating rows into account.\n * @param state The grid metric state\n * @param bottomVisible The bottom row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForBottomVisible(\n state: GridMetricState,\n bottomVisible: VisibleIndex\n ): VisibleIndex {\n const { height } = state;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(state);\n const availableHeight = height - gridY - floatingBottomHeight;\n return this.getLastTop(state, bottomVisible, availableHeight);\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `leftVisible` is completely visible\n * at the left of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param leftVisible The left column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForLeftVisible(\n state: GridMetricState,\n leftVisible: VisibleIndex\n ): VisibleIndex {\n const floatingLeftWidth = this.getFloatingLeftWidth(state);\n let left = leftVisible;\n let x = 0;\n while (left > 0 && x < floatingLeftWidth) {\n left -= 1;\n x += this.getVisibleColumnWidth(left, state);\n }\n return left;\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `rightVisible` is completely visible\n * at the right of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param rightVisible The right column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForRightVisible(\n state: GridMetricState,\n rightVisible: VisibleIndex\n ): VisibleIndex {\n const { width } = state;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(state);\n const availableWidth = width - gridX - floatingRightWidth;\n return this.getLastLeft(state, rightVisible, availableWidth);\n }\n\n /**\n * Retrieve a map of the height of each floating row\n * @param state The grid metric state\n * @returns The heights of all the floating rows\n */\n getFloatingRowHeights(state: GridMetricState): SizeMap {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n const rowHeights = new Map();\n for (let i = 0; i < floatingTopRowCount && i < rowCount; i += 1) {\n rowHeights.set(i, this.getVisibleRowHeight(i, state));\n }\n\n for (\n let i = 0;\n i < floatingBottomRowCount && rowCount - i - 1 >= 0;\n i += 1\n ) {\n const row = rowCount - i - 1;\n rowHeights.set(row, this.getVisibleRowHeight(row, state));\n }\n\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the height of all the visible rows (non-floating)\n * @param state The grid metric state\n * @returns The heights of all the visible rows\n */\n getVisibleRowHeights(state: GridMetricState): SizeMap {\n const { top, topOffset, height, model } = state;\n\n let y = 0;\n let row = top;\n const rowHeights = new Map();\n const { rowCount } = model;\n while (y < height + topOffset && row < rowCount) {\n const rowHeight = this.getVisibleRowHeight(row, state);\n rowHeights.set(row, rowHeight);\n y += rowHeight;\n row += 1;\n }\n\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the width of each floating column\n * @param state The grid metric state\n * @param firstColumn The first non-hidden column\n * @param treePaddingX The amount of padding taken up for the tree expansion buttons\n * @returns The widths of all the floating columns\n */\n getFloatingColumnWidths(\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): SizeMap {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n const columnWidths = new Map();\n for (let i = 0; i < floatingLeftColumnCount && i < columnCount; i += 1) {\n columnWidths.set(\n i,\n this.getVisibleColumnWidth(i, state, firstColumn, treePaddingX)\n );\n }\n\n for (\n let i = 0;\n i < floatingRightColumnCount && columnCount - i - 1 >= 0;\n i += 1\n ) {\n const column = columnCount - i - 1;\n columnWidths.set(\n column,\n this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX)\n );\n }\n\n return columnWidths;\n }\n\n /**\n * Retrieve a map of the width of all the visible columns (non-floating)\n * @param state The grid metric state\n * @returns The widths of all the visible columns\n */\n getVisibleColumnWidths(\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): SizeMap {\n const { left, leftOffset, width, model } = state;\n\n let x = 0;\n let column = left;\n const columnWidths = new Map();\n const { columnCount } = model;\n while (x < width + leftOffset && column < columnCount) {\n const columnWidth = this.getVisibleColumnWidth(\n column,\n state,\n firstColumn,\n treePaddingX\n );\n columnWidths.set(column, columnWidth);\n x += columnWidth;\n column += 1;\n }\n\n return columnWidths;\n }\n\n /**\n * Retrieve a map of all the floating columns to their x coordinate\n * @param state The grid metric state\n * @param columnWidthMap Map from visible index to column width\n * @param maxX The maximum X size for the grid\n * @returns Map of the x coordinate of all floating columns\n */\n getFloatingColumnXs(\n state: GridMetricState,\n columnWidthMap: SizeMap,\n maxX: Coordinate\n ): CoordinateMap {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n return getFloatingCoordinates(\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n maxX,\n columnWidthMap\n );\n }\n\n /**\n * Retrieve a map of all the visible columns to their x coordinate.\n * Starts at leftOffset with the first index in `visibleColumns`, then\n * calculates all the coordinates from there\n * @param visibleColumnWidths Map of visible column index to widths\n * @param visibleColumns All visible columns\n * @param leftOffset The left scroll offset\n * @returns Map of the x coordinate of all visible columns\n */\n getVisibleColumnXs(\n visibleColumnWidths: SizeMap,\n visibleColumns: VisibleIndex[],\n leftOffset: number\n ): CoordinateMap {\n const visibleColumnXs = new Map();\n let x = -leftOffset;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n visibleColumnXs.set(column, x);\n x += columnWidth;\n }\n\n return visibleColumnXs;\n }\n\n /**\n * Retrieve a map of all the floating rows to their y coordinate\n * @param state The grid metric state\n * @param rowHeightMap Map of visible index to row height\n * @param maxY The maximum Y size for the grid\n * @returns Map of the y coordinate of all floating rows\n */\n getFloatingRowYs(\n state: GridMetricState,\n rowHeightMap: SizeMap,\n maxY: Coordinate\n ): CoordinateMap {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n return getFloatingCoordinates(\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n maxY,\n rowHeightMap\n );\n }\n\n /**\n * Retrieve a map of all the visible rows to their y coordinate.\n * Starts at topOffset with the first index in `visibleRows`, then\n * calculates all the coordinates from there\n * @param visibleRowHeights Map of visible row index to heights\n * @param visibleRows All visible rows\n * @param topOffset The top scroll offset\n * @returns Map of the y coordinate of all visible rows\n */\n getVisibleRowYs(\n visibleRowHeights: SizeMap,\n visibleRows: VisibleIndex[],\n topOffset: number\n ): CoordinateMap {\n const visibleRowYs = new Map();\n let y = -topOffset;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = getOrThrow(visibleRowHeights, row);\n visibleRowYs.set(row, y);\n y += rowHeight;\n }\n\n return visibleRowYs;\n }\n\n /**\n * Calculates the tree box click areas that are visible. In relation to the columnX/rowY\n * @param visibleRowHeights Map of visible index to row height\n * @param modelRows Map from visible `Index` to `ModelIndex`\n * @param state The grid metric state\n * @returns Coordinates of tree boxes for each row\n */\n getVisibleRowTreeBoxes(\n visibleRowHeights: SizeMap,\n modelRows: VisibleToModelMap,\n state: GridMetricState\n ): Map<VisibleIndex, BoxCoordinates> {\n const visibleRowTreeBoxes = new Map();\n const { model, theme } = state;\n const { treeDepthIndent, treeHorizontalPadding } = theme;\n\n if (isExpandableGridModel(model) && model.hasExpandableRows) {\n visibleRowHeights.forEach((rowHeight, row) => {\n const modelRow = getOrThrow(modelRows, row);\n if (model.isRowExpandable(modelRow)) {\n const depth = model.depthForRow(modelRow);\n const x1 = depth * treeDepthIndent + treeHorizontalPadding;\n const x2 = (depth + 1) * treeDepthIndent + treeHorizontalPadding;\n const y1 = 0;\n const y2 = rowHeight;\n visibleRowTreeBoxes.set(row, { x1, y1, x2, y2 });\n }\n });\n }\n\n return visibleRowTreeBoxes;\n }\n\n /**\n * Get the total width of the floating columns on the left\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating left section\n */\n getFloatingLeftWidth(\n state: GridMetricState,\n columnWidths: SizeMap = this.getFloatingColumnWidths(state)\n ): number {\n const { model } = state;\n const { floatingLeftColumnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, i);\n }\n return floatingWidth;\n }\n\n /**\n * Get the total width of the floating columns on the right\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating right section\n */\n getFloatingRightWidth(\n state: GridMetricState,\n columnWidths: SizeMap = this.getFloatingColumnWidths(state)\n ): number {\n const { model } = state;\n const { floatingRightColumnCount, columnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, columnCount - i - 1);\n }\n\n return floatingWidth;\n }\n\n /**\n * Get the total height of the floating rows on the top\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating top section\n */\n getFloatingTopHeight(\n state: GridMetricState,\n rowHeights: SizeMap = this.getFloatingRowHeights(state)\n ): number {\n const { model } = state;\n const { floatingTopRowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingTopRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, i);\n }\n return floatingHeight;\n }\n\n /**\n * Get the total height of the floating rows on the bottom\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating bottom section\n */\n getFloatingBottomHeight(\n state: GridMetricState,\n rowHeights: SizeMap = this.getFloatingRowHeights(state)\n ): number {\n const { model } = state;\n const { floatingBottomRowCount, rowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingBottomRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, rowCount - i - 1);\n }\n return floatingHeight;\n }\n\n /**\n * Retrieve the index of the first fully visible row in the \"visible\" viewport of the grid.\n * E.g. First row visible after the floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @returns Index of the top visible row\n */\n getTopVisible(\n state: GridMetricState,\n visibleRowYs: CoordinateMap,\n visibleRowHeights: SizeMap,\n visibleRows: VisibleIndex[]\n ): VisibleIndex {\n const floatingHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const y = getOrThrow(visibleRowYs, row);\n if (y >= floatingHeight) {\n return row;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the first fully visible column in the \"visible\" viewport of the grid.\n * E.g. First column visible after the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible row indexes\n * @returns Index of the left visible column\n */\n getLeftVisible(\n state: GridMetricState,\n visibleColumnXs: CoordinateMap,\n visibleColumnWidths: SizeMap,\n visibleColumns: VisibleIndex[]\n ): VisibleIndex {\n const floatingWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const x = getOrThrow(visibleColumnXs, column);\n if (x >= floatingWidth) {\n return column;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible row in the \"visible\" viewport of the grid.\n * E.g. Last row visible before the bottom floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @param gridY The starting y coordinate of the grid\n * @returns Index of the bottom visible row\n */\n getBottomVisible(\n state: GridMetricState,\n visibleRowYs: CoordinateMap,\n visibleRowHeights: SizeMap,\n visibleRows: VisibleIndex[],\n gridY: Coordinate\n ): VisibleIndex {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const floatingHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const visibleHeight = height - gridY - scrollBarSize - floatingHeight;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n if (rowY + rowHeight <= visibleHeight) {\n return row;\n }\n }\n\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible column in the \"visible\" viewport of the grid.\n * E.g. Last column visible before the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible column indexes\n * @returns Index of the right visible column\n */\n getRightVisible(\n state: GridMetricState,\n visibleColumnXs: CoordinateMap,\n visibleColumnWidths: SizeMap,\n visibleColumns: VisibleIndex[],\n gridX: Coordinate\n ): VisibleIndex {\n const { width, theme } = state;\n const { scrollBarSize } = theme;\n const floatingWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const visibleWidth = width - gridX - scrollBarSize - floatingWidth;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = getOrThrow(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n if (columnX + columnWidth <= visibleWidth) {\n return column;\n }\n }\n\n return 0;\n }\n\n /**\n * Retrieve the possible bottom of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleRows Array of visible row indexes\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @returns The index of the bottom viewport possible\n */\n getBottomViewport(\n state: GridMetricState,\n visibleRows: VisibleIndex[],\n visibleRowYs: CoordinateMap,\n visibleRowHeights: SizeMap\n ): VisibleIndex {\n const { height, theme } = state;\n const { rowHeight } = theme;\n\n return this.getLastIndexViewport(\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n height,\n rowHeight\n );\n }\n\n /**\n * Retrieve the possible right of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleColumns Array of visible column indexes\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to width\n * @returns The index of the right viewport possible\n */\n getRightViewport(\n state: GridMetricState,\n visibleColumns: VisibleIndex[],\n visibleColumnXs: CoordinateMap,\n visibleColumnWidths: SizeMap\n ): VisibleIndex {\n const { width, theme } = state;\n const { columnWidth } = theme;\n\n return this.getLastIndexViewport(\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnWidth\n );\n }\n\n /**\n * Get the Index of the of the last index visible\n * @param items Array of visible item indexes\n * @param itemXs Map of index to coordinate\n * @param itemSizes Map of index to size\n * @param maxSize Full size of the grid\n * @param defaultItemSize Default size of an item\n * @returns The Index of the last index visible\n */\n getLastIndexViewport(\n items: VisibleIndex[],\n itemXs: CoordinateMap,\n itemSizes: SizeMap,\n maxSize: number,\n defaultItemSize: number\n ): VisibleIndex {\n let lastIndex = 0;\n let dataSize = 0;\n if (items.length > 0) {\n lastIndex = items[items.length - 1];\n dataSize =\n getOrThrow(itemXs, lastIndex) + getOrThrow(itemSizes, lastIndex);\n }\n\n if (dataSize < maxSize) {\n lastIndex += Math.ceil((maxSize - dataSize) / defaultItemSize);\n }\n\n return lastIndex;\n }\n\n /**\n * Get the size from the provided size map of the specified item\n * @param modelIndex The model index to get the size for\n * @param userSizes The user set sizes\n * @param calculateSize Method to calculate the size for this item\n * @returns The size from the provided size map of the specified item\n */\n getVisibleItemSize(\n modelIndex: ModelIndex,\n userSizes: ModelSizeMap,\n calculateSize: () => number\n ): number {\n // Always re-calculate the size of the item so the calculated size maps are populated\n const calculatedSize = calculateSize();\n return userSizes.get(modelIndex) ?? calculatedSize;\n }\n\n /**\n * Get the height of the specified row\n * @param row Index of the row to get the height of\n * @param state The grid metric state\n * @returns The height of the row specified\n */\n getVisibleRowHeight(row: VisibleIndex, state: GridMetricState): number {\n const modelRow = this.getModelRow(row, state);\n\n return this.getVisibleItemSize(modelRow, this.userRowHeights, () =>\n this.calculateRowHeight(row, modelRow, state)\n );\n }\n\n /**\n * Get the width of the specified column\n * @param column Index of the column to get the width of\n * @param state The grid metric state\n * @param firstColumn Index of first visible column\n * @param treePaddingX The amount of tree padding to add to the first visible column\n * @returns The width of the column\n */\n getVisibleColumnWidth(\n column: VisibleIndex,\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): number {\n const modelColumn = this.getModelColumn(column, state);\n\n return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () =>\n this.calculateColumnWidth(\n column,\n modelColumn,\n state,\n firstColumn,\n treePaddingX\n )\n );\n }\n\n /**\n * Get a map of VisibleIndex to ModelIndex\n * @param visibleRows Array of visible row indexes\n * @param state The grid metric state\n * @returns Map of VisibleIndex to ModelIndex\n */\n getModelRows(\n visibleRows: VisibleIndex[],\n state: GridMetricState\n ): VisibleToModelMap {\n const modelRows = new Map();\n for (let i = 0; i < visibleRows.length; i += 1) {\n const visibleRow = visibleRows[i];\n const modelRow = this.getModelRow(visibleRow, state);\n modelRows.set(visibleRow, modelRow);\n }\n return modelRows;\n }\n\n /**\n * Get the ModelIndex of the specified row\n * @param visibleRow Index of the row\n * @param state The grid metric state\n * @returns ModelIndex of the row\n */\n getModelRow(visibleRow: VisibleIndex, state: GridMetricState): ModelIndex {\n if (this.modelRows.has(visibleRow)) {\n return getOrThrow(this.modelRows, visibleRow);\n }\n const { movedRows } = state;\n const modelRow = GridUtils.getModelIndex(visibleRow, movedRows);\n this.modelRows.set(visibleRow, modelRow);\n return modelRow;\n }\n\n /**\n * Get a map of Index to ModelIndex. Applies the move operations to get the transformation.\n * @param visibleColumns Array of visible column indexes\n * @param state The grid metric state\n * @returns Map of Index to ModelIndex\n */\n getModelColumns(\n visibleColumns: VisibleIndex[],\n state: GridMetricState\n ): VisibleToModelMap {\n const modelColumns = new Map();\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const visibleColumn = visibleColumns[i];\n const modelColumn = this.getModelColumn(visibleColumn, state);\n modelColumns.set(visibleColumn, modelColumn);\n }\n return modelColumns;\n }\n\n /**\n * Get the ModelIndex of the specified column\n * @param visibleColumn Index of the column\n * @param state The grid metric state\n * @returns ModelIndex of the column\n */\n getModelColumn(\n visibleColumn: VisibleIndex,\n state: GridMetricState\n ): ModelIndex {\n const hasVisibleColumn = this.modelColumns.has(visibleColumn);\n if (hasVisibleColumn) {\n return getOrThrow(this.modelColumns, visibleColumn);\n }\n const { movedColumns } = state;\n const modelColumn = GridUtils.getModelIndex(visibleColumn, movedColumns);\n this.modelColumns.set(visibleColumn, modelColumn);\n return modelColumn;\n }\n\n /**\n * Calculate the height of the row specified.\n * @param row Index of the row to calculate the height for\n * @param modelRow ModelIndex of the row to calculate the height\n * @param state The grid metric state\n * @returns The height of the row\n */\n calculateRowHeight(\n row: VisibleIndex,\n modelRow: ModelIndex,\n state: GridMetricState\n ): number {\n const { theme } = state;\n const { autoSizeRows, rowHeight } = theme;\n if (!autoSizeRows) {\n return rowHeight;\n }\n\n const cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null) {\n return cachedValue;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.calculatedRowHeights.set(modelRow, Math.ceil(rowHeight));\n trimMap(this.calculatedRowHeights);\n return rowHeight;\n }\n\n /**\n * Calculates the column width based on the provided column model index\n * @param column Index of the column to calculate the width for\n * @param modelColumn ModelIndex of the column to calculate the width\n * @param state The grid metric state\n * @param firstColumn The first visible column\n * @param treePaddingX Tree padding offset for expandable rows\n * @returns The width of the column\n */\n calculateColumnWidth(\n column: VisibleIndex,\n modelColumn: ModelIndex,\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): number {\n const { theme } = state;\n const { autoSizeColumns, minColumnWidth } = theme;\n if (!autoSizeColumns) {\n const { columnWidth } = theme;\n return columnWidth;\n }\n\n const headerWidth = this.calculateColumnHeaderWidth(modelColumn, state);\n const dataWidth = this.calculateColumnDataWidth(modelColumn, state);\n const cachedValue = this.calculatedColumnWidths.get(modelColumn);\n let columnWidth = Math.ceil(Math.max(headerWidth, dataWidth));\n columnWidth = Math.max(minColumnWidth, columnWidth);\n if (cachedValue != null && cachedValue > columnWidth) {\n columnWidth = cachedValue;\n } else {\n this.calculatedColumnWidths.set(modelColumn, columnWidth);\n trimMap(this.calculatedColumnWidths);\n }\n\n if (column === firstColumn) {\n columnWidth += treePaddingX;\n }\n\n return columnWidth;\n }\n\n /**\n * Calculate the width of the specified column's header\n * @param modelColumn ModelIndex of the column to get the header width for\n * @param state The grid metric state\n * @returns The calculated width of the column header\n */\n calculateColumnHeaderWidth(\n modelColumn: ModelIndex,\n state: GridMetricState\n ): number {\n const { model, theme } = state;\n const { headerFont, headerHorizontalPadding } = theme;\n\n const headerText = model.textForColumnHeader(modelColumn, 0);\n if (headerText !== undefined && headerText !== '') {\n const headerFontWidth = this.getWidthForFont(headerFont, state);\n return headerText.length * headerFontWidth + headerHorizontalPadding * 2;\n }\n\n return headerHorizontalPadding * 2;\n }\n\n /**\n * Calculate the width of the specified column's data\n * @param modelColumn ModelIndex of the column to get the data width for\n * @param state The grid metric state\n * @returns The calculated width of the column data\n */\n calculateColumnDataWidth(\n modelColumn: ModelIndex,\n state: GridMetricState\n ): number {\n const { top, height, width, model, theme } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n const {\n font,\n cellHorizontalPadding,\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n scrollBarSize,\n } = theme;\n\n let columnWidth = 0;\n\n const fontWidth = this.getWidthForFont(font, state);\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n GridUtils.iterateAllItems(\n top,\n bottom,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n row => {\n const modelRow = this.getModelRow(row, state);\n const text = model.textForCell(modelColumn, modelRow);\n if (text) {\n const cellPadding = cellHorizontalPadding * 2;\n columnWidth = Math.max(\n columnWidth,\n text.length * fontWidth + cellPadding\n );\n }\n }\n );\n\n columnWidth = Math.max(\n Math.min(\n columnWidth,\n (width - rowHeaderWidth - scrollBarSize - rowFooterWidth) *\n GridMetricCalculator.MAX_COLUMN_WIDTH\n ),\n cellHorizontalPadding * 2\n );\n\n return columnWidth;\n }\n\n /**\n * The coordinate for where the tree padding should be drawn\n * @param state The grid metric state\n * @returns The coordinate for tree padding\n */\n calculateTreePaddingX(state: GridMetricState): Coordinate {\n const { top, height, model, theme } = state;\n const { rowHeight, treeDepthIndent } = theme;\n if (!isExpandableGridModel(model) || !model.hasExpandableRows) {\n return 0;\n }\n let treePadding = 0;\n\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n for (let row = top; row <= bottom; row += 1) {\n const modelRow = this.getModelRow(row, state);\n const depth = model.depthForRow(modelRow);\n treePadding = Math.max(treePadding, treeDepthIndent * (depth + 1));\n }\n\n return treePadding;\n }\n\n /**\n * Get the width of the provided font. Exploits the fact that we're\n * using tabular figures so every character is same width\n * @param font The font to get the width for\n * @param state The grid metric state\n * @returns Width of the char `8` for the specified font\n */\n getWidthForFont(font: GridFont, state: GridMetricState): number {\n if (this.fontWidths.has(font)) {\n return getOrThrow(this.fontWidths, font);\n }\n const { context } = state;\n context.font = font;\n const textMetrics = context.measureText('8');\n const { width } = textMetrics;\n\n // context.font changes the string a little bit, e.g. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidths.set(font, width);\n this.fontWidths.set(context.font, width);\n\n return width;\n }\n\n /**\n * Sets the width for the specified column\n * @param column The column model index to set\n * @param size The size to set it to\n */\n setColumnWidth(column: ModelIndex, size: number): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.set(column, Math.ceil(size));\n trimMap(userColumnWidths);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Resets the column width for the specified column to the calculated width\n * @param column The column model index to reset\n */\n resetColumnWidth(column: ModelIndex): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.delete(column);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Sets the width for the specified row\n * @param row The row model index to set\n * @param size The size to set it to\n */\n setRowHeight(row: ModelIndex, size: number): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userRowHeights = new Map(this.userRowHeights);\n userRowHeights.set(row, Math.ceil(size));\n trimMap(userRowHeights);\n this.userRowHeights = userRowHeights;\n }\n\n /**\n * Resets the row height for the specified row to the calculated height\n * @param row The row model index to reset\n */\n resetRowHeight(row: ModelIndex): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userRowHeights = new Map(this.userRowHeights);\n userRowHeights.delete(row);\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights.delete(row);\n }\n}\n\nexport default GridMetricCalculator;\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,cAAc;AAAC,OAc1BC,SAAS;AAAA,SAEPC,qBAAqB;AAuC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAU,CACxBC,GAAc,EACdC,GAAM,EAEH;EAAA;EAAA,IADHC,YAA2B,uEAAGC,SAAS;EAEvC,IAAMC,KAAK,eAAGJ,GAAG,CAACK,GAAG,CAACJ,GAAG,CAAC,+CAAIC,YAAY;EAC1C,IAAIE,KAAK,KAAKD,SAAS,EAAE;IACvB,OAAOC,KAAK;EACd;EAEA,MAAM,IAAIE,KAAK,iCAA0BL,GAAG,EAAG;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASM,OAAO,CACrBP,GAA0B,EAGpB;EAAA,IAFNQ,SAAS,uEAAGC,oBAAoB,CAACC,UAAU;EAAA,IAC3CC,UAAU,uEAAGC,IAAI,CAACC,KAAK,CAACL,SAAS,GAAG,CAAC,CAAC;EAEtC,IAAIR,GAAG,CAACc,IAAI,GAAGN,SAAS,EAAE;IACxB,IAAMO,IAAI,GAAGf,GAAG,CAACgB,IAAI,EAAE;IACvB,OAAOhB,GAAG,CAACc,IAAI,GAAGH,UAAU,EAAE;MAC5BX,GAAG,CAACiB,MAAM,CAACF,IAAI,CAACG,IAAI,EAAE,CAACd,KAAK,CAAC;IAC/B;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASe,sBAAsB,CACpCC,UAAkB,EAClBC,QAAgB,EAChBC,UAAkB,EAClBC,GAAW,EACXC,OAAgB,EACD;EACf,IAAMC,WAAW,GAAG,IAAIC,GAAG,EAAE;EAC7B,IAAIC,CAAC,GAAG,CAAC;EACT,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,UAAU,IAAIQ,CAAC,GAAGN,UAAU,EAAEM,CAAC,IAAI,CAAC,EAAE;IACxDH,WAAW,CAACI,GAAG,CAACD,CAAC,EAAED,CAAC,CAAC;IACrBA,CAAC,IAAI5B,UAAU,CAACyB,OAAO,EAAEI,CAAC,CAAC;EAC7B;EAEAD,CAAC,GAAGJ,GAAG;EACP,KAAK,IAAIK,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGP,QAAQ,IAAIC,UAAU,GAAGM,EAAC,GAAG,CAAC,IAAI,CAAC,EAAEA,EAAC,IAAI,CAAC,EAAE;IAC/DD,CAAC,IAAI5B,UAAU,CAACyB,OAAO,EAAEF,UAAU,GAAGM,EAAC,GAAG,CAAC,CAAC;IAC5CH,WAAW,CAACI,GAAG,CAACP,UAAU,GAAGM,EAAC,GAAG,CAAC,EAAED,CAAC,CAAC;EACxC;EACA,OAAOF,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMhB,oBAAoB,CAAC;EAChC;;EAGA;;EAGA;;EAGA;;EAGA;;EAGA;;EAGA;;EAGA;;EAGA;;EAGA;;EAGA;;EAGAqB,WAAW,GAUH;IAAA,IAVI;MACVC,gBAAgB,GAAG,IAAIL,GAAG,EAAE;MAC5BM,cAAc,GAAG,IAAIN,GAAG,EAAE;MAC1BO,sBAAsB,GAAG,IAAIP,GAAG,EAAE;MAClCQ,oBAAoB,GAAG,IAAIR,GAAG,EAAE;MAChCS,UAAU,GAAG,IAAIT,GAAG,EAAE;MACtBU,SAAS,GAAG,IAAIV,GAAG,EAAE;MACrBW,YAAY,GAAG,IAAIX,GAAG,EAAE;MACxBY,SAAS,GAAG,EAAqB;MACjCC,YAAY,GAAG;IACjB,CAAC,uEAAG,CAAC,CAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IACJ,IAAI,CAACR,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACC,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACE,oBAAoB,GAAGA,oBAAoB;IAChD,IAAI,CAACD,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACE,UAAU,GAAGA,UAAU;;IAE5B;IACA,IAAI,CAACC,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,YAAY,GAAGA,YAAY;EAClC;;EAEA;AACF;AACA;AACA;AACA;EACEC,UAAU,CAACC,KAAsB,EAAe;IAC9C,IAAM;MACJC,IAAI;MACJC,GAAG;MACHC,UAAU;MACVC,SAAS;MACTC,KAAK;MACLC,MAAM;MACNC,KAAK;MACLC,KAAK;MACLX,SAAS;MACTC,YAAY;MACZW;IACF,CAAC,GAAGT,KAAK;IACT,IAAM;MACJU,SAAS;MACTC,cAAc;MACdC,cAAc;MACdC,WAAW;MACXC,kBAAkB;MAClBC,mBAAmB;MACnBC;IACF,CAAC,GAAGT,KAAK;IAET,IAAIV,SAAS,KAAK,IAAI,CAACA,SAAS,EAAE;MAChC,IAAI,CAACA,SAAS,GAAGA,SAAS;MAC1B,IAAI,CAACF,SAAS,CAACsB,KAAK,EAAE;IACxB;IAEA,IAAInB,YAAY,KAAK,IAAI,CAACA,YAAY,EAAE;MACtC,IAAI,CAACA,YAAY,GAAGA,YAAY;MAChC,IAAI,CAACF,YAAY,CAACqB,KAAK,EAAE;IAC3B;IAEA,IAAM;MACJC,WAAW;MACXC,QAAQ;MACRC,mBAAmB;MACnBC,sBAAsB;MACtBC,uBAAuB;MACvBC,wBAAwB;MACxBC;IACF,CAAC,GAAGhB,KAAK;;IAET;IACA,IAAMiB,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAC1B,KAAK,CAAC;IACxC,IAAM2B,WAAW,GAAG,IAAI,CAACC,cAAc,CAAC5B,KAAK,CAAC;IAE9C,IAAM6B,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC9B,KAAK,CAAC;IAClC,IAAM+B,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAChC,KAAK,CAAC;IAElC,IAAMiC,YAAY,GAChB5E,qBAAqB,CAACmD,KAAK,CAAC,IAAIA,KAAK,CAAC0B,iBAAiB,GACnD,IAAI,CAACC,qBAAqB,CAACnC,KAAK,CAAC,GACjC,CAAC;IACP,IAAMoC,YAAY,GAAG,CAAC,CAAC,CAAC;;IAExB,IAAIC,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CAACtC,KAAK,CAAC;IACxD,IAAIuC,mBAAmB,GAAG,IAAI,CAACC,sBAAsB,CACnDxC,KAAK,EACL2B,WAAW,EACXM,YAAY,CACb;;IAED;IACA,IAAMQ,WAAW,GAAGC,KAAK,CAACC,IAAI,CAACN,iBAAiB,CAAC9D,IAAI,EAAE,CAAC;IACxD,IAAMqE,cAAc,GAAGF,KAAK,CAACC,IAAI,CAACJ,mBAAmB,CAAChE,IAAI,EAAE,CAAC;;IAE7D;IACA;IACA8D,iBAAiB,GAAG,IAAIpD,GAAG,CAAC,CAC1B,GAAGoD,iBAAiB,EACpB,GAAG,IAAI,CAACQ,qBAAqB,CAAC7C,KAAK,CAAC,CACrC,CAAC;IACFuC,mBAAmB,GAAG,IAAItD,GAAG,CAAC,CAC5B,GAAGsD,mBAAmB,EACtB,GAAG,IAAI,CAACO,uBAAuB,CAAC9C,KAAK,CAAC,CACvC,CAAC;IAEF,IAAI+C,eAAe,GAAG,IAAI,CAACC,kBAAkB,CAC3CT,mBAAmB,EACnBK,cAAc,EACdzC,UAAU,CACX;IACD,IAAI8C,YAAY,GAAG,IAAI,CAACC,eAAe,CACrCb,iBAAiB,EACjBI,WAAW,EACXrC,SAAS,CACV;IAED,IAAM+C,MAAM,GACVV,WAAW,CAACW,MAAM,GAAG,CAAC,GAAGX,WAAW,CAACA,WAAW,CAACW,MAAM,GAAG,CAAC,CAAC,GAAGlD,GAAG;IACpE,IAAMmD,KAAK,GACTT,cAAc,CAACQ,MAAM,GAAG,CAAC,GACrBR,cAAc,CAACA,cAAc,CAACQ,MAAM,GAAG,CAAC,CAAC,GACzCnD,IAAI;IAEV,IAAMqD,cAAc,GAAG,IAAI,CAACC,iBAAiB,CAC3CvD,KAAK,EACLyC,WAAW,EACXQ,YAAY,EACZZ,iBAAiB,CAClB;IACD,IAAMmB,aAAa,GAAG,IAAI,CAACC,gBAAgB,CACzCzD,KAAK,EACL4C,cAAc,EACdG,eAAe,EACfR,mBAAmB,CACpB;IAED,IAAMmB,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CACjD3D,KAAK,EACLqC,iBAAiB,CAClB;IACD,IAAMuB,oBAAoB,GAAG,IAAI,CAACC,uBAAuB,CACvD7D,KAAK,EACLqC,iBAAiB,CAClB;IACD,IAAMyB,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CACjD/D,KAAK,EACLuC,mBAAmB,CACpB;IACD,IAAMyB,kBAAkB,GAAG,IAAI,CAACC,qBAAqB,CACnDjE,KAAK,EACLuC,mBAAmB,CACpB;IAED,IAAM2B,iBAAiB,GAAGxB,KAAK,CAACC,IAAI,CAACJ,mBAAmB,CAAC4B,MAAM,EAAE,CAAC;IAClE,IAAMC,eAAe,GAAG1B,KAAK,CAACC,IAAI,CAACN,iBAAiB,CAAC8B,MAAM,EAAE,CAAC;IAC9D,IAAME,IAAI,GAAGH,iBAAiB,CAACI,MAAM,CAAC,CAACpF,CAAC,EAAEqF,CAAC,KAAKrF,CAAC,GAAGqF,CAAC,EAAE,CAAC,CAAC,GAAGpE,UAAU;IACtE,IAAMqE,IAAI,GAAGJ,eAAe,CAACE,MAAM,CAAC,CAACG,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC,GAAGtE,SAAS;IAEnE,IAAMuE,QAAQ,GAAG,IAAI,CAACC,WAAW,CAC/B5E,KAAK,EACL,IAAI,EACJK,KAAK,GAAGwB,KAAK,GAAGb,aAAa,GAAGJ,cAAc,CAC/C;IACD,IAAMiE,OAAO,GAAG,IAAI,CAACC,UAAU,CAC7B9E,KAAK,EACL,IAAI,EACJM,MAAM,GAAGyB,KAAK,GAAGf,aAAa,GAAG4C,oBAAoB,CACtD;;IAED;IACA,IAAMmB,sBAAsB,GAAG5E,UAAU,GAAGkE,IAAI,GAAGzD,cAAc;IACjE,IAAMoE,uBAAuB,GAAG5E,SAAS,GAAGoE,IAAI;;IAEhD;IACA,IAAMS,uBAAuB,GAAG5E,KAAK,GAAGwB,KAAK;IAC7C,IAAMqD,wBAAwB,GAAG5E,MAAM,GAAGyB,KAAK;;IAE/C;IACA,IAAMoD,gBAAgB,GACpBR,QAAQ,GAAG,CAAC,IAAII,sBAAsB,GAAGE,uBAAuB;IAClE,IAAMG,mBAAmB,GAAGD,gBAAgB,GAAGnE,aAAa,GAAG,CAAC;IAChE,IAAMqE,cAAc,GAClBR,OAAO,GAAG,CAAC,IACXG,uBAAuB,GAAGE,wBAAwB,GAAGE,mBAAmB;IAC1E,IAAME,gBAAgB,GAAGD,cAAc,GAAGrE,aAAa,GAAG,CAAC;IAC3D,IAAMuE,QAAQ,GAAGlF,KAAK,GAAGM,cAAc,GAAG2E,gBAAgB;IAC1D,IAAME,SAAS,GAAGlF,MAAM,GAAGQ,kBAAkB,GAAGsE,mBAAmB;IACnE,IAAMK,OAAO,GAAG9E,cAAc;IAC9B,IAAM+E,MAAM,GAAG5E,kBAAkB;;IAEjC;IACA,IAAM6E,uBAAuB,GAC3BzE,WAAW,KAAK,CAAC,GACbqE,QAAQ,GAAGR,sBAAsB,GACjC,CAAC7D,WAAW,GAAGyD,QAAQ,IAAIzD,WAAW;IAE5C,IAAM0E,qBAAqB,GACzBzE,QAAQ,KAAK,CAAC,GACVqE,SAAS,GAAGR,uBAAuB,GACnC,CAAC7D,QAAQ,GAAG0D,OAAO,IAAI1D,QAAQ;IAErC,IAAM0E,WAAW,GAAGV,gBAAgB,GAChChI,KAAK,CACHoI,QAAQ,GAAGI,uBAAuB,EAClC5E,mBAAmB,EACnBwE,QAAQ,GAAG,CAAC,CACb,GACD,CAAC;IACL,IAAMO,YAAY,GAAGT,cAAc,GAC/BlI,KAAK,CACHqI,SAAS,GAAGI,qBAAqB,EACjC7E,mBAAmB,EACnByE,SAAS,GAAG,CAAC,CACd,GACD,CAAC;IAEL,IAAMO,eAAe,GAAGzI,UAAU,CAACiF,mBAAmB,EAAEtC,IAAI,EAAE,CAAC,CAAC;IAChE,IAAM+F,YAAY,GAAG1I,UAAU,CAAC+E,iBAAiB,EAAEnC,GAAG,EAAE,CAAC,CAAC;IAC1D,IAAM+F,iBAAiB,GACrBF,eAAe,GAAG,CAAC,GAAG5F,UAAU,GAAG4F,eAAe,GAAG,CAAC;IACxD,IAAMG,gBAAgB,GAAGF,YAAY,GAAG,CAAC,GAAG5F,SAAS,GAAG4F,YAAY,GAAG,CAAC;;IAExE;IACA,IAAMG,uBAAuB,GAC3BjF,WAAW,KAAK,CAAC,GACbf,UAAU,IAAI4E,sBAAsB,GAAGE,uBAAuB,CAAC,GAC/D,CAAChF,IAAI,GAAGgG,iBAAiB,IAAItB,QAAQ;IAC3C,IAAMyB,qBAAqB,GACzBjF,QAAQ,KAAK,CAAC,GACVf,SAAS,IAAI4E,uBAAuB,GAAGE,wBAAwB,CAAC,GAChE,CAAChF,GAAG,GAAGgG,gBAAgB,IAAIrB,OAAO;IAExC,IAAMwB,OAAO,GAAGlB,gBAAgB,GAC5BgB,uBAAuB,IAAIZ,QAAQ,GAAGM,WAAW,CAAC,GAClD,CAAC;IACL,IAAMS,OAAO,GAAGjB,cAAc,GAC1Be,qBAAqB,IAAIZ,SAAS,GAAGM,YAAY,CAAC,GAClD,CAAC;;IAEL;IACA,IAAIS,YAA0B,GAAG,EAAE;IACnC,IAAInF,mBAAmB,GAAG,CAAC,IAAIC,sBAAsB,GAAG,CAAC,EAAE;MACzDkF,YAAY,GAAG,CACb,GAAG7D,KAAK,CAACtB,mBAAmB,CAAC,CAAC7C,IAAI,EAAE,EACpC,GAAG,CAAC,GAAGmE,KAAK,CAACrB,sBAAsB,CAAC,CAAC9C,IAAI,EAAE,CAAC,CAAChB,GAAG,CAAC4B,CAAC,IAAIgC,QAAQ,GAAGhC,CAAC,GAAG,CAAC,CAAC,CACxE;MACD8D,YAAY,GAAG,IAAIhE,GAAG,CAAC,CACrB,GAAGgE,YAAY,EACf,GAAG,IAAI,CAACuD,gBAAgB,CACtBxG,KAAK,EACLqC,iBAAiB,EACjBlE,IAAI,CAACC,KAAK,CAACkC,MAAM,GAAGyB,KAAK,GAAGqD,mBAAmB,CAAC,CACjD,CACF,CAAC;IACJ;IAEA,IAAIqB,eAA6B,GAAG,EAAE;IACtC,IAAInF,uBAAuB,GAAG,CAAC,IAAIC,wBAAwB,GAAG,CAAC,EAAE;MAC/DkF,eAAe,GAAG,CAChB,GAAG/D,KAAK,CAACpB,uBAAuB,CAAC,CAAC/C,IAAI,EAAE,EACxC,GAAG,CAAC,GAAGmE,KAAK,CAACnB,wBAAwB,CAAC,CAAChD,IAAI,EAAE,CAAC,CAAChB,GAAG,CAChD4B,CAAC,IAAI+B,WAAW,GAAG/B,CAAC,GAAG,CAAC,CACzB,CACF;MACD4D,eAAe,GAAG,IAAI9D,GAAG,CAAC,CACxB,GAAG8D,eAAe,EAClB,GAAG,IAAI,CAAC2D,mBAAmB,CACzB1G,KAAK,EACLuC,mBAAmB,EACnBpE,IAAI,CAACC,KAAK,CAACiC,KAAK,GAAGwB,KAAK,GAAGyD,gBAAgB,CAAC,CAC7C,CACF,CAAC;IACJ;IAEA,IAAMqB,eAA+B,GAAG,EAAE;IAC1C,IAAIlG,cAAc,EAAE;MAClB,KACE,IAAItB,CAAC,GAAGsB,cAAc,CAACmG,KAAK,CAAC,CAAC,CAAC,EAC/BzH,CAAC,IAAIsB,cAAc,CAACmG,KAAK,CAAC,CAAC,CAAC,EAC5BzH,CAAC,IAAI,CAAC,EACN;QACAwH,eAAe,CAACE,IAAI,CAAC1H,CAAC,CAAC;QACvB,IAAI,CAACoD,mBAAmB,CAACuE,GAAG,CAAC3H,CAAC,CAAC,EAAE;UAC/BoD,mBAAmB,CAACnD,GAAG,CAACD,CAAC,EAAE,IAAI,CAAC4H,qBAAqB,CAAC5H,CAAC,EAAEa,KAAK,CAAC,CAAC;QAClE;QAEA,IAAI,CAAC+C,eAAe,CAAC+D,GAAG,CAAC3H,CAAC,CAAC,EAAE;UAC3B4D,eAAe,CAAC3D,GAAG,CAACD,CAAC,EAAE,CAAC,CAAC;QAC3B;MACF;IACF;IAEA,IAAM6H,OAAO,GAAGvE,WAAW,CAACwE,MAAM,CAACV,YAAY,CAAC;IAChD,IAAMW,UAAU,GAAGtE,cAAc,CAC9BqE,MAAM,CAACR,eAAe,CAAC,CACvBQ,MAAM,CAACN,eAAe,CAAC;IAC1B,IAAMhH,SAAS,GAAG,IAAI,CAACwH,YAAY,CAACH,OAAO,EAAEhH,KAAK,CAAC;IACnD,IAAMJ,YAAY,GAAG,IAAI,CAACwH,eAAe,CAACF,UAAU,EAAElH,KAAK,CAAC;IAE5D,IAAMqH,mBAAmB,GAAG,IAAI,CAACC,sBAAsB,CACrDjF,iBAAiB,EACjB1C,SAAS,EACTK,KAAK,CACN;;IAED;IACA,IAAMuH,UAAU,GAAG,IAAI,CAACC,aAAa,CACnCxH,KAAK,EACLiD,YAAY,EACZZ,iBAAiB,EACjBI,WAAW,CACZ;IACD,IAAMgF,WAAW,GAAG,IAAI,CAACC,cAAc,CACrC1H,KAAK,EACL+C,eAAe,EACfR,mBAAmB,EACnBK,cAAc,CACf;IACD,IAAM+E,aAAa,GACjB9C,OAAO,GAAG,CAAC,GACP,IAAI,CAAC+C,gBAAgB,CACnB5H,KAAK,EACLiD,YAAY,EACZZ,iBAAiB,EACjBI,WAAW,EACXV,KAAK,CACN,GACDoB,MAAM;IACZ,IAAM0E,YAAY,GAChBlD,QAAQ,GAAG,CAAC,GACR,IAAI,CAACmD,eAAe,CAClB9H,KAAK,EACL+C,eAAe,EACfR,mBAAmB,EACnBK,cAAc,EACdf,KAAK,CACN,GACDwB,KAAK;IAEX,IAAM;MACJ3D,UAAU;MACVJ,gBAAgB;MAChBC,cAAc;MACdE,oBAAoB;MACpBD;IACF,CAAC,GAAG,IAAI;IAER,OAAO;MACL;MACAkB,SAAS;MACTC,cAAc;MACdC,cAAc;MACdO,QAAQ;MACRN,WAAW;MACXK,WAAW;MACXJ,kBAAkB;MAElB;MACAM,mBAAmB;MACnBC,sBAAsB;MACtBC,uBAAuB;MACvBC,wBAAwB;MAExB;MACAM,KAAK;MACLE,KAAK;MAEL;MACAN,QAAQ;MACRE,WAAW;MAEX;MACAM,YAAY;MACZG,YAAY;MAEZ;MACAnC,IAAI;MACJC,GAAG;MACHiD,MAAM;MACNE,KAAK;MACLjD,SAAS;MACTD,UAAU;MAEV;MACAoH,UAAU;MACVE,WAAW;MACXE,aAAa;MACbE,YAAY;MAEZ;MACAvE,cAAc;MACdE,aAAa;MAEb;MACAnD,KAAK;MACLC,MAAM;MAEN;MACA+D,IAAI;MACJG,IAAI;MAEJ;MACAG,QAAQ;MACRE,OAAO;MAEP;MACAW,SAAS;MACTE,MAAM;MACNH,QAAQ;MACRE,OAAO;MACPK,YAAY;MACZD,WAAW;MACXV,gBAAgB;MAChBE,cAAc;MACdC,gBAAgB;MAChBF,mBAAmB;MAEnB;MACAiB,OAAO;MACPC,OAAO;MAEPvB,sBAAsB;MACtBC,uBAAuB;MAEvBC,uBAAuB;MACvBC,wBAAwB;MAExB;MACAzC,WAAW;MACXG,cAAc;MAEd;MACA2D,YAAY;MACZE,eAAe;MAEf;MACAO,OAAO;MACPE,UAAU;MAEV;MACA;MACA7E,iBAAiB;MACjBE,mBAAmB;MAEnB;MACAmB,iBAAiB;MACjBE,oBAAoB;MACpBE,iBAAiB;MACjBE,kBAAkB;MAElB;MACAf,YAAY;MACZF,eAAe;MAEf;MACAsE,mBAAmB;MAEnB;MACA1H,SAAS;MACTC,YAAY;MAEZC,SAAS;MACTC,YAAY;MAEZ;MACAJ,UAAU;MAEV;MACAJ,gBAAgB;MAChBC,cAAc;MAEd;MACAE,oBAAoB;MACpBD,sBAAsB;MAEtBgC;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACEM,QAAQ,CAAC9B,KAAsB,EAAc;IAC3C,IAAM;MAAEO;IAAM,CAAC,GAAGP,KAAK;IACvB,IAAM;MAAEW;IAAe,CAAC,GAAGJ,KAAK;IAEhC,OAAOI,cAAc;EACvB;;EAEA;AACF;AACA;AACA;AACA;EACEqB,QAAQ,CAAChC,KAAsB,EAAc;IAC3C,IAAM;MAAEO,KAAK;MAAEC;IAAM,CAAC,GAAGR,KAAK;IAC9B,IAAM;MAAEc;IAAmB,CAAC,GAAGP,KAAK;IACpC,IAAM;MAAEiB;IAAqB,CAAC,GAAGhB,KAAK;IAEtC,OAAOgB,oBAAoB,GAAGV,kBAAkB;EAClD;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEiH,gBAAgB,CACd/H,KAAsB,EAEd;IAAA,IADRqC,iBAA0B,uEAAG,IAAI,CAACQ,qBAAqB,CAAC7C,KAAK,CAAC;IAE9D,IAAM;MAAEM,MAAM;MAAEC;IAAM,CAAC,GAAGP,KAAK;IAC/B,IAAM;MAAEgB;IAAc,CAAC,GAAGT,KAAK;IAC/B,IAAMwB,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAChC,KAAK,CAAC;IAClC,IAAM4D,oBAAoB,GAAG,IAAI,CAACC,uBAAuB,CACvD7D,KAAK,EACLqC,iBAAiB,CAClB;IACD,IAAMqB,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CACjD3D,KAAK,EACLqC,iBAAiB,CAClB;IAED,OACE/B,MAAM,GAAGsD,oBAAoB,GAAGF,iBAAiB,GAAG3B,KAAK,GAAGf,aAAa;EAE7E;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEgH,eAAe,CACbhI,KAAsB,EAEd;IAAA,IADRuC,mBAA4B,uEAAG,IAAI,CAACO,uBAAuB,CAAC9C,KAAK,CAAC;IAElE,IAAM;MAAEK,KAAK;MAAEE;IAAM,CAAC,GAAGP,KAAK;IAC9B,IAAM;MAAEgB,aAAa;MAAEJ;IAAe,CAAC,GAAGL,KAAK;IAC/C,IAAMsB,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC9B,KAAK,CAAC;IAClC,IAAMgE,kBAAkB,GAAG,IAAI,CAACC,qBAAqB,CACnDjE,KAAK,EACLuC,mBAAmB,CACpB;IACD,IAAMuB,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CACjD/D,KAAK,EACLuC,mBAAmB,CACpB;IAED,OACElC,KAAK,GACLyD,iBAAiB,GACjBE,kBAAkB,GAClBnC,KAAK,GACLb,aAAa,GACbJ,cAAc;EAElB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEqH,aAAa,CACXC,SAAuB,EACvBC,aAGe,EACfnI,KAAsB,EACR;IACd;IACA,IAAMlB,GAAG,GAAGoJ,SAAS,CAAC7J,IAAI,GAAG,CAAC;IAC9B,KAAK,IAAIc,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,GAAG,EAAEK,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAMiJ,UAAU,GAAGD,aAAa,CAAChJ,CAAC,EAAEa,KAAK,CAAC;MAC1C,IAAIkI,SAAS,CAACtK,GAAG,CAACwK,UAAU,CAAC,KAAK,CAAC,EAAE;QACnC,OAAOjJ,CAAC;MACV;IACF;IACA,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;EACEyC,cAAc,CAAC5B,KAAsB,EAAgB;IACnD,OAAO,IAAI,CAACiI,aAAa,CACvB,IAAI,CAAC3I,gBAAgB,EACrB,IAAI,CAAC+I,cAAc,CAACC,IAAI,CAAC,IAAI,CAAC,EAC9BtI,KAAK,CACN;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE0B,WAAW,CAAC1B,KAAsB,EAAgB;IAChD,OAAO,IAAI,CAACiI,aAAa,CACvB,IAAI,CAAC1I,cAAc,EACnB,IAAI,CAACgJ,WAAW,CAACD,IAAI,CAAC,IAAI,CAAC,EAC3BtI,KAAK,CACN;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE4E,WAAW,CACT5E,KAAsB,EACtBqD,KAA0B,EAC1BmF,YAAoB,EACN;IACd,IAAM;MAAEhI;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEkB,WAAW;MAAEK;IAAyB,CAAC,GAAGf,KAAK;IAEvD,IAAImE,QAAQ,GAAGxG,IAAI,CAACW,GAAG,CAAC,CAAC,EAAEoC,WAAW,GAAGK,wBAAwB,GAAG,CAAC,CAAC;IACtE,IAAI8B,KAAK,IAAI,IAAI,EAAE;MACjBsB,QAAQ,GAAGtB,KAAK;IAClB;IACA,IAAInE,CAAC,GAAG,CAAC;IACT,OAAOyF,QAAQ,GAAG,CAAC,EAAE;MACnB,IAAM9D,WAAW,GAAG,IAAI,CAACkG,qBAAqB,CAACpC,QAAQ,EAAE3E,KAAK,CAAC;MAC/Dd,CAAC,IAAI2B,WAAW;MAEhB,IAAI3B,CAAC,IAAIsJ,YAAY,EAAE;QACrB,OAAOrK,IAAI,CAACsK,GAAG,CAAC9D,QAAQ,GAAG,CAAC,EAAEtB,KAAK,aAALA,KAAK,cAALA,KAAK,GAAInC,WAAW,GAAG,CAAC,CAAC;MACzD;MAEAyD,QAAQ,IAAI,CAAC;IACf;IAEA,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,UAAU,CACR9E,KAAsB,EACtBmD,MAA2B,EAC3BuF,aAAqB,EACP;IACd,IAAM;MAAElI;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEmB,QAAQ;MAAEE;IAAuB,CAAC,GAAGb,KAAK;IAElD,IAAIqE,OAAO,GAAG1G,IAAI,CAACW,GAAG,CAAC,CAAC,EAAEqC,QAAQ,GAAGE,sBAAsB,GAAG,CAAC,CAAC;IAChE,IAAI8B,MAAM,IAAI,IAAI,EAAE;MAClB0B,OAAO,GAAG1B,MAAM;IAClB;IACA,IAAIsB,CAAC,GAAG,CAAC;IACT,OAAOI,OAAO,GAAG,CAAC,EAAE;MAClB,IAAMnE,SAAS,GAAG,IAAI,CAACiI,mBAAmB,CAAC9D,OAAO,EAAE7E,KAAK,CAAC;MAC1DyE,CAAC,IAAI/D,SAAS;MAEd,IAAI+D,CAAC,IAAIiE,aAAa,EAAE;QACtB,OAAOvK,IAAI,CAACsK,GAAG,CAAC5D,OAAO,GAAG,CAAC,EAAE1D,QAAQ,GAAG,CAAC,CAAC;MAC5C;MAEA0D,OAAO,IAAI,CAAC;IACd;IAEA,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE+D,mBAAmB,CACjB5I,KAAsB,EACtBuH,UAAwB,EACV;IACd,IAAM7D,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CAAC3D,KAAK,CAAC;IAC1D,IAAIE,GAAG,GAAGqH,UAAU;IACpB,IAAI9C,CAAC,GAAG,CAAC;IACT,OAAOvE,GAAG,GAAG,CAAC,IAAIuE,CAAC,GAAGf,iBAAiB,EAAE;MACvCxD,GAAG,IAAI,CAAC;MACRuE,CAAC,IAAI,IAAI,CAACkE,mBAAmB,CAACzI,GAAG,EAAEF,KAAK,CAAC;IAC3C;IACA,OAAOE,GAAG;EACZ;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE2I,sBAAsB,CACpB7I,KAAsB,EACtB2H,aAA2B,EACb;IACd,IAAM;MAAErH;IAAO,CAAC,GAAGN,KAAK;IACxB,IAAM+B,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAChC,KAAK,CAAC;IAClC,IAAM4D,oBAAoB,GAAG,IAAI,CAACC,uBAAuB,CAAC7D,KAAK,CAAC;IAChE,IAAM8I,eAAe,GAAGxI,MAAM,GAAGyB,KAAK,GAAG6B,oBAAoB;IAC7D,OAAO,IAAI,CAACkB,UAAU,CAAC9E,KAAK,EAAE2H,aAAa,EAAEmB,eAAe,CAAC;EAC/D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,qBAAqB,CACnB/I,KAAsB,EACtByH,WAAyB,EACX;IACd,IAAM3D,iBAAiB,GAAG,IAAI,CAACC,oBAAoB,CAAC/D,KAAK,CAAC;IAC1D,IAAIC,IAAI,GAAGwH,WAAW;IACtB,IAAIvI,CAAC,GAAG,CAAC;IACT,OAAOe,IAAI,GAAG,CAAC,IAAIf,CAAC,GAAG4E,iBAAiB,EAAE;MACxC7D,IAAI,IAAI,CAAC;MACTf,CAAC,IAAI,IAAI,CAAC6H,qBAAqB,CAAC9G,IAAI,EAAED,KAAK,CAAC;IAC9C;IACA,OAAOC,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE+I,sBAAsB,CACpBhJ,KAAsB,EACtB6H,YAA0B,EACZ;IACd,IAAM;MAAExH;IAAM,CAAC,GAAGL,KAAK;IACvB,IAAM6B,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC9B,KAAK,CAAC;IAClC,IAAMgE,kBAAkB,GAAG,IAAI,CAACC,qBAAqB,CAACjE,KAAK,CAAC;IAC5D,IAAMiJ,cAAc,GAAG5I,KAAK,GAAGwB,KAAK,GAAGmC,kBAAkB;IACzD,OAAO,IAAI,CAACY,WAAW,CAAC5E,KAAK,EAAE6H,YAAY,EAAEoB,cAAc,CAAC;EAC9D;;EAEA;AACF;AACA;AACA;AACA;EACEpG,qBAAqB,CAAC7C,KAAsB,EAAW;IACrD,IAAM;MAAEQ;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEoB,mBAAmB;MAAEC,sBAAsB;MAAEF;IAAS,CAAC,GAAGX,KAAK;IAEvE,IAAM0I,UAAU,GAAG,IAAIjK,GAAG,EAAE;IAC5B,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGiC,mBAAmB,IAAIjC,CAAC,GAAGgC,QAAQ,EAAEhC,CAAC,IAAI,CAAC,EAAE;MAC/D+J,UAAU,CAAC9J,GAAG,CAACD,CAAC,EAAE,IAAI,CAACwJ,mBAAmB,CAACxJ,CAAC,EAAEa,KAAK,CAAC,CAAC;IACvD;IAEA,KACE,IAAIb,GAAC,GAAG,CAAC,EACTA,GAAC,GAAGkC,sBAAsB,IAAIF,QAAQ,GAAGhC,GAAC,GAAG,CAAC,IAAI,CAAC,EACnDA,GAAC,IAAI,CAAC,EACN;MACA,IAAMgK,GAAG,GAAGhI,QAAQ,GAAGhC,GAAC,GAAG,CAAC;MAC5B+J,UAAU,CAAC9J,GAAG,CAAC+J,GAAG,EAAE,IAAI,CAACR,mBAAmB,CAACQ,GAAG,EAAEnJ,KAAK,CAAC,CAAC;IAC3D;IAEA,OAAOkJ,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;EACE5G,oBAAoB,CAACtC,KAAsB,EAAW;IACpD,IAAM;MAAEE,GAAG;MAAEE,SAAS;MAAEE,MAAM;MAAEE;IAAM,CAAC,GAAGR,KAAK;IAE/C,IAAIyE,CAAC,GAAG,CAAC;IACT,IAAI0E,GAAG,GAAGjJ,GAAG;IACb,IAAMgJ,UAAU,GAAG,IAAIjK,GAAG,EAAE;IAC5B,IAAM;MAAEkC;IAAS,CAAC,GAAGX,KAAK;IAC1B,OAAOiE,CAAC,GAAGnE,MAAM,GAAGF,SAAS,IAAI+I,GAAG,GAAGhI,QAAQ,EAAE;MAC/C,IAAMT,SAAS,GAAG,IAAI,CAACiI,mBAAmB,CAACQ,GAAG,EAAEnJ,KAAK,CAAC;MACtDkJ,UAAU,CAAC9J,GAAG,CAAC+J,GAAG,EAAEzI,SAAS,CAAC;MAC9B+D,CAAC,IAAI/D,SAAS;MACdyI,GAAG,IAAI,CAAC;IACV;IAEA,OAAOD,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEpG,uBAAuB,CACrB9C,KAAsB,EAGb;IAAA,IAFT2B,WAAyB,uEAAG,IAAI,CAACC,cAAc,CAAC5B,KAAK,CAAC;IAAA,IACtDiC,YAAoB,uEAAG,IAAI,CAACE,qBAAqB,CAACnC,KAAK,CAAC;IAExD,IAAM;MAAEQ;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MACJkB,WAAW;MACXI,uBAAuB;MACvBC;IACF,CAAC,GAAGf,KAAK;IAET,IAAM4I,YAAY,GAAG,IAAInK,GAAG,EAAE;IAC9B,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmC,uBAAuB,IAAInC,CAAC,GAAG+B,WAAW,EAAE/B,CAAC,IAAI,CAAC,EAAE;MACtEiK,YAAY,CAAChK,GAAG,CACdD,CAAC,EACD,IAAI,CAAC4H,qBAAqB,CAAC5H,CAAC,EAAEa,KAAK,EAAE2B,WAAW,EAAEM,YAAY,CAAC,CAChE;IACH;IAEA,KACE,IAAI9C,GAAC,GAAG,CAAC,EACTA,GAAC,GAAGoC,wBAAwB,IAAIL,WAAW,GAAG/B,GAAC,GAAG,CAAC,IAAI,CAAC,EACxDA,GAAC,IAAI,CAAC,EACN;MACA,IAAMkK,MAAM,GAAGnI,WAAW,GAAG/B,GAAC,GAAG,CAAC;MAClCiK,YAAY,CAAChK,GAAG,CACdiK,MAAM,EACN,IAAI,CAACtC,qBAAqB,CAACsC,MAAM,EAAErJ,KAAK,EAAE2B,WAAW,EAAEM,YAAY,CAAC,CACrE;IACH;IAEA,OAAOmH,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;EACE5G,sBAAsB,CACpBxC,KAAsB,EAGb;IAAA,IAFT2B,WAAyB,uEAAG,IAAI,CAACC,cAAc,CAAC5B,KAAK,CAAC;IAAA,IACtDiC,YAAoB,uEAAG,IAAI,CAACE,qBAAqB,CAACnC,KAAK,CAAC;IAExD,IAAM;MAAEC,IAAI;MAAEE,UAAU;MAAEE,KAAK;MAAEG;IAAM,CAAC,GAAGR,KAAK;IAEhD,IAAId,CAAC,GAAG,CAAC;IACT,IAAImK,MAAM,GAAGpJ,IAAI;IACjB,IAAMmJ,YAAY,GAAG,IAAInK,GAAG,EAAE;IAC9B,IAAM;MAAEiC;IAAY,CAAC,GAAGV,KAAK;IAC7B,OAAOtB,CAAC,GAAGmB,KAAK,GAAGF,UAAU,IAAIkJ,MAAM,GAAGnI,WAAW,EAAE;MACrD,IAAML,WAAW,GAAG,IAAI,CAACkG,qBAAqB,CAC5CsC,MAAM,EACNrJ,KAAK,EACL2B,WAAW,EACXM,YAAY,CACb;MACDmH,YAAY,CAAChK,GAAG,CAACiK,MAAM,EAAExI,WAAW,CAAC;MACrC3B,CAAC,IAAI2B,WAAW;MAChBwI,MAAM,IAAI,CAAC;IACb;IAEA,OAAOD,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE1C,mBAAmB,CACjB1G,KAAsB,EACtBsJ,cAAuB,EACvBjF,IAAgB,EACD;IACf,IAAM;MAAE7D;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MACJkB,WAAW;MACXI,uBAAuB;MACvBC;IACF,CAAC,GAAGf,KAAK;IAET,OAAO9B,sBAAsB,CAC3B4C,uBAAuB,EACvBC,wBAAwB,EACxBL,WAAW,EACXmD,IAAI,EACJiF,cAAc,CACf;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEtG,kBAAkB,CAChBT,mBAA4B,EAC5BK,cAA8B,EAC9BzC,UAAkB,EACH;IACf,IAAM4C,eAAe,GAAG,IAAI9D,GAAG,EAAE;IACjC,IAAIC,CAAC,GAAG,CAACiB,UAAU;IACnB,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyD,cAAc,CAACQ,MAAM,EAAEjE,CAAC,IAAI,CAAC,EAAE;MACjD,IAAMkK,MAAM,GAAGzG,cAAc,CAACzD,CAAC,CAAC;MAChC,IAAM0B,WAAW,GAAGvD,UAAU,CAACiF,mBAAmB,EAAE8G,MAAM,CAAC;MAC3DtG,eAAe,CAAC3D,GAAG,CAACiK,MAAM,EAAEnK,CAAC,CAAC;MAC9BA,CAAC,IAAI2B,WAAW;IAClB;IAEA,OAAOkC,eAAe;EACxB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEyD,gBAAgB,CACdxG,KAAsB,EACtBuJ,YAAqB,EACrB/E,IAAgB,EACD;IACf,IAAM;MAAEhE;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEoB,mBAAmB;MAAEC,sBAAsB;MAAEF;IAAS,CAAC,GAAGX,KAAK;IAEvE,OAAO9B,sBAAsB,CAC3B0C,mBAAmB,EACnBC,sBAAsB,EACtBF,QAAQ,EACRqD,IAAI,EACJ+E,YAAY,CACb;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACErG,eAAe,CACbb,iBAA0B,EAC1BI,WAA2B,EAC3BrC,SAAiB,EACF;IACf,IAAM6C,YAAY,GAAG,IAAIhE,GAAG,EAAE;IAC9B,IAAIwF,CAAC,GAAG,CAACrE,SAAS;IAClB,KAAK,IAAIjB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsD,WAAW,CAACW,MAAM,EAAEjE,CAAC,IAAI,CAAC,EAAE;MAC9C,IAAMgK,GAAG,GAAG1G,WAAW,CAACtD,CAAC,CAAC;MAC1B,IAAMuB,SAAS,GAAGpD,UAAU,CAAC+E,iBAAiB,EAAE8G,GAAG,CAAC;MACpDlG,YAAY,CAAC7D,GAAG,CAAC+J,GAAG,EAAE1E,CAAC,CAAC;MACxBA,CAAC,IAAI/D,SAAS;IAChB;IAEA,OAAOuC,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEqE,sBAAsB,CACpBjF,iBAA0B,EAC1B1C,SAA4B,EAC5BK,KAAsB,EACa;IACnC,IAAMqH,mBAAmB,GAAG,IAAIpI,GAAG,EAAE;IACrC,IAAM;MAAEuB,KAAK;MAAED;IAAM,CAAC,GAAGP,KAAK;IAC9B,IAAM;MAAEwJ,eAAe;MAAEC;IAAsB,CAAC,GAAGlJ,KAAK;IAExD,IAAIlD,qBAAqB,CAACmD,KAAK,CAAC,IAAIA,KAAK,CAAC0B,iBAAiB,EAAE;MAC3DG,iBAAiB,CAACqH,OAAO,CAAC,CAAChJ,SAAS,EAAEyI,GAAG,KAAK;QAC5C,IAAMQ,QAAQ,GAAGrM,UAAU,CAACqC,SAAS,EAAEwJ,GAAG,CAAC;QAC3C,IAAI3I,KAAK,CAACoJ,eAAe,CAACD,QAAQ,CAAC,EAAE;UACnC,IAAME,KAAK,GAAGrJ,KAAK,CAACsJ,WAAW,CAACH,QAAQ,CAAC;UACzC,IAAMI,EAAE,GAAGF,KAAK,GAAGL,eAAe,GAAGC,qBAAqB;UAC1D,IAAMO,EAAE,GAAG,CAACH,KAAK,GAAG,CAAC,IAAIL,eAAe,GAAGC,qBAAqB;UAChE,IAAMQ,EAAE,GAAG,CAAC;UACZ,IAAMC,EAAE,GAAGxJ,SAAS;UACpB2G,mBAAmB,CAACjI,GAAG,CAAC+J,GAAG,EAAE;YAAEY,EAAE;YAAEE,EAAE;YAAED,EAAE;YAAEE;UAAG,CAAC,CAAC;QAClD;MACF,CAAC,CAAC;IACJ;IAEA,OAAO7C,mBAAmB;EAC5B;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEtD,oBAAoB,CAClB/D,KAAsB,EAEd;IAAA,IADRoJ,YAAqB,uEAAG,IAAI,CAACtG,uBAAuB,CAAC9C,KAAK,CAAC;IAE3D,IAAM;MAAEQ;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEsB;IAAwB,CAAC,GAAGd,KAAK;IACzC,IAAI2J,aAAa,GAAG,CAAC;IACrB,KAAK,IAAIhL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmC,uBAAuB,EAAEnC,CAAC,IAAI,CAAC,EAAE;MACnDgL,aAAa,IAAI7M,UAAU,CAAC8L,YAAY,EAAEjK,CAAC,CAAC;IAC9C;IACA,OAAOgL,aAAa;EACtB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACElG,qBAAqB,CACnBjE,KAAsB,EAEd;IAAA,IADRoJ,YAAqB,uEAAG,IAAI,CAACtG,uBAAuB,CAAC9C,KAAK,CAAC;IAE3D,IAAM;MAAEQ;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEuB,wBAAwB;MAAEL;IAAY,CAAC,GAAGV,KAAK;IACvD,IAAI2J,aAAa,GAAG,CAAC;IACrB,KAAK,IAAIhL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoC,wBAAwB,EAAEpC,CAAC,IAAI,CAAC,EAAE;MACpDgL,aAAa,IAAI7M,UAAU,CAAC8L,YAAY,EAAElI,WAAW,GAAG/B,CAAC,GAAG,CAAC,CAAC;IAChE;IAEA,OAAOgL,aAAa;EACtB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACExG,oBAAoB,CAClB3D,KAAsB,EAEd;IAAA,IADRkJ,UAAmB,uEAAG,IAAI,CAACrG,qBAAqB,CAAC7C,KAAK,CAAC;IAEvD,IAAM;MAAEQ;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEoB;IAAoB,CAAC,GAAGZ,KAAK;IACrC,IAAI4J,cAAc,GAAG,CAAC;IACtB,KAAK,IAAIjL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGiC,mBAAmB,EAAEjC,CAAC,IAAI,CAAC,EAAE;MAC/CiL,cAAc,IAAI9M,UAAU,CAAC4L,UAAU,EAAE/J,CAAC,CAAC;IAC7C;IACA,OAAOiL,cAAc;EACvB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEvG,uBAAuB,CACrB7D,KAAsB,EAEd;IAAA,IADRkJ,UAAmB,uEAAG,IAAI,CAACrG,qBAAqB,CAAC7C,KAAK,CAAC;IAEvD,IAAM;MAAEQ;IAAM,CAAC,GAAGR,KAAK;IACvB,IAAM;MAAEqB,sBAAsB;MAAEF;IAAS,CAAC,GAAGX,KAAK;IAClD,IAAI4J,cAAc,GAAG,CAAC;IACtB,KAAK,IAAIjL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkC,sBAAsB,EAAElC,CAAC,IAAI,CAAC,EAAE;MAClDiL,cAAc,IAAI9M,UAAU,CAAC4L,UAAU,EAAE/H,QAAQ,GAAGhC,CAAC,GAAG,CAAC,CAAC;IAC5D;IACA,OAAOiL,cAAc;EACvB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE5C,aAAa,CACXxH,KAAsB,EACtBiD,YAA2B,EAC3BZ,iBAA0B,EAC1BI,WAA2B,EACb;IACd,IAAM2H,cAAc,GAAG,IAAI,CAACzG,oBAAoB,CAAC3D,KAAK,EAAEqC,iBAAiB,CAAC;IAC1E,KAAK,IAAIlD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsD,WAAW,CAACW,MAAM,EAAEjE,CAAC,IAAI,CAAC,EAAE;MAC9C,IAAMgK,GAAG,GAAG1G,WAAW,CAACtD,CAAC,CAAC;MAC1B,IAAMsF,CAAC,GAAGnH,UAAU,CAAC2F,YAAY,EAAEkG,GAAG,CAAC;MACvC,IAAI1E,CAAC,IAAI2F,cAAc,EAAE;QACvB,OAAOjB,GAAG;MACZ;IACF;IACA,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEzB,cAAc,CACZ1H,KAAsB,EACtB+C,eAA8B,EAC9BR,mBAA4B,EAC5BK,cAA8B,EAChB;IACd,IAAMuH,aAAa,GAAG,IAAI,CAACpG,oBAAoB,CAAC/D,KAAK,EAAEuC,mBAAmB,CAAC;IAC3E,KAAK,IAAIpD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyD,cAAc,CAACQ,MAAM,EAAEjE,CAAC,IAAI,CAAC,EAAE;MACjD,IAAMkK,MAAM,GAAGzG,cAAc,CAACzD,CAAC,CAAC;MAChC,IAAMD,CAAC,GAAG5B,UAAU,CAACyF,eAAe,EAAEsG,MAAM,CAAC;MAC7C,IAAInK,CAAC,IAAIiL,aAAa,EAAE;QACtB,OAAOd,MAAM;MACf;IACF;IACA,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEzB,gBAAgB,CACd5H,KAAsB,EACtBiD,YAA2B,EAC3BZ,iBAA0B,EAC1BI,WAA2B,EAC3BV,KAAiB,EACH;IACd,IAAM;MAAEzB,MAAM;MAAEC;IAAM,CAAC,GAAGP,KAAK;IAC/B,IAAM;MAAEgB;IAAc,CAAC,GAAGT,KAAK;IAC/B,IAAM6J,cAAc,GAAG,IAAI,CAACvG,uBAAuB,CACjD7D,KAAK,EACLqC,iBAAiB,CAClB;IACD,IAAMqG,aAAa,GAAGpI,MAAM,GAAGyB,KAAK,GAAGf,aAAa,GAAGoJ,cAAc;IACrE,KAAK,IAAIjL,CAAC,GAAGsD,WAAW,CAACW,MAAM,GAAG,CAAC,EAAEjE,CAAC,IAAI,CAAC,EAAEA,CAAC,IAAI,CAAC,EAAE;MACnD,IAAMgK,GAAG,GAAG1G,WAAW,CAACtD,CAAC,CAAC;MAC1B,IAAMkL,IAAI,GAAG/M,UAAU,CAAC2F,YAAY,EAAEkG,GAAG,CAAC;MAC1C,IAAMzI,SAAS,GAAGpD,UAAU,CAAC+E,iBAAiB,EAAE8G,GAAG,CAAC;MACpD,IAAIkB,IAAI,GAAG3J,SAAS,IAAIgI,aAAa,EAAE;QACrC,OAAOS,GAAG;MACZ;IACF;IAEA,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACErB,eAAe,CACb9H,KAAsB,EACtB+C,eAA8B,EAC9BR,mBAA4B,EAC5BK,cAA8B,EAC9Bf,KAAiB,EACH;IACd,IAAM;MAAExB,KAAK;MAAEE;IAAM,CAAC,GAAGP,KAAK;IAC9B,IAAM;MAAEgB;IAAc,CAAC,GAAGT,KAAK;IAC/B,IAAM4J,aAAa,GAAG,IAAI,CAAClG,qBAAqB,CAC9CjE,KAAK,EACLuC,mBAAmB,CACpB;IACD,IAAMiG,YAAY,GAAGnI,KAAK,GAAGwB,KAAK,GAAGb,aAAa,GAAGmJ,aAAa;IAClE,KAAK,IAAIhL,CAAC,GAAGyD,cAAc,CAACQ,MAAM,GAAG,CAAC,EAAEjE,CAAC,IAAI,CAAC,EAAEA,CAAC,IAAI,CAAC,EAAE;MACtD,IAAMkK,MAAM,GAAGzG,cAAc,CAACzD,CAAC,CAAC;MAChC,IAAMmL,OAAO,GAAGhN,UAAU,CAACyF,eAAe,EAAEsG,MAAM,CAAC;MACnD,IAAMxI,WAAW,GAAGvD,UAAU,CAACiF,mBAAmB,EAAE8G,MAAM,CAAC;MAC3D,IAAIiB,OAAO,GAAGzJ,WAAW,IAAI2H,YAAY,EAAE;QACzC,OAAOa,MAAM;MACf;IACF;IAEA,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE9F,iBAAiB,CACfvD,KAAsB,EACtByC,WAA2B,EAC3BQ,YAA2B,EAC3BZ,iBAA0B,EACZ;IACd,IAAM;MAAE/B,MAAM;MAAEC;IAAM,CAAC,GAAGP,KAAK;IAC/B,IAAM;MAAEU;IAAU,CAAC,GAAGH,KAAK;IAE3B,OAAO,IAAI,CAACgK,oBAAoB,CAC9B9H,WAAW,EACXQ,YAAY,EACZZ,iBAAiB,EACjB/B,MAAM,EACNI,SAAS,CACV;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE+C,gBAAgB,CACdzD,KAAsB,EACtB4C,cAA8B,EAC9BG,eAA8B,EAC9BR,mBAA4B,EACd;IACd,IAAM;MAAElC,KAAK;MAAEE;IAAM,CAAC,GAAGP,KAAK;IAC9B,IAAM;MAAEa;IAAY,CAAC,GAAGN,KAAK;IAE7B,OAAO,IAAI,CAACgK,oBAAoB,CAC9B3H,cAAc,EACdG,eAAe,EACfR,mBAAmB,EACnBlC,KAAK,EACLQ,WAAW,CACZ;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE0J,oBAAoB,CAClBC,KAAqB,EACrBC,MAAqB,EACrBvC,SAAkB,EAClBwC,OAAe,EACfC,eAAuB,EACT;IACd,IAAIC,SAAS,GAAG,CAAC;IACjB,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAIL,KAAK,CAACpH,MAAM,GAAG,CAAC,EAAE;MACpBwH,SAAS,GAAGJ,KAAK,CAACA,KAAK,CAACpH,MAAM,GAAG,CAAC,CAAC;MACnCyH,QAAQ,GACNvN,UAAU,CAACmN,MAAM,EAAEG,SAAS,CAAC,GAAGtN,UAAU,CAAC4K,SAAS,EAAE0C,SAAS,CAAC;IACpE;IAEA,IAAIC,QAAQ,GAAGH,OAAO,EAAE;MACtBE,SAAS,IAAIzM,IAAI,CAAC2M,IAAI,CAAC,CAACJ,OAAO,GAAGG,QAAQ,IAAIF,eAAe,CAAC;IAChE;IAEA,OAAOC,SAAS;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,kBAAkB,CAChB3C,UAAsB,EACtB4C,SAAuB,EACvBC,aAA2B,EACnB;IAAA;IACR;IACA,IAAMC,cAAc,GAAGD,aAAa,EAAE;IACtC,yBAAOD,SAAS,CAACpN,GAAG,CAACwK,UAAU,CAAC,2DAAI8C,cAAc;EACpD;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEvC,mBAAmB,CAACQ,GAAiB,EAAEnJ,KAAsB,EAAU;IACrE,IAAM2J,QAAQ,GAAG,IAAI,CAACpB,WAAW,CAACY,GAAG,EAAEnJ,KAAK,CAAC;IAE7C,OAAO,IAAI,CAAC+K,kBAAkB,CAACpB,QAAQ,EAAE,IAAI,CAACpK,cAAc,EAAE,MAC5D,IAAI,CAAC4L,kBAAkB,CAAChC,GAAG,EAAEQ,QAAQ,EAAE3J,KAAK,CAAC,CAC9C;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE+G,qBAAqB,CACnBsC,MAAoB,EACpBrJ,KAAsB,EAGd;IAAA,IAFR2B,WAAyB,uEAAG,IAAI,CAACC,cAAc,CAAC5B,KAAK,CAAC;IAAA,IACtDiC,YAAoB,uEAAG,IAAI,CAACE,qBAAqB,CAACnC,KAAK,CAAC;IAExD,IAAMoL,WAAW,GAAG,IAAI,CAAC/C,cAAc,CAACgB,MAAM,EAAErJ,KAAK,CAAC;IAEtD,OAAO,IAAI,CAAC+K,kBAAkB,CAACK,WAAW,EAAE,IAAI,CAAC9L,gBAAgB,EAAE,MACjE,IAAI,CAAC+L,oBAAoB,CACvBhC,MAAM,EACN+B,WAAW,EACXpL,KAAK,EACL2B,WAAW,EACXM,YAAY,CACb,CACF;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEkF,YAAY,CACV1E,WAA2B,EAC3BzC,KAAsB,EACH;IACnB,IAAML,SAAS,GAAG,IAAIV,GAAG,EAAE;IAC3B,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsD,WAAW,CAACW,MAAM,EAAEjE,CAAC,IAAI,CAAC,EAAE;MAC9C,IAAMmM,UAAU,GAAG7I,WAAW,CAACtD,CAAC,CAAC;MACjC,IAAMwK,QAAQ,GAAG,IAAI,CAACpB,WAAW,CAAC+C,UAAU,EAAEtL,KAAK,CAAC;MACpDL,SAAS,CAACP,GAAG,CAACkM,UAAU,EAAE3B,QAAQ,CAAC;IACrC;IACA,OAAOhK,SAAS;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE4I,WAAW,CAAC+C,UAAwB,EAAEtL,KAAsB,EAAc;IACxE,IAAI,IAAI,CAACL,SAAS,CAACmH,GAAG,CAACwE,UAAU,CAAC,EAAE;MAClC,OAAOhO,UAAU,CAAC,IAAI,CAACqC,SAAS,EAAE2L,UAAU,CAAC;IAC/C;IACA,IAAM;MAAEzL;IAAU,CAAC,GAAGG,KAAK;IAC3B,IAAM2J,QAAQ,GAAGvM,SAAS,CAAC+K,aAAa,CAACmD,UAAU,EAAEzL,SAAS,CAAC;IAC/D,IAAI,CAACF,SAAS,CAACP,GAAG,CAACkM,UAAU,EAAE3B,QAAQ,CAAC;IACxC,OAAOA,QAAQ;EACjB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEvC,eAAe,CACbxE,cAA8B,EAC9B5C,KAAsB,EACH;IACnB,IAAMJ,YAAY,GAAG,IAAIX,GAAG,EAAE;IAC9B,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyD,cAAc,CAACQ,MAAM,EAAEjE,CAAC,IAAI,CAAC,EAAE;MACjD,IAAMoM,aAAa,GAAG3I,cAAc,CAACzD,CAAC,CAAC;MACvC,IAAMiM,WAAW,GAAG,IAAI,CAAC/C,cAAc,CAACkD,aAAa,EAAEvL,KAAK,CAAC;MAC7DJ,YAAY,CAACR,GAAG,CAACmM,aAAa,EAAEH,WAAW,CAAC;IAC9C;IACA,OAAOxL,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEyI,cAAc,CACZkD,aAA2B,EAC3BvL,KAAsB,EACV;IACZ,IAAMwL,gBAAgB,GAAG,IAAI,CAAC5L,YAAY,CAACkH,GAAG,CAACyE,aAAa,CAAC;IAC7D,IAAIC,gBAAgB,EAAE;MACpB,OAAOlO,UAAU,CAAC,IAAI,CAACsC,YAAY,EAAE2L,aAAa,CAAC;IACrD;IACA,IAAM;MAAEzL;IAAa,CAAC,GAAGE,KAAK;IAC9B,IAAMoL,WAAW,GAAGhO,SAAS,CAAC+K,aAAa,CAACoD,aAAa,EAAEzL,YAAY,CAAC;IACxE,IAAI,CAACF,YAAY,CAACR,GAAG,CAACmM,aAAa,EAAEH,WAAW,CAAC;IACjD,OAAOA,WAAW;EACpB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACED,kBAAkB,CAChBhC,GAAiB,EACjBQ,QAAoB,EACpB3J,KAAsB,EACd;IACR,IAAM;MAAEO;IAAM,CAAC,GAAGP,KAAK;IACvB,IAAM;MAAEyL,YAAY;MAAE/K;IAAU,CAAC,GAAGH,KAAK;IACzC,IAAI,CAACkL,YAAY,EAAE;MACjB,OAAO/K,SAAS;IAClB;IAEA,IAAMgL,WAAW,GAAG,IAAI,CAACjM,oBAAoB,CAAC7B,GAAG,CAAC+L,QAAQ,CAAC;IAC3D,IAAI+B,WAAW,IAAI,IAAI,EAAE;MACvB,OAAOA,WAAW;IACpB;;IAEA;IACA,IAAI,CAACjM,oBAAoB,CAACL,GAAG,CAACuK,QAAQ,EAAExL,IAAI,CAAC2M,IAAI,CAACpK,SAAS,CAAC,CAAC;IAC7D5C,OAAO,CAAC,IAAI,CAAC2B,oBAAoB,CAAC;IAClC,OAAOiB,SAAS;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE2K,oBAAoB,CAClBhC,MAAoB,EACpB+B,WAAuB,EACvBpL,KAAsB,EAGd;IAAA,IAFR2B,WAAyB,uEAAG,IAAI,CAACC,cAAc,CAAC5B,KAAK,CAAC;IAAA,IACtDiC,YAAoB,uEAAG,IAAI,CAACE,qBAAqB,CAACnC,KAAK,CAAC;IAExD,IAAM;MAAEO;IAAM,CAAC,GAAGP,KAAK;IACvB,IAAM;MAAE2L,eAAe;MAAEC;IAAe,CAAC,GAAGrL,KAAK;IACjD,IAAI,CAACoL,eAAe,EAAE;MACpB,IAAM;QAAE9K,WAAW,EAAXA;MAAY,CAAC,GAAGN,KAAK;MAC7B,OAAOM,YAAW;IACpB;IAEA,IAAMgL,WAAW,GAAG,IAAI,CAACC,0BAA0B,CAACV,WAAW,EAAEpL,KAAK,CAAC;IACvE,IAAM+L,SAAS,GAAG,IAAI,CAACC,wBAAwB,CAACZ,WAAW,EAAEpL,KAAK,CAAC;IACnE,IAAM0L,WAAW,GAAG,IAAI,CAAClM,sBAAsB,CAAC5B,GAAG,CAACwN,WAAW,CAAC;IAChE,IAAIvK,WAAW,GAAG1C,IAAI,CAAC2M,IAAI,CAAC3M,IAAI,CAACW,GAAG,CAAC+M,WAAW,EAAEE,SAAS,CAAC,CAAC;IAC7DlL,WAAW,GAAG1C,IAAI,CAACW,GAAG,CAAC8M,cAAc,EAAE/K,WAAW,CAAC;IACnD,IAAI6K,WAAW,IAAI,IAAI,IAAIA,WAAW,GAAG7K,WAAW,EAAE;MACpDA,WAAW,GAAG6K,WAAW;IAC3B,CAAC,MAAM;MACL,IAAI,CAAClM,sBAAsB,CAACJ,GAAG,CAACgM,WAAW,EAAEvK,WAAW,CAAC;MACzD/C,OAAO,CAAC,IAAI,CAAC0B,sBAAsB,CAAC;IACtC;IAEA,IAAI6J,MAAM,KAAK1H,WAAW,EAAE;MAC1Bd,WAAW,IAAIoB,YAAY;IAC7B;IAEA,OAAOpB,WAAW;EACpB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEiL,0BAA0B,CACxBV,WAAuB,EACvBpL,KAAsB,EACd;IACR,IAAM;MAAEQ,KAAK;MAAED;IAAM,CAAC,GAAGP,KAAK;IAC9B,IAAM;MAAEiM,UAAU;MAAEC;IAAwB,CAAC,GAAG3L,KAAK;IAErD,IAAM4L,UAAU,GAAG3L,KAAK,CAAC4L,mBAAmB,CAAChB,WAAW,EAAE,CAAC,CAAC;IAC5D,IAAIe,UAAU,KAAKzO,SAAS,IAAIyO,UAAU,KAAK,EAAE,EAAE;MACjD,IAAME,eAAe,GAAG,IAAI,CAACC,eAAe,CAACL,UAAU,EAAEjM,KAAK,CAAC;MAC/D,OAAOmM,UAAU,CAAC/I,MAAM,GAAGiJ,eAAe,GAAGH,uBAAuB,GAAG,CAAC;IAC1E;IAEA,OAAOA,uBAAuB,GAAG,CAAC;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEF,wBAAwB,CACtBZ,WAAuB,EACvBpL,KAAsB,EACd;IACR,IAAM;MAAEE,GAAG;MAAEI,MAAM;MAAED,KAAK;MAAEG,KAAK;MAAED;IAAM,CAAC,GAAGP,KAAK;IAClD,IAAM;MAAEoB,mBAAmB;MAAEC,sBAAsB;MAAEF;IAAS,CAAC,GAAGX,KAAK;IACvE,IAAM;MACJ+L,IAAI;MACJC,qBAAqB;MACrB9L,SAAS;MACTC,cAAc;MACdC,cAAc;MACdI;IACF,CAAC,GAAGT,KAAK;IAET,IAAIM,WAAW,GAAG,CAAC;IAEnB,IAAM4L,SAAS,GAAG,IAAI,CAACH,eAAe,CAACC,IAAI,EAAEvM,KAAK,CAAC;IACnD,IAAM0M,WAAW,GAAGpM,MAAM,GAAGI,SAAS;IACtC,IAAMyC,MAAM,GAAGhF,IAAI,CAAC2M,IAAI,CAAC5K,GAAG,GAAGwM,WAAW,CAAC;IAC3CtP,SAAS,CAACuP,eAAe,CACvBzM,GAAG,EACHiD,MAAM,EACN/B,mBAAmB,EACnBC,sBAAsB,EACtBF,QAAQ,EACRgI,GAAG,IAAI;MACL,IAAMQ,QAAQ,GAAG,IAAI,CAACpB,WAAW,CAACY,GAAG,EAAEnJ,KAAK,CAAC;MAC7C,IAAM4M,IAAI,GAAGpM,KAAK,CAACqM,WAAW,CAACzB,WAAW,EAAEzB,QAAQ,CAAC;MACrD,IAAIiD,IAAI,EAAE;QACR,IAAME,WAAW,GAAGN,qBAAqB,GAAG,CAAC;QAC7C3L,WAAW,GAAG1C,IAAI,CAACW,GAAG,CACpB+B,WAAW,EACX+L,IAAI,CAACxJ,MAAM,GAAGqJ,SAAS,GAAGK,WAAW,CACtC;MACH;IACF,CAAC,CACF;IAEDjM,WAAW,GAAG1C,IAAI,CAACW,GAAG,CACpBX,IAAI,CAACsK,GAAG,CACN5H,WAAW,EACX,CAACR,KAAK,GAAGM,cAAc,GAAGK,aAAa,GAAGJ,cAAc,IACtD5C,oBAAoB,CAAC+O,gBAAgB,CACxC,EACDP,qBAAqB,GAAG,CAAC,CAC1B;IAED,OAAO3L,WAAW;EACpB;;EAEA;AACF;AACA;AACA;AACA;EACEsB,qBAAqB,CAACnC,KAAsB,EAAc;IACxD,IAAM;MAAEE,GAAG;MAAEI,MAAM;MAAEE,KAAK;MAAED;IAAM,CAAC,GAAGP,KAAK;IAC3C,IAAM;MAAEU,SAAS;MAAE8I;IAAgB,CAAC,GAAGjJ,KAAK;IAC5C,IAAI,CAAClD,qBAAqB,CAACmD,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC0B,iBAAiB,EAAE;MAC7D,OAAO,CAAC;IACV;IACA,IAAI8K,WAAW,GAAG,CAAC;IAEnB,IAAMN,WAAW,GAAGpM,MAAM,GAAGI,SAAS;IACtC,IAAMyC,MAAM,GAAGhF,IAAI,CAAC2M,IAAI,CAAC5K,GAAG,GAAGwM,WAAW,CAAC;IAC3C,KAAK,IAAIvD,GAAG,GAAGjJ,GAAG,EAAEiJ,GAAG,IAAIhG,MAAM,EAAEgG,GAAG,IAAI,CAAC,EAAE;MAC3C,IAAMQ,QAAQ,GAAG,IAAI,CAACpB,WAAW,CAACY,GAAG,EAAEnJ,KAAK,CAAC;MAC7C,IAAM6J,KAAK,GAAGrJ,KAAK,CAACsJ,WAAW,CAACH,QAAQ,CAAC;MACzCqD,WAAW,GAAG7O,IAAI,CAACW,GAAG,CAACkO,WAAW,EAAExD,eAAe,IAAIK,KAAK,GAAG,CAAC,CAAC,CAAC;IACpE;IAEA,OAAOmD,WAAW;EACpB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEV,eAAe,CAACC,IAAc,EAAEvM,KAAsB,EAAU;IAC9D,IAAI,IAAI,CAACN,UAAU,CAACoH,GAAG,CAACyF,IAAI,CAAC,EAAE;MAC7B,OAAOjP,UAAU,CAAC,IAAI,CAACoC,UAAU,EAAE6M,IAAI,CAAC;IAC1C;IACA,IAAM;MAAEU;IAAQ,CAAC,GAAGjN,KAAK;IACzBiN,OAAO,CAACV,IAAI,GAAGA,IAAI;IACnB,IAAMW,WAAW,GAAGD,OAAO,CAACE,WAAW,CAAC,GAAG,CAAC;IAC5C,IAAM;MAAE9M;IAAM,CAAC,GAAG6M,WAAW;;IAE7B;IACA;IACA,IAAI,CAACxN,UAAU,CAACN,GAAG,CAACmN,IAAI,EAAElM,KAAK,CAAC;IAChC,IAAI,CAACX,UAAU,CAACN,GAAG,CAAC6N,OAAO,CAACV,IAAI,EAAElM,KAAK,CAAC;IAExC,OAAOA,KAAK;EACd;;EAEA;AACF;AACA;AACA;AACA;EACE+M,cAAc,CAAC/D,MAAkB,EAAEhL,IAAY,EAAQ;IACrD;IACA,IAAMiB,gBAAgB,GAAG,IAAIL,GAAG,CAAC,IAAI,CAACK,gBAAgB,CAAC;IACvDA,gBAAgB,CAACF,GAAG,CAACiK,MAAM,EAAElL,IAAI,CAAC2M,IAAI,CAACzM,IAAI,CAAC,CAAC;IAC7CP,OAAO,CAACwB,gBAAgB,CAAC;IACzB,IAAI,CAACA,gBAAgB,GAAGA,gBAAgB;EAC1C;;EAEA;AACF;AACA;AACA;EACE+N,gBAAgB,CAAChE,MAAkB,EAAQ;IACzC;IACA,IAAM/J,gBAAgB,GAAG,IAAIL,GAAG,CAAC,IAAI,CAACK,gBAAgB,CAAC;IACvDA,gBAAgB,CAACd,MAAM,CAAC6K,MAAM,CAAC;IAC/B,IAAI,CAAC/J,gBAAgB,GAAGA,gBAAgB;EAC1C;;EAEA;AACF;AACA;AACA;AACA;EACEgO,YAAY,CAACnE,GAAe,EAAE9K,IAAY,EAAQ;IAChD;IACA,IAAMkB,cAAc,GAAG,IAAIN,GAAG,CAAC,IAAI,CAACM,cAAc,CAAC;IACnDA,cAAc,CAACH,GAAG,CAAC+J,GAAG,EAAEhL,IAAI,CAAC2M,IAAI,CAACzM,IAAI,CAAC,CAAC;IACxCP,OAAO,CAACyB,cAAc,CAAC;IACvB,IAAI,CAACA,cAAc,GAAGA,cAAc;EACtC;;EAEA;AACF;AACA;AACA;EACEgO,cAAc,CAACpE,GAAe,EAAQ;IACpC;IACA,IAAM5J,cAAc,GAAG,IAAIN,GAAG,CAAC,IAAI,CAACM,cAAc,CAAC;IACnDA,cAAc,CAACf,MAAM,CAAC2K,GAAG,CAAC;IAC1B,IAAI,CAAC5J,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACE,oBAAoB,CAACjB,MAAM,CAAC2K,GAAG,CAAC;EACvC;AACF;AAAC,gBAxrDYnL,oBAAoB,gBAEX,KAAK;AAAA,gBAFdA,oBAAoB,sBAKL,GAAG;AAqrD/B,eAAeA,oBAAoB"}
1
+ {"version":3,"file":"GridMetricCalculator.js","names":["clamp","GridUtils","isExpandableGridModel","getOrThrow","map","key","defaultValue","undefined","value","get","Error","trimMap","cacheSize","GridMetricCalculator","CACHE_SIZE","targetSize","Math","floor","size","iter","keys","delete","next","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","Map","x","i","set","constructor","userColumnWidths","userRowHeights","calculatedColumnWidths","calculatedRowHeights","fontWidths","modelRows","modelColumns","movedRows","movedColumns","getMetrics","state","left","top","leftOffset","topOffset","width","height","theme","model","draggingColumn","rowHeight","rowHeaderWidth","rowFooterWidth","columnWidth","columnHeaderHeight","minScrollHandleSize","scrollBarSize","clear","columnCount","rowCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnHeaderMaxDepth","firstRow","getFirstRow","firstColumn","getFirstColumn","gridX","getGridX","gridY","getGridY","treePaddingX","hasExpandableRows","calculateTreePaddingX","treePaddingY","visibleRowHeights","getVisibleRowHeights","visibleColumnWidths","getVisibleColumnWidths","visibleRows","Array","from","visibleColumns","getFloatingRowHeights","getFloatingColumnWidths","visibleColumnXs","getVisibleColumnXs","visibleRowYs","getVisibleRowYs","bottom","length","right","bottomViewport","getBottomViewport","rightViewport","getRightViewport","floatingTopHeight","getFloatingTopHeight","floatingBottomHeight","getFloatingBottomHeight","floatingLeftWidth","getFloatingLeftWidth","floatingRightWidth","getFloatingRightWidth","columnWidthValues","values","rowHeightValues","maxX","reduce","w","maxY","y","h","scrollableContentWidth","scrollableContentHeight","scrollableViewportWidth","scrollableViewportHeight","lastLeftWithoutScroll","getLastLeft","lastLeftWithScroll","lastTopWithoutScroll","getLastTop","lastTopWithScroll","lastLeft","lastTop","hasHorizontalBar","horizontalBarHeight","hasVerticalBar","verticalBarWidth","barWidth","barHeight","barLeft","barTop","horizontalHandlePercent","verticalHandlePercent","handleWidth","handleHeight","leftColumnWidth","topRowHeight","leftOffsetPercent","topOffsetPercent","horizontalScrollPercent","verticalScrollPercent","scrollX","scrollY","floatingRows","getFloatingRowYs","floatingColumns","getFloatingColumnXs","draggingColumns","range","push","has","getVisibleColumnWidth","allRows","concat","allColumns","getModelRows","getModelColumns","visibleRowTreeBoxes","getVisibleRowTreeBoxes","topVisible","getTopVisible","leftVisible","getLeftVisible","bottomVisible","getBottomVisible","rightVisible","getRightVisible","getVisibleHeight","getVisibleWidth","getFirstIndex","itemSizes","getModelIndex","modelIndex","getModelColumn","bind","getModelRow","visibleWidth","visibleHeight","getVisibleRowHeight","getTopForTopVisible","getTopForBottomVisible","availableHeight","getLeftForLeftVisible","getLeftForRightVisible","availableWidth","rowHeights","row","columnWidths","column","columnWidthMap","rowHeightMap","treeDepthIndent","treeHorizontalPadding","forEach","modelRow","isRowExpandable","depth","depthForRow","x1","x2","y1","y2","floatingWidth","floatingHeight","rowY","columnX","getLastIndexViewport","items","itemXs","maxSize","defaultItemSize","lastIndex","dataSize","ceil","getVisibleItemSize","userSizes","calculateSize","calculatedSize","calculateRowHeight","modelColumn","calculateColumnWidth","visibleRow","visibleColumn","hasVisibleColumn","autoSizeRows","cachedValue","autoSizeColumns","minColumnWidth","headerWidth","calculateColumnHeaderWidth","dataWidth","calculateColumnDataWidth","headerFont","headerHorizontalPadding","headerText","textForColumnHeader","headerFontWidth","getWidthForFont","font","cellHorizontalPadding","fontWidth","rowsPerPage","iterateAllItems","text","textForCell","cellPadding","min","MAX_COLUMN_WIDTH","treePadding","context","textMetrics","measureText","setColumnWidth","resetColumnWidth","setRowHeight","resetRowHeight"],"sources":["../src/GridMetricCalculator.ts"],"sourcesContent":["import clamp from 'lodash.clamp';\nimport GridModel from './GridModel';\nimport type {\n GridMetrics,\n BoxCoordinates,\n Coordinate,\n CoordinateMap,\n VisibleIndex,\n VisibleToModelMap,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n SizeMap,\n} from './GridMetrics';\nimport GridUtils from './GridUtils';\nimport { GridFont, GridTheme } from './GridTheme';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport { DraggingColumn } from './mouse-handlers/GridColumnMoveMouseHandler';\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n\nexport interface GridMetricState {\n // The top/left cell of the scrolled viewport\n left: VisibleIndex;\n top: VisibleIndex;\n\n // The scroll offset within the top/left of the viewport\n leftOffset: Coordinate;\n topOffset: Coordinate;\n\n // Width and height of the total canvas area\n width: number;\n height: number;\n\n // The canvas context\n context: CanvasRenderingContext2D;\n\n // The grid theme\n theme: GridTheme;\n\n // The model used by the grid\n model: GridModel;\n\n // Moved columns/rows in the grid\n movedColumns: MoveOperation[];\n movedRows: MoveOperation[];\n\n // Whether the scrollbars are currently being dragged\n isDraggingHorizontalScrollBar: boolean;\n isDraggingVerticalScrollBar: boolean;\n\n draggingColumn: DraggingColumn | null;\n}\n\n/**\n * Retrieve a value from a map. If the value is not found and no default value is provided, throw.\n * Use when the value _must_ be present\n * @param map The map to get the value from\n * @param key The key to fetch the value for\n * @param defaultValue A default value to set if the key is not present\n * @returns The value set for that key\n */\nexport function getOrThrow<K, V>(\n map: Map<K, V>,\n key: K,\n defaultValue: V | undefined = undefined\n): V {\n const value = map.get(key) ?? defaultValue;\n if (value !== undefined) {\n return value;\n }\n\n throw new Error(`Missing value for key ${key}`);\n}\n\n/**\n * Trim the provided map in place. Trims oldest inserted items down to the target size if the cache size is exceeded.\n * Instead of trimming one item on every tick, we trim half the items so there isn't a cache clear on every new item.\n * @param map The map to trim\n * @param cacheSize The maximum number of elements to cache\n * @param targetSize The number of elements to reduce the cache down to if `cacheSize` is exceeded\n */\nexport function trimMap(\n map: Map<unknown, unknown>,\n cacheSize = GridMetricCalculator.CACHE_SIZE,\n targetSize = Math.floor(cacheSize / 2)\n): void {\n if (map.size > cacheSize) {\n const iter = map.keys();\n while (map.size > targetSize) {\n map.delete(iter.next().value);\n }\n }\n}\n\n/**\n * Get the coordinates of floating items in one dimension.\n * Can be used for getting the y coordinates of floating rows, or x coordinates of floating columns, calculated using the `sizeMap` passed in.\n * @param startCount The number of floating items at the start (ie. `floatingTopRowCount` for rows, `floatingLeftColumnCount` for columns)\n * @param endCount The number of floating items at the end (ie. `floatingBottomRowCount` for rows, `floatingRightColumnCount` for columns)\n * @param totalCount Total number of items in this dimension (ie. `rowCount` for rows, `columnCount` for columns)\n * @param max The max coordinate value (ie. `maxY` for rows, `maxX` for columns)\n * @param sizeMap Map from index to size of item (ie. `rowHeightMap` for rows, `columnWidthMap` for columns)\n */\nexport function getFloatingCoordinates(\n startCount: number,\n endCount: number,\n totalCount: number,\n max: number,\n sizeMap: SizeMap\n): CoordinateMap {\n const coordinates = new Map();\n let x = 0;\n for (let i = 0; i < startCount && i < totalCount; i += 1) {\n coordinates.set(i, x);\n x += getOrThrow(sizeMap, i);\n }\n\n x = max;\n for (let i = 0; i < endCount && totalCount - i - 1 >= 0; i += 1) {\n x -= getOrThrow(sizeMap, totalCount - i - 1);\n coordinates.set(totalCount - i - 1, x);\n }\n return coordinates;\n}\n\n/**\n * Class to calculate all the metrics for drawing a grid.\n * Call getMetrics() with the state to get the full metrics.\n * Override this class and override the individual methods to provide additional functionality.\n */\nexport class GridMetricCalculator {\n /** The size of the caches this calculator stores */\n static CACHE_SIZE = 10000;\n\n /** The maximum column width as a percentage of the full grid */\n static MAX_COLUMN_WIDTH = 0.8;\n\n /** User set column widths */\n protected userColumnWidths: ModelSizeMap;\n\n /** User set row heights */\n protected userRowHeights: ModelSizeMap;\n\n /** Calculated column widths based on cell contents */\n protected calculatedColumnWidths: ModelSizeMap;\n\n /** Calculated row heights based on cell contents */\n protected calculatedRowHeights: ModelSizeMap;\n\n /** Cache of fonts to estimated width of one char */\n protected fontWidths: Map<string, number>;\n\n /** Map from visible index to model index for rows (e.g. reversing movedRows operations) */\n protected modelRows: VisibleToModelMap;\n\n /** Map from visible index to model index for columns (e.g. reversing movedColumns operations) */\n protected modelColumns: VisibleToModelMap;\n\n /** List of moved row operations. Need to track the previous value so we know if modelRows needs to be cleared. */\n protected movedRows: MoveOperation[];\n\n /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */\n protected movedColumns: MoveOperation[];\n\n constructor({\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n calculatedRowHeights = new Map(),\n fontWidths = new Map(),\n modelRows = new Map(),\n modelColumns = new Map(),\n movedRows = [] as MoveOperation[],\n movedColumns = [] as MoveOperation[],\n } = {}) {\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.fontWidths = fontWidths;\n\n // Need to track the last moved rows/columns array so we know if we need to reset our models cache\n this.modelRows = modelRows;\n this.modelColumns = modelColumns;\n this.movedRows = movedRows;\n this.movedColumns = movedColumns;\n }\n\n /**\n * Get the metrics for the provided metric state\n * @params state The state to get metrics for\n * @returns The full metrics\n */\n getMetrics(state: GridMetricState): GridMetrics {\n const {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n theme,\n model,\n movedRows,\n movedColumns,\n draggingColumn,\n } = state;\n const {\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n columnWidth,\n columnHeaderHeight,\n minScrollHandleSize,\n scrollBarSize,\n } = theme;\n\n if (movedRows !== this.movedRows) {\n this.movedRows = movedRows;\n this.modelRows.clear();\n }\n\n if (movedColumns !== this.movedColumns) {\n this.movedColumns = movedColumns;\n this.modelColumns.clear();\n }\n\n const {\n columnCount,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnHeaderMaxDepth,\n } = model;\n\n // Get some basic metrics\n const firstRow = this.getFirstRow(state);\n const firstColumn = this.getFirstColumn(state);\n\n const gridX = this.getGridX(state);\n const gridY = this.getGridY(state);\n\n const treePaddingX =\n isExpandableGridModel(model) && model.hasExpandableRows\n ? this.calculateTreePaddingX(state)\n : 0;\n const treePaddingY = 0; // We don't support trees on columns (at least not yet)\n\n let visibleRowHeights = this.getVisibleRowHeights(state);\n let visibleColumnWidths = this.getVisibleColumnWidths(\n state,\n firstColumn,\n treePaddingX\n );\n\n // Calculate the metrics for the main grid\n const visibleRows = Array.from(visibleRowHeights.keys());\n const visibleColumns = Array.from(visibleColumnWidths.keys());\n\n // Add the floating row heights/column widths\n // TODO #316: Create an allRowHeights/allColumnWidths maps\n visibleRowHeights = new Map([\n ...visibleRowHeights,\n ...this.getFloatingRowHeights(state),\n ]);\n visibleColumnWidths = new Map([\n ...visibleColumnWidths,\n ...this.getFloatingColumnWidths(state),\n ]);\n\n let visibleColumnXs = this.getVisibleColumnXs(\n visibleColumnWidths,\n visibleColumns,\n leftOffset\n );\n let visibleRowYs = this.getVisibleRowYs(\n visibleRowHeights,\n visibleRows,\n topOffset\n );\n\n const bottom =\n visibleRows.length > 0 ? visibleRows[visibleRows.length - 1] : top;\n const right =\n visibleColumns.length > 0\n ? visibleColumns[visibleColumns.length - 1]\n : left;\n\n const bottomViewport = this.getBottomViewport(\n state,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n const rightViewport = this.getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths\n );\n\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n\n const columnWidthValues = Array.from(visibleColumnWidths.values());\n const rowHeightValues = Array.from(visibleRowHeights.values());\n const maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;\n const maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;\n\n // How much total space the content will take\n const scrollableContentWidth = leftOffset + maxX + rowFooterWidth;\n const scrollableContentHeight = topOffset + maxY;\n\n // Visible space available in the canvas viewport\n const scrollableViewportWidth = width - gridX;\n const scrollableViewportHeight = height - gridY;\n\n const lastLeftWithoutScroll = this.getLastLeft(\n state,\n null,\n scrollableViewportWidth - rowFooterWidth\n );\n const lastLeftWithScroll = this.getLastLeft(\n state,\n null,\n scrollableViewportWidth - rowFooterWidth - scrollBarSize\n );\n\n const lastTopWithoutScroll = this.getLastTop(\n state,\n null,\n scrollableViewportHeight - floatingBottomHeight\n );\n const lastTopWithScroll = this.getLastTop(\n state,\n null,\n scrollableViewportHeight - floatingBottomHeight - scrollBarSize\n );\n\n let lastLeft = lastLeftWithScroll;\n let lastTop = lastTopWithScroll;\n if (lastLeftWithoutScroll === 0 && lastTopWithoutScroll === 0) {\n // Fully visible without any scroll bars\n lastLeft = 0;\n lastTop = 0;\n }\n\n // Calculate some metrics for the scroll bars\n const hasHorizontalBar = lastLeft > 0;\n const horizontalBarHeight = hasHorizontalBar ? scrollBarSize : 0;\n const hasVerticalBar = lastTop > 0;\n const verticalBarWidth = hasVerticalBar ? scrollBarSize : 0;\n const barWidth = width - rowHeaderWidth - verticalBarWidth;\n const barHeight = height - columnHeaderHeight - horizontalBarHeight;\n const barLeft = rowHeaderWidth;\n const barTop = columnHeaderHeight;\n\n // How big the scroll handle is relative to the bar\n const horizontalHandlePercent =\n columnCount === 1\n ? barWidth / scrollableContentWidth\n : (columnCount - lastLeft) / columnCount;\n\n const verticalHandlePercent =\n rowCount === 1\n ? barHeight / scrollableContentHeight\n : (rowCount - lastTop) / rowCount;\n\n const handleWidth = hasHorizontalBar\n ? clamp(\n barWidth * horizontalHandlePercent,\n minScrollHandleSize,\n barWidth - 1\n )\n : 0;\n const handleHeight = hasVerticalBar\n ? clamp(\n barHeight * verticalHandlePercent,\n minScrollHandleSize,\n barHeight - 1\n )\n : 0;\n\n const leftColumnWidth = getOrThrow(visibleColumnWidths, left, 0);\n const topRowHeight = getOrThrow(visibleRowHeights, top, 0);\n const leftOffsetPercent =\n leftColumnWidth > 0 ? leftOffset / leftColumnWidth : 0;\n const topOffsetPercent = topRowHeight > 0 ? topOffset / topRowHeight : 0;\n\n // How much of the available space has been scrolled\n const horizontalScrollPercent =\n columnCount === 1\n ? leftOffset / (scrollableContentWidth - scrollableViewportWidth)\n : (left + leftOffsetPercent) / lastLeft;\n const verticalScrollPercent =\n rowCount === 1\n ? topOffset / (scrollableContentHeight - scrollableViewportHeight)\n : (top + topOffsetPercent) / lastTop;\n\n const scrollX = hasHorizontalBar\n ? horizontalScrollPercent * (barWidth - handleWidth)\n : 0;\n const scrollY = hasVerticalBar\n ? verticalScrollPercent * (barHeight - handleHeight)\n : 0;\n\n // Now add the floating sections positions\n let floatingRows: ModelIndex[] = [];\n if (floatingTopRowCount > 0 || floatingBottomRowCount > 0) {\n floatingRows = [\n ...Array(floatingTopRowCount).keys(),\n ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1),\n ];\n visibleRowYs = new Map([\n ...visibleRowYs,\n ...this.getFloatingRowYs(\n state,\n visibleRowHeights,\n Math.floor(height - gridY - horizontalBarHeight)\n ),\n ]);\n }\n\n let floatingColumns: ModelIndex[] = [];\n if (floatingLeftColumnCount > 0 || floatingRightColumnCount > 0) {\n floatingColumns = [\n ...Array(floatingLeftColumnCount).keys(),\n ...[...Array(floatingRightColumnCount).keys()].map(\n i => columnCount - i - 1\n ),\n ];\n visibleColumnXs = new Map([\n ...visibleColumnXs,\n ...this.getFloatingColumnXs(\n state,\n visibleColumnWidths,\n Math.floor(width - gridX - verticalBarWidth)\n ),\n ]);\n }\n\n const draggingColumns: VisibleIndex[] = [];\n if (draggingColumn) {\n for (\n let i = draggingColumn.range[0];\n i <= draggingColumn.range[1];\n i += 1\n ) {\n draggingColumns.push(i);\n if (!visibleColumnWidths.has(i)) {\n visibleColumnWidths.set(i, this.getVisibleColumnWidth(i, state));\n }\n\n if (!visibleColumnXs.has(i)) {\n visibleColumnXs.set(i, 0);\n }\n }\n }\n\n const allRows = visibleRows.concat(floatingRows);\n const allColumns = visibleColumns\n .concat(floatingColumns)\n .concat(draggingColumns);\n const modelRows = this.getModelRows(allRows, state);\n const modelColumns = this.getModelColumns(allColumns, state);\n\n const visibleRowTreeBoxes = this.getVisibleRowTreeBoxes(\n visibleRowHeights,\n modelRows,\n state\n );\n\n // Calculate the visible viewport based on scroll position and floating sections\n const topVisible = this.getTopVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows\n );\n const leftVisible = this.getLeftVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns\n );\n const bottomVisible =\n lastTop > 0\n ? this.getBottomVisible(\n state,\n visibleRowYs,\n visibleRowHeights,\n visibleRows,\n gridY\n )\n : bottom;\n const rightVisible =\n lastLeft > 0\n ? this.getRightVisible(\n state,\n visibleColumnXs,\n visibleColumnWidths,\n visibleColumns,\n gridX\n )\n : right;\n\n const {\n fontWidths,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths,\n } = this;\n\n return {\n // Row/Column metrics from model\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n rowCount,\n columnWidth,\n columnCount,\n columnHeaderHeight,\n\n // Floating row and column counts\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n\n // The grid offset from the top left\n gridX,\n gridY,\n\n // Index of non-hidden row/columns\n firstRow,\n firstColumn,\n\n // The amount of padding for tree (if applicable)\n treePaddingX,\n treePaddingY,\n\n // What viewport is currently visible, limited by data size\n left,\n top,\n bottom,\n right,\n topOffset,\n leftOffset,\n\n // Bottom and right that are fully visible, not overlapped by scroll bars or anything\n topVisible,\n leftVisible,\n bottomVisible,\n rightVisible,\n\n // Bottom and right of the viewport, not limited by data size\n bottomViewport,\n rightViewport,\n\n // Canvas width/height\n width,\n height,\n\n // Max x/y coordinate of the grid (does not include headers)\n maxX,\n maxY,\n\n // Last valid column/row that can be the left/top of the grid\n lastLeft,\n lastTop,\n\n // Scroll bar metrics\n barHeight,\n barTop,\n barWidth,\n barLeft,\n handleHeight,\n handleWidth,\n hasHorizontalBar,\n hasVerticalBar,\n verticalBarWidth,\n horizontalBarHeight,\n\n // The vertical x/y scroll amount\n scrollX,\n scrollY,\n\n scrollableContentWidth,\n scrollableContentHeight,\n\n scrollableViewportWidth,\n scrollableViewportHeight,\n\n // Array of visible rows/columns, by grid index\n visibleRows,\n visibleColumns,\n\n // Array of floating rows/columns, by grid index\n floatingRows,\n floatingColumns,\n\n // Array of all rows/columns, visible and floating, by grid index\n allRows,\n allColumns,\n\n // Map of the height/width of visible rows/columns\n // TODO #316: This should be split into allRowHeights/visibleRowHeights/floatingRowHeights ideally\n visibleRowHeights,\n visibleColumnWidths,\n\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n\n // Map of the X/Y coordinates of the rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n\n // The boxes user can click on for expanding/collapsing tree rows\n visibleRowTreeBoxes,\n\n // Mapping from visible row indexes to the model row/columns they pull from\n modelRows,\n modelColumns,\n\n movedRows,\n movedColumns,\n\n // Map of the width of the fonts\n fontWidths,\n\n // Map of user set column/row width/height\n userColumnWidths,\n userRowHeights,\n\n // Map of calculated row/column height/width\n calculatedRowHeights,\n calculatedColumnWidths,\n\n columnHeaderMaxDepth,\n };\n }\n\n /**\n * The x offset of the grid\n * @param state The current grid state\n * @returns x value of the left side of the first cell\n */\n getGridX(state: GridMetricState): Coordinate {\n const { theme } = state;\n const { rowHeaderWidth } = theme;\n\n return rowHeaderWidth;\n }\n\n /**\n * The y offset of the grid\n * @param state The current grid state\n * @returns y value of the top side of the first cell\n */\n getGridY(state: GridMetricState): Coordinate {\n const { theme, model } = state;\n const { columnHeaderHeight } = theme;\n const { columnHeaderMaxDepth } = model;\n\n return columnHeaderMaxDepth * columnHeaderHeight;\n }\n\n /**\n * The height of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleRowHeights All the visible row heights\n * @returns The visible height in pixels\n */\n getVisibleHeight(\n state: GridMetricState,\n visibleRowHeights: SizeMap = this.getFloatingRowHeights(state)\n ): number {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const floatingTopHeight = this.getFloatingTopHeight(\n state,\n visibleRowHeights\n );\n\n return (\n height - floatingBottomHeight - floatingTopHeight - gridY - scrollBarSize\n );\n }\n\n /**\n * The width of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleColumnWidths All the visible column widths\n * @returns The visible width in pixels\n */\n getVisibleWidth(\n state: GridMetricState,\n visibleColumnWidths: SizeMap = this.getFloatingColumnWidths(state)\n ): number {\n const { width, theme } = state;\n const { scrollBarSize, rowFooterWidth } = theme;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(\n state,\n visibleColumnWidths\n );\n\n return (\n width -\n floatingLeftWidth -\n floatingRightWidth -\n gridX -\n scrollBarSize -\n rowFooterWidth\n );\n }\n\n /**\n * Retrieve the index of the first non-hidden item\n * @param itemSizes The size of the items in this dimension\n * @param getModelIndex A function to map from the Index to the ModelIndex\n * @param state The current grid state\n * @returns The first item that is not hidden\n */\n getFirstIndex(\n itemSizes: ModelSizeMap,\n getModelIndex: (\n visibleIndex: VisibleIndex,\n state: GridMetricState\n ) => ModelIndex,\n state: GridMetricState\n ): VisibleIndex {\n // We only need to check at the very most the number of items the user has hidden + 1\n const max = itemSizes.size + 1;\n for (let i = 0; i < max; i += 1) {\n const modelIndex = getModelIndex(i, state);\n if (itemSizes.get(modelIndex) !== 0) {\n return i;\n }\n }\n return 0;\n }\n\n /**\n * Get the first column index that isn't hidden\n * @param state The current grid state\n * @returns The first column that is not hidden\n */\n getFirstColumn(state: GridMetricState): VisibleIndex {\n return this.getFirstIndex(\n this.userColumnWidths,\n this.getModelColumn.bind(this),\n state\n );\n }\n\n /**\n * Get the first row index that isn't hidden\n * @param state The current grid state\n * @returns The first row that is not hidden\n */\n getFirstRow(state: GridMetricState): VisibleIndex {\n return this.getFirstIndex(\n this.userRowHeights,\n this.getModelRow.bind(this),\n state\n );\n }\n\n /**\n * Get the last column that can be the left most column (e.g. scrolled to the right)\n * If no right column is provided, then the last column is used.\n * @param state The current grid state\n * @param right The right-most column to be visible, or null to default to last cell\n * @param visibleWidth The width of the \"visible\" area (excluding floating items)\n * @returns The index of the last left visible column\n */\n getLastLeft(\n state: GridMetricState,\n right: VisibleIndex | null,\n visibleWidth: number\n ): VisibleIndex {\n const { model } = state;\n const { columnCount, floatingRightColumnCount } = model;\n\n let lastLeft = Math.max(0, columnCount - floatingRightColumnCount - 1);\n if (right != null) {\n lastLeft = right;\n }\n let x = 0;\n while (lastLeft >= 0) {\n const columnWidth = this.getVisibleColumnWidth(lastLeft, state);\n x += columnWidth;\n\n if (x >= visibleWidth) {\n return clamp(lastLeft + 1, 0, right ?? columnCount - 1);\n }\n\n lastLeft -= 1;\n }\n\n return 0;\n }\n\n /**\n * The last row that can be the top row (e.g. scrolled to the bottom)\n * If no bottom row is provided, then the last row that is not floating is used\n * @param state The current grid state\n * @param bottom The bottom-most row to be visible, or null to default to last cell\n * @param visibleHeight The height of the \"visible\" area (excluding floating items)\n * @returns The index of the last top visible row\n */\n getLastTop(\n state: GridMetricState,\n bottom: VisibleIndex | null,\n visibleHeight: number\n ): VisibleIndex {\n const { model } = state;\n const { rowCount, floatingBottomRowCount } = model;\n\n let lastTop = Math.max(0, rowCount - floatingBottomRowCount - 1);\n if (bottom != null) {\n lastTop = bottom;\n }\n let y = 0;\n while (lastTop >= 0) {\n const rowHeight = this.getVisibleRowHeight(lastTop, state);\n y += rowHeight;\n\n if (y >= visibleHeight) {\n return clamp(lastTop + 1, 0, rowCount - 1);\n }\n\n lastTop -= 1;\n }\n\n return 0;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `topVisible` is completely visible, taking the floating rows into account.\n * The `top` row is at the top underneath any floating rows, whereas `topVisible` is visible below the floating rows.\n * If there are no floating rows, they should be the same value.\n * @param state The grid metric state\n * @param topVisible The top row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForTopVisible(\n state: GridMetricState,\n topVisible: VisibleIndex\n ): VisibleIndex {\n const floatingTopHeight = this.getFloatingTopHeight(state);\n let top = topVisible;\n let y = 0;\n while (top > 0 && y < floatingTopHeight) {\n top -= 1;\n y += this.getVisibleRowHeight(top, state);\n }\n return top;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `bottomVisible` is completely visible\n * at the bottom of the visible viewport, taking the floating rows into account.\n * @param state The grid metric state\n * @param bottomVisible The bottom row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForBottomVisible(\n state: GridMetricState,\n bottomVisible: VisibleIndex\n ): VisibleIndex {\n const { height } = state;\n const gridY = this.getGridY(state);\n const floatingBottomHeight = this.getFloatingBottomHeight(state);\n const availableHeight = height - gridY - floatingBottomHeight;\n return this.getLastTop(state, bottomVisible, availableHeight);\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `leftVisible` is completely visible\n * at the left of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param leftVisible The left column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForLeftVisible(\n state: GridMetricState,\n leftVisible: VisibleIndex\n ): VisibleIndex {\n const floatingLeftWidth = this.getFloatingLeftWidth(state);\n let left = leftVisible;\n let x = 0;\n while (left > 0 && x < floatingLeftWidth) {\n left -= 1;\n x += this.getVisibleColumnWidth(left, state);\n }\n return left;\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `rightVisible` is completely visible\n * at the right of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param rightVisible The right column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForRightVisible(\n state: GridMetricState,\n rightVisible: VisibleIndex\n ): VisibleIndex {\n const { width } = state;\n const gridX = this.getGridX(state);\n const floatingRightWidth = this.getFloatingRightWidth(state);\n const availableWidth = width - gridX - floatingRightWidth;\n return this.getLastLeft(state, rightVisible, availableWidth);\n }\n\n /**\n * Retrieve a map of the height of each floating row\n * @param state The grid metric state\n * @returns The heights of all the floating rows\n */\n getFloatingRowHeights(state: GridMetricState): SizeMap {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n const rowHeights = new Map();\n for (let i = 0; i < floatingTopRowCount && i < rowCount; i += 1) {\n rowHeights.set(i, this.getVisibleRowHeight(i, state));\n }\n\n for (\n let i = 0;\n i < floatingBottomRowCount && rowCount - i - 1 >= 0;\n i += 1\n ) {\n const row = rowCount - i - 1;\n rowHeights.set(row, this.getVisibleRowHeight(row, state));\n }\n\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the height of all the visible rows (non-floating)\n * @param state The grid metric state\n * @returns The heights of all the visible rows\n */\n getVisibleRowHeights(state: GridMetricState): SizeMap {\n const { top, topOffset, height, model } = state;\n\n let y = 0;\n let row = top;\n const rowHeights = new Map();\n const { rowCount } = model;\n while (y < height + topOffset && row < rowCount) {\n const rowHeight = this.getVisibleRowHeight(row, state);\n rowHeights.set(row, rowHeight);\n y += rowHeight;\n row += 1;\n }\n\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the width of each floating column\n * @param state The grid metric state\n * @param firstColumn The first non-hidden column\n * @param treePaddingX The amount of padding taken up for the tree expansion buttons\n * @returns The widths of all the floating columns\n */\n getFloatingColumnWidths(\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): SizeMap {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n const columnWidths = new Map();\n for (let i = 0; i < floatingLeftColumnCount && i < columnCount; i += 1) {\n columnWidths.set(\n i,\n this.getVisibleColumnWidth(i, state, firstColumn, treePaddingX)\n );\n }\n\n for (\n let i = 0;\n i < floatingRightColumnCount && columnCount - i - 1 >= 0;\n i += 1\n ) {\n const column = columnCount - i - 1;\n columnWidths.set(\n column,\n this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX)\n );\n }\n\n return columnWidths;\n }\n\n /**\n * Retrieve a map of the width of all the visible columns (non-floating)\n * @param state The grid metric state\n * @returns The widths of all the visible columns\n */\n getVisibleColumnWidths(\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): SizeMap {\n const { left, leftOffset, width, model } = state;\n\n let x = 0;\n let column = left;\n const columnWidths = new Map();\n const { columnCount } = model;\n while (x < width + leftOffset && column < columnCount) {\n const columnWidth = this.getVisibleColumnWidth(\n column,\n state,\n firstColumn,\n treePaddingX\n );\n columnWidths.set(column, columnWidth);\n x += columnWidth;\n column += 1;\n }\n\n return columnWidths;\n }\n\n /**\n * Retrieve a map of all the floating columns to their x coordinate\n * @param state The grid metric state\n * @param columnWidthMap Map from visible index to column width\n * @param maxX The maximum X size for the grid\n * @returns Map of the x coordinate of all floating columns\n */\n getFloatingColumnXs(\n state: GridMetricState,\n columnWidthMap: SizeMap,\n maxX: Coordinate\n ): CoordinateMap {\n const { model } = state;\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n } = model;\n\n return getFloatingCoordinates(\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n maxX,\n columnWidthMap\n );\n }\n\n /**\n * Retrieve a map of all the visible columns to their x coordinate.\n * Starts at leftOffset with the first index in `visibleColumns`, then\n * calculates all the coordinates from there\n * @param visibleColumnWidths Map of visible column index to widths\n * @param visibleColumns All visible columns\n * @param leftOffset The left scroll offset\n * @returns Map of the x coordinate of all visible columns\n */\n getVisibleColumnXs(\n visibleColumnWidths: SizeMap,\n visibleColumns: VisibleIndex[],\n leftOffset: number\n ): CoordinateMap {\n const visibleColumnXs = new Map();\n let x = -leftOffset;\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n visibleColumnXs.set(column, x);\n x += columnWidth;\n }\n\n return visibleColumnXs;\n }\n\n /**\n * Retrieve a map of all the floating rows to their y coordinate\n * @param state The grid metric state\n * @param rowHeightMap Map of visible index to row height\n * @param maxY The maximum Y size for the grid\n * @returns Map of the y coordinate of all floating rows\n */\n getFloatingRowYs(\n state: GridMetricState,\n rowHeightMap: SizeMap,\n maxY: Coordinate\n ): CoordinateMap {\n const { model } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n\n return getFloatingCoordinates(\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n maxY,\n rowHeightMap\n );\n }\n\n /**\n * Retrieve a map of all the visible rows to their y coordinate.\n * Starts at topOffset with the first index in `visibleRows`, then\n * calculates all the coordinates from there\n * @param visibleRowHeights Map of visible row index to heights\n * @param visibleRows All visible rows\n * @param topOffset The top scroll offset\n * @returns Map of the y coordinate of all visible rows\n */\n getVisibleRowYs(\n visibleRowHeights: SizeMap,\n visibleRows: VisibleIndex[],\n topOffset: number\n ): CoordinateMap {\n const visibleRowYs = new Map();\n let y = -topOffset;\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const rowHeight = getOrThrow(visibleRowHeights, row);\n visibleRowYs.set(row, y);\n y += rowHeight;\n }\n\n return visibleRowYs;\n }\n\n /**\n * Calculates the tree box click areas that are visible. In relation to the columnX/rowY\n * @param visibleRowHeights Map of visible index to row height\n * @param modelRows Map from visible `Index` to `ModelIndex`\n * @param state The grid metric state\n * @returns Coordinates of tree boxes for each row\n */\n getVisibleRowTreeBoxes(\n visibleRowHeights: SizeMap,\n modelRows: VisibleToModelMap,\n state: GridMetricState\n ): Map<VisibleIndex, BoxCoordinates> {\n const visibleRowTreeBoxes = new Map();\n const { model, theme } = state;\n const { treeDepthIndent, treeHorizontalPadding } = theme;\n\n if (isExpandableGridModel(model) && model.hasExpandableRows) {\n visibleRowHeights.forEach((rowHeight, row) => {\n const modelRow = getOrThrow(modelRows, row);\n if (model.isRowExpandable(modelRow)) {\n const depth = model.depthForRow(modelRow);\n const x1 = depth * treeDepthIndent + treeHorizontalPadding;\n const x2 = (depth + 1) * treeDepthIndent + treeHorizontalPadding;\n const y1 = 0;\n const y2 = rowHeight;\n visibleRowTreeBoxes.set(row, { x1, y1, x2, y2 });\n }\n });\n }\n\n return visibleRowTreeBoxes;\n }\n\n /**\n * Get the total width of the floating columns on the left\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating left section\n */\n getFloatingLeftWidth(\n state: GridMetricState,\n columnWidths: SizeMap = this.getFloatingColumnWidths(state)\n ): number {\n const { model } = state;\n const { floatingLeftColumnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, i);\n }\n return floatingWidth;\n }\n\n /**\n * Get the total width of the floating columns on the right\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating right section\n */\n getFloatingRightWidth(\n state: GridMetricState,\n columnWidths: SizeMap = this.getFloatingColumnWidths(state)\n ): number {\n const { model } = state;\n const { floatingRightColumnCount, columnCount } = model;\n let floatingWidth = 0;\n for (let i = 0; i < floatingRightColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, columnCount - i - 1);\n }\n\n return floatingWidth;\n }\n\n /**\n * Get the total height of the floating rows on the top\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating top section\n */\n getFloatingTopHeight(\n state: GridMetricState,\n rowHeights: SizeMap = this.getFloatingRowHeights(state)\n ): number {\n const { model } = state;\n const { floatingTopRowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingTopRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, i);\n }\n return floatingHeight;\n }\n\n /**\n * Get the total height of the floating rows on the bottom\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating bottom section\n */\n getFloatingBottomHeight(\n state: GridMetricState,\n rowHeights: SizeMap = this.getFloatingRowHeights(state)\n ): number {\n const { model } = state;\n const { floatingBottomRowCount, rowCount } = model;\n let floatingHeight = 0;\n for (let i = 0; i < floatingBottomRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, rowCount - i - 1);\n }\n return floatingHeight;\n }\n\n /**\n * Retrieve the index of the first fully visible row in the \"visible\" viewport of the grid.\n * E.g. First row visible after the floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @returns Index of the top visible row\n */\n getTopVisible(\n state: GridMetricState,\n visibleRowYs: CoordinateMap,\n visibleRowHeights: SizeMap,\n visibleRows: VisibleIndex[]\n ): VisibleIndex {\n const floatingHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n for (let i = 0; i < visibleRows.length; i += 1) {\n const row = visibleRows[i];\n const y = getOrThrow(visibleRowYs, row);\n if (y >= floatingHeight) {\n return row;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the first fully visible column in the \"visible\" viewport of the grid.\n * E.g. First column visible after the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible row indexes\n * @returns Index of the left visible column\n */\n getLeftVisible(\n state: GridMetricState,\n visibleColumnXs: CoordinateMap,\n visibleColumnWidths: SizeMap,\n visibleColumns: VisibleIndex[]\n ): VisibleIndex {\n const floatingWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const column = visibleColumns[i];\n const x = getOrThrow(visibleColumnXs, column);\n if (x >= floatingWidth) {\n return column;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible row in the \"visible\" viewport of the grid.\n * E.g. Last row visible before the bottom floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @param gridY The starting y coordinate of the grid\n * @returns Index of the bottom visible row\n */\n getBottomVisible(\n state: GridMetricState,\n visibleRowYs: CoordinateMap,\n visibleRowHeights: SizeMap,\n visibleRows: VisibleIndex[],\n gridY: Coordinate\n ): VisibleIndex {\n const { height, theme } = state;\n const { scrollBarSize } = theme;\n const floatingHeight = this.getFloatingBottomHeight(\n state,\n visibleRowHeights\n );\n const visibleHeight = height - gridY - scrollBarSize - floatingHeight;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = getOrThrow(visibleRowYs, row);\n const rowHeight = getOrThrow(visibleRowHeights, row);\n if (rowY + rowHeight <= visibleHeight) {\n return row;\n }\n }\n\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible column in the \"visible\" viewport of the grid.\n * E.g. Last column visible before the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible column indexes\n * @returns Index of the right visible column\n */\n getRightVisible(\n state: GridMetricState,\n visibleColumnXs: CoordinateMap,\n visibleColumnWidths: SizeMap,\n visibleColumns: VisibleIndex[],\n gridX: Coordinate\n ): VisibleIndex {\n const { width, theme } = state;\n const { scrollBarSize } = theme;\n const floatingWidth = this.getFloatingRightWidth(\n state,\n visibleColumnWidths\n );\n const visibleWidth = width - gridX - scrollBarSize - floatingWidth;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = getOrThrow(visibleColumnXs, column);\n const columnWidth = getOrThrow(visibleColumnWidths, column);\n if (columnX + columnWidth <= visibleWidth) {\n return column;\n }\n }\n\n return 0;\n }\n\n /**\n * Retrieve the possible bottom of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleRows Array of visible row indexes\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @returns The index of the bottom viewport possible\n */\n getBottomViewport(\n state: GridMetricState,\n visibleRows: VisibleIndex[],\n visibleRowYs: CoordinateMap,\n visibleRowHeights: SizeMap\n ): VisibleIndex {\n const { height, theme } = state;\n const { rowHeight } = theme;\n\n return this.getLastIndexViewport(\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n height,\n rowHeight\n );\n }\n\n /**\n * Retrieve the possible right of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleColumns Array of visible column indexes\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to width\n * @returns The index of the right viewport possible\n */\n getRightViewport(\n state: GridMetricState,\n visibleColumns: VisibleIndex[],\n visibleColumnXs: CoordinateMap,\n visibleColumnWidths: SizeMap\n ): VisibleIndex {\n const { width, theme } = state;\n const { columnWidth } = theme;\n\n return this.getLastIndexViewport(\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n width,\n columnWidth\n );\n }\n\n /**\n * Get the Index of the of the last index visible\n * @param items Array of visible item indexes\n * @param itemXs Map of index to coordinate\n * @param itemSizes Map of index to size\n * @param maxSize Full size of the grid\n * @param defaultItemSize Default size of an item\n * @returns The Index of the last index visible\n */\n getLastIndexViewport(\n items: VisibleIndex[],\n itemXs: CoordinateMap,\n itemSizes: SizeMap,\n maxSize: number,\n defaultItemSize: number\n ): VisibleIndex {\n let lastIndex = 0;\n let dataSize = 0;\n if (items.length > 0) {\n lastIndex = items[items.length - 1];\n dataSize =\n getOrThrow(itemXs, lastIndex) + getOrThrow(itemSizes, lastIndex);\n }\n\n if (dataSize < maxSize) {\n lastIndex += Math.ceil((maxSize - dataSize) / defaultItemSize);\n }\n\n return lastIndex;\n }\n\n /**\n * Get the size from the provided size map of the specified item\n * @param modelIndex The model index to get the size for\n * @param userSizes The user set sizes\n * @param calculateSize Method to calculate the size for this item\n * @returns The size from the provided size map of the specified item\n */\n getVisibleItemSize(\n modelIndex: ModelIndex,\n userSizes: ModelSizeMap,\n calculateSize: () => number\n ): number {\n // Always re-calculate the size of the item so the calculated size maps are populated\n const calculatedSize = calculateSize();\n return userSizes.get(modelIndex) ?? calculatedSize;\n }\n\n /**\n * Get the height of the specified row\n * @param row Index of the row to get the height of\n * @param state The grid metric state\n * @returns The height of the row specified\n */\n getVisibleRowHeight(row: VisibleIndex, state: GridMetricState): number {\n const modelRow = this.getModelRow(row, state);\n\n return this.getVisibleItemSize(modelRow, this.userRowHeights, () =>\n this.calculateRowHeight(row, modelRow, state)\n );\n }\n\n /**\n * Get the width of the specified column\n * @param column Index of the column to get the width of\n * @param state The grid metric state\n * @param firstColumn Index of first visible column\n * @param treePaddingX The amount of tree padding to add to the first visible column\n * @returns The width of the column\n */\n getVisibleColumnWidth(\n column: VisibleIndex,\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): number {\n const modelColumn = this.getModelColumn(column, state);\n\n return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () =>\n this.calculateColumnWidth(\n column,\n modelColumn,\n state,\n firstColumn,\n treePaddingX\n )\n );\n }\n\n /**\n * Get a map of VisibleIndex to ModelIndex\n * @param visibleRows Array of visible row indexes\n * @param state The grid metric state\n * @returns Map of VisibleIndex to ModelIndex\n */\n getModelRows(\n visibleRows: VisibleIndex[],\n state: GridMetricState\n ): VisibleToModelMap {\n const modelRows = new Map();\n for (let i = 0; i < visibleRows.length; i += 1) {\n const visibleRow = visibleRows[i];\n const modelRow = this.getModelRow(visibleRow, state);\n modelRows.set(visibleRow, modelRow);\n }\n return modelRows;\n }\n\n /**\n * Get the ModelIndex of the specified row\n * @param visibleRow Index of the row\n * @param state The grid metric state\n * @returns ModelIndex of the row\n */\n getModelRow(visibleRow: VisibleIndex, state: GridMetricState): ModelIndex {\n if (this.modelRows.has(visibleRow)) {\n return getOrThrow(this.modelRows, visibleRow);\n }\n const { movedRows } = state;\n const modelRow = GridUtils.getModelIndex(visibleRow, movedRows);\n this.modelRows.set(visibleRow, modelRow);\n return modelRow;\n }\n\n /**\n * Get a map of Index to ModelIndex. Applies the move operations to get the transformation.\n * @param visibleColumns Array of visible column indexes\n * @param state The grid metric state\n * @returns Map of Index to ModelIndex\n */\n getModelColumns(\n visibleColumns: VisibleIndex[],\n state: GridMetricState\n ): VisibleToModelMap {\n const modelColumns = new Map();\n for (let i = 0; i < visibleColumns.length; i += 1) {\n const visibleColumn = visibleColumns[i];\n const modelColumn = this.getModelColumn(visibleColumn, state);\n modelColumns.set(visibleColumn, modelColumn);\n }\n return modelColumns;\n }\n\n /**\n * Get the ModelIndex of the specified column\n * @param visibleColumn Index of the column\n * @param state The grid metric state\n * @returns ModelIndex of the column\n */\n getModelColumn(\n visibleColumn: VisibleIndex,\n state: GridMetricState\n ): ModelIndex {\n const hasVisibleColumn = this.modelColumns.has(visibleColumn);\n if (hasVisibleColumn) {\n return getOrThrow(this.modelColumns, visibleColumn);\n }\n const { movedColumns } = state;\n const modelColumn = GridUtils.getModelIndex(visibleColumn, movedColumns);\n this.modelColumns.set(visibleColumn, modelColumn);\n return modelColumn;\n }\n\n /**\n * Calculate the height of the row specified.\n * @param row Index of the row to calculate the height for\n * @param modelRow ModelIndex of the row to calculate the height\n * @param state The grid metric state\n * @returns The height of the row\n */\n calculateRowHeight(\n row: VisibleIndex,\n modelRow: ModelIndex,\n state: GridMetricState\n ): number {\n const { theme } = state;\n const { autoSizeRows, rowHeight } = theme;\n if (!autoSizeRows) {\n return rowHeight;\n }\n\n const cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null) {\n return cachedValue;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.calculatedRowHeights.set(modelRow, Math.ceil(rowHeight));\n trimMap(this.calculatedRowHeights);\n return rowHeight;\n }\n\n /**\n * Calculates the column width based on the provided column model index\n * @param column Index of the column to calculate the width for\n * @param modelColumn ModelIndex of the column to calculate the width\n * @param state The grid metric state\n * @param firstColumn The first visible column\n * @param treePaddingX Tree padding offset for expandable rows\n * @returns The width of the column\n */\n calculateColumnWidth(\n column: VisibleIndex,\n modelColumn: ModelIndex,\n state: GridMetricState,\n firstColumn: VisibleIndex = this.getFirstColumn(state),\n treePaddingX: number = this.calculateTreePaddingX(state)\n ): number {\n const { theme } = state;\n const { autoSizeColumns, minColumnWidth } = theme;\n if (!autoSizeColumns) {\n const { columnWidth } = theme;\n return columnWidth;\n }\n\n const headerWidth = this.calculateColumnHeaderWidth(modelColumn, state);\n const dataWidth = this.calculateColumnDataWidth(modelColumn, state);\n const cachedValue = this.calculatedColumnWidths.get(modelColumn);\n let columnWidth = Math.ceil(Math.max(headerWidth, dataWidth));\n columnWidth = Math.max(minColumnWidth, columnWidth);\n if (cachedValue != null && cachedValue > columnWidth) {\n columnWidth = cachedValue;\n } else {\n this.calculatedColumnWidths.set(modelColumn, columnWidth);\n trimMap(this.calculatedColumnWidths);\n }\n\n if (column === firstColumn) {\n columnWidth += treePaddingX;\n }\n\n return columnWidth;\n }\n\n /**\n * Calculate the width of the specified column's header\n * @param modelColumn ModelIndex of the column to get the header width for\n * @param state The grid metric state\n * @returns The calculated width of the column header\n */\n calculateColumnHeaderWidth(\n modelColumn: ModelIndex,\n state: GridMetricState\n ): number {\n const { model, theme } = state;\n const { headerFont, headerHorizontalPadding } = theme;\n\n const headerText = model.textForColumnHeader(modelColumn, 0);\n if (headerText !== undefined && headerText !== '') {\n const headerFontWidth = this.getWidthForFont(headerFont, state);\n return headerText.length * headerFontWidth + headerHorizontalPadding * 2;\n }\n\n return headerHorizontalPadding * 2;\n }\n\n /**\n * Calculate the width of the specified column's data\n * @param modelColumn ModelIndex of the column to get the data width for\n * @param state The grid metric state\n * @returns The calculated width of the column data\n */\n calculateColumnDataWidth(\n modelColumn: ModelIndex,\n state: GridMetricState\n ): number {\n const { top, height, width, model, theme } = state;\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = model;\n const {\n font,\n cellHorizontalPadding,\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n scrollBarSize,\n } = theme;\n\n let columnWidth = 0;\n\n const fontWidth = this.getWidthForFont(font, state);\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n GridUtils.iterateAllItems(\n top,\n bottom,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n row => {\n const modelRow = this.getModelRow(row, state);\n const text = model.textForCell(modelColumn, modelRow);\n if (text) {\n const cellPadding = cellHorizontalPadding * 2;\n columnWidth = Math.max(\n columnWidth,\n text.length * fontWidth + cellPadding\n );\n }\n }\n );\n\n columnWidth = Math.max(\n Math.min(\n columnWidth,\n (width - rowHeaderWidth - scrollBarSize - rowFooterWidth) *\n GridMetricCalculator.MAX_COLUMN_WIDTH\n ),\n cellHorizontalPadding * 2\n );\n\n return columnWidth;\n }\n\n /**\n * The coordinate for where the tree padding should be drawn\n * @param state The grid metric state\n * @returns The coordinate for tree padding\n */\n calculateTreePaddingX(state: GridMetricState): Coordinate {\n const { top, height, model, theme } = state;\n const { rowHeight, treeDepthIndent } = theme;\n if (!isExpandableGridModel(model) || !model.hasExpandableRows) {\n return 0;\n }\n let treePadding = 0;\n\n const rowsPerPage = height / rowHeight;\n const bottom = Math.ceil(top + rowsPerPage);\n for (let row = top; row <= bottom; row += 1) {\n const modelRow = this.getModelRow(row, state);\n const depth = model.depthForRow(modelRow);\n treePadding = Math.max(treePadding, treeDepthIndent * (depth + 1));\n }\n\n return treePadding;\n }\n\n /**\n * Get the width of the provided font. Exploits the fact that we're\n * using tabular figures so every character is same width\n * @param font The font to get the width for\n * @param state The grid metric state\n * @returns Width of the char `8` for the specified font\n */\n getWidthForFont(font: GridFont, state: GridMetricState): number {\n if (this.fontWidths.has(font)) {\n return getOrThrow(this.fontWidths, font);\n }\n const { context } = state;\n context.font = font;\n const textMetrics = context.measureText('8');\n const { width } = textMetrics;\n\n // context.font changes the string a little bit, e.g. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidths.set(font, width);\n this.fontWidths.set(context.font, width);\n\n return width;\n }\n\n /**\n * Sets the width for the specified column\n * @param column The column model index to set\n * @param size The size to set it to\n */\n setColumnWidth(column: ModelIndex, size: number): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.set(column, Math.ceil(size));\n trimMap(userColumnWidths);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Resets the column width for the specified column to the calculated width\n * @param column The column model index to reset\n */\n resetColumnWidth(column: ModelIndex): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.delete(column);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Sets the width for the specified row\n * @param row The row model index to set\n * @param size The size to set it to\n */\n setRowHeight(row: ModelIndex, size: number): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userRowHeights = new Map(this.userRowHeights);\n userRowHeights.set(row, Math.ceil(size));\n trimMap(userRowHeights);\n this.userRowHeights = userRowHeights;\n }\n\n /**\n * Resets the row height for the specified row to the calculated height\n * @param row The row model index to reset\n */\n resetRowHeight(row: ModelIndex): void {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n const userRowHeights = new Map(this.userRowHeights);\n userRowHeights.delete(row);\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights.delete(row);\n }\n}\n\nexport default GridMetricCalculator;\n"],"mappings":"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"}
@@ -223,9 +223,16 @@ export declare class GridUtils {
223
223
  * @param from The visible axis range to move
224
224
  * @param to The visible index to move the start of the range to
225
225
  * @param oldMovedItems The old reordered items
226
+ * @param isPreMoveTo If toParam is the index before the movement
227
+ * If true, this will account for the shift when moving
228
+ * a range before the drop positin
229
+ * E.g. Move range [0, 2] 1 item down (after element 3)
230
+ * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true
231
+ * Both will result in [0, 2] -> 1
226
232
  * @returns The new reordered items
227
233
  */
228
- static moveRange(from: BoundedAxisRange, to: VisibleIndex, oldMovedItems: MoveOperation[]): MoveOperation[];
234
+ static moveRange(from: BoundedAxisRange, toParam: VisibleIndex, oldMovedItems: MoveOperation[], isPreMoveTo?: boolean): MoveOperation[];
235
+ static moveItemOrRange(from: VisibleIndex | BoundedAxisRange, to: VisibleIndex, oldMovedItems: MoveOperation[], isPreMoveTo?: boolean): MoveOperation[];
229
236
  /**
230
237
  * Applies the items moves to the AxisRange
231
238
  * @param start The start index of the range
@@ -289,7 +296,7 @@ export declare class GridUtils {
289
296
  */
290
297
  static getModelRanges(uiRanges: GridRange[], movedColumns?: MoveOperation[], movedRows?: MoveOperation[]): GridRange[];
291
298
  /**
292
- * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.
299
+ * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.
293
300
  * Since moved items can split apart a range, multiple pairs of indexes are returned
294
301
  *
295
302
  * @param start Start item in one dimension
@@ -1 +1 @@
1
- {"version":3,"file":"GridUtils.d.ts","sourceRoot":"","sources":["../src/GridUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GridUtils.d.ts","sourceRoot":"","sources":["../src/GridUtils.ts"],"names":[],"mappings":"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"}
package/dist/GridUtils.js CHANGED
@@ -592,9 +592,23 @@ export class GridUtils {
592
592
  * @param from The visible axis range to move
593
593
  * @param to The visible index to move the start of the range to
594
594
  * @param oldMovedItems The old reordered items
595
+ * @param isPreMoveTo If toParam is the index before the movement
596
+ * If true, this will account for the shift when moving
597
+ * a range before the drop positin
598
+ * E.g. Move range [0, 2] 1 item down (after element 3)
599
+ * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true
600
+ * Both will result in [0, 2] -> 1
595
601
  * @returns The new reordered items
596
602
  */
597
- static moveRange(from, to, oldMovedItems) {
603
+ static moveRange(from, toParam, oldMovedItems) {
604
+ var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
605
+ if (from[0] === from[1]) {
606
+ return GridUtils.moveItem(from[0], toParam, oldMovedItems);
607
+ }
608
+ var to = toParam;
609
+ if (isPreMoveTo && from[0] < toParam) {
610
+ to -= from[1] - from[0];
611
+ }
598
612
  if (from[0] === to) {
599
613
  return oldMovedItems;
600
614
  }
@@ -604,27 +618,26 @@ export class GridUtils {
604
618
  // Check if we should combine with the previous move
605
619
  // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3
606
620
  if (lastMovedItem != null && isBoundedAxisRange(lastMovedItem.from) && lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] && lastMovedItem.to === from[0]) {
607
- // Remove the move if it is now a no-op
608
- if (lastMovedItem.from[0] === to) {
609
- movedItems.pop();
610
- } else {
611
- movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {
612
- to
613
- });
614
- }
621
+ movedItems[movedItems.length - 1] = _objectSpread(_objectSpread({}, lastMovedItem), {}, {
622
+ to
623
+ });
615
624
  } else {
616
625
  movedItems.push({
617
626
  from,
618
627
  to
619
628
  });
620
629
  }
621
-
630
+ var newLastMovedItem = movedItems[movedItems.length - 1];
622
631
  // Remove the move if it is now a no-op
623
- if (movedItems[movedItems.length - 1].from === movedItems[movedItems.length - 1].to) {
632
+ if (isBoundedAxisRange(newLastMovedItem.from) && newLastMovedItem.from[0] === newLastMovedItem.to) {
624
633
  movedItems.pop();
625
634
  }
626
635
  return movedItems;
627
636
  }
637
+ static moveItemOrRange(from, to, oldMovedItems) {
638
+ var isPreMoveTo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
639
+ return Array.isArray(from) ? GridUtils.moveRange(from, to, oldMovedItems, isPreMoveTo) : GridUtils.moveItem(from, to, oldMovedItems);
640
+ }
628
641
 
629
642
  /**
630
643
  * Applies the items moves to the AxisRange
@@ -806,7 +819,7 @@ export class GridUtils {
806
819
  }
807
820
 
808
821
  /**
809
- * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.
822
+ * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.
810
823
  * Since moved items can split apart a range, multiple pairs of indexes are returned
811
824
  *
812
825
  * @param start Start item in one dimension
@@ -1 +1 @@
1
- {"version":3,"file":"GridUtils.js","names":["clamp","GridRange","isBoundedAxisRange","GridUtils","getGridPointFromXY","x","y","metrics","column","getColumnAtX","row","getRowAtY","columnHeaderDepth","getColumnHeaderDepthAtY","getCellInfoFromXY","visibleColumnWidths","visibleRowHeights","visibleColumnXs","visibleRowYs","modelColumns","modelRows","modelRow","get","modelColumn","left","top","columnWidth","rowHeight","columnHeaderHeight","columnHeaderMaxDepth","Math","ceil","undefined","iterateFloatingStart","start","total","callback","i","result","iterateFloatingEnd","end","iterateFloating","iterateAllItems","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","max","visibleEndIndex","min","isInItem","itemIndex","itemCoordinates","itemSizes","coordinate","itemX","itemSize","getItemAtOffset","offset","itemCount","floatingStart","floatingEnd","items","ignoreFloating","floatingItem","item","length","columnCount","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","gridX","floatingTopRowCount","floatingBottomRowCount","rowCount","visibleRows","gridY","getNextShownItem","startIndex","modelIndexes","visibleItems","userSizes","visibleItemIndex","findIndex","value","modelIndex","getNextShownColumn","userColumnWidths","getNextShownRow","userRowHeights","getColumnSeparatorIndex","theme","rowHeaderWidth","floatingColumns","floatingLeftWidth","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","columnX","isColumnHidden","midX","minX","maxX","isItemHidden","visibleSizes","columnIndex","isFloatingRow","isFloatingColumn","getHiddenItems","hiddenItems","push","getHiddenColumns","getRowSeparatorIndex","allowRowResize","isPreviousRowHidden","rowY","isRowHidden","midY","minY","maxY","rowIndex","getHiddenRows","moveItem","from","to","oldMovedItems","movedItems","lastMovedItem","pop","moveRange","applyItemMoves","reverse","fromItemOrRange","toItem","fromItem","fromStart","fromEnd","toStart","moveDistance","nextResult","j","currentStart","Number","NEGATIVE_INFINITY","currentEnd","POSITIVE_INFINITY","movedRange","currentResult","map","s","e","filter","range","flat","isFinite","translateRange","movedColumns","movedRows","columnRanges","startColumn","endColumn","rowRanges","startRow","endRow","ranges","c","r","getModelIndex","visibleIndex","getModelIndexes","visibleIndexes","getModelRangeIndexes","getModelRange","uiRange","getModelRanges","uiRanges","modelRanges","getVisibleRangeIndexes","getVisibleRange","modelRange","getVisibleRanges","visibleRanges","getVisibleIndex","getVisibleIndexes","isMacPlatform","platform","window","navigator","startsWith","getModifierKey","isModifierKeyDown","event","modifierKey","checkColumnHidden","checkAllColumnsHidden","columns","size","every","getScrollDragBounds","width","height","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x1","y1","x2","y2","getScrollDelta","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","shiftKey","deltaMode","WheelEvent","DOM_DELTA_PAGE","DOM_DELTA_LINE","round","PIXELS_PER_LINE","compareRanges","range1","range2","mergeSortedRanges","mergedRanges"],"sources":["../src/GridUtils.ts"],"sourcesContent":["import React from 'react';\nimport clamp from 'lodash.clamp';\nimport GridRange, { GridRangeIndex } from './GridRange';\nimport {\n BoxCoordinates,\n Coordinate,\n CoordinateMap,\n VisibleIndex,\n VisibleToModelMap,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n SizeMap,\n} from './GridMetrics';\nimport type { GridMetrics } from './GridMetrics';\nimport { GridTheme } from './GridTheme';\nimport { GridWheelEvent } from './GridMouseHandler';\nimport {\n AxisRange,\n BoundedAxisRange,\n isBoundedAxisRange,\n Range,\n} from './GridAxisRange';\n\nexport type GridPoint = {\n x: Coordinate;\n y: Coordinate;\n column: GridRangeIndex;\n row: GridRangeIndex;\n columnHeaderDepth?: number;\n};\n\nexport interface CellInfo {\n row: VisibleIndex | null;\n column: VisibleIndex | null;\n modelRow: ModelIndex | null;\n modelColumn: ModelIndex | null;\n left: Coordinate | null;\n top: Coordinate | null;\n columnWidth: number | null;\n rowHeight: number | null;\n}\n\nexport type IndexCallback<T> = (itemIndex: VisibleIndex) => T | undefined;\n\nexport class GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static PIXELS_PER_LINE = 100 / 3;\n\n /**\n * Get the GridPoint for the coordinates provided\n * @param x The grid x coordinate\n * @param y The grid y coordinate\n * @param metrics The grid metrics\n * @returns The GridPoint including the column/row information\n */\n static getGridPointFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): GridPoint {\n const column = GridUtils.getColumnAtX(x, metrics);\n const row = GridUtils.getRowAtY(y, metrics);\n const columnHeaderDepth = GridUtils.getColumnHeaderDepthAtY(y, metrics);\n\n return { x, y, row, column, columnHeaderDepth };\n }\n\n static getCellInfoFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): CellInfo {\n const { row, column } = GridUtils.getGridPointFromXY(x, y, metrics);\n\n const {\n visibleColumnWidths,\n visibleRowHeights,\n visibleColumnXs,\n visibleRowYs,\n modelColumns,\n modelRows,\n } = metrics;\n\n const modelRow = row !== null ? modelRows.get(row) : null;\n const modelColumn = column !== null ? modelColumns.get(column) : null;\n const left = column !== null ? visibleColumnXs.get(column) : null;\n const top = row !== null ? visibleRowYs.get(row) : null;\n const columnWidth =\n column !== null ? visibleColumnWidths.get(column) : null;\n const rowHeight = row !== null ? visibleRowHeights.get(row) : null;\n\n return {\n row,\n column,\n modelRow: modelRow ?? null,\n modelColumn: modelColumn ?? null,\n left: left ?? null,\n top: top ?? null,\n columnWidth: columnWidth ?? null,\n rowHeight: rowHeight ?? null,\n };\n }\n\n static getColumnHeaderDepthAtY(\n y: Coordinate,\n metrics: GridMetrics\n ): number | undefined {\n const row = GridUtils.getRowAtY(y, metrics);\n const { columnHeaderHeight, columnHeaderMaxDepth } = metrics;\n\n if (row === null && y <= columnHeaderHeight * columnHeaderMaxDepth) {\n return clamp(\n columnHeaderMaxDepth - Math.ceil(y / columnHeaderHeight),\n 0,\n columnHeaderMaxDepth - 1\n );\n }\n\n return undefined;\n }\n\n /**\n * Iterate through each floating item at the start and call a callback, returning the first result\n * @param start The count of floating items at the start\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingStart<T>(\n start: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < start && i < total; i += 1) {\n const result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n * @param end The count of floating items at the end\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingEnd<T>(\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < end && total - (end - i) >= 0; i += 1) {\n const result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param start Count of start floating rows, e.g. floatingTopRowCount\n * @param end Count of end floating rows, e.g. floatingBottomRowCount\n * @param total Total number of items\n * @param callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating<T>(\n start: number,\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n /**\n * Iterate through all items in one dimension on the grid - first floating, then visible.\n * Call the callback for each item, break if a result is returned and return that result.\n * @param visibleStart Index of the start of the visible viewport\n * @param visibleEnd Index of the end of the visible viewport\n * @param floatingStartCount Number of items floating at the start\n * @param floatingEndCount Number of items floating at the end\n * @param totalCount Total number of items\n * @param callback Callback to call for each item\n * @returns The first result from the callback called, or undefined\n */\n static iterateAllItems<T>(\n visibleStart: VisibleIndex,\n visibleEnd: VisibleIndex,\n floatingStartCount: number,\n floatingEndCount: number,\n totalCount: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n const visibleEndIndex = Math.min(\n visibleEnd,\n totalCount - floatingEndCount - 1\n );\n let result = GridUtils.iterateFloating(\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n );\n if (result !== undefined) {\n return result;\n }\n\n for (let i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the coordinate is within the item specified in this dimension\n * @param itemIndex Index of the item to check\n * @param itemCoordinatess Coordinate of all items in this dimension\n * @param itemSizes Size of all items in this dimension\n * @param coordinate The coordinate to check\n * @returns True if the coordinate is within the item specified, false otherwise\n */\n static isInItem(\n itemIndex: VisibleIndex,\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n coordinate: Coordinate\n ): boolean {\n const itemX = itemCoordinates.get(itemIndex) ?? 0;\n const itemSize = itemSizes.get(itemIndex) ?? 0;\n return itemX <= coordinate && coordinate <= itemX + itemSize;\n }\n\n /**\n * Get the Index of the item at the provided offset\n * @param offset Coordinate of the offset to get the item of\n * @param itemCount The total count of items\n * @param floatingStart Count of floating items at the start\n * @param floatingEnd Count of floating items at the end\n * @param items Index of all items\n * @param itemCoordinates The coordinate of each item\n * @param itemSizes The size of each item\n * @returns The item index, or null if no item matches\n */\n static getItemAtOffset(\n offset: Coordinate,\n itemCount: number,\n floatingStart: number,\n floatingEnd: number,\n items: VisibleIndex[],\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n ignoreFloating = false\n ): VisibleIndex | null {\n const floatingItem = ignoreFloating\n ? undefined\n : GridUtils.iterateFloating(\n floatingStart,\n floatingEnd,\n itemCount,\n item => {\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n return undefined;\n }\n );\n if (!ignoreFloating && floatingItem !== undefined) {\n return floatingItem;\n }\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * Get the index of the column at the specified x coordinate\n * @param x Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the column at that coordinate, or null if no column matches\n */\n static getColumnAtX(\n x: Coordinate,\n metrics: GridMetrics,\n ignoreFloating = false\n ): VisibleIndex | null {\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n gridX,\n } = metrics;\n\n if (x < gridX) {\n return null;\n }\n\n return this.getItemAtOffset(\n x - gridX,\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n ignoreFloating\n );\n }\n\n /**\n * Get the index of the row at the specified y coordinate\n * @param y Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the row at that coordinate, or null if no row matches\n */\n static getRowAtY(y: Coordinate, metrics: GridMetrics): VisibleIndex | null {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n gridY,\n } = metrics;\n\n if (y < gridY) {\n return null;\n }\n\n return this.getItemAtOffset(\n y - gridY,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param startIndex The index to start from\n * @param modelIndexes The mapping of model indexes\n * @param visibleItems The visible items\n * @param userSizes The user set sizes\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownItem(\n startIndex: VisibleIndex,\n modelIndexes: VisibleToModelMap,\n visibleItems: VisibleIndex[],\n userSizes: ModelSizeMap\n ): VisibleIndex | null {\n let visibleItemIndex =\n visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n const item = visibleItems[visibleItemIndex];\n const modelIndex = modelIndexes.get(item);\n if (modelIndex != null && userSizes.get(modelIndex) !== 0) {\n return item;\n }\n\n visibleItemIndex -= 1;\n }\n\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param columnIndex The column index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownColumn(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelColumns, visibleColumns, userColumnWidths } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelColumns,\n visibleColumns,\n userColumnWidths\n );\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param rowIndex The row index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownRow(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelRows, visibleRows, userRowHeights } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelRows,\n visibleRows,\n userRowHeights\n );\n }\n\n /**\n * Gets the column index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x Mouse x coordinate\n * @param y Mouse y coordinate\n * @param metrics The grid metrics\n * @param theme The grid theme with potential user overrides\n * @returns Index of the column separator at the coordinates provided, or null if none match\n */\n static getColumnSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n floatingLeftWidth,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderMaxDepth,\n } = metrics;\n const { allowColumnResize, headerSeparatorHandleSize } = theme;\n\n if (\n columnHeaderMaxDepth * columnHeaderHeight < y ||\n !allowColumnResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridX = x - rowHeaderWidth;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n let isPreviousColumnHidden = false;\n for (let i = floatingColumns.length - 1; i >= 0; i -= 1) {\n const column = floatingColumns[i];\n const columnX = visibleColumnXs.get(column) ?? 0;\n const columnWidth = visibleColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column) ?? 0;\n const columnWidth = visibleColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (columnX < floatingLeftWidth - columnWidth) {\n return null;\n }\n\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the item specified is hidden\n * @param itemIndex Index of the item to check\n * @param visibleSizes Sizes of all visible items\n * @returns True if the item is hidden, false otherwise\n */\n static isItemHidden(itemIndex: VisibleIndex, visibleSizes: SizeMap): boolean {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n /**\n * Check if the column specified is hidden\n * @param columnIndex Index of the column to check\n * @param metrics Grid metrics\n * @returns True if the column is hidden, false otherwise\n */\n static isColumnHidden(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): boolean {\n const { visibleColumnWidths } = metrics;\n return GridUtils.isItemHidden(columnIndex, visibleColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param row The row index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating row, false otherwise\n */\n static isFloatingRow(row: VisibleIndex, metrics: GridMetrics): boolean {\n if (row == null) {\n return false;\n }\n\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = metrics;\n return (\n row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount\n );\n }\n\n /**\n * Check if the provided column is a floating column\n * @param column The column index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating column, false otherwise\n */\n static isFloatingColumn(column: VisibleIndex, metrics: GridMetrics): boolean {\n if (column == null) {\n return false;\n }\n\n const {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n } = metrics;\n return (\n column < floatingLeftColumnCount ||\n column >= columnCount - floatingRightColumnCount\n );\n }\n\n /**\n * Get all the items that are hidden under the same Index\n * E.g. If columns are 1, 2, 3, 4, 5, and column 2, 3, 4 are hidden, and we check for item 4, the return will be [2, 3, 4]\n * @param itemIndex Index of the item to start at\n * @param visibleSizes Visible size map\n * @param visibleItems Visible items\n * @returns Array of items that are hidden\n */\n static getHiddenItems(\n itemIndex: VisibleIndex,\n visibleSizes: SizeMap,\n visibleItems: VisibleIndex[]\n ): VisibleIndex[] {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n\n const hiddenItems = [itemIndex];\n const visibleItemIndex = visibleItems.findIndex(\n value => value === itemIndex\n );\n for (let i = visibleItemIndex - 1; i >= 0; i -= 1) {\n const item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n\n hiddenItems.push(item);\n }\n\n return hiddenItems;\n }\n\n /**\n * Get all the columns that are hidden under the same Index\n * @param columnIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenColumns(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleColumns, visibleColumnWidths } = metrics;\n return GridUtils.getHiddenItems(\n columnIndex,\n visibleColumnWidths,\n visibleColumns\n );\n }\n\n /**\n * Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x X coordinate to check\n * @param y Y coordinate to check\n * @param metrics The grid metrics\n * @param theme The grid theme\n * @returns Index of the row separator at the coordinates provided, or null if none match\n */\n static getRowSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { allowRowResize, headerSeparatorHandleSize } = theme;\n\n if (\n rowHeaderWidth < x ||\n !allowRowResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridY = y - columnHeaderHeight;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n let isPreviousRowHidden = false;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row) ?? 0;\n const rowHeight = visibleRowHeights.get(row) ?? 0;\n const isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n let midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n\n const minY = midY - halfSeparatorSize;\n const maxY = midY + halfSeparatorSize;\n\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n\n isPreviousRowHidden = isRowHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the row specified is hidden\n * @param rowIndex Index of the row to check\n * @param metrics Grid metrics\n * @returns True if the row is hidden, false otherwise\n */\n static isRowHidden(rowIndex: VisibleIndex, metrics: GridMetrics): boolean {\n const { visibleRowHeights } = metrics;\n return GridUtils.isItemHidden(rowIndex, visibleRowHeights);\n }\n\n /**\n * Get all the rows that are hidden under the same Index\n * @param rowIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenRows(\n rowIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleRows, visibleRowHeights } = metrics;\n return GridUtils.getHiddenItems(rowIndex, visibleRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param from The visible index to move from\n * @param to The visible index to move the item to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items\n */\n static moveItem(\n from: VisibleIndex,\n to: VisibleIndex,\n oldMovedItems: MoveOperation[]\n ): MoveOperation[] {\n if (from === to) {\n return oldMovedItems;\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. 1 -> 2, 2 -> 3 can just be 1 -> 3\n if (\n lastMovedItem != null &&\n !isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.to === from\n ) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n }\n } else {\n movedItems.push({ from, to });\n }\n\n return movedItems;\n }\n\n /**\n * Move a visible range in the grid\n *\n * This will effectively slice the range out of the grid,\n * re-index the remaining columns,\n * then insert the range with the first element at the provided index\n *\n * @param from The visible axis range to move\n * @param to The visible index to move the start of the range to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items\n */\n static moveRange(\n from: BoundedAxisRange,\n to: VisibleIndex,\n oldMovedItems: MoveOperation[]\n ): MoveOperation[] {\n if (from[0] === to) {\n return oldMovedItems;\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3\n if (\n lastMovedItem != null &&\n isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] &&\n lastMovedItem.to === from[0]\n ) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from[0] === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n }\n } else {\n movedItems.push({ from, to });\n }\n\n // Remove the move if it is now a no-op\n if (\n movedItems[movedItems.length - 1].from ===\n movedItems[movedItems.length - 1].to\n ) {\n movedItems.pop();\n }\n\n return movedItems;\n }\n\n /**\n * Applies the items moves to the AxisRange\n * @param start The start index of the range\n * @param end The end index of the range\n * @param movedItems The move operations to apply\n * @param reverse If the moved items should be applied in reverse (this reverses the effects of the moves)\n * @returns A list of AxisRanges in the translated space. Possibly multiple non-continuous ranges\n */\n static applyItemMoves<T extends number | GridRangeIndex>(\n start: T,\n end: T,\n movedItems: MoveOperation[],\n reverse = false\n ): Range<T>[] {\n let result: Range<T>[] = [[start, end]];\n\n for (\n let i = reverse ? movedItems.length - 1 : 0;\n reverse ? i >= 0 : i < movedItems.length;\n reverse ? (i -= 1) : (i += 1)\n ) {\n const { from: fromItemOrRange, to: toItem } = movedItems[i];\n let length = 1;\n let fromItem: number;\n if (isBoundedAxisRange(fromItemOrRange)) {\n length = fromItemOrRange[1] - fromItemOrRange[0] + 1; // Ranges are inclusive\n [fromItem] = fromItemOrRange;\n } else {\n fromItem = fromItemOrRange;\n }\n\n const fromStart = reverse ? toItem : fromItem;\n const fromEnd = fromStart + length - 1;\n const toStart = reverse ? fromItem : toItem;\n const moveDistance = toStart - fromStart;\n\n const nextResult: Range<number>[] = [];\n for (let j = 0; j < result.length; j += 1) {\n const currentStart = result[j][0] ?? Number.NEGATIVE_INFINITY;\n const currentEnd = result[j][1] ?? Number.POSITIVE_INFINITY;\n\n let movedRange: Range<number> | undefined;\n const currentResult: Range<number>[] = [\n [currentStart, fromStart - 1],\n [fromStart, fromEnd],\n [fromEnd + 1, currentEnd],\n ]\n .map(\n ([s, e]): Range<number> => [\n // Cap the ranges to within the current range bounds\n Math.max(s, currentStart),\n Math.min(e, currentEnd),\n ]\n )\n .filter(([s, e]) => s <= e) // Remove invalid ranges\n .map(\n (range): Range<number> => {\n const [s, e] = range;\n if (fromStart <= s && fromEnd >= e) {\n // Current range in moved range\n movedRange = [s + moveDistance, e + moveDistance];\n return movedRange;\n }\n\n if (fromEnd < s) {\n // Current range is after moved range\n return [s - length, e - length];\n }\n return range;\n }\n )\n .map((range): Range<number>[] => {\n const [s, e] = range;\n if (toStart > s && toStart <= e) {\n // Moved range splits this range\n return [\n [s, toStart - 1],\n [toStart + length, e + length],\n ];\n }\n\n if (range === movedRange) {\n // Moved range has already been shifted\n return [range];\n }\n\n if (toStart <= s) {\n // Moved range shifts this range right\n return [[s + length, e + length]];\n }\n return [range];\n })\n .flat();\n\n nextResult.push(...currentResult);\n }\n\n // Return infinity values back to null\n result = nextResult.map(([s, e]) => [\n Number.isFinite(s) ? s : null,\n Number.isFinite(e) ? e : null,\n ]) as Range<T>[];\n }\n return result;\n }\n\n /**\n * Applies the items moves to the givengrid range\n * @param range The grid range to translate\n * @param movedColumns The moved columns\n * @param movedRows The moved rows\n * @param reverse If the moved items should be reversed (i.e. visible to model range)\n * @returns A list of grid ranges in the translated space. Possibly multiple non-continuous ranges\n */\n static translateRange(\n range: GridRange,\n movedColumns: MoveOperation[],\n movedRows: MoveOperation[],\n reverse: boolean\n ): GridRange[] {\n const columnRanges = GridUtils.applyItemMoves(\n range.startColumn,\n range.endColumn,\n movedColumns,\n reverse\n );\n const rowRanges = GridUtils.applyItemMoves(\n range.startRow,\n range.endRow,\n movedRows,\n reverse\n );\n const ranges: GridRange[] = [];\n for (let i = 0; i < columnRanges.length; i += 1) {\n const c = columnRanges[i];\n for (let j = 0; j < rowRanges.length; j += 1) {\n const r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param visibleIndex The visible index of the item to get the model index for\n * @param movedItems The moved items\n * @returns The model index of the item\n */\n static getModelIndex(\n visibleIndex: VisibleIndex,\n movedItems: MoveOperation[]\n ): ModelIndex {\n const modelIndex = GridUtils.applyItemMoves(\n visibleIndex,\n visibleIndex,\n movedItems,\n true\n )[0][0];\n\n return modelIndex;\n }\n\n /**\n * Retrieve the model indexes given the currently moved items\n * @param visibleIndexes The visible indexes of the item to get the model indexes for\n * @param movedItems The moved items\n * @returns The model indexes of the item\n */\n static getModelIndexes(\n visibleIndexes: ModelIndex[],\n movedItems: MoveOperation[]\n ): VisibleIndex[] {\n return visibleIndexes.map(i => GridUtils.getModelIndex(i, movedItems));\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, true);\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRange(\n uiRange: GridRange,\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n return GridUtils.translateRange(uiRange, movedColumns, movedRows, true);\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRanges The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRanges(\n uiRanges: GridRange[],\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n const modelRanges = [];\n for (let i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(\n ...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows)\n );\n }\n return modelRanges;\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getVisibleRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, false);\n }\n\n /**\n * Translate the provided UI range into visible range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRange(\n modelRange: GridRange,\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n return this.translateRange(modelRange, movedColumns, movedRows, false);\n }\n\n /**\n * Translate the provided model ranges into visible ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param modelRanges The model ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRanges(\n modelRanges: GridRange[],\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n const visibleRanges = [];\n for (let i = 0; i < modelRanges.length; i += 1) {\n visibleRanges.push(\n ...GridUtils.getVisibleRange(modelRanges[i], movedColumns, movedRows)\n );\n }\n return visibleRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param modelIndex The model index to get the visible index for\n * @param movedItems Moved items\n * @returns The visible index of the item\n */\n static getVisibleIndex(\n modelIndex: ModelIndex,\n movedItems: MoveOperation[]\n ): VisibleIndex {\n const visibleIndex = GridUtils.applyItemMoves(\n modelIndex,\n modelIndex,\n movedItems\n )[0][0];\n\n return visibleIndex;\n }\n\n /**\n * Retrieve the visible indexes given the currently moved items\n * @param modelIndexes The model indexes to get the visible indexes for\n * @param movedItems Moved items\n * @returns The visible indexes of the item\n */\n static getVisibleIndexes(\n modelIndexes: ModelIndex[],\n movedItems: MoveOperation[]\n ): VisibleIndex[] {\n return modelIndexes.map(i => GridUtils.getVisibleIndex(i, movedItems));\n }\n\n /**\n * Check if the current platform is Mac\n * @returns True if this platform is a Mac, false otherwise\n */\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Get the modifier key for the current platform\n * @returns The modifier key for the current platform\n */\n static getModifierKey(): 'metaKey' | 'ctrlKey' {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n\n return 'ctrlKey';\n }\n\n /**\n * Check if the modifier key is down for the given event\n * @param event The event to check\n * @returns True if the modifier key is down, false otherwise\n */\n static isModifierKeyDown(\n event: MouseEvent | KeyboardEvent | React.KeyboardEvent | React.MouseEvent\n ): boolean {\n const modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Check if the user has hidden the specified column\n * @param modelIndex The model index to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden the column\n */\n static checkColumnHidden(\n modelIndex: ModelIndex,\n userColumnWidths: ModelSizeMap\n ): boolean {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Check if all the columns specified are hidden\n * @param columns Columns to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden all of the columns\n */\n static checkAllColumnsHidden(\n columns: ModelIndex[],\n userColumnWidths: ModelSizeMap\n ): boolean {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param metrics Grid metrics\n * @param row The row they started dragging in\n * @param column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(\n metrics: GridMetrics,\n row: GridRangeIndex,\n column: GridRangeIndex\n ): BoxCoordinates {\n const {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount,\n } = metrics;\n let x1 = gridX;\n let y1 = gridY;\n let x2 = width;\n let y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x1 += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n\n if (row != null) {\n if (row > floatingTopRowCount) {\n y1 += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return { x1, y1, x2, y2 };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param wheelEvent The mouse wheel event to get the scrolling delta for\n * @param pageWidth The width of the page that is scrolling\n * @param pageHeight The height of the page that is scrolling\n * @param lineWidth The width of the line scrolling in line mode\n * @param lineHeight The height of the line scrolling in line mode\n * @returns The delta coordinates normalized to pixels\n */\n static getScrollDelta(\n wheelEvent: GridWheelEvent,\n pageWidth = 1024,\n pageHeight = 768,\n lineWidth = 20,\n lineHeight = 20\n ): { deltaX: number; deltaY: number } {\n let { deltaX, deltaY } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (\n !GridUtils.isMacPlatform() &&\n wheelEvent.shiftKey &&\n wheelEvent.deltaX === 0 &&\n wheelEvent.deltaY !== 0\n ) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n\n return { deltaX, deltaY };\n }\n\n static compareRanges(range1: AxisRange, range2: AxisRange): number {\n if (\n range1[0] == null ||\n range1[1] == null ||\n range2[0] == null ||\n range2[1] == null\n ) {\n return 0;\n }\n return range1[0] !== range2[0]\n ? range1[0] - range2[0]\n : range1[1] - range2[1];\n }\n\n static mergeSortedRanges(ranges: BoundedAxisRange[]): BoundedAxisRange[] {\n const mergedRanges: BoundedAxisRange[] = [];\n\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const start = range[0];\n const end = range[1];\n if (i === 0) {\n mergedRanges.push([start, end]);\n } else if (start - 1 <= mergedRanges[mergedRanges.length - 1][1]) {\n mergedRanges[mergedRanges.length - 1][1] = Math.max(\n mergedRanges[mergedRanges.length - 1][1],\n end\n );\n } else {\n mergedRanges.push([start, end]);\n }\n }\n return mergedRanges;\n }\n}\n\nexport default GridUtils;\n"],"mappings":"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"}
1
+ {"version":3,"file":"GridUtils.js","names":["clamp","GridRange","isBoundedAxisRange","GridUtils","getGridPointFromXY","x","y","metrics","column","getColumnAtX","row","getRowAtY","columnHeaderDepth","getColumnHeaderDepthAtY","getCellInfoFromXY","visibleColumnWidths","visibleRowHeights","visibleColumnXs","visibleRowYs","modelColumns","modelRows","modelRow","get","modelColumn","left","top","columnWidth","rowHeight","columnHeaderHeight","columnHeaderMaxDepth","Math","ceil","undefined","iterateFloatingStart","start","total","callback","i","result","iterateFloatingEnd","end","iterateFloating","iterateAllItems","visibleStart","visibleEnd","floatingStartCount","floatingEndCount","totalCount","visibleStartIndex","max","visibleEndIndex","min","isInItem","itemIndex","itemCoordinates","itemSizes","coordinate","itemX","itemSize","getItemAtOffset","offset","itemCount","floatingStart","floatingEnd","items","ignoreFloating","floatingItem","item","length","columnCount","floatingLeftColumnCount","floatingRightColumnCount","visibleColumns","gridX","floatingTopRowCount","floatingBottomRowCount","rowCount","visibleRows","gridY","getNextShownItem","startIndex","modelIndexes","visibleItems","userSizes","visibleItemIndex","findIndex","value","modelIndex","getNextShownColumn","userColumnWidths","getNextShownRow","userRowHeights","getColumnSeparatorIndex","theme","rowHeaderWidth","floatingColumns","floatingLeftWidth","allowColumnResize","headerSeparatorHandleSize","halfSeparatorSize","isPreviousColumnHidden","columnX","isColumnHidden","midX","minX","maxX","isItemHidden","visibleSizes","columnIndex","isFloatingRow","isFloatingColumn","getHiddenItems","hiddenItems","push","getHiddenColumns","getRowSeparatorIndex","allowRowResize","isPreviousRowHidden","rowY","isRowHidden","midY","minY","maxY","rowIndex","getHiddenRows","moveItem","from","to","oldMovedItems","movedItems","lastMovedItem","pop","moveRange","toParam","isPreMoveTo","newLastMovedItem","moveItemOrRange","Array","isArray","applyItemMoves","reverse","fromItemOrRange","toItem","fromItem","fromStart","fromEnd","toStart","moveDistance","nextResult","j","currentStart","Number","NEGATIVE_INFINITY","currentEnd","POSITIVE_INFINITY","movedRange","currentResult","map","s","e","filter","range","flat","isFinite","translateRange","movedColumns","movedRows","columnRanges","startColumn","endColumn","rowRanges","startRow","endRow","ranges","c","r","getModelIndex","visibleIndex","getModelIndexes","visibleIndexes","getModelRangeIndexes","getModelRange","uiRange","getModelRanges","uiRanges","modelRanges","getVisibleRangeIndexes","getVisibleRange","modelRange","getVisibleRanges","visibleRanges","getVisibleIndex","getVisibleIndexes","isMacPlatform","platform","window","navigator","startsWith","getModifierKey","isModifierKeyDown","event","modifierKey","checkColumnHidden","checkAllColumnsHidden","columns","size","every","getScrollDragBounds","width","height","floatingRightWidth","floatingTopHeight","floatingBottomHeight","x1","y1","x2","y2","getScrollDelta","wheelEvent","pageWidth","pageHeight","lineWidth","lineHeight","deltaX","deltaY","shiftKey","deltaMode","WheelEvent","DOM_DELTA_PAGE","DOM_DELTA_LINE","round","PIXELS_PER_LINE","compareRanges","range1","range2","mergeSortedRanges","mergedRanges"],"sources":["../src/GridUtils.ts"],"sourcesContent":["import React from 'react';\nimport clamp from 'lodash.clamp';\nimport GridRange, { GridRangeIndex } from './GridRange';\nimport {\n BoxCoordinates,\n Coordinate,\n CoordinateMap,\n VisibleIndex,\n VisibleToModelMap,\n ModelIndex,\n ModelSizeMap,\n MoveOperation,\n SizeMap,\n} from './GridMetrics';\nimport type { GridMetrics } from './GridMetrics';\nimport { GridTheme } from './GridTheme';\nimport { GridWheelEvent } from './GridMouseHandler';\nimport {\n AxisRange,\n BoundedAxisRange,\n isBoundedAxisRange,\n Range,\n} from './GridAxisRange';\n\nexport type GridPoint = {\n x: Coordinate;\n y: Coordinate;\n column: GridRangeIndex;\n row: GridRangeIndex;\n columnHeaderDepth?: number;\n};\n\nexport interface CellInfo {\n row: VisibleIndex | null;\n column: VisibleIndex | null;\n modelRow: ModelIndex | null;\n modelColumn: ModelIndex | null;\n left: Coordinate | null;\n top: Coordinate | null;\n columnWidth: number | null;\n rowHeight: number | null;\n}\n\nexport type IndexCallback<T> = (itemIndex: VisibleIndex) => T | undefined;\n\nexport class GridUtils {\n // use same constant as chrome source for windows\n // https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n static PIXELS_PER_LINE = 100 / 3;\n\n /**\n * Get the GridPoint for the coordinates provided\n * @param x The grid x coordinate\n * @param y The grid y coordinate\n * @param metrics The grid metrics\n * @returns The GridPoint including the column/row information\n */\n static getGridPointFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): GridPoint {\n const column = GridUtils.getColumnAtX(x, metrics);\n const row = GridUtils.getRowAtY(y, metrics);\n const columnHeaderDepth = GridUtils.getColumnHeaderDepthAtY(y, metrics);\n\n return { x, y, row, column, columnHeaderDepth };\n }\n\n static getCellInfoFromXY(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics\n ): CellInfo {\n const { row, column } = GridUtils.getGridPointFromXY(x, y, metrics);\n\n const {\n visibleColumnWidths,\n visibleRowHeights,\n visibleColumnXs,\n visibleRowYs,\n modelColumns,\n modelRows,\n } = metrics;\n\n const modelRow = row !== null ? modelRows.get(row) : null;\n const modelColumn = column !== null ? modelColumns.get(column) : null;\n const left = column !== null ? visibleColumnXs.get(column) : null;\n const top = row !== null ? visibleRowYs.get(row) : null;\n const columnWidth =\n column !== null ? visibleColumnWidths.get(column) : null;\n const rowHeight = row !== null ? visibleRowHeights.get(row) : null;\n\n return {\n row,\n column,\n modelRow: modelRow ?? null,\n modelColumn: modelColumn ?? null,\n left: left ?? null,\n top: top ?? null,\n columnWidth: columnWidth ?? null,\n rowHeight: rowHeight ?? null,\n };\n }\n\n static getColumnHeaderDepthAtY(\n y: Coordinate,\n metrics: GridMetrics\n ): number | undefined {\n const row = GridUtils.getRowAtY(y, metrics);\n const { columnHeaderHeight, columnHeaderMaxDepth } = metrics;\n\n if (row === null && y <= columnHeaderHeight * columnHeaderMaxDepth) {\n return clamp(\n columnHeaderMaxDepth - Math.ceil(y / columnHeaderHeight),\n 0,\n columnHeaderMaxDepth - 1\n );\n }\n\n return undefined;\n }\n\n /**\n * Iterate through each floating item at the start and call a callback, returning the first result\n * @param start The count of floating items at the start\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingStart<T>(\n start: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < start && i < total; i += 1) {\n const result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through floating items at the end. Iterates in increasing order.\n * @param end The count of floating items at the end\n * @param total The total number of items\n * @param callback Function to call for each item\n * @returns The result from the callback\n */\n static iterateFloatingEnd<T>(\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n for (let i = 0; i < end && total - (end - i) >= 0; i += 1) {\n const result = callback(total - (end - i));\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Iterate through all floating items in increasing order, starting with the top items.\n * @param start Count of start floating rows, e.g. floatingTopRowCount\n * @param end Count of end floating rows, e.g. floatingBottomRowCount\n * @param total Total number of items\n * @param callback Callback called for each value, stopping the iterating and returning the value if one is returned\n */\n static iterateFloating<T>(\n start: number,\n end: number,\n total: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const result = GridUtils.iterateFloatingStart(start, total, callback);\n if (result !== undefined) {\n return result;\n }\n return GridUtils.iterateFloatingEnd(end, total, callback);\n }\n\n /**\n * Iterate through all items in one dimension on the grid - first floating, then visible.\n * Call the callback for each item, break if a result is returned and return that result.\n * @param visibleStart Index of the start of the visible viewport\n * @param visibleEnd Index of the end of the visible viewport\n * @param floatingStartCount Number of items floating at the start\n * @param floatingEndCount Number of items floating at the end\n * @param totalCount Total number of items\n * @param callback Callback to call for each item\n * @returns The first result from the callback called, or undefined\n */\n static iterateAllItems<T>(\n visibleStart: VisibleIndex,\n visibleEnd: VisibleIndex,\n floatingStartCount: number,\n floatingEndCount: number,\n totalCount: number,\n callback: IndexCallback<T>\n ): T | undefined {\n const visibleStartIndex = Math.max(visibleStart, floatingStartCount);\n const visibleEndIndex = Math.min(\n visibleEnd,\n totalCount - floatingEndCount - 1\n );\n let result = GridUtils.iterateFloating(\n floatingStartCount,\n floatingEndCount,\n totalCount,\n callback\n );\n if (result !== undefined) {\n return result;\n }\n\n for (let i = visibleStartIndex; i <= visibleEndIndex; i += 1) {\n result = callback(i);\n if (result !== undefined) {\n return result;\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the coordinate is within the item specified in this dimension\n * @param itemIndex Index of the item to check\n * @param itemCoordinatess Coordinate of all items in this dimension\n * @param itemSizes Size of all items in this dimension\n * @param coordinate The coordinate to check\n * @returns True if the coordinate is within the item specified, false otherwise\n */\n static isInItem(\n itemIndex: VisibleIndex,\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n coordinate: Coordinate\n ): boolean {\n const itemX = itemCoordinates.get(itemIndex) ?? 0;\n const itemSize = itemSizes.get(itemIndex) ?? 0;\n return itemX <= coordinate && coordinate <= itemX + itemSize;\n }\n\n /**\n * Get the Index of the item at the provided offset\n * @param offset Coordinate of the offset to get the item of\n * @param itemCount The total count of items\n * @param floatingStart Count of floating items at the start\n * @param floatingEnd Count of floating items at the end\n * @param items Index of all items\n * @param itemCoordinates The coordinate of each item\n * @param itemSizes The size of each item\n * @returns The item index, or null if no item matches\n */\n static getItemAtOffset(\n offset: Coordinate,\n itemCount: number,\n floatingStart: number,\n floatingEnd: number,\n items: VisibleIndex[],\n itemCoordinates: CoordinateMap,\n itemSizes: SizeMap,\n ignoreFloating = false\n ): VisibleIndex | null {\n const floatingItem = ignoreFloating\n ? undefined\n : GridUtils.iterateFloating(\n floatingStart,\n floatingEnd,\n itemCount,\n item => {\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n return undefined;\n }\n );\n if (!ignoreFloating && floatingItem !== undefined) {\n return floatingItem;\n }\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n if (GridUtils.isInItem(item, itemCoordinates, itemSizes, offset)) {\n return item;\n }\n }\n\n return null;\n }\n\n /**\n * Get the index of the column at the specified x coordinate\n * @param x Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the column at that coordinate, or null if no column matches\n */\n static getColumnAtX(\n x: Coordinate,\n metrics: GridMetrics,\n ignoreFloating = false\n ): VisibleIndex | null {\n const {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n gridX,\n } = metrics;\n\n if (x < gridX) {\n return null;\n }\n\n return this.getItemAtOffset(\n x - gridX,\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n ignoreFloating\n );\n }\n\n /**\n * Get the index of the row at the specified y coordinate\n * @param y Coordinate to get the item of\n * @param metrics Grid metrics\n * @returns Index of the row at that coordinate, or null if no row matches\n */\n static getRowAtY(y: Coordinate, metrics: GridMetrics): VisibleIndex | null {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n gridY,\n } = metrics;\n\n if (y < gridY) {\n return null;\n }\n\n return this.getItemAtOffset(\n y - gridY,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n visibleRows,\n visibleRowYs,\n visibleRowHeights\n );\n }\n\n /**\n * Iterate backward through the visible items until a shown item is hit\n * @param startIndex The index to start from\n * @param modelIndexes The mapping of model indexes\n * @param visibleItems The visible items\n * @param userSizes The user set sizes\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownItem(\n startIndex: VisibleIndex,\n modelIndexes: VisibleToModelMap,\n visibleItems: VisibleIndex[],\n userSizes: ModelSizeMap\n ): VisibleIndex | null {\n let visibleItemIndex =\n visibleItems.findIndex(value => value === startIndex) || 0;\n visibleItemIndex -= 1;\n while (visibleItemIndex != null && visibleItemIndex >= 0) {\n const item = visibleItems[visibleItemIndex];\n const modelIndex = modelIndexes.get(item);\n if (modelIndex != null && userSizes.get(modelIndex) !== 0) {\n return item;\n }\n\n visibleItemIndex -= 1;\n }\n\n return null;\n }\n\n /**\n * Iterate backward through the visible columns until a shown column is hit\n * @param columnIndex The column index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownColumn(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelColumns, visibleColumns, userColumnWidths } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelColumns,\n visibleColumns,\n userColumnWidths\n );\n }\n\n /**\n * Iterate backward through the visible rows until a shown row is hit\n * @param rowIndex The row index to start iterating backward from\n * @param metrics The GridMetricCalculator metrics\n * @returns Index of the next visible item, or null if no more are visible\n */\n static getNextShownRow(\n startIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null {\n const { modelRows, visibleRows, userRowHeights } = metrics;\n return GridUtils.getNextShownItem(\n startIndex,\n modelRows,\n visibleRows,\n userRowHeights\n );\n }\n\n /**\n * Gets the column index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x Mouse x coordinate\n * @param y Mouse y coordinate\n * @param metrics The grid metrics\n * @param theme The grid theme with potential user overrides\n * @returns Index of the column separator at the coordinates provided, or null if none match\n */\n static getColumnSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n floatingColumns,\n floatingLeftWidth,\n visibleColumns,\n visibleColumnXs,\n visibleColumnWidths,\n columnHeaderMaxDepth,\n } = metrics;\n const { allowColumnResize, headerSeparatorHandleSize } = theme;\n\n if (\n columnHeaderMaxDepth * columnHeaderHeight < y ||\n !allowColumnResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridX = x - rowHeaderWidth;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate through the floating columns first since they're on top\n let isPreviousColumnHidden = false;\n for (let i = floatingColumns.length - 1; i >= 0; i -= 1) {\n const column = floatingColumns[i];\n const columnX = visibleColumnXs.get(column) ?? 0;\n const columnWidth = visibleColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n // Iterate backward so that you can reveal hidden columns properly\n isPreviousColumnHidden = false;\n for (let i = visibleColumns.length - 1; i >= 0; i -= 1) {\n const column = visibleColumns[i];\n const columnX = visibleColumnXs.get(column) ?? 0;\n const columnWidth = visibleColumnWidths.get(column) ?? 0;\n const isColumnHidden = columnWidth === 0;\n\n // If this column is under the floating columns \"layer\". Terminate early.\n if (columnX < floatingLeftWidth - columnWidth) {\n return null;\n }\n\n if (!isPreviousColumnHidden || !isColumnHidden) {\n let midX = columnX + columnWidth;\n if (isColumnHidden) {\n midX += halfSeparatorSize;\n } else if (isPreviousColumnHidden) {\n midX -= halfSeparatorSize;\n }\n\n const minX = midX - halfSeparatorSize;\n const maxX = midX + halfSeparatorSize;\n if (minX <= gridX && gridX <= maxX) {\n return column;\n }\n\n isPreviousColumnHidden = isColumnHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the item specified is hidden\n * @param itemIndex Index of the item to check\n * @param visibleSizes Sizes of all visible items\n * @returns True if the item is hidden, false otherwise\n */\n static isItemHidden(itemIndex: VisibleIndex, visibleSizes: SizeMap): boolean {\n return visibleSizes.get(itemIndex) === 0;\n }\n\n /**\n * Check if the column specified is hidden\n * @param columnIndex Index of the column to check\n * @param metrics Grid metrics\n * @returns True if the column is hidden, false otherwise\n */\n static isColumnHidden(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): boolean {\n const { visibleColumnWidths } = metrics;\n return GridUtils.isItemHidden(columnIndex, visibleColumnWidths);\n }\n\n /**\n * Check if the provided row is a floating row\n * @param row The row index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating row, false otherwise\n */\n static isFloatingRow(row: VisibleIndex, metrics: GridMetrics): boolean {\n if (row == null) {\n return false;\n }\n\n const { floatingTopRowCount, floatingBottomRowCount, rowCount } = metrics;\n return (\n row < floatingTopRowCount || row >= rowCount - floatingBottomRowCount\n );\n }\n\n /**\n * Check if the provided column is a floating column\n * @param column The column index to check\n * @param metrics The grid metrics to check against\n * @returns True if it's a floating column, false otherwise\n */\n static isFloatingColumn(column: VisibleIndex, metrics: GridMetrics): boolean {\n if (column == null) {\n return false;\n }\n\n const {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n } = metrics;\n return (\n column < floatingLeftColumnCount ||\n column >= columnCount - floatingRightColumnCount\n );\n }\n\n /**\n * Get all the items that are hidden under the same Index\n * E.g. If columns are 1, 2, 3, 4, 5, and column 2, 3, 4 are hidden, and we check for item 4, the return will be [2, 3, 4]\n * @param itemIndex Index of the item to start at\n * @param visibleSizes Visible size map\n * @param visibleItems Visible items\n * @returns Array of items that are hidden\n */\n static getHiddenItems(\n itemIndex: VisibleIndex,\n visibleSizes: SizeMap,\n visibleItems: VisibleIndex[]\n ): VisibleIndex[] {\n if (!GridUtils.isItemHidden(itemIndex, visibleSizes)) {\n return [];\n }\n\n const hiddenItems = [itemIndex];\n const visibleItemIndex = visibleItems.findIndex(\n value => value === itemIndex\n );\n for (let i = visibleItemIndex - 1; i >= 0; i -= 1) {\n const item = visibleItems[i];\n if (!GridUtils.isItemHidden(item, visibleSizes)) {\n break;\n }\n\n hiddenItems.push(item);\n }\n\n return hiddenItems;\n }\n\n /**\n * Get all the columns that are hidden under the same Index\n * @param columnIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenColumns(\n columnIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleColumns, visibleColumnWidths } = metrics;\n return GridUtils.getHiddenItems(\n columnIndex,\n visibleColumnWidths,\n visibleColumns\n );\n }\n\n /**\n * Returns the row index if the x/y coordinates provided are close enough to the separator, otherwise null\n * @param x X coordinate to check\n * @param y Y coordinate to check\n * @param metrics The grid metrics\n * @param theme The grid theme\n * @returns Index of the row separator at the coordinates provided, or null if none match\n */\n static getRowSeparatorIndex(\n x: Coordinate,\n y: Coordinate,\n metrics: GridMetrics,\n theme: GridTheme\n ): VisibleIndex | null {\n const {\n rowHeaderWidth,\n columnHeaderHeight,\n visibleRows,\n visibleRowYs,\n visibleRowHeights,\n } = metrics;\n const { allowRowResize, headerSeparatorHandleSize } = theme;\n\n if (\n rowHeaderWidth < x ||\n !allowRowResize ||\n headerSeparatorHandleSize <= 0\n ) {\n return null;\n }\n\n const gridY = y - columnHeaderHeight;\n const halfSeparatorSize = headerSeparatorHandleSize * 0.5;\n\n // Iterate backward so you can reveal hidden rows properly\n let isPreviousRowHidden = false;\n for (let i = visibleRows.length - 1; i >= 0; i -= 1) {\n const row = visibleRows[i];\n const rowY = visibleRowYs.get(row) ?? 0;\n const rowHeight = visibleRowHeights.get(row) ?? 0;\n const isRowHidden = rowHeight === 0;\n if (!isPreviousRowHidden || !isRowHidden) {\n let midY = rowY + rowHeight;\n if (isRowHidden) {\n midY += halfSeparatorSize;\n } else if (isPreviousRowHidden) {\n midY -= halfSeparatorSize;\n }\n\n const minY = midY - halfSeparatorSize;\n const maxY = midY + halfSeparatorSize;\n\n if (minY <= gridY && gridY <= maxY) {\n return row;\n }\n\n isPreviousRowHidden = isRowHidden;\n }\n }\n\n return null;\n }\n\n /**\n * Check if the row specified is hidden\n * @param rowIndex Index of the row to check\n * @param metrics Grid metrics\n * @returns True if the row is hidden, false otherwise\n */\n static isRowHidden(rowIndex: VisibleIndex, metrics: GridMetrics): boolean {\n const { visibleRowHeights } = metrics;\n return GridUtils.isItemHidden(rowIndex, visibleRowHeights);\n }\n\n /**\n * Get all the rows that are hidden under the same Index\n * @param rowIndex Index of the item to start at\n * @param metrics Grid metrics\n * @returns Array of items that are hidden\n */\n static getHiddenRows(\n rowIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[] {\n const { visibleRows, visibleRowHeights } = metrics;\n return GridUtils.getHiddenItems(rowIndex, visibleRowHeights, visibleRows);\n }\n\n /**\n * Set a new order for items in the grid\n * @param from The visible index to move from\n * @param to The visible index to move the item to\n * @param oldMovedItems The old reordered items\n * @returns The new reordered items\n */\n static moveItem(\n from: VisibleIndex,\n to: VisibleIndex,\n oldMovedItems: MoveOperation[]\n ): MoveOperation[] {\n if (from === to) {\n return oldMovedItems;\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. 1 -> 2, 2 -> 3 can just be 1 -> 3\n if (\n lastMovedItem != null &&\n !isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.to === from\n ) {\n // Remove the move if it is now a no-op\n if (lastMovedItem.from === to) {\n movedItems.pop();\n } else {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n }\n } else {\n movedItems.push({ from, to });\n }\n\n return movedItems;\n }\n\n /**\n * Move a visible range in the grid\n *\n * This will effectively slice the range out of the grid,\n * re-index the remaining columns,\n * then insert the range with the first element at the provided index\n *\n * @param from The visible axis range to move\n * @param to The visible index to move the start of the range to\n * @param oldMovedItems The old reordered items\n * @param isPreMoveTo If toParam is the index before the movement\n * If true, this will account for the shift when moving\n * a range before the drop positin\n * E.g. Move range [0, 2] 1 item down (after element 3)\n * The move is [0, 2] -> 1 if this is false. [0, 2] -> 3 if this is true\n * Both will result in [0, 2] -> 1\n * @returns The new reordered items\n */\n static moveRange(\n from: BoundedAxisRange,\n toParam: VisibleIndex,\n oldMovedItems: MoveOperation[],\n isPreMoveTo = false\n ): MoveOperation[] {\n if (from[0] === from[1]) {\n return GridUtils.moveItem(from[0], toParam, oldMovedItems);\n }\n\n let to = toParam;\n\n if (isPreMoveTo && from[0] < toParam) {\n to -= from[1] - from[0];\n }\n\n if (from[0] === to) {\n return oldMovedItems;\n }\n\n const movedItems: MoveOperation[] = [...oldMovedItems];\n const lastMovedItem = movedItems[movedItems.length - 1];\n\n // Check if we should combine with the previous move\n // E.g. [1, 2] -> 2, [2, 3] -> 3 can just be [1, 2] -> 3\n if (\n lastMovedItem != null &&\n isBoundedAxisRange(lastMovedItem.from) &&\n lastMovedItem.from[1] - lastMovedItem.from[0] === from[1] - from[0] &&\n lastMovedItem.to === from[0]\n ) {\n movedItems[movedItems.length - 1] = {\n ...lastMovedItem,\n to,\n };\n } else {\n movedItems.push({ from, to });\n }\n\n const newLastMovedItem = movedItems[movedItems.length - 1];\n // Remove the move if it is now a no-op\n if (\n isBoundedAxisRange(newLastMovedItem.from) &&\n newLastMovedItem.from[0] === newLastMovedItem.to\n ) {\n movedItems.pop();\n }\n\n return movedItems;\n }\n\n static moveItemOrRange(\n from: VisibleIndex | BoundedAxisRange,\n to: VisibleIndex,\n oldMovedItems: MoveOperation[],\n isPreMoveTo = false\n ): MoveOperation[] {\n return Array.isArray(from)\n ? GridUtils.moveRange(from, to, oldMovedItems, isPreMoveTo)\n : GridUtils.moveItem(from, to, oldMovedItems);\n }\n\n /**\n * Applies the items moves to the AxisRange\n * @param start The start index of the range\n * @param end The end index of the range\n * @param movedItems The move operations to apply\n * @param reverse If the moved items should be applied in reverse (this reverses the effects of the moves)\n * @returns A list of AxisRanges in the translated space. Possibly multiple non-continuous ranges\n */\n static applyItemMoves<T extends number | GridRangeIndex>(\n start: T,\n end: T,\n movedItems: MoveOperation[],\n reverse = false\n ): Range<T>[] {\n let result: Range<T>[] = [[start, end]];\n\n for (\n let i = reverse ? movedItems.length - 1 : 0;\n reverse ? i >= 0 : i < movedItems.length;\n reverse ? (i -= 1) : (i += 1)\n ) {\n const { from: fromItemOrRange, to: toItem } = movedItems[i];\n let length = 1;\n let fromItem: number;\n if (isBoundedAxisRange(fromItemOrRange)) {\n length = fromItemOrRange[1] - fromItemOrRange[0] + 1; // Ranges are inclusive\n [fromItem] = fromItemOrRange;\n } else {\n fromItem = fromItemOrRange;\n }\n\n const fromStart = reverse ? toItem : fromItem;\n const fromEnd = fromStart + length - 1;\n const toStart = reverse ? fromItem : toItem;\n const moveDistance = toStart - fromStart;\n\n const nextResult: Range<number>[] = [];\n for (let j = 0; j < result.length; j += 1) {\n const currentStart = result[j][0] ?? Number.NEGATIVE_INFINITY;\n const currentEnd = result[j][1] ?? Number.POSITIVE_INFINITY;\n\n let movedRange: Range<number> | undefined;\n const currentResult: Range<number>[] = [\n [currentStart, fromStart - 1],\n [fromStart, fromEnd],\n [fromEnd + 1, currentEnd],\n ]\n .map(\n ([s, e]): Range<number> => [\n // Cap the ranges to within the current range bounds\n Math.max(s, currentStart),\n Math.min(e, currentEnd),\n ]\n )\n .filter(([s, e]) => s <= e) // Remove invalid ranges\n .map(\n (range): Range<number> => {\n const [s, e] = range;\n if (fromStart <= s && fromEnd >= e) {\n // Current range in moved range\n movedRange = [s + moveDistance, e + moveDistance];\n return movedRange;\n }\n\n if (fromEnd < s) {\n // Current range is after moved range\n return [s - length, e - length];\n }\n return range;\n }\n )\n .map((range): Range<number>[] => {\n const [s, e] = range;\n if (toStart > s && toStart <= e) {\n // Moved range splits this range\n return [\n [s, toStart - 1],\n [toStart + length, e + length],\n ];\n }\n\n if (range === movedRange) {\n // Moved range has already been shifted\n return [range];\n }\n\n if (toStart <= s) {\n // Moved range shifts this range right\n return [[s + length, e + length]];\n }\n return [range];\n })\n .flat();\n\n nextResult.push(...currentResult);\n }\n\n // Return infinity values back to null\n result = nextResult.map(([s, e]) => [\n Number.isFinite(s) ? s : null,\n Number.isFinite(e) ? e : null,\n ]) as Range<T>[];\n }\n return result;\n }\n\n /**\n * Applies the items moves to the givengrid range\n * @param range The grid range to translate\n * @param movedColumns The moved columns\n * @param movedRows The moved rows\n * @param reverse If the moved items should be reversed (i.e. visible to model range)\n * @returns A list of grid ranges in the translated space. Possibly multiple non-continuous ranges\n */\n static translateRange(\n range: GridRange,\n movedColumns: MoveOperation[],\n movedRows: MoveOperation[],\n reverse: boolean\n ): GridRange[] {\n const columnRanges = GridUtils.applyItemMoves(\n range.startColumn,\n range.endColumn,\n movedColumns,\n reverse\n );\n const rowRanges = GridUtils.applyItemMoves(\n range.startRow,\n range.endRow,\n movedRows,\n reverse\n );\n const ranges: GridRange[] = [];\n for (let i = 0; i < columnRanges.length; i += 1) {\n const c = columnRanges[i];\n for (let j = 0; j < rowRanges.length; j += 1) {\n const r = rowRanges[j];\n ranges.push(new GridRange(c[0], r[0], c[1], r[1]));\n }\n }\n return ranges;\n }\n\n /**\n * Retrieve the model index given the currently moved items\n * @param visibleIndex The visible index of the item to get the model index for\n * @param movedItems The moved items\n * @returns The model index of the item\n */\n static getModelIndex(\n visibleIndex: VisibleIndex,\n movedItems: MoveOperation[]\n ): ModelIndex {\n const modelIndex = GridUtils.applyItemMoves(\n visibleIndex,\n visibleIndex,\n movedItems,\n true\n )[0][0];\n\n return modelIndex;\n }\n\n /**\n * Retrieve the model indexes given the currently moved items\n * @param visibleIndexes The visible indexes of the item to get the model indexes for\n * @param movedItems The moved items\n * @returns The model indexes of the item\n */\n static getModelIndexes(\n visibleIndexes: ModelIndex[],\n movedItems: MoveOperation[]\n ): VisibleIndex[] {\n return visibleIndexes.map(i => GridUtils.getModelIndex(i, movedItems));\n }\n\n /**\n * Translate the provided UI start/end indexes to the model start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getModelRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, true);\n }\n\n /**\n * Translate the provided UI range into model range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRange(\n uiRange: GridRange,\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n return GridUtils.translateRange(uiRange, movedColumns, movedRows, true);\n }\n\n /**\n * Translate the provided UI range into model ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRanges The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getModelRanges(\n uiRanges: GridRange[],\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n const modelRanges = [];\n for (let i = 0; i < uiRanges.length; i += 1) {\n modelRanges.push(\n ...GridUtils.getModelRange(uiRanges[i], movedColumns, movedRows)\n );\n }\n return modelRanges;\n }\n\n /**\n * Translate the provided UI start/end indexes to the visible start/end indexes by applying the `movedItems` transformations.\n * Since moved items can split apart a range, multiple pairs of indexes are returned\n *\n * @param start Start item in one dimension\n * @param end End item in one dimension\n * @param movedItems Moved item pairs in this dimension\n * @returns Array of start/end pairs of the indexes after transformations applied.\n */\n static getVisibleRangeIndexes(\n start: GridRangeIndex,\n end: GridRangeIndex,\n movedItems: MoveOperation[]\n ): AxisRange[] {\n return GridUtils.applyItemMoves(start, end, movedItems, false);\n }\n\n /**\n * Translate the provided UI range into visible range, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param uiRange The currently selected UI ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRange(\n modelRange: GridRange,\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n return this.translateRange(modelRange, movedColumns, movedRows, false);\n }\n\n /**\n * Translate the provided model ranges into visible ranges, using the `movedColumns` and `movedRows` to apply the necessary transforms.\n * `movedColumns` and `movedRows` are array of operations done to the UI indexes to re-order items\n *\n * @param modelRanges The model ranges\n * @param movedColumns The moved column pairs\n * @param movedRows The moved row pairs\n * @returns The model ranges after translation.\n */\n static getVisibleRanges(\n modelRanges: GridRange[],\n movedColumns: MoveOperation[] = [],\n movedRows: MoveOperation[] = []\n ): GridRange[] {\n const visibleRanges = [];\n for (let i = 0; i < modelRanges.length; i += 1) {\n visibleRanges.push(\n ...GridUtils.getVisibleRange(modelRanges[i], movedColumns, movedRows)\n );\n }\n return visibleRanges;\n }\n\n /**\n * Retrieve the visible index given the currently moved items\n * @param modelIndex The model index to get the visible index for\n * @param movedItems Moved items\n * @returns The visible index of the item\n */\n static getVisibleIndex(\n modelIndex: ModelIndex,\n movedItems: MoveOperation[]\n ): VisibleIndex {\n const visibleIndex = GridUtils.applyItemMoves(\n modelIndex,\n modelIndex,\n movedItems\n )[0][0];\n\n return visibleIndex;\n }\n\n /**\n * Retrieve the visible indexes given the currently moved items\n * @param modelIndexes The model indexes to get the visible indexes for\n * @param movedItems Moved items\n * @returns The visible indexes of the item\n */\n static getVisibleIndexes(\n modelIndexes: ModelIndex[],\n movedItems: MoveOperation[]\n ): VisibleIndex[] {\n return modelIndexes.map(i => GridUtils.getVisibleIndex(i, movedItems));\n }\n\n /**\n * Check if the current platform is Mac\n * @returns True if this platform is a Mac, false otherwise\n */\n static isMacPlatform(): boolean {\n const { platform } = window.navigator;\n return platform.startsWith('Mac');\n }\n\n /**\n * Get the modifier key for the current platform\n * @returns The modifier key for the current platform\n */\n static getModifierKey(): 'metaKey' | 'ctrlKey' {\n if (GridUtils.isMacPlatform()) {\n return 'metaKey';\n }\n\n return 'ctrlKey';\n }\n\n /**\n * Check if the modifier key is down for the given event\n * @param event The event to check\n * @returns True if the modifier key is down, false otherwise\n */\n static isModifierKeyDown(\n event: MouseEvent | KeyboardEvent | React.KeyboardEvent | React.MouseEvent\n ): boolean {\n const modifierKey = GridUtils.getModifierKey();\n return event[modifierKey];\n }\n\n /**\n * Check if the user has hidden the specified column\n * @param modelIndex The model index to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden the column\n */\n static checkColumnHidden(\n modelIndex: ModelIndex,\n userColumnWidths: ModelSizeMap\n ): boolean {\n return userColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Check if all the columns specified are hidden\n * @param columns Columns to check\n * @param userColumnWidths The user set column widths\n * @returns True if the user has hidden all of the columns\n */\n static checkAllColumnsHidden(\n columns: ModelIndex[],\n userColumnWidths: ModelSizeMap\n ): boolean {\n if (userColumnWidths.size === 0) {\n return false;\n }\n return columns.every(column => userColumnWidths.get(column) === 0);\n }\n\n /**\n * Get the bounds the mouse needs to be dragged outside of from an initial selection before scrolling occurs.\n * Taking into account any floating rows that may be covering the viewport.\n * @param metrics Grid metrics\n * @param row The row they started dragging in\n * @param column The column they started the drag from\n * @returns Dimensions of the drag area in relation to the canvas they need to drag outside of to start scrolling\n */\n static getScrollDragBounds(\n metrics: GridMetrics,\n row: GridRangeIndex,\n column: GridRangeIndex\n ): BoxCoordinates {\n const {\n gridX,\n gridY,\n width,\n height,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingTopHeight,\n floatingBottomHeight,\n columnCount,\n rowCount,\n } = metrics;\n let x1 = gridX;\n let y1 = gridY;\n let x2 = width;\n let y2 = height;\n if (column != null) {\n if (column > floatingLeftColumnCount) {\n x1 += floatingLeftWidth;\n }\n if (column < columnCount - floatingRightColumnCount) {\n x2 -= floatingRightWidth;\n }\n }\n\n if (row != null) {\n if (row > floatingTopRowCount) {\n y1 += floatingTopHeight;\n }\n if (row < rowCount - floatingBottomRowCount) {\n y2 -= floatingBottomHeight;\n }\n }\n return { x1, y1, x2, y2 };\n }\n\n /**\n * Converts the delta coordinates from the provided wheel event to pixels\n * Different platforms have different ways of providing the delta so this normalizes it\n * @param wheelEvent The mouse wheel event to get the scrolling delta for\n * @param pageWidth The width of the page that is scrolling\n * @param pageHeight The height of the page that is scrolling\n * @param lineWidth The width of the line scrolling in line mode\n * @param lineHeight The height of the line scrolling in line mode\n * @returns The delta coordinates normalized to pixels\n */\n static getScrollDelta(\n wheelEvent: GridWheelEvent,\n pageWidth = 1024,\n pageHeight = 768,\n lineWidth = 20,\n lineHeight = 20\n ): { deltaX: number; deltaY: number } {\n let { deltaX, deltaY } = wheelEvent;\n\n // Flip scroll direction if shiftKey is held on windows/linux.\n // On mac, deltaX/Y values are switched at the event level when shiftKey=true.\n // Guard on strictly Y only changing, to ignore trackpad diagonal motion,\n // through that guard may not be necessary, but it is difficult to determine for\n // all platforms/browser/scroll method combos.\n if (\n !GridUtils.isMacPlatform() &&\n wheelEvent.shiftKey &&\n wheelEvent.deltaX === 0 &&\n wheelEvent.deltaY !== 0\n ) {\n deltaX = wheelEvent.deltaY;\n deltaY = wheelEvent.deltaX;\n }\n\n // Normalize other deltaMode values to pixel units\n // deltaMode 0, is already in pixel units\n if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\n // Users can set OS to be in deltaMode page\n // scrolly by page units as pixels\n deltaX *= pageWidth;\n deltaY *= pageHeight;\n } else if (wheelEvent?.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n // Firefox reports deltaMode line\n // Normalize distance travelled between browsers\n // but remain ~platform/browser combo consistent\n if (GridUtils.isMacPlatform()) {\n // for mac treat lines as a standard row height\n // on mac, firefox travels less distance then chrome per tick\n deltaX = Math.round(deltaX * lineWidth);\n deltaY = Math.round(deltaY * lineHeight);\n } else {\n // for windows convert to pixels using the same method as chrome\n // chrome goes 100 per 3 lines, and firefox would go 102 per 3 (17 lineheight * 3 lines * 2)\n // make the behaviour the same between as it's close enough\n deltaX = Math.round(deltaX * this.PIXELS_PER_LINE);\n deltaY = Math.round(deltaY * this.PIXELS_PER_LINE);\n }\n }\n\n return { deltaX, deltaY };\n }\n\n static compareRanges(range1: AxisRange, range2: AxisRange): number {\n if (\n range1[0] == null ||\n range1[1] == null ||\n range2[0] == null ||\n range2[1] == null\n ) {\n return 0;\n }\n return range1[0] !== range2[0]\n ? range1[0] - range2[0]\n : range1[1] - range2[1];\n }\n\n static mergeSortedRanges(ranges: BoundedAxisRange[]): BoundedAxisRange[] {\n const mergedRanges: BoundedAxisRange[] = [];\n\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n const start = range[0];\n const end = range[1];\n if (i === 0) {\n mergedRanges.push([start, end]);\n } else if (start - 1 <= mergedRanges[mergedRanges.length - 1][1]) {\n mergedRanges[mergedRanges.length - 1][1] = Math.max(\n mergedRanges[mergedRanges.length - 1][1],\n end\n );\n } else {\n mergedRanges.push([start, end]);\n }\n }\n return mergedRanges;\n }\n}\n\nexport default GridUtils;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "0.24.1-beta.3+c65f268",
3
+ "version": "0.25.0",
4
4
  "description": "Deephaven React grid component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -25,13 +25,13 @@
25
25
  "react": "^17.0.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@deephaven/tsconfig": "^0.24.1-beta.3+c65f268"
28
+ "@deephaven/tsconfig": "^0.25.0"
29
29
  },
30
30
  "files": [
31
31
  "dist"
32
32
  ],
33
33
  "dependencies": {
34
- "@deephaven/utils": "^0.24.1-beta.3+c65f268",
34
+ "@deephaven/utils": "^0.25.0",
35
35
  "classnames": "^2.3.1",
36
36
  "color-convert": "^2.0.1",
37
37
  "event-target-shim": "^6.0.2",
@@ -43,5 +43,5 @@
43
43
  "publishConfig": {
44
44
  "access": "public"
45
45
  },
46
- "gitHead": "c65f268e3b426948dc3569d1c393eb18c3b14cf4"
46
+ "gitHead": "e8da34e9b99e4af6c485c4f714ae1dcd02a97e95"
47
47
  }