@deephaven/embed-widget 1.22.2-alpha-pivot-builder.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/assets/{App-QAW9iwHs.js → App-BhL456sh.js} +2 -2
- package/build/assets/{App-QAW9iwHs.js.map → App-BhL456sh.js.map} +1 -1
- package/build/assets/{Chart-CyR_qNOm.js → Chart-Bct1OTF6.js} +2 -2
- package/build/assets/{Chart-CyR_qNOm.js.map → Chart-Bct1OTF6.js.map} +1 -1
- package/build/assets/IrisGrid-C3IJz6nb.js +20 -0
- package/build/assets/IrisGrid-C3IJz6nb.js.map +1 -0
- package/build/assets/{IrisGrid-C8fNjOoq.css → IrisGrid-Dzcv4aAu.css} +1 -1
- package/build/assets/{IrisGridThemeProvider-Dsd6y6kc.css → IrisGridThemeProvider-CEV9kNOj.css} +1 -1
- package/build/assets/{IrisGridThemeProvider-DXMkIkss.js → IrisGridThemeProvider-PGSqEwKh.js} +24 -24
- package/build/assets/IrisGridThemeProvider-PGSqEwKh.js.map +1 -0
- package/build/assets/{LocalWorkspaceStorage-DEuGH3fb.js → LocalWorkspaceStorage-DblP67AR.js} +3 -3
- package/build/assets/LocalWorkspaceStorage-DblP67AR.js.map +1 -0
- package/build/assets/{LogPanel-BugwvQ5h.js → LogPanel-C1_6X3ds.js} +7 -7
- package/build/assets/LogPanel-C1_6X3ds.js.map +1 -0
- package/build/assets/{MarkdownEditor-BuWBDjuH.js → MarkdownEditor-CPmC5it0.js} +2 -2
- package/build/assets/{MarkdownEditor-BuWBDjuH.js.map → MarkdownEditor-CPmC5it0.js.map} +1 -1
- package/build/assets/{MarkdownNotebook-8NjUVqMc.js → MarkdownNotebook-BsHvrPUA.js} +2 -2
- package/build/assets/{MarkdownNotebook-8NjUVqMc.js.map → MarkdownNotebook-BsHvrPUA.js.map} +1 -1
- package/build/assets/{index-XqFGszQX.js → index-CgAoPxrH.js} +32 -32
- package/build/assets/index-CgAoPxrH.js.map +1 -0
- package/build/assets/{index-fqNAcYS8.js → index-DK1KaCOb.js} +3 -3
- package/build/assets/{index-fqNAcYS8.js.map → index-DK1KaCOb.js.map} +1 -1
- package/build/assets/{index-CrUMbgGb.js → index-sIC4DbFu.js} +45 -45
- package/build/assets/index-sIC4DbFu.js.map +1 -0
- package/build/index.html +2 -2
- package/package.json +17 -17
- package/build/assets/IrisGrid-uVH4pXpA.js +0 -20
- package/build/assets/IrisGrid-uVH4pXpA.js.map +0 -1
- package/build/assets/IrisGridThemeProvider-DXMkIkss.js.map +0 -1
- package/build/assets/LocalWorkspaceStorage-DEuGH3fb.js.map +0 -1
- package/build/assets/LogPanel-BugwvQ5h.js.map +0 -1
- package/build/assets/index-CrUMbgGb.js.map +0 -1
- package/build/assets/index-XqFGszQX.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGrid-uVH4pXpA.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/PluginTableOptionsErrorBoundary.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); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport clamp from 'lodash.clamp';\nimport { assertNotNull } from '@deephaven/utils';\nimport GridUtils from \"../GridUtils.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nvar SLOPPY_CLICK_DISTANCE = 5;\nvar SCROLL_INTERVAL = 1000 / 60;\nvar SCROLL_DELTA = 10;\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(visibleIndex, depth, metrics, model) {\n var _modelColumns$get;\n var modelColumns = metrics.modelColumns,\n movedColumns = metrics.movedColumns,\n allColumnXs = metrics.allColumnXs,\n columnCount = metrics.columnCount,\n allColumnWidths = metrics.allColumnWidths,\n userColumnWidths = metrics.userColumnWidths,\n calculatedColumnWidths = metrics.calculatedColumnWidths,\n floatingLeftWidth = metrics.floatingLeftWidth,\n maxX = metrics.maxX;\n if (depth == null || visibleIndex == null || visibleIndex > columnCount || visibleIndex < 0) {\n return null;\n }\n var modelIndex = (_modelColumns$get = modelColumns.get(visibleIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(visibleIndex, movedColumns);\n var group = model.getColumnHeaderGroup(modelIndex, depth);\n var isColumnGroup = group != null;\n var left;\n var right;\n var range;\n if (group != null) {\n var _allColumnXs$get, _allColumnXs$get2, _allColumnWidths$get;\n var _group$getVisibleRang = group.getVisibleRange(movedColumns),\n _group$getVisibleRang2 = _slicedToArray(_group$getVisibleRang, 2),\n startVisibleIndex = _group$getVisibleRang2[0],\n endVisibleIndex = _group$getVisibleRang2[1];\n left = (_allColumnXs$get = allColumnXs.get(startVisibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : floatingLeftWidth;\n right = ((_allColumnXs$get2 = allColumnXs.get(endVisibleIndex)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : maxX) + ((_allColumnWidths$get = allColumnWidths.get(endVisibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n var _ref, _ref2, _allColumnWidths$get2;\n var possibleLeft = allColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n left = possibleLeft;\n right = left + ((_ref = (_ref2 = (_allColumnWidths$get2 = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : userColumnWidths.get(modelIndex)) !== null && _ref2 !== void 0 ? _ref2 : calculatedColumnWidths.get(modelIndex)) !== null && _ref !== void 0 ? _ref : 0);\n range = [visibleIndex, visibleIndex];\n }\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth\n };\n}\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", null);\n _defineProperty(this, \"draggingOffset\", void 0);\n _defineProperty(this, \"initialOffset\", void 0);\n _defineProperty(this, \"initialGridPoint\", void 0);\n _defineProperty(this, \"scrollingInterval\", void 0);\n _defineProperty(this, \"scrollingDirection\", void 0);\n _defineProperty(this, \"draggingColumn\", null);\n }\n setScrollInterval(grid, direction) {\n if (this.scrollingInterval != null && direction === this.scrollingDirection) {\n return;\n }\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n var metrics = grid.metrics;\n if (!metrics) {\n return;\n }\n var left = metrics.left,\n lastLeft = metrics.lastLeft,\n leftOffset = metrics.leftOffset,\n userColumnWidths = metrics.userColumnWidths,\n calculatedColumnWidths = metrics.calculatedColumnWidths,\n movedColumns = metrics.movedColumns,\n allColumnWidths = metrics.allColumnWidths;\n var nextLeft = left;\n var nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n var _userColumnWidths$get;\n nextLeft -= 1;\n var modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n var prevColumnWidth = (_userColumnWidths$get = userColumnWidths.get(modelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n var leftColumnWidth = allColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n var _userColumnWidths$get2;\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n var _modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth = (_userColumnWidths$get2 = userColumnWidths.get(_modelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : calculatedColumnWidths.get(_modelIndex);\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n var _grid$state = grid.state,\n mouseX = _grid$state.mouseX,\n mouseY = _grid$state.mouseY;\n if (metrics == null || mouseX == null || mouseY == null) {\n return;\n }\n this.moveDraggingColumn(mouseX, grid, direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA);\n grid.setState({\n left: nextLeft,\n leftOffset: nextOffset\n });\n if (direction === 'left' && nextLeft === 0 && leftOffset === 0 || direction === 'right' && nextLeft === lastLeft) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n clearScrollInterval() {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n onLeave() {\n this.clearScrollInterval();\n return false;\n }\n onDown(gridPoint, grid) {\n var model = grid.props.model;\n var x = gridPoint.x,\n column = gridPoint.column,\n columnHeaderDepth = gridPoint.columnHeaderDepth;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('Metrics not set');\n var columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n var rowHeaderWidth = metrics.rowHeaderWidth;\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n if (columnInfo.modelIndex != null && columnHeaderDepth != null && model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n onDrag(gridPoint, grid, event) {\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined) {\n return false;\n }\n var mouseX = gridPoint.x,\n mouseY = gridPoint.y;\n var columnHeaderDepth = this.initialGridPoint.columnHeaderDepth;\n var model = grid.props.model;\n var draggingColumn = this.draggingColumn;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('Metrics not set');\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (!draggingColumn && Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE && Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n var initialColumnInfo = getColumnInfo(this.initialGridPoint.column, columnHeaderDepth, metrics, model);\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width\n };\n var startColumn = getColumnInfo(draggingColumn.range[0], 0, metrics, model);\n var endColumn = getColumnInfo(draggingColumn.range[1], 0, metrics, model);\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n this.draggingColumn = draggingColumn;\n grid.setState({\n draggingColumn,\n isDragging: true\n });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX, grid, deltaX) {\n var _draggingParentGroup$;\n if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined || this.draggingColumn == null || deltaX === 0) {\n return;\n }\n var metrics = grid.metrics;\n assertNotNull(metrics, 'Metrics not set');\n var gridX = metrics.gridX;\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (this.draggingOffset < this.initialOffset && this.initialOffset < this.draggingOffset + deltaX || this.draggingOffset > this.initialOffset && this.initialOffset > this.draggingOffset + deltaX) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n var draggingColumnDepth = this.draggingColumn.depth;\n var model = grid.props.model;\n var movedColumns = grid.state.movedColumns;\n var floatingLeftWidth = metrics.floatingLeftWidth,\n width = metrics.width,\n columnHeaderMaxDepth = metrics.columnHeaderMaxDepth,\n allColumnXs = metrics.allColumnXs;\n var isDraggingLeft = deltaX < 0;\n var draggingColumn = getColumnInfo(this.draggingColumn.range[0], draggingColumnDepth, metrics, model);\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n var floatingDraggingLeft = mouseX - this.draggingOffset - gridX;\n var floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n var swapColumn = getColumnInfo(GridUtils.getColumnAtX(clamp(isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight, floatingLeftWidth, width) + gridX, metrics, true), draggingColumnDepth, metrics, model);\n var parentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup !== undefined) {\n var parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n var _allColumnXs$get3;\n var _newMovedColumns = this.moveColumn(draggingColumn, parentVisibleRange[0], movedColumns);\n this.draggingOffset = mouseX - ((_allColumnXs$get3 = allColumnXs.get(parentVisibleRange[0])) !== null && _allColumnXs$get3 !== void 0 ? _allColumnXs$get3 : 0);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n var _getColumnInfo;\n var _newMovedColumns2 = this.moveColumn(draggingColumn, parentVisibleRange[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n var _ref3 = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {},\n _ref3$right = _ref3.right,\n parentRight = _ref3$right === void 0 ? 0 : _ref3$right;\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: _newMovedColumns2\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n var toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (toVisibleIndex < draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (toVisibleIndex > draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {\n toVisibleIndex -= 1;\n }\n }\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n var _newMovedColumns3 = this.moveColumn(draggingColumn, toVisibleIndex, movedColumns);\n grid.setState({\n movedColumns: _newMovedColumns3,\n draggingColumn: this.draggingColumn\n });\n }\n var toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n var _toColumnInfo$left;\n this.draggingOffset = mouseX - ((_toColumnInfo$left = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.left) !== null && _toColumnInfo$left !== void 0 ? _toColumnInfo$left : 0);\n } else {\n var _toColumnInfo$right;\n this.draggingOffset = mouseX - (((_toColumnInfo$right = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.right) !== null && _toColumnInfo$right !== void 0 ? _toColumnInfo$right : 0) - draggingColumn.width);\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: mouseX - this.draggingOffset - gridX\n });\n grid.setState({\n draggingColumn: this.draggingColumn\n });\n return;\n }\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (isDraggingLeft && draggingColumn.visibleIndex < swapColumn.visibleIndex || !isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex) {\n return;\n }\n var switchPoint = swapColumn.left + swapColumn.width * 0.5;\n var draggingParentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n var maxDepthSwapGroup;\n var maxSwapDepth = ((_draggingParentGroup$ = draggingParentGroup === null || draggingParentGroup === void 0 ? void 0 : draggingParentGroup.depth) !== null && _draggingParentGroup$ !== void 0 ? _draggingParentGroup$ : columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(swapColumn.modelIndex, maxSwapDepth);\n maxSwapDepth -= 1;\n }\n var newMovedColumns;\n if (isDraggingLeft && floatingDraggingLeft < switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[0])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[0], movedColumns);\n }\n if (!isDraggingLeft && floatingDraggingRight > switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[1])) {\n newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);\n }\n if (!newMovedColumns) {\n return;\n }\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n left: floatingDraggingLeft\n });\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(draggingColumn, to, movedColumns) {\n var newMovedColumns = draggingColumn.isColumnGroup ? GridUtils.moveRange(draggingColumn.range, to, movedColumns) : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n var moveDistance = to - draggingColumn.range[0];\n var newDraggingRange = [draggingColumn.range[0] + moveDistance, draggingColumn.range[1] + moveDistance];\n if (this.draggingColumn) {\n this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {\n range: newDraggingRange\n });\n }\n return newMovedColumns;\n }\n onUp(gridPoint, grid) {\n this.cursor = null;\n this.clearScrollInterval();\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridColumnMoveMouseHandler;\n//# sourceMappingURL=GridColumnMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridHorizontalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getLeftWithOffsetFromRawLeft(grid, rawLeft) {\n var theme = grid.getTheme();\n var metrics = grid.metrics,\n metricCalculator = grid.metricCalculator;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToColumn) {\n var _left = Math.round(rawLeft);\n var _leftOffset = 0;\n return {\n left: _left,\n leftOffset: _leftOffset\n };\n }\n var left = Math.floor(rawLeft);\n var leftOffsetPercent = rawLeft - left;\n var columnWidth = metrics.allColumnWidths.get(left);\n if (columnWidth == null) {\n var metricState = grid.getMetricState();\n columnWidth = metricCalculator.getVisibleColumnWidth(left, metricState);\n }\n var leftOffset = columnWidth * leftOffsetPercent;\n return {\n left,\n leftOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var scrollBarSize = theme.scrollBarSize,\n scrollBarHoverSize = theme.scrollBarHoverSize;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x,\n y = gridPoint.y;\n var barLeft = metrics.barLeft,\n barWidth = metrics.barWidth,\n height = metrics.height,\n hasHorizontalBar = metrics.hasHorizontalBar;\n return hasHorizontalBar && scrollBarSize > 0 && y >= height - scrollBarHoverSize && y < height && x > barLeft && x < barLeft + barWidth;\n }\n getLeftWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x;\n var barWidth = metrics.barWidth,\n handleWidth = metrics.handleWidth,\n lastLeft = metrics.lastLeft,\n barLeft = metrics.barLeft,\n columnCount = metrics.columnCount,\n scrollableContentWidth = metrics.scrollableContentWidth,\n scrollableViewportWidth = metrics.scrollableViewportWidth;\n var mouseBarX = x - barLeft;\n var scrollPercent = clamp((mouseBarX - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barWidth - handleWidth), 0, 1);\n if (columnCount === 1) {\n return {\n left: 0,\n leftOffset: scrollPercent * (scrollableContentWidth - scrollableViewportWidth)\n };\n }\n var rawLeft = scrollPercent * lastLeft;\n return GridHorizontalScrollBarMouseHandler.getLeftWithOffsetFromRawLeft(grid, rawLeft);\n }\n onDown(gridPoint, grid) {\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x;\n var handleWidth = metrics.handleWidth,\n barLeft = metrics.barLeft,\n scrollX = metrics.scrollX;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarX = x - barLeft;\n if (mouseBarX >= scrollX && mouseBarX <= scrollX + handleWidth) {\n // Grabbed the horizontal handle\n this.dragOffset = mouseBarX - scrollX;\n grid.setState({\n isDraggingHorizontalScrollBar: true\n });\n } else {\n this.dragOffset = 0;\n var _this$getLeftWithOffs = this.getLeftWithOffset(gridPoint, grid),\n newLeft = _this$getLeftWithOffs.left,\n newLeftOffset = _this$getLeftWithOffs.leftOffset;\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var _this$getLeftWithOffs2 = this.getLeftWithOffset(gridPoint, grid),\n newLeft = _this$getLeftWithOffs2.left,\n newLeftOffset = _this$getLeftWithOffs2.leftOffset;\n grid.setViewState({\n left: newLeft,\n leftOffset: newLeftOffset,\n isDraggingHorizontalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingHorizontalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridHorizontalScrollBarMouseHandler;\n//# sourceMappingURL=GridHorizontalScrollBarMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\nclass GridRowMoveMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"cursor\", 'move');\n _defineProperty(this, \"draggingOffset\", void 0);\n }\n onDown(gridPoint, grid) {\n var model = grid.props.model;\n var x = gridPoint.x,\n y = gridPoint.y,\n row = gridPoint.row;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var columnHeaderHeight = metrics.columnHeaderHeight,\n rowHeaderWidth = metrics.rowHeaderWidth,\n allRowYs = metrics.allRowYs;\n if (x <= rowHeaderWidth && row !== null && model.isRowMovable(row)) {\n var rowY = getOrThrow(allRowYs, row);\n this.draggingOffset = y - rowY - columnHeaderHeight;\n grid.setState({\n draggingRowOffset: this.draggingOffset\n });\n }\n return false;\n }\n onDrag(gridPoint, grid) {\n if (this.draggingOffset == null) {\n return false;\n }\n var model = grid.props.model;\n var draggingRow = grid.state.draggingRow;\n var _grid$state = grid.state,\n mouseX = _grid$state.mouseX,\n mouseY = _grid$state.mouseY;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n if (draggingRow == null) {\n var _grid$getGridPointFro = grid.getGridPointFromXY(mouseX, mouseY),\n row = _grid$getGridPointFro.row;\n if (row != null && !model.isRowMovable(row)) {\n return false;\n }\n draggingRow = row;\n grid.setState({\n draggingRow,\n isDragging: true\n });\n if (draggingRow == null) {\n return false;\n }\n }\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var top = metrics.top,\n lastTop = metrics.lastTop,\n bottom = metrics.bottom,\n bottomVisible = metrics.bottomVisible,\n rowCount = metrics.rowCount,\n columnHeaderHeight = metrics.columnHeaderHeight,\n allRowHeights = metrics.allRowHeights,\n allRowYs = metrics.allRowYs,\n height = metrics.height;\n var minY = columnHeaderHeight;\n if (top < draggingRow) {\n var topRow = draggingRow - 1;\n minY = getOrThrow(allRowYs, topRow) + getOrThrow(allRowHeights, topRow) * 0.5 + columnHeaderHeight;\n }\n var maxY = height;\n if (draggingRow < bottom) {\n var bottomRow = draggingRow + 1;\n maxY = getOrThrow(allRowYs, bottomRow) + getOrThrow(allRowHeights, bottomRow) * 0.5 + columnHeaderHeight;\n }\n var movedRows = grid.state.movedRows;\n if (mouseY < minY && draggingRow > 0 && model.isRowMovable(draggingRow - 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow - 1, movedRows);\n draggingRow -= 1;\n } else if (maxY < mouseY && draggingRow < rowCount - 1 && model.isRowMovable(draggingRow + 1)) {\n movedRows = GridUtils.moveItem(draggingRow, draggingRow + 1, movedRows);\n draggingRow += 1;\n }\n grid.setState({\n movedRows,\n draggingRow\n });\n var minMoveY = columnHeaderHeight + getOrThrow(allRowHeights, top) * 0.5;\n var maxMoveY = columnHeaderHeight + getOrThrow(allRowYs, bottomVisible) + getOrThrow(allRowHeights, bottomVisible) * 0.5;\n if (mouseY < minMoveY && top > 0) {\n grid.setState({\n top: top - 1\n });\n } else if (mouseY > maxMoveY && top < lastTop) {\n grid.setState({\n top: top + 1\n });\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.draggingOffset !== undefined) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingRowOffset: null,\n draggingRow: null,\n isDragging: false\n });\n return true;\n }\n return false;\n }\n}\nexport default GridRowMoveMouseHandler;\n//# sourceMappingURL=GridRowMoveMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridSeparatorMouseHandler from \"./GridSeparatorMouseHandler.js\";\nclass GridRowSeparatorMouseHandler extends GridSeparatorMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"hiddenCursor\", 's-resize');\n _defineProperty(this, \"defaultCursor\", 'row-resize');\n _defineProperty(this, \"pointProperty\", 'y');\n _defineProperty(this, \"userSizesProperty\", 'userRowHeights');\n _defineProperty(this, \"visibleOffsetProperty\", 'visibleRowYs');\n _defineProperty(this, \"visibleSizesProperty\", 'visibleRowHeights');\n _defineProperty(this, \"marginProperty\", 'columnHeaderHeight');\n _defineProperty(this, \"calculatedSizesProperty\", 'calculatedRowHeights');\n _defineProperty(this, \"initialSizesProperty\", 'initialRowHeights');\n _defineProperty(this, \"modelIndexesProperty\", 'modelRows');\n _defineProperty(this, \"firstIndexProperty\", 'firstRow');\n _defineProperty(this, \"treePaddingProperty\", 'treePaddingY');\n _defineProperty(this, \"getHiddenItems\", GridUtils.getHiddenRows);\n _defineProperty(this, \"getNextShownItem\", GridUtils.getNextShownRow);\n _defineProperty(this, \"getSeparator\", GridRowSeparatorMouseHandler.getRowSeparator);\n }\n static getRowSeparator(gridPoint, metrics, model, theme) {\n if (!theme.allowRowResize) {\n return null;\n }\n var x = gridPoint.x,\n y = gridPoint.y;\n var index = GridUtils.getRowSeparatorIndex(x, y, metrics, theme);\n return index != null ? {\n index,\n depth: 0\n } : null;\n }\n setSize(metricCalculator, modelIndex, size) {\n metricCalculator.setRowHeight(modelIndex, size);\n }\n resetSize(metricCalculator, modelIndex) {\n metricCalculator.resetRowHeight(modelIndex);\n }\n updateSeparator(grid, separator) {\n grid.setState({\n draggingRowSeparator: separator,\n isDragging: separator !== null\n });\n }\n}\nexport default GridRowSeparatorMouseHandler;\n//# sourceMappingURL=GridRowSeparatorMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass GridScrollBarCornerMouseHandler extends GridMouseHandler {\n isInCorner(gridPoint, grid) {\n var theme = grid.getTheme();\n var scrollBarSize = theme.scrollBarSize;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x,\n y = gridPoint.y;\n var width = metrics.width,\n height = metrics.height,\n hasVerticalBar = metrics.hasVerticalBar,\n hasHorizontalBar = metrics.hasHorizontalBar;\n return scrollBarSize > 0 && hasVerticalBar && hasHorizontalBar && x >= width - scrollBarSize && y >= height - scrollBarSize && x <= width && y <= height;\n }\n onDown(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onUp(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInCorner(gridPoint, grid);\n }\n}\nexport default GridScrollBarCornerMouseHandler;\n//# sourceMappingURL=GridScrollBarCornerMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\n/* eslint class-methods-use-this: \"off\" */\nclass GridVerticalScrollBarMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragOffset\", void 0);\n // to trigger pointer event blocking\n _defineProperty(this, \"cursor\", 'default');\n }\n static getTopWithOffsetFromRawTop(grid, rawTop) {\n var theme = grid.getTheme();\n var metrics = grid.metrics,\n metricCalculator = grid.metricCalculator;\n if (!metrics) throw new Error('metrics not set');\n if (theme.scrollSnapToRow) {\n var _top = Math.round(rawTop);\n var _topOffset = 0;\n return {\n top: _top,\n topOffset: _topOffset\n };\n }\n var top = Math.floor(rawTop);\n var topOffsetPercent = rawTop - top;\n var rowHeight = metrics.allRowHeights.get(top);\n if (rowHeight == null) {\n var metricState = grid.getMetricState();\n rowHeight = metricCalculator.getVisibleRowHeight(top, metricState);\n }\n var topOffset = rowHeight * topOffsetPercent;\n return {\n top,\n topOffset\n };\n }\n isInScrollBar(gridPoint, grid) {\n var theme = grid.getTheme();\n var scrollBarSize = theme.scrollBarSize,\n scrollBarHoverSize = theme.scrollBarHoverSize;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var x = gridPoint.x,\n y = gridPoint.y;\n var barTop = metrics.barTop,\n barHeight = metrics.barHeight,\n width = metrics.width,\n hasVerticalBar = metrics.hasVerticalBar;\n return hasVerticalBar && scrollBarSize > 0 && x >= width - scrollBarHoverSize && x < width && y > barTop && y < barTop + barHeight;\n }\n getTopWithOffset(gridPoint, grid) {\n var _this$dragOffset;\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var y = gridPoint.y;\n var barHeight = metrics.barHeight,\n handleHeight = metrics.handleHeight,\n lastTop = metrics.lastTop,\n barTop = metrics.barTop,\n rowCount = metrics.rowCount,\n scrollableContentHeight = metrics.scrollableContentHeight,\n scrollableViewportHeight = metrics.scrollableViewportHeight;\n var mouseBarY = y - barTop;\n var scrollPercent = clamp((mouseBarY - ((_this$dragOffset = this.dragOffset) !== null && _this$dragOffset !== void 0 ? _this$dragOffset : 0)) / (barHeight - handleHeight), 0, 1);\n if (rowCount === 1) {\n return {\n top: 0,\n topOffset: scrollPercent * (scrollableContentHeight - scrollableViewportHeight)\n };\n }\n var rawTop = scrollPercent * lastTop;\n return GridVerticalScrollBarMouseHandler.getTopWithOffsetFromRawTop(grid, rawTop);\n }\n onDown(gridPoint, grid) {\n var metrics = grid.metrics;\n if (!metrics) throw new Error('metrics not set');\n var y = gridPoint.y;\n var handleHeight = metrics.handleHeight,\n barTop = metrics.barTop,\n scrollY = metrics.scrollY;\n if (!this.isInScrollBar(gridPoint, grid)) {\n return false;\n }\n var mouseBarY = y - barTop;\n if (mouseBarY >= scrollY && mouseBarY <= scrollY + handleHeight) {\n // Grabbed the vertical handle\n this.dragOffset = mouseBarY - scrollY;\n grid.setState({\n isDraggingVerticalScrollBar: true\n });\n } else {\n // clicked elsewhere in bar\n this.dragOffset = 0;\n var _this$getTopWithOffse = this.getTopWithOffset(gridPoint, grid),\n newTop = _this$getTopWithOffse.top,\n newTopOffset = _this$getTopWithOffse.topOffset;\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n }\n return true;\n }\n onMove(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n onDrag(gridPoint, grid) {\n if (this.dragOffset != null) {\n var _this$getTopWithOffse2 = this.getTopWithOffset(gridPoint, grid),\n newTop = _this$getTopWithOffse2.top,\n newTopOffset = _this$getTopWithOffse2.topOffset;\n grid.setViewState({\n top: newTop,\n topOffset: newTopOffset,\n isDraggingVerticalScrollBar: true,\n isDragging: true\n });\n return true;\n }\n return false;\n }\n onUp(gridPoint, grid) {\n if (this.dragOffset !== undefined) {\n this.dragOffset = undefined;\n grid.setState({\n isDraggingVerticalScrollBar: false,\n isDragging: false\n });\n }\n return this.isInScrollBar(gridPoint, grid);\n }\n onClick(gridPoint, grid) {\n return this.isInScrollBar(gridPoint, grid);\n }\n}\nexport default GridVerticalScrollBarMouseHandler;\n//# sourceMappingURL=GridVerticalScrollBarMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick(_ref, grid) {\n var column = _ref.column,\n row = _ref.row;\n var model = grid.props.model;\n if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\nexport default EditMouseHandler;\n//# sourceMappingURL=EditMouseHandler.js.map","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 model = grid.props.model;\n var columnCount = model.columnCount;\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 _model = grid.props.model;\n var _columnCount = _model.columnCount,\n rowCount = _model.rowCount;\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 _grid$state = grid.state,\n cursorRow = _grid$state.cursorRow,\n cursorColumn = _grid$state.cursorColumn,\n selectionEndColumn = _grid$state.selectionEndColumn,\n selectionEndRow = _grid$state.selectionEndRow;\n var column = isShiftKey ? selectionEndColumn : cursorColumn;\n var row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n var model = grid.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\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 theme = grid.props.theme;\n var _theme$autoSelectRow = theme.autoSelectRow,\n autoSelectRow = _theme$autoSelectRow === void 0 ? false : _theme$autoSelectRow,\n _theme$autoSelectColu = theme.autoSelectColumn,\n autoSelectColumn = _theme$autoSelectColu === void 0 ? false : _theme$autoSelectColu;\n if (autoSelectRow && deltaColumn !== 0) {\n var lastLeft = grid.metrics.lastLeft;\n var left = grid.state.left;\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 lastTop = grid.metrics.lastTop;\n var top = grid.state.top;\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 _grid$state2 = grid.state,\n cursorColumn = _grid$state2.cursorColumn,\n selectionEndRow = _grid$state2.selectionEndRow;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row == null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var metricCalculator = grid.metricCalculator;\n var _metricCalculator$get = metricCalculator.getMetrics(metricState),\n bottomVisible = _metricCalculator$get.bottomVisible,\n topVisible = _metricCalculator$get.topVisible,\n hasHorizontalBar = _metricCalculator$get.hasHorizontalBar;\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 _grid$state3 = grid.state,\n selectionEndRow = _grid$state3.selectionEndRow,\n cursorColumn = _grid$state3.cursorColumn;\n var row = selectionEndRow;\n var column = cursorColumn;\n if (row === null) {\n return false;\n }\n var metricState = grid.getMetricState();\n var metricCalculator = grid.metricCalculator;\n var _metricCalculator$get2 = metricCalculator.getMetrics(metricState),\n bottomVisible = _metricCalculator$get2.bottomVisible,\n topVisible = _metricCalculator$get2.topVisible,\n hasHorizontalBar = _metricCalculator$get2.hasHorizontalBar,\n rowCount = _metricCalculator$get2.rowCount,\n lastTop = _metricCalculator$get2.lastTop;\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 selectedRanges = grid.state.selectedRanges;\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 model = grid.props.model;\n var row = range.startRow,\n column = range.startColumn;\n if (row != null) {\n var modelRow = grid.getModelRow(row);\n if ((column === 0 || column == null) && isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n grid.toggleRowExpanded(row);\n return true;\n }\n }\n }\n }\n return false;\n }\n}\nexport default TreeKeyHandler;\n//# sourceMappingURL=TreeKeyHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridRange from \"../GridRange.js\";\nimport KeyHandler from \"../KeyHandler.js\";\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nclass EditKeyHandler extends KeyHandler {\n onDown(event, grid) {\n if (GridUtils.isModifierKeyDown(event)) {\n return false;\n }\n var model = grid.props.model;\n var _grid$state = grid.state,\n cursorColumn = _grid$state.cursorColumn,\n cursorRow = _grid$state.cursorRow;\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 parseValueFromText(text) {\n var rows = text.trim().split('\\n').map(row => row.split('\\t'));\n if (rows.length === 1 && rows[0].length === 1) {\n return rows[0][0];\n }\n return rows;\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 childNodes = element.childNodes;\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 cleanup = () => {\n dummyInput.removeEventListener('paste', pasteListener);\n dummyInput.removeEventListener('input', inputListener);\n dummyInput.remove();\n grid.focus();\n };\n var plainText = '';\n\n // Capture text/plain from the clipboard during the paste event.\n // HTML element parsing is used as a fallback if text/plain is unavailable.\n var pasteListener = e => {\n var _clipboardEvent$clipb, _clipboardEvent$clipb2;\n var clipboardEvent = e;\n plainText = (_clipboardEvent$clipb = (_clipboardEvent$clipb2 = clipboardEvent.clipboardData) === null || _clipboardEvent$clipb2 === void 0 ? void 0 : _clipboardEvent$clipb2.getData('text/plain')) !== null && _clipboardEvent$clipb !== void 0 ? _clipboardEvent$clipb : '';\n };\n var inputListener = () => {\n var _ref;\n cleanup();\n var value = (_ref = plainText.length > 0 ? parseValueFromText(plainText) : null) !== null && _ref !== void 0 ? _ref : parseValueFromElement(dummyInput);\n if (value != null) {\n grid.pasteValue(value);\n }\n };\n dummyInput.addEventListener('paste', pasteListener);\n dummyInput.addEventListener('input', inputListener);\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { SELECTION_DIRECTION } from \"./GridRange.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport \"./CellInputField.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar directionForKey = key => {\n switch (key) {\n case 'ArrowDown':\n return SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return SELECTION_DIRECTION.RIGHT;\n default:\n return undefined;\n }\n};\nexport function CellInputField(_ref) {\n var selectionRange = _ref.selectionRange,\n _ref$className = _ref.className,\n className = _ref$className === void 0 ? '' : _ref$className,\n _ref$disabled = _ref.disabled,\n disabled = _ref$disabled === void 0 ? false : _ref$disabled,\n _ref$value = _ref.value,\n propsValue = _ref$value === void 0 ? '' : _ref$value,\n _ref$isQuickEdit = _ref.isQuickEdit,\n propsIsQuickEdit = _ref$isQuickEdit === void 0 ? true : _ref$isQuickEdit,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? EMPTY_FUNCTION : _ref$onChange,\n _ref$onCancel = _ref.onCancel,\n onCancel = _ref$onCancel === void 0 ? EMPTY_FUNCTION : _ref$onCancel,\n _ref$onDone = _ref.onDone,\n onDone = _ref$onDone === void 0 ? EMPTY_FUNCTION : _ref$onDone,\n _ref$onContextMenu = _ref.onContextMenu,\n onContextMenu = _ref$onContextMenu === void 0 ? EMPTY_FUNCTION : _ref$onContextMenu,\n style = _ref.style;\n var inputField = useRef(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n var isCancelled = useRef(false);\n var _useState = useState(propsValue),\n _useState2 = _slicedToArray(_useState, 1),\n initialValue = _useState2[0];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isChanged = _useState4[0],\n setIsChanged = _useState4[1];\n var _useState5 = useState(propsIsQuickEdit),\n _useState6 = _slicedToArray(_useState5, 2),\n isQuickEdit = _useState6[0],\n setIsQuickEdit = _useState6[1];\n var _useState7 = useState(propsValue),\n _useState8 = _slicedToArray(_useState7, 2),\n value = _useState8[0],\n setValue = _useState8[1];\n\n // Init field selection\n useEffect(function selectInputField() {\n var field = inputField.current;\n if (field == null) {\n return;\n }\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n }, [selectionRange]);\n var sendUpdate = useCallback(newValue => {\n onChange(newValue);\n }, [onChange]);\n var handleChange = useCallback(event => {\n var newValue = event.target.value;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n }, [sendUpdate, setValue, setIsChanged]);\n var handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n var handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n var handleCommit = useCallback(function (direction) {\n var fillRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n onDone(value, {\n direction,\n fillRange\n });\n }, [onDone, value]);\n var handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n var handleKeyDown = useCallback(event => {\n event.stopPropagation();\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(undefined, true);\n } else if (event.altKey) {\n var newValue = \"\".concat(value, \"\\n\");\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.UP : SELECTION_DIRECTION.DOWN);\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(event.shiftKey ? SELECTION_DIRECTION.LEFT : SELECTION_DIRECTION.RIGHT);\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n }, [handleCancel, handleCommit, isQuickEdit, setValue, setIsChanged, sendUpdate, value]);\n 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 // Track if this Grid instance added the grid-block-events class\n // Used to ensure only the Grid that added the class removes it\n _defineProperty(this, \"hasAddedBlockEvents\", void 0);\n _defineProperty(this, \"dragTimer\", void 0);\n _defineProperty(this, \"keyHandlers\", void 0);\n _defineProperty(this, \"mouseHandlers\", void 0);\n _defineProperty(this, \"getCachedKeyHandlers\", memoize(keyHandlers => [...keyHandlers, ...this.keyHandlers].sort((a, b) => a.order - b.order)));\n _defineProperty(this, \"getCachedMouseHandlers\", memoize(mouseHandlers => [...mouseHandlers, ...this.mouseHandlers].sort((a, b) => a.order - b.order)));\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleEditCellCancel = this.handleEditCellCancel.bind(this);\n this.handleEditCellChange = this.handleEditCellChange.bind(this);\n this.handleEditCellCommit = this.handleEditCellCommit.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.notifyKeyboardHandlers = this.notifyKeyboardHandlers.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseDrag = this.handleMouseDrag.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.getSelectedRanges = this.getSelectedRanges.bind(this);\n var isStuckToBottom = props.isStuckToBottom,\n isStuckToRight = props.isStuckToRight,\n metricCalculator = props.metricCalculator,\n movedColumns = props.movedColumns,\n movedRows = props.movedRows,\n renderer = props.renderer;\n this.renderer = renderer || new GridRenderer();\n this.metricCalculator = metricCalculator || new GridMetricCalculator();\n this.canvas = null;\n this.canvasContext = null;\n this.canvasWrapper = /*#__PURE__*/React.createRef();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n this.animationFrame = null;\n this.prevMetrics = null;\n this.metrics = null;\n this.renderState = {};\n\n // Track the cursor that is currently added to the document\n // Add to document so that when dragging the cursor stays, even if mouse leaves the canvas\n // Note: on document, not body so that cursor styling can be combined with\n // blocked pointer events that would otherwise prevent cursor styling from showing\n this.documentCursor = null;\n this.hasAddedBlockEvents = false;\n this.dragTimer = null;\n\n // specify handler ordering, such that any extensions can insert handlers in between\n this.keyHandlers = [new EditKeyHandler(400), new PasteKeyHandler(450), new SelectionKeyHandler(500), new TreeKeyHandler(900)];\n this.mouseHandlers = [new GridRowSeparatorMouseHandler(100), new GridColumnSeparatorMouseHandler(200), new GridRowMoveMouseHandler(300), new GridColumnMoveMouseHandler(400), new EditMouseHandler(450), new GridVerticalScrollBarMouseHandler(500), new GridHorizontalScrollBarMouseHandler(600), new GridScrollBarCornerMouseHandler(700), new GridRowTreeMouseHandler(800), new GridTokenMouseHandler(875), new GridSelectionMouseHandler(900)];\n 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 _this$props = this.props,\n isStuckToBottom = _this$props.isStuckToBottom,\n isStuckToRight = _this$props.isStuckToRight;\n var _this$getStickyScroll = this.getStickyScrollPosition(isStuckToBottom, isStuckToRight),\n top = _this$getStickyScroll.top,\n left = _this$getStickyScroll.left;\n this.setState({\n top,\n left\n });\n }\n componentDidUpdate(prevProps, prevState) {\n var renderError = this.state.renderError;\n\n // Render errors mean we can't recover\n if (renderError != null) {\n throw renderError;\n }\n var changedProps = getChangedKeys(prevProps, this.props);\n var changedState = getChangedKeys(prevState, this.state);\n // We don't need to bother re-checking any of the metrics if no props have changed or only the children have changed\n if ((changedProps.length === 0 || changedProps.length === 1 && changedProps[0] === 'children') && changedState.length === 0) {\n return;\n }\n var _this$props2 = this.props,\n isStickyBottom = _this$props2.isStickyBottom,\n isStickyRight = _this$props2.isStickyRight,\n movedColumns = _this$props2.movedColumns,\n movedRows = _this$props2.movedRows,\n onMovedColumnsChanged = _this$props2.onMovedColumnsChanged,\n onMoveColumnComplete = _this$props2.onMoveColumnComplete,\n onMovedRowsChanged = _this$props2.onMovedRowsChanged,\n onMoveRowComplete = _this$props2.onMoveRowComplete,\n renderer = _this$props2.renderer,\n metricCalculator = _this$props2.metricCalculator;\n var prevIsStickyBottom = prevProps.isStickyBottom,\n prevIsStickyRight = prevProps.isStickyRight,\n prevPropMovedColumns = prevProps.movedColumns,\n prevPropMovedRows = prevProps.movedRows;\n var prevStateMovedColumns = prevState.movedColumns,\n prevStateMovedRows = prevState.movedRows;\n var _this$state = this.state,\n draggingColumn = _this$state.draggingColumn,\n draggingRow = _this$state.draggingRow,\n currentStateMovedColumns = _this$state.movedColumns,\n currentStateMovedRows = _this$state.movedRows;\n var stateUpdates = {};\n if (prevPropMovedColumns !== movedColumns) {\n stateUpdates.movedColumns = movedColumns;\n }\n if (prevPropMovedRows !== movedRows) {\n stateUpdates.movedRows = movedRows;\n }\n if (prevStateMovedColumns !== currentStateMovedColumns) {\n onMovedColumnsChanged(currentStateMovedColumns);\n }\n if (prevState.draggingColumn != null && draggingColumn == null) {\n onMoveColumnComplete(currentStateMovedColumns);\n }\n if (prevStateMovedRows !== currentStateMovedRows) {\n onMovedRowsChanged(currentStateMovedRows);\n }\n if (prevState.draggingRow != null && draggingRow == null) {\n onMoveRowComplete(currentStateMovedRows);\n }\n if (isStickyBottom !== prevIsStickyBottom) {\n stateUpdates.isStuckToBottom = false;\n }\n if (isStickyRight !== prevIsStickyRight) {\n stateUpdates.isStuckToRight = false;\n }\n\n // Sync renderer/metricCalculator props to instance fields so callers can\n // swap them at runtime (e.g. pivot model swap supplies a pivot renderer\n // and metric calculator).\n if (renderer !== prevProps.renderer) {\n this.renderer = renderer !== null && renderer !== void 0 ? renderer : new GridRenderer();\n }\n if (metricCalculator !== prevProps.metricCalculator) {\n this.metricCalculator = metricCalculator !== null && metricCalculator !== void 0 ? metricCalculator : new GridMetricCalculator();\n }\n var updatedState = _objectSpread(_objectSpread({}, this.state), stateUpdates);\n this.updateMetrics(updatedState);\n this.requestUpdateCanvas();\n if (this.needToUpdateScroll()) {\n var _this$getStickyScroll2 = this.getStickyScrollPosition(isStickyBottom, isStickyRight),\n top = _this$getStickyScroll2.top,\n left = _this$getStickyScroll2.left;\n updatedState.top = top;\n updatedState.left = left;\n }\n if (this.validateSelection()) {\n this.checkSelectionChange(prevState);\n }\n this.setState(updatedState);\n }\n componentWillUnmount() {\n var _this$canvas2;\n if (this.animationFrame != null) {\n cancelAnimationFrame(this.animationFrame);\n }\n (_this$canvas2 = this.canvas) === null || _this$canvas2 === void 0 || _this$canvas2.removeEventListener('wheel', this.handleWheel);\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n this.resizeObserver.disconnect();\n this.stopDragTimer();\n this.removeDocumentCursor();\n }\n getTheme() {\n var theme = this.props.theme;\n return Grid.getTheme(this.context, theme);\n }\n getGridPointFromEvent(event) {\n assertIsDefined(this.canvas);\n var rect = this.canvas.getBoundingClientRect();\n var x = event.clientX - rect.left;\n var y = event.clientY - rect.top;\n return this.getGridPointFromXY(x, y);\n }\n getGridPointFromXY(x, y) {\n if (!this.metrics) throw new Error('metrics must be set');\n return GridUtils.getGridPointFromXY(x, y, this.metrics);\n }\n getMetricState() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n var theme = this.getTheme();\n var _this$props3 = this.props,\n model = _this$props3.model,\n stateOverride = _this$props3.stateOverride;\n if (!this.canvasContext || !this.canvas) {\n throw new Error('Canvas and context must be defined to get metrics');\n }\n var context = this.canvasContext;\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n var left = state.left,\n top = state.top,\n leftOffset = state.leftOffset,\n topOffset = state.topOffset,\n movedColumns = state.movedColumns,\n movedRows = state.movedRows,\n isDraggingHorizontalScrollBar = state.isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar = state.isDraggingVerticalScrollBar,\n draggingColumn = state.draggingColumn;\n return _objectSpread({\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n context,\n theme,\n model,\n movedColumns,\n movedRows,\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n draggingColumn\n }, stateOverride);\n }\n getKeyHandlers() {\n var keyHandlers = this.props.keyHandlers;\n return this.getCachedKeyHandlers(keyHandlers);\n }\n getMouseHandlers() {\n var mouseHandlers = this.props.mouseHandlers;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param columnIndex The column index to get the model for\n * @returns The model index\n */\n getModelColumn(columnIndex) {\n var _this$metrics;\n var modelIndex = (_this$metrics = this.metrics) === null || _this$metrics === void 0 || (_this$metrics = _this$metrics.modelColumns) === null || _this$metrics === void 0 ? void 0 : _this$metrics.get(columnIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for column \".concat(columnIndex));\n }\n return modelIndex;\n }\n\n /**\n * Translate from the provided visible index to the model index\n * @param rowIndex The row index to get the model for\n * @returns The model index\n */\n getModelRow(rowIndex) {\n var _this$metrics2;\n var modelIndex = (_this$metrics2 = this.metrics) === null || _this$metrics2 === void 0 || (_this$metrics2 = _this$metrics2.modelRows) === null || _this$metrics2 === void 0 ? void 0 : _this$metrics2.get(rowIndex);\n if (modelIndex === undefined) {\n throw new Error(\"Unable to get ModelIndex for row \".concat(rowIndex));\n }\n return modelIndex;\n }\n\n /**\n * Toggle a row between expanded and collapsed states\n * @param row The row to toggle expansion for\n * @param expandDescendants True if nested rows should be expanded, false otherwise\n */\n toggleRowExpanded(row) {\n var expandDescendants = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var modelRow = this.getModelRow(row);\n var model = this.props.model;\n // We only want to set expansion if the row is expandable\n // If it's not, still move the cursor to that position, as it may be outside of the current viewport and we don't know if it's expandable yet\n if (isExpandableGridModel(model) && model.isRowExpandable(modelRow)) {\n model.setRowExpanded(modelRow, !model.isRowExpanded(modelRow), expandDescendants);\n }\n 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 _this$metrics3 = this.metrics,\n bottomVisible = _this$metrics3.bottomVisible,\n rowCount = _this$metrics3.rowCount,\n top = _this$metrics3.top,\n lastTop = _this$metrics3.lastTop,\n rightVisible = _this$metrics3.rightVisible,\n columnCount = _this$metrics3.columnCount,\n left = _this$metrics3.left,\n lastLeft = _this$metrics3.lastLeft;\n var newTop = top;\n var newLeft = left;\n if (isStickyBottom && (bottomVisible < rowCount - 1 && bottomVisible > 0 || top > lastTop)) {\n newTop = lastTop;\n }\n if (isStickyRight && (rightVisible < columnCount - 1 && rightVisible > 0 || left > lastLeft)) {\n newLeft = lastLeft;\n }\n return {\n top: newTop,\n left: newLeft\n };\n }\n\n /**\n * Allows the selected ranges to be set programatically\n * Will update the cursor and selection start/end based on the new ranges\n * @param gridRanges The new selected ranges to set\n */\n setSelectedRanges(gridRanges) {\n var model = this.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\n var _this$state2 = this.state,\n cursorRow = _this$state2.cursorRow,\n cursorColumn = _this$state2.cursorColumn,\n selectedRanges = _this$state2.selectedRanges;\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 var _range$startCell = range.startCell();\n newCursorRow = _range$startCell.row;\n newCursorColumn = _range$startCell.column;\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 canvas = this.canvas;\n var canvasOptions = this.props.canvasOptions;\n if (!canvas) throw new Error('Canvas not set');\n this.canvasContext = canvas.getContext('2d', canvasOptions);\n }\n requestUpdateCanvas() {\n if (this.animationFrame != null) {\n return;\n }\n this.animationFrame = requestAnimationFrame(() => {\n this.animationFrame = null;\n try {\n this.updateCanvas();\n } catch (e) {\n // Errors thrown from the animation frame are uncaught by the grid panel\n this.setState({\n renderError: e\n });\n }\n });\n }\n\n /**\n * Updates the canvas, metrics, and render state, then draws the canvas.\n */\n updateCanvas() {\n this.updateCanvasScale();\n this.updateMetrics();\n this.updateRenderState();\n var canvasContext = this.canvasContext,\n metrics = this.metrics,\n renderState = this.renderState;\n assertNotNull(canvasContext);\n assertNotNull(metrics);\n assertNotNull(renderState);\n this.renderer.configureContext(canvasContext, renderState);\n var onViewChanged = this.props.onViewChanged;\n onViewChanged(metrics);\n this.drawCanvas();\n }\n updateCanvasScale() {\n var canvas = this.canvas,\n canvasContext = this.canvasContext,\n canvasWrapper = this.canvasWrapper;\n if (!canvas) throw new Error('canvas not set');\n if (!canvasContext) throw new Error('canvasContext not set');\n if (!canvasWrapper.current) throw new Error('canvasWrapper not set');\n\n // the parent wrapper has 100% width/height, and is used for determining size\n // we don't want to stretch the canvas to 100%, to avoid fractional pixels.\n // A wrapper element must be used for sizing, and canvas size must be\n // set manually to a floored value in css and a scaled value in width/height\n var rect = canvasWrapper.current.getBoundingClientRect();\n var width = Math.floor(rect.width);\n var height = Math.floor(rect.height);\n\n // avoid triggering a dom re-calc if size hasn't changed\n if (parseFloat(canvas.style.width) === width && parseFloat(canvas.style.height) === height) {\n return;\n }\n var scale = Grid.getScale(canvasContext);\n canvas.style.width = \"\".concat(width, \"px\");\n canvas.style.height = \"\".concat(height, \"px\");\n canvas.width = width * scale;\n canvas.height = height * scale;\n canvasContext.scale(scale, scale);\n }\n updateScrollBounds() {\n if (!this.metrics) throw new Error('metrics not set');\n var _this$state3 = this.state,\n left = _this$state3.left,\n top = _this$state3.top;\n var _this$metrics4 = this.metrics,\n lastLeft = _this$metrics4.lastLeft,\n lastTop = _this$metrics4.lastTop;\n if (left > lastLeft) {\n this.setState({\n left: lastLeft,\n leftOffset: 0\n });\n }\n if (top > lastTop) {\n this.setState({\n top: lastTop,\n topOffset: 0\n });\n }\n }\n\n /**\n * Compares the current metrics with the previous metrics to see if we need to scroll when it is stuck to the bottom or the right\n */\n needToUpdateScroll() {\n if (!this.metrics || !this.prevMetrics) {\n return false;\n }\n var _this$metrics5 = this.metrics,\n rowCount = _this$metrics5.rowCount,\n columnCount = _this$metrics5.columnCount,\n height = _this$metrics5.height,\n width = _this$metrics5.width;\n var _this$prevMetrics = this.prevMetrics,\n prevRowCount = _this$prevMetrics.rowCount,\n prevColumnCount = _this$prevMetrics.columnCount,\n prevHeight = _this$prevMetrics.height,\n prevWidth = _this$prevMetrics.width;\n if (prevRowCount !== rowCount || height !== prevHeight) {\n var isStuckToBottom = this.state.isStuckToBottom;\n if (isStuckToBottom) {\n return true;\n }\n }\n if (prevColumnCount !== columnCount || width !== prevWidth) {\n var isStuckToRight = this.state.isStuckToRight;\n if (isStuckToRight) {\n return true;\n }\n }\n return false;\n }\n updateMetrics() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state;\n this.prevMetrics = this.metrics;\n var metricCalculator = this.metricCalculator;\n var metricState = this.getMetricState(state);\n this.metrics = metricCalculator.getMetrics(metricState);\n this.updateScrollBounds();\n return this.metrics;\n }\n\n /**\n * Check if the selection state has changed, and call the onSelectionChanged callback if they have\n * @param prevState The previous grid state\n */\n checkSelectionChange(prevState) {\n var oldSelectedRanges = prevState.selectedRanges;\n var selectedRanges = this.state.selectedRanges;\n if (selectedRanges !== oldSelectedRanges) {\n var onSelectionChanged = this.props.onSelectionChanged;\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 model = this.props.model;\n var selectedRanges = this.state.selectedRanges;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\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 selectedRanges = this.state.selectedRanges;\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 selectedRanges = this.state.selectedRanges;\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 selectedRanges = this.state.selectedRanges;\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 selectedRanges = state.selectedRanges,\n selectionStartRow = state.selectionStartRow,\n selectionStartColumn = state.selectionStartColumn;\n var theme = this.props.theme;\n var autoSelectRow = theme.autoSelectRow,\n autoSelectColumn = theme.autoSelectColumn;\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 theme = this.props.theme;\n var autoSelectRow = theme.autoSelectRow;\n var selectedRanges = state.selectedRanges,\n lastSelectedRanges = state.lastSelectedRanges,\n cursorRow = state.cursorRow,\n cursorColumn = state.cursorColumn;\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 model = this.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\n var nextCursor = GridRange.nextCell(GridRange.boundedRanges(selectedRanges, columnCount, rowCount));\n if (nextCursor != null) {\n newCursorColumn = nextCursor.column;\n newCursorRow = nextCursor.row;\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 _this$metrics6 = this.metrics,\n gridY = _this$metrics6.gridY,\n height = _this$metrics6.height,\n lastTop = _this$metrics6.lastTop,\n userRowHeights = _this$metrics6.userRowHeights,\n rowHeight = _this$metrics6.rowHeight;\n var tableHeight = height - gridY;\n var halfViewportHeight = Math.round(tableHeight / 2) + ((_userRowHeights$get = userRowHeights.get(focusedRow)) !== null && _userRowHeights$get !== void 0 ? _userRowHeights$get : rowHeight);\n var metricState = this.getMetricState();\n var newTop = this.metricCalculator.getLastTop(metricState, focusedRow + 1, halfViewportHeight);\n this.setState({\n top: Math.min(lastTop, newTop),\n selectedRanges: [new GridRange(null, focusedRow, null, focusedRow)],\n isStuckToBottom: false\n });\n var cursorColumn = this.state.cursorColumn;\n this.moveCursorToPosition(cursorColumn, focusedRow, false, false);\n }\n\n /**\n * Set the selection to the entire grid\n */\n selectAll() {\n var _this$props4 = this.props,\n model = _this$props4.model,\n theme = _this$props4.theme;\n var autoSelectRow = theme.autoSelectRow,\n autoSelectColumn = theme.autoSelectColumn;\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 _this$state4 = this.state,\n cursorRow = _this$state4.cursorRow,\n cursorColumn = _this$state4.cursorColumn,\n selectionEndColumn = _this$state4.selectionEndColumn,\n selectionEndRow = _this$state4.selectionEndRow;\n var column = extendSelection ? selectionEndColumn : cursorColumn;\n var row = extendSelection ? selectionEndRow : cursorRow;\n if (row === null || column === null) {\n var _this$state5 = this.state,\n left = _this$state5.left,\n top = _this$state5.top;\n this.moveCursorToPosition(left, top, extendSelection);\n } else {\n var model = this.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\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 model = this.props.model;\n var columnCount = model.columnCount,\n rowCount = model.rowCount;\n var _this$state6 = this.state,\n cursorRow = _this$state6.cursorRow,\n cursorColumn = _this$state6.cursorColumn,\n selectedRanges = _this$state6.selectedRanges;\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 _nextCursor = nextCursor,\n column = _nextCursor.column,\n row = _nextCursor.row;\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 metricCalculator = this.metricCalculator;\n var _this$metrics7 = this.metrics,\n bottomVisible = _this$metrics7.bottomVisible,\n rightVisible = _this$metrics7.rightVisible,\n topVisible = _this$metrics7.topVisible,\n leftVisible = _this$metrics7.leftVisible;\n var metricState = this.getMetricState(this.state);\n var _this$state7 = this.state,\n top = _this$state7.top,\n left = _this$state7.left,\n topOffset = _this$state7.topOffset,\n leftOffset = _this$state7.leftOffset;\n if (row != null && !GridUtils.isFloatingRow(row, this.metrics)) {\n if (row < topVisible) {\n top = metricCalculator.getTopForTopVisible(metricState, row);\n topOffset = 0;\n } else if (row > bottomVisible) {\n top = metricCalculator.getTopForBottomVisible(metricState, row);\n topOffset = 0;\n }\n }\n if (column != null && !GridUtils.isFloatingColumn(column, this.metrics)) {\n if (column < leftVisible) {\n left = metricCalculator.getLeftForLeftVisible(metricState, column);\n leftOffset = 0;\n } else if (column > rightVisible) {\n left = metricCalculator.getLeftForRightVisible(metricState, column);\n leftOffset = 0;\n }\n }\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n }\n\n /**\n * Checks the `top` and `left` properties that are set and updates the isStuckToBottom/Right properties\n * Should be called when user interaction occurs\n * @param viewState New state properties to set.\n * @param forceUpdate Whether to force an update.\n */\n setViewState(viewState) {\n var forceUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.metrics) throw new Error('metrics not set');\n var _this$props5 = this.props,\n isStickyBottom = _this$props5.isStickyBottom,\n isStickyRight = _this$props5.isStickyRight;\n var top = viewState.top,\n left = viewState.left;\n var _this$metrics8 = this.metrics,\n lastTop = _this$metrics8.lastTop,\n lastLeft = _this$metrics8.lastLeft,\n hasVerticalBar = _this$metrics8.hasVerticalBar,\n hasHorizontalBar = _this$metrics8.hasHorizontalBar;\n if (top != null && hasVerticalBar) {\n this.setState({\n isStuckToBottom: isStickyBottom && top >= lastTop\n });\n }\n if (left != null && hasHorizontalBar) {\n this.setState({\n isStuckToRight: isStickyRight && left >= lastLeft\n });\n }\n this.setState(viewState);\n if (forceUpdate) {\n this.forceUpdate();\n }\n }\n\n /**\n * Start editing the data at the given index\n *\n * @param column The visible column index to start editing\n * @param row The visible row index to start editing\n * @param isQuickEdit If this is a quick edit (the arrow keys can commit)\n * @param selectionRange The tuple [start,end] text selection range of the value to select when editing\n * @param value The value to start with in the edit field. Leave undefined to use the current value.\n */\n startEditing(column, row) {\n var isQuickEdit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var selectionRange = arguments.length > 3 ? arguments[3] : undefined;\n var value = arguments.length > 4 ? arguments[4] : undefined;\n var model = this.props.model;\n if (!isEditableGridModel(model)) throw new Error('model is not editable');\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n var cell = {\n column,\n row,\n selectionRange,\n value: value !== undefined ? value : model.editValueForCell(modelColumn, modelRow),\n isQuickEdit\n };\n this.setState({\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 model = this.props.model;\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n return isEditableGridModel(model) && model.isValidForCell(modelColumn, modelRow, value);\n }\n\n /**\n * Paste a value with the current selection\n * It first needs to validate that the pasted table is valid for the given selection.\n * Also may update selection if single cells are selected and a table is pasted.\n * @param value Table or a string that is being pasted\n */\n pasteValue(value) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var model = _this.props.model;\n var _this$state8 = _this.state,\n movedColumns = _this$state8.movedColumns,\n movedRows = _this$state8.movedRows,\n selectedRanges = _this$state8.selectedRanges;\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 columnCount = model.columnCount,\n rowCount = model.rowCount;\n var ranges = selectedRanges;\n // If each cell is a single selection, we need to update the selection to map to the newly pasted data\n // Check for\n if (ranges.every(range => {\n var _range$startColumn, _range$startRow;\n return GridRange.cellCount([range]) === 1 && ((_range$startColumn = range.startColumn) !== null && _range$startColumn !== void 0 ? _range$startColumn : 0) + tableWidth <= columnCount && ((_range$startRow = range.startRow) !== null && _range$startRow !== void 0 ? _range$startRow : 0) + tableHeight <= rowCount;\n })) {\n // Remap the selected ranges\n ranges = ranges.map(range => {\n var _range$startColumn2, _range$startRow2;\n return new GridRange(range.startColumn, range.startRow, ((_range$startColumn2 = range.startColumn) !== null && _range$startColumn2 !== void 0 ? _range$startColumn2 : 0) + tableWidth - 1, ((_range$startRow2 = range.startRow) !== null && _range$startRow2 !== void 0 ? _range$startRow2 : 0) + tableHeight - 1);\n });\n _this.setSelectedRanges(ranges);\n }\n var edits = [];\n ranges.forEach(range => {\n var _range$startColumn3;\n if (((_range$startColumn3 = range.startColumn) !== null && _range$startColumn3 !== void 0 ? _range$startColumn3 : 0) + tableWidth > columnCount) {\n throw new PasteError('Pasted content would overflow columns.');\n }\n for (var x = 0; x < tableWidth; x += 1) {\n for (var y = 0; y < tableHeight; y += 1) {\n var _range$startColumn4, _range$startRow3;\n edits.push({\n column: ((_range$startColumn4 = range.startColumn) !== null && _range$startColumn4 !== void 0 ? _range$startColumn4 : 0) + x,\n row: ((_range$startRow3 = range.startRow) !== null && _range$startRow3 !== void 0 ? _range$startRow3 : 0) + y,\n text: value[y][x]\n });\n }\n }\n });\n yield model.setValues(edits);\n } catch (e) {\n var onError = _this.props.onError;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n }\n })();\n }\n\n /**\n * Set a value to a specific cell. If the value is not valid for that cell, do not set it\n * @param column Column index to set the value for\n * @param row Row index to set the value for\n * @param value Value to set at that cell\n * @returns true If the value was valid and attempted to be set, false is it was not valid\n */\n setValueForCell(column, row, value) {\n var _this$props6 = this.props,\n model = _this$props6.model,\n onError = _this$props6.onError;\n assertIsEditableGridModel(model);\n var modelColumn = this.getModelColumn(column);\n var modelRow = this.getModelRow(row);\n if (model.isValidForCell(modelColumn, modelRow, value)) {\n model.setValueForCell(modelColumn, modelRow, value).catch(err => {\n onError(err instanceof Error ? err : new Error(\"\".concat(err)));\n });\n return true;\n }\n return false;\n }\n\n /**\n * Set a value on all the ranges provided\n * @param ranges Ranges to set\n * @param value The value to set on all the ranges\n */\n setValueForRanges(ranges, value) {\n var _this$props7 = this.props,\n model = _this$props7.model,\n onError = _this$props7.onError;\n var _this$state9 = this.state,\n movedColumns = _this$state9.movedColumns,\n movedRows = _this$state9.movedRows;\n var modelRanges = GridUtils.getModelRanges(ranges, movedColumns, movedRows);\n if (isEditableGridModel(model)) {\n model.setValueForRanges(modelRanges, value).catch(err => {\n onError(err instanceof Error ? err : new Error(\"\".concat(err)));\n });\n }\n }\n\n /**\n * Check if a given cell is within the current selection\n * @param row Row to check\n * @param column Column to check\n * @returns True if the cell is in the current selection, false otherwise\n */\n isSelected(row, column) {\n var selectedRanges = this.state.selectedRanges;\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 this.hasAddedBlockEvents = true;\n }\n removeDocumentCursor() {\n if (this.documentCursor != null) {\n document.documentElement.classList.remove(this.documentCursor);\n this.documentCursor = null;\n }\n // Only remove grid-block-events if this Grid instance added it\n // This prevents one Grid from removing the class on unmount while another Grid is still dragging\n if (this.hasAddedBlockEvents) {\n document.documentElement.classList.remove('grid-block-events');\n this.hasAddedBlockEvents = false;\n }\n }\n startDragTimer(event) {\n this.stopDragTimer();\n var mouseEvent = new MouseEvent('custom', event.nativeEvent);\n this.dragTimer = setTimeout(() => {\n this.handleMouseDrag(mouseEvent);\n }, Grid.dragTimeout);\n }\n stopDragTimer() {\n if (this.dragTimer) {\n clearTimeout(this.dragTimer);\n this.dragTimer = null;\n }\n }\n\n /**\n * Draw the grid with the metrics provided\n * When scrolling you've have to re-draw the whole canvas. As a consequence, all these drawing methods\n * must be very quick.\n */\n drawCanvas() {\n if (!this.canvas) throw new Error('canvas is not set');\n if (!this.canvasContext) throw new Error('context not set');\n var renderer = this.renderer,\n context = this.canvasContext,\n renderState = this.renderState;\n 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 cursor = keyHandler.cursor;\n }\n var options = result;\n if ((_options$stopPropagat = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat !== void 0 ? _options$stopPropagat : true) event.stopPropagation();\n if ((_options$preventDefau = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n }\n handleKeyDown(event) {\n this.notifyKeyboardHandlers('onDown', event);\n }\n handleKeyUp(event) {\n this.notifyKeyboardHandlers('onUp', event);\n }\n\n /**\n * Notify all of the mouse handlers for this grid of a mouse event.\n * @param functionName The name of the function in the mouse handler to call\n * @param event The mouse event to notify\n * @param updateCoordinates Whether to update the mouse coordinates\n * @param addCursorToDocument Whether to add a cursor overlay or not (for dragging)\n */\n notifyMouseHandlers(functionName, event) {\n var updateCoordinates = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var addCursorToDocument = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var gridPoint = this.getGridPointFromEvent(event);\n var mouseHandlers = this.getMouseHandlers();\n var cursor = null;\n for (var i = 0; i < mouseHandlers.length; i += 1) {\n var mouseHandler = mouseHandlers[i];\n var result = mouseHandler[functionName] != null && mouseHandler[functionName](gridPoint, this, event);\n if (result !== false) {\n var _options$stopPropagat2, _options$preventDefau2;\n if (mouseHandler.cursor != null) {\n cursor = mouseHandler.cursor;\n if (addCursorToDocument) {\n this.addDocumentCursor(cursor);\n }\n }\n\n // result is bool or object, events are stopped by default\n var options = result;\n if ((_options$stopPropagat2 = options === null || options === void 0 ? void 0 : options.stopPropagation) !== null && _options$stopPropagat2 !== void 0 ? _options$stopPropagat2 : true) event.stopPropagation();\n if ((_options$preventDefau2 = options === null || options === void 0 ? void 0 : options.preventDefault) !== null && _options$preventDefau2 !== void 0 ? _options$preventDefau2 : true) event.preventDefault();\n break;\n }\n }\n this.setState({\n cursor\n });\n if (updateCoordinates) {\n var x = gridPoint.x,\n y = gridPoint.y;\n this.setState({\n mouseX: x,\n mouseY: y\n });\n }\n }\n handleMouseDown(event) {\n window.addEventListener('mousemove', this.handleMouseDrag, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onDown', event);\n this.startDragTimer(event);\n }\n handleDoubleClick(event) {\n this.notifyMouseHandlers('onDoubleClick', event);\n }\n handleMouseMove(event) {\n this.notifyMouseHandlers('onMove', event);\n }\n handleMouseLeave(event) {\n this.notifyMouseHandlers('onLeave', event, false);\n this.setState({\n mouseX: null,\n mouseY: null\n });\n }\n handleMouseDrag(event) {\n this.setState({\n isDragging: true\n });\n this.notifyMouseHandlers('onDrag', event, true, true);\n this.stopDragTimer();\n }\n handleMouseUp(event) {\n // Ignore non-left click while dragging to allow drag to continue\n var isDragging = this.state.isDragging;\n if (isDragging && event.button !== 0) {\n return;\n }\n window.removeEventListener('mousemove', this.handleMouseDrag, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n this.stopDragTimer();\n this.removeDocumentCursor();\n if (event.button != null && event.button !== 0) {\n return;\n }\n this.notifyMouseHandlers('onUp', event, false);\n\n // isDragging is set on any drag in handleMouseDrag, so it must be reset\n // here for drags that aren't owned by a handler that resets it (e.g. a\n // selection drag). Otherwise it stays stuck true and suppresses the\n // column separator hover highlight.\n if (isDragging) {\n this.setState({\n isDragging: false\n });\n }\n }\n handleResize() {\n /**\n * We need to always redraw the canvas in the same frame as the updateCanvasScale\n * because it clears the canvas by nature of direct dom manipulation. However,\n * We also need to verify the state/metrics, which we currently have no way\n * of doing outside of a full componentDidUpdate() call, so we force the update.\n * Ideally, we could verify state/metrics without the forced update.\n */\n this.updateCanvas();\n if (!this.metrics) throw new Error('metrics not set');\n this.forceUpdate();\n }\n forceUpdate(callback) {\n this.setState(_ref5 => {\n var _ref5$updateRevision = _ref5.updateRevision,\n updateRevision = _ref5$updateRevision === void 0 ? 0 : _ref5$updateRevision;\n return {\n updateRevision: (updateRevision + 1) % Number.MAX_SAFE_INTEGER\n };\n });\n super.forceUpdate(callback);\n }\n handleWheel(event) {\n this.notifyMouseHandlers('onWheel', event);\n if (event.defaultPrevented) {\n return;\n }\n var metricCalculator = this.metricCalculator,\n metrics = this.metrics;\n var metricState = this.getMetricState();\n if (!metrics) throw new Error('metrics not set');\n var lastTop = metrics.lastTop,\n lastLeft = metrics.lastLeft,\n columnCount = metrics.columnCount,\n rowCount = metrics.rowCount,\n scrollableContentWidth = metrics.scrollableContentWidth,\n scrollableViewportWidth = metrics.scrollableViewportWidth,\n scrollableContentHeight = metrics.scrollableContentHeight,\n scrollableViewportHeight = metrics.scrollableViewportHeight,\n hasHorizontalBar = metrics.hasHorizontalBar,\n hasVerticalBar = metrics.hasVerticalBar;\n var top = metrics.top,\n left = metrics.left,\n topOffset = metrics.topOffset,\n leftOffset = metrics.leftOffset;\n var theme = this.getTheme();\n var _GridUtils$getScrollD = GridUtils.getScrollDelta(event, metrics.barWidth, metrics.barHeight, metrics.rowHeight, metrics.rowHeight),\n deltaX = _GridUtils$getScrollD.deltaX,\n deltaY = _GridUtils$getScrollD.deltaY;\n\n // iterate through each column to determine column width and figure out how far to scroll\n // get column width of next column to scroll to, and subract it from the remaining distance to travel\n while (hasHorizontalBar && deltaX !== 0) {\n leftOffset += deltaX;\n deltaX = 0;\n if (columnCount > 1) {\n // no scrolling needed, at directional edge\n if (leftOffset > 0 && left >= lastLeft || leftOffset < 0 && left <= 0) {\n leftOffset = 0;\n break;\n }\n } else {\n // single column at edge\n if (leftOffset <= 0) {\n leftOffset = 0;\n break;\n }\n var maxLeftOffset = scrollableContentWidth - scrollableViewportWidth;\n if (leftOffset >= maxLeftOffset) {\n leftOffset = maxLeftOffset;\n break;\n }\n }\n if (leftOffset > 0) {\n var _metrics$allColumnWid;\n // scroll right\n\n // get width of next column\n var columnWidth = (_metrics$allColumnWid = metrics.allColumnWidths.get(left)) !== null && _metrics$allColumnWid !== void 0 ? _metrics$allColumnWid : metricCalculator.getVisibleColumnWidth(left, metricState);\n if (leftOffset >= columnWidth) {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset - columnWidth;\n leftOffset = 0;\n left += 1;\n } else if (theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left += 1;\n }\n } else if (leftOffset < 0) {\n var _metrics$allColumnWid2;\n // scroll left\n\n // get width of next column\n var _columnWidth = (_metrics$allColumnWid2 = metrics.allColumnWidths.get(left - 1)) !== null && _metrics$allColumnWid2 !== void 0 ? _metrics$allColumnWid2 : metricCalculator.getVisibleColumnWidth(left - 1, metricState);\n if (Math.abs(leftOffset) <= _columnWidth && theme.scrollSnapToColumn && columnCount > 1) {\n // if there's still a balance to travel but its less then a column and snapping is on\n leftOffset = 0;\n left -= 1;\n } else {\n // remove width from balance and advance by 1 column\n deltaX = leftOffset + _columnWidth;\n leftOffset = 0;\n left -= 1;\n }\n }\n }\n\n // iterate through each row to determine row height and figure out how far to scroll\n // get row height of next row to scroll to, and subract it from the remaining distance to travel\n while (hasVerticalBar && deltaY !== 0) {\n topOffset += deltaY;\n deltaY = 0;\n if (rowCount > 1) {\n // no scrolling needed, at directional edge\n if (topOffset > 0 && top >= lastTop || topOffset < 0 && top <= 0) {\n topOffset = 0;\n break;\n }\n } else {\n // single row at edge\n if (topOffset <= 0) {\n topOffset = 0;\n break;\n }\n var maxTopOffset = scrollableContentHeight - scrollableViewportHeight;\n if (topOffset >= maxTopOffset) {\n topOffset = maxTopOffset;\n break;\n }\n }\n if (topOffset > 0) {\n var _metrics$allRowHeight;\n // scroll direction down\n\n // get height of next row\n var rowHeight = (_metrics$allRowHeight = metrics.allRowHeights.get(top)) !== null && _metrics$allRowHeight !== void 0 ? _metrics$allRowHeight : metricCalculator.getVisibleRowHeight(top, metricState);\n if (topOffset >= rowHeight) {\n // remove height from balance and advance by 1 row\n deltaY = topOffset - rowHeight;\n topOffset = 0;\n top += 1;\n } else if (theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top += 1;\n }\n } else if (topOffset < 0) {\n var _metrics$allRowHeight2;\n // scroll direction up\n\n // get height of next row\n var _rowHeight = (_metrics$allRowHeight2 = metrics.allRowHeights.get(top - 1)) !== null && _metrics$allRowHeight2 !== void 0 ? _metrics$allRowHeight2 : metricCalculator.getVisibleRowHeight(top - 1, metricState);\n if (Math.abs(topOffset) <= _rowHeight && theme.scrollSnapToRow && rowCount > 1) {\n // if there's still a balance to travel but its less then a row and snapping is on\n topOffset = 0;\n top -= 1;\n } else {\n // remove height from balance and advance by 1 row\n deltaY = topOffset + _rowHeight;\n topOffset = 0;\n top -= 1;\n }\n }\n }\n if (metrics.top !== top || metrics.left !== left || metrics.topOffset !== topOffset || metrics.leftOffset !== leftOffset) {\n this.setViewState({\n top,\n left,\n topOffset,\n leftOffset\n });\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n /**\n * Handle cancelling the cell edit action\n */\n handleEditCellCancel() {\n this.setState({\n editingCell: null\n });\n this.focus();\n }\n\n /**\n * Handle a change in the value in an editing cell\n * @param value New value set\n */\n handleEditCellChange(value) {\n this.setState(_ref6 => {\n var editingCell = _ref6.editingCell;\n try {\n assertIsDefined(editingCell);\n return {\n editingCell: _objectSpread(_objectSpread({}, editingCell), {}, {\n value\n })\n };\n } catch (e) {\n // This case should _never_ happen, since the editingCell shouldn't be null if this method is called\n var onError = this.props.onError;\n onError(e instanceof Error ? e : new Error(\"\".concat(e)));\n return null;\n }\n });\n }\n\n /**\n * Commit an edit for the currently editing cell\n * @param value Value that was committed\n * @param options Options for committing\n */\n handleEditCellCommit(value) {\n var _ref7 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref7$direction = _ref7.direction,\n direction = _ref7$direction === void 0 ? SELECTION_DIRECTION.DOWN : _ref7$direction,\n _ref7$fillRange = _ref7.fillRange,\n fillRange = _ref7$fillRange === void 0 ? false : _ref7$fillRange;\n var _this$state0 = this.state,\n editingCell = _this$state0.editingCell,\n selectedRanges = _this$state0.selectedRanges;\n if (!editingCell) throw new Error('editingCell not set');\n var column = editingCell.column,\n row = editingCell.row;\n if (!this.isValidForCell(column, row, value)) {\n // Don't allow an invalid value to be commited, the editing cell should show an error\n if (direction === null) {\n // If they clicked off of the editing cell, just remove focus\n this.setState({\n editingCell: null\n });\n }\n return;\n }\n if (fillRange) {\n 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 model = this.props.model;\n var editingCell = this.state.editingCell;\n var metrics = this.metrics;\n if (editingCell == null || metrics == null || !isEditableGridModel(model)) {\n return null;\n }\n var selectionRange = editingCell.selectionRange,\n value = editingCell.value,\n isQuickEdit = editingCell.isQuickEdit;\n var column = editingCell.column,\n row = editingCell.row;\n var scrollX = metrics.scrollX,\n gridX = metrics.gridX,\n gridY = metrics.gridY,\n allColumnXs = metrics.allColumnXs,\n allRowYs = metrics.allRowYs,\n allColumnWidths = metrics.allColumnWidths,\n allRowHeights = metrics.allRowHeights;\n var _this$getTheme = this.getTheme(),\n activeCellSelectionBorderWidth = _this$getTheme.activeCellSelectionBorderWidth;\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 _this$state1 = this.state,\n cursorColumn = _this$state1.cursorColumn,\n cursorRow = _this$state1.cursorRow,\n draggingColumn = _this$state1.draggingColumn,\n draggingColumnSeparator = _this$state1.draggingColumnSeparator,\n draggingRow = _this$state1.draggingRow,\n draggingRowOffset = _this$state1.draggingRowOffset,\n draggingRowSeparator = _this$state1.draggingRowSeparator,\n editingCell = _this$state1.editingCell,\n isDraggingHorizontalScrollBar = _this$state1.isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar = _this$state1.isDraggingVerticalScrollBar,\n isDragging = _this$state1.isDragging,\n mouseX = _this$state1.mouseX,\n mouseY = _this$state1.mouseY,\n selectedRanges = _this$state1.selectedRanges;\n var _this$props8 = this.props,\n model = _this$props8.model,\n stateOverride = _this$props8.stateOverride;\n var metrics = this.metrics;\n var context = this.canvasContext;\n var theme = this.getTheme();\n var width = this.canvas.clientWidth;\n var height = this.canvas.clientHeight;\n assertNotNull(metrics);\n this.renderState = _objectSpread({\n width,\n height,\n context,\n theme,\n model,\n metrics,\n mouseX,\n mouseY,\n 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 children = this.props.children;\n var cursor = this.state.cursor;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"grid-wrapper\",\n ref: this.canvasWrapper,\n children: [/*#__PURE__*/_jsx(\"canvas\", {\n className: classNames('grid-canvas', Grid.getCursorClassName(cursor)),\n ref: canvas => {\n this.canvas = canvas;\n },\n onClick: this.handleClick,\n onContextMenu: this.handleContextMenu,\n onDoubleClick: this.handleDoubleClick,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n tabIndex: 0,\n children: \"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 _props$value = props.value,\n _value = _props$value === void 0 ? '' : _props$value,\n filterTypes = props.filterTypes,\n _props$selectedType = props.selectedType,\n selectedType = _props$selectedType === void 0 ? filterTypes[0] : _props$selectedType;\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 _this$props = this.props,\n value = _this$props.value,\n selectedType = _this$props.selectedType;\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 onChange = this.props.onChange;\n var value = this.state.value;\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 value = event.target.value;\n this.setState({\n value\n });\n var onChange = this.props.onChange;\n var selectedType = this.state.selectedType;\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 onDelete = this.props.onDelete;\n onDelete();\n }\n render() {\n var _this$props2 = this.props,\n column = _this$props2.column,\n filterTypes = _this$props2.filterTypes,\n formatter = _this$props2.formatter,\n tableUtils = _this$props2.tableUtils;\n var _this$state = this.state,\n selectedType = _this$state.selectedType,\n value = _this$state.value;\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 _this$props = this.props,\n selectedValues = _this$props.selectedValues,\n dh = _this$props.dh;\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 table = this.props.table;\n if (table) this.startListening(table);\n }\n componentDidUpdate(prevProps) {\n var _this$props2 = this.props,\n filters = _this$props2.filters,\n invertSelection = _this$props2.invertSelection,\n selectedValues = _this$props2.selectedValues,\n table = _this$props2.table;\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 table = this.props.table;\n if (table) this.stopListening(table);\n }\n handleSelect(itemIndex, value) {\n var invertSelection = this.props.invertSelection;\n var selectedValues = this.state.selectedValues;\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 offset = this.state.offset;\n var items = this.state.items;\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 onChange = this.props.onChange;\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 _this$props3 = this.props,\n table = _this$props3.table,\n formatter = _this$props3.formatter;\n if (!table) return;\n var data = event.detail;\n var offset = data.offset;\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 invertSelection = this.props.invertSelection;\n var selectedValues = this.state.selectedValues;\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 items = this.state.items;\n items = [...items];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var value = item.value;\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 table = this.props.table;\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 _this$state = this.state,\n offset = _this$state.offset,\n isLoading = _this$state.isLoading,\n items = _this$state.items,\n itemCount = _this$state.itemCount;\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 dh = props.dh,\n invertSelection = props.invertSelection,\n selectedValues = props.selectedValues;\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 _this$props = this.props,\n invertSelection = _this$props.invertSelection,\n selectedValues = _this$props.selectedValues,\n table = _this$props.table;\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 _this$state = this.state,\n searchTable = _this$state.table,\n searchText = _this$state.searchText;\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 table = this.state.table;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n this.stopUpdateFilterTimer();\n }\n getColumnName() {\n var table = this.props.table;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n getDisplayedValuesCount() {\n var _this$state2 = this.state,\n invertSelection = _this$state2.invertSelection,\n selectedValues = _this$state2.selectedValues,\n table = _this$state2.table;\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 table = this.state.table;\n var formatter = this.props.formatter;\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 table = this.props.table;\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 onChange = this.props.onChange;\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 onChange = this.props.onChange;\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 _this$state3 = this.state,\n table = _this$state3.table,\n searchText = _this$state3.searchText;\n var timeZone = this.props.timeZone;\n var tableUtils = this.tableUtils;\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 _this$state4 = this.state,\n error = _this$state4.error,\n filters = _this$state4.filters,\n invertSelection = _this$state4.invertSelection,\n selectedValues = _this$state4.selectedValues,\n searchText = _this$state4.searchText,\n table = _this$state4.table;\n var _this$props2 = this.props,\n dh = _this$props2.dh,\n formatter = _this$props2.formatter,\n showSearch = _this$props2.showSearch;\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, vsScreenFull, vsScreenNormal } 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 model = props.model,\n column = props.column,\n options = props.options;\n var filterOperators = options.filterOperators,\n invertSelection = options.invertSelection,\n selectedValues = options.selectedValues;\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 selectedType = _ref.selectedType,\n value = _ref.value;\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 _this$props = this.props,\n model = _this$props.model,\n column = _this$props.column;\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 _this$state = this.state,\n filterItems = _this$state.filterItems,\n filterOperators = _this$state.filterOperators;\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 _this$state2 = this.state,\n filterItems = _this$state2.filterItems,\n filterOperators = _this$state2.filterOperators;\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 filterOperators = this.state.filterOperators;\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 filterItems = this.state.filterItems;\n filterItems = [...filterItems];\n var key = filterItems[filterIndex].key;\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 _this$state3 = this.state,\n filterItems = _this$state3.filterItems,\n filterOperators = _this$state3.filterOperators;\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 onDone = this.props.onDone;\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 filterItems = this.state.filterItems;\n if (filterItems.length === 0) {\n return false;\n }\n var filterItem = filterItems[filterItems.length - 1];\n var selectedType = filterItem.selectedType,\n value = filterItem.value;\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 _this$props2 = this.props,\n column = _this$props2.column,\n onSortChange = _this$props2.onSortChange;\n var isSortable = this.state.isSortable;\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 _this$state4 = this.state,\n filterItems = _this$state4.filterItems,\n filterOperators = _this$state4.filterOperators,\n invertSelection = _this$state4.invertSelection,\n selectedValues = _this$state4.selectedValues;\n var _this$props3 = this.props,\n column = _this$props3.column,\n onFilterChange = _this$props3.onFilterChange,\n model = _this$props3.model,\n tableUtils = _this$props3.tableUtils;\n var formatter = model.formatter;\n var items = filterItems.filter(_ref2 => {\n var selectedType = _ref2.selectedType,\n value = _ref2.value;\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 _this$props4 = this.props,\n column = _this$props4.column,\n model = _this$props4.model,\n sortDirection = _this$props4.sortDirection,\n formatter = _this$props4.formatter,\n tableUtils = _this$props4.tableUtils,\n isMaximized = _this$props4.isMaximized,\n onToggleMaximize = _this$props4.onToggleMaximize;\n var _this$state5 = this.state,\n filterItems = _this$state5.filterItems,\n filterOperators = _this$state5.filterOperators,\n invertSelection = _this$state5.invertSelection,\n selectedValues = _this$state5.selectedValues,\n valuesTable = _this$state5.valuesTable,\n valuesTableError = _this$state5.valuesTableError,\n isSortable = _this$state5.isSortable;\n var dh = model.dh,\n isValuesTableAvailable = model.isValuesTableAvailable;\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 key = filterItem.key,\n selectedType = filterItem.selectedType,\n value = filterItem.value;\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 }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames('sort-operator', {\n active: isMaximized\n }),\n onClick: onToggleMaximize,\n icon: isMaximized ? vsScreenNormal : vsScreenFull,\n tooltip: isMaximized ? 'Restore dialog size' : 'Maximize dialog'\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 advanced-filter-values-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(dh, config, prevRule) {\n var styleDBString = getStyleDBString(config);\n if (styleDBString === undefined) {\n return undefined;\n }\n var conditionDBString = getConditionDBString(dh, 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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _toArray(r) { return _arrayWithHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport 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 type = config.type,\n customConfig = config.customConfig;\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 type = config.type,\n customConfig = config.customConfig;\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 column = config.column,\n value = config.value,\n start = config.start,\n end = config.end;\n return getTextForNumberCondition(column.name, config.condition, value, start, end);\n}\nfunction getStringConditionText(config) {\n var column = config.column,\n value = config.value;\n return getTextForStringCondition(column.name, config.condition, value);\n}\nfunction getDateConditionText(dh, config) {\n var column = config.column,\n value = config.value;\n return getTextForDateCondition(dh, column.name, config.condition, value);\n}\nfunction getBooleanConditionText(config) {\n var column = config.column;\n return getTextForBooleanCondition(column.name, config.condition);\n}\nfunction getCharConditionText(config) {\n var column = config.column,\n value = config.value;\n return getTextForCharCondition(column.name, config.condition, value);\n}\nexport function getConditionDBString(dh, config) {\n var column = config.column;\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(dh, 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 condition = config.condition,\n value = config.value,\n start = config.start,\n end = config.end;\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(dh, columnName, condition, value) {\n var formattedValue = value;\n if (typeof value === 'string') {\n // The date time formatting may return a timezone that is not supported by the backend (e.g. 'EDT' instead of 'ET')\n // so we need to parse the date time string and reformat it with a supported timezone ID.\n // Note that we know this will be valid because the input value has already been validated with isDateConditionValid.\n var _value$split = value.split(' '),\n _value$split2 = _toArray(_value$split),\n dateTimeString = _value$split2[0],\n rest = _value$split2.slice(1);\n var tzCode = rest.join(' ');\n var tz = dh.i18n.TimeZone.getTimeZone(tzCode);\n formattedValue = \"\".concat(dateTimeString, \" \").concat(tz.id);\n }\n switch (condition) {\n case DateCondition.IS_EXACTLY:\n return \"\".concat(columnName, \" == '\").concat(formattedValue, \"'\");\n case DateCondition.IS_NOT_EXACTLY:\n return \"\".concat(columnName, \" != '\").concat(formattedValue, \"'\");\n case DateCondition.IS_BEFORE:\n return \"\".concat(columnName, \" < '\").concat(formattedValue, \"'\");\n case DateCondition.IS_BEFORE_OR_EQUAL:\n return \"\".concat(columnName, \" <= '\").concat(formattedValue, \"'\");\n case DateCondition.IS_AFTER:\n return \"\".concat(columnName, \" > '\").concat(formattedValue, \"'\");\n case DateCondition.IS_AFTER_OR_EQUAL:\n return \"\".concat(columnName, \" >= '\").concat(formattedValue, \"'\");\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 _ref5;\n var config = _ref.config,\n formatterType = _ref.type;\n var column = config.column;\n // Check both name and type because the type can change\n var col = columns.find(_ref2 => {\n var name = _ref2.name,\n type = _ref2.type;\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 _ref3 = (_ref5 = formatterType === FormatterType.CONDITIONAL ? columnFormatConfigMap.get(col.name) : rowFormatConfig) !== null && _ref5 !== void 0 ? _ref5 : ['null', undefined],\n _ref4 = _slicedToArray(_ref3, 2),\n prevRule = _ref4[0],\n prevFormatColumn = _ref4[1];\n var rule = makeTernaryFormatRule(dh, 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 _split = (value !== null && value !== void 0 ? value : '').split(' '),\n _split2 = _toArray(_split),\n dateTimeString = _split2[0],\n rest = _split2.slice(1);\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(_ref6) {\n var type = _ref6.type;\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 _ref$animation = _ref.animation,\n animation = _ref$animation === void 0 ? 'iris-grid-bottom-bar-slide-up' : _ref$animation,\n children = _ref.children,\n className = _ref.className,\n isShown = _ref.isShown,\n onClick = _ref.onClick,\n onEntering = _ref.onEntering,\n onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n onExited = _ref.onExited;\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useEffect, useMemo, 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 _ref$isSaving = _ref.isSaving,\n isSaving = _ref$isSaving === void 0 ? false : _ref$isSaving,\n onSave = _ref.onSave,\n onDiscard = _ref.onDiscard,\n discardTooltip = _ref.discardTooltip,\n saveTooltip = _ref.saveTooltip,\n error = _ref.error,\n pendingDataErrors = _ref.pendingDataErrors,\n pendingDataMap = _ref.pendingDataMap,\n onEntering = _ref.onEntering,\n onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n _onExited = _ref.onExited;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isSuccessShown = _useState2[0],\n setIsSuccessShown = _useState2[1];\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n wasSuccessShown = _useState4[0],\n setWasSuccessShown = _useState4[1];\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 copyOperation = this.props.copyOperation;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n componentDidUpdate(prevProps) {\n var copyOperation = this.props.copyOperation;\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 copyOperation = this.props.copyOperation;\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 error = copyOperation.error;\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 ranges = copyOperation.ranges;\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 copyState = this.state.copyState;\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 _this3$props = _this3.props,\n model = _this3$props.model,\n copyOperation = _this3$props.copyOperation;\n if (isCopyHeaderOperation(copyOperation)) {\n var columnIndex = copyOperation.columnIndex,\n columnDepth = copyOperation.columnDepth,\n movedColumns = copyOperation.movedColumns;\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 ranges = copyOperation.ranges,\n includeHeaders = copyOperation.includeHeaders,\n userColumnWidths = copyOperation.userColumnWidths,\n _movedColumns = copyOperation.movedColumns,\n formatValues = copyOperation.formatValues;\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 _this$props = this.props,\n onEntering = _this$props.onEntering,\n onEntered = _this$props.onEntered,\n onExiting = _this$props.onExiting,\n onExited = _this$props.onExited;\n var _this$state = this.state,\n buttonState = _this$state.buttonState,\n copyState = _this$state.copyState,\n isShown = _this$state.isShown,\n rowCount = _this$state.rowCount,\n error = _this$state.error;\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 debounceMs = props.debounceMs;\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 value = props.value;\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 debounceMs = this.props.debounceMs;\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 value = event.target.value;\n this.setState({\n value,\n isChanged: true\n });\n this.debouncedSendUpdate(value);\n }\n handleCancel() {\n this.debouncedSendUpdate.cancel();\n var initialValue = this.initialValue;\n var isChanged = this.state.isChanged;\n if (isChanged) {\n this.sendUpdate(initialValue);\n }\n var onDone = this.props.onDone;\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 onDone = this.props.onDone;\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 relatedTarget = event.relatedTarget;\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 onTab = this.props.onTab;\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 onContextMenu = this.props.onContextMenu;\n onContextMenu(event);\n }\n sendUpdate(value) {\n var onChange = this.props.onChange;\n onChange(value);\n }\n render() {\n var _this$props = this.props,\n className = _this$props.className,\n style = _this$props.style,\n showAdvancedFilterButton = _this$props.showAdvancedFilterButton,\n isAdvancedFilterSet = _this$props.isAdvancedFilterSet,\n onAdvancedFiltersTriggered = _this$props.onAdvancedFiltersTriggered;\n var value = this.state.value;\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 }), showAdvancedFilterButton && /*#__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 showAdvancedFilterButton: false,\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 _grid$state = grid.state,\n mouseX = _grid$state.mouseX,\n mouseY = _grid$state.mouseY;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n 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 selectedRanges = this.irisGrid.state.selectedRanges;\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 reverse = this.irisGrid.state.reverse;\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { 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 _ref$children = _ref.children,\n children = _ref$children === void 0 ? null : _ref$children,\n onEntering = _ref.onEntering,\n onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n onExited = _ref.onExited;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isShown = _useState2[0],\n setIsShown = _useState2[1];\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 model = _ref.model,\n top = _ref.top,\n bottom = _ref.bottom,\n left = _ref.left,\n right = _ref.right,\n filter = _ref.filter,\n formatter = _ref.formatter,\n columnAlignmentMap = _ref.columnAlignmentMap,\n _ref$reverse = _ref.reverse,\n reverse = _ref$reverse === void 0 ? false : _ref$reverse,\n sorts = _ref.sorts,\n customColumns = _ref.customColumns,\n movedColumns = _ref.movedColumns,\n hiddenColumns = _ref.hiddenColumns,\n alwaysFetchColumns = _ref.alwaysFetchColumns,\n _ref$rollupConfig = _ref.rollupConfig,\n rollupConfig = _ref$rollupConfig === void 0 ? null : _ref$rollupConfig,\n _ref$totalsConfig = _ref.totalsConfig,\n totalsConfig = _ref$totalsConfig === void 0 ? null : _ref$totalsConfig,\n _ref$selectDistinctCo = _ref.selectDistinctColumns,\n selectDistinctColumns = _ref$selectDistinctCo === void 0 ? EMPTY_ARRAY : _ref$selectDistinctCo,\n _ref$pendingRowCount = _ref.pendingRowCount,\n pendingRowCount = _ref$pendingRowCount === void 0 ? 0 : _ref$pendingRowCount,\n _ref$pendingDataMap = _ref.pendingDataMap,\n pendingDataMap = _ref$pendingDataMap === void 0 ? EMPTY_MAP : _ref$pendingDataMap,\n frozenColumns = _ref.frozenColumns,\n formatColumns = _ref.formatColumns,\n columnHeaderGroups = _ref.columnHeaderGroups,\n partitionConfig = _ref.partitionConfig,\n showExtraGroupColumn = _ref.showExtraGroupColumn;\n var isTotalsAvailable = model.isTotalsAvailable,\n isRollupAvailable = model.isRollupAvailable;\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 _this$props = this.props,\n column = _this$props.column,\n model = _this$props.model;\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 _this$props2 = this.props,\n column = _this$props2.column,\n model = _this$props2.model;\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 _this$props3 = this.props,\n model = _this$props3.model,\n onStatistics = _this$props3.onStatistics;\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 _this$props4 = this.props,\n column = _this$props4.column,\n model = _this$props4.model;\n var _this$state = this.state,\n error = _this$state.error,\n loading = _this$state.loading,\n statistics = _this$state.statistics,\n numRows = _this$state.numRows;\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 _statistics$i = statistics[i],\n operation = _statistics$i.operation,\n className = _statistics$i.className,\n value = _statistics$i.value,\n type = _statistics$i.type;\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 tooltip: \"Copy column name\",\n copy: column.name,\n isQuiet: true\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 _this$props = this.props,\n onChange = _this$props.onChange,\n selectedColumns = _this$props.selectedColumns,\n invertSelection = _this$props.invertSelection;\n onChange(event.target.value, selectedColumns, invertSelection);\n }\n sendColumnChange(selectedColumns, invertSelection) {\n var _this$props2 = this.props,\n onChange = _this$props2.onChange,\n value = _this$props2.value;\n onChange(value, selectedColumns, invertSelection);\n }\n setInvertSelection(invertSelection) {\n var _this$props3 = this.props,\n onChange = _this$props3.onChange,\n value = _this$props3.value;\n onChange(value, [], invertSelection);\n }\n toggleColumn(name) {\n var _this$props4 = this.props,\n selectedColumns = _this$props4.selectedColumns,\n invertSelection = _this$props4.invertSelection;\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 columns = this.props.columns;\n this.sendColumnChange(columns.filter(c => TableUtils.isNumberType(c.type)).map(column => column.name), false);\n }\n render() {\n var _this$props5 = this.props,\n value = _this$props5.value,\n selectedColumns = _this$props5.selectedColumns,\n invertSelection = _this$props5.invertSelection,\n columns = _this$props5.columns;\n var isConfigureColumnsShown = this.state.isConfigureColumnsShown;\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 model = props.model;\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 model = _this.props.model;\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 prevConfig = prevProps.partitionConfig;\n var partitionConfig = this.props.partitionConfig;\n if (prevConfig !== partitionConfig) {\n this.updatePartitionOptions();\n }\n }\n componentWillUnmount() {\n this.pending.cancel();\n var _this$state = this.state,\n keysTable = _this$state.keysTable,\n baseTable = _this$state.baseTable,\n partitionTables = _this$state.partitionTables;\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 partitionConfig = this.props.partitionConfig;\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 partitionConfig = this.props.partitionConfig;\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 prevConfig = _this2.props.partitionConfig;\n assertNotNull(prevConfig);\n log.debug('handlePartitionSelect', index, selectedValue, prevConfig);\n var newPartitions = [...prevConfig.partitions];\n newPartitions[index] = selectedValue;\n var baseTable = _this2.state.baseTable;\n var keysTable = _this2.state.keysTable;\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 onChange = this.props.onChange;\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 model = this.props.model;\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 model = _this3.props.model;\n var prevConfig = _this3.props.partitionConfig;\n if (prevConfig == null) {\n return;\n }\n var keysTable = _this3.state.keysTable;\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 _this$props = this.props,\n model = _this$props.model,\n partitionConfig = _this$props.partitionConfig;\n assertNotNull(partitionConfig);\n var partitions = partitionConfig.partitions;\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 _this$props2 = this.props,\n model = _this$props2.model,\n partitionConfig = _this$props2.partitionConfig;\n var _this$state2 = this.state,\n isLoading = _this$state2.isLoading,\n partitionTables = _this$state2.partitionTables;\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 _this$props = this.props,\n model = _this$props.model,\n selectDistinctColumns = _this$props.selectDistinctColumns;\n this.state = {\n inputs: selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var inputs = this.state.inputs;\n var onChange = this.props.onChange;\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 prevInputs = _ref.inputs;\n return {\n inputs: [...prevInputs, '']\n };\n });\n }\n handleDeleteColumn(index) {\n this.setState(_ref2 => {\n var inputs = _ref2.inputs;\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 prevInputs = _ref3.inputs;\n var inputs = [...prevInputs];\n inputs[index] = value;\n return {\n inputs\n };\n });\n }\n renderInputs() {\n var _this$state = this.state,\n columns = _this$state.columns,\n inputs = _this$state.inputs;\n return inputs.map((value, index) => {\n var options = columns.filter(_ref4 => {\n var name = _ref4.name;\n return name === value || !inputs.includes(name);\n }).map(_ref5 => {\n var name = _ref5.name;\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 _this$state2 = this.state,\n columns = _this$state2.columns,\n inputs = _this$state2.inputs;\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 Log from '@deephaven/log';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('PluginTableOptionsErrorBoundary');\n/**\n * Tiny error boundary scoped to a single plugin-supplied sidebar page.\n * If the plugin's `configPage` throws during render, we log the error\n * once and render a minimal fallback (\"Failed to render\" + Back button)\n * rather than tearing down the entire `IrisGrid` subtree or leaving a\n * blank panel. Used only by the page-switch `default` case in\n * `IrisGrid.tsx`.\n */\nexport default class PluginTableOptionsErrorBoundary extends React.Component {\n static getDerivedStateFromError() {\n return {\n hasError: true\n };\n }\n constructor(props) {\n super(props);\n this.state = {\n hasError: false\n };\n }\n componentDidCatch(error, info) {\n var itemType = this.props.itemType;\n log.error(\"Plugin sidebar page \\\"\".concat(itemType, \"\\\" threw during render; suppressing.\"), error, info);\n }\n render() {\n var hasError = this.state.hasError;\n var _this$props = this.props,\n children = _this$props.children,\n itemType = _this$props.itemType,\n onBack = _this$props.onBack;\n if (!hasError) {\n return children;\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"plugin-sidebar-error\",\n role: \"alert\",\n \"data-testid\": \"plugin-sidebar-error\",\n children: [/*#__PURE__*/_jsxs(\"p\", {\n children: [\"This sidebar page (\", /*#__PURE__*/_jsx(\"code\", {\n children: itemType\n }), \") failed to render.\"]\n }), onBack != null && /*#__PURE__*/_jsx(\"button\", {\n type: \"button\",\n className: \"btn btn-secondary\",\n onClick: onBack,\n children: \"Back\"\n })]\n });\n }\n}\n//# sourceMappingURL=PluginTableOptionsErrorBoundary.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React 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 items = _ref.items,\n _ref$onChange = _ref.onChange,\n _onChange = _ref$onChange === void 0 ? () => undefined : _ref$onChange;\n return /*#__PURE__*/_jsx(Menu, {\n items: Array.from(items.entries()).map(_ref2 => {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n isOn = _ref3[1];\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 type = config.column.type;\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 _props$rules = props.rules,\n rules = _props$rules === void 0 ? [] : _props$rules,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange,\n _props$onCreate = props.onCreate,\n onCreate = _props$onCreate === void 0 ? DEFAULT_CALLBACK : _props$onCreate,\n _props$onSelect = props.onSelect,\n onSelect = _props$onSelect === void 0 ? DEFAULT_CALLBACK : _props$onSelect;\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport classNames from 'classnames';\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, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\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: classNames('form-control', 'd-flex', 'mr-2', {\n 'is-invalid': isInvalid\n }),\n placeholder: \"Start value\",\n value: startValue !== null && startValue !== void 0 ? startValue : '',\n onChange: handleStartValueChange\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"number\",\n className: classNames('form-control', 'd-flex', {\n 'is-invalid': isInvalid\n }),\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, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\n placeholder: \"Enter value\",\n value: conditionValue !== null && conditionValue !== void 0 ? conditionValue : '',\n onChange: handleValueChange\n });\n }\n}\nfunction getDateInputs(selectedCondition, handleValueChange, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\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, isInvalid, 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: classNames('form-control', {\n 'is-invalid': isInvalid\n }),\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 column = props.column,\n config = props.config,\n dh = props.dh,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var selectedColumnType = column.type;\n var _useState = useState(selectedColumnType),\n _useState2 = _slicedToArray(_useState, 2),\n prevColumnType = _useState2[0],\n setPrevColumnType = _useState2[1];\n var _useState3 = useState(config.condition),\n _useState4 = _slicedToArray(_useState3, 2),\n selectedCondition = _useState4[0],\n setCondition = _useState4[1];\n var _useState5 = useState(config.value),\n _useState6 = _slicedToArray(_useState5, 2),\n conditionValue = _useState6[0],\n setValue = _useState6[1];\n var _useState7 = useState(config.start),\n _useState8 = _slicedToArray(_useState7, 2),\n startValue = _useState8[0],\n setStartValue = _useState8[1];\n var _useState9 = useState(config.end),\n _useState0 = _slicedToArray(_useState9, 2),\n endValue = _useState0[0],\n setEndValue = _useState0[1];\n var _useState1 = useState(true),\n _useState10 = _slicedToArray(_useState1, 2),\n isValid = _useState10[0],\n setIsValid = _useState10[1];\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 value = e.target.value;\n log.debug('handleValueChange', value);\n setValue(value);\n }, []);\n var handleStartValueChange = useCallback(e => {\n var value = e.target.value;\n log.debug('handleStartValueChange', value);\n setStartValue(value);\n }, []);\n var handleEndValueChange = useCallback(e => {\n var value = e.target.value;\n log.debug('handleEndValueChange', value);\n setEndValue(value);\n }, []);\n useEffect(function changeCondition() {\n var isConditionValid = true;\n if (selectedCondition === undefined) {\n log.debug('Unable to create formatting rule. Condition is not selected.');\n isConditionValid = 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 isConditionValid = 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 isConditionValid = false;\n }\n setIsValid(isConditionValid);\n onChange({\n condition: selectedCondition,\n value: conditionValue,\n start: startValue,\n end: endValue\n }, isConditionValid);\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\n // Show invalid state only when there's a non-empty value that fails validation\n var hasInvalidValue = !isValid && conditionValue !== undefined && conditionValue !== '';\n if (TableUtils.isNumberType(selectedColumnType)) {\n // For IS_BETWEEN, show invalid on each field only if that field has a value\n var showInvalid = selectedCondition === NumberCondition.IS_BETWEEN ? !isValid && (startValue !== undefined && startValue !== '' || endValue !== undefined && endValue !== '') : hasInvalidValue;\n return getNumberInputs(selectedCondition, handleValueChange, handleStartValueChange, handleEndValueChange, showInvalid, conditionValue, startValue, endValue);\n }\n if (TableUtils.isCharType(selectedColumnType)) {\n return getCharInputs(selectedCondition, handleValueChange, hasInvalidValue, conditionValue);\n }\n if (TableUtils.isStringType(selectedColumnType)) {\n return getStringInputs(selectedCondition, handleValueChange, hasInvalidValue, conditionValue);\n }\n if (TableUtils.isDateType(selectedColumnType)) {\n return getDateInputs(selectedCondition, handleValueChange, hasInvalidValue, conditionValue);\n }\n if (TableUtils.isBooleanType(selectedColumnType)) {\n return getBooleanInputs();\n }\n }, [selectedColumnType, selectedCondition, conditionValue, startValue, endValue, isValid, 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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useCallback, useEffect, 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 config = props.config,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var _useState = useState(config.type),\n _useState2 = _slicedToArray(_useState, 2),\n styleType = _useState2[0],\n setStyleType = _useState2[1];\n var _useState3 = 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 _useState4 = _slicedToArray(_useState3, 2),\n background = _useState4[0],\n setBackground = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isShown = _useState6[0],\n setShown = _useState6[1];\n var _useState7 = useState(DEFAULT_DROPDOWN_WIDTH),\n _useState8 = _slicedToArray(_useState7, 2),\n dropdownWidth = _useState8[0],\n setDropdownWidth = _useState8[1];\n var csContainer = useRef(null);\n var handleBackgroundChange = useCallback(e => {\n var value = e.target.value;\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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\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, { 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 _columns$ = columns[0],\n type = _columns$.type,\n name = _columns$.name;\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 columns = props.columns,\n _props$config = props.config,\n config = _props$config === void 0 ? makeDefaultConfig(columns) : _props$config,\n dh = props.dh,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var _useState = 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 _useState2 = _slicedToArray(_useState, 2),\n selectedColumn = _useState2[0],\n setColumn = _useState2[1];\n var _useState3 = useState(getConditionConfig(config)),\n _useState4 = _slicedToArray(_useState3, 2),\n conditionConfig = _useState4[0],\n setConditionConfig = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n conditionValid = _useState6[0],\n setConditionValid = _useState6[1];\n var _useState7 = useState(config.style),\n _useState8 = _slicedToArray(_useState7, 2),\n selectedStyle = _useState8[0],\n setStyle = _useState8[1];\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var name = _ref.name;\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 type = selectedColumn.type,\n name = selectedColumn.name;\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 name = _ref2.name;\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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\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, { 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 _columns$ = columns[0],\n type = _columns$.type,\n name = _columns$.name;\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 columns = props.columns,\n _props$config = props.config,\n config = _props$config === void 0 ? makeDefaultConfig(columns) : _props$config,\n dh = props.dh,\n _props$onChange = props.onChange,\n onChange = _props$onChange === void 0 ? DEFAULT_CALLBACK : _props$onChange;\n var _useState = 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 _useState2 = _slicedToArray(_useState, 2),\n selectedColumn = _useState2[0],\n setColumn = _useState2[1];\n var _useState3 = useState(getConditionConfig(config)),\n _useState4 = _slicedToArray(_useState3, 2),\n conditionConfig = _useState4[0],\n setConditionConfig = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n conditionValid = _useState6[0],\n setConditionValid = _useState6[1];\n var _useState7 = useState(config.style),\n _useState8 = _slicedToArray(_useState7, 2),\n selectedStyle = _useState8[0],\n setStyle = _useState8[1];\n var handleColumnChange = useCallback(value => {\n var newColumn = columns.find(_ref => {\n var name = _ref.name;\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 type = selectedColumn.type,\n name = selectedColumn.name;\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 name = _ref2.name;\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useCallback, 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 originalColumns = props.columns,\n dh = props.dh,\n _props$onSave = props.onSave,\n onSave = _props$onSave === void 0 ? DEFAULT_CALLBACK : _props$onSave,\n _props$onUpdate = props.onUpdate,\n onUpdate = _props$onUpdate === void 0 ? DEFAULT_CALLBACK : _props$onUpdate,\n _props$onCancel = props.onCancel,\n onCancel = _props$onCancel === void 0 ? DEFAULT_CALLBACK : _props$onCancel,\n defaultRule = props.rule;\n var columns = originalColumns.filter(isSupportedColumn);\n var _useState = useState((_defaultRule$type = defaultRule === null || defaultRule === void 0 ? void 0 : defaultRule.type) !== null && _defaultRule$type !== void 0 ? _defaultRule$type : formatterTypes[0]),\n _useState2 = _slicedToArray(_useState, 2),\n selectedFormatter = _useState2[0],\n setFormatter = _useState2[1];\n var _useState3 = useState(defaultRule),\n _useState4 = _slicedToArray(_useState3, 2),\n rule = _useState4[0],\n setRule = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n isValid = _useState6[0],\n setIsValid = _useState6[1];\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport React, { useEffect, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Editor } from '@deephaven/console';\nimport { CopyButton, Icon, Modal, ModalBody, ModalHeader, ToggleButton, Tooltip } 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 text = _ref.text,\n isOpen = _ref.isOpen,\n onClose = _ref.onClose;\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isOpened = _useState2[0],\n setIsOpened = _useState2[1];\n var _useState3 = useState(0),\n _useState4 = _slicedToArray(_useState3, 2),\n height = _useState4[0],\n setHeight = _useState4[1];\n var _useState5 = useState(false),\n _useState6 = _slicedToArray(_useState5, 2),\n showLineNumbers = _useState6[0],\n setShowLineNumbers = _useState6[1];\n var _useState7 = useState(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isFormatted = _useState8[0],\n setIsFormatted = _useState8[1];\n var _useState9 = useState(false),\n _useState0 = _slicedToArray(_useState9, 2),\n canFormat = _useState0[0],\n setCanFormat = _useState0[1];\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 var _document$activeEleme;\n editorRef.current = editor;\n setHeight(editor.getContentHeight());\n editor.onDidContentSizeChange(_ref2 => {\n var contentHeight = _ref2.contentHeight;\n return setHeight(contentHeight);\n });\n autoSetLineNumbers();\n (_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 || _document$activeEleme.blur();\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 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__*/_jsxs(ToggleButton, {\n isSelected: showLineNumbers,\n \"aria-label\": \"Toggle line numbers\",\n onChange: toggleLineNumbers,\n children: [/*#__PURE__*/_jsx(Icon, {\n UNSAFE_className: \"action-button-icon-with-tooltip\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsListOrdered\n })\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Toggle line numbers\"\n })]\n }), canFormat && /*#__PURE__*/_jsxs(ToggleButton, {\n isSelected: isFormatted,\n \"aria-label\": \"Format as JSON\",\n onChange: formatAsJSON,\n children: [/*#__PURE__*/_jsx(Icon, {\n UNSAFE_className: \"action-button-icon-with-tooltip\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsJson\n })\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Format as JSON\"\n })]\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","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport { 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 gotoRow = _ref.gotoRow,\n gotoRowError = _ref.gotoRowError,\n gotoValueError = _ref.gotoValueError,\n onGotoRowSubmit = _ref.onGotoRowSubmit,\n isShown = _ref.isShown,\n onEntering = _ref.onEntering,\n _onEntered = _ref.onEntered,\n onExiting = _ref.onExiting,\n onExited = _ref.onExited,\n model = _ref.model,\n onGotoRowNumberChanged = _ref.onGotoRowNumberChanged,\n onClose = _ref.onClose,\n gotoValueSelectedColumnName = _ref.gotoValueSelectedColumnName,\n gotoValue = _ref.gotoValue,\n gotoValueFilter = _ref.gotoValueFilter,\n onGotoValueSelectedColumnNameChanged = _ref.onGotoValueSelectedColumnNameChanged,\n onGotoValueSelectedFilterChanged = _ref.onGotoValueSelectedFilterChanged,\n onGotoValueChanged = _ref.onGotoValueChanged,\n onGotoValueSubmit = _ref.onGotoValueSubmit;\n var gotoRowInputRef = useRef(null);\n var gotoValueInputRef = useRef(null);\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isGotoRowActive = _useState2[0],\n setIsGotoRowActive = _useState2[1];\n var columns = [];\n if (isIrisGridTableModelTemplate(model)) {\n columns = model.table.columns;\n }\n var dh = model.dh,\n rowCount = model.rowCount;\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 isOpen = _ref.isOpen,\n onClose = _ref.onClose,\n errorMessage = _ref.errorMessage;\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 _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\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 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 PluginTableOptionsErrorBoundary from \"./sidebar/PluginTableOptionsErrorBoundary.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 { 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 advancedFilters = _ref.advancedFilters,\n aggregationSettings = _ref.aggregationSettings,\n customColumns = _ref.customColumns,\n quickFilters = _ref.quickFilters,\n reverse = _ref.reverse,\n rollupConfig = _ref.rollupConfig,\n searchFilter = _ref.searchFilter,\n selectDistinctColumns = _ref.selectDistinctColumns,\n sorts = _ref.sorts;\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}\n\n/**\n * The subset of `IrisGridProps` that overrides how the grid presents its\n * model: theme, canvas renderer, extra mouse handlers, and the metric\n * calculator factory. Hosts that render `<IrisGrid>` on behalf of a plugin\n * (e.g. `GridWidgetPlugin`) accept this as a single passthrough bag so they\n * don't need to know each view concern by name, and plugins build it from\n * their own hooks. Kept as a `Pick` (not `Partial<IrisGridProps>`) so it can\n * never clobber structural props like `model` or `ref`.\n */\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 /**\n * The metric calculator factory most recently used to instantiate the\n * calculator currently stored in state. Used by `maybeRebuildMetricCalculator`\n * (called from `componentDidUpdate` when the `getMetricCalculator` prop\n * changes) to detect when a different factory is supplied and rebuild.\n */\n _defineProperty(this, \"lastMetricCalculatorFactory\", 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, \"getAdvancedMenuToggleMaximizeHandler\", memoize(column => this.handleAdvancedFilterToggleMaximize.bind(this, column), {\n max: 100\n }));\n _defineProperty(this, \"getCachedAdvancedFilterMenuActions\", memoize((model, column, advancedFilterOptions, sortDirection, formatter, isMaximized, onToggleMaximize) => /*#__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 isMaximized: isMaximized,\n onToggleMaximize: onToggleMaximize\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 order: 100\n });\n }\n if (isOrganizeColumnsAvailable) {\n optionItems.push({\n type: OptionType.VISIBILITY_ORDERING_BUILDER,\n title: 'Organize Columns',\n icon: dhEye,\n order: 200\n });\n }\n if (isFormatColumnsAvailable) {\n optionItems.push({\n type: OptionType.CONDITIONAL_FORMATTING,\n title: 'Conditional Formatting',\n icon: vsEdit,\n order: 300\n });\n }\n if (isCustomColumnsAvailable) {\n optionItems.push({\n type: OptionType.CUSTOM_COLUMN_BUILDER,\n title: 'Custom Columns',\n icon: vsSplitHorizontal,\n order: 400\n });\n }\n if (isRollupAvailable) {\n optionItems.push({\n type: OptionType.ROLLUP_ROWS,\n title: 'Rollup Rows',\n icon: dhTriangleDownSquare,\n order: 500\n });\n }\n if (isTotalsAvailable) {\n optionItems.push({\n type: OptionType.AGGREGATIONS,\n title: 'Aggregate Columns',\n icon: vsSymbolOperator,\n order: 600\n });\n }\n if (isSelectDistinctAvailable) {\n optionItems.push({\n type: OptionType.SELECT_DISTINCT,\n title: 'Select Distinct Values',\n icon: vsRuby,\n order: 700\n });\n }\n if (isExportAvailable && canDownloadCsv) {\n optionItems.push({\n type: OptionType.TABLE_EXPORTER,\n title: 'Download CSV',\n icon: vsCloudDownload,\n order: 800\n });\n }\n if (hasAdvancedSettings) {\n optionItems.push({\n type: OptionType.ADVANCED_SETTINGS,\n title: 'Advanced Settings',\n icon: vsTools,\n order: 900\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 order: 1000\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 order: 1100\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 order: 1200\n });\n return Object.freeze(optionItems);\n }, {\n max: 1\n }));\n /**\n * Apply the `transformTableOptions` transform (if any) to the\n * default option list.\n * Catches exceptions so a buggy plugin can't break the grid,\n * and warns about duplicate `type` collisions.\n */\n _defineProperty(this, \"getCachedTransformedOptionItems\", memoize((items, transformTableOptions) => {\n if (transformTableOptions == null) {\n return items;\n }\n var transformedItems;\n try {\n transformedItems = transformTableOptions(items);\n } catch (err) {\n log.error('transformTableOptions threw an error; falling back to defaults.', err);\n return items;\n }\n // Stably sort by ascending `order`. Items without an `order` sink to\n // the end of the menu (default `Infinity`), while items with an `order`\n // are positioned by their weight. Decorate-sort-undecorate guarantees\n // stability regardless of the engine's sort implementation.\n var sortedItems = transformedItems.map((item, index) => ({\n item,\n index\n })).sort((a, b) => {\n var _a$item$order, _b$item$order;\n return ((_a$item$order = a.item.order) !== null && _a$item$order !== void 0 ? _a$item$order : Infinity) - ((_b$item$order = b.item.order) !== null && _b$item$order !== void 0 ? _b$item$order : Infinity) || a.index - b.index;\n }).map(_ref2 => {\n var item = _ref2.item;\n return item;\n });\n var keys = new Set();\n for (var i = 0; i < sortedItems.length; i += 1) {\n var key = String(sortedItems[i].type);\n if (keys.has(key)) {\n log.warn(\"transformTableOptions produced duplicate type \\\"\".concat(key, \"\\\"; \") + 'only the first entry will be accessible from the menu.');\n break;\n }\n keys.add(key);\n }\n return Object.freeze(sortedItems);\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(_ref3 => {\n var operation = _ref3.operation,\n selected = _ref3.selected,\n invert = _ref3.invert;\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) => IrisGridUtils.getOperationMap(columns, aggregations), {\n max: 1\n }));\n _defineProperty(this, \"getOperationOrder\", memoize(aggregations => IrisGridUtils.getOperationOrder(aggregations), {\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) => IrisGridUtils.getModelTotalsConfig(columns, config, aggregationSettings), {\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 metricCalculator = this.state.metricCalculator;\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(mouseHandlersProp => [...mouseHandlersProp, ...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 model = this.props.model;\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 model = this.props.model;\n var loadingSpinnerShown = this.state.loadingSpinnerShown;\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 tableDownloadStatus = this.state.tableDownloadStatus;\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 expandTooltipDisplayValue = this.state.expandTooltipDisplayValue;\n var model = this.props.model;\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 hoverDisplayValue = this.state.hoverDisplayValue;\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.handleAdvancedFilterToggleMaximize = this.handleAdvancedFilterToggleMaximize.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.handlePending = this.handlePending.bind(this);\n this.handlePendingCleared = this.handlePendingCleared.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.handleModelChanged = this.handleModelChanged.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 model = this.props.model;\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 model = this.props.model;\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 _aggregationSettings = props.aggregationSettings,\n conditionalFormats = props.conditionalFormats,\n customColumnFormatMap = props.customColumnFormatMap,\n columnAlignmentMap = props.columnAlignmentMap,\n _isFilterBarShown = props.isFilterBarShown,\n isSelectingPartition = props.isSelectingPartition,\n partitions = props.partitions,\n partitionConfig = props.partitionConfig,\n _model = props.model,\n movedColumnsProp = props.movedColumns,\n movedRowsProp = props.movedRows,\n _rollupConfig = props.rollupConfig,\n _userColumnWidths = props.userColumnWidths,\n userColumnWidthsByName = props.userColumnWidthsByName,\n userRowHeights = props.userRowHeights,\n _showSearchBar = props.showSearchBar,\n _searchValue = props.searchValue,\n _selectedSearchColumns = props.selectedSearchColumns,\n _invertSearchColumns = props.invertSearchColumns,\n _advancedFilters = props.advancedFilters,\n _quickFilters = props.quickFilters,\n selectDistinctColumns = props.selectDistinctColumns,\n pendingDataMap = props.pendingDataMap,\n canCopy = props.canCopy,\n frozenColumns = props.frozenColumns,\n columnHeaderGroups = props.columnHeaderGroups,\n getMetricCalculator = props.getMetricCalculator;\n var _dh = _model.dh;\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 metricCalculatorFactory = getMetricCalculator;\n var _metricCalculator = metricCalculatorFactory({\n userColumnWidths: new Map(_userColumnWidths),\n userColumnWidthsByName: userColumnWidthsByName != null ? new Map(userColumnWidthsByName) : undefined,\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 // Remember the factory we used so we can detect a model-driven swap\n // (e.g. pivot-builder's proxy swapping its inner model) on COLUMNS_CHANGED.\n this.lastMetricCalculatorFactory = metricCalculatorFactory;\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 maximizedAdvancedFilter: 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 model = this.props.model;\n this.initState();\n this.startListening(model);\n }\n componentDidUpdate(prevProps, prevState) {\n var _this$props = this.props,\n inputFilters = _this$props.inputFilters,\n isSelectingColumn = _this$props.isSelectingColumn,\n settings = _this$props.settings,\n model = _this$props.model,\n customFilters = _this$props.customFilters,\n sorts = _this$props.sorts,\n getMetricCalculator = _this$props.getMetricCalculator;\n if (model !== prevProps.model) {\n this.stopListening(prevProps.model);\n this.startListening(model);\n }\n\n // The renderer and mouse handlers flow through memoized getters in\n // render(), so a `renderer` / `mouseHandlers` prop change naturally\n // propagates on the next render. The metric calculator, however, lives in\n // component state, so mirror that path when the `getMetricCalculator` prop\n // changes (e.g. the pivot-builder middleware swapping the pivot factory in\n // or out) so the calculator stays in sync. Moved columns are not touched\n // here — a model swap resets them via `handleModelChanged`.\n if (getMetricCalculator !== prevProps.getMetricCalculator) {\n this.maybeRebuildMetricCalculator();\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 advancedSettings = this.props.advancedSettings;\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 var isChanged = this.applyInputFilters(changedInputFilters, replaceExistingFilters);\n if (isChanged) {\n this.startLoading('Filtering...', {\n resetRanges: true\n });\n }\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 loadingScrimStartTime = this.loadingScrimStartTime,\n loadingScrimFinishTime = this.loadingScrimFinishTime;\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 openOptions = this.state.openOptions;\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 model = this.props.model;\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 keyHandlers = this.props.keyHandlers;\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 _this$state = this.state,\n advancedFilters = _this$state.advancedFilters,\n hoverSelectColumn = _this$state.hoverSelectColumn,\n isFilterBarShown = _this$state.isFilterBarShown,\n isMenuShown = _this$state.isMenuShown,\n loadingScrimProgress = _this$state.loadingScrimProgress,\n quickFilters = _this$state.quickFilters,\n sorts = _this$state.sorts,\n reverse = _this$state.reverse,\n rollupConfig = _this$state.rollupConfig;\n var _this$props2 = this.props,\n model = _this$props2.model,\n isSelectingColumn = _this$props2.isSelectingColumn;\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 renderer = this.props.renderer;\n return this.getCachedRenderer(renderer);\n }\n getMouseHandlers() {\n var mouseHandlers = this.props.mouseHandlers;\n return this.getCachedMouseHandlers(mouseHandlers);\n }\n getValueForCell(columnIndex, rowIndex) {\n var rawValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var model = this.props.model;\n var dh = model.dh;\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 formatter = model.formatter;\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 metrics = this.state.metrics;\n assertNotNull(metrics);\n var modelColumns = metrics.modelColumns;\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 metrics = this.state.metrics;\n assertNotNull(metrics);\n var modelRows = metrics.modelRows;\n if (modelRows == null) {\n return null;\n }\n return rowIndex != null ? modelRows.get(rowIndex) : null;\n }\n getTheme() {\n var _ref4;\n var _this$props3 = this.props,\n model = _this$props3.model,\n theme = _this$props3.theme,\n density = _this$props3.density;\n var _this$context = this.context,\n contextTheme = _this$context.theme,\n contextDensity = _this$context.density;\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 movedColumns = this.state.movedColumns;\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 * @returns True if any filters were changed as a result of this operation\n */\n applyInputFilters(inputFilters) {\n var replaceExisting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var model = this.props.model;\n var _this$state2 = this.state,\n advancedFilters = _this$state2.advancedFilters,\n quickFilters = _this$state2.quickFilters;\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 name = _ref5.name,\n type = _ref5.type,\n value = _ref5.value;\n var modelIndex = model.columns.findIndex(_ref6 => {\n var columnName = _ref6.name,\n columnType = _ref6.type;\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 return isChanged;\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 model = this.props.model;\n var formatter = model.formatter;\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 text = quickFilter.text;\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 advancedFilters = _ref7.advancedFilters;\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 quickFilters = _ref8.quickFilters;\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 advancedSettings = this.props.advancedSettings;\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 model = this.props.model;\n filterMap.forEach((_ref9, columnName) => {\n var columnType = _ref9.columnType,\n filterList = _ref9.filterList;\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 formatter = model.formatter;\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 advancedFilters = _ref0.advancedFilters,\n quickFilters = _ref0.quickFilters;\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 quickFilters = _ref1.quickFilters;\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 _this$state3 = this.state,\n advancedFilters = _this$state3.advancedFilters,\n quickFilters = _this$state3.quickFilters,\n searchFilter = _this$state3.searchFilter;\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 model = this.props.model;\n var _this$state4 = this.state,\n advancedFilters = _this$state4.advancedFilters,\n quickFilters = _this$state4.quickFilters;\n if (advancedFilters.size === 0 && quickFilters.size === 0) {\n log.debug('No filters to rebuild');\n return;\n }\n var columns = model.columns,\n formatter = model.formatter;\n log.debug('Rebuilding filters');\n var newAdvancedFilters = new Map();\n var newQuickFilters = new Map();\n advancedFilters.forEach((value, key) => {\n var options = value.options;\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 text = value.text;\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 quickFilters = _ref10.quickFilters,\n advancedFilters = _ref10.advancedFilters;\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 customColumnFormatMap = this.state.customColumnFormatMap;\n var model = this.props.model;\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 settings = this.props.settings;\n this.updateFormatterSettings(settings);\n }\n initState() {\n var model = this.props.model;\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 _this$props4 = this.props,\n applyInputFiltersOnInit = _this$props4.applyInputFiltersOnInit,\n inputFilters = _this$props4.inputFilters,\n sorts = _this$props4.sorts,\n model = _this$props4.model,\n reverse = _this$props4.reverse,\n reverseType = _this$props4.reverseType,\n customColumns = _this$props4.customColumns,\n searchValue = _this$props4.searchValue,\n selectedSearchColumns = _this$props4.selectedSearchColumns,\n invertSearchColumns = _this$props4.invertSearchColumns;\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 partitionConfig = _this.state.partitionConfig;\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 dh = model.dh;\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 data = event.detail;\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 model = this.props.model;\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 _ref12 = _slicedToArray(_ref11, 2),\n key = _ref12[0],\n _ = _ref12[1];\n return partitionColumnSet.has(key);\n }).map(_ref13 => {\n var _ref14 = _slicedToArray(_ref13, 2),\n key = _ref14[0],\n columnData = _ref14[1];\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 canCopy = this.props.canCopy;\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 canCopy = this.props.canCopy;\n var movedColumns = this.state.movedColumns;\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 _this$props5 = this.props,\n model = _this$props5.model,\n canCopy = _this$props5.canCopy;\n var _this$state5 = this.state,\n metricCalculator = _this$state5.metricCalculator,\n movedColumns = _this$state5.movedColumns;\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 _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$resetRanges = _ref15.resetRanges,\n resetRanges = _ref15$resetRanges === void 0 ? false : _ref15$resetRanges,\n _ref15$loadingCancelS = _ref15.loadingCancelShown,\n loadingCancelShown = _ref15$loadingCancelS === void 0 ? true : _ref15$loadingCancelS,\n _ref15$loadingBlocksG = _ref15.loadingBlocksGrid,\n loadingBlocksGrid = _ref15$loadingBlocksG === void 0 ? true : _ref15$loadingBlocksG;\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 minScrimTransitionTime = theme.minScrimTransitionTime,\n maxScrimTransitionTime = theme.maxScrimTransitionTime;\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 _this$lastLoadedConfi = this.lastLoadedConfig,\n advancedFilters = _this$lastLoadedConfi.advancedFilters,\n aggregationSettings = _this$lastLoadedConfi.aggregationSettings,\n customColumns = _this$lastLoadedConfi.customColumns,\n quickFilters = _this$lastLoadedConfi.quickFilters,\n reverse = _this$lastLoadedConfi.reverse,\n rollupConfig = _this$lastLoadedConfi.rollupConfig,\n searchFilter = _this$lastLoadedConfi.searchFilter,\n selectDistinctColumns = _this$lastLoadedConfi.selectDistinctColumns,\n sorts = _this$lastLoadedConfi.sorts;\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.PENDING, this.handlePending);\n model.addEventListener(IrisGridModel.EVENT.PENDING_CLEARED, this.handlePendingCleared);\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 model.addEventListener(IrisGridModel.EVENT.MODEL_CHANGED, this.handleModelChanged);\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.PENDING, this.handlePending);\n model.removeEventListener(IrisGridModel.EVENT.PENDING_CLEARED, this.handlePendingCleared);\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 model.removeEventListener(IrisGridModel.EVENT.MODEL_CHANGED, this.handleModelChanged);\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 movedColumns = this.state.movedColumns;\n var model = this.props.model;\n var columnCount = model.columnCount;\n var modelColumn = GridUtils.getModelIndex(column, movedColumns);\n if (column == null || columnCount <= column || !model.isFilterable(modelColumn)) {\n this.setState({\n focusedFilterBarColumn: null\n });\n return;\n }\n var _this$state6 = this.state,\n metricCalculator = _this$state6.metricCalculator,\n metrics = _this$state6.metrics;\n assertNotNull(metrics);\n var metricState = this.getMetricState();\n assertNotNull(metricState);\n var scrollColumn = metricCalculator.getScrollLeftForColumn(column, metricState, metrics);\n if (scrollColumn != null) {\n var _this$grid4;\n (_this$grid4 = this.grid) === null || _this$grid4 === void 0 || _this$grid4.setViewState({\n left: scrollColumn,\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$grid5;\n var _this$state7 = this.state,\n metricCalculator = _this$state7.metricCalculator,\n movedColumns = _this$state7.movedColumns;\n metricCalculator.setColumnWidth(GridUtils.getModelIndex(columnVisibleIndex, movedColumns), 0);\n (_this$grid5 = this.grid) === null || _this$grid5 === void 0 || _this$grid5.forceUpdate();\n }\n freezeColumnByColumnName(columnName) {\n var _this$state8 = this.state,\n frozenColumns = _this$state8.frozenColumns,\n movedColumns = _this$state8.movedColumns;\n var model = this.props.model;\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 _this$state9 = this.state,\n frozenColumns = _this$state9.frozenColumns,\n movedColumns = _this$state9.movedColumns;\n var model = this.props.model;\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 model = this.props.model;\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 model = this.props.model;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.expandAllColumns();\n }\n }\n collapseAllColumns() {\n log.debug2('Collapse all columns');\n var model = this.props.model;\n if (isExpandableColumnGridModel(model) && model.isExpandAllColumnsAvailable) {\n model.collapseAllColumns();\n }\n }\n handleColumnVisibilityChanged(modelIndexes, isVisible) {\n var _this$grid6;\n var _this$state0 = this.state,\n metricCalculator = _this$state0.metricCalculator,\n metrics = _this$state0.metrics;\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$grid6 = this.grid) === null || _this$grid6 === void 0 || _this$grid6.forceUpdate();\n }\n handleColumnVisibilityReset() {\n var _model$layoutHints$fr, _model$layoutHints2;\n var metricCalculator = this.state.metricCalculator;\n var model = this.props.model;\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 model = this.props.model;\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$grid7;\n (_this$grid7 = this.grid) === null || _this$grid7 === void 0 || _this$grid7.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 prevConfig = this.state.partitionConfig;\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 onError = this.props.onError;\n onError(error);\n }\n handleViewportUpdated() {\n var model = this.props.model;\n var _this$state1 = this.state,\n loadingText = _this$state1.loadingText,\n loadingSpinnerShown = _this$state1.loadingSpinnerShown;\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$grid8;\n var metricCalculator = this.state.metricCalculator;\n var userColumnWidths = metricCalculator.getUserColumnWidths();\n var entries = [...userColumnWidths.entries()];\n for (var i = 0; i < entries.length; i += 1) {\n var _entries$i = _slicedToArray(entries[i], 2),\n modelIndex = _entries$i[0],\n columnWidth = _entries$i[1];\n if (columnWidth === 0) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n }\n (_this$grid8 = this.grid) === null || _this$grid8 === void 0 || _this$grid8.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$grid9;\n this.setState({\n metrics: (_this$grid9 = this.grid) === null || _this$grid9 === void 0 ? void 0 : _this$grid9.updateMetrics()\n });\n }\n toggleSort(columnIndex, addToExisting) {\n log.info('Toggling sort for column', columnIndex);\n var model = this.props.model;\n var modelColumn = this.getModelColumn(columnIndex);\n assertNotNull(modelColumn);\n if (model.isColumnSortable(columnIndex)) {\n var currentSorts = this.state.sorts;\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$grid0;\n this.startLoading('Sorting...');\n this.setState({\n sorts\n });\n (_this$grid0 = this.grid) === null || _this$grid0 === void 0 || _this$grid0.forceUpdate();\n }\n sortColumn(modelColumn) {\n var _this$grid1;\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 model = this.props.model;\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$grid1 = this.grid) === null || _this$grid1 === void 0 || _this$grid1.forceUpdate();\n }\n reverse(reverse) {\n var _this$grid10;\n this.startLoading('Reversing...');\n this.setState({\n reverse\n });\n (_this$grid10 = this.grid) === null || _this$grid10 === void 0 || _this$grid10.forceUpdate();\n }\n isReversible() {\n var model = this.props.model;\n return model.isReversible;\n }\n toggleFilterBar() {\n var focusIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.lastFocusedFilterBarColumn;\n var isFilterBarShown = this.state.isFilterBarShown;\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 model = this.props.model;\n var columnCount = model.columnCount;\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$grid11;\n (_this$grid11 = this.grid) === null || _this$grid11 === void 0 || _this$grid11.focus();\n }\n }\n isTableSearchAvailable() {\n var _model$layoutHints3, _dh$SearchDisplayMode, _dh$SearchDisplayMode2;\n var _this$props6 = this.props,\n model = _this$props6.model,\n canToggleSearch = _this$props6.canToggleSearch;\n var dh = model.dh;\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 showSearchBar = this.state.showSearchBar;\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$grid12;\n (_this$grid12 = this.grid) === null || _this$grid12 === void 0 || _this$grid12.focus();\n }\n });\n }\n toggleGotoRow() {\n var _this$grid13, _this$grid14;\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 isGotoShown = this.state.isGotoShown;\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$grid13 = this.grid) === null || _this$grid13 === void 0 ? void 0 : _this$grid13.state.cursorRow;\n var cursorColumn = (_this$grid14 = this.grid) === null || _this$grid14 === void 0 ? void 0 : _this$grid14.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 model = this.props.model;\n var name = model.columns[cursorColumn].name;\n\n // Use raw value (same as Copy Cell Unformatted) to preserve full precision and timezone\n var text = String(this.getValueForCell(cursorColumn, cursorRow, true));\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 model = _this3.props.model;\n if (!isEditableGridModel(model) || !model.isEditable) {\n throw new Error('Cannot save, table is not editable');\n }\n var pendingSavePromise = _this3.state.pendingSavePromise;\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 pendingSavePromise = _this4.state.pendingSavePromise;\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 onColumnSelected = this.props.onColumnSelected;\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 onDataSelected = this.props.onDataSelected;\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 model = this.props.model;\n var columns = model.columns,\n groupedColumns = model.groupedColumns;\n var dataMap = {};\n var _loop = function _loop() {\n var column = columns[i];\n var name = column.name,\n type = column.type;\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 model = this.props.model;\n var index = model.getColumnIndexByName(column.name);\n assertNotNull(index);\n this.setAdvancedFilter(index, filter, options);\n }\n handleAdvancedFilterSortChange(column, direction) {\n var _this$grid15;\n var addToExisting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var model = this.props.model;\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$grid15 = this.grid) === null || _this$grid15 === void 0 || _this$grid15.forceUpdate();\n }\n handleAdvancedFilterDone() {\n var _this$grid16;\n (_this$grid16 = this.grid) === null || _this$grid16 === void 0 || _this$grid16.focus();\n }\n handleAdvancedFilterToggleMaximize(column) {\n this.setState(_ref16 => {\n var maximizedAdvancedFilter = _ref16.maximizedAdvancedFilter;\n return {\n maximizedAdvancedFilter: maximizedAdvancedFilter === column ? null : column\n };\n });\n }\n handleAdvancedMenuOpened(column) {\n this.setState({\n shownAdvancedFilter: column,\n maximizedAdvancedFilter: null\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 _this$state10 = this.state,\n focusedFilterBarColumn = _this$state10.focusedFilterBarColumn,\n isFilterBarShown = _this$state10.isFilterBarShown;\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 maximizedAdvancedFilter: null\n });\n } else {\n this.setState({\n focusedFilterBarColumn: null,\n shownAdvancedFilter: null,\n maximizedAdvancedFilter: 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 _this$props7 = this.props,\n model = _this$props7.model,\n onCreateChart = _this$props7.onCreateChart;\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(_ref17 => {\n var focusedFilterBarColumn = _ref17.focusedFilterBarColumn,\n quickFilters = _ref17.quickFilters;\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$grid17;\n (_this$grid17 = this.grid) === null || _this$grid17 === void 0 || _this$grid17.focus();\n }\n if (defocusInput) {\n this.setState({\n focusedFilterBarColumn: null\n });\n }\n }\n handleFilterBarTab(backward) {\n var focusedFilterBarColumn = this.state.focusedFilterBarColumn;\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 model = this.props.model;\n var column = model.columns[modelIndex];\n var prevCustomColumnFormatMap = this.state.customColumnFormatMap;\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 model = this.props.model;\n var column = model.columns[modelIndex];\n this.setState(_ref18 => {\n var _ref18$columnAlignmen = _ref18.columnAlignmentMap,\n columnAlignmentMap = _ref18$columnAlignmen === void 0 ? EMPTY_MAP : _ref18$columnAlignmen;\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(_ref19 => {\n var openOptions = _ref19.openOptions;\n var newOptions = [...openOptions];\n newOptions.pop();\n return {\n openOptions: newOptions\n };\n });\n }\n handleMenuSelect(option) {\n this.setState(_ref20 => {\n var openOptions = _ref20.openOptions;\n return {\n openOptions: [...openOptions, option]\n };\n });\n }\n handleRequestFailed(event) {\n var _ref21 = event,\n error = _ref21.detail;\n log.error('request failed:', error);\n this.stopLoading();\n var partitionConfig = this.state.partitionConfig;\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 onError = this.props.onError;\n onError(new Error(\"Error displaying table: \".concat(error)));\n }\n }\n\n /**\n * Raise the loading scrim in response to a model-driven `PENDING` event. The\n * model is the start signal, mirroring how `UPDATED`/`COLUMNS_CHANGED` are\n * already the model-driven stop signal. Idempotent: the first message within\n * a commit wins (the `loadingScrimStartTime == null` guard collapses multiple\n * pending operations into a single scrim).\n */\n handlePending(event) {\n var _ref22 = event,\n detail = _ref22.detail;\n var _ref23 = detail !== null && detail !== void 0 ? detail : {},\n text = _ref23.text,\n options = _ref23.options;\n if (this.loadingScrimStartTime == null) {\n this.startLoading(text !== null && text !== void 0 ? text : 'Loading...', _objectSpread({\n loadingCancelShown: false\n }, options));\n }\n }\n\n /**\n * Clear the loading scrim in response to a model-driven `PENDING_CLEARED`\n * event. Only needed for operations that do not naturally end in\n * `UPDATED`/`COLUMNS_CHANGED`/`REQUEST_FAILED`.\n */\n handlePendingCleared() {\n this.stopLoading();\n }\n handleUpdate() {\n var _this$grid18;\n log.debug2('Received model update');\n var _this$state11 = this.state,\n advancedFilters = _this$state11.advancedFilters,\n aggregationSettings = _this$state11.aggregationSettings,\n customColumns = _this$state11.customColumns,\n quickFilters = _this$state11.quickFilters,\n reverse = _this$state11.reverse,\n rollupConfig = _this$state11.rollupConfig,\n searchFilter = _this$state11.searchFilter,\n selectDistinctColumns = _this$state11.selectDistinctColumns,\n sorts = _this$state11.sorts;\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$grid18 = this.grid) === null || _this$grid18 === void 0 || _this$grid18.forceUpdate();\n this.stopLoading();\n }\n handleTableChanged() {\n var model = this.props.model;\n // For partitioned tables, we want to rebuild filters on table change to ensure filters are applied to the new partition\n var partitionConfig = this.state.partitionConfig;\n if (isPartitionedGridModel(model) && (partitionConfig === null || partitionConfig === void 0 ? void 0 : partitionConfig.mode) !== 'keys') {\n this.rebuildFilters();\n }\n }\n\n /**\n * Handle an inner-model swap on a proxy model (`MODEL_CHANGED`). The previous\n * model's `movedColumns` reference indices that may not exist in the new\n * model (e.g. a pivot exposes a different column set), so reset them to the\n * new model's initial order. The metric calculator is rebuilt separately when\n * the `getMetricCalculator` prop changes (see `componentDidUpdate`); a calc\n * whose seed `movedColumns` are now stale self-heals because `getMetrics`\n * reconciles against the grid's current `movedColumns` at draw time.\n */\n handleModelChanged() {\n var model = this.props.model;\n this.setState({\n movedColumns: model.initialMovedColumns\n });\n }\n handleViewChanged(metrics) {\n var _this$grid$state, _this$grid19;\n var model = this.props.model;\n var _ref24 = (_this$grid$state = (_this$grid19 = this.grid) === null || _this$grid19 === void 0 ? void 0 : _this$grid19.state) !== null && _this$grid$state !== void 0 ? _this$grid$state : {},\n _ref24$selectionEndRo = _ref24.selectionEndRow,\n selectionEndRow = _ref24$selectionEndRo === void 0 ? 0 : _ref24$selectionEndRo;\n var pendingRowCount = 0;\n if (isEditableGridModel(model) && model.isEditable) {\n assertNotNull(metrics);\n var bottomViewport = metrics.bottomViewport;\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 onSelectionChanged = this.props.onSelectionChanged;\n var copyOperation = this.state.copyOperation;\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 model = this.props.model;\n var prevColumnHeaderGroups = this.state.columnHeaderGroups;\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$grid20;\n return (_this$grid20 = this.grid) === null || _this$grid20 === void 0 ? void 0 : _this$grid20.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 _this$state12 = this.state,\n openOptions = _this$state12.openOptions,\n conditionalFormats = _this$state12.conditionalFormats;\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 _this$state13 = this.state,\n openOptions = _this$state13.openOptions,\n conditionalFormats = _this$state13.conditionalFormats;\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 model = this.props.model;\n var _this$state14 = this.state,\n movedColumns = _this$state14.movedColumns,\n sorts = _this$state14.sorts,\n quickFilters = _this$state14.quickFilters,\n advancedFilters = _this$state14.advancedFilters,\n selectDistinctColumns = _this$state14.selectDistinctColumns;\n var columns = model.columns;\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 isReady = this.state.isReady;\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\n /**\n * Rebuild the metric calculator when the `getMetricCalculator` prop swaps for\n * a different factory (e.g. entering or leaving a pivot, where the\n * pivot-builder middleware flips the prop). The renderer and mouse handlers\n * are recomputed via their memoized getters on the next render and do not\n * need explicit handling here.\n *\n * User column-widths / row-heights from the previous calculator are not\n * carried over: a factory swap means the column set has effectively changed,\n * so the stored sizes wouldn't map to anything meaningful.\n *\n * Moved columns are NOT reset here — that is owned by `handleModelChanged`\n * (the `MODEL_CHANGED` event) so that a plain prop swap against the same\n * model preserves the user's layout. The new calculator is seeded with the\n * current moved columns; `getMetrics` reconciles against the grid's live\n * `movedColumns` at draw time, so a later reset stays consistent.\n */\n maybeRebuildMetricCalculator() {\n var _model$layoutHints4;\n var getMetricCalculator = this.props.getMetricCalculator;\n var factory = getMetricCalculator;\n if (factory === this.lastMetricCalculatorFactory) return;\n var model = this.props.model;\n var movedColumns = this.state.movedColumns;\n var next = factory({\n userColumnWidths: new Map(),\n userRowHeights: new Map(),\n movedColumns,\n initialColumnWidths: new Map(model === null || model === void 0 || (_model$layoutHints4 = model.layoutHints) === null || _model$layoutHints4 === void 0 || (_model$layoutHints4 = _model$layoutHints4.hiddenColumns) === null || _model$layoutHints4 === void 0 ? void 0 : _model$layoutHints4.map(name => [model.getColumnIndexByName(name), 0]))\n });\n this.lastMetricCalculatorFactory = factory;\n log.debug('Swapping metric calculator', next);\n // Also push the new calculator onto the Grid synchronously so any\n // immediately-following read of `Grid.metricCalculator` (before React has\n // committed the setState below) uses the new instance against the new\n // model rather than invoking the old calculator and potentially throwing.\n if (this.grid != null) {\n this.grid.metricCalculator = next;\n }\n this.setState({\n metricCalculator: next\n });\n }\n handlePendingCommitClicked() {\n return this.commitPending();\n }\n handlePendingDiscardClicked() {\n return this.discardPending();\n }\n handlePendingDataUpdated() {\n var _this$grid21;\n log.debug('pending data updated');\n var model = this.props.model;\n var pendingDataMap = model.pendingDataMap,\n pendingDataErrors = model.pendingDataErrors;\n this.setState({\n pendingDataMap,\n pendingDataErrors,\n pendingSaveError: null\n });\n (_this$grid21 = this.grid) === null || _this$grid21 === void 0 || _this$grid21.forceUpdate();\n }\n handleResizeColumn(modelIndex) {\n var _this$grid22;\n var _this$state15 = this.state,\n metrics = _this$state15.metrics,\n metricCalculator = _this$state15.metricCalculator;\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$grid22 = this.grid) === null || _this$grid22 === void 0 || _this$grid22.forceUpdate();\n }\n handleResizeAllColumns() {\n var _this$grid23;\n var _this$state16 = this.state,\n metrics = _this$state16.metrics,\n metricCalculator = _this$state16.metricCalculator;\n if (!metrics) throw new Error('Metrics not set');\n var allColumns = [...metrics.allColumnWidths.entries()];\n var visibleColumns = allColumns.filter(_ref25 => {\n var _ref26 = _slicedToArray(_ref25, 2),\n _ = _ref26[0],\n width = _ref26[1];\n return width !== 0;\n }).map(_ref27 => {\n var _ref28 = _slicedToArray(_ref27, 1),\n modelIndex = _ref28[0];\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$grid23 = this.grid) === null || _this$grid23 === void 0 || _this$grid23.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 rollupConfig = this.state.rollupConfig;\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 rollupConfig = this.state.rollupConfig;\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(_ref29 => {\n var aggregationSettings = _ref29.aggregationSettings;\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 openOptions = this.state.openOptions;\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\n // Un-hide hidden group-by columns.\n if ((rollupConfig === null || rollupConfig === void 0 ? void 0 : rollupConfig.columns) != null && rollupConfig.columns.length > 0) {\n var metricCalculator = this.state.metricCalculator;\n var userColumnWidthsByName = metricCalculator.getUserColumnWidthsByName();\n rollupConfig.columns.forEach(name => {\n if (userColumnWidthsByName.get(name) === 0) {\n metricCalculator.resetColumnWidthByName(name);\n }\n });\n }\n this.resetGridViewState();\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 canDownloadCsv = this.props.canDownloadCsv;\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 canDownloadCsv = this.props.canDownloadCsv;\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(_ref30 => {\n var aggregationSettings = _ref30.aggregationSettings;\n var aggregations = aggregationSettings.aggregations;\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 _this6$state = _this6.state,\n selectedColumnName = _this6$state.gotoValueSelectedColumnName,\n gotoValueSelectedFilter = _this6$state.gotoValueSelectedFilter;\n var model = _this6.props.model;\n var dh = model.dh;\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 formatter = model.formatter;\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 _DateUtils$parseDateR = DateUtils.parseDateRange(dh, inputString, formatter.timeZone),\n _DateUtils$parseDateR2 = _slicedToArray(_DateUtils$parseDateR, 1),\n startDate = _DateUtils$parseDateR2[0];\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 model = this.props.model;\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 isSelectingColumn = this.props.isSelectingColumn;\n if (isSelectingColumn) {\n var columnAllowedCursor = this.props.columnAllowedCursor;\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 irisGridState = this.state;\n var gridState = this.grid.state;\n var onStateChange = this.props.onStateChange;\n onStateChange(irisGridState, gridState);\n }\n handleOverflowClose() {\n var _this$grid24;\n this.setState({\n showOverflowModal: false\n });\n (_this$grid24 = this.grid) === null || _this$grid24 === void 0 || _this$grid24.focus(); // Focus on the grid after closing the overflow modal\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 _this$state17 = this.state,\n metrics = _this$state17.metrics,\n shownColumnTooltip = _this$state17.shownColumnTooltip;\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 columnHeaderHeight = metrics.columnHeaderHeight,\n allColumnXs = metrics.allColumnXs,\n allColumnWidths = metrics.allColumnWidths,\n width = metrics.width,\n columnHeaderMaxDepth = metrics.columnHeaderMaxDepth;\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 rowNumber = this.state.gotoRow;\n this.focusRowInGrid(rowNumber);\n }\n focusRowInGrid(rowNumber) {\n var model = this.props.model;\n var rowCount = model.rowCount;\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 columnHeaderHeight = metrics.columnHeaderHeight,\n columnHeaderMaxDepth = metrics.columnHeaderMaxDepth,\n allColumnXs = metrics.allColumnXs,\n allColumnWidths = metrics.allColumnWidths,\n width = metrics.width;\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 model = this.props.model;\n var cursorRow = (_this$grid28 = this.grid) === null || _this$grid28 === void 0 ? void 0 : _this$grid28.state.cursorRow;\n var _this$state18 = this.state,\n prevColumnName = _this$state18.gotoValueSelectedColumnName,\n gotoValueManuallyChanged = _this$state18.gotoValueManuallyChanged;\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 gotoValue = this.state.gotoValue;\n this.seekRow(gotoValue, isBackwards);\n }\n\n /**\n * Render the input field for the focused filter\n * @param metrics Grid metrics\n * @param metricCalculator Metric calculator\n * @param focusedFilterBarColumn Column index for the focused filter\n * @param quickFilters Quick filters map\n * @param advancedFilters Advanced filters map\n * @returns The filter input field element or null if not applicable\n */\n getFilterBarInput(metrics, metricCalculator, focusedFilterBarColumn, quickFilters, advancedFilters) {\n var _this$grid29;\n if (metrics == null || focusedFilterBarColumn == null) {\n return null;\n }\n var metricState = this.getMetricState();\n if (metricState == null) {\n return null;\n }\n var filterBoxCoordinates = metricCalculator.getFilterInputCoordinates(focusedFilterBarColumn, metricState, metrics);\n if (filterBoxCoordinates == null) {\n return null;\n }\n var debounceMs = Math.min(Math.max(IrisGrid.minDebounce, Math.round(metrics.rowCount / 200)), IrisGrid.maxDebounce);\n var x = filterBoxCoordinates.x,\n y = filterBoxCoordinates.y,\n fieldWidth = filterBoxCoordinates.width,\n fieldHeight = filterBoxCoordinates.height;\n var width = metrics.width;\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 var showAdvancedFilterButton = metricCalculator.getAdvancedFilterButtonCoordinates(focusedFilterBarColumn, metricState, metrics) != null;\n return /*#__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 showAdvancedFilterButton: showAdvancedFilterButton,\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 render() {\n var _rollupConfig$columns7,\n _rollupConfig$columns8,\n _this7 = this,\n _this$grid30,\n _openOptions;\n var _this$props8 = this.props,\n children = _this$props8.children,\n customFilters = _this$props8.customFilters,\n getDownloadWorker = _this$props8.getDownloadWorker,\n isSelectingColumn = _this$props8.isSelectingColumn,\n isStuckToBottom = _this$props8.isStuckToBottom,\n isStuckToRight = _this$props8.isStuckToRight,\n model = _this$props8.model,\n name = _this$props8.name,\n onlyFetchVisibleColumns = _this$props8.onlyFetchVisibleColumns,\n alwaysFetchColumns = _this$props8.alwaysFetchColumns,\n advancedSettings = _this$props8.advancedSettings,\n onAdvancedSettingsChange = _this$props8.onAdvancedSettingsChange,\n canDownloadCsv = _this$props8.canDownloadCsv,\n onCreateChart = _this$props8.onCreateChart,\n transformTableOptions = _this$props8.transformTableOptions;\n var _this$state19 = this.state,\n metricCalculator = _this$state19.metricCalculator,\n metrics = _this$state19.metrics,\n isFilterBarShown = _this$state19.isFilterBarShown,\n isSelectingPartition = _this$state19.isSelectingPartition,\n isMenuShown = _this$state19.isMenuShown,\n isReady = _this$state19.isReady,\n copyOperation = _this$state19.copyOperation,\n focusedFilterBarColumn = _this$state19.focusedFilterBarColumn,\n loadingText = _this$state19.loadingText,\n loadingScrimProgress = _this$state19.loadingScrimProgress,\n loadingSpinnerShown = _this$state19.loadingSpinnerShown,\n loadingCancelShown = _this$state19.loadingCancelShown,\n loadingBlocksGrid = _this$state19.loadingBlocksGrid,\n shownColumnTooltip = _this$state19.shownColumnTooltip,\n hoverAdvancedFilter = _this$state19.hoverAdvancedFilter,\n shownAdvancedFilter = _this$state19.shownAdvancedFilter,\n maximizedAdvancedFilter = _this$state19.maximizedAdvancedFilter,\n hoverSelectColumn = _this$state19.hoverSelectColumn,\n quickFilters = _this$state19.quickFilters,\n advancedFilters = _this$state19.advancedFilters,\n searchFilter = _this$state19.searchFilter,\n selectDistinctColumns = _this$state19.selectDistinctColumns,\n movedColumns = _this$state19.movedColumns,\n movedRows = _this$state19.movedRows,\n formatter = _this$state19.formatter,\n conditionalFormats = _this$state19.conditionalFormats,\n conditionalFormatPreview = _this$state19.conditionalFormatPreview,\n conditionalFormatEditIndex = _this$state19.conditionalFormatEditIndex,\n columnAlignmentMap = _this$state19.columnAlignmentMap,\n sorts = _this$state19.sorts,\n reverse = _this$state19.reverse,\n customColumns = _this$state19.customColumns,\n selectedRanges = _this$state19.selectedRanges,\n isTableDownloading = _this$state19.isTableDownloading,\n tableDownloadStatus = _this$state19.tableDownloadStatus,\n tableDownloadProgress = _this$state19.tableDownloadProgress,\n tableDownloadEstimatedTime = _this$state19.tableDownloadEstimatedTime,\n showSearchBar = _this$state19.showSearchBar,\n searchValue = _this$state19.searchValue,\n selectedSearchColumns = _this$state19.selectedSearchColumns,\n invertSearchColumns = _this$state19.invertSearchColumns,\n aggregationSettings = _this$state19.aggregationSettings,\n selectedAggregation = _this$state19.selectedAggregation,\n rollupConfig = _this$state19.rollupConfig,\n openOptions = _this$state19.openOptions,\n pendingSavePromise = _this$state19.pendingSavePromise,\n pendingSaveError = _this$state19.pendingSaveError,\n pendingRowCount = _this$state19.pendingRowCount,\n pendingDataErrors = _this$state19.pendingDataErrors,\n pendingDataMap = _this$state19.pendingDataMap,\n toastMessage = _this$state19.toastMessage,\n frozenColumns = _this$state19.frozenColumns,\n columnHeaderGroups = _this$state19.columnHeaderGroups,\n showOverflowModal = _this$state19.showOverflowModal,\n showNoPastePermissionModal = _this$state19.showNoPastePermissionModal,\n noPastePermissionError = _this$state19.noPastePermissionError,\n overflowText = _this$state19.overflowText,\n overflowButtonTooltipProps = _this$state19.overflowButtonTooltipProps,\n expandCellTooltipProps = _this$state19.expandCellTooltipProps,\n hoverTooltipProps = _this$state19.hoverTooltipProps,\n isGotoShown = _this$state19.isGotoShown,\n gotoRow = _this$state19.gotoRow,\n gotoRowError = _this$state19.gotoRowError,\n gotoValueError = _this$state19.gotoValueError,\n gotoValueSelectedColumnName = _this$state19.gotoValueSelectedColumnName,\n gotoValue = _this$state19.gotoValue,\n gotoValueSelectedFilter = _this$state19.gotoValueSelectedFilter,\n partitionConfig = _this$state19.partitionConfig;\n if (!isReady) {\n return null;\n }\n var theme = this.getTheme();\n var singleColumnHeaderHeight = theme.columnHeaderHeight;\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 = isFilterBarShown ? this.getFilterBarInput(metrics, metricCalculator, focusedFilterBarColumn, quickFilters, advancedFilters) : null;\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 metricState = this.getMetricState();\n\n // Advanced Filter buttons\n var visibleColumns = metrics.visibleColumns;\n var _loop2 = function _loop2() {\n var columnIndex = visibleColumns[i];\n var modelColumn = _this7.getModelColumn(columnIndex);\n if (modelColumn != null) {\n var isFilterable = model.isFilterable(modelColumn);\n var buttonCoordinates = isFilterable && metricState ? metricCalculator.getAdvancedFilterButtonCoordinates(columnIndex, metricState, metrics) : null;\n if (buttonCoordinates != null) {\n var x = buttonCoordinates.x,\n y = buttonCoordinates.y;\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 maximizedAdvancedFilter: null\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 gridX = metrics.gridX,\n _visibleColumns = metrics.visibleColumns,\n allColumnXs = metrics.allColumnXs,\n allColumnWidths = metrics.allColumnWidths,\n columnHeaderHeight = metrics.columnHeaderHeight;\n var _loop3 = function _loop3() {\n var columnIndex = _visibleColumns[_i4];\n var columnX = allColumnXs.get(columnIndex);\n var columnWidth = allColumnWidths.get(columnIndex);\n if (columnX != null && columnWidth != null && columnWidth > 0) {\n var xColumnHeader = gridX + columnX;\n var xFilterBar = gridX + columnX + columnWidth - 20;\n var style = 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 advancedFilter = advancedFilters.get(modelColumn);\n var _ref31 = advancedFilter || {},\n advancedFilterOptions = _ref31.options;\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: style,\n children: /*#__PURE__*/_jsx(Popper, {\n className: \"advanced-filter-menu-popper\",\n isMaximized: shownAdvancedFilter === columnIndex && maximizedAdvancedFilter === columnIndex,\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, shownAdvancedFilter === columnIndex && maximizedAdvancedFilter === columnIndex, _this7.getAdvancedMenuToggleMaximizeHandler(columnIndex))\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 defaultOptionItems = 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 optionItems = this.getCachedTransformedOptionItems(defaultOptionItems, transformTableOptions);\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 {\n // Plugin-contributed items render their own page via\n // `configPage`. The page is isolated inside an error\n // boundary so a throwing plugin doesn't tear down the\n // entire grid subtree. Built-in items that hit the default\n // case indicate a programmer error (unhandled enum case).\n var PluginPage = option.configPage;\n if (PluginPage == null) {\n throw Error(\"Unexpected option type \".concat(option.type));\n }\n return /*#__PURE__*/_jsx(PluginTableOptionsErrorBoundary, {\n itemType: String(option.type),\n onBack: this.handleMenuBack,\n children: /*#__PURE__*/_jsx(PluginPage, {\n model: model,\n onBack: this.handleMenuBack\n })\n }, String(option.type));\n }\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__*/_jsx(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 }, \"table-options\"), ...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 userColumnWidthsByName: undefined,\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: undefined,\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","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","n","l","u","f","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","_group$getVisibleRang","_group$getVisibleRang2","startVisibleIndex","endVisibleIndex","_ref","_ref2","_allColumnWidths$get2","possibleLeft","GridColumnMoveMouseHandler","GridMouseHandler","grid","direction","lastLeft","leftOffset","nextLeft","nextOffset","_userColumnWidths$get","prevColumnWidth","leftColumnWidth","_userColumnWidths$get2","_modelIndex","_grid$state","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","_ref3","_ref3$right","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","_this$getLeftWithOffs","newLeft","newLeftOffset","_this$getLeftWithOffs2","GridRowMoveMouseHandler","row","columnHeaderHeight","allRowYs","rowY","getOrThrow","draggingRow","_grid$getGridPointFro","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","_this$getTopWithOffse","newTop","newTopOffset","_this$getTopWithOffse2","EditMouseHandler","isEditableGridModel","GridRange","KeyHandler","order","SelectionKeyHandler","_model","_columnCount","deltaColumn","deltaRow","isShiftKey","isModifierKey","cursorRow","cursorColumn","selectionEndColumn","selectionEndRow","maximizePreviousRange","moveToColumn","moveToRow","_theme$autoSelectRow","autoSelectRow","_theme$autoSelectColu","autoSelectColumn","_grid$state2","_metricCalculator$get","topVisible","selectRangeEndPosition","viewportPosition","_grid$state3","_metricCalculator$get2","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","parseValueFromText","parseValueFromElement","element","_element$textContent$","_element$textContent","childNodes","hasTabChar","hasFirefoxTab","PasteKeyHandler","dummyInput","cleanup","pasteListener","inputListener","plainText","_clipboardEvent$clipb","_clipboardEvent$clipb2","clipboardEvent","value","directionForKey","SELECTION_DIRECTION","CellInputField","selectionRange","_ref$className","className","_ref$disabled","disabled","_ref$value","propsValue","_ref$isQuickEdit","propsIsQuickEdit","_ref$onChange","onChange","EMPTY_FUNCTION","_ref$onCancel","onCancel","_ref$onDone","onDone","_ref$onContextMenu","onContextMenu","style","inputField","useRef","isCancelled","_useState","useState","_useState2","initialValue","_useState3","_useState4","isChanged","setIsChanged","_useState5","_useState6","isQuickEdit","setIsQuickEdit","_useState7","_useState8","setValue","useEffect","field","sendUpdate","useCallback","newValue","handleChange","handleCancel","handleClick","handleCommit","fillRange","handleBlur","handleKeyDown","handleContextMenu","_jsx","classNames","ThemeContext","React","asyncGeneratorStep","_asyncToGenerator","_next","_throw","Grid","PureComponent","context","_ref4","_legacyContext$webkit","devicePixelRatio","legacyContext","backingStorePixelRatio","cursor","props","memoize","keyHandlers","b","mouseHandlers","isStuckToBottom","isStuckToRight","renderer","GridRenderer","GridMetricCalculator","GridColumnSeparatorMouseHandler","GridRowTreeMouseHandler","GridTokenMouseHandler","GridSelectionMouseHandler","EMPTY_ARRAY","_this$canvas","_this$props","_this$getStickyScroll","prevProps","prevState","renderError","changedProps","changedState","_this$props2","isStickyBottom","isStickyRight","onMovedColumnsChanged","onMoveColumnComplete","onMovedRowsChanged","onMoveRowComplete","prevIsStickyBottom","prevIsStickyRight","prevPropMovedColumns","prevPropMovedRows","prevStateMovedColumns","prevStateMovedRows","_this$state","currentStateMovedColumns","currentStateMovedRows","stateUpdates","updatedState","_this$getStickyScroll2","_this$canvas2","rect","state","_this$props3","stateOverride","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","columnIndex","_this$metrics","rowIndex","_this$metrics2","expandDescendants","_this$metrics3","rightVisible","gridRanges","_this$state2","newCursorRow","newCursorColumn","_range$startCell","canvas","canvasOptions","canvasContext","renderState","onViewChanged","canvasWrapper","scale","_this$state3","_this$metrics4","_this$metrics5","_this$prevMetrics","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","_this$metrics6","gridY","userRowHeights","tableHeight","halfViewportHeight","_this$props4","_this$state4","_this$state5","_this$state6","ranges","_gridRange$nextCell","gridRange","_nextCursor","keepCursorInView","_this$metrics7","leftVisible","_this$state7","viewState","forceUpdate","_this$props5","_this$metrics8","modelColumn","_this","_this$state8","assertIsEditableGridModel","_edits","modelRanges","tableWidth","_range$startColumn","_range$startRow","_range$startColumn2","_range$startRow2","edits","_range$startColumn3","_range$startColumn4","_range$startRow3","onError","_this$props6","err","_this$props7","_this$state9","_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","_ref5$updateRevision","updateRevision","_GridUtils$getScrollD","deltaY","maxLeftOffset","_metrics$allColumnWid","_metrics$allColumnWid2","_columnWidth","maxTopOffset","_metrics$allRowHeight","_metrics$allRowHeight2","_rowHeight","_ref6","editingCell","_ref7","_ref7$direction","_ref7$fillRange","_this$state0","_this$getTheme","activeCellSelectionBorderWidth","w","h","leftBorderOffset","wrapperStyle","inputStyle","isValid","_this$state1","draggingColumnSeparator","draggingRowOffset","draggingRowSeparator","_this$props8","children","_jsxs","moveOperations","token","isLinkToken","contextTheme","userTheme","GridTheme","log","Log","AdvancedFilterCreatorFilterItem","columnType","filterType","TableUtils","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","getLabelForBooleanFilter","memoizeOne","operation","timeZone","tableUtils","_props$value","_value","filterTypes","_props$selectedType","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","isMaximized","onToggleMaximize","valuesTableError","isValuesTableAvailable","isBoolean","isDateType","filterItemElements","_loop","filterOperator","isAndFilter","operatorElement","showAddFilterItem","addFilterItem","FontAwesomeIcon","dhNewCircleLargeFilled","dhSortAmountDown","vsScreenNormal","vsScreenFull","_Fragment","makeTernaryFormatRule","config","prevRule","styleDBString","getStyleDBString","conditionDBString","getConditionDBString","makeRowFormatColumn","rule","makeColumnFormatColumn","col","_toArray","_iterableToArray","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","formattedValue","_value$split","_value$split2","dateTimeString","rest","tzCode","tz","getShortLabelForConditionType","getFormatColumns","columns","rules","rowFormatConfig","columnFormatConfigMap","formatterType","name","prevFormatColumn","formatColumn","isDateConditionValid","_split","_split2","DateUtils","isSupportedColumn","IrisGridBottomBar","_ref$animation","animation","isShown","onClick","onEntering","onEntered","onExiting","onExited","nodeRef","CSSTransition","ThemeExport","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","_ref$isSaving","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","_this3$props","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","showAdvancedFilterButton","isAdvancedFilterSet","onAdvancedFiltersTriggered","dhFilterFilled","vsFilter","CopyCellKeyHandler","irisGrid","CopyKeyHandler","ReverseKeyHandler","IrisGridShortcuts","reverse","ClearFilterKeyHandler","ToastBottomBar","_ref$children","setIsShown","timeout","prevChildren","startTimer","COLUMN_BUFFER_PAGES","IrisGridModelUpdater","columnAlignmentMap","_ref$reverse","sorts","customColumns","alwaysFetchColumns","_ref$rollupConfig","rollupConfig","_ref$totalsConfig","totalsConfig","_ref$selectDistinctCo","selectDistinctColumns","_ref$pendingRowCount","_ref$pendingDataMap","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","_statistics$i","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","PluginTableOptionsErrorBoundary","info","itemType","hasError","onBack","AdvancedSettingsMenu","_onChange","Menu","isOn","AdvancedSettingsType","DEFAULT_CALLBACK","getRuleValue","getRuleTitle","ConditionalFormattingMenu","_props$rules","_props$onChange","_props$onCreate","onCreate","_props$onSelect","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","isInvalid","conditionValue","getStringInputs","getDateInputs","getBooleanInputs","getCharInputs","ConditionEditor","selectedColumnType","prevColumnType","setPrevColumnType","setCondition","setStartValue","_useState9","_useState0","setEndValue","_useState1","_useState10","setIsValid","conditions","handleConditionChange","isConditionValid","conditionInputs","hasInvalidValue","showInvalid","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","_columns$","ColumnFormatEditor","_columns$find","_props$config","setColumn","conditionConfig","setConditionConfig","conditionValid","setConditionValid","selectedStyle","setStyle","handleColumnChange","newColumn","updatedConditionConfig","handleStyleChange","updatedStyleConfig","columnNames","ComboBox","RowFormatEditor","getFormatterTypeIcon","FormatColumnWhereIcon","FormatRowWhereIcon","getFormatterTypeLabel","formatterTypes","ConditionalFormatEditor","_defaultRule$type","originalColumns","_props$onSave","_props$onUpdate","onUpdate","_props$onCancel","defaultRule","selectedFormatter","setFormatter","setRule","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","_document$activeEleme","contentHeight","Modal","ModalHeader","ToggleButton","Icon","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","transformTableOptions","transformedItems","sortedItems","_a$item$order","_b$item$order","aggregations","aggregationMap","selected","invert","AggregationUtils","rulesParam","preview","editIndex","hoverSelectColumn","isSelectingColumn","loadingScrimProgress","isMenuShown","customFilters","isEditable","floatingRowCount","density","_theme$rowFooterWidth","baseTheme","createDefaultIrisGridTheme","rowFooterWidth","densityTheme","mouseHandlersProp","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","userColumnWidthsByName","_showSearchBar","_searchValue","_selectedSearchColumns","_invertSearchColumns","_advancedFilters","_quickFilters","canCopy","getMetricCalculator","_dh","_keyHandlers","IrisGridCellOverflowMouseHandler","IrisGridRowTreeMouseHandler","IrisGridTokenMouseHandler","IrisGridColumnSelectMouseHandler","IrisGridColumnTooltipMouseHandler","IrisGridSortMouseHandler","IrisGridFilterMouseHandler","IrisGridContextMenuHandler","IrisGridDataSelectMouseHandler","PendingMouseHandler","IrisGridPartitionedTableMouseHandler","IrisGridCopyCellMouseHandler","metricCalculatorFactory","_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","_this$context","contextDensity","replaceExisting","newAdvancedFilters","newQuickFilters","quickFilter","_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","_ref13","_ref14","columnData","loadingText","_ref15","_ref15$resetRanges","resetRanges","_ref15$loadingCancelS","loadingCancelShown","_ref15$loadingBlocksG","loadingBlocksGrid","_this$gridWrapper$get","_this$gridWrapper","minScrimTransitionTime","maxScrimTransitionTime","scrimTransitionTime","_this$lastLoadedConfi","IrisGridModel","_this$grid3","scrollColumn","_this$grid4","columnVisibleIndex","_this$grid5","allFrozenColumns","isExpandableColumnGridModel","modelIndexes","isVisible","_this$grid6","defaultWidth","calculatedWidth","_model$layoutHints$fr","_model$layoutHints2","_this$grid7","loadingMessage","_this$grid8","entries","_entries$i","_this$grid9","currentSorts","_this$grid0","_this$grid1","isAbs","_this$grid10","focusIndex","_this$grid11","_model$layoutHints3","_dh$SearchDisplayMode","_dh$SearchDisplayMode2","searchDisplayMode","_this$crossColumnRef","_this$crossColumnRef2","_this$grid12","_this$grid13","_this$grid14","isGotoShown","_this$gotoRowRef$curr","_document","pendingSavePromise","containsGridCellInputField","_this3$grid","ValidationError","newPendingSavePromise","_this4","onColumnSelected","dataMap","onDataSelected","_this5","groupedColumns","isExpandable","isGrouped","_this$grid15","oldSort","newSort","_this$grid16","_ref16","maximizedAdvancedFilter","_this$filterInputRef","_this$state10","focusedFilterBarColumn","_this$filterInputRef2","onCreateChart","_ref17","_this$grid17","selectedFormat","prevCustomColumnFormatMap","columnFormattingRule","alignment","_ref18","_ref18$columnAlignmen","newColumnAlignmentMap","_ref19","newOptions","_ref20","_ref21","isMissingPartitionError","_ref22","detail","_ref23","_this$grid18","_this$state11","_this$grid$state","_this$grid19","_ref24","_ref24$selectionEndRo","bottomViewport","bottomNonFloating","onChangeApplied","prevColumnHeaderGroups","isColumnHeaderGroup","_this$grid20","tooltip","_this$state12","_this$state13","_this$state14","oldCustomColumns","customColumn","removedColumnNames","newSorts","newSelectDistinctColumns","isReady","_model$layoutHints4","factory","next","_this$grid21","_this$grid22","_this$state15","contentWidth","userWidths","_this$grid23","_this$state16","allColumns","visibleColumns","_ref25","_ref26","_ref27","_ref28","contentWidths","manualColumns","_i3","_contentWidth","_rollupConfig$columns","_rollupConfig$columns2","added","removed","isRollup","changes","shouldStartLoading","op","aggregation","_rollupConfig$columns3","_rollupConfig$columns4","_ref29","_rollupConfig$columns5","_rollupConfig$columns6","fileName","frozenTable","tableSubscription","snapshotRanges","includeColumnHeaders","useUnformattedValues","_ref30","newAggregations","inputString","_arguments","_this6","_this6$grid","isBackwards","_this6$state","selectedColumnName","gotoValueSelectedFilter","searchFromRow","isContains","isIgnoreCase","_this6$grid2","columnDataType","_DateUtils$parseDateR","_DateUtils$parseDateR2","startDate","inputValue","_this$tableSaver","isDeletableGridModel","columnAllowedCursor","irisGridState","gridState","onStateChange","_this$grid24","_this$gridWrapper2","_this$state17","shownColumnTooltip","gridRect","popperMargin","columnX","rowNumber","rowInt","_this$grid25","_this$grid26","_this$grid27","boundedLeft","boundedWidth","virtualReference","_this$tooltip","_this$grid28","_this$state18","prevColumnName","gotoValueManuallyChanged","prevColumn","_this$grid29","filterBoxCoordinates","fieldWidth","fieldHeight","advancedFilter","isBarFiltered","_rollupConfig$columns7","_rollupConfig$columns8","_this7","_this$grid30","_openOptions","getDownloadWorker","onlyFetchVisibleColumns","onAdvancedSettingsChange","_this$state19","hoverAdvancedFilter","shownAdvancedFilter","conditionalFormatEditIndex","isTableDownloading","selectedAggregation","pendingSaveError","toastMessage","showOverflowModal","showNoPastePermissionModal","noPastePermissionError","overflowText","singleColumnHeaderHeight","focusField","loadingElement","loadingStatus","columnTooltip","_this$tooltip2","filterBar","_loop2","isFilterable","buttonCoordinates","isFilterSet","isFilterVisible","_this7$grid","advancedFilterMenus","_visibleColumns","_loop3","_i4","xColumnHeader","xFilterBar","_ref31","isSortDirection","defaultOptionItems","openOptionsStack","ChartBuilder","VisibilityOrderingBuilder","CustomColumnBuilder","RollupRows","Aggregations","AggregationEdit","PluginPage","vsMenu","TableSaver","tableSaver","SlideTransition","Stack","Page","ContextActions","IrisGridThemeContext","DownloadServiceWorkerUtils","_len","args","_key","IrisGridMetricCalculator"],"mappings":"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"}
|