@deephaven/code-studio 1.28.1 → 1.29.1-plugin-optional-deps.fd4cf96.0.sha-fd4cf96
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-CtUuR9HT.js → AppRoot-BYgUP461.js} +7 -7
- package/build/assets/{AppRoot-CtUuR9HT.js.map → AppRoot-BYgUP461.js.map} +1 -1
- package/build/assets/{Chart-D0szrevz.js → Chart-BQ8I4i7L.js} +3 -3
- package/build/assets/{Chart-D0szrevz.js.map → Chart-BQ8I4i7L.js.map} +1 -1
- package/build/assets/{ControlType-CtXY1n1b.js → ControlType-dZUYFjWs.js} +43 -43
- package/build/assets/ControlType-dZUYFjWs.js.map +1 -0
- package/build/assets/{FormatterUtils-DlljNd83.js → FormatterUtils-BexTF7Pg.js} +2 -2
- package/build/assets/{FormatterUtils-DlljNd83.js.map → FormatterUtils-BexTF7Pg.js.map} +1 -1
- package/build/assets/Grid-Tx2xMiLi.js +7 -0
- package/build/assets/Grid-Tx2xMiLi.js.map +1 -0
- package/build/assets/IrisGrid-BrXTJDXQ.js +14 -0
- package/build/assets/IrisGrid-BrXTJDXQ.js.map +1 -0
- package/build/assets/IrisGridModel-C29Knup_.js +5 -0
- package/build/assets/IrisGridModel-C29Knup_.js.map +1 -0
- package/build/assets/{IrisGridShortcuts-C6vL7IZi.js → IrisGridShortcuts-C-HT1iXy.js} +2 -2
- package/build/assets/{IrisGridShortcuts-C6vL7IZi.js.map → IrisGridShortcuts-C-HT1iXy.js.map} +1 -1
- package/build/assets/{LocalWorkspaceStorage-UZ320sjQ.js → LocalWorkspaceStorage-CGX54FlI.js} +2 -2
- package/build/assets/{LocalWorkspaceStorage-UZ320sjQ.js.map → LocalWorkspaceStorage-CGX54FlI.js.map} +1 -1
- package/build/assets/{MarkdownEditor-BR5w9NeU.js → MarkdownEditor-BTW0kH2X.js} +2 -2
- package/build/assets/{MarkdownEditor-BR5w9NeU.js.map → MarkdownEditor-BTW0kH2X.js.map} +1 -1
- package/build/assets/{MarkdownNotebook-CapbcK55.js → MarkdownNotebook-CO6sIiLu.js} +2 -2
- package/build/assets/{MarkdownNotebook-CapbcK55.js.map → MarkdownNotebook-CO6sIiLu.js.map} +1 -1
- package/build/assets/MissingPartitionError-DvnHZsCQ.js +7 -0
- package/build/assets/MissingPartitionError-DvnHZsCQ.js.map +1 -0
- package/build/assets/{MockChartModel-C9ZERWJD.js → MockChartModel-aVTbWE3h.js} +2 -2
- package/build/assets/{MockChartModel-C9ZERWJD.js.map → MockChartModel-aVTbWE3h.js.map} +1 -1
- package/build/assets/PasteKeyHandler-C2c93kPX.js +15 -0
- package/build/assets/PasteKeyHandler-C2c93kPX.js.map +1 -0
- package/build/assets/Picker-fFRNaQIf.js +26 -0
- package/build/assets/Picker-fFRNaQIf.js.map +1 -0
- package/build/assets/{StyleGuideRoot-CqAei-DM.js → StyleGuideRoot-BuzXY_Hc.js} +2 -2
- package/build/assets/{StyleGuideRoot-CqAei-DM.js.map → StyleGuideRoot-BuzXY_Hc.js.map} +1 -1
- package/build/assets/{index-DMSPOHPd.js → index-Bw2lPjhG.js} +25 -25
- package/build/assets/{index-DMSPOHPd.js.map → index-Bw2lPjhG.js.map} +1 -1
- package/build/assets/{index-CH6HLWgt.js → index-CrdwB1d9.js} +11 -11
- package/build/assets/index-CrdwB1d9.js.map +1 -0
- package/build/assets/index-CyLZEMYM.js +27 -0
- package/build/assets/index-CyLZEMYM.js.map +1 -0
- package/build/index.html +2 -2
- package/package.json +31 -31
- package/build/assets/ControlType-CtXY1n1b.js.map +0 -1
- package/build/assets/Grid-C8RUSj63.js +0 -5
- package/build/assets/Grid-C8RUSj63.js.map +0 -1
- package/build/assets/IrisGrid-D8eFxgVO.js +0 -14
- package/build/assets/IrisGrid-D8eFxgVO.js.map +0 -1
- package/build/assets/IrisGridModel-Cz3-J_KF.js +0 -5
- package/build/assets/IrisGridModel-Cz3-J_KF.js.map +0 -1
- package/build/assets/MissingPartitionError-Cyo7_iZi.js +0 -6
- package/build/assets/MissingPartitionError-Cyo7_iZi.js.map +0 -1
- package/build/assets/PasteKeyHandler-gbxW-Zo-.js +0 -15
- package/build/assets/PasteKeyHandler-gbxW-Zo-.js.map +0 -1
- package/build/assets/Picker-CrotsLla.js +0 -26
- package/build/assets/Picker-CrotsLla.js.map +0 -1
- package/build/assets/index-CH6HLWgt.js.map +0 -1
- package/build/assets/index-iNF_lksg.js +0 -27
- package/build/assets/index-iNF_lksg.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grid-Tx2xMiLi.js","sources":["../../../utils/dist/ObjectUtils.js","../../../grid/dist/CellInputField.js","../../../grid/dist/errors/assertIsDefined.js","../../../grid/dist/errors/PasteError.js","../../../grid/dist/mouse-handlers/GridSelectionMouseHandler.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/key-handlers/SelectionKeyHandler.js","../../../grid/dist/key-handlers/TreeKeyHandler.js","../../../grid/dist/key-handlers/EditKeyHandler.js","../../../grid/dist/ThemeContext.js","../../../grid/dist/GridA11yUtils.js","../../../grid/dist/GridA11yFallback.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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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 selectionRange = _ref.selectionRange,\n _ref$className = _ref.className,\n className = _ref$className === void 0 ? '' : _ref$className,\n _ref$disabled = _ref.disabled,\n disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n _ref$value = _ref.value,\n propsValue = _ref$value === void 0 ? '' : _ref$value,\n _ref$isQuickEdit = _ref.isQuickEdit,\n propsIsQuickEdit = _ref$isQuickEdit === void 0 ? true : _ref$isQuickEdit,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? EMPTY_FUNCTION : _ref$onChange,\n _ref$onCancel = _ref.onCancel,\n onCancel = _ref$onCancel === void 0 ? EMPTY_FUNCTION : _ref$onCancel,\n _ref$onDone = _ref.onDone,\n onDone = _ref$onDone === void 0 ? EMPTY_FUNCTION : _ref$onDone,\n style = _ref.style;\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 _useState = useState(propsValue),\n _useState2 = _slicedToArray(_useState, 1),\n initialValue = _useState2[0];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isChanged = _useState4[0],\n setIsChanged = _useState4[1];\n var _useState5 = useState(propsIsQuickEdit),\n _useState6 = _slicedToArray(_useState5, 2),\n isQuickEdit = _useState6[0],\n setIsQuickEdit = _useState6[1];\n var _useState7 = useState(propsValue),\n _useState8 = _slicedToArray(_useState7, 2),\n value = _useState8[0],\n setValue = _useState8[1];\n\n // Init field selection\n useEffect(function selectInputField() {\n var field = inputField.current;\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 newValue = event.target.value;\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 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 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 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 _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 GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\nimport { gestureModeFromModifiers } from \"../GridSelectionUtils.js\";\nvar DEFAULT_INTERVAL_MS = 100;\nclass GridSelectionMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"startPoint\", void 0);\n _defineProperty(this, \"hasExtendedFloating\", false);\n // Timer used when holding a drag past the end of the grid\n _defineProperty(this, \"timer\", void 0);\n _defineProperty(this, \"lastTriggerTime\", void 0);\n }\n onDown(gridPoint, grid, event) {\n var x = gridPoint.x,\n y = gridPoint.y,\n column = gridPoint.column,\n row = gridPoint.row;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var gridX = metrics.gridX,\n gridY = metrics.gridY,\n maxX = metrics.maxX,\n maxY = metrics.maxY;\n var gridMouseX = x - gridX;\n var gridMouseY = y - gridY;\n if (gridMouseX < 0 || gridMouseY < 0 || column == null && gridMouseX > maxX || row == null && gridMouseY > maxY) {\n return false;\n }\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n var isShiftKey = event.shiftKey;\n var theme = grid.getTheme();\n var autoSelectRow = theme.autoSelectRow,\n autoSelectColumn = theme.autoSelectColumn;\n // If they click a column/row header, don't want to select the whole table if auto select column/row is on\n if ((column !== null || !autoSelectColumn) && (row !== null || !autoSelectRow)) {\n grid.focus();\n var mode = gestureModeFromModifiers({\n isShiftKey,\n isModifierKey\n });\n grid.handleMouseSelectStart({\n row,\n column\n }, mode);\n }\n this.startPoint = gridPoint;\n this.hasExtendedFloating = false;\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.startPoint === undefined) {\n return false;\n }\n this.stopTimer();\n var _this$startPoint = this.startPoint,\n startRow = _this$startPoint.row,\n startColumn = _this$startPoint.column;\n var x = gridPoint.x,\n y = gridPoint.y;\n var row = gridPoint.row,\n column = gridPoint.column;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var left = metrics.left,\n lastLeft = metrics.lastLeft,\n top = metrics.top,\n lastTop = metrics.lastTop,\n columnWidth = metrics.columnWidth,\n rowHeight = metrics.rowHeight;\n var dragBounds = GridUtils.getScrollDragBounds(metrics, startRow, startColumn);\n\n // If we're dragging outside of the grid entirely, then we should start scrolling\n var deltaX = 0;\n var deltaY = 0;\n if (left < lastLeft) {\n if (x < dragBounds.x1) {\n deltaX = x - dragBounds.x1;\n } else if (x > dragBounds.x2) {\n deltaX = x - dragBounds.x2;\n }\n }\n if (top < lastTop) {\n if (y < dragBounds.y1) {\n deltaY = y - dragBounds.y1;\n } else if (y > dragBounds.y2) {\n deltaY = y - dragBounds.y2;\n }\n }\n if (deltaX !== 0 || deltaY !== 0) {\n // Have it go faster depending on how far out they've dragged\n this.startTimer(grid, gridPoint, deltaX > 0 ? Math.ceil(deltaX / columnWidth) : Math.floor(deltaX / columnWidth), deltaY > 0 ? Math.ceil(deltaY / rowHeight) : Math.floor(deltaY / rowHeight));\n } else if (row != null && column != null) {\n var floatingTopRowCount = metrics.floatingTopRowCount,\n floatingBottomRowCount = metrics.floatingBottomRowCount,\n floatingLeftColumnCount = metrics.floatingLeftColumnCount,\n floatingRightColumnCount = metrics.floatingRightColumnCount,\n columnCount = metrics.columnCount,\n rowCount = metrics.rowCount,\n bottom = metrics.bottom,\n right = metrics.right,\n topVisible = metrics.topVisible,\n bottomVisible = metrics.bottomVisible,\n leftVisible = metrics.leftVisible,\n rightVisible = metrics.rightVisible;\n // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area\n // So when that happens, just adjust the point to be past the new boundary\n if (!this.hasExtendedFloating) {\n if (startRow !== null && startRow < floatingTopRowCount && row >= floatingTopRowCount) {\n // Extending from floating top into the view\n row = floatingTopRowCount;\n this.hasExtendedFloating = true;\n } else if (startRow !== null && startRow >= rowCount - floatingBottomRowCount && row < rowCount - floatingBottomRowCount) {\n // Extending from floating bottom into the view\n row = rowCount - floatingBottomRowCount - 1;\n this.hasExtendedFloating = true;\n }\n if (startColumn !== null && startColumn < floatingLeftColumnCount && column >= floatingLeftColumnCount) {\n // Extending from floating left into the view\n column = floatingLeftColumnCount;\n this.hasExtendedFloating = true;\n } else if (startColumn !== null && startColumn >= columnCount - floatingRightColumnCount && column < columnCount - floatingRightColumnCount) {\n // Extending from floating right into the view\n column = columnCount - floatingRightColumnCount - 1;\n this.hasExtendedFloating = true;\n }\n }\n\n // When a selection is dragging from within the main area to over a floating area, scroll.\n if (startRow !== null && !GridUtils.isFloatingRow(startRow, metrics) && GridUtils.isFloatingRow(row, metrics)) {\n // Need to scroll\n if (startRow > row && row < top) {\n row = topVisible - 1;\n } else if (startRow < row && row > bottom) {\n row = bottomVisible + 1;\n }\n }\n if (startColumn !== null && !GridUtils.isFloatingColumn(startColumn, metrics) && GridUtils.isFloatingColumn(column, metrics)) {\n if (startColumn > column && column < left) {\n column = leftVisible - 1;\n } else if (startColumn < column && column > right) {\n column = rightVisible + 1;\n }\n }\n // Transient overlay during drag — onUp performs the settled commit.\n grid.handleMouseSelectDrag({\n row,\n column\n });\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.startPoint !== undefined) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.handleMouseSelectEnd();\n }\n return false;\n }\n\n // eslint-disable-next-line class-methods-use-this\n onDoubleClick(gridPoint, grid, event) {\n var column = gridPoint.column,\n row = gridPoint.row;\n if (row == null || column == null) {\n return false;\n }\n\n // dblclick has no follow-up mouseUp to settle a mouse gesture; use the\n // settled path so selectedKeys / selectedKeyValues aren't left empty.\n grid.handleKeySelectAt({\n row,\n column\n }, 'replace');\n return true;\n }\n onContextMenu(gridPoint, grid, event) {\n var row = gridPoint.row,\n column = gridPoint.column;\n var isInRange = row != null && column != null && grid.getSelection().isCellSelected(column, row);\n\n // only change the selected range if the clicked cell is not already selected\n if (!isInRange && row != null && column != null) {\n this.startPoint = undefined;\n this.stopTimer();\n // Right-click's mouseUp already fired before contextmenu; use the\n // settled path so the menu operates on a fully committed selection.\n grid.handleKeySelectAt({\n row,\n column\n }, 'replace');\n }\n return false;\n }\n moveSelection(grid, gridPoint, deltaX, deltaY) {\n var row = gridPoint.row,\n column = gridPoint.column;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var _grid$state$selection = grid.state.selection,\n selectionEndRow = _grid$state$selection.selectionEndRow,\n selectionEndColumn = _grid$state$selection.selectionEndColumn;\n if (selectionEndRow == null || selectionEndColumn == null) {\n throw new Error('selection not set');\n }\n var rowCount = metrics.rowCount,\n columnCount = metrics.columnCount;\n var minX = deltaX < 0 && column != null ? column : 0;\n var maxX = deltaX > 0 && column != null ? column : columnCount - 1;\n var minY = deltaY < 0 && row != null ? row : 0;\n var maxY = deltaY > 0 && row != null ? row : rowCount - 1;\n // Transient overlay during auto-scroll drag — onUp performs the settled commit.\n grid.handleMouseSelectDrag({\n column: Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX),\n row: Math.min(Math.max(minY, selectionEndRow + deltaY), maxY)\n });\n this.lastTriggerTime = Date.now();\n }\n startTimer(grid, gridPoint, deltaX, deltaY) {\n this.stopTimer();\n var timeout = this.lastTriggerTime != null ? DEFAULT_INTERVAL_MS - Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime) : 0;\n this.timer = setTimeout(() => {\n this.moveSelection(grid, gridPoint, deltaX, deltaY);\n this.startTimer(grid, gridPoint, deltaX, deltaY);\n }, timeout);\n }\n stopTimer() {\n if (this.timer !== undefined) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\nexport default GridSelectionMouseHandler;\n//# sourceMappingURL=GridSelectionMouseHandler.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); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\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 modelColumns = metrics.modelColumns,\n movedColumns = metrics.movedColumns,\n allColumnXs = metrics.allColumnXs,\n columnCount = metrics.columnCount,\n allColumnWidths = metrics.allColumnWidths,\n userColumnWidths = metrics.userColumnWidths,\n calculatedColumnWidths = metrics.calculatedColumnWidths,\n floatingLeftWidth = metrics.floatingLeftWidth,\n maxX = metrics.maxX;\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 _group$getVisibleRang = group.getVisibleRange(movedColumns),\n _group$getVisibleRang2 = _slicedToArray(_group$getVisibleRang, 2),\n startVisibleIndex = _group$getVisibleRang2[0],\n endVisibleIndex = _group$getVisibleRang2[1];\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 metrics = grid.metrics;\n if (!metrics) {\n return;\n }\n var left = metrics.left,\n lastLeft = metrics.lastLeft,\n leftOffset = metrics.leftOffset,\n userColumnWidths = metrics.userColumnWidths,\n calculatedColumnWidths = metrics.calculatedColumnWidths,\n movedColumns = metrics.movedColumns,\n allColumnWidths = metrics.allColumnWidths;\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 _grid$state = grid.state,\n mouseX = _grid$state.mouseX,\n mouseY = _grid$state.mouseY;\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 model = grid.props.model;\n var x = gridPoint.x,\n column = gridPoint.column,\n columnHeaderDepth = gridPoint.columnHeaderDepth;\n var metrics = grid.metrics;\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 rowHeaderWidth = metrics.rowHeaderWidth;\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 mouseX = gridPoint.x,\n mouseY = gridPoint.y;\n var columnHeaderDepth = this.initialGridPoint.columnHeaderDepth;\n var model = grid.props.model;\n var draggingColumn = this.draggingColumn;\n var metrics = grid.metrics;\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 metrics = grid.metrics;\n assertNotNull(metrics, 'Metrics not set');\n var gridX = metrics.gridX;\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 draggingColumnDepth = this.draggingColumn.depth;\n var model = grid.props.model;\n var movedColumns = grid.state.movedColumns;\n var floatingLeftWidth = metrics.floatingLeftWidth,\n width = metrics.width,\n columnHeaderMaxDepth = metrics.columnHeaderMaxDepth,\n allColumnXs = metrics.allColumnXs;\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 _ref3 = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {},\n _ref3$right = _ref3.right,\n parentRight = _ref3$right === void 0 ? 0 : _ref3$right;\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 metrics = grid.metrics,\n metricCalculator = grid.metricCalculator;\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 scrollBarSize = theme.scrollBarSize,\n scrollBarHoverSize = theme.scrollBarHoverSize;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x,\n y = gridPoint.y;\n var barLeft = metrics.barLeft,\n barWidth = metrics.barWidth,\n height = metrics.height,\n hasHorizontalBar = metrics.hasHorizontalBar;\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 metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x;\n var barWidth = metrics.barWidth,\n handleWidth = metrics.handleWidth,\n lastLeft = metrics.lastLeft,\n barLeft = metrics.barLeft,\n columnCount = metrics.columnCount,\n scrollableContentWidth = metrics.scrollableContentWidth,\n scrollableViewportWidth = metrics.scrollableViewportWidth;\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 metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x;\n var handleWidth = metrics.handleWidth,\n barLeft = metrics.barLeft,\n scrollX = metrics.scrollX;\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 _this$getLeftWithOffs = this.getLeftWithOffset(gridPoint, grid),\n newLeft = _this$getLeftWithOffs.left,\n newLeftOffset = _this$getLeftWithOffs.leftOffset;\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 _this$getLeftWithOffs2 = this.getLeftWithOffset(gridPoint, grid),\n newLeft = _this$getLeftWithOffs2.left,\n newLeftOffset = _this$getLeftWithOffs2.leftOffset;\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 model = grid.props.model;\n var x = gridPoint.x,\n y = gridPoint.y,\n row = gridPoint.row;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var columnHeaderHeight = metrics.columnHeaderHeight,\n rowHeaderWidth = metrics.rowHeaderWidth,\n allRowYs = metrics.allRowYs;\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 model = grid.props.model;\n var draggingRow = grid.state.draggingRow;\n var _grid$state = grid.state,\n mouseX = _grid$state.mouseX,\n mouseY = _grid$state.mouseY;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n if (draggingRow == null) {\n var _grid$getGridPointFro = grid.getGridPointFromXY(mouseX, mouseY),\n row = _grid$getGridPointFro.row;\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 metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var top = metrics.top,\n lastTop = metrics.lastTop,\n bottom = metrics.bottom,\n bottomVisible = metrics.bottomVisible,\n rowCount = metrics.rowCount,\n columnHeaderHeight = metrics.columnHeaderHeight,\n allRowHeights = metrics.allRowHeights,\n allRowYs = metrics.allRowYs,\n height = metrics.height;\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 movedRows = grid.state.movedRows;\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 x = gridPoint.x,\n y = gridPoint.y;\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 scrollBarSize = theme.scrollBarSize;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x,\n y = gridPoint.y;\n var width = metrics.width,\n height = metrics.height,\n hasVerticalBar = metrics.hasVerticalBar,\n hasHorizontalBar = metrics.hasHorizontalBar;\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 metrics = grid.metrics,\n metricCalculator = grid.metricCalculator;\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 scrollBarSize = theme.scrollBarSize,\n scrollBarHoverSize = theme.scrollBarHoverSize;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x,\n y = gridPoint.y;\n var barTop = metrics.barTop,\n barHeight = metrics.barHeight,\n width = metrics.width,\n hasVerticalBar = metrics.hasVerticalBar;\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 metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var y = gridPoint.y;\n var barHeight = metrics.barHeight,\n handleHeight = metrics.handleHeight,\n lastTop = metrics.lastTop,\n barTop = metrics.barTop,\n rowCount = metrics.rowCount,\n scrollableContentHeight = metrics.scrollableContentHeight,\n scrollableViewportHeight = metrics.scrollableViewportHeight;\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 metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var y = gridPoint.y;\n var handleHeight = metrics.handleHeight,\n barTop = metrics.barTop,\n scrollY = metrics.scrollY;\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 _this$getTopWithOffse = this.getTopWithOffset(gridPoint, grid),\n newTop = _this$getTopWithOffse.top,\n newTopOffset = _this$getTopWithOffse.topOffset;\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 _this$getTopWithOffse2 = this.getTopWithOffset(gridPoint, grid),\n newTop = _this$getTopWithOffse2.top,\n newTopOffset = _this$getTopWithOffse2.topOffset;\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 column = _ref.column,\n row = _ref.row;\n var model = grid.props.model;\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","/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport GridRange from \"../GridRange.js\";\nimport GridUtils from \"../GridUtils.js\";\nimport { gestureModeFromModifiers } from \"../GridSelectionUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event, grid) {\n var isShiftKey = event.shiftKey;\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n switch (event.key) {\n case 'a':\n if (isModifierKey) {\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 (isModifierKey) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (isModifierKey) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (isModifierKey) return false;\n // In row-selection mode, column-edge movement is meaningless.\n if (grid.props.theme.autoSelectRow === true) return true;\n return this.handleRowEdge(0, event, grid);\n case 'l':\n case 'L':\n if (isModifierKey) return false;\n if (grid.props.theme.autoSelectRow === true) return true;\n return this.handleRowEdge(grid.props.model.columnCount - 1, event, grid);\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n case 'End':\n {\n var model = grid.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\n var _grid$state$selection = grid.state.selection,\n cursorColumn = _grid$state$selection.cursorColumn,\n cursorRow = _grid$state$selection.cursorRow;\n var toEnd = event.key === 'End';\n // In row-selection mode, plain / Shift Home/End would only move the\n // cursor between columns and (via commit) toggle the row selection.\n // Ctrl+Home/End still jumps to top/bottom row, which is meaningful.\n if (grid.props.theme.autoSelectRow === true && !isModifierKey) {\n return true;\n }\n // Ctrl/Meta pins the column and jumps to the row edge; without it\n // Home/End jumps to the column edge on the current row.\n var targetColumn;\n var targetRow;\n if (isModifierKey) {\n targetColumn = cursorColumn;\n targetRow = toEnd ? rowCount - 1 : 0;\n } else {\n targetColumn = toEnd ? columnCount - 1 : 0;\n targetRow = cursorRow;\n }\n if (targetColumn == null || targetRow == null) return false;\n // Shift extends via maximize (grow the last range's furthest edge)\n // to preserve pre-refactor Shift+Home followed by Shift+End behavior.\n grid.handleKeySelectAt({\n column: targetColumn,\n row: targetRow\n }, isShiftKey ? 'maximize' : 'replace');\n return true;\n }\n case 'Escape':\n if (grid.state.selection.isEmpty()) 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.selection.isEmpty()) {\n grid.handleKeyAdvanceCursor(isShiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);\n return true;\n }\n break;\n case 'Tab':\n if (!grid.state.selection.isEmpty()) {\n grid.handleKeyAdvanceCursor(isShiftKey ? 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 var _grid$state$selection2 = grid.state.selection,\n cursorRow = _grid$state$selection2.cursorRow,\n cursorColumn = _grid$state$selection2.cursorColumn,\n selectionEndColumn = _grid$state$selection2.selectionEndColumn,\n selectionEndRow = _grid$state$selection2.selectionEndRow;\n var column = isShiftKey ? selectionEndColumn : cursorColumn;\n var row = isShiftKey ? selectionEndRow : cursorRow;\n\n // Ctrl+Arrow is an exception to the mode returned by gestureModeFromModifiers\n // It jumps to the edge of the grid in the arrow direction, and replaces the selection.\n if (isModifierKey) {\n var _model = grid.props.model;\n var _columnCount = _model.columnCount,\n _rowCount = _model.rowCount;\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.handleKeySelectAt({\n column: moveToColumn,\n row: moveToRow\n }, isShiftKey ? 'maximize' : 'replace');\n }\n return true;\n }\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n\n // Plain / Shift arrows: mode is derived from Shift alone here since `isModifierKey` was short-circuited above.\n var mode = gestureModeFromModifiers({\n isShiftKey,\n isModifierKey: false\n });\n var theme = grid.props.theme;\n var _theme$autoSelectRow = theme.autoSelectRow,\n autoSelectRow = _theme$autoSelectRow === void 0 ? false : _theme$autoSelectRow,\n _theme$autoSelectColu = theme.autoSelectColumn,\n autoSelectColumn = _theme$autoSelectColu === void 0 ? false : _theme$autoSelectColu;\n if (autoSelectRow && deltaColumn !== 0) {\n var lastLeft = grid.metrics.lastLeft;\n var left = clamp(grid.state.left + deltaColumn, 0, lastLeft);\n if (cursorRow != null) {\n grid.handleKeyMoveCursor(left, cursorRow);\n }\n grid.setViewState({\n left\n });\n return true;\n }\n if (autoSelectColumn && deltaRow !== 0) {\n var lastTop = grid.metrics.lastTop;\n var top = clamp(grid.state.top + deltaRow, 0, lastTop);\n // Preserves the (arguably surprising) original behavior of using `top`\n // as the column argument; kept identical to pre-refactor code paths.\n grid.handleKeySelectAt({\n column: top,\n row: cursorColumn\n }, mode, {\n keepCursorInView: false\n });\n grid.setViewState({\n top\n });\n return true;\n }\n if (row === null || column === null) {\n var _grid$state = grid.state,\n _left = _grid$state.left,\n _top = _grid$state.top;\n grid.handleKeySelectAt({\n column: _left,\n row: _top\n }, mode);\n return true;\n }\n var model = grid.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\n var targetColumn = clamp(column + deltaColumn, 0, columnCount - 1);\n var targetRow = clamp(row + deltaRow, 0, rowCount - 1);\n grid.handleKeySelectAt({\n column: targetColumn,\n row: targetRow\n }, mode);\n return true;\n }\n handleRowEdge(targetColumn, event, grid) {\n var isShiftKey = event.shiftKey;\n var cursorRow = grid.state.selection.cursorRow;\n if (cursorRow == null) return false;\n grid.handleKeySelectAt({\n column: targetColumn,\n row: cursorRow\n }, gestureModeFromModifiers({\n isShiftKey,\n isModifierKey: false\n }));\n return true;\n }\n handlePageUp(e, grid) {\n var mode = gestureModeFromModifiers({\n isShiftKey: e.shiftKey,\n isModifierKey: false\n });\n grid.handleKeyPageUp(mode);\n return true;\n }\n handlePageDown(e, grid) {\n var mode = gestureModeFromModifiers({\n isShiftKey: e.shiftKey,\n isModifierKey: false\n });\n grid.handleKeyPageDown(mode);\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 { isRangedSelection } from \"../RangedSelection.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 // Keyed tables have no expandable rows; ignore the shortcut rather than throwing.\n if (!isRangedSelection(grid.state.selection)) return false;\n var ranges = grid.state.selection.toRanges();\n if (ranges.length === 1) {\n var range = ranges[0];\n if (range.startRow === range.endRow && range.startColumn === range.endColumn) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n var model = grid.props.model;\n var row = range.startRow,\n column = range.startColumn;\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 model = grid.props.model;\n var _grid$state$selection = grid.state.selection,\n cursorColumn = _grid$state$selection.cursorColumn,\n cursorRow = _grid$state$selection.cursorRow;\n if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model)) {\n return false;\n }\n var modelColumn;\n var modelRow;\n try {\n modelColumn = grid.getModelColumn(cursorColumn);\n modelRow = grid.getModelRow(cursorRow);\n } catch (_unused) {\n return false;\n }\n if (!model.isEditableRange(GridRange.makeCell(modelColumn, modelRow))) {\n return false;\n }\n if (event.key.length === 1) {\n // If the renderer for this cell's restriction type preserves the existing\n // value on keystroke (e.g. a dropdown), open the editor without replacing.\n var cellInputRendererRegistry = grid.props.cellInputRendererRegistry;\n var restrictions = model.getColumnRestrictions(modelColumn);\n if (restrictions.length === 1) {\n var renderer = cellInputRendererRegistry === null || cellInputRendererRegistry === void 0 ? void 0 : cellInputRendererRegistry.get(restrictions[0].type);\n if ((renderer === null || renderer === void 0 ? void 0 : renderer.preservesExistingValue) === true) {\n grid.startEditing(cursorColumn, cursorRow);\n return true;\n }\n }\n grid.startEditing(cursorColumn, cursorRow, true, [1, 1], event.key);\n return true;\n }\n if (event.key === 'F2') {\n grid.startEditing(cursorColumn, cursorRow);\n return true;\n }\n if (event.key === 'Enter') {\n grid.startEditing(cursorColumn, cursorRow);\n return true;\n }\n if (event.key === 'Backspace') {\n grid.startEditing(cursorColumn, cursorRow, true, undefined, '');\n return true;\n }\n if (event.key === 'Delete') {\n grid.setValueForCell(cursorColumn, cursorRow, '');\n return true;\n }\n return false;\n }\n}\nexport default EditKeyHandler;\n//# sourceMappingURL=EditKeyHandler.js.map","import React from 'react';\nexport var ThemeContext = /*#__PURE__*/React.createContext({});\nexport default ThemeContext;\n//# sourceMappingURL=ThemeContext.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\n/**\n * Attributes on the accessibility snapshot that Grid renders into its canvas\n * fallback content. External tooling locates grid contents through these, so\n * treat them as a public contract.\n */\nexport var GRID_A11Y_ATTRIBUTES = {\n /** On the button that generates a snapshot */\n describe: 'data-grid-a11y-describe',\n /** On the root of a generated snapshot */\n snapshot: 'data-grid-a11y-snapshot',\n /** Visible column index. On column headers and cells */\n column: 'data-grid-column',\n /** Visible row index. On cells */\n row: 'data-grid-row',\n /** Header text. On column headers */\n header: 'data-grid-header',\n /** Bounds as `x,y,width,height`, relative to the top left of the canvas, in CSS pixels */\n rect: 'data-grid-rect'\n};\n\n/** The attribute names used by the accessibility snapshot */\n\n/** A rectangle relative to the top left of the grid canvas, in CSS pixels */\n\n/** A column header in an accessibility snapshot */\n\n/** A cell in an accessibility snapshot */\n\n/** A row of cells in an accessibility snapshot */\n\n/**\n * The grid viewport at a point in time. Generated on demand rather than on\n * every frame, as walking the viewport is far too expensive to do while\n * scrolling.\n */\n\n/**\n * Format a rect for the `data-grid-rect` attribute.\n * @param rect The rect to format\n * @returns The rect as `x,y,width,height`\n */\nexport function formatGridA11yRect(_ref) {\n var x = _ref.x,\n y = _ref.y,\n width = _ref.width,\n height = _ref.height;\n return \"\".concat(x, \",\").concat(y, \",\").concat(width, \",\").concat(height);\n}\n\n/**\n * The area an item may be painted in, relative to the top left of the grid\n * content area.\n */\n\n/**\n * Clip a rect to the bounds it is painted in and move it onto the canvas.\n * @param rect The rect, relative to the top left of the grid content area\n * @param bounds The bounds the rect is painted in\n * @param metrics Metrics of the last render\n * @returns The visible part of the rect relative to the top left of the\n * canvas, or null if none of it can be interacted with\n */\nfunction clipGridA11yRect(_ref2, _ref3, metrics) {\n var x = _ref2.x,\n y = _ref2.y,\n width = _ref2.width,\n height = _ref2.height;\n var left = _ref3.left,\n top = _ref3.top,\n right = _ref3.right,\n bottom = _ref3.bottom;\n var clippedX = Math.max(x, left);\n var clippedY = Math.max(y, top);\n var clippedWidth = Math.min(x + width, right) - clippedX;\n var clippedHeight = Math.min(y + height, bottom) - clippedY;\n if (clippedWidth <= 0 || clippedHeight <= 0) {\n return null;\n }\n return {\n x: metrics.gridX + clippedX,\n y: metrics.gridY + clippedY,\n width: clippedWidth,\n height: clippedHeight\n };\n}\n\n/**\n * Get the bounds of a cell, relative to the top left of the canvas.\n * @param metrics Metrics of the last render\n * @param column Visible column index of the cell\n * @param row Visible row index of the cell\n * @param isFloatingColumn Whether the column is frozen to the left or right\n * @param isFloatingRow Whether the row is frozen to the top or bottom\n * @returns The bounds of the cell, or null if none of it is interactable\n */\nfunction getCellRect(metrics, column, row, isFloatingColumn, isFloatingRow) {\n var x = metrics.allColumnXs.get(column);\n var y = metrics.allRowYs.get(row);\n var width = metrics.allColumnWidths.get(column);\n var height = metrics.allRowHeights.get(row);\n if (x == null || y == null || width == null || height == null) {\n return null;\n }\n var gridX = metrics.gridX,\n gridY = metrics.gridY,\n verticalBarWidth = metrics.verticalBarWidth,\n horizontalBarHeight = metrics.horizontalBarHeight,\n floatingLeftWidth = metrics.floatingLeftWidth,\n floatingRightWidth = metrics.floatingRightWidth,\n floatingTopHeight = metrics.floatingTopHeight,\n floatingBottomHeight = metrics.floatingBottomHeight;\n\n // Scrollable cells run under the headers, the frozen panes, and the scroll\n // bars, all of which are painted over them and take the click instead\n var right = metrics.width - gridX - verticalBarWidth;\n var bottom = metrics.height - gridY - horizontalBarHeight;\n return clipGridA11yRect({\n x,\n y,\n width,\n height\n }, {\n left: isFloatingColumn ? 0 : floatingLeftWidth,\n top: isFloatingRow ? 0 : floatingTopHeight,\n right: isFloatingColumn ? right : right - floatingRightWidth,\n bottom: isFloatingRow ? bottom : bottom - floatingBottomHeight\n }, metrics);\n}\n\n/**\n * Get the bounds of a bottom level column header, relative to the top left of the canvas.\n * @param metrics Metrics of the last render\n * @param column Visible column index of the header\n * @param isFloatingColumn Whether the column is frozen to the left or right\n * @returns The bounds of the header, or null if none of it is interactable\n */\nfunction getColumnHeaderRect(metrics, column, isFloatingColumn) {\n var x = metrics.allColumnXs.get(column);\n var width = metrics.allColumnWidths.get(column);\n if (x == null || width == null) {\n return null;\n }\n var gridX = metrics.gridX,\n columnHeaderHeight = metrics.columnHeaderHeight,\n floatingLeftWidth = metrics.floatingLeftWidth,\n floatingRightWidth = metrics.floatingRightWidth;\n\n // Headers sit above the grid content, so the scroll bars never cover them\n var right = metrics.width - gridX;\n return clipGridA11yRect(\n // The bottom level header sits directly above the grid content\n {\n x,\n y: -columnHeaderHeight,\n width,\n height: columnHeaderHeight\n }, {\n left: isFloatingColumn ? 0 : floatingLeftWidth,\n top: -columnHeaderHeight,\n right: isFloatingColumn ? right : right - floatingRightWidth,\n bottom: 0\n }, metrics);\n}\n\n/**\n * Get a brief description of the grid size and selection.\n * Only reads values the grid already has on hand, so it is cheap enough to\n * regenerate on every render.\n * @param model The model being displayed\n * @param selection The current selection, or `null` when none\n * @returns A sentence describing the grid\n */\nexport function getGridA11ySummary(model) {\n var selection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var rowCount = model.rowCount,\n columnCount = model.columnCount;\n var size = \"Grid with \".concat(rowCount, \" rows and \").concat(columnCount, \" columns.\");\n return selection != null && !selection.isEmpty() ? \"\".concat(size, \" \").concat(selection.describe()) : size;\n}\n\n/**\n * Describe which rows are on screen. Consecutive rows are collapsed into a\n * range, so floating rows read as separate groups instead of being lumped in\n * with the scrolled rows between them.\n * @param rows The visible rows, in any order\n * @returns A sentence fragment such as `Showing rows 1 to 20 and 100`\n */\nfunction getVisibleRowsDescription(rows) {\n var ranges = [];\n [...rows].sort((a, b) => a - b).forEach(row => {\n var lastRange = ranges.at(-1);\n if (lastRange != null && row === lastRange[1] + 1) {\n lastRange[1] = row;\n } else {\n ranges.push([row, row]);\n }\n });\n if (ranges.length === 0) {\n return 'Showing no rows';\n }\n\n // Row indexes are zero based, but the row numbers the user sees are not\n var descriptions = ranges.map(_ref4 => {\n var _ref5 = _slicedToArray(_ref4, 2),\n start = _ref5[0],\n end = _ref5[1];\n return start === end ? \"\".concat(start + 1) : \"\".concat(start + 1, \" to \").concat(end + 1);\n });\n var label = rows.length === 1 ? 'row' : 'rows';\n if (descriptions.length === 1) {\n return \"Showing \".concat(label, \" \").concat(descriptions[0]);\n }\n if (descriptions.length === 2) {\n return \"Showing \".concat(label, \" \").concat(descriptions[0], \" and \").concat(descriptions[1]);\n }\n return \"Showing \".concat(label, \" \").concat(descriptions.slice(0, -1).join(', '), \", and \").concat(descriptions.at(-1));\n}\n\n/**\n * Get the text and bounds of everything currently in the viewport.\n * Iterates every visible cell, so only generate it on demand.\n * @param model The model being displayed\n * @param metrics Metrics of the last render\n * @param selection The current selection, or `null` when none\n * @returns The snapshot to render into the canvas fallback content\n */\nexport function createGridA11ySnapshot(model, metrics) {\n var selection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var rowCount = model.rowCount,\n columnCount = model.columnCount;\n var columns = [];\n var rows = [];\n var isHiddenColumn = column => {\n var _metrics$allColumnWid;\n return ((_metrics$allColumnWid = metrics.allColumnWidths.get(column)) !== null && _metrics$allColumnWid !== void 0 ? _metrics$allColumnWid : 0) <= 0;\n };\n var isHiddenRow = row => {\n var _metrics$allRowHeight;\n return ((_metrics$allRowHeight = metrics.allRowHeights.get(row)) !== null && _metrics$allRowHeight !== void 0 ? _metrics$allRowHeight : 0) <= 0;\n };\n var floatingColumns = new Set(metrics.floatingColumns);\n var floatingRows = new Set(metrics.floatingRows);\n\n // Hidden columns and rows are collapsed to nothing on screen, so leave them\n // out rather than describing something the user cannot see\n // Floating columns/rows are pinned to the edges of the grid and can also\n // appear in the visible ranges, so dedupe them and describe everything in\n // the order it appears on screen\n var snapshotColumns = [...new Set([...metrics.floatingColumns, ...metrics.visibleColumns])].filter(column => !isHiddenColumn(column)).sort((a, b) => {\n var _metrics$allColumnXs$, _metrics$allColumnXs$2;\n return ((_metrics$allColumnXs$ = metrics.allColumnXs.get(a)) !== null && _metrics$allColumnXs$ !== void 0 ? _metrics$allColumnXs$ : 0) - ((_metrics$allColumnXs$2 = metrics.allColumnXs.get(b)) !== null && _metrics$allColumnXs$2 !== void 0 ? _metrics$allColumnXs$2 : 0);\n });\n var snapshotRows = [...new Set([...metrics.floatingRows, ...metrics.visibleRows])].filter(row => !isHiddenRow(row)).sort((a, b) => {\n var _metrics$allRowYs$get, _metrics$allRowYs$get2;\n return ((_metrics$allRowYs$get = metrics.allRowYs.get(a)) !== null && _metrics$allRowYs$get !== void 0 ? _metrics$allRowYs$get : 0) - ((_metrics$allRowYs$get2 = metrics.allRowYs.get(b)) !== null && _metrics$allRowYs$get2 !== void 0 ? _metrics$allRowYs$get2 : 0);\n });\n snapshotColumns.forEach(column => {\n var _model$textForColumnH;\n var modelColumn = metrics.modelColumns.get(column);\n var rect = getColumnHeaderRect(metrics, column, floatingColumns.has(column));\n if (modelColumn == null || rect == null) {\n return;\n }\n columns.push({\n column,\n text: (_model$textForColumnH = model.textForColumnHeader(modelColumn, 0)) !== null && _model$textForColumnH !== void 0 ? _model$textForColumnH : '',\n rect\n });\n });\n snapshotRows.forEach(row => {\n var modelRow = metrics.modelRows.get(row);\n if (modelRow == null) {\n return;\n }\n var isFloatingRow = floatingRows.has(row);\n var cells = [];\n snapshotColumns.forEach(column => {\n var modelColumn = metrics.modelColumns.get(column);\n var rect = getCellRect(metrics, column, row, floatingColumns.has(column), isFloatingRow);\n if (modelColumn == null || rect == null) {\n return;\n }\n cells.push({\n column,\n text: model.textForCell(modelColumn, modelRow),\n rect\n });\n });\n // A row with nothing left after clipping is entirely covered by the frozen\n // panes or the scroll bars\n if (cells.length > 0) {\n rows.push({\n row,\n cells\n });\n }\n });\n var headers = columns.map(_ref6 => {\n var text = _ref6.text;\n return text;\n }).filter(text => text !== '');\n var visibleRows = getVisibleRowsDescription(rows.map(_ref7 => {\n var row = _ref7.row;\n return row;\n }));\n var viewport = headers.length > 0 ? \"\".concat(visibleRows, \", columns \").concat(headers.join(', '), \".\") : \"\".concat(visibleRows, \".\");\n return {\n description: \"\".concat(getGridA11ySummary(model, selection), \" \").concat(viewport),\n rowCount,\n columnCount,\n columns,\n rows\n };\n}\n//# sourceMappingURL=GridA11yUtils.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { createGridA11ySnapshot, formatGridA11yRect, GRID_A11Y_ATTRIBUTES } from \"./GridA11yUtils.js\";\n/** Called with the state the grid just drew */\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * The fallback content of the grid canvas. Never painted, but assistive\n * technology and browser automation read it in place of the pixels.\n *\n * Everything here describes the most recent draw, so it only updates when the\n * grid draws. Describing the contents walks every visible cell, which is far\n * too expensive to do on every frame for a grid nobody is inspecting, so the\n * snapshot is toggled on and off by a button and only tracks the viewport while\n * it is on.\n *\n * The snapshot is a plain table rather than divs with ARIA roles, as fallback\n * content is never laid out and native table semantics come with the column\n * associations for free. It is a `table` and not a `grid` because `grid`\n * promises the cell by cell keyboard navigation that only the canvas\n * implements.\n */\nexport function GridA11yFallback(_ref) {\n var registerDrawListener = _ref.registerDrawListener;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n showSnapshot = _useState2[0],\n setShowSnapshot = _useState2[1];\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n renderState = _useState4[0],\n setRenderState = _useState4[1];\n\n // Only follow the grid while the snapshot is shown, so a grid nobody is\n // inspecting does no extra work per draw\n useEffect(() => {\n if (!showSnapshot) {\n setRenderState(null);\n return undefined;\n }\n return registerDrawListener(setRenderState);\n }, [registerDrawListener, showSnapshot]);\n var snapshot = useMemo(() => {\n if (renderState == null) {\n return null;\n }\n var model = renderState.model,\n metrics = renderState.metrics,\n selection = renderState.selection;\n return createGridA11ySnapshot(model, metrics, selection);\n }, [renderState]);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n tabIndex: -1,\n \"aria-pressed\": showSnapshot,\n onClick: () => setShowSnapshot(prevShowSnapshot => !prevShowSnapshot),\n [GRID_A11Y_ATTRIBUTES.describe]: '',\n children: showSnapshot ? 'Hide the grid contents' : 'Describe the grid contents'\n }), snapshot != null && /*#__PURE__*/_jsxs(\"div\", {\n [GRID_A11Y_ATTRIBUTES.snapshot]: '',\n children: [/*#__PURE__*/_jsx(\"p\", {\n role: \"status\",\n children: snapshot.description\n }), /*#__PURE__*/_jsxs(\"table\", {\n \"aria-rowcount\": snapshot.rowCount + 1,\n \"aria-colcount\": snapshot.columnCount,\n children: [/*#__PURE__*/_jsx(\"thead\", {\n children: /*#__PURE__*/_jsx(\"tr\", {\n \"aria-rowindex\": 1,\n children: snapshot.columns.map(_ref2 => {\n var column = _ref2.column,\n text = _ref2.text,\n rect = _ref2.rect;\n return /*#__PURE__*/_jsx(\"th\", {\n scope: \"col\",\n \"aria-colindex\": column + 1,\n [GRID_A11Y_ATTRIBUTES.column]: column,\n [GRID_A11Y_ATTRIBUTES.header]: text,\n [GRID_A11Y_ATTRIBUTES.rect]: formatGridA11yRect(rect),\n children: text\n }, column);\n })\n })\n }), /*#__PURE__*/_jsx(\"tbody\", {\n children: snapshot.rows.map(_ref3 => {\n var row = _ref3.row,\n cells = _ref3.cells;\n return /*#__PURE__*/_jsx(\"tr\", {\n \"aria-rowindex\": row + 2,\n children: cells.map(_ref4 => {\n var column = _ref4.column,\n text = _ref4.text,\n rect = _ref4.rect;\n return /*#__PURE__*/_jsx(\"td\", {\n \"aria-colindex\": column + 1,\n [GRID_A11Y_ATTRIBUTES.column]: column,\n [GRID_A11Y_ATTRIBUTES.row]: row,\n [GRID_A11Y_ATTRIBUTES.rect]: formatGridA11yRect(rect),\n children: text\n }, column);\n })\n }, row);\n })\n })]\n })]\n })]\n });\n}\nexport default GridA11yFallback;\n//# sourceMappingURL=GridA11yFallback.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 { RangedSelection, assertIsRangedSelection, isRangedSelection, selectionToRanges } from \"./RangedSelection.js\";\nimport GridA11yFallback from \"./GridA11yFallback.js\";\n/** Selection-related slice of `GridState`. Returned by gesture entry points. */\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 // Listeners for when the grid draws its canvas.\n _defineProperty(this, \"drawListeners\", 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 // Track if this Grid instance added the grid-block-events class\n // Used to ensure only the Grid that added the class removes it\n _defineProperty(this, \"hasAddedBlockEvents\", 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.registerDrawListener = this.registerDrawListener.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n this.getModel = this.getModel.bind(this);\n var isStuckToBottom = props.isStuckToBottom,\n isStuckToRight = props.isStuckToRight,\n metricCalculator = props.metricCalculator,\n movedColumns = props.movedColumns,\n movedRows = props.movedRows,\n renderer = props.renderer;\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 = null;\n this.drawListeners = new Set();\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.hasAddedBlockEvents = false;\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\n // Selections are immutable, so a single instance can back both selection\n // and lastSelection until the first commit produces a fresh committed value.\n var emptySelection = props.createEmptySelection(this.getModel);\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 // 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 selection: emptySelection,\n lastSelection: emptySelection,\n selectedRanges: [],\n gestureMode: null,\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 _this$props = this.props,\n isStuckToBottom = _this$props.isStuckToBottom,\n isStuckToRight = _this$props.isStuckToRight;\n var _this$getStickyScroll = this.getStickyScrollPosition(isStuckToBottom, isStuckToRight),\n top = _this$getStickyScroll.top,\n left = _this$getStickyScroll.left;\n this.setState({\n top,\n left\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var renderError = this.state.renderError;\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 _this$props2 = this.props,\n isStickyBottom = _this$props2.isStickyBottom,\n isStickyRight = _this$props2.isStickyRight,\n movedColumns = _this$props2.movedColumns,\n movedRows = _this$props2.movedRows,\n onMovedColumnsChanged = _this$props2.onMovedColumnsChanged,\n onMoveColumnComplete = _this$props2.onMoveColumnComplete,\n onMovedRowsChanged = _this$props2.onMovedRowsChanged,\n onMoveRowComplete = _this$props2.onMoveRowComplete,\n renderer = _this$props2.renderer,\n metricCalculator = _this$props2.metricCalculator,\n createEmptySelection = _this$props2.createEmptySelection;\n var prevIsStickyBottom = prevProps.isStickyBottom,\n prevIsStickyRight = prevProps.isStickyRight,\n prevPropMovedColumns = prevProps.movedColumns,\n prevPropMovedRows = prevProps.movedRows;\n var prevStateMovedColumns = prevState.movedColumns,\n prevStateMovedRows = prevState.movedRows;\n var _this$state = this.state,\n draggingColumn = _this$state.draggingColumn,\n draggingRow = _this$state.draggingRow,\n currentStateMovedColumns = _this$state.movedColumns,\n currentStateMovedRows = _this$state.movedRows;\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\n // Sync renderer/metricCalculator props to instance fields so callers can\n // swap them at runtime (e.g. pivot model swap supplies a pivot renderer\n // and metric calculator).\n if (renderer !== prevProps.renderer) {\n this.renderer = renderer !== null && renderer !== void 0 ? renderer : new GridRenderer();\n }\n if (metricCalculator !== prevProps.metricCalculator) {\n this.metricCalculator = metricCalculator !== null && metricCalculator !== void 0 ? metricCalculator : new GridMetricCalculator();\n }\n if (prevProps.createEmptySelection !== createEmptySelection) {\n var empty = createEmptySelection(this.getModel);\n stateUpdates.selection = empty;\n stateUpdates.lastSelection = empty;\n stateUpdates.selectedRanges = EMPTY_ARRAY;\n }\n var updatedState = _objectSpread(_objectSpread({}, this.state), stateUpdates);\n this.updateMetrics(updatedState);\n this.requestUpdateCanvas();\n if (this.needToUpdateScroll()) {\n var _this$getStickyScroll2 = this.getStickyScrollPosition(isStickyBottom, isStickyRight),\n top = _this$getStickyScroll2.top,\n left = _this$getStickyScroll2.left;\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 theme = this.props.theme;\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 _this$props3 = this.props,\n model = _this$props3.model,\n stateOverride = _this$props3.stateOverride;\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 left = state.left,\n top = state.top,\n leftOffset = state.leftOffset,\n topOffset = state.topOffset,\n movedColumns = state.movedColumns,\n movedRows = state.movedRows,\n isDraggingHorizontalScrollBar = state.isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar = state.isDraggingVerticalScrollBar,\n draggingColumn = state.draggingColumn;\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 keyHandlers = this.props.keyHandlers;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMouseHandlers() {\n var mouseHandlers = this.props.mouseHandlers;\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 model = this.props.model;\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 // Programmatic install so we bypass gesture-driven deselect-on-reclick\n // when the caller re-toggles the currently-selected row.\n var theme = this.props.theme;\n var range = theme.autoSelectRow === true ? new GridRange(null, row, null, row) : GridRange.makeCell(0, row);\n this.setState(state => {\n var newSel = state.selection.clear().withCommittedRanges([range]).withCursor(row, 0).withSelectionEnd(row, 0);\n return {\n selection: newSel,\n lastSelection: newSel,\n selectedRanges: selectionToRanges(newSel),\n isStuckToBottom: false\n };\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 _this$metrics3 = this.metrics,\n bottomVisible = _this$metrics3.bottomVisible,\n rowCount = _this$metrics3.rowCount,\n top = _this$metrics3.top,\n lastTop = _this$metrics3.lastTop,\n rightVisible = _this$metrics3.rightVisible,\n columnCount = _this$metrics3.columnCount,\n left = _this$metrics3.left,\n lastLeft = _this$metrics3.lastLeft;\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 model = this.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\n this.setState(state => {\n var _state$selection = state.selection,\n cursorRow = _state$selection.cursorRow,\n cursorColumn = _state$selection.cursorColumn;\n var selectionEndRow = null;\n var selectionEndColumn = null;\n var anchorRow = null;\n var anchorColumn = null;\n if (gridRanges.length > 0) {\n var range = GridRange.boundedRange(gridRanges[0], columnCount, rowCount);\n if (!range.containsCell(cursorColumn, cursorRow)) {\n var _range$startCell = range.startCell();\n cursorRow = _range$startCell.row;\n cursorColumn = _range$startCell.column;\n }\n anchorColumn = range.startColumn;\n anchorRow = range.startRow;\n selectionEndColumn = range.endColumn;\n selectionEndRow = range.endRow;\n }\n var selection = state.selection.withCommittedRanges(gridRanges, {\n row: anchorRow,\n column: anchorColumn\n }).withCursor(cursorRow, cursorColumn).withSelectionEnd(selectionEndRow, selectionEndColumn);\n return {\n selection,\n selectedRanges: selectionToRanges(selection),\n lastSelection: state.selection\n };\n });\n }\n initContext() {\n var canvas = this.canvas;\n var canvasOptions = this.props.canvasOptions;\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 canvasContext = this.canvasContext,\n metrics = this.metrics,\n renderState = this.renderState;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n this.renderer.configureContext(canvasContext, renderState);\n var onViewChanged = this.props.onViewChanged;\n onViewChanged(metrics);\n this.drawCanvas();\n }\n updateCanvasScale() {\n var canvas = this.canvas,\n canvasContext = this.canvasContext,\n canvasWrapper = this.canvasWrapper;\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 _this$state2 = this.state,\n left = _this$state2.left,\n top = _this$state2.top;\n var _this$metrics4 = this.metrics,\n lastLeft = _this$metrics4.lastLeft,\n lastTop = _this$metrics4.lastTop;\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 _this$metrics5 = this.metrics,\n rowCount = _this$metrics5.rowCount,\n columnCount = _this$metrics5.columnCount,\n height = _this$metrics5.height,\n width = _this$metrics5.width;\n var _this$prevMetrics = this.prevMetrics,\n prevRowCount = _this$prevMetrics.rowCount,\n prevColumnCount = _this$prevMetrics.columnCount,\n prevHeight = _this$prevMetrics.height,\n prevWidth = _this$prevMetrics.width;\n if (prevRowCount !== rowCount || height !== prevHeight) {\n var isStuckToBottom = this.state.isStuckToBottom;\n if (isStuckToBottom) {\n return true;\n }\n }\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n var isStuckToRight = this.state.isStuckToRight;\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 metricCalculator = this.metricCalculator;\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 selection = this.state.selection;\n if (selection !== prevState.selection) {\n var _this$props4 = this.props,\n onSelectionChanged = _this$props4.onSelectionChanged,\n onSelectionChange = _this$props4.onSelectionChange;\n onSelectionChanged(selectionToRanges(selection));\n onSelectionChange(selection);\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 createEmptySelection = this.props.createEmptySelection;\n var selection = this.state.selection;\n\n // Validate that a RangedSelection is within the bounds of the grid model\n if (isRangedSelection(selection) && !selection.isInBounds()) {\n // Just clear the selection rather than trying to trim it.\n var empty = createEmptySelection(this.getModel);\n this.setState({\n selection: empty,\n lastSelection: empty,\n selectedRanges: EMPTY_ARRAY\n });\n return false;\n }\n return true;\n }\n\n /**\n * Clears all selected ranges\n */\n clearSelectedRanges() {\n this.setState(state => ({\n selection: state.selection.clear(),\n lastSelection: state.selection,\n selectedRanges: EMPTY_ARRAY\n }));\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges() {\n var selection = this.state.selection;\n var trimmed = selection.trimmed();\n this.setState({\n selection: trimmed,\n selectedRanges: selectionToRanges(trimmed)\n });\n }\n\n /** Sets the selection directly, bypassing mouse/keyboard gesture state. */\n setSelection(selection) {\n // Sync lastSelection so the next gesture compares against the just-installed\n // committed state; otherwise a pending → resolved swap would leave the next\n // ctrl+click's toggle referencing the pending selection's empty keys.\n this.setState({\n selection,\n lastSelection: selection,\n selectedRanges: selectionToRanges(selection)\n });\n }\n\n /** Gets the current selection */\n getSelection() {\n var selection = this.state.selection;\n return selection;\n }\n\n /** @deprecated Use getSelection() instead */\n getSelectedRanges() {\n var selection = this.state.selection;\n // toRanges() is RangedSelection-only; returns [] for keyed selections\n return selectionToRanges(selection);\n }\n\n /**\n * Queries the current grid model.\n * @returns The current GridModel instance.\n */\n getModel() {\n var model = this.props.model;\n return model;\n }\n\n /**\n * Extend + commit a gesture at `cursor` and return the resulting partial\n * state. Shared by mouse click-and-release and keyboard commits.\n *\n * @param selection Pre-gesture selection to fold against. Cursor landing\n * reads its extended (pre-commit) form so `KeyedSelection`'s overlay is\n * still available.\n * @param cursor Gesture target cell.\n * @param mode Modifier-derived gesture mode.\n * @param opts.moveCursor Snap the cursor to `cursor` (default true).\n * Pass false for keyboard extend / maximize / add so the cursor stays put.\n * @param opts.allowDeselect Whether committing on top of the same\n * single-row / single-cell selection should deselect (mouse affordance,\n * default true). Keyboard callers pass false so arrowing onto an\n * already-selected cell just moves the cursor.\n * @param opts.settle Whether the commit should finalize (deselect check,\n * hole-punch, consolidation). Mouse-down passes false so a drag can grow\n * the last range before mouse-up finalizes.\n */\n applyGestureAt(selection, cursor, mode) {\n var _theme$autoSelectRow, _theme$autoSelectColu;\n var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var theme = this.props.theme;\n var _opts$moveCursor = opts.moveCursor,\n moveCursor = _opts$moveCursor === void 0 ? true : _opts$moveCursor,\n _opts$allowDeselect = opts.allowDeselect,\n allowDeselect = _opts$allowDeselect === void 0 ? true : _opts$allowDeselect,\n _opts$settle = opts.settle,\n settle = _opts$settle === void 0 ? true : _opts$settle;\n var lastSelection = selection;\n var extendOpts = {\n mode,\n autoSelectRow: (_theme$autoSelectRow = theme.autoSelectRow) !== null && _theme$autoSelectRow !== void 0 ? _theme$autoSelectRow : false,\n autoSelectColumn: (_theme$autoSelectColu = theme.autoSelectColumn) !== null && _theme$autoSelectColu !== void 0 ? _theme$autoSelectColu : false\n };\n var extended = selection.withGestureExtend(cursor, extendOpts);\n // `replace` snaps the cursor to the gesture; extend/maximize/add keep it put.\n var cursorTarget = moveCursor ? cursor : {\n row: selection.cursorRow,\n column: selection.cursorColumn\n };\n var settled = extended.commitGesture(lastSelection, {\n autoSelectRow: extendOpts.autoSelectRow,\n cursor: cursorTarget,\n allowDeselect,\n settle\n }).withSelectionEnd(cursor.row, cursor.column);\n return {\n selection: settled,\n lastSelection,\n selectedRanges: selectionToRanges(settled)\n };\n }\n\n /**\n * Start a mouse-driven selection gesture at `cursor` with the given\n * modifier-derived `mode`. Extends the selection per `mode` semantics\n * and commits immediately so a click without drag settles the state.\n */\n handleMouseSelectStart(cursor, mode) {\n this.setState(state => _objectSpread(_objectSpread({}, this.applyGestureAt(state.selection, cursor, mode, {\n settle: false\n })), {}, {\n gestureMode: mode\n }));\n }\n\n /**\n * Extend the current mouse selection gesture to `cursor`. Transient\n * overlay only; the settled commit runs on `handleMouseSelectEnd`.\n */\n handleMouseSelectDrag(cursor) {\n var theme = this.props.theme;\n this.setState(state => {\n var _theme$autoSelectRow2, _theme$autoSelectColu2;\n // Additive gestures (ctrl+click, ctrl+shift+click) grow the last range\n // via `maximize` so the prior committed selection survives the drag.\n // Replace and shift-extend continue as `extend`, trimming to the last\n // range.\n var isAdditive = state.gestureMode === 'add' || state.gestureMode === 'maximize';\n var opts = {\n mode: isAdditive ? 'maximize' : 'extend',\n autoSelectRow: (_theme$autoSelectRow2 = theme.autoSelectRow) !== null && _theme$autoSelectRow2 !== void 0 ? _theme$autoSelectRow2 : false,\n autoSelectColumn: (_theme$autoSelectColu2 = theme.autoSelectColumn) !== null && _theme$autoSelectColu2 !== void 0 ? _theme$autoSelectColu2 : false\n };\n var extended = state.selection.withGestureExtend(cursor, opts).withSelectionEnd(cursor.row, cursor.column);\n return {\n selection: extended,\n selectedRanges: selectionToRanges(extended)\n };\n });\n this.moveViewToCell(cursor.column, cursor.row);\n }\n\n /** Settle the current mouse selection gesture. Called on mouse-up. */\n handleMouseSelectEnd() {\n var theme = this.props.theme;\n this.setState(state => {\n var _theme$autoSelectRow3;\n var selection = state.selection,\n lastSelection = state.lastSelection;\n var settled = selection.commitGesture(lastSelection, {\n autoSelectRow: (_theme$autoSelectRow3 = theme.autoSelectRow) !== null && _theme$autoSelectRow3 !== void 0 ? _theme$autoSelectRow3 : false,\n // Mouse-up commit preserves the current cursor position.\n cursor: {\n row: selection.cursorRow,\n column: selection.cursorColumn\n }\n });\n if (settled === selection) return null;\n return {\n selection: settled,\n lastSelection: settled,\n selectedRanges: selectionToRanges(settled)\n };\n });\n // Always clear the in-flight gesture mode on mouse-up. Kept as a\n // separate setState so the settled-update above stays in a single Pick\n // shape that React's typing narrows cleanly.\n this.setState(_ref5 => {\n var gestureMode = _ref5.gestureMode;\n return gestureMode == null ? null : {\n gestureMode: null\n };\n });\n }\n\n /**\n * Apply a keyboard-driven selection gesture at `cursor` with `mode`, then\n * optionally scroll the viewport to bring the cursor into view. Shared\n * entry point for arrow keys, Home/End, and page-key movements.\n *\n * Only `replace` moves the cursor to `cursor`; extend/maximize/add\n * preserve the existing cursor and update `selectionEnd` only. This\n * matches long-standing Shift+Arrow semantics where the cursor stays put\n * as the selection grows.\n */\n handleKeySelectAt(cursor, mode) {\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _opts$keepCursorInVie = opts.keepCursorInView,\n keepCursorInView = _opts$keepCursorInVie === void 0 ? true : _opts$keepCursorInVie;\n var moveCursor = mode === 'replace';\n this.setState(state => this.applyGestureAt(state.selection, cursor, mode, {\n moveCursor,\n allowDeselect: false\n }));\n if (keepCursorInView && cursor.column != null && cursor.row != null) {\n this.moveViewToCell(cursor.column, cursor.row);\n }\n }\n\n /**\n * Listen for the grid finishing a draw of its canvas. Called immediately with\n * the most recent draw if the grid has already drawn.\n * @param listener Called with the state that was drawn\n * @returns A function to stop listening\n */\n registerDrawListener(listener) {\n this.drawListeners.add(listener);\n if (this.renderState !== null) {\n listener(this.renderState);\n }\n return () => {\n this.drawListeners.delete(listener);\n };\n }\n\n /**\n * Advance the cursor in `direction` through the current selection. Used\n * by Tab/Enter — cycles within the selected ranges when there are\n * multiple, wraps at grid edges when there is only a single cell.\n * When the resulting cursor falls outside the current selection (e.g.\n * from an initial empty state), installs a fresh single-cell selection.\n */\n handleKeyAdvanceCursor(direction) {\n var selection = this.state.selection;\n var next = selection.getNextCursorInDirection({\n column: selection.cursorColumn,\n row: selection.cursorRow\n }, direction);\n if (next == null) return;\n var column = next.column,\n row = next.row;\n if (column == null || row == null) return;\n if (selection.isCellSelected(column, row)) {\n this.setState(state => ({\n selection: state.selection.withCursor(row, column)\n }));\n } else {\n this.setState(state => this.applyGestureAt(state.selection, {\n column,\n row\n }, 'replace', {\n allowDeselect: false\n }));\n }\n this.moveViewToCell(column, row);\n }\n\n /**\n * Page-move gesture. `direction` is +1 (page-down) or -1 (page-up). Reads\n * viewport metrics to compute the target cell, applies the gesture without\n * auto-scrolling, then pins the viewport top so the cursor lands where it\n * was on screen before.\n */\n handleKeyPage(mode, direction) {\n var selection = this.state.selection;\n var cursorColumn = selection.cursorColumn,\n selectionEndRow = selection.selectionEndRow;\n if (selectionEndRow == null) return;\n var row = selectionEndRow;\n var metricState = this.getMetricState();\n var _this$metricCalculato = this.metricCalculator.getMetrics(metricState),\n bottomVisible = _this$metricCalculato.bottomVisible,\n topVisible = _this$metricCalculato.topVisible,\n hasHorizontalBar = _this$metricCalculato.hasHorizontalBar,\n rowCount = _this$metricCalculato.rowCount,\n lastTop = _this$metricCalculato.lastTop;\n var pageSize = bottomVisible - topVisible + (hasHorizontalBar ? 0 : 1);\n var target = clamp(row + direction * pageSize, 0, rowCount - 1);\n var viewportPosition = clamp(target - (row - topVisible), 0, lastTop);\n this.handleKeySelectAt({\n column: cursorColumn,\n row: target\n }, mode, {\n keepCursorInView: false\n });\n this.setViewState({\n top: viewportPosition\n });\n }\n handleKeyPageUp(mode) {\n this.handleKeyPage(mode, -1);\n }\n handleKeyPageDown(mode) {\n this.handleKeyPage(mode, 1);\n }\n\n /**\n * Move the cursor to a cell without touching the selection.\n */\n handleKeyMoveCursor(column, row) {\n this.setState(state => ({\n selection: state.selection.withCursor(row, column).withSelectionEnd(row, column)\n }));\n this.moveViewToCell(column, row);\n }\n setFocusRow(focusedRow) {\n var _userRowHeights$get;\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n var _this$metrics6 = this.metrics,\n gridY = _this$metrics6.gridY,\n height = _this$metrics6.height,\n lastTop = _this$metrics6.lastTop,\n userRowHeights = _this$metrics6.userRowHeights,\n rowHeight = _this$metrics6.rowHeight;\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(state => {\n var cursorColumn = state.selection.cursorColumn;\n var newSel = state.selection.withCommittedRanges([new GridRange(null, focusedRow, null, focusedRow)]).withCursor(focusedRow, cursorColumn).withSelectionEnd(focusedRow, cursorColumn);\n return {\n top: Math.min(lastTop, newTop),\n selection: newSel,\n lastSelection: newSel,\n selectedRanges: selectionToRanges(newSel),\n isStuckToBottom: false\n };\n });\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll() {\n this.setState(state => {\n var newSelection = state.selection.selectAll();\n return {\n selection: newSelection,\n lastSelection: newSelection,\n selectedRanges: selectionToRanges(newSelection)\n };\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 metricCalculator = this.metricCalculator;\n var _this$metrics7 = this.metrics,\n bottomVisible = _this$metrics7.bottomVisible,\n rightVisible = _this$metrics7.rightVisible,\n topVisible = _this$metrics7.topVisible,\n leftVisible = _this$metrics7.leftVisible;\n var metricState = this.getMetricState(this.state);\n var _this$state3 = this.state,\n top = _this$state3.top,\n left = _this$state3.left,\n topOffset = _this$state3.topOffset,\n leftOffset = _this$state3.leftOffset;\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 _this$props5 = this.props,\n isStickyBottom = _this$props5.isStickyBottom,\n isStickyRight = _this$props5.isStickyRight;\n var top = viewState.top,\n left = viewState.left;\n var _this$metrics8 = this.metrics,\n lastTop = _this$metrics8.lastTop,\n lastLeft = _this$metrics8.lastLeft,\n hasVerticalBar = _this$metrics8.hasVerticalBar,\n hasHorizontalBar = _this$metrics8.hasHorizontalBar;\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 model = this.props.model;\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(state => ({\n editingCell: cell,\n selection: state.selection.withCursor(row, column)\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 model = this.props.model;\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 model = _this.props.model;\n var _this$state4 = _this.state,\n movedColumns = _this$state4.movedColumns,\n movedRows = _this$state4.movedRows,\n selection = _this$state4.selection;\n // pasteValue is only reachable for editable (non-keyed) tables\n assertIsRangedSelection(selection);\n var selectedRanges = selection.toRanges();\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 (selection.isEmpty()) {\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 columnCount = model.columnCount,\n rowCount = model.rowCount;\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 onError = _this.props.onError;\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 _this$props6 = this.props,\n model = _this$props6.model,\n onError = _this$props6.onError;\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).catch(err => {\n onError(err instanceof Error ? err : new Error(\"\".concat(err)));\n });\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 _this$props7 = this.props,\n model = _this$props7.model,\n onError = _this$props7.onError;\n var _this$state5 = this.state,\n movedColumns = _this$state5.movedColumns,\n movedRows = _this$state5.movedRows;\n var modelRanges = GridUtils.getModelRanges(ranges, movedColumns, movedRows);\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value).catch(err => {\n onError(err instanceof Error ? err : new Error(\"\".concat(err)));\n });\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 selection = this.state.selection;\n return selection.isCellSelected(column, row);\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 this.hasAddedBlockEvents = true;\n }\n removeDocumentCursor() {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n this.documentCursor = null;\n }\n // Only remove grid-block-events if this Grid instance added it\n // This prevents one Grid from removing the class on unmount while another Grid is still dragging\n if (this.hasAddedBlockEvents) {\n document.documentElement.classList.remove('grid-block-events');\n this.hasAddedBlockEvents = false;\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 renderer = this.renderer,\n context = this.canvasContext,\n renderState = this.renderState;\n assertNotNull(renderState);\n context.save();\n renderer.drawCanvas(renderState);\n context.restore();\n this.drawListeners.forEach(listener => {\n listener(renderState);\n });\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 cursor = keyHandler.cursor;\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 cursor = mouseHandler.cursor;\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 x = gridPoint.x,\n y = gridPoint.y;\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 non-left click while dragging to allow drag to continue\n var isDragging = this.state.isDragging;\n if (isDragging && event.button !== 0) {\n return;\n }\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n this.stopDragTimer();\n this.removeDocumentCursor();\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onUp', event, false);\n\n // isDragging is set on any drag in handleMouseDrag, so it must be reset\n // here for drags that aren't owned by a handler that resets it (e.g. a\n // selection drag). Otherwise it stays stuck true and suppresses the\n // column separator hover highlight.\n if (isDragging) {\n this.setState({\n isDragging: false\n });\n }\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(_ref6 => {\n var _ref6$updateRevision = _ref6.updateRevision,\n updateRevision = _ref6$updateRevision === void 0 ? 0 : _ref6$updateRevision;\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 metricCalculator = this.metricCalculator,\n metrics = this.metrics;\n var metricState = this.getMetricState();\n if (!metrics) throw new Error('metrics not set');\n var lastTop = metrics.lastTop,\n lastLeft = metrics.lastLeft,\n columnCount = metrics.columnCount,\n rowCount = metrics.rowCount,\n scrollableContentWidth = metrics.scrollableContentWidth,\n scrollableViewportWidth = metrics.scrollableViewportWidth,\n scrollableContentHeight = metrics.scrollableContentHeight,\n scrollableViewportHeight = metrics.scrollableViewportHeight,\n hasHorizontalBar = metrics.hasHorizontalBar,\n hasVerticalBar = metrics.hasVerticalBar;\n var top = metrics.top,\n left = metrics.left,\n topOffset = metrics.topOffset,\n leftOffset = metrics.leftOffset;\n var theme = this.getTheme();\n var _GridUtils$getScrollD = GridUtils.getScrollDelta(event, metrics.barWidth, metrics.barHeight, metrics.rowHeight, metrics.rowHeight),\n deltaX = _GridUtils$getScrollD.deltaX,\n deltaY = _GridUtils$getScrollD.deltaY;\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(_ref7 => {\n var editingCell = _ref7.editingCell;\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 onError = this.props.onError;\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 _ref8 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref8$direction = _ref8.direction,\n direction = _ref8$direction === void 0 ? SELECTION_DIRECTION.DOWN : _ref8$direction,\n _ref8$fillRange = _ref8.fillRange,\n fillRange = _ref8$fillRange === void 0 ? false : _ref8$fillRange;\n var _this$state6 = this.state,\n editingCell = _this$state6.editingCell,\n selection = _this$state6.selection;\n if (!editingCell) throw new Error('editingCell not set');\n var column = editingCell.column,\n row = editingCell.row;\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 // fillRange is only reachable for editable (non-keyed) tables\n assertIsRangedSelection(selection);\n this.setValueForRanges(selection.toRanges(), value);\n } else {\n this.setValueForCell(column, row, value);\n }\n if (direction !== null) {\n this.handleKeyAdvanceCursor(direction);\n }\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n renderInputField() {\n var model = this.props.model;\n var editingCell = this.state.editingCell;\n var metrics = this.metrics;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n var selectionRange = editingCell.selectionRange,\n value = editingCell.value,\n isQuickEdit = editingCell.isQuickEdit;\n var column = editingCell.column,\n row = editingCell.row;\n var scrollX = metrics.scrollX,\n gridX = metrics.gridX,\n gridY = metrics.gridY,\n allColumnXs = metrics.allColumnXs,\n allRowYs = metrics.allRowYs,\n allColumnWidths = metrics.allColumnWidths,\n allRowHeights = metrics.allRowHeights;\n var theme = this.getTheme();\n var activeCellSelectionBorderWidth = theme.activeCellSelectionBorderWidth,\n rowBackgroundColors = theme.rowBackgroundColors,\n maxDepth = theme.maxDepth,\n cellHorizontalPadding = theme.cellHorizontalPadding;\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 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\n // Per-cell formatting takes priority; only compute the row stripe if there's no cell-specific color\n var cellBackgroundColor;\n var cellForegroundColor;\n if (modelColumn != null && modelRow != null) {\n var _model$backgroundColo;\n cellBackgroundColor = (_model$backgroundColo = model.backgroundColorForCell(modelColumn, modelRow, theme)) !== null && _model$backgroundColo !== void 0 ? _model$backgroundColo : undefined;\n cellForegroundColor = model.colorForCell(modelColumn, modelRow, theme);\n }\n if (cellBackgroundColor == null && rowBackgroundColors) {\n var colorSets = GridRenderer.getCachedBackgroundColors(rowBackgroundColors, maxDepth);\n var depth = isExpandableGridModel(model) ? model.depthForRow(row) : 0;\n var colorSet = colorSets[row % colorSets.length];\n cellBackgroundColor = colorSet[Math.min(depth, colorSet.length - 1)];\n }\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 '--grid-cell-bg': cellBackgroundColor,\n '--grid-cell-fg': cellForegroundColor,\n '--grid-row-height': \"\".concat(h, \"px\"),\n '--grid-font-size': theme.font.split(' ')[0],\n '--grid-cell-horizontal-padding': \"\".concat(cellHorizontalPadding, \"px\")\n } : {\n opacity: 0\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 var cellInputRendererRegistry = this.props.cellInputRendererRegistry;\n var restrictions = modelColumn != null ? model.getColumnRestrictions(modelColumn) : EMPTY_ARRAY;\n var cellInputProps = {\n selectionRange,\n className: classNames({\n error: !isValid\n }),\n onCancel: this.handleEditCellCancel,\n onChange: this.handleEditCellChange,\n onDone: this.handleEditCellCommit,\n isQuickEdit,\n style: inputStyle,\n value,\n restrictions\n };\n\n // The server supports multiple restrictions on a single column, but the UI does not know how to render multiple restrictions simultaneously\n // This uses a custom renderer if there is only one restriction and uses the default renderer if there are multiple restrictions\n var renderer = restrictions.length === 1 ? cellInputRendererRegistry === null || cellInputRendererRegistry === void 0 ? void 0 : cellInputRendererRegistry.get(restrictions[0].type) : undefined;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: renderer != null ? renderer(cellInputProps) :\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(CellInputField, _objectSpread({}, cellInputProps))\n }, \"\".concat(column, \",\").concat(row));\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 _this$state7 = this.state,\n draggingColumn = _this$state7.draggingColumn,\n draggingColumnSeparator = _this$state7.draggingColumnSeparator,\n draggingRow = _this$state7.draggingRow,\n draggingRowOffset = _this$state7.draggingRowOffset,\n draggingRowSeparator = _this$state7.draggingRowSeparator,\n editingCell = _this$state7.editingCell,\n gestureMode = _this$state7.gestureMode,\n isDraggingHorizontalScrollBar = _this$state7.isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar = _this$state7.isDraggingVerticalScrollBar,\n isDragging = _this$state7.isDragging,\n mouseX = _this$state7.mouseX,\n mouseY = _this$state7.mouseY,\n selection = _this$state7.selection;\n var _this$props8 = this.props,\n model = _this$props8.model,\n stateOverride = _this$props8.stateOverride;\n var metrics = this.metrics;\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 selection,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n gestureMode\n }, stateOverride);\n return this.renderState;\n }\n render() {\n var children = this.props.children;\n var cursor = this.state.cursor;\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: /*#__PURE__*/_jsx(GridA11yFallback, {\n registerDrawListener: this.registerDrawListener\n })\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 onSelectionChange: _selection => 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 cellInputRendererRegistry: new Map(),\n stateOverride: {},\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false\n },\n createEmptySelection: RangedSelection.empty\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","_slicedToArray","r","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","e","n","l","i","u","f","o","directionForKey","SELECTION_DIRECTION","CellInputField","_ref","selectionRange","_ref$className","className","_ref$disabled","disabled","_ref$value","propsValue","_ref$isQuickEdit","propsIsQuickEdit","_ref$onChange","onChange","EMPTY_FUNCTION","_ref$onCancel","onCancel","_ref$onDone","onDone","style","inputField","useRef","isCancelled","_useState","useState","_useState2","initialValue","_useState3","_useState4","isChanged","setIsChanged","_useState5","_useState6","isQuickEdit","setIsQuickEdit","_useState7","_useState8","value","setValue","useEffect","field","sendUpdate","useCallback","newValue","handleChange","event","handleCancel","handleClick","handleCommit","direction","fillRange","handleBlur","handleKeyDown","GridUtils","_jsx","classNames","assertIsDefined","val","AssertionError","_defineProperty","_toPropertyKey","t","_toPrimitive","PasteError","DEFAULT_INTERVAL_MS","GridSelectionMouseHandler","GridMouseHandler","gridPoint","grid","x","y","column","row","metrics","gridX","gridY","maxX","maxY","gridMouseX","gridMouseY","isModifierKey","isShiftKey","theme","autoSelectRow","autoSelectColumn","mode","gestureModeFromModifiers","_this$startPoint","startRow","startColumn","left","lastLeft","top","lastTop","columnWidth","rowHeight","dragBounds","deltaX","deltaY","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnCount","rowCount","bottom","right","topVisible","bottomVisible","leftVisible","rightVisible","isInRange","_grid$state$selection","selectionEndRow","selectionEndColumn","minX","minY","timeout","ownKeys","_objectSpread","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","model","_modelColumns$get","modelColumns","movedColumns","allColumnXs","allColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","modelIndex","group","isColumnGroup","range","_allColumnXs$get","_allColumnXs$get2","_allColumnWidths$get","_group$getVisibleRang","_group$getVisibleRang2","startVisibleIndex","endVisibleIndex","_ref2","_allColumnWidths$get2","possibleLeft","GridColumnMoveMouseHandler","leftOffset","nextLeft","nextOffset","_userColumnWidths$get","prevColumnWidth","leftColumnWidth","_userColumnWidths$get2","_modelIndex","_grid$state","mouseX","mouseY","columnHeaderDepth","columnInfo","rowHeaderWidth","draggingColumn","initialColumnInfo","endColumn","_draggingParentGroup$","assertNotNull","draggingColumnDepth","width","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","clamp","parentGroup","parentVisibleRange","_allColumnXs$get3","_newMovedColumns","_getColumnInfo","_newMovedColumns2","_ref3","_ref3$right","parentRight","toVisibleIndex","_newMovedColumns3","toColumnInfo","_toColumnInfo$left","_toColumnInfo$right","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","newMovedColumns","to","moveDistance","newDraggingRange","GridHorizontalScrollBarMouseHandler","rawLeft","metricCalculator","_left","_leftOffset","leftOffsetPercent","metricState","scrollBarSize","scrollBarHoverSize","barLeft","barWidth","height","hasHorizontalBar","_this$dragOffset","handleWidth","scrollableContentWidth","scrollableViewportWidth","mouseBarX","scrollPercent","scrollX","_this$getLeftWithOffs","newLeft","newLeftOffset","_this$getLeftWithOffs2","GridRowMoveMouseHandler","columnHeaderHeight","allRowYs","rowY","getOrThrow","draggingRow","_grid$getGridPointFro","allRowHeights","topRow","bottomRow","movedRows","minMoveY","maxMoveY","GridRowSeparatorMouseHandler","GridSeparatorMouseHandler","index","size","separator","GridScrollBarCornerMouseHandler","hasVerticalBar","GridVerticalScrollBarMouseHandler","rawTop","_top","_topOffset","topOffsetPercent","topOffset","barTop","barHeight","handleHeight","scrollableContentHeight","scrollableViewportHeight","mouseBarY","scrollY","_this$getTopWithOffse","newTop","newTopOffset","_this$getTopWithOffse2","EditMouseHandler","isEditableGridModel","GridRange","SelectionKeyHandler","KeyHandler","cursorColumn","cursorRow","toEnd","targetColumn","targetRow","deltaColumn","deltaRow","_grid$state$selection2","_model","_columnCount","_rowCount","moveToColumn","moveToRow","_theme$autoSelectRow","_theme$autoSelectColu","TreeKeyHandler","isRangedSelection","ranges","modelRow","isExpandableGridModel","EditKeyHandler","modelColumn","cellInputRendererRegistry","restrictions","renderer","ThemeContext","React","GRID_A11Y_ATTRIBUTES","formatGridA11yRect","clipGridA11yRect","clippedX","clippedY","clippedWidth","clippedHeight","getCellRect","isFloatingColumn","isFloatingRow","verticalBarWidth","horizontalBarHeight","floatingRightWidth","floatingTopHeight","floatingBottomHeight","getColumnHeaderRect","getGridA11ySummary","selection","getVisibleRowsDescription","rows","b","lastRange","descriptions","_ref4","_ref5","start","end","label","createGridA11ySnapshot","columns","isHiddenColumn","_metrics$allColumnWid","isHiddenRow","_metrics$allRowHeight","floatingColumns","floatingRows","snapshotColumns","_metrics$allColumnXs$","_metrics$allColumnXs$2","snapshotRows","_metrics$allRowYs$get","_metrics$allRowYs$get2","_model$textForColumnH","rect","cells","headers","_ref6","text","visibleRows","_ref7","viewport","GridA11yFallback","registerDrawListener","showSnapshot","setShowSnapshot","renderState","setRenderState","snapshot","useMemo","_jsxs","_Fragment","prevShowSnapshot","asyncGeneratorStep","c","_asyncToGenerator","_next","_throw","Grid","PureComponent","context","_legacyContext$webkit","devicePixelRatio","legacyContext","backingStorePixelRatio","cursor","props","memoize","keyHandlers","mouseHandlers","isStuckToBottom","isStuckToRight","GridRenderer","GridMetricCalculator","PasteKeyHandler","GridColumnSeparatorMouseHandler","GridRowTreeMouseHandler","GridTokenMouseHandler","emptySelection","_this$canvas","_this$props","_this$getStickyScroll","prevProps","prevState","renderError","changedProps","changedState","_this$props2","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","createEmptySelection","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","_this$state","currentStateMovedColumns","currentStateMovedRows","stateUpdates","empty","EMPTY_ARRAY","updatedState","_this$getStickyScroll2","_this$canvas2","state","_this$props3","stateOverride","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","columnIndex","_this$metrics","rowIndex","_this$metrics2","expandDescendants","newSel","selectionToRanges","_this$metrics3","gridRanges","_state$selection","anchorRow","anchorColumn","_range$startCell","canvas","canvasOptions","canvasContext","onViewChanged","canvasWrapper","scale","_this$state2","_this$metrics4","_this$metrics5","_this$prevMetrics","prevRowCount","prevColumnCount","prevHeight","prevWidth","_this$props4","onSelectionChanged","onSelectionChange","trimmed","opts","_opts$moveCursor","moveCursor","_opts$allowDeselect","allowDeselect","_opts$settle","settle","lastSelection","extendOpts","extended","cursorTarget","settled","_theme$autoSelectRow2","_theme$autoSelectColu2","isAdditive","_theme$autoSelectRow3","gestureMode","_opts$keepCursorInVie","keepCursorInView","listener","next","_this$metricCalculato","pageSize","target","viewportPosition","focusedRow","_userRowHeights$get","_this$metrics6","userRowHeights","tableHeight","halfViewportHeight","newSelection","_this$metrics7","_this$state3","viewState","forceUpdate","_this$props5","_this$metrics8","cell","_this","_this$state4","assertIsRangedSelection","selectedRanges","assertIsEditableGridModel","_edits","modelRanges","tableWidth","_range$startColumn","_range$startRow","_range$startColumn2","_range$startRow2","edits","_range$startColumn3","_range$startColumn4","_range$startRow3","onError","_this$props6","err","_this$props7","_this$state5","mouseEvent","_this$canvas3","_this$canvas4","mouseHandler","functionName","keyHandler","result","_options$stopPropagat","_options$preventDefau","options","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","isDragging","callback","_ref6$updateRevision","updateRevision","_GridUtils$getScrollD","maxLeftOffset","_metrics$allColumnWid2","_columnWidth","maxTopOffset","_metrics$allRowHeight2","_rowHeight","editingCell","_ref8","_ref8$direction","_ref8$fillRange","_this$state6","activeCellSelectionBorderWidth","rowBackgroundColors","maxDepth","cellHorizontalPadding","w","h","leftBorderOffset","cellBackgroundColor","cellForegroundColor","_model$backgroundColo","colorSets","colorSet","wrapperStyle","inputStyle","isValid","cellInputProps","_this$state7","draggingColumnSeparator","draggingRowOffset","draggingRowSeparator","_this$props8","children","_selection","moveOperations","token","isLinkToken","RangedSelection","contextTheme","userTheme","GridTheme"],"mappings":"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"}
|