@deephaven/code-studio 1.10.2-lerna-v9.0 → 1.10.2
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/build/assets/{AppRoot-Dsp0-nx9.js → AppRoot-BY4a1UaK.js} +6 -6
- package/build/assets/{AppRoot-Dsp0-nx9.js.map → AppRoot-BY4a1UaK.js.map} +1 -1
- package/build/assets/{Chart-P_gTGGZ1.js → Chart-DmqNQtr3.js} +2 -2
- package/build/assets/{Chart-P_gTGGZ1.js.map → Chart-DmqNQtr3.js.map} +1 -1
- package/build/assets/{ControlType-lgZLQmfY.js → ControlType-RBsIk8KS.js} +4 -4
- package/build/assets/{ControlType-lgZLQmfY.js.map → ControlType-RBsIk8KS.js.map} +1 -1
- package/build/assets/{FormatterUtils-C9ixv8yB.js → FormatterUtils-C3xgIs6_.js} +2 -2
- package/build/assets/{FormatterUtils-C9ixv8yB.js.map → FormatterUtils-C3xgIs6_.js.map} +1 -1
- package/build/assets/{Grid-DQPrZJGB.js → Grid-B7dO0Sbi.js} +2 -2
- package/build/assets/{Grid-DQPrZJGB.js.map → Grid-B7dO0Sbi.js.map} +1 -1
- package/build/assets/{GridTokenMouseHandler-X2JErABm.js → GridTokenMouseHandler-Ds5xKqrO.js} +2 -2
- package/build/assets/{GridTokenMouseHandler-X2JErABm.js.map → GridTokenMouseHandler-Ds5xKqrO.js.map} +1 -1
- package/build/assets/{IrisGrid-m82zJTmT.js → IrisGrid-CFqfz-_M.js} +2 -2
- package/build/assets/{IrisGrid-m82zJTmT.js.map → IrisGrid-CFqfz-_M.js.map} +1 -1
- package/build/assets/{IrisGridModel-BWX_u8pv.js → IrisGridModel-CfNBLna8.js} +3 -3
- package/build/assets/{IrisGridModel-BWX_u8pv.js.map → IrisGridModel-CfNBLna8.js.map} +1 -1
- package/build/assets/{IrisGridShortcuts-QN2zgZUQ.js → IrisGridShortcuts-Bw5ADLgT.js} +2 -2
- package/build/assets/{IrisGridShortcuts-QN2zgZUQ.js.map → IrisGridShortcuts-Bw5ADLgT.js.map} +1 -1
- package/build/assets/{IrisGridThemeProvider-DtrPDGfJ.js → IrisGridThemeProvider-CggmgZiA.js} +2 -2
- package/build/assets/{IrisGridThemeProvider-DtrPDGfJ.js.map → IrisGridThemeProvider-CggmgZiA.js.map} +1 -1
- package/build/assets/{LocalWorkspaceStorage-C6dxwi4z.js → LocalWorkspaceStorage-DXAI74vd.js} +2 -2
- package/build/assets/{LocalWorkspaceStorage-C6dxwi4z.js.map → LocalWorkspaceStorage-DXAI74vd.js.map} +1 -1
- package/build/assets/{MarkdownEditor-B4WFJDBT.js → MarkdownEditor-CjiUT8XD.js} +2 -2
- package/build/assets/{MarkdownEditor-B4WFJDBT.js.map → MarkdownEditor-CjiUT8XD.js.map} +1 -1
- package/build/assets/{MarkdownNotebook-Bw-fDcJ8.js → MarkdownNotebook-CsCP6Muy.js} +2 -2
- package/build/assets/{MarkdownNotebook-Bw-fDcJ8.js.map → MarkdownNotebook-CsCP6Muy.js.map} +1 -1
- package/build/assets/{MissingPartitionError-Cw7iLwy0.js → MissingPartitionError-DXkc6F4C.js} +2 -2
- package/build/assets/{MissingPartitionError-Cw7iLwy0.js.map → MissingPartitionError-DXkc6F4C.js.map} +1 -1
- package/build/assets/{MockChartModel-C5m_XRVw.js → MockChartModel-B0Gv2sr1.js} +2 -2
- package/build/assets/{MockChartModel-C5m_XRVw.js.map → MockChartModel-B0Gv2sr1.js.map} +1 -1
- package/build/assets/{StyleGuideRoot-DGm-hysw.js → StyleGuideRoot-BAYFLFTM.js} +2 -2
- package/build/assets/{StyleGuideRoot-DGm-hysw.js.map → StyleGuideRoot-BAYFLFTM.js.map} +1 -1
- package/build/assets/{index-LXmN419B.js → index-Bjvh6jhx.js} +4 -4
- package/build/assets/{index-LXmN419B.js.map → index-Bjvh6jhx.js.map} +1 -1
- package/build/assets/{index-CqIl8EDR.js → index-CVle8e1T.js} +2 -2
- package/build/assets/{index-CqIl8EDR.js.map → index-CVle8e1T.js.map} +1 -1
- package/build/assets/{index-DmVB6hX1.js → index-Cwc_E41j.js} +3 -3
- package/build/assets/{index-DmVB6hX1.js.map → index-Cwc_E41j.js.map} +1 -1
- package/build/index.html +2 -2
- package/package.json +31 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid-DQPrZJGB.js","sources":["../../../utils/dist/ObjectUtils.js","../../../grid/dist/errors/assertIsDefined.js","../../../grid/dist/errors/PasteError.js","../../../grid/dist/mouse-handlers/GridColumnMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowSeparatorMouseHandler.js","../../../grid/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js","../../../grid/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/EditMouseHandler.js","../../../grid/dist/KeyHandler.js","../../../grid/dist/key-handlers/SelectionKeyHandler.js","../../../grid/dist/key-handlers/TreeKeyHandler.js","../../../grid/dist/key-handlers/EditKeyHandler.js","../../../grid/dist/key-handlers/PasteKeyHandler.js","../../../grid/dist/CellInputField.js","../../../grid/dist/ThemeContext.js","../../../grid/dist/Grid.js"],"sourcesContent":["/**\n * Get the keys that have changed between two objects.\n * @param oldObject Old object to compare\n * @param newObject New object to compare\n * @returns Array of keys that have changed\n */\nexport function getChangedKeys(oldObject, newObject) {\n var keys = new Set([...Object.keys(oldObject), ...Object.keys(newObject)]);\n var changedKeys = [];\n keys.forEach(key => {\n if (oldObject[key] !== newObject[key]) {\n changedKeys.push(key);\n }\n });\n return changedKeys;\n}\nexport default {\n getChangedKeys\n};\n//# sourceMappingURL=ObjectUtils.js.map","import AssertionError from \"./AssertionError.js\";\nexport function assertIsDefined(val) {\n if (val === undefined || val === null) {\n throw new AssertionError(\"Expected 'val' to be defined, but received \".concat(val));\n }\n}\nexport default assertIsDefined;\n//# sourceMappingURL=assertIsDefined.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class PasteError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isPasteError\", true);\n }\n}\nexport default PasteError;\n//# sourceMappingURL=PasteError.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { assertNotNull } from '@deephaven/utils';\nimport GridUtils from \"../GridUtils.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nvar SLOPPY_CLICK_DISTANCE = 5;\nvar SCROLL_INTERVAL = 1000 / 60;\nvar SCROLL_DELTA = 10;\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(visibleIndex, depth, metrics, model) {\n var _modelColumns$get;\n var {\n modelColumns,\n movedColumns,\n allColumnXs,\n columnCount,\n allColumnWidths,\n userColumnWidths,\n calculatedColumnWidths,\n floatingLeftWidth,\n maxX\n } = metrics;\n if (depth == null || visibleIndex == null || visibleIndex > columnCount || visibleIndex < 0) {\n return null;\n }\n var modelIndex = (_modelColumns$get = modelColumns.get(visibleIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(visibleIndex, movedColumns);\n var group = model.getColumnHeaderGroup(modelIndex, depth);\n var isColumnGroup = group != null;\n var left;\n var right;\n var range;\n if (group != null) {\n var _allColumnXs$get, _allColumnXs$get2, _allColumnWidths$get;\n var [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(movedColumns);\n left = (_allColumnXs$get = allColumnXs.get(startVisibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : floatingLeftWidth;\n right = ((_allColumnXs$get2 = allColumnXs.get(endVisibleIndex)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : maxX) + ((_allColumnWidths$get = allColumnWidths.get(endVisibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n var _ref, _ref2, _allColumnWidths$get2;\n var possibleLeft = allColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n left = possibleLeft;\n right = left + ((_ref = (_ref2 = (_allColumnWidths$get2 = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : userColumnWidths.get(modelIndex)) !== null && _ref2 !== void 0 ? _ref2 : calculatedColumnWidths.get(modelIndex)) !== null && _ref !== void 0 ? _ref : 0);\n range = [visibleIndex, visibleIndex];\n }\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth\n };\n}\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", null);\n _defineProperty(this, \"draggingOffset\", void 0);\n _defineProperty(this, \"initialOffset\", void 0);\n _defineProperty(this, \"initialGridPoint\", void 0);\n _defineProperty(this, \"scrollingInterval\", void 0);\n _defineProperty(this, \"scrollingDirection\", void 0);\n _defineProperty(this, \"draggingColumn\", null);\n }\n setScrollInterval(grid, direction) {\n if (this.scrollingInterval != null && direction === this.scrollingDirection) {\n return;\n }\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n var {\n metrics\n } = grid;\n if (!metrics) {\n return;\n }\n var {\n left,\n lastLeft,\n leftOffset,\n userColumnWidths,\n calculatedColumnWidths,\n movedColumns,\n allColumnWidths\n } = metrics;\n var nextLeft = left;\n var nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n var _userColumnWidths$get;\n nextLeft -= 1;\n var modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n var prevColumnWidth = (_userColumnWidths$get = userColumnWidths.get(modelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n var leftColumnWidth = allColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n var _userColumnWidths$get2;\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n var _modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth = (_userColumnWidths$get2 = userColumnWidths.get(_modelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : calculatedColumnWidths.get(_modelIndex);\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (metrics == null || mouseX == null || mouseY == null) {\n return;\n }\n this.moveDraggingColumn(mouseX, grid, direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA);\n grid.setState({\n left: nextLeft,\n leftOffset: nextOffset\n });\n if (direction === 'left' && nextLeft === 0 && leftOffset === 0 || direction === 'right' && nextLeft === lastLeft) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n clearScrollInterval() {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n onLeave() {\n this.clearScrollInterval();\n return false;\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n column,\n columnHeaderDepth\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\n var columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n var {\n rowHeaderWidth\n } = metrics;\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n if (columnInfo.modelIndex != null && columnHeaderDepth != null && model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n onDrag(gridPoint, grid, event) {\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined) {\n return false;\n }\n var {\n x: mouseX,\n y: mouseY\n } = gridPoint;\n var {\n columnHeaderDepth\n } = this.initialGridPoint;\n var {\n model\n } = grid.props;\n var {\n draggingColumn\n } = this;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\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 (!draggingColumn && Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE && Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n var initialColumnInfo = getColumnInfo(this.initialGridPoint.column, columnHeaderDepth, metrics, model);\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width\n };\n var startColumn = getColumnInfo(draggingColumn.range[0], 0, metrics, model);\n var endColumn = getColumnInfo(draggingColumn.range[1], 0, metrics, model);\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n this.draggingColumn = draggingColumn;\n grid.setState({\n draggingColumn,\n isDragging: true\n });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX, grid, deltaX) {\n var _draggingParentGroup$;\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined || this.draggingColumn == null || deltaX === 0) {\n return;\n }\n var {\n metrics\n } = grid;\n assertNotNull(metrics, 'Metrics not set');\n var {\n gridX\n } = metrics;\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (this.draggingOffset < this.initialOffset && this.initialOffset < this.draggingOffset + deltaX || this.draggingOffset > this.initialOffset && this.initialOffset > this.draggingOffset + deltaX) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n var {\n depth: draggingColumnDepth\n } = this.draggingColumn;\n var {\n model\n } = grid.props;\n var {\n movedColumns\n } = grid.state;\n var {\n floatingLeftWidth,\n width,\n columnHeaderMaxDepth,\n allColumnXs\n } = metrics;\n var isDraggingLeft = deltaX < 0;\n var draggingColumn = getColumnInfo(this.draggingColumn.range[0], draggingColumnDepth, metrics, model);\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n var floatingDraggingLeft = mouseX - this.draggingOffset - gridX;\n var floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n var swapColumn = getColumnInfo(GridUtils.getColumnAtX(clamp(isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight, floatingLeftWidth, width) + gridX, metrics, true), draggingColumnDepth, metrics, model);\n var parentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup !== undefined) {\n var parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n var _allColumnXs$get3;\n var _newMovedColumns = this.moveColumn(draggingColumn, parentVisibleRange[0], movedColumns);\n this.draggingOffset = mouseX - ((_allColumnXs$get3 = allColumnXs.get(parentVisibleRange[0])) !== null && _allColumnXs$get3 !== void 0 ? _allColumnXs$get3 : 0);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n var _getColumnInfo;\n var _newMovedColumns2 = this.moveColumn(draggingColumn, parentVisibleRange[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n var {\n right: parentRight = 0\n } = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {};\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns2\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n var toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (toVisibleIndex < draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (toVisibleIndex > draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex -= 1;\n }\n }\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n var _newMovedColumns3 = this.moveColumn(draggingColumn, toVisibleIndex, movedColumns);\n grid.setState({\n movedColumns: _newMovedColumns3,\n draggingColumn: this.draggingColumn\n });\n }\n var toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n var _toColumnInfo$left;\n this.draggingOffset = mouseX - ((_toColumnInfo$left = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.left) !== null && _toColumnInfo$left !== void 0 ? _toColumnInfo$left : 0);\n } else {\n var _toColumnInfo$right;\n this.draggingOffset = mouseX - (((_toColumnInfo$right = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.right) !== null && _toColumnInfo$right !== void 0 ? _toColumnInfo$right : 0) - draggingColumn.width);\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (isDraggingLeft && draggingColumn.visibleIndex < swapColumn.visibleIndex || !isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex) {\n return;\n }\n var switchPoint = swapColumn.left + swapColumn.width * 0.5;\n var draggingParentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n var maxDepthSwapGroup;\n var maxSwapDepth = ((_draggingParentGroup$ = draggingParentGroup === null || draggingParentGroup === void 0 ? void 0 : draggingParentGroup.depth) !== null && _draggingParentGroup$ !== void 0 ? _draggingParentGroup$ : columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(swapColumn.modelIndex, maxSwapDepth);\n maxSwapDepth -= 1;\n }\n var newMovedColumns;\n if (isDraggingLeft && floatingDraggingLeft < switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[0])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[0], movedColumns);\n }\n if (!isDraggingLeft && floatingDraggingRight > switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[1])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n }\n if (!newMovedColumns) {\n return;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(draggingColumn, to, movedColumns) {\n var newMovedColumns = draggingColumn.isColumnGroup ? GridUtils.moveRange(draggingColumn.range, to, movedColumns) : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n var moveDistance = to - draggingColumn.range[0];\n var newDraggingRange = [draggingColumn.range[0] + moveDistance, draggingColumn.range[1] + moveDistance];\n if (this.draggingColumn) {\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n range: newDraggingRange\n });\n }\n return newMovedColumns;\n }\n onUp(gridPoint, grid) {\n this.cursor = null;\n this.clearScrollInterval();\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridColumnMoveMouseHandler;\n//# sourceMappingURL=GridColumnMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getLeftWithOffsetFromRawLeft(grid, rawLeft) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToColumn) {\n var _left = Math.round(rawLeft);\n var _leftOffset = 0;\n return {\n left: _left,\n leftOffset: _leftOffset\n };\n }\n var left = Math.floor(rawLeft);\n var leftOffsetPercent = rawLeft - left;\n var columnWidth = metrics.allColumnWidths.get(left);\n if (columnWidth == null) {\n var metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n var leftOffset = columnWidth * leftOffsetPercent;\n return {\n left,\n leftOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barLeft,\n barWidth,\n height,\n hasHorizontalBar\n } = metrics;\n return hasHorizontalBar && scrollBarSize > 0 && y >= height - scrollBarHoverSize && y < height && x > barLeft && x < barLeft + barWidth;\n }\n getLeftWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n barWidth,\n handleWidth,\n lastLeft,\n barLeft,\n columnCount,\n scrollableContentWidth,\n scrollableViewportWidth\n } = metrics;\n var mouseBarX = x - barLeft;\n var scrollPercent = clamp((mouseBarX - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barWidth - handleWidth), 0, 1);\n if (columnCount === 1) {\n return {\n left: 0,\n leftOffset: scrollPercent * (scrollableContentWidth - scrollableViewportWidth)\n };\n }\n var rawLeft = scrollPercent * lastLeft;\n return GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(grid, rawLeft);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n handleWidth,\n barLeft,\n scrollX\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarX = x - barLeft;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({\n isDraggingHorizontalScrollBar: true\n });\n } else {\n this.dragOffset = 0;\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridHorizontalScrollBarMouseHandler;\n//# sourceMappingURL=GridHorizontalScrollBarMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\nclass GridRowMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", 'move');\n _defineProperty(this, \"draggingOffset\", void 0);\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n y,\n row\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n columnHeaderHeight,\n rowHeaderWidth,\n allRowYs\n } = metrics;\n if (x <= rowHeaderWidth && row !== null && model.isRowMovable(row)) {\n var rowY = getOrThrow(allRowYs, row);\n this.draggingOffset = y - rowY - columnHeaderHeight;\n grid.setState({\n draggingRowOffset: this.draggingOffset\n });\n }\n return false;\n }\n onDrag(gridPoint, grid) {\n if (this.draggingOffset == null) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n draggingRow\n } = grid.state;\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n if (draggingRow == null) {\n var {\n row\n } = grid.getGridPointFromXY(mouseX, mouseY);\n if (row != null && !model.isRowMovable(row)) {\n return false;\n }\n draggingRow = row;\n grid.setState({\n draggingRow,\n isDragging: true\n });\n if (draggingRow == null) {\n return false;\n }\n }\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n top,\n lastTop,\n bottom,\n bottomVisible,\n rowCount,\n columnHeaderHeight,\n allRowHeights,\n allRowYs,\n height\n } = metrics;\n var minY = columnHeaderHeight;\n if (top < draggingRow) {\n var topRow = draggingRow - 1;\n minY = getOrThrow(allRowYs, topRow) + getOrThrow(allRowHeights, topRow) * 0.5 + columnHeaderHeight;\n }\n var maxY = height;\n if (draggingRow < bottom) {\n var bottomRow = draggingRow + 1;\n maxY = getOrThrow(allRowYs, bottomRow) + getOrThrow(allRowHeights, bottomRow) * 0.5 + columnHeaderHeight;\n }\n var {\n movedRows\n } = grid.state;\n if (mouseY < minY && draggingRow > 0 && model.isRowMovable(draggingRow - 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow - 1, movedRows);\n draggingRow -= 1;\n } else if (maxY < mouseY && draggingRow < rowCount - 1 && model.isRowMovable(draggingRow + 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow + 1, movedRows);\n draggingRow += 1;\n }\n grid.setState({\n movedRows,\n draggingRow\n });\n var minMoveY = columnHeaderHeight + getOrThrow(allRowHeights, top) * 0.5;\n var maxMoveY = columnHeaderHeight + getOrThrow(allRowYs, bottomVisible) + getOrThrow(allRowHeights, bottomVisible) * 0.5;\n if (mouseY < minMoveY && top > 0) {\n grid.setState({\n top: top - 1\n });\n } else if (mouseY > maxMoveY && top < lastTop) {\n grid.setState({\n top: top + 1\n });\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.draggingOffset !== undefined) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingRowOffset: null,\n draggingRow: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridRowMoveMouseHandler;\n//# sourceMappingURL=GridRowMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridSeparatorMouseHandler from \"./GridSeparatorMouseHandler.js\";\nclass GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"hiddenCursor\", 's-resize');\n _defineProperty(this, \"defaultCursor\", 'row-resize');\n _defineProperty(this, \"pointProperty\", 'y');\n _defineProperty(this, \"userSizesProperty\", 'userRowHeights');\n _defineProperty(this, \"visibleOffsetProperty\", 'visibleRowYs');\n _defineProperty(this, \"visibleSizesProperty\", 'visibleRowHeights');\n _defineProperty(this, \"marginProperty\", 'columnHeaderHeight');\n _defineProperty(this, \"calculatedSizesProperty\", 'calculatedRowHeights');\n _defineProperty(this, \"initialSizesProperty\", 'initialRowHeights');\n _defineProperty(this, \"modelIndexesProperty\", 'modelRows');\n _defineProperty(this, \"firstIndexProperty\", 'firstRow');\n _defineProperty(this, \"treePaddingProperty\", 'treePaddingY');\n _defineProperty(this, \"getHiddenItems\", GridUtils.getHiddenRows);\n _defineProperty(this, \"getNextShownItem\", GridUtils.getNextShownRow);\n _defineProperty(this, \"getSeparator\", GridRowSeparatorMouseHandler.getRowSeparator);\n }\n static getRowSeparator(gridPoint, metrics, model, theme) {\n if (!theme.allowRowResize) {\n return null;\n }\n var {\n x,\n y\n } = gridPoint;\n var index = GridUtils.getRowSeparatorIndex(x, y, metrics, theme);\n return index != null ? {\n index,\n depth: 0\n } : null;\n }\n setSize(metricCalculator, modelIndex, size) {\n metricCalculator.setRowHeight(modelIndex, size);\n }\n resetSize(metricCalculator, modelIndex) {\n metricCalculator.resetRowHeight(modelIndex);\n }\n updateSeparator(grid, separator) {\n grid.setState({\n draggingRowSeparator: separator,\n isDragging: separator !== null\n });\n }\n}\nexport default GridRowSeparatorMouseHandler;\n//# sourceMappingURL=GridRowSeparatorMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass GridScrollBarCornerMouseHandler extends GridMouseHandler {\n isInCorner(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n width,\n height,\n hasVerticalBar,\n hasHorizontalBar\n } = metrics;\n return scrollBarSize > 0 && hasVerticalBar && hasHorizontalBar && x >= width - scrollBarSize && y >= height - scrollBarSize && x <= width && y <= height;\n }\n onDown(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n}\nexport default GridScrollBarCornerMouseHandler;\n//# sourceMappingURL=GridScrollBarCornerMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridVerticalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getTopWithOffsetFromRawTop(grid, rawTop) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToRow) {\n var _top = Math.round(rawTop);\n var _topOffset = 0;\n return {\n top: _top,\n topOffset: _topOffset\n };\n }\n var top = Math.floor(rawTop);\n var topOffsetPercent = rawTop - top;\n var rowHeight = metrics.allRowHeights.get(top);\n if (rowHeight == null) {\n var metricState = grid.getMetricState();\n rowHeight = metricCalculator.getVisibleRowHeight(top, metricState);\n }\n var topOffset = rowHeight * topOffsetPercent;\n return {\n top,\n topOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barTop,\n barHeight,\n width,\n hasVerticalBar\n } = metrics;\n return hasVerticalBar && scrollBarSize > 0 && x >= width - scrollBarHoverSize && x < width && y > barTop && y < barTop + barHeight;\n }\n getTopWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n barHeight,\n handleHeight,\n lastTop,\n barTop,\n rowCount,\n scrollableContentHeight,\n scrollableViewportHeight\n } = metrics;\n var mouseBarY = y - barTop;\n var scrollPercent = clamp((mouseBarY - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barHeight - handleHeight), 0, 1);\n if (rowCount === 1) {\n return {\n top: 0,\n topOffset: scrollPercent * (scrollableContentHeight - scrollableViewportHeight)\n };\n }\n var rawTop = scrollPercent * lastTop;\n return GridVerticalScrollBarMouseHandler.getTopWithOffsetFromRawTop(grid, rawTop);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n handleHeight,\n barTop,\n scrollY\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarY = y - barTop;\n if (mouseBarY >= scrollY && mouseBarY <= scrollY + handleHeight) {\n // Grabbed the vertical handle\n this.dragOffset = mouseBarY - scrollY;\n grid.setState({\n isDraggingVerticalScrollBar: true\n });\n } else {\n // clicked elsewhere in bar\n this.dragOffset = 0;\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingVerticalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridVerticalScrollBarMouseHandler;\n//# sourceMappingURL=GridVerticalScrollBarMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick(_ref, grid) {\n var {\n column,\n row\n } = _ref;\n var {\n model\n } = grid.props;\n if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\nexport default EditMouseHandler;\n//# sourceMappingURL=EditMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* 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\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 */\n\nexport class KeyHandler {\n // What order this key handler should trigger in\n // Default to well below any of the GRID key handlers 100-1000+\n constructor() {\n var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;\n _defineProperty(this, \"order\", void 0);\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\n _defineProperty(this, \"cursor\", null);\n this.order = order;\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, grid) {\n return false;\n }\n\n /**\n * Handle a keyup 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 onUp(event, grid) {\n return false;\n }\n}\nexport default KeyHandler;\n//# sourceMappingURL=KeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport GridRange from \"../GridRange.js\";\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L':\n {\n if (GridUtils.isModifierKeyDown(event)) return false;\n var {\n model\n } = grid.props;\n var {\n columnCount\n } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow, event.shiftKey);\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0, GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n case 'End':\n {\n var {\n model: _model\n } = grid.props;\n var {\n columnCount: _columnCount,\n rowCount\n } = _model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : _columnCount - 1, GridUtils.isModifierKeyDown(event) ? rowCount - 1 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n }\n case 'Escape':\n if (grid.state.selectedRanges.length === 0) return false;\n grid.clearSelectedRanges();\n // consume the event, and stop propagation only if there were selected ranges to clear\n return {\n preventDefault: false,\n stopPropagation: true\n };\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n handleArrowMove(deltaColumn, deltaRow, event, grid) {\n var isShiftKey = event.shiftKey;\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = grid.state;\n var column = isShiftKey ? selectionEndColumn : cursorColumn;\n var row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n var {\n model\n } = grid.props;\n var {\n columnCount,\n rowCount\n } = model;\n var maximizePreviousRange = isModifierKey && isShiftKey;\n var moveToColumn = null;\n var moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n var {\n theme\n } = grid.props;\n var {\n autoSelectRow = false,\n autoSelectColumn = false\n } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n var {\n lastLeft\n } = grid.metrics;\n var {\n left\n } = grid.state;\n left = clamp(left + deltaColumn, 0, lastLeft);\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n grid.setViewState({\n left\n });\n } else if (autoSelectColumn && deltaRow !== 0) {\n var {\n lastTop\n } = grid.metrics;\n var {\n top\n } = grid.state;\n top = clamp(top + deltaRow, 0, lastTop);\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n grid.setViewState({\n top\n });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n handlePageUp(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorColumn,\n selectionEndRow\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row == null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar\n } = metricCalculator.getMetrics(metricState);\n var selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n var viewportPosition = Math.max(selectRangeEndPosition - (row - topVisible), 0);\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n handlePageDown(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n selectionEndRow,\n cursorColumn\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row === null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop\n } = metricCalculator.getMetrics(metricState);\n var lastRowIndex = rowCount - 1;\n var selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n}\nexport default SelectionKeyHandler;\n//# sourceMappingURL=SelectionKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isExpandableGridModel } from \"../ExpandableGridModel.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass TreeKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n {\n return this.handleExpandKey(event, grid);\n }\n default:\n break;\n }\n return false;\n }\n handleExpandKey(event, grid) {\n var {\n selectedRanges\n } = grid.state;\n if (selectedRanges.length === 1) {\n var range = selectedRanges[0];\n if (range.startRow === range.endRow && range.startColumn === range.endColumn) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n var {\n model\n } = grid.props;\n var {\n startRow: row,\n startColumn: column\n } = range;\n if (row != null) {\n var modelRow = grid.getModelRow(row);\n if ((column === 0 || column == null) && isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\nexport default TreeKeyHandler;\n//# sourceMappingURL=TreeKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridRange from \"../GridRange.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nclass EditKeyHandler extends KeyHandler {\n onDown(event, grid) {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n cursorColumn,\n cursorRow\n } = grid.state;\n if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model) || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {\n return false;\n }\n var column = cursorColumn;\n var row = cursorRow;\n if (column == null || row == null) {\n return false;\n }\n if (event.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], event.key);\n return true;\n }\n if (event.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n if (event.key === 'Backspace') {\n grid.startEditing(column, row, true, undefined, '');\n return true;\n }\n if (event.key === 'Delete') {\n grid.setValueForCell(column, row, '');\n return true;\n }\n return false;\n }\n}\nexport default EditKeyHandler;\n//# sourceMappingURL=EditKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table) {\n var data = [];\n var rows = table.querySelectorAll('tr');\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var cells = row.querySelectorAll('td');\n var rowData = [];\n for (var c = 0; c < cells.length; c += 1) {\n var _cell$textContent$tri, _cell$textContent;\n var cell = cells[c];\n rowData.push((_cell$textContent$tri = (_cell$textContent = cell.textContent) === null || _cell$textContent === void 0 ? void 0 : _cell$textContent.trim()) !== null && _cell$textContent$tri !== void 0 ? _cell$textContent$tri : '');\n }\n data.push(rowData);\n }\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes) {\n var result = [];\n nodes.forEach(node => {\n var _node$textContent;\n var text = (_node$textContent = node.textContent) !== null && _node$textContent !== void 0 ? _node$textContent : '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\nexport function parseValueFromElement(element) {\n var _element$textContent$, _element$textContent;\n // Check first if there's an HTML table element that we can use\n var table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n var text = (_element$textContent$ = (_element$textContent = element.textContent) === null || _element$textContent === void 0 ? void 0 : _element$textContent.trim()) !== null && _element$textContent$ !== void 0 ? _element$textContent$ : '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n var {\n childNodes\n } = element;\n var hasTabChar = text.includes('\\t');\n var hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (hasTabChar && childNodes.length !== 0 && (childNodes.length === 1 || childNodes.length > 1 && (childNodes[0].textContent == null || !childNodes[0].textContent.includes('\\t')))) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n var dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute('style', 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;');\n var listener = () => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n grid.focus();\n var value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return {\n preventDefault: false,\n stopPropagation: true\n };\n }\n break;\n }\n return false;\n }\n}\nexport default PasteKeyHandler;\n//# sourceMappingURL=PasteKeyHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport \"./CellInputField.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar directionForKey = key => {\n switch (key) {\n case 'ArrowDown':\n return SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return SELECTION_DIRECTION.RIGHT;\n default:\n return undefined;\n }\n};\nexport function CellInputField(_ref) {\n var {\n selectionRange,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = EMPTY_FUNCTION,\n onCancel = EMPTY_FUNCTION,\n onDone = EMPTY_FUNCTION,\n onContextMenu = EMPTY_FUNCTION,\n style\n } = _ref;\n var inputField = useRef(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n var isCancelled = useRef(false);\n var [initialValue] = useState(propsValue);\n var [isChanged, setIsChanged] = useState(false);\n var [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n var [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(function selectInputField() {\n var {\n current: field\n } = inputField;\n if (field == null) {\n return;\n }\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n }, [selectionRange]);\n var sendUpdate = useCallback(newValue => {\n onChange(newValue);\n }, [onChange]);\n var handleChange = useCallback(event => {\n var {\n value: newValue\n } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n }, [sendUpdate, setValue, setIsChanged]);\n var handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n var handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n var handleCommit = useCallback(function (direction) {\n var fillRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n onDone(value, {\n direction,\n fillRange\n });\n }, [onDone, value]);\n var handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n var handleKeyDown = useCallback(event => {\n event.stopPropagation();\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(undefined, true);\n } else if (event.altKey) {\n var newValue = \"\".concat(value, \"\\n\");\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.UP : SELECTION_DIRECTION.DOWN);\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.LEFT : SELECTION_DIRECTION.RIGHT);\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n }, [handleCancel, handleCommit, isQuickEdit, setValue, setIsChanged, sendUpdate, value]);\n var handleContextMenu = useCallback(event => {\n onContextMenu(event);\n }, [onContextMenu]);\n return /*#__PURE__*/_jsx(\"textarea\", {\n ref: inputField,\n className: classNames('grid-cell-input-field', className),\n value: value,\n onBlur: handleBlur,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n onContextMenu: handleContextMenu,\n onClick: handleClick,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\",\n disabled: disabled,\n style: style\n });\n}\nexport default CellInputField;\n//# sourceMappingURL=CellInputField.js.map","import React from 'react';\nexport var ThemeContext = /*#__PURE__*/React.createContext({});\nexport default ThemeContext;\n//# sourceMappingURL=ThemeContext.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY, getChangedKeys } from '@deephaven/utils';\nimport GridMetricCalculator from \"./GridMetricCalculator.js\";\nimport GridTheme from \"./GridTheme.js\";\nimport GridRange, { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridRenderer from \"./GridRenderer.js\";\nimport GridUtils, { isLinkToken } from \"./GridUtils.js\";\nimport { GridSelectionMouseHandler, GridColumnMoveMouseHandler, GridColumnSeparatorMouseHandler, GridHorizontalScrollBarMouseHandler, GridRowMoveMouseHandler, GridRowSeparatorMouseHandler, GridRowTreeMouseHandler, GridScrollBarCornerMouseHandler, GridVerticalScrollBarMouseHandler, EditMouseHandler, GridTokenMouseHandler } from \"./mouse-handlers/index.js\";\nimport \"./Grid.css\";\nimport { EditKeyHandler, PasteKeyHandler, SelectionKeyHandler, TreeKeyHandler } from \"./key-handlers/index.js\";\nimport CellInputField from \"./CellInputField.js\";\nimport PasteError from \"./errors/PasteError.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { assertIsEditableGridModel, isEditableGridModel } from \"./EditableGridModel.js\";\nimport { assertIsDefined } from \"./errors/index.js\";\nimport ThemeContext from \"./ThemeContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent {\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context) {\n var _ref, _ref2, _ref3, _ref4, _legacyContext$webkit;\n var devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n var legacyContext = context;\n var backingStorePixelRatio = // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n (_ref = (_ref2 = (_ref3 = (_ref4 = (_legacyContext$webkit = legacyContext.webkitBackingStorePixelRatio) !== null && _legacyContext$webkit !== void 0 ? _legacyContext$webkit : legacyContext.mozBackingStorePixelRatio) !== null && _ref4 !== void 0 ? _ref4 : legacyContext.msBackingStorePixelRatio) !== null && _ref3 !== void 0 ? _ref3 : legacyContext.oBackingStorePixelRatio) !== null && _ref2 !== void 0 ? _ref2 : legacyContext.backingStorePixelRatio) !== null && _ref !== void 0 ? _ref : 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor) {\n return cursor != null && cursor !== '' ? \"grid-cursor-\".concat(cursor) : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n\n /* eslint-enable react/sort-comp */\n\n constructor(props) {\n super(props);\n _defineProperty(this, \"renderer\", void 0);\n _defineProperty(this, \"metricCalculator\", void 0);\n _defineProperty(this, \"canvas\", void 0);\n _defineProperty(this, \"canvasContext\", void 0);\n // The wrapper element for the canvas, used for sizing\n _defineProperty(this, \"canvasWrapper\", void 0);\n // Listen for resizing of the element and update the canvas appropriately\n _defineProperty(this, \"resizeObserver\", void 0);\n // We draw the canvas on the next animation frame, keep track of the next one\n _defineProperty(this, \"animationFrame\", void 0);\n // Keep track of previous metrics and new metrics for comparison\n _defineProperty(this, \"prevMetrics\", void 0);\n _defineProperty(this, \"metrics\", void 0);\n _defineProperty(this, \"renderState\", void 0);\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n _defineProperty(this, \"documentCursor\", void 0);\n _defineProperty(this, \"dragTimer\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].sort((a, b) => a.order - b.order)));\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.notifyKeyboardHandlers = this.notifyKeyboardHandlers.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n var {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer\n } = props;\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n this.canvas = null;\n this.canvasContext = null;\n this.canvasWrapper = /*#__PURE__*/React.createRef();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.animationFrame = null;\n this.prevMetrics = null;\n this.metrics = null;\n this.renderState = {};\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [new EditKeyHandler(400), new PasteKeyHandler(450), new SelectionKeyHandler(500), new TreeKeyHandler(900)];\n this.mouseHandlers = [new GridRowSeparatorMouseHandler(100), new GridColumnSeparatorMouseHandler(200), new GridRowMoveMouseHandler(300), new GridColumnMoveMouseHandler(400), new EditMouseHandler(450), new GridVerticalScrollBarMouseHandler(500), new GridHorizontalScrollBarMouseHandler(600), new GridScrollBarCornerMouseHandler(700), new GridRowTreeMouseHandler(800), new GridTokenMouseHandler(875), new GridSelectionMouseHandler(900)];\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n // Offset when dragging a row\n draggingRowOffset: null,\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n isStuckToBottom,\n isStuckToRight,\n /** What revision the grid is drawing. Automatically increments when a forceUpdate is called. */\n updateRevision: 0\n };\n }\n componentDidMount() {\n var _this$canvas;\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n (_this$canvas = this.canvas) === null || _this$canvas === void 0 || _this$canvas.addEventListener('wheel', this.handleWheel, {\n passive: false\n });\n if (this.canvasWrapper.current != null) {\n this.resizeObserver.observe(this.canvasWrapper.current);\n }\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n var {\n isStuckToBottom,\n isStuckToRight\n } = this.props;\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStuckToBottom, isStuckToRight);\n this.setState({\n top,\n left\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n renderError\n } = this.state;\n\n // Render errors mean we can't recover\n if (renderError != null) {\n throw renderError;\n }\n var changedProps = getChangedKeys(prevProps, this.props);\n var changedState = getChangedKeys(prevState, this.state);\n // We don't need to bother re-checking any of the metrics if no props have changed or only the children have changed\n if ((changedProps.length === 0 || changedProps.length === 1 && changedProps[0] === 'children') && changedState.length === 0) {\n return;\n }\n var {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete\n } = this.props;\n var {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows\n } = prevProps;\n var {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows\n } = prevState;\n var {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows\n } = this.state;\n var stateUpdates = {};\n if (prevPropMovedColumns !== movedColumns) {\n stateUpdates.movedColumns = movedColumns;\n }\n if (prevPropMovedRows !== movedRows) {\n stateUpdates.movedRows = movedRows;\n }\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n if (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n if (isStickyBottom !== prevIsStickyBottom) {\n stateUpdates.isStuckToBottom = false;\n }\n if (isStickyRight !== prevIsStickyRight) {\n stateUpdates.isStuckToRight = false;\n }\n var updatedState = _objectSpread(_objectSpread({}, this.state), stateUpdates);\n this.updateMetrics(updatedState);\n this.requestUpdateCanvas();\n if (this.needToUpdateScroll()) {\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStickyBottom, isStickyRight);\n updatedState.top = top;\n updatedState.left = left;\n }\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n this.setState(updatedState);\n }\n componentWillUnmount() {\n var _this$canvas2;\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n (_this$canvas2 = this.canvas) === null || _this$canvas2 === void 0 || _this$canvas2.removeEventListener('wheel', this.handleWheel);\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n this.resizeObserver.disconnect();\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n getTheme() {\n var {\n theme\n } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n getGridPointFromEvent(event) {\n assertIsDefined(this.canvas);\n var rect = this.canvas.getBoundingClientRect();\n var x = event.clientX - rect.left;\n var y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n getGridPointFromXY(x, y) {\n if (!this.metrics) throw new Error('metrics must be set');\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n getMetricState() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n var theme = this.getTheme();\n var {\n model,\n stateOverride\n } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\n var context = this.canvasContext;\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n var {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n } = state;\n return _objectSpread({\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n }, stateOverride);\n }\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex) {\n var _this$metrics;\n var modelIndex = (_this$metrics = this.metrics) === null || _this$metrics === void 0 || (_this$metrics = _this$metrics.modelColumns) === null || _this$metrics === void 0 ? void 0 : _this$metrics.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for column \".concat(columnIndex));\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex) {\n var _this$metrics2;\n var modelIndex = (_this$metrics2 = this.metrics) === null || _this$metrics2 === void 0 || (_this$metrics2 = _this$metrics2.modelRows) === null || _this$metrics2 === void 0 ? void 0 : _this$metrics2.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for row \".concat(rowIndex));\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row) {\n var expandDescendants = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var modelRow = this.getModelRow(row);\n var {\n model\n } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow), expandDescendants);\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n this.setState({\n isStuckToBottom: false\n });\n }\n getStickyScrollPosition(isStickyBottom, isStickyRight) {\n // eslint-disable-next-line react/destructuring-assignment\n if (!this.metrics) return {\n left: this.state.left,\n top: this.state.top\n };\n var {\n bottomVisible,\n rowCount,\n top,\n lastTop,\n rightVisible,\n columnCount,\n left,\n lastLeft\n } = this.metrics;\n var newTop = top;\n var newLeft = left;\n if (isStickyBottom && (bottomVisible < rowCount - 1 && bottomVisible > 0 || top > lastTop)) {\n newTop = lastTop;\n }\n if (isStickyRight && (rightVisible < columnCount - 1 && rightVisible > 0 || left > lastLeft)) {\n newLeft = lastLeft;\n }\n return {\n top: newTop,\n left: newLeft\n };\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges\n });\n if (gridRanges.length > 0) {\n var range = GridRange.boundedRange(gridRanges[0], columnCount, rowCount);\n var newCursorRow = cursorRow;\n var newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({\n row: newCursorRow,\n column: newCursorColumn\n } = range.startCell());\n }\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow\n });\n }\n }\n initContext() {\n var {\n canvas\n } = this;\n var {\n canvasOptions\n } = this.props;\n if (!canvas) throw new Error('Canvas not set');\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n requestUpdateCanvas() {\n if (this.animationFrame != null) {\n return;\n }\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n try {\n this.updateCanvas();\n } catch (e) {\n // Errors thrown from the animation frame are uncaught by the grid panel\n this.setState({\n renderError: e\n });\n }\n });\n }\n\n /**\n * Updates the canvas, metrics, and render state, then draws the canvas.\n */\n updateCanvas() {\n this.updateCanvasScale();\n this.updateMetrics();\n this.updateRenderState();\n var {\n canvasContext,\n metrics,\n renderState\n } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n this.renderer.configureContext(canvasContext, renderState);\n var {\n onViewChanged\n } = this.props;\n onViewChanged(metrics);\n this.drawCanvas();\n }\n updateCanvasScale() {\n var {\n canvas,\n canvasContext,\n canvasWrapper\n } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvasWrapper.current) throw new Error('canvasWrapper not set');\n\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n var rect = canvasWrapper.current.getBoundingClientRect();\n var width = Math.floor(rect.width);\n var height = Math.floor(rect.height);\n\n // avoid triggering a dom re-calc if size hasn't changed\n if (parseFloat(canvas.style.width) === width && parseFloat(canvas.style.height) === height) {\n return;\n }\n var scale = Grid.getScale(canvasContext);\n canvas.style.width = \"\".concat(width, \"px\");\n canvas.style.height = \"\".concat(height, \"px\");\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n updateScrollBounds() {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n left,\n top\n } = this.state;\n var {\n lastLeft,\n lastTop\n } = this.metrics;\n if (left > lastLeft) {\n this.setState({\n left: lastLeft,\n leftOffset: 0\n });\n }\n if (top > lastTop) {\n this.setState({\n top: lastTop,\n topOffset: 0\n });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n needToUpdateScroll() {\n if (!this.metrics || !this.prevMetrics) {\n return false;\n }\n var {\n rowCount,\n columnCount,\n height,\n width\n } = this.metrics;\n var {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth\n } = this.prevMetrics;\n if (prevRowCount !== rowCount || height !== prevHeight) {\n var {\n isStuckToBottom\n } = this.state;\n if (isStuckToBottom) {\n return true;\n }\n }\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n var {\n isStuckToRight\n } = this.state;\n if (isStuckToRight) {\n return true;\n }\n }\n return false;\n }\n updateMetrics() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n this.prevMetrics = this.metrics;\n var {\n metricCalculator\n } = this;\n var metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState) {\n var {\n selectedRanges: oldSelectedRanges\n } = prevState;\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges !== oldSelectedRanges) {\n var {\n onSelectionChanged\n } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection() {\n var {\n model\n } = this.props;\n var {\n selectedRanges\n } = this.state;\n var {\n columnCount,\n rowCount\n } = model;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var range = selectedRanges[i];\n if (range.endColumn != null && range.endColumn >= columnCount || range.endRow != null && range.endRow >= rowCount) {\n // Just clear the selection rather than trying to trim it.\n this.setState({\n selectedRanges: [],\n lastSelectedRanges: []\n });\n return false;\n }\n }\n return true;\n }\n\n /**\n * Clears all selected ranges\n */\n clearSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: selectedRanges\n });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1)\n });\n }\n }\n\n /** Gets the selected ranges */\n getSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n return selectedRanges;\n }\n\n /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column, row) {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var maximizePreviousRange = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n this.setState(state => {\n var {\n selectedRanges,\n selectionStartRow,\n selectionStartColumn\n } = state;\n var {\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n if (extendSelection && selectedRanges.length > 0) {\n var lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n var left = null;\n var top = null;\n var right = null;\n var bottom = null;\n if (maximizePreviousRange) {\n var _lastSelectedRange$st, _lastSelectedRange$st2, _lastSelectedRange$en, _lastSelectedRange$en2;\n left = autoSelectRow !== undefined && autoSelectRow ? null : Math.min(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$st = lastSelectedRange.startColumn) !== null && _lastSelectedRange$st !== void 0 ? _lastSelectedRange$st : 0);\n top = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.min(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$st2 = lastSelectedRange.startRow) !== null && _lastSelectedRange$st2 !== void 0 ? _lastSelectedRange$st2 : 0);\n right = autoSelectRow !== undefined && autoSelectRow ? null : Math.max(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$en = lastSelectedRange.endColumn) !== null && _lastSelectedRange$en !== void 0 ? _lastSelectedRange$en : 0);\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.max(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$en2 = lastSelectedRange.endRow) !== null && _lastSelectedRange$en2 !== void 0 ? _lastSelectedRange$en2 : 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n }\n var selectedRange = GridRange.makeNormalized(left, top, right, bottom);\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n var _newRanges = [...selectedRanges];\n _newRanges[_newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: _newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n }\n var newRanges = [...selectedRanges];\n var selectedColumn = autoSelectRow !== undefined && autoSelectRow ? null : column;\n var selectedRow = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n newRanges.push(GridRange.makeNormalized(selectedColumn, selectedRow, selectedColumn, selectedRow));\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection() {\n this.setState(state => {\n var {\n theme\n } = this.props;\n var {\n autoSelectRow\n } = theme;\n var {\n selectedRanges,\n lastSelectedRanges,\n cursorRow,\n cursorColumn\n } = state;\n if (selectedRanges.length === 1 && (autoSelectRow !== undefined && autoSelectRow ? GridRange.rowCount(selectedRanges) === 1 : GridRange.cellCount(selectedRanges) === 1) && GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return {\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n cursorColumn: null,\n cursorRow: null\n };\n }\n var newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n var lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (var i = 0; i < newSelectedRanges.length - 1; i += 1) {\n var selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n var remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n var newCursorColumn = cursorColumn;\n var newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var nextCursor = GridRange.nextCell(GridRange.boundedRanges(selectedRanges, columnCount, rowCount));\n if (nextCursor != null) {\n ({\n column: newCursorColumn,\n row: newCursorRow\n } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n if (newSelectedRanges.length === 0) {\n newCursorColumn = null;\n newCursorRow = null;\n }\n var selectionChanged = newSelectedRanges.length !== selectedRanges.length || newSelectedRanges.some((range, index) => !range.equals(selectedRanges[index]));\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n // The onSelectionChanged callback has already been called with the selectedRanges at this point.\n // If the selection is not changed (e.g., the user is adding via ctrl+click and not removing),\n // there is no need to change and trigger the callback again.\n selectedRanges: selectionChanged ? newSelectedRanges : selectedRanges,\n lastSelectedRanges: selectedRanges\n };\n });\n }\n setFocusRow(focusedRow) {\n var _userRowHeights$get;\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n var {\n gridY,\n height,\n lastTop,\n userRowHeights,\n rowHeight\n } = this.metrics;\n var tableHeight = height - gridY;\n var halfViewportHeight = Math.round(tableHeight / 2) + ((_userRowHeights$get = userRowHeights.get(focusedRow)) !== null && _userRowHeights$get !== void 0 ? _userRowHeights$get : rowHeight);\n var metricState = this.getMetricState();\n var newTop = this.metricCalculator.getLastTop(metricState, focusedRow + 1, halfViewportHeight);\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false\n });\n var {\n cursorColumn\n } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll() {\n var {\n model,\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n var top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n var bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : model.rowCount - 1;\n var left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n var right = autoSelectRow !== undefined && autoSelectRow ? null : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n */\n moveCursor(deltaColumn, deltaRow, extendSelection) {\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = this.state;\n var column = extendSelection ? selectionEndColumn : cursorColumn;\n var row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n var {\n left,\n top\n } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var _left = clamp(column + deltaColumn, 0, columnCount - 1);\n var _top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(_left, _top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param direction The direction to move the cursor in\n */\n moveCursorInDirection() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GridRange.SELECTION_DIRECTION.DOWN;\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n var ranges = selectedRanges.length > 0 ? selectedRanges : [GridRange.makeCell(cursorColumn, cursorRow)];\n var nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n var _gridRange$nextCell;\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n var gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor = (_gridRange$nextCell = gridRange.nextCell(cursorColumn, cursorRow, direction)) !== null && _gridRange$nextCell !== void 0 ? _gridRange$nextCell : gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(GridRange.boundedRanges(ranges, columnCount, rowCount), cursorColumn, cursorRow, direction);\n }\n if (nextCursor != null) {\n var {\n column,\n row\n } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row\n });\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row\n });\n }\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var keepCursorInView = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var maximizePreviousRange = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param column The column index to bring into view\n * @param row The row index to bring into view\n */\n moveViewToCell(column, row) {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n metricCalculator\n } = this;\n var {\n bottomVisible,\n rightVisible,\n topVisible,\n leftVisible\n } = this.metrics;\n var metricState = this.getMetricState(this.state);\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = this.state;\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.metrics) throw new Error('metrics not set');\n var {\n isStickyBottom,\n isStickyRight\n } = this.props;\n var {\n top,\n left\n } = viewState;\n var {\n lastTop,\n lastLeft,\n hasVerticalBar,\n hasHorizontalBar\n } = this.metrics;\n if (top != null && hasVerticalBar) {\n this.setState({\n isStuckToBottom: isStickyBottom && top >= lastTop\n });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({\n isStuckToRight: isStickyRight && left >= lastLeft\n });\n }\n this.setState(viewState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(column, row) {\n var isQuickEdit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var selectionRange = arguments.length > 3 ? arguments[3] : undefined;\n var value = arguments.length > 4 ? arguments[4] : undefined;\n var {\n model\n } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n var cell = {\n column,\n row,\n selectionRange,\n value: value !== undefined ? value : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit\n };\n this.setState({\n editingCell: cell,\n cursorColumn: column,\n cursorRow: row\n });\n this.moveViewToCell(column, row);\n }\n\n /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(column, row, value) {\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n return isEditableGridModel(model) && model.isValidForCell(modelColumn, modelRow, value);\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param value Table or a string that is being pasted\n */\n pasteValue(value) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n var {\n movedColumns,\n movedRows,\n selectedRanges\n } = _this.state;\n try {\n assertIsEditableGridModel(model);\n if (!model.isEditable || !selectedRanges.every(range => model.isEditableRange(range))) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n var _edits = [];\n var modelRanges = GridUtils.getModelRanges(selectedRanges, movedColumns, movedRows);\n GridRange.forEachCell(modelRanges, (column, row) => {\n _edits.push({\n column,\n row,\n text: value\n });\n });\n yield model.setValues(_edits);\n return;\n }\n\n // Otherwise it's a table of data\n var tableHeight = value.length;\n var tableWidth = value[0].length;\n var {\n columnCount,\n rowCount\n } = model;\n var ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n // Check for\n if (ranges.every(range => {\n var _range$startColumn, _range$startRow;\n return GridRange.cellCount([range]) === 1 && ((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0) + tableWidth <= columnCount && ((_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0) + tableHeight <= rowCount;\n })) {\n // Remap the selected ranges\n ranges = ranges.map(range => {\n var _range$startColumn2, _range$startRow2;\n return new GridRange(range.startColumn, range.startRow, ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : 0) + tableWidth - 1, ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : 0) + tableHeight - 1);\n });\n _this.setSelectedRanges(ranges);\n }\n var edits = [];\n ranges.forEach(range => {\n var _range$startColumn3;\n if (((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : 0) + tableWidth > columnCount) {\n throw new PasteError('Pasted content would overflow columns.');\n }\n for (var x = 0; x < tableWidth; x += 1) {\n for (var y = 0; y < tableHeight; y += 1) {\n var _range$startColumn4, _range$startRow3;\n edits.push({\n column: ((_range$startColumn4 = range.startColumn) !== null && _range$startColumn4 !== void 0 ? _range$startColumn4 : 0) + x,\n row: ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : 0) + y,\n text: value[y][x]\n });\n }\n }\n });\n yield model.setValues(edits);\n } catch (e) {\n var {\n onError\n } = _this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n }\n })();\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(column, row, value) {\n var {\n model\n } = this.props;\n assertIsEditableGridModel(model);\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges, value) {\n var {\n model\n } = this.props;\n var {\n movedColumns,\n movedRows\n } = this.state;\n var modelRanges = GridUtils.getModelRanges(ranges, movedColumns, movedRows);\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row, column) {\n var {\n selectedRanges\n } = this.state;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var _selectedRange$endRow, _selectedRange$endCol;\n var selectedRange = selectedRanges[i];\n var rowSelected = selectedRange.startRow === null || selectedRange.startRow <= row && row <= ((_selectedRange$endRow = selectedRange.endRow) !== null && _selectedRange$endRow !== void 0 ? _selectedRange$endRow : 0);\n var columnSelected = selectedRange.startColumn === null || selectedRange.startColumn <= column && column <= ((_selectedRange$endCol = selectedRange.endColumn) !== null && _selectedRange$endCol !== void 0 ? _selectedRange$endCol : 0);\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n return false;\n }\n addDocumentCursor() {\n var cursor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n removeDocumentCursor() {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n startDragTimer(event) {\n this.stopDragTimer();\n var mouseEvent = new MouseEvent('custom', event.nativeEvent);\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n stopDragTimer() {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n */\n drawCanvas() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n renderer,\n canvasContext: context,\n renderState\n } = this;\n context.save();\n renderer.drawCanvas(renderState);\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus() {\n var _this$canvas3;\n (_this$canvas3 = this.canvas) === null || _this$canvas3 === void 0 || _this$canvas3.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused() {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event) {\n var _this$canvas4;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n (_this$canvas4 = this.canvas) === null || _this$canvas4 === void 0 || _this$canvas4.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event) {\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the keyboard handlers for this grid of a keyboard event.\n * @param functionName The name of the function in the keyboard handler to call\n * @param event The keyboard event to notify\n */\n notifyKeyboardHandlers(functionName, event) {\n var keyHandlers = this.getKeyHandlers();\n var cursor = null;\n for (var i = 0; i < keyHandlers.length; i += 1) {\n var keyHandler = keyHandlers[i];\n var result = keyHandler[functionName] != null && keyHandler[functionName](event, this);\n if (result !== false) {\n var _options$stopPropagat, _options$preventDefau;\n if (keyHandler.cursor != null) {\n ({\n cursor\n } = keyHandler);\n }\n var options = result;\n if ((_options$stopPropagat = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat !== void 0 ? _options$stopPropagat : true) event.stopPropagation();\n if ((_options$preventDefau = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n }\n handleKeyDown(event) {\n this.notifyKeyboardHandlers('onDown', event);\n }\n handleKeyUp(event) {\n this.notifyKeyboardHandlers('onUp', event);\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(functionName, event) {\n var updateCoordinates = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var addCursorToDocument = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n var cursor = null;\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n var result = mouseHandler[functionName] != null && mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\n var _options$stopPropagat2, _options$preventDefau2;\n if (mouseHandler.cursor != null) {\n ({\n cursor\n } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n var options = result;\n if ((_options$stopPropagat2 = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat2 !== void 0 ? _options$stopPropagat2 : true) event.stopPropagation();\n if ((_options$preventDefau2 = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau2 !== void 0 ? _options$preventDefau2 : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n if (updateCoordinates) {\n var {\n x,\n y\n } = gridPoint;\n this.setState({\n mouseX: x,\n mouseY: y\n });\n }\n }\n handleMouseDown(event) {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onDown', event);\n this.startDragTimer(event);\n }\n handleDoubleClick(event) {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n handleMouseMove(event) {\n this.notifyMouseHandlers('onMove', event);\n }\n handleMouseLeave(event) {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({\n mouseX: null,\n mouseY: null\n });\n }\n handleMouseDrag(event) {\n this.setState({\n isDragging: true\n });\n this.notifyMouseHandlers('onDrag', event, true, true);\n this.stopDragTimer();\n }\n handleMouseUp(event) {\n // Ignore right click while dragging\n var {\n isDragging\n } = this.state;\n if (isDragging && event.button === 2) {\n return;\n }\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onUp', event, false);\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n handleResize() {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvas();\n if (!this.metrics) throw new Error('metrics not set');\n this.forceUpdate();\n }\n forceUpdate(callback) {\n this.setState(_ref5 => {\n var {\n updateRevision = 0\n } = _ref5;\n return {\n updateRevision: (updateRevision + 1) % Number.MAX_SAFE_INTEGER\n };\n });\n super.forceUpdate(callback);\n }\n handleWheel(event) {\n this.notifyMouseHandlers('onWheel', event);\n if (event.defaultPrevented) {\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this;\n var metricState = this.getMetricState();\n if (!metrics) throw new Error('metrics not set');\n var {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar\n } = metrics;\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = metrics;\n var theme = this.getTheme();\n var {\n deltaX,\n deltaY\n } = GridUtils.getScrollDelta(event, metrics.barWidth, metrics.barHeight, metrics.rowHeight, metrics.rowHeight);\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n if (columnCount > 1) {\n // no scrolling needed, at directional edge\n if (leftOffset > 0 && left >= lastLeft || leftOffset < 0 && left <= 0) {\n leftOffset = 0;\n break;\n }\n } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n var maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n if (leftOffset > 0) {\n var _metrics$allColumnWid;\n // scroll right\n\n // get width of next column\n var columnWidth = (_metrics$allColumnWid = metrics.allColumnWidths.get(left)) !== null && _metrics$allColumnWid !== void 0 ? _metrics$allColumnWid : metricCalculator.getVisibleColumnWidth(left, metricState);\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n var _metrics$allColumnWid2;\n // scroll left\n\n // get width of next column\n var _columnWidth = (_metrics$allColumnWid2 = metrics.allColumnWidths.get(left - 1)) !== null && _metrics$allColumnWid2 !== void 0 ? _metrics$allColumnWid2 : metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n if (Math.abs(leftOffset) <= _columnWidth && theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + _columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if (topOffset > 0 && top >= lastTop || topOffset < 0 && top <= 0) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n var maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n if (topOffset > 0) {\n var _metrics$allRowHeight;\n // scroll direction down\n\n // get height of next row\n var rowHeight = (_metrics$allRowHeight = metrics.allRowHeights.get(top)) !== null && _metrics$allRowHeight !== void 0 ? _metrics$allRowHeight : metricCalculator.getVisibleRowHeight(top, metricState);\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n var _metrics$allRowHeight2;\n // scroll direction up\n\n // get height of next row\n var _rowHeight = (_metrics$allRowHeight2 = metrics.allRowHeights.get(top - 1)) !== null && _metrics$allRowHeight2 !== void 0 ? _metrics$allRowHeight2 : metricCalculator.getVisibleRowHeight(top - 1, metricState);\n if (Math.abs(topOffset) <= _rowHeight && theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + _rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n if (metrics.top !== top || metrics.left !== left || metrics.topOffset !== topOffset || metrics.leftOffset !== leftOffset) {\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel() {\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value) {\n this.setState(_ref6 => {\n var {\n editingCell\n } = _ref6;\n try {\n assertIsDefined(editingCell);\n return {\n editingCell: _objectSpread(_objectSpread({}, editingCell), {}, {\n value\n })\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n var {\n onError\n } = this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(value) {\n var {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var {\n editingCell,\n selectedRanges\n } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n var {\n column,\n row\n } = editingCell;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction === null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({\n editingCell: null\n });\n }\n return;\n }\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n if (direction !== null) {\n this.moveCursorInDirection(direction);\n }\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n renderInputField() {\n var {\n model\n } = this.props;\n var {\n editingCell\n } = this.state;\n var {\n metrics\n } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n var {\n selectionRange,\n value,\n isQuickEdit\n } = editingCell;\n var {\n column,\n row\n } = editingCell;\n var {\n scrollX,\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights\n } = metrics;\n var {\n activeCellSelectionBorderWidth\n } = this.getTheme();\n var x = allColumnXs.get(column);\n var y = allRowYs.get(row);\n var w = allColumnWidths.get(column);\n var h = allRowHeights.get(row);\n\n // make sure cell doeesn't go off the left side of the grid\n var leftBorderOffset = gridX + (x !== null && x !== void 0 ? x : 0) <= 0 && scrollX <= 0 ? activeCellSelectionBorderWidth : 0;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n var wrapperStyle = x != null && y != null && w != null && h != null ? {\n position: 'absolute',\n left: gridX + x + leftBorderOffset,\n top: gridY + y,\n width: w - leftBorderOffset,\n height: h\n } : {\n opacity: 0\n };\n var modelColumn;\n var modelRow;\n try {\n modelColumn = this.getModelColumn(column);\n modelRow = this.getModelRow(row);\n } catch (e) {\n return null;\n }\n var inputStyle = modelColumn != null && modelRow != null ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow)\n } : undefined;\n var isValid = modelColumn != null && modelRow != null ? model.isValidForCell(modelColumn, modelRow, value) : false;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(CellInputField, {\n selectionRange: selectionRange,\n className: classNames({\n error: !isValid\n }),\n onCancel: this.handleEditCellCancel,\n onChange: this.handleEditCellChange,\n onDone: this.handleEditCellCommit,\n isQuickEdit: isQuickEdit,\n style: inputStyle,\n value: value\n }, \"\".concat(column, \",\").concat(row))\n });\n }\n\n /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges\n } = this.state;\n var {\n model,\n stateOverride\n } = this.props;\n var {\n metrics\n } = this;\n var context = this.canvasContext;\n var theme = this.getTheme();\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n assertNotNull(metrics);\n this.renderState = _objectSpread({\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow\n }, stateOverride);\n return this.renderState;\n }\n render() {\n var {\n children\n } = this.props;\n var {\n cursor\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"grid-wrapper\",\n ref: this.canvasWrapper,\n children: [/*#__PURE__*/_jsx(\"canvas\", {\n className: classNames('grid-canvas', Grid.getCursorClassName(cursor)),\n ref: canvas => {\n this.canvas = canvas;\n },\n onClick: this.handleClick,\n onContextMenu: this.handleContextMenu,\n onDoubleClick: this.handleDoubleClick,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n tabIndex: 0,\n children: \"Your browser does not support HTML canvas. Update your browser?\"\n }), this.renderInputField(), children]\n });\n }\n}\n_defineProperty(Grid, \"contextType\", ThemeContext);\n_defineProperty(Grid, \"defaultProps\", {\n canvasOptions: {\n alpha: false\n },\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY,\n mouseHandlers: EMPTY_ARRAY,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n onError: () => undefined,\n onSelectionChanged: () => undefined,\n onMovedColumnsChanged: moveOperations => undefined,\n onMoveColumnComplete: () => undefined,\n onMovedRowsChanged: () => undefined,\n onMoveRowComplete: () => undefined,\n onViewChanged: metrics => undefined,\n onTokenClicked: token => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {},\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false\n }\n});\n// use same constant as chrome source for windows\n// https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n_defineProperty(Grid, \"pixelsPerLine\", 100 / 3);\n_defineProperty(Grid, \"dragTimeout\", 1000);\n_defineProperty(Grid, \"getTheme\", memoize((contextTheme, userTheme) => _objectSpread(_objectSpread(_objectSpread({}, GridTheme), contextTheme), userTheme)));\nexport default Grid;\n//# sourceMappingURL=Grid.js.map"],"names":["getChangedKeys","oldObject","newObject","keys","changedKeys","key","assertIsDefined","val","AssertionError","_defineProperty","e","r","_toPropertyKey","t","i","_toPrimitive","PasteError","ownKeys","o","_objectSpread","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","metrics","model","_modelColumns$get","modelColumns","movedColumns","allColumnXs","columnCount","allColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","maxX","modelIndex","GridUtils","group","isColumnGroup","left","right","range","_allColumnXs$get","_allColumnXs$get2","_allColumnWidths$get","startVisibleIndex","endVisibleIndex","_ref","_ref2","_allColumnWidths$get2","possibleLeft","GridColumnMoveMouseHandler","GridMouseHandler","grid","direction","lastLeft","leftOffset","nextLeft","nextOffset","_userColumnWidths$get","prevColumnWidth","leftColumnWidth","_userColumnWidths$get2","_modelIndex","mouseX","mouseY","gridPoint","x","column","columnHeaderDepth","columnInfo","rowHeaderWidth","event","draggingColumn","initialColumnInfo","startColumn","endColumn","deltaX","_draggingParentGroup$","assertNotNull","gridX","draggingColumnDepth","width","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","clamp","parentGroup","parentVisibleRange","_allColumnXs$get3","_newMovedColumns","_getColumnInfo","_newMovedColumns2","parentRight","toVisibleIndex","_newMovedColumns3","toColumnInfo","_toColumnInfo$left","_toColumnInfo$right","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","newMovedColumns","to","moveDistance","newDraggingRange","GridHorizontalScrollBarMouseHandler","rawLeft","theme","metricCalculator","_left","_leftOffset","leftOffsetPercent","columnWidth","metricState","scrollBarSize","scrollBarHoverSize","y","barLeft","barWidth","height","hasHorizontalBar","_this$dragOffset","handleWidth","scrollableContentWidth","scrollableViewportWidth","mouseBarX","scrollPercent","scrollX","newLeft","newLeftOffset","GridRowMoveMouseHandler","row","columnHeaderHeight","allRowYs","rowY","getOrThrow","draggingRow","top","lastTop","bottom","bottomVisible","rowCount","allRowHeights","minY","topRow","maxY","bottomRow","movedRows","minMoveY","maxMoveY","GridRowSeparatorMouseHandler","GridSeparatorMouseHandler","index","size","separator","GridScrollBarCornerMouseHandler","hasVerticalBar","GridVerticalScrollBarMouseHandler","rawTop","_top","_topOffset","topOffsetPercent","rowHeight","topOffset","barTop","barHeight","handleHeight","scrollableContentHeight","scrollableViewportHeight","mouseBarY","scrollY","newTop","newTopOffset","EditMouseHandler","isEditableGridModel","GridRange","KeyHandler","order","SelectionKeyHandler","_model","_columnCount","deltaColumn","deltaRow","isShiftKey","isModifierKey","cursorRow","cursorColumn","selectionEndColumn","selectionEndRow","maximizePreviousRange","moveToColumn","moveToRow","autoSelectRow","autoSelectColumn","topVisible","selectRangeEndPosition","viewportPosition","lastRowIndex","TreeKeyHandler","selectedRanges","modelRow","isExpandableGridModel","EditKeyHandler","parseValueFromTable","table","data","rows","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","parseValueFromNodes","nodes","result","node","_node$textContent","text","parseValueFromElement","element","_element$textContent$","_element$textContent","childNodes","hasTabChar","hasFirefoxTab","PasteKeyHandler","dummyInput","listener","value","directionForKey","SELECTION_DIRECTION","CellInputField","selectionRange","className","disabled","propsValue","propsIsQuickEdit","onChange","EMPTY_FUNCTION","onCancel","onDone","onContextMenu","style","inputField","useRef","isCancelled","initialValue","useState","isChanged","setIsChanged","isQuickEdit","setIsQuickEdit","setValue","useEffect","field","sendUpdate","useCallback","newValue","handleChange","handleCancel","handleClick","handleCommit","fillRange","handleBlur","handleKeyDown","handleContextMenu","_jsx","classNames","ThemeContext","React","asyncGeneratorStep","n","a","u","_asyncToGenerator","_next","_throw","Grid","PureComponent","context","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","legacyContext","backingStorePixelRatio","cursor","props","memoize","keyHandlers","b","mouseHandlers","isStuckToBottom","isStuckToRight","renderer","GridRenderer","GridMetricCalculator","GridColumnSeparatorMouseHandler","GridRowTreeMouseHandler","GridTokenMouseHandler","GridSelectionMouseHandler","EMPTY_ARRAY","_this$canvas","prevProps","prevState","renderError","changedProps","changedState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","stateUpdates","updatedState","_this$canvas2","rect","state","stateOverride","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","columnIndex","_this$metrics","rowIndex","_this$metrics2","expandDescendants","rightVisible","gridRanges","newCursorRow","newCursorColumn","canvas","canvasOptions","canvasContext","renderState","onViewChanged","canvasWrapper","scale","prevRowCount","prevColumnCount","prevHeight","prevWidth","oldSelectedRanges","onSelectionChanged","extendSelection","selectionStartRow","selectionStartColumn","lastSelectedRange","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","selectedRange","_newRanges","newRanges","selectedColumn","selectedRow","lastSelectedRanges","newSelectedRanges","lastRange","remainder","nextCursor","selectionChanged","focusedRow","_userRowHeights$get","gridY","userRowHeights","tableHeight","halfViewportHeight","ranges","_gridRange$nextCell","gridRange","keepCursorInView","leftVisible","viewState","forceUpdate","modelColumn","_this","assertIsEditableGridModel","_edits","modelRanges","tableWidth","_range$startColumn","_range$startRow","_range$startColumn2","_range$startRow2","edits","_range$startColumn3","_range$startColumn4","_range$startRow3","onError","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","mouseEvent","_this$canvas3","_this$canvas4","mouseHandler","functionName","keyHandler","_options$stopPropagat","_options$preventDefau","options","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","isDragging","callback","_ref5","updateRevision","deltaY","maxLeftOffset","_metrics$allColumnWid","_metrics$allColumnWid2","_columnWidth","maxTopOffset","_metrics$allRowHeight","_metrics$allRowHeight2","_rowHeight","_ref6","editingCell","activeCellSelectionBorderWidth","w","h","leftBorderOffset","wrapperStyle","inputStyle","isValid","draggingColumnSeparator","draggingRowOffset","draggingRowSeparator","children","_jsxs","moveOperations","token","isLinkToken","contextTheme","userTheme","GridTheme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Grid-B7dO0Sbi.js","sources":["../../../utils/dist/ObjectUtils.js","../../../grid/dist/errors/assertIsDefined.js","../../../grid/dist/errors/PasteError.js","../../../grid/dist/mouse-handlers/GridColumnMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowSeparatorMouseHandler.js","../../../grid/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js","../../../grid/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/EditMouseHandler.js","../../../grid/dist/KeyHandler.js","../../../grid/dist/key-handlers/SelectionKeyHandler.js","../../../grid/dist/key-handlers/TreeKeyHandler.js","../../../grid/dist/key-handlers/EditKeyHandler.js","../../../grid/dist/key-handlers/PasteKeyHandler.js","../../../grid/dist/CellInputField.js","../../../grid/dist/ThemeContext.js","../../../grid/dist/Grid.js"],"sourcesContent":["/**\n * Get the keys that have changed between two objects.\n * @param oldObject Old object to compare\n * @param newObject New object to compare\n * @returns Array of keys that have changed\n */\nexport function getChangedKeys(oldObject, newObject) {\n var keys = new Set([...Object.keys(oldObject), ...Object.keys(newObject)]);\n var changedKeys = [];\n keys.forEach(key => {\n if (oldObject[key] !== newObject[key]) {\n changedKeys.push(key);\n }\n });\n return changedKeys;\n}\nexport default {\n getChangedKeys\n};\n//# sourceMappingURL=ObjectUtils.js.map","import AssertionError from \"./AssertionError.js\";\nexport function assertIsDefined(val) {\n if (val === undefined || val === null) {\n throw new AssertionError(\"Expected 'val' to be defined, but received \".concat(val));\n }\n}\nexport default assertIsDefined;\n//# sourceMappingURL=assertIsDefined.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class PasteError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isPasteError\", true);\n }\n}\nexport default PasteError;\n//# sourceMappingURL=PasteError.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { assertNotNull } from '@deephaven/utils';\nimport GridUtils from \"../GridUtils.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nvar SLOPPY_CLICK_DISTANCE = 5;\nvar SCROLL_INTERVAL = 1000 / 60;\nvar SCROLL_DELTA = 10;\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(visibleIndex, depth, metrics, model) {\n var _modelColumns$get;\n var {\n modelColumns,\n movedColumns,\n allColumnXs,\n columnCount,\n allColumnWidths,\n userColumnWidths,\n calculatedColumnWidths,\n floatingLeftWidth,\n maxX\n } = metrics;\n if (depth == null || visibleIndex == null || visibleIndex > columnCount || visibleIndex < 0) {\n return null;\n }\n var modelIndex = (_modelColumns$get = modelColumns.get(visibleIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(visibleIndex, movedColumns);\n var group = model.getColumnHeaderGroup(modelIndex, depth);\n var isColumnGroup = group != null;\n var left;\n var right;\n var range;\n if (group != null) {\n var _allColumnXs$get, _allColumnXs$get2, _allColumnWidths$get;\n var [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(movedColumns);\n left = (_allColumnXs$get = allColumnXs.get(startVisibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : floatingLeftWidth;\n right = ((_allColumnXs$get2 = allColumnXs.get(endVisibleIndex)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : maxX) + ((_allColumnWidths$get = allColumnWidths.get(endVisibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n var _ref, _ref2, _allColumnWidths$get2;\n var possibleLeft = allColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n left = possibleLeft;\n right = left + ((_ref = (_ref2 = (_allColumnWidths$get2 = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : userColumnWidths.get(modelIndex)) !== null && _ref2 !== void 0 ? _ref2 : calculatedColumnWidths.get(modelIndex)) !== null && _ref !== void 0 ? _ref : 0);\n range = [visibleIndex, visibleIndex];\n }\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth\n };\n}\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", null);\n _defineProperty(this, \"draggingOffset\", void 0);\n _defineProperty(this, \"initialOffset\", void 0);\n _defineProperty(this, \"initialGridPoint\", void 0);\n _defineProperty(this, \"scrollingInterval\", void 0);\n _defineProperty(this, \"scrollingDirection\", void 0);\n _defineProperty(this, \"draggingColumn\", null);\n }\n setScrollInterval(grid, direction) {\n if (this.scrollingInterval != null && direction === this.scrollingDirection) {\n return;\n }\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n var {\n metrics\n } = grid;\n if (!metrics) {\n return;\n }\n var {\n left,\n lastLeft,\n leftOffset,\n userColumnWidths,\n calculatedColumnWidths,\n movedColumns,\n allColumnWidths\n } = metrics;\n var nextLeft = left;\n var nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n var _userColumnWidths$get;\n nextLeft -= 1;\n var modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n var prevColumnWidth = (_userColumnWidths$get = userColumnWidths.get(modelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n var leftColumnWidth = allColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n var _userColumnWidths$get2;\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n var _modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth = (_userColumnWidths$get2 = userColumnWidths.get(_modelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : calculatedColumnWidths.get(_modelIndex);\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (metrics == null || mouseX == null || mouseY == null) {\n return;\n }\n this.moveDraggingColumn(mouseX, grid, direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA);\n grid.setState({\n left: nextLeft,\n leftOffset: nextOffset\n });\n if (direction === 'left' && nextLeft === 0 && leftOffset === 0 || direction === 'right' && nextLeft === lastLeft) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n clearScrollInterval() {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n onLeave() {\n this.clearScrollInterval();\n return false;\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n column,\n columnHeaderDepth\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\n var columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n var {\n rowHeaderWidth\n } = metrics;\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n if (columnInfo.modelIndex != null && columnHeaderDepth != null && model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n onDrag(gridPoint, grid, event) {\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined) {\n return false;\n }\n var {\n x: mouseX,\n y: mouseY\n } = gridPoint;\n var {\n columnHeaderDepth\n } = this.initialGridPoint;\n var {\n model\n } = grid.props;\n var {\n draggingColumn\n } = this;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\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 (!draggingColumn && Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE && Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n var initialColumnInfo = getColumnInfo(this.initialGridPoint.column, columnHeaderDepth, metrics, model);\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width\n };\n var startColumn = getColumnInfo(draggingColumn.range[0], 0, metrics, model);\n var endColumn = getColumnInfo(draggingColumn.range[1], 0, metrics, model);\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n this.draggingColumn = draggingColumn;\n grid.setState({\n draggingColumn,\n isDragging: true\n });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX, grid, deltaX) {\n var _draggingParentGroup$;\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined || this.draggingColumn == null || deltaX === 0) {\n return;\n }\n var {\n metrics\n } = grid;\n assertNotNull(metrics, 'Metrics not set');\n var {\n gridX\n } = metrics;\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (this.draggingOffset < this.initialOffset && this.initialOffset < this.draggingOffset + deltaX || this.draggingOffset > this.initialOffset && this.initialOffset > this.draggingOffset + deltaX) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n var {\n depth: draggingColumnDepth\n } = this.draggingColumn;\n var {\n model\n } = grid.props;\n var {\n movedColumns\n } = grid.state;\n var {\n floatingLeftWidth,\n width,\n columnHeaderMaxDepth,\n allColumnXs\n } = metrics;\n var isDraggingLeft = deltaX < 0;\n var draggingColumn = getColumnInfo(this.draggingColumn.range[0], draggingColumnDepth, metrics, model);\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n var floatingDraggingLeft = mouseX - this.draggingOffset - gridX;\n var floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n var swapColumn = getColumnInfo(GridUtils.getColumnAtX(clamp(isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight, floatingLeftWidth, width) + gridX, metrics, true), draggingColumnDepth, metrics, model);\n var parentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup !== undefined) {\n var parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n var _allColumnXs$get3;\n var _newMovedColumns = this.moveColumn(draggingColumn, parentVisibleRange[0], movedColumns);\n this.draggingOffset = mouseX - ((_allColumnXs$get3 = allColumnXs.get(parentVisibleRange[0])) !== null && _allColumnXs$get3 !== void 0 ? _allColumnXs$get3 : 0);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n var _getColumnInfo;\n var _newMovedColumns2 = this.moveColumn(draggingColumn, parentVisibleRange[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n var {\n right: parentRight = 0\n } = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {};\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns2\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n var toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (toVisibleIndex < draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (toVisibleIndex > draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex -= 1;\n }\n }\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n var _newMovedColumns3 = this.moveColumn(draggingColumn, toVisibleIndex, movedColumns);\n grid.setState({\n movedColumns: _newMovedColumns3,\n draggingColumn: this.draggingColumn\n });\n }\n var toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n var _toColumnInfo$left;\n this.draggingOffset = mouseX - ((_toColumnInfo$left = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.left) !== null && _toColumnInfo$left !== void 0 ? _toColumnInfo$left : 0);\n } else {\n var _toColumnInfo$right;\n this.draggingOffset = mouseX - (((_toColumnInfo$right = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.right) !== null && _toColumnInfo$right !== void 0 ? _toColumnInfo$right : 0) - draggingColumn.width);\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (isDraggingLeft && draggingColumn.visibleIndex < swapColumn.visibleIndex || !isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex) {\n return;\n }\n var switchPoint = swapColumn.left + swapColumn.width * 0.5;\n var draggingParentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n var maxDepthSwapGroup;\n var maxSwapDepth = ((_draggingParentGroup$ = draggingParentGroup === null || draggingParentGroup === void 0 ? void 0 : draggingParentGroup.depth) !== null && _draggingParentGroup$ !== void 0 ? _draggingParentGroup$ : columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(swapColumn.modelIndex, maxSwapDepth);\n maxSwapDepth -= 1;\n }\n var newMovedColumns;\n if (isDraggingLeft && floatingDraggingLeft < switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[0])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[0], movedColumns);\n }\n if (!isDraggingLeft && floatingDraggingRight > switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[1])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n }\n if (!newMovedColumns) {\n return;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(draggingColumn, to, movedColumns) {\n var newMovedColumns = draggingColumn.isColumnGroup ? GridUtils.moveRange(draggingColumn.range, to, movedColumns) : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n var moveDistance = to - draggingColumn.range[0];\n var newDraggingRange = [draggingColumn.range[0] + moveDistance, draggingColumn.range[1] + moveDistance];\n if (this.draggingColumn) {\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n range: newDraggingRange\n });\n }\n return newMovedColumns;\n }\n onUp(gridPoint, grid) {\n this.cursor = null;\n this.clearScrollInterval();\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridColumnMoveMouseHandler;\n//# sourceMappingURL=GridColumnMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getLeftWithOffsetFromRawLeft(grid, rawLeft) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToColumn) {\n var _left = Math.round(rawLeft);\n var _leftOffset = 0;\n return {\n left: _left,\n leftOffset: _leftOffset\n };\n }\n var left = Math.floor(rawLeft);\n var leftOffsetPercent = rawLeft - left;\n var columnWidth = metrics.allColumnWidths.get(left);\n if (columnWidth == null) {\n var metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n var leftOffset = columnWidth * leftOffsetPercent;\n return {\n left,\n leftOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barLeft,\n barWidth,\n height,\n hasHorizontalBar\n } = metrics;\n return hasHorizontalBar && scrollBarSize > 0 && y >= height - scrollBarHoverSize && y < height && x > barLeft && x < barLeft + barWidth;\n }\n getLeftWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n barWidth,\n handleWidth,\n lastLeft,\n barLeft,\n columnCount,\n scrollableContentWidth,\n scrollableViewportWidth\n } = metrics;\n var mouseBarX = x - barLeft;\n var scrollPercent = clamp((mouseBarX - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barWidth - handleWidth), 0, 1);\n if (columnCount === 1) {\n return {\n left: 0,\n leftOffset: scrollPercent * (scrollableContentWidth - scrollableViewportWidth)\n };\n }\n var rawLeft = scrollPercent * lastLeft;\n return GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(grid, rawLeft);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n handleWidth,\n barLeft,\n scrollX\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarX = x - barLeft;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({\n isDraggingHorizontalScrollBar: true\n });\n } else {\n this.dragOffset = 0;\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridHorizontalScrollBarMouseHandler;\n//# sourceMappingURL=GridHorizontalScrollBarMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\nclass GridRowMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", 'move');\n _defineProperty(this, \"draggingOffset\", void 0);\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n y,\n row\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n columnHeaderHeight,\n rowHeaderWidth,\n allRowYs\n } = metrics;\n if (x <= rowHeaderWidth && row !== null && model.isRowMovable(row)) {\n var rowY = getOrThrow(allRowYs, row);\n this.draggingOffset = y - rowY - columnHeaderHeight;\n grid.setState({\n draggingRowOffset: this.draggingOffset\n });\n }\n return false;\n }\n onDrag(gridPoint, grid) {\n if (this.draggingOffset == null) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n draggingRow\n } = grid.state;\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n if (draggingRow == null) {\n var {\n row\n } = grid.getGridPointFromXY(mouseX, mouseY);\n if (row != null && !model.isRowMovable(row)) {\n return false;\n }\n draggingRow = row;\n grid.setState({\n draggingRow,\n isDragging: true\n });\n if (draggingRow == null) {\n return false;\n }\n }\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n top,\n lastTop,\n bottom,\n bottomVisible,\n rowCount,\n columnHeaderHeight,\n allRowHeights,\n allRowYs,\n height\n } = metrics;\n var minY = columnHeaderHeight;\n if (top < draggingRow) {\n var topRow = draggingRow - 1;\n minY = getOrThrow(allRowYs, topRow) + getOrThrow(allRowHeights, topRow) * 0.5 + columnHeaderHeight;\n }\n var maxY = height;\n if (draggingRow < bottom) {\n var bottomRow = draggingRow + 1;\n maxY = getOrThrow(allRowYs, bottomRow) + getOrThrow(allRowHeights, bottomRow) * 0.5 + columnHeaderHeight;\n }\n var {\n movedRows\n } = grid.state;\n if (mouseY < minY && draggingRow > 0 && model.isRowMovable(draggingRow - 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow - 1, movedRows);\n draggingRow -= 1;\n } else if (maxY < mouseY && draggingRow < rowCount - 1 && model.isRowMovable(draggingRow + 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow + 1, movedRows);\n draggingRow += 1;\n }\n grid.setState({\n movedRows,\n draggingRow\n });\n var minMoveY = columnHeaderHeight + getOrThrow(allRowHeights, top) * 0.5;\n var maxMoveY = columnHeaderHeight + getOrThrow(allRowYs, bottomVisible) + getOrThrow(allRowHeights, bottomVisible) * 0.5;\n if (mouseY < minMoveY && top > 0) {\n grid.setState({\n top: top - 1\n });\n } else if (mouseY > maxMoveY && top < lastTop) {\n grid.setState({\n top: top + 1\n });\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.draggingOffset !== undefined) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingRowOffset: null,\n draggingRow: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridRowMoveMouseHandler;\n//# sourceMappingURL=GridRowMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridSeparatorMouseHandler from \"./GridSeparatorMouseHandler.js\";\nclass GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"hiddenCursor\", 's-resize');\n _defineProperty(this, \"defaultCursor\", 'row-resize');\n _defineProperty(this, \"pointProperty\", 'y');\n _defineProperty(this, \"userSizesProperty\", 'userRowHeights');\n _defineProperty(this, \"visibleOffsetProperty\", 'visibleRowYs');\n _defineProperty(this, \"visibleSizesProperty\", 'visibleRowHeights');\n _defineProperty(this, \"marginProperty\", 'columnHeaderHeight');\n _defineProperty(this, \"calculatedSizesProperty\", 'calculatedRowHeights');\n _defineProperty(this, \"initialSizesProperty\", 'initialRowHeights');\n _defineProperty(this, \"modelIndexesProperty\", 'modelRows');\n _defineProperty(this, \"firstIndexProperty\", 'firstRow');\n _defineProperty(this, \"treePaddingProperty\", 'treePaddingY');\n _defineProperty(this, \"getHiddenItems\", GridUtils.getHiddenRows);\n _defineProperty(this, \"getNextShownItem\", GridUtils.getNextShownRow);\n _defineProperty(this, \"getSeparator\", GridRowSeparatorMouseHandler.getRowSeparator);\n }\n static getRowSeparator(gridPoint, metrics, model, theme) {\n if (!theme.allowRowResize) {\n return null;\n }\n var {\n x,\n y\n } = gridPoint;\n var index = GridUtils.getRowSeparatorIndex(x, y, metrics, theme);\n return index != null ? {\n index,\n depth: 0\n } : null;\n }\n setSize(metricCalculator, modelIndex, size) {\n metricCalculator.setRowHeight(modelIndex, size);\n }\n resetSize(metricCalculator, modelIndex) {\n metricCalculator.resetRowHeight(modelIndex);\n }\n updateSeparator(grid, separator) {\n grid.setState({\n draggingRowSeparator: separator,\n isDragging: separator !== null\n });\n }\n}\nexport default GridRowSeparatorMouseHandler;\n//# sourceMappingURL=GridRowSeparatorMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass GridScrollBarCornerMouseHandler extends GridMouseHandler {\n isInCorner(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n width,\n height,\n hasVerticalBar,\n hasHorizontalBar\n } = metrics;\n return scrollBarSize > 0 && hasVerticalBar && hasHorizontalBar && x >= width - scrollBarSize && y >= height - scrollBarSize && x <= width && y <= height;\n }\n onDown(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n}\nexport default GridScrollBarCornerMouseHandler;\n//# sourceMappingURL=GridScrollBarCornerMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridVerticalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getTopWithOffsetFromRawTop(grid, rawTop) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToRow) {\n var _top = Math.round(rawTop);\n var _topOffset = 0;\n return {\n top: _top,\n topOffset: _topOffset\n };\n }\n var top = Math.floor(rawTop);\n var topOffsetPercent = rawTop - top;\n var rowHeight = metrics.allRowHeights.get(top);\n if (rowHeight == null) {\n var metricState = grid.getMetricState();\n rowHeight = metricCalculator.getVisibleRowHeight(top, metricState);\n }\n var topOffset = rowHeight * topOffsetPercent;\n return {\n top,\n topOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barTop,\n barHeight,\n width,\n hasVerticalBar\n } = metrics;\n return hasVerticalBar && scrollBarSize > 0 && x >= width - scrollBarHoverSize && x < width && y > barTop && y < barTop + barHeight;\n }\n getTopWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n barHeight,\n handleHeight,\n lastTop,\n barTop,\n rowCount,\n scrollableContentHeight,\n scrollableViewportHeight\n } = metrics;\n var mouseBarY = y - barTop;\n var scrollPercent = clamp((mouseBarY - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barHeight - handleHeight), 0, 1);\n if (rowCount === 1) {\n return {\n top: 0,\n topOffset: scrollPercent * (scrollableContentHeight - scrollableViewportHeight)\n };\n }\n var rawTop = scrollPercent * lastTop;\n return GridVerticalScrollBarMouseHandler.getTopWithOffsetFromRawTop(grid, rawTop);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n handleHeight,\n barTop,\n scrollY\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarY = y - barTop;\n if (mouseBarY >= scrollY && mouseBarY <= scrollY + handleHeight) {\n // Grabbed the vertical handle\n this.dragOffset = mouseBarY - scrollY;\n grid.setState({\n isDraggingVerticalScrollBar: true\n });\n } else {\n // clicked elsewhere in bar\n this.dragOffset = 0;\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingVerticalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridVerticalScrollBarMouseHandler;\n//# sourceMappingURL=GridVerticalScrollBarMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick(_ref, grid) {\n var {\n column,\n row\n } = _ref;\n var {\n model\n } = grid.props;\n if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\nexport default EditMouseHandler;\n//# sourceMappingURL=EditMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* 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\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 */\n\nexport class KeyHandler {\n // What order this key handler should trigger in\n // Default to well below any of the GRID key handlers 100-1000+\n constructor() {\n var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;\n _defineProperty(this, \"order\", void 0);\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\n _defineProperty(this, \"cursor\", null);\n this.order = order;\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, grid) {\n return false;\n }\n\n /**\n * Handle a keyup 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 onUp(event, grid) {\n return false;\n }\n}\nexport default KeyHandler;\n//# sourceMappingURL=KeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport GridRange from \"../GridRange.js\";\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L':\n {\n if (GridUtils.isModifierKeyDown(event)) return false;\n var {\n model\n } = grid.props;\n var {\n columnCount\n } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow, event.shiftKey);\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0, GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n case 'End':\n {\n var {\n model: _model\n } = grid.props;\n var {\n columnCount: _columnCount,\n rowCount\n } = _model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : _columnCount - 1, GridUtils.isModifierKeyDown(event) ? rowCount - 1 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n }\n case 'Escape':\n if (grid.state.selectedRanges.length === 0) return false;\n grid.clearSelectedRanges();\n // consume the event, and stop propagation only if there were selected ranges to clear\n return {\n preventDefault: false,\n stopPropagation: true\n };\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n handleArrowMove(deltaColumn, deltaRow, event, grid) {\n var isShiftKey = event.shiftKey;\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = grid.state;\n var column = isShiftKey ? selectionEndColumn : cursorColumn;\n var row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n var {\n model\n } = grid.props;\n var {\n columnCount,\n rowCount\n } = model;\n var maximizePreviousRange = isModifierKey && isShiftKey;\n var moveToColumn = null;\n var moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n var {\n theme\n } = grid.props;\n var {\n autoSelectRow = false,\n autoSelectColumn = false\n } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n var {\n lastLeft\n } = grid.metrics;\n var {\n left\n } = grid.state;\n left = clamp(left + deltaColumn, 0, lastLeft);\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n grid.setViewState({\n left\n });\n } else if (autoSelectColumn && deltaRow !== 0) {\n var {\n lastTop\n } = grid.metrics;\n var {\n top\n } = grid.state;\n top = clamp(top + deltaRow, 0, lastTop);\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n grid.setViewState({\n top\n });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n handlePageUp(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorColumn,\n selectionEndRow\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row == null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar\n } = metricCalculator.getMetrics(metricState);\n var selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n var viewportPosition = Math.max(selectRangeEndPosition - (row - topVisible), 0);\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n handlePageDown(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n selectionEndRow,\n cursorColumn\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row === null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop\n } = metricCalculator.getMetrics(metricState);\n var lastRowIndex = rowCount - 1;\n var selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n}\nexport default SelectionKeyHandler;\n//# sourceMappingURL=SelectionKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isExpandableGridModel } from \"../ExpandableGridModel.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass TreeKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n {\n return this.handleExpandKey(event, grid);\n }\n default:\n break;\n }\n return false;\n }\n handleExpandKey(event, grid) {\n var {\n selectedRanges\n } = grid.state;\n if (selectedRanges.length === 1) {\n var range = selectedRanges[0];\n if (range.startRow === range.endRow && range.startColumn === range.endColumn) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n var {\n model\n } = grid.props;\n var {\n startRow: row,\n startColumn: column\n } = range;\n if (row != null) {\n var modelRow = grid.getModelRow(row);\n if ((column === 0 || column == null) && isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\nexport default TreeKeyHandler;\n//# sourceMappingURL=TreeKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridRange from \"../GridRange.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nclass EditKeyHandler extends KeyHandler {\n onDown(event, grid) {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n cursorColumn,\n cursorRow\n } = grid.state;\n if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model) || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {\n return false;\n }\n var column = cursorColumn;\n var row = cursorRow;\n if (column == null || row == null) {\n return false;\n }\n if (event.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], event.key);\n return true;\n }\n if (event.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n if (event.key === 'Backspace') {\n grid.startEditing(column, row, true, undefined, '');\n return true;\n }\n if (event.key === 'Delete') {\n grid.setValueForCell(column, row, '');\n return true;\n }\n return false;\n }\n}\nexport default EditKeyHandler;\n//# sourceMappingURL=EditKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table) {\n var data = [];\n var rows = table.querySelectorAll('tr');\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var cells = row.querySelectorAll('td');\n var rowData = [];\n for (var c = 0; c < cells.length; c += 1) {\n var _cell$textContent$tri, _cell$textContent;\n var cell = cells[c];\n rowData.push((_cell$textContent$tri = (_cell$textContent = cell.textContent) === null || _cell$textContent === void 0 ? void 0 : _cell$textContent.trim()) !== null && _cell$textContent$tri !== void 0 ? _cell$textContent$tri : '');\n }\n data.push(rowData);\n }\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes) {\n var result = [];\n nodes.forEach(node => {\n var _node$textContent;\n var text = (_node$textContent = node.textContent) !== null && _node$textContent !== void 0 ? _node$textContent : '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\nexport function parseValueFromElement(element) {\n var _element$textContent$, _element$textContent;\n // Check first if there's an HTML table element that we can use\n var table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n var text = (_element$textContent$ = (_element$textContent = element.textContent) === null || _element$textContent === void 0 ? void 0 : _element$textContent.trim()) !== null && _element$textContent$ !== void 0 ? _element$textContent$ : '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n var {\n childNodes\n } = element;\n var hasTabChar = text.includes('\\t');\n var hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (hasTabChar && childNodes.length !== 0 && (childNodes.length === 1 || childNodes.length > 1 && (childNodes[0].textContent == null || !childNodes[0].textContent.includes('\\t')))) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n var dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute('style', 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;');\n var listener = () => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n grid.focus();\n var value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return {\n preventDefault: false,\n stopPropagation: true\n };\n }\n break;\n }\n return false;\n }\n}\nexport default PasteKeyHandler;\n//# sourceMappingURL=PasteKeyHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport \"./CellInputField.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar directionForKey = key => {\n switch (key) {\n case 'ArrowDown':\n return SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return SELECTION_DIRECTION.RIGHT;\n default:\n return undefined;\n }\n};\nexport function CellInputField(_ref) {\n var {\n selectionRange,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = EMPTY_FUNCTION,\n onCancel = EMPTY_FUNCTION,\n onDone = EMPTY_FUNCTION,\n onContextMenu = EMPTY_FUNCTION,\n style\n } = _ref;\n var inputField = useRef(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n var isCancelled = useRef(false);\n var [initialValue] = useState(propsValue);\n var [isChanged, setIsChanged] = useState(false);\n var [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n var [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(function selectInputField() {\n var {\n current: field\n } = inputField;\n if (field == null) {\n return;\n }\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n }, [selectionRange]);\n var sendUpdate = useCallback(newValue => {\n onChange(newValue);\n }, [onChange]);\n var handleChange = useCallback(event => {\n var {\n value: newValue\n } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n }, [sendUpdate, setValue, setIsChanged]);\n var handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n var handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n var handleCommit = useCallback(function (direction) {\n var fillRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n onDone(value, {\n direction,\n fillRange\n });\n }, [onDone, value]);\n var handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n var handleKeyDown = useCallback(event => {\n event.stopPropagation();\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(undefined, true);\n } else if (event.altKey) {\n var newValue = \"\".concat(value, \"\\n\");\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.UP : SELECTION_DIRECTION.DOWN);\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.LEFT : SELECTION_DIRECTION.RIGHT);\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n }, [handleCancel, handleCommit, isQuickEdit, setValue, setIsChanged, sendUpdate, value]);\n var handleContextMenu = useCallback(event => {\n onContextMenu(event);\n }, [onContextMenu]);\n return /*#__PURE__*/_jsx(\"textarea\", {\n ref: inputField,\n className: classNames('grid-cell-input-field', className),\n value: value,\n onBlur: handleBlur,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n onContextMenu: handleContextMenu,\n onClick: handleClick,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\",\n disabled: disabled,\n style: style\n });\n}\nexport default CellInputField;\n//# sourceMappingURL=CellInputField.js.map","import React from 'react';\nexport var ThemeContext = /*#__PURE__*/React.createContext({});\nexport default ThemeContext;\n//# sourceMappingURL=ThemeContext.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY, getChangedKeys } from '@deephaven/utils';\nimport GridMetricCalculator from \"./GridMetricCalculator.js\";\nimport GridTheme from \"./GridTheme.js\";\nimport GridRange, { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridRenderer from \"./GridRenderer.js\";\nimport GridUtils, { isLinkToken } from \"./GridUtils.js\";\nimport { GridSelectionMouseHandler, GridColumnMoveMouseHandler, GridColumnSeparatorMouseHandler, GridHorizontalScrollBarMouseHandler, GridRowMoveMouseHandler, GridRowSeparatorMouseHandler, GridRowTreeMouseHandler, GridScrollBarCornerMouseHandler, GridVerticalScrollBarMouseHandler, EditMouseHandler, GridTokenMouseHandler } from \"./mouse-handlers/index.js\";\nimport \"./Grid.css\";\nimport { EditKeyHandler, PasteKeyHandler, SelectionKeyHandler, TreeKeyHandler } from \"./key-handlers/index.js\";\nimport CellInputField from \"./CellInputField.js\";\nimport PasteError from \"./errors/PasteError.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { assertIsEditableGridModel, isEditableGridModel } from \"./EditableGridModel.js\";\nimport { assertIsDefined } from \"./errors/index.js\";\nimport ThemeContext from \"./ThemeContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent {\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context) {\n var _ref, _ref2, _ref3, _ref4, _legacyContext$webkit;\n var devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n var legacyContext = context;\n var backingStorePixelRatio = // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n (_ref = (_ref2 = (_ref3 = (_ref4 = (_legacyContext$webkit = legacyContext.webkitBackingStorePixelRatio) !== null && _legacyContext$webkit !== void 0 ? _legacyContext$webkit : legacyContext.mozBackingStorePixelRatio) !== null && _ref4 !== void 0 ? _ref4 : legacyContext.msBackingStorePixelRatio) !== null && _ref3 !== void 0 ? _ref3 : legacyContext.oBackingStorePixelRatio) !== null && _ref2 !== void 0 ? _ref2 : legacyContext.backingStorePixelRatio) !== null && _ref !== void 0 ? _ref : 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor) {\n return cursor != null && cursor !== '' ? \"grid-cursor-\".concat(cursor) : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n\n /* eslint-enable react/sort-comp */\n\n constructor(props) {\n super(props);\n _defineProperty(this, \"renderer\", void 0);\n _defineProperty(this, \"metricCalculator\", void 0);\n _defineProperty(this, \"canvas\", void 0);\n _defineProperty(this, \"canvasContext\", void 0);\n // The wrapper element for the canvas, used for sizing\n _defineProperty(this, \"canvasWrapper\", void 0);\n // Listen for resizing of the element and update the canvas appropriately\n _defineProperty(this, \"resizeObserver\", void 0);\n // We draw the canvas on the next animation frame, keep track of the next one\n _defineProperty(this, \"animationFrame\", void 0);\n // Keep track of previous metrics and new metrics for comparison\n _defineProperty(this, \"prevMetrics\", void 0);\n _defineProperty(this, \"metrics\", void 0);\n _defineProperty(this, \"renderState\", void 0);\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n _defineProperty(this, \"documentCursor\", void 0);\n _defineProperty(this, \"dragTimer\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].sort((a, b) => a.order - b.order)));\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.notifyKeyboardHandlers = this.notifyKeyboardHandlers.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n var {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer\n } = props;\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n this.canvas = null;\n this.canvasContext = null;\n this.canvasWrapper = /*#__PURE__*/React.createRef();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.animationFrame = null;\n this.prevMetrics = null;\n this.metrics = null;\n this.renderState = {};\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [new EditKeyHandler(400), new PasteKeyHandler(450), new SelectionKeyHandler(500), new TreeKeyHandler(900)];\n this.mouseHandlers = [new GridRowSeparatorMouseHandler(100), new GridColumnSeparatorMouseHandler(200), new GridRowMoveMouseHandler(300), new GridColumnMoveMouseHandler(400), new EditMouseHandler(450), new GridVerticalScrollBarMouseHandler(500), new GridHorizontalScrollBarMouseHandler(600), new GridScrollBarCornerMouseHandler(700), new GridRowTreeMouseHandler(800), new GridTokenMouseHandler(875), new GridSelectionMouseHandler(900)];\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n // Offset when dragging a row\n draggingRowOffset: null,\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n isStuckToBottom,\n isStuckToRight,\n /** What revision the grid is drawing. Automatically increments when a forceUpdate is called. */\n updateRevision: 0\n };\n }\n componentDidMount() {\n var _this$canvas;\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n (_this$canvas = this.canvas) === null || _this$canvas === void 0 || _this$canvas.addEventListener('wheel', this.handleWheel, {\n passive: false\n });\n if (this.canvasWrapper.current != null) {\n this.resizeObserver.observe(this.canvasWrapper.current);\n }\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n var {\n isStuckToBottom,\n isStuckToRight\n } = this.props;\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStuckToBottom, isStuckToRight);\n this.setState({\n top,\n left\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n renderError\n } = this.state;\n\n // Render errors mean we can't recover\n if (renderError != null) {\n throw renderError;\n }\n var changedProps = getChangedKeys(prevProps, this.props);\n var changedState = getChangedKeys(prevState, this.state);\n // We don't need to bother re-checking any of the metrics if no props have changed or only the children have changed\n if ((changedProps.length === 0 || changedProps.length === 1 && changedProps[0] === 'children') && changedState.length === 0) {\n return;\n }\n var {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete\n } = this.props;\n var {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows\n } = prevProps;\n var {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows\n } = prevState;\n var {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows\n } = this.state;\n var stateUpdates = {};\n if (prevPropMovedColumns !== movedColumns) {\n stateUpdates.movedColumns = movedColumns;\n }\n if (prevPropMovedRows !== movedRows) {\n stateUpdates.movedRows = movedRows;\n }\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n if (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n if (isStickyBottom !== prevIsStickyBottom) {\n stateUpdates.isStuckToBottom = false;\n }\n if (isStickyRight !== prevIsStickyRight) {\n stateUpdates.isStuckToRight = false;\n }\n var updatedState = _objectSpread(_objectSpread({}, this.state), stateUpdates);\n this.updateMetrics(updatedState);\n this.requestUpdateCanvas();\n if (this.needToUpdateScroll()) {\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStickyBottom, isStickyRight);\n updatedState.top = top;\n updatedState.left = left;\n }\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n this.setState(updatedState);\n }\n componentWillUnmount() {\n var _this$canvas2;\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n (_this$canvas2 = this.canvas) === null || _this$canvas2 === void 0 || _this$canvas2.removeEventListener('wheel', this.handleWheel);\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n this.resizeObserver.disconnect();\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n getTheme() {\n var {\n theme\n } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n getGridPointFromEvent(event) {\n assertIsDefined(this.canvas);\n var rect = this.canvas.getBoundingClientRect();\n var x = event.clientX - rect.left;\n var y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n getGridPointFromXY(x, y) {\n if (!this.metrics) throw new Error('metrics must be set');\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n getMetricState() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n var theme = this.getTheme();\n var {\n model,\n stateOverride\n } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\n var context = this.canvasContext;\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n var {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n } = state;\n return _objectSpread({\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n }, stateOverride);\n }\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex) {\n var _this$metrics;\n var modelIndex = (_this$metrics = this.metrics) === null || _this$metrics === void 0 || (_this$metrics = _this$metrics.modelColumns) === null || _this$metrics === void 0 ? void 0 : _this$metrics.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for column \".concat(columnIndex));\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex) {\n var _this$metrics2;\n var modelIndex = (_this$metrics2 = this.metrics) === null || _this$metrics2 === void 0 || (_this$metrics2 = _this$metrics2.modelRows) === null || _this$metrics2 === void 0 ? void 0 : _this$metrics2.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for row \".concat(rowIndex));\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row) {\n var expandDescendants = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var modelRow = this.getModelRow(row);\n var {\n model\n } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow), expandDescendants);\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n this.setState({\n isStuckToBottom: false\n });\n }\n getStickyScrollPosition(isStickyBottom, isStickyRight) {\n // eslint-disable-next-line react/destructuring-assignment\n if (!this.metrics) return {\n left: this.state.left,\n top: this.state.top\n };\n var {\n bottomVisible,\n rowCount,\n top,\n lastTop,\n rightVisible,\n columnCount,\n left,\n lastLeft\n } = this.metrics;\n var newTop = top;\n var newLeft = left;\n if (isStickyBottom && (bottomVisible < rowCount - 1 && bottomVisible > 0 || top > lastTop)) {\n newTop = lastTop;\n }\n if (isStickyRight && (rightVisible < columnCount - 1 && rightVisible > 0 || left > lastLeft)) {\n newLeft = lastLeft;\n }\n return {\n top: newTop,\n left: newLeft\n };\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges\n });\n if (gridRanges.length > 0) {\n var range = GridRange.boundedRange(gridRanges[0], columnCount, rowCount);\n var newCursorRow = cursorRow;\n var newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({\n row: newCursorRow,\n column: newCursorColumn\n } = range.startCell());\n }\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow\n });\n }\n }\n initContext() {\n var {\n canvas\n } = this;\n var {\n canvasOptions\n } = this.props;\n if (!canvas) throw new Error('Canvas not set');\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n requestUpdateCanvas() {\n if (this.animationFrame != null) {\n return;\n }\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n try {\n this.updateCanvas();\n } catch (e) {\n // Errors thrown from the animation frame are uncaught by the grid panel\n this.setState({\n renderError: e\n });\n }\n });\n }\n\n /**\n * Updates the canvas, metrics, and render state, then draws the canvas.\n */\n updateCanvas() {\n this.updateCanvasScale();\n this.updateMetrics();\n this.updateRenderState();\n var {\n canvasContext,\n metrics,\n renderState\n } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n this.renderer.configureContext(canvasContext, renderState);\n var {\n onViewChanged\n } = this.props;\n onViewChanged(metrics);\n this.drawCanvas();\n }\n updateCanvasScale() {\n var {\n canvas,\n canvasContext,\n canvasWrapper\n } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvasWrapper.current) throw new Error('canvasWrapper not set');\n\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n var rect = canvasWrapper.current.getBoundingClientRect();\n var width = Math.floor(rect.width);\n var height = Math.floor(rect.height);\n\n // avoid triggering a dom re-calc if size hasn't changed\n if (parseFloat(canvas.style.width) === width && parseFloat(canvas.style.height) === height) {\n return;\n }\n var scale = Grid.getScale(canvasContext);\n canvas.style.width = \"\".concat(width, \"px\");\n canvas.style.height = \"\".concat(height, \"px\");\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n updateScrollBounds() {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n left,\n top\n } = this.state;\n var {\n lastLeft,\n lastTop\n } = this.metrics;\n if (left > lastLeft) {\n this.setState({\n left: lastLeft,\n leftOffset: 0\n });\n }\n if (top > lastTop) {\n this.setState({\n top: lastTop,\n topOffset: 0\n });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n needToUpdateScroll() {\n if (!this.metrics || !this.prevMetrics) {\n return false;\n }\n var {\n rowCount,\n columnCount,\n height,\n width\n } = this.metrics;\n var {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth\n } = this.prevMetrics;\n if (prevRowCount !== rowCount || height !== prevHeight) {\n var {\n isStuckToBottom\n } = this.state;\n if (isStuckToBottom) {\n return true;\n }\n }\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n var {\n isStuckToRight\n } = this.state;\n if (isStuckToRight) {\n return true;\n }\n }\n return false;\n }\n updateMetrics() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n this.prevMetrics = this.metrics;\n var {\n metricCalculator\n } = this;\n var metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState) {\n var {\n selectedRanges: oldSelectedRanges\n } = prevState;\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges !== oldSelectedRanges) {\n var {\n onSelectionChanged\n } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection() {\n var {\n model\n } = this.props;\n var {\n selectedRanges\n } = this.state;\n var {\n columnCount,\n rowCount\n } = model;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var range = selectedRanges[i];\n if (range.endColumn != null && range.endColumn >= columnCount || range.endRow != null && range.endRow >= rowCount) {\n // Just clear the selection rather than trying to trim it.\n this.setState({\n selectedRanges: [],\n lastSelectedRanges: []\n });\n return false;\n }\n }\n return true;\n }\n\n /**\n * Clears all selected ranges\n */\n clearSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: selectedRanges\n });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1)\n });\n }\n }\n\n /** Gets the selected ranges */\n getSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n return selectedRanges;\n }\n\n /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column, row) {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var maximizePreviousRange = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n this.setState(state => {\n var {\n selectedRanges,\n selectionStartRow,\n selectionStartColumn\n } = state;\n var {\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n if (extendSelection && selectedRanges.length > 0) {\n var lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n var left = null;\n var top = null;\n var right = null;\n var bottom = null;\n if (maximizePreviousRange) {\n var _lastSelectedRange$st, _lastSelectedRange$st2, _lastSelectedRange$en, _lastSelectedRange$en2;\n left = autoSelectRow !== undefined && autoSelectRow ? null : Math.min(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$st = lastSelectedRange.startColumn) !== null && _lastSelectedRange$st !== void 0 ? _lastSelectedRange$st : 0);\n top = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.min(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$st2 = lastSelectedRange.startRow) !== null && _lastSelectedRange$st2 !== void 0 ? _lastSelectedRange$st2 : 0);\n right = autoSelectRow !== undefined && autoSelectRow ? null : Math.max(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$en = lastSelectedRange.endColumn) !== null && _lastSelectedRange$en !== void 0 ? _lastSelectedRange$en : 0);\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.max(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$en2 = lastSelectedRange.endRow) !== null && _lastSelectedRange$en2 !== void 0 ? _lastSelectedRange$en2 : 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n }\n var selectedRange = GridRange.makeNormalized(left, top, right, bottom);\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n var _newRanges = [...selectedRanges];\n _newRanges[_newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: _newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n }\n var newRanges = [...selectedRanges];\n var selectedColumn = autoSelectRow !== undefined && autoSelectRow ? null : column;\n var selectedRow = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n newRanges.push(GridRange.makeNormalized(selectedColumn, selectedRow, selectedColumn, selectedRow));\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection() {\n this.setState(state => {\n var {\n theme\n } = this.props;\n var {\n autoSelectRow\n } = theme;\n var {\n selectedRanges,\n lastSelectedRanges,\n cursorRow,\n cursorColumn\n } = state;\n if (selectedRanges.length === 1 && (autoSelectRow !== undefined && autoSelectRow ? GridRange.rowCount(selectedRanges) === 1 : GridRange.cellCount(selectedRanges) === 1) && GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return {\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n cursorColumn: null,\n cursorRow: null\n };\n }\n var newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n var lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (var i = 0; i < newSelectedRanges.length - 1; i += 1) {\n var selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n var remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n var newCursorColumn = cursorColumn;\n var newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var nextCursor = GridRange.nextCell(GridRange.boundedRanges(selectedRanges, columnCount, rowCount));\n if (nextCursor != null) {\n ({\n column: newCursorColumn,\n row: newCursorRow\n } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n if (newSelectedRanges.length === 0) {\n newCursorColumn = null;\n newCursorRow = null;\n }\n var selectionChanged = newSelectedRanges.length !== selectedRanges.length || newSelectedRanges.some((range, index) => !range.equals(selectedRanges[index]));\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n // The onSelectionChanged callback has already been called with the selectedRanges at this point.\n // If the selection is not changed (e.g., the user is adding via ctrl+click and not removing),\n // there is no need to change and trigger the callback again.\n selectedRanges: selectionChanged ? newSelectedRanges : selectedRanges,\n lastSelectedRanges: selectedRanges\n };\n });\n }\n setFocusRow(focusedRow) {\n var _userRowHeights$get;\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n var {\n gridY,\n height,\n lastTop,\n userRowHeights,\n rowHeight\n } = this.metrics;\n var tableHeight = height - gridY;\n var halfViewportHeight = Math.round(tableHeight / 2) + ((_userRowHeights$get = userRowHeights.get(focusedRow)) !== null && _userRowHeights$get !== void 0 ? _userRowHeights$get : rowHeight);\n var metricState = this.getMetricState();\n var newTop = this.metricCalculator.getLastTop(metricState, focusedRow + 1, halfViewportHeight);\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false\n });\n var {\n cursorColumn\n } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll() {\n var {\n model,\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n var top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n var bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : model.rowCount - 1;\n var left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n var right = autoSelectRow !== undefined && autoSelectRow ? null : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n */\n moveCursor(deltaColumn, deltaRow, extendSelection) {\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = this.state;\n var column = extendSelection ? selectionEndColumn : cursorColumn;\n var row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n var {\n left,\n top\n } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var _left = clamp(column + deltaColumn, 0, columnCount - 1);\n var _top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(_left, _top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param direction The direction to move the cursor in\n */\n moveCursorInDirection() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GridRange.SELECTION_DIRECTION.DOWN;\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n var ranges = selectedRanges.length > 0 ? selectedRanges : [GridRange.makeCell(cursorColumn, cursorRow)];\n var nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n var _gridRange$nextCell;\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n var gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor = (_gridRange$nextCell = gridRange.nextCell(cursorColumn, cursorRow, direction)) !== null && _gridRange$nextCell !== void 0 ? _gridRange$nextCell : gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(GridRange.boundedRanges(ranges, columnCount, rowCount), cursorColumn, cursorRow, direction);\n }\n if (nextCursor != null) {\n var {\n column,\n row\n } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row\n });\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row\n });\n }\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var keepCursorInView = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var maximizePreviousRange = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param column The column index to bring into view\n * @param row The row index to bring into view\n */\n moveViewToCell(column, row) {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n metricCalculator\n } = this;\n var {\n bottomVisible,\n rightVisible,\n topVisible,\n leftVisible\n } = this.metrics;\n var metricState = this.getMetricState(this.state);\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = this.state;\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.metrics) throw new Error('metrics not set');\n var {\n isStickyBottom,\n isStickyRight\n } = this.props;\n var {\n top,\n left\n } = viewState;\n var {\n lastTop,\n lastLeft,\n hasVerticalBar,\n hasHorizontalBar\n } = this.metrics;\n if (top != null && hasVerticalBar) {\n this.setState({\n isStuckToBottom: isStickyBottom && top >= lastTop\n });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({\n isStuckToRight: isStickyRight && left >= lastLeft\n });\n }\n this.setState(viewState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(column, row) {\n var isQuickEdit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var selectionRange = arguments.length > 3 ? arguments[3] : undefined;\n var value = arguments.length > 4 ? arguments[4] : undefined;\n var {\n model\n } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n var cell = {\n column,\n row,\n selectionRange,\n value: value !== undefined ? value : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit\n };\n this.setState({\n editingCell: cell,\n cursorColumn: column,\n cursorRow: row\n });\n this.moveViewToCell(column, row);\n }\n\n /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(column, row, value) {\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n return isEditableGridModel(model) && model.isValidForCell(modelColumn, modelRow, value);\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param value Table or a string that is being pasted\n */\n pasteValue(value) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n var {\n movedColumns,\n movedRows,\n selectedRanges\n } = _this.state;\n try {\n assertIsEditableGridModel(model);\n if (!model.isEditable || !selectedRanges.every(range => model.isEditableRange(range))) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n var _edits = [];\n var modelRanges = GridUtils.getModelRanges(selectedRanges, movedColumns, movedRows);\n GridRange.forEachCell(modelRanges, (column, row) => {\n _edits.push({\n column,\n row,\n text: value\n });\n });\n yield model.setValues(_edits);\n return;\n }\n\n // Otherwise it's a table of data\n var tableHeight = value.length;\n var tableWidth = value[0].length;\n var {\n columnCount,\n rowCount\n } = model;\n var ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n // Check for\n if (ranges.every(range => {\n var _range$startColumn, _range$startRow;\n return GridRange.cellCount([range]) === 1 && ((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0) + tableWidth <= columnCount && ((_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0) + tableHeight <= rowCount;\n })) {\n // Remap the selected ranges\n ranges = ranges.map(range => {\n var _range$startColumn2, _range$startRow2;\n return new GridRange(range.startColumn, range.startRow, ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : 0) + tableWidth - 1, ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : 0) + tableHeight - 1);\n });\n _this.setSelectedRanges(ranges);\n }\n var edits = [];\n ranges.forEach(range => {\n var _range$startColumn3;\n if (((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : 0) + tableWidth > columnCount) {\n throw new PasteError('Pasted content would overflow columns.');\n }\n for (var x = 0; x < tableWidth; x += 1) {\n for (var y = 0; y < tableHeight; y += 1) {\n var _range$startColumn4, _range$startRow3;\n edits.push({\n column: ((_range$startColumn4 = range.startColumn) !== null && _range$startColumn4 !== void 0 ? _range$startColumn4 : 0) + x,\n row: ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : 0) + y,\n text: value[y][x]\n });\n }\n }\n });\n yield model.setValues(edits);\n } catch (e) {\n var {\n onError\n } = _this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n }\n })();\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(column, row, value) {\n var {\n model\n } = this.props;\n assertIsEditableGridModel(model);\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges, value) {\n var {\n model\n } = this.props;\n var {\n movedColumns,\n movedRows\n } = this.state;\n var modelRanges = GridUtils.getModelRanges(ranges, movedColumns, movedRows);\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row, column) {\n var {\n selectedRanges\n } = this.state;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var _selectedRange$endRow, _selectedRange$endCol;\n var selectedRange = selectedRanges[i];\n var rowSelected = selectedRange.startRow === null || selectedRange.startRow <= row && row <= ((_selectedRange$endRow = selectedRange.endRow) !== null && _selectedRange$endRow !== void 0 ? _selectedRange$endRow : 0);\n var columnSelected = selectedRange.startColumn === null || selectedRange.startColumn <= column && column <= ((_selectedRange$endCol = selectedRange.endColumn) !== null && _selectedRange$endCol !== void 0 ? _selectedRange$endCol : 0);\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n return false;\n }\n addDocumentCursor() {\n var cursor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n removeDocumentCursor() {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n startDragTimer(event) {\n this.stopDragTimer();\n var mouseEvent = new MouseEvent('custom', event.nativeEvent);\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n stopDragTimer() {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n */\n drawCanvas() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n renderer,\n canvasContext: context,\n renderState\n } = this;\n context.save();\n renderer.drawCanvas(renderState);\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus() {\n var _this$canvas3;\n (_this$canvas3 = this.canvas) === null || _this$canvas3 === void 0 || _this$canvas3.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused() {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event) {\n var _this$canvas4;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n (_this$canvas4 = this.canvas) === null || _this$canvas4 === void 0 || _this$canvas4.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event) {\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the keyboard handlers for this grid of a keyboard event.\n * @param functionName The name of the function in the keyboard handler to call\n * @param event The keyboard event to notify\n */\n notifyKeyboardHandlers(functionName, event) {\n var keyHandlers = this.getKeyHandlers();\n var cursor = null;\n for (var i = 0; i < keyHandlers.length; i += 1) {\n var keyHandler = keyHandlers[i];\n var result = keyHandler[functionName] != null && keyHandler[functionName](event, this);\n if (result !== false) {\n var _options$stopPropagat, _options$preventDefau;\n if (keyHandler.cursor != null) {\n ({\n cursor\n } = keyHandler);\n }\n var options = result;\n if ((_options$stopPropagat = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat !== void 0 ? _options$stopPropagat : true) event.stopPropagation();\n if ((_options$preventDefau = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n }\n handleKeyDown(event) {\n this.notifyKeyboardHandlers('onDown', event);\n }\n handleKeyUp(event) {\n this.notifyKeyboardHandlers('onUp', event);\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(functionName, event) {\n var updateCoordinates = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var addCursorToDocument = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n var cursor = null;\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n var result = mouseHandler[functionName] != null && mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\n var _options$stopPropagat2, _options$preventDefau2;\n if (mouseHandler.cursor != null) {\n ({\n cursor\n } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n var options = result;\n if ((_options$stopPropagat2 = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat2 !== void 0 ? _options$stopPropagat2 : true) event.stopPropagation();\n if ((_options$preventDefau2 = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau2 !== void 0 ? _options$preventDefau2 : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n if (updateCoordinates) {\n var {\n x,\n y\n } = gridPoint;\n this.setState({\n mouseX: x,\n mouseY: y\n });\n }\n }\n handleMouseDown(event) {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onDown', event);\n this.startDragTimer(event);\n }\n handleDoubleClick(event) {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n handleMouseMove(event) {\n this.notifyMouseHandlers('onMove', event);\n }\n handleMouseLeave(event) {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({\n mouseX: null,\n mouseY: null\n });\n }\n handleMouseDrag(event) {\n this.setState({\n isDragging: true\n });\n this.notifyMouseHandlers('onDrag', event, true, true);\n this.stopDragTimer();\n }\n handleMouseUp(event) {\n // Ignore right click while dragging\n var {\n isDragging\n } = this.state;\n if (isDragging && event.button === 2) {\n return;\n }\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onUp', event, false);\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n handleResize() {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvas();\n if (!this.metrics) throw new Error('metrics not set');\n this.forceUpdate();\n }\n forceUpdate(callback) {\n this.setState(_ref5 => {\n var {\n updateRevision = 0\n } = _ref5;\n return {\n updateRevision: (updateRevision + 1) % Number.MAX_SAFE_INTEGER\n };\n });\n super.forceUpdate(callback);\n }\n handleWheel(event) {\n this.notifyMouseHandlers('onWheel', event);\n if (event.defaultPrevented) {\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this;\n var metricState = this.getMetricState();\n if (!metrics) throw new Error('metrics not set');\n var {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar\n } = metrics;\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = metrics;\n var theme = this.getTheme();\n var {\n deltaX,\n deltaY\n } = GridUtils.getScrollDelta(event, metrics.barWidth, metrics.barHeight, metrics.rowHeight, metrics.rowHeight);\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n if (columnCount > 1) {\n // no scrolling needed, at directional edge\n if (leftOffset > 0 && left >= lastLeft || leftOffset < 0 && left <= 0) {\n leftOffset = 0;\n break;\n }\n } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n var maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n if (leftOffset > 0) {\n var _metrics$allColumnWid;\n // scroll right\n\n // get width of next column\n var columnWidth = (_metrics$allColumnWid = metrics.allColumnWidths.get(left)) !== null && _metrics$allColumnWid !== void 0 ? _metrics$allColumnWid : metricCalculator.getVisibleColumnWidth(left, metricState);\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n var _metrics$allColumnWid2;\n // scroll left\n\n // get width of next column\n var _columnWidth = (_metrics$allColumnWid2 = metrics.allColumnWidths.get(left - 1)) !== null && _metrics$allColumnWid2 !== void 0 ? _metrics$allColumnWid2 : metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n if (Math.abs(leftOffset) <= _columnWidth && theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + _columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if (topOffset > 0 && top >= lastTop || topOffset < 0 && top <= 0) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n var maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n if (topOffset > 0) {\n var _metrics$allRowHeight;\n // scroll direction down\n\n // get height of next row\n var rowHeight = (_metrics$allRowHeight = metrics.allRowHeights.get(top)) !== null && _metrics$allRowHeight !== void 0 ? _metrics$allRowHeight : metricCalculator.getVisibleRowHeight(top, metricState);\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n var _metrics$allRowHeight2;\n // scroll direction up\n\n // get height of next row\n var _rowHeight = (_metrics$allRowHeight2 = metrics.allRowHeights.get(top - 1)) !== null && _metrics$allRowHeight2 !== void 0 ? _metrics$allRowHeight2 : metricCalculator.getVisibleRowHeight(top - 1, metricState);\n if (Math.abs(topOffset) <= _rowHeight && theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + _rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n if (metrics.top !== top || metrics.left !== left || metrics.topOffset !== topOffset || metrics.leftOffset !== leftOffset) {\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel() {\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value) {\n this.setState(_ref6 => {\n var {\n editingCell\n } = _ref6;\n try {\n assertIsDefined(editingCell);\n return {\n editingCell: _objectSpread(_objectSpread({}, editingCell), {}, {\n value\n })\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n var {\n onError\n } = this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(value) {\n var {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var {\n editingCell,\n selectedRanges\n } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n var {\n column,\n row\n } = editingCell;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction === null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({\n editingCell: null\n });\n }\n return;\n }\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n if (direction !== null) {\n this.moveCursorInDirection(direction);\n }\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n renderInputField() {\n var {\n model\n } = this.props;\n var {\n editingCell\n } = this.state;\n var {\n metrics\n } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n var {\n selectionRange,\n value,\n isQuickEdit\n } = editingCell;\n var {\n column,\n row\n } = editingCell;\n var {\n scrollX,\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights\n } = metrics;\n var {\n activeCellSelectionBorderWidth\n } = this.getTheme();\n var x = allColumnXs.get(column);\n var y = allRowYs.get(row);\n var w = allColumnWidths.get(column);\n var h = allRowHeights.get(row);\n\n // make sure cell doeesn't go off the left side of the grid\n var leftBorderOffset = gridX + (x !== null && x !== void 0 ? x : 0) <= 0 && scrollX <= 0 ? activeCellSelectionBorderWidth : 0;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n var wrapperStyle = x != null && y != null && w != null && h != null ? {\n position: 'absolute',\n left: gridX + x + leftBorderOffset,\n top: gridY + y,\n width: w - leftBorderOffset,\n height: h\n } : {\n opacity: 0\n };\n var modelColumn;\n var modelRow;\n try {\n modelColumn = this.getModelColumn(column);\n modelRow = this.getModelRow(row);\n } catch (e) {\n return null;\n }\n var inputStyle = modelColumn != null && modelRow != null ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow)\n } : undefined;\n var isValid = modelColumn != null && modelRow != null ? model.isValidForCell(modelColumn, modelRow, value) : false;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(CellInputField, {\n selectionRange: selectionRange,\n className: classNames({\n error: !isValid\n }),\n onCancel: this.handleEditCellCancel,\n onChange: this.handleEditCellChange,\n onDone: this.handleEditCellCommit,\n isQuickEdit: isQuickEdit,\n style: inputStyle,\n value: value\n }, \"\".concat(column, \",\").concat(row))\n });\n }\n\n /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges\n } = this.state;\n var {\n model,\n stateOverride\n } = this.props;\n var {\n metrics\n } = this;\n var context = this.canvasContext;\n var theme = this.getTheme();\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n assertNotNull(metrics);\n this.renderState = _objectSpread({\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow\n }, stateOverride);\n return this.renderState;\n }\n render() {\n var {\n children\n } = this.props;\n var {\n cursor\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"grid-wrapper\",\n ref: this.canvasWrapper,\n children: [/*#__PURE__*/_jsx(\"canvas\", {\n className: classNames('grid-canvas', Grid.getCursorClassName(cursor)),\n ref: canvas => {\n this.canvas = canvas;\n },\n onClick: this.handleClick,\n onContextMenu: this.handleContextMenu,\n onDoubleClick: this.handleDoubleClick,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n tabIndex: 0,\n children: \"Your browser does not support HTML canvas. Update your browser?\"\n }), this.renderInputField(), children]\n });\n }\n}\n_defineProperty(Grid, \"contextType\", ThemeContext);\n_defineProperty(Grid, \"defaultProps\", {\n canvasOptions: {\n alpha: false\n },\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY,\n mouseHandlers: EMPTY_ARRAY,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n onError: () => undefined,\n onSelectionChanged: () => undefined,\n onMovedColumnsChanged: moveOperations => undefined,\n onMoveColumnComplete: () => undefined,\n onMovedRowsChanged: () => undefined,\n onMoveRowComplete: () => undefined,\n onViewChanged: metrics => undefined,\n onTokenClicked: token => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {},\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false\n }\n});\n// use same constant as chrome source for windows\n// https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n_defineProperty(Grid, \"pixelsPerLine\", 100 / 3);\n_defineProperty(Grid, \"dragTimeout\", 1000);\n_defineProperty(Grid, \"getTheme\", memoize((contextTheme, userTheme) => _objectSpread(_objectSpread(_objectSpread({}, GridTheme), contextTheme), userTheme)));\nexport default Grid;\n//# sourceMappingURL=Grid.js.map"],"names":["getChangedKeys","oldObject","newObject","keys","changedKeys","key","assertIsDefined","val","AssertionError","_defineProperty","e","r","_toPropertyKey","t","i","_toPrimitive","PasteError","ownKeys","o","_objectSpread","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","metrics","model","_modelColumns$get","modelColumns","movedColumns","allColumnXs","columnCount","allColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","maxX","modelIndex","GridUtils","group","isColumnGroup","left","right","range","_allColumnXs$get","_allColumnXs$get2","_allColumnWidths$get","startVisibleIndex","endVisibleIndex","_ref","_ref2","_allColumnWidths$get2","possibleLeft","GridColumnMoveMouseHandler","GridMouseHandler","grid","direction","lastLeft","leftOffset","nextLeft","nextOffset","_userColumnWidths$get","prevColumnWidth","leftColumnWidth","_userColumnWidths$get2","_modelIndex","mouseX","mouseY","gridPoint","x","column","columnHeaderDepth","columnInfo","rowHeaderWidth","event","draggingColumn","initialColumnInfo","startColumn","endColumn","deltaX","_draggingParentGroup$","assertNotNull","gridX","draggingColumnDepth","width","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","clamp","parentGroup","parentVisibleRange","_allColumnXs$get3","_newMovedColumns","_getColumnInfo","_newMovedColumns2","parentRight","toVisibleIndex","_newMovedColumns3","toColumnInfo","_toColumnInfo$left","_toColumnInfo$right","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","newMovedColumns","to","moveDistance","newDraggingRange","GridHorizontalScrollBarMouseHandler","rawLeft","theme","metricCalculator","_left","_leftOffset","leftOffsetPercent","columnWidth","metricState","scrollBarSize","scrollBarHoverSize","y","barLeft","barWidth","height","hasHorizontalBar","_this$dragOffset","handleWidth","scrollableContentWidth","scrollableViewportWidth","mouseBarX","scrollPercent","scrollX","newLeft","newLeftOffset","GridRowMoveMouseHandler","row","columnHeaderHeight","allRowYs","rowY","getOrThrow","draggingRow","top","lastTop","bottom","bottomVisible","rowCount","allRowHeights","minY","topRow","maxY","bottomRow","movedRows","minMoveY","maxMoveY","GridRowSeparatorMouseHandler","GridSeparatorMouseHandler","index","size","separator","GridScrollBarCornerMouseHandler","hasVerticalBar","GridVerticalScrollBarMouseHandler","rawTop","_top","_topOffset","topOffsetPercent","rowHeight","topOffset","barTop","barHeight","handleHeight","scrollableContentHeight","scrollableViewportHeight","mouseBarY","scrollY","newTop","newTopOffset","EditMouseHandler","isEditableGridModel","GridRange","KeyHandler","order","SelectionKeyHandler","_model","_columnCount","deltaColumn","deltaRow","isShiftKey","isModifierKey","cursorRow","cursorColumn","selectionEndColumn","selectionEndRow","maximizePreviousRange","moveToColumn","moveToRow","autoSelectRow","autoSelectColumn","topVisible","selectRangeEndPosition","viewportPosition","lastRowIndex","TreeKeyHandler","selectedRanges","modelRow","isExpandableGridModel","EditKeyHandler","parseValueFromTable","table","data","rows","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","parseValueFromNodes","nodes","result","node","_node$textContent","text","parseValueFromElement","element","_element$textContent$","_element$textContent","childNodes","hasTabChar","hasFirefoxTab","PasteKeyHandler","dummyInput","listener","value","directionForKey","SELECTION_DIRECTION","CellInputField","selectionRange","className","disabled","propsValue","propsIsQuickEdit","onChange","EMPTY_FUNCTION","onCancel","onDone","onContextMenu","style","inputField","useRef","isCancelled","initialValue","useState","isChanged","setIsChanged","isQuickEdit","setIsQuickEdit","setValue","useEffect","field","sendUpdate","useCallback","newValue","handleChange","handleCancel","handleClick","handleCommit","fillRange","handleBlur","handleKeyDown","handleContextMenu","_jsx","classNames","ThemeContext","React","asyncGeneratorStep","n","a","u","_asyncToGenerator","_next","_throw","Grid","PureComponent","context","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","legacyContext","backingStorePixelRatio","cursor","props","memoize","keyHandlers","b","mouseHandlers","isStuckToBottom","isStuckToRight","renderer","GridRenderer","GridMetricCalculator","GridColumnSeparatorMouseHandler","GridRowTreeMouseHandler","GridTokenMouseHandler","GridSelectionMouseHandler","EMPTY_ARRAY","_this$canvas","prevProps","prevState","renderError","changedProps","changedState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","stateUpdates","updatedState","_this$canvas2","rect","state","stateOverride","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","columnIndex","_this$metrics","rowIndex","_this$metrics2","expandDescendants","rightVisible","gridRanges","newCursorRow","newCursorColumn","canvas","canvasOptions","canvasContext","renderState","onViewChanged","canvasWrapper","scale","prevRowCount","prevColumnCount","prevHeight","prevWidth","oldSelectedRanges","onSelectionChanged","extendSelection","selectionStartRow","selectionStartColumn","lastSelectedRange","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","selectedRange","_newRanges","newRanges","selectedColumn","selectedRow","lastSelectedRanges","newSelectedRanges","lastRange","remainder","nextCursor","selectionChanged","focusedRow","_userRowHeights$get","gridY","userRowHeights","tableHeight","halfViewportHeight","ranges","_gridRange$nextCell","gridRange","keepCursorInView","leftVisible","viewState","forceUpdate","modelColumn","_this","assertIsEditableGridModel","_edits","modelRanges","tableWidth","_range$startColumn","_range$startRow","_range$startColumn2","_range$startRow2","edits","_range$startColumn3","_range$startColumn4","_range$startRow3","onError","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","mouseEvent","_this$canvas3","_this$canvas4","mouseHandler","functionName","keyHandler","_options$stopPropagat","_options$preventDefau","options","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","isDragging","callback","_ref5","updateRevision","deltaY","maxLeftOffset","_metrics$allColumnWid","_metrics$allColumnWid2","_columnWidth","maxTopOffset","_metrics$allRowHeight","_metrics$allRowHeight2","_rowHeight","_ref6","editingCell","activeCellSelectionBorderWidth","w","h","leftBorderOffset","wrapperStyle","inputStyle","isValid","draggingColumnSeparator","draggingRowOffset","draggingRowSeparator","children","_jsxs","moveOperations","token","isLinkToken","contextTheme","userTheme","GridTheme"],"mappings":"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"}
|