@deephaven/embed-widget 1.10.1-beta.0 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/build/assets/{App-CMa4KLNb.js → App-BxUxY4n5.js} +2 -2
  2. package/build/assets/{App-CMa4KLNb.js.map → App-BxUxY4n5.js.map} +1 -1
  3. package/build/assets/{Chart-iZHeZymR.js → Chart-DCAXyin1.js} +2 -2
  4. package/build/assets/{Chart-iZHeZymR.js.map → Chart-DCAXyin1.js.map} +1 -1
  5. package/build/assets/{IrisGrid-BT0jgxNQ.js → IrisGrid-CDaypHxn.js} +3 -3
  6. package/build/assets/{IrisGrid-BT0jgxNQ.js.map → IrisGrid-CDaypHxn.js.map} +1 -1
  7. package/build/assets/{IrisGridThemeProvider-Cr2OMEt6.js → IrisGridThemeProvider-D8WmTl6X.js} +2 -2
  8. package/build/assets/{IrisGridThemeProvider-Cr2OMEt6.js.map → IrisGridThemeProvider-D8WmTl6X.js.map} +1 -1
  9. package/build/assets/{LocalWorkspaceStorage-I6Wpor4D.js → LocalWorkspaceStorage-D-_5JxW0.js} +2 -2
  10. package/build/assets/{LocalWorkspaceStorage-I6Wpor4D.js.map → LocalWorkspaceStorage-D-_5JxW0.js.map} +1 -1
  11. package/build/assets/{LogPanel-C3Q6QhjP.js → LogPanel-BN2VYlYF.js} +2 -2
  12. package/build/assets/{LogPanel-C3Q6QhjP.js.map → LogPanel-BN2VYlYF.js.map} +1 -1
  13. package/build/assets/{MarkdownEditor-Bdfg5JQY.js → MarkdownEditor-DBjlHhGK.js} +2 -2
  14. package/build/assets/{MarkdownEditor-Bdfg5JQY.js.map → MarkdownEditor-DBjlHhGK.js.map} +1 -1
  15. package/build/assets/{MarkdownNotebook-DLhAqiOh.js → MarkdownNotebook-BmdN4A4b.js} +2 -2
  16. package/build/assets/{MarkdownNotebook-DLhAqiOh.js.map → MarkdownNotebook-BmdN4A4b.js.map} +1 -1
  17. package/build/assets/{index-Biu4R7UU.js → index-ByXhtFz6.js} +9 -9
  18. package/build/assets/index-ByXhtFz6.js.map +1 -0
  19. package/build/assets/{index-_X89-OiE.js → index-CfhJnBnE.js} +3 -3
  20. package/build/assets/{index-_X89-OiE.js.map → index-CfhJnBnE.js.map} +1 -1
  21. package/build/assets/index-D4IWyDq_.css +1 -0
  22. package/build/assets/{index-6jS4d5w-.js → index-DwIuzPDR.js} +4 -4
  23. package/build/assets/{index-6jS4d5w-.js.map → index-DwIuzPDR.js.map} +1 -1
  24. package/build/index.html +2 -2
  25. package/package.json +17 -17
  26. package/build/assets/index-Biu4R7UU.js.map +0 -1
  27. package/build/assets/index-C7-82BWT.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGrid-BT0jgxNQ.js","sources":["../../../utils/dist/ObjectUtils.js","../../../grid/dist/errors/assertIsDefined.js","../../../grid/dist/errors/PasteError.js","../../../grid/dist/mouse-handlers/GridColumnMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowSeparatorMouseHandler.js","../../../grid/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js","../../../grid/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/EditMouseHandler.js","../../../grid/dist/KeyHandler.js","../../../grid/dist/key-handlers/SelectionKeyHandler.js","../../../grid/dist/key-handlers/TreeKeyHandler.js","../../../grid/dist/key-handlers/EditKeyHandler.js","../../../grid/dist/key-handlers/PasteKeyHandler.js","../../../grid/dist/CellInputField.js","../../../grid/dist/ThemeContext.js","../../../grid/dist/Grid.js","../../../iris-grid/dist/AdvancedFilterCreatorFilterItem.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValueList.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValue.js","../../../iris-grid/dist/AdvancedFilterCreator.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js","../../../iris-grid/dist/IrisGridBottomBar.js","../../../iris-grid/dist/PendingDataBottomBar.js","../../../iris-grid/dist/IrisGridCopyHandler.js","../../../iris-grid/dist/FilterInputField.js","../../../iris-grid/dist/key-handlers/CopyCellKeyHandler.js","../../../iris-grid/dist/key-handlers/CopyKeyHandler.js","../../../iris-grid/dist/key-handlers/ReverseKeyHandler.js","../../../iris-grid/dist/key-handlers/ClearFilterKeyHandler.js","../../../iris-grid/dist/ToastBottomBar.js","../../../iris-grid/dist/IrisGridModelUpdater.js","../../../iris-grid/dist/ColumnStatistics.js","../../../iris-grid/dist/CrossColumnSearch.js","../../../iris-grid/dist/IrisGridPartitionSelector.js","../../../iris-grid/dist/sidebar/SelectDistinctBuilder.js","../../../iris-grid/dist/sidebar/AdvancedSettingsMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/StyleEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ColumnFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/RowFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js","../../../iris-grid/dist/IrisGridCellOverflowModal.js","../../../iris-grid/dist/GotoRow.js","../../../iris-grid/dist/NoPastePermissionModal.js","../../../iris-grid/dist/IrisGrid.js"],"sourcesContent":["/**\n * Get the keys that have changed between two objects.\n * @param oldObject Old object to compare\n * @param newObject New object to compare\n * @returns Array of keys that have changed\n */\nexport function getChangedKeys(oldObject, newObject) {\n var keys = new Set([...Object.keys(oldObject), ...Object.keys(newObject)]);\n var changedKeys = [];\n keys.forEach(key => {\n if (oldObject[key] !== newObject[key]) {\n changedKeys.push(key);\n }\n });\n return changedKeys;\n}\nexport default {\n getChangedKeys\n};\n//# sourceMappingURL=ObjectUtils.js.map","import AssertionError from \"./AssertionError.js\";\nexport function assertIsDefined(val) {\n if (val === undefined || val === null) {\n throw new AssertionError(\"Expected 'val' to be defined, but received \".concat(val));\n }\n}\nexport default assertIsDefined;\n//# sourceMappingURL=assertIsDefined.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class PasteError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isPasteError\", true);\n }\n}\nexport default PasteError;\n//# sourceMappingURL=PasteError.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { assertNotNull } from '@deephaven/utils';\nimport GridUtils from \"../GridUtils.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nvar SLOPPY_CLICK_DISTANCE = 5;\nvar SCROLL_INTERVAL = 1000 / 60;\nvar SCROLL_DELTA = 10;\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(visibleIndex, depth, metrics, model) {\n var _modelColumns$get;\n var {\n modelColumns,\n movedColumns,\n allColumnXs,\n columnCount,\n allColumnWidths,\n userColumnWidths,\n calculatedColumnWidths,\n floatingLeftWidth,\n maxX\n } = metrics;\n if (depth == null || visibleIndex == null || visibleIndex > columnCount || visibleIndex < 0) {\n return null;\n }\n var modelIndex = (_modelColumns$get = modelColumns.get(visibleIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(visibleIndex, movedColumns);\n var group = model.getColumnHeaderGroup(modelIndex, depth);\n var isColumnGroup = group != null;\n var left;\n var right;\n var range;\n if (group != null) {\n var _allColumnXs$get, _allColumnXs$get2, _allColumnWidths$get;\n var [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(movedColumns);\n left = (_allColumnXs$get = allColumnXs.get(startVisibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : floatingLeftWidth;\n right = ((_allColumnXs$get2 = allColumnXs.get(endVisibleIndex)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : maxX) + ((_allColumnWidths$get = allColumnWidths.get(endVisibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n var _ref, _ref2, _allColumnWidths$get2;\n var possibleLeft = allColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n left = possibleLeft;\n right = left + ((_ref = (_ref2 = (_allColumnWidths$get2 = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : userColumnWidths.get(modelIndex)) !== null && _ref2 !== void 0 ? _ref2 : calculatedColumnWidths.get(modelIndex)) !== null && _ref !== void 0 ? _ref : 0);\n range = [visibleIndex, visibleIndex];\n }\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth\n };\n}\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", null);\n _defineProperty(this, \"draggingOffset\", void 0);\n _defineProperty(this, \"initialOffset\", void 0);\n _defineProperty(this, \"initialGridPoint\", void 0);\n _defineProperty(this, \"scrollingInterval\", void 0);\n _defineProperty(this, \"scrollingDirection\", void 0);\n _defineProperty(this, \"draggingColumn\", null);\n }\n setScrollInterval(grid, direction) {\n if (this.scrollingInterval != null && direction === this.scrollingDirection) {\n return;\n }\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n var {\n metrics\n } = grid;\n if (!metrics) {\n return;\n }\n var {\n left,\n lastLeft,\n leftOffset,\n userColumnWidths,\n calculatedColumnWidths,\n movedColumns,\n allColumnWidths\n } = metrics;\n var nextLeft = left;\n var nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n var _userColumnWidths$get;\n nextLeft -= 1;\n var modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n var prevColumnWidth = (_userColumnWidths$get = userColumnWidths.get(modelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n var leftColumnWidth = allColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n var _userColumnWidths$get2;\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n var _modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth = (_userColumnWidths$get2 = userColumnWidths.get(_modelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : calculatedColumnWidths.get(_modelIndex);\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (metrics == null || mouseX == null || mouseY == null) {\n return;\n }\n this.moveDraggingColumn(mouseX, grid, direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA);\n grid.setState({\n left: nextLeft,\n leftOffset: nextOffset\n });\n if (direction === 'left' && nextLeft === 0 && leftOffset === 0 || direction === 'right' && nextLeft === lastLeft) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n clearScrollInterval() {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n onLeave() {\n this.clearScrollInterval();\n return false;\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n column,\n columnHeaderDepth\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\n var columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n var {\n rowHeaderWidth\n } = metrics;\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n if (columnInfo.modelIndex != null && columnHeaderDepth != null && model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n onDrag(gridPoint, grid, event) {\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined) {\n return false;\n }\n var {\n x: mouseX,\n y: mouseY\n } = gridPoint;\n var {\n columnHeaderDepth\n } = this.initialGridPoint;\n var {\n model\n } = grid.props;\n var {\n draggingColumn\n } = this;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (!draggingColumn && Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE && Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n var initialColumnInfo = getColumnInfo(this.initialGridPoint.column, columnHeaderDepth, metrics, model);\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width\n };\n var startColumn = getColumnInfo(draggingColumn.range[0], 0, metrics, model);\n var endColumn = getColumnInfo(draggingColumn.range[1], 0, metrics, model);\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n this.draggingColumn = draggingColumn;\n grid.setState({\n draggingColumn,\n isDragging: true\n });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX, grid, deltaX) {\n var _draggingParentGroup$;\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined || this.draggingColumn == null || deltaX === 0) {\n return;\n }\n var {\n metrics\n } = grid;\n assertNotNull(metrics, 'Metrics not set');\n var {\n gridX\n } = metrics;\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (this.draggingOffset < this.initialOffset && this.initialOffset < this.draggingOffset + deltaX || this.draggingOffset > this.initialOffset && this.initialOffset > this.draggingOffset + deltaX) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n var {\n depth: draggingColumnDepth\n } = this.draggingColumn;\n var {\n model\n } = grid.props;\n var {\n movedColumns\n } = grid.state;\n var {\n floatingLeftWidth,\n width,\n columnHeaderMaxDepth,\n allColumnXs\n } = metrics;\n var isDraggingLeft = deltaX < 0;\n var draggingColumn = getColumnInfo(this.draggingColumn.range[0], draggingColumnDepth, metrics, model);\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n var floatingDraggingLeft = mouseX - this.draggingOffset - gridX;\n var floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n var swapColumn = getColumnInfo(GridUtils.getColumnAtX(clamp(isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight, floatingLeftWidth, width) + gridX, metrics, true), draggingColumnDepth, metrics, model);\n var parentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup !== undefined) {\n var parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n var _allColumnXs$get3;\n var _newMovedColumns = this.moveColumn(draggingColumn, parentVisibleRange[0], movedColumns);\n this.draggingOffset = mouseX - ((_allColumnXs$get3 = allColumnXs.get(parentVisibleRange[0])) !== null && _allColumnXs$get3 !== void 0 ? _allColumnXs$get3 : 0);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n var _getColumnInfo;\n var _newMovedColumns2 = this.moveColumn(draggingColumn, parentVisibleRange[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n var {\n right: parentRight = 0\n } = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {};\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns2\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n var toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (toVisibleIndex < draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (toVisibleIndex > draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex -= 1;\n }\n }\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n var _newMovedColumns3 = this.moveColumn(draggingColumn, toVisibleIndex, movedColumns);\n grid.setState({\n movedColumns: _newMovedColumns3,\n draggingColumn: this.draggingColumn\n });\n }\n var toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n var _toColumnInfo$left;\n this.draggingOffset = mouseX - ((_toColumnInfo$left = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.left) !== null && _toColumnInfo$left !== void 0 ? _toColumnInfo$left : 0);\n } else {\n var _toColumnInfo$right;\n this.draggingOffset = mouseX - (((_toColumnInfo$right = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.right) !== null && _toColumnInfo$right !== void 0 ? _toColumnInfo$right : 0) - draggingColumn.width);\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (isDraggingLeft && draggingColumn.visibleIndex < swapColumn.visibleIndex || !isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex) {\n return;\n }\n var switchPoint = swapColumn.left + swapColumn.width * 0.5;\n var draggingParentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n var maxDepthSwapGroup;\n var maxSwapDepth = ((_draggingParentGroup$ = draggingParentGroup === null || draggingParentGroup === void 0 ? void 0 : draggingParentGroup.depth) !== null && _draggingParentGroup$ !== void 0 ? _draggingParentGroup$ : columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(swapColumn.modelIndex, maxSwapDepth);\n maxSwapDepth -= 1;\n }\n var newMovedColumns;\n if (isDraggingLeft && floatingDraggingLeft < switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[0])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[0], movedColumns);\n }\n if (!isDraggingLeft && floatingDraggingRight > switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[1])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n }\n if (!newMovedColumns) {\n return;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(draggingColumn, to, movedColumns) {\n var newMovedColumns = draggingColumn.isColumnGroup ? GridUtils.moveRange(draggingColumn.range, to, movedColumns) : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n var moveDistance = to - draggingColumn.range[0];\n var newDraggingRange = [draggingColumn.range[0] + moveDistance, draggingColumn.range[1] + moveDistance];\n if (this.draggingColumn) {\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n range: newDraggingRange\n });\n }\n return newMovedColumns;\n }\n onUp(gridPoint, grid) {\n this.cursor = null;\n this.clearScrollInterval();\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridColumnMoveMouseHandler;\n//# sourceMappingURL=GridColumnMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getLeftWithOffsetFromRawLeft(grid, rawLeft) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToColumn) {\n var _left = Math.round(rawLeft);\n var _leftOffset = 0;\n return {\n left: _left,\n leftOffset: _leftOffset\n };\n }\n var left = Math.floor(rawLeft);\n var leftOffsetPercent = rawLeft - left;\n var columnWidth = metrics.allColumnWidths.get(left);\n if (columnWidth == null) {\n var metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n var leftOffset = columnWidth * leftOffsetPercent;\n return {\n left,\n leftOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barLeft,\n barWidth,\n height,\n hasHorizontalBar\n } = metrics;\n return hasHorizontalBar && scrollBarSize > 0 && y >= height - scrollBarHoverSize && y < height && x > barLeft && x < barLeft + barWidth;\n }\n getLeftWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n barWidth,\n handleWidth,\n lastLeft,\n barLeft,\n columnCount,\n scrollableContentWidth,\n scrollableViewportWidth\n } = metrics;\n var mouseBarX = x - barLeft;\n var scrollPercent = clamp((mouseBarX - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barWidth - handleWidth), 0, 1);\n if (columnCount === 1) {\n return {\n left: 0,\n leftOffset: scrollPercent * (scrollableContentWidth - scrollableViewportWidth)\n };\n }\n var rawLeft = scrollPercent * lastLeft;\n return GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(grid, rawLeft);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n handleWidth,\n barLeft,\n scrollX\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarX = x - barLeft;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({\n isDraggingHorizontalScrollBar: true\n });\n } else {\n this.dragOffset = 0;\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridHorizontalScrollBarMouseHandler;\n//# sourceMappingURL=GridHorizontalScrollBarMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\nclass GridRowMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", 'move');\n _defineProperty(this, \"draggingOffset\", void 0);\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n y,\n row\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n columnHeaderHeight,\n rowHeaderWidth,\n allRowYs\n } = metrics;\n if (x <= rowHeaderWidth && row !== null && model.isRowMovable(row)) {\n var rowY = getOrThrow(allRowYs, row);\n this.draggingOffset = y - rowY - columnHeaderHeight;\n grid.setState({\n draggingRowOffset: this.draggingOffset\n });\n }\n return false;\n }\n onDrag(gridPoint, grid) {\n if (this.draggingOffset == null) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n draggingRow\n } = grid.state;\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n if (draggingRow == null) {\n var {\n row\n } = grid.getGridPointFromXY(mouseX, mouseY);\n if (row != null && !model.isRowMovable(row)) {\n return false;\n }\n draggingRow = row;\n grid.setState({\n draggingRow,\n isDragging: true\n });\n if (draggingRow == null) {\n return false;\n }\n }\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n top,\n lastTop,\n bottom,\n bottomVisible,\n rowCount,\n columnHeaderHeight,\n allRowHeights,\n allRowYs,\n height\n } = metrics;\n var minY = columnHeaderHeight;\n if (top < draggingRow) {\n var topRow = draggingRow - 1;\n minY = getOrThrow(allRowYs, topRow) + getOrThrow(allRowHeights, topRow) * 0.5 + columnHeaderHeight;\n }\n var maxY = height;\n if (draggingRow < bottom) {\n var bottomRow = draggingRow + 1;\n maxY = getOrThrow(allRowYs, bottomRow) + getOrThrow(allRowHeights, bottomRow) * 0.5 + columnHeaderHeight;\n }\n var {\n movedRows\n } = grid.state;\n if (mouseY < minY && draggingRow > 0 && model.isRowMovable(draggingRow - 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow - 1, movedRows);\n draggingRow -= 1;\n } else if (maxY < mouseY && draggingRow < rowCount - 1 && model.isRowMovable(draggingRow + 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow + 1, movedRows);\n draggingRow += 1;\n }\n grid.setState({\n movedRows,\n draggingRow\n });\n var minMoveY = columnHeaderHeight + getOrThrow(allRowHeights, top) * 0.5;\n var maxMoveY = columnHeaderHeight + getOrThrow(allRowYs, bottomVisible) + getOrThrow(allRowHeights, bottomVisible) * 0.5;\n if (mouseY < minMoveY && top > 0) {\n grid.setState({\n top: top - 1\n });\n } else if (mouseY > maxMoveY && top < lastTop) {\n grid.setState({\n top: top + 1\n });\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.draggingOffset !== undefined) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingRowOffset: null,\n draggingRow: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridRowMoveMouseHandler;\n//# sourceMappingURL=GridRowMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridSeparatorMouseHandler from \"./GridSeparatorMouseHandler.js\";\nclass GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"hiddenCursor\", 's-resize');\n _defineProperty(this, \"defaultCursor\", 'row-resize');\n _defineProperty(this, \"pointProperty\", 'y');\n _defineProperty(this, \"userSizesProperty\", 'userRowHeights');\n _defineProperty(this, \"visibleOffsetProperty\", 'visibleRowYs');\n _defineProperty(this, \"visibleSizesProperty\", 'visibleRowHeights');\n _defineProperty(this, \"marginProperty\", 'columnHeaderHeight');\n _defineProperty(this, \"calculatedSizesProperty\", 'calculatedRowHeights');\n _defineProperty(this, \"initialSizesProperty\", 'initialRowHeights');\n _defineProperty(this, \"modelIndexesProperty\", 'modelRows');\n _defineProperty(this, \"firstIndexProperty\", 'firstRow');\n _defineProperty(this, \"treePaddingProperty\", 'treePaddingY');\n _defineProperty(this, \"getHiddenItems\", GridUtils.getHiddenRows);\n _defineProperty(this, \"getNextShownItem\", GridUtils.getNextShownRow);\n _defineProperty(this, \"getSeparator\", GridRowSeparatorMouseHandler.getRowSeparator);\n }\n static getRowSeparator(gridPoint, metrics, model, theme) {\n if (!theme.allowRowResize) {\n return null;\n }\n var {\n x,\n y\n } = gridPoint;\n var index = GridUtils.getRowSeparatorIndex(x, y, metrics, theme);\n return index != null ? {\n index,\n depth: 0\n } : null;\n }\n setSize(metricCalculator, modelIndex, size) {\n metricCalculator.setRowHeight(modelIndex, size);\n }\n resetSize(metricCalculator, modelIndex) {\n metricCalculator.resetRowHeight(modelIndex);\n }\n updateSeparator(grid, separator) {\n grid.setState({\n draggingRowSeparator: separator,\n isDragging: separator !== null\n });\n }\n}\nexport default GridRowSeparatorMouseHandler;\n//# sourceMappingURL=GridRowSeparatorMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass GridScrollBarCornerMouseHandler extends GridMouseHandler {\n isInCorner(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n width,\n height,\n hasVerticalBar,\n hasHorizontalBar\n } = metrics;\n return scrollBarSize > 0 && hasVerticalBar && hasHorizontalBar && x >= width - scrollBarSize && y >= height - scrollBarSize && x <= width && y <= height;\n }\n onDown(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n}\nexport default GridScrollBarCornerMouseHandler;\n//# sourceMappingURL=GridScrollBarCornerMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridVerticalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getTopWithOffsetFromRawTop(grid, rawTop) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToRow) {\n var _top = Math.round(rawTop);\n var _topOffset = 0;\n return {\n top: _top,\n topOffset: _topOffset\n };\n }\n var top = Math.floor(rawTop);\n var topOffsetPercent = rawTop - top;\n var rowHeight = metrics.allRowHeights.get(top);\n if (rowHeight == null) {\n var metricState = grid.getMetricState();\n rowHeight = metricCalculator.getVisibleRowHeight(top, metricState);\n }\n var topOffset = rowHeight * topOffsetPercent;\n return {\n top,\n topOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barTop,\n barHeight,\n width,\n hasVerticalBar\n } = metrics;\n return hasVerticalBar && scrollBarSize > 0 && x >= width - scrollBarHoverSize && x < width && y > barTop && y < barTop + barHeight;\n }\n getTopWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n barHeight,\n handleHeight,\n lastTop,\n barTop,\n rowCount,\n scrollableContentHeight,\n scrollableViewportHeight\n } = metrics;\n var mouseBarY = y - barTop;\n var scrollPercent = clamp((mouseBarY - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barHeight - handleHeight), 0, 1);\n if (rowCount === 1) {\n return {\n top: 0,\n topOffset: scrollPercent * (scrollableContentHeight - scrollableViewportHeight)\n };\n }\n var rawTop = scrollPercent * lastTop;\n return GridVerticalScrollBarMouseHandler.getTopWithOffsetFromRawTop(grid, rawTop);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n handleHeight,\n barTop,\n scrollY\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarY = y - barTop;\n if (mouseBarY >= scrollY && mouseBarY <= scrollY + handleHeight) {\n // Grabbed the vertical handle\n this.dragOffset = mouseBarY - scrollY;\n grid.setState({\n isDraggingVerticalScrollBar: true\n });\n } else {\n // clicked elsewhere in bar\n this.dragOffset = 0;\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingVerticalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridVerticalScrollBarMouseHandler;\n//# sourceMappingURL=GridVerticalScrollBarMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick(_ref, grid) {\n var {\n column,\n row\n } = _ref;\n var {\n model\n } = grid.props;\n if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\nexport default EditMouseHandler;\n//# sourceMappingURL=EditMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n/* eslint @typescript-eslint/no-unused-vars: \"off\" */\n/**\n * Handle keys in a grid\n * Return true from any of the events to indicate they're consumed, and stopPropagation/preventDefault will be called.\n */\n\n/**\n * Some events we listen to are a native keyboard event, and others are wrapped with React's SyntheticEvent.\n * The KeyHandler shouldn't care though - the properties it accesses should be common on both types of events.\n */\n\nexport class KeyHandler {\n // What order this key handler should trigger in\n // Default to well below any of the GRID key handlers 100-1000+\n constructor() {\n var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;\n _defineProperty(this, \"order\", void 0);\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\n _defineProperty(this, \"cursor\", null);\n this.order = order;\n }\n /**\n * Handle a keydown event on the grid.\n * @param event The keyboard event\n * @param grid The grid component the key press is on\n * @returns Response indicating if the key was consumed\n */\n onDown(event, grid) {\n return false;\n }\n\n /**\n * Handle a keyup event on the grid.\n * @param event The keyboard event\n * @param grid The grid component the key press is on\n * @returns Response indicating if the key was consumed\n */\n onUp(event, grid) {\n return false;\n }\n}\nexport default KeyHandler;\n//# sourceMappingURL=KeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport GridRange from \"../GridRange.js\";\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L':\n {\n if (GridUtils.isModifierKeyDown(event)) return false;\n var {\n model\n } = grid.props;\n var {\n columnCount\n } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow, event.shiftKey);\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0, GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n case 'End':\n {\n var {\n model: _model\n } = grid.props;\n var {\n columnCount: _columnCount,\n rowCount\n } = _model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : _columnCount - 1, GridUtils.isModifierKeyDown(event) ? rowCount - 1 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n }\n case 'Escape':\n if (grid.state.selectedRanges.length === 0) return false;\n grid.clearSelectedRanges();\n // consume the event, and stop propagation only if there were selected ranges to clear\n return {\n preventDefault: false,\n stopPropagation: true\n };\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n handleArrowMove(deltaColumn, deltaRow, event, grid) {\n var isShiftKey = event.shiftKey;\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = grid.state;\n var column = isShiftKey ? selectionEndColumn : cursorColumn;\n var row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n var {\n model\n } = grid.props;\n var {\n columnCount,\n rowCount\n } = model;\n var maximizePreviousRange = isModifierKey && isShiftKey;\n var moveToColumn = null;\n var moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n var {\n theme\n } = grid.props;\n var {\n autoSelectRow = false,\n autoSelectColumn = false\n } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n var {\n lastLeft\n } = grid.metrics;\n var {\n left\n } = grid.state;\n left = clamp(left + deltaColumn, 0, lastLeft);\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n grid.setViewState({\n left\n });\n } else if (autoSelectColumn && deltaRow !== 0) {\n var {\n lastTop\n } = grid.metrics;\n var {\n top\n } = grid.state;\n top = clamp(top + deltaRow, 0, lastTop);\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n grid.setViewState({\n top\n });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n handlePageUp(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorColumn,\n selectionEndRow\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row == null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar\n } = metricCalculator.getMetrics(metricState);\n var selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n var viewportPosition = Math.max(selectRangeEndPosition - (row - topVisible), 0);\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n handlePageDown(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n selectionEndRow,\n cursorColumn\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row === null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop\n } = metricCalculator.getMetrics(metricState);\n var lastRowIndex = rowCount - 1;\n var selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n}\nexport default SelectionKeyHandler;\n//# sourceMappingURL=SelectionKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isExpandableGridModel } from \"../ExpandableGridModel.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass TreeKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n {\n return this.handleExpandKey(event, grid);\n }\n default:\n break;\n }\n return false;\n }\n handleExpandKey(event, grid) {\n var {\n selectedRanges\n } = grid.state;\n if (selectedRanges.length === 1) {\n var range = selectedRanges[0];\n if (range.startRow === range.endRow && range.startColumn === range.endColumn) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n var {\n model\n } = grid.props;\n var {\n startRow: row,\n startColumn: column\n } = range;\n if (row != null) {\n var modelRow = grid.getModelRow(row);\n if ((column === 0 || column == null) && isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\nexport default TreeKeyHandler;\n//# sourceMappingURL=TreeKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridRange from \"../GridRange.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nclass EditKeyHandler extends KeyHandler {\n onDown(event, grid) {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n cursorColumn,\n cursorRow\n } = grid.state;\n if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model) || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {\n return false;\n }\n var column = cursorColumn;\n var row = cursorRow;\n if (column == null || row == null) {\n return false;\n }\n if (event.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], event.key);\n return true;\n }\n if (event.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n if (event.key === 'Backspace') {\n grid.startEditing(column, row, true, undefined, '');\n return true;\n }\n if (event.key === 'Delete') {\n grid.setValueForCell(column, row, '');\n return true;\n }\n return false;\n }\n}\nexport default EditKeyHandler;\n//# sourceMappingURL=EditKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table) {\n var data = [];\n var rows = table.querySelectorAll('tr');\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var cells = row.querySelectorAll('td');\n var rowData = [];\n for (var c = 0; c < cells.length; c += 1) {\n var _cell$textContent$tri, _cell$textContent;\n var cell = cells[c];\n rowData.push((_cell$textContent$tri = (_cell$textContent = cell.textContent) === null || _cell$textContent === void 0 ? void 0 : _cell$textContent.trim()) !== null && _cell$textContent$tri !== void 0 ? _cell$textContent$tri : '');\n }\n data.push(rowData);\n }\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes) {\n var result = [];\n nodes.forEach(node => {\n var _node$textContent;\n var text = (_node$textContent = node.textContent) !== null && _node$textContent !== void 0 ? _node$textContent : '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\nexport function parseValueFromElement(element) {\n var _element$textContent$, _element$textContent;\n // Check first if there's an HTML table element that we can use\n var table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n var text = (_element$textContent$ = (_element$textContent = element.textContent) === null || _element$textContent === void 0 ? void 0 : _element$textContent.trim()) !== null && _element$textContent$ !== void 0 ? _element$textContent$ : '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n var {\n childNodes\n } = element;\n var hasTabChar = text.includes('\\t');\n var hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (hasTabChar && childNodes.length !== 0 && (childNodes.length === 1 || childNodes.length > 1 && (childNodes[0].textContent == null || !childNodes[0].textContent.includes('\\t')))) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n var dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute('style', 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;');\n var listener = () => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n grid.focus();\n var value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return {\n preventDefault: false,\n stopPropagation: true\n };\n }\n break;\n }\n return false;\n }\n}\nexport default PasteKeyHandler;\n//# sourceMappingURL=PasteKeyHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport \"./CellInputField.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar directionForKey = key => {\n switch (key) {\n case 'ArrowDown':\n return SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return SELECTION_DIRECTION.RIGHT;\n default:\n return undefined;\n }\n};\nexport function CellInputField(_ref) {\n var {\n selectionRange,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = EMPTY_FUNCTION,\n onCancel = EMPTY_FUNCTION,\n onDone = EMPTY_FUNCTION,\n onContextMenu = EMPTY_FUNCTION,\n style\n } = _ref;\n var inputField = useRef(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n var isCancelled = useRef(false);\n var [initialValue] = useState(propsValue);\n var [isChanged, setIsChanged] = useState(false);\n var [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n var [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(function selectInputField() {\n var {\n current: field\n } = inputField;\n if (field == null) {\n return;\n }\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n }, [selectionRange]);\n var sendUpdate = useCallback(newValue => {\n onChange(newValue);\n }, [onChange]);\n var handleChange = useCallback(event => {\n var {\n value: newValue\n } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n }, [sendUpdate, setValue, setIsChanged]);\n var handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n var handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n var handleCommit = useCallback(function (direction) {\n var fillRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n onDone(value, {\n direction,\n fillRange\n });\n }, [onDone, value]);\n var handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n var handleKeyDown = useCallback(event => {\n event.stopPropagation();\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(undefined, true);\n } else if (event.altKey) {\n var newValue = \"\".concat(value, \"\\n\");\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.UP : SELECTION_DIRECTION.DOWN);\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.LEFT : SELECTION_DIRECTION.RIGHT);\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n }, [handleCancel, handleCommit, isQuickEdit, setValue, setIsChanged, sendUpdate, value]);\n var handleContextMenu = useCallback(event => {\n onContextMenu(event);\n }, [onContextMenu]);\n return /*#__PURE__*/_jsx(\"textarea\", {\n ref: inputField,\n className: classNames('grid-cell-input-field', className),\n value: value,\n onBlur: handleBlur,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n onContextMenu: handleContextMenu,\n onClick: handleClick,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\",\n disabled: disabled,\n style: style\n });\n}\nexport default CellInputField;\n//# sourceMappingURL=CellInputField.js.map","import React from 'react';\nexport var ThemeContext = /*#__PURE__*/React.createContext({});\nexport default ThemeContext;\n//# sourceMappingURL=ThemeContext.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY, getChangedKeys } from '@deephaven/utils';\nimport GridMetricCalculator from \"./GridMetricCalculator.js\";\nimport GridTheme from \"./GridTheme.js\";\nimport GridRange, { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridRenderer from \"./GridRenderer.js\";\nimport GridUtils, { isLinkToken } from \"./GridUtils.js\";\nimport { GridSelectionMouseHandler, GridColumnMoveMouseHandler, GridColumnSeparatorMouseHandler, GridHorizontalScrollBarMouseHandler, GridRowMoveMouseHandler, GridRowSeparatorMouseHandler, GridRowTreeMouseHandler, GridScrollBarCornerMouseHandler, GridVerticalScrollBarMouseHandler, EditMouseHandler, GridTokenMouseHandler } from \"./mouse-handlers/index.js\";\nimport \"./Grid.css\";\nimport { EditKeyHandler, PasteKeyHandler, SelectionKeyHandler, TreeKeyHandler } from \"./key-handlers/index.js\";\nimport CellInputField from \"./CellInputField.js\";\nimport PasteError from \"./errors/PasteError.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { assertIsEditableGridModel, isEditableGridModel } from \"./EditableGridModel.js\";\nimport { assertIsDefined } from \"./errors/index.js\";\nimport ThemeContext from \"./ThemeContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent {\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context) {\n var _ref, _ref2, _ref3, _ref4, _legacyContext$webkit;\n var devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n var legacyContext = context;\n var backingStorePixelRatio = // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n (_ref = (_ref2 = (_ref3 = (_ref4 = (_legacyContext$webkit = legacyContext.webkitBackingStorePixelRatio) !== null && _legacyContext$webkit !== void 0 ? _legacyContext$webkit : legacyContext.mozBackingStorePixelRatio) !== null && _ref4 !== void 0 ? _ref4 : legacyContext.msBackingStorePixelRatio) !== null && _ref3 !== void 0 ? _ref3 : legacyContext.oBackingStorePixelRatio) !== null && _ref2 !== void 0 ? _ref2 : legacyContext.backingStorePixelRatio) !== null && _ref !== void 0 ? _ref : 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor) {\n return cursor != null && cursor !== '' ? \"grid-cursor-\".concat(cursor) : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n\n /* eslint-enable react/sort-comp */\n\n constructor(props) {\n super(props);\n _defineProperty(this, \"renderer\", void 0);\n _defineProperty(this, \"metricCalculator\", void 0);\n _defineProperty(this, \"canvas\", void 0);\n _defineProperty(this, \"canvasContext\", void 0);\n // The wrapper element for the canvas, used for sizing\n _defineProperty(this, \"canvasWrapper\", void 0);\n // Listen for resizing of the element and update the canvas appropriately\n _defineProperty(this, \"resizeObserver\", void 0);\n // We draw the canvas on the next animation frame, keep track of the next one\n _defineProperty(this, \"animationFrame\", void 0);\n // Keep track of previous metrics and new metrics for comparison\n _defineProperty(this, \"prevMetrics\", void 0);\n _defineProperty(this, \"metrics\", void 0);\n _defineProperty(this, \"renderState\", void 0);\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n _defineProperty(this, \"documentCursor\", void 0);\n _defineProperty(this, \"dragTimer\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].sort((a, b) => a.order - b.order)));\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.notifyKeyboardHandlers = this.notifyKeyboardHandlers.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n var {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer\n } = props;\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n this.canvas = null;\n this.canvasContext = null;\n this.canvasWrapper = /*#__PURE__*/React.createRef();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.animationFrame = null;\n this.prevMetrics = null;\n this.metrics = null;\n this.renderState = {};\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [new EditKeyHandler(400), new PasteKeyHandler(450), new SelectionKeyHandler(500), new TreeKeyHandler(900)];\n this.mouseHandlers = [new GridRowSeparatorMouseHandler(100), new GridColumnSeparatorMouseHandler(200), new GridRowMoveMouseHandler(300), new GridColumnMoveMouseHandler(400), new EditMouseHandler(450), new GridVerticalScrollBarMouseHandler(500), new GridHorizontalScrollBarMouseHandler(600), new GridScrollBarCornerMouseHandler(700), new GridRowTreeMouseHandler(800), new GridTokenMouseHandler(875), new GridSelectionMouseHandler(900)];\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n // Offset when dragging a row\n draggingRowOffset: null,\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n isStuckToBottom,\n isStuckToRight,\n /** What revision the grid is drawing. Automatically increments when a forceUpdate is called. */\n updateRevision: 0\n };\n }\n componentDidMount() {\n var _this$canvas;\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n (_this$canvas = this.canvas) === null || _this$canvas === void 0 || _this$canvas.addEventListener('wheel', this.handleWheel, {\n passive: false\n });\n if (this.canvasWrapper.current != null) {\n this.resizeObserver.observe(this.canvasWrapper.current);\n }\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n var {\n isStuckToBottom,\n isStuckToRight\n } = this.props;\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStuckToBottom, isStuckToRight);\n this.setState({\n top,\n left\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n renderError\n } = this.state;\n\n // Render errors mean we can't recover\n if (renderError != null) {\n throw renderError;\n }\n var changedProps = getChangedKeys(prevProps, this.props);\n var changedState = getChangedKeys(prevState, this.state);\n // We don't need to bother re-checking any of the metrics if no props have changed or only the children have changed\n if ((changedProps.length === 0 || changedProps.length === 1 && changedProps[0] === 'children') && changedState.length === 0) {\n return;\n }\n var {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete\n } = this.props;\n var {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows\n } = prevProps;\n var {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows\n } = prevState;\n var {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows\n } = this.state;\n var stateUpdates = {};\n if (prevPropMovedColumns !== movedColumns) {\n stateUpdates.movedColumns = movedColumns;\n }\n if (prevPropMovedRows !== movedRows) {\n stateUpdates.movedRows = movedRows;\n }\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n if (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n if (isStickyBottom !== prevIsStickyBottom) {\n stateUpdates.isStuckToBottom = false;\n }\n if (isStickyRight !== prevIsStickyRight) {\n stateUpdates.isStuckToRight = false;\n }\n var updatedState = _objectSpread(_objectSpread({}, this.state), stateUpdates);\n this.updateMetrics(updatedState);\n this.requestUpdateCanvas();\n if (this.needToUpdateScroll()) {\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStickyBottom, isStickyRight);\n updatedState.top = top;\n updatedState.left = left;\n }\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n this.setState(updatedState);\n }\n componentWillUnmount() {\n var _this$canvas2;\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n (_this$canvas2 = this.canvas) === null || _this$canvas2 === void 0 || _this$canvas2.removeEventListener('wheel', this.handleWheel);\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n this.resizeObserver.disconnect();\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n getTheme() {\n var {\n theme\n } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n getGridPointFromEvent(event) {\n assertIsDefined(this.canvas);\n var rect = this.canvas.getBoundingClientRect();\n var x = event.clientX - rect.left;\n var y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n getGridPointFromXY(x, y) {\n if (!this.metrics) throw new Error('metrics must be set');\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n getMetricState() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n var theme = this.getTheme();\n var {\n model,\n stateOverride\n } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\n var context = this.canvasContext;\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n var {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n } = state;\n return _objectSpread({\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n }, stateOverride);\n }\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex) {\n var _this$metrics;\n var modelIndex = (_this$metrics = this.metrics) === null || _this$metrics === void 0 || (_this$metrics = _this$metrics.modelColumns) === null || _this$metrics === void 0 ? void 0 : _this$metrics.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for column \".concat(columnIndex));\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex) {\n var _this$metrics2;\n var modelIndex = (_this$metrics2 = this.metrics) === null || _this$metrics2 === void 0 || (_this$metrics2 = _this$metrics2.modelRows) === null || _this$metrics2 === void 0 ? void 0 : _this$metrics2.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for row \".concat(rowIndex));\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row) {\n var expandDescendants = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var modelRow = this.getModelRow(row);\n var {\n model\n } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow), expandDescendants);\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n this.setState({\n isStuckToBottom: false\n });\n }\n getStickyScrollPosition(isStickyBottom, isStickyRight) {\n // eslint-disable-next-line react/destructuring-assignment\n if (!this.metrics) return {\n left: this.state.left,\n top: this.state.top\n };\n var {\n bottomVisible,\n rowCount,\n top,\n lastTop,\n rightVisible,\n columnCount,\n left,\n lastLeft\n } = this.metrics;\n var newTop = top;\n var newLeft = left;\n if (isStickyBottom && (bottomVisible < rowCount - 1 && bottomVisible > 0 || top > lastTop)) {\n newTop = lastTop;\n }\n if (isStickyRight && (rightVisible < columnCount - 1 && rightVisible > 0 || left > lastLeft)) {\n newLeft = lastLeft;\n }\n return {\n top: newTop,\n left: newLeft\n };\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges\n });\n if (gridRanges.length > 0) {\n var range = GridRange.boundedRange(gridRanges[0], columnCount, rowCount);\n var newCursorRow = cursorRow;\n var newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({\n row: newCursorRow,\n column: newCursorColumn\n } = range.startCell());\n }\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow\n });\n }\n }\n initContext() {\n var {\n canvas\n } = this;\n var {\n canvasOptions\n } = this.props;\n if (!canvas) throw new Error('Canvas not set');\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n requestUpdateCanvas() {\n if (this.animationFrame != null) {\n return;\n }\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n try {\n this.updateCanvas();\n } catch (e) {\n // Errors thrown from the animation frame are uncaught by the grid panel\n this.setState({\n renderError: e\n });\n }\n });\n }\n\n /**\n * Updates the canvas, metrics, and render state, then draws the canvas.\n */\n updateCanvas() {\n this.updateCanvasScale();\n this.updateMetrics();\n this.updateRenderState();\n var {\n canvasContext,\n metrics,\n renderState\n } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n this.renderer.configureContext(canvasContext, renderState);\n var {\n onViewChanged\n } = this.props;\n onViewChanged(metrics);\n this.drawCanvas();\n }\n updateCanvasScale() {\n var {\n canvas,\n canvasContext,\n canvasWrapper\n } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvasWrapper.current) throw new Error('canvasWrapper not set');\n\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n var rect = canvasWrapper.current.getBoundingClientRect();\n var width = Math.floor(rect.width);\n var height = Math.floor(rect.height);\n\n // avoid triggering a dom re-calc if size hasn't changed\n if (parseFloat(canvas.style.width) === width && parseFloat(canvas.style.height) === height) {\n return;\n }\n var scale = Grid.getScale(canvasContext);\n canvas.style.width = \"\".concat(width, \"px\");\n canvas.style.height = \"\".concat(height, \"px\");\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n updateScrollBounds() {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n left,\n top\n } = this.state;\n var {\n lastLeft,\n lastTop\n } = this.metrics;\n if (left > lastLeft) {\n this.setState({\n left: lastLeft,\n leftOffset: 0\n });\n }\n if (top > lastTop) {\n this.setState({\n top: lastTop,\n topOffset: 0\n });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n needToUpdateScroll() {\n if (!this.metrics || !this.prevMetrics) {\n return false;\n }\n var {\n rowCount,\n columnCount,\n height,\n width\n } = this.metrics;\n var {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth\n } = this.prevMetrics;\n if (prevRowCount !== rowCount || height !== prevHeight) {\n var {\n isStuckToBottom\n } = this.state;\n if (isStuckToBottom) {\n return true;\n }\n }\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n var {\n isStuckToRight\n } = this.state;\n if (isStuckToRight) {\n return true;\n }\n }\n return false;\n }\n updateMetrics() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n this.prevMetrics = this.metrics;\n var {\n metricCalculator\n } = this;\n var metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState) {\n var {\n selectedRanges: oldSelectedRanges\n } = prevState;\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges !== oldSelectedRanges) {\n var {\n onSelectionChanged\n } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection() {\n var {\n model\n } = this.props;\n var {\n selectedRanges\n } = this.state;\n var {\n columnCount,\n rowCount\n } = model;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var range = selectedRanges[i];\n if (range.endColumn != null && range.endColumn >= columnCount || range.endRow != null && range.endRow >= rowCount) {\n // Just clear the selection rather than trying to trim it.\n this.setState({\n selectedRanges: [],\n lastSelectedRanges: []\n });\n return false;\n }\n }\n return true;\n }\n\n /**\n * Clears all selected ranges\n */\n clearSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: selectedRanges\n });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1)\n });\n }\n }\n\n /** Gets the selected ranges */\n getSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n return selectedRanges;\n }\n\n /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column, row) {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var maximizePreviousRange = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n this.setState(state => {\n var {\n selectedRanges,\n selectionStartRow,\n selectionStartColumn\n } = state;\n var {\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n if (extendSelection && selectedRanges.length > 0) {\n var lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n var left = null;\n var top = null;\n var right = null;\n var bottom = null;\n if (maximizePreviousRange) {\n var _lastSelectedRange$st, _lastSelectedRange$st2, _lastSelectedRange$en, _lastSelectedRange$en2;\n left = autoSelectRow !== undefined && autoSelectRow ? null : Math.min(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$st = lastSelectedRange.startColumn) !== null && _lastSelectedRange$st !== void 0 ? _lastSelectedRange$st : 0);\n top = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.min(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$st2 = lastSelectedRange.startRow) !== null && _lastSelectedRange$st2 !== void 0 ? _lastSelectedRange$st2 : 0);\n right = autoSelectRow !== undefined && autoSelectRow ? null : Math.max(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$en = lastSelectedRange.endColumn) !== null && _lastSelectedRange$en !== void 0 ? _lastSelectedRange$en : 0);\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.max(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$en2 = lastSelectedRange.endRow) !== null && _lastSelectedRange$en2 !== void 0 ? _lastSelectedRange$en2 : 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n }\n var selectedRange = GridRange.makeNormalized(left, top, right, bottom);\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n var _newRanges = [...selectedRanges];\n _newRanges[_newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: _newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n }\n var newRanges = [...selectedRanges];\n var selectedColumn = autoSelectRow !== undefined && autoSelectRow ? null : column;\n var selectedRow = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n newRanges.push(GridRange.makeNormalized(selectedColumn, selectedRow, selectedColumn, selectedRow));\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection() {\n this.setState(state => {\n var {\n theme\n } = this.props;\n var {\n autoSelectRow\n } = theme;\n var {\n selectedRanges,\n lastSelectedRanges,\n cursorRow,\n cursorColumn\n } = state;\n if (selectedRanges.length === 1 && (autoSelectRow !== undefined && autoSelectRow ? GridRange.rowCount(selectedRanges) === 1 : GridRange.cellCount(selectedRanges) === 1) && GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return {\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n cursorColumn: null,\n cursorRow: null\n };\n }\n var newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n var lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (var i = 0; i < newSelectedRanges.length - 1; i += 1) {\n var selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n var remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n var newCursorColumn = cursorColumn;\n var newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var nextCursor = GridRange.nextCell(GridRange.boundedRanges(selectedRanges, columnCount, rowCount));\n if (nextCursor != null) {\n ({\n column: newCursorColumn,\n row: newCursorRow\n } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n if (newSelectedRanges.length === 0) {\n newCursorColumn = null;\n newCursorRow = null;\n }\n var selectionChanged = newSelectedRanges.length !== selectedRanges.length || newSelectedRanges.some((range, index) => !range.equals(selectedRanges[index]));\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n // The onSelectionChanged callback has already been called with the selectedRanges at this point.\n // If the selection is not changed (e.g., the user is adding via ctrl+click and not removing),\n // there is no need to change and trigger the callback again.\n selectedRanges: selectionChanged ? newSelectedRanges : selectedRanges,\n lastSelectedRanges: selectedRanges\n };\n });\n }\n setFocusRow(focusedRow) {\n var _userRowHeights$get;\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n var {\n gridY,\n height,\n lastTop,\n userRowHeights,\n rowHeight\n } = this.metrics;\n var tableHeight = height - gridY;\n var halfViewportHeight = Math.round(tableHeight / 2) + ((_userRowHeights$get = userRowHeights.get(focusedRow)) !== null && _userRowHeights$get !== void 0 ? _userRowHeights$get : rowHeight);\n var metricState = this.getMetricState();\n var newTop = this.metricCalculator.getLastTop(metricState, focusedRow + 1, halfViewportHeight);\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false\n });\n var {\n cursorColumn\n } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll() {\n var {\n model,\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n var top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n var bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : model.rowCount - 1;\n var left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n var right = autoSelectRow !== undefined && autoSelectRow ? null : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n */\n moveCursor(deltaColumn, deltaRow, extendSelection) {\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = this.state;\n var column = extendSelection ? selectionEndColumn : cursorColumn;\n var row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n var {\n left,\n top\n } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var _left = clamp(column + deltaColumn, 0, columnCount - 1);\n var _top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(_left, _top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param direction The direction to move the cursor in\n */\n moveCursorInDirection() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GridRange.SELECTION_DIRECTION.DOWN;\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n var ranges = selectedRanges.length > 0 ? selectedRanges : [GridRange.makeCell(cursorColumn, cursorRow)];\n var nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n var _gridRange$nextCell;\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n var gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor = (_gridRange$nextCell = gridRange.nextCell(cursorColumn, cursorRow, direction)) !== null && _gridRange$nextCell !== void 0 ? _gridRange$nextCell : gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(GridRange.boundedRanges(ranges, columnCount, rowCount), cursorColumn, cursorRow, direction);\n }\n if (nextCursor != null) {\n var {\n column,\n row\n } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row\n });\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row\n });\n }\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var keepCursorInView = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var maximizePreviousRange = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param column The column index to bring into view\n * @param row The row index to bring into view\n */\n moveViewToCell(column, row) {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n metricCalculator\n } = this;\n var {\n bottomVisible,\n rightVisible,\n topVisible,\n leftVisible\n } = this.metrics;\n var metricState = this.getMetricState(this.state);\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = this.state;\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.metrics) throw new Error('metrics not set');\n var {\n isStickyBottom,\n isStickyRight\n } = this.props;\n var {\n top,\n left\n } = viewState;\n var {\n lastTop,\n lastLeft,\n hasVerticalBar,\n hasHorizontalBar\n } = this.metrics;\n if (top != null && hasVerticalBar) {\n this.setState({\n isStuckToBottom: isStickyBottom && top >= lastTop\n });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({\n isStuckToRight: isStickyRight && left >= lastLeft\n });\n }\n this.setState(viewState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(column, row) {\n var isQuickEdit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var selectionRange = arguments.length > 3 ? arguments[3] : undefined;\n var value = arguments.length > 4 ? arguments[4] : undefined;\n var {\n model\n } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n var cell = {\n column,\n row,\n selectionRange,\n value: value !== undefined ? value : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit\n };\n this.setState({\n editingCell: cell,\n cursorColumn: column,\n cursorRow: row\n });\n this.moveViewToCell(column, row);\n }\n\n /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(column, row, value) {\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n return isEditableGridModel(model) && model.isValidForCell(modelColumn, modelRow, value);\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param value Table or a string that is being pasted\n */\n pasteValue(value) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n var {\n movedColumns,\n movedRows,\n selectedRanges\n } = _this.state;\n try {\n assertIsEditableGridModel(model);\n if (!model.isEditable || !selectedRanges.every(range => model.isEditableRange(range))) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n var _edits = [];\n var modelRanges = GridUtils.getModelRanges(selectedRanges, movedColumns, movedRows);\n GridRange.forEachCell(modelRanges, (column, row) => {\n _edits.push({\n column,\n row,\n text: value\n });\n });\n yield model.setValues(_edits);\n return;\n }\n\n // Otherwise it's a table of data\n var tableHeight = value.length;\n var tableWidth = value[0].length;\n var {\n columnCount,\n rowCount\n } = model;\n var ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n // Check for\n if (ranges.every(range => {\n var _range$startColumn, _range$startRow;\n return GridRange.cellCount([range]) === 1 && ((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0) + tableWidth <= columnCount && ((_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0) + tableHeight <= rowCount;\n })) {\n // Remap the selected ranges\n ranges = ranges.map(range => {\n var _range$startColumn2, _range$startRow2;\n return new GridRange(range.startColumn, range.startRow, ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : 0) + tableWidth - 1, ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : 0) + tableHeight - 1);\n });\n _this.setSelectedRanges(ranges);\n }\n var edits = [];\n ranges.forEach(range => {\n var _range$startColumn3;\n if (((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : 0) + tableWidth > columnCount) {\n throw new PasteError('Pasted content would overflow columns.');\n }\n for (var x = 0; x < tableWidth; x += 1) {\n for (var y = 0; y < tableHeight; y += 1) {\n var _range$startColumn4, _range$startRow3;\n edits.push({\n column: ((_range$startColumn4 = range.startColumn) !== null && _range$startColumn4 !== void 0 ? _range$startColumn4 : 0) + x,\n row: ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : 0) + y,\n text: value[y][x]\n });\n }\n }\n });\n yield model.setValues(edits);\n } catch (e) {\n var {\n onError\n } = _this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n }\n })();\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(column, row, value) {\n var {\n model\n } = this.props;\n assertIsEditableGridModel(model);\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges, value) {\n var {\n model\n } = this.props;\n var {\n movedColumns,\n movedRows\n } = this.state;\n var modelRanges = GridUtils.getModelRanges(ranges, movedColumns, movedRows);\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row, column) {\n var {\n selectedRanges\n } = this.state;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var _selectedRange$endRow, _selectedRange$endCol;\n var selectedRange = selectedRanges[i];\n var rowSelected = selectedRange.startRow === null || selectedRange.startRow <= row && row <= ((_selectedRange$endRow = selectedRange.endRow) !== null && _selectedRange$endRow !== void 0 ? _selectedRange$endRow : 0);\n var columnSelected = selectedRange.startColumn === null || selectedRange.startColumn <= column && column <= ((_selectedRange$endCol = selectedRange.endColumn) !== null && _selectedRange$endCol !== void 0 ? _selectedRange$endCol : 0);\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n return false;\n }\n addDocumentCursor() {\n var cursor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n removeDocumentCursor() {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n startDragTimer(event) {\n this.stopDragTimer();\n var mouseEvent = new MouseEvent('custom', event.nativeEvent);\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n stopDragTimer() {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n */\n drawCanvas() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n renderer,\n canvasContext: context,\n renderState\n } = this;\n context.save();\n renderer.drawCanvas(renderState);\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus() {\n var _this$canvas3;\n (_this$canvas3 = this.canvas) === null || _this$canvas3 === void 0 || _this$canvas3.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused() {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event) {\n var _this$canvas4;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n (_this$canvas4 = this.canvas) === null || _this$canvas4 === void 0 || _this$canvas4.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event) {\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the keyboard handlers for this grid of a keyboard event.\n * @param functionName The name of the function in the keyboard handler to call\n * @param event The keyboard event to notify\n */\n notifyKeyboardHandlers(functionName, event) {\n var keyHandlers = this.getKeyHandlers();\n var cursor = null;\n for (var i = 0; i < keyHandlers.length; i += 1) {\n var keyHandler = keyHandlers[i];\n var result = keyHandler[functionName] != null && keyHandler[functionName](event, this);\n if (result !== false) {\n var _options$stopPropagat, _options$preventDefau;\n if (keyHandler.cursor != null) {\n ({\n cursor\n } = keyHandler);\n }\n var options = result;\n if ((_options$stopPropagat = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat !== void 0 ? _options$stopPropagat : true) event.stopPropagation();\n if ((_options$preventDefau = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n }\n handleKeyDown(event) {\n this.notifyKeyboardHandlers('onDown', event);\n }\n handleKeyUp(event) {\n this.notifyKeyboardHandlers('onUp', event);\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(functionName, event) {\n var updateCoordinates = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var addCursorToDocument = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n var cursor = null;\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n var result = mouseHandler[functionName] != null && mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\n var _options$stopPropagat2, _options$preventDefau2;\n if (mouseHandler.cursor != null) {\n ({\n cursor\n } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n var options = result;\n if ((_options$stopPropagat2 = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat2 !== void 0 ? _options$stopPropagat2 : true) event.stopPropagation();\n if ((_options$preventDefau2 = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau2 !== void 0 ? _options$preventDefau2 : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n if (updateCoordinates) {\n var {\n x,\n y\n } = gridPoint;\n this.setState({\n mouseX: x,\n mouseY: y\n });\n }\n }\n handleMouseDown(event) {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onDown', event);\n this.startDragTimer(event);\n }\n handleDoubleClick(event) {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n handleMouseMove(event) {\n this.notifyMouseHandlers('onMove', event);\n }\n handleMouseLeave(event) {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({\n mouseX: null,\n mouseY: null\n });\n }\n handleMouseDrag(event) {\n this.setState({\n isDragging: true\n });\n this.notifyMouseHandlers('onDrag', event, true, true);\n this.stopDragTimer();\n }\n handleMouseUp(event) {\n // Ignore right click while dragging\n var {\n isDragging\n } = this.state;\n if (isDragging && event.button === 2) {\n return;\n }\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onUp', event, false);\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n handleResize() {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvas();\n if (!this.metrics) throw new Error('metrics not set');\n this.forceUpdate();\n }\n forceUpdate(callback) {\n this.setState(_ref5 => {\n var {\n updateRevision = 0\n } = _ref5;\n return {\n updateRevision: (updateRevision + 1) % Number.MAX_SAFE_INTEGER\n };\n });\n super.forceUpdate(callback);\n }\n handleWheel(event) {\n this.notifyMouseHandlers('onWheel', event);\n if (event.defaultPrevented) {\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this;\n var metricState = this.getMetricState();\n if (!metrics) throw new Error('metrics not set');\n var {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar\n } = metrics;\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = metrics;\n var theme = this.getTheme();\n var {\n deltaX,\n deltaY\n } = GridUtils.getScrollDelta(event, metrics.barWidth, metrics.barHeight, metrics.rowHeight, metrics.rowHeight);\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n if (columnCount > 1) {\n // no scrolling needed, at directional edge\n if (leftOffset > 0 && left >= lastLeft || leftOffset < 0 && left <= 0) {\n leftOffset = 0;\n break;\n }\n } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n var maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n if (leftOffset > 0) {\n var _metrics$allColumnWid;\n // scroll right\n\n // get width of next column\n var columnWidth = (_metrics$allColumnWid = metrics.allColumnWidths.get(left)) !== null && _metrics$allColumnWid !== void 0 ? _metrics$allColumnWid : metricCalculator.getVisibleColumnWidth(left, metricState);\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n var _metrics$allColumnWid2;\n // scroll left\n\n // get width of next column\n var _columnWidth = (_metrics$allColumnWid2 = metrics.allColumnWidths.get(left - 1)) !== null && _metrics$allColumnWid2 !== void 0 ? _metrics$allColumnWid2 : metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n if (Math.abs(leftOffset) <= _columnWidth && theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + _columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if (topOffset > 0 && top >= lastTop || topOffset < 0 && top <= 0) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n var maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n if (topOffset > 0) {\n var _metrics$allRowHeight;\n // scroll direction down\n\n // get height of next row\n var rowHeight = (_metrics$allRowHeight = metrics.allRowHeights.get(top)) !== null && _metrics$allRowHeight !== void 0 ? _metrics$allRowHeight : metricCalculator.getVisibleRowHeight(top, metricState);\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n var _metrics$allRowHeight2;\n // scroll direction up\n\n // get height of next row\n var _rowHeight = (_metrics$allRowHeight2 = metrics.allRowHeights.get(top - 1)) !== null && _metrics$allRowHeight2 !== void 0 ? _metrics$allRowHeight2 : metricCalculator.getVisibleRowHeight(top - 1, metricState);\n if (Math.abs(topOffset) <= _rowHeight && theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + _rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n if (metrics.top !== top || metrics.left !== left || metrics.topOffset !== topOffset || metrics.leftOffset !== leftOffset) {\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel() {\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value) {\n this.setState(_ref6 => {\n var {\n editingCell\n } = _ref6;\n try {\n assertIsDefined(editingCell);\n return {\n editingCell: _objectSpread(_objectSpread({}, editingCell), {}, {\n value\n })\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n var {\n onError\n } = this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(value) {\n var {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var {\n editingCell,\n selectedRanges\n } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n var {\n column,\n row\n } = editingCell;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction === null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({\n editingCell: null\n });\n }\n return;\n }\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n if (direction !== null) {\n this.moveCursorInDirection(direction);\n }\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n renderInputField() {\n var {\n model\n } = this.props;\n var {\n editingCell\n } = this.state;\n var {\n metrics\n } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n var {\n selectionRange,\n value,\n isQuickEdit\n } = editingCell;\n var {\n column,\n row\n } = editingCell;\n var {\n scrollX,\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights\n } = metrics;\n var {\n activeCellSelectionBorderWidth\n } = this.getTheme();\n var x = allColumnXs.get(column);\n var y = allRowYs.get(row);\n var w = allColumnWidths.get(column);\n var h = allRowHeights.get(row);\n\n // make sure cell doeesn't go off the left side of the grid\n var leftBorderOffset = gridX + (x !== null && x !== void 0 ? x : 0) <= 0 && scrollX <= 0 ? activeCellSelectionBorderWidth : 0;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n var wrapperStyle = x != null && y != null && w != null && h != null ? {\n position: 'absolute',\n left: gridX + x + leftBorderOffset,\n top: gridY + y,\n width: w - leftBorderOffset,\n height: h\n } : {\n opacity: 0\n };\n var modelColumn;\n var modelRow;\n try {\n modelColumn = this.getModelColumn(column);\n modelRow = this.getModelRow(row);\n } catch (e) {\n return null;\n }\n var inputStyle = modelColumn != null && modelRow != null ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow)\n } : undefined;\n var isValid = modelColumn != null && modelRow != null ? model.isValidForCell(modelColumn, modelRow, value) : false;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(CellInputField, {\n selectionRange: selectionRange,\n className: classNames({\n error: !isValid\n }),\n onCancel: this.handleEditCellCancel,\n onChange: this.handleEditCellChange,\n onDone: this.handleEditCellCommit,\n isQuickEdit: isQuickEdit,\n style: inputStyle,\n value: value\n }, \"\".concat(column, \",\").concat(row))\n });\n }\n\n /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges\n } = this.state;\n var {\n model,\n stateOverride\n } = this.props;\n var {\n metrics\n } = this;\n var context = this.canvasContext;\n var theme = this.getTheme();\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n assertNotNull(metrics);\n this.renderState = _objectSpread({\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow\n }, stateOverride);\n return this.renderState;\n }\n render() {\n var {\n children\n } = this.props;\n var {\n cursor\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"grid-wrapper\",\n ref: this.canvasWrapper,\n children: [/*#__PURE__*/_jsx(\"canvas\", {\n className: classNames('grid-canvas', Grid.getCursorClassName(cursor)),\n ref: canvas => {\n this.canvas = canvas;\n },\n onClick: this.handleClick,\n onContextMenu: this.handleContextMenu,\n onDoubleClick: this.handleDoubleClick,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n tabIndex: 0,\n children: \"Your browser does not support HTML canvas. Update your browser?\"\n }), this.renderInputField(), children]\n });\n }\n}\n_defineProperty(Grid, \"contextType\", ThemeContext);\n_defineProperty(Grid, \"defaultProps\", {\n canvasOptions: {\n alpha: false\n },\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY,\n mouseHandlers: EMPTY_ARRAY,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n onError: () => undefined,\n onSelectionChanged: () => undefined,\n onMovedColumnsChanged: moveOperations => undefined,\n onMoveColumnComplete: () => undefined,\n onMovedRowsChanged: () => undefined,\n onMoveRowComplete: () => undefined,\n onViewChanged: metrics => undefined,\n onTokenClicked: token => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {},\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false\n }\n});\n// use same constant as chrome source for windows\n// https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n_defineProperty(Grid, \"pixelsPerLine\", 100 / 3);\n_defineProperty(Grid, \"dragTimeout\", 1000);\n_defineProperty(Grid, \"getTheme\", memoize((contextTheme, userTheme) => _objectSpread(_objectSpread(_objectSpread({}, GridTheme), contextTheme), userTheme)));\nexport default Grid;\n//# sourceMappingURL=Grid.js.map","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 react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button, Select } from '@deephaven/components';\nimport { getLabelForBooleanFilter, getLabelForDateFilter, getLabelForNumberFilter, getLabelForTextFilter } from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport \"./AdvancedFilterCreatorFilterItem.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorFilterItem');\nexport class AdvancedFilterCreatorFilterItem extends PureComponent {\n static getLabelForFilter(columnType, filterType) {\n try {\n if (TableUtils.isNumberType(columnType) || TableUtils.isCharType(columnType)) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(\"Unrecognized column type: \".concat(columnType));\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"typeDropdown\", void 0);\n _defineProperty(this, \"getCachedIsValid\", memoizeOne((column, operation, value, timeZone, tableUtils) => {\n try {\n // We don't want to show an error for an empty value\n return !value || tableUtils.makeAdvancedValueFilter(column, operation, value, timeZone) != null;\n } catch (e) {\n return false;\n }\n }));\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n var {\n value: _value = '',\n filterTypes,\n selectedType = filterTypes[0]\n } = props;\n this.state = {\n selectedType,\n value: _value\n };\n }\n componentDidMount() {\n var _this$typeDropdown;\n (_this$typeDropdown = this.typeDropdown) === null || _this$typeDropdown === void 0 || _this$typeDropdown.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n value,\n selectedType\n } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({\n selectedType\n });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({\n value\n });\n }\n }\n handleTypeChange(eventTargetValue) {\n var selectedType = eventTargetValue;\n log.debug2('typeChange', selectedType);\n this.setState({\n selectedType\n });\n var {\n onChange\n } = this.props;\n var {\n value\n } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n handleValueChange(event) {\n log.debug2('valueChange');\n var {\n value\n } = event.target;\n this.setState({\n value\n });\n var {\n onChange\n } = this.props;\n var {\n selectedType\n } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n handleDelete() {\n log.debug('delete');\n var {\n onDelete\n } = this.props;\n onDelete();\n }\n render() {\n var {\n column,\n filterTypes,\n formatter,\n tableUtils\n } = this.props;\n var {\n selectedType,\n value\n } = this.state;\n var showValueInput = !TableUtils.isBooleanType(column.type);\n var typeOptionElements = [];\n var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone, tableUtils);\n for (var i = 0; i < filterTypes.length; i += 1) {\n var type = filterTypes[i];\n var label = AdvancedFilterCreatorFilterItem.getLabelForFilter(column.type, type);\n var element = /*#__PURE__*/_jsx(\"option\", {\n value: type,\n children: label\n }, type);\n typeOptionElements.push(element);\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-creator-filter-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"form-control\",\n value: selectedType,\n onChange: this.handleTypeChange,\n ref: typeDropdown => {\n this.typeDropdown = typeDropdown;\n },\n children: typeOptionElements\n })\n }), showValueInput && /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-group\",\n children: /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n error: !isValid\n }),\n placeholder: \"Enter value\",\n value: value,\n onChange: this.handleValueChange\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col-1 px-0\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"w-100 h-100 p-0 m-0\",\n onClick: this.handleDelete,\n icon: vsTrash,\n tooltip: \"Remove Filter\"\n })\n })]\n })\n });\n }\n}\nexport default AdvancedFilterCreatorFilterItem;\n//# sourceMappingURL=AdvancedFilterCreatorFilterItem.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 react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { LoadingSpinner, SelectValueList, FadeTransition } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorSelectValueList');\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList extends PureComponent {\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(value, values) {\n for (var i = 0; i < values.length; i += 1) {\n var v = values[i];\n if (v === value || v != null && v.valueOf != null && value != null && value.valueOf != null && v.valueOf() === value.valueOf()) {\n return i;\n }\n }\n return -1;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"list\", void 0);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n var {\n selectedValues,\n dh\n } = this.props;\n this.dh = dh;\n this.list = null;\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true\n };\n }\n componentDidMount() {\n var {\n table\n } = this.props;\n if (table) this.startListening(table);\n }\n componentDidUpdate(prevProps) {\n var {\n filters,\n invertSelection,\n selectedValues,\n table\n } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n selectedValues: []\n }, this.handleSelectionUpdate);\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n }, this.handleSelectionUpdate);\n }\n if (prevProps.filters !== filters) {\n table === null || table === void 0 || table.applyFilter(filters);\n this.resetViewport();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.props;\n if (table) this.stopListening(table);\n }\n handleSelect(itemIndex, value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n selectedValues = [...selectedValues];\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n var isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n var {\n offset\n } = this.state;\n var {\n items\n } = this.state;\n items = [...items];\n var visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n this.setState({\n items,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleViewportChange(top, bottom) {\n this.updateViewport(top, bottom);\n }\n handleSelectionUpdate() {\n this.updateItemSelection();\n }\n handleTableUpdate(event) {\n var {\n table,\n formatter\n } = this.props;\n if (!table) return;\n var data = event.detail;\n var {\n offset\n } = data;\n var items = [];\n var column = table.columns[0];\n for (var r = 0; r < data.rows.length; r += 1) {\n var row = data.rows[r];\n var value = row.get(column);\n var displayValue = void 0;\n if (value == null) {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"null\"\n });\n } else if (value === '') {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"empty\"\n });\n } else {\n displayValue = formatter.getFormattedString(value, column.type, column.name);\n }\n var isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected\n });\n }\n log.debug2('Received table update:', offset, items.length);\n var itemCount = table.size;\n this.setState({\n itemCount,\n items,\n offset,\n isLoading: false\n });\n }\n isValueSelected(value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n startListening(table) {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n stopListening(table) {\n table.removeEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n resetViewport() {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n updateItemSelection() {\n var {\n items\n } = this.state;\n items = [...items];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n value\n } = item;\n item.isSelected = this.isValueSelected(value);\n }\n this.setState({\n items\n });\n }\n updateViewport(top, bottom) {\n var isLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n if (isLoading) {\n this.setState({\n isLoading: true\n });\n }\n var viewportSize = bottom - top + 1;\n var topRow = Math.max(0, top - viewportSize * 3);\n var bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n render() {\n var {\n offset,\n isLoading,\n items,\n itemCount\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"select-value-list-wrapper\",\n children: [/*#__PURE__*/_jsx(SelectValueList, {\n itemCount: itemCount,\n items: items,\n offset: offset,\n onSelect: this.handleSelect,\n onViewportChange: this.handleViewportChange,\n ref: list => {\n this.list = list;\n }\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isLoading,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"loading-list\",\n children: /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-large\"\n })\n })\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValueList, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined\n});\nexport default AdvancedFilterCreatorSelectValueList;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValueList.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 react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, FadeTransition } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from \"./AdvancedFilterCreatorSelectValueList.js\";\nimport \"./AdvancedFilterCreatorSelectValue.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nclass AdvancedFilterCreatorSelectValue extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchTablePromise\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"updateFilterTimer\", void 0);\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n var {\n dh,\n invertSelection,\n selectedValues\n } = props;\n this.tableUtils = new TableUtils(dh);\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: ''\n };\n }\n componentDidMount() {\n this.initSearchTable();\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n invertSelection\n });\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n });\n }\n var {\n table: searchTable,\n searchText\n } = this.state;\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n this.stopUpdateFilterTimer();\n }\n getColumnName() {\n var {\n table\n } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n getDisplayedValuesCount() {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.state;\n if (table == null) {\n return null;\n }\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n getDisplayedValueText() {\n var count = this.getDisplayedValuesCount();\n var {\n table\n } = this.state;\n var {\n formatter\n } = this.props;\n if (count != null && table != null) {\n var formattedCount = formatter.getFormattedString(count, 'long');\n var formattedTableSize = formatter.getFormattedString(table.totalSize, 'long');\n var prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return \"\".concat(prefix).concat(formattedCount, \" of \").concat(formattedTableSize);\n }\n return null;\n }\n initSearchTable() {\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n var searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({\n table: searchTable\n });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n handleListChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleSearchChange(event) {\n var searchText = event.target.value;\n this.setState({\n searchText\n });\n }\n handleSelectAllClick() {\n this.resetSelection(true);\n }\n handleClearAllClick() {\n this.resetSelection(false);\n }\n handleUpdateFilterTimeout() {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n resetSelection(invertSelection) {\n var selectedValues = [];\n this.setState({\n invertSelection,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n startUpdateFilterTimer() {\n this.stopUpdateFilterTimer();\n this.updateFilterTimer = setTimeout(this.handleUpdateFilterTimeout, AdvancedFilterCreatorSelectValue.searchDebounceTime);\n }\n stopUpdateFilterTimer() {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n updateTableFilter() {\n var {\n table,\n searchText\n } = this.state;\n var {\n timeZone\n } = this.props;\n var {\n tableUtils\n } = this;\n var column = table === null || table === void 0 ? void 0 : table.columns[0];\n var filters = [];\n if (column == null) {\n return;\n }\n var error;\n if (searchText.length > 0) {\n var filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = tableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = tableUtils.makeQuickFilter(column, \"~\".concat(searchText), timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = tableUtils.makeQuickFilter(column, \">=\".concat(searchText), timeZone);\n }\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n this.setState({\n filters,\n error\n });\n }\n render() {\n var {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table\n } = this.state;\n var {\n dh,\n formatter,\n showSearch\n } = this.props;\n var columnName = this.getColumnName();\n var displayedValuesText = this.getDisplayedValueText();\n var placeholderText = columnName ? \"Find \".concat(columnName, \"...\") : '';\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-value\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: showSearch ? 'form-group' : '',\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: \"advanced-filter-creator-select-value-input\",\n children: \"Select Values\"\n }), showSearch && /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n 'is-invalid': error != null\n }),\n id: \"advanced-filter-creator-select-value-input\",\n placeholder: placeholderText,\n value: searchText,\n onChange: this.handleSearchChange\n })]\n }), /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValueList, {\n dh: dh,\n table: table,\n filters: filters,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n onChange: this.handleListChange\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-meta-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSelectAllClick,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleClearAllClick,\n children: \"Clear\"\n })]\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: displayedValuesText != null,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"row-count-info\",\n children: displayedValuesText\n })\n })]\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValue, \"searchDebounceTime\", 250);\n_defineProperty(AdvancedFilterCreatorSelectValue, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined,\n showSearch: true\n});\nexport default AdvancedFilterCreatorSelectValue;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValue.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-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport { Operator as FilterOperator, assertOperatorValue as assertFilterOperatorValue } from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport AdvancedFilterCreatorFilterItem from \"./AdvancedFilterCreatorFilterItem.js\";\nimport AdvancedFilterCreatorSelectValue from \"./AdvancedFilterCreatorSelectValue.js\";\nimport \"./AdvancedFilterCreator.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreator');\nclass AdvancedFilterCreator extends PureComponent {\n static makeFilterItem() {\n return {\n key: nanoid()\n };\n }\n constructor(props) {\n var _options$filterItems$, _options$filterItems;\n super(props);\n _defineProperty(this, \"focusTrapContainer\", void 0);\n _defineProperty(this, \"debounceTimeout\", void 0);\n _defineProperty(this, \"valuesTablePromise\", void 0);\n _defineProperty(this, \"getFilterTypes\", memoize(columnType => TableUtils.getFilterTypes(columnType)));\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n this.focusTrapContainer = /*#__PURE__*/React.createRef();\n var {\n model,\n column,\n options\n } = props;\n var {\n filterOperators,\n invertSelection,\n selectedValues\n } = options;\n\n // can be null or an empty array\n var filterItems = (_options$filterItems$ = (_options$filterItems = options.filterItems) === null || _options$filterItems === void 0 ? void 0 : _options$filterItems.map(_ref => {\n var {\n selectedType,\n value\n } = _ref;\n return {\n selectedType,\n value,\n key: nanoid()\n };\n })) !== null && _options$filterItems$ !== void 0 ? _options$filterItems$ : [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var isSortable = model.isColumnSortable(columnIndex);\n this.state = {\n // Filter items\n filterItems,\n // And/Or between the filter items\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTableError: null,\n valuesTable: undefined,\n isSortable\n };\n }\n componentDidMount() {\n this.initValuesTable();\n }\n componentWillUnmount() {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n getFilterChangeHandler(index) {\n return this.handleFilterChange.bind(this, index);\n }\n getFilterDeleteHandler(index) {\n return this.handleFilterDelete.bind(this, index);\n }\n initValuesTable() {\n var {\n model,\n column\n } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(model.valuesTable(column));\n this.valuesTablePromise.then(valuesTable => {\n var _valuesTable$columns$;\n if ((_valuesTable$columns$ = valuesTable.columns[0].isSortable) !== null && _valuesTable$columns$ !== void 0 ? _valuesTable$columns$ : true) {\n var sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n }\n this.setState({\n valuesTable\n });\n }).catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error('Unable to open values table', error);\n this.setState({\n valuesTableError: error\n });\n });\n }\n handleFocusTrapEnd() {\n var _this$focusTrapContai;\n ((_this$focusTrapContai = this.focusTrapContainer) === null || _this$focusTrapContai === void 0 || (_this$focusTrapContai = _this$focusTrapContai.current) === null || _this$focusTrapContai === void 0 ? void 0 : _this$focusTrapContai.querySelector('button,select,input,textarea')).focus();\n }\n handleFocusTrapStart() {\n var _this$focusTrapContai2;\n var inputs = (_this$focusTrapContai2 = this.focusTrapContainer) === null || _this$focusTrapContai2 === void 0 || (_this$focusTrapContai2 = _this$focusTrapContai2.current) === null || _this$focusTrapContai2 === void 0 ? void 0 : _this$focusTrapContai2.querySelectorAll('button,select,input,textarea');\n if (inputs && inputs.length > 0) {\n var element = inputs[inputs.length - 1];\n element.focus();\n }\n }\n handleAddAnd() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleAddOr() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleChangeFilterOperator(index, operator) {\n var {\n filterOperators\n } = this.state;\n filterOperators = [...filterOperators];\n assertFilterOperatorValue(operator);\n filterOperators[index] = operator;\n this.setState({\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleFilterChange(filterIndex, selectedType, value) {\n var {\n filterItems\n } = this.state;\n filterItems = [...filterItems];\n var {\n key\n } = filterItems[filterIndex];\n filterItems[filterIndex] = {\n key,\n selectedType,\n value\n };\n this.setState({\n filterItems\n });\n this.startUpdateTimer();\n }\n handleFilterDelete(filterIndex) {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n this.setState({\n filterItems,\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleSelectValueChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n this.startUpdateTimer();\n }\n handleReset() {\n log.debug('Resetting Advanced Filter');\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true\n });\n this.startUpdateTimer();\n }\n handleSortDown(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n handleSortUp(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n handleSubmit(event) {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n event.preventDefault();\n }\n handleDone(event) {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n var {\n onDone\n } = this.props;\n onDone();\n event.preventDefault();\n }\n handleUpdateTimeout() {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter() {\n var {\n filterItems\n } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n var filterItem = filterItems[filterItems.length - 1];\n var {\n selectedType,\n value\n } = filterItem;\n return selectedType != null && selectedType.length > 0 && value != null && value.length > 0;\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction) {\n var addToExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n column,\n onSortChange\n } = this.props;\n var {\n isSortable\n } = this.state;\n if (isSortable) {\n onSortChange(column, direction, addToExisting);\n }\n }\n startUpdateTimer() {\n this.stopUpdateTimer();\n this.debounceTimeout = setTimeout(this.handleUpdateTimeout, AdvancedFilterCreator.debounceFilterUpdate);\n }\n stopUpdateTimer() {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n sendUpdate() {\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues\n } = this.state;\n var {\n column,\n onFilterChange,\n model,\n tableUtils\n } = this.props;\n var {\n formatter\n } = model;\n var items = filterItems.filter(_ref2 => {\n var {\n selectedType,\n value\n } = _ref2;\n return selectedType != null && value != null && value !== '';\n });\n var operators = filterOperators.filter((operator, i) => operator != null && filterItems[i].selectedType != null && filterItems[i].value != null && filterItems[i].value !== '').slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n var options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues\n };\n var filter = tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n onFilterChange(column, filter, options);\n }\n render() {\n var _this = this;\n var {\n column,\n model,\n sortDirection,\n formatter,\n tableUtils\n } = this.props;\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n isSortable\n } = this.state;\n var {\n dh,\n isValuesTableAvailable\n } = model;\n var isBoolean = TableUtils.isBooleanType(column.type);\n var isDateType = TableUtils.isDateType(column.type);\n var filterTypes = this.getFilterTypes(column.type);\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n var _loop = function _loop(i) {\n var filterItem = filterItems[i];\n var {\n key,\n selectedType,\n value\n } = filterItem;\n var element = /*#__PURE__*/_jsx(AdvancedFilterCreatorFilterItem, {\n column: column,\n filterTypes: filterTypes,\n onChange: _this.getFilterChangeHandler(i),\n onDelete: _this.getFilterDeleteHandler(i),\n selectedType: selectedType,\n value: value,\n formatter: formatter,\n tableUtils: tableUtils\n }, key);\n filterItemElements.push(element);\n if (i < filterOperators.length) {\n var filterOperator = filterOperators[i];\n var isAndFilter = filterOperator === FilterOperator.and;\n var operatorElement = /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end advanced-filter-creator-filter-operator\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.and),\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: !isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.or),\n children: \"OR\"\n })]\n }, \"filterOperator\".concat(key));\n filterItemElements.push(operatorElement);\n }\n };\n for (var i = 0; i < filterItems.length; i += 1) {\n _loop(i);\n }\n }\n var showAddFilterItem = this.shouldShowAddFilter();\n var addFilterItem = /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem\n }),\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"text-muted\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhNewCircleLargeFilled\n })\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddAnd,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with AND\",\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddOr,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with OR\",\n children: \"OR\"\n })]\n }, \"addFilterItem\");\n filterItemElements.push(addFilterItem);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapStart\n }), /*#__PURE__*/_jsxs(\"form\", {\n onSubmit: this.handleSubmit,\n ref: this.focusTrapContainer,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"title-bar\",\n children: [/*#__PURE__*/_jsx(\"h6\", {\n className: \"advanced-filter-title\",\n children: \"Advanced Filters\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-menu-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending\n }),\n onClick: this.handleSortDown,\n icon: dhSortAmountDown,\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Descending\") : 'Not sortable',\n disabled: !isSortable\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending\n }),\n onClick: this.handleSortUp,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortAmountDown,\n rotation: 180\n }),\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Ascending\") : 'Not sortable',\n disabled: !isSortable\n })]\n })]\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-column-name\",\n children: [column.name, \"\\xA0\", /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-type\",\n children: [\"(\", columnType, \")\"]\n })]\n }), filterItemElements, isValuesTableAvailable && valuesTableError == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [!isBoolean && /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group\",\n children: /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValue, {\n dh: dh,\n table: valuesTable,\n onChange: this.handleSelectValueChange,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n showSearch: !isDateType,\n timeZone: formatter.timeZone\n })\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n className: \"mr-2\",\n onClick: this.handleReset,\n children: \"Reset\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: this.handleDone,\n children: \"Done\"\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapEnd\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreator, \"debounceFilterUpdate\", 250);\n_defineProperty(AdvancedFilterCreator, \"defaultProps\", {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: []\n },\n sortDirection: null\n});\nexport default AdvancedFilterCreator;\n//# sourceMappingURL=AdvancedFilterCreator.js.map","import { getConditionDBString, getStyleDBString } from \"./ConditionalFormattingUtils.js\"; // Conditional formatting API utils in a separate file\n// to make ConditionalFormattingUtils.ts easier to test.\n// https://github.com/facebook/jest/issues/936#issuecomment-545080082\nexport function makeTernaryFormatRule(config, prevRule) {\n var styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n var conditionDBString = getConditionDBString(config);\n return \"\".concat(conditionDBString, \" ? \").concat(styleDBString, \" : \").concat(prevRule);\n}\nexport function makeRowFormatColumn(dh, rule) {\n return dh.Column.formatRowColor(rule);\n}\nexport function makeColumnFormatColumn(col, rule) {\n return col.formatColor(rule);\n}\n//# sourceMappingURL=ConditionalFormattingAPIUtils.js.map","import Log from '@deephaven/log';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport { makeColumnFormatColumn, makeRowFormatColumn, makeTernaryFormatRule } from \"./ConditionalFormattingAPIUtils.js\";\nvar log = Log.module('ConditionalFormattingUtils');\nexport var FormatterType = /*#__PURE__*/function (FormatterType) {\n FormatterType[\"CONDITIONAL\"] = \"conditional\";\n FormatterType[\"ROWS\"] = \"rows\";\n return FormatterType;\n}({});\nexport var NumberCondition = /*#__PURE__*/function (NumberCondition) {\n NumberCondition[\"IS_EQUAL\"] = \"is-equal\";\n NumberCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n NumberCondition[\"IS_BETWEEN\"] = \"is-between\";\n NumberCondition[\"GREATER_THAN\"] = \"greater-than\";\n NumberCondition[\"GREATER_THAN_OR_EQUAL\"] = \"greater-than-or-equal\";\n NumberCondition[\"LESS_THAN\"] = \"less-than\";\n NumberCondition[\"LESS_THAN_OR_EQUAL\"] = \"less-than-or-equal\";\n NumberCondition[\"IS_NULL\"] = \"is-null\";\n NumberCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return NumberCondition;\n}({});\nexport var StringCondition = /*#__PURE__*/function (StringCondition) {\n StringCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n StringCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n StringCondition[\"CONTAINS\"] = \"contains\";\n StringCondition[\"DOES_NOT_CONTAIN\"] = \"does-not-contain\";\n StringCondition[\"STARTS_WITH\"] = \"starts-with\";\n StringCondition[\"ENDS_WITH\"] = \"ends-with\";\n StringCondition[\"IS_NULL\"] = \"is-null\";\n StringCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return StringCondition;\n}({});\nexport var DateCondition = /*#__PURE__*/function (DateCondition) {\n DateCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n DateCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n DateCondition[\"IS_BEFORE\"] = \"is-before\";\n DateCondition[\"IS_BEFORE_OR_EQUAL\"] = \"is-before-or-equal\";\n DateCondition[\"IS_AFTER\"] = \"is-after\";\n DateCondition[\"IS_AFTER_OR_EQUAL\"] = \"is-after-or-equal\";\n DateCondition[\"IS_NULL\"] = \"is-null\";\n DateCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return DateCondition;\n}({});\nexport var BooleanCondition = /*#__PURE__*/function (BooleanCondition) {\n BooleanCondition[\"IS_TRUE\"] = \"is-true\";\n BooleanCondition[\"IS_FALSE\"] = \"is-false\";\n BooleanCondition[\"IS_NULL\"] = \"is-null\";\n BooleanCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return BooleanCondition;\n}({});\nexport var CharCondition = /*#__PURE__*/function (CharCondition) {\n CharCondition[\"IS_EQUAL\"] = \"is-equal\";\n CharCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n CharCondition[\"IS_NULL\"] = \"is-null\";\n CharCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return CharCondition;\n}({});\nexport var FormatStyleType = /*#__PURE__*/function (FormatStyleType) {\n FormatStyleType[\"NO_FORMATTING\"] = \"no-formatting\";\n FormatStyleType[\"POSITIVE\"] = \"positive\";\n FormatStyleType[\"NEGATIVE\"] = \"negative\";\n FormatStyleType[\"WARN\"] = \"warn\";\n FormatStyleType[\"NEUTRAL\"] = \"neutral\";\n FormatStyleType[\"ACCENT_1\"] = \"accent-1\";\n FormatStyleType[\"ACCENT_2\"] = \"accent-2\";\n FormatStyleType[\"CUSTOM\"] = \"custom\";\n return FormatStyleType;\n}({});\nexport function getLabelForStyleType(option) {\n switch (option) {\n case FormatStyleType.NO_FORMATTING:\n return 'No formatting';\n case FormatStyleType.POSITIVE:\n return 'Positive';\n case FormatStyleType.NEGATIVE:\n return 'Negative';\n case FormatStyleType.WARN:\n return 'Warn';\n case FormatStyleType.NEUTRAL:\n return 'Neutral';\n case FormatStyleType.ACCENT_1:\n return 'Accent 1';\n case FormatStyleType.ACCENT_2:\n return 'Accent 2';\n case FormatStyleType.CUSTOM:\n return 'Custom...';\n }\n}\nexport function getBackgroundForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#9fde6f';\n case FormatStyleType.NEGATIVE:\n return '#ff6087';\n case FormatStyleType.WARN:\n return '#f67f40';\n case FormatStyleType.NEUTRAL:\n return '#ffd95c';\n case FormatStyleType.ACCENT_1:\n return '#78dce8';\n case FormatStyleType.ACCENT_2:\n return '#ab9bf5';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.background;\n default:\n return undefined;\n }\n}\nexport function getColorForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#526a3f';\n case FormatStyleType.NEGATIVE:\n return '#802f44';\n case FormatStyleType.WARN:\n return '#663318';\n case FormatStyleType.NEUTRAL:\n return '#63562b';\n case FormatStyleType.ACCENT_1:\n return '#3f6469';\n case FormatStyleType.ACCENT_2:\n return '#554d72';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.color;\n default:\n return undefined;\n }\n}\nexport function getStyleDBString(config) {\n var color = getColorForStyleConfig(config.style);\n var bg = getBackgroundForStyleConfig(config.style);\n if (color === undefined || bg === undefined) {\n return undefined;\n }\n return \"bgfg(`\".concat(bg, \"`, `\").concat(color, \"`)\");\n}\nfunction getNumberConditionText(config) {\n var {\n column,\n value,\n start,\n end\n } = config;\n return getTextForNumberCondition(column.name, config.condition, value, start, end);\n}\nfunction getStringConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForStringCondition(column.name, config.condition, value);\n}\nfunction getDateConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForDateCondition(column.name, config.condition, value);\n}\nfunction getBooleanConditionText(config) {\n var {\n column\n } = config;\n return getTextForBooleanCondition(column.name, config.condition);\n}\nfunction getCharConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForCharCondition(column.name, config.condition, value);\n}\nexport function getConditionDBString(config) {\n var {\n column\n } = config;\n if (TableUtils.isNumberType(column.type)) {\n return getNumberConditionText(config);\n }\n if (TableUtils.isCharType(column.type)) {\n return getCharConditionText(config);\n }\n if (TableUtils.isStringType(column.type)) {\n return getStringConditionText(config);\n }\n if (TableUtils.isDateType(column.type)) {\n return getDateConditionText(config);\n }\n if (TableUtils.isBooleanType(column.type)) {\n return getBooleanConditionText(config);\n }\n throw new Error('Invalid column type');\n}\nexport function getLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return 'is equal to';\n case NumberCondition.IS_NOT_EQUAL:\n return 'is not equal to';\n case NumberCondition.IS_BETWEEN:\n return 'is between';\n case NumberCondition.GREATER_THAN:\n return 'greater than';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return 'greater than or equal to';\n case NumberCondition.LESS_THAN:\n return 'less than';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return 'less than or equal to';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return 'is exactly';\n case StringCondition.IS_NOT_EXACTLY:\n return 'is not exactly';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return 'is';\n case DateCondition.IS_NOT_EXACTLY:\n return 'is not';\n case DateCondition.IS_BEFORE:\n return 'is before';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return 'is before or equal';\n case DateCondition.IS_AFTER:\n return 'is after';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return 'is after or equal';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return 'is';\n case CharCondition.IS_NOT_EQUAL:\n return 'is not';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getDefaultConditionForType(columnType) {\n if (TableUtils.isNumberType(columnType)) {\n return NumberCondition.IS_EQUAL;\n }\n if (TableUtils.isCharType(columnType)) {\n return CharCondition.IS_EQUAL;\n }\n if (TableUtils.isStringType(columnType)) {\n return StringCondition.IS_EXACTLY;\n }\n if (TableUtils.isDateType(columnType)) {\n return DateCondition.IS_EXACTLY;\n }\n if (TableUtils.isBooleanType(columnType)) {\n return BooleanCondition.IS_TRUE;\n }\n throw new Error('Invalid column type');\n}\nexport function getDefaultValueForType(columnType) {\n if (TableUtils.isCharType(columnType)) {\n return '';\n }\n if (TableUtils.isStringType(columnType)) {\n return '';\n }\n return undefined;\n}\nexport function getConditionConfig(config) {\n var {\n condition,\n value,\n start,\n end\n } = config;\n return {\n condition,\n value,\n start,\n end\n };\n}\nexport function getDefaultConditionConfigForType(type) {\n return {\n condition: getDefaultConditionForType(type),\n value: getDefaultValueForType(type),\n start: undefined,\n end: undefined\n };\n}\nexport function getDefaultStyleConfig() {\n return {\n type: FormatStyleType.NO_FORMATTING\n };\n}\nfunction getShortLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return '==';\n case StringCondition.IS_NOT_EXACTLY:\n return '!=';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return '==';\n case DateCondition.IS_NOT_EXACTLY:\n return '!=';\n case DateCondition.IS_BEFORE:\n return '<';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return '<=';\n case DateCondition.IS_AFTER:\n return '>';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return '>=';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return '==';\n case CharCondition.IS_NOT_EQUAL:\n return '!=';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getShortLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return '==';\n case NumberCondition.IS_NOT_EQUAL:\n return '!=';\n case NumberCondition.IS_BETWEEN:\n return '==';\n case NumberCondition.GREATER_THAN:\n return '>';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return '>=';\n case NumberCondition.LESS_THAN:\n return '<';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return '<=';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getTextForNumberCondition(columnName, condition, value, start, end) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == \").concat(value);\n case NumberCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != \").concat(value);\n case NumberCondition.IS_BETWEEN:\n return \"\".concat(columnName, \" > \").concat(start, \" && \").concat(columnName, \" < \").concat(end);\n case NumberCondition.GREATER_THAN:\n return \"\".concat(columnName, \" > \").concat(value);\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" >= \").concat(value);\n case NumberCondition.LESS_THAN:\n return \"\".concat(columnName, \" < \").concat(value);\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" <= \").concat(value);\n case NumberCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case NumberCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForStringCondition(columnName, condition, value) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == \\\"\").concat(value, \"\\\"\");\n case StringCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != \\\"\").concat(value, \"\\\"\");\n case StringCondition.CONTAINS:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.DOES_NOT_CONTAIN:\n return \"\".concat(columnName, \" != null && !\").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.STARTS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".startsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.ENDS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".endsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case StringCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForDateCondition(columnName, condition, value) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE:\n return \"\".concat(columnName, \" < convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return \"\".concat(columnName, \" <= convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_AFTER:\n return \"\".concat(columnName, \" > convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_AFTER_OR_EQUAL:\n return \"\".concat(columnName, \" >= convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case DateCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForBooleanCondition(columnName, condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return \"\".concat(columnName, \" == true\");\n case BooleanCondition.IS_FALSE:\n return \"\".concat(columnName, \" == false\");\n case BooleanCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case BooleanCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForCharCondition(columnName, condition, value) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == '\").concat(value, \"'\");\n case CharCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != '\").concat(value, \"'\");\n case CharCondition.IS_NULL:\n return \"isNull(\".concat(columnName, \")\");\n case CharCondition.IS_NOT_NULL:\n return \"!isNull(\".concat(columnName, \")\");\n }\n}\nexport function getShortLabelForConditionType(columnType, condition) {\n if (TableUtils.isNumberType(columnType)) {\n return getShortLabelForNumberCondition(condition);\n }\n if (TableUtils.isCharType(columnType)) {\n return getShortLabelForCharCondition(condition);\n }\n if (TableUtils.isStringType(columnType)) {\n return getShortLabelForStringCondition(condition);\n }\n if (TableUtils.isDateType(columnType)) {\n return getShortLabelForDateCondition(condition);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getShortLabelForBooleanCondition(condition);\n }\n throw new Error('Invalid column type');\n}\n\n/**\n * Get format columns array for the given columns and formatting rules\n * @param columns Available columns\n * @param rules Formatting rules to build the format columns from\n * @returns Array of format columns\n */\nexport function getFormatColumns(dh, columns, rules) {\n if (rules === undefined) {\n log.debug(\"no rules passed.\");\n return [];\n }\n var result = [];\n // There can be only one row format custom column\n // and multiple column format custom columns (one per column)\n var rowFormatConfig;\n var columnFormatConfigMap = new Map();\n rules.forEach(_ref => {\n var _ref3;\n var {\n config,\n type: formatterType\n } = _ref;\n var {\n column\n } = config;\n // Check both name and type because the type can change\n var col = columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === column.name && type === column.type;\n });\n if (col === undefined) {\n log.debug(\"Column \".concat(column.name, \":\").concat(column.type, \" not found. Ignoring format rule.\"), config);\n return;\n }\n // Stack ternary format conditions by column\n var [prevRule, prevFormatColumn] = (_ref3 = formatterType === FormatterType.CONDITIONAL ? columnFormatConfigMap.get(col.name) : rowFormatConfig) !== null && _ref3 !== void 0 ? _ref3 : ['null', undefined];\n var rule = makeTernaryFormatRule(config, prevRule);\n if (rule === undefined) {\n log.debug(\"Ignoring format rule.\", config);\n return;\n }\n // Replace existing formatColumn with the new stacked format\n var index = prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);\n if (index > -1) {\n result.splice(index, 1);\n }\n var formatColumn = formatterType === FormatterType.CONDITIONAL ? makeColumnFormatColumn(col, rule) : makeRowFormatColumn(dh, rule);\n result.push(formatColumn);\n if (formatterType === FormatterType.CONDITIONAL) {\n columnFormatConfigMap.set(col.name, [rule, formatColumn]);\n } else {\n rowFormatConfig = [rule, formatColumn];\n }\n });\n return result;\n}\n\n/**\n * Validate that a given date condition + value pair is valid.\n * @param condition\n * @param value\n */\nexport function isDateConditionValid(dh, condition, value) {\n switch (condition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return true;\n default:\n {\n var [dateTimeString, ...rest] = (value !== null && value !== void 0 ? value : '').split(' ');\n // Reconstitute all tokens after the first ' ' in case the user included garbage data at the end\n // e.g. '2020-01-01 NY blah'\n var tzCode = rest.join(' ');\n try {\n DateUtils.parseDateTimeString(dateTimeString);\n } catch (e) {\n log.debug('Invalid datetime string', dateTimeString);\n return false;\n }\n try {\n dh.i18n.TimeZone.getTimeZone(tzCode);\n } catch (e) {\n log.debug('Invalid timezone string', tzCode);\n return false;\n }\n return true;\n }\n }\n}\nexport function isSupportedColumn(_ref4) {\n var {\n type\n } = _ref4;\n return TableUtils.isNumberType(type) || TableUtils.isCharType(type) || TableUtils.isStringType(type) || TableUtils.isDateType(type) || TableUtils.isBooleanType(type);\n}\n//# sourceMappingURL=ConditionalFormattingUtils.js.map","import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport \"./IrisGridBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function IrisGridBottomBar(_ref) {\n var {\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n var nodeRef = useRef(null);\n return /*#__PURE__*/_jsx(CSSTransition, {\n in: isShown,\n timeout: ThemeExport.transitionMs,\n classNames: animation,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n mountOnEnter: true,\n unmountOnExit: true,\n nodeRef: nodeRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: nodeRef,\n className: classNames('iris-grid-bottom-bar', className),\n role: \"presentation\",\n onClick: onClick,\n onKeyPress: onClick,\n children: children\n })\n });\n}\nexport default IrisGridBottomBar;\n//# sourceMappingURL=IrisGridBottomBar.js.map","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nvar MAX_NUMBER_ROWS_SHOWN = 5;\nexport function PendingDataBottomBar(_ref) {\n var {\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited: _onExited\n } = _ref;\n var [isSuccessShown, setIsSuccessShown] = useState(false);\n var [wasSuccessShown, setWasSuccessShown] = useState(false);\n var successTimeout = useRef();\n var prevIsSaving = usePrevious(isSaving);\n var errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return \"Key can't be empty (on pending row\".concat(pendingDataErrors.size > 1 ? 's' : '', \" \").concat(Array.from(pendingDataErrors.keys()).join(', ').trim(), \")\");\n }\n return \"Key can't be empty (on \".concat(pendingDataErrors.size, \" rows)\");\n }, [error, pendingDataErrors]);\n useEffect(function showSuccessMessage() {\n if (prevIsSaving != null && prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n }, [errorMessage, isSaving, prevIsSaving]);\n useEffect(function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n }, [pendingDataMap]);\n useEffect(function cleanupTimeout() {\n return () => successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n var pendingRowCount = pendingDataMap.size;\n var commitIcon;\n if (isSaving) {\n commitIcon = /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n });\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n className: \"pending-data-bottom-bar\",\n isShown: pendingRowCount > 0 || isSuccessShown || errorMessage != null,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: () => {\n setWasSuccessShown(false);\n if (_onExited) {\n _onExited();\n }\n },\n children: [errorMessage != null && errorMessage !== '' && /*#__PURE__*/_jsxs(\"div\", {\n className: \"error-message\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(errorMessage)\n })]\n }), (errorMessage == null || errorMessage === '') && /*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: pendingRowCount > 0 && /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(pendingRowCount, \" row\").concat(pendingRowCount > 1 ? 's' : '', \" pending\")\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [!isSaving && !wasSuccessShown && /*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: onDiscard,\n tooltip: discardTooltip,\n children: \"Discard\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: wasSuccessShown ? 'success' : 'primary',\n onClick: onSave,\n icon: commitIcon,\n disabled: isSaving || wasSuccessShown || errorMessage != null,\n tooltip: saveTooltip,\n children: [isSaving && \"Committing...\", !isSaving && wasSuccessShown && \"Success\", !isSaving && !wasSuccessShown && \"Commit\"]\n })]\n })]\n });\n}\nexport default PendingDataBottomBar;\n//# sourceMappingURL=PendingDataBottomBar.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 _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 React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, FadeTransition, LoadingSpinner } from '@deephaven/components';\nimport { GridRange, GridUtils } from '@deephaven/grid';\nimport { CanceledPromiseError, copyToClipboard, PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./IrisGridCopyHandler.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridCopyHandler');\nfunction isCopyRangesOperation(copyOperation) {\n return copyOperation.ranges != null;\n}\nfunction isCopyHeaderOperation(copyOperation) {\n return copyOperation.columnIndex != null;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component {\n static getStatusMessageText(copyState, rowCount) {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return \"Are you sure you want to copy \".concat(rowCount.toLocaleString(), \" rows to your clipboard?\");\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return \"Fetched \".concat(rowCount.toLocaleString(), \" rows!\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS:\n return \"Fetching \".concat(rowCount.toLocaleString(), \" rows for clipboard...\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS:\n return 'Fetching header for clipboard...';\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n static getCopyButtonText(buttonState) {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"textData\", void 0);\n _defineProperty(this, \"hideTimer\", void 0);\n _defineProperty(this, \"fetchPromise\", void 0);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0\n };\n }\n componentDidMount() {\n var {\n copyOperation\n } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n componentDidUpdate(prevProps) {\n var {\n copyOperation\n } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n componentWillUnmount() {\n this.stopCopy();\n }\n startCopy() {\n log.debug2('startCopy');\n this.stopCopy();\n var {\n copyOperation\n } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({\n isShown: false\n });\n return;\n }\n var {\n error\n } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error\n });\n this.startHideTimer();\n return;\n }\n this.setState({\n isShown: true,\n error: undefined\n });\n if (isCopyRangesOperation(copyOperation)) {\n var {\n ranges\n } = copyOperation;\n var rowCount = GridRange.rowCount(ranges);\n this.setState({\n rowCount\n });\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED\n });\n return;\n }\n }\n this.startFetch();\n }\n stopCopy() {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n handleBackgroundClick() {\n log.debug2('handleBackgroundClick');\n var {\n copyState\n } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({\n isShown: false\n });\n }\n }\n handleCancelClick() {\n log.debug2('handleCancelClick');\n this.stopFetch();\n this.setState({\n isShown: false\n });\n }\n handleCopyClick() {\n var _this = this;\n return _asyncToGenerator(function* () {\n log.debug2('handleCopyClick');\n if (_this.textData != null) {\n try {\n yield _this.copyText(_this.textData);\n _this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this.setState({\n error: 'Unable to copy. Verify your browser permissions.'\n });\n }\n } else {\n _this.startFetch();\n }\n })();\n }\n handleHideTimeout() {\n log.debug2('handleHideTimeout');\n this.stopHideTimer();\n this.setState({\n isShown: false\n });\n }\n copyText(text) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n log.debug2('copyText', text);\n _this2.textData = text;\n yield copyToClipboard(text);\n })();\n }\n showCopyDone() {\n this.setState({\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n this.startHideTimer();\n }\n startFetch() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n _this3.stopFetch();\n var {\n model,\n copyOperation\n } = _this3.props;\n if (isCopyHeaderOperation(copyOperation)) {\n var {\n columnIndex,\n columnDepth,\n movedColumns\n } = copyOperation;\n log.debug('startFetch copyHeader', columnIndex, columnDepth);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS\n });\n var modelIndex = GridUtils.getModelIndex(columnIndex, movedColumns);\n var copyText = model.textForColumnHeader(modelIndex, columnDepth);\n if (copyText === undefined) {\n _this3.fetchPromise = undefined;\n _this3.setState({\n error: 'Invalid column header selected.',\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n return;\n }\n _this3.fetchPromise = PromiseUtils.makeCancelable(copyText);\n } else {\n var {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns: _movedColumns,\n formatValues\n } = copyOperation;\n log.debug('startFetch copyRanges', ranges);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS\n });\n var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n var modelRanges = GridUtils.getModelRanges(ranges, _movedColumns);\n if (hiddenColumns.length > 0) {\n var subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);\n }\n\n // Remove the hidden columns from the snapshot\n var formatValue = formatValues != null && formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => \"\".concat(value);\n _this3.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));\n }\n try {\n var text = yield _this3.fetchPromise;\n _this3.fetchPromise = undefined;\n try {\n yield _this3.copyText(text);\n _this3.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED\n });\n }\n } catch (e) {\n if (e instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', e);\n _this3.fetchPromise = undefined;\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR\n });\n }\n }\n })();\n }\n stopFetch() {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n startHideTimer() {\n this.stopHideTimer();\n this.hideTimer = setTimeout(this.handleHideTimeout, IrisGridCopyHandler.HIDE_TIMEOUT);\n }\n stopHideTimer() {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n render() {\n var {\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = this.props;\n var {\n buttonState,\n copyState,\n isShown,\n rowCount,\n error\n } = this.state;\n var animation = copyState === IrisGridCopyHandler.COPY_STATES.DONE ? 'fade' : 'copy-slide-up';\n var copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n var statusMessageText = error !== null && error !== void 0 ? error : IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n var isButtonContainerVisible = copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n var isFetching = buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n var isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n animation: animation,\n isShown: isShown,\n className: classNames('iris-grid-copy-handler', {\n 'copy-done': isDone\n }),\n onClick: this.handleBackgroundClick,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: /*#__PURE__*/_jsx(\"span\", {\n children: statusMessageText\n })\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isButtonContainerVisible,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-outline-secondary btn-cancel\",\n onClick: this.handleCancelClick,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: isFetching ? 'tertiary' : 'primary',\n className: classNames('btn-copy', {\n 'btn-spinner': isFetching\n }),\n onClick: this.handleCopyClick,\n disabled: isFetching,\n children: [isFetching && /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), copyButtonText]\n })]\n })\n })]\n });\n }\n}\n_defineProperty(IrisGridCopyHandler, \"NO_PROMPT_THRESHOLD\", 10000);\n_defineProperty(IrisGridCopyHandler, \"HIDE_TIMEOUT\", 3000);\n/**\n * Different states for the current copy operation\n */\n_defineProperty(IrisGridCopyHandler, \"COPY_STATES\", {\n // No copy operation in progress\n IDLE: 'IDLE',\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n // Fetch is currently in progress for copy ranges operation\n FETCH_RANGES_IN_PROGRESS: 'FETCH_RANGES_IN_PROGRESS',\n // Fetch is currently in progress for copy header operation\n FETCH_HEADER_IN_PROGRESS: 'FETCH_HEADER_IN_PROGRESS',\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE'\n});\n_defineProperty(IrisGridCopyHandler, \"BUTTON_STATES\", {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY'\n});\n_defineProperty(IrisGridCopyHandler, \"defaultProps\", {\n copyOperation: null,\n onEntering: () => undefined,\n onEntered: () => undefined,\n onExiting: () => undefined,\n onExited: () => undefined\n});\nexport default IrisGridCopyHandler;\n//# sourceMappingURL=IrisGridCopyHandler.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 React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport \"./FilterInputField.css\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputField\", void 0);\n _defineProperty(this, \"initialValue\", void 0);\n _defineProperty(this, \"debouncedSendUpdate\", void 0);\n var {\n debounceMs\n } = props;\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.inputField = null;\n var {\n value\n } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value\n };\n }\n componentDidMount() {\n var _this$inputField;\n (_this$inputField = this.inputField) === null || _this$inputField === void 0 || _this$inputField.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n debounceMs\n } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n }\n }\n componentWillUnmount() {\n this.debouncedSendUpdate.cancel();\n }\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value) {\n this.initialValue = value;\n this.setState({\n value\n });\n }\n focus() {\n var _this$inputField2;\n (_this$inputField2 = this.inputField) === null || _this$inputField2 === void 0 || _this$inputField2.focus();\n }\n handleChange(event) {\n var {\n value\n } = event.target;\n this.setState({\n value,\n isChanged: true\n });\n this.debouncedSendUpdate(value);\n }\n handleCancel() {\n this.debouncedSendUpdate.cancel();\n var {\n initialValue\n } = this;\n var {\n isChanged\n } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n var {\n onDone\n } = this.props;\n onDone();\n }\n handleCommit() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.debouncedSendUpdate.flush();\n var {\n onDone\n } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n handleFocus() {\n var _this$inputField3;\n (_this$inputField3 = this.inputField) === null || _this$inputField3 === void 0 || _this$inputField3.select();\n }\n handleBlur(event) {\n var {\n relatedTarget\n } = event;\n // handleCommit results in a call that steals focus\n if (relatedTarget != null && relatedTarget.classList.contains('context-menu-container')) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (relatedTarget != null && relatedTarget.classList.contains('advanced-filter-button')) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n handleTab() {\n var backward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.debouncedSendUpdate.flush();\n var {\n onTab\n } = this.props;\n onTab(backward);\n }\n handleKeyDown(event) {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n handleContextMenu(event) {\n var {\n onContextMenu\n } = this.props;\n onContextMenu(event);\n }\n sendUpdate(value) {\n var {\n onChange\n } = this.props;\n onChange(value);\n }\n render() {\n var {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered\n } = this.props;\n var {\n value\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n style: style,\n className: \"iris-grid-input-autosized-wrapper\",\n \"data-value\": value // used by css based autosizer\n ,\n children: [/*#__PURE__*/_jsx(\"input\", {\n ref: inputField => {\n this.inputField = inputField;\n },\n className: classNames('iris-grid-input-field', className),\n type: \"text\",\n value: value,\n onBlur: this.handleBlur,\n onFocus: this.handleFocus,\n onChange: this.handleChange,\n onKeyDown: this.handleKeyDown,\n onContextMenu: this.handleContextMenu,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-button-container\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet\n }),\n onClick: onAdvancedFiltersTriggered,\n onContextMenu: this.handleContextMenu,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers \",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n })]\n });\n }\n}\n_defineProperty(FilterInputField, \"defaultProps\", {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: () => undefined,\n onChange: () => undefined,\n onDone: () => undefined,\n onTab: () => undefined,\n onContextMenu: () => undefined,\n debounceMs: 150\n});\nexport default FilterInputField;\n//# sourceMappingURL=FilterInputField.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 { KeyHandler } from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nclass CopyCellKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n onDown(event, grid) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n var gridPoint = grid.getGridPointFromXY(mouseX, mouseY);\n if (gridPoint.column != null && gridPoint.row != null) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n }\n return false;\n }\n onUp(event, grid) {\n if (this.cursor === this.irisGrid.props.copyCursor) {\n this.cursor = null;\n return true;\n }\n return false;\n }\n}\nexport default CopyCellKeyHandler;\n//# sourceMappingURL=CopyCellKeyHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { ContextActionUtils } from '@deephaven/components';\nimport { KeyHandler } from '@deephaven/grid';\nimport IrisGridUtils from \"../IrisGridUtils.js\";\nclass CopyKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n var {\n selectedRanges\n } = this.irisGrid.state;\n if (event.key === 'c' && ContextActionUtils.isModifierKeyDown(event)) {\n if (IrisGridUtils.isValidSnapshotRanges(selectedRanges)) {\n this.irisGrid.copyRanges(selectedRanges);\n } else {\n this.irisGrid.copyRanges(selectedRanges, false, false, 'Invalid copy ranges');\n }\n return true;\n }\n return false;\n }\n}\nexport default CopyKeyHandler;\n//# sourceMappingURL=CopyKeyHandler.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 { KeyHandler } from '@deephaven/grid';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ReverseKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.REVERSE.matchesEvent(event)) {\n if (!this.irisGrid.isReversible()) {\n return false;\n }\n var {\n reverse\n } = this.irisGrid.state;\n this.irisGrid.reverse(!reverse);\n return true;\n }\n return false;\n }\n}\nexport default ReverseKeyHandler;\n//# sourceMappingURL=ReverseKeyHandler.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 { KeyHandler } from '@deephaven/grid';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ClearFilterKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.CLEAR_FILTERS.matchesEvent(event)) {\n this.irisGrid.clearAllFilters();\n return true;\n }\n return false;\n }\n}\nexport default ClearFilterKeyHandler;\n//# sourceMappingURL=ClearFilterKeyHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nexport function ToastBottomBar(_ref) {\n var {\n children = null,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n var [isShown, setIsShown] = useState(false);\n var timeout = useRef();\n var prevChildren = usePrevious(children);\n var startTimer = useCallback(() => {\n setIsShown(true);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = setTimeout(() => {\n setIsShown(false);\n }, HIDE_TIMEOUT);\n }, [setIsShown, timeout]);\n useEffect(() => {\n if (prevChildren !== children && children != null) {\n startTimer();\n }\n }, [children, prevChildren, setIsShown, startTimer]);\n useEffect(() => () => timeout.current ? clearTimeout(timeout.current) : undefined, []);\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n className: \"toast-bottom-bar\",\n isShown: isShown,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: children\n });\n}\nexport default ToastBottomBar;\n//# sourceMappingURL=ToastBottomBar.js.map","/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport { useEffect, useMemo } from 'react';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport { useOnChange } from '@deephaven/react-hooks';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nimport { isIrisGridTreeTableModel } from \"./IrisGridTreeTableModel.js\";\nvar COLUMN_BUFFER_PAGES = 1;\n/**\n * React component to keep IrisGridModel in sync\n */\nfunction IrisGridModelUpdater(_ref) {\n var {\n model,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n columnAlignmentMap,\n reverse = false,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig,\n showExtraGroupColumn\n } = _ref;\n var {\n isTotalsAvailable,\n isRollupAvailable\n } = model;\n // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns\n useOnChange(() => {\n if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {\n model.showExtraGroupColumn = showExtraGroupColumn;\n }\n }, [model, showExtraGroupColumn]);\n var columns = useMemo(() => IrisGridUtils.getModelViewportColumns(model.columns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns, COLUMN_BUFFER_PAGES), [model.columns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns]);\n useOnChange(function updateFilter() {\n model.filter = filter;\n }, [model, filter]);\n useOnChange(function updateSorts() {\n var sortsForModel = [...sorts];\n if (reverse) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n }, [model, sorts, reverse]);\n useOnChange(function updateFormatter() {\n model.formatter = formatter;\n }, [model, formatter]);\n useOnChange(function updateColumnAlignmentMap() {\n model.columnAlignmentMap = columnAlignmentMap;\n }, [model, columnAlignmentMap]);\n useOnChange(function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n }, [model, customColumns]);\n useOnChange(function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n }, [model, formatColumns]);\n useOnChange(function updateViewport() {\n model.setViewport(top, bottom, columns);\n }, [model, top, bottom, columns]);\n useOnChange(function updateRollupCOnfig() {\n if (isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n }, [model, isRollupAvailable, rollupConfig]);\n useOnChange(function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n }, [model, selectDistinctColumns]);\n useOnChange(function updateTotalsConfig() {\n if (isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n }, [model, isTotalsAvailable, totalsConfig]);\n useOnChange(function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n }, [model, columnHeaderGroups]);\n useOnChange(function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n }, [model, partitionConfig]);\n // These setters are wrapped in useEffect instead of useOnChange because they emit an event\n // that potentially causes side effects, violating the rule that render should be a pure function.\n useEffect(function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n }, [model, frozenColumns]);\n useEffect(function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n }, [model, pendingRowCount]);\n useEffect(function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n }, [model, pendingDataMap]);\n return null;\n}\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\nexport default IrisGridModelUpdater;\n//# sourceMappingURL=IrisGridModelUpdater.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 React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, dhSortSlash, vsLock } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport \"./ColumnStatistics.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnStatistics');\nvar STATS_LABEL_OVERRIDES = {\n SIZE: 'Number of Rows'\n};\nclass ColumnStatistics extends Component {\n static getStatsLabel(operation) {\n var _STATS_LABEL_OVERRIDE;\n return (_STATS_LABEL_OVERRIDE = STATS_LABEL_OVERRIDES[operation]) !== null && _STATS_LABEL_OVERRIDE !== void 0 ? _STATS_LABEL_OVERRIDE : operation.split(' ').map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()).join(' ');\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"cancelablePromise\", void 0);\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n this.cancelablePromise = null;\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0\n };\n }\n componentDidMount() {\n this.maybeGenerateStatistics();\n }\n componentWillUnmount() {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n maybeGenerateStatistics() {\n var {\n column,\n model\n } = this.props;\n var numRows = model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount;\n this.setState({\n numRows\n });\n if (!model.isColumnStatisticsAvailable || column.isProxy === true) {\n this.setState({\n loading: false\n });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n handleGenerateStatistics() {\n this.setState({\n loading: true\n });\n var {\n column,\n model\n } = this.props;\n this.cancelablePromise = PromiseUtils.makeCancelable(model.columnStatistics(column));\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n handleStatistics(stats) {\n log.debug('Received statistics', stats);\n var {\n model,\n onStatistics\n } = this.props;\n var statistics = [];\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation)\n });\n });\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long'\n });\n });\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount\n });\n onStatistics();\n }\n handleError(error) {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null\n });\n }\n render() {\n var _column$displayName;\n var {\n column,\n model\n } = this.props;\n var {\n error,\n loading,\n statistics,\n numRows\n } = this.state;\n var showGenerateStatistics = !loading && error == null && statistics == null && model.isColumnStatisticsAvailable;\n var statisticElements = [];\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (var i = 0; i < statistics.length; i += 1) {\n var {\n operation,\n className,\n value,\n type\n } = statistics[i];\n var formattedValue = !type ? model.displayString(value, column.type, column.name) : model.displayString(value, type);\n var statisticElement = /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('column-statistic-operation', className),\n children: operation\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedValue\n })]\n }, operation);\n statisticElements.push(statisticElement);\n }\n }\n var rowCountLabel = isExpandableGridModel(model) && model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';\n var formattedRowCount = model.displayString(numRows, 'long');\n var columnIndex = model.getColumnIndexByName(column.name);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-title\",\n children: [(_column$displayName = column.displayName) !== null && _column$displayName !== void 0 ? _column$displayName : column.name, /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-statistics-type\",\n children: [\"\\xA0(\", columnType, \")\"]\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"column-statistics-copy\",\n tooltip: \"Copy column name\",\n copy: column.name\n })]\n }), description != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistics-description\",\n children: description\n }), columnIndex != null && !model.isColumnSortable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortSlash,\n className: \"mr-1\"\n }), \"Not sortable\"]\n }), columnIndex != null && !model.isColumnMovable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock,\n className: \"mr-1\"\n }), model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable']\n }), columnIndex != null && isEditableGridModel(model) && model.isEditable && !model.keyColumnSet.has(column.name) && !model.valueColumnSet.has(column.name) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsLock,\n className: \"mr-1\"\n }), \"Not editable\"]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-grid\",\n children: [statistics == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-operation\",\n children: rowCountLabel\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedRowCount\n })]\n }), statisticElements]\n }), showGenerateStatistics && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n children: \"Generate Stats\"\n }), error != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n }), statistics && !loading && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n icon: dhRefresh,\n children: \"Refresh\"\n }), loading && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-loading\",\n children: [/*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), \"Calculating Stats...\"]\n })]\n });\n }\n}\n/** Automatically generate the statistics when the row count is below this threshold */\n_defineProperty(ColumnStatistics, \"AUTO_GENERATE_LIMIT\", 100000);\nexport default ColumnStatistics;\n//# sourceMappingURL=ColumnStatistics.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 React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport { dhGearFilled, dhCheckSquare, dhSquareFilled, dhRemoveSquareFilled, dhWarningCircleFilled, vsCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport \"./CrossColumnSearch.css\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nclass CrossColumnSearch extends PureComponent {\n static createSearchFilter(dh, searchValue, selectedColumns, columns, invertSelection) {\n var filterColumns = invertSelection ? columns.filter(column => !selectedColumns.includes(column.name)).map(column => column.name) : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n var filterValue = dh.FilterValue.ofString(searchValue);\n var searchFilter = filterColumns.length === columns.length ? dh.FilterCondition.search(filterValue) : dh.FilterCondition.search(filterValue, columns.filter(column => filterColumns.includes(column.name)).map(column => column.filter()));\n return searchFilter;\n }\n return undefined;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchField\", void 0);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n this.searchField = /*#__PURE__*/React.createRef();\n this.state = {\n isConfigureColumnsShown: false\n };\n }\n focus() {\n var _this$searchField$cur;\n (_this$searchField$cur = this.searchField.current) === null || _this$searchField$cur === void 0 || _this$searchField$cur.focus();\n }\n handleSearchValueChange(event) {\n var {\n onChange,\n selectedColumns,\n invertSelection\n } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n sendColumnChange(selectedColumns, invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n setInvertSelection(invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, [], invertSelection);\n }\n toggleColumn(name) {\n var {\n selectedColumns,\n invertSelection\n } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(selectedColumns.filter(c => c !== name), invertSelection);\n } else {\n var update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n selectAll() {\n this.setInvertSelection(true);\n }\n clear() {\n this.setInvertSelection(false);\n }\n selectNumbers() {\n var {\n columns\n } = this.props;\n this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);\n }\n render() {\n var {\n value,\n selectedColumns,\n invertSelection,\n columns\n } = this.props;\n var {\n isConfigureColumnsShown\n } = this.state;\n var hasAllColumnsSelected = selectedColumns.length === 0 && invertSelection === true || selectedColumns.length === columns.length && invertSelection === false;\n var hasNoColumnsSelected = selectedColumns.length === 0 && invertSelection === false || selectedColumns.length === columns.length && invertSelection === true;\n\n // set icon layers\n var icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhCheckSquare,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: dhGearFilled,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled,\n className: \"text-danger\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else {\n // icon if some columns selected, but not all\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhRemoveSquareFilled,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-container\",\n children: [/*#__PURE__*/_jsx(SearchInput, {\n className: \"cross-column-search\",\n placeholder: \"Search Data...\",\n \"data-testid\": \"cross-column-search\",\n value: value,\n onChange: this.handleSearchValueChange,\n ref: this.searchField\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2\",\n onClick: () => {\n if (isConfigureColumnsShown) {\n this.setState({\n isConfigureColumnsShown: false\n });\n } else {\n this.setState({\n isConfigureColumnsShown: true\n });\n }\n },\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"fa-layers\",\n children: icon\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Configure Columns\"\n }), /*#__PURE__*/_jsx(Popper, {\n isShown: isConfigureColumnsShown,\n className: \"cross-column-popper\",\n onExited: () => {\n this.setState({\n isConfigureColumnsShown: false\n });\n },\n closeOnBlur: true,\n interactive: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-popup\",\n children: [\"Searched Columns\", /*#__PURE__*/_jsx(\"div\", {\n className: \"cross-column-scroll\",\n children: columns.map(column => {\n if (column.isProxy === true) return null;\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(Checkbox, {\n className: \"cross-column-checkbox\",\n checked: invertSelection ? !selectedColumns.includes(column.name) : selectedColumns.includes(column.name),\n onChange: () => this.toggleColumn(column.name),\n children: column.name\n }), column.type.substring(column.type.lastIndexOf('.') + 1)]\n }, column.name);\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-button-bar\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectAll,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.clear,\n children: \"Clear\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectNumbers,\n children: \"Numbers Only\"\n })]\n }), hasNoColumnsSelected && /*#__PURE__*/_jsxs(\"p\", {\n className: \"text-danger\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled\n }), \" Select at least one column to search.\"]\n })]\n })\n })]\n })]\n });\n }\n}\nexport default CrossColumnSearch;\n//# sourceMappingURL=CrossColumnSearch.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 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 _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 React, { Component } from 'react';\nimport memoizee from 'memoizee';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsChevronRight, vsMerge, vsKey } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Picker } from '@deephaven/jsapi-components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport \"./IrisGridPartitionSelector.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPartitionSelector');\nclass IrisGridPartitionSelector extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"getCachedChangeCallback\", memoizee(index => value => this.handlePartitionSelect(index, value), {\n max: 100\n }));\n _defineProperty(this, \"getCachedFormatValueCallback\", memoizee(index => value => this.getDisplayValue(index, value), {\n max: 100\n }));\n this.handlePartitionTableClick = this.handlePartitionTableClick.bind(this);\n this.handleMergeClick = this.handleMergeClick.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n var {\n model\n } = props;\n this.tableUtils = new TableUtils(model.dh);\n this.pending = new Pending();\n this.state = {\n // We start be loading the partition tables, so we should be in a loading state\n isLoading: true,\n baseTable: null,\n keysTable: null,\n partitionTables: null\n };\n }\n componentDidMount() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n try {\n var keysTable = yield _this.pending.add(model.partitionKeysTable().then(keyTable => keyTable), t => t.close());\n var baseTable = yield _this.pending.add(model.partitionBaseTable(), t => t.close());\n _this.setState({\n keysTable,\n baseTable,\n isLoading: false\n }, _this.updatePartitionOptions);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n // Just re-throw the error if it's not a cancel\n throw e;\n }\n }\n })();\n }\n componentDidUpdate(prevProps) {\n var {\n partitionConfig: prevConfig\n } = prevProps;\n var {\n partitionConfig\n } = this.props;\n if (prevConfig !== partitionConfig) {\n this.updatePartitionOptions();\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var {\n keysTable,\n baseTable,\n partitionTables\n } = this.state;\n baseTable === null || baseTable === void 0 || baseTable.close();\n keysTable === null || keysTable === void 0 || keysTable.close();\n partitionTables === null || partitionTables === void 0 || partitionTables.forEach(table => table.close());\n }\n handlePartitionTableClick() {\n log.debug2('handlePartitionTableClick');\n var {\n partitionConfig\n } = this.props;\n assertNotNull(partitionConfig);\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Keys and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'keys' ? 'partition' : 'keys';\n this.sendUpdate(newPartitionConfig);\n }\n handleMergeClick() {\n log.debug2('handleMergeClick');\n var {\n partitionConfig\n } = this.props;\n assertNotNull(partitionConfig);\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Merged and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'merged' ? 'partition' : 'merged';\n this.sendUpdate(newPartitionConfig);\n }\n\n /**\n * Handles when a partition dropdown selection is changed. Will send an update with the new partition config\n * @param index Index of the partition column that was changed\n * @param selectedValue Selected value of the partition column\n */\n handlePartitionSelect(index, selectedValue) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var {\n partitionConfig: prevConfig\n } = _this2.props;\n assertNotNull(prevConfig);\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n var newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n var {\n baseTable\n } = _this2.state;\n var {\n keysTable\n } = _this2.state;\n assertNotNull(baseTable);\n assertNotNull(keysTable);\n try {\n _this2.setState({\n isLoading: true\n });\n var t = yield _this2.pending.add(baseTable.copy(), tCopy => tCopy.close());\n\n // Apply our partition filters, and just get the first value\n var partitionFilters = newPartitions.slice(0, index + 1).map((partition, i) => {\n var partitionColumn = t.columns[i];\n return _this2.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n t.applyFilter(partitionFilters);\n t.setViewport(0, 0, t.columns);\n var data = yield _this2.pending.add(t.getViewportData());\n var newConfig = {\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n partitions: keysTable.columns.map(column => data.rows[0].get(column)),\n mode: 'partition'\n };\n t.close();\n _this2.sendUpdate(newConfig);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to get partition tables', e);\n }\n } finally {\n _this2.setState({\n isLoading: false\n });\n }\n })();\n }\n sendUpdate(partitionConfig) {\n log.debug2('sendUpdate', partitionConfig);\n var {\n onChange\n } = this.props;\n onChange(partitionConfig);\n }\n\n /**\n * Calls model.displayString with a special character case\n * @param index The index of the partition column to get the display value for\n * @param value The partition value to get the display value for\n */\n getDisplayValue(index, value) {\n var {\n model\n } = this.props;\n if (value === null) {\n return '(null)';\n }\n if (value === undefined || value === '') {\n return '';\n }\n var column = model.partitionColumns[index];\n if (TableUtils.isCharType(column.type) && value.toString().length > 0) {\n return String.fromCharCode(parseInt(value.toString(), 10));\n }\n return model.displayString(value, column.type, column.name);\n }\n\n /**\n * Update the options on the partition dropdown tables\n */\n updatePartitionOptions() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this3.props;\n var {\n partitionConfig: prevConfig\n } = _this3.props;\n if (prevConfig == null) {\n return;\n }\n var {\n keysTable\n } = _this3.state;\n assertNotNull(keysTable);\n var partitionFilters = [...prevConfig.partitions].map((partition, i) => {\n var partitionColumn = keysTable.columns[i];\n return _this3.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n var partitionTables = yield Promise.all(model.partitionColumns.map(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (_, i) {\n keysTable.applyFilter(partitionFilters.slice(0, i));\n return keysTable.selectDistinct(model.partitionColumns.slice(0, i + 1));\n });\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }()));\n _this3.setState({\n partitionTables\n });\n })();\n }\n getPartitionFilters(partitionTables) {\n var {\n model,\n partitionConfig\n } = this.props;\n assertNotNull(partitionConfig);\n var {\n partitions\n } = partitionConfig;\n log.debug('getPartitionFilters', partitionConfig);\n if (partitions.length !== partitionTables.length) {\n throw new Error(\"Invalid partition config set. Expected \".concat(partitionTables.length, \" partitions, but got \").concat(partitions.length));\n }\n\n // The filters are applied in order, so we need to build up the filters for each partition\n var partitionFilters = [];\n for (var i = 0; i < partitions.length; i += 1) {\n if (i === 0) {\n // There's no reason to ever filter the first table\n partitionFilters.push([]);\n } else {\n var previousFilter = partitionFilters[i - 1];\n var previousPartition = partitions[i - 1];\n var previousColumn = model.partitionColumns[i - 1];\n var partitionFilter = [...previousFilter, this.tableUtils.makeNullableEqFilter(previousColumn, previousPartition)];\n partitionFilters.push(partitionFilter);\n }\n }\n return partitionFilters;\n }\n render() {\n var {\n model,\n partitionConfig\n } = this.props;\n var {\n isLoading,\n partitionTables\n } = this.state;\n var partitionSelectors = model.partitionColumns.map((column, index) => /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-selector\",\n children: [(partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables[index]) && /*#__PURE__*/_jsx(Picker, {\n label: column.name,\n labelPosition: \"side\",\n table: partitionTables[index],\n direction: \"bottom\",\n shouldFlip: false,\n keyColumn: partitionTables[index].columns[index].name,\n selectedKey: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'partition' ? partitionConfig.partitions[index] : null,\n placeholder: \"Select a key\",\n labelColumn: partitionTables[index].columns[index].name,\n onChange: this.getCachedChangeCallback(index),\n isDisabled: isLoading || partitionConfig == null\n }), model.partitionColumns.length - 1 === index || /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n })]\n }, \"selector-\".concat(column.name)));\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-partition-selector\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"partition-button-group\",\n children: [/*#__PURE__*/_jsx(Button, {\n onClick: this.handlePartitionTableClick,\n kind: \"inline\",\n tooltip: model.isPartitionAwareSourceTable ? 'View keys as table' : 'View underlying partition table',\n icon: vsKey,\n active: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'keys',\n disabled: isLoading || partitionConfig == null,\n children: \"Partitions\"\n }), /*#__PURE__*/_jsx(Button, {\n onClick: this.handleMergeClick,\n kind: \"inline\",\n tooltip: \"View all partitions as one merged table\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMerge,\n rotation: 90\n }),\n active: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'merged',\n disabled: isLoading || partitionConfig == null,\n children: model.isPartitionAwareSourceTable ? 'Coalesce' : 'Merge'\n })]\n }), partitionSelectors]\n });\n }\n}\nexport default IrisGridPartitionSelector;\n//# sourceMappingURL=IrisGridPartitionSelector.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 React, { Component } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport \"./SelectDistinctBuilder.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('SelectDistinctBuilder');\nclass SelectDistinctBuilder extends Component {\n constructor(props) {\n super(props);\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n var {\n model,\n selectDistinctColumns\n } = this.props;\n this.state = {\n inputs: selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputs\n } = this.state;\n var {\n onChange\n } = this.props;\n if (prevState.inputs !== inputs) {\n var filteredInputs = inputs.filter(val => val !== '');\n if (!deepEqual(prevState.inputs.filter(val => val !== ''), filteredInputs)) {\n onChange(filteredInputs);\n }\n }\n }\n handleAddColumnClick() {\n this.setState(_ref => {\n var {\n inputs: prevInputs\n } = _ref;\n return {\n inputs: [...prevInputs, '']\n };\n });\n }\n handleDeleteColumn(index) {\n this.setState(_ref2 => {\n var {\n inputs\n } = _ref2;\n return {\n inputs: inputs.length === 1 && index === 0 ? [''] : inputs.filter((input, inputIndex) => index !== inputIndex)\n };\n });\n }\n handleDropdownChanged(index, value) {\n log.debug('handleDropdownChanged', index, value);\n this.setState(_ref3 => {\n var {\n inputs: prevInputs\n } = _ref3;\n var inputs = [...prevInputs];\n inputs[index] = value;\n return {\n inputs\n };\n });\n }\n renderInputs() {\n var {\n columns,\n inputs\n } = this.state;\n return inputs.map((value, index) => {\n var options = columns.filter(_ref4 => {\n var {\n name\n } = _ref4;\n return name === value || !inputs.includes(name);\n }).map(_ref5 => {\n var {\n name\n } = _ref5;\n return /*#__PURE__*/_jsx(\"option\", {\n value: name,\n children: name\n }, name);\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n _jsxs(\"div\", {\n className: \"form-inline px-3 pb-3\",\n children: [/*#__PURE__*/_jsxs(Select, {\n className: \"form-control custom-select col\",\n value: value,\n onChange: eventTargetValue => this.handleDropdownChanged(index, eventTargetValue),\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: \"\",\n children: \"Select a column\"\n }), options]\n }), (inputs.length > 1 || value !== '') && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: () => {\n this.handleDeleteColumn(index);\n },\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTrash,\n transform: \"grow-3\"\n }),\n tooltip: \"Delete column\"\n })]\n }, index)\n );\n });\n }\n render() {\n var {\n columns,\n inputs\n } = this.state;\n var disableAddButton = inputs.length >= columns.length;\n return /*#__PURE__*/_jsxs(\"div\", {\n role: \"presentation\",\n className: \"select-distinct-builder-container h-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-title\",\n children: \"Display Unique Values From\"\n }), this.renderInputs(), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"pt-1 px-3\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-add-column\",\n onClick: this.handleAddColumnClick,\n disabled: disableAddButton,\n icon: dhNewCircleLargeFilled,\n children: \"Add Additional Column\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-footer\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-hint\",\n children: \"Display only unique values from the selected table columns. Note that this will reset any filters and display only the selected columns.\"\n })\n })]\n });\n }\n}\n_defineProperty(SelectDistinctBuilder, \"defaultProps\", {\n selectDistinctColumns: [],\n onChange: () => undefined\n});\nexport default SelectDistinctBuilder;\n//# sourceMappingURL=SelectDistinctBuilder.js.map","import React from 'react';\nimport { Menu } from '@deephaven/components';\nimport AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction AdvancedSettingsMenu(_ref) {\n var {\n items,\n onChange: _onChange = () => undefined\n } = _ref;\n return /*#__PURE__*/_jsx(Menu, {\n items: Array.from(items.entries()).map(_ref2 => {\n var [key, isOn] = _ref2;\n return {\n title: AdvancedSettingsMenu.getAdvancedSettingsTitleForKey(key),\n isOn,\n onChange: value => _onChange(key, value)\n };\n })\n });\n}\nAdvancedSettingsMenu.getAdvancedSettingsTitleForKey = key => {\n switch (key) {\n case AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from a control';\n case AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from an incoming link filter';\n }\n};\nexport default AdvancedSettingsMenu;\n//# sourceMappingURL=AdvancedSettingsMenu.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback } from 'react';\nimport { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsGripper, vsTrash } from '@deephaven/icons';\nimport { Button, DragUtils, Tooltip } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport \"./ConditionalFormattingMenu.css\";\nimport { FormatterType, getBackgroundForStyleConfig, getColorForStyleConfig, getShortLabelForConditionType, NumberCondition, StringCondition, DateCondition } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormattingMenu');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getRuleValue(config) {\n var {\n column: {\n type\n }\n } = config;\n if (TableUtils.isNumberType(type)) {\n return config.condition === NumberCondition.IS_NULL || config.condition === NumberCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isCharType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isStringType(type)) {\n return config.condition === StringCondition.IS_NULL || config.condition === StringCondition.IS_NOT_NULL ? '' : \"\\\"\".concat(config.value, \"\\\"\");\n }\n if (TableUtils.isDateType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isBooleanType(type)) {\n return '';\n }\n throw new Error(\"Invalid column type \".concat(type, \" in getRuleValue\"));\n}\nfunction getRuleTitle(config) {\n if (TableUtils.isNumberType(config.column.type) && config.condition === NumberCondition.IS_BETWEEN) {\n return \"\".concat(config.start, \" < \").concat(config.column.name, \" < \").concat(config.end);\n }\n return \"\".concat(config.column.name, \" \").concat(getShortLabelForConditionType(config.column.type, config.condition), \" \\n \").concat(getRuleValue(config));\n}\nfunction ConditionalFormattingMenu(props) {\n var {\n rules = [],\n onChange = DEFAULT_CALLBACK,\n onCreate = DEFAULT_CALLBACK,\n onSelect = DEFAULT_CALLBACK\n } = props;\n var handleRuleClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Rule clicked', rule, index);\n onSelect(index);\n }, [onSelect]);\n var handleDeleteClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Delete button clicked', rule, index);\n var updatedRules = [...rules];\n updatedRules.splice(index, 1);\n onChange(updatedRules);\n }, [onChange, rules]);\n var handleDragHandlerClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n var handleDragEnd = useCallback(result => {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (result.destination == null) {\n return;\n }\n var sourceIndex = result.source.index;\n var destinationIndex = result.destination.index;\n var updatedRules = [...rules];\n var sourceInput = rules[sourceIndex];\n updatedRules.splice(sourceIndex, 1);\n updatedRules.splice(destinationIndex, 0, sourceInput);\n onChange(updatedRules);\n }, [onChange, rules]);\n\n // Display list of rules\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-formatting-rules\",\n children: [/*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: DragUtils.startDragging,\n onDragEnd: handleDragEnd,\n children: /*#__PURE__*/_jsx(Droppable, {\n droppableId: \"droppable-custom-columns\",\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n className: classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith\n }),\n children: [rules.length === 0 && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted pl-2\",\n children: \"No formats defined\"\n }), rules.map((rule, index) => /*#__PURE__*/_jsx(Draggable\n // eslint-disable-next-line react/no-array-index-key\n , {\n draggableId: \"\".concat(index, \"-\").concat(rule.type),\n index: index,\n disableInteractiveElementBlocking: true,\n children:\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (provided, snapshot) => /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread({\n role: \"menuitem\",\n tabIndex: 0,\n onClick: e => handleRuleClick(e, rule, index),\n className: classNames('draggable-container', {\n dragging: snapshot.isDragging\n }),\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), {}, {\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"conditional-formatting-list-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"formatting-item\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"rule-icon\",\n children: /*#__PURE__*/_jsx(\"span\", {\n className: \"rule-icon-bg\",\n style: {\n backgroundColor: getBackgroundForStyleConfig(rule.config.style),\n color: getColorForStyleConfig(rule.config.style)\n },\n children: rule.type === FormatterType.ROWS ? 'row' : 'col'\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"rule-title\",\n children: getRuleTitle(rule.config)\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: e => handleDeleteClick(e, rule, index),\n icon: vsTrash,\n tooltip: \"Delete rule\"\n }), /*#__PURE__*/_jsxs(\"button\", _objectSpread(_objectSpread({\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2 btn-drag-handle\",\n onClick: handleDragHandlerClick\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.dragHandleProps), {}, {\n children: [/*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to re-order\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGripper\n })]\n }))]\n })\n })\n }))\n }, \"\".concat(index, \"-\").concat(rule.type))), provided.placeholder]\n }))\n })\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onCreate,\n icon: dhNewCircleLargeFilled,\n children: \"Add New Rule\"\n })]\n });\n}\nexport default ConditionalFormattingMenu;\n//# sourceMappingURL=ConditionalFormattingMenu.js.map","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport { StringCondition, DateCondition, getLabelForNumberCondition, getLabelForDateCondition, getLabelForStringCondition, NumberCondition, getDefaultConditionForType, getLabelForBooleanCondition, BooleanCondition, CharCondition, getLabelForCharCondition, isDateConditionValid, getDefaultValueForType } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nvar numberConditionOptions = [NumberCondition.IS_EQUAL, NumberCondition.IS_NOT_EQUAL, NumberCondition.IS_BETWEEN, NumberCondition.GREATER_THAN, NumberCondition.GREATER_THAN_OR_EQUAL, NumberCondition.LESS_THAN, NumberCondition.LESS_THAN_OR_EQUAL, NumberCondition.IS_NULL, NumberCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForNumberCondition(option)\n}, option));\nvar stringConditions = [StringCondition.IS_EXACTLY, StringCondition.IS_NOT_EXACTLY, StringCondition.CONTAINS, StringCondition.DOES_NOT_CONTAIN, StringCondition.STARTS_WITH, StringCondition.ENDS_WITH, StringCondition.IS_NULL, StringCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForStringCondition(option)\n}, option));\nvar dateConditions = [DateCondition.IS_EXACTLY, DateCondition.IS_NOT_EXACTLY, DateCondition.IS_BEFORE, DateCondition.IS_BEFORE_OR_EQUAL, DateCondition.IS_AFTER, DateCondition.IS_AFTER_OR_EQUAL, DateCondition.IS_NULL, DateCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForDateCondition(option)\n}, option));\nvar booleanConditions = [BooleanCondition.IS_TRUE, BooleanCondition.IS_FALSE, BooleanCondition.IS_NULL, BooleanCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForBooleanCondition(option)\n}, option));\nvar charConditions = [CharCondition.IS_EQUAL, CharCondition.IS_NOT_EQUAL, CharCondition.IS_NULL, CharCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForCharCondition(option)\n}, option));\nfunction isNumberConditionValid(condition, value, startValue, endValue) {\n if (condition === NumberCondition.IS_NULL || condition === NumberCondition.IS_NOT_NULL) {\n return true;\n }\n if (condition === NumberCondition.IS_BETWEEN && startValue != null && startValue !== '' && !Number.isNaN(Number.parseFloat(startValue)) && endValue != null && endValue !== '' && !Number.isNaN(Number.parseFloat(endValue))) {\n return true;\n }\n if (condition !== NumberCondition.IS_BETWEEN && value !== undefined && value !== '' && !Number.isNaN(Number.parseFloat(value))) {\n return true;\n }\n return false;\n}\nfunction getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue) {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n case NumberCondition.IS_BETWEEN:\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-row\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex mr-2\",\n placeholder: \"Start value\",\n value: startValue !== null && startValue !== void 0 ? startValue : '',\n onChange: handleStartValueChange\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex\",\n placeholder: \"End value\",\n value: endValue !== null && endValue !== void 0 ? endValue : '',\n onChange: handleEndValueChange\n })]\n });\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\nfunction getStringInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getDateInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getBooleanInputs() {\n return null;\n}\nfunction getCharInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n maxLength: 1,\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction ConditionEditor(props) {\n var {\n column,\n config,\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var selectedColumnType = column.type;\n var [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n var [selectedCondition, setCondition] = useState(config.condition);\n var [conditionValue, setValue] = useState(config.value);\n var [startValue, setStartValue] = useState(config.start);\n var [endValue, setEndValue] = useState(config.end);\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n var conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n var handleConditionChange = useCallback(value => {\n log.debug('handleConditionChange', value);\n setCondition(value);\n }, []);\n var handleValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n var handleStartValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n var handleEndValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n useEffect(function changeCondition() {\n var isValid = true;\n if (selectedCondition === undefined) {\n log.debug('Unable to create formatting rule. Condition is not selected.');\n isValid = false;\n } else if (TableUtils.isNumberType(column.type) && !isNumberConditionValid(selectedCondition, conditionValue, startValue, endValue)) {\n log.debug('Unable to create formatting rule. Invalid value', conditionValue);\n isValid = false;\n } else if (TableUtils.isDateType(column.type) && !isDateConditionValid(dh, selectedCondition, conditionValue)) {\n log.debug('Unable to create formatting rule. Invalid date condition', conditionValue);\n isValid = false;\n }\n onChange({\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue\n }, isValid);\n }, [onChange, column.type, dh, selectedCondition, conditionValue, startValue, endValue]);\n var conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue);\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [selectedColumnType, selectedCondition, conditionValue, startValue, endValue, handleValueChange, handleStartValueChange, handleEndValueChange]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"condition-editor mb-2\",\n children: [/*#__PURE__*/_jsx(Select, {\n value: selectedCondition,\n \"data-testid\": \"condition-select\",\n className: \"custom-select mb-2\",\n onChange: handleConditionChange,\n children: conditions\n }), conditionInputs]\n });\n}\nexport default ConditionEditor;\n//# sourceMappingURL=ConditionEditor.js.map","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport { vsCheck } from '@deephaven/icons';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport { FormatStyleType, getLabelForStyleType, getBackgroundForStyleConfig, getColorForStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport \"./StyleEditor.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('StyleEditor');\nvar DEFAULT_BACKGROUND = '#fcfcfa';\nvar DEFAULT_COLOR_LIGHT = '#f0f0ee';\nvar DEFAULT_COLOR_DARK = '#1a171a';\nvar DEFAULT_DROPDOWN_WIDTH = 200;\nvar DEFAULT_CALLBACK = () => undefined;\nfunction StyleEditor(props) {\n var _config$customConfig$, _config$customConfig;\n var {\n config,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [styleType, setStyleType] = useState(config.type);\n var [background, setBackground] = useState((_config$customConfig$ = (_config$customConfig = config.customConfig) === null || _config$customConfig === void 0 ? void 0 : _config$customConfig.background) !== null && _config$customConfig$ !== void 0 ? _config$customConfig$ : DEFAULT_BACKGROUND);\n var [isShown, setShown] = useState(false);\n var [dropdownWidth, setDropdownWidth] = useState(DEFAULT_DROPDOWN_WIDTH);\n var csContainer = useRef(null);\n var handleBackgroundChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleBackgroundChange', value);\n setBackground(value);\n }, []);\n var handleMenuClosed = useCallback(() => {\n if (isShown) {\n setShown(false);\n }\n }, [isShown]);\n var handleToggleClick = useCallback(() => {\n if (!isShown) {\n updateDropdownWidth();\n }\n setShown(!isShown);\n }, [isShown]);\n var styleOptions = useMemo(() => [FormatStyleType.NO_FORMATTING, FormatStyleType.POSITIVE, FormatStyleType.NEGATIVE, FormatStyleType.WARN, FormatStyleType.NEUTRAL, FormatStyleType.ACCENT_1, FormatStyleType.ACCENT_2, FormatStyleType.CUSTOM], []);\n function updateDropdownWidth() {\n if (csContainer.current) {\n setDropdownWidth(csContainer.current.getBoundingClientRect().width);\n }\n }\n useEffect(function updateTheme() {\n onChange({\n type: styleType,\n customConfig: {\n color: ColorUtils.isDark(background) ? DEFAULT_COLOR_LIGHT : DEFAULT_COLOR_DARK,\n background\n }\n });\n }, [onChange, styleType, background]);\n var renderOptions = useCallback(() => {\n var matchFound = false;\n var optionArray = [];\n var _loop = function _loop() {\n var option = styleOptions[index];\n var key = \"option-\".concat(index, \"-\").concat(option);\n matchFound = matchFound || option === styleType;\n optionArray.push(/*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"style-option-btn\",\n onClick: () => {\n setStyleType(option);\n setShown(false);\n },\n style: {\n color: getColorForStyleConfig({\n type: option\n }),\n background: getBackgroundForStyleConfig({\n type: option\n })\n },\n children: [option === styleType && /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCheck,\n className: \"mr-2\"\n }), option !== styleType && /*#__PURE__*/_jsx(\"span\", {\n className: \"mr-4\"\n }), getLabelForStyleType(option)]\n }, key));\n };\n for (var index = 0; index < styleOptions.length; index += 1) {\n _loop();\n }\n return optionArray;\n }, [styleOptions, styleType]);\n var renderMenuElement = useCallback(() => /*#__PURE__*/_jsx(\"div\", {\n className: \"style-menu-container\",\n role: \"presentation\",\n style: {\n width: dropdownWidth\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"style-options\",\n children: renderOptions()\n })\n }), [dropdownWidth, renderOptions]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"style-editor\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n ref: csContainer,\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Style\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"cs-dropdown custom-select\",\n style: {\n color: getColorForStyleConfig({\n type: styleType\n }),\n background: getBackgroundForStyleConfig({\n type: styleType\n })\n },\n onClick: handleToggleClick,\n children: [getLabelForStyleType(styleType), /*#__PURE__*/_jsx(DropdownMenu, {\n isShown: isShown,\n actions: {\n menuElement: renderMenuElement()\n },\n popperOptions: {\n placement: 'bottom-start'\n },\n popperClassName: \"style-dropdown-menu\",\n onMenuClosed: handleMenuClosed,\n menuStyle: {\n maxWidth: '100rem'\n }\n })]\n })]\n }), styleType === FormatStyleType.CUSTOM && /*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Background\"\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"color\",\n value: background,\n className: \"custom-select color-select\",\n onChange: handleBackgroundChange\n })]\n })]\n });\n}\nexport default StyleEditor;\n//# sourceMappingURL=StyleEditor.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig, FormatStyleType } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction ColumnFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateColumnFormat() {\n var isValid = conditionValid;\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (selectedStyle === undefined || selectedStyle.type === FormatStyleType.NO_FORMATTING) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), isValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Cell If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n dh: dh,\n column: selectedColumn,\n config: conditionConfig,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default ColumnFormatEditor;\n//# sourceMappingURL=ColumnFormatEditor.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('RowFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction RowFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateRowFormat() {\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, skip update.');\n return;\n }\n if (selectedStyle === undefined) {\n log.debug('Style is not selected, skip update.');\n return;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), conditionValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Row If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format row by\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n column: selectedColumn,\n config: conditionConfig,\n dh: dh,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default RowFormatEditor;\n//# sourceMappingURL=RowFormatEditor.js.map","import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from \"../icons/index.js\";\nimport ColumnFormatEditor from \"./ColumnFormatEditor.js\";\nimport RowFormatEditor from \"./RowFormatEditor.js\";\nimport { FormatterType, isSupportedColumn } from \"./ConditionalFormattingUtils.js\";\nimport \"./ConditionalFormatEditor.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getFormatterTypeIcon(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return /*#__PURE__*/_jsx(FormatColumnWhereIcon, {});\n case FormatterType.ROWS:\n return /*#__PURE__*/_jsx(FormatRowWhereIcon, {});\n }\n}\nfunction getFormatterTypeLabel(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\nvar formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\nfunction ConditionalFormatEditor(props) {\n var _defaultRule$type;\n var {\n columns: originalColumns,\n dh,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule\n } = props;\n var columns = originalColumns.filter(isSupportedColumn);\n var [selectedFormatter, setFormatter] = useState((_defaultRule$type = defaultRule === null || defaultRule === void 0 ? void 0 : defaultRule.type) !== null && _defaultRule$type !== void 0 ? _defaultRule$type : formatterTypes[0]);\n var [rule, setRule] = useState(defaultRule);\n var [isValid, setIsValid] = useState(false);\n var handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n var handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n var handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n var handleRuleChange = useCallback((ruleConfig, isRuleValid) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n var updatedRule = {\n type: selectedFormatter,\n config: ruleConfig\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n }, [onUpdate, selectedFormatter]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-format-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n htmlFor: \"formatter-select\",\n children: \"Select Formatter\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-list\",\n children: formatterTypes.map((type, index) => /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-type\",\n children: /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter\n }),\n \"data-index\": index,\n onClick: () => handleFormatterChange(type),\n children: [getFormatterTypeIcon(type), getFormatterTypeLabel(type)]\n })\n }, type))\n })]\n }), selectedFormatter === FormatterType.CONDITIONAL && /*#__PURE__*/_jsx(ColumnFormatEditor, {\n columns: columns,\n dh: dh,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n onChange: handleRuleChange\n }), selectedFormatter === FormatterType.ROWS && /*#__PURE__*/_jsx(RowFormatEditor, {\n columns: columns,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n dh: dh,\n onChange: handleRuleChange\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex justify-content-end my-3\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: handleCancel,\n className: \"mr-2\",\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: handleSave,\n disabled: rule === undefined || !isValid,\n children: \"Done\"\n })]\n })]\n });\n}\nexport default ConditionalFormatEditor;\n//# sourceMappingURL=ConditionalFormatEditor.js.map","import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport { Button, CopyButton, Modal, ModalBody, ModalHeader } from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport \"./IrisGridCellOverflowModal.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function IrisGridCellOverflowModal(_ref) {\n var _editorRef$current$ge, _editorRef$current2;\n var {\n text,\n isOpen,\n onClose\n } = _ref;\n var [isOpened, setIsOpened] = useState(false);\n var [height, setHeight] = useState(0);\n var [showLineNumbers, setShowLineNumbers] = useState(false);\n var [isFormatted, setIsFormatted] = useState(false);\n var [canFormat, setCanFormat] = useState(false);\n var editorRef = useRef();\n\n // Update format button on open\n useEffect(function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch (_unused) {\n setCanFormat(false);\n }\n setIsFormatted(false);\n }, [isOpen, text]);\n\n // Re-layout editor on height change\n useEffect(function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n }, [height]);\n\n // Update editor options on line number toggle\n useEffect(function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off'\n });\n }\n }, [showLineNumbers]);\n function toggleLineNumbers() {\n setShowLineNumbers(!showLineNumbers);\n }\n function formatAsJSON() {\n var _editorRef$current;\n var model = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getModel();\n if (!canFormat || !model) {\n return;\n }\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n function autoSetLineNumbers() {\n var _editor$getModel$getL, _editor$getModel;\n var editor = editorRef.current;\n if (!editor) {\n return;\n }\n setShowLineNumbers(((_editor$getModel$getL = (_editor$getModel = editor.getModel()) === null || _editor$getModel === void 0 ? void 0 : _editor$getModel.getLineCount()) !== null && _editor$getModel$getL !== void 0 ? _editor$getModel$getL : 0) > 1);\n }\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n function onEditorInitialized(editor) {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(_ref2 => {\n var {\n contentHeight\n } = _ref2;\n return setHeight(contentHeight);\n });\n autoSetLineNumbers();\n }\n if (!isOpen && !isOpened) {\n return null;\n }\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n centered: true,\n keyboard: true,\n toggle: handleToggle,\n onOpened: () => setIsOpened(true),\n onClosed: () => {\n setIsOpened(false);\n setHeight(0);\n },\n className: \"cell-overflow-modal\",\n size: \"xl\",\n children: [/*#__PURE__*/_jsxs(ModalHeader, {\n toggle: onClose,\n children: [/*#__PURE__*/_jsx(\"h5\", {\n className: \"overflow-modal-title\",\n children: \"Cell Contents\"\n }), /*#__PURE__*/_jsx(CopyButton, {\n kind: \"inline\",\n tooltip: \"Copy cell contents\",\n copy: (_editorRef$current$ge = (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 ? void 0 : _editorRef$current2.getValue()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : text\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n active: showLineNumbers,\n icon: vsListOrdered,\n tooltip: \"Toggle line numbers\",\n onClick: toggleLineNumbers\n }), canFormat && /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n icon: vsJson,\n active: isFormatted,\n tooltip: \"Format as JSON\",\n onClick: formatAsJSON\n })]\n }), /*#__PURE__*/_jsx(ModalBody, {\n style: {\n height\n },\n children: /*#__PURE__*/_jsx(Editor, {\n onEditorInitialized: onEditorInitialized,\n settings: {\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: {\n bottom: 16\n },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: {\n seedSearchStringFromSelection: 'never'\n }\n }\n })\n })]\n });\n}\n//# sourceMappingURL=IrisGridCellOverflowModal.js.map","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsArrowUp, vsArrowDown } from '@deephaven/icons';\nimport React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { Type as FilterType } from '@deephaven/filters';\nimport { Button, DateTimeInput, Select } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport classNames from 'classnames';\nimport \"./GotoRow.css\";\nimport { nanoid } from 'nanoid';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar DEFAULT_FORMAT_STRING = '###,##0';\nvar GotoRow = /*#__PURE__*/forwardRef((_ref, ref) => {\n var {\n gotoRow,\n gotoRowError,\n gotoValueError,\n onGotoRowSubmit,\n isShown,\n onEntering,\n onEntered: _onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueFilter,\n onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged,\n onGotoValueChanged,\n onGotoValueSubmit\n } = _ref;\n var gotoRowInputRef = useRef(null);\n var gotoValueInputRef = useRef(null);\n var [isGotoRowActive, setIsGotoRowActive] = useState(false);\n var columns = [];\n if (isIrisGridTableModelTemplate(model)) {\n ({\n columns\n } = model.table);\n }\n var {\n dh,\n rowCount\n } = model;\n var gotoRowInputId = useMemo(() => \"goto-row-input-\".concat(nanoid()), []);\n var handleGotoValueNumberKeyDown = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit();\n } else if ((e.key === 'Backspace' || e.key === 'Delete') && (gotoValue === \"\".concat(Number.POSITIVE_INFINITY) || gotoValue === \"\".concat(Number.NEGATIVE_INFINITY))) {\n onGotoValueInputChanged('');\n }\n };\n var handleGotoValueKeySubmit = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit(e.shiftKey);\n }\n };\n var index = model.getColumnIndexByName(gotoValueSelectedColumnName);\n var selectedColumn = columns[index !== null && index !== void 0 ? index : 0];\n var columnType = selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.type;\n var normalizedType = TableUtils.getNormalizedType(columnType);\n var onGotoValueInputChanged = value => {\n onGotoValueChanged(value !== null && value !== void 0 ? value : '');\n };\n useImperativeHandle(ref, () => ({\n focus() {\n var _gotoRowInputRef$curr;\n setIsGotoRowActive(true);\n (_gotoRowInputRef$curr = gotoRowInputRef.current) === null || _gotoRowInputRef$curr === void 0 || _gotoRowInputRef$curr.select();\n }\n }));\n var selectInput = () => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (isGotoRowActive && document.activeElement !== gotoRowInputRef.current) {\n var _gotoRowInputRef$curr2;\n (_gotoRowInputRef$curr2 = gotoRowInputRef.current) === null || _gotoRowInputRef$curr2 === void 0 || _gotoRowInputRef$curr2.select();\n } else if (!isGotoRowActive && document.activeElement !== gotoValueInputRef.current) {\n var _gotoValueInputRef$cu;\n (_gotoValueInputRef$cu = gotoValueInputRef.current) === null || _gotoValueInputRef$cu === void 0 || _gotoValueInputRef$cu.select();\n }\n };\n useEffect(selectInput, [isGotoRowActive]);\n var renderValueInput = () => {\n switch (normalizedType) {\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueNumberKeyDown,\n placeholder: \"value\",\n onChange: e => {\n var value = e.target.value.toLowerCase();\n // regex tests for\n if (/^-?[0-9]*\\.?[0-9]*$/.test(e.target.value)) {\n onGotoValueInputChanged(e.target.value);\n } else if (value === '-i' || value === '-infinity') {\n onGotoValueInputChanged(\"\".concat(Number.NEGATIVE_INFINITY));\n } else if (value === 'i' || value === 'infinity') {\n onGotoValueInputChanged(\"\".concat(Number.POSITIVE_INFINITY));\n }\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.DATETIME:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-value-date-time-input\",\n children: /*#__PURE__*/_jsx(DateTimeInput, {\n ref: gotoValueInputRef,\n className: classNames('form-control', 'goto-value-date-time-input', {\n 'is-invalid': gotoValueError !== ''\n }),\n defaultValue: gotoValue,\n onChange: onGotoValueInputChanged,\n onSubmit: handleGotoValueKeySubmit,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.STRING:\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueSelectedFilterChanged(eventTargetValue);\n },\n value: gotoValueFilter,\n \"aria-label\": \"filter-type-select\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eqIgnoreCase,\n children: \"Equals (case-insensitive)\"\n }, FilterType.eqIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.containsIgnoreCase,\n children: \"Contains (case-insensitive)\"\n }, FilterType.containsIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eq,\n children: \"Equals\"\n }, FilterType.eq), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.contains,\n children: \"Contains\"\n }, FilterType.contains)]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n })]\n });\n case TableUtils.dataType.BOOLEAN:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueInputChanged(eventTargetValue);\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n \"aria-label\": \"null value\",\n value: \"\"\n }, \"null\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"true\",\n children: \"true\"\n }, \"true\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"false\",\n children: \"false\"\n }, \"false\")]\n })\n });\n default:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: \"form-control\",\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n }\n };\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n isShown: isShown,\n className: classNames('goto-row'),\n onEntering: onEntering,\n onEntered: () => {\n _onEntered();\n selectInput();\n },\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': !isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(true),\n onFocus: () => setIsGotoRowActive(true),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"goto-row-text\",\n htmlFor: gotoRowInputId,\n children: \"Go to row\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoRowInputRef,\n \"data-testid\": \"goto-row-input\",\n type: \"number\",\n onKeyDown: e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoRowSubmit();\n }\n },\n className: classNames('form-control', {\n 'is-invalid': gotoRowError !== ''\n }),\n placeholder: \"Row number\",\n onChange: event => {\n onGotoRowNumberChanged(event);\n },\n value: gotoRow,\n id: gotoRowInputId\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-text\",\n children: [\"of\", ' ', dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)]\n }), gotoRowError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoRowError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-close\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onClose,\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n style: {\n marginRight: '0'\n }\n })\n })\n })]\n }), model.isSeekRowAvailable && /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-row\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(false),\n onFocus: () => setIsGotoRowActive(false),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-text\",\n children: \"Go to value\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n var columnName = eventTargetValue;\n onGotoValueSelectedColumnNameChanged(columnName);\n },\n value: gotoValueSelectedColumnName,\n \"aria-label\": \"column-name-select\",\n id: \"column-name-select\",\n children: columns.map(column => /*#__PURE__*/_jsx(\"option\", {\n value: column.name,\n children: column.name\n }, column.name))\n })\n }), renderValueInput(), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n tooltip: \"Previous match\",\n icon: vsArrowUp,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(true);\n }\n }), /*#__PURE__*/_jsx(Button, {\n tooltip: \"Next match\",\n icon: vsArrowDown,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(false);\n }\n })]\n }), gotoValueError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoValueError\n })]\n })\n })]\n })\n });\n});\nGotoRow.displayName = 'GotoRow';\nexport default GotoRow;\n//# sourceMappingURL=GotoRow.js.map","import { Button, GLOBAL_SHORTCUTS, Modal, ModalBody, ModalFooter, ModalHeader } from '@deephaven/components';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function NoPastePermissionModal(_ref) {\n var {\n isOpen,\n onClose,\n errorMessage\n } = _ref;\n var pasteShortcutText = GLOBAL_SHORTCUTS.PASTE.getDisplayText();\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n toggle: onClose,\n centered: true,\n children: [/*#__PURE__*/_jsx(ModalHeader, {\n closeButton: false,\n children: \"No Paste Permission\"\n }), /*#__PURE__*/_jsxs(ModalBody, {\n children: [/*#__PURE__*/_jsx(\"p\", {\n children: errorMessage\n }), /*#__PURE__*/_jsxs(\"p\", {\n children: [\"You can still use \", pasteShortcutText, \" to paste.\"]\n })]\n }), /*#__PURE__*/_jsx(ModalFooter, {\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: onClose,\n children: \"Dismiss\"\n })\n })]\n });\n}\n//# sourceMappingURL=NoPastePermissionModal.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); }\nimport React, { Component } from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport deepEqual from 'fast-deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ContextActions, Stack, Menu, Page, Popper, ThemeExport, Tooltip, Button, ContextActionUtils, SlideTransition } from '@deephaven/components';\nimport { Grid, GridRange, GridUtils, isEditableGridModel, isExpandableGridModel, isDeletableGridModel, isExpandableColumnGridModel } from '@deephaven/grid';\nimport { dhEye, dhFilterFilled, dhGraphLineUp, dhTriangleDownSquare, vsClose, vsCloudDownload, vsEdit, vsFilter, vsMenu, vsReply, vsRuby, vsSearch, vsSplitHorizontal, vsSymbolOperator, vsTools } from '@deephaven/icons';\nimport { DateUtils, Formatter, FormatterUtils, TableUtils, isSortDirection } from '@deephaven/jsapi-utils';\nimport { assertNotNull, copyToClipboard, EMPTY_ARRAY, EMPTY_MAP, Pending, PromiseUtils, ValidationError, getOrThrow } from '@deephaven/utils';\nimport { Type as FilterType } from '@deephaven/filters';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport { getFormatColumns } from \"./sidebar/conditional-formatting/ConditionalFormattingUtils.js\";\nimport PendingDataBottomBar from \"./PendingDataBottomBar.js\";\nimport IrisGridCopyHandler from \"./IrisGridCopyHandler.js\";\nimport FilterInputField from \"./FilterInputField.js\";\nimport { CopyCellKeyHandler, ClearFilterKeyHandler, CopyKeyHandler, ReverseKeyHandler } from \"./key-handlers/index.js\";\nimport { IrisGridCellOverflowMouseHandler, IrisGridColumnSelectMouseHandler, IrisGridColumnTooltipMouseHandler, IrisGridContextMenuHandler, IrisGridCopyCellMouseHandler, IrisGridDataSelectMouseHandler, IrisGridPartitionedTableMouseHandler, IrisGridFilterMouseHandler, IrisGridRowTreeMouseHandler, IrisGridSortMouseHandler, IrisGridTokenMouseHandler, PendingMouseHandler } from \"./mousehandlers/index.js\";\nimport ToastBottomBar from \"./ToastBottomBar.js\";\nimport IrisGridMetricCalculator from \"./IrisGridMetricCalculator.js\";\nimport IrisGridModelUpdater from \"./IrisGridModelUpdater.js\";\nimport IrisGridRenderer from \"./IrisGridRenderer.js\";\nimport { createDefaultIrisGridTheme } from \"./IrisGridTheme.js\";\nimport ColumnStatistics from \"./ColumnStatistics.js\";\nimport \"./IrisGrid.css\";\nimport AdvancedFilterCreator from \"./AdvancedFilterCreator.js\";\nimport { Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, DownloadServiceWorkerUtils } from \"./sidebar/index.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport CrossColumnSearch from \"./CrossColumnSearch.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nimport IrisGridPartitionSelector from \"./IrisGridPartitionSelector.js\";\nimport SelectDistinctBuilder from \"./sidebar/SelectDistinctBuilder.js\";\nimport AdvancedSettingsType from \"./sidebar/AdvancedSettingsType.js\";\nimport AdvancedSettingsMenu from \"./sidebar/AdvancedSettingsMenu.js\";\nimport SHORTCUTS from \"./IrisGridShortcuts.js\";\nimport ConditionalFormattingMenu from \"./sidebar/conditional-formatting/ConditionalFormattingMenu.js\";\nimport ConditionalFormatEditor from \"./sidebar/conditional-formatting/ConditionalFormatEditor.js\";\nimport IrisGridCellOverflowModal from \"./IrisGridCellOverflowModal.js\";\nimport GotoRow from \"./GotoRow.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport { IrisGridThemeContext } from \"./IrisGridThemeProvider.js\";\nimport { isMissingPartitionError } from \"./MissingPartitionError.js\";\nimport { NoPastePermissionModal } from \"./NoPastePermissionModal.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGrid');\nvar VIEWPORT_LOADING_DELAY = 500;\nvar UPDATE_DOWNLOAD_THROTTLE = 500;\nvar SET_FILTER_DEBOUNCE = 250;\nvar SEEK_ROW_DEBOUNCE = 250;\nvar SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\nvar DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n});\nvar UNFORMATTED_DATE_PATTERN = \"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z\";\nfunction isEmptyConfig(_ref) {\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = _ref;\n return advancedFilters.size === 0 && aggregationSettings.aggregations.length === 0 && customColumns.length === 0 && quickFilters.size === 0 && !reverse && rollupConfig == null && searchFilter == null && selectDistinctColumns.length === 0 && sorts.length === 0;\n}\nclass IrisGrid extends Component {\n constructor(props) {\n var _model$layoutHints, _model$columns$0$name, _model$columns$;\n super(props);\n _defineProperty(this, \"grid\", void 0);\n _defineProperty(this, \"lastFocusedFilterBarColumn\", void 0);\n _defineProperty(this, \"lastLoadedConfig\", void 0);\n _defineProperty(this, \"tooltip\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"globalColumnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"truncateNumbersWithPound\", void 0);\n _defineProperty(this, \"showEmptyStrings\", void 0);\n _defineProperty(this, \"showNullStrings\", void 0);\n _defineProperty(this, \"showExtraGroupColumn\", void 0);\n // When the loading scrim started/when it should extend to the end of the screen.\n _defineProperty(this, \"loadingScrimStartTime\", void 0);\n _defineProperty(this, \"loadingScrimFinishTime\", void 0);\n _defineProperty(this, \"animationFrame\", void 0);\n _defineProperty(this, \"loadingTimer\", void 0);\n _defineProperty(this, \"tableSaver\", void 0);\n _defineProperty(this, \"crossColumnRef\", void 0);\n _defineProperty(this, \"isAnimating\", void 0);\n _defineProperty(this, \"filterInputRef\", void 0);\n _defineProperty(this, \"gotoRowRef\", void 0);\n _defineProperty(this, \"isCopying\", void 0);\n _defineProperty(this, \"toggleFilterBarAction\", void 0);\n _defineProperty(this, \"toggleSearchBarAction\", void 0);\n _defineProperty(this, \"toggleGotoRowAction\", void 0);\n _defineProperty(this, \"discardAction\", void 0);\n _defineProperty(this, \"commitAction\", void 0);\n _defineProperty(this, \"contextActions\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"slideTransitionRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"bottomTransitionRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"getAdvancedMenuOpenedHandler\", memoize(column => this.handleAdvancedMenuOpened.bind(this, column), {\n max: 100\n }));\n _defineProperty(this, \"getCachedAdvancedFilterMenuActions\", memoize((model, column, advancedFilterOptions, sortDirection, formatter) => /*#__PURE__*/_jsx(AdvancedFilterCreator, {\n model: model,\n column: column,\n onFilterChange: this.handleAdvancedFilterChange,\n onSortChange: this.handleAdvancedFilterSortChange,\n onDone: this.handleAdvancedFilterDone,\n options: advancedFilterOptions,\n sortDirection: sortDirection,\n formatter: formatter,\n tableUtils: this.tableUtils\n }), {\n max: 50\n }));\n _defineProperty(this, \"getCachedOptionItems\", memoize((isChartBuilderAvailable, isCustomColumnsAvailable, isFormatColumnsAvailable, isOrganizeColumnsAvailable, isRollupAvailable, isTotalsAvailable, isSelectDistinctAvailable, isExportAvailable, toggleFilterBarAction, toggleSearchBarAction, toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, canToggleSearch, showGotoRow, hasAdvancedSettings) => {\n var optionItems = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp\n });\n }\n if (isOrganizeColumnsAvailable) {\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Organize Columns',\n icon: dhEye\n });\n }\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Custom Columns',\n icon: vsSplitHorizontal\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action\n });\n return Object.freeze(optionItems);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedHiddenColumns\", memoize((metricCalculator, userColumnWidths) => IrisGridUtils.getHiddenColumns(new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])), {\n max: 1\n }));\n _defineProperty(this, \"getAggregationMap\", memoize((columns, aggregations) => {\n var aggregationMap = {};\n aggregations.forEach(_ref2 => {\n var {\n operation,\n selected,\n invert\n } = _ref2;\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(columns, operation, selected, invert);\n });\n return aggregationMap;\n }, {\n max: 1\n }));\n _defineProperty(this, \"getOperationMap\", memoize((columns, aggregations) => {\n var operationMap = {};\n aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach(_ref3 => {\n var {\n operation,\n selected,\n invert\n } = _ref3;\n AggregationUtils.getOperationColumnNames(columns, operation, selected, invert).forEach(name => {\n var _operationMap$name;\n var newOperations = [...((_operationMap$name = operationMap[name]) !== null && _operationMap$name !== void 0 ? _operationMap$name : []), operation];\n operationMap[name] = Object.freeze(newOperations);\n });\n });\n return operationMap;\n }, {\n max: 1\n }));\n _defineProperty(this, \"getOperationOrder\", memoize(aggregations => aggregations.map(a => a.operation).filter(o => !AggregationUtils.isRollupOperation(o)), {\n max: 1\n }));\n _defineProperty(this, \"getCachedFormatColumns\", memoize((dh, columns, rules) => getFormatColumns(dh, columns, rules), {\n max: 1000\n }));\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n _defineProperty(this, \"getCachedPreviewFormatColumns\", memoize((dh, columns, rulesParam, preview, editIndex) => {\n log.debug('getCachedPreviewFormatColumns', rulesParam, preview, editIndex);\n if (preview !== undefined && editIndex !== undefined) {\n var rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(dh, columns, rules);\n }\n return this.getCachedFormatColumns(dh, columns, rulesParam);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getModelRollupConfig\", memoize((originalColumns, config, aggregationSettings) => IrisGridUtils.getModelRollupConfig(originalColumns, config, aggregationSettings), {\n max: 1\n }));\n _defineProperty(this, \"getModelTotalsConfig\", memoize((columns, config, aggregationSettings) => {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 || (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) > 0) {\n // If we've got rollups, then aggregations are applied as part of that...\n return null;\n }\n\n // Filter out aggregations without any columns actually selected\n var aggregations = aggregationSettings.aggregations.filter(agg => agg.selected.length > 0 || agg.invert);\n if (aggregations.length === 0) {\n // We don't actually have any aggregations set, don't bother\n return null;\n }\n var operationMap = this.getOperationMap(columns, aggregations);\n var operationOrder = this.getOperationOrder(aggregations);\n return {\n operationMap,\n operationOrder,\n showOnTop: aggregationSettings.showOnTop,\n defaultOperation: AggregationOperation.SKIP\n };\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedStateOverride\", memoize((model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown) => ({\n model,\n theme,\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverse,\n rollupConfig,\n isMenuShown\n }), {\n max: 1\n }));\n _defineProperty(this, \"getCachedFilter\", memoize((customFilters, quickFilters, advancedFilters, searchFilter) => [...(customFilters !== null && customFilters !== void 0 ? customFilters : []), ...IrisGridUtils.getFiltersFromFilterMap(quickFilters), ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters), ...(searchFilter !== undefined ? [searchFilter] : [])], {\n max: 1\n }));\n _defineProperty(this, \"getCachedTheme\", memoize((contextTheme, theme, isEditable, floatingRowCount, density) => {\n var _theme$rowFooterWidth;\n // If a theme is available via context, use that as the base theme.\n // If iris-grid is standalone without a context, use the default theme.\n var baseTheme = contextTheme !== null && contextTheme !== void 0 ? contextTheme : createDefaultIrisGridTheme();\n\n // We only show the row footers when we have floating rows for aggregations\n var rowFooterWidth = floatingRowCount > 0 ? (_theme$rowFooterWidth = theme === null || theme === void 0 ? void 0 : theme.rowFooterWidth) !== null && _theme$rowFooterWidth !== void 0 ? _theme$rowFooterWidth : baseTheme.rowFooterWidth : 0;\n var {\n metricCalculator\n } = this.state;\n if (metricCalculator != null) {\n metricCalculator.resetCalculatedColumnWidths();\n metricCalculator.resetCalculatedRowHeights();\n }\n var densityTheme = {};\n if (density === 'compact') {\n densityTheme = baseTheme.density.compact;\n } else if (density === 'spacious') {\n densityTheme = baseTheme.density.spacious;\n }\n return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, baseTheme), densityTheme), theme), {}, {\n autoSelectRow: !isEditable,\n rowFooterWidth\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order), {\n max: 1\n }));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].map(handler => typeof handler === 'function' ? handler(this) : handler), {\n max: 1\n }));\n _defineProperty(this, \"getCachedRenderer\", memoize(rendererProp => rendererProp !== null && rendererProp !== void 0 ? rendererProp : new IrisGridRenderer(), {\n max: 1\n }));\n _defineProperty(this, \"getAlwaysFetchColumns\", memoize((alwaysFetchColumns, columns, movedColumns, floatingLeftColumnCount, floatingRightColumnCount, draggingRange) => {\n var floatingColumns = [];\n for (var i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(i, movedColumns)].name);\n }\n for (var _i = 0; _i < floatingRightColumnCount; _i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(columns.length - 1 - _i, movedColumns)].name);\n }\n if (draggingRange) {\n for (var _i2 = draggingRange[0]; _i2 <= draggingRange[1]; _i2 += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(_i2, movedColumns)].name);\n }\n }\n var columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n return Object.freeze([...columnSet]);\n }, {\n max: 1\n }));\n _defineProperty(this, \"updateSearchFilter\", debounce((searchValue, selectedSearchColumns, columns, invertSearchColumns) => {\n var {\n model\n } = this.props;\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, selectedSearchColumns, columns, invertSearchColumns);\n this.setState({\n searchFilter\n });\n }, SET_FILTER_DEBOUNCE));\n _defineProperty(this, \"showViewportLoading\", throttle(() => {\n var {\n model\n } = this.props;\n var {\n loadingSpinnerShown\n } = this.state;\n if (model.isViewportPending && !loadingSpinnerShown) {\n // We only want to show the viewport loading if the viewport is still loading\n // and we're not already showing a loader for something else\n this.startLoading('Waiting for viewport...', {\n loadingCancelShown: false,\n loadingBlocksGrid: false\n });\n }\n }, VIEWPORT_LOADING_DELAY, {\n leading: false,\n trailing: true\n }));\n // Apply live changes\n _defineProperty(this, \"handleConditionalFormatEditorUpdate\", debounce(conditionalFormatPreview => {\n this.setState({\n conditionalFormatPreview\n });\n }, SET_CONDITIONAL_FORMAT_DEBOUNCE));\n _defineProperty(this, \"handleDownloadProgressUpdate\", throttle((tableDownloadProgress, tableDownloadEstimatedTime) => {\n var {\n tableDownloadStatus\n } = this.state;\n if (tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime\n });\n }\n }, UPDATE_DOWNLOAD_THROTTLE));\n _defineProperty(this, \"getOverflowButtonTooltip\", memoize(overflowButtonTooltipProps => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, overflowButtonTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right']\n }\n }\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: \"View full contents\"\n }, Date.now())\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getExpandCellTooltip\", memoize(expandCellTooltipProps => {\n if (expandCellTooltipProps == null) {\n return null;\n }\n var {\n expandTooltipDisplayValue\n } = this.state;\n var {\n model\n } = this.props;\n var isExpandAllAvailable = isExpandableGridModel(model) && model.isExpandAllAvailable;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, expandCellTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom-start'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsxs(\"div\", {\n style: {\n textAlign: 'left'\n },\n children: [\"Click to \", expandTooltipDisplayValue, \" row\", isExpandAllAvailable && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"br\", {}), ContextActionUtils.isMacPlatform() ? '⌘' : 'Ctrl+', \"Click to expand row and all children\"]\n })]\n })\n }, Date.now())\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getHoverTooltip\", memoize(hoverTooltipProps => {\n if (hoverTooltipProps == null) {\n return null;\n }\n var {\n hoverDisplayValue\n } = this.state;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, hoverTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"link-hover-tooltip\",\n children: hoverDisplayValue\n })\n })\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"handleGotoValueChanged\", input => {\n this.setState({\n gotoValue: input,\n gotoValueManuallyChanged: true\n });\n this.debouncedSeekRow(input);\n });\n _defineProperty(this, \"debouncedSeekRow\", debounce(input => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE));\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(this);\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(this);\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleColumnAlignmentChange = this.handleColumnAlignmentChange.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(this);\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(this);\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(this);\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(this);\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(this);\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(this);\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(this);\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(this);\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(this);\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(this);\n this.handleColumnVisibilityReset = this.handleColumnVisibilityReset.bind(this);\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.handleCloseNoPastePermissionModal = this.handleCloseNoPastePermissionModal.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(this);\n this.handleGotoValueSelectedColumnNameChanged = this.handleGotoValueSelectedColumnNameChanged.bind(this);\n this.handleGotoValueSelectedFilterChanged = this.handleGotoValueSelectedFilterChanged.bind(this);\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.makeQuickFilter = this.makeQuickFilter.bind(this);\n this.setFilterMap = this.setFilterMap.bind(this);\n this.handleFrozenColumnsChanged = this.handleFrozenColumnsChanged.bind(this);\n this.grid = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = EMPTY_ARRAY;\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n this.showEmptyStrings = true;\n this.showNullStrings = true;\n this.showExtraGroupColumn = true;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.tableSaver = null;\n this.crossColumnRef = /*#__PURE__*/React.createRef();\n this.isAnimating = false;\n this.filterInputRef = /*#__PURE__*/React.createRef();\n this.gotoRowRef = /*#__PURE__*/React.createRef();\n this.isCopying = false;\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER\n };\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH\n };\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW\n };\n this.discardAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD\n };\n this.commitAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0 && model.pendingDataErrors.size === 0) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT\n };\n this.contextActions = [this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, this.discardAction, this.commitAction];\n var {\n aggregationSettings: _aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n columnAlignmentMap,\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n partitions,\n partitionConfig,\n model: _model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n rollupConfig: _rollupConfig,\n userColumnWidths: _userColumnWidths,\n userRowHeights,\n showSearchBar: _showSearchBar,\n searchValue: _searchValue,\n selectedSearchColumns: _selectedSearchColumns,\n invertSearchColumns: _invertSearchColumns,\n advancedFilters: _advancedFilters,\n quickFilters: _quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n columnHeaderGroups,\n getMetricCalculator\n } = props;\n var {\n dh: _dh\n } = _model;\n var _keyHandlers = [new CopyCellKeyHandler(this), new ReverseKeyHandler(this), new ClearFilterKeyHandler(this)];\n var _mouseHandlers = [new IrisGridCellOverflowMouseHandler(this), new IrisGridRowTreeMouseHandler(this), new IrisGridTokenMouseHandler(this), new IrisGridColumnSelectMouseHandler(this), new IrisGridColumnTooltipMouseHandler(this), new IrisGridSortMouseHandler(this), new IrisGridFilterMouseHandler(this), new IrisGridContextMenuHandler(this, _dh), new IrisGridDataSelectMouseHandler(this), new PendingMouseHandler(this), new IrisGridPartitionedTableMouseHandler(this), ...(canCopy ? [new IrisGridCopyCellMouseHandler(this)] : [])];\n if (canCopy) {\n _keyHandlers.push(new CopyKeyHandler(this));\n }\n var _movedColumns = movedColumnsProp.length > 0 ? movedColumnsProp : _model.initialMovedColumns;\n var movedRows = movedRowsProp.length > 0 ? movedRowsProp : _model.initialMovedRows;\n var _metricCalculator = getMetricCalculator({\n userColumnWidths: new Map(_userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns: _movedColumns,\n initialColumnWidths: new Map(_model === null || _model === void 0 || (_model$layoutHints = _model.layoutHints) === null || _model$layoutHints === void 0 || (_model$layoutHints = _model$layoutHints.hiddenColumns) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.map(name => [_model.getColumnIndexByName(name), 0]))\n });\n var searchColumns = _selectedSearchColumns !== null && _selectedSearchColumns !== void 0 ? _selectedSearchColumns : [];\n var _searchFilter = CrossColumnSearch.createSearchFilter(_dh, _searchValue, searchColumns, _model.columns, _invertSearchColumns);\n this.tableUtils = new TableUtils(_dh);\n this.mouseHandlers = _mouseHandlers;\n this.keyHandlers = _keyHandlers;\n this.state = {\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator: _metricCalculator,\n metrics: undefined,\n partitionConfig: partitionConfig !== null && partitionConfig !== void 0 ? partitionConfig : partitions && partitions.length ? {\n partitions,\n mode: 'partition'\n } : undefined,\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: _quickFilters ? new Map(_quickFilters) : new Map(),\n advancedFilters: new Map(_advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverse: false,\n customColumns: [],\n selectDistinctColumns,\n // selected range in table\n selectedRanges: [],\n // Current ongoing copy operation\n copyOperation: null,\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false,\n loadingBlocksGrid: false,\n movedColumns: _movedColumns,\n movedRows,\n shownColumnTooltip: null,\n formatter: new Formatter(_dh),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n columnAlignmentMap: new Map(columnAlignmentMap),\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n showSearchBar: _showSearchBar,\n searchFilter: _searchFilter,\n searchValue: _searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns: _invertSearchColumns,\n rollupConfig: _rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings:\n // Pin aggregations to the top if the grid is editable, so that the bottom is reserved for pending rows\n isEditableGridModel(_model) && _model.isEditable ? _objectSpread(_objectSpread({}, _aggregationSettings), {}, {\n showOnTop: true\n }) : _aggregationSettings,\n selectedAggregation: null,\n openOptions: [],\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap !== null && pendingDataMap !== void 0 ? pendingDataMap : new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n showNoPastePermissionModal: false,\n noPastePermissionError: '',\n overflowText: '',\n overflowButtonTooltipProps: null,\n expandCellTooltipProps: null,\n expandTooltipDisplayValue: 'expand',\n hoverTooltipProps: null,\n hoverDisplayValue: '',\n isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueSelectedColumnName: (_model$columns$0$name = (_model$columns$ = _model.columns[0]) === null || _model$columns$ === void 0 ? void 0 : _model$columns$.name) !== null && _model$columns$0$name !== void 0 ? _model$columns$0$name : '',\n gotoValueSelectedFilter: FilterType.eqIgnoreCase,\n gotoValue: '',\n gotoValueManuallyChanged: false,\n columnHeaderGroups: columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : _model.initialColumnHeaderGroups\n };\n }\n componentDidMount() {\n var {\n model\n } = this.props;\n this.initState();\n this.startListening(model);\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts\n } = this.props;\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n var changedInputFilters = inputFilters !== prevProps.inputFilters ? inputFilters.filter(inputFilter => !prevProps.inputFilters.includes(inputFilter)) : [];\n if (changedInputFilters.length > 0) {\n var _advancedSettings$get;\n var {\n advancedSettings\n } = this.props;\n var replaceExistingFilters = (_advancedSettings$get = advancedSettings.get(AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get !== void 0 ? _advancedSettings$get : false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n var {\n loadingScrimStartTime,\n loadingScrimFinishTime\n } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n var now = Date.now();\n var currentTime = now - loadingScrimStartTime;\n var totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n var loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n return {\n loadingScrimProgress\n };\n });\n });\n }\n var {\n openOptions\n } = this.state;\n if (openOptions !== prevState.openOptions) {\n var isAggEditType = option => option.type === OptionType.AGGREGATION_EDIT;\n if (!openOptions.some(isAggEditType) && prevState.openOptions.some(isAggEditType)) {\n this.removeEmptyAggregations();\n }\n }\n this.sendStateChange();\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n this.showViewportLoading.cancel();\n }\n get gridWrapper() {\n var _this$grid$canvasWrap, _this$grid;\n return (_this$grid$canvasWrap = (_this$grid = this.grid) === null || _this$grid === void 0 ? void 0 : _this$grid.canvasWrapper.current) !== null && _this$grid$canvasWrap !== void 0 ? _this$grid$canvasWrap : null;\n }\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMetricState() {\n var _this$grid2;\n var gridMetricState = (_this$grid2 = this.grid) === null || _this$grid2 === void 0 ? void 0 : _this$grid2.getMetricState();\n if (gridMetricState == null) {\n return undefined;\n }\n var {\n advancedFilters,\n hoverSelectColumn,\n isFilterBarShown,\n isMenuShown,\n loadingScrimProgress,\n quickFilters,\n sorts,\n reverse,\n rollupConfig\n } = this.state;\n var {\n model,\n isSelectingColumn\n } = this.props;\n return _objectSpread(_objectSpread({}, gridMetricState), this.getCachedStateOverride(model, this.getTheme(), hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown));\n }\n get renderer() {\n var {\n renderer\n } = this.props;\n return this.getCachedRenderer(renderer);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n getValueForCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n var modelColumn = this.getModelColumn(columnIndex);\n var modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n var value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isDateType(model.columns[modelColumn].type)) {\n // The returned value is just a long value, we should return the value formatted as a full date string\n var {\n formatter\n } = model;\n return dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));\n }\n return value;\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n getModelColumn(columnIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelColumns\n } = metrics;\n if (modelColumns == null) {\n return null;\n }\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n getModelRow(rowIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelRows\n } = metrics;\n if (modelRows == null) {\n return null;\n }\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n getTheme() {\n var _ref4;\n var {\n model,\n theme,\n density\n } = this.props;\n var {\n theme: contextTheme,\n density: contextDensity\n } = this.context;\n return this.getCachedTheme(contextTheme, theme, (_ref4 = isEditableGridModel(model) && model.isEditable) !== null && _ref4 !== void 0 ? _ref4 : false, model.floatingTopRowCount + model.floatingBottomRowCount, density !== null && density !== void 0 ? density : contextDensity);\n }\n getVisibleColumn(modelIndex) {\n var {\n movedColumns\n } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n makeQuickFilter(column, text, timeZone) {\n try {\n return this.tableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(inputFilters) {\n var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n var newAdvancedFilters = replaceExisting ? new Map() : new Map(advancedFilters);\n var newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n var isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(_ref5 => {\n var {\n name,\n type,\n value\n } = _ref5;\n var modelIndex = model.columns.findIndex(_ref6 => {\n var {\n name: columnName,\n type: columnType\n } = _ref6;\n return columnName === name && columnType === type;\n });\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged = this.applyQuickFilter(modelIndex, value, newQuickFilters) || isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(modelIndex, value, quickFilters) {\n var {\n model\n } = this.props;\n var {\n formatter\n } = model;\n var column = model.columns[modelIndex];\n if (value != null && \"\".concat(value).trim().length > 0) {\n var quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n var {\n text\n } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: this.makeQuickFilter(column, value, formatter.timeZone)\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n setAdvancedFilterMap(advancedFilters) {\n this.setState({\n advancedFilters\n });\n }\n setAdvancedFilter(modelIndex, filter, options) {\n log.debug('Setting advanced filter', modelIndex, filter);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref7 => {\n var {\n advancedFilters\n } = _ref7;\n var newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options\n });\n }\n return {\n advancedFilters: newAdvancedFilters\n };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(modelIndex, filter, text) {\n log.debug('Setting quick filter', modelIndex, filter, text);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref8 => {\n var {\n quickFilters\n } = _ref8;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, {\n filter,\n text\n });\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap) {\n var _advancedSettings$get2;\n log.debug('setFilterMap', filterMap);\n var {\n advancedSettings\n } = this.props;\n var clearFiltersOnLinkerFilterUpdate = (_advancedSettings$get2 = advancedSettings.get(AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get2 !== void 0 ? _advancedSettings$get2 : false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n var {\n model\n } = this.props;\n filterMap.forEach((_ref9, columnName) => {\n var {\n columnType,\n filterList\n } = _ref9;\n var column = model.columns.find(c => c.name === columnName && c.type === columnType);\n if (column == null) {\n return;\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var combinedText = IrisGridUtils.combineFiltersFromList(columnType, filterList);\n if (combinedText.length === 0) {\n this.removeQuickFilter(columnIndex);\n } else {\n var {\n formatter\n } = model;\n this.setQuickFilter(columnIndex, this.makeQuickFilter(column, combinedText, formatter.timeZone), \"\".concat(combinedText));\n }\n });\n }\n removeColumnFilter(modelRange) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n var clearRange = Array.isArray(modelRange) ? modelRange : [modelRange, modelRange];\n this.setState(_ref0 => {\n var {\n advancedFilters,\n quickFilters\n } = _ref0;\n var newAdvancedFilters = advancedFilters ? new Map(advancedFilters) : new Map();\n var newQuickFilters = quickFilters ? new Map(quickFilters) : new Map();\n newAdvancedFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newAdvancedFilters.delete(column);\n }\n });\n newQuickFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newQuickFilters.delete(column);\n }\n });\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n };\n });\n }\n removeQuickFilter(modelColumn) {\n this.startLoading('Clearing Filter...', {\n resetRanges: true\n });\n this.setState(_ref1 => {\n var {\n quickFilters\n } = _ref1;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n clearAllFilters() {\n log.debug('Clearing all filters');\n var {\n advancedFilters,\n quickFilters,\n searchFilter\n } = this.state;\n if (quickFilters.size === 0 && advancedFilters.size === 0 && searchFilter === null) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n this.startLoading('Clearing Filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearAllAggregations() {\n log.debug('Clearing all aggregations');\n this.setState({\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS\n });\n }\n clearCrossColumSearch() {\n log.debug('Clearing cross-column search');\n this.setState({\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearGridInputField() {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters() {\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n if (advancedFilters.size === 0 && quickFilters.size === 0) {\n log.debug('No filters to rebuild');\n return;\n }\n var {\n columns,\n formatter\n } = model;\n log.debug('Rebuilding filters');\n var newAdvancedFilters = new Map();\n var newQuickFilters = new Map();\n advancedFilters.forEach((value, key) => {\n var {\n options\n } = value;\n var column = columns[key];\n var filter = this.tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n newAdvancedFilters.set(key, {\n options,\n filter\n });\n });\n quickFilters.forEach((value, key) => {\n var {\n text\n } = value;\n var column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: this.makeQuickFilter(column, text, formatter.timeZone)\n });\n });\n this.startLoading('Rebuilding filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n setFilters(_ref10) {\n var {\n quickFilters,\n advancedFilters\n } = _ref10;\n this.setState({\n quickFilters,\n advancedFilters\n });\n }\n updateFormatterSettings(settings) {\n var _settings$defaultDeci, _settings$defaultInte, _settings$truncateNum, _settings$showEmptySt, _settings$showNullStr, _settings$showExtraGr;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var defaultDecimalFormatOptions = (_settings$defaultDeci = settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions) !== null && _settings$defaultDeci !== void 0 ? _settings$defaultDeci : {};\n var defaultIntegerFormatOptions = (_settings$defaultInte = settings === null || settings === void 0 ? void 0 : settings.defaultIntegerFormatOptions) !== null && _settings$defaultInte !== void 0 ? _settings$defaultInte : {};\n var truncateNumbersWithPound = (_settings$truncateNum = settings === null || settings === void 0 ? void 0 : settings.truncateNumbersWithPound) !== null && _settings$truncateNum !== void 0 ? _settings$truncateNum : false;\n var showEmptyStrings = (_settings$showEmptySt = settings === null || settings === void 0 ? void 0 : settings.showEmptyStrings) !== null && _settings$showEmptySt !== void 0 ? _settings$showEmptySt : true;\n var showNullStrings = (_settings$showNullStr = settings === null || settings === void 0 ? void 0 : settings.showNullStrings) !== null && _settings$showNullStr !== void 0 ? _settings$showNullStr : true;\n var showExtraGroupColumn = (_settings$showExtraGr = settings === null || settings === void 0 ? void 0 : settings.showExtraGroupColumn) !== null && _settings$showExtraGr !== void 0 ? _settings$showExtraGr : true;\n var isColumnFormatChanged = !deepEqual(this.globalColumnFormats, globalColumnFormats);\n var isDateFormattingChanged = !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions);\n var isDecimalFormattingChanged = !deepEqual(this.decimalFormatOptions, settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions);\n var isIntegerFormattingChanged = !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions);\n var isTruncateNumbersChanged = this.truncateNumbersWithPound !== truncateNumbersWithPound;\n var isShowEmptyStringsChanged = this.showEmptyStrings !== showEmptyStrings;\n var isShowNullStringsChanged = this.showNullStrings !== showNullStrings;\n var isShowExtraGroupColumnChanged = this.showExtraGroupColumn !== showExtraGroupColumn;\n if (isColumnFormatChanged || isDateFormattingChanged || isDecimalFormattingChanged || isIntegerFormattingChanged || isTruncateNumbersChanged || isShowEmptyStringsChanged || isShowNullStringsChanged || isShowExtraGroupColumnChanged) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.showEmptyStrings = showEmptyStrings;\n this.showNullStrings = showNullStrings;\n this.showExtraGroupColumn = showExtraGroupColumn;\n this.updateFormatter({}, forceUpdate);\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n updateFormatter(updatedFormats) {\n var _this$globalColumnFor;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var {\n customColumnFormatMap\n } = this.state;\n var {\n model\n } = this.props;\n var update = _objectSpread({\n customColumnFormatMap\n }, updatedFormats);\n var mergedColumnFormats = [...((_this$globalColumnFor = this.globalColumnFormats) !== null && _this$globalColumnFor !== void 0 ? _this$globalColumnFor : []), ...update.customColumnFormatMap.values()];\n var formatter = new Formatter(model.dh, mergedColumnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions, this.truncateNumbersWithPound, this.showEmptyStrings, this.showNullStrings);\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n this.setState(_objectSpread(_objectSpread({}, update), {}, {\n formatter\n }), () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n initState() {\n var {\n model\n } = this.props;\n try {\n if (isPartitionedGridModel(model) && model.isPartitionRequired) {\n this.loadPartitionsTable(model);\n } else {\n this.loadTableState();\n }\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n loadTableState() {\n var {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverse,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n } = this.props;\n var searchColumns = selectedSearchColumns !== null && selectedSearchColumns !== void 0 ? selectedSearchColumns : [];\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, searchColumns, model.columns, invertSearchColumns);\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n var inputFiltersWithValues = inputFilters.filter(inputFilter => inputFilter.value != null);\n this.applyInputFilters(inputFiltersWithValues);\n }\n this.setState({\n sorts,\n reverse: reverse || reverseType === TableUtils.REVERSE_TYPE.POST_SORT,\n customColumns,\n isReady: true,\n searchFilter\n });\n this.initFormatter();\n }\n loadPartitionsTable(model) {\n var _this = this;\n return _asyncToGenerator(function* () {\n try {\n var {\n partitionConfig\n } = _this.state;\n if (!partitionConfig) {\n _this.startLoading('Loading partitions...', {\n loadingCancelShown: false,\n resetRanges: true\n });\n _this.initializePartitionConfig(model);\n }\n _this.setState({\n isSelectingPartition: true\n }, _this.loadTableState);\n } catch (error) {\n if (!PromiseUtils.isCanceled(error)) {\n _this.handleTableLoadError(error);\n }\n }\n })();\n }\n\n /**\n * Initialize the partition config to the default partition.\n */\n initializePartitionConfig(model) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var keyTable = yield _this2.pending.add(model.partitionKeysTable(), resolved => resolved.close());\n var {\n dh\n } = model;\n var sorts = keyTable.columns.map(column => column.sort().desc());\n keyTable.applySort(sorts);\n keyTable.setViewport(0, 0);\n\n // We want to wait for the first UPDATED event instead of just getting viewport data here\n // It's possible that the key table does not have any rows of data yet, so just wait until it does have one\n keyTable.addEventListener(dh.Table.EVENT_UPDATED, event => {\n try {\n var {\n detail: data\n } = event;\n if (data.rows.length === 0) {\n // We received an update and the table is still empty. Stop showing the loading spinner so we know\n _this2.stopLoading();\n return;\n }\n var row = data.rows[0];\n var values = keyTable.columns.map(column => row.get(column));\n var newPartition = {\n partitions: values,\n mode: model.isPartitionAwareSourceTable ? 'partition' : 'keys'\n };\n keyTable.close();\n _this2.setState({\n loadingSpinnerShown: false,\n partitionConfig: newPartition\n });\n } catch (e) {\n keyTable.close();\n log.error('Error getting initial partition config', e);\n }\n });\n })();\n }\n\n /**\n * Selects a partition key from the table based on the provided row index.\n *\n * @param rowIndex The index of the row from which the partition will be selected.\n * @returns A promise that resolves when the partition key has been successfully selected.\n */\n selectPartitionKeyFromTable(rowIndex) {\n var {\n model\n } = this.props;\n assertNotNull(rowIndex);\n if (isPartitionedGridModel(model)) {\n var data = this.getRowDataMap(rowIndex);\n var partitionColumnSet = new Set(model.partitionColumns.map(column => column.name));\n var values = Object.entries(data).filter(_ref11 => {\n var [key, _] = _ref11;\n return partitionColumnSet.has(key);\n }).map(_ref12 => {\n var [key, columnData] = _ref12;\n return columnData.value;\n });\n var newPartition = {\n partitions: values,\n mode: 'partition'\n };\n this.setState({\n isSelectingPartition: true,\n partitionConfig: newPartition\n });\n }\n }\n copyCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n canCopy\n } = this.props;\n if (canCopy) {\n var value = String(this.getValueForCell(columnIndex, rowIndex, rawValue));\n copyToClipboard(value).catch(e => log.error('Unable to copy cell', e));\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n copyColumnHeader(columnIndex) {\n var columnDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (columnIndex === null) {\n return;\n }\n var {\n canCopy\n } = this.props;\n var {\n movedColumns\n } = this.state;\n if (canCopy) {\n var copyOperation = {\n columnIndex,\n columnDepth,\n movedColumns\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyColumnHeader for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(ranges) {\n var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var formatValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var error = arguments.length > 3 ? arguments[3] : undefined;\n var {\n model,\n canCopy\n } = this.props;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n if (canCopy) {\n var copyOperation = {\n ranges: GridRange.boundedRanges(ranges, model.columnCount, model.rowCount),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n startLoading(loadingText) {\n var {\n resetRanges = false,\n loadingCancelShown = true,\n loadingBlocksGrid = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.setState({\n loadingText,\n loadingCancelShown,\n loadingBlocksGrid\n });\n var theme = this.getTheme();\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n top: 0\n }, true);\n }\n if (this.loadingScrimStartTime == null) {\n var _this$gridWrapper$get, _this$gridWrapper;\n var {\n minScrimTransitionTime,\n maxScrimTransitionTime\n } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n var height = (_this$gridWrapper$get = (_this$gridWrapper = this.gridWrapper) === null || _this$gridWrapper === void 0 ? void 0 : _this$gridWrapper.getBoundingClientRect().height) !== null && _this$gridWrapper$get !== void 0 ? _this$gridWrapper$get : 0;\n var scrimTransitionTime = Math.max(minScrimTransitionTime, Math.min(height / 2, maxScrimTransitionTime));\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime = this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n stopLoading() {\n this.showViewportLoading.cancel();\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false\n });\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback() {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.lastLoadedConfig;\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverse: false,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: []\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback() {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n startListening(model) {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.addEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.addEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n model.addEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n stopListening(model) {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.removeEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.removeEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n model.removeEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n focus() {\n var _this$grid3;\n (_this$grid3 = this.grid) === null || _this$grid3 === void 0 || _this$grid3.focus();\n }\n focusFilterBar(column) {\n var {\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n var {\n columnCount\n } = model;\n var modelColumn = GridUtils.getModelIndex(column, movedColumns);\n if (column == null || column < 0 || columnCount <= column || !model.isFilterable(modelColumn)) {\n this.setState({\n focusedFilterBarColumn: null\n });\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n left,\n rightVisible,\n lastLeft\n } = metrics;\n if (column < left) {\n var _this$grid4;\n (_this$grid4 = this.grid) === null || _this$grid4 === void 0 || _this$grid4.setViewState({\n left: column\n }, true);\n } else if (rightVisible < column) {\n var _this$grid5;\n var metricState = this.getMetricState();\n assertNotNull(metricState);\n var newLeft = metricCalculator.getLastLeft(metricState, column, metricCalculator.getVisibleWidth(metricState));\n (_this$grid5 = this.grid) === null || _this$grid5 === void 0 || _this$grid5.setViewState({\n left: Math.min(newLeft, lastLeft),\n leftOffset: 0\n }, true);\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({\n focusedFilterBarColumn: column,\n isFilterBarShown: true\n });\n }\n hideColumnByVisibleIndex(columnVisibleIndex) {\n var _this$grid6;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);\n (_this$grid6 = this.grid) === null || _this$grid6 === void 0 || _this$grid6.forceUpdate();\n }\n freezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('freezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.add(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size - 1, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n unFreezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('unfreezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.delete(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size + model.frontColumns.length, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n\n /**\n * Updates the entire list of frozen columns.\n * Used by VisibilityOrderingBuilder.\n * @param frozenColumns The new list of frozen columns\n */\n handleFrozenColumnsChanged(frozenColumns) {\n this.setState({\n frozenColumns\n });\n }\n toggleExpandColumn(modelIndex, expandDescendants) {\n log.debug2('Toggle expand column', modelIndex);\n var {\n model\n } = this.props;\n if (isExpandableColumnGridModel(model) && model.hasExpandableColumns) {\n model.setColumnExpanded(modelIndex, !model.isColumnExpanded(modelIndex), expandDescendants);\n }\n }\n expandAllColumns() {\n log.debug2('Expand all columns');\n var {\n model\n } = this.props;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.expandAllColumns();\n }\n }\n collapseAllColumns() {\n log.debug2('Collapse all columns');\n var {\n model\n } = this.props;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.collapseAllColumns();\n }\n }\n handleColumnVisibilityChanged(modelIndexes, isVisible) {\n var _this$grid7;\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n var defaultWidth = metricCalculator.initialColumnWidths.get(modelIndex);\n var calculatedWidth = metrics.calculatedColumnWidths.get(modelIndex);\n\n // If we haven't scrolled to the column, the calculated width will be undefined.\n // This means the function was triggered by the visibility ordering menu,\n // so just reset the column width to default.\n if (defaultWidth !== calculatedWidth && calculatedWidth != null) {\n metricCalculator.setColumnWidth(modelIndex, calculatedWidth);\n } else {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n (_this$grid7 = this.grid) === null || _this$grid7 === void 0 || _this$grid7.forceUpdate();\n }\n handleColumnVisibilityReset() {\n var _model$layoutHints$fr, _model$layoutHints2;\n var {\n metricCalculator\n } = this.state;\n var {\n model\n } = this.props;\n metricCalculator.resetAllColumnWidths();\n this.handleMovedColumnsChanged(model.initialMovedColumns);\n this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);\n this.setState({\n frozenColumns: (_model$layoutHints$fr = (_model$layoutHints2 = model.layoutHints) === null || _model$layoutHints2 === void 0 ? void 0 : _model$layoutHints2.frozenColumns) !== null && _model$layoutHints$fr !== void 0 ? _model$layoutHints$fr : EMPTY_ARRAY\n });\n }\n handleCrossColumnSearch(searchValue, selectedSearchColumns, invertSearchColumns) {\n var {\n model\n } = this.props;\n this.startLoading('Searching...');\n this.updateSearchFilter(searchValue, selectedSearchColumns, model.columns, invertSearchColumns);\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n });\n }\n handleAnimationLoop() {\n var _this$grid8;\n (_this$grid8 = this.grid) === null || _this$grid8 === void 0 || _this$grid8.updateCanvas();\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n handleAnimationStart() {\n log.debug2('handleAnimationStart');\n this.isAnimating = true;\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n handleAnimationEnd() {\n log.debug2('handleAnimationEnd');\n this.isAnimating = false;\n }\n handlePartitionChange(partitionConfig) {\n this.startLoading('Partitioning...');\n var {\n partitionConfig: prevConfig\n } = this.state;\n if (prevConfig !== partitionConfig) {\n this.setState({\n partitionConfig\n });\n }\n }\n handleTableLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n var {\n onError\n } = this.props;\n onError(error);\n }\n handleViewportUpdated() {\n var {\n model\n } = this.props;\n var {\n loadingText,\n loadingSpinnerShown\n } = this.state;\n var loadingMessage = 'Waiting for viewport...';\n\n // pending and no timer already exists\n if (model.isViewportPending && !loadingSpinnerShown) {\n this.showViewportLoading();\n } else if (loadingText === loadingMessage && !model.isViewportPending) {\n // extra conditions because timeout might get cleared by update\n this.stopLoading();\n }\n }\n showAllColumns() {\n var _this$grid9;\n var {\n metricCalculator\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var entries = [...userColumnWidths.entries()];\n for (var i = 0; i < entries.length; i += 1) {\n var [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n (_this$grid9 = this.grid) === null || _this$grid9 === void 0 || _this$grid9.forceUpdate();\n }\n\n /**\n * Updates grid metrics after model columns have changed\n * to keep Grid and IrisGrid metrics in sync since metrics are stored in both places.\n */\n updateMetrics() {\n var _this$grid0;\n this.setState({\n metrics: (_this$grid0 = this.grid) === null || _this$grid0 === void 0 ? void 0 : _this$grid0.updateMetrics()\n });\n }\n toggleSort(columnIndex, addToExisting) {\n log.info('Toggling sort for column', columnIndex);\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n var {\n sorts: currentSorts\n } = this.state;\n var sorts = TableUtils.toggleSortForColumn(currentSorts, model.columns, modelColumn, addToExisting);\n this.updateSorts(sorts);\n } else {\n log.debug('Column type was not sortable', model.columns[columnIndex]);\n }\n }\n updateSorts(sorts) {\n var _this$grid1;\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid1 = this.grid) === null || _this$grid1 === void 0 || _this$grid1.forceUpdate();\n }\n sortColumn(modelColumn) {\n var _this$grid10;\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TableUtils.sortDirection.none;\n var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n assertNotNull(modelColumn);\n var {\n model\n } = this.props;\n var sorts = TableUtils.sortColumn(model.sort, model.columns, modelColumn, direction, isAbs, addToExisting);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid10 = this.grid) === null || _this$grid10 === void 0 || _this$grid10.forceUpdate();\n }\n reverse(reverse) {\n var _this$grid11;\n this.startLoading('Reversing...');\n this.setState({\n reverse\n });\n (_this$grid11 = this.grid) === null || _this$grid11 === void 0 || _this$grid11.forceUpdate();\n }\n isReversible() {\n var {\n model\n } = this.props;\n return model.isReversible;\n }\n toggleFilterBar() {\n var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;\n var {\n isFilterBarShown\n } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({\n isFilterBarShown\n });\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n var columnIndex = 0;\n var {\n model\n } = this.props;\n var {\n columnCount\n } = model;\n for (var i = 0; i < columnCount; i += 1) {\n var modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n var column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n var _this$grid12;\n (_this$grid12 = this.grid) === null || _this$grid12 === void 0 || _this$grid12.focus();\n }\n }\n isTableSearchAvailable() {\n var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;\n var {\n model,\n canToggleSearch\n } = this.props;\n var {\n dh\n } = model;\n var searchDisplayMode = model === null || model === void 0 || (_model$layoutHints3 = model.layoutHints) === null || _model$layoutHints3 === void 0 ? void 0 : _model$layoutHints3.searchDisplayMode;\n if (searchDisplayMode === ((_dh$SearchDisplayMode = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode === void 0 ? void 0 : _dh$SearchDisplayMode.SEARCH_DISPLAY_HIDE)) {\n return false;\n }\n if (searchDisplayMode === ((_dh$SearchDisplayMode2 = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode2 === void 0 ? void 0 : _dh$SearchDisplayMode2.SEARCH_DISPLAY_SHOW)) {\n return true;\n }\n return canToggleSearch;\n }\n toggleSearchBar() {\n var {\n showSearchBar\n } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n var update = !showSearchBar;\n this.setState({\n showSearchBar: update\n }, () => {\n var _this$crossColumnRef;\n if (update && (_this$crossColumnRef = this.crossColumnRef) !== null && _this$crossColumnRef !== void 0 && _this$crossColumnRef.current) {\n var _this$crossColumnRef2;\n (_this$crossColumnRef2 = this.crossColumnRef) === null || _this$crossColumnRef2 === void 0 || _this$crossColumnRef2.current.focus();\n } else {\n var _this$grid13;\n (_this$grid13 = this.grid) === null || _this$grid13 === void 0 || _this$grid13.focus();\n }\n });\n }\n toggleGotoRow() {\n var _this$grid14, _this$grid15;\n var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var {\n isGotoShown\n } = this.state;\n if (row || value) {\n var _this$gotoRowRef$curr;\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n this.focusRowInGrid(row);\n (_this$gotoRowRef$curr = this.gotoRowRef.current) === null || _this$gotoRowRef$curr === void 0 || _this$gotoRowRef$curr.focus();\n return;\n }\n var cursorRow = (_this$grid14 = this.grid) === null || _this$grid14 === void 0 ? void 0 : _this$grid14.state.cursorRow;\n var cursorColumn = (_this$grid15 = this.grid) === null || _this$grid15 === void 0 ? void 0 : _this$grid15.state.cursorColumn;\n if (cursorRow == null || cursorColumn == null) {\n // if a cell is not selected / grid is not rendered\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n return;\n }\n // if a row is selected\n var {\n model\n } = this.props;\n var {\n name,\n type\n } = model.columns[cursorColumn];\n var cellValue = model.valueForCell(cursorColumn, cursorRow);\n var text = IrisGridUtils.convertValueToText(cellValue, type);\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: \"\".concat(cursorRow + 1),\n gotoValue: text,\n gotoValueSelectedColumnName: name,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n commitPending() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var _document;\n var {\n model\n } = _this3.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n var {\n pendingSavePromise\n } = _this3.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n var containsGridCellInputField = (_document = document) === null || _document === void 0 || (_document = _document.activeElement) === null || _document === void 0 ? void 0 : _document.classList.contains('grid-cell-input-field');\n if (containsGridCellInputField != null && containsGridCellInputField) {\n var _this3$grid;\n if (document.activeElement != null && document.activeElement.classList.contains('error')) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n (_this3$grid = _this3.grid) === null || _this3$grid === void 0 || _this3$grid.focus();\n }\n var newPendingSavePromise = _this3.pending.add(model.commitPending()).then(() => {\n _this3.setState({\n pendingSaveError: null,\n pendingSavePromise: null\n });\n }).catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n _this3.setState({\n pendingSaveError: err,\n pendingSavePromise: null\n });\n }\n });\n _this3.setState({\n pendingSavePromise: newPendingSavePromise\n });\n return newPendingSavePromise;\n })();\n }\n discardPending() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var {\n pendingSavePromise\n } = _this4.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n _this4.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map()\n });\n })();\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column) {\n var {\n onColumnSelected\n } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Get the row data map for a given row and notifies the listener\n */\n selectData(columnIndex, rowIndex) {\n var dataMap = this.getRowDataMap(rowIndex);\n var {\n onDataSelected\n } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n /**\n * Get the data map for the given row\n * @param rowIndex Row to get the data map for\n * @returns Data map for the row\n */\n getRowDataMap(rowIndex) {\n var _this5 = this;\n var {\n model\n } = this.props;\n var {\n columns,\n groupedColumns\n } = model;\n var dataMap = {};\n var _loop = function _loop() {\n var column = columns[i];\n var {\n name,\n type\n } = column;\n var value = model.valueForCell(i, rowIndex);\n var text = model.textForCell(i, rowIndex);\n var visibleIndex = _this5.getVisibleColumn(i);\n var isExpandable = isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n var isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = {\n value,\n text,\n type,\n isGrouped,\n isExpandable,\n visibleIndex\n };\n };\n for (var i = 0; i < columns.length; i += 1) {\n _loop();\n }\n return dataMap;\n }\n handleAdvancedFilterChange(column, filter, options) {\n var {\n model\n } = this.props;\n var index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n handleAdvancedFilterSortChange(column, direction) {\n var _this$grid16;\n var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var columnName = model.columns[columnIndex].name;\n var oldSort = TableUtils.getSortForColumn(model.sort, columnName);\n var newSort = null;\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n var sorts = TableUtils.setSortForColumn(model.sort, columnName, newSort, addToExisting);\n log.info('Setting table sorts', sorts);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid16 = this.grid) === null || _this$grid16 === void 0 || _this$grid16.forceUpdate();\n }\n handleAdvancedFilterDone() {\n var _this$grid17;\n (_this$grid17 = this.grid) === null || _this$grid17 === void 0 || _this$grid17.focus();\n }\n handleAdvancedMenuOpened(column) {\n this.setState({\n shownAdvancedFilter: column\n });\n }\n handleGotoRowOpened() {\n this.setState({\n isGotoShown: true,\n gotoValueManuallyChanged: false\n });\n }\n handleGotoRowClosed() {\n this.setState({\n isGotoShown: false,\n gotoValueManuallyChanged: false\n });\n }\n handleAdvancedMenuClosed(columnIndex) {\n var _this$filterInputRef;\n var {\n focusedFilterBarColumn,\n isFilterBarShown\n } = this.state;\n if (isFilterBarShown && focusedFilterBarColumn === columnIndex && ((_this$filterInputRef = this.filterInputRef) === null || _this$filterInputRef === void 0 ? void 0 : _this$filterInputRef.current) !== null) {\n var _this$filterInputRef2;\n (_this$filterInputRef2 = this.filterInputRef) === null || _this$filterInputRef2 === void 0 || _this$filterInputRef2.current.focus();\n this.setState({\n shownAdvancedFilter: null\n });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null\n });\n }\n }\n handleCancel() {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange() {\n // TODO: IDS-4242 Update Chart Preview\n }\n handleChartCreate(settings) {\n var {\n model,\n onCreateChart\n } = this.props;\n onCreateChart(settings, model);\n }\n handleGridError(error) {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n })\n });\n }\n handleFilterBarChange(value) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref13 => {\n var {\n focusedFilterBarColumn,\n quickFilters\n } = _ref13;\n var newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n var modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n handleFilterBarDone() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (setGridFocus) {\n var _this$grid18;\n (_this$grid18 = this.grid) === null || _this$grid18 === void 0 || _this$grid18.focus();\n }\n if (defocusInput) {\n this.setState({\n focusedFilterBarColumn: null\n });\n }\n }\n handleFilterBarTab(backward) {\n var {\n focusedFilterBarColumn\n } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n handleFormatSelection(modelIndex, selectedFormat) {\n var {\n model\n } = this.props;\n var column = model.columns[modelIndex];\n var {\n customColumnFormatMap: prevCustomColumnFormatMap\n } = this.state;\n var customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n if (selectedFormat != null) {\n var normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n var columnFormattingRule = Formatter.makeColumnFormattingRule(normalizedType, column.name, selectedFormat);\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n this.updateFormatter({\n customColumnFormatMap\n });\n }\n handleColumnAlignmentChange(modelIndex, alignment) {\n var {\n model\n } = this.props;\n var column = model.columns[modelIndex];\n this.setState(_ref14 => {\n var {\n columnAlignmentMap = EMPTY_MAP\n } = _ref14;\n var newColumnAlignmentMap = new Map(columnAlignmentMap);\n if (alignment != null) {\n newColumnAlignmentMap.set(column.name, alignment);\n } else {\n newColumnAlignmentMap.delete(column.name);\n }\n return {\n columnAlignmentMap: newColumnAlignmentMap\n };\n });\n }\n handleMenu(e) {\n e.stopPropagation();\n this.setState({\n isMenuShown: true\n });\n }\n handleMenuClose() {\n this.setState({\n isMenuShown: false,\n openOptions: []\n });\n }\n handleMenuBack() {\n this.setState(_ref15 => {\n var {\n openOptions\n } = _ref15;\n var newOptions = [...openOptions];\n newOptions.pop();\n return {\n openOptions: newOptions\n };\n });\n }\n handleMenuSelect(option) {\n this.setState(_ref16 => {\n var {\n openOptions\n } = _ref16;\n return {\n openOptions: [...openOptions, option]\n };\n });\n }\n handleRequestFailed(event) {\n var {\n detail: error\n } = event;\n log.error('request failed:', error);\n this.stopLoading();\n var {\n partitionConfig\n } = this.state;\n if (isMissingPartitionError(error) && partitionConfig != null) {\n // We'll try loading the initial partition again\n this.startLoading('Reloading partition...', {\n resetRanges: true\n });\n this.setState({\n partitionConfig: undefined\n }, () => {\n this.initState();\n });\n } else if (this.canRollback()) {\n this.startLoading('Rolling back changes...', {\n resetRanges: true\n });\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n var {\n onError\n } = this.props;\n onError(new Error(\"Error displaying table: \".concat(error)));\n }\n }\n handleUpdate() {\n var _this$grid19;\n log.debug2('Received model update');\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.state;\n var config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n };\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n (_this$grid19 = this.grid) === null || _this$grid19 === void 0 || _this$grid19.forceUpdate();\n this.stopLoading();\n }\n handleTableChanged() {\n var {\n model\n } = this.props;\n // movedColumns reset triggers metricCalculator update in the Grid component\n this.setState({\n movedColumns: model.initialMovedColumns\n });\n }\n handleViewChanged(metrics) {\n var _this$grid$state, _this$grid20;\n var {\n model\n } = this.props;\n var {\n selectionEndRow = 0\n } = (_this$grid$state = (_this$grid20 = this.grid) === null || _this$grid20 === void 0 ? void 0 : _this$grid20.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {};\n var pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n var {\n bottomViewport\n } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n var bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(0, bottomViewport - (model.rowCount - model.pendingRowCount) - model.floatingTopRowCount - model.floatingBottomRowCount - 1);\n }\n }\n this.setState({\n metrics,\n pendingRowCount\n });\n }\n handleSelectionChanged(selectedRanges) {\n assertNotNull(selectedRanges);\n var {\n onSelectionChanged\n } = this.props;\n var {\n copyOperation\n } = this.state;\n this.setState({\n selectedRanges\n });\n if (copyOperation != null) {\n this.setState({\n copyOperation: null\n });\n }\n\n // We get 2 identical ranges here,\n // but consolidating in `Grid#moveSelection` causes\n // deselection to break, so just consolidate here.\n // This will only update the goto row input for row index\n if (GridRange.rowCount(GridRange.consolidate(selectedRanges)) === 1 && selectedRanges[0].startRow != null) {\n this.setState({\n gotoRow: \"\".concat(selectedRanges[0].startRow + 1)\n });\n }\n onSelectionChanged(selectedRanges);\n }\n handleMovedColumnsChanged(movedColumns, onChangeApplied) {\n this.setState({\n movedColumns\n }, onChangeApplied);\n }\n handleHeaderGroupsChanged(columnHeaderGroups) {\n var {\n model\n } = this.props;\n var {\n columnHeaderGroups: prevColumnHeaderGroups\n } = this.state;\n if (prevColumnHeaderGroups === columnHeaderGroups) {\n return;\n }\n this.setState({\n // undo/redo will pass already parsed groups\n // Parsing them again causes a loop with undo/redo that makes it unusable\n columnHeaderGroups: columnHeaderGroups.every(group => isColumnHeaderGroup(group) && group.isValid()) ? columnHeaderGroups : IrisGridUtils.parseColumnHeaderGroups(model, columnHeaderGroups).groups\n }, () => {\n var _this$grid21;\n return (_this$grid21 = this.grid) === null || _this$grid21 === void 0 ? void 0 : _this$grid21.forceUpdate();\n });\n }\n handleTooltipRef(tooltip) {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n this.tooltip = tooltip;\n }\n handleConditionalFormatsChange(conditionalFormats) {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({\n conditionalFormats\n });\n }\n handleConditionalFormatCreate() {\n log.debug('Create new conditional format');\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Create Formatting Rule\"\n }],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined\n });\n }\n handleConditionalFormatEdit(index) {\n log.debug('Edit conditional format', index);\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Edit Formatting Rule\"\n }],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: _objectSpread({}, conditionalFormats[index])\n });\n }\n handleConditionalFormatEditorSave(config) {\n log.debug('Save conditional format changes', config);\n this.setState(state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n var conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return {\n conditionalFormats\n };\n }, () => {\n this.handleMenuBack();\n });\n }\n handleConditionalFormatEditorCancel() {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({\n conditionalFormatEditIndex: null\n });\n }\n handleUpdateCustomColumns(customColumns) {\n log.info(\"handleUpdateCustomColumns:\", customColumns);\n var {\n model\n } = this.props;\n var {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns\n } = this.state;\n var {\n columns\n } = model;\n var oldCustomColumns = model.customColumns.map(customColumn => \"\".concat(customColumn));\n var removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(oldCustomColumns, customColumns);\n if (removedColumnNames.length > 0) {\n var newSorts = IrisGridUtils.removeSortsInColumns(sorts, removedColumnNames);\n var newQuickFilters = IrisGridUtils.removeFiltersInColumns(columns, quickFilters, removedColumnNames);\n var newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(columns, advancedFilters, removedColumnNames);\n var newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames);\n var newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames);\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({\n sorts: newSorts\n });\n }\n if (newQuickFilters.size !== quickFilters.size || newAdvancedFilters.size !== advancedFilters.size) {\n log.debug(\"removing filters from removed custom columns...\");\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\"change moved columns for removed custom columns\", newMovedColumns);\n this.setState({\n movedColumns: newMovedColumns\n });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\"change selectDistinct columns for removed custom columns\", newMovedColumns);\n this.setState({\n selectDistinctColumns: newSelectDistinctColumns\n });\n }\n }\n this.setState({\n customColumns\n });\n if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\n }\n handleCustomColumnsChanged() {\n log.debug('Model columns changed');\n var {\n isReady\n } = this.state;\n if (isReady) {\n this.updateMetrics();\n\n // Make sure stopLoading() is called after the updateMetrics call,\n // otherwise IrisGridModelUpdater queues an extra setViewport based on old metrics.\n this.stopLoading();\n } else {\n this.loadTableState();\n }\n }\n handlePendingCommitClicked() {\n return this.commitPending();\n }\n handlePendingDiscardClicked() {\n return this.discardPending();\n }\n handlePendingDataUpdated() {\n var _this$grid22;\n log.debug('pending data updated');\n var {\n model\n } = this.props;\n var {\n pendingDataMap,\n pendingDataErrors\n } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null\n });\n (_this$grid22 = this.grid) === null || _this$grid22 === void 0 || _this$grid22.forceUpdate();\n }\n handleResizeColumn(modelIndex) {\n var _this$grid23;\n var {\n metrics,\n metricCalculator\n } = this.state;\n if (!metrics) throw new Error('Metrics not set');\n var contentWidth = getOrThrow(metrics.contentColumnWidths, modelIndex);\n var userWidths = metricCalculator.getUserColumnWidths();\n if (userWidths.has(modelIndex)) {\n metricCalculator.resetColumnWidth(modelIndex);\n metricCalculator.setCalculatedColumnWidth(modelIndex, contentWidth);\n } else {\n metricCalculator.setColumnWidth(modelIndex, contentWidth);\n }\n (_this$grid23 = this.grid) === null || _this$grid23 === void 0 || _this$grid23.forceUpdate();\n }\n handleResizeAllColumns() {\n var _this$grid24;\n var {\n metrics,\n metricCalculator\n } = this.state;\n if (!metrics) throw new Error('Metrics not set');\n var allColumns = [...metrics.allColumnWidths.entries()];\n var visibleColumns = allColumns.filter(_ref17 => {\n var [_, width] = _ref17;\n return width !== 0;\n }).map(_ref18 => {\n var [modelIndex] = _ref18;\n return modelIndex;\n });\n var contentWidths = metrics.contentColumnWidths;\n var userWidths = metricCalculator.getUserColumnWidths();\n var manualColumns = visibleColumns.filter(modelIndex => userWidths.has(modelIndex));\n if (visibleColumns.length === manualColumns.length) {\n // All columns are manually sized, flip all to auto resize\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var modelIndex = visibleColumns[i];\n var contentWidth = getOrThrow(contentWidths, modelIndex);\n metricCalculator.resetColumnWidth(modelIndex);\n metricCalculator.setCalculatedColumnWidth(modelIndex, contentWidth);\n }\n } else {\n // Flip all to manual sized\n for (var _i3 = 0; _i3 < visibleColumns.length; _i3 += 1) {\n var _modelIndex = visibleColumns[_i3];\n var _contentWidth = getOrThrow(contentWidths, _modelIndex);\n metricCalculator.setColumnWidth(_modelIndex, _contentWidth);\n }\n }\n (_this$grid24 = this.grid) === null || _this$grid24 === void 0 || _this$grid24.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n * @param added The aggregations that were added\n * @param removed The aggregations that were removed\n */\n handleAggregationsChange(aggregationSettings) {\n var _rollupConfig$columns, _rollupConfig$columns2;\n var added = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var removed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n log.debug('handleAggregationsChange', aggregationSettings, added, removed);\n var {\n rollupConfig\n } = this.state;\n var isRollup = ((_rollupConfig$columns = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns2 = rollupConfig.columns) === null || _rollupConfig$columns2 === void 0 ? void 0 : _rollupConfig$columns2.length) !== null && _rollupConfig$columns !== void 0 ? _rollupConfig$columns : 0) > 0;\n // Do not start loading if this is rollup and added / removed aggregations are prohibited for rollups\n var changes = [...added, ...removed];\n var shouldStartLoading = !(isRollup && changes.length > 0 && changes.every(op => AggregationUtils.isRollupProhibited(op)));\n if (shouldStartLoading) {\n this.startLoading(\"Aggregating \".concat(aggregationSettings.aggregations.map(a => a.operation).join(', '), \"...\"));\n }\n this.setState({\n aggregationSettings\n });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation) {\n var _rollupConfig$columns3, _rollupConfig$columns4;\n log.debug('handleAggregationChange', aggregation);\n var {\n rollupConfig\n } = this.state;\n var isRollup = ((_rollupConfig$columns3 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns4 = rollupConfig.columns) === null || _rollupConfig$columns4 === void 0 ? void 0 : _rollupConfig$columns4.length) !== null && _rollupConfig$columns3 !== void 0 ? _rollupConfig$columns3 : 0) > 0;\n // Do not start loading if this is rollup and the aggregation is prohibited for rollups\n var shouldStartLoading = !(isRollup && AggregationUtils.isRollupProhibited(aggregation.operation));\n if (shouldStartLoading) {\n this.startLoading(\"Aggregating \".concat(aggregation.operation, \"...\"));\n }\n this.setState(_ref19 => {\n var {\n aggregationSettings\n } = _ref19;\n return {\n selectedAggregation: aggregation,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: aggregationSettings.aggregations.map(a => a.operation === aggregation.operation ? aggregation : a)\n })\n };\n });\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation) {\n log.debug('handleAggregationEdit', aggregation);\n var {\n openOptions\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.AGGREGATION_EDIT,\n title: \"Edit Columns to \".concat(aggregation.operation)\n }],\n selectedAggregation: aggregation\n });\n }\n handleRollupChange(rollupConfig) {\n var _rollupConfig$columns5, _rollupConfig$columns6;\n log.info('Rollup change', rollupConfig);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.startLoading(\"Grouping by columns \".concat((_rollupConfig$columns5 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns6 = rollupConfig.columns) === null || _rollupConfig$columns6 === void 0 ? void 0 : _rollupConfig$columns6.join(', ')) !== null && _rollupConfig$columns5 !== void 0 ? _rollupConfig$columns5 : '', \"...\"));\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: EMPTY_ARRAY,\n frozenColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverse: false,\n selectDistinctColumns: EMPTY_ARRAY\n });\n }\n handleSelectDistinctChanged(columnNames) {\n log.debug('SelectDistinct change', columnNames);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.clearAllAggregations();\n this.startLoading(\"Selecting distinct values in \".concat(columnNames.length > 0 ? columnNames.join(', ') : '', \"...\"));\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverse: false\n });\n }\n handleDownloadTableStart() {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING\n });\n } else {\n log.error('Attempted to handleDownloadTableStart for user without download CSV permission.');\n }\n }\n handleDownloadTable(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n log.info('start table downloading', fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n };\n });\n } else {\n log.error('Attempted to handleDownloadTable for user without download CSV permission.');\n }\n }\n\n /**\n * Aggregation editing has completed. Need to filter out any aggregations that have no columns selected\n */\n removeEmptyAggregations() {\n log.debug('removeEmptyAggregations');\n this.setState(_ref20 => {\n var {\n aggregationSettings\n } = _ref20;\n var {\n aggregations\n } = aggregationSettings;\n var newAggregations = aggregations.filter(a => a.selected.length > 0 || a.invert);\n if (newAggregations.length !== aggregations.length) {\n return {\n selectedAggregation: null,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: newAggregations\n })\n };\n }\n return {\n selectedAggregation: null,\n aggregationSettings\n };\n });\n }\n seekRow(inputString) {\n var _arguments = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var _this6$grid;\n var isBackwards = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter\n } = _this6.state;\n var {\n model\n } = _this6.props;\n var {\n dh\n } = model;\n if (!model.isSeekRowAvailable) {\n return;\n }\n if (inputString === '') {\n return;\n }\n var selectedColumn = IrisGridUtils.getColumnByName(model.columns, selectedColumnName);\n if (selectedColumn === undefined) {\n return;\n }\n var searchFromRow = (_this6$grid = _this6.grid) === null || _this6$grid === void 0 ? void 0 : _this6$grid.state.cursorRow;\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n var isContains = gotoValueSelectedFilter === FilterType.contains || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n var isIgnoreCase = gotoValueSelectedFilter === FilterType.eqIgnoreCase || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n try {\n var _this6$grid2;\n var {\n formatter\n } = model;\n var columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n var rowIndex;\n switch (columnDataType) {\n case TableUtils.dataType.CHAR:\n case TableUtils.dataType.STRING:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, isIgnoreCase, isContains, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DATETIME:\n {\n var [startDate] = DateUtils.parseDateRange(dh, inputString, formatter.timeZone);\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.DATETIME, startDate, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n {\n if (!TableUtils.isBigDecimalType(selectedColumn.type) && !TableUtils.isBigIntegerType(selectedColumn.type)) {\n var inputValue = parseInt(inputString, 10);\n if (inputString === '-Infinity') {\n inputValue = Number.NEGATIVE_INFINITY;\n } else if (inputString === 'Infinity') {\n inputValue = Number.POSITIVE_INFINITY;\n }\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.NUMBER, inputValue, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n } else {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n break;\n }\n default:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, _this6.tableUtils.makeValue(selectedColumn.type, inputString, formatter.timeZone), undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n }\n (_this6$grid2 = _this6.grid) === null || _this6$grid2 === void 0 || _this6$grid2.setFocusRow(rowIndex);\n _this6.setState({\n gotoValueError: ''\n });\n } catch (e) {\n _this6.setState({\n gotoValueError: 'invalid input'\n });\n }\n })();\n }\n handleCancelDownloadTable() {\n var _this$tableSaver;\n (_this$tableSaver = this.tableSaver) === null || _this$tableSaver === void 0 || _this$tableSaver.cancelDownload();\n this.setState({\n isTableDownloading: false\n });\n }\n handleDownloadCompleted() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED\n });\n }\n handleDownloadCanceled() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges) {\n var {\n model\n } = this.props;\n if (!isDeletableGridModel(model) || !model.isDeletable) {\n throw new Error('Model does not support deleting ranges');\n }\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n resetColumnSelection() {\n if (this.grid == null) {\n return;\n }\n var {\n isSelectingColumn\n } = this.props;\n if (isSelectingColumn) {\n var {\n columnAllowedCursor\n } = this.props;\n this.grid.setState({\n cursor: columnAllowedCursor\n });\n } else {\n this.grid.setState({\n cursor: null\n });\n this.setState({\n hoverSelectColumn: null\n });\n }\n }\n resetGridViewState() {\n var forceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n if (!this.grid) {\n return;\n }\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n left: 0,\n top: 0,\n topOffset: 0,\n leftOffset: 0\n }, forceUpdate);\n }\n sendStateChange() {\n if (!this.grid) {\n return;\n }\n var {\n state: irisGridState\n } = this;\n var {\n state: gridState\n } = this.grid;\n var {\n onStateChange\n } = this.props;\n onStateChange(irisGridState, gridState);\n }\n handleOverflowClose() {\n this.setState({\n showOverflowModal: false\n });\n }\n handleOpenNoPastePermissionModal(errorMessage) {\n this.setState({\n showNoPastePermissionModal: true,\n noPastePermissionError: errorMessage\n });\n }\n handleCloseNoPastePermissionModal() {\n this.setState({\n showNoPastePermissionModal: false\n });\n }\n getColumnBoundingRect() {\n var _this$gridWrapper2;\n var {\n metrics,\n shownColumnTooltip\n } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n var gridRect = (_this$gridWrapper2 = this.gridWrapper) === null || _this$gridWrapper2 === void 0 ? void 0 : _this$gridWrapper2.getBoundingClientRect();\n var popperMargin = 20;\n assertNotNull(gridRect);\n var {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth\n } = metrics;\n var columnX = allColumnXs.get(shownColumnTooltip);\n var columnWidth = allColumnWidths.get(shownColumnTooltip);\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n var left = gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) + 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n }\n };\n }\n handleGotoRowSelectedRowNumberSubmit() {\n var {\n gotoRow: rowNumber\n } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n focusRowInGrid(rowNumber) {\n var {\n model\n } = this.props;\n var {\n rowCount\n } = model;\n this.setState({\n gotoRow: rowNumber\n });\n if (rowNumber === '') {\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n return;\n }\n var rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({\n gotoRowError: 'Invalid row index'\n });\n } else if (rowInt === 0) {\n var _this$grid25;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid25 = this.grid) === null || _this$grid25 === void 0 || _this$grid25.setFocusRow(0);\n } else if (rowInt < 0) {\n var _this$grid26;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid26 = this.grid) === null || _this$grid26 === void 0 || _this$grid26.setFocusRow(rowInt + rowCount);\n } else {\n var _this$grid27;\n (_this$grid27 = this.grid) === null || _this$grid27 === void 0 || _this$grid27.setFocusRow(rowInt - 1);\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n }\n }\n handleGotoRowSelectedRowNumberChanged(event) {\n var rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n getColumnTooltip(visibleIndex, metrics, model) {\n var {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(visibleIndex);\n var columnWidth = allColumnWidths.get(visibleIndex);\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n var boundedLeft = Math.max(0, columnX);\n var boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n var wrapperStyle = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none'\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n var virtualReference = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect\n };\n var popperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top']\n }\n }\n };\n var modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n var column = model.columns[modelColumn];\n if (column == null) return null;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n timeout: 400,\n interactive: true,\n options: popperOptions,\n ref: this.handleTooltipRef,\n referenceObject: virtualReference,\n onExited: () => {\n this.setState({\n shownColumnTooltip: null\n });\n },\n children: /*#__PURE__*/_jsx(ColumnStatistics, {\n model: model,\n column: column,\n onStatistics: () => {\n var _this$tooltip;\n (_this$tooltip = this.tooltip) === null || _this$tooltip === void 0 || _this$tooltip.update();\n }\n })\n }, column.name)\n });\n }\n handleGotoValueSelectedColumnNameChanged(columnName) {\n var _this$grid28;\n var {\n model\n } = this.props;\n var cursorRow = (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.state.cursorRow;\n var {\n gotoValueSelectedColumnName: prevColumnName,\n gotoValueManuallyChanged\n } = this.state;\n if (cursorRow != null) {\n var index = model.getColumnIndexByName(columnName);\n var column = IrisGridUtils.getColumnByName(model.columns, columnName);\n var prevColumn = IrisGridUtils.getColumnByName(model.columns, prevColumnName);\n if (index == null || column == null) {\n return;\n }\n var value = model.valueForCell(index, cursorRow);\n var text = IrisGridUtils.convertValueToText(value, column.type);\n\n // do NOT update value if user manually changed value AND column type remains the same\n if (gotoValueManuallyChanged && column.type === (prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.type)) {\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n } else {\n // do update, and set goToValueManuallyChanged to false because value was automatically changed\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValue: text,\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n }\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n }\n handleGotoValueSelectedFilterChanged(value) {\n this.setState({\n gotoValueSelectedFilter: value,\n gotoValueError: ''\n });\n }\n handleGotoValueSubmitted(isBackwards) {\n var {\n gotoValue\n } = this.state;\n this.seekRow(gotoValue, isBackwards);\n }\n render() {\n var _rollupConfig$columns7,\n _rollupConfig$columns8,\n _this7 = this,\n _this$grid30,\n _openOptions;\n var {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart\n } = this.props;\n var {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n loadingCancelShown,\n loadingBlocksGrid,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n searchFilter,\n selectDistinctColumns,\n movedColumns,\n movedRows,\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n columnAlignmentMap,\n sorts,\n reverse,\n customColumns,\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n columnHeaderGroups,\n showOverflowModal,\n showNoPastePermissionModal,\n noPastePermissionError,\n overflowText,\n overflowButtonTooltipProps,\n expandCellTooltipProps,\n hoverTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueSelectedFilter,\n partitionConfig\n } = this.state;\n if (!isReady) {\n return null;\n }\n var theme = this.getTheme();\n var {\n columnHeaderHeight: singleColumnHeaderHeight\n } = theme;\n var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, searchFilter);\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var stateOverride = this.getCachedStateOverride(model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown);\n var top = metrics ? metrics.top : 0;\n var bottom = metrics ? metrics.bottomViewport : 0;\n var left = null;\n var right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n var isVisible = metrics != null && metrics.width > 0 && metrics.height > 0;\n var isRollup = ((_rollupConfig$columns7 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns8 = rollupConfig.columns) === null || _rollupConfig$columns8 === void 0 ? void 0 : _rollupConfig$columns8.length) !== null && _rollupConfig$columns7 !== void 0 ? _rollupConfig$columns7 : 0) > 0;\n var focusField = null;\n var debounceMs = metrics ? Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce) : IrisGrid.maxDebounce;\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n var {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(focusedFilterBarColumn);\n var columnWidth = allColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n var _theme$filterBarHeigh, _theme$filterBarHeigh2, _this$grid29;\n var x = gridX + columnX;\n var y = gridY - ((_theme$filterBarHeigh = theme.filterBarHeight) !== null && _theme$filterBarHeigh !== void 0 ? _theme$filterBarHeigh : 0);\n var fieldWidth = columnWidth + 1; // cover right border\n var fieldHeight = ((_theme$filterBarHeigh2 = theme.filterBarHeight) !== null && _theme$filterBarHeigh2 !== void 0 ? _theme$filterBarHeigh2 : 0) - 1; // remove bottom border\n var style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x),\n // Don't cause overflow\n height: fieldHeight\n };\n var value = '';\n var isValid = true;\n var modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n var quickFilter = quickFilters.get(modelColumn);\n var advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n var isBarFiltered = quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = /*#__PURE__*/_jsx(FilterInputField, {\n ref: this.filterInputRef,\n style: style,\n className: classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered\n }),\n isAdvancedFilterSet: advancedFilter != null,\n onAdvancedFiltersTriggered: () => {\n this.setState({\n shownAdvancedFilter: focusedFilterBarColumn\n });\n },\n onChange: this.handleFilterBarChange,\n onDone: this.handleFilterBarDone,\n onTab: this.handleFilterBarTab,\n onContextMenu: (_this$grid29 = this.grid) === null || _this$grid29 === void 0 ? void 0 : _this$grid29.handleContextMenu,\n debounceMs: debounceMs,\n value: value\n }, focusedFilterBarColumn);\n }\n }\n var loadingElement = null;\n if (loadingText != null) {\n var loadingStatus = /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-loading-status\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown\n }),\n children: loadingText\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n onClick: this.handleCancel,\n className: classNames('iris-grid-btn-cancel', {\n show: loadingCancelShown\n }),\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n transform: \"down-1\"\n }), \"Cancel\"]\n })]\n });\n var _gridY = metrics ? metrics.gridY : 0;\n loadingElement = /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-loading\",\n style: loadingBlocksGrid ? {\n top: _gridY\n } : {},\n children: loadingStatus\n });\n }\n var columnTooltip = null;\n if (shownColumnTooltip != null && metrics) {\n var _this$tooltip2;\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n (_this$tooltip2 = this.tooltip) === null || _this$tooltip2 === void 0 || _this$tooltip2.update();\n }\n var filterBar = [];\n if (metrics && isFilterBarShown) {\n var {\n gridX: _gridX,\n gridY: _gridY2,\n visibleColumns,\n allColumnXs: _allColumnXs,\n allColumnWidths: _allColumnWidths\n } = metrics;\n var {\n filterBarHeight\n } = theme;\n var _loop2 = function _loop2() {\n var columnIndex = visibleColumns[i];\n var columnX = _allColumnXs.get(columnIndex);\n var columnWidth = _allColumnWidths.get(columnIndex);\n var modelColumn = _this7.getModelColumn(columnIndex);\n if (modelColumn != null) {\n var isFilterable = model.isFilterable(modelColumn);\n if (isFilterable && columnX != null && columnWidth != null && columnWidth > 0) {\n var _x = _gridX + columnX + columnWidth - 24;\n var _y = _gridY2 - (filterBarHeight !== null && filterBarHeight !== void 0 ? filterBarHeight : 0) + 2; // 2 acts as top margin for the button\n var _style = {\n position: 'absolute',\n top: _y,\n left: _x\n };\n var _advancedFilter = advancedFilters.get(modelColumn);\n var isFilterSet = _advancedFilter != null;\n var isFilterVisible = columnIndex === hoverAdvancedFilter || columnIndex === focusedFilterBarColumn || isFilterSet;\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible\n }),\n style: _style,\n children: isFilterVisible && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isFilterSet\n }),\n onClick: () => {\n _this7.setState({\n shownAdvancedFilter: columnIndex\n });\n },\n onContextMenu: event => {\n var _this7$grid;\n (_this7$grid = _this7.grid) === null || _this7$grid === void 0 || _this7$grid.handleContextMenu(event);\n },\n onMouseEnter: () => {\n _this7.setState({\n hoverAdvancedFilter: columnIndex\n });\n },\n onMouseLeave: () => {\n _this7.setState({\n hoverAdvancedFilter: null\n });\n },\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n }, columnIndex);\n filterBar.push(element);\n }\n }\n };\n for (var i = 0; i < visibleColumns.length; i += 1) {\n _loop2();\n }\n }\n var advancedFilterMenus = [];\n if (metrics) {\n var {\n gridX: _gridX2,\n visibleColumns: _visibleColumns,\n allColumnXs: _allColumnXs2,\n allColumnWidths: _allColumnWidths2,\n columnHeaderHeight\n } = metrics;\n var _loop3 = function _loop3() {\n var columnIndex = _visibleColumns[_i4];\n var columnX = _allColumnXs2.get(columnIndex);\n var columnWidth = _allColumnWidths2.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n var xColumnHeader = _gridX2 + columnX;\n var xFilterBar = _gridX2 + columnX + columnWidth - 20;\n var _style2 = isFilterBarShown ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight\n } : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight\n };\n var _modelColumn = _this7.getModelColumn(columnIndex);\n if (_modelColumn != null) {\n var column = model.columns[_modelColumn];\n if (column == null) {\n // Grid metrics is likely out of sync with model\n log.warn(\"Column does not exist at index \".concat(_modelColumn, \" for column array of length \").concat(model.columns.length));\n // eslint-disable-next-line no-continue\n return 1; // continue\n }\n var _advancedFilter2 = advancedFilters.get(_modelColumn);\n var {\n options: advancedFilterOptions\n } = _advancedFilter2 || {};\n var sort = TableUtils.getSortForColumn(model.sort, column.name);\n var sortDirection = sort ? sort.direction : null;\n if (!isSortDirection(sortDirection)) {\n throw new Error(\"Invalid sort direction: \".concat(sortDirection));\n }\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-menu-container\",\n style: _style2,\n children: /*#__PURE__*/_jsx(Popper, {\n className: \"advanced-filter-menu-popper\",\n onEntered: _this7.getAdvancedMenuOpenedHandler(columnIndex),\n onExited: () => {\n _this7.handleAdvancedMenuClosed(columnIndex);\n },\n isShown: shownAdvancedFilter === columnIndex,\n interactive: true,\n closeOnBlur: true,\n options: {\n positionFixed: true\n },\n children: _this7.getCachedAdvancedFilterMenuActions(model, column, advancedFilterOptions, sortDirection, formatter)\n })\n }, columnIndex);\n advancedFilterMenus.push(element);\n }\n }\n };\n for (var _i4 = 0; _i4 < _visibleColumns.length; _i4 += 1) {\n if (_loop3()) continue;\n }\n }\n var optionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isOrganizeColumnsAvailable, model.isRollupAvailable, model.isTotalsAvailable || isRollup, model.isSelectDistinctAvailable, model.isExportAvailable, this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, this.isTableSearchAvailable(), isGotoShown, advancedSettings.size > 0);\n var hiddenColumns = this.getCachedHiddenColumns(metricCalculator, userColumnWidths);\n var openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return /*#__PURE__*/_jsx(ChartBuilder, {\n model: model,\n onChange: this.handleChartChange,\n onSubmit: this.handleChartCreate\n }, OptionType.CHART_BUILDER);\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return /*#__PURE__*/_jsx(VisibilityOrderingBuilder, {\n model: model,\n movedColumns: movedColumns,\n hiddenColumns: hiddenColumns,\n columnHeaderGroups: columnHeaderGroups,\n onColumnVisibilityChanged: this.handleColumnVisibilityChanged,\n onReset: this.handleColumnVisibilityReset,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n onColumnHeaderGroupChanged: this.handleHeaderGroupsChanged,\n onFrozenColumnsChanged: this.handleFrozenColumnsChanged\n }, OptionType.VISIBILITY_ORDERING_BUILDER);\n case OptionType.CONDITIONAL_FORMATTING:\n return /*#__PURE__*/_jsx(ConditionalFormattingMenu, {\n rules: conditionalFormats,\n onChange: this.handleConditionalFormatsChange,\n onCreate: this.handleConditionalFormatCreate,\n onSelect: this.handleConditionalFormatEdit\n });\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return /*#__PURE__*/_jsx(ConditionalFormatEditor, {\n dh: model.dh,\n columns: model.columns,\n rule: conditionalFormatPreview,\n onUpdate: this.handleConditionalFormatEditorUpdate,\n onSave: this.handleConditionalFormatEditorSave,\n onCancel: this.handleConditionalFormatEditorCancel\n });\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return /*#__PURE__*/_jsx(CustomColumnBuilder, {\n model: model,\n customColumns: customColumns,\n onSave: this.handleUpdateCustomColumns,\n onCancel: this.handleMenuBack\n }, OptionType.CUSTOM_COLUMN_BUILDER);\n case OptionType.ROLLUP_ROWS:\n return /*#__PURE__*/_jsx(RollupRows, {\n model: model,\n onChange: this.handleRollupChange,\n config: rollupConfig\n }, OptionType.ROLLUP_ROWS);\n case OptionType.AGGREGATIONS:\n return /*#__PURE__*/_jsx(Aggregations, {\n settings: aggregationSettings,\n isRollup: isRollup,\n availablePlacements: isEditableGridModel(model) && model.isEditable ? ['top'] : ['top', 'bottom'],\n onChange: this.handleAggregationsChange,\n onEdit: this.handleAggregationEdit,\n dh: model.dh\n });\n case OptionType.AGGREGATION_EDIT:\n return selectedAggregation && /*#__PURE__*/_jsx(AggregationEdit, {\n aggregation: selectedAggregation,\n columns: model.originalColumns,\n onChange: this.handleAggregationChange\n });\n case OptionType.TABLE_EXPORTER:\n return /*#__PURE__*/_jsx(TableCsvExporter, {\n model: model,\n name: name,\n userColumnWidths: userColumnWidths,\n movedColumns: movedColumns,\n isDownloading: isTableDownloading,\n tableDownloadStatus: tableDownloadStatus,\n tableDownloadProgress: tableDownloadProgress,\n tableDownloadEstimatedTime: tableDownloadEstimatedTime !== null && tableDownloadEstimatedTime !== void 0 ? tableDownloadEstimatedTime : undefined,\n onDownload: this.handleDownloadTable,\n onDownloadStart: this.handleDownloadTableStart,\n onCancel: this.handleCancelDownloadTable,\n selectedRanges: selectedRanges\n }, OptionType.TABLE_EXPORTER);\n case OptionType.SELECT_DISTINCT:\n return /*#__PURE__*/_jsx(SelectDistinctBuilder, {\n model: model,\n selectDistinctColumns: selectDistinctColumns,\n onChange: this.handleSelectDistinctChanged\n });\n case OptionType.ADVANCED_SETTINGS:\n return /*#__PURE__*/_jsx(AdvancedSettingsMenu, {\n items: advancedSettings,\n onChange: onAdvancedSettingsChange\n });\n default:\n throw Error(\"Unexpected option type \".concat(option.type));\n }\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-column\",\n children: [children != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-bar\",\n children: children\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: isSelectingPartition,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n nodeRef: this.slideTransitionRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.slideTransitionRef,\n className: \"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\",\n children: isPartitionedGridModel(model) && model.isPartitionRequired && /*#__PURE__*/_jsx(IrisGridPartitionSelector, {\n model: model,\n partitionConfig: partitionConfig,\n onChange: this.handlePartitionChange\n })\n })\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: showSearchBar,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n nodeRef: this.bottomTransitionRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.bottomTransitionRef,\n className: \"iris-grid-bar\",\n children: /*#__PURE__*/_jsx(CrossColumnSearch, {\n value: searchValue,\n selectedColumns: selectedSearchColumns,\n invertSelection: invertSearchColumns,\n onChange: this.handleCrossColumnSearch,\n columns: model.columns,\n ref: this.crossColumnRef\n })\n })\n }), /*#__PURE__*/_jsxs(Grid, {\n ref: grid => {\n this.grid = grid;\n },\n isStickyBottom: !isEditableGridModel(model) || !model.isEditable,\n isStuckToBottom: isStuckToBottom,\n isStuckToRight: isStuckToRight,\n metricCalculator: metricCalculator,\n model: model,\n keyHandlers: this.getKeyHandlers(),\n mouseHandlers: this.getMouseHandlers(),\n movedColumns: movedColumns,\n movedRows: movedRows,\n onError: this.handleGridError,\n onViewChanged: this.handleViewChanged,\n onSelectionChanged: this.handleSelectionChanged,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n renderer: this.renderer,\n stateOverride: stateOverride,\n theme: theme,\n children: [/*#__PURE__*/_jsx(IrisGridCellOverflowModal, {\n isOpen: showOverflowModal,\n text: overflowText,\n onClose: this.handleOverflowClose\n }), isVisible && /*#__PURE__*/_jsx(IrisGridModelUpdater, {\n model: model,\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n filter: filter,\n formatter: formatter,\n columnAlignmentMap: columnAlignmentMap,\n sorts: sorts,\n reverse: reverse,\n movedColumns: movedColumns,\n customColumns: customColumns,\n hiddenColumns: hiddenColumns,\n alwaysFetchColumns: this.getAlwaysFetchColumns(alwaysFetchColumns, model.columns, movedColumns, model.floatingLeftColumnCount, model.floatingRightColumnCount, (_this$grid30 = this.grid) === null || _this$grid30 === void 0 || (_this$grid30 = _this$grid30.state.draggingColumn) === null || _this$grid30 === void 0 ? void 0 : _this$grid30.range),\n formatColumns: this.getCachedPreviewFormatColumns(model.dh, model.columns, conditionalFormats, conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n ((_openOptions = openOptions[openOptions.length - 1]) === null || _openOptions === void 0 ? void 0 : _openOptions.type) === OptionType.CONDITIONAL_FORMATTING_EDIT ? conditionalFormatEditIndex !== null && conditionalFormatEditIndex !== void 0 ? conditionalFormatEditIndex : undefined : undefined),\n rollupConfig: this.getModelRollupConfig(model.originalColumns, rollupConfig, aggregationSettings),\n totalsConfig: this.getModelTotalsConfig(model.columns, rollupConfig, aggregationSettings),\n selectDistinctColumns: selectDistinctColumns,\n pendingRowCount: pendingRowCount,\n pendingDataMap: pendingDataMap,\n frozenColumns: frozenColumns,\n columnHeaderGroups: columnHeaderGroups,\n partitionConfig: partitionConfig,\n showExtraGroupColumn: this.showExtraGroupColumn\n }), !isMenuShown && /*#__PURE__*/_jsx(\"div\", {\n className: \"grid-settings-button\",\n style: {\n height: \"\".concat(singleColumnHeaderHeight, \"px\"),\n width: \"\".concat(singleColumnHeaderHeight, \"px\")\n },\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n \"data-testid\": \"btn-iris-grid-settings-button-\".concat(name),\n onClick: this.handleMenu,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMenu,\n transform: \"up-1\"\n }),\n tooltip: \"Table Options\"\n })\n }), focusField, loadingElement, filterBar, columnTooltip, advancedFilterMenus, overflowButtonTooltipProps && this.getOverflowButtonTooltip(overflowButtonTooltipProps), expandCellTooltipProps && this.getExpandCellTooltip(expandCellTooltipProps), hoverTooltipProps && this.getHoverTooltip(hoverTooltipProps)]\n }), /*#__PURE__*/_jsx(GotoRow, {\n ref: this.gotoRowRef,\n model: model,\n isShown: isGotoShown,\n gotoRow: gotoRow,\n gotoRowError: gotoRowError,\n gotoValueError: gotoValueError,\n onGotoRowSubmit: this.handleGotoRowSelectedRowNumberSubmit,\n onGotoRowNumberChanged: this.handleGotoRowSelectedRowNumberChanged,\n onClose: this.handleGotoRowClosed,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: () => {\n this.handleAnimationStart();\n this.focus();\n },\n onExited: this.handleAnimationEnd,\n gotoValueSelectedColumnName: gotoValueSelectedColumnName,\n gotoValue: gotoValue,\n gotoValueFilter: gotoValueSelectedFilter,\n onGotoValueSelectedColumnNameChanged: this.handleGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged: this.handleGotoValueSelectedFilterChanged,\n onGotoValueChanged: this.handleGotoValueChanged,\n onGotoValueSubmit: this.handleGotoValueSubmitted\n }), /*#__PURE__*/_jsx(PendingDataBottomBar, {\n error: pendingSaveError,\n isSaving: pendingSavePromise != null,\n saveTooltip: \"Commit (\".concat(this.commitAction.shortcut.getDisplayText(), \")\"),\n discardTooltip: \"Discard (\".concat(this.discardAction.shortcut.getDisplayText(), \")\"),\n pendingDataErrors: pendingDataErrors,\n pendingDataMap: pendingDataMap,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n onSave: this.handlePendingCommitClicked,\n onDiscard: this.handlePendingDiscardClicked\n }), /*#__PURE__*/_jsx(ToastBottomBar, {\n children: toastMessage\n }), /*#__PURE__*/_jsx(IrisGridCopyHandler, {\n model: model,\n copyOperation: copyOperation !== null && copyOperation !== void 0 ? copyOperation : undefined,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd\n }), /*#__PURE__*/_jsx(TableSaver, {\n dh: model.dh,\n ref: tableSaver => {\n this.tableSaver = tableSaver;\n },\n getDownloadWorker: getDownloadWorker,\n onDownloadCompleted: this.handleDownloadCompleted,\n onDownloadCanceled: this.handleDownloadCanceled,\n onDownloadProgressUpdate: this.handleDownloadProgressUpdate,\n isDownloading: tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n formatter: formatter\n })]\n }), /*#__PURE__*/_jsx(SlideTransition, {\n in: isMenuShown,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"table-sidebar\",\n children: /*#__PURE__*/_jsxs(Stack, {\n children: [/*#__PURE__*/_jsx(Page, {\n title: \"Table Options\",\n onClose: this.handleMenuClose,\n children: /*#__PURE__*/_jsx(Menu, {\n onSelect: i => this.handleMenuSelect(optionItems[i]),\n items: optionItems\n })\n }), openOptionsStack.map((option, i) => /*#__PURE__*/_jsx(Page, {\n title: openOptions[i].title,\n onBack: this.handleMenuBack,\n onClose: this.handleMenuClose,\n children: option\n }, openOptions[i].type))]\n })\n })\n }), /*#__PURE__*/_jsx(ContextActions, {\n actions: this.contextActions\n }), /*#__PURE__*/_jsx(NoPastePermissionModal, {\n isOpen: showNoPastePermissionModal,\n onClose: this.handleCloseNoPastePermissionModal,\n errorMessage: noPastePermissionError\n })]\n });\n }\n}\n_defineProperty(IrisGrid, \"contextType\", IrisGridThemeContext);\n_defineProperty(IrisGrid, \"minDebounce\", 150);\n_defineProperty(IrisGrid, \"maxDebounce\", 500);\n_defineProperty(IrisGrid, \"loadingSpinnerDelay\", 800);\n_defineProperty(IrisGrid, \"defaultProps\", {\n advancedFilters: EMPTY_MAP,\n advancedSettings: EMPTY_MAP,\n alwaysFetchColumns: EMPTY_ARRAY,\n conditionalFormats: EMPTY_ARRAY,\n customColumnFormatMap: EMPTY_MAP,\n columnAlignmentMap: EMPTY_MAP,\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n inputFilters: EMPTY_ARRAY,\n customFilters: EMPTY_ARRAY,\n onCreateChart: undefined,\n onColumnSelected: () => undefined,\n onDataSelected: () => undefined,\n onError: () => undefined,\n onStateChange: () => undefined,\n onAdvancedSettingsChange: () => undefined,\n partitions: undefined,\n partitionConfig: undefined,\n quickFilters: EMPTY_MAP,\n selectDistinctColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverse: false,\n customColumns: EMPTY_ARRAY,\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP,\n onSelectionChanged: () => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnAllowedCursor: 'linker',\n columnNotAllowedCursor: 'linker-not-allowed',\n copyCursor: 'copy',\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n invertSearchColumns: true,\n onContextMenu: () => EMPTY_ARRAY,\n pendingDataMap: EMPTY_MAP,\n getDownloadWorker: DownloadServiceWorkerUtils.getServiceWorker,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n showExtraGroupColumn: true,\n formatter: EMPTY_ARRAY\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: EMPTY_ARRAY,\n // Do not set a default density prop since we need to know if it overrides the global density setting\n density: undefined,\n canToggleSearch: true,\n mouseHandlers: EMPTY_ARRAY,\n keyHandlers: EMPTY_ARRAY,\n getMetricCalculator: function getMetricCalculator() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return new IrisGridMetricCalculator(...args);\n }\n});\nexport default IrisGrid;\n//# sourceMappingURL=IrisGrid.js.map"],"names":["getChangedKeys","oldObject","newObject","keys","changedKeys","key","assertIsDefined","val","AssertionError","_defineProperty","e","r","_toPropertyKey","t","i","_toPrimitive","PasteError","ownKeys","o","_objectSpread","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","metrics","model","_modelColumns$get","modelColumns","movedColumns","allColumnXs","columnCount","allColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","maxX","modelIndex","GridUtils","group","isColumnGroup","left","right","range","_allColumnXs$get","_allColumnXs$get2","_allColumnWidths$get","startVisibleIndex","endVisibleIndex","_ref","_ref2","_allColumnWidths$get2","possibleLeft","GridColumnMoveMouseHandler","GridMouseHandler","grid","direction","lastLeft","leftOffset","nextLeft","nextOffset","_userColumnWidths$get","prevColumnWidth","leftColumnWidth","_userColumnWidths$get2","_modelIndex","mouseX","mouseY","gridPoint","x","column","columnHeaderDepth","columnInfo","rowHeaderWidth","event","draggingColumn","initialColumnInfo","startColumn","endColumn","deltaX","_draggingParentGroup$","assertNotNull","gridX","draggingColumnDepth","width","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","clamp","parentGroup","parentVisibleRange","_allColumnXs$get3","_newMovedColumns","_getColumnInfo","_newMovedColumns2","parentRight","toVisibleIndex","_newMovedColumns3","toColumnInfo","_toColumnInfo$left","_toColumnInfo$right","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","newMovedColumns","to","moveDistance","newDraggingRange","GridHorizontalScrollBarMouseHandler","rawLeft","theme","metricCalculator","_left","_leftOffset","leftOffsetPercent","columnWidth","metricState","scrollBarSize","scrollBarHoverSize","y","barLeft","barWidth","height","hasHorizontalBar","_this$dragOffset","handleWidth","scrollableContentWidth","scrollableViewportWidth","mouseBarX","scrollPercent","scrollX","newLeft","newLeftOffset","GridRowMoveMouseHandler","row","columnHeaderHeight","allRowYs","rowY","getOrThrow","draggingRow","top","lastTop","bottom","bottomVisible","rowCount","allRowHeights","minY","topRow","maxY","bottomRow","movedRows","minMoveY","maxMoveY","GridRowSeparatorMouseHandler","GridSeparatorMouseHandler","index","size","separator","GridScrollBarCornerMouseHandler","hasVerticalBar","GridVerticalScrollBarMouseHandler","rawTop","_top","_topOffset","topOffsetPercent","rowHeight","topOffset","barTop","barHeight","handleHeight","scrollableContentHeight","scrollableViewportHeight","mouseBarY","scrollY","newTop","newTopOffset","EditMouseHandler","isEditableGridModel","GridRange","KeyHandler","order","SelectionKeyHandler","_model","_columnCount","deltaColumn","deltaRow","isShiftKey","isModifierKey","cursorRow","cursorColumn","selectionEndColumn","selectionEndRow","maximizePreviousRange","moveToColumn","moveToRow","autoSelectRow","autoSelectColumn","topVisible","selectRangeEndPosition","viewportPosition","lastRowIndex","TreeKeyHandler","selectedRanges","modelRow","isExpandableGridModel","EditKeyHandler","parseValueFromTable","table","data","rows","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","parseValueFromNodes","nodes","result","node","_node$textContent","text","parseValueFromElement","element","_element$textContent$","_element$textContent","childNodes","hasTabChar","hasFirefoxTab","PasteKeyHandler","dummyInput","listener","value","directionForKey","SELECTION_DIRECTION","CellInputField","selectionRange","className","disabled","propsValue","propsIsQuickEdit","onChange","EMPTY_FUNCTION","onCancel","onDone","onContextMenu","style","inputField","useRef","isCancelled","initialValue","useState","isChanged","setIsChanged","isQuickEdit","setIsQuickEdit","setValue","useEffect","field","sendUpdate","useCallback","newValue","handleChange","handleCancel","handleClick","handleCommit","fillRange","handleBlur","handleKeyDown","handleContextMenu","_jsx","classNames","ThemeContext","React","asyncGeneratorStep","n","u","_asyncToGenerator","_next","_throw","Grid","PureComponent","context","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","legacyContext","backingStorePixelRatio","cursor","props","memoize","keyHandlers","a","b","mouseHandlers","isStuckToBottom","isStuckToRight","renderer","GridRenderer","GridMetricCalculator","GridColumnSeparatorMouseHandler","GridRowTreeMouseHandler","GridTokenMouseHandler","GridSelectionMouseHandler","EMPTY_ARRAY","_this$canvas","prevProps","prevState","renderError","changedProps","changedState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","stateUpdates","updatedState","_this$canvas2","rect","state","stateOverride","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","columnIndex","_this$metrics","rowIndex","_this$metrics2","expandDescendants","rightVisible","gridRanges","newCursorRow","newCursorColumn","canvas","canvasOptions","canvasContext","renderState","onViewChanged","canvasWrapper","scale","prevRowCount","prevColumnCount","prevHeight","prevWidth","oldSelectedRanges","onSelectionChanged","extendSelection","selectionStartRow","selectionStartColumn","lastSelectedRange","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","selectedRange","_newRanges","newRanges","selectedColumn","selectedRow","lastSelectedRanges","newSelectedRanges","lastRange","remainder","nextCursor","selectionChanged","focusedRow","_userRowHeights$get","gridY","userRowHeights","tableHeight","halfViewportHeight","ranges","_gridRange$nextCell","gridRange","keepCursorInView","leftVisible","viewState","forceUpdate","modelColumn","_this","assertIsEditableGridModel","_edits","modelRanges","tableWidth","_range$startColumn","_range$startRow","_range$startColumn2","_range$startRow2","edits","_range$startColumn3","_range$startColumn4","_range$startRow3","onError","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","mouseEvent","_this$canvas3","_this$canvas4","mouseHandler","functionName","keyHandler","_options$stopPropagat","_options$preventDefau","options","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","isDragging","callback","_ref5","updateRevision","deltaY","maxLeftOffset","_metrics$allColumnWid","_metrics$allColumnWid2","_columnWidth","maxTopOffset","_metrics$allRowHeight","_metrics$allRowHeight2","_rowHeight","_ref6","editingCell","activeCellSelectionBorderWidth","w","h","leftBorderOffset","wrapperStyle","inputStyle","isValid","draggingColumnSeparator","draggingRowOffset","draggingRowSeparator","children","_jsxs","moveOperations","token","isLinkToken","contextTheme","userTheme","GridTheme","log","Log","AdvancedFilterCreatorFilterItem","columnType","filterType","TableUtils","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","getLabelForBooleanFilter","memoizeOne","operation","timeZone","tableUtils","_value","filterTypes","selectedType","_this$typeDropdown","eventTargetValue","onDelete","formatter","showValueInput","typeOptionElements","type","label","Select","typeDropdown","Button","vsTrash","AdvancedFilterCreatorSelectValueList","values","v","selectedValues","dh","filters","invertSelection","itemIndex","selectedIndex","isSelected","offset","items","visibleItemIndex","displayValue","itemCount","item","isLoading","viewportSize","SelectValueList","list","FadeTransition","LoadingSpinner","AdvancedFilterCreatorSelectValue","searchTable","searchText","count","formattedCount","formattedTableSize","prefix","searchTablePromise","error","filter","showSearch","columnName","displayedValuesText","placeholderText","AdvancedFilterCreator","nanoid","_options$filterItems$","_options$filterItems","filterOperators","filterItems","isSortable","valuesTable","_valuesTable$columns$","sort","PromiseUtils","_this$focusTrapContai","_this$focusTrapContai2","inputs","FilterOperator","operator","assertFilterOperatorValue","filterIndex","addToExisting","ContextActionUtils","filterItem","onSortChange","onFilterChange","operators","sortDirection","valuesTableError","isValuesTableAvailable","isBoolean","isDateType","filterItemElements","_loop","filterOperator","isAndFilter","operatorElement","showAddFilterItem","addFilterItem","FontAwesomeIcon","dhNewCircleLargeFilled","dhSortAmountDown","_Fragment","makeTernaryFormatRule","config","prevRule","styleDBString","getStyleDBString","conditionDBString","getConditionDBString","makeRowFormatColumn","rule","makeColumnFormatColumn","col","FormatterType","NumberCondition","StringCondition","DateCondition","BooleanCondition","CharCondition","FormatStyleType","getLabelForStyleType","option","getBackgroundForStyleConfig","customConfig","getColorForStyleConfig","color","bg","getNumberConditionText","start","end","getTextForNumberCondition","getStringConditionText","getTextForStringCondition","getDateConditionText","getTextForDateCondition","getBooleanConditionText","getTextForBooleanCondition","getCharConditionText","getTextForCharCondition","getLabelForNumberCondition","condition","getLabelForStringCondition","getLabelForDateCondition","getLabelForBooleanCondition","getLabelForCharCondition","getDefaultConditionForType","getDefaultValueForType","getConditionConfig","getDefaultConditionConfigForType","getDefaultStyleConfig","getShortLabelForStringCondition","getShortLabelForDateCondition","getShortLabelForBooleanCondition","getShortLabelForCharCondition","getShortLabelForNumberCondition","getShortLabelForConditionType","getFormatColumns","columns","rules","rowFormatConfig","columnFormatConfigMap","formatterType","name","prevFormatColumn","formatColumn","isDateConditionValid","dateTimeString","rest","tzCode","DateUtils","isSupportedColumn","IrisGridBottomBar","animation","isShown","onClick","onEntering","onEntered","onExiting","onExited","nodeRef","CSSTransition","ThemeExport","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","pendingDataErrors","pendingDataMap","_onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","usePrevious","errorMessage","useMemo","pendingRowCount","commitIcon","vsPass","vsWarning","isCopyRangesOperation","copyOperation","isCopyHeaderOperation","IrisGridCopyHandler","Component","copyState","buttonState","_this2","copyToClipboard","_this3","columnDepth","copyText","includeHeaders","_movedColumns","formatValues","hiddenColumns","IrisGridUtils","subtractRanges","formatValue","CanceledPromiseError","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","FilterInputField","debounceMs","debounce","_this$inputField","_this$inputField2","setGridFocus","defocusInput","_this$inputField3","relatedTarget","backward","onTab","isAdvancedFilterSet","onAdvancedFiltersTriggered","dhFilterFilled","vsFilter","CopyCellKeyHandler","irisGrid","CopyKeyHandler","ReverseKeyHandler","IrisGridShortcuts","reverse","ClearFilterKeyHandler","ToastBottomBar","setIsShown","timeout","prevChildren","startTimer","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","columnAlignmentMap","sorts","customColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","EMPTY_MAP","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","showExtraGroupColumn","isTotalsAvailable","isRollupAvailable","useOnChange","isIrisGridTreeTableModel","sortsForModel","isPartitionedGridModel","STATS_LABEL_OVERRIDES","ColumnStatistics","_STATS_LABEL_OVERRIDE","numRows","stats","onStatistics","statistics","_column$displayName","loading","showGenerateStatistics","statisticElements","description","formattedValue","statisticElement","rowCountLabel","formattedRowCount","CopyButton","dhSortSlash","dhFreeze","vsLock","dhRefresh","CrossColumnSearch","searchValue","selectedColumns","filterColumns","filterValue","searchFilter","_this$searchField$cur","update","isConfigureColumnsShown","hasAllColumnsSelected","hasNoColumnsSelected","icon","dhSquareFilled","dhGearFilled","dhCheckSquare","vsCircleLargeFilled","dhWarningCircleFilled","dhRemoveSquareFilled","SearchInput","Tooltip","Popper","Checkbox","IrisGridPartitionSelector","memoizee","Pending","keysTable","keyTable","baseTable","prevConfig","partitionTables","newPartitionConfig","selectedValue","newPartitions","tCopy","partitionFilters","partition","partitionColumn","newConfig","_","_x","_x2","partitions","previousFilter","previousPartition","previousColumn","partitionFilter","partitionSelectors","Picker","vsChevronRight","vsKey","vsMerge","SelectDistinctBuilder","filteredInputs","deepEqual","prevInputs","input","inputIndex","disableAddButton","AdvancedSettingsMenu","_onChange","Menu","isOn","AdvancedSettingsType","DEFAULT_CALLBACK","getRuleValue","getRuleTitle","ConditionalFormattingMenu","onCreate","onSelect","handleRuleClick","handleDeleteClick","updatedRules","handleDragHandlerClick","handleDragEnd","DragUtils","sourceIndex","destinationIndex","sourceInput","DragDropContext","Droppable","provided","snapshot","Draggable","vsGripper","numberConditionOptions","stringConditions","dateConditions","booleanConditions","charConditions","isNumberConditionValid","startValue","endValue","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","ConditionEditor","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setStartValue","setEndValue","conditions","handleConditionChange","conditionInputs","DEFAULT_BACKGROUND","DEFAULT_COLOR_LIGHT","DEFAULT_COLOR_DARK","DEFAULT_DROPDOWN_WIDTH","StyleEditor","_config$customConfig$","_config$customConfig","styleType","setStyleType","background","setBackground","setShown","dropdownWidth","setDropdownWidth","csContainer","handleBackgroundChange","handleMenuClosed","handleToggleClick","updateDropdownWidth","styleOptions","ColorUtils","renderOptions","optionArray","vsCheck","renderMenuElement","DropdownMenu","makeDefaultConfig","ColumnFormatEditor","_columns$find","setColumn","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","newColumn","updatedConditionConfig","handleStyleChange","updatedStyleConfig","columnNames","ComboBox","RowFormatEditor","getFormatterTypeIcon","FormatColumnWhereIcon","FormatRowWhereIcon","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","_defaultRule$type","originalColumns","onUpdate","defaultRule","selectedFormatter","setFormatter","setRule","setIsValid","handleSave","handleFormatterChange","handleRuleChange","ruleConfig","isRuleValid","updatedRule","IrisGridCellOverflowModal","_editorRef$current$ge","_editorRef$current2","isOpen","onClose","isOpened","setIsOpened","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","toggleLineNumbers","formatAsJSON","_editorRef$current","autoSetLineNumbers","_editor$getModel$getL","_editor$getModel","editor","handleToggle","onEditorInitialized","contentHeight","Modal","ModalHeader","vsListOrdered","vsJson","ModalBody","Editor","DEFAULT_FORMAT_STRING","GotoRow","forwardRef","ref","gotoRow","gotoRowError","gotoValueError","onGotoRowSubmit","_onEntered","onGotoRowNumberChanged","gotoValueSelectedColumnName","gotoValue","gotoValueFilter","onGotoValueSelectedColumnNameChanged","onGotoValueSelectedFilterChanged","onGotoValueChanged","onGotoValueSubmit","gotoRowInputRef","gotoValueInputRef","isGotoRowActive","setIsGotoRowActive","isIrisGridTableModelTemplate","gotoRowInputId","handleGotoValueNumberKeyDown","onGotoValueInputChanged","handleGotoValueKeySubmit","normalizedType","useImperativeHandle","_gotoRowInputRef$curr","selectInput","_gotoRowInputRef$curr2","_gotoValueInputRef$cu","renderValueInput","DateTimeInput","FilterType","vsClose","vsArrowUp","vsArrowDown","NoPastePermissionModal","pasteShortcutText","GLOBAL_SHORTCUTS","ModalFooter","VIEWPORT_LOADING_DELAY","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SEEK_ROW_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","UNFORMATTED_DATE_PATTERN","isEmptyConfig","advancedFilters","aggregationSettings","quickFilters","IrisGrid","_model$layoutHints","_model$columns$0$name","_model$columns$","advancedFilterOptions","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isOrganizeColumnsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","isFilterBarShown","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","OptionType","dhGraphLineUp","dhEye","vsEdit","vsSplitHorizontal","dhTriangleDownSquare","vsSymbolOperator","vsRuby","vsCloudDownload","vsTools","vsSearch","vsReply","aggregations","aggregationMap","selected","invert","AggregationUtils","operationMap","_operationMap$name","newOperations","rulesParam","preview","editIndex","_config$columns$lengt","_config$columns","agg","operationOrder","AggregationOperation","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","isEditable","floatingRowCount","density","_theme$rowFooterWidth","baseTheme","createDefaultIrisGridTheme","rowFooterWidth","densityTheme","handler","rendererProp","IrisGridRenderer","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","_i","_i2","columnSet","selectedSearchColumns","invertSearchColumns","throttle","loadingSpinnerShown","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","TableCsvExporter","overflowButtonTooltipProps","popperOptions","expandCellTooltipProps","expandTooltipDisplayValue","isExpandAllAvailable","hoverTooltipProps","hoverDisplayValue","SHORTCUTS","_aggregationSettings","conditionalFormats","customColumnFormatMap","_isFilterBarShown","isSelectingPartition","movedColumnsProp","movedRowsProp","_rollupConfig","_userColumnWidths","_showSearchBar","_searchValue","_selectedSearchColumns","_invertSearchColumns","_advancedFilters","_quickFilters","canCopy","getMetricCalculator","_dh","_keyHandlers","_mouseHandlers","IrisGridCellOverflowMouseHandler","IrisGridRowTreeMouseHandler","IrisGridTokenMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridSortMouseHandler","IrisGridFilterMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","PendingMouseHandler","IrisGridPartitionedTableMouseHandler","IrisGridCopyCellMouseHandler","_metricCalculator","searchColumns","_searchFilter","Formatter","inputFilters","settings","changedInputFilters","inputFilter","_advancedSettings$get","advancedSettings","replaceExistingFilters","loadingScrimStartTime","loadingScrimFinishTime","now","currentTime","totalTime","openOptions","isAggEditType","_this$grid$canvasWrap","_this$grid","_this$grid2","gridMetricState","rawValue","modelRows","contextDensity","err","replaceExisting","newAdvancedFilters","newQuickFilters","quickFilter","_ref7","_ref8","filterMap","_advancedSettings$get2","clearFiltersOnLinkerFilterUpdate","_ref9","filterList","combinedText","modelRange","clearRange","_ref0","_ref1","_ref10","_settings$defaultDeci","_settings$defaultInte","_settings$truncateNum","_settings$showEmptySt","_settings$showNullStr","_settings$showExtraGr","globalColumnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","isShowEmptyStringsChanged","isShowNullStringsChanged","isShowExtraGroupColumnChanged","updatedFormats","_this$globalColumnFor","mergedColumnFormats","applyInputFiltersOnInit","reverseType","inputFiltersWithValues","resolved","newPartition","partitionColumnSet","_ref11","_ref12","columnData","loadingText","resetRanges","loadingCancelShown","loadingBlocksGrid","_this$gridWrapper$get","_this$gridWrapper","minScrimTransitionTime","maxScrimTransitionTime","scrimTransitionTime","IrisGridModel","_this$grid3","_this$grid4","_this$grid5","columnVisibleIndex","_this$grid6","allFrozenColumns","isExpandableColumnGridModel","modelIndexes","isVisible","_this$grid7","defaultWidth","calculatedWidth","_model$layoutHints$fr","_model$layoutHints2","_this$grid8","loadingMessage","_this$grid9","entries","_this$grid0","currentSorts","_this$grid1","_this$grid10","isAbs","_this$grid11","focusIndex","_this$grid12","_model$layoutHints3","_dh$SearchDisplayMode","_dh$SearchDisplayMode2","searchDisplayMode","_this$crossColumnRef","_this$crossColumnRef2","_this$grid13","_this$grid14","_this$grid15","isGotoShown","_this$gotoRowRef$curr","cellValue","_document","pendingSavePromise","containsGridCellInputField","_this3$grid","ValidationError","newPendingSavePromise","_this4","onColumnSelected","dataMap","onDataSelected","_this5","groupedColumns","isExpandable","isGrouped","_this$grid16","oldSort","newSort","_this$grid17","_this$filterInputRef","focusedFilterBarColumn","_this$filterInputRef2","onCreateChart","_ref13","_this$grid18","selectedFormat","prevCustomColumnFormatMap","columnFormattingRule","alignment","_ref14","newColumnAlignmentMap","_ref15","newOptions","_ref16","isMissingPartitionError","_this$grid19","_this$grid$state","_this$grid20","bottomViewport","bottomNonFloating","onChangeApplied","prevColumnHeaderGroups","isColumnHeaderGroup","_this$grid21","tooltip","oldCustomColumns","customColumn","removedColumnNames","newSorts","newSelectDistinctColumns","isReady","_this$grid22","_this$grid23","contentWidth","userWidths","_this$grid24","allColumns","visibleColumns","_ref17","_ref18","contentWidths","manualColumns","_i3","_contentWidth","_rollupConfig$columns","_rollupConfig$columns2","added","removed","isRollup","changes","shouldStartLoading","op","aggregation","_rollupConfig$columns3","_rollupConfig$columns4","_ref19","_rollupConfig$columns5","_rollupConfig$columns6","fileName","frozenTable","tableSubscription","snapshotRanges","includeColumnHeaders","useUnformattedValues","_ref20","newAggregations","inputString","_arguments","_this6","_this6$grid","isBackwards","selectedColumnName","gotoValueSelectedFilter","searchFromRow","isContains","isIgnoreCase","_this6$grid2","columnDataType","startDate","inputValue","_this$tableSaver","isDeletableGridModel","columnAllowedCursor","irisGridState","gridState","onStateChange","_this$gridWrapper2","shownColumnTooltip","gridRect","popperMargin","columnX","rowNumber","rowInt","_this$grid25","_this$grid26","_this$grid27","boundedLeft","boundedWidth","virtualReference","_this$tooltip","_this$grid28","prevColumnName","gotoValueManuallyChanged","prevColumn","_rollupConfig$columns7","_rollupConfig$columns8","_this7","_this$grid30","_openOptions","getDownloadWorker","onlyFetchVisibleColumns","onAdvancedSettingsChange","hoverAdvancedFilter","shownAdvancedFilter","conditionalFormatEditIndex","isTableDownloading","selectedAggregation","pendingSaveError","toastMessage","showOverflowModal","showNoPastePermissionModal","noPastePermissionError","overflowText","singleColumnHeaderHeight","focusField","_theme$filterBarHeigh","_theme$filterBarHeigh2","_this$grid29","fieldWidth","fieldHeight","advancedFilter","isBarFiltered","loadingElement","loadingStatus","_gridY","columnTooltip","_this$tooltip2","filterBar","_gridX","_gridY2","_allColumnXs","_allColumnWidths","filterBarHeight","_loop2","isFilterable","_y","_style","_advancedFilter","isFilterSet","isFilterVisible","_this7$grid","advancedFilterMenus","_gridX2","_visibleColumns","_allColumnXs2","_allColumnWidths2","_loop3","_i4","xColumnHeader","xFilterBar","_style2","_modelColumn","_advancedFilter2","isSortDirection","openOptionsStack","ChartBuilder","VisibilityOrderingBuilder","CustomColumnBuilder","RollupRows","Aggregations","AggregationEdit","vsMenu","TableSaver","tableSaver","SlideTransition","Stack","Page","ContextActions","IrisGridThemeContext","DownloadServiceWorkerUtils","_len","args","_key","IrisGridMetricCalculator"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGrid-CDaypHxn.js","sources":["../../../utils/dist/ObjectUtils.js","../../../grid/dist/errors/assertIsDefined.js","../../../grid/dist/errors/PasteError.js","../../../grid/dist/mouse-handlers/GridColumnMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowMoveMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowSeparatorMouseHandler.js","../../../grid/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js","../../../grid/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js","../../../grid/dist/mouse-handlers/EditMouseHandler.js","../../../grid/dist/KeyHandler.js","../../../grid/dist/key-handlers/SelectionKeyHandler.js","../../../grid/dist/key-handlers/TreeKeyHandler.js","../../../grid/dist/key-handlers/EditKeyHandler.js","../../../grid/dist/key-handlers/PasteKeyHandler.js","../../../grid/dist/CellInputField.js","../../../grid/dist/ThemeContext.js","../../../grid/dist/Grid.js","../../../iris-grid/dist/AdvancedFilterCreatorFilterItem.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValueList.js","../../../iris-grid/dist/AdvancedFilterCreatorSelectValue.js","../../../iris-grid/dist/AdvancedFilterCreator.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js","../../../iris-grid/dist/IrisGridBottomBar.js","../../../iris-grid/dist/PendingDataBottomBar.js","../../../iris-grid/dist/IrisGridCopyHandler.js","../../../iris-grid/dist/FilterInputField.js","../../../iris-grid/dist/key-handlers/CopyCellKeyHandler.js","../../../iris-grid/dist/key-handlers/CopyKeyHandler.js","../../../iris-grid/dist/key-handlers/ReverseKeyHandler.js","../../../iris-grid/dist/key-handlers/ClearFilterKeyHandler.js","../../../iris-grid/dist/ToastBottomBar.js","../../../iris-grid/dist/IrisGridModelUpdater.js","../../../iris-grid/dist/ColumnStatistics.js","../../../iris-grid/dist/CrossColumnSearch.js","../../../iris-grid/dist/IrisGridPartitionSelector.js","../../../iris-grid/dist/sidebar/SelectDistinctBuilder.js","../../../iris-grid/dist/sidebar/AdvancedSettingsMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/StyleEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ColumnFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/RowFormatEditor.js","../../../iris-grid/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js","../../../iris-grid/dist/IrisGridCellOverflowModal.js","../../../iris-grid/dist/GotoRow.js","../../../iris-grid/dist/NoPastePermissionModal.js","../../../iris-grid/dist/IrisGrid.js"],"sourcesContent":["/**\n * Get the keys that have changed between two objects.\n * @param oldObject Old object to compare\n * @param newObject New object to compare\n * @returns Array of keys that have changed\n */\nexport function getChangedKeys(oldObject, newObject) {\n var keys = new Set([...Object.keys(oldObject), ...Object.keys(newObject)]);\n var changedKeys = [];\n keys.forEach(key => {\n if (oldObject[key] !== newObject[key]) {\n changedKeys.push(key);\n }\n });\n return changedKeys;\n}\nexport default {\n getChangedKeys\n};\n//# sourceMappingURL=ObjectUtils.js.map","import AssertionError from \"./AssertionError.js\";\nexport function assertIsDefined(val) {\n if (val === undefined || val === null) {\n throw new AssertionError(\"Expected 'val' to be defined, but received \".concat(val));\n }\n}\nexport default assertIsDefined;\n//# sourceMappingURL=assertIsDefined.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class PasteError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isPasteError\", true);\n }\n}\nexport default PasteError;\n//# sourceMappingURL=PasteError.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { assertNotNull } from '@deephaven/utils';\nimport GridUtils from \"../GridUtils.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nvar SLOPPY_CLICK_DISTANCE = 5;\nvar SCROLL_INTERVAL = 1000 / 60;\nvar SCROLL_DELTA = 10;\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(visibleIndex, depth, metrics, model) {\n var _modelColumns$get;\n var {\n modelColumns,\n movedColumns,\n allColumnXs,\n columnCount,\n allColumnWidths,\n userColumnWidths,\n calculatedColumnWidths,\n floatingLeftWidth,\n maxX\n } = metrics;\n if (depth == null || visibleIndex == null || visibleIndex > columnCount || visibleIndex < 0) {\n return null;\n }\n var modelIndex = (_modelColumns$get = modelColumns.get(visibleIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(visibleIndex, movedColumns);\n var group = model.getColumnHeaderGroup(modelIndex, depth);\n var isColumnGroup = group != null;\n var left;\n var right;\n var range;\n if (group != null) {\n var _allColumnXs$get, _allColumnXs$get2, _allColumnWidths$get;\n var [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(movedColumns);\n left = (_allColumnXs$get = allColumnXs.get(startVisibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : floatingLeftWidth;\n right = ((_allColumnXs$get2 = allColumnXs.get(endVisibleIndex)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : maxX) + ((_allColumnWidths$get = allColumnWidths.get(endVisibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n var _ref, _ref2, _allColumnWidths$get2;\n var possibleLeft = allColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n left = possibleLeft;\n right = left + ((_ref = (_ref2 = (_allColumnWidths$get2 = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : userColumnWidths.get(modelIndex)) !== null && _ref2 !== void 0 ? _ref2 : calculatedColumnWidths.get(modelIndex)) !== null && _ref !== void 0 ? _ref : 0);\n range = [visibleIndex, visibleIndex];\n }\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth\n };\n}\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", null);\n _defineProperty(this, \"draggingOffset\", void 0);\n _defineProperty(this, \"initialOffset\", void 0);\n _defineProperty(this, \"initialGridPoint\", void 0);\n _defineProperty(this, \"scrollingInterval\", void 0);\n _defineProperty(this, \"scrollingDirection\", void 0);\n _defineProperty(this, \"draggingColumn\", null);\n }\n setScrollInterval(grid, direction) {\n if (this.scrollingInterval != null && direction === this.scrollingDirection) {\n return;\n }\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n var {\n metrics\n } = grid;\n if (!metrics) {\n return;\n }\n var {\n left,\n lastLeft,\n leftOffset,\n userColumnWidths,\n calculatedColumnWidths,\n movedColumns,\n allColumnWidths\n } = metrics;\n var nextLeft = left;\n var nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n var _userColumnWidths$get;\n nextLeft -= 1;\n var modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n var prevColumnWidth = (_userColumnWidths$get = userColumnWidths.get(modelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n var leftColumnWidth = allColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n var _userColumnWidths$get2;\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n var _modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth = (_userColumnWidths$get2 = userColumnWidths.get(_modelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : calculatedColumnWidths.get(_modelIndex);\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (metrics == null || mouseX == null || mouseY == null) {\n return;\n }\n this.moveDraggingColumn(mouseX, grid, direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA);\n grid.setState({\n left: nextLeft,\n leftOffset: nextOffset\n });\n if (direction === 'left' && nextLeft === 0 && leftOffset === 0 || direction === 'right' && nextLeft === lastLeft) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n clearScrollInterval() {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n onLeave() {\n this.clearScrollInterval();\n return false;\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n column,\n columnHeaderDepth\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\n var columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n var {\n rowHeaderWidth\n } = metrics;\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n if (columnInfo.modelIndex != null && columnHeaderDepth != null && model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n onDrag(gridPoint, grid, event) {\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined) {\n return false;\n }\n var {\n x: mouseX,\n y: mouseY\n } = gridPoint;\n var {\n columnHeaderDepth\n } = this.initialGridPoint;\n var {\n model\n } = grid.props;\n var {\n draggingColumn\n } = this;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (!draggingColumn && Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE && Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n var initialColumnInfo = getColumnInfo(this.initialGridPoint.column, columnHeaderDepth, metrics, model);\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width\n };\n var startColumn = getColumnInfo(draggingColumn.range[0], 0, metrics, model);\n var endColumn = getColumnInfo(draggingColumn.range[1], 0, metrics, model);\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n this.draggingColumn = draggingColumn;\n grid.setState({\n draggingColumn,\n isDragging: true\n });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX, grid, deltaX) {\n var _draggingParentGroup$;\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined || this.draggingColumn == null || deltaX === 0) {\n return;\n }\n var {\n metrics\n } = grid;\n assertNotNull(metrics, 'Metrics not set');\n var {\n gridX\n } = metrics;\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (this.draggingOffset < this.initialOffset && this.initialOffset < this.draggingOffset + deltaX || this.draggingOffset > this.initialOffset && this.initialOffset > this.draggingOffset + deltaX) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n var {\n depth: draggingColumnDepth\n } = this.draggingColumn;\n var {\n model\n } = grid.props;\n var {\n movedColumns\n } = grid.state;\n var {\n floatingLeftWidth,\n width,\n columnHeaderMaxDepth,\n allColumnXs\n } = metrics;\n var isDraggingLeft = deltaX < 0;\n var draggingColumn = getColumnInfo(this.draggingColumn.range[0], draggingColumnDepth, metrics, model);\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n var floatingDraggingLeft = mouseX - this.draggingOffset - gridX;\n var floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n var swapColumn = getColumnInfo(GridUtils.getColumnAtX(clamp(isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight, floatingLeftWidth, width) + gridX, metrics, true), draggingColumnDepth, metrics, model);\n var parentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup !== undefined) {\n var parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n var _allColumnXs$get3;\n var _newMovedColumns = this.moveColumn(draggingColumn, parentVisibleRange[0], movedColumns);\n this.draggingOffset = mouseX - ((_allColumnXs$get3 = allColumnXs.get(parentVisibleRange[0])) !== null && _allColumnXs$get3 !== void 0 ? _allColumnXs$get3 : 0);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n var _getColumnInfo;\n var _newMovedColumns2 = this.moveColumn(draggingColumn, parentVisibleRange[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n var {\n right: parentRight = 0\n } = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {};\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns2\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n var toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (toVisibleIndex < draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (toVisibleIndex > draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex -= 1;\n }\n }\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n var _newMovedColumns3 = this.moveColumn(draggingColumn, toVisibleIndex, movedColumns);\n grid.setState({\n movedColumns: _newMovedColumns3,\n draggingColumn: this.draggingColumn\n });\n }\n var toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n var _toColumnInfo$left;\n this.draggingOffset = mouseX - ((_toColumnInfo$left = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.left) !== null && _toColumnInfo$left !== void 0 ? _toColumnInfo$left : 0);\n } else {\n var _toColumnInfo$right;\n this.draggingOffset = mouseX - (((_toColumnInfo$right = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.right) !== null && _toColumnInfo$right !== void 0 ? _toColumnInfo$right : 0) - draggingColumn.width);\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (isDraggingLeft && draggingColumn.visibleIndex < swapColumn.visibleIndex || !isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex) {\n return;\n }\n var switchPoint = swapColumn.left + swapColumn.width * 0.5;\n var draggingParentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n var maxDepthSwapGroup;\n var maxSwapDepth = ((_draggingParentGroup$ = draggingParentGroup === null || draggingParentGroup === void 0 ? void 0 : draggingParentGroup.depth) !== null && _draggingParentGroup$ !== void 0 ? _draggingParentGroup$ : columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(swapColumn.modelIndex, maxSwapDepth);\n maxSwapDepth -= 1;\n }\n var newMovedColumns;\n if (isDraggingLeft && floatingDraggingLeft < switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[0])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[0], movedColumns);\n }\n if (!isDraggingLeft && floatingDraggingRight > switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[1])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n }\n if (!newMovedColumns) {\n return;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(draggingColumn, to, movedColumns) {\n var newMovedColumns = draggingColumn.isColumnGroup ? GridUtils.moveRange(draggingColumn.range, to, movedColumns) : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n var moveDistance = to - draggingColumn.range[0];\n var newDraggingRange = [draggingColumn.range[0] + moveDistance, draggingColumn.range[1] + moveDistance];\n if (this.draggingColumn) {\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n range: newDraggingRange\n });\n }\n return newMovedColumns;\n }\n onUp(gridPoint, grid) {\n this.cursor = null;\n this.clearScrollInterval();\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridColumnMoveMouseHandler;\n//# sourceMappingURL=GridColumnMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getLeftWithOffsetFromRawLeft(grid, rawLeft) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToColumn) {\n var _left = Math.round(rawLeft);\n var _leftOffset = 0;\n return {\n left: _left,\n leftOffset: _leftOffset\n };\n }\n var left = Math.floor(rawLeft);\n var leftOffsetPercent = rawLeft - left;\n var columnWidth = metrics.allColumnWidths.get(left);\n if (columnWidth == null) {\n var metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n var leftOffset = columnWidth * leftOffsetPercent;\n return {\n left,\n leftOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barLeft,\n barWidth,\n height,\n hasHorizontalBar\n } = metrics;\n return hasHorizontalBar && scrollBarSize > 0 && y >= height - scrollBarHoverSize && y < height && x > barLeft && x < barLeft + barWidth;\n }\n getLeftWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n barWidth,\n handleWidth,\n lastLeft,\n barLeft,\n columnCount,\n scrollableContentWidth,\n scrollableViewportWidth\n } = metrics;\n var mouseBarX = x - barLeft;\n var scrollPercent = clamp((mouseBarX - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barWidth - handleWidth), 0, 1);\n if (columnCount === 1) {\n return {\n left: 0,\n leftOffset: scrollPercent * (scrollableContentWidth - scrollableViewportWidth)\n };\n }\n var rawLeft = scrollPercent * lastLeft;\n return GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(grid, rawLeft);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x\n } = gridPoint;\n var {\n handleWidth,\n barLeft,\n scrollX\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarX = x - barLeft;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({\n isDraggingHorizontalScrollBar: true\n });\n } else {\n this.dragOffset = 0;\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n left: newLeft,\n leftOffset: newLeftOffset\n } = this.getLeftWithOffset(gridPoint, grid);\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridHorizontalScrollBarMouseHandler;\n//# sourceMappingURL=GridHorizontalScrollBarMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\nclass GridRowMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", 'move');\n _defineProperty(this, \"draggingOffset\", void 0);\n }\n onDown(gridPoint, grid) {\n var {\n model\n } = grid.props;\n var {\n x,\n y,\n row\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n columnHeaderHeight,\n rowHeaderWidth,\n allRowYs\n } = metrics;\n if (x <= rowHeaderWidth && row !== null && model.isRowMovable(row)) {\n var rowY = getOrThrow(allRowYs, row);\n this.draggingOffset = y - rowY - columnHeaderHeight;\n grid.setState({\n draggingRowOffset: this.draggingOffset\n });\n }\n return false;\n }\n onDrag(gridPoint, grid) {\n if (this.draggingOffset == null) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n draggingRow\n } = grid.state;\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n if (draggingRow == null) {\n var {\n row\n } = grid.getGridPointFromXY(mouseX, mouseY);\n if (row != null && !model.isRowMovable(row)) {\n return false;\n }\n draggingRow = row;\n grid.setState({\n draggingRow,\n isDragging: true\n });\n if (draggingRow == null) {\n return false;\n }\n }\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n top,\n lastTop,\n bottom,\n bottomVisible,\n rowCount,\n columnHeaderHeight,\n allRowHeights,\n allRowYs,\n height\n } = metrics;\n var minY = columnHeaderHeight;\n if (top < draggingRow) {\n var topRow = draggingRow - 1;\n minY = getOrThrow(allRowYs, topRow) + getOrThrow(allRowHeights, topRow) * 0.5 + columnHeaderHeight;\n }\n var maxY = height;\n if (draggingRow < bottom) {\n var bottomRow = draggingRow + 1;\n maxY = getOrThrow(allRowYs, bottomRow) + getOrThrow(allRowHeights, bottomRow) * 0.5 + columnHeaderHeight;\n }\n var {\n movedRows\n } = grid.state;\n if (mouseY < minY && draggingRow > 0 && model.isRowMovable(draggingRow - 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow - 1, movedRows);\n draggingRow -= 1;\n } else if (maxY < mouseY && draggingRow < rowCount - 1 && model.isRowMovable(draggingRow + 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow + 1, movedRows);\n draggingRow += 1;\n }\n grid.setState({\n movedRows,\n draggingRow\n });\n var minMoveY = columnHeaderHeight + getOrThrow(allRowHeights, top) * 0.5;\n var maxMoveY = columnHeaderHeight + getOrThrow(allRowYs, bottomVisible) + getOrThrow(allRowHeights, bottomVisible) * 0.5;\n if (mouseY < minMoveY && top > 0) {\n grid.setState({\n top: top - 1\n });\n } else if (mouseY > maxMoveY && top < lastTop) {\n grid.setState({\n top: top + 1\n });\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.draggingOffset !== undefined) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingRowOffset: null,\n draggingRow: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridRowMoveMouseHandler;\n//# sourceMappingURL=GridRowMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridSeparatorMouseHandler from \"./GridSeparatorMouseHandler.js\";\nclass GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"hiddenCursor\", 's-resize');\n _defineProperty(this, \"defaultCursor\", 'row-resize');\n _defineProperty(this, \"pointProperty\", 'y');\n _defineProperty(this, \"userSizesProperty\", 'userRowHeights');\n _defineProperty(this, \"visibleOffsetProperty\", 'visibleRowYs');\n _defineProperty(this, \"visibleSizesProperty\", 'visibleRowHeights');\n _defineProperty(this, \"marginProperty\", 'columnHeaderHeight');\n _defineProperty(this, \"calculatedSizesProperty\", 'calculatedRowHeights');\n _defineProperty(this, \"initialSizesProperty\", 'initialRowHeights');\n _defineProperty(this, \"modelIndexesProperty\", 'modelRows');\n _defineProperty(this, \"firstIndexProperty\", 'firstRow');\n _defineProperty(this, \"treePaddingProperty\", 'treePaddingY');\n _defineProperty(this, \"getHiddenItems\", GridUtils.getHiddenRows);\n _defineProperty(this, \"getNextShownItem\", GridUtils.getNextShownRow);\n _defineProperty(this, \"getSeparator\", GridRowSeparatorMouseHandler.getRowSeparator);\n }\n static getRowSeparator(gridPoint, metrics, model, theme) {\n if (!theme.allowRowResize) {\n return null;\n }\n var {\n x,\n y\n } = gridPoint;\n var index = GridUtils.getRowSeparatorIndex(x, y, metrics, theme);\n return index != null ? {\n index,\n depth: 0\n } : null;\n }\n setSize(metricCalculator, modelIndex, size) {\n metricCalculator.setRowHeight(modelIndex, size);\n }\n resetSize(metricCalculator, modelIndex) {\n metricCalculator.resetRowHeight(modelIndex);\n }\n updateSeparator(grid, separator) {\n grid.setState({\n draggingRowSeparator: separator,\n isDragging: separator !== null\n });\n }\n}\nexport default GridRowSeparatorMouseHandler;\n//# sourceMappingURL=GridRowSeparatorMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass GridScrollBarCornerMouseHandler extends GridMouseHandler {\n isInCorner(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n width,\n height,\n hasVerticalBar,\n hasHorizontalBar\n } = metrics;\n return scrollBarSize > 0 && hasVerticalBar && hasHorizontalBar && x >= width - scrollBarSize && y >= height - scrollBarSize && x <= width && y <= height;\n }\n onDown(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n}\nexport default GridScrollBarCornerMouseHandler;\n//# sourceMappingURL=GridScrollBarCornerMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridVerticalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getTopWithOffsetFromRawTop(grid, rawTop) {\n var theme = grid.getTheme();\n var {\n metrics,\n metricCalculator\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToRow) {\n var _top = Math.round(rawTop);\n var _topOffset = 0;\n return {\n top: _top,\n topOffset: _topOffset\n };\n }\n var top = Math.floor(rawTop);\n var topOffsetPercent = rawTop - top;\n var rowHeight = metrics.allRowHeights.get(top);\n if (rowHeight == null) {\n var metricState = grid.getMetricState();\n rowHeight = metricCalculator.getVisibleRowHeight(top, metricState);\n }\n var topOffset = rowHeight * topOffsetPercent;\n return {\n top,\n topOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var {\n scrollBarSize,\n scrollBarHoverSize\n } = theme;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n x,\n y\n } = gridPoint;\n var {\n barTop,\n barHeight,\n width,\n hasVerticalBar\n } = metrics;\n return hasVerticalBar && scrollBarSize > 0 && x >= width - scrollBarHoverSize && x < width && y > barTop && y < barTop + barHeight;\n }\n getTopWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n barHeight,\n handleHeight,\n lastTop,\n barTop,\n rowCount,\n scrollableContentHeight,\n scrollableViewportHeight\n } = metrics;\n var mouseBarY = y - barTop;\n var scrollPercent = clamp((mouseBarY - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barHeight - handleHeight), 0, 1);\n if (rowCount === 1) {\n return {\n top: 0,\n topOffset: scrollPercent * (scrollableContentHeight - scrollableViewportHeight)\n };\n }\n var rawTop = scrollPercent * lastTop;\n return GridVerticalScrollBarMouseHandler.getTopWithOffsetFromRawTop(grid, rawTop);\n }\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n y\n } = gridPoint;\n var {\n handleHeight,\n barTop,\n scrollY\n } = metrics;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarY = y - barTop;\n if (mouseBarY >= scrollY && mouseBarY <= scrollY + handleHeight) {\n // Grabbed the vertical handle\n this.dragOffset = mouseBarY - scrollY;\n grid.setState({\n isDraggingVerticalScrollBar: true\n });\n } else {\n // clicked elsewhere in bar\n this.dragOffset = 0;\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var {\n top: newTop,\n topOffset: newTopOffset\n } = this.getTopWithOffset(gridPoint, grid);\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingVerticalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridVerticalScrollBarMouseHandler;\n//# sourceMappingURL=GridVerticalScrollBarMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick(_ref, grid) {\n var {\n column,\n row\n } = _ref;\n var {\n model\n } = grid.props;\n if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\nexport default EditMouseHandler;\n//# sourceMappingURL=EditMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n/* eslint @typescript-eslint/no-unused-vars: \"off\" */\n/**\n * Handle keys in a grid\n * Return true from any of the events to indicate they're consumed, and stopPropagation/preventDefault will be called.\n */\n\n/**\n * Some events we listen to are a native keyboard event, and others are wrapped with React's SyntheticEvent.\n * The KeyHandler shouldn't care though - the properties it accesses should be common on both types of events.\n */\n\nexport class KeyHandler {\n // What order this key handler should trigger in\n // Default to well below any of the GRID key handlers 100-1000+\n constructor() {\n var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;\n _defineProperty(this, \"order\", void 0);\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\n _defineProperty(this, \"cursor\", null);\n this.order = order;\n }\n /**\n * Handle a keydown event on the grid.\n * @param event The keyboard event\n * @param grid The grid component the key press is on\n * @returns Response indicating if the key was consumed\n */\n onDown(event, grid) {\n return false;\n }\n\n /**\n * Handle a keyup event on the grid.\n * @param event The keyboard event\n * @param grid The grid component the key press is on\n * @returns Response indicating if the key was consumed\n */\n onUp(event, grid) {\n return false;\n }\n}\nexport default KeyHandler;\n//# sourceMappingURL=KeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport GridRange from \"../GridRange.js\";\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass SelectionKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(event)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, event, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, event, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, event, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, event, grid);\n /**\n * h/j/k/l keys are grouped together for quick navigation by power users.\n * Bender added these as shortcuts in the original commit of keyboard shortcuts.\n * We have no idea why, or what might have inspired them (not excel, not swing, vim?).\n * Maybe lack of page up keys on a laptop at the time?\n */\n case 'k':\n case 'K':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageUp(event, grid);\n case 'j':\n case 'J':\n if (GridUtils.isModifierKeyDown(event)) return false;\n return this.handlePageDown(event, grid);\n case 'h':\n case 'H':\n if (GridUtils.isModifierKeyDown(event)) return false;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(0, grid.state.cursorRow, event.shiftKey);\n return true;\n case 'l':\n case 'L':\n {\n if (GridUtils.isModifierKeyDown(event)) return false;\n var {\n model\n } = grid.props;\n var {\n columnCount\n } = model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow, event.shiftKey);\n return true;\n }\n case 'PageDown':\n return this.handlePageDown(event, grid);\n case 'PageUp':\n return this.handlePageUp(event, grid);\n case 'Home':\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : 0, GridUtils.isModifierKeyDown(event) ? 0 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n case 'End':\n {\n var {\n model: _model\n } = grid.props;\n var {\n columnCount: _columnCount,\n rowCount\n } = _model;\n if (!event.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(GridUtils.isModifierKeyDown(event) ? grid.state.cursorColumn : _columnCount - 1, GridUtils.isModifierKeyDown(event) ? rowCount - 1 : grid.state.cursorRow, event.shiftKey, true, true);\n return true;\n }\n case 'Escape':\n if (grid.state.selectedRanges.length === 0) return false;\n grid.clearSelectedRanges();\n // consume the event, and stop propagation only if there were selected ranges to clear\n return {\n preventDefault: false,\n stopPropagation: true\n };\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(event.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n handleArrowMove(deltaColumn, deltaRow, event, grid) {\n var isShiftKey = event.shiftKey;\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = grid.state;\n var column = isShiftKey ? selectionEndColumn : cursorColumn;\n var row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n var {\n model\n } = grid.props;\n var {\n columnCount,\n rowCount\n } = model;\n var maximizePreviousRange = isModifierKey && isShiftKey;\n var moveToColumn = null;\n var moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);\n }\n } else {\n if (!grid.metrics) throw new Error('grid.metrics are not set');\n var {\n theme\n } = grid.props;\n var {\n autoSelectRow = false,\n autoSelectColumn = false\n } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n var {\n lastLeft\n } = grid.metrics;\n var {\n left\n } = grid.state;\n left = clamp(left + deltaColumn, 0, lastLeft);\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n grid.setViewState({\n left\n });\n } else if (autoSelectColumn && deltaRow !== 0) {\n var {\n lastTop\n } = grid.metrics;\n var {\n top\n } = grid.state;\n top = clamp(top + deltaRow, 0, lastTop);\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n grid.setViewState({\n top\n });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n handlePageUp(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n cursorColumn,\n selectionEndRow\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row == null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar\n } = metricCalculator.getMetrics(metricState);\n var selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n var viewportPosition = Math.max(selectRangeEndPosition - (row - topVisible), 0);\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n handlePageDown(e, grid) {\n var isShiftKey = e.shiftKey;\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n var {\n selectionEndRow,\n cursorColumn\n } = grid.state;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row === null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var {\n metricCalculator\n } = grid;\n var {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop\n } = metricCalculator.getMetrics(metricState);\n var lastRowIndex = rowCount - 1;\n var selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));\n grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);\n grid.setViewState({\n top: viewportPosition\n });\n return true;\n }\n}\nexport default SelectionKeyHandler;\n//# sourceMappingURL=SelectionKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isExpandableGridModel } from \"../ExpandableGridModel.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nclass TreeKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n {\n return this.handleExpandKey(event, grid);\n }\n default:\n break;\n }\n return false;\n }\n handleExpandKey(event, grid) {\n var {\n selectedRanges\n } = grid.state;\n if (selectedRanges.length === 1) {\n var range = selectedRanges[0];\n if (range.startRow === range.endRow && range.startColumn === range.endColumn) {\n if (!grid.metrics) throw new Error('grid.metrics not set');\n var {\n model\n } = grid.props;\n var {\n startRow: row,\n startColumn: column\n } = range;\n if (row != null) {\n var modelRow = grid.getModelRow(row);\n if ((column === 0 || column == null) && isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\nexport default TreeKeyHandler;\n//# sourceMappingURL=TreeKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridRange from \"../GridRange.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nclass EditKeyHandler extends KeyHandler {\n onDown(event, grid) {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n var {\n model\n } = grid.props;\n var {\n cursorColumn,\n cursorRow\n } = grid.state;\n if (cursorColumn == null || cursorRow == null || !isEditableGridModel(model) || !model.isEditableRange(GridRange.makeCell(cursorColumn, cursorRow))) {\n return false;\n }\n var column = cursorColumn;\n var row = cursorRow;\n if (column == null || row == null) {\n return false;\n }\n if (event.key.length === 1) {\n grid.startEditing(column, row, true, [1, 1], event.key);\n return true;\n }\n if (event.key === 'F2') {\n grid.startEditing(column, row);\n return true;\n }\n if (event.key === 'Backspace') {\n grid.startEditing(column, row, true, undefined, '');\n return true;\n }\n if (event.key === 'Delete') {\n grid.setValueForCell(column, row, '');\n return true;\n }\n return false;\n }\n}\nexport default EditKeyHandler;\n//# sourceMappingURL=EditKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport KeyHandler from \"../KeyHandler.js\";\n/**\n * Parse out data from an HTML table. Currently does not support colspan/rowspan\n * @param table HTML Table\n * @returns A two dimensional array with the data found in the table\n */\nexport function parseValueFromTable(table) {\n var data = [];\n var rows = table.querySelectorAll('tr');\n for (var r = 0; r < rows.length; r += 1) {\n var row = rows[r];\n var cells = row.querySelectorAll('td');\n var rowData = [];\n for (var c = 0; c < cells.length; c += 1) {\n var _cell$textContent$tri, _cell$textContent;\n var cell = cells[c];\n rowData.push((_cell$textContent$tri = (_cell$textContent = cell.textContent) === null || _cell$textContent === void 0 ? void 0 : _cell$textContent.trim()) !== null && _cell$textContent$tri !== void 0 ? _cell$textContent$tri : '');\n }\n data.push(rowData);\n }\n return data;\n}\n\n/**\n * Parses out a table of data from HTML elements. Treats each element as one rows.\n * Filters out blank rows.\n * @param rows The elements to parse out\n * @returns A string table of data\n */\nexport function parseValueFromNodes(nodes) {\n var result = [];\n nodes.forEach(node => {\n var _node$textContent;\n var text = (_node$textContent = node.textContent) !== null && _node$textContent !== void 0 ? _node$textContent : '';\n if (text.length > 0) {\n // When Chrome pastes a table from text, it preserves the tab characters\n // In Firefox, it breaks it into a combination of non-breaking spaces and spaces\n result.push(text.split(/\\t|\\u00a0\\u00a0\\u00a0 /));\n }\n });\n return result;\n}\nexport function parseValueFromElement(element) {\n var _element$textContent$, _element$textContent;\n // Check first if there's an HTML table element that we can use\n var table = element.querySelector('table');\n if (table != null) {\n return parseValueFromTable(table);\n }\n\n // Otherwise check if there's any text content at all\n var text = (_element$textContent$ = (_element$textContent = element.textContent) === null || _element$textContent === void 0 ? void 0 : _element$textContent.trim()) !== null && _element$textContent$ !== void 0 ? _element$textContent$ : '';\n if (text.length > 0) {\n // If there's text content, try and parse out a table from the child nodes. Each node is a row.\n // If there's only one row and it doesn't contain a tab, then just treat it as a regular value\n var {\n childNodes\n } = element;\n var hasTabChar = text.includes('\\t');\n var hasFirefoxTab = text.includes('\\u00a0\\u00a0\\u00a0 ');\n if (hasTabChar && childNodes.length !== 0 && (childNodes.length === 1 || childNodes.length > 1 && (childNodes[0].textContent == null || !childNodes[0].textContent.includes('\\t')))) {\n // When Chrome pastes a single row, it gets split into multiple child nodes\n // If we check the first child node and it doesn't have a tab character, but the full element text content does, then\n // just parse the text out separated by the tab chars\n return text.split('\\n').map(row => row.split('\\t'));\n }\n if (childNodes.length > 1 || hasFirefoxTab) {\n return parseValueFromNodes(element.childNodes);\n }\n // If there's no tabs or no multiple rows, than just treat it as one value\n return text;\n }\n return null;\n}\n\n/**\n * Handles the paste key combination\n */\nclass PasteKeyHandler extends KeyHandler {\n onDown(event, grid) {\n switch (event.key) {\n case 'v':\n if (GridUtils.isModifierKeyDown(event)) {\n // Chrome doesn't allow the paste event on canvas elements\n // Instead, we capture the ctrl+v keydown, then do this to capture the input\n var dummyInput = document.createElement('div');\n document.body.appendChild(dummyInput);\n dummyInput.setAttribute('contenteditable', 'true');\n\n // Give it invisible styling\n dummyInput.setAttribute('style', 'clip-path: \"inset(50%)\"; height: 1px; width: 1px; margin: -1px; overflow: hidden; padding 0; position: absolute;');\n var listener = () => {\n dummyInput.removeEventListener('input', listener);\n dummyInput.remove();\n grid.focus();\n var value = parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n\n // Listen for the `input` event, when there's a change to the HTML\n // We could also listen to the `paste` event to get the clipboard data, but that's just text data\n // By listening to `input`, we can get a table that's already parsed in HTML, which is easier to consume\n dummyInput.addEventListener('input', listener);\n\n // Focus the element so it receives the paste event\n dummyInput.focus();\n\n // Don't block the paste event from updating our dummy input\n return {\n preventDefault: false,\n stopPropagation: true\n };\n }\n break;\n }\n return false;\n }\n}\nexport default PasteKeyHandler;\n//# sourceMappingURL=PasteKeyHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport \"./CellInputField.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar directionForKey = key => {\n switch (key) {\n case 'ArrowDown':\n return SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return SELECTION_DIRECTION.RIGHT;\n default:\n return undefined;\n }\n};\nexport function CellInputField(_ref) {\n var {\n selectionRange,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = EMPTY_FUNCTION,\n onCancel = EMPTY_FUNCTION,\n onDone = EMPTY_FUNCTION,\n onContextMenu = EMPTY_FUNCTION,\n style\n } = _ref;\n var inputField = useRef(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n var isCancelled = useRef(false);\n var [initialValue] = useState(propsValue);\n var [isChanged, setIsChanged] = useState(false);\n var [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n var [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(function selectInputField() {\n var {\n current: field\n } = inputField;\n if (field == null) {\n return;\n }\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n }, [selectionRange]);\n var sendUpdate = useCallback(newValue => {\n onChange(newValue);\n }, [onChange]);\n var handleChange = useCallback(event => {\n var {\n value: newValue\n } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n }, [sendUpdate, setValue, setIsChanged]);\n var handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n var handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n var handleCommit = useCallback(function (direction) {\n var fillRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n onDone(value, {\n direction,\n fillRange\n });\n }, [onDone, value]);\n var handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n var handleKeyDown = useCallback(event => {\n event.stopPropagation();\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(undefined, true);\n } else if (event.altKey) {\n var newValue = \"\".concat(value, \"\\n\");\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.UP : SELECTION_DIRECTION.DOWN);\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.LEFT : SELECTION_DIRECTION.RIGHT);\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n }, [handleCancel, handleCommit, isQuickEdit, setValue, setIsChanged, sendUpdate, value]);\n var handleContextMenu = useCallback(event => {\n onContextMenu(event);\n }, [onContextMenu]);\n return /*#__PURE__*/_jsx(\"textarea\", {\n ref: inputField,\n className: classNames('grid-cell-input-field', className),\n value: value,\n onBlur: handleBlur,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n onContextMenu: handleContextMenu,\n onClick: handleClick,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\",\n disabled: disabled,\n style: style\n });\n}\nexport default CellInputField;\n//# sourceMappingURL=CellInputField.js.map","import React from 'react';\nexport var ThemeContext = /*#__PURE__*/React.createContext({});\nexport default ThemeContext;\n//# sourceMappingURL=ThemeContext.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport clamp from 'lodash.clamp';\nimport { assertNotNull, EMPTY_ARRAY, getChangedKeys } from '@deephaven/utils';\nimport GridMetricCalculator from \"./GridMetricCalculator.js\";\nimport GridTheme from \"./GridTheme.js\";\nimport GridRange, { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridRenderer from \"./GridRenderer.js\";\nimport GridUtils, { isLinkToken } from \"./GridUtils.js\";\nimport { GridSelectionMouseHandler, GridColumnMoveMouseHandler, GridColumnSeparatorMouseHandler, GridHorizontalScrollBarMouseHandler, GridRowMoveMouseHandler, GridRowSeparatorMouseHandler, GridRowTreeMouseHandler, GridScrollBarCornerMouseHandler, GridVerticalScrollBarMouseHandler, EditMouseHandler, GridTokenMouseHandler } from \"./mouse-handlers/index.js\";\nimport \"./Grid.css\";\nimport { EditKeyHandler, PasteKeyHandler, SelectionKeyHandler, TreeKeyHandler } from \"./key-handlers/index.js\";\nimport CellInputField from \"./CellInputField.js\";\nimport PasteError from \"./errors/PasteError.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { assertIsEditableGridModel, isEditableGridModel } from \"./EditableGridModel.js\";\nimport { assertIsDefined } from \"./errors/index.js\";\nimport ThemeContext from \"./ThemeContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * High performance, extendible, themeable grid component.\n * Architectured to be fast and handle billions of rows/columns by default.\n * The base model does not provide support for sorting, filtering, etc.\n * To get that functionality, extend GridModel/GridRenderer, and add onClick/onContextMenu handlers to implement your own sort.\n *\n * Extend GridModel with your own data model to provide the data for the grid.\n * Extend GridTheme to change the appearance if the grid. See GridTheme for all the settable values.\n * Extend GridMetricCalculator to provide different metrics for the grid, such as column sizing, header sizing, etc.\n * Extend GridRenderer to have complete control over the rendering process. Can override just one method such as drawColumnHeader, or override the whole drawCanvas process.\n *\n * Add an onViewChanged callback to page in/out data as user moves around the grid\n * Can also add onClick and onContextMenu handlers to add custom functionality and menus.\n */\nclass Grid extends PureComponent {\n /**\n * On some devices there may be different scaling required for high DPI. Get the scale required for the canvas.\n * @param context The canvas context\n * @returns The scale to use\n */\n static getScale(context) {\n var _ref, _ref2, _ref3, _ref4, _legacyContext$webkit;\n var devicePixelRatio = window.devicePixelRatio || 1;\n\n // backingStorePixelRatio is deprecated, but check it just in case\n var legacyContext = context;\n var backingStorePixelRatio = // Not worth converting to a massive if structure\n // Converting would reduce readability and maintainability\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n (_ref = (_ref2 = (_ref3 = (_ref4 = (_legacyContext$webkit = legacyContext.webkitBackingStorePixelRatio) !== null && _legacyContext$webkit !== void 0 ? _legacyContext$webkit : legacyContext.mozBackingStorePixelRatio) !== null && _ref4 !== void 0 ? _ref4 : legacyContext.msBackingStorePixelRatio) !== null && _ref3 !== void 0 ? _ref3 : legacyContext.oBackingStorePixelRatio) !== null && _ref2 !== void 0 ? _ref2 : legacyContext.backingStorePixelRatio) !== null && _ref !== void 0 ? _ref : 1;\n return devicePixelRatio / backingStorePixelRatio;\n }\n\n /**\n * Get the class name from the cursor provided\n * @param cursor The grid cursor to use\n * @returns Class name with the grid-cursor prefix or null if no cursor provided\n */\n static getCursorClassName(cursor) {\n return cursor != null && cursor !== '' ? \"grid-cursor-\".concat(cursor) : null;\n }\n\n // Need to disable react/sort-comp so I can put the fields here\n /* eslint-disable react/sort-comp */\n\n /* eslint-enable react/sort-comp */\n\n constructor(props) {\n super(props);\n _defineProperty(this, \"renderer\", void 0);\n _defineProperty(this, \"metricCalculator\", void 0);\n _defineProperty(this, \"canvas\", void 0);\n _defineProperty(this, \"canvasContext\", void 0);\n // The wrapper element for the canvas, used for sizing\n _defineProperty(this, \"canvasWrapper\", void 0);\n // Listen for resizing of the element and update the canvas appropriately\n _defineProperty(this, \"resizeObserver\", void 0);\n // We draw the canvas on the next animation frame, keep track of the next one\n _defineProperty(this, \"animationFrame\", void 0);\n // Keep track of previous metrics and new metrics for comparison\n _defineProperty(this, \"prevMetrics\", void 0);\n _defineProperty(this, \"metrics\", void 0);\n _defineProperty(this, \"renderState\", void 0);\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n _defineProperty(this, \"documentCursor\", void 0);\n _defineProperty(this, \"dragTimer\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].sort((a, b) => a.order - b.order)));\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.notifyKeyboardHandlers = this.notifyKeyboardHandlers.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n var {\n isStuckToBottom,\n isStuckToRight,\n metricCalculator,\n movedColumns,\n movedRows,\n renderer\n } = props;\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n this.canvas = null;\n this.canvasContext = null;\n this.canvasWrapper = /*#__PURE__*/React.createRef();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.animationFrame = null;\n this.prevMetrics = null;\n this.metrics = null;\n this.renderState = {};\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [new EditKeyHandler(400), new PasteKeyHandler(450), new SelectionKeyHandler(500), new TreeKeyHandler(900)];\n this.mouseHandlers = [new GridRowSeparatorMouseHandler(100), new GridColumnSeparatorMouseHandler(200), new GridRowMoveMouseHandler(300), new GridColumnMoveMouseHandler(400), new EditMouseHandler(450), new GridVerticalScrollBarMouseHandler(500), new GridHorizontalScrollBarMouseHandler(600), new GridScrollBarCornerMouseHandler(700), new GridRowTreeMouseHandler(800), new GridTokenMouseHandler(875), new GridSelectionMouseHandler(900)];\n this.state = {\n // Top/left visible cell in the grid. Note that it's visible row/column index, not the model index (ie. if columns are re-ordered)\n top: 0,\n left: 0,\n // The scroll offset of the top/left cell. 0,0 means the cell is at the top left\n // Should be less than the width of the column\n topOffset: 0,\n leftOffset: 0,\n // current column/row that user is dragging\n draggingColumn: null,\n draggingRow: null,\n // Offset when dragging a row\n draggingRowOffset: null,\n // When drawing header separators for resizing\n draggingColumnSeparator: null,\n draggingRowSeparator: null,\n isDraggingHorizontalScrollBar: false,\n isDraggingVerticalScrollBar: false,\n // Anything is performing a drag, for blocking hover rendering\n isDragging: false,\n // The coordinates of the mouse. May be outside of the canvas\n mouseX: null,\n mouseY: null,\n // Move operations the user has performed on this grids columns/rows\n movedColumns,\n movedRows,\n // Cursor (highlighted cell) location and active selected range\n cursorRow: null,\n cursorColumn: null,\n selectionStartRow: null,\n selectionStartColumn: null,\n selectionEndRow: null,\n selectionEndColumn: null,\n // Currently selected ranges and previously selected ranges\n // Store the previously selected ranges to determine if the new selection should\n // deselect again (if it's the same range)\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n // The mouse cursor style to use when hovering over the grid element\n cursor: null,\n // { column: number, row: number, selectionRange: [number, number], value: string | null, isQuickEdit?: boolean }\n // The cell that is currently being edited\n editingCell: null,\n isStuckToBottom,\n isStuckToRight,\n /** What revision the grid is drawing. Automatically increments when a forceUpdate is called. */\n updateRevision: 0\n };\n }\n componentDidMount() {\n var _this$canvas;\n this.initContext();\n\n // Need to explicitly add wheel event to canvas so we can preventDefault/avoid passive listener issue\n // Otherwise React attaches listener at doc level and you can't prevent default\n // https://github.com/facebook/react/issues/14856\n (_this$canvas = this.canvas) === null || _this$canvas === void 0 || _this$canvas.addEventListener('wheel', this.handleWheel, {\n passive: false\n });\n if (this.canvasWrapper.current != null) {\n this.resizeObserver.observe(this.canvasWrapper.current);\n }\n this.updateCanvas();\n\n // apply on mount, so that it works with a static model\n // https://github.com/deephaven/web-client-ui/issues/581\n var {\n isStuckToBottom,\n isStuckToRight\n } = this.props;\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStuckToBottom, isStuckToRight);\n this.setState({\n top,\n left\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n renderError\n } = this.state;\n\n // Render errors mean we can't recover\n if (renderError != null) {\n throw renderError;\n }\n var changedProps = getChangedKeys(prevProps, this.props);\n var changedState = getChangedKeys(prevState, this.state);\n // We don't need to bother re-checking any of the metrics if no props have changed or only the children have changed\n if ((changedProps.length === 0 || changedProps.length === 1 && changedProps[0] === 'children') && changedState.length === 0) {\n return;\n }\n var {\n isStickyBottom,\n isStickyRight,\n movedColumns,\n movedRows,\n onMovedColumnsChanged,\n onMoveColumnComplete,\n onMovedRowsChanged,\n onMoveRowComplete\n } = this.props;\n var {\n isStickyBottom: prevIsStickyBottom,\n isStickyRight: prevIsStickyRight,\n movedColumns: prevPropMovedColumns,\n movedRows: prevPropMovedRows\n } = prevProps;\n var {\n movedColumns: prevStateMovedColumns,\n movedRows: prevStateMovedRows\n } = prevState;\n var {\n draggingColumn,\n draggingRow,\n movedColumns: currentStateMovedColumns,\n movedRows: currentStateMovedRows\n } = this.state;\n var stateUpdates = {};\n if (prevPropMovedColumns !== movedColumns) {\n stateUpdates.movedColumns = movedColumns;\n }\n if (prevPropMovedRows !== movedRows) {\n stateUpdates.movedRows = movedRows;\n }\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n if (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n if (isStickyBottom !== prevIsStickyBottom) {\n stateUpdates.isStuckToBottom = false;\n }\n if (isStickyRight !== prevIsStickyRight) {\n stateUpdates.isStuckToRight = false;\n }\n var updatedState = _objectSpread(_objectSpread({}, this.state), stateUpdates);\n this.updateMetrics(updatedState);\n this.requestUpdateCanvas();\n if (this.needToUpdateScroll()) {\n var {\n top,\n left\n } = this.getStickyScrollPosition(isStickyBottom, isStickyRight);\n updatedState.top = top;\n updatedState.left = left;\n }\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n this.setState(updatedState);\n }\n componentWillUnmount() {\n var _this$canvas2;\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n (_this$canvas2 = this.canvas) === null || _this$canvas2 === void 0 || _this$canvas2.removeEventListener('wheel', this.handleWheel);\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n this.resizeObserver.disconnect();\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n getTheme() {\n var {\n theme\n } = this.props;\n return Grid.getTheme(this.context, theme);\n }\n getGridPointFromEvent(event) {\n assertIsDefined(this.canvas);\n var rect = this.canvas.getBoundingClientRect();\n var x = event.clientX - rect.left;\n var y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n getGridPointFromXY(x, y) {\n if (!this.metrics) throw new Error('metrics must be set');\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n getMetricState() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n var theme = this.getTheme();\n var {\n model,\n stateOverride\n } = this.props;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\n var context = this.canvasContext;\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n var {\n left,\n top,\n leftOffset,\n topOffset,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n } = state;\n return _objectSpread({\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n }, stateOverride);\n }\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex) {\n var _this$metrics;\n var modelIndex = (_this$metrics = this.metrics) === null || _this$metrics === void 0 || (_this$metrics = _this$metrics.modelColumns) === null || _this$metrics === void 0 ? void 0 : _this$metrics.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for column \".concat(columnIndex));\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex) {\n var _this$metrics2;\n var modelIndex = (_this$metrics2 = this.metrics) === null || _this$metrics2 === void 0 || (_this$metrics2 = _this$metrics2.modelRows) === null || _this$metrics2 === void 0 ? void 0 : _this$metrics2.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for row \".concat(rowIndex));\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row) {\n var expandDescendants = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var modelRow = this.getModelRow(row);\n var {\n model\n } = this.props;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow), expandDescendants);\n }\n this.clearSelectedRanges();\n this.commitSelection(); // Need to commit before moving in case we're selecting same row again\n this.moveCursorToPosition(0, row);\n this.commitSelection();\n this.setState({\n isStuckToBottom: false\n });\n }\n getStickyScrollPosition(isStickyBottom, isStickyRight) {\n // eslint-disable-next-line react/destructuring-assignment\n if (!this.metrics) return {\n left: this.state.left,\n top: this.state.top\n };\n var {\n bottomVisible,\n rowCount,\n top,\n lastTop,\n rightVisible,\n columnCount,\n left,\n lastLeft\n } = this.metrics;\n var newTop = top;\n var newLeft = left;\n if (isStickyBottom && (bottomVisible < rowCount - 1 && bottomVisible > 0 || top > lastTop)) {\n newTop = lastTop;\n }\n if (isStickyRight && (rightVisible < columnCount - 1 && rightVisible > 0 || left > lastLeft)) {\n newLeft = lastLeft;\n }\n return {\n top: newTop,\n left: newLeft\n };\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: gridRanges,\n lastSelectedRanges: selectedRanges\n });\n if (gridRanges.length > 0) {\n var range = GridRange.boundedRange(gridRanges[0], columnCount, rowCount);\n var newCursorRow = cursorRow;\n var newCursorColumn = cursorColumn;\n if (!range.containsCell(cursorColumn, cursorRow)) {\n ({\n row: newCursorRow,\n column: newCursorColumn\n } = range.startCell());\n }\n this.setState({\n selectionStartColumn: range.startColumn,\n selectionStartRow: range.startRow,\n selectionEndColumn: range.endColumn,\n selectionEndRow: range.endRow,\n cursorColumn: newCursorColumn,\n cursorRow: newCursorRow\n });\n }\n }\n initContext() {\n var {\n canvas\n } = this;\n var {\n canvasOptions\n } = this.props;\n if (!canvas) throw new Error('Canvas not set');\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n requestUpdateCanvas() {\n if (this.animationFrame != null) {\n return;\n }\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n try {\n this.updateCanvas();\n } catch (e) {\n // Errors thrown from the animation frame are uncaught by the grid panel\n this.setState({\n renderError: e\n });\n }\n });\n }\n\n /**\n * Updates the canvas, metrics, and render state, then draws the canvas.\n */\n updateCanvas() {\n this.updateCanvasScale();\n this.updateMetrics();\n this.updateRenderState();\n var {\n canvasContext,\n metrics,\n renderState\n } = this;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n this.renderer.configureContext(canvasContext, renderState);\n var {\n onViewChanged\n } = this.props;\n onViewChanged(metrics);\n this.drawCanvas();\n }\n updateCanvasScale() {\n var {\n canvas,\n canvasContext,\n canvasWrapper\n } = this;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvasWrapper.current) throw new Error('canvasWrapper not set');\n\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n var rect = canvasWrapper.current.getBoundingClientRect();\n var width = Math.floor(rect.width);\n var height = Math.floor(rect.height);\n\n // avoid triggering a dom re-calc if size hasn't changed\n if (parseFloat(canvas.style.width) === width && parseFloat(canvas.style.height) === height) {\n return;\n }\n var scale = Grid.getScale(canvasContext);\n canvas.style.width = \"\".concat(width, \"px\");\n canvas.style.height = \"\".concat(height, \"px\");\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n updateScrollBounds() {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n left,\n top\n } = this.state;\n var {\n lastLeft,\n lastTop\n } = this.metrics;\n if (left > lastLeft) {\n this.setState({\n left: lastLeft,\n leftOffset: 0\n });\n }\n if (top > lastTop) {\n this.setState({\n top: lastTop,\n topOffset: 0\n });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n needToUpdateScroll() {\n if (!this.metrics || !this.prevMetrics) {\n return false;\n }\n var {\n rowCount,\n columnCount,\n height,\n width\n } = this.metrics;\n var {\n rowCount: prevRowCount,\n columnCount: prevColumnCount,\n height: prevHeight,\n width: prevWidth\n } = this.prevMetrics;\n if (prevRowCount !== rowCount || height !== prevHeight) {\n var {\n isStuckToBottom\n } = this.state;\n if (isStuckToBottom) {\n return true;\n }\n }\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n var {\n isStuckToRight\n } = this.state;\n if (isStuckToRight) {\n return true;\n }\n }\n return false;\n }\n updateMetrics() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n this.prevMetrics = this.metrics;\n var {\n metricCalculator\n } = this;\n var metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState) {\n var {\n selectedRanges: oldSelectedRanges\n } = prevState;\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges !== oldSelectedRanges) {\n var {\n onSelectionChanged\n } = this.props;\n onSelectionChanged(selectedRanges);\n }\n }\n\n /**\n * Validate the current selection, and reset if it is invalid\n * @returns True if the selection is valid, false if the selection was invalid and has been reset\n */\n validateSelection() {\n var {\n model\n } = this.props;\n var {\n selectedRanges\n } = this.state;\n var {\n columnCount,\n rowCount\n } = model;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var range = selectedRanges[i];\n if (range.endColumn != null && range.endColumn >= columnCount || range.endRow != null && range.endRow >= rowCount) {\n // Just clear the selection rather than trying to trim it.\n this.setState({\n selectedRanges: [],\n lastSelectedRanges: []\n });\n return false;\n }\n }\n return true;\n }\n\n /**\n * Clears all selected ranges\n */\n clearSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n this.setState({\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: selectedRanges\n });\n }\n\n /** Clears all but the last selected range */\n trimSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n if (selectedRanges.length > 0) {\n this.setState({\n selectedRanges: selectedRanges.slice(selectedRanges.length - 1)\n });\n }\n }\n\n /** Gets the selected ranges */\n getSelectedRanges() {\n var {\n selectedRanges\n } = this.state;\n return selectedRanges;\n }\n\n /**\n * Begin a selection operation at the provided location\n * @param column Column where the selection is beginning\n * @param row Row where the selection is beginning\n */\n beginSelection(column, row) {\n this.setState({\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row,\n cursorColumn: column,\n cursorRow: row\n });\n }\n\n /**\n * Moves the selection to the cell specified\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param maximizePreviousRange When true, maximize/add to the previous range only, ignoring where the selection was started.\n */\n moveSelection(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var maximizePreviousRange = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n this.setState(state => {\n var {\n selectedRanges,\n selectionStartRow,\n selectionStartColumn\n } = state;\n var {\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n if (extendSelection && selectedRanges.length > 0) {\n var lastSelectedRange = selectedRanges[selectedRanges.length - 1];\n var left = null;\n var top = null;\n var right = null;\n var bottom = null;\n if (maximizePreviousRange) {\n var _lastSelectedRange$st, _lastSelectedRange$st2, _lastSelectedRange$en, _lastSelectedRange$en2;\n left = autoSelectRow !== undefined && autoSelectRow ? null : Math.min(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$st = lastSelectedRange.startColumn) !== null && _lastSelectedRange$st !== void 0 ? _lastSelectedRange$st : 0);\n top = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.min(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$st2 = lastSelectedRange.startRow) !== null && _lastSelectedRange$st2 !== void 0 ? _lastSelectedRange$st2 : 0);\n right = autoSelectRow !== undefined && autoSelectRow ? null : Math.max(column !== null && column !== void 0 ? column : 0, (_lastSelectedRange$en = lastSelectedRange.endColumn) !== null && _lastSelectedRange$en !== void 0 ? _lastSelectedRange$en : 0);\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : Math.max(row !== null && row !== void 0 ? row : 0, (_lastSelectedRange$en2 = lastSelectedRange.endRow) !== null && _lastSelectedRange$en2 !== void 0 ? _lastSelectedRange$en2 : 0);\n } else {\n left = lastSelectedRange.startColumn;\n top = lastSelectedRange.startRow;\n if (selectionStartColumn != null || selectionStartRow != null) {\n if (autoSelectRow === undefined || !autoSelectRow) {\n left = selectionStartColumn;\n }\n if (autoSelectColumn === undefined || !autoSelectColumn) {\n top = selectionStartRow;\n }\n }\n right = autoSelectRow !== undefined && autoSelectRow ? null : column;\n bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n }\n var selectedRange = GridRange.makeNormalized(left, top, right, bottom);\n if (lastSelectedRange.equals(selectedRange)) {\n return null;\n }\n var _newRanges = [...selectedRanges];\n _newRanges[_newRanges.length - 1] = selectedRange;\n return {\n selectedRanges: _newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n }\n var newRanges = [...selectedRanges];\n var selectedColumn = autoSelectRow !== undefined && autoSelectRow ? null : column;\n var selectedRow = autoSelectColumn !== undefined && autoSelectColumn ? null : row;\n newRanges.push(GridRange.makeNormalized(selectedColumn, selectedRow, selectedColumn, selectedRow));\n return {\n selectedRanges: newRanges,\n selectionEndColumn: column,\n selectionEndRow: row\n };\n });\n }\n\n /**\n * Commits the last selected range to the selected ranges.\n * First checks if the last range is completely contained within another range, and if it\n * is then it blows those ranges apart.\n * Then it consolidates all the selected ranges, reducing them.\n */\n commitSelection() {\n this.setState(state => {\n var {\n theme\n } = this.props;\n var {\n autoSelectRow\n } = theme;\n var {\n selectedRanges,\n lastSelectedRanges,\n cursorRow,\n cursorColumn\n } = state;\n if (selectedRanges.length === 1 && (autoSelectRow !== undefined && autoSelectRow ? GridRange.rowCount(selectedRanges) === 1 : GridRange.cellCount(selectedRanges) === 1) && GridRange.rangeArraysEqual(selectedRanges, lastSelectedRanges)) {\n // If it's the exact same single selection, then deselect.\n // For if we click on one cell multiple times.\n return {\n selectedRanges: EMPTY_ARRAY,\n lastSelectedRanges: EMPTY_ARRAY,\n cursorColumn: null,\n cursorRow: null\n };\n }\n var newSelectedRanges = selectedRanges.slice();\n if (newSelectedRanges.length > 1) {\n // Check if the latest selection is entirely within a previously selected range\n // If that's the case, then deselect that section instead\n var lastRange = newSelectedRanges[newSelectedRanges.length - 1];\n for (var i = 0; i < newSelectedRanges.length - 1; i += 1) {\n var selectedRange = newSelectedRanges[i];\n if (selectedRange.contains(lastRange)) {\n // We found a match, now remove the two matching ranges, and add back\n // the remainder of the two\n var remainder = selectedRange.subtract(lastRange);\n newSelectedRanges.pop();\n newSelectedRanges.splice(i, 1);\n newSelectedRanges = newSelectedRanges.concat(remainder);\n break;\n }\n }\n newSelectedRanges = GridRange.consolidate(newSelectedRanges);\n }\n var newCursorColumn = cursorColumn;\n var newCursorRow = cursorRow;\n if (!GridRange.containsCell(newSelectedRanges, cursorColumn, cursorRow)) {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var nextCursor = GridRange.nextCell(GridRange.boundedRanges(selectedRanges, columnCount, rowCount));\n if (nextCursor != null) {\n ({\n column: newCursorColumn,\n row: newCursorRow\n } = nextCursor);\n } else {\n newCursorColumn = null;\n newCursorRow = null;\n }\n }\n if (newSelectedRanges.length === 0) {\n newCursorColumn = null;\n newCursorRow = null;\n }\n var selectionChanged = newSelectedRanges.length !== selectedRanges.length || newSelectedRanges.some((range, index) => !range.equals(selectedRanges[index]));\n return {\n cursorRow: newCursorRow,\n cursorColumn: newCursorColumn,\n // The onSelectionChanged callback has already been called with the selectedRanges at this point.\n // If the selection is not changed (e.g., the user is adding via ctrl+click and not removing),\n // there is no need to change and trigger the callback again.\n selectedRanges: selectionChanged ? newSelectedRanges : selectedRanges,\n lastSelectedRanges: selectedRanges\n };\n });\n }\n setFocusRow(focusedRow) {\n var _userRowHeights$get;\n if (!this.metrics || !this.prevMetrics) {\n return;\n }\n var {\n gridY,\n height,\n lastTop,\n userRowHeights,\n rowHeight\n } = this.metrics;\n var tableHeight = height - gridY;\n var halfViewportHeight = Math.round(tableHeight / 2) + ((_userRowHeights$get = userRowHeights.get(focusedRow)) !== null && _userRowHeights$get !== void 0 ? _userRowHeights$get : rowHeight);\n var metricState = this.getMetricState();\n var newTop = this.metricCalculator.getLastTop(metricState, focusedRow + 1, halfViewportHeight);\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false\n });\n var {\n cursorColumn\n } = this.state;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll() {\n var {\n model,\n theme\n } = this.props;\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n var top = autoSelectColumn !== undefined && autoSelectColumn ? null : 0;\n var bottom = autoSelectColumn !== undefined && autoSelectColumn ? null : model.rowCount - 1;\n var left = autoSelectRow !== undefined && autoSelectRow ? null : 0;\n var right = autoSelectRow !== undefined && autoSelectRow ? null : model.columnCount - 1;\n this.setSelectedRanges([new GridRange(left, top, right, bottom)]);\n }\n\n /**\n * Move the cursor in relation to the current cursor position\n * @param deltaColumn Number of columns to move the cursor\n * @param deltaRow Number of rows to move the cursor\n * @param extendSelection True if the current selection should be extended, false to start a new selection\n */\n moveCursor(deltaColumn, deltaRow, extendSelection) {\n var {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow\n } = this.state;\n var column = extendSelection ? selectionEndColumn : cursorColumn;\n var row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n var {\n left,\n top\n } = this.state;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var _left = clamp(column + deltaColumn, 0, columnCount - 1);\n var _top = clamp(row + deltaRow, 0, rowCount - 1);\n this.moveCursorToPosition(_left, _top, extendSelection);\n }\n }\n\n /**\n * Move the cursor in the provided selection direction\n * @param direction The direction to move the cursor in\n */\n moveCursorInDirection() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : GridRange.SELECTION_DIRECTION.DOWN;\n var {\n model\n } = this.props;\n var {\n columnCount,\n rowCount\n } = model;\n var {\n cursorRow,\n cursorColumn,\n selectedRanges\n } = this.state;\n var ranges = selectedRanges.length > 0 ? selectedRanges : [GridRange.makeCell(cursorColumn, cursorRow)];\n var nextCursor = null;\n if (ranges.length === 1 && GridRange.cellCount(ranges) === 1) {\n var _gridRange$nextCell;\n // If we only have one cell selected, we want to update the cursor and we want to update the selected cells\n var gridRange = new GridRange(0, 0, columnCount - 1, rowCount - 1);\n nextCursor = (_gridRange$nextCell = gridRange.nextCell(cursorColumn, cursorRow, direction)) !== null && _gridRange$nextCell !== void 0 ? _gridRange$nextCell : gridRange.startCell(direction);\n } else {\n nextCursor = GridRange.nextCell(GridRange.boundedRanges(ranges, columnCount, rowCount), cursorColumn, cursorRow, direction);\n }\n if (nextCursor != null) {\n var {\n column,\n row\n } = nextCursor;\n this.setState({\n cursorColumn: column,\n cursorRow: row\n });\n if (!GridRange.containsCell(selectedRanges, column, row)) {\n this.setState({\n selectedRanges: [GridRange.makeCell(column, row)],\n selectionStartColumn: column,\n selectionStartRow: row,\n selectionEndColumn: column,\n selectionEndRow: row\n });\n }\n this.moveViewToCell(nextCursor.column, nextCursor.row);\n }\n }\n\n /**\n * Move a cursor to the specified position in the grid.\n * @param column The column index to move the cursor to\n * @param row The row index to move the cursor to\n * @param extendSelection Whether to extend the current selection (eg. holding Shift)\n * @param keepCursorInView Whether to move the viewport so that the cursor is in view\n * @param maximizePreviousRange With this and `extendSelection` true, it will maximize/add to the previous range only, ignoring where the selection was started\n */\n moveCursorToPosition(column, row) {\n var extendSelection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var keepCursorInView = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var maximizePreviousRange = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (!extendSelection) {\n this.beginSelection(column, row);\n }\n this.moveSelection(column, row, extendSelection, maximizePreviousRange);\n if (keepCursorInView) {\n this.moveViewToCell(column, row);\n }\n }\n\n /**\n * Moves the view to make the specified cell visible\n *\n * @param column The column index to bring into view\n * @param row The row index to bring into view\n */\n moveViewToCell(column, row) {\n if (!this.metrics) throw new Error('metrics not set');\n var {\n metricCalculator\n } = this;\n var {\n bottomVisible,\n rightVisible,\n topVisible,\n leftVisible\n } = this.metrics;\n var metricState = this.getMetricState(this.state);\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = this.state;\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.metrics) throw new Error('metrics not set');\n var {\n isStickyBottom,\n isStickyRight\n } = this.props;\n var {\n top,\n left\n } = viewState;\n var {\n lastTop,\n lastLeft,\n hasVerticalBar,\n hasHorizontalBar\n } = this.metrics;\n if (top != null && hasVerticalBar) {\n this.setState({\n isStuckToBottom: isStickyBottom && top >= lastTop\n });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({\n isStuckToRight: isStickyRight && left >= lastLeft\n });\n }\n this.setState(viewState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(column, row) {\n var isQuickEdit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var selectionRange = arguments.length > 3 ? arguments[3] : undefined;\n var value = arguments.length > 4 ? arguments[4] : undefined;\n var {\n model\n } = this.props;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n var cell = {\n column,\n row,\n selectionRange,\n value: value !== undefined ? value : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit\n };\n this.setState({\n editingCell: cell,\n cursorColumn: column,\n cursorRow: row\n });\n this.moveViewToCell(column, row);\n }\n\n /**\n * Check if a value is valid for a specific cell\n * @param column Column index of the cell to check\n * @param row Row index of the cell to check\n * @param value Value to check\n * @returns True if the value is valid for the provided cell, false otherwise\n */\n isValidForCell(column, row, value) {\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n return isEditableGridModel(model) && model.isValidForCell(modelColumn, modelRow, value);\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param value Table or a string that is being pasted\n */\n pasteValue(value) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n var {\n movedColumns,\n movedRows,\n selectedRanges\n } = _this.state;\n try {\n assertIsEditableGridModel(model);\n if (!model.isEditable || !selectedRanges.every(range => model.isEditableRange(range))) {\n throw new PasteError(\"Can't paste in to read-only area.\");\n }\n if (selectedRanges.length <= 0) {\n throw new PasteError('Select an area to paste to.');\n }\n if (typeof value === 'string') {\n // Just paste the value into all the selected cells\n var _edits = [];\n var modelRanges = GridUtils.getModelRanges(selectedRanges, movedColumns, movedRows);\n GridRange.forEachCell(modelRanges, (column, row) => {\n _edits.push({\n column,\n row,\n text: value\n });\n });\n yield model.setValues(_edits);\n return;\n }\n\n // Otherwise it's a table of data\n var tableHeight = value.length;\n var tableWidth = value[0].length;\n var {\n columnCount,\n rowCount\n } = model;\n var ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n // Check for\n if (ranges.every(range => {\n var _range$startColumn, _range$startRow;\n return GridRange.cellCount([range]) === 1 && ((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0) + tableWidth <= columnCount && ((_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0) + tableHeight <= rowCount;\n })) {\n // Remap the selected ranges\n ranges = ranges.map(range => {\n var _range$startColumn2, _range$startRow2;\n return new GridRange(range.startColumn, range.startRow, ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : 0) + tableWidth - 1, ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : 0) + tableHeight - 1);\n });\n _this.setSelectedRanges(ranges);\n }\n var edits = [];\n ranges.forEach(range => {\n var _range$startColumn3;\n if (((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : 0) + tableWidth > columnCount) {\n throw new PasteError('Pasted content would overflow columns.');\n }\n for (var x = 0; x < tableWidth; x += 1) {\n for (var y = 0; y < tableHeight; y += 1) {\n var _range$startColumn4, _range$startRow3;\n edits.push({\n column: ((_range$startColumn4 = range.startColumn) !== null && _range$startColumn4 !== void 0 ? _range$startColumn4 : 0) + x,\n row: ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : 0) + y,\n text: value[y][x]\n });\n }\n }\n });\n yield model.setValues(edits);\n } catch (e) {\n var {\n onError\n } = _this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n }\n })();\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(column, row, value) {\n var {\n model\n } = this.props;\n assertIsEditableGridModel(model);\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value);\n return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges, value) {\n var {\n model\n } = this.props;\n var {\n movedColumns,\n movedRows\n } = this.state;\n var modelRanges = GridUtils.getModelRanges(ranges, movedColumns, movedRows);\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value);\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row, column) {\n var {\n selectedRanges\n } = this.state;\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var _selectedRange$endRow, _selectedRange$endCol;\n var selectedRange = selectedRanges[i];\n var rowSelected = selectedRange.startRow === null || selectedRange.startRow <= row && row <= ((_selectedRange$endRow = selectedRange.endRow) !== null && _selectedRange$endRow !== void 0 ? _selectedRange$endRow : 0);\n var columnSelected = selectedRange.startColumn === null || selectedRange.startColumn <= column && column <= ((_selectedRange$endCol = selectedRange.endColumn) !== null && _selectedRange$endCol !== void 0 ? _selectedRange$endCol : 0);\n if (rowSelected && columnSelected) {\n return true;\n }\n }\n return false;\n }\n addDocumentCursor() {\n var cursor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (this.documentCursor === Grid.getCursorClassName(cursor)) return;\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n }\n this.documentCursor = Grid.getCursorClassName(cursor);\n if (this.documentCursor != null) {\n document.documentElement.classList.add(this.documentCursor);\n }\n document.documentElement.classList.add('grid-block-events');\n }\n removeDocumentCursor() {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n document.documentElement.classList.remove('grid-block-events');\n this.documentCursor = null;\n }\n }\n startDragTimer(event) {\n this.stopDragTimer();\n var mouseEvent = new MouseEvent('custom', event.nativeEvent);\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n stopDragTimer() {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n */\n drawCanvas() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n renderer,\n canvasContext: context,\n renderState\n } = this;\n context.save();\n renderer.drawCanvas(renderState);\n context.restore();\n }\n\n /**\n * Set focus to this grid element\n */\n focus() {\n var _this$canvas3;\n (_this$canvas3 = this.canvas) === null || _this$canvas3 === void 0 || _this$canvas3.focus();\n }\n\n /**\n * Check if this grid is currently focused\n * @returns True if the active element is this grid\n */\n isFocused() {\n return document.activeElement === this.canvas;\n }\n\n /**\n * Handle a mouse click event. Pass the event to the registered mouse handlers until one handles it.\n * Focuses the grid after the click.\n * @param event The mouse event\n */\n handleClick(event) {\n var _this$canvas4;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onClick(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n (_this$canvas4 = this.canvas) === null || _this$canvas4 === void 0 || _this$canvas4.focus();\n }\n\n /**\n * Handle a mouse context menu event. Pass the event to the registered mouse handlers until one handles it.\n * @param event The mouse event triggering the context menu\n */\n handleContextMenu(event) {\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n if (mouseHandler.onContextMenu(gridPoint, this, event) !== false) {\n event.stopPropagation();\n event.preventDefault();\n break;\n }\n }\n }\n\n /**\n * Notify all of the keyboard handlers for this grid of a keyboard event.\n * @param functionName The name of the function in the keyboard handler to call\n * @param event The keyboard event to notify\n */\n notifyKeyboardHandlers(functionName, event) {\n var keyHandlers = this.getKeyHandlers();\n var cursor = null;\n for (var i = 0; i < keyHandlers.length; i += 1) {\n var keyHandler = keyHandlers[i];\n var result = keyHandler[functionName] != null && keyHandler[functionName](event, this);\n if (result !== false) {\n var _options$stopPropagat, _options$preventDefau;\n if (keyHandler.cursor != null) {\n ({\n cursor\n } = keyHandler);\n }\n var options = result;\n if ((_options$stopPropagat = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat !== void 0 ? _options$stopPropagat : true) event.stopPropagation();\n if ((_options$preventDefau = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n }\n handleKeyDown(event) {\n this.notifyKeyboardHandlers('onDown', event);\n }\n handleKeyUp(event) {\n this.notifyKeyboardHandlers('onUp', event);\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(functionName, event) {\n var updateCoordinates = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var addCursorToDocument = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n var cursor = null;\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n var result = mouseHandler[functionName] != null && mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\n var _options$stopPropagat2, _options$preventDefau2;\n if (mouseHandler.cursor != null) {\n ({\n cursor\n } = mouseHandler);\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n var options = result;\n if ((_options$stopPropagat2 = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat2 !== void 0 ? _options$stopPropagat2 : true) event.stopPropagation();\n if ((_options$preventDefau2 = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau2 !== void 0 ? _options$preventDefau2 : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n if (updateCoordinates) {\n var {\n x,\n y\n } = gridPoint;\n this.setState({\n mouseX: x,\n mouseY: y\n });\n }\n }\n handleMouseDown(event) {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onDown', event);\n this.startDragTimer(event);\n }\n handleDoubleClick(event) {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n handleMouseMove(event) {\n this.notifyMouseHandlers('onMove', event);\n }\n handleMouseLeave(event) {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({\n mouseX: null,\n mouseY: null\n });\n }\n handleMouseDrag(event) {\n this.setState({\n isDragging: true\n });\n this.notifyMouseHandlers('onDrag', event, true, true);\n this.stopDragTimer();\n }\n handleMouseUp(event) {\n // Ignore right click while dragging\n var {\n isDragging\n } = this.state;\n if (isDragging && event.button === 2) {\n return;\n }\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onUp', event, false);\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n handleResize() {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvas();\n if (!this.metrics) throw new Error('metrics not set');\n this.forceUpdate();\n }\n forceUpdate(callback) {\n this.setState(_ref5 => {\n var {\n updateRevision = 0\n } = _ref5;\n return {\n updateRevision: (updateRevision + 1) % Number.MAX_SAFE_INTEGER\n };\n });\n super.forceUpdate(callback);\n }\n handleWheel(event) {\n this.notifyMouseHandlers('onWheel', event);\n if (event.defaultPrevented) {\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this;\n var metricState = this.getMetricState();\n if (!metrics) throw new Error('metrics not set');\n var {\n lastTop,\n lastLeft,\n columnCount,\n rowCount,\n scrollableContentWidth,\n scrollableViewportWidth,\n scrollableContentHeight,\n scrollableViewportHeight,\n hasHorizontalBar,\n hasVerticalBar\n } = metrics;\n var {\n top,\n left,\n topOffset,\n leftOffset\n } = metrics;\n var theme = this.getTheme();\n var {\n deltaX,\n deltaY\n } = GridUtils.getScrollDelta(event, metrics.barWidth, metrics.barHeight, metrics.rowHeight, metrics.rowHeight);\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n if (columnCount > 1) {\n // no scrolling needed, at directional edge\n if (leftOffset > 0 && left >= lastLeft || leftOffset < 0 && left <= 0) {\n leftOffset = 0;\n break;\n }\n } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n var maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n if (leftOffset > 0) {\n var _metrics$allColumnWid;\n // scroll right\n\n // get width of next column\n var columnWidth = (_metrics$allColumnWid = metrics.allColumnWidths.get(left)) !== null && _metrics$allColumnWid !== void 0 ? _metrics$allColumnWid : metricCalculator.getVisibleColumnWidth(left, metricState);\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n var _metrics$allColumnWid2;\n // scroll left\n\n // get width of next column\n var _columnWidth = (_metrics$allColumnWid2 = metrics.allColumnWidths.get(left - 1)) !== null && _metrics$allColumnWid2 !== void 0 ? _metrics$allColumnWid2 : metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n if (Math.abs(leftOffset) <= _columnWidth && theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + _columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if (topOffset > 0 && top >= lastTop || topOffset < 0 && top <= 0) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n var maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n if (topOffset > 0) {\n var _metrics$allRowHeight;\n // scroll direction down\n\n // get height of next row\n var rowHeight = (_metrics$allRowHeight = metrics.allRowHeights.get(top)) !== null && _metrics$allRowHeight !== void 0 ? _metrics$allRowHeight : metricCalculator.getVisibleRowHeight(top, metricState);\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n var _metrics$allRowHeight2;\n // scroll direction up\n\n // get height of next row\n var _rowHeight = (_metrics$allRowHeight2 = metrics.allRowHeights.get(top - 1)) !== null && _metrics$allRowHeight2 !== void 0 ? _metrics$allRowHeight2 : metricCalculator.getVisibleRowHeight(top - 1, metricState);\n if (Math.abs(topOffset) <= _rowHeight && theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + _rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n if (metrics.top !== top || metrics.left !== left || metrics.topOffset !== topOffset || metrics.leftOffset !== leftOffset) {\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel() {\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value) {\n this.setState(_ref6 => {\n var {\n editingCell\n } = _ref6;\n try {\n assertIsDefined(editingCell);\n return {\n editingCell: _objectSpread(_objectSpread({}, editingCell), {}, {\n value\n })\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n var {\n onError\n } = this.props;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(value) {\n var {\n direction = SELECTION_DIRECTION.DOWN,\n fillRange = false\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var {\n editingCell,\n selectedRanges\n } = this.state;\n if (!editingCell) throw new Error('editingCell not set');\n var {\n column,\n row\n } = editingCell;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction === null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({\n editingCell: null\n });\n }\n return;\n }\n if (fillRange) {\n this.setValueForRanges(selectedRanges, value);\n } else {\n this.setValueForCell(column, row, value);\n }\n if (direction !== null) {\n this.moveCursorInDirection(direction);\n }\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n renderInputField() {\n var {\n model\n } = this.props;\n var {\n editingCell\n } = this.state;\n var {\n metrics\n } = this;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n var {\n selectionRange,\n value,\n isQuickEdit\n } = editingCell;\n var {\n column,\n row\n } = editingCell;\n var {\n scrollX,\n gridX,\n gridY,\n allColumnXs,\n allRowYs,\n allColumnWidths,\n allRowHeights\n } = metrics;\n var {\n activeCellSelectionBorderWidth\n } = this.getTheme();\n var x = allColumnXs.get(column);\n var y = allRowYs.get(row);\n var w = allColumnWidths.get(column);\n var h = allRowHeights.get(row);\n\n // make sure cell doeesn't go off the left side of the grid\n var leftBorderOffset = gridX + (x !== null && x !== void 0 ? x : 0) <= 0 && scrollX <= 0 ? activeCellSelectionBorderWidth : 0;\n\n // If the cell isn't visible, we still need to display an invisible cell for focus purposes\n var wrapperStyle = x != null && y != null && w != null && h != null ? {\n position: 'absolute',\n left: gridX + x + leftBorderOffset,\n top: gridY + y,\n width: w - leftBorderOffset,\n height: h\n } : {\n opacity: 0\n };\n var modelColumn;\n var modelRow;\n try {\n modelColumn = this.getModelColumn(column);\n modelRow = this.getModelRow(row);\n } catch (e) {\n return null;\n }\n var inputStyle = modelColumn != null && modelRow != null ? {\n textAlign: model.textAlignForCell(modelColumn, modelRow)\n } : undefined;\n var isValid = modelColumn != null && modelRow != null ? model.isValidForCell(modelColumn, modelRow, value) : false;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(CellInputField, {\n selectionRange: selectionRange,\n className: classNames({\n error: !isValid\n }),\n onCancel: this.handleEditCellCancel,\n onChange: this.handleEditCellChange,\n onDone: this.handleEditCellCommit,\n isQuickEdit: isQuickEdit,\n style: inputStyle,\n value: value\n }, \"\".concat(column, \",\").concat(row))\n });\n }\n\n /**\n * Gets the render state\n * @returns The render state\n */\n updateRenderState() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var {\n cursorColumn,\n cursorRow,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n mouseX,\n mouseY,\n selectedRanges\n } = this.state;\n var {\n model,\n stateOverride\n } = this.props;\n var {\n metrics\n } = this;\n var context = this.canvasContext;\n var theme = this.getTheme();\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n assertNotNull(metrics);\n this.renderState = _objectSpread({\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n selectedRanges,\n draggingColumn,\n draggingColumnSeparator,\n draggingRow,\n draggingRowOffset,\n draggingRowSeparator,\n editingCell,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n cursorColumn,\n cursorRow\n }, stateOverride);\n return this.renderState;\n }\n render() {\n var {\n children\n } = this.props;\n var {\n cursor\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"grid-wrapper\",\n ref: this.canvasWrapper,\n children: [/*#__PURE__*/_jsx(\"canvas\", {\n className: classNames('grid-canvas', Grid.getCursorClassName(cursor)),\n ref: canvas => {\n this.canvas = canvas;\n },\n onClick: this.handleClick,\n onContextMenu: this.handleContextMenu,\n onDoubleClick: this.handleDoubleClick,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n tabIndex: 0,\n children: \"Your browser does not support HTML canvas. Update your browser?\"\n }), this.renderInputField(), children]\n });\n }\n}\n_defineProperty(Grid, \"contextType\", ThemeContext);\n_defineProperty(Grid, \"defaultProps\", {\n canvasOptions: {\n alpha: false\n },\n isStickyBottom: false,\n isStickyRight: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n keyHandlers: EMPTY_ARRAY,\n mouseHandlers: EMPTY_ARRAY,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n onError: () => undefined,\n onSelectionChanged: () => undefined,\n onMovedColumnsChanged: moveOperations => undefined,\n onMoveColumnComplete: () => undefined,\n onMovedRowsChanged: () => undefined,\n onMoveRowComplete: () => undefined,\n onViewChanged: metrics => undefined,\n onTokenClicked: token => {\n if (isLinkToken(token)) {\n window.open(token.href, '_blank', 'noopener,noreferrer');\n }\n },\n stateOverride: {},\n theme: {\n autoSelectColumn: false,\n autoSelectRow: false\n }\n});\n// use same constant as chrome source for windows\n// https://github.com/chromium/chromium/blob/973af9d461b6b5dc60208c8d3d66adc27e53da78/ui/events/blink/web_input_event_builders_win.cc#L285\n_defineProperty(Grid, \"pixelsPerLine\", 100 / 3);\n_defineProperty(Grid, \"dragTimeout\", 1000);\n_defineProperty(Grid, \"getTheme\", memoize((contextTheme, userTheme) => _objectSpread(_objectSpread(_objectSpread({}, GridTheme), contextTheme), userTheme)));\nexport default Grid;\n//# sourceMappingURL=Grid.js.map","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 react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button, Select } from '@deephaven/components';\nimport { getLabelForBooleanFilter, getLabelForDateFilter, getLabelForNumberFilter, getLabelForTextFilter } from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport \"./AdvancedFilterCreatorFilterItem.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorFilterItem');\nexport class AdvancedFilterCreatorFilterItem extends PureComponent {\n static getLabelForFilter(columnType, filterType) {\n try {\n if (TableUtils.isNumberType(columnType) || TableUtils.isCharType(columnType)) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(\"Unrecognized column type: \".concat(columnType));\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"typeDropdown\", void 0);\n _defineProperty(this, \"getCachedIsValid\", memoizeOne((column, operation, value, timeZone, tableUtils) => {\n try {\n // We don't want to show an error for an empty value\n return !value || tableUtils.makeAdvancedValueFilter(column, operation, value, timeZone) != null;\n } catch (e) {\n return false;\n }\n }));\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n var {\n value: _value = '',\n filterTypes,\n selectedType = filterTypes[0]\n } = props;\n this.state = {\n selectedType,\n value: _value\n };\n }\n componentDidMount() {\n var _this$typeDropdown;\n (_this$typeDropdown = this.typeDropdown) === null || _this$typeDropdown === void 0 || _this$typeDropdown.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n value,\n selectedType\n } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({\n selectedType\n });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({\n value\n });\n }\n }\n handleTypeChange(eventTargetValue) {\n var selectedType = eventTargetValue;\n log.debug2('typeChange', selectedType);\n this.setState({\n selectedType\n });\n var {\n onChange\n } = this.props;\n var {\n value\n } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n handleValueChange(event) {\n log.debug2('valueChange');\n var {\n value\n } = event.target;\n this.setState({\n value\n });\n var {\n onChange\n } = this.props;\n var {\n selectedType\n } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n handleDelete() {\n log.debug('delete');\n var {\n onDelete\n } = this.props;\n onDelete();\n }\n render() {\n var {\n column,\n filterTypes,\n formatter,\n tableUtils\n } = this.props;\n var {\n selectedType,\n value\n } = this.state;\n var showValueInput = !TableUtils.isBooleanType(column.type);\n var typeOptionElements = [];\n var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone, tableUtils);\n for (var i = 0; i < filterTypes.length; i += 1) {\n var type = filterTypes[i];\n var label = AdvancedFilterCreatorFilterItem.getLabelForFilter(column.type, type);\n var element = /*#__PURE__*/_jsx(\"option\", {\n value: type,\n children: label\n }, type);\n typeOptionElements.push(element);\n }\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-creator-filter-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"form-control\",\n value: selectedType,\n onChange: this.handleTypeChange,\n ref: typeDropdown => {\n this.typeDropdown = typeDropdown;\n },\n children: typeOptionElements\n })\n }), showValueInput && /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"input-group\",\n children: /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n error: !isValid\n }),\n placeholder: \"Enter value\",\n value: value,\n onChange: this.handleValueChange\n })\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group col-1 px-0\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"w-100 h-100 p-0 m-0\",\n onClick: this.handleDelete,\n icon: vsTrash,\n tooltip: \"Remove Filter\"\n })\n })]\n })\n });\n }\n}\nexport default AdvancedFilterCreatorFilterItem;\n//# sourceMappingURL=AdvancedFilterCreatorFilterItem.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 react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { LoadingSpinner, SelectValueList, FadeTransition } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreatorSelectValueList');\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList extends PureComponent {\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(value, values) {\n for (var i = 0; i < values.length; i += 1) {\n var v = values[i];\n if (v === value || v != null && v.valueOf != null && value != null && value.valueOf != null && v.valueOf() === value.valueOf()) {\n return i;\n }\n }\n return -1;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"dh\", void 0);\n _defineProperty(this, \"list\", void 0);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n var {\n selectedValues,\n dh\n } = this.props;\n this.dh = dh;\n this.list = null;\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true\n };\n }\n componentDidMount() {\n var {\n table\n } = this.props;\n if (table) this.startListening(table);\n }\n componentDidUpdate(prevProps) {\n var {\n filters,\n invertSelection,\n selectedValues,\n table\n } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n selectedValues: []\n }, this.handleSelectionUpdate);\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n }, this.handleSelectionUpdate);\n }\n if (prevProps.filters !== filters) {\n table === null || table === void 0 || table.applyFilter(filters);\n this.resetViewport();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.props;\n if (table) this.stopListening(table);\n }\n handleSelect(itemIndex, value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n selectedValues = [...selectedValues];\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n var isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n var {\n offset\n } = this.state;\n var {\n items\n } = this.state;\n items = [...items];\n var visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n this.setState({\n items,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleViewportChange(top, bottom) {\n this.updateViewport(top, bottom);\n }\n handleSelectionUpdate() {\n this.updateItemSelection();\n }\n handleTableUpdate(event) {\n var {\n table,\n formatter\n } = this.props;\n if (!table) return;\n var data = event.detail;\n var {\n offset\n } = data;\n var items = [];\n var column = table.columns[0];\n for (var r = 0; r < data.rows.length; r += 1) {\n var row = data.rows[r];\n var value = row.get(column);\n var displayValue = void 0;\n if (value == null) {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"null\"\n });\n } else if (value === '') {\n displayValue = /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"empty\"\n });\n } else {\n displayValue = formatter.getFormattedString(value, column.type, column.name);\n }\n var isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected\n });\n }\n log.debug2('Received table update:', offset, items.length);\n var itemCount = table.size;\n this.setState({\n itemCount,\n items,\n offset,\n isLoading: false\n });\n }\n isValueSelected(value) {\n var {\n invertSelection\n } = this.props;\n var {\n selectedValues\n } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n startListening(table) {\n table.addEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n stopListening(table) {\n table.removeEventListener(this.dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n resetViewport() {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n updateItemSelection() {\n var {\n items\n } = this.state;\n items = [...items];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n value\n } = item;\n item.isSelected = this.isValueSelected(value);\n }\n this.setState({\n items\n });\n }\n updateViewport(top, bottom) {\n var isLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n if (isLoading) {\n this.setState({\n isLoading: true\n });\n }\n var viewportSize = bottom - top + 1;\n var topRow = Math.max(0, top - viewportSize * 3);\n var bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n render() {\n var {\n offset,\n isLoading,\n items,\n itemCount\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"select-value-list-wrapper\",\n children: [/*#__PURE__*/_jsx(SelectValueList, {\n itemCount: itemCount,\n items: items,\n offset: offset,\n onSelect: this.handleSelect,\n onViewportChange: this.handleViewportChange,\n ref: list => {\n this.list = list;\n }\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isLoading,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"loading-list\",\n children: /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-large\"\n })\n })\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValueList, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined\n});\nexport default AdvancedFilterCreatorSelectValueList;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValueList.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 react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, FadeTransition } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from \"./AdvancedFilterCreatorSelectValueList.js\";\nimport \"./AdvancedFilterCreatorSelectValue.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nclass AdvancedFilterCreatorSelectValue extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchTablePromise\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"updateFilterTimer\", void 0);\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n var {\n dh,\n invertSelection,\n selectedValues\n } = props;\n this.tableUtils = new TableUtils(dh);\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: ''\n };\n }\n componentDidMount() {\n this.initSearchTable();\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({\n invertSelection\n });\n }\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({\n selectedValues\n });\n }\n var {\n table: searchTable,\n searchText\n } = this.state;\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n componentWillUnmount() {\n var {\n table\n } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n this.stopUpdateFilterTimer();\n }\n getColumnName() {\n var {\n table\n } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n getDisplayedValuesCount() {\n var {\n invertSelection,\n selectedValues,\n table\n } = this.state;\n if (table == null) {\n return null;\n }\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n getDisplayedValueText() {\n var count = this.getDisplayedValuesCount();\n var {\n table\n } = this.state;\n var {\n formatter\n } = this.props;\n if (count != null && table != null) {\n var formattedCount = formatter.getFormattedString(count, 'long');\n var formattedTableSize = formatter.getFormattedString(table.totalSize, 'long');\n var prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return \"\".concat(prefix).concat(formattedCount, \" of \").concat(formattedTableSize);\n }\n return null;\n }\n initSearchTable() {\n var {\n table\n } = this.props;\n if (table == null) {\n return;\n }\n var searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({\n table: searchTable\n });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n handleListChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n handleSearchChange(event) {\n var searchText = event.target.value;\n this.setState({\n searchText\n });\n }\n handleSelectAllClick() {\n this.resetSelection(true);\n }\n handleClearAllClick() {\n this.resetSelection(false);\n }\n handleUpdateFilterTimeout() {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n resetSelection(invertSelection) {\n var selectedValues = [];\n this.setState({\n invertSelection,\n selectedValues\n });\n var {\n onChange\n } = this.props;\n onChange(selectedValues, invertSelection);\n }\n startUpdateFilterTimer() {\n this.stopUpdateFilterTimer();\n this.updateFilterTimer = setTimeout(this.handleUpdateFilterTimeout, AdvancedFilterCreatorSelectValue.searchDebounceTime);\n }\n stopUpdateFilterTimer() {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n updateTableFilter() {\n var {\n table,\n searchText\n } = this.state;\n var {\n timeZone\n } = this.props;\n var {\n tableUtils\n } = this;\n var column = table === null || table === void 0 ? void 0 : table.columns[0];\n var filters = [];\n if (column == null) {\n return;\n }\n var error;\n if (searchText.length > 0) {\n var filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = tableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = tableUtils.makeQuickFilter(column, \"~\".concat(searchText), timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = tableUtils.makeQuickFilter(column, \">=\".concat(searchText), timeZone);\n }\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n this.setState({\n filters,\n error\n });\n }\n render() {\n var {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table\n } = this.state;\n var {\n dh,\n formatter,\n showSearch\n } = this.props;\n var columnName = this.getColumnName();\n var displayedValuesText = this.getDisplayedValueText();\n var placeholderText = columnName ? \"Find \".concat(columnName, \"...\") : '';\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-value\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: showSearch ? 'form-group' : '',\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: \"advanced-filter-creator-select-value-input\",\n children: \"Select Values\"\n }), showSearch && /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: classNames('form-control', {\n 'is-invalid': error != null\n }),\n id: \"advanced-filter-creator-select-value-input\",\n placeholder: placeholderText,\n value: searchText,\n onChange: this.handleSearchChange\n })]\n }), /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValueList, {\n dh: dh,\n table: table,\n filters: filters,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n onChange: this.handleListChange\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator-select-meta-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleSelectAllClick,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: this.handleClearAllClick,\n children: \"Clear\"\n })]\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: displayedValuesText != null,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"row-count-info\",\n children: displayedValuesText\n })\n })]\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreatorSelectValue, \"searchDebounceTime\", 250);\n_defineProperty(AdvancedFilterCreatorSelectValue, \"defaultProps\", {\n invertSelection: true,\n selectedValues: [],\n onChange: () => undefined,\n showSearch: true\n});\nexport default AdvancedFilterCreatorSelectValue;\n//# sourceMappingURL=AdvancedFilterCreatorSelectValue.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-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport { Operator as FilterOperator, assertOperatorValue as assertFilterOperatorValue } from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { assertNotNull, PromiseUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport AdvancedFilterCreatorFilterItem from \"./AdvancedFilterCreatorFilterItem.js\";\nimport AdvancedFilterCreatorSelectValue from \"./AdvancedFilterCreatorSelectValue.js\";\nimport \"./AdvancedFilterCreator.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('AdvancedFilterCreator');\nclass AdvancedFilterCreator extends PureComponent {\n static makeFilterItem() {\n return {\n key: nanoid()\n };\n }\n constructor(props) {\n var _options$filterItems$, _options$filterItems;\n super(props);\n _defineProperty(this, \"focusTrapContainer\", void 0);\n _defineProperty(this, \"debounceTimeout\", void 0);\n _defineProperty(this, \"valuesTablePromise\", void 0);\n _defineProperty(this, \"getFilterTypes\", memoize(columnType => TableUtils.getFilterTypes(columnType)));\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n this.focusTrapContainer = /*#__PURE__*/React.createRef();\n var {\n model,\n column,\n options\n } = props;\n var {\n filterOperators,\n invertSelection,\n selectedValues\n } = options;\n\n // can be null or an empty array\n var filterItems = (_options$filterItems$ = (_options$filterItems = options.filterItems) === null || _options$filterItems === void 0 ? void 0 : _options$filterItems.map(_ref => {\n var {\n selectedType,\n value\n } = _ref;\n return {\n selectedType,\n value,\n key: nanoid()\n };\n })) !== null && _options$filterItems$ !== void 0 ? _options$filterItems$ : [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var isSortable = model.isColumnSortable(columnIndex);\n this.state = {\n // Filter items\n filterItems,\n // And/Or between the filter items\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTableError: null,\n valuesTable: undefined,\n isSortable\n };\n }\n componentDidMount() {\n this.initValuesTable();\n }\n componentWillUnmount() {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n getFilterChangeHandler(index) {\n return this.handleFilterChange.bind(this, index);\n }\n getFilterDeleteHandler(index) {\n return this.handleFilterDelete.bind(this, index);\n }\n initValuesTable() {\n var {\n model,\n column\n } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(model.valuesTable(column));\n this.valuesTablePromise.then(valuesTable => {\n var _valuesTable$columns$;\n if ((_valuesTable$columns$ = valuesTable.columns[0].isSortable) !== null && _valuesTable$columns$ !== void 0 ? _valuesTable$columns$ : true) {\n var sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n }\n this.setState({\n valuesTable\n });\n }).catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error('Unable to open values table', error);\n this.setState({\n valuesTableError: error\n });\n });\n }\n handleFocusTrapEnd() {\n var _this$focusTrapContai;\n ((_this$focusTrapContai = this.focusTrapContainer) === null || _this$focusTrapContai === void 0 || (_this$focusTrapContai = _this$focusTrapContai.current) === null || _this$focusTrapContai === void 0 ? void 0 : _this$focusTrapContai.querySelector('button,select,input,textarea')).focus();\n }\n handleFocusTrapStart() {\n var _this$focusTrapContai2;\n var inputs = (_this$focusTrapContai2 = this.focusTrapContainer) === null || _this$focusTrapContai2 === void 0 || (_this$focusTrapContai2 = _this$focusTrapContai2.current) === null || _this$focusTrapContai2 === void 0 ? void 0 : _this$focusTrapContai2.querySelectorAll('button,select,input,textarea');\n if (inputs && inputs.length > 0) {\n var element = inputs[inputs.length - 1];\n element.focus();\n }\n }\n handleAddAnd() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleAddOr() {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({\n filterItems,\n filterOperators\n });\n }\n handleChangeFilterOperator(index, operator) {\n var {\n filterOperators\n } = this.state;\n filterOperators = [...filterOperators];\n assertFilterOperatorValue(operator);\n filterOperators[index] = operator;\n this.setState({\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleFilterChange(filterIndex, selectedType, value) {\n var {\n filterItems\n } = this.state;\n filterItems = [...filterItems];\n var {\n key\n } = filterItems[filterIndex];\n filterItems[filterIndex] = {\n key,\n selectedType,\n value\n };\n this.setState({\n filterItems\n });\n this.startUpdateTimer();\n }\n handleFilterDelete(filterIndex) {\n var {\n filterItems,\n filterOperators\n } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n this.setState({\n filterItems,\n filterOperators\n });\n this.startUpdateTimer();\n }\n handleSelectValueChange(selectedValues, invertSelection) {\n this.setState({\n selectedValues,\n invertSelection\n });\n this.startUpdateTimer();\n }\n handleReset() {\n log.debug('Resetting Advanced Filter');\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true\n });\n this.startUpdateTimer();\n }\n handleSortDown(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n handleSortUp(event) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n handleSubmit(event) {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n event.preventDefault();\n }\n handleDone(event) {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n var {\n onDone\n } = this.props;\n onDone();\n event.preventDefault();\n }\n handleUpdateTimeout() {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter() {\n var {\n filterItems\n } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n var filterItem = filterItems[filterItems.length - 1];\n var {\n selectedType,\n value\n } = filterItem;\n return selectedType != null && selectedType.length > 0 && value != null && value.length > 0;\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction) {\n var addToExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n column,\n onSortChange\n } = this.props;\n var {\n isSortable\n } = this.state;\n if (isSortable) {\n onSortChange(column, direction, addToExisting);\n }\n }\n startUpdateTimer() {\n this.stopUpdateTimer();\n this.debounceTimeout = setTimeout(this.handleUpdateTimeout, AdvancedFilterCreator.debounceFilterUpdate);\n }\n stopUpdateTimer() {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n sendUpdate() {\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues\n } = this.state;\n var {\n column,\n onFilterChange,\n model,\n tableUtils\n } = this.props;\n var {\n formatter\n } = model;\n var items = filterItems.filter(_ref2 => {\n var {\n selectedType,\n value\n } = _ref2;\n return selectedType != null && value != null && value !== '';\n });\n var operators = filterOperators.filter((operator, i) => operator != null && filterItems[i].selectedType != null && filterItems[i].value != null && filterItems[i].value !== '').slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n var options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues\n };\n var filter = tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n onFilterChange(column, filter, options);\n }\n render() {\n var _this = this;\n var {\n column,\n model,\n sortDirection,\n formatter,\n tableUtils\n } = this.props;\n var {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n isSortable\n } = this.state;\n var {\n dh,\n isValuesTableAvailable\n } = model;\n var isBoolean = TableUtils.isBooleanType(column.type);\n var isDateType = TableUtils.isDateType(column.type);\n var filterTypes = this.getFilterTypes(column.type);\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n var _loop = function _loop(i) {\n var filterItem = filterItems[i];\n var {\n key,\n selectedType,\n value\n } = filterItem;\n var element = /*#__PURE__*/_jsx(AdvancedFilterCreatorFilterItem, {\n column: column,\n filterTypes: filterTypes,\n onChange: _this.getFilterChangeHandler(i),\n onDelete: _this.getFilterDeleteHandler(i),\n selectedType: selectedType,\n value: value,\n formatter: formatter,\n tableUtils: tableUtils\n }, key);\n filterItemElements.push(element);\n if (i < filterOperators.length) {\n var filterOperator = filterOperators[i];\n var isAndFilter = filterOperator === FilterOperator.and;\n var operatorElement = /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end advanced-filter-creator-filter-operator\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.and),\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('filter-operator', {\n active: !isAndFilter\n }),\n onClick: () => _this.handleChangeFilterOperator(i, FilterOperator.or),\n children: \"OR\"\n })]\n }, \"filterOperator\".concat(key));\n filterItemElements.push(operatorElement);\n }\n };\n for (var i = 0; i < filterItems.length; i += 1) {\n _loop(i);\n }\n }\n var showAddFilterItem = this.shouldShowAddFilter();\n var addFilterItem = /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem\n }),\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"text-muted\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhNewCircleLargeFilled\n })\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddAnd,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with AND\",\n children: \"AND\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-filter-item\",\n onClick: this.handleAddOr,\n disabled: !showAddFilterItem,\n tooltip: \"Add filter with OR\",\n children: \"OR\"\n })]\n }, \"addFilterItem\");\n filterItemElements.push(addFilterItem);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-creator\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapStart\n }), /*#__PURE__*/_jsxs(\"form\", {\n onSubmit: this.handleSubmit,\n ref: this.focusTrapContainer,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"title-bar\",\n children: [/*#__PURE__*/_jsx(\"h6\", {\n className: \"advanced-filter-title\",\n children: \"Advanced Filters\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-menu-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending\n }),\n onClick: this.handleSortDown,\n icon: dhSortAmountDown,\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Descending\") : 'Not sortable',\n disabled: !isSortable\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending\n }),\n onClick: this.handleSortUp,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortAmountDown,\n rotation: 180\n }),\n tooltip: isSortable ? \"Sort \".concat(column.name, \" Ascending\") : 'Not sortable',\n disabled: !isSortable\n })]\n })]\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"advanced-filter-column-name\",\n children: [column.name, \"\\xA0\", /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-type\",\n children: [\"(\", columnType, \")\"]\n })]\n }), filterItemElements, isValuesTableAvailable && valuesTableError == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [!isBoolean && /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group\",\n children: /*#__PURE__*/_jsx(AdvancedFilterCreatorSelectValue, {\n dh: dh,\n table: valuesTable,\n onChange: this.handleSelectValueChange,\n invertSelection: invertSelection,\n selectedValues: selectedValues,\n formatter: formatter,\n showSearch: !isDateType,\n timeZone: formatter.timeZone\n })\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row justify-content-end\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n className: \"mr-2\",\n onClick: this.handleReset,\n children: \"Reset\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: this.handleDone,\n children: \"Done\"\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n tabIndex: 0,\n onFocus: this.handleFocusTrapEnd\n })]\n });\n }\n}\n_defineProperty(AdvancedFilterCreator, \"debounceFilterUpdate\", 250);\n_defineProperty(AdvancedFilterCreator, \"defaultProps\", {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: []\n },\n sortDirection: null\n});\nexport default AdvancedFilterCreator;\n//# sourceMappingURL=AdvancedFilterCreator.js.map","import { getConditionDBString, getStyleDBString } from \"./ConditionalFormattingUtils.js\"; // Conditional formatting API utils in a separate file\n// to make ConditionalFormattingUtils.ts easier to test.\n// https://github.com/facebook/jest/issues/936#issuecomment-545080082\nexport function makeTernaryFormatRule(config, prevRule) {\n var styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n var conditionDBString = getConditionDBString(config);\n return \"\".concat(conditionDBString, \" ? \").concat(styleDBString, \" : \").concat(prevRule);\n}\nexport function makeRowFormatColumn(dh, rule) {\n return dh.Column.formatRowColor(rule);\n}\nexport function makeColumnFormatColumn(col, rule) {\n return col.formatColor(rule);\n}\n//# sourceMappingURL=ConditionalFormattingAPIUtils.js.map","import Log from '@deephaven/log';\nimport { DateUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport { makeColumnFormatColumn, makeRowFormatColumn, makeTernaryFormatRule } from \"./ConditionalFormattingAPIUtils.js\";\nvar log = Log.module('ConditionalFormattingUtils');\nexport var FormatterType = /*#__PURE__*/function (FormatterType) {\n FormatterType[\"CONDITIONAL\"] = \"conditional\";\n FormatterType[\"ROWS\"] = \"rows\";\n return FormatterType;\n}({});\nexport var NumberCondition = /*#__PURE__*/function (NumberCondition) {\n NumberCondition[\"IS_EQUAL\"] = \"is-equal\";\n NumberCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n NumberCondition[\"IS_BETWEEN\"] = \"is-between\";\n NumberCondition[\"GREATER_THAN\"] = \"greater-than\";\n NumberCondition[\"GREATER_THAN_OR_EQUAL\"] = \"greater-than-or-equal\";\n NumberCondition[\"LESS_THAN\"] = \"less-than\";\n NumberCondition[\"LESS_THAN_OR_EQUAL\"] = \"less-than-or-equal\";\n NumberCondition[\"IS_NULL\"] = \"is-null\";\n NumberCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return NumberCondition;\n}({});\nexport var StringCondition = /*#__PURE__*/function (StringCondition) {\n StringCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n StringCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n StringCondition[\"CONTAINS\"] = \"contains\";\n StringCondition[\"DOES_NOT_CONTAIN\"] = \"does-not-contain\";\n StringCondition[\"STARTS_WITH\"] = \"starts-with\";\n StringCondition[\"ENDS_WITH\"] = \"ends-with\";\n StringCondition[\"IS_NULL\"] = \"is-null\";\n StringCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return StringCondition;\n}({});\nexport var DateCondition = /*#__PURE__*/function (DateCondition) {\n DateCondition[\"IS_EXACTLY\"] = \"is-exactly\";\n DateCondition[\"IS_NOT_EXACTLY\"] = \"is-not-exactly\";\n DateCondition[\"IS_BEFORE\"] = \"is-before\";\n DateCondition[\"IS_BEFORE_OR_EQUAL\"] = \"is-before-or-equal\";\n DateCondition[\"IS_AFTER\"] = \"is-after\";\n DateCondition[\"IS_AFTER_OR_EQUAL\"] = \"is-after-or-equal\";\n DateCondition[\"IS_NULL\"] = \"is-null\";\n DateCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return DateCondition;\n}({});\nexport var BooleanCondition = /*#__PURE__*/function (BooleanCondition) {\n BooleanCondition[\"IS_TRUE\"] = \"is-true\";\n BooleanCondition[\"IS_FALSE\"] = \"is-false\";\n BooleanCondition[\"IS_NULL\"] = \"is-null\";\n BooleanCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return BooleanCondition;\n}({});\nexport var CharCondition = /*#__PURE__*/function (CharCondition) {\n CharCondition[\"IS_EQUAL\"] = \"is-equal\";\n CharCondition[\"IS_NOT_EQUAL\"] = \"is-not-equal\";\n CharCondition[\"IS_NULL\"] = \"is-null\";\n CharCondition[\"IS_NOT_NULL\"] = \"is-not-null\";\n return CharCondition;\n}({});\nexport var FormatStyleType = /*#__PURE__*/function (FormatStyleType) {\n FormatStyleType[\"NO_FORMATTING\"] = \"no-formatting\";\n FormatStyleType[\"POSITIVE\"] = \"positive\";\n FormatStyleType[\"NEGATIVE\"] = \"negative\";\n FormatStyleType[\"WARN\"] = \"warn\";\n FormatStyleType[\"NEUTRAL\"] = \"neutral\";\n FormatStyleType[\"ACCENT_1\"] = \"accent-1\";\n FormatStyleType[\"ACCENT_2\"] = \"accent-2\";\n FormatStyleType[\"CUSTOM\"] = \"custom\";\n return FormatStyleType;\n}({});\nexport function getLabelForStyleType(option) {\n switch (option) {\n case FormatStyleType.NO_FORMATTING:\n return 'No formatting';\n case FormatStyleType.POSITIVE:\n return 'Positive';\n case FormatStyleType.NEGATIVE:\n return 'Negative';\n case FormatStyleType.WARN:\n return 'Warn';\n case FormatStyleType.NEUTRAL:\n return 'Neutral';\n case FormatStyleType.ACCENT_1:\n return 'Accent 1';\n case FormatStyleType.ACCENT_2:\n return 'Accent 2';\n case FormatStyleType.CUSTOM:\n return 'Custom...';\n }\n}\nexport function getBackgroundForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#9fde6f';\n case FormatStyleType.NEGATIVE:\n return '#ff6087';\n case FormatStyleType.WARN:\n return '#f67f40';\n case FormatStyleType.NEUTRAL:\n return '#ffd95c';\n case FormatStyleType.ACCENT_1:\n return '#78dce8';\n case FormatStyleType.ACCENT_2:\n return '#ab9bf5';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.background;\n default:\n return undefined;\n }\n}\nexport function getColorForStyleConfig(config) {\n var {\n type,\n customConfig\n } = config;\n switch (type) {\n case FormatStyleType.NO_FORMATTING:\n return undefined;\n case FormatStyleType.POSITIVE:\n return '#526a3f';\n case FormatStyleType.NEGATIVE:\n return '#802f44';\n case FormatStyleType.WARN:\n return '#663318';\n case FormatStyleType.NEUTRAL:\n return '#63562b';\n case FormatStyleType.ACCENT_1:\n return '#3f6469';\n case FormatStyleType.ACCENT_2:\n return '#554d72';\n case FormatStyleType.CUSTOM:\n return customConfig === null || customConfig === void 0 ? void 0 : customConfig.color;\n default:\n return undefined;\n }\n}\nexport function getStyleDBString(config) {\n var color = getColorForStyleConfig(config.style);\n var bg = getBackgroundForStyleConfig(config.style);\n if (color === undefined || bg === undefined) {\n return undefined;\n }\n return \"bgfg(`\".concat(bg, \"`, `\").concat(color, \"`)\");\n}\nfunction getNumberConditionText(config) {\n var {\n column,\n value,\n start,\n end\n } = config;\n return getTextForNumberCondition(column.name, config.condition, value, start, end);\n}\nfunction getStringConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForStringCondition(column.name, config.condition, value);\n}\nfunction getDateConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForDateCondition(column.name, config.condition, value);\n}\nfunction getBooleanConditionText(config) {\n var {\n column\n } = config;\n return getTextForBooleanCondition(column.name, config.condition);\n}\nfunction getCharConditionText(config) {\n var {\n column,\n value\n } = config;\n return getTextForCharCondition(column.name, config.condition, value);\n}\nexport function getConditionDBString(config) {\n var {\n column\n } = config;\n if (TableUtils.isNumberType(column.type)) {\n return getNumberConditionText(config);\n }\n if (TableUtils.isCharType(column.type)) {\n return getCharConditionText(config);\n }\n if (TableUtils.isStringType(column.type)) {\n return getStringConditionText(config);\n }\n if (TableUtils.isDateType(column.type)) {\n return getDateConditionText(config);\n }\n if (TableUtils.isBooleanType(column.type)) {\n return getBooleanConditionText(config);\n }\n throw new Error('Invalid column type');\n}\nexport function getLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return 'is equal to';\n case NumberCondition.IS_NOT_EQUAL:\n return 'is not equal to';\n case NumberCondition.IS_BETWEEN:\n return 'is between';\n case NumberCondition.GREATER_THAN:\n return 'greater than';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return 'greater than or equal to';\n case NumberCondition.LESS_THAN:\n return 'less than';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return 'less than or equal to';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return 'is exactly';\n case StringCondition.IS_NOT_EXACTLY:\n return 'is not exactly';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return 'is';\n case DateCondition.IS_NOT_EXACTLY:\n return 'is not';\n case DateCondition.IS_BEFORE:\n return 'is before';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return 'is before or equal';\n case DateCondition.IS_AFTER:\n return 'is after';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return 'is after or equal';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return 'is';\n case CharCondition.IS_NOT_EQUAL:\n return 'is not';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getDefaultConditionForType(columnType) {\n if (TableUtils.isNumberType(columnType)) {\n return NumberCondition.IS_EQUAL;\n }\n if (TableUtils.isCharType(columnType)) {\n return CharCondition.IS_EQUAL;\n }\n if (TableUtils.isStringType(columnType)) {\n return StringCondition.IS_EXACTLY;\n }\n if (TableUtils.isDateType(columnType)) {\n return DateCondition.IS_EXACTLY;\n }\n if (TableUtils.isBooleanType(columnType)) {\n return BooleanCondition.IS_TRUE;\n }\n throw new Error('Invalid column type');\n}\nexport function getDefaultValueForType(columnType) {\n if (TableUtils.isCharType(columnType)) {\n return '';\n }\n if (TableUtils.isStringType(columnType)) {\n return '';\n }\n return undefined;\n}\nexport function getConditionConfig(config) {\n var {\n condition,\n value,\n start,\n end\n } = config;\n return {\n condition,\n value,\n start,\n end\n };\n}\nexport function getDefaultConditionConfigForType(type) {\n return {\n condition: getDefaultConditionForType(type),\n value: getDefaultValueForType(type),\n start: undefined,\n end: undefined\n };\n}\nexport function getDefaultStyleConfig() {\n return {\n type: FormatStyleType.NO_FORMATTING\n };\n}\nfunction getShortLabelForStringCondition(condition) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return '==';\n case StringCondition.IS_NOT_EXACTLY:\n return '!=';\n case StringCondition.CONTAINS:\n return 'contains';\n case StringCondition.DOES_NOT_CONTAIN:\n return 'does not contain';\n case StringCondition.STARTS_WITH:\n return 'starts with';\n case StringCondition.ENDS_WITH:\n return 'ends with';\n case StringCondition.IS_NULL:\n return 'is null';\n case StringCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForDateCondition(condition) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return '==';\n case DateCondition.IS_NOT_EXACTLY:\n return '!=';\n case DateCondition.IS_BEFORE:\n return '<';\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return '<=';\n case DateCondition.IS_AFTER:\n return '>';\n case DateCondition.IS_AFTER_OR_EQUAL:\n return '>=';\n case DateCondition.IS_NULL:\n return 'is null';\n case DateCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForBooleanCondition(condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return 'is true';\n case BooleanCondition.IS_FALSE:\n return 'is false';\n case BooleanCondition.IS_NULL:\n return 'is null';\n case BooleanCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nfunction getShortLabelForCharCondition(condition) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return '==';\n case CharCondition.IS_NOT_EQUAL:\n return '!=';\n case CharCondition.IS_NULL:\n return 'is null';\n case CharCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getShortLabelForNumberCondition(condition) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return '==';\n case NumberCondition.IS_NOT_EQUAL:\n return '!=';\n case NumberCondition.IS_BETWEEN:\n return '==';\n case NumberCondition.GREATER_THAN:\n return '>';\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return '>=';\n case NumberCondition.LESS_THAN:\n return '<';\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return '<=';\n case NumberCondition.IS_NULL:\n return 'is null';\n case NumberCondition.IS_NOT_NULL:\n return 'is not null';\n }\n}\nexport function getTextForNumberCondition(columnName, condition, value, start, end) {\n switch (condition) {\n case NumberCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == \").concat(value);\n case NumberCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != \").concat(value);\n case NumberCondition.IS_BETWEEN:\n return \"\".concat(columnName, \" > \").concat(start, \" && \").concat(columnName, \" < \").concat(end);\n case NumberCondition.GREATER_THAN:\n return \"\".concat(columnName, \" > \").concat(value);\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" >= \").concat(value);\n case NumberCondition.LESS_THAN:\n return \"\".concat(columnName, \" < \").concat(value);\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return \"\".concat(columnName, \" <= \").concat(value);\n case NumberCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case NumberCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForStringCondition(columnName, condition, value) {\n switch (condition) {\n case StringCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == \\\"\").concat(value, \"\\\"\");\n case StringCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != \\\"\").concat(value, \"\\\"\");\n case StringCondition.CONTAINS:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.DOES_NOT_CONTAIN:\n return \"\".concat(columnName, \" != null && !\").concat(columnName, \".contains(\\\"\").concat(value, \"\\\")\");\n case StringCondition.STARTS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".startsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.ENDS_WITH:\n return \"\".concat(columnName, \" != null && \").concat(columnName, \".endsWith(\\\"\").concat(value, \"\\\")\");\n case StringCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case StringCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForDateCondition(columnName, condition, value) {\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE:\n return \"\".concat(columnName, \" < convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return \"\".concat(columnName, \" <= convertDateTime(\\\"\").concat(value, \"\\\")\");\n case DateCondition.IS_AFTER:\n return \"\".concat(columnName, \" > convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_AFTER_OR_EQUAL:\n return \"\".concat(columnName, \" >= convertDateTime(`\").concat(value, \"`)\");\n case DateCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case DateCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForBooleanCondition(columnName, condition) {\n switch (condition) {\n case BooleanCondition.IS_TRUE:\n return \"\".concat(columnName, \" == true\");\n case BooleanCondition.IS_FALSE:\n return \"\".concat(columnName, \" == false\");\n case BooleanCondition.IS_NULL:\n return \"\".concat(columnName, \" == null\");\n case BooleanCondition.IS_NOT_NULL:\n return \"\".concat(columnName, \" != null\");\n }\n}\nexport function getTextForCharCondition(columnName, condition, value) {\n switch (condition) {\n case CharCondition.IS_EQUAL:\n return \"\".concat(columnName, \" == '\").concat(value, \"'\");\n case CharCondition.IS_NOT_EQUAL:\n return \"\".concat(columnName, \" != '\").concat(value, \"'\");\n case CharCondition.IS_NULL:\n return \"isNull(\".concat(columnName, \")\");\n case CharCondition.IS_NOT_NULL:\n return \"!isNull(\".concat(columnName, \")\");\n }\n}\nexport function getShortLabelForConditionType(columnType, condition) {\n if (TableUtils.isNumberType(columnType)) {\n return getShortLabelForNumberCondition(condition);\n }\n if (TableUtils.isCharType(columnType)) {\n return getShortLabelForCharCondition(condition);\n }\n if (TableUtils.isStringType(columnType)) {\n return getShortLabelForStringCondition(condition);\n }\n if (TableUtils.isDateType(columnType)) {\n return getShortLabelForDateCondition(condition);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getShortLabelForBooleanCondition(condition);\n }\n throw new Error('Invalid column type');\n}\n\n/**\n * Get format columns array for the given columns and formatting rules\n * @param columns Available columns\n * @param rules Formatting rules to build the format columns from\n * @returns Array of format columns\n */\nexport function getFormatColumns(dh, columns, rules) {\n if (rules === undefined) {\n log.debug(\"no rules passed.\");\n return [];\n }\n var result = [];\n // There can be only one row format custom column\n // and multiple column format custom columns (one per column)\n var rowFormatConfig;\n var columnFormatConfigMap = new Map();\n rules.forEach(_ref => {\n var _ref3;\n var {\n config,\n type: formatterType\n } = _ref;\n var {\n column\n } = config;\n // Check both name and type because the type can change\n var col = columns.find(_ref2 => {\n var {\n name,\n type\n } = _ref2;\n return name === column.name && type === column.type;\n });\n if (col === undefined) {\n log.debug(\"Column \".concat(column.name, \":\").concat(column.type, \" not found. Ignoring format rule.\"), config);\n return;\n }\n // Stack ternary format conditions by column\n var [prevRule, prevFormatColumn] = (_ref3 = formatterType === FormatterType.CONDITIONAL ? columnFormatConfigMap.get(col.name) : rowFormatConfig) !== null && _ref3 !== void 0 ? _ref3 : ['null', undefined];\n var rule = makeTernaryFormatRule(config, prevRule);\n if (rule === undefined) {\n log.debug(\"Ignoring format rule.\", config);\n return;\n }\n // Replace existing formatColumn with the new stacked format\n var index = prevFormatColumn === undefined ? -1 : result.indexOf(prevFormatColumn);\n if (index > -1) {\n result.splice(index, 1);\n }\n var formatColumn = formatterType === FormatterType.CONDITIONAL ? makeColumnFormatColumn(col, rule) : makeRowFormatColumn(dh, rule);\n result.push(formatColumn);\n if (formatterType === FormatterType.CONDITIONAL) {\n columnFormatConfigMap.set(col.name, [rule, formatColumn]);\n } else {\n rowFormatConfig = [rule, formatColumn];\n }\n });\n return result;\n}\n\n/**\n * Validate that a given date condition + value pair is valid.\n * @param condition\n * @param value\n */\nexport function isDateConditionValid(dh, condition, value) {\n switch (condition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return true;\n default:\n {\n var [dateTimeString, ...rest] = (value !== null && value !== void 0 ? value : '').split(' ');\n // Reconstitute all tokens after the first ' ' in case the user included garbage data at the end\n // e.g. '2020-01-01 NY blah'\n var tzCode = rest.join(' ');\n try {\n DateUtils.parseDateTimeString(dateTimeString);\n } catch (e) {\n log.debug('Invalid datetime string', dateTimeString);\n return false;\n }\n try {\n dh.i18n.TimeZone.getTimeZone(tzCode);\n } catch (e) {\n log.debug('Invalid timezone string', tzCode);\n return false;\n }\n return true;\n }\n }\n}\nexport function isSupportedColumn(_ref4) {\n var {\n type\n } = _ref4;\n return TableUtils.isNumberType(type) || TableUtils.isCharType(type) || TableUtils.isStringType(type) || TableUtils.isDateType(type) || TableUtils.isBooleanType(type);\n}\n//# sourceMappingURL=ConditionalFormattingUtils.js.map","import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport \"./IrisGridBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function IrisGridBottomBar(_ref) {\n var {\n animation = 'iris-grid-bottom-bar-slide-up',\n children,\n className,\n isShown,\n onClick,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n var nodeRef = useRef(null);\n return /*#__PURE__*/_jsx(CSSTransition, {\n in: isShown,\n timeout: ThemeExport.transitionMs,\n classNames: animation,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n mountOnEnter: true,\n unmountOnExit: true,\n nodeRef: nodeRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: nodeRef,\n className: classNames('iris-grid-bottom-bar', className),\n role: \"presentation\",\n onClick: onClick,\n onKeyPress: onClick,\n children: children\n })\n });\n}\nexport default IrisGridBottomBar;\n//# sourceMappingURL=IrisGridBottomBar.js.map","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nvar MAX_NUMBER_ROWS_SHOWN = 5;\nexport function PendingDataBottomBar(_ref) {\n var {\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited: _onExited\n } = _ref;\n var [isSuccessShown, setIsSuccessShown] = useState(false);\n var [wasSuccessShown, setWasSuccessShown] = useState(false);\n var successTimeout = useRef();\n var prevIsSaving = usePrevious(isSaving);\n var errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return \"Key can't be empty (on pending row\".concat(pendingDataErrors.size > 1 ? 's' : '', \" \").concat(Array.from(pendingDataErrors.keys()).join(', ').trim(), \")\");\n }\n return \"Key can't be empty (on \".concat(pendingDataErrors.size, \" rows)\");\n }, [error, pendingDataErrors]);\n useEffect(function showSuccessMessage() {\n if (prevIsSaving != null && prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n }, [errorMessage, isSaving, prevIsSaving]);\n useEffect(function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n }, [pendingDataMap]);\n useEffect(function cleanupTimeout() {\n return () => successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n var pendingRowCount = pendingDataMap.size;\n var commitIcon;\n if (isSaving) {\n commitIcon = /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n });\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n className: \"pending-data-bottom-bar\",\n isShown: pendingRowCount > 0 || isSuccessShown || errorMessage != null,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: () => {\n setWasSuccessShown(false);\n if (_onExited) {\n _onExited();\n }\n },\n children: [errorMessage != null && errorMessage !== '' && /*#__PURE__*/_jsxs(\"div\", {\n className: \"error-message\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(errorMessage)\n })]\n }), (errorMessage == null || errorMessage === '') && /*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: pendingRowCount > 0 && /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(pendingRowCount, \" row\").concat(pendingRowCount > 1 ? 's' : '', \" pending\")\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [!isSaving && !wasSuccessShown && /*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: onDiscard,\n tooltip: discardTooltip,\n children: \"Discard\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: wasSuccessShown ? 'success' : 'primary',\n onClick: onSave,\n icon: commitIcon,\n disabled: isSaving || wasSuccessShown || errorMessage != null,\n tooltip: saveTooltip,\n children: [isSaving && \"Committing...\", !isSaving && wasSuccessShown && \"Success\", !isSaving && !wasSuccessShown && \"Commit\"]\n })]\n })]\n });\n}\nexport default PendingDataBottomBar;\n//# sourceMappingURL=PendingDataBottomBar.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 _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 React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { Button, FadeTransition, LoadingSpinner } from '@deephaven/components';\nimport { GridRange, GridUtils } from '@deephaven/grid';\nimport { CanceledPromiseError, copyToClipboard, PromiseUtils } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./IrisGridCopyHandler.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridCopyHandler');\nfunction isCopyRangesOperation(copyOperation) {\n return copyOperation.ranges != null;\n}\nfunction isCopyHeaderOperation(copyOperation) {\n return copyOperation.columnIndex != null;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component {\n static getStatusMessageText(copyState, rowCount) {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return \"Are you sure you want to copy \".concat(rowCount.toLocaleString(), \" rows to your clipboard?\");\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return \"Fetched \".concat(rowCount.toLocaleString(), \" rows!\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS:\n return \"Fetching \".concat(rowCount.toLocaleString(), \" rows for clipboard...\");\n case IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS:\n return 'Fetching header for clipboard...';\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n static getCopyButtonText(buttonState) {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"textData\", void 0);\n _defineProperty(this, \"hideTimer\", void 0);\n _defineProperty(this, \"fetchPromise\", void 0);\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0\n };\n }\n componentDidMount() {\n var {\n copyOperation\n } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n componentDidUpdate(prevProps) {\n var {\n copyOperation\n } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n componentWillUnmount() {\n this.stopCopy();\n }\n startCopy() {\n log.debug2('startCopy');\n this.stopCopy();\n var {\n copyOperation\n } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({\n isShown: false\n });\n return;\n }\n var {\n error\n } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error\n });\n this.startHideTimer();\n return;\n }\n this.setState({\n isShown: true,\n error: undefined\n });\n if (isCopyRangesOperation(copyOperation)) {\n var {\n ranges\n } = copyOperation;\n var rowCount = GridRange.rowCount(ranges);\n this.setState({\n rowCount\n });\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED\n });\n return;\n }\n }\n this.startFetch();\n }\n stopCopy() {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n handleBackgroundClick() {\n log.debug2('handleBackgroundClick');\n var {\n copyState\n } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({\n isShown: false\n });\n }\n }\n handleCancelClick() {\n log.debug2('handleCancelClick');\n this.stopFetch();\n this.setState({\n isShown: false\n });\n }\n handleCopyClick() {\n var _this = this;\n return _asyncToGenerator(function* () {\n log.debug2('handleCopyClick');\n if (_this.textData != null) {\n try {\n yield _this.copyText(_this.textData);\n _this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this.setState({\n error: 'Unable to copy. Verify your browser permissions.'\n });\n }\n } else {\n _this.startFetch();\n }\n })();\n }\n handleHideTimeout() {\n log.debug2('handleHideTimeout');\n this.stopHideTimer();\n this.setState({\n isShown: false\n });\n }\n copyText(text) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n log.debug2('copyText', text);\n _this2.textData = text;\n yield copyToClipboard(text);\n })();\n }\n showCopyDone() {\n this.setState({\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n this.startHideTimer();\n }\n startFetch() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n _this3.stopFetch();\n var {\n model,\n copyOperation\n } = _this3.props;\n if (isCopyHeaderOperation(copyOperation)) {\n var {\n columnIndex,\n columnDepth,\n movedColumns\n } = copyOperation;\n log.debug('startFetch copyHeader', columnIndex, columnDepth);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_HEADER_IN_PROGRESS\n });\n var modelIndex = GridUtils.getModelIndex(columnIndex, movedColumns);\n var copyText = model.textForColumnHeader(modelIndex, columnDepth);\n if (copyText === undefined) {\n _this3.fetchPromise = undefined;\n _this3.setState({\n error: 'Invalid column header selected.',\n copyState: IrisGridCopyHandler.COPY_STATES.DONE\n });\n return;\n }\n _this3.fetchPromise = PromiseUtils.makeCancelable(copyText);\n } else {\n var {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns: _movedColumns,\n formatValues\n } = copyOperation;\n log.debug('startFetch copyRanges', ranges);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_RANGES_IN_PROGRESS\n });\n var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n var modelRanges = GridUtils.getModelRanges(ranges, _movedColumns);\n if (hiddenColumns.length > 0) {\n var subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);\n }\n\n // Remove the hidden columns from the snapshot\n var formatValue = formatValues != null && formatValues ? (value, column) => model.displayString(value, column.type, column.name) : value => \"\".concat(value);\n _this3.fetchPromise = PromiseUtils.makeCancelable(model.textSnapshot(modelRanges, includeHeaders, formatValue));\n }\n try {\n var text = yield _this3.fetchPromise;\n _this3.fetchPromise = undefined;\n try {\n yield _this3.copyText(text);\n _this3.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED\n });\n }\n } catch (e) {\n if (e instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', e);\n _this3.fetchPromise = undefined;\n _this3.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR\n });\n }\n }\n })();\n }\n stopFetch() {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n startHideTimer() {\n this.stopHideTimer();\n this.hideTimer = setTimeout(this.handleHideTimeout, IrisGridCopyHandler.HIDE_TIMEOUT);\n }\n stopHideTimer() {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n render() {\n var {\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = this.props;\n var {\n buttonState,\n copyState,\n isShown,\n rowCount,\n error\n } = this.state;\n var animation = copyState === IrisGridCopyHandler.COPY_STATES.DONE ? 'fade' : 'copy-slide-up';\n var copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n var statusMessageText = error !== null && error !== void 0 ? error : IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n var isButtonContainerVisible = copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n var isFetching = buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n var isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n return /*#__PURE__*/_jsxs(IrisGridBottomBar, {\n animation: animation,\n isShown: isShown,\n className: classNames('iris-grid-copy-handler', {\n 'copy-done': isDone\n }),\n onClick: this.handleBackgroundClick,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"status-message\",\n children: /*#__PURE__*/_jsx(\"span\", {\n children: statusMessageText\n })\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isButtonContainerVisible,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"buttons-container\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-outline-secondary btn-cancel\",\n onClick: this.handleCancelClick,\n children: \"Cancel\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: isFetching ? 'tertiary' : 'primary',\n className: classNames('btn-copy', {\n 'btn-spinner': isFetching\n }),\n onClick: this.handleCopyClick,\n disabled: isFetching,\n children: [isFetching && /*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), copyButtonText]\n })]\n })\n })]\n });\n }\n}\n_defineProperty(IrisGridCopyHandler, \"NO_PROMPT_THRESHOLD\", 10000);\n_defineProperty(IrisGridCopyHandler, \"HIDE_TIMEOUT\", 3000);\n/**\n * Different states for the current copy operation\n */\n_defineProperty(IrisGridCopyHandler, \"COPY_STATES\", {\n // No copy operation in progress\n IDLE: 'IDLE',\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n // Fetch is currently in progress for copy ranges operation\n FETCH_RANGES_IN_PROGRESS: 'FETCH_RANGES_IN_PROGRESS',\n // Fetch is currently in progress for copy header operation\n FETCH_HEADER_IN_PROGRESS: 'FETCH_HEADER_IN_PROGRESS',\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE'\n});\n_defineProperty(IrisGridCopyHandler, \"BUTTON_STATES\", {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY'\n});\n_defineProperty(IrisGridCopyHandler, \"defaultProps\", {\n copyOperation: null,\n onEntering: () => undefined,\n onEntered: () => undefined,\n onExiting: () => undefined,\n onExited: () => undefined\n});\nexport default IrisGridCopyHandler;\n//# sourceMappingURL=IrisGridCopyHandler.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 React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { vsFilter, dhFilterFilled } from '@deephaven/icons';\nimport \"./FilterInputField.css\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * An input field showing a input field and button.\n * Debounces changes.\n */\nclass FilterInputField extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"inputField\", void 0);\n _defineProperty(this, \"initialValue\", void 0);\n _defineProperty(this, \"debouncedSendUpdate\", void 0);\n var {\n debounceMs\n } = props;\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleCommit = this.handleCommit.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.inputField = null;\n var {\n value\n } = props;\n this.initialValue = value;\n this.state = {\n isChanged: false,\n value\n };\n }\n componentDidMount() {\n var _this$inputField;\n (_this$inputField = this.inputField) === null || _this$inputField === void 0 || _this$inputField.focus();\n }\n componentDidUpdate(prevProps) {\n var {\n debounceMs\n } = this.props;\n if (prevProps.debounceMs !== debounceMs) {\n this.debouncedSendUpdate.flush();\n this.debouncedSendUpdate = debounce(this.sendUpdate.bind(this), debounceMs);\n }\n }\n componentWillUnmount() {\n this.debouncedSendUpdate.cancel();\n }\n // clear filters needs to be able to reset the value externally\n // and due to the way this component handles its own debouncing\n // this was easier than moving state up.\n setValue(value) {\n this.initialValue = value;\n this.setState({\n value\n });\n }\n focus() {\n var _this$inputField2;\n (_this$inputField2 = this.inputField) === null || _this$inputField2 === void 0 || _this$inputField2.focus();\n }\n handleChange(event) {\n var {\n value\n } = event.target;\n this.setState({\n value,\n isChanged: true\n });\n this.debouncedSendUpdate(value);\n }\n handleCancel() {\n this.debouncedSendUpdate.cancel();\n var {\n initialValue\n } = this;\n var {\n isChanged\n } = this.state;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n var {\n onDone\n } = this.props;\n onDone();\n }\n handleCommit() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n this.debouncedSendUpdate.flush();\n var {\n onDone\n } = this.props;\n onDone(setGridFocus, defocusInput);\n }\n handleFocus() {\n var _this$inputField3;\n (_this$inputField3 = this.inputField) === null || _this$inputField3 === void 0 || _this$inputField3.select();\n }\n handleBlur(event) {\n var {\n relatedTarget\n } = event;\n // handleCommit results in a call that steals focus\n if (relatedTarget != null && relatedTarget.classList.contains('context-menu-container')) {\n // input blurred by calling context-menu\n // don't set grid focus, but do null column focus\n this.handleCommit(false, true);\n } else if (relatedTarget != null && relatedTarget.classList.contains('advanced-filter-button')) {\n // blurred by clicking an advanced filter button\n // don't set grid focus, maintain focusedFilterBarColumn state\n this.handleCommit(false, false);\n } else {\n // clear both, blurred elsewhere\n this.handleCommit(true, true);\n }\n }\n handleTab() {\n var backward = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n this.debouncedSendUpdate.flush();\n var {\n onTab\n } = this.props;\n onTab(backward);\n }\n handleKeyDown(event) {\n switch (event.key) {\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.handleCancel();\n break;\n case 'Enter':\n event.stopPropagation();\n event.preventDefault();\n this.handleCommit();\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n this.handleTab(event.shiftKey);\n break;\n default:\n break;\n }\n }\n handleContextMenu(event) {\n var {\n onContextMenu\n } = this.props;\n onContextMenu(event);\n }\n sendUpdate(value) {\n var {\n onChange\n } = this.props;\n onChange(value);\n }\n render() {\n var {\n className,\n style,\n isAdvancedFilterSet,\n onAdvancedFiltersTriggered\n } = this.props;\n var {\n value\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n style: style,\n className: \"iris-grid-input-autosized-wrapper\",\n \"data-value\": value // used by css based autosizer\n ,\n children: [/*#__PURE__*/_jsx(\"input\", {\n ref: inputField => {\n this.inputField = inputField;\n },\n className: classNames('iris-grid-input-field', className),\n type: \"text\",\n value: value,\n onBlur: this.handleBlur,\n onFocus: this.handleFocus,\n onChange: this.handleChange,\n onKeyDown: this.handleKeyDown,\n onContextMenu: this.handleContextMenu,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-button-container\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isAdvancedFilterSet\n }),\n onClick: onAdvancedFiltersTriggered,\n onContextMenu: this.handleContextMenu,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers \",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n })]\n });\n }\n}\n_defineProperty(FilterInputField, \"defaultProps\", {\n style: {},\n className: '',\n value: '',\n isAdvancedFilterSet: false,\n onAdvancedFiltersTriggered: () => undefined,\n onChange: () => undefined,\n onDone: () => undefined,\n onTab: () => undefined,\n onContextMenu: () => undefined,\n debounceMs: 150\n});\nexport default FilterInputField;\n//# sourceMappingURL=FilterInputField.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 { KeyHandler } from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nclass CopyCellKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n onDown(event, grid) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {\n var {\n mouseX,\n mouseY\n } = grid.state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n var gridPoint = grid.getGridPointFromXY(mouseX, mouseY);\n if (gridPoint.column != null && gridPoint.row != null) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n }\n return false;\n }\n onUp(event, grid) {\n if (this.cursor === this.irisGrid.props.copyCursor) {\n this.cursor = null;\n return true;\n }\n return false;\n }\n}\nexport default CopyCellKeyHandler;\n//# sourceMappingURL=CopyCellKeyHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { ContextActionUtils } from '@deephaven/components';\nimport { KeyHandler } from '@deephaven/grid';\nimport IrisGridUtils from \"../IrisGridUtils.js\";\nclass CopyKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n var {\n selectedRanges\n } = this.irisGrid.state;\n if (event.key === 'c' && ContextActionUtils.isModifierKeyDown(event)) {\n if (IrisGridUtils.isValidSnapshotRanges(selectedRanges)) {\n this.irisGrid.copyRanges(selectedRanges);\n } else {\n this.irisGrid.copyRanges(selectedRanges, false, false, 'Invalid copy ranges');\n }\n return true;\n }\n return false;\n }\n}\nexport default CopyKeyHandler;\n//# sourceMappingURL=CopyKeyHandler.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 { KeyHandler } from '@deephaven/grid';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ReverseKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.REVERSE.matchesEvent(event)) {\n if (!this.irisGrid.isReversible()) {\n return false;\n }\n var {\n reverse\n } = this.irisGrid.state;\n this.irisGrid.reverse(!reverse);\n return true;\n }\n return false;\n }\n}\nexport default ReverseKeyHandler;\n//# sourceMappingURL=ReverseKeyHandler.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 { KeyHandler } from '@deephaven/grid';\nimport IrisGridShortcuts from \"../IrisGridShortcuts.js\";\nclass ClearFilterKeyHandler extends KeyHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(event) {\n if (IrisGridShortcuts.TABLE.CLEAR_FILTERS.matchesEvent(event)) {\n this.irisGrid.clearAllFilters();\n return true;\n }\n return false;\n }\n}\nexport default ClearFilterKeyHandler;\n//# sourceMappingURL=ClearFilterKeyHandler.js.map","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport \"./PendingDataBottomBar.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar HIDE_TIMEOUT = 3000;\nexport function ToastBottomBar(_ref) {\n var {\n children = null,\n onEntering,\n onEntered,\n onExiting,\n onExited\n } = _ref;\n var [isShown, setIsShown] = useState(false);\n var timeout = useRef();\n var prevChildren = usePrevious(children);\n var startTimer = useCallback(() => {\n setIsShown(true);\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n timeout.current = setTimeout(() => {\n setIsShown(false);\n }, HIDE_TIMEOUT);\n }, [setIsShown, timeout]);\n useEffect(() => {\n if (prevChildren !== children && children != null) {\n startTimer();\n }\n }, [children, prevChildren, setIsShown, startTimer]);\n useEffect(() => () => timeout.current ? clearTimeout(timeout.current) : undefined, []);\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n className: \"toast-bottom-bar\",\n isShown: isShown,\n onEntering: onEntering,\n onEntered: onEntered,\n onExiting: onExiting,\n onExited: onExited,\n children: children\n });\n}\nexport default ToastBottomBar;\n//# sourceMappingURL=ToastBottomBar.js.map","/* eslint-disable react/require-default-props */\n/* eslint-disable no-param-reassign */\nimport { useEffect, useMemo } from 'react';\nimport { EMPTY_ARRAY, EMPTY_MAP } from '@deephaven/utils';\nimport { useOnChange } from '@deephaven/react-hooks';\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nimport { isIrisGridTreeTableModel } from \"./IrisGridTreeTableModel.js\";\nvar COLUMN_BUFFER_PAGES = 1;\n/**\n * React component to keep IrisGridModel in sync\n */\nfunction IrisGridModelUpdater(_ref) {\n var {\n model,\n top,\n bottom,\n left,\n right,\n filter,\n formatter,\n columnAlignmentMap,\n reverse = false,\n sorts,\n customColumns,\n movedColumns,\n hiddenColumns,\n alwaysFetchColumns,\n rollupConfig = null,\n totalsConfig = null,\n selectDistinctColumns = EMPTY_ARRAY,\n pendingRowCount = 0,\n pendingDataMap = EMPTY_MAP,\n frozenColumns,\n formatColumns,\n columnHeaderGroups,\n partitionConfig,\n showExtraGroupColumn\n } = _ref;\n var {\n isTotalsAvailable,\n isRollupAvailable\n } = model;\n // Check for showExtraGroupColumn before memoizing columns, since updating it will change the columns\n useOnChange(() => {\n if (isIrisGridTreeTableModel(model) && showExtraGroupColumn != null) {\n model.showExtraGroupColumn = showExtraGroupColumn;\n }\n }, [model, showExtraGroupColumn]);\n var columns = useMemo(() => IrisGridUtils.getModelViewportColumns(model.columns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns, COLUMN_BUFFER_PAGES), [model.columns, left, right, movedColumns, hiddenColumns, alwaysFetchColumns]);\n useOnChange(function updateFilter() {\n model.filter = filter;\n }, [model, filter]);\n useOnChange(function updateSorts() {\n var sortsForModel = [...sorts];\n if (reverse) {\n sortsForModel.push(model.dh.Table.reverse());\n }\n model.sort = sortsForModel;\n }, [model, sorts, reverse]);\n useOnChange(function updateFormatter() {\n model.formatter = formatter;\n }, [model, formatter]);\n useOnChange(function updateColumnAlignmentMap() {\n model.columnAlignmentMap = columnAlignmentMap;\n }, [model, columnAlignmentMap]);\n useOnChange(function updateCustomColumns() {\n if (model.isCustomColumnsAvailable) {\n model.customColumns = customColumns;\n }\n }, [model, customColumns]);\n useOnChange(function updateFormatColumns() {\n if (model.isFormatColumnsAvailable) {\n model.formatColumns = formatColumns;\n }\n }, [model, formatColumns]);\n useOnChange(function updateViewport() {\n model.setViewport(top, bottom, columns);\n }, [model, top, bottom, columns]);\n useOnChange(function updateRollupCOnfig() {\n if (isRollupAvailable) {\n model.rollupConfig = rollupConfig;\n }\n }, [model, isRollupAvailable, rollupConfig]);\n useOnChange(function updateSelectDistinctColumns() {\n if (model.isSelectDistinctAvailable) {\n model.selectDistinctColumns = selectDistinctColumns;\n }\n }, [model, selectDistinctColumns]);\n useOnChange(function updateTotalsConfig() {\n if (isTotalsAvailable) {\n model.totalsConfig = totalsConfig;\n }\n }, [model, isTotalsAvailable, totalsConfig]);\n useOnChange(function updateColumnHeaderGroups() {\n model.columnHeaderGroups = columnHeaderGroups;\n }, [model, columnHeaderGroups]);\n useOnChange(function updatePartitionConfig() {\n if (partitionConfig && isPartitionedGridModel(model)) {\n model.partitionConfig = partitionConfig;\n }\n }, [model, partitionConfig]);\n // These setters are wrapped in useEffect instead of useOnChange because they emit an event\n // that potentially causes side effects, violating the rule that render should be a pure function.\n useEffect(function updateFrozenColumns() {\n if (frozenColumns) {\n model.updateFrozenColumns(frozenColumns);\n }\n }, [model, frozenColumns]);\n useEffect(function updatePendingRowCount() {\n model.pendingRowCount = pendingRowCount;\n }, [model, pendingRowCount]);\n useEffect(function updatePendingDataMap() {\n model.pendingDataMap = pendingDataMap;\n }, [model, pendingDataMap]);\n return null;\n}\nIrisGridModelUpdater.displayName = 'IrisGridModelUpdater';\nexport default IrisGridModelUpdater;\n//# sourceMappingURL=IrisGridModelUpdater.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 React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, dhSortSlash, vsLock } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport { isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport \"./ColumnStatistics.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnStatistics');\nvar STATS_LABEL_OVERRIDES = {\n SIZE: 'Number of Rows'\n};\nclass ColumnStatistics extends Component {\n static getStatsLabel(operation) {\n var _STATS_LABEL_OVERRIDE;\n return (_STATS_LABEL_OVERRIDE = STATS_LABEL_OVERRIDES[operation]) !== null && _STATS_LABEL_OVERRIDE !== void 0 ? _STATS_LABEL_OVERRIDE : operation.split(' ').map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()).join(' ');\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"cancelablePromise\", void 0);\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n this.cancelablePromise = null;\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0\n };\n }\n componentDidMount() {\n this.maybeGenerateStatistics();\n }\n componentWillUnmount() {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n maybeGenerateStatistics() {\n var {\n column,\n model\n } = this.props;\n var numRows = model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount;\n this.setState({\n numRows\n });\n if (!model.isColumnStatisticsAvailable || column.isProxy === true) {\n this.setState({\n loading: false\n });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n handleGenerateStatistics() {\n this.setState({\n loading: true\n });\n var {\n column,\n model\n } = this.props;\n this.cancelablePromise = PromiseUtils.makeCancelable(model.columnStatistics(column));\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n handleStatistics(stats) {\n log.debug('Received statistics', stats);\n var {\n model,\n onStatistics\n } = this.props;\n var statistics = [];\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation)\n });\n });\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long'\n });\n });\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount - model.pendingRowCount - model.floatingBottomRowCount - model.floatingTopRowCount\n });\n onStatistics();\n }\n handleError(error) {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null\n });\n }\n render() {\n var _column$displayName;\n var {\n column,\n model\n } = this.props;\n var {\n error,\n loading,\n statistics,\n numRows\n } = this.state;\n var showGenerateStatistics = !loading && error == null && statistics == null && model.isColumnStatisticsAvailable;\n var statisticElements = [];\n var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n var description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (var i = 0; i < statistics.length; i += 1) {\n var {\n operation,\n className,\n value,\n type\n } = statistics[i];\n var formattedValue = !type ? model.displayString(value, column.type, column.name) : model.displayString(value, type);\n var statisticElement = /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('column-statistic-operation', className),\n children: operation\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedValue\n })]\n }, operation);\n statisticElements.push(statisticElement);\n }\n }\n var rowCountLabel = isExpandableGridModel(model) && model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';\n var formattedRowCount = model.displayString(numRows, 'long');\n var columnIndex = model.getColumnIndexByName(column.name);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-title\",\n children: [(_column$displayName = column.displayName) !== null && _column$displayName !== void 0 ? _column$displayName : column.name, /*#__PURE__*/_jsxs(\"span\", {\n className: \"column-statistics-type\",\n children: [\"\\xA0(\", columnType, \")\"]\n }), /*#__PURE__*/_jsx(CopyButton, {\n className: \"column-statistics-copy\",\n tooltip: \"Copy column name\",\n copy: column.name\n })]\n }), description != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistics-description\",\n children: description\n }), columnIndex != null && !model.isColumnSortable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortSlash,\n className: \"mr-1\"\n }), \"Not sortable\"]\n }), columnIndex != null && !model.isColumnMovable(columnIndex) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock,\n className: \"mr-1\"\n }), model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable']\n }), columnIndex != null && isEditableGridModel(model) && model.isEditable && !model.keyColumnSet.has(column.name) && !model.valueColumnSet.has(column.name) && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-status\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsLock,\n className: \"mr-1\"\n }), \"Not editable\"]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-grid\",\n children: [statistics == null && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-operation\",\n children: rowCountLabel\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"column-statistic-value\",\n children: formattedRowCount\n })]\n }), statisticElements]\n }), showGenerateStatistics && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n children: \"Generate Stats\"\n }), error != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n }), statistics && !loading && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"px-0\",\n onClick: this.handleGenerateStatistics,\n icon: dhRefresh,\n children: \"Refresh\"\n }), loading && /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-statistics-loading\",\n children: [/*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"loading-spinner-vertical-align\"\n }), \"Calculating Stats...\"]\n })]\n });\n }\n}\n/** Automatically generate the statistics when the row count is below this threshold */\n_defineProperty(ColumnStatistics, \"AUTO_GENERATE_LIMIT\", 100000);\nexport default ColumnStatistics;\n//# sourceMappingURL=ColumnStatistics.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 React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Checkbox, Popper, SearchInput, Tooltip } from '@deephaven/components';\nimport { dhGearFilled, dhCheckSquare, dhSquareFilled, dhRemoveSquareFilled, dhWarningCircleFilled, vsCircleLargeFilled } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport \"./CrossColumnSearch.css\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nclass CrossColumnSearch extends PureComponent {\n static createSearchFilter(dh, searchValue, selectedColumns, columns, invertSelection) {\n var filterColumns = invertSelection ? columns.filter(column => !selectedColumns.includes(column.name)).map(column => column.name) : selectedColumns;\n if (searchValue && filterColumns.length > 0) {\n var filterValue = dh.FilterValue.ofString(searchValue);\n var searchFilter = filterColumns.length === columns.length ? dh.FilterCondition.search(filterValue) : dh.FilterCondition.search(filterValue, columns.filter(column => filterColumns.includes(column.name)).map(column => column.filter()));\n return searchFilter;\n }\n return undefined;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"searchField\", void 0);\n this.handleSearchValueChange = this.handleSearchValueChange.bind(this);\n this.toggleColumn = this.toggleColumn.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n this.selectNumbers = this.selectNumbers.bind(this);\n this.searchField = /*#__PURE__*/React.createRef();\n this.state = {\n isConfigureColumnsShown: false\n };\n }\n focus() {\n var _this$searchField$cur;\n (_this$searchField$cur = this.searchField.current) === null || _this$searchField$cur === void 0 || _this$searchField$cur.focus();\n }\n handleSearchValueChange(event) {\n var {\n onChange,\n selectedColumns,\n invertSelection\n } = this.props;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n sendColumnChange(selectedColumns, invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, selectedColumns, invertSelection);\n }\n setInvertSelection(invertSelection) {\n var {\n onChange,\n value\n } = this.props;\n onChange(value, [], invertSelection);\n }\n toggleColumn(name) {\n var {\n selectedColumns,\n invertSelection\n } = this.props;\n if (selectedColumns.includes(name)) {\n this.sendColumnChange(selectedColumns.filter(c => c !== name), invertSelection);\n } else {\n var update = selectedColumns.slice();\n update.push(name);\n this.sendColumnChange(update, invertSelection);\n }\n }\n selectAll() {\n this.setInvertSelection(true);\n }\n clear() {\n this.setInvertSelection(false);\n }\n selectNumbers() {\n var {\n columns\n } = this.props;\n this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);\n }\n render() {\n var {\n value,\n selectedColumns,\n invertSelection,\n columns\n } = this.props;\n var {\n isConfigureColumnsShown\n } = this.state;\n var hasAllColumnsSelected = selectedColumns.length === 0 && invertSelection === true || selectedColumns.length === columns.length && invertSelection === false;\n var hasNoColumnsSelected = selectedColumns.length === 0 && invertSelection === false || selectedColumns.length === columns.length && invertSelection === true;\n\n // set icon layers\n var icon;\n if (hasAllColumnsSelected) {\n // icon if all columns selected for search\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhCheckSquare,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else if (hasNoColumnsSelected) {\n // icon error, no columns selected for searching\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCircleLargeFilled,\n mask: dhGearFilled,\n transform: \"shrink-1 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled,\n className: \"text-danger\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n } else {\n // icon if some columns selected, but not all\n icon = /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSquareFilled,\n mask: dhGearFilled,\n transform: \"shrink-2 down-5 right-7\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhRemoveSquareFilled,\n className: \"text-primary\",\n transform: \"shrink-4 down-5 right-7\"\n })]\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-container\",\n children: [/*#__PURE__*/_jsx(SearchInput, {\n className: \"cross-column-search\",\n placeholder: \"Search Data...\",\n \"data-testid\": \"cross-column-search\",\n value: value,\n onChange: this.handleSearchValueChange,\n ref: this.searchField\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2\",\n onClick: () => {\n if (isConfigureColumnsShown) {\n this.setState({\n isConfigureColumnsShown: false\n });\n } else {\n this.setState({\n isConfigureColumnsShown: true\n });\n }\n },\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"fa-layers\",\n children: icon\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Configure Columns\"\n }), /*#__PURE__*/_jsx(Popper, {\n isShown: isConfigureColumnsShown,\n className: \"cross-column-popper\",\n onExited: () => {\n this.setState({\n isConfigureColumnsShown: false\n });\n },\n closeOnBlur: true,\n interactive: true,\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-popup\",\n children: [\"Searched Columns\", /*#__PURE__*/_jsx(\"div\", {\n className: \"cross-column-scroll\",\n children: columns.map(column => {\n if (column.isProxy === true) return null;\n return /*#__PURE__*/_jsxs(React.Fragment, {\n children: [/*#__PURE__*/_jsx(Checkbox, {\n className: \"cross-column-checkbox\",\n checked: invertSelection ? !selectedColumns.includes(column.name) : selectedColumns.includes(column.name),\n onChange: () => this.toggleColumn(column.name),\n children: column.name\n }), column.type.substring(column.type.lastIndexOf('.') + 1)]\n }, column.name);\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"cross-column-button-bar\",\n children: [/*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectAll,\n children: \"Select All\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.clear,\n children: \"Clear\"\n }), /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-link\",\n onClick: this.selectNumbers,\n children: \"Numbers Only\"\n })]\n }), hasNoColumnsSelected && /*#__PURE__*/_jsxs(\"p\", {\n className: \"text-danger\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningCircleFilled\n }), \" Select at least one column to search.\"]\n })]\n })\n })]\n })]\n });\n }\n}\nexport default CrossColumnSearch;\n//# sourceMappingURL=CrossColumnSearch.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 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 _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 React, { Component } from 'react';\nimport memoizee from 'memoizee';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsChevronRight, vsMerge, vsKey } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { Picker } from '@deephaven/jsapi-components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport \"./IrisGridPartitionSelector.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridPartitionSelector');\nclass IrisGridPartitionSelector extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"getCachedChangeCallback\", memoizee(index => value => this.handlePartitionSelect(index, value), {\n max: 100\n }));\n _defineProperty(this, \"getCachedFormatValueCallback\", memoizee(index => value => this.getDisplayValue(index, value), {\n max: 100\n }));\n this.handlePartitionTableClick = this.handlePartitionTableClick.bind(this);\n this.handleMergeClick = this.handleMergeClick.bind(this);\n this.handlePartitionSelect = this.handlePartitionSelect.bind(this);\n var {\n model\n } = props;\n this.tableUtils = new TableUtils(model.dh);\n this.pending = new Pending();\n this.state = {\n // We start be loading the partition tables, so we should be in a loading state\n isLoading: true,\n baseTable: null,\n keysTable: null,\n partitionTables: null\n };\n }\n componentDidMount() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this.props;\n try {\n var keysTable = yield _this.pending.add(model.partitionKeysTable().then(keyTable => keyTable), t => t.close());\n var baseTable = yield _this.pending.add(model.partitionBaseTable(), t => t.close());\n _this.setState({\n keysTable,\n baseTable,\n isLoading: false\n }, _this.updatePartitionOptions);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n // Just re-throw the error if it's not a cancel\n throw e;\n }\n }\n })();\n }\n componentDidUpdate(prevProps) {\n var {\n partitionConfig: prevConfig\n } = prevProps;\n var {\n partitionConfig\n } = this.props;\n if (prevConfig !== partitionConfig) {\n this.updatePartitionOptions();\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var {\n keysTable,\n baseTable,\n partitionTables\n } = this.state;\n baseTable === null || baseTable === void 0 || baseTable.close();\n keysTable === null || keysTable === void 0 || keysTable.close();\n partitionTables === null || partitionTables === void 0 || partitionTables.forEach(table => table.close());\n }\n handlePartitionTableClick() {\n log.debug2('handlePartitionTableClick');\n var {\n partitionConfig\n } = this.props;\n assertNotNull(partitionConfig);\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Keys and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'keys' ? 'partition' : 'keys';\n this.sendUpdate(newPartitionConfig);\n }\n handleMergeClick() {\n log.debug2('handleMergeClick');\n var {\n partitionConfig\n } = this.props;\n assertNotNull(partitionConfig);\n var newPartitionConfig = _objectSpread({}, partitionConfig);\n // Toggle between Merged and Partition mode\n newPartitionConfig.mode = partitionConfig.mode === 'merged' ? 'partition' : 'merged';\n this.sendUpdate(newPartitionConfig);\n }\n\n /**\n * Handles when a partition dropdown selection is changed. Will send an update with the new partition config\n * @param index Index of the partition column that was changed\n * @param selectedValue Selected value of the partition column\n */\n handlePartitionSelect(index, selectedValue) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var {\n partitionConfig: prevConfig\n } = _this2.props;\n assertNotNull(prevConfig);\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n var newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n var {\n baseTable\n } = _this2.state;\n var {\n keysTable\n } = _this2.state;\n assertNotNull(baseTable);\n assertNotNull(keysTable);\n try {\n _this2.setState({\n isLoading: true\n });\n var t = yield _this2.pending.add(baseTable.copy(), tCopy => tCopy.close());\n\n // Apply our partition filters, and just get the first value\n var partitionFilters = newPartitions.slice(0, index + 1).map((partition, i) => {\n var partitionColumn = t.columns[i];\n return _this2.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n t.applyFilter(partitionFilters);\n t.setViewport(0, 0, t.columns);\n var data = yield _this2.pending.add(t.getViewportData());\n var newConfig = {\n // Core JSAPI returns undefined for null table values,\n // coalesce with null to differentiate null from no selection in the dropdown\n // https://github.com/deephaven/deephaven-core/issues/5400\n partitions: keysTable.columns.map(column => data.rows[0].get(column)),\n mode: 'partition'\n };\n t.close();\n _this2.sendUpdate(newConfig);\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to get partition tables', e);\n }\n } finally {\n _this2.setState({\n isLoading: false\n });\n }\n })();\n }\n sendUpdate(partitionConfig) {\n log.debug2('sendUpdate', partitionConfig);\n var {\n onChange\n } = this.props;\n onChange(partitionConfig);\n }\n\n /**\n * Calls model.displayString with a special character case\n * @param index The index of the partition column to get the display value for\n * @param value The partition value to get the display value for\n */\n getDisplayValue(index, value) {\n var {\n model\n } = this.props;\n if (value === null) {\n return '(null)';\n }\n if (value === undefined || value === '') {\n return '';\n }\n var column = model.partitionColumns[index];\n if (TableUtils.isCharType(column.type) && value.toString().length > 0) {\n return String.fromCharCode(parseInt(value.toString(), 10));\n }\n return model.displayString(value, column.type, column.name);\n }\n\n /**\n * Update the options on the partition dropdown tables\n */\n updatePartitionOptions() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var {\n model\n } = _this3.props;\n var {\n partitionConfig: prevConfig\n } = _this3.props;\n if (prevConfig == null) {\n return;\n }\n var {\n keysTable\n } = _this3.state;\n assertNotNull(keysTable);\n var partitionFilters = [...prevConfig.partitions].map((partition, i) => {\n var partitionColumn = keysTable.columns[i];\n return _this3.tableUtils.makeNullableEqFilter(partitionColumn, partition);\n });\n var partitionTables = yield Promise.all(model.partitionColumns.map(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (_, i) {\n keysTable.applyFilter(partitionFilters.slice(0, i));\n return keysTable.selectDistinct(model.partitionColumns.slice(0, i + 1));\n });\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }()));\n _this3.setState({\n partitionTables\n });\n })();\n }\n getPartitionFilters(partitionTables) {\n var {\n model,\n partitionConfig\n } = this.props;\n assertNotNull(partitionConfig);\n var {\n partitions\n } = partitionConfig;\n log.debug('getPartitionFilters', partitionConfig);\n if (partitions.length !== partitionTables.length) {\n throw new Error(\"Invalid partition config set. Expected \".concat(partitionTables.length, \" partitions, but got \").concat(partitions.length));\n }\n\n // The filters are applied in order, so we need to build up the filters for each partition\n var partitionFilters = [];\n for (var i = 0; i < partitions.length; i += 1) {\n if (i === 0) {\n // There's no reason to ever filter the first table\n partitionFilters.push([]);\n } else {\n var previousFilter = partitionFilters[i - 1];\n var previousPartition = partitions[i - 1];\n var previousColumn = model.partitionColumns[i - 1];\n var partitionFilter = [...previousFilter, this.tableUtils.makeNullableEqFilter(previousColumn, previousPartition)];\n partitionFilters.push(partitionFilter);\n }\n }\n return partitionFilters;\n }\n render() {\n var {\n model,\n partitionConfig\n } = this.props;\n var {\n isLoading,\n partitionTables\n } = this.state;\n var partitionSelectors = model.partitionColumns.map((column, index) => /*#__PURE__*/_jsxs(\"div\", {\n className: \"column-selector\",\n children: [(partitionTables === null || partitionTables === void 0 ? void 0 : partitionTables[index]) && /*#__PURE__*/_jsx(Picker, {\n label: column.name,\n labelPosition: \"side\",\n table: partitionTables[index],\n direction: \"bottom\",\n shouldFlip: false,\n keyColumn: partitionTables[index].columns[index].name,\n selectedKey: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'partition' ? partitionConfig.partitions[index] : null,\n placeholder: \"Select a key\",\n labelColumn: partitionTables[index].columns[index].name,\n onChange: this.getCachedChangeCallback(index),\n isDisabled: isLoading || partitionConfig == null\n }), model.partitionColumns.length - 1 === index || /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n })]\n }, \"selector-\".concat(column.name)));\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-partition-selector\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"partition-button-group\",\n children: [/*#__PURE__*/_jsx(Button, {\n onClick: this.handlePartitionTableClick,\n kind: \"inline\",\n tooltip: model.isPartitionAwareSourceTable ? 'View keys as table' : 'View underlying partition table',\n icon: vsKey,\n active: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'keys',\n disabled: isLoading || partitionConfig == null,\n children: \"Partitions\"\n }), /*#__PURE__*/_jsx(Button, {\n onClick: this.handleMergeClick,\n kind: \"inline\",\n tooltip: \"View all partitions as one merged table\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMerge,\n rotation: 90\n }),\n active: (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) === 'merged',\n disabled: isLoading || partitionConfig == null,\n children: model.isPartitionAwareSourceTable ? 'Coalesce' : 'Merge'\n })]\n }), partitionSelectors]\n });\n }\n}\nexport default IrisGridPartitionSelector;\n//# sourceMappingURL=IrisGridPartitionSelector.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 React, { Component } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport \"./SelectDistinctBuilder.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('SelectDistinctBuilder');\nclass SelectDistinctBuilder extends Component {\n constructor(props) {\n super(props);\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n var {\n model,\n selectDistinctColumns\n } = this.props;\n this.state = {\n inputs: selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputs\n } = this.state;\n var {\n onChange\n } = this.props;\n if (prevState.inputs !== inputs) {\n var filteredInputs = inputs.filter(val => val !== '');\n if (!deepEqual(prevState.inputs.filter(val => val !== ''), filteredInputs)) {\n onChange(filteredInputs);\n }\n }\n }\n handleAddColumnClick() {\n this.setState(_ref => {\n var {\n inputs: prevInputs\n } = _ref;\n return {\n inputs: [...prevInputs, '']\n };\n });\n }\n handleDeleteColumn(index) {\n this.setState(_ref2 => {\n var {\n inputs\n } = _ref2;\n return {\n inputs: inputs.length === 1 && index === 0 ? [''] : inputs.filter((input, inputIndex) => index !== inputIndex)\n };\n });\n }\n handleDropdownChanged(index, value) {\n log.debug('handleDropdownChanged', index, value);\n this.setState(_ref3 => {\n var {\n inputs: prevInputs\n } = _ref3;\n var inputs = [...prevInputs];\n inputs[index] = value;\n return {\n inputs\n };\n });\n }\n renderInputs() {\n var {\n columns,\n inputs\n } = this.state;\n return inputs.map((value, index) => {\n var options = columns.filter(_ref4 => {\n var {\n name\n } = _ref4;\n return name === value || !inputs.includes(name);\n }).map(_ref5 => {\n var {\n name\n } = _ref5;\n return /*#__PURE__*/_jsx(\"option\", {\n value: name,\n children: name\n }, name);\n });\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/no-array-index-key\n _jsxs(\"div\", {\n className: \"form-inline px-3 pb-3\",\n children: [/*#__PURE__*/_jsxs(Select, {\n className: \"form-control custom-select col\",\n value: value,\n onChange: eventTargetValue => this.handleDropdownChanged(index, eventTargetValue),\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: \"\",\n children: \"Select a column\"\n }), options]\n }), (inputs.length > 1 || value !== '') && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: () => {\n this.handleDeleteColumn(index);\n },\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTrash,\n transform: \"grow-3\"\n }),\n tooltip: \"Delete column\"\n })]\n }, index)\n );\n });\n }\n render() {\n var {\n columns,\n inputs\n } = this.state;\n var disableAddButton = inputs.length >= columns.length;\n return /*#__PURE__*/_jsxs(\"div\", {\n role: \"presentation\",\n className: \"select-distinct-builder-container h-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-title\",\n children: \"Display Unique Values From\"\n }), this.renderInputs(), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(\"div\", {\n className: \"pt-1 px-3\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-add-column\",\n onClick: this.handleAddColumnClick,\n disabled: disableAddButton,\n icon: dhNewCircleLargeFilled,\n children: \"Add Additional Column\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-footer\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"select-distinct-builder-hint\",\n children: \"Display only unique values from the selected table columns. Note that this will reset any filters and display only the selected columns.\"\n })\n })]\n });\n }\n}\n_defineProperty(SelectDistinctBuilder, \"defaultProps\", {\n selectDistinctColumns: [],\n onChange: () => undefined\n});\nexport default SelectDistinctBuilder;\n//# sourceMappingURL=SelectDistinctBuilder.js.map","import React from 'react';\nimport { Menu } from '@deephaven/components';\nimport AdvancedSettingsType from \"./AdvancedSettingsType.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction AdvancedSettingsMenu(_ref) {\n var {\n items,\n onChange: _onChange = () => undefined\n } = _ref;\n return /*#__PURE__*/_jsx(Menu, {\n items: Array.from(items.entries()).map(_ref2 => {\n var [key, isOn] = _ref2;\n return {\n title: AdvancedSettingsMenu.getAdvancedSettingsTitleForKey(key),\n isOn,\n onChange: value => _onChange(key, value)\n };\n })\n });\n}\nAdvancedSettingsMenu.getAdvancedSettingsTitleForKey = key => {\n switch (key) {\n case AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from a control';\n case AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS:\n return 'Clear current table filters before applying new filters from an incoming link filter';\n }\n};\nexport default AdvancedSettingsMenu;\n//# sourceMappingURL=AdvancedSettingsMenu.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback } from 'react';\nimport { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsGripper, vsTrash } from '@deephaven/icons';\nimport { Button, DragUtils, Tooltip } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport \"./ConditionalFormattingMenu.css\";\nimport { FormatterType, getBackgroundForStyleConfig, getColorForStyleConfig, getShortLabelForConditionType, NumberCondition, StringCondition, DateCondition } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormattingMenu');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getRuleValue(config) {\n var {\n column: {\n type\n }\n } = config;\n if (TableUtils.isNumberType(type)) {\n return config.condition === NumberCondition.IS_NULL || config.condition === NumberCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isCharType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isStringType(type)) {\n return config.condition === StringCondition.IS_NULL || config.condition === StringCondition.IS_NOT_NULL ? '' : \"\\\"\".concat(config.value, \"\\\"\");\n }\n if (TableUtils.isDateType(type)) {\n return config.condition === DateCondition.IS_NULL || config.condition === DateCondition.IS_NOT_NULL ? '' : \"\".concat(config.value);\n }\n if (TableUtils.isBooleanType(type)) {\n return '';\n }\n throw new Error(\"Invalid column type \".concat(type, \" in getRuleValue\"));\n}\nfunction getRuleTitle(config) {\n if (TableUtils.isNumberType(config.column.type) && config.condition === NumberCondition.IS_BETWEEN) {\n return \"\".concat(config.start, \" < \").concat(config.column.name, \" < \").concat(config.end);\n }\n return \"\".concat(config.column.name, \" \").concat(getShortLabelForConditionType(config.column.type, config.condition), \" \\n \").concat(getRuleValue(config));\n}\nfunction ConditionalFormattingMenu(props) {\n var {\n rules = [],\n onChange = DEFAULT_CALLBACK,\n onCreate = DEFAULT_CALLBACK,\n onSelect = DEFAULT_CALLBACK\n } = props;\n var handleRuleClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Rule clicked', rule, index);\n onSelect(index);\n }, [onSelect]);\n var handleDeleteClick = useCallback((e, rule, index) => {\n e.stopPropagation();\n log.debug('Delete button clicked', rule, index);\n var updatedRules = [...rules];\n updatedRules.splice(index, 1);\n onChange(updatedRules);\n }, [onChange, rules]);\n var handleDragHandlerClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n var handleDragEnd = useCallback(result => {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (result.destination == null) {\n return;\n }\n var sourceIndex = result.source.index;\n var destinationIndex = result.destination.index;\n var updatedRules = [...rules];\n var sourceInput = rules[sourceIndex];\n updatedRules.splice(sourceIndex, 1);\n updatedRules.splice(destinationIndex, 0, sourceInput);\n onChange(updatedRules);\n }, [onChange, rules]);\n\n // Display list of rules\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-formatting-rules\",\n children: [/*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: DragUtils.startDragging,\n onDragEnd: handleDragEnd,\n children: /*#__PURE__*/_jsx(Droppable, {\n droppableId: \"droppable-custom-columns\",\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n className: classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith\n }),\n children: [rules.length === 0 && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted pl-2\",\n children: \"No formats defined\"\n }), rules.map((rule, index) => /*#__PURE__*/_jsx(Draggable\n // eslint-disable-next-line react/no-array-index-key\n , {\n draggableId: \"\".concat(index, \"-\").concat(rule.type),\n index: index,\n disableInteractiveElementBlocking: true,\n children:\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (provided, snapshot) => /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread({\n role: \"menuitem\",\n tabIndex: 0,\n onClick: e => handleRuleClick(e, rule, index),\n className: classNames('draggable-container', {\n dragging: snapshot.isDragging\n }),\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), {}, {\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"conditional-formatting-list-item\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"formatting-item\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"rule-icon\",\n children: /*#__PURE__*/_jsx(\"span\", {\n className: \"rule-icon-bg\",\n style: {\n backgroundColor: getBackgroundForStyleConfig(rule.config.style),\n color: getColorForStyleConfig(rule.config.style)\n },\n children: rule.type === FormatterType.ROWS ? 'row' : 'col'\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"rule-title\",\n children: getRuleTitle(rule.config)\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: e => handleDeleteClick(e, rule, index),\n icon: vsTrash,\n tooltip: \"Delete rule\"\n }), /*#__PURE__*/_jsxs(\"button\", _objectSpread(_objectSpread({\n type: \"button\",\n className: \"btn btn-link btn-link-icon px-2 btn-drag-handle\",\n onClick: handleDragHandlerClick\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.dragHandleProps), {}, {\n children: [/*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to re-order\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGripper\n })]\n }))]\n })\n })\n }))\n }, \"\".concat(index, \"-\").concat(rule.type))), provided.placeholder]\n }))\n })\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onCreate,\n icon: dhNewCircleLargeFilled,\n children: \"Add New Rule\"\n })]\n });\n}\nexport default ConditionalFormattingMenu;\n//# sourceMappingURL=ConditionalFormattingMenu.js.map","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { Select } from '@deephaven/components';\nimport { StringCondition, DateCondition, getLabelForNumberCondition, getLabelForDateCondition, getLabelForStringCondition, NumberCondition, getDefaultConditionForType, getLabelForBooleanCondition, BooleanCondition, CharCondition, getLabelForCharCondition, isDateConditionValid, getDefaultValueForType } from \"./ConditionalFormattingUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nvar numberConditionOptions = [NumberCondition.IS_EQUAL, NumberCondition.IS_NOT_EQUAL, NumberCondition.IS_BETWEEN, NumberCondition.GREATER_THAN, NumberCondition.GREATER_THAN_OR_EQUAL, NumberCondition.LESS_THAN, NumberCondition.LESS_THAN_OR_EQUAL, NumberCondition.IS_NULL, NumberCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForNumberCondition(option)\n}, option));\nvar stringConditions = [StringCondition.IS_EXACTLY, StringCondition.IS_NOT_EXACTLY, StringCondition.CONTAINS, StringCondition.DOES_NOT_CONTAIN, StringCondition.STARTS_WITH, StringCondition.ENDS_WITH, StringCondition.IS_NULL, StringCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForStringCondition(option)\n}, option));\nvar dateConditions = [DateCondition.IS_EXACTLY, DateCondition.IS_NOT_EXACTLY, DateCondition.IS_BEFORE, DateCondition.IS_BEFORE_OR_EQUAL, DateCondition.IS_AFTER, DateCondition.IS_AFTER_OR_EQUAL, DateCondition.IS_NULL, DateCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForDateCondition(option)\n}, option));\nvar booleanConditions = [BooleanCondition.IS_TRUE, BooleanCondition.IS_FALSE, BooleanCondition.IS_NULL, BooleanCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForBooleanCondition(option)\n}, option));\nvar charConditions = [CharCondition.IS_EQUAL, CharCondition.IS_NOT_EQUAL, CharCondition.IS_NULL, CharCondition.IS_NOT_NULL].map(option => /*#__PURE__*/_jsx(\"option\", {\n value: option,\n children: getLabelForCharCondition(option)\n}, option));\nfunction isNumberConditionValid(condition, value, startValue, endValue) {\n if (condition === NumberCondition.IS_NULL || condition === NumberCondition.IS_NOT_NULL) {\n return true;\n }\n if (condition === NumberCondition.IS_BETWEEN && startValue != null && startValue !== '' && !Number.isNaN(Number.parseFloat(startValue)) && endValue != null && endValue !== '' && !Number.isNaN(Number.parseFloat(endValue))) {\n return true;\n }\n if (condition !== NumberCondition.IS_BETWEEN && value !== undefined && value !== '' && !Number.isNaN(Number.parseFloat(value))) {\n return true;\n }\n return false;\n}\nfunction getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue) {\n switch (selectedCondition) {\n case NumberCondition.IS_EQUAL:\n case NumberCondition.IS_NOT_EQUAL:\n case NumberCondition.GREATER_THAN:\n case NumberCondition.GREATER_THAN_OR_EQUAL:\n case NumberCondition.LESS_THAN:\n case NumberCondition.LESS_THAN_OR_EQUAL:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n case NumberCondition.IS_BETWEEN:\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-row\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex mr-2\",\n placeholder: \"Start value\",\n value: startValue !== null && startValue !== void 0 ? startValue : '',\n onChange: handleStartValueChange\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: \"form-control d-flex\",\n placeholder: \"End value\",\n value: endValue !== null && endValue !== void 0 ? endValue : '',\n onChange: handleEndValueChange\n })]\n });\n case NumberCondition.IS_NULL:\n case NumberCondition.IS_NOT_NULL:\n return null;\n }\n}\nfunction getStringInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case StringCondition.IS_NULL:\n case StringCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getDateInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case DateCondition.IS_NULL:\n case DateCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getBooleanInputs() {\n return null;\n}\nfunction getCharInputs(selectedCondition, handleValueChange, conditionValue) {\n switch (selectedCondition) {\n case CharCondition.IS_NULL:\n case CharCondition.IS_NOT_NULL:\n return null;\n default:\n return /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n maxLength: 1,\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction ConditionEditor(props) {\n var {\n column,\n config,\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var selectedColumnType = column.type;\n var [prevColumnType, setPrevColumnType] = useState(selectedColumnType);\n var [selectedCondition, setCondition] = useState(config.condition);\n var [conditionValue, setValue] = useState(config.value);\n var [startValue, setStartValue] = useState(config.start);\n var [endValue, setEndValue] = useState(config.end);\n if (selectedColumnType !== prevColumnType) {\n // Column type changed, reset condition and value fields\n setCondition(getDefaultConditionForType(selectedColumnType));\n setValue(getDefaultValueForType(selectedColumnType));\n setStartValue(undefined);\n setEndValue(undefined);\n setPrevColumnType(selectedColumnType);\n }\n var conditions = useMemo(() => {\n if (selectedColumnType === undefined) {\n return [];\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return numberConditionOptions;\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return charConditions;\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return stringConditions;\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return dateConditions;\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return booleanConditions;\n }\n }, [selectedColumnType]);\n var handleConditionChange = useCallback(value => {\n log.debug('handleConditionChange', value);\n setCondition(value);\n }, []);\n var handleValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n var handleStartValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n var handleEndValueChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n useEffect(function changeCondition() {\n var isValid = true;\n if (selectedCondition === undefined) {\n log.debug('Unable to create formatting rule. Condition is not selected.');\n isValid = false;\n } else if (TableUtils.isNumberType(column.type) && !isNumberConditionValid(selectedCondition, conditionValue, startValue, endValue)) {\n log.debug('Unable to create formatting rule. Invalid value', conditionValue);\n isValid = false;\n } else if (TableUtils.isDateType(column.type) && !isDateConditionValid(dh, selectedCondition, conditionValue)) {\n log.debug('Unable to create formatting rule. Invalid date condition', conditionValue);\n isValid = false;\n }\n onChange({\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue\n }, isValid);\n }, [onChange, column.type, dh, selectedCondition, conditionValue, startValue, endValue]);\n var conditionInputs = useMemo(() => {\n if (selectedColumnType === undefined) {\n // Column not selected\n return null;\n }\n if (TableUtils.isNumberType(selectedColumnType)) {\n return getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, conditionValue, startValue, endValue);\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(selectedCondition, handleValueChange, conditionValue);\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [selectedColumnType, selectedCondition, conditionValue, startValue, endValue, handleValueChange, handleStartValueChange, handleEndValueChange]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"condition-editor mb-2\",\n children: [/*#__PURE__*/_jsx(Select, {\n value: selectedCondition,\n \"data-testid\": \"condition-select\",\n className: \"custom-select mb-2\",\n onChange: handleConditionChange,\n children: conditions\n }), conditionInputs]\n });\n}\nexport default ConditionEditor;\n//# sourceMappingURL=ConditionEditor.js.map","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport { vsCheck } from '@deephaven/icons';\nimport { Button, DropdownMenu } from '@deephaven/components';\nimport { FormatStyleType, getLabelForStyleType, getBackgroundForStyleConfig, getColorForStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport \"./StyleEditor.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('StyleEditor');\nvar DEFAULT_BACKGROUND = '#fcfcfa';\nvar DEFAULT_COLOR_LIGHT = '#f0f0ee';\nvar DEFAULT_COLOR_DARK = '#1a171a';\nvar DEFAULT_DROPDOWN_WIDTH = 200;\nvar DEFAULT_CALLBACK = () => undefined;\nfunction StyleEditor(props) {\n var _config$customConfig$, _config$customConfig;\n var {\n config,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [styleType, setStyleType] = useState(config.type);\n var [background, setBackground] = useState((_config$customConfig$ = (_config$customConfig = config.customConfig) === null || _config$customConfig === void 0 ? void 0 : _config$customConfig.background) !== null && _config$customConfig$ !== void 0 ? _config$customConfig$ : DEFAULT_BACKGROUND);\n var [isShown, setShown] = useState(false);\n var [dropdownWidth, setDropdownWidth] = useState(DEFAULT_DROPDOWN_WIDTH);\n var csContainer = useRef(null);\n var handleBackgroundChange = useCallback(e => {\n var {\n value\n } = e.target;\n log.debug('handleBackgroundChange', value);\n setBackground(value);\n }, []);\n var handleMenuClosed = useCallback(() => {\n if (isShown) {\n setShown(false);\n }\n }, [isShown]);\n var handleToggleClick = useCallback(() => {\n if (!isShown) {\n updateDropdownWidth();\n }\n setShown(!isShown);\n }, [isShown]);\n var styleOptions = useMemo(() => [FormatStyleType.NO_FORMATTING, FormatStyleType.POSITIVE, FormatStyleType.NEGATIVE, FormatStyleType.WARN, FormatStyleType.NEUTRAL, FormatStyleType.ACCENT_1, FormatStyleType.ACCENT_2, FormatStyleType.CUSTOM], []);\n function updateDropdownWidth() {\n if (csContainer.current) {\n setDropdownWidth(csContainer.current.getBoundingClientRect().width);\n }\n }\n useEffect(function updateTheme() {\n onChange({\n type: styleType,\n customConfig: {\n color: ColorUtils.isDark(background) ? DEFAULT_COLOR_LIGHT : DEFAULT_COLOR_DARK,\n background\n }\n });\n }, [onChange, styleType, background]);\n var renderOptions = useCallback(() => {\n var matchFound = false;\n var optionArray = [];\n var _loop = function _loop() {\n var option = styleOptions[index];\n var key = \"option-\".concat(index, \"-\").concat(option);\n matchFound = matchFound || option === styleType;\n optionArray.push(/*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"style-option-btn\",\n onClick: () => {\n setStyleType(option);\n setShown(false);\n },\n style: {\n color: getColorForStyleConfig({\n type: option\n }),\n background: getBackgroundForStyleConfig({\n type: option\n })\n },\n children: [option === styleType && /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsCheck,\n className: \"mr-2\"\n }), option !== styleType && /*#__PURE__*/_jsx(\"span\", {\n className: \"mr-4\"\n }), getLabelForStyleType(option)]\n }, key));\n };\n for (var index = 0; index < styleOptions.length; index += 1) {\n _loop();\n }\n return optionArray;\n }, [styleOptions, styleType]);\n var renderMenuElement = useCallback(() => /*#__PURE__*/_jsx(\"div\", {\n className: \"style-menu-container\",\n role: \"presentation\",\n style: {\n width: dropdownWidth\n },\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"style-options\",\n children: renderOptions()\n })\n }), [dropdownWidth, renderOptions]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"style-editor\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n ref: csContainer,\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Style\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"inline\",\n className: \"cs-dropdown custom-select\",\n style: {\n color: getColorForStyleConfig({\n type: styleType\n }),\n background: getBackgroundForStyleConfig({\n type: styleType\n })\n },\n onClick: handleToggleClick,\n children: [getLabelForStyleType(styleType), /*#__PURE__*/_jsx(DropdownMenu, {\n isShown: isShown,\n actions: {\n menuElement: renderMenuElement()\n },\n popperOptions: {\n placement: 'bottom-start'\n },\n popperClassName: \"style-dropdown-menu\",\n onMenuClosed: handleMenuClosed,\n menuStyle: {\n maxWidth: '100rem'\n }\n })]\n })]\n }), styleType === FormatStyleType.CUSTOM && /*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Background\"\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"color\",\n value: background,\n className: \"custom-select color-select\",\n onChange: handleBackgroundChange\n })]\n })]\n });\n}\nexport default StyleEditor;\n//# sourceMappingURL=StyleEditor.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig, FormatStyleType } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('ColumnFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction ColumnFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateColumnFormat() {\n var isValid = conditionValid;\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, invalidating update.');\n isValid = false;\n }\n if (selectedStyle === undefined || selectedStyle.type === FormatStyleType.NO_FORMATTING) {\n log.debug('Style is not selected, invalidating update.');\n isValid = false;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), isValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Cell If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n dh: dh,\n column: selectedColumn,\n config: conditionConfig,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default ColumnFormatEditor;\n//# sourceMappingURL=ColumnFormatEditor.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Log from '@deephaven/log';\nimport { ComboBox } from '@deephaven/components';\nimport { getDefaultConditionConfigForType, getConditionConfig, getDefaultStyleConfig } from \"./ConditionalFormattingUtils.js\";\nimport ConditionEditor from \"./ConditionEditor.js\";\nimport StyleEditor from \"./StyleEditor.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('RowFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction makeDefaultConfig(columns) {\n var {\n type,\n name\n } = columns[0];\n var column = {\n type,\n name\n };\n var config = _objectSpread({\n column,\n style: getDefaultStyleConfig()\n }, getDefaultConditionConfigForType(type));\n return config;\n}\nfunction RowFormatEditor(props) {\n var _columns$find;\n var {\n columns,\n config = makeDefaultConfig(columns),\n dh,\n onChange = DEFAULT_CALLBACK\n } = props;\n var [selectedColumn, setColumn] = useState((_columns$find = columns.find(c => c.name === config.column.name && c.type === config.column.type)) !== null && _columns$find !== void 0 ? _columns$find : columns[0]);\n var [conditionConfig, setConditionConfig] = useState(getConditionConfig(config));\n var [conditionValid, setConditionValid] = useState(false);\n var [selectedStyle, setStyle] = useState(config.style);\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var {\n name\n } = _ref;\n return name === value;\n });\n if (newColumn !== undefined) {\n setColumn(newColumn);\n if (selectedColumn.type !== newColumn.type) {\n setConditionConfig(getDefaultConditionConfigForType(newColumn.type));\n setConditionValid(false);\n }\n } else {\n log.error(\"Column \".concat(value, \" not found.\"));\n }\n }, [columns, selectedColumn]);\n var handleConditionChange = useCallback((updatedConditionConfig, isValid) => {\n log.debug('handleConditionChange', updatedConditionConfig, isValid);\n setConditionConfig(updatedConditionConfig);\n setConditionValid(isValid);\n }, []);\n var handleStyleChange = useCallback(updatedStyleConfig => {\n log.debug('handleStyleChange', updatedStyleConfig);\n setStyle(updatedStyleConfig);\n }, []);\n useEffect(function updateRowFormat() {\n if (selectedColumn === undefined) {\n log.debug('Column is not selected, skip update.');\n return;\n }\n if (selectedStyle === undefined) {\n log.debug('Style is not selected, skip update.');\n return;\n }\n var {\n type,\n name\n } = selectedColumn;\n var column = {\n type,\n name\n };\n onChange(_objectSpread({\n column,\n style: selectedStyle\n }, conditionConfig), conditionValid);\n }, [onChange, selectedColumn, selectedStyle, conditionConfig, conditionValid]);\n var columnNames = useMemo(() => columns.map(_ref2 => {\n var {\n name\n } = _ref2;\n return name;\n }), [columns]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-rule-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n children: \"Format Row If\"\n }), /*#__PURE__*/_jsx(ComboBox, {\n \"aria-label\": \"Select column to format row by\",\n defaultSelectedKey: selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.name,\n onChange: handleColumnChange,\n children: columnNames\n })]\n }), selectedColumn !== undefined && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(ConditionEditor, {\n column: selectedColumn,\n config: conditionConfig,\n dh: dh,\n onChange: handleConditionChange\n }), /*#__PURE__*/_jsx(StyleEditor, {\n config: selectedStyle,\n onChange: handleStyleChange\n })]\n })]\n });\n}\nexport default RowFormatEditor;\n//# sourceMappingURL=RowFormatEditor.js.map","import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { FormatColumnWhereIcon, FormatRowWhereIcon } from \"../icons/index.js\";\nimport ColumnFormatEditor from \"./ColumnFormatEditor.js\";\nimport RowFormatEditor from \"./RowFormatEditor.js\";\nimport { FormatterType, isSupportedColumn } from \"./ConditionalFormattingUtils.js\";\nimport \"./ConditionalFormatEditor.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ConditionalFormatEditor');\nvar DEFAULT_CALLBACK = () => undefined;\nfunction getFormatterTypeIcon(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return /*#__PURE__*/_jsx(FormatColumnWhereIcon, {});\n case FormatterType.ROWS:\n return /*#__PURE__*/_jsx(FormatRowWhereIcon, {});\n }\n}\nfunction getFormatterTypeLabel(option) {\n switch (option) {\n case FormatterType.CONDITIONAL:\n return 'Conditional';\n case FormatterType.ROWS:\n return 'Rows';\n }\n}\nvar formatterTypes = [FormatterType.CONDITIONAL, FormatterType.ROWS];\nfunction ConditionalFormatEditor(props) {\n var _defaultRule$type;\n var {\n columns: originalColumns,\n dh,\n onSave = DEFAULT_CALLBACK,\n onUpdate = DEFAULT_CALLBACK,\n onCancel = DEFAULT_CALLBACK,\n rule: defaultRule\n } = props;\n var columns = originalColumns.filter(isSupportedColumn);\n var [selectedFormatter, setFormatter] = useState((_defaultRule$type = defaultRule === null || defaultRule === void 0 ? void 0 : defaultRule.type) !== null && _defaultRule$type !== void 0 ? _defaultRule$type : formatterTypes[0]);\n var [rule, setRule] = useState(defaultRule);\n var [isValid, setIsValid] = useState(false);\n var handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n var handleSave = useCallback(() => {\n if (rule === undefined) {\n log.error('Rule is not defined.');\n return;\n }\n onSave(rule);\n }, [onSave, rule]);\n var handleFormatterChange = useCallback(value => {\n log.debug('handleFormatterChange', value);\n setFormatter(value);\n }, []);\n var handleRuleChange = useCallback((ruleConfig, isRuleValid) => {\n log.debug('handleRuleChange', ruleConfig, isRuleValid, selectedFormatter);\n var updatedRule = {\n type: selectedFormatter,\n config: ruleConfig\n };\n setRule(updatedRule);\n setIsValid(isRuleValid);\n onUpdate(isRuleValid ? updatedRule : undefined);\n }, [onUpdate, selectedFormatter]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"conditional-format-editor form\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"mb-2\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"mb-0\",\n htmlFor: \"formatter-select\",\n children: \"Select Formatter\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-list\",\n children: formatterTypes.map((type, index) => /*#__PURE__*/_jsx(\"div\", {\n className: \"formatter-type\",\n children: /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: classNames('btn', 'btn-icon', 'btn-formatter-type', {\n active: type === selectedFormatter\n }),\n \"data-index\": index,\n onClick: () => handleFormatterChange(type),\n children: [getFormatterTypeIcon(type), getFormatterTypeLabel(type)]\n })\n }, type))\n })]\n }), selectedFormatter === FormatterType.CONDITIONAL && /*#__PURE__*/_jsx(ColumnFormatEditor, {\n columns: columns,\n dh: dh,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n onChange: handleRuleChange\n }), selectedFormatter === FormatterType.ROWS && /*#__PURE__*/_jsx(RowFormatEditor, {\n columns: columns,\n config: rule === null || rule === void 0 ? void 0 : rule.config,\n dh: dh,\n onChange: handleRuleChange\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex justify-content-end my-3\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n onClick: handleCancel,\n className: \"mr-2\",\n children: \"Cancel\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: handleSave,\n disabled: rule === undefined || !isValid,\n children: \"Done\"\n })]\n })]\n });\n}\nexport default ConditionalFormatEditor;\n//# sourceMappingURL=ConditionalFormatEditor.js.map","import React, { useEffect, useRef, useState } from 'react';\nimport { Editor } from '@deephaven/console';\nimport { Button, CopyButton, Modal, ModalBody, ModalHeader } from '@deephaven/components';\nimport { vsJson, vsListOrdered } from '@deephaven/icons';\nimport \"./IrisGridCellOverflowModal.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport default function IrisGridCellOverflowModal(_ref) {\n var _editorRef$current$ge, _editorRef$current2;\n var {\n text,\n isOpen,\n onClose\n } = _ref;\n var [isOpened, setIsOpened] = useState(false);\n var [height, setHeight] = useState(0);\n var [showLineNumbers, setShowLineNumbers] = useState(false);\n var [isFormatted, setIsFormatted] = useState(false);\n var [canFormat, setCanFormat] = useState(false);\n var editorRef = useRef();\n\n // Update format button on open\n useEffect(function enableFormatButtonWhenOpen() {\n if (!isOpen) {\n return;\n }\n try {\n JSON.parse(text);\n setCanFormat(true);\n } catch (_unused) {\n setCanFormat(false);\n }\n setIsFormatted(false);\n }, [isOpen, text]);\n\n // Re-layout editor on height change\n useEffect(function updateLayoutOnHeightChange() {\n if (editorRef.current) {\n editorRef.current.layout();\n }\n }, [height]);\n\n // Update editor options on line number toggle\n useEffect(function toggleShowLineNumber() {\n if (editorRef.current) {\n editorRef.current.updateOptions({\n lineNumbers: showLineNumbers ? 'on' : 'off'\n });\n }\n }, [showLineNumbers]);\n function toggleLineNumbers() {\n setShowLineNumbers(!showLineNumbers);\n }\n function formatAsJSON() {\n var _editorRef$current;\n var model = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.getModel();\n if (!canFormat || !model) {\n return;\n }\n if (!isFormatted) {\n model.setValue(JSON.stringify(JSON.parse(text), undefined, 2));\n setIsFormatted(true);\n } else {\n model.setValue(text);\n setIsFormatted(false);\n }\n autoSetLineNumbers();\n }\n function autoSetLineNumbers() {\n var _editor$getModel$getL, _editor$getModel;\n var editor = editorRef.current;\n if (!editor) {\n return;\n }\n setShowLineNumbers(((_editor$getModel$getL = (_editor$getModel = editor.getModel()) === null || _editor$getModel === void 0 ? void 0 : _editor$getModel.getLineCount()) !== null && _editor$getModel$getL !== void 0 ? _editor$getModel$getL : 0) > 1);\n }\n function handleToggle() {\n if (isOpened) {\n editorRef.current = undefined;\n onClose();\n }\n }\n function onEditorInitialized(editor) {\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(_ref2 => {\n var {\n contentHeight\n } = _ref2;\n return setHeight(contentHeight);\n });\n autoSetLineNumbers();\n }\n if (!isOpen && !isOpened) {\n return null;\n }\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n centered: true,\n keyboard: true,\n toggle: handleToggle,\n onOpened: () => setIsOpened(true),\n onClosed: () => {\n setIsOpened(false);\n setHeight(0);\n },\n className: \"cell-overflow-modal\",\n size: \"xl\",\n children: [/*#__PURE__*/_jsxs(ModalHeader, {\n toggle: onClose,\n children: [/*#__PURE__*/_jsx(\"h5\", {\n className: \"overflow-modal-title\",\n children: \"Cell Contents\"\n }), /*#__PURE__*/_jsx(CopyButton, {\n kind: \"inline\",\n tooltip: \"Copy cell contents\",\n copy: (_editorRef$current$ge = (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 ? void 0 : _editorRef$current2.getValue()) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : text\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n active: showLineNumbers,\n icon: vsListOrdered,\n tooltip: \"Toggle line numbers\",\n onClick: toggleLineNumbers\n }), canFormat && /*#__PURE__*/_jsx(Button, {\n kind: \"inline\",\n icon: vsJson,\n active: isFormatted,\n tooltip: \"Format as JSON\",\n onClick: formatAsJSON\n })]\n }), /*#__PURE__*/_jsx(ModalBody, {\n style: {\n height\n },\n children: /*#__PURE__*/_jsx(Editor, {\n onEditorInitialized: onEditorInitialized,\n settings: {\n value: text,\n readOnly: true,\n wordWrap: 'on',\n // Loading json language w/o the monaco workers causes UI freezes and monaco errors. TS colorizes the same\n language: canFormat ? 'typescript' : 'plaintext',\n folding: canFormat,\n padding: {\n bottom: 16\n },\n lineNumbers: showLineNumbers ? 'on' : 'off',\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n /*\n The entire string may be 1 giant line\n Monaco by default seeds find w/ that line\n On very long strings this hangs the browser, so never seed the search\n */\n find: {\n seedSearchStringFromSelection: 'never'\n }\n }\n })\n })]\n });\n}\n//# sourceMappingURL=IrisGridCellOverflowModal.js.map","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsArrowUp, vsArrowDown } from '@deephaven/icons';\nimport React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';\nimport { Type as FilterType } from '@deephaven/filters';\nimport { Button, DateTimeInput, Select } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport classNames from 'classnames';\nimport \"./GotoRow.css\";\nimport { nanoid } from 'nanoid';\nimport IrisGridBottomBar from \"./IrisGridBottomBar.js\";\nimport { isIrisGridTableModelTemplate } from \"./IrisGridTableModelTemplate.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar DEFAULT_FORMAT_STRING = '###,##0';\nvar GotoRow = /*#__PURE__*/forwardRef((_ref, ref) => {\n var {\n gotoRow,\n gotoRowError,\n gotoValueError,\n onGotoRowSubmit,\n isShown,\n onEntering,\n onEntered: _onEntered,\n onExiting,\n onExited,\n model,\n onGotoRowNumberChanged,\n onClose,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueFilter,\n onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged,\n onGotoValueChanged,\n onGotoValueSubmit\n } = _ref;\n var gotoRowInputRef = useRef(null);\n var gotoValueInputRef = useRef(null);\n var [isGotoRowActive, setIsGotoRowActive] = useState(false);\n var columns = [];\n if (isIrisGridTableModelTemplate(model)) {\n ({\n columns\n } = model.table);\n }\n var {\n dh,\n rowCount\n } = model;\n var gotoRowInputId = useMemo(() => \"goto-row-input-\".concat(nanoid()), []);\n var handleGotoValueNumberKeyDown = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit();\n } else if ((e.key === 'Backspace' || e.key === 'Delete') && (gotoValue === \"\".concat(Number.POSITIVE_INFINITY) || gotoValue === \"\".concat(Number.NEGATIVE_INFINITY))) {\n onGotoValueInputChanged('');\n }\n };\n var handleGotoValueKeySubmit = e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoValueSubmit(e.shiftKey);\n }\n };\n var index = model.getColumnIndexByName(gotoValueSelectedColumnName);\n var selectedColumn = columns[index !== null && index !== void 0 ? index : 0];\n var columnType = selectedColumn === null || selectedColumn === void 0 ? void 0 : selectedColumn.type;\n var normalizedType = TableUtils.getNormalizedType(columnType);\n var onGotoValueInputChanged = value => {\n onGotoValueChanged(value !== null && value !== void 0 ? value : '');\n };\n useImperativeHandle(ref, () => ({\n focus() {\n var _gotoRowInputRef$curr;\n setIsGotoRowActive(true);\n (_gotoRowInputRef$curr = gotoRowInputRef.current) === null || _gotoRowInputRef$curr === void 0 || _gotoRowInputRef$curr.select();\n }\n }));\n var selectInput = () => {\n // when row changes without focus (i.e. via context menu), re-select input\n if (isGotoRowActive && document.activeElement !== gotoRowInputRef.current) {\n var _gotoRowInputRef$curr2;\n (_gotoRowInputRef$curr2 = gotoRowInputRef.current) === null || _gotoRowInputRef$curr2 === void 0 || _gotoRowInputRef$curr2.select();\n } else if (!isGotoRowActive && document.activeElement !== gotoValueInputRef.current) {\n var _gotoValueInputRef$cu;\n (_gotoValueInputRef$cu = gotoValueInputRef.current) === null || _gotoValueInputRef$cu === void 0 || _gotoValueInputRef$cu.select();\n }\n };\n useEffect(selectInput, [isGotoRowActive]);\n var renderValueInput = () => {\n switch (normalizedType) {\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueNumberKeyDown,\n placeholder: \"value\",\n onChange: e => {\n var value = e.target.value.toLowerCase();\n // regex tests for\n if (/^-?[0-9]*\\.?[0-9]*$/.test(e.target.value)) {\n onGotoValueInputChanged(e.target.value);\n } else if (value === '-i' || value === '-infinity') {\n onGotoValueInputChanged(\"\".concat(Number.NEGATIVE_INFINITY));\n } else if (value === 'i' || value === 'infinity') {\n onGotoValueInputChanged(\"\".concat(Number.POSITIVE_INFINITY));\n }\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.DATETIME:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-value-date-time-input\",\n children: /*#__PURE__*/_jsx(DateTimeInput, {\n ref: gotoValueInputRef,\n className: classNames('form-control', 'goto-value-date-time-input', {\n 'is-invalid': gotoValueError !== ''\n }),\n defaultValue: gotoValue,\n onChange: onGotoValueInputChanged,\n onSubmit: handleGotoValueKeySubmit,\n \"aria-label\": \"Value Input\"\n })\n });\n case TableUtils.dataType.STRING:\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueSelectedFilterChanged(eventTargetValue);\n },\n value: gotoValueFilter,\n \"aria-label\": \"filter-type-select\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eqIgnoreCase,\n children: \"Equals (case-insensitive)\"\n }, FilterType.eqIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.containsIgnoreCase,\n children: \"Contains (case-insensitive)\"\n }, FilterType.containsIgnoreCase), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.eq,\n children: \"Equals\"\n }, FilterType.eq), /*#__PURE__*/_jsx(\"option\", {\n value: FilterType.contains,\n children: \"Contains\"\n }, FilterType.contains)]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: classNames('form-control', {\n 'is-invalid': gotoValueError !== ''\n }),\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n })]\n });\n case TableUtils.dataType.BOOLEAN:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsxs(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n onGotoValueInputChanged(eventTargetValue);\n },\n value: gotoValue,\n \"aria-label\": \"Value Input\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n \"aria-label\": \"null value\",\n value: \"\"\n }, \"null\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"true\",\n children: \"true\"\n }, \"true\"), /*#__PURE__*/_jsx(\"option\", {\n value: \"false\",\n children: \"false\"\n }, \"false\")]\n })\n });\n default:\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoValueInputRef,\n className: \"form-control\",\n onKeyDown: handleGotoValueKeySubmit,\n placeholder: \"value\",\n onChange: e => onGotoValueInputChanged(e.target.value),\n value: gotoValue,\n \"aria-label\": \"Value Input\"\n })\n });\n }\n };\n return /*#__PURE__*/_jsx(IrisGridBottomBar, {\n isShown: isShown,\n className: classNames('goto-row'),\n onEntering: onEntering,\n onEntered: () => {\n _onEntered();\n selectInput();\n },\n onExiting: onExiting,\n onExited: onExited,\n children: /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-row\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': !isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(true),\n onFocus: () => setIsGotoRowActive(true),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"goto-row-text\",\n htmlFor: gotoRowInputId,\n children: \"Go to row\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(\"input\", {\n ref: gotoRowInputRef,\n \"data-testid\": \"goto-row-input\",\n type: \"number\",\n onKeyDown: e => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n e.preventDefault();\n onGotoRowSubmit();\n }\n },\n className: classNames('form-control', {\n 'is-invalid': gotoRowError !== ''\n }),\n placeholder: \"Row number\",\n onChange: event => {\n onGotoRowNumberChanged(event);\n },\n value: gotoRow,\n id: gotoRowInputId\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"goto-row-text\",\n children: [\"of\", ' ', dh.i18n.NumberFormat.format(DEFAULT_FORMAT_STRING, rowCount)]\n }), gotoRowError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoRowError\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-close\",\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n onClick: onClose,\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n style: {\n marginRight: '0'\n }\n })\n })\n })]\n }), model.isSeekRowAvailable && /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-row\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('goto-row-wrapper', {\n 'is-inactive': isGotoRowActive\n }),\n onClick: () => setIsGotoRowActive(false),\n onFocus: () => setIsGotoRowActive(false),\n role: \"group\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-text\",\n children: \"Go to value\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"goto-row-input\",\n children: /*#__PURE__*/_jsx(Select, {\n className: \"custom-select\",\n onChange: eventTargetValue => {\n var columnName = eventTargetValue;\n onGotoValueSelectedColumnNameChanged(columnName);\n },\n value: gotoValueSelectedColumnName,\n \"aria-label\": \"column-name-select\",\n id: \"column-name-select\",\n children: columns.map(column => /*#__PURE__*/_jsx(\"option\", {\n value: column.name,\n children: column.name\n }, column.name))\n })\n }), renderValueInput(), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Button, {\n tooltip: \"Previous match\",\n icon: vsArrowUp,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(true);\n }\n }), /*#__PURE__*/_jsx(Button, {\n tooltip: \"Next match\",\n icon: vsArrowDown,\n kind: \"ghost\",\n disabled: gotoValue === '',\n onClick: () => {\n onGotoValueSubmit(false);\n }\n })]\n }), gotoValueError && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-danger\",\n children: gotoValueError\n })]\n })\n })]\n })\n });\n});\nGotoRow.displayName = 'GotoRow';\nexport default GotoRow;\n//# sourceMappingURL=GotoRow.js.map","import { Button, GLOBAL_SHORTCUTS, Modal, ModalBody, ModalFooter, ModalHeader } from '@deephaven/components';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function NoPastePermissionModal(_ref) {\n var {\n isOpen,\n onClose,\n errorMessage\n } = _ref;\n var pasteShortcutText = GLOBAL_SHORTCUTS.PASTE.getDisplayText();\n return /*#__PURE__*/_jsxs(Modal, {\n isOpen: isOpen,\n toggle: onClose,\n centered: true,\n children: [/*#__PURE__*/_jsx(ModalHeader, {\n closeButton: false,\n children: \"No Paste Permission\"\n }), /*#__PURE__*/_jsxs(ModalBody, {\n children: [/*#__PURE__*/_jsx(\"p\", {\n children: errorMessage\n }), /*#__PURE__*/_jsxs(\"p\", {\n children: [\"You can still use \", pasteShortcutText, \" to paste.\"]\n })]\n }), /*#__PURE__*/_jsx(ModalFooter, {\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n onClick: onClose,\n children: \"Dismiss\"\n })\n })]\n });\n}\n//# sourceMappingURL=NoPastePermissionModal.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); }\nimport React, { Component } from 'react';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport deepEqual from 'fast-deep-equal';\nimport Log from '@deephaven/log';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ContextActions, Stack, Menu, Page, Popper, ThemeExport, Tooltip, Button, ContextActionUtils, SlideTransition } from '@deephaven/components';\nimport { Grid, GridRange, GridUtils, isEditableGridModel, isExpandableGridModel, isDeletableGridModel, isExpandableColumnGridModel } from '@deephaven/grid';\nimport { dhEye, dhFilterFilled, dhGraphLineUp, dhTriangleDownSquare, vsClose, vsCloudDownload, vsEdit, vsFilter, vsMenu, vsReply, vsRuby, vsSearch, vsSplitHorizontal, vsSymbolOperator, vsTools } from '@deephaven/icons';\nimport { DateUtils, Formatter, FormatterUtils, TableUtils, isSortDirection } from '@deephaven/jsapi-utils';\nimport { assertNotNull, copyToClipboard, EMPTY_ARRAY, EMPTY_MAP, Pending, PromiseUtils, ValidationError, getOrThrow } from '@deephaven/utils';\nimport { Type as FilterType } from '@deephaven/filters';\nimport throttle from 'lodash.throttle';\nimport debounce from 'lodash.debounce';\nimport clamp from 'lodash.clamp';\nimport { getFormatColumns } from \"./sidebar/conditional-formatting/ConditionalFormattingUtils.js\";\nimport PendingDataBottomBar from \"./PendingDataBottomBar.js\";\nimport IrisGridCopyHandler from \"./IrisGridCopyHandler.js\";\nimport FilterInputField from \"./FilterInputField.js\";\nimport { CopyCellKeyHandler, ClearFilterKeyHandler, CopyKeyHandler, ReverseKeyHandler } from \"./key-handlers/index.js\";\nimport { IrisGridCellOverflowMouseHandler, IrisGridColumnSelectMouseHandler, IrisGridColumnTooltipMouseHandler, IrisGridContextMenuHandler, IrisGridCopyCellMouseHandler, IrisGridDataSelectMouseHandler, IrisGridPartitionedTableMouseHandler, IrisGridFilterMouseHandler, IrisGridRowTreeMouseHandler, IrisGridSortMouseHandler, IrisGridTokenMouseHandler, PendingMouseHandler } from \"./mousehandlers/index.js\";\nimport ToastBottomBar from \"./ToastBottomBar.js\";\nimport IrisGridMetricCalculator from \"./IrisGridMetricCalculator.js\";\nimport IrisGridModelUpdater from \"./IrisGridModelUpdater.js\";\nimport IrisGridRenderer from \"./IrisGridRenderer.js\";\nimport { createDefaultIrisGridTheme } from \"./IrisGridTheme.js\";\nimport ColumnStatistics from \"./ColumnStatistics.js\";\nimport \"./IrisGrid.css\";\nimport AdvancedFilterCreator from \"./AdvancedFilterCreator.js\";\nimport { Aggregations, AggregationEdit, AggregationUtils, ChartBuilder, CustomColumnBuilder, OptionType, RollupRows, TableCsvExporter, TableSaver, VisibilityOrderingBuilder, DownloadServiceWorkerUtils } from \"./sidebar/index.js\";\nimport IrisGridUtils from \"./IrisGridUtils.js\";\nimport CrossColumnSearch from \"./CrossColumnSearch.js\";\nimport IrisGridModel from \"./IrisGridModel.js\";\nimport { isPartitionedGridModel } from \"./PartitionedGridModel.js\";\nimport IrisGridPartitionSelector from \"./IrisGridPartitionSelector.js\";\nimport SelectDistinctBuilder from \"./sidebar/SelectDistinctBuilder.js\";\nimport AdvancedSettingsType from \"./sidebar/AdvancedSettingsType.js\";\nimport AdvancedSettingsMenu from \"./sidebar/AdvancedSettingsMenu.js\";\nimport SHORTCUTS from \"./IrisGridShortcuts.js\";\nimport ConditionalFormattingMenu from \"./sidebar/conditional-formatting/ConditionalFormattingMenu.js\";\nimport ConditionalFormatEditor from \"./sidebar/conditional-formatting/ConditionalFormatEditor.js\";\nimport IrisGridCellOverflowModal from \"./IrisGridCellOverflowModal.js\";\nimport GotoRow from \"./GotoRow.js\";\nimport AggregationOperation from \"./sidebar/aggregations/AggregationOperation.js\";\nimport { IrisGridThemeContext } from \"./IrisGridThemeProvider.js\";\nimport { isMissingPartitionError } from \"./MissingPartitionError.js\";\nimport { NoPastePermissionModal } from \"./NoPastePermissionModal.js\";\nimport { isColumnHeaderGroup } from \"./ColumnHeaderGroup.js\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGrid');\nvar VIEWPORT_LOADING_DELAY = 500;\nvar UPDATE_DOWNLOAD_THROTTLE = 500;\nvar SET_FILTER_DEBOUNCE = 250;\nvar SEEK_ROW_DEBOUNCE = 250;\nvar SET_CONDITIONAL_FORMAT_DEBOUNCE = 250;\nvar DEFAULT_AGGREGATION_SETTINGS = Object.freeze({\n aggregations: EMPTY_ARRAY,\n showOnTop: false\n});\nvar UNFORMATTED_DATE_PATTERN = \"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z\";\nfunction isEmptyConfig(_ref) {\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = _ref;\n return advancedFilters.size === 0 && aggregationSettings.aggregations.length === 0 && customColumns.length === 0 && quickFilters.size === 0 && !reverse && rollupConfig == null && searchFilter == null && selectDistinctColumns.length === 0 && sorts.length === 0;\n}\nclass IrisGrid extends Component {\n constructor(props) {\n var _model$layoutHints, _model$columns$0$name, _model$columns$;\n super(props);\n _defineProperty(this, \"grid\", void 0);\n _defineProperty(this, \"lastFocusedFilterBarColumn\", void 0);\n _defineProperty(this, \"lastLoadedConfig\", void 0);\n _defineProperty(this, \"tooltip\", void 0);\n _defineProperty(this, \"pending\", void 0);\n _defineProperty(this, \"globalColumnFormats\", void 0);\n _defineProperty(this, \"dateTimeFormatterOptions\", void 0);\n _defineProperty(this, \"decimalFormatOptions\", void 0);\n _defineProperty(this, \"integerFormatOptions\", void 0);\n _defineProperty(this, \"truncateNumbersWithPound\", void 0);\n _defineProperty(this, \"showEmptyStrings\", void 0);\n _defineProperty(this, \"showNullStrings\", void 0);\n _defineProperty(this, \"showExtraGroupColumn\", void 0);\n // When the loading scrim started/when it should extend to the end of the screen.\n _defineProperty(this, \"loadingScrimStartTime\", void 0);\n _defineProperty(this, \"loadingScrimFinishTime\", void 0);\n _defineProperty(this, \"animationFrame\", void 0);\n _defineProperty(this, \"loadingTimer\", void 0);\n _defineProperty(this, \"tableSaver\", void 0);\n _defineProperty(this, \"crossColumnRef\", void 0);\n _defineProperty(this, \"isAnimating\", void 0);\n _defineProperty(this, \"filterInputRef\", void 0);\n _defineProperty(this, \"gotoRowRef\", void 0);\n _defineProperty(this, \"isCopying\", void 0);\n _defineProperty(this, \"toggleFilterBarAction\", void 0);\n _defineProperty(this, \"toggleSearchBarAction\", void 0);\n _defineProperty(this, \"toggleGotoRowAction\", void 0);\n _defineProperty(this, \"discardAction\", void 0);\n _defineProperty(this, \"commitAction\", void 0);\n _defineProperty(this, \"contextActions\", void 0);\n _defineProperty(this, \"tableUtils\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"slideTransitionRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"bottomTransitionRef\", /*#__PURE__*/React.createRef());\n _defineProperty(this, \"getAdvancedMenuOpenedHandler\", memoize(column => this.handleAdvancedMenuOpened.bind(this, column), {\n max: 100\n }));\n _defineProperty(this, \"getCachedAdvancedFilterMenuActions\", memoize((model, column, advancedFilterOptions, sortDirection, formatter) => /*#__PURE__*/_jsx(AdvancedFilterCreator, {\n model: model,\n column: column,\n onFilterChange: this.handleAdvancedFilterChange,\n onSortChange: this.handleAdvancedFilterSortChange,\n onDone: this.handleAdvancedFilterDone,\n options: advancedFilterOptions,\n sortDirection: sortDirection,\n formatter: formatter,\n tableUtils: this.tableUtils\n }), {\n max: 50\n }));\n _defineProperty(this, \"getCachedOptionItems\", memoize((isChartBuilderAvailable, isCustomColumnsAvailable, isFormatColumnsAvailable, isOrganizeColumnsAvailable, isRollupAvailable, isTotalsAvailable, isSelectDistinctAvailable, isExportAvailable, toggleFilterBarAction, toggleSearchBarAction, toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, canToggleSearch, showGotoRow, hasAdvancedSettings) => {\n var optionItems = [];\n if (isChartBuilderAvailable) {\n optionItems.push({\n type: OptionType.CHART_BUILDER,\n title: 'Chart Builder',\n icon: dhGraphLineUp\n });\n }\n if (isOrganizeColumnsAvailable) {\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Organize Columns',\n icon: dhEye\n });\n }\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Custom Columns',\n icon: vsSplitHorizontal\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools\n });\n }\n optionItems.push({\n type: OptionType.QUICK_FILTERS,\n title: 'Quick Filters',\n subtitle: toggleFilterBarAction.shortcut.getDisplayText(),\n icon: vsFilter,\n isOn: isFilterBarShown,\n onChange: toggleFilterBarAction.action\n });\n if (canToggleSearch) {\n optionItems.push({\n type: OptionType.SEARCH_BAR,\n title: 'Search Bar',\n subtitle: toggleSearchBarAction.shortcut.getDisplayText(),\n icon: vsSearch,\n isOn: showSearchBar,\n onChange: toggleSearchBarAction.action\n });\n }\n optionItems.push({\n type: OptionType.GOTO,\n title: 'Go to',\n subtitle: toggleGotoRowAction.shortcut.getDisplayText(),\n icon: vsReply,\n isOn: showGotoRow,\n onChange: toggleGotoRowAction.action\n });\n return Object.freeze(optionItems);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedHiddenColumns\", memoize((metricCalculator, userColumnWidths) => IrisGridUtils.getHiddenColumns(new Map([...metricCalculator.initialColumnWidths, ...userColumnWidths])), {\n max: 1\n }));\n _defineProperty(this, \"getAggregationMap\", memoize((columns, aggregations) => {\n var aggregationMap = {};\n aggregations.forEach(_ref2 => {\n var {\n operation,\n selected,\n invert\n } = _ref2;\n aggregationMap[operation] = AggregationUtils.getOperationColumnNames(columns, operation, selected, invert);\n });\n return aggregationMap;\n }, {\n max: 1\n }));\n _defineProperty(this, \"getOperationMap\", memoize((columns, aggregations) => {\n var operationMap = {};\n aggregations.filter(a => !AggregationUtils.isRollupOperation(a.operation)).forEach(_ref3 => {\n var {\n operation,\n selected,\n invert\n } = _ref3;\n AggregationUtils.getOperationColumnNames(columns, operation, selected, invert).forEach(name => {\n var _operationMap$name;\n var newOperations = [...((_operationMap$name = operationMap[name]) !== null && _operationMap$name !== void 0 ? _operationMap$name : []), operation];\n operationMap[name] = Object.freeze(newOperations);\n });\n });\n return operationMap;\n }, {\n max: 1\n }));\n _defineProperty(this, \"getOperationOrder\", memoize(aggregations => aggregations.map(a => a.operation).filter(o => !AggregationUtils.isRollupOperation(o)), {\n max: 1\n }));\n _defineProperty(this, \"getCachedFormatColumns\", memoize((dh, columns, rules) => getFormatColumns(dh, columns, rules), {\n max: 1000\n }));\n /**\n * Builds formatColumns array based on the provided formatting rules with optional preview\n * @param columns Array of columns\n * @param rulesParam Array of formatting rules\n * @param preview Optional temporary formatting rule for previewing live changes\n * @param editIndex Index in the rulesParam array to replace with the preview, null if preview not applicable\n * @returns Format columns array\n */\n _defineProperty(this, \"getCachedPreviewFormatColumns\", memoize((dh, columns, rulesParam, preview, editIndex) => {\n log.debug('getCachedPreviewFormatColumns', rulesParam, preview, editIndex);\n if (preview !== undefined && editIndex !== undefined) {\n var rules = [...rulesParam];\n rules[editIndex] = preview;\n return this.getCachedFormatColumns(dh, columns, rules);\n }\n return this.getCachedFormatColumns(dh, columns, rulesParam);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getModelRollupConfig\", memoize((originalColumns, config, aggregationSettings) => IrisGridUtils.getModelRollupConfig(originalColumns, config, aggregationSettings), {\n max: 1\n }));\n _defineProperty(this, \"getModelTotalsConfig\", memoize((columns, config, aggregationSettings) => {\n var _config$columns$lengt, _config$columns;\n if (((_config$columns$lengt = config === null || config === void 0 || (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.length) !== null && _config$columns$lengt !== void 0 ? _config$columns$lengt : 0) > 0) {\n // If we've got rollups, then aggregations are applied as part of that...\n return null;\n }\n\n // Filter out aggregations without any columns actually selected\n var aggregations = aggregationSettings.aggregations.filter(agg => agg.selected.length > 0 || agg.invert);\n if (aggregations.length === 0) {\n // We don't actually have any aggregations set, don't bother\n return null;\n }\n var operationMap = this.getOperationMap(columns, aggregations);\n var operationOrder = this.getOperationOrder(aggregations);\n return {\n operationMap,\n operationOrder,\n showOnTop: aggregationSettings.showOnTop,\n defaultOperation: AggregationOperation.SKIP\n };\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedStateOverride\", memoize((model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown) => ({\n model,\n theme,\n hoverSelectColumn,\n isFilterBarShown,\n isSelectingColumn,\n loadingScrimProgress,\n quickFilters,\n advancedFilters,\n sorts,\n reverse,\n rollupConfig,\n isMenuShown\n }), {\n max: 1\n }));\n _defineProperty(this, \"getCachedFilter\", memoize((customFilters, quickFilters, advancedFilters, searchFilter) => [...(customFilters !== null && customFilters !== void 0 ? customFilters : []), ...IrisGridUtils.getFiltersFromFilterMap(quickFilters), ...IrisGridUtils.getFiltersFromFilterMap(advancedFilters), ...(searchFilter !== undefined ? [searchFilter] : [])], {\n max: 1\n }));\n _defineProperty(this, \"getCachedTheme\", memoize((contextTheme, theme, isEditable, floatingRowCount, density) => {\n var _theme$rowFooterWidth;\n // If a theme is available via context, use that as the base theme.\n // If iris-grid is standalone without a context, use the default theme.\n var baseTheme = contextTheme !== null && contextTheme !== void 0 ? contextTheme : createDefaultIrisGridTheme();\n\n // We only show the row footers when we have floating rows for aggregations\n var rowFooterWidth = floatingRowCount > 0 ? (_theme$rowFooterWidth = theme === null || theme === void 0 ? void 0 : theme.rowFooterWidth) !== null && _theme$rowFooterWidth !== void 0 ? _theme$rowFooterWidth : baseTheme.rowFooterWidth : 0;\n var {\n metricCalculator\n } = this.state;\n if (metricCalculator != null) {\n metricCalculator.resetCalculatedColumnWidths();\n metricCalculator.resetCalculatedRowHeights();\n }\n var densityTheme = {};\n if (density === 'compact') {\n densityTheme = baseTheme.density.compact;\n } else if (density === 'spacious') {\n densityTheme = baseTheme.density.spacious;\n }\n return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, baseTheme), densityTheme), theme), {}, {\n autoSelectRow: !isEditable,\n rowFooterWidth\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order), {\n max: 1\n }));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].map(handler => typeof handler === 'function' ? handler(this) : handler), {\n max: 1\n }));\n _defineProperty(this, \"getCachedRenderer\", memoize(rendererProp => rendererProp !== null && rendererProp !== void 0 ? rendererProp : new IrisGridRenderer(), {\n max: 1\n }));\n _defineProperty(this, \"getAlwaysFetchColumns\", memoize((alwaysFetchColumns, columns, movedColumns, floatingLeftColumnCount, floatingRightColumnCount, draggingRange) => {\n var floatingColumns = [];\n for (var i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(i, movedColumns)].name);\n }\n for (var _i = 0; _i < floatingRightColumnCount; _i += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(columns.length - 1 - _i, movedColumns)].name);\n }\n if (draggingRange) {\n for (var _i2 = draggingRange[0]; _i2 <= draggingRange[1]; _i2 += 1) {\n floatingColumns.push(columns[GridUtils.getModelIndex(_i2, movedColumns)].name);\n }\n }\n var columnSet = new Set([...alwaysFetchColumns, ...floatingColumns]);\n return Object.freeze([...columnSet]);\n }, {\n max: 1\n }));\n _defineProperty(this, \"updateSearchFilter\", debounce((searchValue, selectedSearchColumns, columns, invertSearchColumns) => {\n var {\n model\n } = this.props;\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, selectedSearchColumns, columns, invertSearchColumns);\n this.setState({\n searchFilter\n });\n }, SET_FILTER_DEBOUNCE));\n _defineProperty(this, \"showViewportLoading\", throttle(() => {\n var {\n model\n } = this.props;\n var {\n loadingSpinnerShown\n } = this.state;\n if (model.isViewportPending && !loadingSpinnerShown) {\n // We only want to show the viewport loading if the viewport is still loading\n // and we're not already showing a loader for something else\n this.startLoading('Waiting for viewport...', {\n loadingCancelShown: false,\n loadingBlocksGrid: false\n });\n }\n }, VIEWPORT_LOADING_DELAY, {\n leading: false,\n trailing: true\n }));\n // Apply live changes\n _defineProperty(this, \"handleConditionalFormatEditorUpdate\", debounce(conditionalFormatPreview => {\n this.setState({\n conditionalFormatPreview\n });\n }, SET_CONDITIONAL_FORMAT_DEBOUNCE));\n _defineProperty(this, \"handleDownloadProgressUpdate\", throttle((tableDownloadProgress, tableDownloadEstimatedTime) => {\n var {\n tableDownloadStatus\n } = this.state;\n if (tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING) {\n this.setState({\n tableDownloadProgress,\n tableDownloadEstimatedTime\n });\n }\n }, UPDATE_DOWNLOAD_THROTTLE));\n _defineProperty(this, \"getOverflowButtonTooltip\", memoize(overflowButtonTooltipProps => {\n if (overflowButtonTooltipProps == null) {\n return null;\n }\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, overflowButtonTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'left',\n modifiers: {\n flip: {\n behavior: ['left', 'right']\n }\n }\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: \"View full contents\"\n }, Date.now())\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getExpandCellTooltip\", memoize(expandCellTooltipProps => {\n if (expandCellTooltipProps == null) {\n return null;\n }\n var {\n expandTooltipDisplayValue\n } = this.state;\n var {\n model\n } = this.props;\n var isExpandAllAvailable = isExpandableGridModel(model) && model.isExpandAllAvailable;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, expandCellTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom-start'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsxs(\"div\", {\n style: {\n textAlign: 'left'\n },\n children: [\"Click to \", expandTooltipDisplayValue, \" row\", isExpandAllAvailable && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"br\", {}), ContextActionUtils.isMacPlatform() ? '⌘' : 'Ctrl+', \"Click to expand row and all children\"]\n })]\n })\n }, Date.now())\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"getHoverTooltip\", memoize(hoverTooltipProps => {\n if (hoverTooltipProps == null) {\n return null;\n }\n var {\n hoverDisplayValue\n } = this.state;\n var wrapperStyle = _objectSpread(_objectSpread({\n position: 'absolute'\n }, hoverTooltipProps), {}, {\n pointerEvents: 'none'\n });\n var popperOptions = {\n placement: 'bottom'\n };\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n options: popperOptions,\n ref: this.handleTooltipRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"link-hover-tooltip\",\n children: hoverDisplayValue\n })\n })\n });\n }, {\n max: 1\n }));\n _defineProperty(this, \"handleGotoValueChanged\", input => {\n this.setState({\n gotoValue: input,\n gotoValueManuallyChanged: true\n });\n this.debouncedSeekRow(input);\n });\n _defineProperty(this, \"debouncedSeekRow\", debounce(input => {\n this.seekRow(input);\n }, SEEK_ROW_DEBOUNCE));\n this.handleAdvancedFilterChange = this.handleAdvancedFilterChange.bind(this);\n this.handleAdvancedFilterSortChange = this.handleAdvancedFilterSortChange.bind(this);\n this.handleAdvancedFilterDone = this.handleAdvancedFilterDone.bind(this);\n this.handleAdvancedMenuOpened = this.handleAdvancedMenuOpened.bind(this);\n this.handleGotoRowOpened = this.handleGotoRowOpened.bind(this);\n this.handleGotoRowClosed = this.handleGotoRowClosed.bind(this);\n this.handleAdvancedMenuClosed = this.handleAdvancedMenuClosed.bind(this);\n this.handleAggregationChange = this.handleAggregationChange.bind(this);\n this.handleAggregationsChange = this.handleAggregationsChange.bind(this);\n this.handleAggregationEdit = this.handleAggregationEdit.bind(this);\n this.handleAnimationLoop = this.handleAnimationLoop.bind(this);\n this.handleAnimationStart = this.handleAnimationStart.bind(this);\n this.handleAnimationEnd = this.handleAnimationEnd.bind(this);\n this.handleChartChange = this.handleChartChange.bind(this);\n this.handleChartCreate = this.handleChartCreate.bind(this);\n this.handleGridError = this.handleGridError.bind(this);\n this.handleFilterBarChange = this.handleFilterBarChange.bind(this);\n this.handleFilterBarDone = this.handleFilterBarDone.bind(this);\n this.handleFilterBarTab = this.handleFilterBarTab.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleMenu = this.handleMenu.bind(this);\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleMenuSelect = this.handleMenuSelect.bind(this);\n this.handleMenuBack = this.handleMenuBack.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleSelectionChanged = this.handleSelectionChanged.bind(this);\n this.handleMovedColumnsChanged = this.handleMovedColumnsChanged.bind(this);\n this.handleHeaderGroupsChanged = this.handleHeaderGroupsChanged.bind(this);\n this.handleUpdate = this.handleUpdate.bind(this);\n this.handleTableChanged = this.handleTableChanged.bind(this);\n this.handleTooltipRef = this.handleTooltipRef.bind(this);\n this.handleViewChanged = this.handleViewChanged.bind(this);\n this.handleFormatSelection = this.handleFormatSelection.bind(this);\n this.handleColumnAlignmentChange = this.handleColumnAlignmentChange.bind(this);\n this.handleConditionalFormatCreate = this.handleConditionalFormatCreate.bind(this);\n this.handleConditionalFormatEdit = this.handleConditionalFormatEdit.bind(this);\n this.handleConditionalFormatsChange = this.handleConditionalFormatsChange.bind(this);\n this.handleConditionalFormatEditorSave = this.handleConditionalFormatEditorSave.bind(this);\n this.handleConditionalFormatEditorCancel = this.handleConditionalFormatEditorCancel.bind(this);\n this.handleUpdateCustomColumns = this.handleUpdateCustomColumns.bind(this);\n this.handleCustomColumnsChanged = this.handleCustomColumnsChanged.bind(this);\n this.handleSelectDistinctChanged = this.handleSelectDistinctChanged.bind(this);\n this.handlePendingDataUpdated = this.handlePendingDataUpdated.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.handlePendingCommitClicked = this.handlePendingCommitClicked.bind(this);\n this.handlePendingDiscardClicked = this.handlePendingDiscardClicked.bind(this);\n this.handleGotoRowSelectedRowNumberSubmit = this.handleGotoRowSelectedRowNumberSubmit.bind(this);\n this.focusRowInGrid = this.focusRowInGrid.bind(this);\n this.handleDownloadTable = this.handleDownloadTable.bind(this);\n this.handleDownloadTableStart = this.handleDownloadTableStart.bind(this);\n this.handleCancelDownloadTable = this.handleCancelDownloadTable.bind(this);\n this.handleDownloadCanceled = this.handleDownloadCanceled.bind(this);\n this.handleDownloadCompleted = this.handleDownloadCompleted.bind(this);\n this.handlePartitionChange = this.handlePartitionChange.bind(this);\n this.handleColumnVisibilityChanged = this.handleColumnVisibilityChanged.bind(this);\n this.handleColumnVisibilityReset = this.handleColumnVisibilityReset.bind(this);\n this.handleCrossColumnSearch = this.handleCrossColumnSearch.bind(this);\n this.handleRollupChange = this.handleRollupChange.bind(this);\n this.handleOverflowClose = this.handleOverflowClose.bind(this);\n this.handleCloseNoPastePermissionModal = this.handleCloseNoPastePermissionModal.bind(this);\n this.getColumnBoundingRect = this.getColumnBoundingRect.bind(this);\n this.handleGotoRowSelectedRowNumberChanged = this.handleGotoRowSelectedRowNumberChanged.bind(this);\n this.handleGotoValueSelectedColumnNameChanged = this.handleGotoValueSelectedColumnNameChanged.bind(this);\n this.handleGotoValueSelectedFilterChanged = this.handleGotoValueSelectedFilterChanged.bind(this);\n this.handleGotoValueChanged = this.handleGotoValueChanged.bind(this);\n this.handleGotoValueSubmitted = this.handleGotoValueSubmitted.bind(this);\n this.handleViewportUpdated = this.handleViewportUpdated.bind(this);\n this.makeQuickFilter = this.makeQuickFilter.bind(this);\n this.setFilterMap = this.setFilterMap.bind(this);\n this.handleFrozenColumnsChanged = this.handleFrozenColumnsChanged.bind(this);\n this.grid = null;\n this.lastLoadedConfig = null;\n this.pending = new Pending();\n this.globalColumnFormats = EMPTY_ARRAY;\n this.decimalFormatOptions = {};\n this.integerFormatOptions = {};\n this.truncateNumbersWithPound = false;\n this.showEmptyStrings = true;\n this.showNullStrings = true;\n this.showExtraGroupColumn = true;\n\n // When the loading scrim started/when it should extend to the end of the screen.\n this.tableSaver = null;\n this.crossColumnRef = /*#__PURE__*/React.createRef();\n this.isAnimating = false;\n this.filterInputRef = /*#__PURE__*/React.createRef();\n this.gotoRowRef = /*#__PURE__*/React.createRef();\n this.isCopying = false;\n this.toggleFilterBarAction = {\n action: () => this.toggleFilterBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER\n };\n this.toggleSearchBarAction = {\n action: () => this.toggleSearchBar(),\n shortcut: SHORTCUTS.TABLE.TOGGLE_SEARCH\n };\n this.toggleGotoRowAction = {\n action: () => this.toggleGotoRow(),\n shortcut: SHORTCUTS.TABLE.GOTO_ROW\n };\n this.discardAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0) {\n this.discardPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.DISCARD\n };\n this.commitAction = {\n action: () => {\n var {\n model\n } = this.props;\n if (isEditableGridModel(model) && model.isEditable && model.pendingDataMap.size > 0 && model.pendingDataErrors.size === 0) {\n this.commitPending().catch(log.error);\n }\n },\n shortcut: SHORTCUTS.INPUT_TABLE.COMMIT\n };\n this.contextActions = [this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, this.discardAction, this.commitAction];\n var {\n aggregationSettings: _aggregationSettings,\n conditionalFormats,\n customColumnFormatMap,\n columnAlignmentMap,\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n partitions,\n partitionConfig,\n model: _model,\n movedColumns: movedColumnsProp,\n movedRows: movedRowsProp,\n rollupConfig: _rollupConfig,\n userColumnWidths: _userColumnWidths,\n userRowHeights,\n showSearchBar: _showSearchBar,\n searchValue: _searchValue,\n selectedSearchColumns: _selectedSearchColumns,\n invertSearchColumns: _invertSearchColumns,\n advancedFilters: _advancedFilters,\n quickFilters: _quickFilters,\n selectDistinctColumns,\n pendingDataMap,\n canCopy,\n frozenColumns,\n columnHeaderGroups,\n getMetricCalculator\n } = props;\n var {\n dh: _dh\n } = _model;\n var _keyHandlers = [new CopyCellKeyHandler(this), new ReverseKeyHandler(this), new ClearFilterKeyHandler(this)];\n var _mouseHandlers = [new IrisGridCellOverflowMouseHandler(this), new IrisGridRowTreeMouseHandler(this), new IrisGridTokenMouseHandler(this), new IrisGridColumnSelectMouseHandler(this), new IrisGridColumnTooltipMouseHandler(this), new IrisGridSortMouseHandler(this), new IrisGridFilterMouseHandler(this), new IrisGridContextMenuHandler(this, _dh), new IrisGridDataSelectMouseHandler(this), new PendingMouseHandler(this), new IrisGridPartitionedTableMouseHandler(this), ...(canCopy ? [new IrisGridCopyCellMouseHandler(this)] : [])];\n if (canCopy) {\n _keyHandlers.push(new CopyKeyHandler(this));\n }\n var _movedColumns = movedColumnsProp.length > 0 ? movedColumnsProp : _model.initialMovedColumns;\n var movedRows = movedRowsProp.length > 0 ? movedRowsProp : _model.initialMovedRows;\n var _metricCalculator = getMetricCalculator({\n userColumnWidths: new Map(_userColumnWidths),\n userRowHeights: new Map(userRowHeights),\n movedColumns: _movedColumns,\n initialColumnWidths: new Map(_model === null || _model === void 0 || (_model$layoutHints = _model.layoutHints) === null || _model$layoutHints === void 0 || (_model$layoutHints = _model$layoutHints.hiddenColumns) === null || _model$layoutHints === void 0 ? void 0 : _model$layoutHints.map(name => [_model.getColumnIndexByName(name), 0]))\n });\n var searchColumns = _selectedSearchColumns !== null && _selectedSearchColumns !== void 0 ? _selectedSearchColumns : [];\n var _searchFilter = CrossColumnSearch.createSearchFilter(_dh, _searchValue, searchColumns, _model.columns, _invertSearchColumns);\n this.tableUtils = new TableUtils(_dh);\n this.mouseHandlers = _mouseHandlers;\n this.keyHandlers = _keyHandlers;\n this.state = {\n isFilterBarShown: _isFilterBarShown,\n isSelectingPartition,\n focusedFilterBarColumn: null,\n metricCalculator: _metricCalculator,\n metrics: undefined,\n partitionConfig: partitionConfig !== null && partitionConfig !== void 0 ? partitionConfig : partitions && partitions.length ? {\n partitions,\n mode: 'partition'\n } : undefined,\n // setAdvancedFilter and setQuickFilter mutate the arguments\n // so we want to always use map copies from the state instead of props\n quickFilters: _quickFilters ? new Map(_quickFilters) : new Map(),\n advancedFilters: new Map(_advancedFilters),\n shownAdvancedFilter: null,\n hoverAdvancedFilter: null,\n sorts: [],\n reverse: false,\n customColumns: [],\n selectDistinctColumns,\n // selected range in table\n selectedRanges: [],\n // Current ongoing copy operation\n copyOperation: null,\n // The filter that is currently being applied. Reset after update is received\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false,\n loadingBlocksGrid: false,\n movedColumns: _movedColumns,\n movedRows,\n shownColumnTooltip: null,\n formatter: new Formatter(_dh),\n isMenuShown: false,\n customColumnFormatMap: new Map(customColumnFormatMap),\n columnAlignmentMap: new Map(columnAlignmentMap),\n conditionalFormats,\n conditionalFormatEditIndex: null,\n conditionalFormatPreview: undefined,\n // Column user is hovering over for selection\n hoverSelectColumn: null,\n isTableDownloading: false,\n isReady: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: 0,\n showSearchBar: _showSearchBar,\n searchFilter: _searchFilter,\n searchValue: _searchValue,\n selectedSearchColumns: searchColumns,\n invertSearchColumns: _invertSearchColumns,\n rollupConfig: _rollupConfig,\n rollupSelectedColumns: [],\n aggregationSettings:\n // Pin aggregations to the top if the grid is editable, so that the bottom is reserved for pending rows\n isEditableGridModel(_model) && _model.isEditable ? _objectSpread(_objectSpread({}, _aggregationSettings), {}, {\n showOnTop: true\n }) : _aggregationSettings,\n selectedAggregation: null,\n openOptions: [],\n pendingRowCount: 0,\n pendingDataMap: pendingDataMap !== null && pendingDataMap !== void 0 ? pendingDataMap : new Map(),\n pendingDataErrors: new Map(),\n pendingSavePromise: null,\n pendingSaveError: null,\n toastMessage: null,\n frozenColumns,\n showOverflowModal: false,\n showNoPastePermissionModal: false,\n noPastePermissionError: '',\n overflowText: '',\n overflowButtonTooltipProps: null,\n expandCellTooltipProps: null,\n expandTooltipDisplayValue: 'expand',\n hoverTooltipProps: null,\n hoverDisplayValue: '',\n isGotoShown: false,\n gotoRow: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueSelectedColumnName: (_model$columns$0$name = (_model$columns$ = _model.columns[0]) === null || _model$columns$ === void 0 ? void 0 : _model$columns$.name) !== null && _model$columns$0$name !== void 0 ? _model$columns$0$name : '',\n gotoValueSelectedFilter: FilterType.eqIgnoreCase,\n gotoValue: '',\n gotoValueManuallyChanged: false,\n columnHeaderGroups: columnHeaderGroups !== null && columnHeaderGroups !== void 0 ? columnHeaderGroups : _model.initialColumnHeaderGroups\n };\n }\n componentDidMount() {\n var {\n model\n } = this.props;\n this.initState();\n this.startListening(model);\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n inputFilters,\n isSelectingColumn,\n settings,\n model,\n customFilters,\n sorts\n } = this.props;\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n var changedInputFilters = inputFilters !== prevProps.inputFilters ? inputFilters.filter(inputFilter => !prevProps.inputFilters.includes(inputFilter)) : [];\n if (changedInputFilters.length > 0) {\n var _advancedSettings$get;\n var {\n advancedSettings\n } = this.props;\n var replaceExistingFilters = (_advancedSettings$get = advancedSettings.get(AdvancedSettingsType.FILTER_CONTROL_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get !== void 0 ? _advancedSettings$get : false;\n if (replaceExistingFilters) {\n this.clearGridInputField();\n this.clearCrossColumSearch();\n }\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n }\n if (isSelectingColumn !== prevProps.isSelectingColumn) {\n this.resetColumnSelection();\n }\n if (settings !== prevProps.settings) {\n this.updateFormatterSettings(settings);\n }\n if (customFilters !== prevProps.customFilters) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n }\n if (sorts !== prevProps.sorts) {\n this.updateSorts(sorts);\n }\n var {\n loadingScrimStartTime,\n loadingScrimFinishTime\n } = this;\n if (loadingScrimStartTime != null && loadingScrimFinishTime != null) {\n window.requestAnimationFrame(() => {\n var now = Date.now();\n var currentTime = now - loadingScrimStartTime;\n var totalTime = loadingScrimFinishTime - loadingScrimStartTime;\n var loadingScrimProgress = Math.min(currentTime / totalTime, 1);\n if (loadingScrimFinishTime < now) {\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n }\n this.setState(state => {\n if (state.loadingScrimProgress == null) {\n log.debug2('Ignoring scrim update because loading cancelled.');\n return null;\n }\n return {\n loadingScrimProgress\n };\n });\n });\n }\n var {\n openOptions\n } = this.state;\n if (openOptions !== prevState.openOptions) {\n var isAggEditType = option => option.type === OptionType.AGGREGATION_EDIT;\n if (!openOptions.some(isAggEditType) && prevState.openOptions.some(isAggEditType)) {\n this.removeEmptyAggregations();\n }\n }\n this.sendStateChange();\n }\n componentWillUnmount() {\n var {\n model\n } = this.props;\n this.stopListening(model);\n this.pending.cancel();\n this.updateSearchFilter.cancel();\n if (this.loadingTimer) {\n clearTimeout(this.loadingTimer);\n }\n this.handleDownloadProgressUpdate.cancel();\n if (this.animationFrame !== undefined) {\n cancelAnimationFrame(this.animationFrame);\n }\n this.showViewportLoading.cancel();\n }\n get gridWrapper() {\n var _this$grid$canvasWrap, _this$grid;\n return (_this$grid$canvasWrap = (_this$grid = this.grid) === null || _this$grid === void 0 ? void 0 : _this$grid.canvasWrapper.current) !== null && _this$grid$canvasWrap !== void 0 ? _this$grid$canvasWrap : null;\n }\n getKeyHandlers() {\n var {\n keyHandlers\n } = this.props;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMetricState() {\n var _this$grid2;\n var gridMetricState = (_this$grid2 = this.grid) === null || _this$grid2 === void 0 ? void 0 : _this$grid2.getMetricState();\n if (gridMetricState == null) {\n return undefined;\n }\n var {\n advancedFilters,\n hoverSelectColumn,\n isFilterBarShown,\n isMenuShown,\n loadingScrimProgress,\n quickFilters,\n sorts,\n reverse,\n rollupConfig\n } = this.state;\n var {\n model,\n isSelectingColumn\n } = this.props;\n return _objectSpread(_objectSpread({}, gridMetricState), this.getCachedStateOverride(model, this.getTheme(), hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown));\n }\n get renderer() {\n var {\n renderer\n } = this.props;\n return this.getCachedRenderer(renderer);\n }\n getMouseHandlers() {\n var {\n mouseHandlers\n } = this.props;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n getValueForCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n var modelColumn = this.getModelColumn(columnIndex);\n var modelRow = this.getModelRow(rowIndex);\n if (rawValue && modelColumn != null && modelRow != null) {\n var value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isDateType(model.columns[modelColumn].type)) {\n // The returned value is just a long value, we should return the value formatted as a full date string\n var {\n formatter\n } = model;\n return dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));\n }\n return value;\n }\n if (rawValue) {\n return null;\n }\n if (modelColumn != null && modelRow != null) {\n return model.textForCell(modelColumn, modelRow);\n }\n return '';\n }\n\n /**\n * Get the model column index for the provided visible index\n * @param columnIndex Visible column index\n * @returns Model column index, or null if not found\n */\n getModelColumn(columnIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelColumns\n } = metrics;\n if (modelColumns == null) {\n return null;\n }\n if (columnIndex != null && columnIndex < 0) {\n // ColumnBy sources aren't movable, so just return the index directly\n return columnIndex;\n }\n return columnIndex != null ? modelColumns.get(columnIndex) : null;\n }\n getModelRow(rowIndex) {\n var {\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n modelRows\n } = metrics;\n if (modelRows == null) {\n return null;\n }\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n getTheme() {\n var _ref4;\n var {\n model,\n theme,\n density\n } = this.props;\n var {\n theme: contextTheme,\n density: contextDensity\n } = this.context;\n return this.getCachedTheme(contextTheme, theme, (_ref4 = isEditableGridModel(model) && model.isEditable) !== null && _ref4 !== void 0 ? _ref4 : false, model.floatingTopRowCount + model.floatingBottomRowCount, density !== null && density !== void 0 ? density : contextDensity);\n }\n getVisibleColumn(modelIndex) {\n var {\n movedColumns\n } = this.state;\n return GridUtils.getVisibleIndex(modelIndex, movedColumns);\n }\n makeQuickFilter(column, text, timeZone) {\n try {\n return this.tableUtils.makeQuickFilter(column, text, timeZone);\n } catch (err) {\n log.error('Error creating quick filter', err);\n }\n return null;\n }\n\n /**\n * Applies the provided input filters as quick filters,\n * and clears any existing quickFilters or advancedFilters on that column\n * @param inputFilters Array of input filters to apply\n * @param replaceExisting If true, new filters will replace the existing ones, instead of merging\n */\n applyInputFilters(inputFilters) {\n var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n var newAdvancedFilters = replaceExisting ? new Map() : new Map(advancedFilters);\n var newQuickFilters = replaceExisting ? new Map() : new Map(quickFilters);\n var isChanged = replaceExisting && advancedFilters.size > 0;\n inputFilters.forEach(_ref5 => {\n var {\n name,\n type,\n value\n } = _ref5;\n var modelIndex = model.columns.findIndex(_ref6 => {\n var {\n name: columnName,\n type: columnType\n } = _ref6;\n return columnName === name && columnType === type;\n });\n if (modelIndex >= 0) {\n isChanged = newAdvancedFilters.delete(modelIndex) || isChanged;\n isChanged = this.applyQuickFilter(modelIndex, value, newQuickFilters) || isChanged;\n } else {\n log.error('Unable to find column for inputFilter', name, type, value);\n }\n });\n if (isChanged) {\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n }\n\n /**\n * Applies a quick filter\n * @param modelIndex The index in the model of the column to set\n * @param value The string value to set to the quick filter\n * @param quickFilters The quick filters map\n * @returns True if the filters have changed because this quick filter was applied\n */\n applyQuickFilter(modelIndex, value, quickFilters) {\n var {\n model\n } = this.props;\n var {\n formatter\n } = model;\n var column = model.columns[modelIndex];\n if (value != null && \"\".concat(value).trim().length > 0) {\n var quickFilter = quickFilters.get(modelIndex);\n if (quickFilter != null) {\n var {\n text\n } = quickFilter;\n if (text === value) {\n log.debug2('Ignoring change to existing filter');\n return false;\n }\n }\n quickFilters.set(modelIndex, {\n text: value,\n filter: this.makeQuickFilter(column, value, formatter.timeZone)\n });\n return true;\n }\n return quickFilters.delete(modelIndex);\n }\n setAdvancedFilterMap(advancedFilters) {\n this.setState({\n advancedFilters\n });\n }\n setAdvancedFilter(modelIndex, filter, options) {\n log.debug('Setting advanced filter', modelIndex, filter);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref7 => {\n var {\n advancedFilters\n } = _ref7;\n var newAdvancedFilters = new Map(advancedFilters);\n if (filter == null) {\n newAdvancedFilters.delete(modelIndex);\n } else {\n newAdvancedFilters.set(modelIndex, {\n filter,\n options\n });\n }\n return {\n advancedFilters: newAdvancedFilters\n };\n });\n }\n\n /**\n * Sets a quick filter against the provided column\n * @param modelIndex The index in the model for the column this filter is applied to\n * @param filter A filter to apply to the column, or null if there was an error\n * @param text The original text the filter was created with\n */\n setQuickFilter(modelIndex, filter, text) {\n log.debug('Setting quick filter', modelIndex, filter, text);\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref8 => {\n var {\n quickFilters\n } = _ref8;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.set(modelIndex, {\n filter,\n text\n });\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n\n /**\n * Set grid filters based on the filter map\n * @param filterMap Filter map\n */\n setFilterMap(filterMap) {\n var _advancedSettings$get2;\n log.debug('setFilterMap', filterMap);\n var {\n advancedSettings\n } = this.props;\n var clearFiltersOnLinkerFilterUpdate = (_advancedSettings$get2 = advancedSettings.get(AdvancedSettingsType.LINK_CHANGE_CLEARS_ALL_FILTERS)) !== null && _advancedSettings$get2 !== void 0 ? _advancedSettings$get2 : false;\n if (clearFiltersOnLinkerFilterUpdate) {\n this.clearAllFilters();\n }\n var {\n model\n } = this.props;\n filterMap.forEach((_ref9, columnName) => {\n var {\n columnType,\n filterList\n } = _ref9;\n var column = model.columns.find(c => c.name === columnName && c.type === columnType);\n if (column == null) {\n return;\n }\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var combinedText = IrisGridUtils.combineFiltersFromList(columnType, filterList);\n if (combinedText.length === 0) {\n this.removeQuickFilter(columnIndex);\n } else {\n var {\n formatter\n } = model;\n this.setQuickFilter(columnIndex, this.makeQuickFilter(column, combinedText, formatter.timeZone), \"\".concat(combinedText));\n }\n });\n }\n removeColumnFilter(modelRange) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n var clearRange = Array.isArray(modelRange) ? modelRange : [modelRange, modelRange];\n this.setState(_ref0 => {\n var {\n advancedFilters,\n quickFilters\n } = _ref0;\n var newAdvancedFilters = advancedFilters ? new Map(advancedFilters) : new Map();\n var newQuickFilters = quickFilters ? new Map(quickFilters) : new Map();\n newAdvancedFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newAdvancedFilters.delete(column);\n }\n });\n newQuickFilters.forEach((_, column) => {\n if (column >= clearRange[0] && column <= clearRange[1]) {\n newQuickFilters.delete(column);\n }\n });\n return {\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n };\n });\n }\n removeQuickFilter(modelColumn) {\n this.startLoading('Clearing Filter...', {\n resetRanges: true\n });\n this.setState(_ref1 => {\n var {\n quickFilters\n } = _ref1;\n var newQuickFilters = new Map(quickFilters);\n newQuickFilters.delete(modelColumn);\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n clearAllFilters() {\n log.debug('Clearing all filters');\n var {\n advancedFilters,\n quickFilters,\n searchFilter\n } = this.state;\n if (quickFilters.size === 0 && advancedFilters.size === 0 && searchFilter === null) {\n return;\n }\n\n // if there is an active quick filter input field, reset it as well\n this.clearGridInputField();\n this.startLoading('Clearing Filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: new Map(),\n advancedFilters: new Map(),\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearAllAggregations() {\n log.debug('Clearing all aggregations');\n this.setState({\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS\n });\n }\n clearCrossColumSearch() {\n log.debug('Clearing cross-column search');\n this.setState({\n searchValue: '',\n searchFilter: undefined\n });\n }\n clearGridInputField() {\n if (this.filterInputRef.current != null) {\n this.filterInputRef.current.setValue('');\n }\n }\n\n /**\n * Rebuilds all the current filters. Necessary if something like the time zone has changed.\n */\n rebuildFilters() {\n var {\n model\n } = this.props;\n var {\n advancedFilters,\n quickFilters\n } = this.state;\n if (advancedFilters.size === 0 && quickFilters.size === 0) {\n log.debug('No filters to rebuild');\n return;\n }\n var {\n columns,\n formatter\n } = model;\n log.debug('Rebuilding filters');\n var newAdvancedFilters = new Map();\n var newQuickFilters = new Map();\n advancedFilters.forEach((value, key) => {\n var {\n options\n } = value;\n var column = columns[key];\n var filter = this.tableUtils.makeAdvancedFilter(column, options, formatter.timeZone);\n newAdvancedFilters.set(key, {\n options,\n filter\n });\n });\n quickFilters.forEach((value, key) => {\n var {\n text\n } = value;\n var column = columns[key];\n newQuickFilters.set(key, {\n text,\n filter: this.makeQuickFilter(column, text, formatter.timeZone)\n });\n });\n this.startLoading('Rebuilding filters...', {\n resetRanges: true\n });\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n setFilters(_ref10) {\n var {\n quickFilters,\n advancedFilters\n } = _ref10;\n this.setState({\n quickFilters,\n advancedFilters\n });\n }\n updateFormatterSettings(settings) {\n var _settings$defaultDeci, _settings$defaultInte, _settings$truncateNum, _settings$showEmptySt, _settings$showNullStr, _settings$showExtraGr;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var globalColumnFormats = FormatterUtils.getColumnFormats(settings);\n var dateTimeFormatterOptions = FormatterUtils.getDateTimeFormatterOptions(settings);\n var defaultDecimalFormatOptions = (_settings$defaultDeci = settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions) !== null && _settings$defaultDeci !== void 0 ? _settings$defaultDeci : {};\n var defaultIntegerFormatOptions = (_settings$defaultInte = settings === null || settings === void 0 ? void 0 : settings.defaultIntegerFormatOptions) !== null && _settings$defaultInte !== void 0 ? _settings$defaultInte : {};\n var truncateNumbersWithPound = (_settings$truncateNum = settings === null || settings === void 0 ? void 0 : settings.truncateNumbersWithPound) !== null && _settings$truncateNum !== void 0 ? _settings$truncateNum : false;\n var showEmptyStrings = (_settings$showEmptySt = settings === null || settings === void 0 ? void 0 : settings.showEmptyStrings) !== null && _settings$showEmptySt !== void 0 ? _settings$showEmptySt : true;\n var showNullStrings = (_settings$showNullStr = settings === null || settings === void 0 ? void 0 : settings.showNullStrings) !== null && _settings$showNullStr !== void 0 ? _settings$showNullStr : true;\n var showExtraGroupColumn = (_settings$showExtraGr = settings === null || settings === void 0 ? void 0 : settings.showExtraGroupColumn) !== null && _settings$showExtraGr !== void 0 ? _settings$showExtraGr : true;\n var isColumnFormatChanged = !deepEqual(this.globalColumnFormats, globalColumnFormats);\n var isDateFormattingChanged = !deepEqual(this.dateTimeFormatterOptions, dateTimeFormatterOptions);\n var isDecimalFormattingChanged = !deepEqual(this.decimalFormatOptions, settings === null || settings === void 0 ? void 0 : settings.defaultDecimalFormatOptions);\n var isIntegerFormattingChanged = !deepEqual(this.integerFormatOptions, defaultIntegerFormatOptions);\n var isTruncateNumbersChanged = this.truncateNumbersWithPound !== truncateNumbersWithPound;\n var isShowEmptyStringsChanged = this.showEmptyStrings !== showEmptyStrings;\n var isShowNullStringsChanged = this.showNullStrings !== showNullStrings;\n var isShowExtraGroupColumnChanged = this.showExtraGroupColumn !== showExtraGroupColumn;\n if (isColumnFormatChanged || isDateFormattingChanged || isDecimalFormattingChanged || isIntegerFormattingChanged || isTruncateNumbersChanged || isShowEmptyStringsChanged || isShowNullStringsChanged || isShowExtraGroupColumnChanged) {\n this.globalColumnFormats = globalColumnFormats;\n this.dateTimeFormatterOptions = dateTimeFormatterOptions;\n this.decimalFormatOptions = defaultDecimalFormatOptions;\n this.integerFormatOptions = defaultIntegerFormatOptions;\n this.truncateNumbersWithPound = truncateNumbersWithPound;\n this.showEmptyStrings = showEmptyStrings;\n this.showNullStrings = showNullStrings;\n this.showExtraGroupColumn = showExtraGroupColumn;\n this.updateFormatter({}, forceUpdate);\n if (isDateFormattingChanged && forceUpdate) {\n this.rebuildFilters();\n }\n }\n }\n updateFormatter(updatedFormats) {\n var _this$globalColumnFor;\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var {\n customColumnFormatMap\n } = this.state;\n var {\n model\n } = this.props;\n var update = _objectSpread({\n customColumnFormatMap\n }, updatedFormats);\n var mergedColumnFormats = [...((_this$globalColumnFor = this.globalColumnFormats) !== null && _this$globalColumnFor !== void 0 ? _this$globalColumnFor : []), ...update.customColumnFormatMap.values()];\n var formatter = new Formatter(model.dh, mergedColumnFormats, this.dateTimeFormatterOptions, this.decimalFormatOptions, this.integerFormatOptions, this.truncateNumbersWithPound, this.showEmptyStrings, this.showNullStrings);\n log.debug('updateFormatter', this.globalColumnFormats, mergedColumnFormats);\n this.setState(_objectSpread(_objectSpread({}, update), {}, {\n formatter\n }), () => {\n if (forceUpdate && this.grid) {\n this.grid.forceUpdate();\n }\n });\n }\n initFormatter() {\n var {\n settings\n } = this.props;\n this.updateFormatterSettings(settings);\n }\n initState() {\n var {\n model\n } = this.props;\n try {\n if (isPartitionedGridModel(model) && model.isPartitionRequired) {\n this.loadPartitionsTable(model);\n } else {\n this.loadTableState();\n }\n } catch (error) {\n this.handleTableLoadError(error);\n }\n }\n loadTableState() {\n var {\n applyInputFiltersOnInit,\n inputFilters,\n sorts,\n model,\n reverse,\n reverseType,\n customColumns,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n } = this.props;\n var searchColumns = selectedSearchColumns !== null && selectedSearchColumns !== void 0 ? selectedSearchColumns : [];\n var searchFilter = CrossColumnSearch.createSearchFilter(model.dh, searchValue, searchColumns, model.columns, invertSearchColumns);\n if (applyInputFiltersOnInit) {\n // There may be more than one input filter on the same column with value === '' applied last\n // We don't want to skip it here, so only excluding the ones that were never applied (null)\n var inputFiltersWithValues = inputFilters.filter(inputFilter => inputFilter.value != null);\n this.applyInputFilters(inputFiltersWithValues);\n }\n this.setState({\n sorts,\n reverse: reverse || reverseType === TableUtils.REVERSE_TYPE.POST_SORT,\n customColumns,\n isReady: true,\n searchFilter\n });\n this.initFormatter();\n }\n loadPartitionsTable(model) {\n var _this = this;\n return _asyncToGenerator(function* () {\n try {\n var {\n partitionConfig\n } = _this.state;\n if (!partitionConfig) {\n _this.startLoading('Loading partitions...', {\n loadingCancelShown: false,\n resetRanges: true\n });\n _this.initializePartitionConfig(model);\n }\n _this.setState({\n isSelectingPartition: true\n }, _this.loadTableState);\n } catch (error) {\n if (!PromiseUtils.isCanceled(error)) {\n _this.handleTableLoadError(error);\n }\n }\n })();\n }\n\n /**\n * Initialize the partition config to the default partition.\n */\n initializePartitionConfig(model) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n var keyTable = yield _this2.pending.add(model.partitionKeysTable(), resolved => resolved.close());\n var {\n dh\n } = model;\n var sorts = keyTable.columns.map(column => column.sort().desc());\n keyTable.applySort(sorts);\n keyTable.setViewport(0, 0);\n\n // We want to wait for the first UPDATED event instead of just getting viewport data here\n // It's possible that the key table does not have any rows of data yet, so just wait until it does have one\n keyTable.addEventListener(dh.Table.EVENT_UPDATED, event => {\n try {\n var {\n detail: data\n } = event;\n if (data.rows.length === 0) {\n // We received an update and the table is still empty. Stop showing the loading spinner so we know\n _this2.stopLoading();\n return;\n }\n var row = data.rows[0];\n var values = keyTable.columns.map(column => row.get(column));\n var newPartition = {\n partitions: values,\n mode: model.isPartitionAwareSourceTable ? 'partition' : 'keys'\n };\n keyTable.close();\n _this2.setState({\n loadingSpinnerShown: false,\n partitionConfig: newPartition\n });\n } catch (e) {\n keyTable.close();\n log.error('Error getting initial partition config', e);\n }\n });\n })();\n }\n\n /**\n * Selects a partition key from the table based on the provided row index.\n *\n * @param rowIndex The index of the row from which the partition will be selected.\n * @returns A promise that resolves when the partition key has been successfully selected.\n */\n selectPartitionKeyFromTable(rowIndex) {\n var {\n model\n } = this.props;\n assertNotNull(rowIndex);\n if (isPartitionedGridModel(model)) {\n var data = this.getRowDataMap(rowIndex);\n var partitionColumnSet = new Set(model.partitionColumns.map(column => column.name));\n var values = Object.entries(data).filter(_ref11 => {\n var [key, _] = _ref11;\n return partitionColumnSet.has(key);\n }).map(_ref12 => {\n var [key, columnData] = _ref12;\n return columnData.value;\n });\n var newPartition = {\n partitions: values,\n mode: 'partition'\n };\n this.setState({\n isSelectingPartition: true,\n partitionConfig: newPartition\n });\n }\n }\n copyCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n canCopy\n } = this.props;\n if (canCopy) {\n var value = String(this.getValueForCell(columnIndex, rowIndex, rawValue));\n copyToClipboard(value).catch(e => log.error('Unable to copy cell', e));\n } else {\n log.error('Attempted to copyCell for user without copy permission.');\n }\n }\n copyColumnHeader(columnIndex) {\n var columnDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n if (columnIndex === null) {\n return;\n }\n var {\n canCopy\n } = this.props;\n var {\n movedColumns\n } = this.state;\n if (canCopy) {\n var copyOperation = {\n columnIndex,\n columnDepth,\n movedColumns\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyColumnHeader for user without copy permission.');\n }\n }\n\n /**\n * Copy the provided ranges to the clipboard\n * @paramranges The ranges to copy\n * @param includeHeaders Include the headers or not\n * @param formatValues Whether to format values or not\n * @param error Error message if one occurred\n */\n copyRanges(ranges) {\n var includeHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var formatValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var error = arguments.length > 3 ? arguments[3] : undefined;\n var {\n model,\n canCopy\n } = this.props;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n if (canCopy) {\n var copyOperation = {\n ranges: GridRange.boundedRanges(ranges, model.columnCount, model.rowCount),\n includeHeaders,\n formatValues,\n movedColumns,\n userColumnWidths,\n error\n };\n this.setState({\n copyOperation\n });\n } else {\n log.error('Attempted copyRanges for user without copy permission.');\n }\n }\n startLoading(loadingText) {\n var {\n resetRanges = false,\n loadingCancelShown = true,\n loadingBlocksGrid = true\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.setState({\n loadingText,\n loadingCancelShown,\n loadingBlocksGrid\n });\n var theme = this.getTheme();\n if (resetRanges && this.grid) {\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n top: 0\n }, true);\n }\n if (this.loadingScrimStartTime == null) {\n var _this$gridWrapper$get, _this$gridWrapper;\n var {\n minScrimTransitionTime,\n maxScrimTransitionTime\n } = theme;\n assertNotNull(minScrimTransitionTime);\n assertNotNull(maxScrimTransitionTime);\n var height = (_this$gridWrapper$get = (_this$gridWrapper = this.gridWrapper) === null || _this$gridWrapper === void 0 ? void 0 : _this$gridWrapper.getBoundingClientRect().height) !== null && _this$gridWrapper$get !== void 0 ? _this$gridWrapper$get : 0;\n var scrimTransitionTime = Math.max(minScrimTransitionTime, Math.min(height / 2, maxScrimTransitionTime));\n this.loadingScrimStartTime = Date.now();\n this.loadingScrimFinishTime = this.loadingScrimStartTime + scrimTransitionTime;\n this.setState({\n loadingScrimProgress: 0\n });\n this.loadingTimer = setTimeout(() => {\n this.setState({\n loadingSpinnerShown: true\n });\n }, IrisGrid.loadingSpinnerDelay);\n }\n }\n stopLoading() {\n this.showViewportLoading.cancel();\n this.loadingScrimStartTime = undefined;\n this.loadingScrimFinishTime = undefined;\n this.setState({\n loadingText: null,\n loadingScrimProgress: null,\n loadingSpinnerShown: false,\n loadingCancelShown: false\n });\n if (this.loadingTimer != null) {\n clearTimeout(this.loadingTimer);\n this.loadingTimer = undefined;\n }\n }\n\n /**\n * Rolls back the table state to the last known safe state, or if that's not available then clears all sorts/filters/custom columns.\n */\n rollback() {\n if (this.lastLoadedConfig) {\n log.debug('loading last loading config', this.lastLoadedConfig);\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.lastLoadedConfig;\n this.lastLoadedConfig = null;\n this.setState({\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n });\n } else {\n log.debug('remove all sorts, filters, and custom columns');\n this.setState({\n advancedFilters: new Map(),\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n customColumns: [],\n quickFilters: new Map(),\n reverse: false,\n rollupConfig: undefined,\n selectDistinctColumns: [],\n sorts: []\n });\n }\n }\n\n /**\n * Check if we can rollback the current state to a safe state.\n * @returns true if there's a previously known safe state or if some of the current state isn't empty.\n */\n canRollback() {\n return this.lastLoadedConfig != null || !isEmptyConfig(this.state);\n }\n startListening(model) {\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.addEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.addEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n model.addEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n stopListening(model) {\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleUpdate);\n model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnsChanged);\n model.removeEventListener(IrisGridModel.EVENT.PENDING_DATA_UPDATED, this.handlePendingDataUpdated);\n model.removeEventListener(IrisGridModel.EVENT.VIEWPORT_UPDATED, this.handleViewportUpdated);\n model.removeEventListener(IrisGridModel.EVENT.TABLE_CHANGED, this.handleTableChanged);\n }\n focus() {\n var _this$grid3;\n (_this$grid3 = this.grid) === null || _this$grid3 === void 0 || _this$grid3.focus();\n }\n focusFilterBar(column) {\n var {\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n var {\n columnCount\n } = model;\n var modelColumn = GridUtils.getModelIndex(column, movedColumns);\n if (column == null || column < 0 || columnCount <= column || !model.isFilterable(modelColumn)) {\n this.setState({\n focusedFilterBarColumn: null\n });\n return;\n }\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n var {\n left,\n rightVisible,\n lastLeft\n } = metrics;\n if (column < left) {\n var _this$grid4;\n (_this$grid4 = this.grid) === null || _this$grid4 === void 0 || _this$grid4.setViewState({\n left: column\n }, true);\n } else if (rightVisible < column) {\n var _this$grid5;\n var metricState = this.getMetricState();\n assertNotNull(metricState);\n var newLeft = metricCalculator.getLastLeft(metricState, column, metricCalculator.getVisibleWidth(metricState));\n (_this$grid5 = this.grid) === null || _this$grid5 === void 0 || _this$grid5.setViewState({\n left: Math.min(newLeft, lastLeft),\n leftOffset: 0\n }, true);\n }\n this.lastFocusedFilterBarColumn = column;\n this.setState({\n focusedFilterBarColumn: column,\n isFilterBarShown: true\n });\n }\n hideColumnByVisibleIndex(columnVisibleIndex) {\n var _this$grid6;\n var {\n metricCalculator,\n movedColumns\n } = this.state;\n metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);\n (_this$grid6 = this.grid) === null || _this$grid6 === void 0 || _this$grid6.forceUpdate();\n }\n freezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('freezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.add(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size - 1, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n unFreezeColumnByColumnName(columnName) {\n var {\n frozenColumns,\n movedColumns\n } = this.state;\n var {\n model\n } = this.props;\n log.debug2('unfreezing column', columnName);\n var allFrozenColumns = frozenColumns == null ? new Set(model.frozenColumns) : new Set(frozenColumns);\n allFrozenColumns.delete(columnName);\n var modelIndex = model.getColumnIndexByName(columnName);\n assertNotNull(modelIndex);\n var visibleIndex = GridUtils.getVisibleIndex(modelIndex, movedColumns);\n\n // Move to after remaining frozen columns and front columns\n var newMovedColumns = GridUtils.moveItem(visibleIndex, allFrozenColumns.size + model.frontColumns.length, movedColumns);\n this.setState({\n frozenColumns: [...allFrozenColumns],\n movedColumns: newMovedColumns\n });\n }\n\n /**\n * Updates the entire list of frozen columns.\n * Used by VisibilityOrderingBuilder.\n * @param frozenColumns The new list of frozen columns\n */\n handleFrozenColumnsChanged(frozenColumns) {\n this.setState({\n frozenColumns\n });\n }\n toggleExpandColumn(modelIndex, expandDescendants) {\n log.debug2('Toggle expand column', modelIndex);\n var {\n model\n } = this.props;\n if (isExpandableColumnGridModel(model) && model.hasExpandableColumns) {\n model.setColumnExpanded(modelIndex, !model.isColumnExpanded(modelIndex), expandDescendants);\n }\n }\n expandAllColumns() {\n log.debug2('Expand all columns');\n var {\n model\n } = this.props;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.expandAllColumns();\n }\n }\n collapseAllColumns() {\n log.debug2('Collapse all columns');\n var {\n model\n } = this.props;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.collapseAllColumns();\n }\n }\n handleColumnVisibilityChanged(modelIndexes, isVisible) {\n var _this$grid7;\n var {\n metricCalculator,\n metrics\n } = this.state;\n assertNotNull(metrics);\n if (isVisible) {\n modelIndexes.forEach(modelIndex => {\n var defaultWidth = metricCalculator.initialColumnWidths.get(modelIndex);\n var calculatedWidth = metrics.calculatedColumnWidths.get(modelIndex);\n\n // If we haven't scrolled to the column, the calculated width will be undefined.\n // This means the function was triggered by the visibility ordering menu,\n // so just reset the column width to default.\n if (defaultWidth !== calculatedWidth && calculatedWidth != null) {\n metricCalculator.setColumnWidth(modelIndex, calculatedWidth);\n } else {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n });\n } else {\n modelIndexes.forEach(modelIndex => {\n metricCalculator.setColumnWidth(modelIndex, 0);\n });\n }\n (_this$grid7 = this.grid) === null || _this$grid7 === void 0 || _this$grid7.forceUpdate();\n }\n handleColumnVisibilityReset() {\n var _model$layoutHints$fr, _model$layoutHints2;\n var {\n metricCalculator\n } = this.state;\n var {\n model\n } = this.props;\n metricCalculator.resetAllColumnWidths();\n this.handleMovedColumnsChanged(model.initialMovedColumns);\n this.handleHeaderGroupsChanged(model.initialColumnHeaderGroups);\n this.setState({\n frozenColumns: (_model$layoutHints$fr = (_model$layoutHints2 = model.layoutHints) === null || _model$layoutHints2 === void 0 ? void 0 : _model$layoutHints2.frozenColumns) !== null && _model$layoutHints$fr !== void 0 ? _model$layoutHints$fr : EMPTY_ARRAY\n });\n }\n handleCrossColumnSearch(searchValue, selectedSearchColumns, invertSearchColumns) {\n var {\n model\n } = this.props;\n this.startLoading('Searching...');\n this.updateSearchFilter(searchValue, selectedSearchColumns, model.columns, invertSearchColumns);\n this.setState({\n searchValue,\n selectedSearchColumns,\n invertSearchColumns\n });\n }\n handleAnimationLoop() {\n var _this$grid8;\n (_this$grid8 = this.grid) === null || _this$grid8 === void 0 || _this$grid8.updateCanvas();\n if (this.isAnimating) {\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n }\n handleAnimationStart() {\n log.debug2('handleAnimationStart');\n this.isAnimating = true;\n this.animationFrame = requestAnimationFrame(this.handleAnimationLoop);\n }\n handleAnimationEnd() {\n log.debug2('handleAnimationEnd');\n this.isAnimating = false;\n }\n handlePartitionChange(partitionConfig) {\n this.startLoading('Partitioning...');\n var {\n partitionConfig: prevConfig\n } = this.state;\n if (prevConfig !== partitionConfig) {\n this.setState({\n partitionConfig\n });\n }\n }\n handleTableLoadError(error) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n var {\n onError\n } = this.props;\n onError(error);\n }\n handleViewportUpdated() {\n var {\n model\n } = this.props;\n var {\n loadingText,\n loadingSpinnerShown\n } = this.state;\n var loadingMessage = 'Waiting for viewport...';\n\n // pending and no timer already exists\n if (model.isViewportPending && !loadingSpinnerShown) {\n this.showViewportLoading();\n } else if (loadingText === loadingMessage && !model.isViewportPending) {\n // extra conditions because timeout might get cleared by update\n this.stopLoading();\n }\n }\n showAllColumns() {\n var _this$grid9;\n var {\n metricCalculator\n } = this.state;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var entries = [...userColumnWidths.entries()];\n for (var i = 0; i < entries.length; i += 1) {\n var [modelIndex, columnWidth] = entries[i];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n (_this$grid9 = this.grid) === null || _this$grid9 === void 0 || _this$grid9.forceUpdate();\n }\n\n /**\n * Updates grid metrics after model columns have changed\n * to keep Grid and IrisGrid metrics in sync since metrics are stored in both places.\n */\n updateMetrics() {\n var _this$grid0;\n this.setState({\n metrics: (_this$grid0 = this.grid) === null || _this$grid0 === void 0 ? void 0 : _this$grid0.updateMetrics()\n });\n }\n toggleSort(columnIndex, addToExisting) {\n log.info('Toggling sort for column', columnIndex);\n var {\n model\n } = this.props;\n var modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n var {\n sorts: currentSorts\n } = this.state;\n var sorts = TableUtils.toggleSortForColumn(currentSorts, model.columns, modelColumn, addToExisting);\n this.updateSorts(sorts);\n } else {\n log.debug('Column type was not sortable', model.columns[columnIndex]);\n }\n }\n updateSorts(sorts) {\n var _this$grid1;\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid1 = this.grid) === null || _this$grid1 === void 0 || _this$grid1.forceUpdate();\n }\n sortColumn(modelColumn) {\n var _this$grid10;\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : TableUtils.sortDirection.none;\n var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var addToExisting = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n assertNotNull(modelColumn);\n var {\n model\n } = this.props;\n var sorts = TableUtils.sortColumn(model.sort, model.columns, modelColumn, direction, isAbs, addToExisting);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid10 = this.grid) === null || _this$grid10 === void 0 || _this$grid10.forceUpdate();\n }\n reverse(reverse) {\n var _this$grid11;\n this.startLoading('Reversing...');\n this.setState({\n reverse\n });\n (_this$grid11 = this.grid) === null || _this$grid11 === void 0 || _this$grid11.forceUpdate();\n }\n isReversible() {\n var {\n model\n } = this.props;\n return model.isReversible;\n }\n toggleFilterBar() {\n var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;\n var {\n isFilterBarShown\n } = this.state;\n isFilterBarShown = !isFilterBarShown;\n this.setState({\n isFilterBarShown\n });\n if (isFilterBarShown) {\n if (focusIndex != null) {\n this.focusFilterBar(focusIndex);\n } else {\n var columnIndex = 0;\n var {\n model\n } = this.props;\n var {\n columnCount\n } = model;\n for (var i = 0; i < columnCount; i += 1) {\n var modelColumn = this.getModelColumn(i);\n if (modelColumn != null) {\n var column = model.columns[modelColumn];\n if (column != null && TableUtils.isTextType(column.type)) {\n columnIndex = i;\n break;\n }\n }\n }\n this.focusFilterBar(columnIndex);\n }\n } else {\n var _this$grid12;\n (_this$grid12 = this.grid) === null || _this$grid12 === void 0 || _this$grid12.focus();\n }\n }\n isTableSearchAvailable() {\n var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;\n var {\n model,\n canToggleSearch\n } = this.props;\n var {\n dh\n } = model;\n var searchDisplayMode = model === null || model === void 0 || (_model$layoutHints3 = model.layoutHints) === null || _model$layoutHints3 === void 0 ? void 0 : _model$layoutHints3.searchDisplayMode;\n if (searchDisplayMode === ((_dh$SearchDisplayMode = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode === void 0 ? void 0 : _dh$SearchDisplayMode.SEARCH_DISPLAY_HIDE)) {\n return false;\n }\n if (searchDisplayMode === ((_dh$SearchDisplayMode2 = dh.SearchDisplayMode) === null || _dh$SearchDisplayMode2 === void 0 ? void 0 : _dh$SearchDisplayMode2.SEARCH_DISPLAY_SHOW)) {\n return true;\n }\n return canToggleSearch;\n }\n toggleSearchBar() {\n var {\n showSearchBar\n } = this.state;\n if (!this.isTableSearchAvailable()) {\n return;\n }\n var update = !showSearchBar;\n this.setState({\n showSearchBar: update\n }, () => {\n var _this$crossColumnRef;\n if (update && (_this$crossColumnRef = this.crossColumnRef) !== null && _this$crossColumnRef !== void 0 && _this$crossColumnRef.current) {\n var _this$crossColumnRef2;\n (_this$crossColumnRef2 = this.crossColumnRef) === null || _this$crossColumnRef2 === void 0 || _this$crossColumnRef2.current.focus();\n } else {\n var _this$grid13;\n (_this$grid13 = this.grid) === null || _this$grid13 === void 0 || _this$grid13.focus();\n }\n });\n }\n toggleGotoRow() {\n var _this$grid14, _this$grid15;\n var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var columnName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var {\n isGotoShown\n } = this.state;\n if (row || value) {\n var _this$gotoRowRef$curr;\n // if invoked with a row, keep open instead of toggle\n this.setState({\n isGotoShown: true,\n gotoValue: value,\n gotoValueSelectedColumnName: columnName,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n this.focusRowInGrid(row);\n (_this$gotoRowRef$curr = this.gotoRowRef.current) === null || _this$gotoRowRef$curr === void 0 || _this$gotoRowRef$curr.focus();\n return;\n }\n var cursorRow = (_this$grid14 = this.grid) === null || _this$grid14 === void 0 ? void 0 : _this$grid14.state.cursorRow;\n var cursorColumn = (_this$grid15 = this.grid) === null || _this$grid15 === void 0 ? void 0 : _this$grid15.state.cursorColumn;\n if (cursorRow == null || cursorColumn == null) {\n // if a cell is not selected / grid is not rendered\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: '',\n gotoValue: '',\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n return;\n }\n // if a row is selected\n var {\n model\n } = this.props;\n var {\n name,\n type\n } = model.columns[cursorColumn];\n var cellValue = model.valueForCell(cursorColumn, cursorRow);\n var text = IrisGridUtils.convertValueToText(cellValue, type);\n this.setState({\n isGotoShown: !isGotoShown,\n gotoRow: \"\".concat(cursorRow + 1),\n gotoValue: text,\n gotoValueSelectedColumnName: name,\n gotoRowError: '',\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n commitPending() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n var _document;\n var {\n model\n } = _this3.props;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n var {\n pendingSavePromise\n } = _this3.state;\n if (pendingSavePromise != null) {\n throw new Error('Save already in progress');\n }\n var containsGridCellInputField = (_document = document) === null || _document === void 0 || (_document = _document.activeElement) === null || _document === void 0 ? void 0 : _document.classList.contains('grid-cell-input-field');\n if (containsGridCellInputField != null && containsGridCellInputField) {\n var _this3$grid;\n if (document.activeElement != null && document.activeElement.classList.contains('error')) {\n throw new ValidationError('Current input is invalid');\n }\n\n // Focus the grid again to commit any pending input changes\n (_this3$grid = _this3.grid) === null || _this3$grid === void 0 || _this3$grid.focus();\n }\n var newPendingSavePromise = _this3.pending.add(model.commitPending()).then(() => {\n _this3.setState({\n pendingSaveError: null,\n pendingSavePromise: null\n });\n }).catch(err => {\n if (!PromiseUtils.isCanceled(err)) {\n _this3.setState({\n pendingSaveError: err,\n pendingSavePromise: null\n });\n }\n });\n _this3.setState({\n pendingSavePromise: newPendingSavePromise\n });\n return newPendingSavePromise;\n })();\n }\n discardPending() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n var {\n pendingSavePromise\n } = _this4.state;\n if (pendingSavePromise != null) {\n throw new Error('Cannot cancel a save in progress');\n }\n _this4.setState({\n pendingSavePromise: null,\n pendingSaveError: null,\n pendingDataMap: new Map(),\n pendingDataErrors: new Map()\n });\n })();\n }\n\n /**\n * Select the passed in column and notify listener\n * @param column The column in this table to link\n */\n selectColumn(column) {\n var {\n onColumnSelected\n } = this.props;\n onColumnSelected(column);\n }\n\n /**\n * Get the row data map for a given row and notifies the listener\n */\n selectData(columnIndex, rowIndex) {\n var dataMap = this.getRowDataMap(rowIndex);\n var {\n onDataSelected\n } = this.props;\n onDataSelected(rowIndex, dataMap);\n }\n\n /**\n * Get the data map for the given row\n * @param rowIndex Row to get the data map for\n * @returns Data map for the row\n */\n getRowDataMap(rowIndex) {\n var _this5 = this;\n var {\n model\n } = this.props;\n var {\n columns,\n groupedColumns\n } = model;\n var dataMap = {};\n var _loop = function _loop() {\n var column = columns[i];\n var {\n name,\n type\n } = column;\n var value = model.valueForCell(i, rowIndex);\n var text = model.textForCell(i, rowIndex);\n var visibleIndex = _this5.getVisibleColumn(i);\n var isExpandable = isExpandableGridModel(model) && model.isRowExpandable(rowIndex);\n var isGrouped = groupedColumns.find(c => c.name === name) != null;\n dataMap[name] = {\n value,\n text,\n type,\n isGrouped,\n isExpandable,\n visibleIndex\n };\n };\n for (var i = 0; i < columns.length; i += 1) {\n _loop();\n }\n return dataMap;\n }\n handleAdvancedFilterChange(column, filter, options) {\n var {\n model\n } = this.props;\n var index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n handleAdvancedFilterSortChange(column, direction) {\n var _this$grid16;\n var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var {\n model\n } = this.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var columnName = model.columns[columnIndex].name;\n var oldSort = TableUtils.getSortForColumn(model.sort, columnName);\n var newSort = null;\n if (oldSort == null || oldSort.direction !== direction) {\n if (direction === TableUtils.sortDirection.descending) {\n newSort = column.sort().desc();\n } else {\n newSort = column.sort().asc();\n }\n }\n var sorts = TableUtils.setSortForColumn(model.sort, columnName, newSort, addToExisting);\n log.info('Setting table sorts', sorts);\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid16 = this.grid) === null || _this$grid16 === void 0 || _this$grid16.forceUpdate();\n }\n handleAdvancedFilterDone() {\n var _this$grid17;\n (_this$grid17 = this.grid) === null || _this$grid17 === void 0 || _this$grid17.focus();\n }\n handleAdvancedMenuOpened(column) {\n this.setState({\n shownAdvancedFilter: column\n });\n }\n handleGotoRowOpened() {\n this.setState({\n isGotoShown: true,\n gotoValueManuallyChanged: false\n });\n }\n handleGotoRowClosed() {\n this.setState({\n isGotoShown: false,\n gotoValueManuallyChanged: false\n });\n }\n handleAdvancedMenuClosed(columnIndex) {\n var _this$filterInputRef;\n var {\n focusedFilterBarColumn,\n isFilterBarShown\n } = this.state;\n if (isFilterBarShown && focusedFilterBarColumn === columnIndex && ((_this$filterInputRef = this.filterInputRef) === null || _this$filterInputRef === void 0 ? void 0 : _this$filterInputRef.current) !== null) {\n var _this$filterInputRef2;\n (_this$filterInputRef2 = this.filterInputRef) === null || _this$filterInputRef2 === void 0 || _this$filterInputRef2.current.focus();\n this.setState({\n shownAdvancedFilter: null\n });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null\n });\n }\n }\n handleCancel() {\n this.rollback();\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleChartChange() {\n // TODO: IDS-4242 Update Chart Preview\n }\n handleChartCreate(settings) {\n var {\n model,\n onCreateChart\n } = this.props;\n onCreateChart(settings, model);\n }\n handleGridError(error) {\n log.warn('Grid Error', error);\n this.setState({\n toastMessage: /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: \"\".concat(error)\n })\n });\n }\n handleFilterBarChange(value) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n this.setState(_ref13 => {\n var {\n focusedFilterBarColumn,\n quickFilters\n } = _ref13;\n var newQuickFilters = new Map(quickFilters);\n if (focusedFilterBarColumn != null) {\n var modelIndex = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelIndex);\n this.applyQuickFilter(modelIndex, value, newQuickFilters);\n }\n return {\n quickFilters: newQuickFilters\n };\n });\n }\n handleFilterBarDone() {\n var setGridFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var defocusInput = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (setGridFocus) {\n var _this$grid18;\n (_this$grid18 = this.grid) === null || _this$grid18 === void 0 || _this$grid18.focus();\n }\n if (defocusInput) {\n this.setState({\n focusedFilterBarColumn: null\n });\n }\n }\n handleFilterBarTab(backward) {\n var {\n focusedFilterBarColumn\n } = this.state;\n assertNotNull(focusedFilterBarColumn);\n if (backward) {\n this.focusFilterBar(focusedFilterBarColumn - 1);\n } else {\n this.focusFilterBar(focusedFilterBarColumn + 1);\n }\n }\n handleFormatSelection(modelIndex, selectedFormat) {\n var {\n model\n } = this.props;\n var column = model.columns[modelIndex];\n var {\n customColumnFormatMap: prevCustomColumnFormatMap\n } = this.state;\n var customColumnFormatMap = new Map(prevCustomColumnFormatMap);\n if (selectedFormat != null) {\n var normalizedType = TableUtils.getNormalizedType(column.type);\n assertNotNull(normalizedType);\n var columnFormattingRule = Formatter.makeColumnFormattingRule(normalizedType, column.name, selectedFormat);\n customColumnFormatMap.set(column.name, columnFormattingRule);\n } else {\n customColumnFormatMap.delete(column.name);\n }\n this.updateFormatter({\n customColumnFormatMap\n });\n }\n handleColumnAlignmentChange(modelIndex, alignment) {\n var {\n model\n } = this.props;\n var column = model.columns[modelIndex];\n this.setState(_ref14 => {\n var {\n columnAlignmentMap = EMPTY_MAP\n } = _ref14;\n var newColumnAlignmentMap = new Map(columnAlignmentMap);\n if (alignment != null) {\n newColumnAlignmentMap.set(column.name, alignment);\n } else {\n newColumnAlignmentMap.delete(column.name);\n }\n return {\n columnAlignmentMap: newColumnAlignmentMap\n };\n });\n }\n handleMenu(e) {\n e.stopPropagation();\n this.setState({\n isMenuShown: true\n });\n }\n handleMenuClose() {\n this.setState({\n isMenuShown: false,\n openOptions: []\n });\n }\n handleMenuBack() {\n this.setState(_ref15 => {\n var {\n openOptions\n } = _ref15;\n var newOptions = [...openOptions];\n newOptions.pop();\n return {\n openOptions: newOptions\n };\n });\n }\n handleMenuSelect(option) {\n this.setState(_ref16 => {\n var {\n openOptions\n } = _ref16;\n return {\n openOptions: [...openOptions, option]\n };\n });\n }\n handleRequestFailed(event) {\n var {\n detail: error\n } = event;\n log.error('request failed:', error);\n this.stopLoading();\n var {\n partitionConfig\n } = this.state;\n if (isMissingPartitionError(error) && partitionConfig != null) {\n // We'll try loading the initial partition again\n this.startLoading('Reloading partition...', {\n resetRanges: true\n });\n this.setState({\n partitionConfig: undefined\n }, () => {\n this.initState();\n });\n } else if (this.canRollback()) {\n this.startLoading('Rolling back changes...', {\n resetRanges: true\n });\n this.rollback();\n } else {\n log.error('Table failed and unable to rollback');\n var {\n onError\n } = this.props;\n onError(new Error(\"Error displaying table: \".concat(error)));\n }\n }\n handleUpdate() {\n var _this$grid19;\n log.debug2('Received model update');\n var {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n } = this.state;\n var config = {\n advancedFilters,\n aggregationSettings,\n customColumns,\n quickFilters,\n reverse,\n rollupConfig,\n searchFilter,\n selectDistinctColumns,\n sorts\n };\n if (!isEmptyConfig(config)) {\n this.lastLoadedConfig = config;\n } else {\n this.lastLoadedConfig = null;\n }\n (_this$grid19 = this.grid) === null || _this$grid19 === void 0 || _this$grid19.forceUpdate();\n this.stopLoading();\n }\n handleTableChanged() {\n var {\n model\n } = this.props;\n // movedColumns reset triggers metricCalculator update in the Grid component\n this.setState({\n movedColumns: model.initialMovedColumns\n });\n }\n handleViewChanged(metrics) {\n var _this$grid$state, _this$grid20;\n var {\n model\n } = this.props;\n var {\n selectionEndRow = 0\n } = (_this$grid$state = (_this$grid20 = this.grid) === null || _this$grid20 === void 0 ? void 0 : _this$grid20.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {};\n var pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n var {\n bottomViewport\n } = metrics;\n\n // We have an editable table that we can add new rows to\n // Display empty rows beneath the table rows that user can fill in\n var bottomNonFloating = model.rowCount - model.floatingBottomRowCount;\n if (selectionEndRow === bottomNonFloating - 1) {\n // Selection is in the last row, add another blank row\n pendingRowCount = model.pendingRowCount + 1;\n } else if (selectionEndRow === bottomNonFloating - 2) {\n // We may have just added a row based on selection moving, so just leave it as is\n pendingRowCount = model.pendingRowCount;\n } else {\n // Otherwise fill up the viewport with empty cells\n pendingRowCount = Math.max(0, bottomViewport - (model.rowCount - model.pendingRowCount) - model.floatingTopRowCount - model.floatingBottomRowCount - 1);\n }\n }\n this.setState({\n metrics,\n pendingRowCount\n });\n }\n handleSelectionChanged(selectedRanges) {\n assertNotNull(selectedRanges);\n var {\n onSelectionChanged\n } = this.props;\n var {\n copyOperation\n } = this.state;\n this.setState({\n selectedRanges\n });\n if (copyOperation != null) {\n this.setState({\n copyOperation: null\n });\n }\n\n // We get 2 identical ranges here,\n // but consolidating in `Grid#moveSelection` causes\n // deselection to break, so just consolidate here.\n // This will only update the goto row input for row index\n if (GridRange.rowCount(GridRange.consolidate(selectedRanges)) === 1 && selectedRanges[0].startRow != null) {\n this.setState({\n gotoRow: \"\".concat(selectedRanges[0].startRow + 1)\n });\n }\n onSelectionChanged(selectedRanges);\n }\n handleMovedColumnsChanged(movedColumns, onChangeApplied) {\n this.setState({\n movedColumns\n }, onChangeApplied);\n }\n handleHeaderGroupsChanged(columnHeaderGroups) {\n var {\n model\n } = this.props;\n var {\n columnHeaderGroups: prevColumnHeaderGroups\n } = this.state;\n if (prevColumnHeaderGroups === columnHeaderGroups) {\n return;\n }\n this.setState({\n // undo/redo will pass already parsed groups\n // Parsing them again causes a loop with undo/redo that makes it unusable\n columnHeaderGroups: columnHeaderGroups.every(group => isColumnHeaderGroup(group) && group.isValid()) ? columnHeaderGroups : IrisGridUtils.parseColumnHeaderGroups(model, columnHeaderGroups).groups\n }, () => {\n var _this$grid21;\n return (_this$grid21 = this.grid) === null || _this$grid21 === void 0 ? void 0 : _this$grid21.forceUpdate();\n });\n }\n handleTooltipRef(tooltip) {\n // Need to start the timer right away, since we're creating the tooltip when we want the timer to start\n if (tooltip != null) {\n tooltip.startTimer();\n }\n this.tooltip = tooltip;\n }\n handleConditionalFormatsChange(conditionalFormats) {\n log.debug('Updated conditional formats', conditionalFormats);\n this.setState({\n conditionalFormats\n });\n }\n handleConditionalFormatCreate() {\n log.debug('Create new conditional format');\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Create Formatting Rule\"\n }],\n conditionalFormatEditIndex: conditionalFormats.length,\n // Start with a blank rule\n conditionalFormatPreview: undefined\n });\n }\n handleConditionalFormatEdit(index) {\n log.debug('Edit conditional format', index);\n var {\n openOptions,\n conditionalFormats\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.CONDITIONAL_FORMATTING_EDIT,\n title: \"Edit Formatting Rule\"\n }],\n conditionalFormatEditIndex: index,\n // Clone rule to preview temporary changes\n conditionalFormatPreview: _objectSpread({}, conditionalFormats[index])\n });\n }\n handleConditionalFormatEditorSave(config) {\n log.debug('Save conditional format changes', config);\n this.setState(state => {\n if (state.conditionalFormatEditIndex === null) {\n log.debug('Invalid format index');\n return null;\n }\n var conditionalFormats = [...state.conditionalFormats];\n conditionalFormats[state.conditionalFormatEditIndex] = config;\n return {\n conditionalFormats\n };\n }, () => {\n this.handleMenuBack();\n });\n }\n handleConditionalFormatEditorCancel() {\n this.handleMenuBack();\n // Not resetting conditionalFormatPreview here\n // to prevent editor fields change during the menu transition\n this.setState({\n conditionalFormatEditIndex: null\n });\n }\n handleUpdateCustomColumns(customColumns) {\n log.info(\"handleUpdateCustomColumns:\", customColumns);\n var {\n model\n } = this.props;\n var {\n movedColumns,\n sorts,\n quickFilters,\n advancedFilters,\n selectDistinctColumns\n } = this.state;\n var {\n columns\n } = model;\n var oldCustomColumns = model.customColumns.map(customColumn => \"\".concat(customColumn));\n var removedColumnNames = IrisGridUtils.getRemovedCustomColumnNames(oldCustomColumns, customColumns);\n if (removedColumnNames.length > 0) {\n var newSorts = IrisGridUtils.removeSortsInColumns(sorts, removedColumnNames);\n var newQuickFilters = IrisGridUtils.removeFiltersInColumns(columns, quickFilters, removedColumnNames);\n var newAdvancedFilters = IrisGridUtils.removeFiltersInColumns(columns, advancedFilters, removedColumnNames);\n var newMovedColumns = IrisGridUtils.removeColumnFromMovedColumns(columns, movedColumns, removedColumnNames);\n var newSelectDistinctColumns = IrisGridUtils.removeColumnsFromSelectDistinctColumns(selectDistinctColumns, removedColumnNames);\n if (newSorts.length !== sorts.length) {\n log.debug('removing sorts from removed custom columns...');\n this.setState({\n sorts: newSorts\n });\n }\n if (newQuickFilters.size !== quickFilters.size || newAdvancedFilters.size !== advancedFilters.size) {\n log.debug(\"removing filters from removed custom columns...\");\n this.setState({\n quickFilters: newQuickFilters,\n advancedFilters: newAdvancedFilters\n });\n }\n if (!deepEqual(movedColumns, newMovedColumns)) {\n log.debug(\"change moved columns for removed custom columns\", newMovedColumns);\n this.setState({\n movedColumns: newMovedColumns\n });\n }\n if (!deepEqual(selectDistinctColumns, newSelectDistinctColumns)) {\n log.debug(\"change selectDistinct columns for removed custom columns\", newMovedColumns);\n this.setState({\n selectDistinctColumns: newSelectDistinctColumns\n });\n }\n }\n this.setState({\n customColumns\n });\n if (customColumns.length > 0) {\n // If there are no custom columns, the change handler never fires\n // This causes the loader to stay until canceled by the user\n this.startLoading('Applying custom columns...');\n }\n }\n handleCustomColumnsChanged() {\n log.debug('Model columns changed');\n var {\n isReady\n } = this.state;\n if (isReady) {\n this.updateMetrics();\n\n // Make sure stopLoading() is called after the updateMetrics call,\n // otherwise IrisGridModelUpdater queues an extra setViewport based on old metrics.\n this.stopLoading();\n } else {\n this.loadTableState();\n }\n }\n handlePendingCommitClicked() {\n return this.commitPending();\n }\n handlePendingDiscardClicked() {\n return this.discardPending();\n }\n handlePendingDataUpdated() {\n var _this$grid22;\n log.debug('pending data updated');\n var {\n model\n } = this.props;\n var {\n pendingDataMap,\n pendingDataErrors\n } = model;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null\n });\n (_this$grid22 = this.grid) === null || _this$grid22 === void 0 || _this$grid22.forceUpdate();\n }\n handleResizeColumn(modelIndex) {\n var _this$grid23;\n var {\n metrics,\n metricCalculator\n } = this.state;\n if (!metrics) throw new Error('Metrics not set');\n var contentWidth = getOrThrow(metrics.contentColumnWidths, modelIndex);\n var userWidths = metricCalculator.getUserColumnWidths();\n if (userWidths.has(modelIndex)) {\n metricCalculator.resetColumnWidth(modelIndex);\n metricCalculator.setCalculatedColumnWidth(modelIndex, contentWidth);\n } else {\n metricCalculator.setColumnWidth(modelIndex, contentWidth);\n }\n (_this$grid23 = this.grid) === null || _this$grid23 === void 0 || _this$grid23.forceUpdate();\n }\n handleResizeAllColumns() {\n var _this$grid24;\n var {\n metrics,\n metricCalculator\n } = this.state;\n if (!metrics) throw new Error('Metrics not set');\n var allColumns = [...metrics.allColumnWidths.entries()];\n var visibleColumns = allColumns.filter(_ref17 => {\n var [_, width] = _ref17;\n return width !== 0;\n }).map(_ref18 => {\n var [modelIndex] = _ref18;\n return modelIndex;\n });\n var contentWidths = metrics.contentColumnWidths;\n var userWidths = metricCalculator.getUserColumnWidths();\n var manualColumns = visibleColumns.filter(modelIndex => userWidths.has(modelIndex));\n if (visibleColumns.length === manualColumns.length) {\n // All columns are manually sized, flip all to auto resize\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var modelIndex = visibleColumns[i];\n var contentWidth = getOrThrow(contentWidths, modelIndex);\n metricCalculator.resetColumnWidth(modelIndex);\n metricCalculator.setCalculatedColumnWidth(modelIndex, contentWidth);\n }\n } else {\n // Flip all to manual sized\n for (var _i3 = 0; _i3 < visibleColumns.length; _i3 += 1) {\n var _modelIndex = visibleColumns[_i3];\n var _contentWidth = getOrThrow(contentWidths, _modelIndex);\n metricCalculator.setColumnWidth(_modelIndex, _contentWidth);\n }\n }\n (_this$grid24 = this.grid) === null || _this$grid24 === void 0 || _this$grid24.forceUpdate();\n }\n\n /**\n * User added, removed, or changed the order of aggregations, or position\n * @param aggregationSettings The new aggregation settings\n * @param added The aggregations that were added\n * @param removed The aggregations that were removed\n */\n handleAggregationsChange(aggregationSettings) {\n var _rollupConfig$columns, _rollupConfig$columns2;\n var added = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var removed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n log.debug('handleAggregationsChange', aggregationSettings, added, removed);\n var {\n rollupConfig\n } = this.state;\n var isRollup = ((_rollupConfig$columns = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns2 = rollupConfig.columns) === null || _rollupConfig$columns2 === void 0 ? void 0 : _rollupConfig$columns2.length) !== null && _rollupConfig$columns !== void 0 ? _rollupConfig$columns : 0) > 0;\n // Do not start loading if this is rollup and added / removed aggregations are prohibited for rollups\n var changes = [...added, ...removed];\n var shouldStartLoading = !(isRollup && changes.length > 0 && changes.every(op => AggregationUtils.isRollupProhibited(op)));\n if (shouldStartLoading) {\n this.startLoading(\"Aggregating \".concat(aggregationSettings.aggregations.map(a => a.operation).join(', '), \"...\"));\n }\n this.setState({\n aggregationSettings\n });\n }\n\n /**\n * A specific aggregation has been modified\n * @param aggregation The new aggregation\n */\n handleAggregationChange(aggregation) {\n var _rollupConfig$columns3, _rollupConfig$columns4;\n log.debug('handleAggregationChange', aggregation);\n var {\n rollupConfig\n } = this.state;\n var isRollup = ((_rollupConfig$columns3 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns4 = rollupConfig.columns) === null || _rollupConfig$columns4 === void 0 ? void 0 : _rollupConfig$columns4.length) !== null && _rollupConfig$columns3 !== void 0 ? _rollupConfig$columns3 : 0) > 0;\n // Do not start loading if this is rollup and the aggregation is prohibited for rollups\n var shouldStartLoading = !(isRollup && AggregationUtils.isRollupProhibited(aggregation.operation));\n if (shouldStartLoading) {\n this.startLoading(\"Aggregating \".concat(aggregation.operation, \"...\"));\n }\n this.setState(_ref19 => {\n var {\n aggregationSettings\n } = _ref19;\n return {\n selectedAggregation: aggregation,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: aggregationSettings.aggregations.map(a => a.operation === aggregation.operation ? aggregation : a)\n })\n };\n });\n }\n\n /**\n * An aggregations has been selected for editing\n * @param aggregation The aggregation to edit\n */\n handleAggregationEdit(aggregation) {\n log.debug('handleAggregationEdit', aggregation);\n var {\n openOptions\n } = this.state;\n this.setState({\n openOptions: [...openOptions, {\n type: OptionType.AGGREGATION_EDIT,\n title: \"Edit Columns to \".concat(aggregation.operation)\n }],\n selectedAggregation: aggregation\n });\n }\n handleRollupChange(rollupConfig) {\n var _rollupConfig$columns5, _rollupConfig$columns6;\n log.info('Rollup change', rollupConfig);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.startLoading(\"Grouping by columns \".concat((_rollupConfig$columns5 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns6 = rollupConfig.columns) === null || _rollupConfig$columns6 === void 0 ? void 0 : _rollupConfig$columns6.join(', ')) !== null && _rollupConfig$columns5 !== void 0 ? _rollupConfig$columns5 : '', \"...\"));\n\n // Have to clear select distinct since rollup uses the original columns, not the current ones.\n // IrisGridProxyModel has a check to prevent model update\n // when selectDistinctModel is cleared and the rollupConfig is set on the model.\n this.setState({\n rollupConfig,\n movedColumns: EMPTY_ARRAY,\n frozenColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverse: false,\n selectDistinctColumns: EMPTY_ARRAY\n });\n }\n handleSelectDistinctChanged(columnNames) {\n log.debug('SelectDistinct change', columnNames);\n this.resetGridViewState();\n this.showAllColumns();\n this.clearAllFilters();\n this.clearAllAggregations();\n this.startLoading(\"Selecting distinct values in \".concat(columnNames.length > 0 ? columnNames.join(', ') : '', \"...\"));\n this.setState({\n selectDistinctColumns: columnNames,\n movedColumns: [],\n sorts: [],\n reverse: false\n });\n }\n handleDownloadTableStart() {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n this.setState({\n isTableDownloading: true,\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.INITIATING\n });\n } else {\n log.error('Attempted to handleDownloadTableStart for user without download CSV permission.');\n }\n }\n handleDownloadTable(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {\n var {\n canDownloadCsv\n } = this.props;\n if (canDownloadCsv) {\n log.info('start table downloading', fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n this.setState(() => {\n if (this.tableSaver) {\n this.tableSaver.startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n }\n return {\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING\n };\n });\n } else {\n log.error('Attempted to handleDownloadTable for user without download CSV permission.');\n }\n }\n\n /**\n * Aggregation editing has completed. Need to filter out any aggregations that have no columns selected\n */\n removeEmptyAggregations() {\n log.debug('removeEmptyAggregations');\n this.setState(_ref20 => {\n var {\n aggregationSettings\n } = _ref20;\n var {\n aggregations\n } = aggregationSettings;\n var newAggregations = aggregations.filter(a => a.selected.length > 0 || a.invert);\n if (newAggregations.length !== aggregations.length) {\n return {\n selectedAggregation: null,\n aggregationSettings: _objectSpread(_objectSpread({}, aggregationSettings), {}, {\n aggregations: newAggregations\n })\n };\n }\n return {\n selectedAggregation: null,\n aggregationSettings\n };\n });\n }\n seekRow(inputString) {\n var _arguments = arguments,\n _this6 = this;\n return _asyncToGenerator(function* () {\n var _this6$grid;\n var isBackwards = _arguments.length > 1 && _arguments[1] !== undefined ? _arguments[1] : false;\n var {\n gotoValueSelectedColumnName: selectedColumnName,\n gotoValueSelectedFilter\n } = _this6.state;\n var {\n model\n } = _this6.props;\n var {\n dh\n } = model;\n if (!model.isSeekRowAvailable) {\n return;\n }\n if (inputString === '') {\n return;\n }\n var selectedColumn = IrisGridUtils.getColumnByName(model.columns, selectedColumnName);\n if (selectedColumn === undefined) {\n return;\n }\n var searchFromRow = (_this6$grid = _this6.grid) === null || _this6$grid === void 0 ? void 0 : _this6$grid.state.cursorRow;\n if (searchFromRow == null) {\n searchFromRow = 0;\n }\n var isContains = gotoValueSelectedFilter === FilterType.contains || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n var isIgnoreCase = gotoValueSelectedFilter === FilterType.eqIgnoreCase || gotoValueSelectedFilter === FilterType.containsIgnoreCase;\n try {\n var _this6$grid2;\n var {\n formatter\n } = model;\n var columnDataType = TableUtils.getNormalizedType(selectedColumn.type);\n var rowIndex;\n switch (columnDataType) {\n case TableUtils.dataType.CHAR:\n case TableUtils.dataType.STRING:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, isIgnoreCase, isContains, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DATETIME:\n {\n var [startDate] = DateUtils.parseDateRange(dh, inputString, formatter.timeZone);\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.DATETIME, startDate, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n break;\n }\n case TableUtils.dataType.DECIMAL:\n case TableUtils.dataType.INT:\n {\n if (!TableUtils.isBigDecimalType(selectedColumn.type) && !TableUtils.isBigIntegerType(selectedColumn.type)) {\n var inputValue = parseInt(inputString, 10);\n if (inputString === '-Infinity') {\n inputValue = Number.NEGATIVE_INFINITY;\n } else if (inputString === 'Infinity') {\n inputValue = Number.POSITIVE_INFINITY;\n }\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.NUMBER, inputValue, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n } else {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, inputString, undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n break;\n }\n default:\n {\n rowIndex = yield model.seekRow(searchFromRow, selectedColumn, dh.ValueType.STRING, _this6.tableUtils.makeValue(selectedColumn.type, inputString, formatter.timeZone), undefined, undefined, isBackwards !== null && isBackwards !== void 0 ? isBackwards : false);\n }\n }\n (_this6$grid2 = _this6.grid) === null || _this6$grid2 === void 0 || _this6$grid2.setFocusRow(rowIndex);\n _this6.setState({\n gotoValueError: ''\n });\n } catch (e) {\n _this6.setState({\n gotoValueError: 'invalid input'\n });\n }\n })();\n }\n handleCancelDownloadTable() {\n var _this$tableSaver;\n (_this$tableSaver = this.tableSaver) === null || _this$tableSaver === void 0 || _this$tableSaver.cancelDownload();\n this.setState({\n isTableDownloading: false\n });\n }\n handleDownloadCompleted() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 100,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.FINISHED\n });\n }\n handleDownloadCanceled() {\n this.setState({\n isTableDownloading: false,\n tableDownloadProgress: 0,\n tableDownloadStatus: TableCsvExporter.DOWNLOAD_STATUS.CANCELED\n });\n }\n\n /**\n * Delete the specified ranges from the table.\n * @param ranges The ranges to delete\n */\n deleteRanges(ranges) {\n var {\n model\n } = this.props;\n if (!isDeletableGridModel(model) || !model.isDeletable) {\n throw new Error('Model does not support deleting ranges');\n }\n this.pending.add(model.delete(ranges)).catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to delete ranges', ranges, e);\n }\n });\n }\n resetColumnSelection() {\n if (this.grid == null) {\n return;\n }\n var {\n isSelectingColumn\n } = this.props;\n if (isSelectingColumn) {\n var {\n columnAllowedCursor\n } = this.props;\n this.grid.setState({\n cursor: columnAllowedCursor\n });\n } else {\n this.grid.setState({\n cursor: null\n });\n this.setState({\n hoverSelectColumn: null\n });\n }\n }\n resetGridViewState() {\n var forceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n if (!this.grid) {\n return;\n }\n this.grid.clearSelectedRanges();\n this.grid.setViewState({\n left: 0,\n top: 0,\n topOffset: 0,\n leftOffset: 0\n }, forceUpdate);\n }\n sendStateChange() {\n if (!this.grid) {\n return;\n }\n var {\n state: irisGridState\n } = this;\n var {\n state: gridState\n } = this.grid;\n var {\n onStateChange\n } = this.props;\n onStateChange(irisGridState, gridState);\n }\n handleOverflowClose() {\n this.setState({\n showOverflowModal: false\n });\n }\n handleOpenNoPastePermissionModal(errorMessage) {\n this.setState({\n showNoPastePermissionModal: true,\n noPastePermissionError: errorMessage\n });\n }\n handleCloseNoPastePermissionModal() {\n this.setState({\n showNoPastePermissionModal: false\n });\n }\n getColumnBoundingRect() {\n var _this$gridWrapper2;\n var {\n metrics,\n shownColumnTooltip\n } = this.state;\n assertNotNull(metrics);\n assertNotNull(shownColumnTooltip);\n var gridRect = (_this$gridWrapper2 = this.gridWrapper) === null || _this$gridWrapper2 === void 0 ? void 0 : _this$gridWrapper2.getBoundingClientRect();\n var popperMargin = 20;\n assertNotNull(gridRect);\n var {\n columnHeaderHeight,\n allColumnXs,\n allColumnWidths,\n width,\n columnHeaderMaxDepth\n } = metrics;\n var columnX = allColumnXs.get(shownColumnTooltip);\n var columnWidth = allColumnWidths.get(shownColumnTooltip);\n assertNotNull(columnX);\n assertNotNull(columnWidth);\n var left = gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin);\n return {\n top: gridRect.top + (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin),\n bottom: gridRect.top + columnHeaderMaxDepth * columnHeaderHeight,\n right: gridRect.left + clamp(columnX + columnWidth / 2, popperMargin, width - popperMargin) + 1,\n width: 1,\n height: columnHeaderHeight,\n x: left,\n y: gridRect.top,\n toJSON: () => {\n throw new Error('not implemented');\n }\n };\n }\n handleGotoRowSelectedRowNumberSubmit() {\n var {\n gotoRow: rowNumber\n } = this.state;\n this.focusRowInGrid(rowNumber);\n }\n focusRowInGrid(rowNumber) {\n var {\n model\n } = this.props;\n var {\n rowCount\n } = model;\n this.setState({\n gotoRow: rowNumber\n });\n if (rowNumber === '') {\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n return;\n }\n var rowInt = parseInt(rowNumber, 10);\n if (rowInt > rowCount || rowInt < -rowCount) {\n this.setState({\n gotoRowError: 'Invalid row index'\n });\n } else if (rowInt === 0) {\n var _this$grid25;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid25 = this.grid) === null || _this$grid25 === void 0 || _this$grid25.setFocusRow(0);\n } else if (rowInt < 0) {\n var _this$grid26;\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n (_this$grid26 = this.grid) === null || _this$grid26 === void 0 || _this$grid26.setFocusRow(rowInt + rowCount);\n } else {\n var _this$grid27;\n (_this$grid27 = this.grid) === null || _this$grid27 === void 0 || _this$grid27.setFocusRow(rowInt - 1);\n this.setState({\n gotoRowError: '',\n gotoValueError: ''\n });\n }\n }\n handleGotoRowSelectedRowNumberChanged(event) {\n var rowNumber = event.target.value;\n this.focusRowInGrid(rowNumber);\n }\n getColumnTooltip(visibleIndex, metrics, model) {\n var {\n columnHeaderHeight,\n columnHeaderMaxDepth,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(visibleIndex);\n var columnWidth = allColumnWidths.get(visibleIndex);\n if (columnX == null || columnWidth == null) {\n return null;\n }\n\n /**\n * Create a wrapper dom element, the size of the column header.\n * The wrapper acts as tooltip parent, the tooltip component\n * will trigger hide on mouseleave of wrapper or tooltip.\n * The wrapper should be bound to within the grid dimensions,\n * so popper only remains triggered while mouse is inside the panel.\n */\n var boundedLeft = Math.max(0, columnX);\n var boundedWidth = columnWidth;\n if (columnX + columnWidth > width) {\n // column is extending past right edge\n boundedWidth = width - columnX;\n } else if (columnX < 0) {\n // column is extending past left edge\n boundedWidth = columnWidth - Math.abs(columnX);\n }\n var wrapperStyle = {\n position: 'absolute',\n top: (columnHeaderMaxDepth - 1) * columnHeaderHeight,\n left: boundedLeft,\n width: boundedWidth,\n height: columnHeaderHeight,\n pointerEvents: 'none'\n };\n\n /**\n * Because the popper parent wrapper center is no longer the same as\n * the column label center, we create a popper virtual ref, to handle\n * positioning and keep the popper centered on the label. Creates a\n * 1px x headerHeight virtual object, placed centered on the column\n * label, clamped to 0 + margin to width - margin. We add a margin,\n * otherwise the arrow wants to escape the boundary.\n */\n var virtualReference = {\n clientWidth: 1,\n clientHeight: columnHeaderHeight,\n getBoundingClientRect: this.getColumnBoundingRect\n };\n var popperOptions = {\n placement: 'bottom',\n modifiers: {\n flip: {\n behavior: ['bottom', 'top']\n }\n }\n };\n var modelColumn = this.getModelColumn(visibleIndex);\n if (modelColumn == null) return null;\n var column = model.columns[modelColumn];\n if (column == null) return null;\n return /*#__PURE__*/_jsx(\"div\", {\n style: wrapperStyle,\n children: /*#__PURE__*/_jsx(Tooltip, {\n timeout: 400,\n interactive: true,\n options: popperOptions,\n ref: this.handleTooltipRef,\n referenceObject: virtualReference,\n onExited: () => {\n this.setState({\n shownColumnTooltip: null\n });\n },\n children: /*#__PURE__*/_jsx(ColumnStatistics, {\n model: model,\n column: column,\n onStatistics: () => {\n var _this$tooltip;\n (_this$tooltip = this.tooltip) === null || _this$tooltip === void 0 || _this$tooltip.update();\n }\n })\n }, column.name)\n });\n }\n handleGotoValueSelectedColumnNameChanged(columnName) {\n var _this$grid28;\n var {\n model\n } = this.props;\n var cursorRow = (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.state.cursorRow;\n var {\n gotoValueSelectedColumnName: prevColumnName,\n gotoValueManuallyChanged\n } = this.state;\n if (cursorRow != null) {\n var index = model.getColumnIndexByName(columnName);\n var column = IrisGridUtils.getColumnByName(model.columns, columnName);\n var prevColumn = IrisGridUtils.getColumnByName(model.columns, prevColumnName);\n if (index == null || column == null) {\n return;\n }\n var value = model.valueForCell(index, cursorRow);\n var text = IrisGridUtils.convertValueToText(value, column.type);\n\n // do NOT update value if user manually changed value AND column type remains the same\n if (gotoValueManuallyChanged && column.type === (prevColumn === null || prevColumn === void 0 ? void 0 : prevColumn.type)) {\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n } else {\n // do update, and set goToValueManuallyChanged to false because value was automatically changed\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValue: text,\n gotoValueError: '',\n gotoValueManuallyChanged: false\n });\n }\n }\n this.setState({\n gotoValueSelectedColumnName: columnName,\n gotoValueError: ''\n });\n }\n handleGotoValueSelectedFilterChanged(value) {\n this.setState({\n gotoValueSelectedFilter: value,\n gotoValueError: ''\n });\n }\n handleGotoValueSubmitted(isBackwards) {\n var {\n gotoValue\n } = this.state;\n this.seekRow(gotoValue, isBackwards);\n }\n render() {\n var _rollupConfig$columns7,\n _rollupConfig$columns8,\n _this7 = this,\n _this$grid30,\n _openOptions;\n var {\n children,\n customFilters,\n getDownloadWorker,\n isSelectingColumn,\n isStuckToBottom,\n isStuckToRight,\n model,\n name,\n onlyFetchVisibleColumns,\n alwaysFetchColumns,\n advancedSettings,\n onAdvancedSettingsChange,\n canDownloadCsv,\n onCreateChart\n } = this.props;\n var {\n metricCalculator,\n metrics,\n isFilterBarShown,\n isSelectingPartition,\n isMenuShown,\n isReady,\n copyOperation,\n focusedFilterBarColumn,\n loadingText,\n loadingScrimProgress,\n loadingSpinnerShown,\n loadingCancelShown,\n loadingBlocksGrid,\n shownColumnTooltip,\n hoverAdvancedFilter,\n shownAdvancedFilter,\n hoverSelectColumn,\n quickFilters,\n advancedFilters,\n searchFilter,\n selectDistinctColumns,\n movedColumns,\n movedRows,\n formatter,\n conditionalFormats,\n conditionalFormatPreview,\n conditionalFormatEditIndex,\n columnAlignmentMap,\n sorts,\n reverse,\n customColumns,\n selectedRanges,\n isTableDownloading,\n tableDownloadStatus,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n showSearchBar,\n searchValue,\n selectedSearchColumns,\n invertSearchColumns,\n aggregationSettings,\n selectedAggregation,\n rollupConfig,\n openOptions,\n pendingSavePromise,\n pendingSaveError,\n pendingRowCount,\n pendingDataErrors,\n pendingDataMap,\n toastMessage,\n frozenColumns,\n columnHeaderGroups,\n showOverflowModal,\n showNoPastePermissionModal,\n noPastePermissionError,\n overflowText,\n overflowButtonTooltipProps,\n expandCellTooltipProps,\n hoverTooltipProps,\n isGotoShown,\n gotoRow,\n gotoRowError,\n gotoValueError,\n gotoValueSelectedColumnName,\n gotoValue,\n gotoValueSelectedFilter,\n partitionConfig\n } = this.state;\n if (!isReady) {\n return null;\n }\n var theme = this.getTheme();\n var {\n columnHeaderHeight: singleColumnHeaderHeight\n } = theme;\n var filter = this.getCachedFilter(customFilters, quickFilters, advancedFilters, searchFilter);\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var stateOverride = this.getCachedStateOverride(model, theme, hoverSelectColumn, isFilterBarShown, isSelectingColumn, loadingScrimProgress, quickFilters, advancedFilters, sorts, reverse, rollupConfig, isMenuShown);\n var top = metrics ? metrics.top : 0;\n var bottom = metrics ? metrics.bottomViewport : 0;\n var left = null;\n var right = null;\n if (onlyFetchVisibleColumns) {\n left = metrics ? metrics.left : 0;\n right = metrics ? metrics.right : 0;\n }\n var isVisible = metrics != null && metrics.width > 0 && metrics.height > 0;\n var isRollup = ((_rollupConfig$columns7 = rollupConfig === null || rollupConfig === void 0 || (_rollupConfig$columns8 = rollupConfig.columns) === null || _rollupConfig$columns8 === void 0 ? void 0 : _rollupConfig$columns8.length) !== null && _rollupConfig$columns7 !== void 0 ? _rollupConfig$columns7 : 0) > 0;\n var focusField = null;\n var debounceMs = metrics ? Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce) : IrisGrid.maxDebounce;\n if (isFilterBarShown && focusedFilterBarColumn != null && metrics != null) {\n var {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n width\n } = metrics;\n var columnX = allColumnXs.get(focusedFilterBarColumn);\n var columnWidth = allColumnWidths.get(focusedFilterBarColumn);\n if (columnX != null && columnWidth != null) {\n var _theme$filterBarHeigh, _theme$filterBarHeigh2, _this$grid29;\n var x = gridX + columnX;\n var y = gridY - ((_theme$filterBarHeigh = theme.filterBarHeight) !== null && _theme$filterBarHeigh !== void 0 ? _theme$filterBarHeigh : 0);\n var fieldWidth = columnWidth + 1; // cover right border\n var fieldHeight = ((_theme$filterBarHeigh2 = theme.filterBarHeight) !== null && _theme$filterBarHeigh2 !== void 0 ? _theme$filterBarHeigh2 : 0) - 1; // remove bottom border\n var style = {\n top: y,\n left: x,\n minWidth: Math.min(fieldWidth, width - x),\n // Don't cause overflow\n height: fieldHeight\n };\n var value = '';\n var isValid = true;\n var modelColumn = this.getModelColumn(focusedFilterBarColumn);\n assertNotNull(modelColumn);\n var quickFilter = quickFilters.get(modelColumn);\n var advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter != null) {\n value = quickFilter.text;\n isValid = quickFilter.filter != null;\n }\n var isBarFiltered = quickFilters.size !== 0 || advancedFilters.size !== 0;\n focusField = /*#__PURE__*/_jsx(FilterInputField, {\n ref: this.filterInputRef,\n style: style,\n className: classNames({\n error: !isValid,\n active: value !== '' || advancedFilter != null,\n 'iris-grid-has-filter': isBarFiltered\n }),\n isAdvancedFilterSet: advancedFilter != null,\n onAdvancedFiltersTriggered: () => {\n this.setState({\n shownAdvancedFilter: focusedFilterBarColumn\n });\n },\n onChange: this.handleFilterBarChange,\n onDone: this.handleFilterBarDone,\n onTab: this.handleFilterBarTab,\n onContextMenu: (_this$grid29 = this.grid) === null || _this$grid29 === void 0 ? void 0 : _this$grid29.handleContextMenu,\n debounceMs: debounceMs,\n value: value\n }, focusedFilterBarColumn);\n }\n }\n var loadingElement = null;\n if (loadingText != null) {\n var loadingStatus = /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-loading-status\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: classNames('iris-grid-loading-status-bar', {\n show: loadingSpinnerShown\n }),\n children: loadingText\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n onClick: this.handleCancel,\n className: classNames('iris-grid-btn-cancel', {\n show: loadingCancelShown\n }),\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsClose,\n transform: \"down-1\"\n }), \"Cancel\"]\n })]\n });\n var _gridY = metrics ? metrics.gridY : 0;\n loadingElement = /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-loading\",\n style: loadingBlocksGrid ? {\n top: _gridY\n } : {},\n children: loadingStatus\n });\n }\n var columnTooltip = null;\n if (shownColumnTooltip != null && metrics) {\n var _this$tooltip2;\n columnTooltip = this.getColumnTooltip(shownColumnTooltip, metrics, model);\n // #510 We may need to update the position of the tooltip if it's already opened and columns are resized\n (_this$tooltip2 = this.tooltip) === null || _this$tooltip2 === void 0 || _this$tooltip2.update();\n }\n var filterBar = [];\n if (metrics && isFilterBarShown) {\n var {\n gridX: _gridX,\n gridY: _gridY2,\n visibleColumns,\n allColumnXs: _allColumnXs,\n allColumnWidths: _allColumnWidths\n } = metrics;\n var {\n filterBarHeight\n } = theme;\n var _loop2 = function _loop2() {\n var columnIndex = visibleColumns[i];\n var columnX = _allColumnXs.get(columnIndex);\n var columnWidth = _allColumnWidths.get(columnIndex);\n var modelColumn = _this7.getModelColumn(columnIndex);\n if (modelColumn != null) {\n var isFilterable = model.isFilterable(modelColumn);\n if (isFilterable && columnX != null && columnWidth != null && columnWidth > 0) {\n var _x = _gridX + columnX + columnWidth - 24;\n var _y = _gridY2 - (filterBarHeight !== null && filterBarHeight !== void 0 ? filterBarHeight : 0) + 2; // 2 acts as top margin for the button\n var _style = {\n position: 'absolute',\n top: _y,\n left: _x\n };\n var _advancedFilter = advancedFilters.get(modelColumn);\n var isFilterSet = _advancedFilter != null;\n var isFilterVisible = columnIndex === hoverAdvancedFilter || columnIndex === focusedFilterBarColumn || isFilterSet;\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: classNames('advanced-filter-button-container', {\n hidden: !isFilterVisible\n }),\n style: _style,\n children: isFilterVisible && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('btn-link-icon advanced-filter-button', {\n 'filter-set': isFilterSet\n }),\n onClick: () => {\n _this7.setState({\n shownAdvancedFilter: columnIndex\n });\n },\n onContextMenu: event => {\n var _this7$grid;\n (_this7$grid = _this7.grid) === null || _this7$grid === void 0 || _this7$grid.handleContextMenu(event);\n },\n onMouseEnter: () => {\n _this7.setState({\n hoverAdvancedFilter: columnIndex\n });\n },\n onMouseLeave: () => {\n _this7.setState({\n hoverAdvancedFilter: null\n });\n },\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhFilterFilled,\n className: \"filter-solid\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsFilter,\n className: \"filter-light\"\n })]\n })\n })\n }, columnIndex);\n filterBar.push(element);\n }\n }\n };\n for (var i = 0; i < visibleColumns.length; i += 1) {\n _loop2();\n }\n }\n var advancedFilterMenus = [];\n if (metrics) {\n var {\n gridX: _gridX2,\n visibleColumns: _visibleColumns,\n allColumnXs: _allColumnXs2,\n allColumnWidths: _allColumnWidths2,\n columnHeaderHeight\n } = metrics;\n var _loop3 = function _loop3() {\n var columnIndex = _visibleColumns[_i4];\n var columnX = _allColumnXs2.get(columnIndex);\n var columnWidth = _allColumnWidths2.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n var xColumnHeader = _gridX2 + columnX;\n var xFilterBar = _gridX2 + columnX + columnWidth - 20;\n var _style2 = isFilterBarShown ? {\n position: 'absolute',\n top: columnHeaderHeight,\n left: xFilterBar,\n width: 20,\n height: theme.filterBarHeight\n } : {\n position: 'absolute',\n top: 0,\n left: xColumnHeader,\n width: columnWidth,\n height: columnHeaderHeight\n };\n var _modelColumn = _this7.getModelColumn(columnIndex);\n if (_modelColumn != null) {\n var column = model.columns[_modelColumn];\n if (column == null) {\n // Grid metrics is likely out of sync with model\n log.warn(\"Column does not exist at index \".concat(_modelColumn, \" for column array of length \").concat(model.columns.length));\n // eslint-disable-next-line no-continue\n return 1; // continue\n }\n var _advancedFilter2 = advancedFilters.get(_modelColumn);\n var {\n options: advancedFilterOptions\n } = _advancedFilter2 || {};\n var sort = TableUtils.getSortForColumn(model.sort, column.name);\n var sortDirection = sort ? sort.direction : null;\n if (!isSortDirection(sortDirection)) {\n throw new Error(\"Invalid sort direction: \".concat(sortDirection));\n }\n var element = /*#__PURE__*/_jsx(\"div\", {\n className: \"advanced-filter-menu-container\",\n style: _style2,\n children: /*#__PURE__*/_jsx(Popper, {\n className: \"advanced-filter-menu-popper\",\n onEntered: _this7.getAdvancedMenuOpenedHandler(columnIndex),\n onExited: () => {\n _this7.handleAdvancedMenuClosed(columnIndex);\n },\n isShown: shownAdvancedFilter === columnIndex,\n interactive: true,\n closeOnBlur: true,\n options: {\n positionFixed: true\n },\n children: _this7.getCachedAdvancedFilterMenuActions(model, column, advancedFilterOptions, sortDirection, formatter)\n })\n }, columnIndex);\n advancedFilterMenus.push(element);\n }\n }\n };\n for (var _i4 = 0; _i4 < _visibleColumns.length; _i4 += 1) {\n if (_loop3()) continue;\n }\n }\n var optionItems = this.getCachedOptionItems(onCreateChart !== undefined && model.isChartBuilderAvailable, model.isCustomColumnsAvailable, model.isFormatColumnsAvailable, model.isOrganizeColumnsAvailable, model.isRollupAvailable, model.isTotalsAvailable || isRollup, model.isSelectDistinctAvailable, model.isExportAvailable, this.toggleFilterBarAction, this.toggleSearchBarAction, this.toggleGotoRowAction, isFilterBarShown, showSearchBar, canDownloadCsv, this.isTableSearchAvailable(), isGotoShown, advancedSettings.size > 0);\n var hiddenColumns = this.getCachedHiddenColumns(metricCalculator, userColumnWidths);\n var openOptionsStack = openOptions.map(option => {\n switch (option.type) {\n case OptionType.CHART_BUILDER:\n return /*#__PURE__*/_jsx(ChartBuilder, {\n model: model,\n onChange: this.handleChartChange,\n onSubmit: this.handleChartCreate\n }, OptionType.CHART_BUILDER);\n case OptionType.VISIBILITY_ORDERING_BUILDER:\n return /*#__PURE__*/_jsx(VisibilityOrderingBuilder, {\n model: model,\n movedColumns: movedColumns,\n hiddenColumns: hiddenColumns,\n columnHeaderGroups: columnHeaderGroups,\n onColumnVisibilityChanged: this.handleColumnVisibilityChanged,\n onReset: this.handleColumnVisibilityReset,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n onColumnHeaderGroupChanged: this.handleHeaderGroupsChanged,\n onFrozenColumnsChanged: this.handleFrozenColumnsChanged\n }, OptionType.VISIBILITY_ORDERING_BUILDER);\n case OptionType.CONDITIONAL_FORMATTING:\n return /*#__PURE__*/_jsx(ConditionalFormattingMenu, {\n rules: conditionalFormats,\n onChange: this.handleConditionalFormatsChange,\n onCreate: this.handleConditionalFormatCreate,\n onSelect: this.handleConditionalFormatEdit\n });\n case OptionType.CONDITIONAL_FORMATTING_EDIT:\n assertNotNull(model.columns);\n assertNotNull(this.handleConditionalFormatEditorUpdate);\n return /*#__PURE__*/_jsx(ConditionalFormatEditor, {\n dh: model.dh,\n columns: model.columns,\n rule: conditionalFormatPreview,\n onUpdate: this.handleConditionalFormatEditorUpdate,\n onSave: this.handleConditionalFormatEditorSave,\n onCancel: this.handleConditionalFormatEditorCancel\n });\n case OptionType.CUSTOM_COLUMN_BUILDER:\n return /*#__PURE__*/_jsx(CustomColumnBuilder, {\n model: model,\n customColumns: customColumns,\n onSave: this.handleUpdateCustomColumns,\n onCancel: this.handleMenuBack\n }, OptionType.CUSTOM_COLUMN_BUILDER);\n case OptionType.ROLLUP_ROWS:\n return /*#__PURE__*/_jsx(RollupRows, {\n model: model,\n onChange: this.handleRollupChange,\n config: rollupConfig\n }, OptionType.ROLLUP_ROWS);\n case OptionType.AGGREGATIONS:\n return /*#__PURE__*/_jsx(Aggregations, {\n settings: aggregationSettings,\n isRollup: isRollup,\n availablePlacements: isEditableGridModel(model) && model.isEditable ? ['top'] : ['top', 'bottom'],\n onChange: this.handleAggregationsChange,\n onEdit: this.handleAggregationEdit,\n dh: model.dh\n });\n case OptionType.AGGREGATION_EDIT:\n return selectedAggregation && /*#__PURE__*/_jsx(AggregationEdit, {\n aggregation: selectedAggregation,\n columns: model.originalColumns,\n onChange: this.handleAggregationChange\n });\n case OptionType.TABLE_EXPORTER:\n return /*#__PURE__*/_jsx(TableCsvExporter, {\n model: model,\n name: name,\n userColumnWidths: userColumnWidths,\n movedColumns: movedColumns,\n isDownloading: isTableDownloading,\n tableDownloadStatus: tableDownloadStatus,\n tableDownloadProgress: tableDownloadProgress,\n tableDownloadEstimatedTime: tableDownloadEstimatedTime !== null && tableDownloadEstimatedTime !== void 0 ? tableDownloadEstimatedTime : undefined,\n onDownload: this.handleDownloadTable,\n onDownloadStart: this.handleDownloadTableStart,\n onCancel: this.handleCancelDownloadTable,\n selectedRanges: selectedRanges\n }, OptionType.TABLE_EXPORTER);\n case OptionType.SELECT_DISTINCT:\n return /*#__PURE__*/_jsx(SelectDistinctBuilder, {\n model: model,\n selectDistinctColumns: selectDistinctColumns,\n onChange: this.handleSelectDistinctChanged\n });\n case OptionType.ADVANCED_SETTINGS:\n return /*#__PURE__*/_jsx(AdvancedSettingsMenu, {\n items: advancedSettings,\n onChange: onAdvancedSettingsChange\n });\n default:\n throw Error(\"Unexpected option type \".concat(option.type));\n }\n });\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid\",\n role: \"presentation\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-column\",\n children: [children != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"iris-grid-bar\",\n children: children\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: isSelectingPartition,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n nodeRef: this.slideTransitionRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.slideTransitionRef,\n className: \"iris-grid-partition-selector-wrapper iris-grid-bar iris-grid-bar-primary\",\n children: isPartitionedGridModel(model) && model.isPartitionRequired && /*#__PURE__*/_jsx(IrisGridPartitionSelector, {\n model: model,\n partitionConfig: partitionConfig,\n onChange: this.handlePartitionChange\n })\n })\n }), /*#__PURE__*/_jsx(CSSTransition, {\n in: showSearchBar,\n timeout: ThemeExport.transitionSlowMs,\n classNames: \"iris-grid-bar-horizontal\",\n onEnter: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExit: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n nodeRef: this.bottomTransitionRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: this.bottomTransitionRef,\n className: \"iris-grid-bar\",\n children: /*#__PURE__*/_jsx(CrossColumnSearch, {\n value: searchValue,\n selectedColumns: selectedSearchColumns,\n invertSelection: invertSearchColumns,\n onChange: this.handleCrossColumnSearch,\n columns: model.columns,\n ref: this.crossColumnRef\n })\n })\n }), /*#__PURE__*/_jsxs(Grid, {\n ref: grid => {\n this.grid = grid;\n },\n isStickyBottom: !isEditableGridModel(model) || !model.isEditable,\n isStuckToBottom: isStuckToBottom,\n isStuckToRight: isStuckToRight,\n metricCalculator: metricCalculator,\n model: model,\n keyHandlers: this.getKeyHandlers(),\n mouseHandlers: this.getMouseHandlers(),\n movedColumns: movedColumns,\n movedRows: movedRows,\n onError: this.handleGridError,\n onViewChanged: this.handleViewChanged,\n onSelectionChanged: this.handleSelectionChanged,\n onMovedColumnsChanged: this.handleMovedColumnsChanged,\n renderer: this.renderer,\n stateOverride: stateOverride,\n theme: theme,\n children: [/*#__PURE__*/_jsx(IrisGridCellOverflowModal, {\n isOpen: showOverflowModal,\n text: overflowText,\n onClose: this.handleOverflowClose\n }), isVisible && /*#__PURE__*/_jsx(IrisGridModelUpdater, {\n model: model,\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n filter: filter,\n formatter: formatter,\n columnAlignmentMap: columnAlignmentMap,\n sorts: sorts,\n reverse: reverse,\n movedColumns: movedColumns,\n customColumns: customColumns,\n hiddenColumns: hiddenColumns,\n alwaysFetchColumns: this.getAlwaysFetchColumns(alwaysFetchColumns, model.columns, movedColumns, model.floatingLeftColumnCount, model.floatingRightColumnCount, (_this$grid30 = this.grid) === null || _this$grid30 === void 0 || (_this$grid30 = _this$grid30.state.draggingColumn) === null || _this$grid30 === void 0 ? void 0 : _this$grid30.range),\n formatColumns: this.getCachedPreviewFormatColumns(model.dh, model.columns, conditionalFormats, conditionalFormatPreview,\n // Disable the preview format when we press Back on the format edit page\n ((_openOptions = openOptions[openOptions.length - 1]) === null || _openOptions === void 0 ? void 0 : _openOptions.type) === OptionType.CONDITIONAL_FORMATTING_EDIT ? conditionalFormatEditIndex !== null && conditionalFormatEditIndex !== void 0 ? conditionalFormatEditIndex : undefined : undefined),\n rollupConfig: this.getModelRollupConfig(model.originalColumns, rollupConfig, aggregationSettings),\n totalsConfig: this.getModelTotalsConfig(model.columns, rollupConfig, aggregationSettings),\n selectDistinctColumns: selectDistinctColumns,\n pendingRowCount: pendingRowCount,\n pendingDataMap: pendingDataMap,\n frozenColumns: frozenColumns,\n columnHeaderGroups: columnHeaderGroups,\n partitionConfig: partitionConfig,\n showExtraGroupColumn: this.showExtraGroupColumn\n }), !isMenuShown && /*#__PURE__*/_jsx(\"div\", {\n className: \"grid-settings-button\",\n style: {\n height: \"\".concat(singleColumnHeaderHeight, \"px\"),\n width: \"\".concat(singleColumnHeaderHeight, \"px\")\n },\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n \"data-testid\": \"btn-iris-grid-settings-button-\".concat(name),\n onClick: this.handleMenu,\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsMenu,\n transform: \"up-1\"\n }),\n tooltip: \"Table Options\"\n })\n }), focusField, loadingElement, filterBar, columnTooltip, advancedFilterMenus, overflowButtonTooltipProps && this.getOverflowButtonTooltip(overflowButtonTooltipProps), expandCellTooltipProps && this.getExpandCellTooltip(expandCellTooltipProps), hoverTooltipProps && this.getHoverTooltip(hoverTooltipProps)]\n }), /*#__PURE__*/_jsx(GotoRow, {\n ref: this.gotoRowRef,\n model: model,\n isShown: isGotoShown,\n gotoRow: gotoRow,\n gotoRowError: gotoRowError,\n gotoValueError: gotoValueError,\n onGotoRowSubmit: this.handleGotoRowSelectedRowNumberSubmit,\n onGotoRowNumberChanged: this.handleGotoRowSelectedRowNumberChanged,\n onClose: this.handleGotoRowClosed,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: () => {\n this.handleAnimationStart();\n this.focus();\n },\n onExited: this.handleAnimationEnd,\n gotoValueSelectedColumnName: gotoValueSelectedColumnName,\n gotoValue: gotoValue,\n gotoValueFilter: gotoValueSelectedFilter,\n onGotoValueSelectedColumnNameChanged: this.handleGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged: this.handleGotoValueSelectedFilterChanged,\n onGotoValueChanged: this.handleGotoValueChanged,\n onGotoValueSubmit: this.handleGotoValueSubmitted\n }), /*#__PURE__*/_jsx(PendingDataBottomBar, {\n error: pendingSaveError,\n isSaving: pendingSavePromise != null,\n saveTooltip: \"Commit (\".concat(this.commitAction.shortcut.getDisplayText(), \")\"),\n discardTooltip: \"Discard (\".concat(this.discardAction.shortcut.getDisplayText(), \")\"),\n pendingDataErrors: pendingDataErrors,\n pendingDataMap: pendingDataMap,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n onSave: this.handlePendingCommitClicked,\n onDiscard: this.handlePendingDiscardClicked\n }), /*#__PURE__*/_jsx(ToastBottomBar, {\n children: toastMessage\n }), /*#__PURE__*/_jsx(IrisGridCopyHandler, {\n model: model,\n copyOperation: copyOperation !== null && copyOperation !== void 0 ? copyOperation : undefined,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd\n }), /*#__PURE__*/_jsx(TableSaver, {\n dh: model.dh,\n ref: tableSaver => {\n this.tableSaver = tableSaver;\n },\n getDownloadWorker: getDownloadWorker,\n onDownloadCompleted: this.handleDownloadCompleted,\n onDownloadCanceled: this.handleDownloadCanceled,\n onDownloadProgressUpdate: this.handleDownloadProgressUpdate,\n isDownloading: tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING,\n formatter: formatter\n })]\n }), /*#__PURE__*/_jsx(SlideTransition, {\n in: isMenuShown,\n onEntering: this.handleAnimationStart,\n onEntered: this.handleAnimationEnd,\n onExiting: this.handleAnimationStart,\n onExited: this.handleAnimationEnd,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"table-sidebar\",\n children: /*#__PURE__*/_jsxs(Stack, {\n children: [/*#__PURE__*/_jsx(Page, {\n title: \"Table Options\",\n onClose: this.handleMenuClose,\n children: /*#__PURE__*/_jsx(Menu, {\n onSelect: i => this.handleMenuSelect(optionItems[i]),\n items: optionItems\n })\n }), openOptionsStack.map((option, i) => /*#__PURE__*/_jsx(Page, {\n title: openOptions[i].title,\n onBack: this.handleMenuBack,\n onClose: this.handleMenuClose,\n children: option\n }, openOptions[i].type))]\n })\n })\n }), /*#__PURE__*/_jsx(ContextActions, {\n actions: this.contextActions\n }), /*#__PURE__*/_jsx(NoPastePermissionModal, {\n isOpen: showNoPastePermissionModal,\n onClose: this.handleCloseNoPastePermissionModal,\n errorMessage: noPastePermissionError\n })]\n });\n }\n}\n_defineProperty(IrisGrid, \"contextType\", IrisGridThemeContext);\n_defineProperty(IrisGrid, \"minDebounce\", 150);\n_defineProperty(IrisGrid, \"maxDebounce\", 500);\n_defineProperty(IrisGrid, \"loadingSpinnerDelay\", 800);\n_defineProperty(IrisGrid, \"defaultProps\", {\n advancedFilters: EMPTY_MAP,\n advancedSettings: EMPTY_MAP,\n alwaysFetchColumns: EMPTY_ARRAY,\n conditionalFormats: EMPTY_ARRAY,\n customColumnFormatMap: EMPTY_MAP,\n columnAlignmentMap: EMPTY_MAP,\n isFilterBarShown: false,\n applyInputFiltersOnInit: false,\n movedColumns: EMPTY_ARRAY,\n movedRows: EMPTY_ARRAY,\n inputFilters: EMPTY_ARRAY,\n customFilters: EMPTY_ARRAY,\n onCreateChart: undefined,\n onColumnSelected: () => undefined,\n onDataSelected: () => undefined,\n onError: () => undefined,\n onStateChange: () => undefined,\n onAdvancedSettingsChange: () => undefined,\n partitions: undefined,\n partitionConfig: undefined,\n quickFilters: EMPTY_MAP,\n selectDistinctColumns: EMPTY_ARRAY,\n sorts: EMPTY_ARRAY,\n reverse: false,\n customColumns: EMPTY_ARRAY,\n aggregationSettings: DEFAULT_AGGREGATION_SETTINGS,\n rollupConfig: undefined,\n userColumnWidths: EMPTY_MAP,\n userRowHeights: EMPTY_MAP,\n onSelectionChanged: () => undefined,\n isSelectingColumn: false,\n isSelectingPartition: false,\n isStuckToBottom: false,\n isStuckToRight: false,\n columnAllowedCursor: 'linker',\n columnNotAllowedCursor: 'linker-not-allowed',\n copyCursor: 'copy',\n name: 'table',\n onlyFetchVisibleColumns: true,\n showSearchBar: false,\n searchValue: '',\n invertSearchColumns: true,\n onContextMenu: () => EMPTY_ARRAY,\n pendingDataMap: EMPTY_MAP,\n getDownloadWorker: DownloadServiceWorkerUtils.getServiceWorker,\n settings: {\n timeZone: 'America/New_York',\n defaultDateTimeFormat: DateUtils.FULL_DATE_FORMAT,\n showTimeZone: false,\n showTSeparator: true,\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n showExtraGroupColumn: true,\n formatter: EMPTY_ARRAY\n },\n canCopy: true,\n canDownloadCsv: true,\n frozenColumns: EMPTY_ARRAY,\n // Do not set a default density prop since we need to know if it overrides the global density setting\n density: undefined,\n canToggleSearch: true,\n mouseHandlers: EMPTY_ARRAY,\n keyHandlers: EMPTY_ARRAY,\n getMetricCalculator: function getMetricCalculator() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return new IrisGridMetricCalculator(...args);\n }\n});\nexport default IrisGrid;\n//# sourceMappingURL=IrisGrid.js.map"],"names":["getChangedKeys","oldObject","newObject","keys","changedKeys","key","assertIsDefined","val","AssertionError","_defineProperty","e","r","_toPropertyKey","t","i","_toPrimitive","PasteError","ownKeys","o","_objectSpread","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","metrics","model","_modelColumns$get","modelColumns","movedColumns","allColumnXs","columnCount","allColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","maxX","modelIndex","GridUtils","group","isColumnGroup","left","right","range","_allColumnXs$get","_allColumnXs$get2","_allColumnWidths$get","startVisibleIndex","endVisibleIndex","_ref","_ref2","_allColumnWidths$get2","possibleLeft","GridColumnMoveMouseHandler","GridMouseHandler","grid","direction","lastLeft","leftOffset","nextLeft","nextOffset","_userColumnWidths$get","prevColumnWidth","leftColumnWidth","_userColumnWidths$get2","_modelIndex","mouseX","mouseY","gridPoint","x","column","columnHeaderDepth","columnInfo","rowHeaderWidth","event","draggingColumn","initialColumnInfo","startColumn","endColumn","deltaX","_draggingParentGroup$","assertNotNull","gridX","draggingColumnDepth","width","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","clamp","parentGroup","parentVisibleRange","_allColumnXs$get3","_newMovedColumns","_getColumnInfo","_newMovedColumns2","parentRight","toVisibleIndex","_newMovedColumns3","toColumnInfo","_toColumnInfo$left","_toColumnInfo$right","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","newMovedColumns","to","moveDistance","newDraggingRange","GridHorizontalScrollBarMouseHandler","rawLeft","theme","metricCalculator","_left","_leftOffset","leftOffsetPercent","columnWidth","metricState","scrollBarSize","scrollBarHoverSize","y","barLeft","barWidth","height","hasHorizontalBar","_this$dragOffset","handleWidth","scrollableContentWidth","scrollableViewportWidth","mouseBarX","scrollPercent","scrollX","newLeft","newLeftOffset","GridRowMoveMouseHandler","row","columnHeaderHeight","allRowYs","rowY","getOrThrow","draggingRow","top","lastTop","bottom","bottomVisible","rowCount","allRowHeights","minY","topRow","maxY","bottomRow","movedRows","minMoveY","maxMoveY","GridRowSeparatorMouseHandler","GridSeparatorMouseHandler","index","size","separator","GridScrollBarCornerMouseHandler","hasVerticalBar","GridVerticalScrollBarMouseHandler","rawTop","_top","_topOffset","topOffsetPercent","rowHeight","topOffset","barTop","barHeight","handleHeight","scrollableContentHeight","scrollableViewportHeight","mouseBarY","scrollY","newTop","newTopOffset","EditMouseHandler","isEditableGridModel","GridRange","KeyHandler","order","SelectionKeyHandler","_model","_columnCount","deltaColumn","deltaRow","isShiftKey","isModifierKey","cursorRow","cursorColumn","selectionEndColumn","selectionEndRow","maximizePreviousRange","moveToColumn","moveToRow","autoSelectRow","autoSelectColumn","topVisible","selectRangeEndPosition","viewportPosition","lastRowIndex","TreeKeyHandler","selectedRanges","modelRow","isExpandableGridModel","EditKeyHandler","parseValueFromTable","table","data","rows","cells","rowData","c","_cell$textContent$tri","_cell$textContent","cell","parseValueFromNodes","nodes","result","node","_node$textContent","text","parseValueFromElement","element","_element$textContent$","_element$textContent","childNodes","hasTabChar","hasFirefoxTab","PasteKeyHandler","dummyInput","listener","value","directionForKey","SELECTION_DIRECTION","CellInputField","selectionRange","className","disabled","propsValue","propsIsQuickEdit","onChange","EMPTY_FUNCTION","onCancel","onDone","onContextMenu","style","inputField","useRef","isCancelled","initialValue","useState","isChanged","setIsChanged","isQuickEdit","setIsQuickEdit","setValue","useEffect","field","sendUpdate","useCallback","newValue","handleChange","handleCancel","handleClick","handleCommit","fillRange","handleBlur","handleKeyDown","handleContextMenu","_jsx","classNames","ThemeContext","React","asyncGeneratorStep","n","u","_asyncToGenerator","_next","_throw","Grid","PureComponent","context","_ref3","_ref4","_legacyContext$webkit","devicePixelRatio","legacyContext","backingStorePixelRatio","cursor","props","memoize","keyHandlers","a","b","mouseHandlers","isStuckToBottom","isStuckToRight","renderer","GridRenderer","GridMetricCalculator","GridColumnSeparatorMouseHandler","GridRowTreeMouseHandler","GridTokenMouseHandler","GridSelectionMouseHandler","EMPTY_ARRAY","_this$canvas","prevProps","prevState","renderError","changedProps","changedState","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","currentStateMovedColumns","currentStateMovedRows","stateUpdates","updatedState","_this$canvas2","rect","state","stateOverride","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","columnIndex","_this$metrics","rowIndex","_this$metrics2","expandDescendants","rightVisible","gridRanges","newCursorRow","newCursorColumn","canvas","canvasOptions","canvasContext","renderState","onViewChanged","canvasWrapper","scale","prevRowCount","prevColumnCount","prevHeight","prevWidth","oldSelectedRanges","onSelectionChanged","extendSelection","selectionStartRow","selectionStartColumn","lastSelectedRange","_lastSelectedRange$st","_lastSelectedRange$st2","_lastSelectedRange$en","_lastSelectedRange$en2","selectedRange","_newRanges","newRanges","selectedColumn","selectedRow","lastSelectedRanges","newSelectedRanges","lastRange","remainder","nextCursor","selectionChanged","focusedRow","_userRowHeights$get","gridY","userRowHeights","tableHeight","halfViewportHeight","ranges","_gridRange$nextCell","gridRange","keepCursorInView","leftVisible","viewState","forceUpdate","modelColumn","_this","assertIsEditableGridModel","_edits","modelRanges","tableWidth","_range$startColumn","_range$startRow","_range$startColumn2","_range$startRow2","edits","_range$startColumn3","_range$startColumn4","_range$startRow3","onError","_selectedRange$endRow","_selectedRange$endCol","rowSelected","columnSelected","mouseEvent","_this$canvas3","_this$canvas4","mouseHandler","functionName","keyHandler","_options$stopPropagat","_options$preventDefau","options","updateCoordinates","addCursorToDocument","_options$stopPropagat2","_options$preventDefau2","isDragging","callback","_ref5","updateRevision","deltaY","maxLeftOffset","_metrics$allColumnWid","_metrics$allColumnWid2","_columnWidth","maxTopOffset","_metrics$allRowHeight","_metrics$allRowHeight2","_rowHeight","_ref6","editingCell","activeCellSelectionBorderWidth","w","h","leftBorderOffset","wrapperStyle","inputStyle","isValid","draggingColumnSeparator","draggingRowOffset","draggingRowSeparator","children","_jsxs","moveOperations","token","isLinkToken","contextTheme","userTheme","GridTheme","log","Log","AdvancedFilterCreatorFilterItem","columnType","filterType","TableUtils","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","getLabelForBooleanFilter","memoizeOne","operation","timeZone","tableUtils","_value","filterTypes","selectedType","_this$typeDropdown","eventTargetValue","onDelete","formatter","showValueInput","typeOptionElements","type","label","Select","typeDropdown","Button","vsTrash","AdvancedFilterCreatorSelectValueList","values","v","selectedValues","dh","filters","invertSelection","itemIndex","selectedIndex","isSelected","offset","items","visibleItemIndex","displayValue","itemCount","item","isLoading","viewportSize","SelectValueList","list","FadeTransition","LoadingSpinner","AdvancedFilterCreatorSelectValue","searchTable","searchText","count","formattedCount","formattedTableSize","prefix","searchTablePromise","error","filter","showSearch","columnName","displayedValuesText","placeholderText","AdvancedFilterCreator","nanoid","_options$filterItems$","_options$filterItems","filterOperators","filterItems","isSortable","valuesTable","_valuesTable$columns$","sort","PromiseUtils","_this$focusTrapContai","_this$focusTrapContai2","inputs","FilterOperator","operator","assertFilterOperatorValue","filterIndex","addToExisting","ContextActionUtils","filterItem","onSortChange","onFilterChange","operators","sortDirection","valuesTableError","isValuesTableAvailable","isBoolean","isDateType","filterItemElements","_loop","filterOperator","isAndFilter","operatorElement","showAddFilterItem","addFilterItem","FontAwesomeIcon","dhNewCircleLargeFilled","dhSortAmountDown","_Fragment","makeTernaryFormatRule","config","prevRule","styleDBString","getStyleDBString","conditionDBString","getConditionDBString","makeRowFormatColumn","rule","makeColumnFormatColumn","col","FormatterType","NumberCondition","StringCondition","DateCondition","BooleanCondition","CharCondition","FormatStyleType","getLabelForStyleType","option","getBackgroundForStyleConfig","customConfig","getColorForStyleConfig","color","bg","getNumberConditionText","start","end","getTextForNumberCondition","getStringConditionText","getTextForStringCondition","getDateConditionText","getTextForDateCondition","getBooleanConditionText","getTextForBooleanCondition","getCharConditionText","getTextForCharCondition","getLabelForNumberCondition","condition","getLabelForStringCondition","getLabelForDateCondition","getLabelForBooleanCondition","getLabelForCharCondition","getDefaultConditionForType","getDefaultValueForType","getConditionConfig","getDefaultConditionConfigForType","getDefaultStyleConfig","getShortLabelForStringCondition","getShortLabelForDateCondition","getShortLabelForBooleanCondition","getShortLabelForCharCondition","getShortLabelForNumberCondition","getShortLabelForConditionType","getFormatColumns","columns","rules","rowFormatConfig","columnFormatConfigMap","formatterType","name","prevFormatColumn","formatColumn","isDateConditionValid","dateTimeString","rest","tzCode","DateUtils","isSupportedColumn","IrisGridBottomBar","animation","isShown","onClick","onEntering","onEntered","onExiting","onExited","nodeRef","CSSTransition","ThemeExport","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","pendingDataErrors","pendingDataMap","_onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","usePrevious","errorMessage","useMemo","pendingRowCount","commitIcon","vsPass","vsWarning","isCopyRangesOperation","copyOperation","isCopyHeaderOperation","IrisGridCopyHandler","Component","copyState","buttonState","_this2","copyToClipboard","_this3","columnDepth","copyText","includeHeaders","_movedColumns","formatValues","hiddenColumns","IrisGridUtils","subtractRanges","formatValue","CanceledPromiseError","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","FilterInputField","debounceMs","debounce","_this$inputField","_this$inputField2","setGridFocus","defocusInput","_this$inputField3","relatedTarget","backward","onTab","isAdvancedFilterSet","onAdvancedFiltersTriggered","dhFilterFilled","vsFilter","CopyCellKeyHandler","irisGrid","CopyKeyHandler","ReverseKeyHandler","IrisGridShortcuts","reverse","ClearFilterKeyHandler","ToastBottomBar","setIsShown","timeout","prevChildren","startTimer","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","columnAlignmentMap","sorts","customColumns","alwaysFetchColumns","rollupConfig","totalsConfig","selectDistinctColumns","EMPTY_MAP","frozenColumns","formatColumns","columnHeaderGroups","partitionConfig","showExtraGroupColumn","isTotalsAvailable","isRollupAvailable","useOnChange","isIrisGridTreeTableModel","sortsForModel","isPartitionedGridModel","STATS_LABEL_OVERRIDES","ColumnStatistics","_STATS_LABEL_OVERRIDE","numRows","stats","onStatistics","statistics","_column$displayName","loading","showGenerateStatistics","statisticElements","description","formattedValue","statisticElement","rowCountLabel","formattedRowCount","CopyButton","dhSortSlash","dhFreeze","vsLock","dhRefresh","CrossColumnSearch","searchValue","selectedColumns","filterColumns","filterValue","searchFilter","_this$searchField$cur","update","isConfigureColumnsShown","hasAllColumnsSelected","hasNoColumnsSelected","icon","dhSquareFilled","dhGearFilled","dhCheckSquare","vsCircleLargeFilled","dhWarningCircleFilled","dhRemoveSquareFilled","SearchInput","Tooltip","Popper","Checkbox","IrisGridPartitionSelector","memoizee","Pending","keysTable","keyTable","baseTable","prevConfig","partitionTables","newPartitionConfig","selectedValue","newPartitions","tCopy","partitionFilters","partition","partitionColumn","newConfig","_","_x","_x2","partitions","previousFilter","previousPartition","previousColumn","partitionFilter","partitionSelectors","Picker","vsChevronRight","vsKey","vsMerge","SelectDistinctBuilder","filteredInputs","deepEqual","prevInputs","input","inputIndex","disableAddButton","AdvancedSettingsMenu","_onChange","Menu","isOn","AdvancedSettingsType","DEFAULT_CALLBACK","getRuleValue","getRuleTitle","ConditionalFormattingMenu","onCreate","onSelect","handleRuleClick","handleDeleteClick","updatedRules","handleDragHandlerClick","handleDragEnd","DragUtils","sourceIndex","destinationIndex","sourceInput","DragDropContext","Droppable","provided","snapshot","Draggable","vsGripper","numberConditionOptions","stringConditions","dateConditions","booleanConditions","charConditions","isNumberConditionValid","startValue","endValue","getNumberInputs","selectedCondition","handleValueChange","handleStartValueChange","handleEndValueChange","conditionValue","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","ConditionEditor","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setStartValue","setEndValue","conditions","handleConditionChange","conditionInputs","DEFAULT_BACKGROUND","DEFAULT_COLOR_LIGHT","DEFAULT_COLOR_DARK","DEFAULT_DROPDOWN_WIDTH","StyleEditor","_config$customConfig$","_config$customConfig","styleType","setStyleType","background","setBackground","setShown","dropdownWidth","setDropdownWidth","csContainer","handleBackgroundChange","handleMenuClosed","handleToggleClick","updateDropdownWidth","styleOptions","ColorUtils","renderOptions","optionArray","vsCheck","renderMenuElement","DropdownMenu","makeDefaultConfig","ColumnFormatEditor","_columns$find","setColumn","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","newColumn","updatedConditionConfig","handleStyleChange","updatedStyleConfig","columnNames","ComboBox","RowFormatEditor","getFormatterTypeIcon","FormatColumnWhereIcon","FormatRowWhereIcon","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","_defaultRule$type","originalColumns","onUpdate","defaultRule","selectedFormatter","setFormatter","setRule","setIsValid","handleSave","handleFormatterChange","handleRuleChange","ruleConfig","isRuleValid","updatedRule","IrisGridCellOverflowModal","_editorRef$current$ge","_editorRef$current2","isOpen","onClose","isOpened","setIsOpened","setHeight","showLineNumbers","setShowLineNumbers","isFormatted","setIsFormatted","canFormat","setCanFormat","editorRef","toggleLineNumbers","formatAsJSON","_editorRef$current","autoSetLineNumbers","_editor$getModel$getL","_editor$getModel","editor","handleToggle","onEditorInitialized","contentHeight","Modal","ModalHeader","vsListOrdered","vsJson","ModalBody","Editor","DEFAULT_FORMAT_STRING","GotoRow","forwardRef","ref","gotoRow","gotoRowError","gotoValueError","onGotoRowSubmit","_onEntered","onGotoRowNumberChanged","gotoValueSelectedColumnName","gotoValue","gotoValueFilter","onGotoValueSelectedColumnNameChanged","onGotoValueSelectedFilterChanged","onGotoValueChanged","onGotoValueSubmit","gotoRowInputRef","gotoValueInputRef","isGotoRowActive","setIsGotoRowActive","isIrisGridTableModelTemplate","gotoRowInputId","handleGotoValueNumberKeyDown","onGotoValueInputChanged","handleGotoValueKeySubmit","normalizedType","useImperativeHandle","_gotoRowInputRef$curr","selectInput","_gotoRowInputRef$curr2","_gotoValueInputRef$cu","renderValueInput","DateTimeInput","FilterType","vsClose","vsArrowUp","vsArrowDown","NoPastePermissionModal","pasteShortcutText","GLOBAL_SHORTCUTS","ModalFooter","VIEWPORT_LOADING_DELAY","UPDATE_DOWNLOAD_THROTTLE","SET_FILTER_DEBOUNCE","SEEK_ROW_DEBOUNCE","SET_CONDITIONAL_FORMAT_DEBOUNCE","DEFAULT_AGGREGATION_SETTINGS","UNFORMATTED_DATE_PATTERN","isEmptyConfig","advancedFilters","aggregationSettings","quickFilters","IrisGrid","_model$layoutHints","_model$columns$0$name","_model$columns$","advancedFilterOptions","isChartBuilderAvailable","isCustomColumnsAvailable","isFormatColumnsAvailable","isOrganizeColumnsAvailable","isSelectDistinctAvailable","isExportAvailable","toggleFilterBarAction","toggleSearchBarAction","toggleGotoRowAction","isFilterBarShown","showSearchBar","canDownloadCsv","canToggleSearch","showGotoRow","hasAdvancedSettings","optionItems","OptionType","dhGraphLineUp","dhEye","vsEdit","vsSplitHorizontal","dhTriangleDownSquare","vsSymbolOperator","vsRuby","vsCloudDownload","vsTools","vsSearch","vsReply","aggregations","aggregationMap","selected","invert","AggregationUtils","operationMap","_operationMap$name","newOperations","rulesParam","preview","editIndex","_config$columns$lengt","_config$columns","agg","operationOrder","AggregationOperation","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","isEditable","floatingRowCount","density","_theme$rowFooterWidth","baseTheme","createDefaultIrisGridTheme","rowFooterWidth","densityTheme","handler","rendererProp","IrisGridRenderer","floatingLeftColumnCount","floatingRightColumnCount","draggingRange","floatingColumns","_i","_i2","columnSet","selectedSearchColumns","invertSearchColumns","throttle","loadingSpinnerShown","conditionalFormatPreview","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","TableCsvExporter","overflowButtonTooltipProps","popperOptions","expandCellTooltipProps","expandTooltipDisplayValue","isExpandAllAvailable","hoverTooltipProps","hoverDisplayValue","SHORTCUTS","_aggregationSettings","conditionalFormats","customColumnFormatMap","_isFilterBarShown","isSelectingPartition","movedColumnsProp","movedRowsProp","_rollupConfig","_userColumnWidths","_showSearchBar","_searchValue","_selectedSearchColumns","_invertSearchColumns","_advancedFilters","_quickFilters","canCopy","getMetricCalculator","_dh","_keyHandlers","_mouseHandlers","IrisGridCellOverflowMouseHandler","IrisGridRowTreeMouseHandler","IrisGridTokenMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridSortMouseHandler","IrisGridFilterMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","PendingMouseHandler","IrisGridPartitionedTableMouseHandler","IrisGridCopyCellMouseHandler","_metricCalculator","searchColumns","_searchFilter","Formatter","inputFilters","settings","changedInputFilters","inputFilter","_advancedSettings$get","advancedSettings","replaceExistingFilters","loadingScrimStartTime","loadingScrimFinishTime","now","currentTime","totalTime","openOptions","isAggEditType","_this$grid$canvasWrap","_this$grid","_this$grid2","gridMetricState","rawValue","modelRows","contextDensity","err","replaceExisting","newAdvancedFilters","newQuickFilters","quickFilter","_ref7","_ref8","filterMap","_advancedSettings$get2","clearFiltersOnLinkerFilterUpdate","_ref9","filterList","combinedText","modelRange","clearRange","_ref0","_ref1","_ref10","_settings$defaultDeci","_settings$defaultInte","_settings$truncateNum","_settings$showEmptySt","_settings$showNullStr","_settings$showExtraGr","globalColumnFormats","FormatterUtils","dateTimeFormatterOptions","defaultDecimalFormatOptions","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","isColumnFormatChanged","isDateFormattingChanged","isDecimalFormattingChanged","isIntegerFormattingChanged","isTruncateNumbersChanged","isShowEmptyStringsChanged","isShowNullStringsChanged","isShowExtraGroupColumnChanged","updatedFormats","_this$globalColumnFor","mergedColumnFormats","applyInputFiltersOnInit","reverseType","inputFiltersWithValues","resolved","newPartition","partitionColumnSet","_ref11","_ref12","columnData","loadingText","resetRanges","loadingCancelShown","loadingBlocksGrid","_this$gridWrapper$get","_this$gridWrapper","minScrimTransitionTime","maxScrimTransitionTime","scrimTransitionTime","IrisGridModel","_this$grid3","_this$grid4","_this$grid5","columnVisibleIndex","_this$grid6","allFrozenColumns","isExpandableColumnGridModel","modelIndexes","isVisible","_this$grid7","defaultWidth","calculatedWidth","_model$layoutHints$fr","_model$layoutHints2","_this$grid8","loadingMessage","_this$grid9","entries","_this$grid0","currentSorts","_this$grid1","_this$grid10","isAbs","_this$grid11","focusIndex","_this$grid12","_model$layoutHints3","_dh$SearchDisplayMode","_dh$SearchDisplayMode2","searchDisplayMode","_this$crossColumnRef","_this$crossColumnRef2","_this$grid13","_this$grid14","_this$grid15","isGotoShown","_this$gotoRowRef$curr","cellValue","_document","pendingSavePromise","containsGridCellInputField","_this3$grid","ValidationError","newPendingSavePromise","_this4","onColumnSelected","dataMap","onDataSelected","_this5","groupedColumns","isExpandable","isGrouped","_this$grid16","oldSort","newSort","_this$grid17","_this$filterInputRef","focusedFilterBarColumn","_this$filterInputRef2","onCreateChart","_ref13","_this$grid18","selectedFormat","prevCustomColumnFormatMap","columnFormattingRule","alignment","_ref14","newColumnAlignmentMap","_ref15","newOptions","_ref16","isMissingPartitionError","_this$grid19","_this$grid$state","_this$grid20","bottomViewport","bottomNonFloating","onChangeApplied","prevColumnHeaderGroups","isColumnHeaderGroup","_this$grid21","tooltip","oldCustomColumns","customColumn","removedColumnNames","newSorts","newSelectDistinctColumns","isReady","_this$grid22","_this$grid23","contentWidth","userWidths","_this$grid24","allColumns","visibleColumns","_ref17","_ref18","contentWidths","manualColumns","_i3","_contentWidth","_rollupConfig$columns","_rollupConfig$columns2","added","removed","isRollup","changes","shouldStartLoading","op","aggregation","_rollupConfig$columns3","_rollupConfig$columns4","_ref19","_rollupConfig$columns5","_rollupConfig$columns6","fileName","frozenTable","tableSubscription","snapshotRanges","includeColumnHeaders","useUnformattedValues","_ref20","newAggregations","inputString","_arguments","_this6","_this6$grid","isBackwards","selectedColumnName","gotoValueSelectedFilter","searchFromRow","isContains","isIgnoreCase","_this6$grid2","columnDataType","startDate","inputValue","_this$tableSaver","isDeletableGridModel","columnAllowedCursor","irisGridState","gridState","onStateChange","_this$gridWrapper2","shownColumnTooltip","gridRect","popperMargin","columnX","rowNumber","rowInt","_this$grid25","_this$grid26","_this$grid27","boundedLeft","boundedWidth","virtualReference","_this$tooltip","_this$grid28","prevColumnName","gotoValueManuallyChanged","prevColumn","_rollupConfig$columns7","_rollupConfig$columns8","_this7","_this$grid30","_openOptions","getDownloadWorker","onlyFetchVisibleColumns","onAdvancedSettingsChange","hoverAdvancedFilter","shownAdvancedFilter","conditionalFormatEditIndex","isTableDownloading","selectedAggregation","pendingSaveError","toastMessage","showOverflowModal","showNoPastePermissionModal","noPastePermissionError","overflowText","singleColumnHeaderHeight","focusField","_theme$filterBarHeigh","_theme$filterBarHeigh2","_this$grid29","fieldWidth","fieldHeight","advancedFilter","isBarFiltered","loadingElement","loadingStatus","_gridY","columnTooltip","_this$tooltip2","filterBar","_gridX","_gridY2","_allColumnXs","_allColumnWidths","filterBarHeight","_loop2","isFilterable","_y","_style","_advancedFilter","isFilterSet","isFilterVisible","_this7$grid","advancedFilterMenus","_gridX2","_visibleColumns","_allColumnXs2","_allColumnWidths2","_loop3","_i4","xColumnHeader","xFilterBar","_style2","_modelColumn","_advancedFilter2","isSortDirection","openOptionsStack","ChartBuilder","VisibilityOrderingBuilder","CustomColumnBuilder","RollupRows","Aggregations","AggregationEdit","vsMenu","TableSaver","tableSaver","SlideTransition","Stack","Page","ContextActions","IrisGridThemeContext","DownloadServiceWorkerUtils","_len","args","_key","IrisGridMetricCalculator"],"mappings":"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"}