@deephaven/grid 0.8.2-beta.1 → 0.8.2-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Grid.js +26 -0
- package/dist/Grid.js.map +1 -1
- package/dist/GridMetricCalculator.js +37 -0
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridMouseHandler.js +2 -0
- package/dist/GridMouseHandler.js.map +1 -1
- package/dist/GridRange.js +8 -0
- package/dist/GridRange.js.map +1 -1
- package/dist/KeyHandler.d.ts +1 -1
- package/dist/KeyHandler.d.ts.map +1 -1
- package/dist/KeyHandler.js +5 -0
- package/dist/KeyHandler.js.map +1 -1
- package/dist/MockGridModel.js +19 -0
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.js +6 -0
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +4 -0
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +2 -0
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +2 -0
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +8 -0
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +24 -0
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +2 -0
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
- package/package.json +3 -3
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/GridRange.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/GridRange.ts"],"names":["SELECTION_DIRECTION","GridRange","normalize","startColumn","startRow","endColumn","endRow","left","top","right","bottom","makeNormalized","makeCell","column","row","makeColumn","makeRow","minOrNull","index1","index2","Math","min","maxOrNull","max","consolidate","ranges","result","slice","wasModified","i","length","range","j","other","contains","splice","touches","isAxisRangeTouching","start1","end1","start2","end2","rangeArraysEqual","ranges1","ranges2","equals","intersection","otherRange","subtractFromRange","subtractRange","subtract","push","subtractFromRanges","subtractRangesFromRanges","subtractRanges","isBounded","boundedRange","columnCount","rowCount","boundedRanges","map","r","offset","columnOffset","rowOffset","nextCell","direction","DOWN","rangeIndex","findIndex","containsCell","RIGHT","nextRangeIndex","nextRange","startCell","LEFT","UP","Error","cellCount","reduce","NaN","forEachCell","callback","forEach","constructor","c"],"mappings":"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","sourcesContent":["export type GridRangeIndex = number | null;\ntype LeftIndex = GridRangeIndex;\ntype RightIndex = GridRangeIndex;\ntype TopIndex = GridRangeIndex;\ntype BottomIndex = GridRangeIndex;\n\nexport type GridCell = { column: number; row: number };\n\nexport interface BoundedGridRange extends GridRange {\n startColumn: number;\n startRow: number;\n endColumn: number;\n endRow: number;\n}\n\n// Also exported via GridRange.SELECTION_DIRECTION\nexport enum SELECTION_DIRECTION {\n DOWN = 'DOWN',\n UP = 'UP',\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n}\n\nexport class GridRange {\n startColumn: GridRangeIndex;\n\n startRow: GridRangeIndex;\n\n endColumn: GridRangeIndex;\n\n endRow: GridRangeIndex;\n\n static SELECTION_DIRECTION = SELECTION_DIRECTION;\n\n /**\n * Returns a normalized array of indexes ensuring left <= right and top <= bottom\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Array containing normalized indexes [left, top, right, bottom]\n */\n static normalize(\n startColumn: GridRangeIndex,\n startRow: GridRangeIndex,\n endColumn: GridRangeIndex,\n endRow: GridRangeIndex\n ): [LeftIndex, TopIndex, RightIndex, BottomIndex] {\n let left = startColumn;\n let top = startRow;\n let right = endColumn;\n let bottom = endRow;\n\n if (left != null && right != null && right < left) {\n left = right;\n right = startColumn;\n }\n\n if (top != null && bottom != null && bottom < top) {\n top = bottom;\n bottom = startRow;\n }\n\n return [left, top, right, bottom];\n }\n\n /**\n * Makes a GridRange ensuring startColumn <= endColumn, startRow <= endRow\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Normalized GridRange\n */\n static makeNormalized(\n startColumn: GridRangeIndex,\n startRow: GridRangeIndex,\n endColumn: GridRangeIndex,\n endRow: GridRangeIndex\n ): GridRange {\n return new GridRange(\n ...GridRange.normalize(startColumn, startRow, endColumn, endRow)\n );\n }\n\n /**\n * Creates a GridRange representing a single cell\n * @param column Column index\n * @param row Row index\n * @returns GridRange representing the cell\n */\n static makeCell(column: GridRangeIndex, row: GridRangeIndex): GridRange {\n return new GridRange(column, row, column, row);\n }\n\n /**\n * Creates a GridRange representing an infinite length column\n * @param column Column index\n * @returns GridRange representing the column\n */\n static makeColumn(column: GridRangeIndex): GridRange {\n return new GridRange(column, null, column, null);\n }\n\n /**\n * Creates a GridRange representing an infinite length row\n * @param row Row index\n * @returns GridRange representing the row\n */\n static makeRow(row: GridRangeIndex): GridRange {\n return new GridRange(null, row, null, row);\n }\n\n /**\n * Returns the minimum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Minimum index or null if either index is null\n */\n static minOrNull(\n index1: GridRangeIndex,\n index2: GridRangeIndex\n ): number | null {\n if (index1 == null || index2 == null) {\n return null;\n }\n\n return Math.min(index1, index2);\n }\n\n /**\n * Returns the maximum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Maximum index or null if either index is null\n */\n static maxOrNull(\n index1: GridRangeIndex,\n index2: GridRangeIndex\n ): number | null {\n if (index1 == null || index2 == null) {\n return null;\n }\n\n return Math.max(index1, index2);\n }\n\n /**\n * Consolidate the passed in ranges to the minimum set, merging overlapping ranges.\n * @param ranges The ranges to consolidate\n * @returns Consolidated ranges\n */\n static consolidate(ranges: GridRange[]): GridRange[] {\n const result = ranges.slice();\n\n let wasModified = true;\n while (wasModified) {\n wasModified = false;\n for (let i = 0; i < result.length && !wasModified; i += 1) {\n const range = result[i];\n for (let j = result.length - 1; j > i; j -= 1) {\n const other = result[j];\n\n // If one contains the other, we can just keep the bigger one\n if (range.contains(other)) {\n result.splice(j, 1);\n } else if (other.contains(range)) {\n wasModified = true;\n result[i] = other;\n result.splice(j, 1);\n break;\n } else if (\n range.startRow === other.startRow &&\n range.endRow === other.endRow\n ) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n const { startRow, endRow } = range;\n const startColumn = GridRange.minOrNull(\n range.startColumn,\n other.startColumn\n );\n const endColumn = GridRange.maxOrNull(\n range.endColumn,\n other.endColumn\n );\n\n wasModified = true;\n result[i] = new GridRange(\n startColumn,\n startRow,\n endColumn,\n endRow\n );\n result.splice(j, 1);\n break;\n }\n } else if (\n range.startColumn === other.startColumn &&\n range.endColumn === other.endColumn\n ) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n const { startColumn, endColumn } = range;\n const startRow = GridRange.minOrNull(\n range.startRow,\n other.startRow\n );\n const endRow = GridRange.maxOrNull(range.endRow, other.endRow);\n\n wasModified = true;\n result[i] = new GridRange(\n startColumn,\n startRow,\n endColumn,\n endRow\n );\n result.splice(j, 1);\n break;\n }\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Checks if the 1-D ranges between 2 index pairs overlap or are continuous.\n * For example ranges [0, 1] and [2, 3] are continuous and will return true.\n * [0, 1] and [1, 3] overlap and return true.\n * [0, 1] and [3, 4] do not overlap and have a gap so this will return false.\n * @param start1 Start of 1st range\n * @param end1 End of 1st range\n * @param start2 Start of 2nd range\n * @param end2 End of 2nd range\n * @returns True if the ranges overlap or touch, else false\n */\n static isAxisRangeTouching(\n start1: GridRangeIndex,\n end1: GridRangeIndex,\n start2: GridRangeIndex,\n end2: GridRangeIndex\n ): boolean {\n if (start1 == null) {\n if (end1 == null) {\n return true;\n }\n\n if (start2 == null) {\n return true;\n }\n\n return start2 <= end1 + 1;\n }\n\n if (end1 == null) {\n if (end2 == null) {\n return true;\n }\n\n return end2 >= start1 - 1;\n }\n\n if (start2 == null) {\n if (end2 == null) {\n return true;\n }\n\n return start1 <= end2 + 1;\n }\n\n if (end2 == null) {\n return end1 >= start2 - 1;\n }\n\n if (start2 >= start1 - 1) {\n return start2 <= end1 + 1;\n }\n\n return end2 >= start1 - 1;\n }\n\n /**\n * Checks if 2 arrays of ranges are the same ranges\n * @param ranges1 First array of ranges\n * @param ranges2 Second array of ranges\n * @returns True if the arrays contain the same ranges in the same order\n */\n static rangeArraysEqual(ranges1: GridRange[], ranges2: GridRange[]): boolean {\n if (ranges1 === ranges2) {\n return true;\n }\n\n if (\n ranges1 == null ||\n ranges2 == null ||\n ranges1.length !== ranges2.length\n ) {\n return false;\n }\n\n for (let i = 0; i < ranges1.length; i += 1) {\n if (!ranges1[i].equals(ranges2[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get the intersection (overlapping area) of two ranges\n * @param range One range to check for the intersection\n * @param otherRange The other range to check for the intersection\n * @returns Intersection of the two ranges. If they do not intersect, returns `null`.\n */\n static intersection(\n range: GridRange,\n otherRange: GridRange\n ): GridRange | null {\n if (range.equals(otherRange)) {\n return range;\n }\n\n let { startColumn, startRow, endColumn, endRow } = range;\n startColumn =\n startColumn != null && otherRange.startColumn != null\n ? Math.max(startColumn, otherRange.startColumn)\n : startColumn ?? otherRange.startColumn;\n endColumn =\n endColumn != null && otherRange.endColumn != null\n ? Math.min(endColumn, otherRange.endColumn)\n : endColumn ?? otherRange.endColumn;\n startRow =\n startRow != null && otherRange.startRow != null\n ? Math.max(startRow, otherRange.startRow)\n : startRow ?? otherRange.startRow;\n endRow =\n endRow != null && otherRange.endRow != null\n ? Math.min(endRow, otherRange.endRow)\n : endRow ?? otherRange.endRow;\n\n if (\n (startColumn != null && startColumn > (endColumn ?? -1)) ||\n (startRow != null && startRow > (endRow ?? -1))\n ) {\n return null;\n }\n\n return new GridRange(startColumn, startRow, endColumn, endRow);\n }\n\n /**\n * Subtracts 1 range from another\n * @param range The range to be subtracted from\n * @param subtractRange The range to subtract from within this range\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRange(\n range: GridRange,\n subtractRange: GridRange\n ): GridRange[] {\n const result = [];\n\n // Make it a little easier by finding only the part the subtraction range intersects\n const subtract = GridRange.intersection(range, subtractRange);\n if (subtract == null) {\n return [range];\n }\n\n // Go through each of the quadrants for deselection, there can be up to 4\n // Top quadrant (above the subtracted area)\n if (\n subtract.startRow != null &&\n (range.startRow == null || range.startRow < subtract.startRow)\n ) {\n result.push(\n new GridRange(\n range.startColumn,\n range.startRow,\n range.endColumn,\n subtract.startRow - 1\n )\n );\n }\n\n // middle left\n if (\n subtract.startColumn != null &&\n (range.startColumn == null || range.startColumn < subtract.startColumn)\n ) {\n result.push(\n new GridRange(\n range.startColumn,\n subtract.startRow,\n subtract.startColumn - 1,\n subtract.endRow\n )\n );\n }\n\n // middle right\n if (\n subtract.endColumn != null &&\n (range.endColumn == null || range.endColumn > subtract.endColumn)\n ) {\n result.push(\n new GridRange(\n subtract.endColumn + 1,\n subtract.startRow,\n range.endColumn,\n subtract.endRow\n )\n );\n }\n\n // Bottom quadrant\n if (\n subtract.endRow != null &&\n (range.endRow == null || range.endRow > subtract.endRow)\n ) {\n result.push(\n new GridRange(\n range.startColumn,\n subtract.endRow + 1,\n range.endColumn,\n range.endRow\n )\n );\n }\n\n return result;\n }\n\n /**\n * Subtract a range from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRange The range to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRanges(\n ranges: GridRange[],\n subtractRange: GridRange\n ): GridRange[] {\n const result: GridRange[] = [];\n for (let i = 0; i < ranges.length; i += 1) {\n result.push(...GridRange.subtractFromRange(ranges[i], subtractRange));\n }\n\n return result;\n }\n\n /**\n * Subtract multiple ranges from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRanges The ranges to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractRangesFromRanges(\n ranges: GridRange[],\n subtractRanges: GridRange[]\n ): GridRange[] {\n if (!subtractRanges || subtractRanges.length === 0) {\n return ranges;\n }\n\n let result = [...ranges];\n for (let i = 0; i < subtractRanges.length; i += 1) {\n result = GridRange.subtractFromRanges(result, subtractRanges[i]);\n }\n\n return result;\n }\n\n /**\n * Test if a given range is bounded (all values are non-null)\n * @param range The range to test\n * @returns True if this range is bounded, false otherwise\n */\n static isBounded(range: GridRange): range is BoundedGridRange {\n return (\n range.startRow != null &&\n range.startColumn != null &&\n range.endRow != null &&\n range.endColumn != null\n );\n }\n\n /**\n * Converts any GridRange passed in that is a full row or column selection to be bound\n * to the `columnCount` and `rowCount` passed in\n *\n * @param range The range to get the bounded range of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRange(\n range: GridRange,\n columnCount: number,\n rowCount: number\n ): GridRange {\n if (GridRange.isBounded(range)) {\n return range;\n }\n\n return new GridRange(\n range.startColumn ?? 0,\n range.startRow ?? 0,\n range.endColumn ?? columnCount - 1,\n range.endRow ?? rowCount - 1\n );\n }\n\n /**\n * Converts the GridRanges passed in to be bound to the `columnCount` and `rowCount` passed in\n *\n * @param ranges The ranges to get the bounded ranges of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRanges(\n ranges: GridRange[],\n columnCount: number,\n rowCount: number\n ): GridRange[] {\n return ranges.map(r => GridRange.boundedRange(r, columnCount, rowCount));\n }\n\n /**\n * Offsets a GridRange by the specified amount in the x and y directions\n *\n * @param range The range to offset\n * @param columnOffset The number of columns to offset\n * @param rowOffset The number of rows to offset\n * @returns The new grid range offset from the original\n */\n static offset(\n range: GridRange,\n columnOffset: number,\n rowOffset: number\n ): GridRange {\n return new GridRange(\n range.startColumn != null ? range.startColumn + columnOffset : null,\n range.startRow != null ? range.startRow + rowOffset : null,\n range.endColumn != null ? range.endColumn + columnOffset : null,\n range.endRow != null ? range.endRow + rowOffset : null\n );\n }\n\n /**\n * Get the next cell given the selected ranges and the current cell\n * @param ranges The selected bounded ranges within the grid\n * @param column The cursor column, or null if none focused\n * @param row The cursor row, or null if none focused\n * @param direction The direction in which to select next\n * @returns The next cell to focus, or null if there should be no more focus\n */\n static nextCell(\n ranges: GridRange[],\n column: GridRangeIndex = null,\n row: GridRangeIndex = null,\n direction = GridRange.SELECTION_DIRECTION.DOWN\n ): GridCell | null {\n if (ranges.length === 0) {\n return null;\n }\n\n let rangeIndex = -1;\n if (column != null && row != null) {\n rangeIndex = ranges.findIndex(r => r.containsCell(column, row));\n\n if (rangeIndex >= 0) {\n const range = ranges[rangeIndex];\n const nextCell = range.nextCell(column, row, direction);\n if (nextCell != null) {\n return nextCell;\n }\n }\n }\n\n // Otherwise go to the start of the next range (could be same range if only one range)\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT: {\n const nextRangeIndex =\n rangeIndex < ranges.length - 1 ? rangeIndex + 1 : 0;\n const nextRange = ranges[nextRangeIndex];\n return nextRange.startCell(direction);\n }\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP: {\n const nextRangeIndex =\n rangeIndex > 0 ? rangeIndex - 1 : ranges.length - 1;\n const nextRange = ranges[nextRangeIndex];\n return nextRange.startCell(direction);\n }\n default:\n throw new Error(`Invalid direction: ${direction}`);\n }\n }\n\n /**\n * Count the number of cells in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of cells in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static cellCount(ranges: GridRange[]): number {\n return ranges.reduce(\n (cellCount, range) =>\n cellCount +\n ((range.endRow ?? NaN) - (range.startRow ?? NaN) + 1) *\n ((range.endColumn ?? NaN) - (range.startColumn ?? NaN) + 1),\n 0\n );\n }\n\n /**\n * Count the number of rows in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of rows in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static rowCount(ranges: GridRange[]): number {\n return ranges.reduce(\n (rowCount, range) =>\n rowCount + (range.endRow ?? NaN) - (range.startRow ?? NaN) + 1,\n 0\n );\n }\n\n /**\n * Count the number of columns in the provided grid ranges\n * @param ranges The ranges to count the columns of\n * @returns The number of columns in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static columnCount(ranges: GridRange[]): number {\n return ranges.reduce(\n (columnCount, range) =>\n columnCount + (range.endColumn ?? NaN) - (range.startColumn ?? NaN) + 1,\n 0\n );\n }\n\n /**\n * Check if the provided ranges contain the provided cell\n * @param ranges The ranges to check\n * @param column The column index\n * @param row The row index\n * @returns True if the cell is within the provided ranges, false otherwise.\n */\n static containsCell(\n ranges: GridRange[],\n column: GridRangeIndex,\n row: GridRangeIndex\n ): boolean {\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n if (range.containsCell(column, row)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Iterate through each cell in the provided ranges\n * @param ranges The ranges to iterate through\n * @param {(column: number, row: number, index: number) => void} callback The callback to execute. `index` is the index within that range\n * @param {GridRange.SELECTION_DIRECTION} direction The direction to iterate in\n */\n static forEachCell(\n ranges: GridRange[],\n callback: (column: number, row: number, index: number) => void,\n direction = GridRange.SELECTION_DIRECTION.RIGHT\n ): void {\n for (let i = 0; i < ranges.length; i += 1) {\n ranges[i].forEach(callback, direction);\n }\n }\n\n constructor(\n startColumn: GridRangeIndex,\n startRow: GridRangeIndex,\n endColumn: GridRangeIndex,\n endRow: GridRangeIndex\n ) {\n this.startColumn = startColumn;\n this.startRow = startRow;\n this.endColumn = endColumn;\n this.endRow = endRow;\n }\n\n /**\n * Checks if the provided range is equivalent to this range (same start and end column/row indexes)\n * @param other Grid range to check against\n * @returns True if the ranges cover the same area\n */\n equals(other: GridRange): boolean {\n return (\n this.startColumn === other.startColumn &&\n this.startRow === other.startRow &&\n this.endColumn === other.endColumn &&\n this.endRow === other.endRow\n );\n }\n\n /**\n * Checks if this GridRange contains another range\n * @param other The range to check\n * @returns True if this GridRange completely contains `other`\n * */\n contains(other: GridRange): boolean {\n return (\n (this.startColumn == null ||\n (other.startColumn != null && this.startColumn <= other.startColumn)) &&\n (this.startRow == null ||\n (other.startRow != null && this.startRow <= other.startRow)) &&\n (this.endColumn == null ||\n (other.endColumn != null && this.endColumn >= other.endColumn)) &&\n (this.endRow == null ||\n (other.endRow != null && this.endRow >= other.endRow))\n );\n }\n\n /**\n * Check if the provided cell is in this range\n * @param column The column to check\n * @param row The row to check\n * @returns True if this cell is within this range\n */\n containsCell(column: GridRangeIndex, row: GridRangeIndex): boolean {\n if (column == null || row == null) {\n return false;\n }\n\n return (\n (this.startColumn == null || this.startColumn <= column) &&\n (this.endColumn == null || this.endColumn >= column) &&\n (this.startRow == null || this.startRow <= row) &&\n (this.endRow == null || this.endRow >= row)\n );\n }\n\n /**\n * Check if the provided range touches (or overlaps) this GridRange\n * Effectively checks if the 2 ranges could be represented by 1 continuous range\n * @param other The range to check\n * @returns True if this GridRange touches `other`\n * */\n touches(other: GridRange): boolean {\n return (\n GridRange.isAxisRangeTouching(\n this.startRow,\n this.endRow,\n other.startRow,\n other.endRow\n ) &&\n GridRange.isAxisRangeTouching(\n this.startColumn,\n this.endColumn,\n other.startColumn,\n other.endColumn\n )\n );\n }\n\n /**\n * Subtracts a range from this range\n * @param other The range to deselect from within this range\n * @returns The ranges needed to represent the remaining\n */\n subtract(other: GridRange): GridRange[] {\n return GridRange.subtractFromRange(this, other);\n }\n\n /**\n * Get the first cell in this range. Throws if this range is unbounded.\n *\n * @param direction The direction to get the starting cell in. Defaults to DOWN\n * @returns The first cell in this range in the direction specified\n */\n startCell(direction = GridRange.SELECTION_DIRECTION.DOWN): GridCell {\n if (!GridRange.isBounded(this)) {\n throw new Error('Cannot get the startCell of an unbounded range');\n }\n\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n return { column: this.startColumn, row: this.startRow };\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP: {\n return { column: this.endColumn, row: this.endRow };\n }\n default:\n throw new Error(`Invalid direction: ${direction}`);\n }\n }\n\n /**\n * Get the next cell in the direction specified. Throws if this range is unbounded.\n * If already at the bounds of the range in that direction, wrap to the next column or row\n * If at the end of the entire range, return null\n * If outside of the range, returns the next cell closest within this range.\n *\n * @param {number} column The cursor column\n * @param {number} row The cursor row\n * @param {SELECTION_DIRECTION} direction The direction to go in\n * @returns {GridCell|null} The next cell in the direction specified, or `null` if at the end of the range\n */\n nextCell(\n column: GridRangeIndex,\n row: GridRangeIndex,\n direction: SELECTION_DIRECTION\n ): GridCell | null {\n if (!GridRange.isBounded(this)) {\n throw new Error('Bounded range required');\n }\n if (column == null || row == null) {\n throw new Error('Require a non-null cursor');\n }\n\n const { startColumn, endColumn, startRow, endRow } = this;\n\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n if (row < endRow) {\n return { column, row: Math.max(row + 1, startRow) };\n }\n\n if (column < endColumn) {\n return { column: Math.max(column + 1, startColumn), row: startRow };\n }\n break;\n case GridRange.SELECTION_DIRECTION.UP:\n if (row > startRow) {\n return { column, row: Math.min(row - 1, endRow) };\n }\n\n if (column > startColumn) {\n return { column: Math.min(column - 1, endColumn), row: endRow };\n }\n break;\n case GridRange.SELECTION_DIRECTION.RIGHT:\n if (column < endColumn) {\n return { column: Math.max(column + 1, startColumn), row };\n }\n\n if (row < endRow) {\n return { column: startColumn, row: Math.max(row + 1, startRow) };\n }\n break;\n case GridRange.SELECTION_DIRECTION.LEFT:\n if (column > startColumn) {\n return { column: Math.min(column - 1, endColumn), row };\n }\n\n if (row > startRow) {\n return { column: endColumn, row: Math.min(row - 1, endRow) };\n }\n break;\n default:\n throw new Error(`Invalid direction: ${direction}`);\n }\n\n return null;\n }\n\n /**\n * Iterate through each cell in the range\n * @param callback Callback to execute. `index` is the index within this range\n * @param direction The direction to iterate in\n */\n forEach(\n callback: (column: number, row: number, index: number) => void,\n direction = GridRange.SELECTION_DIRECTION.RIGHT\n ): void {\n let i = 0;\n let {\n column: c,\n row: r,\n }: { column?: number; row?: number } = this.startCell(direction);\n while (c != null && r != null) {\n callback(c, r, i);\n i += 1;\n\n ({ column: c, row: r } = this.nextCell(c, r, direction) ?? {});\n }\n }\n}\n\nexport default GridRange;\n"],"file":"GridRange.js"}
|
|
1
|
+
{"version":3,"sources":["../src/GridRange.ts"],"names":["SELECTION_DIRECTION","GridRange","normalize","startColumn","startRow","endColumn","endRow","left","top","right","bottom","makeNormalized","makeCell","column","row","makeColumn","makeRow","minOrNull","index1","index2","Math","min","maxOrNull","max","consolidate","ranges","result","slice","wasModified","i","length","range","j","other","contains","splice","touches","isAxisRangeTouching","start1","end1","start2","end2","rangeArraysEqual","ranges1","ranges2","equals","intersection","otherRange","subtractFromRange","subtractRange","subtract","push","subtractFromRanges","subtractRangesFromRanges","subtractRanges","isBounded","boundedRange","columnCount","rowCount","boundedRanges","map","r","offset","columnOffset","rowOffset","nextCell","direction","DOWN","rangeIndex","findIndex","containsCell","RIGHT","nextRangeIndex","nextRange","startCell","LEFT","UP","Error","cellCount","reduce","NaN","forEachCell","callback","forEach","constructor","c"],"mappings":"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","sourcesContent":["export type GridRangeIndex = number | null;\ntype LeftIndex = GridRangeIndex;\ntype RightIndex = GridRangeIndex;\ntype TopIndex = GridRangeIndex;\ntype BottomIndex = GridRangeIndex;\n\nexport type GridCell = { column: number; row: number };\n\nexport interface BoundedGridRange extends GridRange {\n startColumn: number;\n startRow: number;\n endColumn: number;\n endRow: number;\n}\n\n// Also exported via GridRange.SELECTION_DIRECTION\nexport enum SELECTION_DIRECTION {\n DOWN = 'DOWN',\n UP = 'UP',\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n}\n\nexport class GridRange {\n startColumn: GridRangeIndex;\n\n startRow: GridRangeIndex;\n\n endColumn: GridRangeIndex;\n\n endRow: GridRangeIndex;\n\n static SELECTION_DIRECTION = SELECTION_DIRECTION;\n\n /**\n * Returns a normalized array of indexes ensuring left <= right and top <= bottom\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Array containing normalized indexes [left, top, right, bottom]\n */\n static normalize(\n startColumn: GridRangeIndex,\n startRow: GridRangeIndex,\n endColumn: GridRangeIndex,\n endRow: GridRangeIndex\n ): [LeftIndex, TopIndex, RightIndex, BottomIndex] {\n let left = startColumn;\n let top = startRow;\n let right = endColumn;\n let bottom = endRow;\n\n if (left != null && right != null && right < left) {\n left = right;\n right = startColumn;\n }\n\n if (top != null && bottom != null && bottom < top) {\n top = bottom;\n bottom = startRow;\n }\n\n return [left, top, right, bottom];\n }\n\n /**\n * Makes a GridRange ensuring startColumn <= endColumn, startRow <= endRow\n * @param startColumn Start column index\n * @param startRow Start row index\n * @param endColumn End column index\n * @param endRow End row index\n * @returns Normalized GridRange\n */\n static makeNormalized(\n startColumn: GridRangeIndex,\n startRow: GridRangeIndex,\n endColumn: GridRangeIndex,\n endRow: GridRangeIndex\n ): GridRange {\n return new GridRange(\n ...GridRange.normalize(startColumn, startRow, endColumn, endRow)\n );\n }\n\n /**\n * Creates a GridRange representing a single cell\n * @param column Column index\n * @param row Row index\n * @returns GridRange representing the cell\n */\n static makeCell(column: GridRangeIndex, row: GridRangeIndex): GridRange {\n return new GridRange(column, row, column, row);\n }\n\n /**\n * Creates a GridRange representing an infinite length column\n * @param column Column index\n * @returns GridRange representing the column\n */\n static makeColumn(column: GridRangeIndex): GridRange {\n return new GridRange(column, null, column, null);\n }\n\n /**\n * Creates a GridRange representing an infinite length row\n * @param row Row index\n * @returns GridRange representing the row\n */\n static makeRow(row: GridRangeIndex): GridRange {\n return new GridRange(null, row, null, row);\n }\n\n /**\n * Returns the minimum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Minimum index or null if either index is null\n */\n static minOrNull(\n index1: GridRangeIndex,\n index2: GridRangeIndex\n ): number | null {\n if (index1 == null || index2 == null) {\n return null;\n }\n\n return Math.min(index1, index2);\n }\n\n /**\n * Returns the maximum value between 2 range indexes or null if at least 1 is null\n * @param index1 First grid range index\n * @param index2 Second grid range index\n * @returns Maximum index or null if either index is null\n */\n static maxOrNull(\n index1: GridRangeIndex,\n index2: GridRangeIndex\n ): number | null {\n if (index1 == null || index2 == null) {\n return null;\n }\n\n return Math.max(index1, index2);\n }\n\n /**\n * Consolidate the passed in ranges to the minimum set, merging overlapping ranges.\n * @param ranges The ranges to consolidate\n * @returns Consolidated ranges\n */\n static consolidate(ranges: GridRange[]): GridRange[] {\n const result = ranges.slice();\n\n let wasModified = true;\n while (wasModified) {\n wasModified = false;\n for (let i = 0; i < result.length && !wasModified; i += 1) {\n const range = result[i];\n for (let j = result.length - 1; j > i; j -= 1) {\n const other = result[j];\n\n // If one contains the other, we can just keep the bigger one\n if (range.contains(other)) {\n result.splice(j, 1);\n } else if (other.contains(range)) {\n wasModified = true;\n result[i] = other;\n result.splice(j, 1);\n break;\n } else if (\n range.startRow === other.startRow &&\n range.endRow === other.endRow\n ) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n const { startRow, endRow } = range;\n const startColumn = GridRange.minOrNull(\n range.startColumn,\n other.startColumn\n );\n const endColumn = GridRange.maxOrNull(\n range.endColumn,\n other.endColumn\n );\n\n wasModified = true;\n result[i] = new GridRange(\n startColumn,\n startRow,\n endColumn,\n endRow\n );\n result.splice(j, 1);\n break;\n }\n } else if (\n range.startColumn === other.startColumn &&\n range.endColumn === other.endColumn\n ) {\n if (range.touches(other)) {\n // If the start/end rows match, and columns touch, consolidate\n const { startColumn, endColumn } = range;\n const startRow = GridRange.minOrNull(\n range.startRow,\n other.startRow\n );\n const endRow = GridRange.maxOrNull(range.endRow, other.endRow);\n\n wasModified = true;\n result[i] = new GridRange(\n startColumn,\n startRow,\n endColumn,\n endRow\n );\n result.splice(j, 1);\n break;\n }\n }\n }\n }\n }\n\n return result;\n }\n\n /**\n * Checks if the 1-D ranges between 2 index pairs overlap or are continuous.\n * For example ranges [0, 1] and [2, 3] are continuous and will return true.\n * [0, 1] and [1, 3] overlap and return true.\n * [0, 1] and [3, 4] do not overlap and have a gap so this will return false.\n * @param start1 Start of 1st range\n * @param end1 End of 1st range\n * @param start2 Start of 2nd range\n * @param end2 End of 2nd range\n * @returns True if the ranges overlap or touch, else false\n */\n static isAxisRangeTouching(\n start1: GridRangeIndex,\n end1: GridRangeIndex,\n start2: GridRangeIndex,\n end2: GridRangeIndex\n ): boolean {\n if (start1 == null) {\n if (end1 == null) {\n return true;\n }\n\n if (start2 == null) {\n return true;\n }\n\n return start2 <= end1 + 1;\n }\n\n if (end1 == null) {\n if (end2 == null) {\n return true;\n }\n\n return end2 >= start1 - 1;\n }\n\n if (start2 == null) {\n if (end2 == null) {\n return true;\n }\n\n return start1 <= end2 + 1;\n }\n\n if (end2 == null) {\n return end1 >= start2 - 1;\n }\n\n if (start2 >= start1 - 1) {\n return start2 <= end1 + 1;\n }\n\n return end2 >= start1 - 1;\n }\n\n /**\n * Checks if 2 arrays of ranges are the same ranges\n * @param ranges1 First array of ranges\n * @param ranges2 Second array of ranges\n * @returns True if the arrays contain the same ranges in the same order\n */\n static rangeArraysEqual(ranges1: GridRange[], ranges2: GridRange[]): boolean {\n if (ranges1 === ranges2) {\n return true;\n }\n\n if (\n ranges1 == null ||\n ranges2 == null ||\n ranges1.length !== ranges2.length\n ) {\n return false;\n }\n\n for (let i = 0; i < ranges1.length; i += 1) {\n if (!ranges1[i].equals(ranges2[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Get the intersection (overlapping area) of two ranges\n * @param range One range to check for the intersection\n * @param otherRange The other range to check for the intersection\n * @returns Intersection of the two ranges. If they do not intersect, returns `null`.\n */\n static intersection(\n range: GridRange,\n otherRange: GridRange\n ): GridRange | null {\n if (range.equals(otherRange)) {\n return range;\n }\n\n let { startColumn, startRow, endColumn, endRow } = range;\n startColumn =\n startColumn != null && otherRange.startColumn != null\n ? Math.max(startColumn, otherRange.startColumn)\n : startColumn ?? otherRange.startColumn;\n endColumn =\n endColumn != null && otherRange.endColumn != null\n ? Math.min(endColumn, otherRange.endColumn)\n : endColumn ?? otherRange.endColumn;\n startRow =\n startRow != null && otherRange.startRow != null\n ? Math.max(startRow, otherRange.startRow)\n : startRow ?? otherRange.startRow;\n endRow =\n endRow != null && otherRange.endRow != null\n ? Math.min(endRow, otherRange.endRow)\n : endRow ?? otherRange.endRow;\n\n if (\n (startColumn != null && startColumn > (endColumn ?? -1)) ||\n (startRow != null && startRow > (endRow ?? -1))\n ) {\n return null;\n }\n\n return new GridRange(startColumn, startRow, endColumn, endRow);\n }\n\n /**\n * Subtracts 1 range from another\n * @param range The range to be subtracted from\n * @param subtractRange The range to subtract from within this range\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRange(\n range: GridRange,\n subtractRange: GridRange\n ): GridRange[] {\n const result = [];\n\n // Make it a little easier by finding only the part the subtraction range intersects\n const subtract = GridRange.intersection(range, subtractRange);\n if (subtract == null) {\n return [range];\n }\n\n // Go through each of the quadrants for deselection, there can be up to 4\n // Top quadrant (above the subtracted area)\n if (\n subtract.startRow != null &&\n (range.startRow == null || range.startRow < subtract.startRow)\n ) {\n result.push(\n new GridRange(\n range.startColumn,\n range.startRow,\n range.endColumn,\n subtract.startRow - 1\n )\n );\n }\n\n // middle left\n if (\n subtract.startColumn != null &&\n (range.startColumn == null || range.startColumn < subtract.startColumn)\n ) {\n result.push(\n new GridRange(\n range.startColumn,\n subtract.startRow,\n subtract.startColumn - 1,\n subtract.endRow\n )\n );\n }\n\n // middle right\n if (\n subtract.endColumn != null &&\n (range.endColumn == null || range.endColumn > subtract.endColumn)\n ) {\n result.push(\n new GridRange(\n subtract.endColumn + 1,\n subtract.startRow,\n range.endColumn,\n subtract.endRow\n )\n );\n }\n\n // Bottom quadrant\n if (\n subtract.endRow != null &&\n (range.endRow == null || range.endRow > subtract.endRow)\n ) {\n result.push(\n new GridRange(\n range.startColumn,\n subtract.endRow + 1,\n range.endColumn,\n range.endRow\n )\n );\n }\n\n return result;\n }\n\n /**\n * Subtract a range from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRange The range to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractFromRanges(\n ranges: GridRange[],\n subtractRange: GridRange\n ): GridRange[] {\n const result: GridRange[] = [];\n for (let i = 0; i < ranges.length; i += 1) {\n result.push(...GridRange.subtractFromRange(ranges[i], subtractRange));\n }\n\n return result;\n }\n\n /**\n * Subtract multiple ranges from multiple ranges\n * @param ranges The ranges to be subtracted from\n * @param subtractRanges The ranges to subtract from within these ranges\n * @returns The ranges needed to represent the remaining\n */\n static subtractRangesFromRanges(\n ranges: GridRange[],\n subtractRanges: GridRange[]\n ): GridRange[] {\n if (!subtractRanges || subtractRanges.length === 0) {\n return ranges;\n }\n\n let result = [...ranges];\n for (let i = 0; i < subtractRanges.length; i += 1) {\n result = GridRange.subtractFromRanges(result, subtractRanges[i]);\n }\n\n return result;\n }\n\n /**\n * Test if a given range is bounded (all values are non-null)\n * @param range The range to test\n * @returns True if this range is bounded, false otherwise\n */\n static isBounded(range: GridRange): range is BoundedGridRange {\n return (\n range.startRow != null &&\n range.startColumn != null &&\n range.endRow != null &&\n range.endColumn != null\n );\n }\n\n /**\n * Converts any GridRange passed in that is a full row or column selection to be bound\n * to the `columnCount` and `rowCount` passed in\n *\n * @param range The range to get the bounded range of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRange(\n range: GridRange,\n columnCount: number,\n rowCount: number\n ): GridRange {\n if (GridRange.isBounded(range)) {\n return range;\n }\n\n return new GridRange(\n range.startColumn ?? 0,\n range.startRow ?? 0,\n range.endColumn ?? columnCount - 1,\n range.endRow ?? rowCount - 1\n );\n }\n\n /**\n * Converts the GridRanges passed in to be bound to the `columnCount` and `rowCount` passed in\n *\n * @param ranges The ranges to get the bounded ranges of\n * @param columnCount The number of columns\n * @param rowCount The number of rows\n * @returns The passed in GridRange with any null values filled in\n */\n static boundedRanges(\n ranges: GridRange[],\n columnCount: number,\n rowCount: number\n ): GridRange[] {\n return ranges.map(r => GridRange.boundedRange(r, columnCount, rowCount));\n }\n\n /**\n * Offsets a GridRange by the specified amount in the x and y directions\n *\n * @param range The range to offset\n * @param columnOffset The number of columns to offset\n * @param rowOffset The number of rows to offset\n * @returns The new grid range offset from the original\n */\n static offset(\n range: GridRange,\n columnOffset: number,\n rowOffset: number\n ): GridRange {\n return new GridRange(\n range.startColumn != null ? range.startColumn + columnOffset : null,\n range.startRow != null ? range.startRow + rowOffset : null,\n range.endColumn != null ? range.endColumn + columnOffset : null,\n range.endRow != null ? range.endRow + rowOffset : null\n );\n }\n\n /**\n * Get the next cell given the selected ranges and the current cell\n * @param ranges The selected bounded ranges within the grid\n * @param column The cursor column, or null if none focused\n * @param row The cursor row, or null if none focused\n * @param direction The direction in which to select next\n * @returns The next cell to focus, or null if there should be no more focus\n */\n static nextCell(\n ranges: GridRange[],\n column: GridRangeIndex = null,\n row: GridRangeIndex = null,\n direction = GridRange.SELECTION_DIRECTION.DOWN\n ): GridCell | null {\n if (ranges.length === 0) {\n return null;\n }\n\n let rangeIndex = -1;\n if (column != null && row != null) {\n rangeIndex = ranges.findIndex(r => r.containsCell(column, row));\n\n if (rangeIndex >= 0) {\n const range = ranges[rangeIndex];\n const nextCell = range.nextCell(column, row, direction);\n if (nextCell != null) {\n return nextCell;\n }\n }\n }\n\n // Otherwise go to the start of the next range (could be same range if only one range)\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT: {\n const nextRangeIndex =\n rangeIndex < ranges.length - 1 ? rangeIndex + 1 : 0;\n const nextRange = ranges[nextRangeIndex];\n return nextRange.startCell(direction);\n }\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP: {\n const nextRangeIndex =\n rangeIndex > 0 ? rangeIndex - 1 : ranges.length - 1;\n const nextRange = ranges[nextRangeIndex];\n return nextRange.startCell(direction);\n }\n default:\n throw new Error(`Invalid direction: ${direction}`);\n }\n }\n\n /**\n * Count the number of cells in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of cells in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static cellCount(ranges: GridRange[]): number {\n return ranges.reduce(\n (cellCount, range) =>\n cellCount +\n ((range.endRow ?? NaN) - (range.startRow ?? NaN) + 1) *\n ((range.endColumn ?? NaN) - (range.startColumn ?? NaN) + 1),\n 0\n );\n }\n\n /**\n * Count the number of rows in the provided grid ranges\n * @param ranges The ranges to count the rows of\n * @returns The number of rows in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static rowCount(ranges: GridRange[]): number {\n return ranges.reduce(\n (rowCount, range) =>\n rowCount + (range.endRow ?? NaN) - (range.startRow ?? NaN) + 1,\n 0\n );\n }\n\n /**\n * Count the number of columns in the provided grid ranges\n * @param ranges The ranges to count the columns of\n * @returns The number of columns in the ranges, or `NaN` if any of the ranges were unbounded\n */\n static columnCount(ranges: GridRange[]): number {\n return ranges.reduce(\n (columnCount, range) =>\n columnCount + (range.endColumn ?? NaN) - (range.startColumn ?? NaN) + 1,\n 0\n );\n }\n\n /**\n * Check if the provided ranges contain the provided cell\n * @param ranges The ranges to check\n * @param column The column index\n * @param row The row index\n * @returns True if the cell is within the provided ranges, false otherwise.\n */\n static containsCell(\n ranges: GridRange[],\n column: GridRangeIndex,\n row: GridRangeIndex\n ): boolean {\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n if (range.containsCell(column, row)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Iterate through each cell in the provided ranges\n * @param ranges The ranges to iterate through\n * @param {(column: number, row: number, index: number) => void} callback The callback to execute. `index` is the index within that range\n * @param {GridRange.SELECTION_DIRECTION} direction The direction to iterate in\n */\n static forEachCell(\n ranges: GridRange[],\n callback: (column: number, row: number, index: number) => void,\n direction = GridRange.SELECTION_DIRECTION.RIGHT\n ): void {\n for (let i = 0; i < ranges.length; i += 1) {\n ranges[i].forEach(callback, direction);\n }\n }\n\n constructor(\n startColumn: GridRangeIndex,\n startRow: GridRangeIndex,\n endColumn: GridRangeIndex,\n endRow: GridRangeIndex\n ) {\n this.startColumn = startColumn;\n this.startRow = startRow;\n this.endColumn = endColumn;\n this.endRow = endRow;\n }\n\n /**\n * Checks if the provided range is equivalent to this range (same start and end column/row indexes)\n * @param other Grid range to check against\n * @returns True if the ranges cover the same area\n */\n equals(other: GridRange): boolean {\n return (\n this.startColumn === other.startColumn &&\n this.startRow === other.startRow &&\n this.endColumn === other.endColumn &&\n this.endRow === other.endRow\n );\n }\n\n /**\n * Checks if this GridRange contains another range\n * @param other The range to check\n * @returns True if this GridRange completely contains `other`\n * */\n contains(other: GridRange): boolean {\n return (\n (this.startColumn == null ||\n (other.startColumn != null && this.startColumn <= other.startColumn)) &&\n (this.startRow == null ||\n (other.startRow != null && this.startRow <= other.startRow)) &&\n (this.endColumn == null ||\n (other.endColumn != null && this.endColumn >= other.endColumn)) &&\n (this.endRow == null ||\n (other.endRow != null && this.endRow >= other.endRow))\n );\n }\n\n /**\n * Check if the provided cell is in this range\n * @param column The column to check\n * @param row The row to check\n * @returns True if this cell is within this range\n */\n containsCell(column: GridRangeIndex, row: GridRangeIndex): boolean {\n if (column == null || row == null) {\n return false;\n }\n\n return (\n (this.startColumn == null || this.startColumn <= column) &&\n (this.endColumn == null || this.endColumn >= column) &&\n (this.startRow == null || this.startRow <= row) &&\n (this.endRow == null || this.endRow >= row)\n );\n }\n\n /**\n * Check if the provided range touches (or overlaps) this GridRange\n * Effectively checks if the 2 ranges could be represented by 1 continuous range\n * @param other The range to check\n * @returns True if this GridRange touches `other`\n * */\n touches(other: GridRange): boolean {\n return (\n GridRange.isAxisRangeTouching(\n this.startRow,\n this.endRow,\n other.startRow,\n other.endRow\n ) &&\n GridRange.isAxisRangeTouching(\n this.startColumn,\n this.endColumn,\n other.startColumn,\n other.endColumn\n )\n );\n }\n\n /**\n * Subtracts a range from this range\n * @param other The range to deselect from within this range\n * @returns The ranges needed to represent the remaining\n */\n subtract(other: GridRange): GridRange[] {\n return GridRange.subtractFromRange(this, other);\n }\n\n /**\n * Get the first cell in this range. Throws if this range is unbounded.\n *\n * @param direction The direction to get the starting cell in. Defaults to DOWN\n * @returns The first cell in this range in the direction specified\n */\n startCell(direction = GridRange.SELECTION_DIRECTION.DOWN): GridCell {\n if (!GridRange.isBounded(this)) {\n throw new Error('Cannot get the startCell of an unbounded range');\n }\n\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n case GridRange.SELECTION_DIRECTION.RIGHT:\n return { column: this.startColumn, row: this.startRow };\n case GridRange.SELECTION_DIRECTION.LEFT:\n case GridRange.SELECTION_DIRECTION.UP: {\n return { column: this.endColumn, row: this.endRow };\n }\n default:\n throw new Error(`Invalid direction: ${direction}`);\n }\n }\n\n /**\n * Get the next cell in the direction specified. Throws if this range is unbounded.\n * If already at the bounds of the range in that direction, wrap to the next column or row\n * If at the end of the entire range, return null\n * If outside of the range, returns the next cell closest within this range.\n *\n * @param {number} column The cursor column\n * @param {number} row The cursor row\n * @param {SELECTION_DIRECTION} direction The direction to go in\n * @returns {GridCell|null} The next cell in the direction specified, or `null` if at the end of the range\n */\n nextCell(\n column: GridRangeIndex,\n row: GridRangeIndex,\n direction: SELECTION_DIRECTION\n ): GridCell | null {\n if (!GridRange.isBounded(this)) {\n throw new Error('Bounded range required');\n }\n if (column == null || row == null) {\n throw new Error('Require a non-null cursor');\n }\n\n const { startColumn, endColumn, startRow, endRow } = this;\n\n switch (direction) {\n case GridRange.SELECTION_DIRECTION.DOWN:\n if (row < endRow) {\n return { column, row: Math.max(row + 1, startRow) };\n }\n\n if (column < endColumn) {\n return { column: Math.max(column + 1, startColumn), row: startRow };\n }\n break;\n case GridRange.SELECTION_DIRECTION.UP:\n if (row > startRow) {\n return { column, row: Math.min(row - 1, endRow) };\n }\n\n if (column > startColumn) {\n return { column: Math.min(column - 1, endColumn), row: endRow };\n }\n break;\n case GridRange.SELECTION_DIRECTION.RIGHT:\n if (column < endColumn) {\n return { column: Math.max(column + 1, startColumn), row };\n }\n\n if (row < endRow) {\n return { column: startColumn, row: Math.max(row + 1, startRow) };\n }\n break;\n case GridRange.SELECTION_DIRECTION.LEFT:\n if (column > startColumn) {\n return { column: Math.min(column - 1, endColumn), row };\n }\n\n if (row > startRow) {\n return { column: endColumn, row: Math.min(row - 1, endRow) };\n }\n break;\n default:\n throw new Error(`Invalid direction: ${direction}`);\n }\n\n return null;\n }\n\n /**\n * Iterate through each cell in the range\n * @param callback Callback to execute. `index` is the index within this range\n * @param direction The direction to iterate in\n */\n forEach(\n callback: (column: number, row: number, index: number) => void,\n direction = GridRange.SELECTION_DIRECTION.RIGHT\n ): void {\n let i = 0;\n let {\n column: c,\n row: r,\n }: { column?: number; row?: number } = this.startCell(direction);\n while (c != null && r != null) {\n callback(c, r, i);\n i += 1;\n\n ({ column: c, row: r } = this.nextCell(c, r, direction) ?? {});\n }\n }\n}\n\nexport default GridRange;\n"],"file":"GridRange.js"}
|
package/dist/KeyHandler.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import { EventHandlerResult } from './EventHandlerResult';
|
|
7
|
-
import Grid from './Grid';
|
|
7
|
+
import type Grid from './Grid';
|
|
8
8
|
/**
|
|
9
9
|
* Some events we listen to are a native keyboard event, and others are wrapped with React's SyntheticEvent.
|
|
10
10
|
* The KeyHandler shouldn't care though - the properties it accesses should be common on both types of events.
|
package/dist/KeyHandler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyHandler.d.ts","sourceRoot":"","sources":["../src/KeyHandler.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,IAAI,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"KeyHandler.d.ts","sourceRoot":"","sources":["../src/KeyHandler.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B;;;GAGG;AACH,oBAAY,iBAAiB,GAAG,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;AAEpE,qBAAa,UAAU;IACrB,KAAK,EAAE,MAAM,CAAC;gBAIF,KAAK,SAAO;IAIxB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,kBAAkB;CAGjE;AAED,eAAe,UAAU,CAAC"}
|
package/dist/KeyHandler.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
|
|
1
3
|
/* eslint class-methods-use-this: "off" */
|
|
2
4
|
|
|
3
5
|
/* eslint @typescript-eslint/no-unused-vars: "off" */
|
|
@@ -16,6 +18,9 @@ export class KeyHandler {
|
|
|
16
18
|
// Default to well below any of the GRID key handlers 100-1000+
|
|
17
19
|
constructor() {
|
|
18
20
|
var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;
|
|
21
|
+
|
|
22
|
+
_defineProperty(this, "order", void 0);
|
|
23
|
+
|
|
19
24
|
this.order = order;
|
|
20
25
|
}
|
|
21
26
|
/**
|
package/dist/KeyHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/KeyHandler.ts"],"names":["KeyHandler","constructor","order","onDown","event","grid"],"mappings":"AAAA;;AACA;;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AAGA,OAAO,MAAMA,UAAN,CAAiB;AAGtB;AACA;AACAC,EAAAA,WAAW,GAAe;AAAA,QAAdC,KAAc,uEAAN,IAAM
|
|
1
|
+
{"version":3,"sources":["../src/KeyHandler.ts"],"names":["KeyHandler","constructor","order","onDown","event","grid"],"mappings":";;AAAA;;AACA;;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AAGA,OAAO,MAAMA,UAAN,CAAiB;AAGtB;AACA;AACAC,EAAAA,WAAW,GAAe;AAAA,QAAdC,KAAc,uEAAN,IAAM;;AAAA;;AACxB,SAAKA,KAAL,GAAaA,KAAb;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACEC,EAAAA,MAAM,CAACC,KAAD,EAA2BC,IAA3B,EAA2D;AAC/D,WAAO,KAAP;AACD;;AAjBqB;AAoBxB,eAAeL,UAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint @typescript-eslint/no-unused-vars: \"off\" */\n/**\n * Handle keys in a grid\n * Return true from any of the events to indicate they're consumed, and stopPropagation/preventDefault will be called.\n */\n\nimport React from 'react';\nimport { EventHandlerResult } from './EventHandlerResult';\nimport type Grid from './Grid';\n\n/**\n * Some events we listen to are a native keyboard event, and others are wrapped with React's SyntheticEvent.\n * The KeyHandler shouldn't care though - the properties it accesses should be common on both types of events.\n */\nexport type GridKeyboardEvent = KeyboardEvent | React.KeyboardEvent;\n\nexport class KeyHandler {\n order: number;\n\n // What order this key handler should trigger in\n // Default to well below any of the GRID key handlers 100-1000+\n constructor(order = 5000) {\n this.order = order;\n }\n\n /**\n * Handle a keydown event on the grid.\n * @param event The keyboard event\n * @param grid The grid component the key press is on\n * @returns Response indicating if the key was consumed\n */\n onDown(event: GridKeyboardEvent, grid: Grid): EventHandlerResult {\n return false;\n }\n}\n\nexport default KeyHandler;\n"],"file":"KeyHandler.js"}
|
package/dist/MockGridModel.js
CHANGED
|
@@ -2,6 +2,8 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
|
|
|
2
2
|
|
|
3
3
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
4
4
|
|
|
5
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
|
|
5
7
|
/* eslint class-methods-use-this: "off" */
|
|
6
8
|
|
|
7
9
|
/* eslint no-unused-vars: "off" */
|
|
@@ -24,6 +26,23 @@ class MockGridModel extends GridModel {
|
|
|
24
26
|
editedData = []
|
|
25
27
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
26
28
|
super();
|
|
29
|
+
|
|
30
|
+
_defineProperty(this, "numRows", void 0);
|
|
31
|
+
|
|
32
|
+
_defineProperty(this, "numColumns", void 0);
|
|
33
|
+
|
|
34
|
+
_defineProperty(this, "floatingTop", void 0);
|
|
35
|
+
|
|
36
|
+
_defineProperty(this, "floatingBottom", void 0);
|
|
37
|
+
|
|
38
|
+
_defineProperty(this, "floatingLeft", void 0);
|
|
39
|
+
|
|
40
|
+
_defineProperty(this, "floatingRight", void 0);
|
|
41
|
+
|
|
42
|
+
_defineProperty(this, "editable", void 0);
|
|
43
|
+
|
|
44
|
+
_defineProperty(this, "editedData", void 0);
|
|
45
|
+
|
|
27
46
|
this.numRows = rowCount;
|
|
28
47
|
this.numColumns = columnCount;
|
|
29
48
|
this.floatingTop = floatingTopRowCount;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MockGridModel.ts"],"names":["GridModel","GridRange","MockGridModel","constructor","rowCount","columnCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","isEditable","editedData","numRows","numColumns","floatingTop","floatingBottom","floatingLeft","floatingRight","editable","textForCell","column","row","colorForCell","theme","textColor","textForColumnHeader","textForRowHeader","textForRowFooter","setValueForCell","value","setValueForRanges","ranges","text","forEachCell","x","y","setValues","edits","i","length","edit","editValueForCell","isValidForCell","isEditableRange","range","delete","Error"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/MockGridModel.ts"],"names":["GridModel","GridRange","MockGridModel","constructor","rowCount","columnCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","isEditable","editedData","numRows","numColumns","floatingTop","floatingBottom","floatingLeft","floatingRight","editable","textForCell","column","row","colorForCell","theme","textColor","textForColumnHeader","textForRowHeader","textForRowFooter","setValueForCell","value","setValueForRanges","ranges","text","forEachCell","x","y","setValues","edits","i","length","edit","editValueForCell","isValidForCell","isEditableRange","range","delete","Error"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport EditableGridModel, { EditOperation } from './EditableGridModel';\nimport { ModelIndex } from './GridMetrics';\nimport GridModel from './GridModel';\nimport GridRange from './GridRange';\nimport { GridColor, GridTheme } from './GridTheme';\n\n/**\n * Mock model implementing GridModel for testing out grid functionality\n */\nclass MockGridModel extends GridModel implements EditableGridModel {\n protected numRows: number;\n\n protected numColumns: number;\n\n protected floatingTop: number;\n\n protected floatingBottom: number;\n\n protected floatingLeft: number;\n\n protected floatingRight: number;\n\n protected editable: boolean;\n\n protected editedData: string[][];\n\n constructor({\n rowCount = 1000000000,\n columnCount = 100,\n floatingTopRowCount = 0,\n floatingBottomRowCount = 0,\n floatingLeftColumnCount = 0,\n floatingRightColumnCount = 0,\n isEditable = false,\n editedData = [],\n } = {}) {\n super();\n\n this.numRows = rowCount;\n this.numColumns = columnCount;\n this.floatingTop = floatingTopRowCount;\n this.floatingBottom = floatingBottomRowCount;\n this.floatingLeft = floatingLeftColumnCount;\n this.floatingRight = floatingRightColumnCount;\n this.editable = isEditable;\n this.editedData = editedData;\n }\n\n get rowCount(): number {\n return this.numRows;\n }\n\n get columnCount(): number {\n return this.numColumns;\n }\n\n get floatingTopRowCount(): number {\n return this.floatingTop;\n }\n\n get floatingBottomRowCount(): number {\n return this.floatingBottom;\n }\n\n get floatingLeftColumnCount(): number {\n return this.floatingLeft;\n }\n\n get floatingRightColumnCount(): number {\n return this.floatingRight;\n }\n\n get isEditable(): boolean {\n return this.editable;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.editedData[column]?.[row] ?? `${column},${row}`;\n }\n\n colorForCell(\n column: ModelIndex,\n row: ModelIndex,\n theme: GridTheme\n ): GridColor {\n return theme.textColor;\n }\n\n textForColumnHeader(column: ModelIndex): string {\n return `${column}`;\n }\n\n textForRowHeader(row: ModelIndex): string {\n return `${row}`;\n }\n\n textForRowFooter(row: ModelIndex): string {\n return `${row}`;\n }\n\n async setValueForCell(\n column: ModelIndex,\n row: ModelIndex,\n value: string\n ): Promise<void> {\n if (this.editedData[column] == null) {\n this.editedData[column] = [];\n }\n this.editedData[column][row] = `${value}`;\n }\n\n async setValueForRanges(ranges: GridRange[], text: string): Promise<void> {\n GridRange.forEachCell(ranges, (x, y) => {\n this.setValueForCell(x, y, text);\n });\n }\n\n async setValues(edits: EditOperation[]): Promise<void> {\n for (let i = 0; i < edits.length; i += 1) {\n const edit = edits[i];\n this.setValueForCell(\n edit.column ?? edit.x,\n edit.row ?? edit.y,\n edit.text\n );\n }\n }\n\n editValueForCell(column: ModelIndex, row: ModelIndex): string {\n return this.textForCell(column, row);\n }\n\n isValidForCell(column: ModelIndex, row: ModelIndex, value: string): boolean {\n return true;\n }\n\n isEditableRange(range: GridRange): boolean {\n return this.isEditable;\n }\n\n delete(ranges: GridRange[]): Promise<void> {\n throw new Error('Method not implemented.');\n }\n}\n\nexport default MockGridModel;\n"],"file":"MockGridModel.js"}
|
|
@@ -25,6 +25,12 @@ class MockTreeGridModel extends MockGridModel {
|
|
|
25
25
|
columnCount
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
+
_defineProperty(this, "children", void 0);
|
|
29
|
+
|
|
30
|
+
_defineProperty(this, "childRowCount", void 0);
|
|
31
|
+
|
|
32
|
+
_defineProperty(this, "maxDepth", void 0);
|
|
33
|
+
|
|
28
34
|
_defineProperty(this, "getCachedModelRowOffset", memoizeClear((children, row) => {
|
|
29
35
|
var key = null;
|
|
30
36
|
var offsetRow = row; // Need to iterate through the map in order... sort it first
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MockTreeGridModel.ts"],"names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","rowCount","DEFAULT_ROW_COUNT","columnCount","DEFAULT_COLUMN_COUNT","children","Map","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","maxDepth","MAX_DEPTH","row","key","offsetRow","sortedEntries","sort","a","b","i","length","childRow","childModel","getCachedModelRowOffset","model","get","undefined","textForRowHeader","column","textForCell","depth","getCachedDepthForRow","isRowExpanded","has","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","originalChildRowCount","numRows","delete","child","numColumns","set"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport ExpandableGridModel from './ExpandableGridModel';\nimport { ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(row: ModelIndex, isExpanded: boolean): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n }\n );\n}\n\nexport default MockTreeGridModel;\n"],"file":"MockTreeGridModel.js"}
|
|
1
|
+
{"version":3,"sources":["../src/MockTreeGridModel.ts"],"names":["MockGridModel","memoizeClear","MockTreeGridModel","constructor","rowCount","DEFAULT_ROW_COUNT","columnCount","DEFAULT_COLUMN_COUNT","children","Map","childRowCount","Math","ceil","max","MIN_CHILD_ROW_COUNT","DEFAULT_CHILD_ROW_COUNT_FACTOR","maxDepth","MAX_DEPTH","row","key","offsetRow","sortedEntries","sort","a","b","i","length","childRow","childModel","getCachedModelRowOffset","model","get","undefined","textForRowHeader","column","textForCell","depth","getCachedDepthForRow","isRowExpanded","has","depthForRow","getCachedTextForCell","getCachedTextForRowHeader","isRowMovable","hasExpandableRows","floatingBottomRowCount","isRowExpandable","getCachedIsRowExpandable","getCachedIsRowExpanded","setRowExpanded","isExpanded","originalChildRowCount","numRows","delete","child","numColumns","set"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\nimport MockGridModel from './MockGridModel';\nimport memoizeClear from './memoizeClear';\nimport ExpandableGridModel from './ExpandableGridModel';\nimport { ModelIndex } from './GridMetrics';\n\ntype ChildrenTreeMap = Map<ModelIndex, MockTreeGridModel>;\n\n/**\n * A class to mock a tree model so can test out tree models.\n * Whenever a row is expanded, it creates a child model for that row, which can then make a child for those rows, etc.\n */\nclass MockTreeGridModel extends MockGridModel implements ExpandableGridModel {\n static DEFAULT_ROW_COUNT = 1000000000;\n\n static DEFAULT_COLUMN_COUNT = 100;\n\n /** How many rows a child tree should have related to the parent. Eg. if parent has 10000 rows, child will have 100 */\n static DEFAULT_CHILD_ROW_COUNT_FACTOR = 0.01;\n\n static MIN_CHILD_ROW_COUNT = 10;\n\n static MAX_DEPTH = 10;\n\n private children: ChildrenTreeMap;\n\n private childRowCount: number;\n\n private maxDepth: number;\n\n constructor({\n rowCount = MockTreeGridModel.DEFAULT_ROW_COUNT,\n columnCount = MockTreeGridModel.DEFAULT_COLUMN_COUNT,\n children = new Map(),\n childRowCount = Math.ceil(\n Math.max(\n MockTreeGridModel.MIN_CHILD_ROW_COUNT,\n rowCount * MockTreeGridModel.DEFAULT_CHILD_ROW_COUNT_FACTOR\n )\n ),\n maxDepth = MockTreeGridModel.MAX_DEPTH,\n }: {\n children?: ChildrenTreeMap;\n columnCount?: number;\n rowCount?: number;\n childRowCount?: number;\n maxDepth?: number;\n } = {}) {\n super({ rowCount, columnCount });\n\n this.children = children;\n this.childRowCount = childRowCount;\n this.maxDepth = maxDepth;\n }\n\n textForCell(column: ModelIndex, row: ModelIndex): string {\n return this.getCachedTextForCell(this.children, column, row);\n }\n\n textForRowHeader(row: ModelIndex): string {\n return this.getCachedTextForRowHeader(this.children, row);\n }\n\n isRowMovable(row: ModelIndex): boolean {\n return false;\n }\n\n get hasExpandableRows(): boolean {\n return true;\n }\n\n get floatingBottomRowCount(): number {\n return 0;\n }\n\n isRowExpandable(row: ModelIndex): boolean {\n return this.getCachedIsRowExpandable(this.children, row, this.maxDepth);\n }\n\n isRowExpanded(row: ModelIndex): boolean {\n return this.getCachedIsRowExpanded(this.children, row);\n }\n\n setRowExpanded(row: ModelIndex, isExpanded: boolean): void {\n const { key, offsetRow } = this.getCachedModelRowOffset(this.children, row);\n\n // We always set a new map so that our memoize functions work properly\n const children = new Map(this.children);\n if (key != null) {\n const model = this.children.get(key);\n if (model !== undefined) {\n const { rowCount: originalChildRowCount } = model;\n model.setRowExpanded(offsetRow, isExpanded);\n this.numRows += model.rowCount - originalChildRowCount;\n }\n } else if (!isExpanded) {\n const childModel = children.get(offsetRow);\n if (childModel !== undefined) {\n this.numRows -= childModel.rowCount;\n children.delete(offsetRow);\n }\n } else {\n const child = new MockTreeGridModel({\n rowCount: this.childRowCount,\n columnCount: this.numColumns,\n });\n children.set(offsetRow, child);\n this.numRows += child.rowCount;\n }\n\n this.children = children;\n }\n\n depthForRow(row: ModelIndex): number {\n return this.getCachedDepthForRow(this.children, row);\n }\n\n /**\n * Returns the map key and the offsetRow given the provided children and row index.\n * If the returned key is null, then this offset row is within this model.\n * Only returning the key instead of the model so that memoize doesn't cache a bunch of the children models after they've been deleted (collapsed).\n */\n getCachedModelRowOffset = memoizeClear(\n (\n children: ChildrenTreeMap,\n row: ModelIndex\n ): { key: ModelIndex | null; offsetRow: ModelIndex } => {\n let key = null;\n let offsetRow = row;\n // Need to iterate through the map in order... sort it first\n const sortedEntries = [...children].sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < sortedEntries.length; i += 1) {\n const [childRow, childModel] = sortedEntries[i];\n if (offsetRow <= childRow) {\n break;\n }\n const childRowCount = childModel.rowCount;\n if (offsetRow <= childRow + childRowCount) {\n key = childRow;\n offsetRow = offsetRow - childRow - 1;\n break;\n }\n offsetRow -= childRowCount;\n }\n\n return { key, offsetRow };\n }\n );\n\n getCachedTextForRowHeader = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForRowHeader(offsetRow)}`;\n }\n }\n\n return `${offsetRow}`;\n }\n );\n\n getCachedTextForCell = memoizeClear(\n (\n children: ChildrenTreeMap,\n column: ModelIndex,\n row: ModelIndex\n ): string => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return `${key}.${model.textForCell(column, offsetRow)}`;\n }\n }\n\n return `${column},${offsetRow}`;\n }\n );\n\n getCachedIsRowExpandable = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex, maxDepth: number): boolean => {\n const depth = this.getCachedDepthForRow(children, row);\n\n return depth < maxDepth;\n }\n );\n\n getCachedIsRowExpanded = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): boolean => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.isRowExpanded(offsetRow);\n }\n }\n\n return children.has(offsetRow);\n }\n );\n\n getCachedDepthForRow = memoizeClear(\n (children: ChildrenTreeMap, row: ModelIndex): number => {\n const { key, offsetRow } = this.getCachedModelRowOffset(children, row);\n\n if (key != null) {\n const model = children.get(key);\n if (model !== undefined) {\n return model.depthForRow(offsetRow) + 1;\n }\n }\n\n return 0;\n }\n );\n}\n\nexport default MockTreeGridModel;\n"],"file":"MockTreeGridModel.js"}
|
|
@@ -11,6 +11,10 @@ class GridColumnMoveMouseHandler extends GridMouseHandler {
|
|
|
11
11
|
|
|
12
12
|
_defineProperty(this, "cursor", null);
|
|
13
13
|
|
|
14
|
+
_defineProperty(this, "draggingOffset", void 0);
|
|
15
|
+
|
|
16
|
+
_defineProperty(this, "startingGridPoint", void 0);
|
|
17
|
+
|
|
14
18
|
_defineProperty(this, "sloppyClickThreshold", false);
|
|
15
19
|
}
|
|
16
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mouse-handlers/GridColumnMoveMouseHandler.ts"],"names":["GridUtils","GridMouseHandler","getOrThrow","SLOPPY_CLICK_DISTANCE","GridColumnMoveMouseHandler","onDown","gridPoint","grid","model","props","x","y","column","metrics","Error","columnHeaderHeight","rowHeaderWidth","visibleColumnXs","startingGridPoint","sloppyClickThreshold","cursor","isColumnMovable","columnX","draggingOffset","setState","draggingColumnOffset","onDrag","undefined","draggingColumn","state","mouseX","mouseY","isDragging","Math","abs","getGridPointFromXY","left","lastLeft","right","rightVisible","columnCount","visibleColumnWidths","width","minX","leftColumn","maxX","rightColumn","movedColumns","moveItem","minMoveX","maxMoveX","onUp"],"mappings":"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","sourcesContent":["import Grid from '../Grid';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridMouseHandler from '../GridMouseHandler';\nimport { getOrThrow } from '../GridMetricCalculator';\nimport { EventHandlerResult } from '../EventHandlerResult';\n\nconst SLOPPY_CLICK_DISTANCE = 5;\n\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n cursor: string | null = null;\n\n private draggingOffset?: number;\n\n private startingGridPoint?: GridPoint;\n\n private sloppyClickThreshold = false;\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { model } = grid.props;\n const { x, y, column } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const { columnHeaderHeight, rowHeaderWidth, visibleColumnXs } = metrics;\n\n this.startingGridPoint = gridPoint;\n this.sloppyClickThreshold = false;\n this.cursor = null;\n\n if (\n column != null &&\n y <= columnHeaderHeight &&\n model.isColumnMovable(column)\n ) {\n const columnX = getOrThrow(visibleColumnXs, column);\n this.draggingOffset = x - columnX - rowHeaderWidth;\n grid.setState({ draggingColumnOffset: this.draggingOffset });\n }\n return false;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (\n this.draggingOffset === undefined ||\n this.startingGridPoint === undefined\n ) {\n return false;\n }\n\n const { model } = grid.props;\n let { draggingColumn } = grid.state;\n const { mouseX, mouseY, isDragging } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (\n (!this.sloppyClickThreshold &&\n Math.abs(this.startingGridPoint.x - mouseX) >= SLOPPY_CLICK_DISTANCE) ||\n Math.abs(this.startingGridPoint.y - mouseY) >= SLOPPY_CLICK_DISTANCE\n ) {\n this.sloppyClickThreshold = true;\n } else if (!this.sloppyClickThreshold && !isDragging) {\n return false;\n }\n\n if (draggingColumn == null) {\n const { column } = grid.getGridPointFromXY(mouseX, mouseY);\n if (column != null && !model.isColumnMovable(column)) {\n return false;\n }\n\n draggingColumn = column;\n\n grid.setState({ draggingColumn, isDragging: true });\n\n if (draggingColumn == null) {\n return false;\n }\n }\n\n this.cursor = 'move';\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const {\n left,\n lastLeft,\n right,\n rightVisible,\n columnCount,\n rowHeaderWidth,\n visibleColumnWidths,\n visibleColumnXs,\n width,\n } = metrics;\n let minX = rowHeaderWidth;\n if (left < draggingColumn) {\n const leftColumn = draggingColumn - 1;\n minX =\n getOrThrow(visibleColumnXs, leftColumn) +\n getOrThrow(visibleColumnWidths, leftColumn) * 0.5 +\n this.draggingOffset +\n rowHeaderWidth;\n }\n\n let maxX = width;\n if (draggingColumn < right) {\n const rightColumn = draggingColumn + 1;\n maxX =\n getOrThrow(visibleColumnXs, rightColumn) +\n getOrThrow(visibleColumnWidths, rightColumn) * 0.5 -\n getOrThrow(visibleColumnWidths, draggingColumn) +\n this.draggingOffset +\n rowHeaderWidth;\n }\n\n let { movedColumns } = grid.state;\n if (\n mouseX < minX &&\n draggingColumn > 0 &&\n model.isColumnMovable(draggingColumn - 1)\n ) {\n movedColumns = GridUtils.moveItem(\n draggingColumn,\n draggingColumn - 1,\n movedColumns\n );\n draggingColumn -= 1;\n } else if (\n maxX < mouseX &&\n draggingColumn < columnCount - 1 &&\n model.isColumnMovable(draggingColumn + 1)\n ) {\n movedColumns = GridUtils.moveItem(\n draggingColumn,\n draggingColumn + 1,\n movedColumns\n );\n draggingColumn += 1;\n }\n grid.setState({ movedColumns, draggingColumn });\n\n const minMoveX =\n rowHeaderWidth + getOrThrow(visibleColumnWidths, left) * 0.5;\n const maxMoveX =\n rowHeaderWidth +\n getOrThrow(visibleColumnXs, rightVisible) +\n getOrThrow(visibleColumnWidths, rightVisible) * 0.5;\n if (mouseX < minMoveX && left > 0) {\n grid.setState({ left: left - 1 });\n } else if (mouseX > maxMoveX && left < lastLeft) {\n grid.setState({ left: left + 1 });\n }\n\n return true;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n this.cursor = null;\n\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumnOffset: null,\n draggingColumn: null,\n isDragging: false,\n });\n return true;\n }\n\n return false;\n }\n}\n\nexport default GridColumnMoveMouseHandler;\n"],"file":"GridColumnMoveMouseHandler.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/mouse-handlers/GridColumnMoveMouseHandler.ts"],"names":["GridUtils","GridMouseHandler","getOrThrow","SLOPPY_CLICK_DISTANCE","GridColumnMoveMouseHandler","onDown","gridPoint","grid","model","props","x","y","column","metrics","Error","columnHeaderHeight","rowHeaderWidth","visibleColumnXs","startingGridPoint","sloppyClickThreshold","cursor","isColumnMovable","columnX","draggingOffset","setState","draggingColumnOffset","onDrag","undefined","draggingColumn","state","mouseX","mouseY","isDragging","Math","abs","getGridPointFromXY","left","lastLeft","right","rightVisible","columnCount","visibleColumnWidths","width","minX","leftColumn","maxX","rightColumn","movedColumns","moveItem","minMoveX","maxMoveX","onUp"],"mappings":"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","sourcesContent":["import Grid from '../Grid';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridMouseHandler from '../GridMouseHandler';\nimport { getOrThrow } from '../GridMetricCalculator';\nimport { EventHandlerResult } from '../EventHandlerResult';\n\nconst SLOPPY_CLICK_DISTANCE = 5;\n\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n cursor: string | null = null;\n\n private draggingOffset?: number;\n\n private startingGridPoint?: GridPoint;\n\n private sloppyClickThreshold = false;\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { model } = grid.props;\n const { x, y, column } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const { columnHeaderHeight, rowHeaderWidth, visibleColumnXs } = metrics;\n\n this.startingGridPoint = gridPoint;\n this.sloppyClickThreshold = false;\n this.cursor = null;\n\n if (\n column != null &&\n y <= columnHeaderHeight &&\n model.isColumnMovable(column)\n ) {\n const columnX = getOrThrow(visibleColumnXs, column);\n this.draggingOffset = x - columnX - rowHeaderWidth;\n grid.setState({ draggingColumnOffset: this.draggingOffset });\n }\n return false;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (\n this.draggingOffset === undefined ||\n this.startingGridPoint === undefined\n ) {\n return false;\n }\n\n const { model } = grid.props;\n let { draggingColumn } = grid.state;\n const { mouseX, mouseY, isDragging } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (\n (!this.sloppyClickThreshold &&\n Math.abs(this.startingGridPoint.x - mouseX) >= SLOPPY_CLICK_DISTANCE) ||\n Math.abs(this.startingGridPoint.y - mouseY) >= SLOPPY_CLICK_DISTANCE\n ) {\n this.sloppyClickThreshold = true;\n } else if (!this.sloppyClickThreshold && !isDragging) {\n return false;\n }\n\n if (draggingColumn == null) {\n const { column } = grid.getGridPointFromXY(mouseX, mouseY);\n if (column != null && !model.isColumnMovable(column)) {\n return false;\n }\n\n draggingColumn = column;\n\n grid.setState({ draggingColumn, isDragging: true });\n\n if (draggingColumn == null) {\n return false;\n }\n }\n\n this.cursor = 'move';\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const {\n left,\n lastLeft,\n right,\n rightVisible,\n columnCount,\n rowHeaderWidth,\n visibleColumnWidths,\n visibleColumnXs,\n width,\n } = metrics;\n let minX = rowHeaderWidth;\n if (left < draggingColumn) {\n const leftColumn = draggingColumn - 1;\n minX =\n getOrThrow(visibleColumnXs, leftColumn) +\n getOrThrow(visibleColumnWidths, leftColumn) * 0.5 +\n this.draggingOffset +\n rowHeaderWidth;\n }\n\n let maxX = width;\n if (draggingColumn < right) {\n const rightColumn = draggingColumn + 1;\n maxX =\n getOrThrow(visibleColumnXs, rightColumn) +\n getOrThrow(visibleColumnWidths, rightColumn) * 0.5 -\n getOrThrow(visibleColumnWidths, draggingColumn) +\n this.draggingOffset +\n rowHeaderWidth;\n }\n\n let { movedColumns } = grid.state;\n if (\n mouseX < minX &&\n draggingColumn > 0 &&\n model.isColumnMovable(draggingColumn - 1)\n ) {\n movedColumns = GridUtils.moveItem(\n draggingColumn,\n draggingColumn - 1,\n movedColumns\n );\n draggingColumn -= 1;\n } else if (\n maxX < mouseX &&\n draggingColumn < columnCount - 1 &&\n model.isColumnMovable(draggingColumn + 1)\n ) {\n movedColumns = GridUtils.moveItem(\n draggingColumn,\n draggingColumn + 1,\n movedColumns\n );\n draggingColumn += 1;\n }\n grid.setState({ movedColumns, draggingColumn });\n\n const minMoveX =\n rowHeaderWidth + getOrThrow(visibleColumnWidths, left) * 0.5;\n const maxMoveX =\n rowHeaderWidth +\n getOrThrow(visibleColumnXs, rightVisible) +\n getOrThrow(visibleColumnWidths, rightVisible) * 0.5;\n if (mouseX < minMoveX && left > 0) {\n grid.setState({ left: left - 1 });\n } else if (mouseX > maxMoveX && left < lastLeft) {\n grid.setState({ left: left + 1 });\n }\n\n return true;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n this.cursor = null;\n\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumnOffset: null,\n draggingColumn: null,\n isDragging: false,\n });\n return true;\n }\n\n return false;\n }\n}\n\nexport default GridColumnMoveMouseHandler;\n"],"file":"GridColumnMoveMouseHandler.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mouse-handlers/GridHorizontalScrollBarMouseHandler.ts"],"names":["GridMouseHandler","GridHorizontalScrollBarMouseHandler","getLeftWithOffsetFromRawLeft","grid","rawLeft","theme","getTheme","metrics","metricCalculator","Error","scrollSnapToColumn","left","Math","round","leftOffset","floor","leftOffsetPercent","columnWidth","visibleColumnWidths","get","metricState","getMetricState","getVisibleColumnWidth","isInScrollBar","gridPoint","scrollBarSize","scrollBarHoverSize","x","y","lastLeft","lastTop","rowHeaderWidth","width","height","scrollBarWidth","onDown","barWidth","handleWidth","scrollX","mouseBarX","dragOffset","setState","isDraggingHorizontalScrollBar","min","max","newLeft","newLeftOffset","setViewState","isDragging","onDrag","onMove","onUp","undefined","onClick"],"mappings":";;OAGOA,gB;;AAGP;AACA,MAAMC,mCAAN,SAAkDD,gBAAlD,CAAmE;AAAA;AAAA;;AAAA,oCA8BxD,SA9BwD;AAAA;;AAC9B,SAA5BE,4BAA4B,CACjCC,IADiC,EAEjCC,OAFiC,EAGW;AAC5C,QAAMC,KAAK,GAAGF,IAAI,CAACG,QAAL,EAAd;AACA,QAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA;AAAX,QAAgCL,IAAtC;AACA,QAAI,CAACI,OAAL,EAAc,MAAM,IAAIE,KAAJ,CAAU,iBAAV,CAAN;;AAEd,QAAIJ,KAAK,CAACK,kBAAV,EAA8B;AAC5B,UAAMC,KAAI,GAAGC,IAAI,CAACC,KAAL,CAAWT,OAAX,CAAb;;AACA,UAAMU,WAAU,GAAG,CAAnB;AAEA,aAAO;AAAEH,QAAAA,IAAI,EAAJA,KAAF;AAAQG,QAAAA,UAAU,EAAVA;AAAR,OAAP;AACD;;AACD,QAAMH,IAAI,GAAGC,IAAI,CAACG,KAAL,CAAWX,OAAX,CAAb;AACA,QAAMY,iBAAiB,GAAGZ,OAAO,GAAGO,IAApC;AACA,QAAIM,WAAW,GAAGV,OAAO,CAACW,mBAAR,CAA4BC,GAA5B,CAAgCR,IAAhC,CAAlB;;AACA,QAAIM,WAAW,IAAI,IAAnB,EAAyB;AACvB,UAAMG,WAAW,GAAGjB,IAAI,CAACkB,cAAL,EAApB;AACAJ,MAAAA,WAAW,GAAGT,gBAAgB,CAACc,qBAAjB,CAAuCX,IAAvC,EAA6CS,WAA7C,CAAd;AACD;;AACD,QAAMN,UAAU,GAAGG,WAAW,GAAGD,iBAAjC;AAEA,WAAO;AAAEL,MAAAA,IAAF;AAAQG,MAAAA;AAAR,KAAP;AACD;;AAODS,EAAAA,aAAa,CAACC,SAAD,EAAuBrB,IAAvB,EAA4C;AACvD,QAAME,KAAK,GAAGF,IAAI,CAACG,QAAL,EAAd;AAEA,QAAM;AAAEmB,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAwCrB,KAA9C;AACA,QAAM;AAAEE,MAAAA;AAAF,QAAcJ,IAApB;AACA,QAAI,CAACI,OAAL,EAAc,MAAM,IAAIE,KAAJ,CAAU,iBAAV,CAAN;AAEd,QAAM;AAAEkB,MAAAA,CAAF;AAAKC,MAAAA;AAAL,QAAWJ,SAAjB;AACA,QAAM;AAAEK,MAAAA,QAAF;AAAYC,MAAAA,OAAZ;AAAqBC,MAAAA,cAArB;AAAqCC,MAAAA,KAArC;AAA4CC,MAAAA;AAA5C,QAAuD1B,OAA7D;AACA,QAAM2B,cAAc,GAAGJ,OAAO,GAAG,CAAV,GAAcE,KAAK,GAAGP,aAAtB,GAAsCO,KAA7D;AACA,WACEP,aAAa,GAAG,CAAhB,IACAI,QAAQ,GAAG,CADX,IAEAD,CAAC,IAAIK,MAAM,GAAGP,kBAFd,IAGAE,CAAC,GAAGK,MAHJ,IAIAN,CAAC,GAAGI,cAJJ,IAKAJ,CAAC,GAAGO,cANN;AAQD;;AAEDC,EAAAA,MAAM,CAACX,SAAD,EAAuBrB,IAAvB,EAAuD;AAC3D,QAAM;AAAEI,MAAAA;AAAF,QAAcJ,IAApB;AACA,QAAI,CAACI,OAAL,EAAc,MAAM,IAAIE,KAAJ,CAAU,iBAAV,CAAN;AAEd,QAAM;AAAEkB,MAAAA;AAAF,QAAQH,SAAd;AACA,QAAM;AACJY,MAAAA,QADI;AAEJC,MAAAA,WAFI;AAGJR,MAAAA,QAHI;AAIJE,MAAAA,cAJI;AAKJO,MAAAA;AALI,QAMF/B,OANJ;;AAOA,QAAI,CAAC,KAAKgB,aAAL,CAAmBC,SAAnB,EAA8BrB,IAA9B,CAAL,EAA0C;AACxC,aAAO,KAAP;AACD;;AAED,QAAMoC,SAAS,GAAGZ,CAAC,GAAGI,cAAtB;;AACA,QAAIQ,SAAS,IAAID,OAAb,IAAwBC,SAAS,IAAID,OAAO,GAAGD,WAAnD,EAAgE;AAC9D;AACA,WAAKG,UAAL,GAAkBD,SAAS,GAAGD,OAA9B;AACAnC,MAAAA,IAAI,CAACsC,QAAL,CAAc;AAAEC,QAAAA,6BAA6B,EAAE;AAAjC,OAAd;AACD,KAJD,MAIO;AACL,WAAKF,UAAL,GAAkB,CAAlB;AACA,UAAMpC,OAAO,GAAGQ,IAAI,CAAC+B,GAAL,CACd/B,IAAI,CAACgC,GAAL,CAAS,CAAT,EAAaL,SAAS,IAAIH,QAAQ,GAAGC,WAAf,CAAV,GAAyCR,QAArD,CADc,EAEdA,QAFc,CAAhB;AAKA,UAAM;AACJlB,QAAAA,IAAI,EAAEkC,OADF;AAEJ/B,QAAAA,UAAU,EAAEgC;AAFR,UAGF7C,mCAAmC,CAACC,4BAApC,CACFC,IADE,EAEFC,OAFE,CAHJ;AAOAD,MAAAA,IAAI,CAAC4C,YAAL,CAAkB;AAChBpC,QAAAA,IAAI,EAAEkC,OADU;AAEhB/B,QAAAA,UAAU,EAAEgC,aAFI;AAGhBJ,QAAAA,6BAA6B,EAAE,IAHf;AAIhBM,QAAAA,UAAU,EAAE;AAJI,OAAlB;AAMD;;AAED,WAAO,IAAP;AACD;;AAEDC,EAAAA,MAAM,CAACzB,SAAD,EAAuBrB,IAAvB,EAAuD;AAC3D,QAAI,KAAKqC,UAAL,IAAmB,IAAvB,EAA6B;AAC3B,UAAM;AAAEb,QAAAA;AAAF,UAAQH,SAAd;AACA,UAAM;AAAEjB,QAAAA;AAAF,UAAcJ,IAApB;AACA,UAAI,CAACI,OAAL,EAAc,MAAM,IAAIE,KAAJ,CAAU,iBAAV,CAAN;AAEd,UAAM;AAAE2B,QAAAA,QAAF;AAAYC,QAAAA,WAAZ;AAAyBR,QAAAA,QAAzB;AAAmCE,QAAAA;AAAnC,UAAsDxB,OAA5D;AACA,UAAMgC,SAAS,GAAGZ,CAAC,GAAGI,cAAtB;AAEA,UAAM3B,OAAO,GAAGQ,IAAI,CAAC+B,GAAL,CACd/B,IAAI,CAACgC,GAAL,CACE,CADF,EAEG,CAACL,SAAS,GAAG,KAAKC,UAAlB,KAAiCJ,QAAQ,GAAGC,WAA5C,CAAD,GAA6DR,QAF/D,CADc,EAKdA,QALc,CAAhB;AAQA,UAAM;AACJlB,QAAAA,IAAI,EAAEkC,OADF;AAEJ/B,QAAAA,UAAU,EAAEgC;AAFR,UAGF7C,mCAAmC,CAACC,4BAApC,CACFC,IADE,EAEFC,OAFE,CAHJ;AAOAD,MAAAA,IAAI,CAAC4C,YAAL,CAAkB;AAChBpC,QAAAA,IAAI,EAAEkC,OADU;AAEhB/B,QAAAA,UAAU,EAAEgC,aAFI;AAGhBJ,QAAAA,6BAA6B,EAAE,IAHf;AAIhBM,QAAAA,UAAU,EAAE;AAJI,OAAlB;AAOA,aAAO,IAAP;AACD;;AACD,WAAO,KAAP;AACD;;AAEDE,EAAAA,MAAM,CAAC1B,SAAD,EAAuBrB,IAAvB,EAAuD;AAC3D,WAAO,KAAKoB,aAAL,CAAmBC,SAAnB,EAA8BrB,IAA9B,CAAP;AACD;;AAEDgD,EAAAA,IAAI,CAAC3B,SAAD,EAAuBrB,IAAvB,EAAuD;AACzD,QAAI,KAAKqC,UAAL,KAAoBY,SAAxB,EAAmC;AACjC,WAAKZ,UAAL,GAAkBY,SAAlB;AACAjD,MAAAA,IAAI,CAACsC,QAAL,CAAc;AACZC,QAAAA,6BAA6B,EAAE,KADnB;AAEZM,QAAAA,UAAU,EAAE;AAFA,OAAd;AAID;;AAED,WAAO,KAAKzB,aAAL,CAAmBC,SAAnB,EAA8BrB,IAA9B,CAAP;AACD;;AAEDkD,EAAAA,OAAO,CAAC7B,SAAD,EAAuBrB,IAAvB,EAAuD;AAC5D,WAAO,KAAKoB,aAAL,CAAmBC,SAAnB,EAA8BrB,IAA9B,CAAP;AACD;;AAxJgE;;AA2JnE,eAAeF,mCAAf","sourcesContent":["import { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport { VisibleIndex } from '../GridMetrics';\nimport GridMouseHandler from '../GridMouseHandler';\nimport { GridPoint } from '../GridUtils';\n\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n static getLeftWithOffsetFromRawLeft(\n grid: Grid,\n rawLeft: number\n ): { left: VisibleIndex; leftOffset: number } {\n const theme = grid.getTheme();\n const { metrics, metricCalculator } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n if (theme.scrollSnapToColumn) {\n const left = Math.round(rawLeft);\n const leftOffset = 0;\n\n return { left, leftOffset };\n }\n const left = Math.floor(rawLeft);\n const leftOffsetPercent = rawLeft - left;\n let columnWidth = metrics.visibleColumnWidths.get(left);\n if (columnWidth == null) {\n const metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n const leftOffset = columnWidth * leftOffsetPercent;\n\n return { left, leftOffset };\n }\n\n private dragOffset?: number;\n\n // to trigger pointer event blocking\n cursor = 'default';\n\n isInScrollBar(gridPoint: GridPoint, grid: Grid): boolean {\n const theme = grid.getTheme();\n\n const { scrollBarSize, scrollBarHoverSize } = theme;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { x, y } = gridPoint;\n const { lastLeft, lastTop, rowHeaderWidth, width, height } = metrics;\n const scrollBarWidth = lastTop > 0 ? width - scrollBarSize : width;\n return (\n scrollBarSize > 0 &&\n lastLeft > 0 &&\n y >= height - scrollBarHoverSize &&\n y < height &&\n x > rowHeaderWidth &&\n x < scrollBarWidth\n );\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { x } = gridPoint;\n const {\n barWidth,\n handleWidth,\n lastLeft,\n rowHeaderWidth,\n scrollX,\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n\n const mouseBarX = x - rowHeaderWidth;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({ isDraggingHorizontalScrollBar: true });\n } else {\n this.dragOffset = 0;\n const rawLeft = Math.min(\n Math.max(0, (mouseBarX / (barWidth - handleWidth)) * lastLeft),\n lastLeft\n );\n\n const {\n left: newLeft,\n leftOffset: newLeftOffset,\n } = GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(\n grid,\n rawLeft\n );\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true,\n });\n }\n\n return true;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.dragOffset != null) {\n const { x } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { barWidth, handleWidth, lastLeft, rowHeaderWidth } = metrics;\n const mouseBarX = x - rowHeaderWidth;\n\n const rawLeft = Math.min(\n Math.max(\n 0,\n ((mouseBarX - this.dragOffset) / (barWidth - handleWidth)) * lastLeft\n ),\n lastLeft\n );\n\n const {\n left: newLeft,\n leftOffset: newLeftOffset,\n } = GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(\n grid,\n rawLeft\n );\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true,\n });\n\n return true;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.isInScrollBar(gridPoint, grid);\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false,\n });\n }\n\n return this.isInScrollBar(gridPoint, grid);\n }\n\n onClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\n\nexport default GridHorizontalScrollBarMouseHandler;\n"],"file":"GridHorizontalScrollBarMouseHandler.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/mouse-handlers/GridHorizontalScrollBarMouseHandler.ts"],"names":["GridMouseHandler","GridHorizontalScrollBarMouseHandler","getLeftWithOffsetFromRawLeft","grid","rawLeft","theme","getTheme","metrics","metricCalculator","Error","scrollSnapToColumn","left","Math","round","leftOffset","floor","leftOffsetPercent","columnWidth","visibleColumnWidths","get","metricState","getMetricState","getVisibleColumnWidth","isInScrollBar","gridPoint","scrollBarSize","scrollBarHoverSize","x","y","lastLeft","lastTop","rowHeaderWidth","width","height","scrollBarWidth","onDown","barWidth","handleWidth","scrollX","mouseBarX","dragOffset","setState","isDraggingHorizontalScrollBar","min","max","newLeft","newLeftOffset","setViewState","isDragging","onDrag","onMove","onUp","undefined","onClick"],"mappings":"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","sourcesContent":["import { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport { VisibleIndex } from '../GridMetrics';\nimport GridMouseHandler from '../GridMouseHandler';\nimport { GridPoint } from '../GridUtils';\n\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n static getLeftWithOffsetFromRawLeft(\n grid: Grid,\n rawLeft: number\n ): { left: VisibleIndex; leftOffset: number } {\n const theme = grid.getTheme();\n const { metrics, metricCalculator } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n if (theme.scrollSnapToColumn) {\n const left = Math.round(rawLeft);\n const leftOffset = 0;\n\n return { left, leftOffset };\n }\n const left = Math.floor(rawLeft);\n const leftOffsetPercent = rawLeft - left;\n let columnWidth = metrics.visibleColumnWidths.get(left);\n if (columnWidth == null) {\n const metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n const leftOffset = columnWidth * leftOffsetPercent;\n\n return { left, leftOffset };\n }\n\n private dragOffset?: number;\n\n // to trigger pointer event blocking\n cursor = 'default';\n\n isInScrollBar(gridPoint: GridPoint, grid: Grid): boolean {\n const theme = grid.getTheme();\n\n const { scrollBarSize, scrollBarHoverSize } = theme;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { x, y } = gridPoint;\n const { lastLeft, lastTop, rowHeaderWidth, width, height } = metrics;\n const scrollBarWidth = lastTop > 0 ? width - scrollBarSize : width;\n return (\n scrollBarSize > 0 &&\n lastLeft > 0 &&\n y >= height - scrollBarHoverSize &&\n y < height &&\n x > rowHeaderWidth &&\n x < scrollBarWidth\n );\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { x } = gridPoint;\n const {\n barWidth,\n handleWidth,\n lastLeft,\n rowHeaderWidth,\n scrollX,\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n\n const mouseBarX = x - rowHeaderWidth;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({ isDraggingHorizontalScrollBar: true });\n } else {\n this.dragOffset = 0;\n const rawLeft = Math.min(\n Math.max(0, (mouseBarX / (barWidth - handleWidth)) * lastLeft),\n lastLeft\n );\n\n const {\n left: newLeft,\n leftOffset: newLeftOffset,\n } = GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(\n grid,\n rawLeft\n );\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true,\n });\n }\n\n return true;\n }\n\n onDrag(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.dragOffset != null) {\n const { x } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('metrics not set');\n\n const { barWidth, handleWidth, lastLeft, rowHeaderWidth } = metrics;\n const mouseBarX = x - rowHeaderWidth;\n\n const rawLeft = Math.min(\n Math.max(\n 0,\n ((mouseBarX - this.dragOffset) / (barWidth - handleWidth)) * lastLeft\n ),\n lastLeft\n );\n\n const {\n left: newLeft,\n leftOffset: newLeftOffset,\n } = GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(\n grid,\n rawLeft\n );\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true,\n });\n\n return true;\n }\n return false;\n }\n\n onMove(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.isInScrollBar(gridPoint, grid);\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false,\n });\n }\n\n return this.isInScrollBar(gridPoint, grid);\n }\n\n onClick(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\n\nexport default GridHorizontalScrollBarMouseHandler;\n"],"file":"GridHorizontalScrollBarMouseHandler.js"}
|