@deephaven/grid 0.27.1-beta.2 → 0.27.1-beta.7

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.
@@ -55,6 +55,10 @@ export declare class GridMetricCalculator {
55
55
  static CACHE_SIZE: number;
56
56
  /** The maximum column width as a percentage of the full grid */
57
57
  static MAX_COLUMN_WIDTH: number;
58
+ /** The initial row heights if any overrides from the default calculated values */
59
+ initialRowHeights: ReadonlyMap<ModelIndex, number>;
60
+ /** The initial column widths if any overrides from the default calculated values */
61
+ initialColumnWidths: ReadonlyMap<ModelIndex, number>;
58
62
  /** User set column widths */
59
63
  protected userColumnWidths: ModelSizeMap;
60
64
  /** User set row heights */
@@ -73,7 +77,7 @@ export declare class GridMetricCalculator {
73
77
  protected movedRows: MoveOperation[];
74
78
  /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */
75
79
  protected movedColumns: MoveOperation[];
76
- constructor({ userColumnWidths, userRowHeights, calculatedColumnWidths, calculatedRowHeights, fontWidths, modelRows, modelColumns, movedRows, movedColumns, }?: {
80
+ constructor({ userColumnWidths, userRowHeights, calculatedColumnWidths, calculatedRowHeights, fontWidths, modelRows, modelColumns, movedRows, movedColumns, initialRowHeights, initialColumnWidths, }?: {
77
81
  userColumnWidths?: Map<any, any> | undefined;
78
82
  userRowHeights?: Map<any, any> | undefined;
79
83
  calculatedColumnWidths?: Map<any, any> | undefined;
@@ -83,6 +87,8 @@ export declare class GridMetricCalculator {
83
87
  modelColumns?: Map<any, any> | undefined;
84
88
  movedRows?: MoveOperation[] | undefined;
85
89
  movedColumns?: MoveOperation[] | undefined;
90
+ initialRowHeights?: Map<any, any> | undefined;
91
+ initialColumnWidths?: Map<any, any> | undefined;
86
92
  });
87
93
  /**
88
94
  * Get the metrics for the provided metric state
@@ -358,10 +364,10 @@ export declare class GridMetricCalculator {
358
364
  * Get the size from the provided size map of the specified item
359
365
  * @param modelIndex The model index to get the size for
360
366
  * @param userSizes The user set sizes
361
- * @param calculateSize Method to calculate the size for this item
367
+ * @param getDefaultSize Method to get the default size for this item
362
368
  * @returns The size from the provided size map of the specified item
363
369
  */
364
- getVisibleItemSize(modelIndex: ModelIndex, userSizes: ModelSizeMap, calculateSize: () => number): number;
370
+ getVisibleItemSize(modelIndex: ModelIndex, userSizes: ModelSizeMap, getDefaultSize: () => number): number;
365
371
  /**
366
372
  * Get the height of the specified row
367
373
  * @param row Index of the row to get the height of
@@ -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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"}
@@ -74,6 +74,12 @@ export class GridMetricCalculator {
74
74
 
75
75
  /** The maximum column width as a percentage of the full grid */
76
76
 
77
+ /** The initial row heights if any overrides from the default calculated values */
78
+ // Readonly so it should be safe to make public
79
+
80
+ /** The initial column widths if any overrides from the default calculated values */
81
+ // Readonly so it should be safe to make public
82
+
77
83
  /** User set column widths */
78
84
 
79
85
  /** User set row heights */
@@ -102,8 +108,12 @@ export class GridMetricCalculator {
102
108
  modelRows = new Map(),
103
109
  modelColumns = new Map(),
104
110
  movedRows = [],
105
- movedColumns = []
111
+ movedColumns = [],
112
+ initialRowHeights = new Map(),
113
+ initialColumnWidths = new Map()
106
114
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
115
+ _defineProperty(this, "initialRowHeights", void 0);
116
+ _defineProperty(this, "initialColumnWidths", void 0);
107
117
  _defineProperty(this, "userColumnWidths", void 0);
108
118
  _defineProperty(this, "userRowHeights", void 0);
109
119
  _defineProperty(this, "calculatedColumnWidths", void 0);
@@ -124,6 +134,8 @@ export class GridMetricCalculator {
124
134
  this.modelColumns = modelColumns;
125
135
  this.movedRows = movedRows;
126
136
  this.movedColumns = movedColumns;
137
+ this.initialRowHeights = initialRowHeights;
138
+ this.initialColumnWidths = initialColumnWidths;
127
139
  }
128
140
 
129
141
  /**
@@ -1125,14 +1137,12 @@ export class GridMetricCalculator {
1125
1137
  * Get the size from the provided size map of the specified item
1126
1138
  * @param modelIndex The model index to get the size for
1127
1139
  * @param userSizes The user set sizes
1128
- * @param calculateSize Method to calculate the size for this item
1140
+ * @param getDefaultSize Method to get the default size for this item
1129
1141
  * @returns The size from the provided size map of the specified item
1130
1142
  */
1131
- getVisibleItemSize(modelIndex, userSizes, calculateSize) {
1143
+ getVisibleItemSize(modelIndex, userSizes, getDefaultSize) {
1132
1144
  var _userSizes$get;
1133
- // Always re-calculate the size of the item so the calculated size maps are populated
1134
- var calculatedSize = calculateSize();
1135
- return (_userSizes$get = userSizes.get(modelIndex)) !== null && _userSizes$get !== void 0 ? _userSizes$get : calculatedSize;
1145
+ return (_userSizes$get = userSizes.get(modelIndex)) !== null && _userSizes$get !== void 0 ? _userSizes$get : getDefaultSize();
1136
1146
  }
1137
1147
 
1138
1148
  /**
@@ -1143,7 +1153,15 @@ export class GridMetricCalculator {
1143
1153
  */
1144
1154
  getVisibleRowHeight(row, state) {
1145
1155
  var modelRow = this.getModelRow(row, state);
1146
- return this.getVisibleItemSize(modelRow, this.userRowHeights, () => this.calculateRowHeight(row, modelRow, state));
1156
+ var calculatedHeight = this.calculateRowHeight(row, modelRow, state); // Need to call this so calculated map is always populated
1157
+
1158
+ return this.getVisibleItemSize(modelRow, this.userRowHeights, () => {
1159
+ var initialHeight = this.initialRowHeights.get(modelRow);
1160
+ if (initialHeight !== undefined) {
1161
+ return initialHeight;
1162
+ }
1163
+ return calculatedHeight;
1164
+ });
1147
1165
  }
1148
1166
 
1149
1167
  /**
@@ -1158,7 +1176,16 @@ export class GridMetricCalculator {
1158
1176
  var firstColumn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.getFirstColumn(state);
1159
1177
  var treePaddingX = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.calculateTreePaddingX(state);
1160
1178
  var modelColumn = this.getModelColumn(column, state);
1161
- return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () => this.calculateColumnWidth(column, modelColumn, state, firstColumn, treePaddingX));
1179
+
1180
+ // Need to call this so calculated map is always populated
1181
+ var calculatedWidth = this.calculateColumnWidth(column, modelColumn, state, firstColumn, treePaddingX);
1182
+ return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () => {
1183
+ var initialWidth = this.initialColumnWidths.get(modelColumn);
1184
+ if (initialWidth !== undefined) {
1185
+ return initialWidth;
1186
+ }
1187
+ return calculatedWidth;
1188
+ });
1162
1189
  }
1163
1190
 
1164
1191
  /**
@@ -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","allRowHeights","getFloatingRowHeights","allColumnWidths","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","barLeft","barTop","barWidth","barHeight","horizontalHandlePercent","verticalHandlePercent","handleWidth","handleHeight","leftColumnWidth","topRowHeight","leftOffsetPercent","topOffsetPercent","horizontalScrollPercent","verticalScrollPercent","scrollX","scrollY","floatingRows","allRowYs","getFloatingRowYs","floatingColumns","allColumnXs","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 const visibleRowHeights = this.getVisibleRowHeights(state);\n const 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 const allRowHeights = new Map([\n ...visibleRowHeights,\n ...this.getFloatingRowHeights(state),\n ]);\n const allColumnWidths = new Map([\n ...visibleColumnWidths,\n ...this.getFloatingColumnWidths(state),\n ]);\n\n const visibleColumnXs = this.getVisibleColumnXs(\n allColumnWidths,\n visibleColumns,\n leftOffset\n );\n const visibleRowYs = this.getVisibleRowYs(\n allRowHeights,\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 allRowHeights\n );\n const rightViewport = this.getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n allColumnWidths\n );\n\n const floatingTopHeight = this.getFloatingTopHeight(state, allRowHeights);\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n allRowHeights\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(state, allColumnWidths);\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n allColumnWidths\n );\n\n const columnWidthValues = Array.from(allColumnWidths.values());\n const rowHeightValues = Array.from(allRowHeights.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 barLeft = gridX;\n const barTop = columnHeaderMaxDepth * columnHeaderHeight;\n const barWidth = width - barLeft - verticalBarWidth;\n const barHeight = height - barTop - horizontalBarHeight;\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(allColumnWidths, left, 0);\n const topRowHeight = getOrThrow(allRowHeights, 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 const floatingRows: ModelIndex[] = [\n ...Array(floatingTopRowCount).keys(),\n ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1),\n ];\n const allRowYs = new Map([\n ...visibleRowYs,\n ...this.getFloatingRowYs(\n state,\n allRowHeights,\n Math.floor(height - gridY - horizontalBarHeight)\n ),\n ]);\n\n const floatingColumns: ModelIndex[] = [\n ...Array(floatingLeftColumnCount).keys(),\n ...[...Array(floatingRightColumnCount).keys()].map(\n i => columnCount - i - 1\n ),\n ];\n\n const allColumnXs = new Map([\n ...visibleColumnXs,\n ...this.getFloatingColumnXs(\n state,\n allColumnWidths,\n Math.floor(width - gridX - verticalBarWidth)\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 (!allColumnWidths.has(i)) {\n allColumnWidths.set(i, this.getVisibleColumnWidth(i, state));\n }\n\n if (!allColumnXs.has(i)) {\n allColumnXs.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 allRowHeights,\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 allRowYs,\n allRowHeights,\n visibleRows\n );\n const leftVisible = this.getLeftVisible(\n state,\n allColumnXs,\n allColumnWidths,\n visibleColumns\n );\n const bottomVisible =\n lastTop > 0\n ? this.getBottomVisible(\n state,\n allRowYs,\n allRowHeights,\n visibleRows,\n gridY\n )\n : bottom;\n const rightVisible =\n lastLeft > 0\n ? this.getRightVisible(\n state,\n allColumnXs,\n allColumnWidths,\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 // Map of the height/width of visible rows/columns\n visibleRowHeights,\n visibleColumnWidths,\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 allRowHeights,\n allColumnWidths,\n\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n\n // Map of the X/Y coordinates of the visible rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n\n // Map of the X/Y coordinates of all rows/columns, visible and floating, from the top left of the grid\n allRowYs,\n allColumnXs,\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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"}
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","initialRowHeights","initialColumnWidths","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","allRowHeights","getFloatingRowHeights","allColumnWidths","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","barLeft","barTop","barWidth","barHeight","horizontalHandlePercent","verticalHandlePercent","handleWidth","handleHeight","leftColumnWidth","topRowHeight","leftOffsetPercent","topOffsetPercent","horizontalScrollPercent","verticalScrollPercent","scrollX","scrollY","floatingRows","allRowYs","getFloatingRowYs","floatingColumns","allColumnXs","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","getDefaultSize","calculatedHeight","calculateRowHeight","initialHeight","modelColumn","calculatedWidth","calculateColumnWidth","initialWidth","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 /** The initial row heights if any overrides from the default calculated values */\n public initialRowHeights: ReadonlyMap<ModelIndex, number>; // Readonly so it should be safe to make public\n\n /** The initial column widths if any overrides from the default calculated values */\n public initialColumnWidths: ReadonlyMap<ModelIndex, number>; // Readonly so it should be safe to make public\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 initialRowHeights = new Map(),\n initialColumnWidths = new Map(),\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 this.initialRowHeights = initialRowHeights;\n this.initialColumnWidths = initialColumnWidths;\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 const visibleRowHeights = this.getVisibleRowHeights(state);\n const 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 const allRowHeights = new Map([\n ...visibleRowHeights,\n ...this.getFloatingRowHeights(state),\n ]);\n const allColumnWidths = new Map([\n ...visibleColumnWidths,\n ...this.getFloatingColumnWidths(state),\n ]);\n\n const visibleColumnXs = this.getVisibleColumnXs(\n allColumnWidths,\n visibleColumns,\n leftOffset\n );\n const visibleRowYs = this.getVisibleRowYs(\n allRowHeights,\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 allRowHeights\n );\n const rightViewport = this.getRightViewport(\n state,\n visibleColumns,\n visibleColumnXs,\n allColumnWidths\n );\n\n const floatingTopHeight = this.getFloatingTopHeight(state, allRowHeights);\n const floatingBottomHeight = this.getFloatingBottomHeight(\n state,\n allRowHeights\n );\n const floatingLeftWidth = this.getFloatingLeftWidth(state, allColumnWidths);\n const floatingRightWidth = this.getFloatingRightWidth(\n state,\n allColumnWidths\n );\n\n const columnWidthValues = Array.from(allColumnWidths.values());\n const rowHeightValues = Array.from(allRowHeights.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 barLeft = gridX;\n const barTop = columnHeaderMaxDepth * columnHeaderHeight;\n const barWidth = width - barLeft - verticalBarWidth;\n const barHeight = height - barTop - horizontalBarHeight;\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(allColumnWidths, left, 0);\n const topRowHeight = getOrThrow(allRowHeights, 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 const floatingRows: ModelIndex[] = [\n ...Array(floatingTopRowCount).keys(),\n ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1),\n ];\n const allRowYs = new Map([\n ...visibleRowYs,\n ...this.getFloatingRowYs(\n state,\n allRowHeights,\n Math.floor(height - gridY - horizontalBarHeight)\n ),\n ]);\n\n const floatingColumns: ModelIndex[] = [\n ...Array(floatingLeftColumnCount).keys(),\n ...[...Array(floatingRightColumnCount).keys()].map(\n i => columnCount - i - 1\n ),\n ];\n\n const allColumnXs = new Map([\n ...visibleColumnXs,\n ...this.getFloatingColumnXs(\n state,\n allColumnWidths,\n Math.floor(width - gridX - verticalBarWidth)\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 (!allColumnWidths.has(i)) {\n allColumnWidths.set(i, this.getVisibleColumnWidth(i, state));\n }\n\n if (!allColumnXs.has(i)) {\n allColumnXs.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 allRowHeights,\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 allRowYs,\n allRowHeights,\n visibleRows\n );\n const leftVisible = this.getLeftVisible(\n state,\n allColumnXs,\n allColumnWidths,\n visibleColumns\n );\n const bottomVisible =\n lastTop > 0\n ? this.getBottomVisible(\n state,\n allRowYs,\n allRowHeights,\n visibleRows,\n gridY\n )\n : bottom;\n const rightVisible =\n lastLeft > 0\n ? this.getRightVisible(\n state,\n allColumnXs,\n allColumnWidths,\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 // Map of the height/width of visible rows/columns\n visibleRowHeights,\n visibleColumnWidths,\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 allRowHeights,\n allColumnWidths,\n\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n\n // Map of the X/Y coordinates of the visible rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n\n // Map of the X/Y coordinates of all rows/columns, visible and floating, from the top left of the grid\n allRowYs,\n allColumnXs,\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 getDefaultSize Method to get the default 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 getDefaultSize: () => number\n ): number {\n return userSizes.get(modelIndex) ?? getDefaultSize();\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 const calculatedHeight = this.calculateRowHeight(row, modelRow, state); // Need to call this so calculated map is always populated\n\n return this.getVisibleItemSize(modelRow, this.userRowHeights, () => {\n const initialHeight = this.initialRowHeights.get(modelRow);\n if (initialHeight !== undefined) {\n return initialHeight;\n }\n return calculatedHeight;\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 // Need to call this so calculated map is always populated\n const calculatedWidth = this.calculateColumnWidth(\n column,\n modelColumn,\n state,\n firstColumn,\n treePaddingX\n );\n\n return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () => {\n const initialWidth = this.initialColumnWidths.get(modelColumn);\n if (initialWidth !== undefined) {\n return initialWidth;\n }\n return calculatedWidth;\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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"}
@@ -15,6 +15,7 @@ declare class GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler
15
15
  visibleSizesProperty: "visibleColumnWidths";
16
16
  marginProperty: "rowHeaderWidth";
17
17
  calculatedSizesProperty: "calculatedColumnWidths";
18
+ initialSizesProperty: "initialColumnWidths";
18
19
  modelIndexesProperty: "modelColumns";
19
20
  firstIndexProperty: "firstColumn";
20
21
  treePaddingProperty: "treePaddingX";
@@ -1 +1 @@
1
- {"version":3,"file":"GridColumnSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridColumnSeparatorMouseHandler.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,yBAAyB,EAAE,EAChC,aAAa,EACd,MAAM,6BAA6B,CAAC;AAErC,cAAM,+BAAgC,SAAQ,yBAAyB;IACrE,MAAM,CAAC,kBAAkB,CACvB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,aAAa,GAAG,IAAI;IAiCvB,YAAY,SAAc;IAE1B,aAAa,SAAgB;IAE7B,aAAa,MAAgB;IAE7B,iBAAiB,qBAA+B;IAEhD,qBAAqB,oBAA8B;IAEnD,oBAAoB,wBAAkC;IAEtD,cAAc,mBAA6B;IAE3C,uBAAuB,2BAAqC;IAE5D,oBAAoB,iBAA2B;IAE/C,kBAAkB,gBAA0B;IAE5C,mBAAmB,iBAA2B;IAE9C,cAAc,oCAA8B;IAE5C,gBAAgB,sCAAgC;IAEhD,OAAO,CACL,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,IAAI;IAIP,SAAS,CACP,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,GACrB,IAAI;IAIP,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAOlE,YAAY,4DAAsD;CACnE;AAED,eAAe,+BAA+B,CAAC"}
1
+ {"version":3,"file":"GridColumnSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridColumnSeparatorMouseHandler.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,yBAAyB,EAAE,EAChC,aAAa,EACd,MAAM,6BAA6B,CAAC;AAErC,cAAM,+BAAgC,SAAQ,yBAAyB;IACrE,MAAM,CAAC,kBAAkB,CACvB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,aAAa,GAAG,IAAI;IAiCvB,YAAY,SAAc;IAE1B,aAAa,SAAgB;IAE7B,aAAa,MAAgB;IAE7B,iBAAiB,qBAA+B;IAEhD,qBAAqB,oBAA8B;IAEnD,oBAAoB,wBAAkC;IAEtD,cAAc,mBAA6B;IAE3C,uBAAuB,2BAAqC;IAE5D,oBAAoB,wBAAkC;IAEtD,oBAAoB,iBAA2B;IAE/C,kBAAkB,gBAA0B;IAE5C,mBAAmB,iBAA2B;IAE9C,cAAc,oCAA8B;IAE5C,gBAAgB,sCAAgC;IAEhD,OAAO,CACL,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,IAAI;IAIP,SAAS,CACP,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,GACrB,IAAI;IAIP,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAOlE,YAAY,4DAAsD;CACnE;AAED,eAAe,+BAA+B,CAAC"}
@@ -15,6 +15,7 @@ class GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler {
15
15
  _defineProperty(this, "visibleSizesProperty", 'visibleColumnWidths');
16
16
  _defineProperty(this, "marginProperty", 'rowHeaderWidth');
17
17
  _defineProperty(this, "calculatedSizesProperty", 'calculatedColumnWidths');
18
+ _defineProperty(this, "initialSizesProperty", 'initialColumnWidths');
18
19
  _defineProperty(this, "modelIndexesProperty", 'modelColumns');
19
20
  _defineProperty(this, "firstIndexProperty", 'firstColumn');
20
21
  _defineProperty(this, "treePaddingProperty", 'treePaddingX');
@@ -1 +1 @@
1
- {"version":3,"file":"GridColumnSeparatorMouseHandler.js","names":["GridUtils","GridSeparatorMouseHandler","GridColumnSeparatorMouseHandler","getHiddenColumns","getNextShownColumn","getColumnSeparator","gridPoint","metrics","model","theme","allowColumnResize","x","y","columnHeaderDepth","modelColumns","separatorIndex","getColumnSeparatorIndex","columnIndex","get","index","depth","setSize","metricCalculator","modelIndex","size","setColumnWidth","resetSize","resetColumnWidth","updateSeparator","grid","separator","setState","draggingColumnSeparator","isDragging"],"sources":["../../src/mouse-handlers/GridColumnSeparatorMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport Grid from '../Grid';\nimport GridMetricCalculator from '../GridMetricCalculator';\nimport type { ModelIndex, GridMetrics } from '../GridMetrics';\nimport type GridModel from '../GridModel';\nimport type { GridTheme } from '../GridTheme';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridSeparatorMouseHandler, {\n GridSeparator,\n} from './GridSeparatorMouseHandler';\n\nclass GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler {\n static getColumnSeparator(\n gridPoint: GridPoint,\n metrics: GridMetrics,\n model: GridModel,\n theme: GridTheme\n ): GridSeparator | null {\n if (!theme.allowColumnResize) {\n return null;\n }\n\n const { x, y, columnHeaderDepth } = gridPoint;\n\n const { modelColumns } = metrics;\n\n const separatorIndex = GridUtils.getColumnSeparatorIndex(\n x,\n y,\n metrics,\n theme\n );\n\n // TODO #695: Allow resizing of column groups as well. Right now just allow resizing from base columns\n if (\n separatorIndex == null ||\n columnHeaderDepth == null ||\n columnHeaderDepth > 0\n ) {\n return null;\n }\n\n const columnIndex = modelColumns.get(separatorIndex);\n if (columnIndex != null) {\n return { index: separatorIndex, depth: 0 };\n }\n\n return null;\n }\n\n hiddenCursor = 'e-resize';\n\n defaultCursor = 'col-resize';\n\n pointProperty = 'x' as const;\n\n userSizesProperty = 'userColumnWidths' as const;\n\n visibleOffsetProperty = 'visibleColumnXs' as const;\n\n visibleSizesProperty = 'visibleColumnWidths' as const;\n\n marginProperty = 'rowHeaderWidth' as const;\n\n calculatedSizesProperty = 'calculatedColumnWidths' as const;\n\n modelIndexesProperty = 'modelColumns' as const;\n\n firstIndexProperty = 'firstColumn' as const;\n\n treePaddingProperty = 'treePaddingX' as const;\n\n getHiddenItems = GridUtils.getHiddenColumns;\n\n getNextShownItem = GridUtils.getNextShownColumn;\n\n setSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex,\n size: number\n ): void {\n metricCalculator.setColumnWidth(modelIndex, size);\n }\n\n resetSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex\n ): void {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n\n updateSeparator(grid: Grid, separator: GridSeparator | null): void {\n grid.setState({\n draggingColumnSeparator: separator,\n isDragging: separator !== null,\n });\n }\n\n getSeparator = GridColumnSeparatorMouseHandler.getColumnSeparator;\n}\n\nexport default GridColumnSeparatorMouseHandler;\n"],"mappings":";;;AAAA;AAAA,OAMOA,SAAS;AAAA,OACTC,yBAAyB;AAIhC,MAAMC,+BAA+B,SAASD,yBAAyB,CAAC;EAAA;IAAA;IAAA,sCAuCvD,UAAU;IAAA,uCAET,YAAY;IAAA,uCAEZ,GAAG;IAAA,2CAEC,kBAAkB;IAAA,+CAEd,iBAAiB;IAAA,8CAElB,qBAAqB;IAAA,wCAE3B,gBAAgB;IAAA,iDAEP,wBAAwB;IAAA,8CAE3B,cAAc;IAAA,4CAEhB,aAAa;IAAA,6CAEZ,cAAc;IAAA,wCAEnBD,SAAS,CAACG,gBAAgB;IAAA,0CAExBH,SAAS,CAACI,kBAAkB;IAAA,sCAwBhCF,+BAA+B,CAACG,kBAAkB;EAAA;EAtFjE,OAAOA,kBAAkB,CACvBC,SAAoB,EACpBC,OAAoB,EACpBC,KAAgB,EAChBC,KAAgB,EACM;IACtB,IAAI,CAACA,KAAK,CAACC,iBAAiB,EAAE;MAC5B,OAAO,IAAI;IACb;IAEA,IAAM;MAAEC,CAAC;MAAEC,CAAC;MAAEC;IAAkB,CAAC,GAAGP,SAAS;IAE7C,IAAM;MAAEQ;IAAa,CAAC,GAAGP,OAAO;IAEhC,IAAMQ,cAAc,GAAGf,SAAS,CAACgB,uBAAuB,CACtDL,CAAC,EACDC,CAAC,EACDL,OAAO,EACPE,KAAK,CACN;;IAED;IACA,IACEM,cAAc,IAAI,IAAI,IACtBF,iBAAiB,IAAI,IAAI,IACzBA,iBAAiB,GAAG,CAAC,EACrB;MACA,OAAO,IAAI;IACb;IAEA,IAAMI,WAAW,GAAGH,YAAY,CAACI,GAAG,CAACH,cAAc,CAAC;IACpD,IAAIE,WAAW,IAAI,IAAI,EAAE;MACvB,OAAO;QAAEE,KAAK,EAAEJ,cAAc;QAAEK,KAAK,EAAE;MAAE,CAAC;IAC5C;IAEA,OAAO,IAAI;EACb;EA4BAC,OAAO,CACLC,gBAAsC,EACtCC,UAAsB,EACtBC,IAAY,EACN;IACNF,gBAAgB,CAACG,cAAc,CAACF,UAAU,EAAEC,IAAI,CAAC;EACnD;EAEAE,SAAS,CACPJ,gBAAsC,EACtCC,UAAsB,EAChB;IACND,gBAAgB,CAACK,gBAAgB,CAACJ,UAAU,CAAC;EAC/C;EAEAK,eAAe,CAACC,IAAU,EAAEC,SAA+B,EAAQ;IACjED,IAAI,CAACE,QAAQ,CAAC;MACZC,uBAAuB,EAAEF,SAAS;MAClCG,UAAU,EAAEH,SAAS,KAAK;IAC5B,CAAC,CAAC;EACJ;AAGF;AAEA,eAAe5B,+BAA+B"}
1
+ {"version":3,"file":"GridColumnSeparatorMouseHandler.js","names":["GridUtils","GridSeparatorMouseHandler","GridColumnSeparatorMouseHandler","getHiddenColumns","getNextShownColumn","getColumnSeparator","gridPoint","metrics","model","theme","allowColumnResize","x","y","columnHeaderDepth","modelColumns","separatorIndex","getColumnSeparatorIndex","columnIndex","get","index","depth","setSize","metricCalculator","modelIndex","size","setColumnWidth","resetSize","resetColumnWidth","updateSeparator","grid","separator","setState","draggingColumnSeparator","isDragging"],"sources":["../../src/mouse-handlers/GridColumnSeparatorMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport Grid from '../Grid';\nimport GridMetricCalculator from '../GridMetricCalculator';\nimport type { ModelIndex, GridMetrics } from '../GridMetrics';\nimport type GridModel from '../GridModel';\nimport type { GridTheme } from '../GridTheme';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridSeparatorMouseHandler, {\n GridSeparator,\n} from './GridSeparatorMouseHandler';\n\nclass GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler {\n static getColumnSeparator(\n gridPoint: GridPoint,\n metrics: GridMetrics,\n model: GridModel,\n theme: GridTheme\n ): GridSeparator | null {\n if (!theme.allowColumnResize) {\n return null;\n }\n\n const { x, y, columnHeaderDepth } = gridPoint;\n\n const { modelColumns } = metrics;\n\n const separatorIndex = GridUtils.getColumnSeparatorIndex(\n x,\n y,\n metrics,\n theme\n );\n\n // TODO #695: Allow resizing of column groups as well. Right now just allow resizing from base columns\n if (\n separatorIndex == null ||\n columnHeaderDepth == null ||\n columnHeaderDepth > 0\n ) {\n return null;\n }\n\n const columnIndex = modelColumns.get(separatorIndex);\n if (columnIndex != null) {\n return { index: separatorIndex, depth: 0 };\n }\n\n return null;\n }\n\n hiddenCursor = 'e-resize';\n\n defaultCursor = 'col-resize';\n\n pointProperty = 'x' as const;\n\n userSizesProperty = 'userColumnWidths' as const;\n\n visibleOffsetProperty = 'visibleColumnXs' as const;\n\n visibleSizesProperty = 'visibleColumnWidths' as const;\n\n marginProperty = 'rowHeaderWidth' as const;\n\n calculatedSizesProperty = 'calculatedColumnWidths' as const;\n\n initialSizesProperty = 'initialColumnWidths' as const;\n\n modelIndexesProperty = 'modelColumns' as const;\n\n firstIndexProperty = 'firstColumn' as const;\n\n treePaddingProperty = 'treePaddingX' as const;\n\n getHiddenItems = GridUtils.getHiddenColumns;\n\n getNextShownItem = GridUtils.getNextShownColumn;\n\n setSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex,\n size: number\n ): void {\n metricCalculator.setColumnWidth(modelIndex, size);\n }\n\n resetSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex\n ): void {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n\n updateSeparator(grid: Grid, separator: GridSeparator | null): void {\n grid.setState({\n draggingColumnSeparator: separator,\n isDragging: separator !== null,\n });\n }\n\n getSeparator = GridColumnSeparatorMouseHandler.getColumnSeparator;\n}\n\nexport default GridColumnSeparatorMouseHandler;\n"],"mappings":";;;AAAA;AAAA,OAMOA,SAAS;AAAA,OACTC,yBAAyB;AAIhC,MAAMC,+BAA+B,SAASD,yBAAyB,CAAC;EAAA;IAAA;IAAA,sCAuCvD,UAAU;IAAA,uCAET,YAAY;IAAA,uCAEZ,GAAG;IAAA,2CAEC,kBAAkB;IAAA,+CAEd,iBAAiB;IAAA,8CAElB,qBAAqB;IAAA,wCAE3B,gBAAgB;IAAA,iDAEP,wBAAwB;IAAA,8CAE3B,qBAAqB;IAAA,8CAErB,cAAc;IAAA,4CAEhB,aAAa;IAAA,6CAEZ,cAAc;IAAA,wCAEnBD,SAAS,CAACG,gBAAgB;IAAA,0CAExBH,SAAS,CAACI,kBAAkB;IAAA,sCAwBhCF,+BAA+B,CAACG,kBAAkB;EAAA;EAxFjE,OAAOA,kBAAkB,CACvBC,SAAoB,EACpBC,OAAoB,EACpBC,KAAgB,EAChBC,KAAgB,EACM;IACtB,IAAI,CAACA,KAAK,CAACC,iBAAiB,EAAE;MAC5B,OAAO,IAAI;IACb;IAEA,IAAM;MAAEC,CAAC;MAAEC,CAAC;MAAEC;IAAkB,CAAC,GAAGP,SAAS;IAE7C,IAAM;MAAEQ;IAAa,CAAC,GAAGP,OAAO;IAEhC,IAAMQ,cAAc,GAAGf,SAAS,CAACgB,uBAAuB,CACtDL,CAAC,EACDC,CAAC,EACDL,OAAO,EACPE,KAAK,CACN;;IAED;IACA,IACEM,cAAc,IAAI,IAAI,IACtBF,iBAAiB,IAAI,IAAI,IACzBA,iBAAiB,GAAG,CAAC,EACrB;MACA,OAAO,IAAI;IACb;IAEA,IAAMI,WAAW,GAAGH,YAAY,CAACI,GAAG,CAACH,cAAc,CAAC;IACpD,IAAIE,WAAW,IAAI,IAAI,EAAE;MACvB,OAAO;QAAEE,KAAK,EAAEJ,cAAc;QAAEK,KAAK,EAAE;MAAE,CAAC;IAC5C;IAEA,OAAO,IAAI;EACb;EA8BAC,OAAO,CACLC,gBAAsC,EACtCC,UAAsB,EACtBC,IAAY,EACN;IACNF,gBAAgB,CAACG,cAAc,CAACF,UAAU,EAAEC,IAAI,CAAC;EACnD;EAEAE,SAAS,CACPJ,gBAAsC,EACtCC,UAAsB,EAChB;IACND,gBAAgB,CAACK,gBAAgB,CAACJ,UAAU,CAAC;EAC/C;EAEAK,eAAe,CAACC,IAAU,EAAEC,SAA+B,EAAQ;IACjED,IAAI,CAACE,QAAQ,CAAC;MACZC,uBAAuB,EAAEF,SAAS;MAClCG,UAAU,EAAEH,SAAS,KAAK;IAC5B,CAAC,CAAC;EACJ;AAGF;AAEA,eAAe5B,+BAA+B"}
@@ -15,6 +15,7 @@ declare class GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {
15
15
  visibleSizesProperty: "visibleRowHeights";
16
16
  marginProperty: "columnHeaderHeight";
17
17
  calculatedSizesProperty: "calculatedRowHeights";
18
+ initialSizesProperty: "initialRowHeights";
18
19
  modelIndexesProperty: "modelRows";
19
20
  firstIndexProperty: "firstRow";
20
21
  treePaddingProperty: "treePaddingY";
@@ -1 +1 @@
1
- {"version":3,"file":"GridRowSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridRowSeparatorMouseHandler.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,yBAAyB,EAAE,EAChC,aAAa,EACd,MAAM,6BAA6B,CAAC;AAErC,cAAM,4BAA6B,SAAQ,yBAAyB;IAClE,MAAM,CAAC,eAAe,CACpB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,aAAa,GAAG,IAAI;IAYvB,YAAY,SAAc;IAE1B,aAAa,SAAgB;IAE7B,aAAa,MAAgB;IAE7B,iBAAiB,mBAA6B;IAE9C,qBAAqB,iBAA2B;IAEhD,oBAAoB,sBAAgC;IAEpD,cAAc,uBAAiC;IAE/C,uBAAuB,yBAAmC;IAE1D,oBAAoB,cAAwB;IAE5C,kBAAkB,aAAuB;IAEzC,mBAAmB,iBAA2B;IAE9C,cAAc,iCAA2B;IAEzC,gBAAgB,mCAA6B;IAE7C,OAAO,CACL,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,IAAI;IAIP,SAAS,CACP,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,GACrB,IAAI;IAIP,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAOlE,YAAY,sDAAgD;CAC7D;AAED,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"GridRowSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridRowSeparatorMouseHandler.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,yBAAyB,EAAE,EAChC,aAAa,EACd,MAAM,6BAA6B,CAAC;AAErC,cAAM,4BAA6B,SAAQ,yBAAyB;IAClE,MAAM,CAAC,eAAe,CACpB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,aAAa,GAAG,IAAI;IAYvB,YAAY,SAAc;IAE1B,aAAa,SAAgB;IAE7B,aAAa,MAAgB;IAE7B,iBAAiB,mBAA6B;IAE9C,qBAAqB,iBAA2B;IAEhD,oBAAoB,sBAAgC;IAEpD,cAAc,uBAAiC;IAE/C,uBAAuB,yBAAmC;IAE1D,oBAAoB,sBAAgC;IAEpD,oBAAoB,cAAwB;IAE5C,kBAAkB,aAAuB;IAEzC,mBAAmB,iBAA2B;IAE9C,cAAc,iCAA2B;IAEzC,gBAAgB,mCAA6B;IAE7C,OAAO,CACL,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,IAAI;IAIP,SAAS,CACP,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,GACrB,IAAI;IAIP,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAOlE,YAAY,sDAAgD;CAC7D;AAED,eAAe,4BAA4B,CAAC"}
@@ -15,6 +15,7 @@ class GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {
15
15
  _defineProperty(this, "visibleSizesProperty", 'visibleRowHeights');
16
16
  _defineProperty(this, "marginProperty", 'columnHeaderHeight');
17
17
  _defineProperty(this, "calculatedSizesProperty", 'calculatedRowHeights');
18
+ _defineProperty(this, "initialSizesProperty", 'initialRowHeights');
18
19
  _defineProperty(this, "modelIndexesProperty", 'modelRows');
19
20
  _defineProperty(this, "firstIndexProperty", 'firstRow');
20
21
  _defineProperty(this, "treePaddingProperty", 'treePaddingY');
@@ -1 +1 @@
1
- {"version":3,"file":"GridRowSeparatorMouseHandler.js","names":["GridUtils","GridSeparatorMouseHandler","GridRowSeparatorMouseHandler","getHiddenRows","getNextShownRow","getRowSeparator","gridPoint","metrics","model","theme","allowRowResize","x","y","index","getRowSeparatorIndex","depth","setSize","metricCalculator","modelIndex","size","setRowHeight","resetSize","resetRowHeight","updateSeparator","grid","separator","setState","draggingRowSeparator","isDragging"],"sources":["../../src/mouse-handlers/GridRowSeparatorMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport Grid from '../Grid';\nimport GridMetricCalculator from '../GridMetricCalculator';\nimport type { ModelIndex, GridMetrics } from '../GridMetrics';\nimport type GridModel from '../GridModel';\nimport { GridTheme } from '../GridTheme';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridSeparatorMouseHandler, {\n GridSeparator,\n} from './GridSeparatorMouseHandler';\n\nclass GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {\n static getRowSeparator(\n gridPoint: GridPoint,\n metrics: GridMetrics,\n model: GridModel,\n theme: GridTheme\n ): GridSeparator | null {\n if (!theme.allowRowResize) {\n return null;\n }\n\n const { x, y } = gridPoint;\n\n const index = GridUtils.getRowSeparatorIndex(x, y, metrics, theme);\n\n return index != null ? { index, depth: 0 } : null;\n }\n\n hiddenCursor = 's-resize';\n\n defaultCursor = 'row-resize';\n\n pointProperty = 'y' as const;\n\n userSizesProperty = 'userRowHeights' as const;\n\n visibleOffsetProperty = 'visibleRowYs' as const;\n\n visibleSizesProperty = 'visibleRowHeights' as const;\n\n marginProperty = 'columnHeaderHeight' as const;\n\n calculatedSizesProperty = 'calculatedRowHeights' as const;\n\n modelIndexesProperty = 'modelRows' as const;\n\n firstIndexProperty = 'firstRow' as const;\n\n treePaddingProperty = 'treePaddingY' as const;\n\n getHiddenItems = GridUtils.getHiddenRows;\n\n getNextShownItem = GridUtils.getNextShownRow;\n\n setSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex,\n size: number\n ): void {\n metricCalculator.setRowHeight(modelIndex, size);\n }\n\n resetSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex\n ): void {\n metricCalculator.resetRowHeight(modelIndex);\n }\n\n updateSeparator(grid: Grid, separator: GridSeparator | null): void {\n grid.setState({\n draggingRowSeparator: separator,\n isDragging: separator !== null,\n });\n }\n\n getSeparator = GridRowSeparatorMouseHandler.getRowSeparator;\n}\n\nexport default GridRowSeparatorMouseHandler;\n"],"mappings":";;;AAAA;AAAA,OAMOA,SAAS;AAAA,OACTC,yBAAyB;AAIhC,MAAMC,4BAA4B,SAASD,yBAAyB,CAAC;EAAA;IAAA;IAAA,sCAkBpD,UAAU;IAAA,uCAET,YAAY;IAAA,uCAEZ,GAAG;IAAA,2CAEC,gBAAgB;IAAA,+CAEZ,cAAc;IAAA,8CAEf,mBAAmB;IAAA,wCAEzB,oBAAoB;IAAA,iDAEX,sBAAsB;IAAA,8CAEzB,WAAW;IAAA,4CAEb,UAAU;IAAA,6CAET,cAAc;IAAA,wCAEnBD,SAAS,CAACG,aAAa;IAAA,0CAErBH,SAAS,CAACI,eAAe;IAAA,sCAwB7BF,4BAA4B,CAACG,eAAe;EAAA;EAjE3D,OAAOA,eAAe,CACpBC,SAAoB,EACpBC,OAAoB,EACpBC,KAAgB,EAChBC,KAAgB,EACM;IACtB,IAAI,CAACA,KAAK,CAACC,cAAc,EAAE;MACzB,OAAO,IAAI;IACb;IAEA,IAAM;MAAEC,CAAC;MAAEC;IAAE,CAAC,GAAGN,SAAS;IAE1B,IAAMO,KAAK,GAAGb,SAAS,CAACc,oBAAoB,CAACH,CAAC,EAAEC,CAAC,EAAEL,OAAO,EAAEE,KAAK,CAAC;IAElE,OAAOI,KAAK,IAAI,IAAI,GAAG;MAAEA,KAAK;MAAEE,KAAK,EAAE;IAAE,CAAC,GAAG,IAAI;EACnD;EA4BAC,OAAO,CACLC,gBAAsC,EACtCC,UAAsB,EACtBC,IAAY,EACN;IACNF,gBAAgB,CAACG,YAAY,CAACF,UAAU,EAAEC,IAAI,CAAC;EACjD;EAEAE,SAAS,CACPJ,gBAAsC,EACtCC,UAAsB,EAChB;IACND,gBAAgB,CAACK,cAAc,CAACJ,UAAU,CAAC;EAC7C;EAEAK,eAAe,CAACC,IAAU,EAAEC,SAA+B,EAAQ;IACjED,IAAI,CAACE,QAAQ,CAAC;MACZC,oBAAoB,EAAEF,SAAS;MAC/BG,UAAU,EAAEH,SAAS,KAAK;IAC5B,CAAC,CAAC;EACJ;AAGF;AAEA,eAAevB,4BAA4B"}
1
+ {"version":3,"file":"GridRowSeparatorMouseHandler.js","names":["GridUtils","GridSeparatorMouseHandler","GridRowSeparatorMouseHandler","getHiddenRows","getNextShownRow","getRowSeparator","gridPoint","metrics","model","theme","allowRowResize","x","y","index","getRowSeparatorIndex","depth","setSize","metricCalculator","modelIndex","size","setRowHeight","resetSize","resetRowHeight","updateSeparator","grid","separator","setState","draggingRowSeparator","isDragging"],"sources":["../../src/mouse-handlers/GridRowSeparatorMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport Grid from '../Grid';\nimport GridMetricCalculator from '../GridMetricCalculator';\nimport type { ModelIndex, GridMetrics } from '../GridMetrics';\nimport type GridModel from '../GridModel';\nimport { GridTheme } from '../GridTheme';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridSeparatorMouseHandler, {\n GridSeparator,\n} from './GridSeparatorMouseHandler';\n\nclass GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {\n static getRowSeparator(\n gridPoint: GridPoint,\n metrics: GridMetrics,\n model: GridModel,\n theme: GridTheme\n ): GridSeparator | null {\n if (!theme.allowRowResize) {\n return null;\n }\n\n const { x, y } = gridPoint;\n\n const index = GridUtils.getRowSeparatorIndex(x, y, metrics, theme);\n\n return index != null ? { index, depth: 0 } : null;\n }\n\n hiddenCursor = 's-resize';\n\n defaultCursor = 'row-resize';\n\n pointProperty = 'y' as const;\n\n userSizesProperty = 'userRowHeights' as const;\n\n visibleOffsetProperty = 'visibleRowYs' as const;\n\n visibleSizesProperty = 'visibleRowHeights' as const;\n\n marginProperty = 'columnHeaderHeight' as const;\n\n calculatedSizesProperty = 'calculatedRowHeights' as const;\n\n initialSizesProperty = 'initialRowHeights' as const;\n\n modelIndexesProperty = 'modelRows' as const;\n\n firstIndexProperty = 'firstRow' as const;\n\n treePaddingProperty = 'treePaddingY' as const;\n\n getHiddenItems = GridUtils.getHiddenRows;\n\n getNextShownItem = GridUtils.getNextShownRow;\n\n setSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex,\n size: number\n ): void {\n metricCalculator.setRowHeight(modelIndex, size);\n }\n\n resetSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex\n ): void {\n metricCalculator.resetRowHeight(modelIndex);\n }\n\n updateSeparator(grid: Grid, separator: GridSeparator | null): void {\n grid.setState({\n draggingRowSeparator: separator,\n isDragging: separator !== null,\n });\n }\n\n getSeparator = GridRowSeparatorMouseHandler.getRowSeparator;\n}\n\nexport default GridRowSeparatorMouseHandler;\n"],"mappings":";;;AAAA;AAAA,OAMOA,SAAS;AAAA,OACTC,yBAAyB;AAIhC,MAAMC,4BAA4B,SAASD,yBAAyB,CAAC;EAAA;IAAA;IAAA,sCAkBpD,UAAU;IAAA,uCAET,YAAY;IAAA,uCAEZ,GAAG;IAAA,2CAEC,gBAAgB;IAAA,+CAEZ,cAAc;IAAA,8CAEf,mBAAmB;IAAA,wCAEzB,oBAAoB;IAAA,iDAEX,sBAAsB;IAAA,8CAEzB,mBAAmB;IAAA,8CAEnB,WAAW;IAAA,4CAEb,UAAU;IAAA,6CAET,cAAc;IAAA,wCAEnBD,SAAS,CAACG,aAAa;IAAA,0CAErBH,SAAS,CAACI,eAAe;IAAA,sCAwB7BF,4BAA4B,CAACG,eAAe;EAAA;EAnE3D,OAAOA,eAAe,CACpBC,SAAoB,EACpBC,OAAoB,EACpBC,KAAgB,EAChBC,KAAgB,EACM;IACtB,IAAI,CAACA,KAAK,CAACC,cAAc,EAAE;MACzB,OAAO,IAAI;IACb;IAEA,IAAM;MAAEC,CAAC;MAAEC;IAAE,CAAC,GAAGN,SAAS;IAE1B,IAAMO,KAAK,GAAGb,SAAS,CAACc,oBAAoB,CAACH,CAAC,EAAEC,CAAC,EAAEL,OAAO,EAAEE,KAAK,CAAC;IAElE,OAAOI,KAAK,IAAI,IAAI,GAAG;MAAEA,KAAK;MAAEE,KAAK,EAAE;IAAE,CAAC,GAAG,IAAI;EACnD;EA8BAC,OAAO,CACLC,gBAAsC,EACtCC,UAAsB,EACtBC,IAAY,EACN;IACNF,gBAAgB,CAACG,YAAY,CAACF,UAAU,EAAEC,IAAI,CAAC;EACjD;EAEAE,SAAS,CACPJ,gBAAsC,EACtCC,UAAsB,EAChB;IACND,gBAAgB,CAACK,cAAc,CAACJ,UAAU,CAAC;EAC7C;EAEAK,eAAe,CAACC,IAAU,EAAEC,SAA+B,EAAQ;IACjED,IAAI,CAACE,QAAQ,CAAC;MACZC,oBAAoB,EAAEF,SAAS;MAC/BG,UAAU,EAAEH,SAAS,KAAK;IAC5B,CAAC,CAAC;EACJ;AAGF;AAEA,eAAevB,4BAA4B"}
@@ -12,6 +12,7 @@ export type VisibleOffsetProperty = 'visibleRowYs' | 'visibleColumnXs';
12
12
  export type VisibleSizeProperty = 'visibleRowHeights' | 'visibleColumnWidths';
13
13
  export type MarginProperty = 'columnHeaderHeight' | 'rowHeaderWidth';
14
14
  export type CalculatedSizeProperty = 'calculatedRowHeights' | 'calculatedColumnWidths';
15
+ export type InitialSizeProperty = 'initialRowHeights' | 'initialColumnWidths';
15
16
  export type ModelIndexesProperty = 'modelRows' | 'modelColumns';
16
17
  export type FirstIndexProperty = 'firstRow' | 'firstColumn';
17
18
  export type TreePaddingProperty = 'treePaddingX' | 'treePaddingY';
@@ -37,6 +38,7 @@ declare abstract class GridSeparatorMouseHandler extends GridMouseHandler {
37
38
  abstract visibleSizesProperty: VisibleSizeProperty;
38
39
  abstract marginProperty: MarginProperty;
39
40
  abstract calculatedSizesProperty: CalculatedSizeProperty;
41
+ abstract initialSizesProperty: InitialSizeProperty;
40
42
  abstract modelIndexesProperty: ModelIndexesProperty;
41
43
  abstract firstIndexProperty: FirstIndexProperty;
42
44
  abstract treePaddingProperty: TreePaddingProperty;
@@ -1 +1 @@
1
- {"version":3,"file":"GridSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridSeparatorMouseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,WAAW,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC;AACtC,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AACrE,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,iBAAiB,CAAC;AACvE,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,gBAAgB,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAC9B,sBAAsB,GACtB,wBAAwB,CAAC;AAC7B,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,cAAc,CAAC;AAChE,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,aAAa,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,cAAc,CAAC;AAClE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,uBAAe,yBAA0B,SAAQ,gBAAgB;IAE/D,SAAS,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC;IAGvC,SAAS,CAAC,aAAa,EAAE,YAAY,EAAE,CAAM;IAG7C,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,CAAM;IAG3C,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAa;IAE3D,SAAS,CAAC,UAAU,SAAK;IAGzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEtC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAE7C,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEtD,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;IAEnD,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAExC,QAAQ,CAAC,uBAAuB,EAAE,sBAAsB,CAAC;IAEzD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAEpD,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAEhD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAElD,QAAQ,CAAC,cAAc,CACrB,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,WAAW,GACnB,YAAY,EAAE;IAEjB,QAAQ,CAAC,gBAAgB,CACvB,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,WAAW,GACnB,YAAY,GAAG,IAAI;IAEtB,QAAQ,CAAC,OAAO,CACd,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,IAAI;IAEP,QAAQ,CAAC,SAAS,CAChB,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,GACrB,IAAI;IAEP,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI;IAE3E,QAAQ,CAAC,YAAY,CACnB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,aAAa,GAAG,IAAI;IAGvB,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IA2B5D,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAe5D,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IA4G5D,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAa1D,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;IAqBnE,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAUjE,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAclE,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;CAKtE;AAED,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"GridSeparatorMouseHandler.d.ts","sourceRoot":"","sources":["../../src/mouse-handlers/GridSeparatorMouseHandler.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ class GridSeparatorMouseHandler extends GridMouseHandler {
23
23
  _defineProperty(this, "visibleSizesProperty", void 0);
24
24
  _defineProperty(this, "marginProperty", void 0);
25
25
  _defineProperty(this, "calculatedSizesProperty", void 0);
26
+ _defineProperty(this, "initialSizesProperty", void 0);
26
27
  _defineProperty(this, "modelIndexesProperty", void 0);
27
28
  _defineProperty(this, "firstIndexProperty", void 0);
28
29
  _defineProperty(this, "treePaddingProperty", void 0);
@@ -106,18 +107,14 @@ class GridSeparatorMouseHandler extends GridMouseHandler {
106
107
  var newSize = itemSize;
107
108
  if (Math.abs(itemSize - calculatedSize) <= theme.headerResizeSnapThreshold) {
108
109
  // Snapping behaviour to "natural" width
109
- newSize = null;
110
+ newSize = calculatedSize;
110
111
  } else if (targetSize !== undefined && itemSize > targetSize && (isResizingMultiple && hiddenIndex !== 0 || hiddenIndex > 0)) {
111
112
  newSize = targetSize;
112
113
  } else if (itemSize <= theme.headerResizeHiddenSnapThreshold) {
113
114
  // Snapping to hidden item
114
115
  newSize = 0;
115
116
  }
116
- if (newSize !== calculatedSize) {
117
- newSizes.set(_modelIndex, newSize);
118
- } else {
119
- newSizes.set(_modelIndex, null);
120
- }
117
+ newSizes.set(_modelIndex, newSize);
121
118
  if (itemSize < -theme.headerResizeSnapThreshold && newSize === 0) {
122
119
  if (hiddenIndex >= 0 && isResizingMultiple) {
123
120
  var _this$targetSizes$get;
@@ -150,10 +147,12 @@ class GridSeparatorMouseHandler extends GridMouseHandler {
150
147
  }
151
148
  }
152
149
  newSizes.forEach((newSize, modelIndex) => {
153
- if (newSize !== null) {
154
- this.setSize(metricCalculator, modelIndex, newSize);
155
- } else {
150
+ var _metricCalculator$thi;
151
+ var defaultSize = (_metricCalculator$thi = metricCalculator[this.initialSizesProperty].get(modelIndex)) !== null && _metricCalculator$thi !== void 0 ? _metricCalculator$thi : calculatedSizes.get(modelIndex);
152
+ if (newSize === defaultSize) {
156
153
  this.resetSize(metricCalculator, modelIndex);
154
+ } else {
155
+ this.setSize(metricCalculator, modelIndex, newSize);
157
156
  }
158
157
  });
159
158
  this.updateCursor(metrics, this.draggingIndex);
@@ -183,7 +182,13 @@ class GridSeparatorMouseHandler extends GridMouseHandler {
183
182
  if (separator != null) {
184
183
  var modelIndexes = metrics[this.modelIndexesProperty];
185
184
  var _modelIndex2 = getOrThrow(modelIndexes, separator.index);
186
- this.resetSize(metricCalculator, _modelIndex2);
185
+ var calculatedSize = getOrThrow(metrics[this.calculatedSizesProperty], _modelIndex2);
186
+ var defaultSize = metricCalculator[this.initialSizesProperty].get(_modelIndex2);
187
+ if (calculatedSize === defaultSize) {
188
+ this.resetSize(metricCalculator, _modelIndex2);
189
+ } else {
190
+ this.setSize(metricCalculator, _modelIndex2, calculatedSize);
191
+ }
187
192
  grid.forceUpdate();
188
193
  return true;
189
194
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GridSeparatorMouseHandler.js","names":["getOrThrow","GridMouseHandler","GridSeparatorMouseHandler","Map","onDown","gridPoint","grid","metrics","model","props","theme","getTheme","Error","separator","getSeparator","separatorIndex","index","dragOffset","draggingIndex","resizingItems","hiddenItems","getHiddenItems","reverse","targetSizes","clear","addTargetSize","updateCursor","updateSeparator","onMove","onDrag","point","pointProperty","metricCalculator","visibleOffsets","visibleOffsetProperty","margin","marginProperty","calculatedSizes","calculatedSizesProperty","modelIndexes","modelIndexesProperty","firstIndex","firstIndexProperty","treePadding","treePaddingProperty","newSizes","resizeIndex","length","itemOffset","itemSize","modelIndex","targetSize","get","isResizingMultiple","hiddenIndex","indexOf","calculatedSize","newSize","Math","abs","headerResizeSnapThreshold","undefined","headerResizeHiddenSnapThreshold","set","pop","removeTargetSize","getNextShownItem","push","forEach","setSize","resetSize","onUp","onDoubleClick","forceUpdate","itemIndex","visibleSizes","visibleSizesProperty","cursor","hiddenCursor","defaultCursor","userSizes","userSizesProperty","delete"],"sources":["../../src/mouse-handlers/GridSeparatorMouseHandler.ts"],"sourcesContent":["import type Grid from '../Grid';\nimport type { GridMetricCalculator } from '../GridMetricCalculator';\nimport type GridModel from '../GridModel';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport { getOrThrow } from '../GridMetricCalculator';\nimport GridMetrics, { ModelIndex, VisibleIndex } from '../GridMetrics';\nimport GridMouseHandler from '../GridMouseHandler';\nimport type { GridTheme } from '../GridTheme';\nimport type { GridPoint } from '../GridUtils';\n\n// The different properties that can be used by implementing classes, whether for rows or columns\nexport type PointProperty = 'x' | 'y';\nexport type UserSizeProperty = 'userRowHeights' | 'userColumnWidths';\nexport type VisibleOffsetProperty = 'visibleRowYs' | 'visibleColumnXs';\nexport type VisibleSizeProperty = 'visibleRowHeights' | 'visibleColumnWidths';\nexport type MarginProperty = 'columnHeaderHeight' | 'rowHeaderWidth';\nexport type CalculatedSizeProperty =\n | 'calculatedRowHeights'\n | 'calculatedColumnWidths';\nexport type ModelIndexesProperty = 'modelRows' | 'modelColumns';\nexport type FirstIndexProperty = 'firstRow' | 'firstColumn';\nexport type TreePaddingProperty = 'treePaddingX' | 'treePaddingY';\nexport interface GridSeparator {\n index: VisibleIndex;\n depth: number;\n}\n\n/**\n * Abstract class that should be extended for column/row behaviour\n * Override the necessary functions/properties\n */\nabstract class GridSeparatorMouseHandler extends GridMouseHandler {\n // The index where dragging the column separator started\n protected draggingIndex?: VisibleIndex;\n\n // The columns in the order they're being resized\n protected resizingItems: VisibleIndex[] = [];\n\n // Columns that were hidden under the separator when starting a drag\n protected hiddenItems: VisibleIndex[] = [];\n\n // The target width of the columns being resized\n protected targetSizes: Map<ModelIndex, number> = new Map();\n\n protected dragOffset = 0;\n\n // Override/Implement these properties/functions\n abstract hiddenCursor: string;\n\n abstract defaultCursor: string;\n\n abstract pointProperty: PointProperty;\n\n abstract userSizesProperty: UserSizeProperty;\n\n abstract visibleOffsetProperty: VisibleOffsetProperty;\n\n abstract visibleSizesProperty: VisibleSizeProperty;\n\n abstract marginProperty: MarginProperty;\n\n abstract calculatedSizesProperty: CalculatedSizeProperty;\n\n abstract modelIndexesProperty: ModelIndexesProperty;\n\n abstract firstIndexProperty: FirstIndexProperty;\n\n abstract treePaddingProperty: TreePaddingProperty;\n\n abstract getHiddenItems(\n itemIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[];\n\n abstract getNextShownItem(\n itemIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null;\n\n abstract setSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex,\n size: number\n ): void;\n\n abstract resetSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex\n ): void;\n\n abstract updateSeparator(grid: Grid, separator: GridSeparator | null): void;\n\n abstract getSeparator(\n gridPoint: GridPoint,\n metrics: GridMetrics,\n model: GridModel,\n theme: GridTheme\n ): GridSeparator | null;\n // End of overrides\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics } = grid;\n const { model } = grid.props;\n const theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n\n const separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n const separatorIndex = separator.index;\n\n this.dragOffset = 0;\n this.draggingIndex = separatorIndex;\n this.resizingItems = [separatorIndex];\n this.hiddenItems = this.getHiddenItems(separatorIndex, metrics).reverse();\n this.targetSizes.clear();\n\n this.addTargetSize(metrics, separatorIndex);\n\n this.updateCursor(metrics, separatorIndex);\n\n this.updateSeparator(grid, separator);\n\n return true;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics } = grid;\n const { model } = grid.props;\n const theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n\n const separator = this.getSeparator(gridPoint, metrics, model, theme);\n\n if (separator != null) {\n this.updateCursor(metrics, separator.index);\n return true;\n }\n return false;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.draggingIndex == null) {\n return false;\n }\n\n const point = gridPoint[this.pointProperty];\n const { metricCalculator, metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const theme = grid.getTheme();\n\n const visibleOffsets = metrics[this.visibleOffsetProperty];\n const margin = metrics[this.marginProperty];\n const calculatedSizes = metrics[this.calculatedSizesProperty];\n const modelIndexes = metrics[this.modelIndexesProperty];\n const firstIndex = metrics[this.firstIndexProperty];\n const treePadding = metrics[this.treePaddingProperty];\n\n // New sizes are batched and applied after the loop to avoid updating state while calculating next step\n const newSizes: Map<ModelIndex, number | null> = new Map();\n\n // Use a loop as we may need to resize multiple items if they drag quickly\n let resizeIndex: number | null = this.resizingItems[\n this.resizingItems.length - 1\n ];\n while (resizeIndex != null) {\n const itemOffset = getOrThrow(visibleOffsets, resizeIndex);\n const itemSize = point - margin - itemOffset - this.dragOffset;\n const modelIndex = getOrThrow(modelIndexes, resizeIndex);\n const targetSize = this.targetSizes.get(modelIndex);\n const isResizingMultiple = this.resizingItems.length > 1;\n const hiddenIndex = this.hiddenItems.indexOf(resizeIndex);\n let calculatedSize = getOrThrow(calculatedSizes, modelIndex);\n if (resizeIndex === firstIndex) {\n calculatedSize += treePadding;\n }\n let newSize: number | null = itemSize;\n if (\n Math.abs(itemSize - calculatedSize) <= theme.headerResizeSnapThreshold\n ) {\n // Snapping behaviour to \"natural\" width\n newSize = null;\n } else if (\n targetSize !== undefined &&\n itemSize > targetSize &&\n ((isResizingMultiple && hiddenIndex !== 0) || hiddenIndex > 0)\n ) {\n newSize = targetSize;\n } else if (itemSize <= theme.headerResizeHiddenSnapThreshold) {\n // Snapping to hidden item\n newSize = 0;\n }\n\n if (newSize !== calculatedSize) {\n newSizes.set(modelIndex, newSize);\n } else {\n newSizes.set(modelIndex, null);\n }\n\n if (itemSize < -theme.headerResizeSnapThreshold && newSize === 0) {\n if (hiddenIndex >= 0 && isResizingMultiple) {\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n this.dragOffset -=\n this.targetSizes.get(getOrThrow(modelIndexes, resizeIndex)) ?? 0;\n } else {\n resizeIndex = this.getNextShownItem(resizeIndex, metrics);\n if (resizeIndex !== null) {\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n }\n }\n } else if (\n targetSize !== undefined &&\n itemSize > targetSize + theme.headerResizeSnapThreshold &&\n newSize === targetSize\n ) {\n if (hiddenIndex > 0) {\n this.dragOffset += newSize;\n resizeIndex = this.hiddenItems[hiddenIndex - 1];\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n } else if (isResizingMultiple) {\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n } else {\n resizeIndex = null;\n }\n } else {\n resizeIndex = null;\n }\n }\n\n newSizes.forEach((newSize, modelIndex) => {\n if (newSize !== null) {\n this.setSize(metricCalculator, modelIndex, newSize);\n } else {\n this.resetSize(metricCalculator, modelIndex);\n }\n });\n\n this.updateCursor(metrics, this.draggingIndex);\n\n return true;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.draggingIndex != null) {\n this.draggingIndex = undefined;\n this.resizingItems = [];\n this.hiddenItems = [];\n this.targetSizes.clear();\n\n this.updateSeparator(grid, null);\n }\n\n return false;\n }\n\n onDoubleClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics, metricCalculator } = grid;\n const { model } = grid.props;\n const theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n\n const separator = this.getSeparator(gridPoint, metrics, model, theme);\n\n if (separator != null) {\n const modelIndexes = metrics[this.modelIndexesProperty];\n const modelIndex = getOrThrow(modelIndexes, separator.index);\n\n this.resetSize(metricCalculator, modelIndex);\n\n grid.forceUpdate();\n\n return true;\n }\n return false;\n }\n\n updateCursor(metrics: GridMetrics, itemIndex: VisibleIndex): void {\n const visibleSizes = metrics[this.visibleSizesProperty];\n const itemSize = getOrThrow(visibleSizes, itemIndex);\n if (itemSize === 0) {\n this.cursor = this.hiddenCursor;\n } else {\n this.cursor = this.defaultCursor;\n }\n }\n\n addTargetSize(metrics: GridMetrics, itemIndex: VisibleIndex): void {\n const modelIndexes = metrics[this.modelIndexesProperty];\n const userSizes = metrics[this.userSizesProperty];\n const calculatedSizes = metrics[this.calculatedSizesProperty];\n const treePadding = itemIndex === 0 ? metrics[this.treePaddingProperty] : 0;\n\n const modelIndex = getOrThrow(modelIndexes, itemIndex);\n let targetSize = userSizes.get(modelIndex);\n if (targetSize == null || targetSize === 0) {\n targetSize = getOrThrow(calculatedSizes, modelIndex) + treePadding;\n }\n this.targetSizes.set(modelIndex, targetSize);\n }\n\n removeTargetSize(metrics: GridMetrics, itemIndex: VisibleIndex): void {\n const modelIndexes = metrics[this.modelIndexesProperty];\n const modelIndex = getOrThrow(modelIndexes, itemIndex);\n this.targetSizes.delete(modelIndex);\n }\n}\n\nexport default GridSeparatorMouseHandler;\n"],"mappings":"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"}
1
+ {"version":3,"file":"GridSeparatorMouseHandler.js","names":["getOrThrow","GridMouseHandler","GridSeparatorMouseHandler","Map","onDown","gridPoint","grid","metrics","model","props","theme","getTheme","Error","separator","getSeparator","separatorIndex","index","dragOffset","draggingIndex","resizingItems","hiddenItems","getHiddenItems","reverse","targetSizes","clear","addTargetSize","updateCursor","updateSeparator","onMove","onDrag","point","pointProperty","metricCalculator","visibleOffsets","visibleOffsetProperty","margin","marginProperty","calculatedSizes","calculatedSizesProperty","modelIndexes","modelIndexesProperty","firstIndex","firstIndexProperty","treePadding","treePaddingProperty","newSizes","resizeIndex","length","itemOffset","itemSize","modelIndex","targetSize","get","isResizingMultiple","hiddenIndex","indexOf","calculatedSize","newSize","Math","abs","headerResizeSnapThreshold","undefined","headerResizeHiddenSnapThreshold","set","pop","removeTargetSize","getNextShownItem","push","forEach","defaultSize","initialSizesProperty","resetSize","setSize","onUp","onDoubleClick","forceUpdate","itemIndex","visibleSizes","visibleSizesProperty","cursor","hiddenCursor","defaultCursor","userSizes","userSizesProperty","delete"],"sources":["../../src/mouse-handlers/GridSeparatorMouseHandler.ts"],"sourcesContent":["import type Grid from '../Grid';\nimport type { GridMetricCalculator } from '../GridMetricCalculator';\nimport type GridModel from '../GridModel';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport { getOrThrow } from '../GridMetricCalculator';\nimport GridMetrics, { ModelIndex, VisibleIndex } from '../GridMetrics';\nimport GridMouseHandler from '../GridMouseHandler';\nimport type { GridTheme } from '../GridTheme';\nimport type { GridPoint } from '../GridUtils';\n\n// The different properties that can be used by implementing classes, whether for rows or columns\nexport type PointProperty = 'x' | 'y';\nexport type UserSizeProperty = 'userRowHeights' | 'userColumnWidths';\nexport type VisibleOffsetProperty = 'visibleRowYs' | 'visibleColumnXs';\nexport type VisibleSizeProperty = 'visibleRowHeights' | 'visibleColumnWidths';\nexport type MarginProperty = 'columnHeaderHeight' | 'rowHeaderWidth';\nexport type CalculatedSizeProperty =\n | 'calculatedRowHeights'\n | 'calculatedColumnWidths';\nexport type InitialSizeProperty = 'initialRowHeights' | 'initialColumnWidths';\nexport type ModelIndexesProperty = 'modelRows' | 'modelColumns';\nexport type FirstIndexProperty = 'firstRow' | 'firstColumn';\nexport type TreePaddingProperty = 'treePaddingX' | 'treePaddingY';\nexport interface GridSeparator {\n index: VisibleIndex;\n depth: number;\n}\n\n/**\n * Abstract class that should be extended for column/row behaviour\n * Override the necessary functions/properties\n */\nabstract class GridSeparatorMouseHandler extends GridMouseHandler {\n // The index where dragging the column separator started\n protected draggingIndex?: VisibleIndex;\n\n // The columns in the order they're being resized\n protected resizingItems: VisibleIndex[] = [];\n\n // Columns that were hidden under the separator when starting a drag\n protected hiddenItems: VisibleIndex[] = [];\n\n // The target width of the columns being resized\n protected targetSizes: Map<ModelIndex, number> = new Map();\n\n protected dragOffset = 0;\n\n // Override/Implement these properties/functions\n abstract hiddenCursor: string;\n\n abstract defaultCursor: string;\n\n abstract pointProperty: PointProperty;\n\n abstract userSizesProperty: UserSizeProperty;\n\n abstract visibleOffsetProperty: VisibleOffsetProperty;\n\n abstract visibleSizesProperty: VisibleSizeProperty;\n\n abstract marginProperty: MarginProperty;\n\n abstract calculatedSizesProperty: CalculatedSizeProperty;\n\n abstract initialSizesProperty: InitialSizeProperty;\n\n abstract modelIndexesProperty: ModelIndexesProperty;\n\n abstract firstIndexProperty: FirstIndexProperty;\n\n abstract treePaddingProperty: TreePaddingProperty;\n\n abstract getHiddenItems(\n itemIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex[];\n\n abstract getNextShownItem(\n itemIndex: VisibleIndex,\n metrics: GridMetrics\n ): VisibleIndex | null;\n\n abstract setSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex,\n size: number\n ): void;\n\n abstract resetSize(\n metricCalculator: GridMetricCalculator,\n modelIndex: ModelIndex\n ): void;\n\n abstract updateSeparator(grid: Grid, separator: GridSeparator | null): void;\n\n abstract getSeparator(\n gridPoint: GridPoint,\n metrics: GridMetrics,\n model: GridModel,\n theme: GridTheme\n ): GridSeparator | null;\n // End of overrides\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics } = grid;\n const { model } = grid.props;\n const theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n\n const separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n const separatorIndex = separator.index;\n\n this.dragOffset = 0;\n this.draggingIndex = separatorIndex;\n this.resizingItems = [separatorIndex];\n this.hiddenItems = this.getHiddenItems(separatorIndex, metrics).reverse();\n this.targetSizes.clear();\n\n this.addTargetSize(metrics, separatorIndex);\n\n this.updateCursor(metrics, separatorIndex);\n\n this.updateSeparator(grid, separator);\n\n return true;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics } = grid;\n const { model } = grid.props;\n const theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n\n const separator = this.getSeparator(gridPoint, metrics, model, theme);\n\n if (separator != null) {\n this.updateCursor(metrics, separator.index);\n return true;\n }\n return false;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.draggingIndex == null) {\n return false;\n }\n\n const point = gridPoint[this.pointProperty];\n const { metricCalculator, metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const theme = grid.getTheme();\n\n const visibleOffsets = metrics[this.visibleOffsetProperty];\n const margin = metrics[this.marginProperty];\n const calculatedSizes = metrics[this.calculatedSizesProperty];\n const modelIndexes = metrics[this.modelIndexesProperty];\n const firstIndex = metrics[this.firstIndexProperty];\n const treePadding = metrics[this.treePaddingProperty];\n\n // New sizes are batched and applied after the loop to avoid updating state while calculating next step\n const newSizes: Map<ModelIndex, number> = new Map();\n\n // Use a loop as we may need to resize multiple items if they drag quickly\n let resizeIndex: number | null = this.resizingItems[\n this.resizingItems.length - 1\n ];\n while (resizeIndex != null) {\n const itemOffset = getOrThrow(visibleOffsets, resizeIndex);\n const itemSize = point - margin - itemOffset - this.dragOffset;\n const modelIndex = getOrThrow(modelIndexes, resizeIndex);\n const targetSize = this.targetSizes.get(modelIndex);\n const isResizingMultiple = this.resizingItems.length > 1;\n const hiddenIndex = this.hiddenItems.indexOf(resizeIndex);\n let calculatedSize = getOrThrow(calculatedSizes, modelIndex);\n if (resizeIndex === firstIndex) {\n calculatedSize += treePadding;\n }\n let newSize = itemSize;\n if (\n Math.abs(itemSize - calculatedSize) <= theme.headerResizeSnapThreshold\n ) {\n // Snapping behaviour to \"natural\" width\n newSize = calculatedSize;\n } else if (\n targetSize !== undefined &&\n itemSize > targetSize &&\n ((isResizingMultiple && hiddenIndex !== 0) || hiddenIndex > 0)\n ) {\n newSize = targetSize;\n } else if (itemSize <= theme.headerResizeHiddenSnapThreshold) {\n // Snapping to hidden item\n newSize = 0;\n }\n\n newSizes.set(modelIndex, newSize);\n\n if (itemSize < -theme.headerResizeSnapThreshold && newSize === 0) {\n if (hiddenIndex >= 0 && isResizingMultiple) {\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n this.dragOffset -=\n this.targetSizes.get(getOrThrow(modelIndexes, resizeIndex)) ?? 0;\n } else {\n resizeIndex = this.getNextShownItem(resizeIndex, metrics);\n if (resizeIndex !== null) {\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n }\n }\n } else if (\n targetSize !== undefined &&\n itemSize > targetSize + theme.headerResizeSnapThreshold &&\n newSize === targetSize\n ) {\n if (hiddenIndex > 0) {\n this.dragOffset += newSize;\n resizeIndex = this.hiddenItems[hiddenIndex - 1];\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n } else if (isResizingMultiple) {\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n } else {\n resizeIndex = null;\n }\n } else {\n resizeIndex = null;\n }\n }\n\n newSizes.forEach((newSize, modelIndex) => {\n const defaultSize =\n metricCalculator[this.initialSizesProperty].get(modelIndex) ??\n calculatedSizes.get(modelIndex);\n\n if (newSize === defaultSize) {\n this.resetSize(metricCalculator, modelIndex);\n } else {\n this.setSize(metricCalculator, modelIndex, newSize);\n }\n });\n\n this.updateCursor(metrics, this.draggingIndex);\n\n return true;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.draggingIndex != null) {\n this.draggingIndex = undefined;\n this.resizingItems = [];\n this.hiddenItems = [];\n this.targetSizes.clear();\n\n this.updateSeparator(grid, null);\n }\n\n return false;\n }\n\n onDoubleClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics, metricCalculator } = grid;\n const { model } = grid.props;\n const theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n\n const separator = this.getSeparator(gridPoint, metrics, model, theme);\n\n if (separator != null) {\n const modelIndexes = metrics[this.modelIndexesProperty];\n const modelIndex = getOrThrow(modelIndexes, separator.index);\n\n const calculatedSize = getOrThrow(\n metrics[this.calculatedSizesProperty],\n modelIndex\n );\n const defaultSize = metricCalculator[this.initialSizesProperty].get(\n modelIndex\n );\n\n if (calculatedSize === defaultSize) {\n this.resetSize(metricCalculator, modelIndex);\n } else {\n this.setSize(metricCalculator, modelIndex, calculatedSize);\n }\n\n grid.forceUpdate();\n\n return true;\n }\n return false;\n }\n\n updateCursor(metrics: GridMetrics, itemIndex: VisibleIndex): void {\n const visibleSizes = metrics[this.visibleSizesProperty];\n const itemSize = getOrThrow(visibleSizes, itemIndex);\n if (itemSize === 0) {\n this.cursor = this.hiddenCursor;\n } else {\n this.cursor = this.defaultCursor;\n }\n }\n\n addTargetSize(metrics: GridMetrics, itemIndex: VisibleIndex): void {\n const modelIndexes = metrics[this.modelIndexesProperty];\n const userSizes = metrics[this.userSizesProperty];\n const calculatedSizes = metrics[this.calculatedSizesProperty];\n const treePadding = itemIndex === 0 ? metrics[this.treePaddingProperty] : 0;\n\n const modelIndex = getOrThrow(modelIndexes, itemIndex);\n let targetSize = userSizes.get(modelIndex);\n if (targetSize == null || targetSize === 0) {\n targetSize = getOrThrow(calculatedSizes, modelIndex) + treePadding;\n }\n this.targetSizes.set(modelIndex, targetSize);\n }\n\n removeTargetSize(metrics: GridMetrics, itemIndex: VisibleIndex): void {\n const modelIndexes = metrics[this.modelIndexesProperty];\n const modelIndex = getOrThrow(modelIndexes, itemIndex);\n this.targetSizes.delete(modelIndex);\n }\n}\n\nexport default GridSeparatorMouseHandler;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/grid",
3
- "version": "0.27.1-beta.2+073f8f5",
3
+ "version": "0.27.1-beta.7+fb98630",
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.27.1-beta.2+073f8f5"
28
+ "@deephaven/tsconfig": "^0.27.1-beta.7+fb98630"
29
29
  },
30
30
  "files": [
31
31
  "dist"
32
32
  ],
33
33
  "dependencies": {
34
- "@deephaven/utils": "^0.27.1-beta.2+073f8f5",
34
+ "@deephaven/utils": "^0.27.1-beta.7+fb98630",
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": "073f8f566aa57132edacc5867b8e02dd7ac4be7d"
46
+ "gitHead": "fb9863088528e0182563629ad4ed33457dde09f1"
47
47
  }