@deephaven/code-studio 1.15.1 → 1.15.2-alpha-fetch-variable-def.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.
Files changed (53) hide show
  1. package/build/assets/{AppRoot-yoU6xO7o.js → AppRoot-DwJuOWo6.js} +4 -4
  2. package/build/assets/{AppRoot-yoU6xO7o.js.map → AppRoot-DwJuOWo6.js.map} +1 -1
  3. package/build/assets/{Chart-B-lgYFRk.js → Chart-C1i1ho1y.js} +2 -2
  4. package/build/assets/{Chart-B-lgYFRk.js.map → Chart-C1i1ho1y.js.map} +1 -1
  5. package/build/assets/{ControlType-BXDfYonb.js → ControlType-BEonYtyB.js} +4 -4
  6. package/build/assets/{ControlType-BXDfYonb.js.map → ControlType-BEonYtyB.js.map} +1 -1
  7. package/build/assets/{FormatterUtils-VvugcpnR.js → FormatterUtils-Bg2N5U7m.js} +2 -2
  8. package/build/assets/{FormatterUtils-VvugcpnR.js.map → FormatterUtils-Bg2N5U7m.js.map} +1 -1
  9. package/build/assets/{Grid-BhSfx_MV.js → Grid-Hz5UYdT_.js} +2 -2
  10. package/build/assets/{Grid-BhSfx_MV.js.map → Grid-Hz5UYdT_.js.map} +1 -1
  11. package/build/assets/GridTokenMouseHandler-DHkBdrVc.js +2 -0
  12. package/build/assets/GridTokenMouseHandler-DHkBdrVc.js.map +1 -0
  13. package/build/assets/{IrisGrid-CxxjDqw5.js → IrisGrid-DkGF7p3K.js} +3 -3
  14. package/build/assets/{IrisGrid-CxxjDqw5.js.map → IrisGrid-DkGF7p3K.js.map} +1 -1
  15. package/build/assets/{IrisGridModel-DSlx1u3X.js → IrisGridModel-DoD8cIz5.js} +3 -3
  16. package/build/assets/{IrisGridModel-DSlx1u3X.js.map → IrisGridModel-DoD8cIz5.js.map} +1 -1
  17. package/build/assets/{IrisGridShortcuts-RA3wXust.js → IrisGridShortcuts-DBc8G-3x.js} +2 -2
  18. package/build/assets/{IrisGridShortcuts-RA3wXust.js.map → IrisGridShortcuts-DBc8G-3x.js.map} +1 -1
  19. package/build/assets/{IrisGridThemeProvider-6it02n4x.js → IrisGridThemeProvider-BJrYi5zT.js} +6 -6
  20. package/build/assets/IrisGridThemeProvider-BJrYi5zT.js.map +1 -0
  21. package/build/assets/{LocalWorkspaceStorage-BZKRnSF8.js → LocalWorkspaceStorage-Ddl67eNC.js} +2 -2
  22. package/build/assets/{LocalWorkspaceStorage-BZKRnSF8.js.map → LocalWorkspaceStorage-Ddl67eNC.js.map} +1 -1
  23. package/build/assets/{MarkdownEditor-C2AAm9ih.js → MarkdownEditor-BcHfeFVY.js} +2 -2
  24. package/build/assets/{MarkdownEditor-C2AAm9ih.js.map → MarkdownEditor-BcHfeFVY.js.map} +1 -1
  25. package/build/assets/{MarkdownNotebook-DBOYivNl.js → MarkdownNotebook-Du5g1GaK.js} +2 -2
  26. package/build/assets/{MarkdownNotebook-DBOYivNl.js.map → MarkdownNotebook-Du5g1GaK.js.map} +1 -1
  27. package/build/assets/{MissingPartitionError-uL8lR3Hy.js → MissingPartitionError-Cjrlbi18.js} +2 -2
  28. package/build/assets/{MissingPartitionError-uL8lR3Hy.js.map → MissingPartitionError-Cjrlbi18.js.map} +1 -1
  29. package/build/assets/{MockChartModel-DTdba9NN.js → MockChartModel-B9nKAkLg.js} +2 -2
  30. package/build/assets/{MockChartModel-DTdba9NN.js.map → MockChartModel-B9nKAkLg.js.map} +1 -1
  31. package/build/assets/Plot-D75AfC4O.js +2 -0
  32. package/build/assets/{Plot-Cachc_IP.js.map → Plot-D75AfC4O.js.map} +1 -1
  33. package/build/assets/{Plotly-CqwB2UoY.js → Plotly-CAcUhtAR.js} +2 -2
  34. package/build/assets/{Plotly-CqwB2UoY.js.map → Plotly-CAcUhtAR.js.map} +1 -1
  35. package/build/assets/{StyleGuideRoot-DTTYIKzl.js → StyleGuideRoot-WshrSVsS.js} +2 -2
  36. package/build/assets/{StyleGuideRoot-DTTYIKzl.js.map → StyleGuideRoot-WshrSVsS.js.map} +1 -1
  37. package/build/assets/{index-Pb0fT4BS.js → index-CAjC8rry.js} +4 -4
  38. package/build/assets/{index-Pb0fT4BS.js.map → index-CAjC8rry.js.map} +1 -1
  39. package/build/assets/{index-SLNddBo_.js → index-Nhi6EDbw.js} +3 -3
  40. package/build/assets/{index-SLNddBo_.js.map → index-Nhi6EDbw.js.map} +1 -1
  41. package/build/assets/index-ODecto2-.js +2 -0
  42. package/build/assets/index-ODecto2-.js.map +1 -0
  43. package/build/assets/plotly-Cm_x6xfs.js +7 -0
  44. package/build/assets/{plotly-CJ0h1Bb8.js.map → plotly-Cm_x6xfs.js.map} +1 -1
  45. package/build/index.html +1 -1
  46. package/package.json +31 -31
  47. package/build/assets/GridTokenMouseHandler-Dem4pZ7B.js +0 -2
  48. package/build/assets/GridTokenMouseHandler-Dem4pZ7B.js.map +0 -1
  49. package/build/assets/IrisGridThemeProvider-6it02n4x.js.map +0 -1
  50. package/build/assets/Plot-Cachc_IP.js +0 -2
  51. package/build/assets/index-DZpheLqH.js +0 -2
  52. package/build/assets/index-DZpheLqH.js.map +0 -1
  53. package/build/assets/plotly-CJ0h1Bb8.js +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IrisGridThemeProvider-BJrYi5zT.js","sources":["../../../react-hooks/dist/useOnChange.js","../../../react-hooks/dist/useOnScrollOffsetChangeCallback.js","../../../react-hooks/dist/useWindowedListData.js","../../../react-hooks/dist/useUndoRedo.js","../../../iris-grid/dist/sidebar/aggregations/Aggregations.js","../../../iris-grid/dist/sidebar/aggregations/AggregationEdit.js","../../../iris-grid/dist/sidebar/icons/BarIcon.js","../../../iris-grid/dist/sidebar/icons/HistogramIcon.js","../../../iris-grid/dist/sidebar/icons/LineIcon.js","../../../iris-grid/dist/sidebar/icons/PieIcon.js","../../../iris-grid/dist/sidebar/icons/ScatterIcon.js","../../../iris-grid/dist/sidebar/icons/FormatColumnWhereIcon.js","../../../iris-grid/dist/sidebar/icons/FormatRowWhereIcon.js","../../../iris-grid/dist/sidebar/ChartBuilder.js","../../../iris-grid/dist/sidebar/InputEditor.js","../../../iris-grid/dist/sidebar/CustomColumnInput.js","../../../grid/dist/DeletableGridModel.js","../../../grid/dist/ExpandableColumnGridModel.js","../../../iris-grid/dist/sidebar/CustomColumnBuilder.js","../../../iris-grid/dist/sidebar/OptionType.js","../../../iris-grid/dist/sidebar/RollupRows.js","../../../iris-grid/dist/sidebar/TableCsvExporter.js","../../../iris-grid/dist/sidebar/TableSaver.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/SearchItem.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/SearchWithModal.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js","../../../iris-grid/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js","../../../iris-grid/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js","../../../iris-grid/dist/format-context-menus/CustomFormatAction.js","../../../iris-grid/dist/format-context-menus/FormatContextMenuUtils.js","../../../iris-grid/dist/format-context-menus/DateTimeFormatContextMenu.js","../../../iris-grid/dist/format-context-menus/DecimalFormatContextMenu.js","../../../iris-grid/dist/format-context-menus/IntegerFormatContextMenu.js","../../../iris-grid/dist/format-context-menus/TextAlignmentFormatContextMenu.js","../../../iris-grid/dist/mousehandlers/IrisGridContextMenuHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridCopyCellMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridDataSelectMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridFilterMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridRowTreeMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridSortMouseHandler.js","../../../iris-grid/dist/mousehandlers/PendingMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridTokenMouseHandler.js","../../../iris-grid/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js","../../../iris-grid/dist/TreeRebalanceUtil.js","../../../iris-grid/dist/IrisGridMetricCalculator.js","../../../iris-grid/dist/IrisGridIcons.js","../../../iris-grid/dist/IrisGridCellRendererUtils.js","../../../iris-grid/dist/IrisGridTextCellRenderer.js","../../../iris-grid/dist/IrisGridDataBarCellRenderer.js","../../../iris-grid/dist/IrisGridRenderer.js","../../../iris-grid/dist/IrisGridTheme.js","../../../jsapi-components/dist/useTableListener.js","../../../jsapi-components/dist/spectrum/utils/itemUtils.js","../../../jsapi-components/dist/spectrum/utils/useItemRowDeserializer.js","../../../jsapi-components/dist/useFormatter.js","../../../jsapi-components/dist/useTableUtils.js","../../../jsapi-components/dist/useGetItemIndexByValue.js","../../../jsapi-components/dist/useTableSize.js","../../../jsapi-components/dist/useInitializeViewportData.js","../../../jsapi-components/dist/useSetPaddedViewportCallback.js","../../../jsapi-components/dist/Constants.js","../../../jsapi-components/dist/useViewportData.js","../../../jsapi-components/dist/useFilterConditionFactories.js","../../../jsapi-components/dist/useViewportFilter.js","../../../jsapi-components/dist/useSearchableViewportData.js","../../../jsapi-components/dist/useWidgetClose.js","../../../jsapi-components/dist/spectrum/utils/usePickerProps.js","../../../jsapi-components/dist/spectrum/Picker.js","../../../iris-grid/dist/IrisGridThemeProvider.js"],"sourcesContent":["import usePrevious from \"./usePrevious.js\";\n/**\n * Custom hook that triggers a callback function immediately when any of the dependencies change.\n *\n * @param callback - The function to be called when the dependencies change.\n * @param deps - The list of dependencies to watch for changes.\n */\nexport function useOnChange(callback, deps) {\n var prevDeps = usePrevious(deps);\n if (prevDeps === undefined || !deps.every((dep, i) => dep === prevDeps[i])) {\n callback();\n }\n}\nexport default useOnChange;\n//# sourceMappingURL=useOnChange.js.map","import { useCallback, useRef } from 'react';\n\n/**\n * Returns a callback that transforms a scroll event handler to an offset\n * change handler. Supports an optional debounce as well.\n * @param offsetSize\n * @param onChange\n * @param debounceMs\n */\nexport function useOnScrollOffsetChangeCallback(offsetSize, onChange) {\n var debounceMs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var debounceTimeout = useRef();\n var previousOffsetRef = useRef(0);\n return useCallback(event => {\n // clear previous debounce timer\n window.clearTimeout(debounceTimeout.current);\n debounceTimeout.current = window.setTimeout(() => {\n var offset = Math.floor(event.target.scrollTop / offsetSize);\n if (previousOffsetRef.current !== offset) {\n previousOffsetRef.current = offset;\n onChange(offset);\n }\n }, debounceMs);\n }, [debounceMs, offsetSize, onChange]);\n}\nexport default useOnScrollOffsetChangeCallback;\n//# sourceMappingURL=useOnScrollOffsetChangeCallback.js.map","// eslint-disable-next-line no-restricted-imports\n\nimport { useCallback, useMemo, useState } from 'react';\n\n/**\n * Subset of React Stately ListData + bulkUpdate.\n */\n\n/**\n * Manages state associated with an immutable list of data.\n *\n * This hook is a revised version of React Stately's\n * `useListData` hook with a couple of improvements.\n * - Added support for bulk update\n * - Proper memoization of the return object + its members\n * - Using Iterable instead of spread function arguments to avoid stack overflow\n * for large lists\n * - findItem - method to look for item without throwing an exception if it isn't found\n *\n * @param options.getKey Optional function to derive a key from an item in the list\n */\nexport function useWindowedListData() {\n var {\n getKey = defaultGetKey\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var [items, setItems] = useState([]);\n var [selectedKeys, setSelectedKeys] = useState(() => new Set());\n\n /** Determine if key matches an item's key */\n var matchKey = useCallback(key => item => getKey(item) === key, [getKey]);\n\n /** Search for item with given key. Returns null if not found. */\n var findItem = useCallback(key => {\n var _items$find;\n return (_items$find = items.find(matchKey(key))) !== null && _items$find !== void 0 ? _items$find : null;\n }, [items, matchKey]);\n\n /**\n * Get item with the given key. Throws an error if matching item does not exist.\n * Use `findItem` to return null instead of throwing an error.\n */\n var getItem = useCallback(key => {\n var item = findItem(key);\n if (item == null) {\n throw new Error(\"No item found matching key: \".concat(key));\n }\n return item;\n }, [findItem]);\n\n /** Append items to the end of the list */\n var append = useCallback(values => {\n setItems(prevItems => [...prevItems, ...values]);\n }, []);\n\n /** Insert items starting at the given index */\n var insert = useCallback((index, values) => {\n setItems(prevItems => [...prevItems.slice(0, index), ...values, ...prevItems.slice(index)]);\n }, []);\n\n /** Remove items with the given keys */\n var remove = useCallback(keys => {\n var keySet = new Set(keys);\n setItems(prevItems => prevItems.filter(item => !keySet.has(getKey(item))));\n }, [getKey]);\n\n /** Put a given item in the slot corresponding to a given key */\n var update = useCallback((key, item) => {\n var i = items.findIndex(matchKey(key));\n if (i === -1) {\n return;\n }\n setItems(prevItems => [...prevItems.slice(0, i), item, ...prevItems.slice(i + 1)]);\n }, [items, matchKey]);\n\n /**\n * Bulk update items from a map of keys to items. It is optimized to only\n * re-create the list 1x.\n */\n var bulkUpdate = useCallback(itemMap => {\n if (itemMap.size === 0) {\n return;\n }\n var indices = [];\n var indexMap = new Map();\n\n // Build a sorted array of indices for keys we want to update + a map\n // of those indices to their respective keys.\n // eslint-disable-next-line no-restricted-syntax\n for (var key of itemMap.keys()) {\n var i = items.findIndex(matchKey(key));\n indices.push(i);\n indexMap.set(i, key);\n }\n indices.sort((a, b) => a - b);\n var newItems = [];\n\n // Build a new items array replacing any items corresponding to our\n // indices array.\n items.forEach((item, i) => {\n if (indices[0] === i) {\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n var _key = indexMap.get(indices.shift());\n var newItem = itemMap.get(_key);\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n\n newItems.push(newItem);\n } else {\n newItems.push(item);\n }\n });\n setItems(newItems);\n }, [items, matchKey]);\n var listData = useMemo(() => ({\n items,\n selectedKeys,\n append,\n bulkUpdate,\n findItem,\n getItem,\n insert,\n remove,\n setItems,\n setSelectedKeys,\n update\n }), [append, bulkUpdate, findItem, getItem, insert, items, remove, setItems, selectedKeys, update]);\n return listData;\n}\n\n/**\n * Default getKey function simply returns item.key if the property exists. If\n * not, an error is thrown.\n * @param item\n */\nexport function defaultGetKey(item) {\n var hasKey = item != null && typeof item === 'object' && 'key' in item;\n if (!hasKey) {\n throw new Error('Item does not have a `key` prop.');\n }\n return item.key;\n}\nexport default useWindowedListData;\n//# sourceMappingURL=useWindowedListData.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 { useCallback, useState } from 'react';\n/**\n * A hook that provides undo/redo functionality for a state value.\n * @param initialState The initial state value.\n * @param limit The maximum number of states to keep in the undo/redo history.\n * @returns An object containing the current state, functions to update the state,\n * and flags indicating whether undo/redo actions are possible.\n */\nexport function useUndoRedo(initialState) {\n var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;\n var [value, setValue] = useState({\n state: initialState,\n undoStack: [],\n redoStack: []\n });\n var set = useCallback(newState => {\n setValue(prevValue => {\n var {\n undoStack,\n state\n } = prevValue;\n if (newState === state) {\n return prevValue;\n }\n undoStack.push(state);\n if (undoStack.length > limit) {\n undoStack.shift();\n }\n return {\n state: newState,\n undoStack,\n redoStack: []\n };\n });\n }, [limit]);\n var undo = useCallback(() => {\n setValue(prevValue => {\n if (prevValue.undoStack.length === 0) {\n return prevValue;\n }\n var {\n undoStack,\n redoStack,\n state\n } = prevValue;\n var newValue = undoStack.pop();\n redoStack.push(state);\n return {\n state: newValue,\n undoStack,\n redoStack\n };\n });\n }, []);\n var redo = useCallback(() => {\n setValue(prevValue => {\n if (prevValue.redoStack.length === 0) {\n return prevValue;\n }\n var {\n undoStack,\n redoStack,\n state\n } = prevValue;\n var newValue = redoStack.pop();\n undoStack.push(state);\n return {\n state: newValue,\n undoStack,\n redoStack\n };\n });\n }, []);\n var clear = useCallback(() => {\n setValue(prevValue => _objectSpread(_objectSpread({}, prevValue), {}, {\n undoStack: [],\n redoStack: []\n }));\n }, []);\n return {\n state: value.state,\n set,\n undo,\n redo,\n canUndo: value.undoStack.length > 0,\n canRedo: value.redoStack.length > 0,\n clear\n };\n}\nexport default useUndoRedo;\n//# sourceMappingURL=useUndoRedo.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DragDropContext } from '@hello-pangea/dnd';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash, vsEdit, dhWarningFilled } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { DraggableItemList, DragUtils, Option, Select, Radio, RadioGroup, Button } from '@deephaven/components';\nimport AggregationOperation from \"./AggregationOperation.js\";\nimport AggregationUtils, { SELECTABLE_OPTIONS } from \"./AggregationUtils.js\";\nimport \"./Aggregations.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('Aggregations');\nfunction Aggregations(_ref) {\n var {\n isRollup,\n settings,\n availablePlacements = ['top', 'bottom'],\n onChange,\n onEdit,\n dh\n } = _ref;\n var {\n aggregations,\n showOnTop\n } = settings;\n var options = useMemo(() => SELECTABLE_OPTIONS.filter(option => !aggregations.some(aggregation => aggregation.operation === option) && !(option === AggregationOperation.MEDIAN &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - MEDIAN is not defined in older version of Core\n dh.AggregationOperation.MEDIAN === undefined)), [aggregations, dh]);\n var [selectedOperation, setSelectedOperation] = useState(options[0]);\n var [selectedRanges, setSelectedRanges] = useState([]);\n var changeSettings = useCallback(function (changedSettings) {\n var added = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var removed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n onChange(_objectSpread(_objectSpread({}, settings), changedSettings), added, removed);\n }, [onChange, settings]);\n var changeAggregations = useCallback(function (newAggregations) {\n var added = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var removed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n changeSettings({\n aggregations: newAggregations\n }, added, removed);\n }, [changeSettings]);\n var changeShowOnTop = useCallback(newShowOnTop => {\n changeSettings({\n showOnTop: newShowOnTop\n });\n }, [changeSettings]);\n var handleDragStart = useCallback(() => {\n log.debug('handleDragStart');\n DragUtils.startDragging();\n }, []);\n var handleDragEnd = useCallback(_ref2 => {\n var {\n destination,\n source\n } = _ref2;\n log.debug('handleDragEnd', destination, source);\n DragUtils.stopDragging();\n if (destination == null) {\n return;\n }\n var destinationIndex = destination.index;\n if (source.index < destination.index) {\n destinationIndex += 1;\n }\n var newAggregations = [...aggregations];\n var draggedItems = DragUtils.reorder(newAggregations, selectedRanges, newAggregations, destinationIndex);\n var insertIndex = DragUtils.adjustDestinationIndex(destinationIndex, selectedRanges);\n var newSelectedRanges = [[insertIndex, insertIndex + draggedItems.length - 1]];\n changeAggregations(newAggregations);\n setSelectedRanges(newSelectedRanges);\n }, [changeAggregations, aggregations, selectedRanges, setSelectedRanges]);\n var handleOperationChange = useCallback(operation => {\n setSelectedOperation(operation);\n }, [setSelectedOperation]);\n var handleAdd = useCallback(() => {\n changeAggregations([...aggregations, {\n operation: selectedOperation,\n selected: [],\n invert: true\n }], [selectedOperation]);\n }, [aggregations, selectedOperation, changeAggregations]);\n var handleDeleteClicked = useCallback(itemIndex => {\n var [keep, remove] = aggregations.reduce((_ref3, aggregation, index) => {\n var [keepSoFar, removeSoFar] = _ref3;\n if (index === itemIndex) {\n removeSoFar.push(aggregation.operation);\n } else {\n keepSoFar.push(aggregation);\n }\n return [keepSoFar, removeSoFar];\n }, [[], []]);\n changeAggregations(keep, [], remove);\n }, [aggregations, changeAggregations]);\n var handleAggregationSelectionChange = useCallback(newSelectedRanges => {\n setSelectedRanges(newSelectedRanges);\n }, [setSelectedRanges]);\n var handleAggregationSelect = useCallback(itemIndex => {\n var aggregation = aggregations[itemIndex];\n if (!AggregationUtils.isRollupOperation(aggregation.operation)) {\n onEdit(aggregation);\n }\n }, [aggregations, onEdit]);\n var handleShowOnTopChange = useCallback(value => {\n changeShowOnTop(value === 'true');\n }, [changeShowOnTop]);\n useEffect(function setDefaultOperation() {\n if (options.length > 0 && !options.includes(selectedOperation)) {\n setSelectedOperation(options[0]);\n }\n }, [options, selectedOperation]);\n var renderAggregation = useCallback(_ref4 => {\n var {\n item,\n itemIndex,\n isClone = false,\n selectedCount\n } = _ref4;\n var text = item.operation;\n var badgeText = isClone ? \"\".concat(selectedCount) : undefined;\n var className = isClone ? 'item-list-item-clone' : undefined;\n var isRollupOperation = AggregationUtils.isRollupOperation(item.operation);\n var isRollupProhibited = AggregationUtils.isRollupProhibited(item.operation);\n var isEditable = !isClone && !isRollupOperation;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: classNames('item-list-item-content', 'draggable-item-list-item-content', className),\n children: [/*#__PURE__*/_jsxs(\"span\", {\n className: \"title\",\n children: [text, !isRollup && isRollupOperation && /*#__PURE__*/_jsxs(\"span\", {\n className: \"small text-warning\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningFilled\n }), \" Requires rollup\"]\n }), isRollup && isRollupProhibited && /*#__PURE__*/_jsxs(\"span\", {\n className: \"small text-warning\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhWarningFilled\n }), \" Not available on rollups\"]\n })]\n }), DraggableItemList.renderBadge({\n text: badgeText\n }), DraggableItemList.renderHandle()]\n }), !isClone && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-edit\",\n icon: vsEdit,\n tooltip: \"Edit Columns\",\n onClick: () => onEdit(item),\n disabled: !isEditable\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-delete\",\n icon: vsTrash,\n tooltip: \"Delete Aggregation\",\n onClick: () => handleDeleteClicked(itemIndex)\n })]\n })]\n });\n }, [handleDeleteClicked, onEdit, isRollup]);\n var isOptionsShown = options.length > 0;\n var isAggregationsShown = aggregations.length > 0;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"aggregations\",\n children: [isOptionsShown && /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-inline\",\n children: [/*#__PURE__*/_jsx(Select, {\n onChange: handleOperationChange,\n value: selectedOperation,\n children: options.map(option => /*#__PURE__*/_jsx(Option, {\n value: option,\n children: option\n }, option))\n }), /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: \"btn btn-link btn-add\",\n onClick: handleAdd,\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhNewCircleLargeFilled\n }), \"Add Aggregation\"]\n })]\n }), isOptionsShown && isAggregationsShown && /*#__PURE__*/_jsx(\"hr\", {}), isAggregationsShown && /*#__PURE__*/_jsxs(_Fragment, {\n children: [!isRollup && /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(\"label\", {\n id: \"placement-options-label\",\n children: \"Placement:\\xA0\"\n }), /*#__PURE__*/_jsxs(RadioGroup, {\n \"aria-labelledby\": \"placement-options-label\",\n marginStart: \"size-125\",\n orientation: \"horizontal\",\n onChange: handleShowOnTopChange,\n value: \"\".concat(showOnTop),\n children: [/*#__PURE__*/_jsx(Radio, {\n value: \"true\",\n isDisabled: !availablePlacements.includes('top'),\n children: \"Top\"\n }), /*#__PURE__*/_jsx(Radio, {\n value: \"false\",\n isDisabled: !availablePlacements.includes('bottom'),\n children: \"Bottom\"\n })]\n })]\n }), /*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n children: /*#__PURE__*/_jsx(DraggableItemList, {\n className: \"selected-aggregations\",\n itemCount: aggregations.length,\n items: aggregations,\n renderItem: renderAggregation,\n offset: 0,\n onSelectionChange: handleAggregationSelectionChange,\n onSelect: handleAggregationSelect,\n selectedRanges: selectedRanges,\n isMultiSelect: true\n })\n })]\n })]\n });\n}\nexport default Aggregations;\n//# sourceMappingURL=Aggregations.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, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { Button, Checkbox, FadeTransition, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { filterValidColumns } from \"./AggregationUtils.js\";\nimport \"./AggregationEdit.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar SortType = /*#__PURE__*/function (SortType) {\n SortType[SortType[\"NONE\"] = 0] = \"NONE\";\n SortType[SortType[\"ASCENDING\"] = 1] = \"ASCENDING\";\n SortType[SortType[\"DESCENDING\"] = 2] = \"DESCENDING\";\n return SortType;\n}(SortType || {});\nvar DEFAULT_ROW_HEIGHT = 30;\nfunction AggregationEdit(_ref) {\n var {\n aggregation,\n columns,\n onChange\n } = _ref;\n var [top, setTop] = useState(-1);\n var [bottom, setBottom] = useState(-1);\n var [sort, setSort] = useState(SortType.NONE);\n var {\n invert,\n selected\n } = aggregation;\n var list = useRef(null);\n var isSelected = useCallback(name => selected.includes(name) ? !invert : invert, [invert, selected]);\n var validColumns = useMemo(() => {\n var filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(filteredColumns, sort === SortType.ASCENDING);\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n var items = useMemo(() => top >= 0 ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name)\n })) : [], [validColumns, isSelected, bottom, top]);\n var handleSelect = useCallback(itemIndex => {\n var {\n name\n } = validColumns[itemIndex];\n var selectedIndex = selected.indexOf(name);\n var newSelected = [...selected];\n var newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n onChange(_objectSpread(_objectSpread({}, aggregation), {}, {\n selected: newSelected,\n invert: newInvert\n }));\n }, [aggregation, invert, validColumns, selected, onChange]);\n var handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange(_objectSpread(_objectSpread({}, aggregation), {}, {\n selected: [],\n invert: true\n }));\n }, [aggregation, onChange]);\n var handleViewportChange = useCallback((newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n }, [setTop, setBottom]);\n var toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange(_objectSpread(_objectSpread({}, aggregation), {}, {\n invert: !invert\n }));\n } else {\n onChange(_objectSpread(_objectSpread({}, aggregation), {}, {\n selected: [],\n invert: true\n }));\n }\n }, [aggregation, invert, onChange, selected]);\n var checked = selected.length === 0 ? invert : null;\n var isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n return /*#__PURE__*/_jsxs(\"div\", {\n role: \"menu\",\n className: \"aggregation-edit\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"top-menu\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-inline\",\n children: [/*#__PURE__*/_jsx(Checkbox, {\n checked: checked,\n onChange: toggleAll,\n children: \"Toggle All\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"spacer\"\n }), /*#__PURE__*/_jsx(FadeTransition, {\n in: isModified,\n timeout: ThemeExport.transitionSlowMs,\n mountOnEnter: true,\n unmountOnExit: true,\n children: /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-reset\",\n onClick: handleReset,\n children: \"Reset\"\n })\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames({\n active: sort === SortType.ASCENDING\n }),\n icon: dhSortAlphaDown,\n tooltip: \"Sort ascending\",\n onClick: () => setSort(SortType.ASCENDING)\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: classNames({\n active: sort === SortType.DESCENDING\n }),\n icon: dhSortAlphaUp,\n tooltip: \"Sort descending\",\n onClick: () => setSort(SortType.DESCENDING)\n })]\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"aggregation-edit-item-list\",\n children: /*#__PURE__*/_jsx(ItemList, {\n itemCount: validColumns.length,\n items: items,\n offset: top,\n renderItem: _ref2 => {\n var {\n item\n } = _ref2;\n return /*#__PURE__*/_jsx(Checkbox, {\n checked: isSelected(item.value),\n children: item.displayValue\n });\n },\n onSelect: handleSelect,\n onViewportChange: handleViewportChange,\n rowHeight: DEFAULT_ROW_HEIGHT,\n focusSelector: \"input\",\n ref: list\n })\n })]\n });\n}\nexport default AggregationEdit;\n//# sourceMappingURL=AggregationEdit.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 * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction SvgBarIcon(props) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(\"svg\", _objectSpread(_objectSpread({\n width: 48,\n height: 48,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), {}, {\n children: /*#__PURE__*/_jsxs(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n children: [/*#__PURE__*/_jsx(\"path\", {\n fill: \"#C1C0C0\",\n d: \"M44 43v1H4v-1z\"\n }), /*#__PURE__*/_jsx(\"path\", {\n fill: \"#7DA4FF\",\n d: \"M8 26h4v15H8zM15 17h4v24h-4zM22 21h4v20h-4zM29 17h4v24h-4zM36 11h4v30h-4z\"\n })]\n })\n }))\n );\n}\nexport default SvgBarIcon;\n//# sourceMappingURL=BarIcon.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 * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction SvgHistogramIcon(props) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(\"svg\", _objectSpread(_objectSpread({\n width: 48,\n height: 48,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), {}, {\n children: /*#__PURE__*/_jsxs(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n children: [/*#__PURE__*/_jsx(\"path\", {\n fill: \"#C1C0C0\",\n d: \"M44 43v1H4v-1z\"\n }), /*#__PURE__*/_jsx(\"path\", {\n fill: \"#7DA4FF\",\n d: \"M7 34h4v8H7zM12 31h4v11h-4zM17 27h4v15h-4zM22 22h4v20h-4zM27 27h4v15h-4zM32 29h4v13h-4zM37 31h4v11h-4z\"\n })]\n })\n }))\n );\n}\nexport default SvgHistogramIcon;\n//# sourceMappingURL=HistogramIcon.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 * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction SvgLineIcon(props) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(\"svg\", _objectSpread(_objectSpread({\n width: 48,\n height: 48,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), {}, {\n children: /*#__PURE__*/_jsxs(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n children: [/*#__PURE__*/_jsx(\"path\", {\n fill: \"#C1C0C0\",\n d: \"M4 4h1v40H4zM44 43v1H5v-1z\"\n }), /*#__PURE__*/_jsx(\"path\", {\n stroke: \"#7DA4FF\",\n d: \"M7.984 32.44l7.982-11.378 5.273 3.739 9.952-10.838 2.826 1.894 7.45-5.802\"\n }), /*#__PURE__*/_jsx(\"path\", {\n stroke: \"#BECDEF\",\n d: \"M8.244 37.926L17 33.496l5 .87 10.637-10.35 10.615-1.381\"\n })]\n })\n }))\n );\n}\nexport default SvgLineIcon;\n//# sourceMappingURL=LineIcon.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 * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction SvgPieIcon(props) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(\"svg\", _objectSpread(_objectSpread({\n width: 48,\n height: 48,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), {}, {\n children: /*#__PURE__*/_jsxs(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n children: [/*#__PURE__*/_jsx(\"path\", {\n d: \"M24 10c7.732 0 14 6.268 14 14s-6.268 14-14 14-14-6.268-14-14h14V10z\",\n fill: \"#80A6FF\"\n }), /*#__PURE__*/_jsx(\"path\", {\n d: \"M10 24c0-7.732 6.268-14 14-14v14H10z\",\n fill: \"#C1C0C0\"\n })]\n })\n }))\n );\n}\nexport default SvgPieIcon;\n//# sourceMappingURL=PieIcon.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 * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction SvgScatterIcon(props) {\n return (\n /*#__PURE__*/\n // eslint-disable-next-line react/jsx-props-no-spreading\n _jsx(\"svg\", _objectSpread(_objectSpread({\n width: 48,\n height: 48,\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), {}, {\n children: /*#__PURE__*/_jsxs(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n children: [/*#__PURE__*/_jsx(\"path\", {\n fill: \"#C1C0C0\",\n d: \"M44 43v1H4v-1z\"\n }), /*#__PURE__*/_jsx(\"path\", {\n fill: \"#939293\",\n d: \"M44 34v1H4v-1zM44 25v1H4v-1zM44 16v1H4v-1z\"\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 9.5,\n cy: 37.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 16.5,\n cy: 30.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 22.5,\n cy: 36.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 28.5,\n cy: 30.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 15.5,\n cy: 38.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 23.5,\n cy: 25.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 19.5,\n cy: 19.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 29.5,\n cy: 19.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 32.5,\n cy: 26.5,\n r: 1.5\n }), /*#__PURE__*/_jsx(\"circle\", {\n fill: \"#7DA4FF\",\n cx: 36.5,\n cy: 13.5,\n r: 1.5\n })]\n })\n }))\n );\n}\nexport default SvgScatterIcon;\n//# sourceMappingURL=ScatterIcon.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 * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction FormatColumnWhereIcon(props) {\n return /*#__PURE__*/_jsxs(\"svg\", _objectSpread(_objectSpread({\n width: \"48\",\n height: \"48\",\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props), {}, {\n children: [/*#__PURE__*/_jsx(\"rect\", {\n width: \"48\",\n height: \"48\",\n fill: \"none\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"26\",\n y: \"10\",\n width: \"15\",\n height: \"4\",\n fill: \"#9FDE70\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"26\",\n y: \"22\",\n width: \"15\",\n height: \"4\",\n fill: \"#9FDE70\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"26\",\n y: \"28\",\n width: \"15\",\n height: \"4\",\n fill: \"#FFD95C\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"26\",\n y: \"34\",\n width: \"15\",\n height: \"4\",\n fill: \"#9FDE70\"\n })]\n }));\n}\nexport default FormatColumnWhereIcon;\n//# sourceMappingURL=FormatColumnWhereIcon.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 * as React from 'react';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction FormatRowWhereIcon(props) {\n return /*#__PURE__*/_jsxs(\"svg\", _objectSpread(_objectSpread({\n width: \"48\",\n height: \"48\",\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props), {}, {\n children: [/*#__PURE__*/_jsx(\"rect\", {\n width: \"48\",\n height: \"48\",\n fill: \"none\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"4\",\n y: \"16\",\n width: \"40\",\n height: \"4\",\n fill: \"#FFD95C\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"4\",\n y: \"10\",\n width: \"40\",\n height: \"4\",\n fill: \"#78DCE8\"\n }), /*#__PURE__*/_jsx(\"rect\", {\n x: \"4\",\n y: \"34\",\n width: \"40\",\n height: \"4\",\n fill: \"#78DCE8\"\n })]\n }));\n}\nexport default FormatRowWhereIcon;\n//# sourceMappingURL=FormatRowWhereIcon.js.map","import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, Radio, Select } from '@deephaven/components';\nimport { vsLink, dhUnlink, dhTable, dhNewCircleLargeFilled, vsCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { bindAllMethods } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport { BarIcon, HistogramIcon, LineIcon, PieIcon, ScatterIcon } from \"./icons/index.js\";\nimport \"./ChartBuilder.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('ChartBuilder');\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent {\n static getMaxSeriesCount(dh, type) {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n static makeSeriesItem(value) {\n return {\n id: nanoid(),\n value\n };\n }\n static makeDefaultSeriesItems(dh, type, columns) {\n var maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n var value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n static getDefaultXAxis(type, columns) {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n return null;\n }\n constructor(props) {\n super(props);\n bindAllMethods(this);\n var {\n model\n } = props;\n var {\n columns,\n dh\n } = model;\n var type = this.getTypes()[0];\n var xAxis = ChartBuilder.getDefaultXAxis(type, columns);\n var seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n this.state = {\n /** The selected chart type */\n type,\n /** Array of column names of the series to display */\n seriesItems,\n /** The column name to use as the x-axis */\n xAxis,\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true\n };\n }\n getTypes() {\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n return [dh.plot.SeriesPlotStyle.LINE, dh.plot.SeriesPlotStyle.BAR, dh.plot.SeriesPlotStyle.SCATTER, dh.plot.SeriesPlotStyle.PIE\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n }\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n getTypeName(type) {\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n getTypeIcon(type) {\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return /*#__PURE__*/_jsx(LineIcon, {});\n case dh.plot.SeriesPlotStyle.BAR:\n return /*#__PURE__*/_jsx(BarIcon, {});\n case dh.plot.SeriesPlotStyle.SCATTER:\n return /*#__PURE__*/_jsx(ScatterIcon, {});\n case dh.plot.SeriesPlotStyle.PIE:\n return /*#__PURE__*/_jsx(PieIcon, {});\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return /*#__PURE__*/_jsx(HistogramIcon, {});\n default:\n return null;\n }\n }\n getXAxisLabel(type) {\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n getSeriesLabel(type) {\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n handleAddSeries() {\n this.setState(state => {\n var {\n seriesItems\n } = state;\n var newSeriesItems = [...seriesItems];\n var {\n model\n } = this.props;\n var {\n columns\n } = model;\n newSeriesItems.push({\n id: nanoid(),\n value: columns[0].name\n });\n return {\n seriesItems: newSeriesItems\n };\n }, this.sendChange);\n }\n handleLinkStateChange(value) {\n this.setState({\n isLinked: value === 'true'\n }, this.sendChange);\n }\n handleReset() {\n var {\n model\n } = this.props;\n var {\n columns,\n dh\n } = model;\n var type = this.getTypes()[0];\n var xAxis = ChartBuilder.getDefaultXAxis(type, columns);\n var seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n var isLinked = true;\n this.setState({\n type,\n seriesItems,\n xAxis,\n isLinked\n }, this.sendChange);\n }\n handleSeriesChange(eventTargetValue, index) {\n var value = eventTargetValue;\n this.setState(state => {\n var {\n seriesItems\n } = state;\n seriesItems = [...seriesItems];\n seriesItems[index].value = value;\n return {\n seriesItems\n };\n }, this.sendChange);\n }\n handleSeriesDeleteClick(index) {\n this.setState(state => {\n var {\n seriesItems\n } = state;\n var newSeriesItems = [...seriesItems];\n newSeriesItems.splice(index, 1);\n return {\n seriesItems: newSeriesItems\n };\n }, this.sendChange);\n }\n handleSubmit(event) {\n event.preventDefault();\n var {\n onSubmit\n } = this.props;\n var {\n type,\n seriesItems,\n xAxis,\n isLinked\n } = this.state;\n var series = seriesItems.map(item => item.value);\n onSubmit({\n type,\n series,\n xAxis,\n isLinked\n });\n }\n handleTypeClick(index) {\n var type = this.getTypes()[index];\n log.debug2('handleTypeSelect', type);\n this.setState(state => {\n var {\n model\n } = this.props;\n var {\n dh\n } = model;\n var maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n var {\n seriesItems\n } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n var {\n columns\n } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(dh, type, columns);\n }\n return {\n type,\n seriesItems\n };\n }, this.sendChange);\n }\n handleXAxisChange(eventTargetValue) {\n var xAxis = eventTargetValue;\n log.debug2('x-axis change', xAxis);\n this.setState({\n xAxis\n }, this.sendChange);\n }\n sendChange() {\n var {\n onChange\n } = this.props;\n var {\n isLinked,\n type,\n seriesItems,\n xAxis\n } = this.state;\n var series = seriesItems.map(item => item.value);\n onChange({\n type,\n series,\n xAxis,\n isLinked\n });\n }\n render() {\n var {\n model\n } = this.props;\n var {\n columns,\n dh\n } = model;\n var {\n seriesItems,\n type,\n xAxis,\n isLinked\n } = this.state;\n var maxSeriesCount = ChartBuilder.getMaxSeriesCount(dh, type);\n var xAxisLabel = this.getXAxisLabel(type);\n var seriesLabel = this.getSeriesLabel(type);\n var isSeriesVisible = seriesItems.length > 0;\n var isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"chart-builder\",\n children: /*#__PURE__*/_jsxs(\"form\", {\n onSubmit: this.handleSubmit,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n children: \"Select Chart Type\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-row\",\n children: this.getTypes().map((chartType, index) => {\n var key = chartType;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"col col-chart-type\",\n children: /*#__PURE__*/_jsxs(\"button\", {\n type: \"button\",\n className: classNames('btn', 'btn-icon', 'btn-chart-type', {\n active: chartType === type\n }),\n onClick: () => this.handleTypeClick(index),\n children: [this.getTypeIcon(chartType), this.getTypeName(chartType)]\n })\n }, key);\n })\n })]\n }), /*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row form-inline\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"col-2 label-left\",\n children: xAxisLabel\n }), /*#__PURE__*/_jsx(Select, {\n className: \"form-control select-x-axis col\",\n value: xAxis,\n onChange: this.handleXAxisChange,\n children: columns.map(column => /*#__PURE__*/_jsx(\"option\", {\n value: column.name,\n children: column.name\n }, column.name))\n })]\n }), isSeriesVisible && /*#__PURE__*/_jsx(\"hr\", {}), seriesItems.map((seriesItem, i) => /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row form-inline form-series-item\",\n \"data-testid\": \"form-series-item-\".concat(i),\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"col-2 label-left\",\n children: i === 0 ? seriesLabel : ''\n }), /*#__PURE__*/_jsx(Select, {\n className: \"form-control select-series col\",\n value: seriesItem.value,\n onChange: v => this.handleSeriesChange(v, i),\n \"data-testid\": \"select-series-item-\".concat(i),\n children: columns.map(column => /*#__PURE__*/_jsx(\"option\", {\n value: column.name,\n children: column.name\n }, column.name))\n }), seriesItems.length > 1 && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-delete-series ml-2 px-2\",\n \"data-testid\": \"delete-series-\".concat(i),\n onClick: () => {\n this.handleSeriesDeleteClick(i);\n },\n icon: vsTrash,\n tooltip: \"Delete\"\n })]\n }, seriesItem.id)), isAddSeriesVisible && /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"col-2\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-add-series mt-1\",\n onClick: this.handleAddSeries,\n icon: dhNewCircleLargeFilled,\n children: \"Add Series\"\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row chart-builder-link\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n className: \"col-2 label-right\",\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"fa-md fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n mask: dhTable,\n icon: vsCircleLargeFilled,\n transform: \"right-5 down-5\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: isLinked ? vsLink : dhUnlink,\n transform: \"grow-2 right-8 down-6\"\n })]\n })\n }), /*#__PURE__*/_jsxs(RadioGroup, {\n \"aria-label\": \"Link state options\",\n orientation: \"horizontal\",\n onChange: this.handleLinkStateChange,\n value: \"\".concat(isLinked),\n children: [/*#__PURE__*/_jsx(Radio, {\n value: \"true\",\n children: \"Sync State\"\n }), /*#__PURE__*/_jsx(Radio, {\n value: \"false\",\n children: \"Freeze State\"\n })]\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-row\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"col-2 label-right\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"col chart-builder-link-info\",\n children: isLinked ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.' : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('form-row', 'justify-content-end', 'my-3'),\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n className: \"btn-reset\",\n onClick: this.handleReset,\n children: \"Reset\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"primary\",\n type: \"submit\",\n className: \"btn-submit\",\n children: \"Create\"\n })]\n })]\n })\n });\n }\n}\nexport default ChartBuilder;\n//# sourceMappingURL=ChartBuilder.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, { Component } from 'react';\nimport * as monaco from 'monaco-editor';\nimport classNames from 'classnames';\nimport \"./InputEditor.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * A monaco editor that looks like an general input\n */\n\nexport class InputEditor extends Component {\n constructor(props) {\n super(props);\n _defineProperty(this, \"editorContainer\", void 0);\n _defineProperty(this, \"editor\", void 0);\n this.handleContentChanged = this.handleContentChanged.bind(this);\n this.handleEditorFocus = this.handleEditorFocus.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleContainerClick = this.handleContainerClick.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.state = {\n isEditorFocused: false,\n isEditorEmpty: true\n };\n this.editorContainer = null;\n }\n componentDidMount() {\n this.initEditor();\n }\n componentWillUnmount() {\n this.destroyEditor();\n }\n initEditor() {\n var _this$editor$getModel;\n var {\n value,\n editorSettings\n } = this.props;\n var inputEditorSettings = _objectSpread({\n copyWithSyntaxHighlighting: 'false',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language: 'groovyDB',\n lineDecorationsWidth: 8,\n lineNumbers: 'off',\n minimap: {\n enabled: false\n },\n renderLineHighlight: 'none',\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0\n },\n scrollBeyondLastLine: false,\n padding: {\n top: 6,\n bottom: 6\n },\n tabCompletion: 'off',\n useTabStops: true,\n value,\n wordWrap: 'on',\n automaticLayout: true,\n autoClosingBrackets: 'beforeWhitespace'\n }, editorSettings);\n if (!this.editorContainer) {\n throw new Error('editorContainer is null');\n }\n this.editor = monaco.editor.create(this.editorContainer, inputEditorSettings);\n this.editor.layout();\n\n // disable tab to spaces in this editor to improve tab navigation\n (_this$editor$getModel = this.editor.getModel()) === null || _this$editor$getModel === void 0 || _this$editor$getModel.updateOptions({\n tabSize: 0\n });\n\n // monaco does not propagate tab or enter events\n this.editor.onKeyDown(this.handleKeyDown);\n this.editor.onDidChangeModelContent(this.handleContentChanged);\n this.editor.onDidFocusEditorText(this.handleEditorFocus);\n this.editor.onDidBlurEditorText(this.handleEditorBlur);\n }\n destroyEditor() {\n var _this$editor;\n (_this$editor = this.editor) === null || _this$editor === void 0 || _this$editor.dispose();\n this.editor = undefined;\n }\n handleContentChanged() {\n var _this$editor2;\n var {\n onContentChanged\n } = this.props;\n var value = (_this$editor2 = this.editor) === null || _this$editor2 === void 0 || (_this$editor2 = _this$editor2.getModel()) === null || _this$editor2 === void 0 ? void 0 : _this$editor2.getValue();\n if (value !== undefined) {\n this.setState({\n isEditorEmpty: value.length === 0\n });\n }\n onContentChanged(value);\n }\n handleEditorFocus() {\n this.setState({\n isEditorFocused: true\n });\n }\n handleEditorBlur() {\n var _this$editor$getModel2, _this$editor3;\n var value = (_this$editor$getModel2 = (_this$editor3 = this.editor) === null || _this$editor3 === void 0 || (_this$editor3 = _this$editor3.getModel()) === null || _this$editor3 === void 0 ? void 0 : _this$editor3.getValue()) !== null && _this$editor$getModel2 !== void 0 ? _this$editor$getModel2 : '';\n this.setState({\n isEditorEmpty: value.length === 0,\n isEditorFocused: false\n });\n }\n\n // force editor to focus if clicked\n handleContainerClick() {\n var _this$editor4;\n var {\n isEditorFocused\n } = this.state;\n if (isEditorFocused) {\n return;\n }\n (_this$editor4 = this.editor) === null || _this$editor4 === void 0 || _this$editor4.focus();\n }\n handleKeyDown(event) {\n var {\n onTab,\n editorIndex\n } = this.props;\n if (event.code === 'Tab') {\n event.stopPropagation();\n event.preventDefault();\n onTab(editorIndex, event.shiftKey);\n }\n }\n render() {\n var {\n className,\n invalid,\n placeholder = '',\n value\n } = this.props;\n var {\n isEditorFocused,\n isEditorEmpty\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('input-editor-wrapper', {\n focused: isEditorFocused,\n invalid\n }, className),\n role: \"presentation\",\n onClick: this.handleContainerClick,\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"editor-container\",\n ref: editorContainer => {\n this.editorContainer = editorContainer;\n },\n \"data-testid\": \"custom-column-formula\"\n }), isEditorEmpty && !value && placeholder.length > 0 && /*#__PURE__*/_jsx(\"div\", {\n className: \"editor-placeholder text-muted\",\n children: placeholder\n })]\n });\n }\n}\n_defineProperty(InputEditor, \"defaultProps\", {\n value: '',\n onContentChanged: () => undefined,\n editorSettings: {},\n editorIndex: 0,\n onTab: () => undefined,\n invalid: false\n});\nexport default InputEditor;\n//# sourceMappingURL=InputEditor.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 classNames from 'classnames';\nimport { Draggable } from '@hello-pangea/dnd';\nimport { Button } from '@deephaven/components';\nimport { vsTrash, vsGripper } from '@deephaven/icons';\nimport { DbNameValidator } from '@deephaven/utils';\nimport InputEditor from \"./InputEditor.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar INPUT_TYPE = Object.freeze({\n NAME: 'name',\n FORMULA: 'formula'\n});\nvar EMPTY_FN = () => {\n // no-op\n};\nfunction CustomColumnInput(_ref) {\n var {\n eventKey,\n name,\n inputIndex,\n formula,\n onChange: _onChange,\n onDeleteColumn,\n onTabInEditor,\n invalid,\n isDuplicate\n } = _ref;\n var isValidName = name === '' || DbNameValidator.isValidColumnName(name);\n var handleFormulaEditorContentChanged = useCallback(formulaValue => {\n if (formulaValue !== undefined) {\n formulaValue.replace(/(\\r\\n|\\n|\\r)/gm, ''); // remove line break\n _onChange(eventKey, INPUT_TYPE.FORMULA, formulaValue);\n }\n }, [_onChange, eventKey]);\n return /*#__PURE__*/_jsx(Draggable, {\n draggableId: eventKey,\n index: inputIndex,\n disableInteractiveElementBlocking: true,\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\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__*/_jsxs(\"div\", {\n className: \"custom-column-input-container\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"pb-3\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex flex-row custom-column-name\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n className: classNames('form-control custom-column-input', {\n 'is-invalid': invalid || !isValidName || isDuplicate\n }),\n placeholder: \"Column Name\",\n value: name,\n onChange: event => {\n _onChange(eventKey, INPUT_TYPE.NAME, event.target.value);\n }\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"ml-1 px-2\",\n onClick: () => {\n onDeleteColumn(eventKey);\n },\n icon: vsTrash,\n tooltip: \"Delete custom column\"\n }), /*#__PURE__*/_jsx(Button, _objectSpread(_objectSpread({\n kind: \"ghost\",\n className: \"btn-drag-handle\",\n onClick: EMPTY_FN\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.dragHandleProps), {}, {\n icon: vsGripper,\n tooltip: \"Drag column to re-order\"\n }))]\n }), (!isValidName || isDuplicate) && /*#__PURE__*/_jsx(\"p\", {\n className: \"validate-label-error text-danger mb-0 mt-2 pl-1\",\n children: !isValidName ? 'Invalid name' : 'Duplicate name'\n })]\n }), /*#__PURE__*/_jsx(InputEditor, {\n editorSettings: {\n language: 'deephavenDb'\n },\n editorIndex: inputIndex,\n placeholder: \"Column Formula\",\n value: formula,\n onContentChanged: handleFormulaEditorContentChanged,\n onTab: onTabInEditor,\n invalid: invalid\n })]\n }), /*#__PURE__*/_jsx(\"hr\", {})]\n }))\n });\n}\nexport default CustomColumnInput;\n//# sourceMappingURL=CustomColumnInput.js.map","import { AssertionError } from \"./errors/index.js\";\nexport function isDeletableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.isDeletable) !== undefined;\n}\nexport function assertIsDeletableGridModel(model) {\n if (!isDeletableGridModel(model)) {\n throw new AssertionError(\"Expected 'model' to be deletable, but received \".concat(model));\n }\n}\n\n/**\n * Model for a deletable grid\n */\n//# sourceMappingURL=DeletableGridModel.js.map","export function isExpandableColumnGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.hasExpandableColumns) !== undefined;\n}\n\n/**\n * Expandable grid model. Allows for a grid with columns that can expand (e.g. Pivot Table)\n */\n//# sourceMappingURL=ExpandableColumnGridModel.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, { Component } from 'react';\nimport classNames from 'classnames';\nimport { nanoid } from 'nanoid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable } from '@hello-pangea/dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport { DbNameValidator } from '@deephaven/utils';\nimport CustomColumnInput from \"./CustomColumnInput.js\";\nimport \"./CustomColumnBuilder.css\";\nimport IrisGridModel from \"../IrisGridModel.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nclass CustomColumnBuilder extends Component {\n static makeCustomColumnInputEventKey() {\n return nanoid();\n }\n static createCustomColumnInput() {\n return {\n eventKey: nanoid(),\n name: '',\n formula: ''\n };\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"container\", void 0);\n _defineProperty(this, \"successButtonTimer\", void 0);\n _defineProperty(this, \"getInput\", memoize((inputs, key) => inputs.find(input => input.eventKey === key)));\n _defineProperty(this, \"getInputIndex\", memoize((inputs, key) => inputs.findIndex(input => input.eventKey === key)));\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n componentDidMount() {\n var {\n customColumns\n } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n componentWillUnmount() {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n resetErrorMessage() {\n this.setState({\n errorMessage: null\n });\n }\n startListening() {\n var {\n model\n } = this.props;\n model.addEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnUpdated);\n model.addEventListener(IrisGridModel.EVENT.UPDATED, this.handleCustomColumnUpdated);\n model.addEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n }\n stopListening() {\n var {\n model\n } = this.props;\n model.removeEventListener(IrisGridModel.EVENT.COLUMNS_CHANGED, this.handleCustomColumnUpdated);\n model.removeEventListener(IrisGridModel.EVENT.UPDATED, this.handleCustomColumnUpdated);\n model.removeEventListener(IrisGridModel.EVENT.REQUEST_FAILED, this.handleRequestFailed);\n }\n parseCustomColumns(customColumns) {\n if (customColumns.length > 0) {\n var customColumnInputs = customColumns.map(customColumn => {\n var input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1]\n };\n });\n this.setState({\n inputs: customColumnInputs\n });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()]\n });\n }\n }\n handleAddColumnClick() {\n var {\n inputs\n } = this.state;\n var newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs\n });\n }\n handleDeleteColumn(eventKey) {\n var {\n inputs\n } = this.state;\n var customColumnIndex = this.getInputIndex(inputs, eventKey);\n var newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs\n });\n }\n handleInputChange(eventKey, type, value) {\n var {\n inputs\n } = this.state;\n var customColumnIndex = this.getInputIndex(inputs, eventKey);\n var customColumnInput = this.getInput(inputs, eventKey);\n var newCustomInput = _objectSpread({}, customColumnInput);\n newCustomInput[type] = value;\n var newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs\n });\n }\n handleCustomColumnUpdated() {\n var {\n isCustomColumnApplying\n } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState({\n isCustomColumnApplying: false,\n isSuccessShowing: true\n }, () => {\n this.successButtonTimer = setTimeout(() => this.setState({\n isSuccessShowing: false\n }), CustomColumnBuilder.SUCCESS_SHOW_DURATION);\n });\n }\n handleRequestFailed(event) {\n var customEvent = event;\n var {\n isCustomColumnApplying\n } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"p\", {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), \" Failed to apply custom columns.\"]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"error-box\",\n children: [customEvent.detail.errorMessage, /*#__PURE__*/_jsx(\"br\", {}), \"Table configuration:\", ' ', JSON.stringify(customEvent.detail.configuration)]\n })]\n }),\n hasRequestFailed: true\n });\n }\n handleDragEnd(result) {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n var {\n inputs\n } = this.state;\n var sourceIndex = result.source.index;\n var destinationIndex = result.destination.index;\n var newInputs = [...inputs];\n var sourceInput = inputs[sourceIndex];\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n this.setState({\n inputs: newInputs\n });\n }\n handleEditorTabNavigation(focusEditorIndex, shiftKey) {\n var {\n inputs\n } = this.state;\n // focus on drag handle\n if (shiftKey) {\n var _this$container;\n ((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.querySelectorAll('.btn-drag-handle')[focusEditorIndex]).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n var _this$container2;\n (_this$container2 = this.container) === null || _this$container2 === void 0 || (_this$container2 = _this$container2.querySelector('.btn-add-column')) === null || _this$container2 === void 0 || _this$container2.focus();\n } else {\n var _this$container3;\n // focus on next column name input\n var nextFocusIndex = focusEditorIndex + 1;\n ((_this$container3 = this.container) === null || _this$container3 === void 0 ? void 0 : _this$container3.querySelectorAll(\".custom-column-input\")[nextFocusIndex]).focus();\n }\n }\n handleSaveClick() {\n var {\n onSave,\n customColumns: originalCustomColumns\n } = this.props;\n var {\n inputs,\n isCustomColumnApplying\n } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n var customColumns = [];\n inputs.forEach(input => {\n var {\n name,\n formula\n } = input;\n if (name && formula) {\n customColumns.push(\"\".concat(name, \"=\").concat(formula));\n }\n });\n this.resetErrorMessage();\n this.setState({\n // If both are 0, then moving from no custom to no custom. The parent won't re-render to cancel the loading state\n isCustomColumnApplying: customColumns.length > 0 || originalCustomColumns.length > 0\n });\n onSave(customColumns);\n }\n resetRequestFailed() {\n this.setState(_ref => {\n var {\n hasRequestFailed\n } = _ref;\n if (hasRequestFailed) {\n return {\n hasRequestFailed: false\n };\n }\n return null;\n });\n }\n renderInputs() {\n var {\n inputs,\n hasRequestFailed\n } = this.state;\n var nameCount = new Map();\n inputs.forEach(_ref2 => {\n var _nameCount$get;\n var {\n name\n } = _ref2;\n return nameCount.set(name, ((_nameCount$get = nameCount.get(name)) !== null && _nameCount$get !== void 0 ? _nameCount$get : 0) + 1);\n });\n return inputs.map((input, index) => {\n var _nameCount$get2;\n var {\n eventKey,\n name,\n formula\n } = input;\n var isDuplicate = ((_nameCount$get2 = nameCount.get(name)) !== null && _nameCount$get2 !== void 0 ? _nameCount$get2 : 0) > 1;\n return /*#__PURE__*/_jsx(CustomColumnInput, {\n inputIndex: index,\n eventKey: eventKey,\n name: name,\n formula: formula,\n onChange: this.handleInputChange,\n onDeleteColumn: this.handleDeleteColumn,\n onTabInEditor: this.handleEditorTabNavigation,\n invalid: hasRequestFailed,\n isDuplicate: isDuplicate\n }, eventKey);\n });\n }\n renderSaveButton() {\n var {\n inputs,\n isCustomColumnApplying,\n isSuccessShowing\n } = this.state;\n var saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n var areNamesValid = inputs.every(_ref3 => {\n var {\n name\n } = _ref3;\n return name === '' || DbNameValidator.isValidColumnName(name);\n });\n var filteredNames = inputs.filter(_ref4 => {\n var {\n name\n } = _ref4;\n return name !== '';\n }).map(_ref5 => {\n var {\n name\n } = _ref5;\n return name;\n });\n var areNamesUnique = new Set(filteredNames).size === filteredNames.length;\n return /*#__PURE__*/_jsxs(Button, {\n kind: isSuccessShowing ? 'success' : 'primary',\n className: classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying\n }),\n disabled: isSuccessShowing || isCustomColumnApplying || !areNamesValid || !areNamesUnique,\n onClick: this.handleSaveClick,\n icon: isSuccessShowing ? vsPass : undefined,\n children: [isCustomColumnApplying && /*#__PURE__*/_jsxs(\"span\", {\n children: [/*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"mr-2 loading-spinner-vertical-align\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"btn-normal-content\",\n children: \"Applying\"\n })]\n }), !isSuccessShowing && !isCustomColumnApplying && saveText, isSuccessShowing && 'Success']\n });\n }\n render() {\n var {\n onCancel\n } = this.props;\n var {\n errorMessage\n } = this.state;\n return /*#__PURE__*/_jsxs(\"div\", {\n role: \"presentation\",\n className: \"custom-column-builder-container\",\n ref: container => {\n this.container = container;\n },\n onClick: this.resetRequestFailed,\n onFocus: this.resetRequestFailed,\n children: [/*#__PURE__*/_jsx(\"hr\", {}), /*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: DragUtils.startDragging,\n onDragEnd: this.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: [this.renderInputs(), provided.placeholder]\n }))\n })\n }), /*#__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 icon: dhNewCircleLargeFilled,\n children: \"Add Another Column\"\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"custom-column-builder-footer\",\n children: [errorMessage && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: errorMessage\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex justify-content-end\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"secondary\",\n className: \"mr-2\",\n onClick: onCancel,\n children: \"Cancel\"\n }), this.renderSaveButton()]\n })]\n })]\n });\n }\n}\n_defineProperty(CustomColumnBuilder, \"SUCCESS_SHOW_DURATION\", 750);\nexport default CustomColumnBuilder;\n//# sourceMappingURL=CustomColumnBuilder.js.map","var OptionType = /*#__PURE__*/function (OptionType) {\n OptionType[\"ADVANCED_SETTINGS\"] = \"ADVANCED_SETTINGS\";\n OptionType[\"AGGREGATIONS\"] = \"AGGREGATIONS\";\n OptionType[\"AGGREGATION_EDIT\"] = \"AGGREGATIONS_EDIT\";\n OptionType[\"CHART_BUILDER\"] = \"CHART_BUILDER\";\n OptionType[\"CUSTOM_COLUMN_BUILDER\"] = \"CUSTOM_COLUMN_BUILDER\";\n OptionType[\"QUICK_FILTERS\"] = \"QUICK_FILTERS\";\n OptionType[\"ROLLUP_ROWS\"] = \"ROLLUP_ROWS\";\n OptionType[\"SEARCH_BAR\"] = \"SEARCH_BAR\";\n OptionType[\"SELECT_DISTINCT\"] = \"SELECT_DISTINCT\";\n OptionType[\"TABLE_EXPORTER\"] = \"TABLE_EXPORTER\";\n OptionType[\"VISIBILITY_ORDERING_BUILDER\"] = \"VISIBILITY_ORDERING_BUILDER\";\n OptionType[\"CONDITIONAL_FORMATTING\"] = \"CONDITIONAL_FORMATTING\";\n OptionType[\"CONDITIONAL_FORMATTING_EDIT\"] = \"CONDITIONAL_FORMATTING_EDIT\";\n OptionType[\"GOTO\"] = \"GOTO\";\n return OptionType;\n}(OptionType || {});\nexport default OptionType;\n//# sourceMappingURL=OptionType.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); }\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragDropContext, Droppable } from '@hello-pangea/dnd';\nimport { Checkbox, DraggableItemList, DragUtils, SearchInput, Tooltip, Button } from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport \"./RollupRows.css\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('RollupRows');\nvar DEBOUNCE_SEARCH = 150;\nvar GROUPED_LIST_ID = 'grouped-rollup-rows';\nvar UNGROUPED_LIST_ID = 'ungrouped-rollup-rows';\nclass RollupRows extends Component {\n static renderColumn(_ref) {\n var {\n item,\n isClone,\n selectedCount\n } = _ref;\n var text = item === null || item === void 0 ? void 0 : item.name;\n var badgeText = isClone !== undefined && isClone ? \"\".concat(selectedCount) : undefined;\n var className = isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({\n text,\n badgeText,\n className\n });\n }\n static addGroupings(currentGroupings, newGroupings) {\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentGroupings.length;\n if (newGroupings == null || newGroupings.length === 0) {\n return currentGroupings;\n }\n var insertIndex = index;\n var groupings = currentGroupings.filter((grouping, i) => {\n if (newGroupings.includes(grouping)) {\n if (i < insertIndex) {\n insertIndex -= 1;\n }\n return false;\n }\n return true;\n });\n groupings.splice(insertIndex, 0, ...newGroupings);\n return groupings;\n }\n static isGroupable(column) {\n return !TableUtils.isBigDecimalType(column.type) && !TableUtils.isBigIntegerType(column.type);\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"ungroupedList\", void 0);\n _defineProperty(this, \"groupedList\", void 0);\n _defineProperty(this, \"search\", debounce(searchFilter => {\n var columns = this.getSortedUngroupedColumns();\n var selectedRanges = [];\n var focusIndex = null;\n for (var i = 0; i < columns.length; i += 1) {\n var column = columns[i];\n if (column.name.toLowerCase().includes(searchFilter.toLowerCase())) {\n if (focusIndex == null) {\n focusIndex = i;\n }\n selectedRanges.push([i, i]);\n }\n }\n assertNotNull(focusIndex);\n this.setState({\n ungroupedSelectedRanges: selectedRanges\n });\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }, DEBOUNCE_SEARCH));\n _defineProperty(this, \"getCachedUngroupedColumns\", memoize((columns, groupedColumns) => columns.filter(column => RollupRows.isGroupable(column) && groupedColumns.find(name => name === column.name) == null), {\n max: 100\n }));\n _defineProperty(this, \"getCachedSortedColumns\", memoize((columns, sort) => sort == null ? [...columns] : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING), {\n max: 100\n }));\n this.handleDeleteClicked = this.handleDeleteClicked.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUngroupedSelect = this.handleUngroupedSelect.bind(this);\n this.handleUngroupedSelectionChange = this.handleUngroupedSelectionChange.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange = this.handleGroupedSelectionChange.bind(this);\n this.handleShowConstituentsChange = this.handleShowConstituentsChange.bind(this);\n this.handleShowNonAggregatedColumnsChange = this.handleShowNonAggregatedColumnsChange.bind(this);\n this.handleSortAscending = this.handleSortAscending.bind(this);\n this.handleSortDescending = this.handleSortDescending.bind(this);\n this.renderGroupedItem = this.renderGroupedItem.bind(this);\n this.ungroupedList = /*#__PURE__*/React.createRef();\n this.groupedList = /*#__PURE__*/React.createRef();\n var {\n config\n } = props;\n var {\n columns: _columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true\n } = config !== null && config !== void 0 ? config : {};\n this.state = {\n ungroupedSelectedRanges: [],\n columns: _columns,\n groupedSelectedRanges: [],\n searchFilter: '',\n showConstituents,\n showNonAggregatedColumns,\n dragSource: null,\n sort: null\n };\n }\n componentDidUpdate(prevProps, prevState) {\n var {\n config\n } = this.props;\n var {\n columns,\n showConstituents,\n showNonAggregatedColumns\n } = this.state;\n if (config !== prevProps.config) {\n this.updateFromConfig();\n } else if (columns !== prevState.columns || showConstituents !== prevState.showConstituents || showNonAggregatedColumns !== prevState.showNonAggregatedColumns) {\n if (config == null || columns !== config.columns || showConstituents !== config.showConstituents || showNonAggregatedColumns !== config.showNonAggregatedColumns) {\n this.sendChange();\n }\n }\n }\n componentWillUnmount() {\n this.search.cancel();\n }\n handleSearchChange(event) {\n var searchFilter = event.target.value;\n this.setState({\n searchFilter\n });\n if (!searchFilter) {\n this.search.cancel();\n this.resetSelection();\n return;\n }\n this.search(searchFilter);\n }\n handleSortAscending() {\n this.setState(_ref2 => {\n var {\n sort\n } = _ref2;\n return {\n sort: sort === RollupRows.SORT.ASCENDING ? null : RollupRows.SORT.ASCENDING\n };\n });\n }\n handleSortDescending() {\n this.setState(_ref3 => {\n var {\n sort\n } = _ref3;\n return {\n sort: sort === RollupRows.SORT.DESCENDING ? null : RollupRows.SORT.DESCENDING\n };\n });\n }\n resetSelection() {\n this.setState({\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: []\n });\n }\n handleDragStart(e) {\n log.debug('handleDragStart', e);\n document.documentElement.classList.add('drag-pointer-events-none');\n this.setState({\n dragSource: e.source\n });\n }\n handleDragEnd(e) {\n log.debug('handleDragEnd', e);\n document.documentElement.classList.remove('drag-pointer-events-none');\n this.setState({\n dragSource: null\n });\n var {\n destination,\n source\n } = e;\n if (destination == null || source == null) {\n return;\n }\n\n // We don't allow dragging within the ungrouped list, so if we're dragging into the ungrouped list,\n // it must have came from the grouped list. Remove those grouped columns.\n if (destination.droppableId === UNGROUPED_LIST_ID) {\n this.setState(_ref4 => {\n var {\n groupedSelectedRanges,\n columns\n } = _ref4;\n var newColumns = [...columns];\n DragUtils.reorder(newColumns, groupedSelectedRanges, [], 0);\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: []\n };\n });\n return;\n }\n\n // Otherwise, it must be dropping into the grouped list, so we just need to check the source\n var isSameList = source.droppableId === GROUPED_LIST_ID;\n var destinationIndex = destination.index;\n if (isSameList && source.index < destination.index) {\n // @hello-pangea/dnd adjusts the index when dragging within a list already, however that only supports single selection\n // We need to change it back to the index we actually want it to drop at before adjusting for the removed source index, as\n // we adjust the index based on all the selected ranges, not just the source.index.\n destinationIndex += 1;\n }\n this.setState(_ref5 => {\n var {\n columns,\n ungroupedSelectedRanges,\n groupedSelectedRanges\n } = _ref5;\n var newColumns = [...columns];\n var sourceItems = isSameList ? newColumns : this.getSortedUngroupedColumns().map(c => c.name);\n var sourceRanges = isSameList ? groupedSelectedRanges : ungroupedSelectedRanges;\n var draggedItems = DragUtils.reorder(sourceItems, sourceRanges, newColumns, destinationIndex);\n\n // Select the newly dropped items\n var insertIndex = isSameList ? DragUtils.adjustDestinationIndex(destinationIndex, groupedSelectedRanges) : destinationIndex;\n var newSelectedRanges = [[insertIndex, insertIndex + draggedItems.length - 1]];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: newSelectedRanges\n };\n });\n this.resetSelection();\n }\n handleUngroupedSelect(itemIndex) {\n log.debug('handleUngroupedSelect');\n this.setState(_ref6 => {\n var {\n columns\n } = _ref6;\n return {\n columns: RollupRows.addGroupings(columns, [this.getSortedUngroupedColumns()[itemIndex].name]),\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: []\n };\n });\n }\n handleUngroupedSelectionChange(ungroupedSelectedRanges) {\n log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);\n this.setState(_ref7 => {\n var {\n ungroupedSelectedRanges: stateUngroupedSelectedRanges\n } = _ref7;\n if (ungroupedSelectedRanges === stateUngroupedSelectedRanges) {\n return null;\n }\n return {\n ungroupedSelectedRanges,\n groupedSelectedRanges: []\n };\n });\n }\n handleGroupedSelectionChange(groupedSelectedRanges) {\n log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);\n this.setState(_ref8 => {\n var {\n groupedSelectedRanges: stateGroupedSelectedRanges\n } = _ref8;\n if (groupedSelectedRanges === stateGroupedSelectedRanges) {\n return null;\n }\n return {\n groupedSelectedRanges,\n ungroupedSelectedRanges: []\n };\n });\n }\n handleDeleteClicked(index) {\n this.setState(_ref9 => {\n var {\n columns\n } = _ref9;\n var newColumns = columns.slice();\n newColumns.splice(index, 1);\n return {\n columns: newColumns\n };\n });\n }\n handleShowConstituentsChange() {\n this.setState(_ref0 => {\n var {\n showConstituents\n } = _ref0;\n return {\n showConstituents: !showConstituents\n };\n });\n }\n handleShowNonAggregatedColumnsChange() {\n this.setState(_ref1 => {\n var {\n showNonAggregatedColumns\n } = _ref1;\n return {\n showNonAggregatedColumns: !showNonAggregatedColumns\n };\n });\n }\n updateFromConfig() {\n var {\n config\n } = this.props;\n var {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true\n } = config !== null && config !== void 0 ? config : {};\n this.setState({\n columns,\n showConstituents,\n showNonAggregatedColumns\n });\n }\n sendChange() {\n var {\n onChange\n } = this.props;\n var {\n columns,\n showConstituents,\n showNonAggregatedColumns\n } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns\n });\n }\n getUngroupedColumns() {\n var {\n model\n } = this.props;\n var {\n columns\n } = this.state;\n var {\n originalColumns\n } = model;\n return this.getCachedUngroupedColumns(originalColumns, columns);\n }\n getSortedUngroupedColumns() {\n var {\n sort\n } = this.state;\n var columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n renderGroupedItem(_ref10) {\n var {\n item,\n itemIndex,\n isClone,\n selectedCount\n } = _ref10;\n var indent = isClone !== undefined && isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n var text = \"\".concat(indent).concat(item);\n var badgeText = isClone !== undefined && isClone ? \"\".concat(selectedCount) : undefined;\n var className = isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [DraggableItemList.renderTextItem({\n text,\n badgeText,\n className\n }), (isClone === undefined || !isClone) && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn btn-link btn-link-icon btn-delete-grouping float-right\",\n onClick: () => this.handleDeleteClicked(itemIndex),\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsTrash\n })\n })]\n });\n }\n render() {\n var {\n columns,\n dragSource,\n searchFilter,\n groupedSelectedRanges,\n ungroupedSelectedRanges,\n showConstituents,\n showNonAggregatedColumns,\n sort\n } = this.state;\n var ungroupedColumns = this.getSortedUngroupedColumns();\n var groupListHeight = columns.length * DraggableItemList.DEFAULT_ROW_HEIGHT;\n var ungroupMaxListHeight = ungroupedColumns.length * DraggableItemList.DEFAULT_ROW_HEIGHT + 10;\n var ungroupMinListHeight = Math.min(3 * DraggableItemList.DEFAULT_ROW_HEIGHT, ungroupMaxListHeight);\n return /*#__PURE__*/_jsx(\"div\", {\n role: \"menu\",\n className: classNames('rollup-rows', {\n 'is-dragging': dragSource != null\n }),\n tabIndex: 0,\n children: /*#__PURE__*/_jsxs(DragDropContext, {\n onDragEnd: this.handleDragEnd,\n onDragStart: this.handleDragStart,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"rollup-rows-group-by\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"section-title\",\n children: \"Group By\"\n }), columns.length === 0 && /*#__PURE__*/_jsx(Droppable, {\n droppableId: \"placeholder\",\n children: (provided, snapshot) => /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread({\n className: classNames('placeholder', 'text-muted', {\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith\n }),\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n children: \"To create a rollup, drag columns from the list below and drop them into this area.\"\n }))\n }), columns.length > 0 && /*#__PURE__*/_jsx(DraggableItemList, {\n draggingItemClassName: \"rollup-rows-dragging-grouped-item\",\n draggablePrefix: GROUPED_LIST_ID,\n droppableId: GROUPED_LIST_ID,\n itemCount: columns.length,\n items: columns,\n offset: 0,\n onSelectionChange: this.handleGroupedSelectionChange,\n ref: this.groupedList,\n renderItem: this.renderGroupedItem,\n selectedRanges: groupedSelectedRanges,\n style: {\n '--group-list-height': \"\".concat(groupListHeight, \"px\"),\n '--row-height': \"\".concat(DraggableItemList.DEFAULT_ROW_HEIGHT, \"px\")\n },\n isMultiSelect: true,\n hasPlaceholder: true\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"rollup-rows-available-columns\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"section-title\",\n children: \"Available Grouping Columns\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"top-menu\",\n children: [/*#__PURE__*/_jsx(SearchInput, {\n className: \"w-100\",\n value: searchFilter,\n matchCount: searchFilter ? ungroupedSelectedRanges.length : undefined,\n placeholder: \"Find column...\",\n onChange: this.handleSearchChange\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"ghost\",\n className: classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.ASCENDING\n }),\n onClick: this.handleSortAscending,\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortAlphaDown\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Sort ascending\"\n })]\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"ghost\",\n className: classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.DESCENDING\n }),\n onClick: this.handleSortDescending,\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: dhSortAlphaUp\n }), /*#__PURE__*/_jsx(Tooltip, {\n children: \"Sort descending\"\n })]\n })]\n }), /*#__PURE__*/_jsx(DraggableItemList, {\n className: \"rollup-available-grouping-columns\",\n draggablePrefix: UNGROUPED_LIST_ID,\n droppableId: UNGROUPED_LIST_ID,\n itemCount: ungroupedColumns.length,\n items: ungroupedColumns,\n renderItem: RollupRows.renderColumn,\n offset: 0,\n onSelect: this.handleUngroupedSelect,\n onSelectionChange: this.handleUngroupedSelectionChange,\n ref: this.ungroupedList,\n selectedRanges: ungroupedSelectedRanges,\n style: {\n maxHeight: ungroupMaxListHeight,\n minHeight: ungroupMinListHeight\n },\n isDropDisabled: (dragSource === null || dragSource === void 0 ? void 0 : dragSource.droppableId) !== GROUPED_LIST_ID,\n isMultiSelect: true\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"bottom-menu\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"label\",\n children: \"Show:\"\n }), /*#__PURE__*/_jsx(Checkbox, {\n checked: showConstituents,\n onChange: this.handleShowConstituentsChange,\n children: \"Constituents\"\n }), /*#__PURE__*/_jsx(Checkbox, {\n checked: showNonAggregatedColumns,\n onChange: this.handleShowNonAggregatedColumnsChange,\n children: \"Non-Aggregated Columns\"\n })]\n })]\n })]\n })\n });\n }\n}\n_defineProperty(RollupRows, \"SORT\", Object.freeze({\n ASCENDING: 'ASC',\n DESCENDING: 'DESC'\n}));\n_defineProperty(RollupRows, \"defaultProps\", {\n config: null,\n onChange: () => undefined\n});\nexport default RollupRows;\n//# sourceMappingURL=RollupRows.js.map","function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { Component } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Checkbox, LoadingSpinner, RadioGroup, Radio, NumberField, Picker, Item } from '@deephaven/components';\nimport { GridRange, GridUtils } from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport \"./TableCsvExporter.css\";\nimport Log from '@deephaven/log';\nimport IrisGridUtils from \"../IrisGridUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nvar log = Log.module('TableCsvExporter');\nclass TableCsvExporter extends Component {\n static getDateString(dh) {\n return dh.i18n.DateTimeFormat.format(TableCsvExporter.FILENAME_DATE_FORMAT, new Date());\n }\n constructor(props) {\n super(props);\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged = this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged = this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged = this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged = this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged = this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged = this.handleUseUnformattedValuesChanged.bind(this);\n var {\n model,\n name\n } = props;\n this.state = {\n fileName: \"\".concat(name, \"-\").concat(TableCsvExporter.getDateString(model.dh), \".csv\"),\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption: TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n errorMessage: null,\n id: nanoid()\n };\n }\n getSnapshotRanges() {\n var {\n model,\n selectedRanges\n } = this.props;\n var {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows\n } = this.state;\n var {\n rowCount,\n columnCount\n } = model;\n var snapshotRanges = [];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges.map(range => _objectSpread(_objectSpread({}, range), {}, {\n startColumn: 0,\n endColumn: columnCount - 1\n })).sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n });\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, Math.min(customizedDownloadRows - 1, rowCount - 1)));\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(new GridRange(0, Math.max(0, rowCount - customizedDownloadRows), columnCount - 1, rowCount - 1));\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n getModelRanges(ranges) {\n var {\n userColumnWidths,\n movedColumns\n } = this.props;\n var {\n includeHiddenColumns\n } = this.state;\n var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n var modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n var subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(modelRanges, subtractRanges);\n }\n return modelRanges;\n }\n resetDownloadState() {\n this.setState({\n errorMessage: null\n });\n }\n handleDownloadClick() {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n model,\n isDownloading,\n onDownloadStart,\n onDownload,\n onCancel\n } = _this.props;\n var {\n fileName,\n includeColumnHeaders,\n useUnformattedValues\n } = _this.state;\n if (isDownloading) {\n onCancel();\n return;\n }\n _this.resetDownloadState();\n var snapshotRanges = _this.getSnapshotRanges();\n var modelRanges = _this.getModelRanges(snapshotRanges);\n if (_this.validateOptionInput()) {\n onDownloadStart();\n try {\n var frozenTable = yield model.export();\n var tableSubscription = frozenTable.setViewport(0, 0);\n yield tableSubscription.getViewportData();\n onDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);\n } catch (error) {\n log.error('CSV download failed', error);\n _this.setState({\n errorMessage: /*#__PURE__*/_jsxs(\"p\", {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), \" \", \"\".concat(error)]\n })\n });\n onCancel();\n }\n }\n })();\n }\n handleDownloadRowOptionChanged(value) {\n this.setState({\n downloadRowOption: value\n });\n }\n handleCustomizedDownloadRowOptionChanged(value) {\n if (value !== null) {\n this.setState({\n customizedDownloadRowOption: String(value)\n });\n }\n }\n handleCustomizedDownloadRowsChanged(value) {\n this.setState({\n customizedDownloadRows: value\n });\n }\n handleIncludeColumnHeadersChanged() {\n this.setState(_ref => {\n var {\n includeColumnHeaders\n } = _ref;\n return {\n includeColumnHeaders: !includeColumnHeaders\n };\n });\n }\n handleIncludeHiddenColumnsChanged() {\n this.setState(_ref2 => {\n var {\n includeHiddenColumns\n } = _ref2;\n return {\n includeHiddenColumns: !includeHiddenColumns\n };\n });\n }\n handleUseUnformattedValuesChanged() {\n this.setState(_ref3 => {\n var {\n useUnformattedValues\n } = _ref3;\n return {\n useUnformattedValues: !useUnformattedValues\n };\n });\n }\n validateOptionInput() {\n var {\n selectedRanges\n } = this.props;\n var {\n downloadRowOption,\n customizedDownloadRows\n } = this.state;\n if (downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS && selectedRanges.length === 0) {\n this.setState({\n errorMessage: /*#__PURE__*/_jsxs(\"p\", {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), \" No rows selected. Please select some rows in the table.\"]\n })\n });\n return false;\n }\n if (downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS && customizedDownloadRows <= 0) {\n this.setState({\n errorMessage: /*#__PURE__*/_jsxs(\"p\", {\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsWarning\n }), \" Number of rows to output must be greater than 0\"]\n })\n });\n return false;\n }\n return true;\n }\n render() {\n var {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus\n } = this.props;\n var {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id\n } = this.state;\n var {\n rowCount\n } = model;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"table-csv-exporter\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n id: \"download-rows-label\",\n className: \"section-title\",\n children: \"Download Rows\"\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"form-group\",\n children: /*#__PURE__*/_jsxs(RadioGroup, {\n \"aria-labelledby\": \"download-rows-label\",\n onChange: this.handleDownloadRowOptionChanged,\n value: downloadRowOption,\n isDisabled: isDownloading,\n children: [/*#__PURE__*/_jsxs(Radio, {\n value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n \"data-testid\": \"radio-csv-exporter-download-all\",\n children: [\"All Rows\", /*#__PURE__*/_jsx(\"span\", {\n className: \"text-muted ml-2\",\n children: \"(\".concat(rowCount.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,'), \" rows)\")\n })]\n }), /*#__PURE__*/_jsxs(Radio, {\n value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS,\n \"data-testid\": \"radio-csv-exporter-only-selected\",\n children: [\"Only Selected Rows\", /*#__PURE__*/_jsx(\"span\", {\n className: \"text-muted ml-2\",\n children: selectedRanges.length > 0 ? \"(\".concat(GridRange.rowCount(selectedRanges).toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,'), \" rows)\") : null\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"d-flex\",\n children: [/*#__PURE__*/_jsx(Radio, {\n value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n \"data-testid\": \"radio-csv-exporter-customized-rows\",\n margin: \"0\",\n \"aria-label\": \"Download a custom number of rows\"\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"radio-input-row\",\n role: \"presentation\",\n onClick: () => {\n this.setState({\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS\n });\n },\n children: [/*#__PURE__*/_jsxs(Picker, {\n selectedKey: customizedDownloadRowOption,\n \"data-testid\": \"select-csv-exporter-customized-rows\",\n isDisabled: isDownloading,\n onChange: this.handleCustomizedDownloadRowOptionChanged,\n \"aria-label\": \"First or last number of rows\",\n flex: true,\n children: [/*#__PURE__*/_jsx(Item, {\n children: \"First\"\n }, \"FIRST\"), /*#__PURE__*/_jsx(Item, {\n children: \"Last\"\n }, \"LAST\")]\n }), /*#__PURE__*/_jsx(NumberField, {\n id: \"customizedRows-\".concat(id),\n \"data-testid\": \"input-csv-exporter-customized-rows\",\n name: \"customizedRows-\".concat(id),\n minValue: 1,\n defaultValue: 100,\n value: customizedDownloadRows,\n width: \"100%\",\n minWidth: 0,\n isDisabled: isDownloading,\n onChange: this.handleCustomizedDownloadRowsChanged,\n \"aria-label\": \"Number of rows to download\",\n flex: true\n }), /*#__PURE__*/_jsx(\"div\", {\n children: \"Rows\"\n })]\n })]\n })]\n })\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group\",\n children: [/*#__PURE__*/_jsx(\"label\", {\n htmlFor: \"customizedRows-\".concat(id),\n children: \"File Name\"\n }), /*#__PURE__*/_jsx(\"input\", {\n type: \"text\",\n className: \"form-control\",\n id: \"filename-\".concat(id),\n \"data-testid\": \"input-csv-exporter-file-name\",\n name: \"filename-\".concat(id),\n value: fileName,\n onChange: event => {\n this.setState({\n fileName: event.target.value\n });\n },\n disabled: isDownloading\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"checkbox-options\",\n children: [/*#__PURE__*/_jsx(Checkbox, {\n checked: includeColumnHeaders,\n onChange: this.handleIncludeColumnHeadersChanged,\n children: \"Include column headers\"\n }), /*#__PURE__*/_jsx(Checkbox, {\n checked: includeHiddenColumns,\n onChange: this.handleIncludeHiddenColumnsChanged,\n children: \"Include hidden columns\"\n }), /*#__PURE__*/_jsx(Checkbox, {\n checked: useUnformattedValues,\n onChange: this.handleUseUnformattedValuesChanged,\n children: \"Use unformatted values\"\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"section-footer flex-column\",\n children: [errorMessage != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"error-message\",\n children: errorMessage\n }), tableDownloadStatus && /*#__PURE__*/_jsxs(\"div\", {\n className: \"download-status\",\n children: [(tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING || tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && /*#__PURE__*/_jsxs(_Fragment, {\n children: [tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.INITIATING && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted\",\n children: \"Starting Download...\"\n }), tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && /*#__PURE__*/_jsxs(\"div\", {\n className: \"text-muted d-flex justify-content-between\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n children: tableDownloadEstimatedTime || tableDownloadEstimatedTime === 0 ? \"Estimated time: \".concat(TimeUtils.formatElapsedTime(tableDownloadEstimatedTime)) : null\n }), /*#__PURE__*/_jsx(\"span\", {\n children: \"\".concat(tableDownloadProgress, \"%\")\n })]\n })]\n }), tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.FINISHED && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted text-right\",\n children: \"Download Completed\"\n }), tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.CANCELED && /*#__PURE__*/_jsx(\"div\", {\n className: \"text-muted\",\n children: \"Download Canceled\"\n }), (tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING || tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && /*#__PURE__*/_jsx(\"div\", {\n className: \"progress\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"progress-bar progress-bar-striped progress-bar-animated\",\n style: {\n width: \"\".concat(tableDownloadProgress, \"%\")\n }\n })\n }), tableDownloadStatus === TableCsvExporter.DOWNLOAD_STATUS.FINISHED && /*#__PURE__*/_jsx(\"div\", {\n className: \"progress\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"progress-bar bg-success\",\n style: {\n width: \"\".concat(tableDownloadProgress, \"%\")\n }\n })\n })]\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"primary\",\n \"data-testid\": \"btn-csv-exporter-download\",\n className: ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading\n }),\n onClick: this.handleDownloadClick,\n children: [isDownloading && /*#__PURE__*/_jsxs(\"span\", {\n children: [/*#__PURE__*/_jsx(LoadingSpinner, {\n className: \"mr-2 loading-spinner-vertical-align\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"btn-normal-content\",\n children: \"Downloading\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"btn-hover-content\",\n children: \"Cancel\"\n })]\n }), !isDownloading && 'Download']\n })]\n })]\n });\n }\n}\n_defineProperty(TableCsvExporter, \"FILENAME_DATE_FORMAT\", 'yyyy-MM-dd-HHmmss');\n_defineProperty(TableCsvExporter, \"DOWNLOAD_STATUS\", {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED'\n});\n_defineProperty(TableCsvExporter, \"DOWNLOAD_ROW_OPTIONS\", {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS'\n});\n_defineProperty(TableCsvExporter, \"CUSTOMIZED_ROWS_OPTIONS\", {\n FIRST: 'FIRST',\n LAST: 'LAST'\n});\n_defineProperty(TableCsvExporter, \"DEFAULT_DOWNLOAD_ROWS\", 100);\n_defineProperty(TableCsvExporter, \"defaultProps\", {\n onDownloadStart: () => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: []\n});\nexport default TableCsvExporter;\n//# sourceMappingURL=TableCsvExporter.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 { PureComponent } from 'react';\nimport Log from '@deephaven/log';\nimport { memoizeClear } from '@deephaven/grid';\nimport { FormatterUtils, TableUtils } from '@deephaven/jsapi-utils';\nimport { PromiseUtils, assertNotNull } from '@deephaven/utils';\nimport IrisGridUtils from \"../IrisGridUtils.js\";\nvar log = Log.module('TableSaver');\nvar UNFORMATTED_DATE_PATTERN = \"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS z\";\nfunction isUpdateEventData(data) {\n return data.added !== undefined;\n}\nfunction assertIsUpdateEventData(data) {\n if (!isUpdateEventData(data)) {\n throw new Error('event is not UpdateEventData');\n }\n}\nexport default class TableSaver extends PureComponent {\n static csvEscapeString(str) {\n return \"\\\"\".concat(str.replace(/\"/g, '\"\"'), \"\\\"\");\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"sw\", void 0);\n _defineProperty(this, \"port\", void 0);\n _defineProperty(this, \"fileWriter\", void 0);\n _defineProperty(this, \"table\", void 0);\n _defineProperty(this, \"tableSubscription\", void 0);\n _defineProperty(this, \"columns\", void 0);\n _defineProperty(this, \"fileName\", void 0);\n _defineProperty(this, \"includeColumnHeaders\", void 0);\n _defineProperty(this, \"useUnformattedValues\", void 0);\n _defineProperty(this, \"chunkRows\", void 0);\n _defineProperty(this, \"gridRanges\", void 0);\n _defineProperty(this, \"gridRangeCounter\", void 0);\n _defineProperty(this, \"rangedSnapshotsTotal\", void 0);\n _defineProperty(this, \"rangedSnapshotCounter\", void 0);\n _defineProperty(this, \"snapshotsTotal\", void 0);\n _defineProperty(this, \"snapshotCounter\", void 0);\n _defineProperty(this, \"snapshotsBuffer\", void 0);\n _defineProperty(this, \"currentSnapshotIndex\", void 0);\n _defineProperty(this, \"snapshotPending\", void 0);\n _defineProperty(this, \"cancelableSnapshots\", void 0);\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n _defineProperty(this, \"streamTimeout\", void 0);\n _defineProperty(this, \"snapshotHandlerTimeout\", void 0);\n _defineProperty(this, \"downloadStartTime\", void 0);\n _defineProperty(this, \"iframe\", void 0);\n _defineProperty(this, \"useBlobFallback\", void 0);\n _defineProperty(this, \"getCachedCustomColumnFormatFlag\", memoizeClear(FormatterUtils.isCustomColumnFormatDefined, {\n max: 10000\n }));\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n this.state = {};\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n\n this.useBlobFallback = false;\n }\n componentDidMount() {\n var {\n getDownloadWorker\n } = this.props;\n getDownloadWorker().then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n }).catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n componentWillUnmount() {\n this.removeIframe();\n if (this.streamTimeout) clearTimeout(this.streamTimeout);\n if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);\n }\n createWriterStream(port) {\n // use blob fall back if it's safari\n var useBlob = this.useBlobFallback;\n var chunks = [];\n var encode = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n var {\n fileName\n } = this;\n var streamConfig = {};\n if (useBlob) {\n streamConfig.write = chunk => {\n assertNotNull(encode);\n if (chunk.header !== undefined) {\n chunks.push(encode(chunk.header));\n }\n if (chunk.rows !== undefined) {\n chunks.push(encode(chunk.rows));\n }\n };\n streamConfig.close = () => {\n assertNotNull(fileName);\n var blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8'\n });\n var link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({\n cancel: true\n });\n port.close();\n };\n } else {\n streamConfig.write = chunk => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({\n end: true\n });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({\n cancel: true\n });\n port.close();\n };\n }\n return new WritableStream(streamConfig);\n }\n startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {\n // don't trigger another download when a download is ongoing\n var {\n isDownloading\n } = this.props;\n if (isDownloading) {\n return;\n }\n this.downloadStartTime = Date.now();\n log.info(\"start downloading \".concat(fileName));\n this.table = frozenTable;\n this.columns = IrisGridUtils.columnsFromRanges(modelRanges, frozenTable.columns);\n this.tableSubscription = tableSubscription;\n this.gridRanges = snapshotRanges;\n this.includeColumnHeaders = includeColumnHeaders;\n this.useUnformattedValues = useUnformattedValues;\n\n // Make filename RFC5987 compatible\n var encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':')).replace(/['()]/g, escape).replace(/\\*/g, '%2A');\n var messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable(includeColumnHeaders);\n return;\n }\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({\n encodedFileName\n }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n finishDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n var {\n onDownloadCompleted\n } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n if (this.downloadStartTime !== undefined) {\n log.info(\"download finished, total elapsed time \".concat((Date.now() - this.downloadStartTime) / 1000, \" seconds\"));\n }\n }\n cancelDownload() {\n var _this$table, _this$tableSubscripti, _this$fileWriter;\n (_this$table = this.table) === null || _this$table === void 0 || _this$table.close();\n (_this$tableSubscripti = this.tableSubscription) === null || _this$tableSubscripti === void 0 || _this$tableSubscripti.close();\n (_this$fileWriter = this.fileWriter) === null || _this$fileWriter === void 0 || _this$fileWriter.abort();\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => null);\n cancelable.cancel();\n }\n });\n var {\n onDownloadCanceled\n } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n resetTableSaver() {\n this.table = undefined;\n this.tableSubscription = undefined;\n this.columns = undefined;\n this.chunkRows = undefined;\n this.removeIframe();\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n this.includeColumnHeaders = true;\n this.useUnformattedValues = false;\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n if (this.snapshotHandlerTimeout != null) {\n clearTimeout(this.snapshotHandlerTimeout);\n }\n this.streamTimeout = undefined;\n this.snapshotHandlerTimeout = undefined;\n }\n handleDownloadTimeout() {\n log.info('download canceled');\n this.cancelDownload();\n }\n writeTableHeader() {\n var _this$fileWriter2;\n var headerString = '';\n if (this.columns) {\n for (var i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n (_this$fileWriter2 = this.fileWriter) === null || _this$fileWriter2 === void 0 || _this$fileWriter2.write({\n header: headerString\n }).then(() => null);\n }\n startWriteTableBody() {\n if (this.columns && this.gridRanges != null) {\n this.chunkRows = Math.floor(TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length);\n this.rangedSnapshotsTotal = this.gridRanges.map(range => {\n assertNotNull(range.endRow);\n assertNotNull(range.startRow);\n assertNotNull(this.chunkRows);\n return Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows);\n });\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce((total, snapshotCount) => total + snapshotCount);\n log.info(\"start writing table, total snapshots: \", this.snapshotsTotal);\n this.makeSnapshot(Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal));\n }\n }\n writeCsvTable(includeColumnHeaders) {\n if (includeColumnHeaders) {\n this.writeTableHeader();\n }\n this.startWriteTableBody();\n }\n writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow) {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n var n = this.snapshotsBuffer.get(this.currentSnapshotIndex);\n assertNotNull(n);\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(n)\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n this.updateDownloadProgress(snapshotIndex);\n }\n if (this.snapshotsTotal && this.currentSnapshotIndex >= this.snapshotsTotal) {\n this.finishDownload();\n return;\n }\n }\n if (this.snapshotCounter && this.snapshotsTotal && this.snapshotCounter < this.snapshotsTotal) {\n log.debug2(\"\\n current range index: \".concat(this.gridRangeCounter, \", \\n snapshotIndexCounter: \").concat(this.snapshotCounter, \", \\n currentRangedSnapshotIndex : \").concat(this.rangedSnapshotCounter, \", \\n snapshotpending: \").concat(this.snapshotPending, \", \\n buffered \").concat(this.snapshotsBuffer.size, \"\\n making \").concat(Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE - this.snapshotsBuffer.size - this.snapshotPending, this.snapshotsTotal - this.snapshotCounter), \" more snapshots\\n \"));\n this.makeSnapshot(Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE - this.snapshotsBuffer.size - this.snapshotPending, this.snapshotsTotal - this.snapshotCounter));\n }\n }\n updateDownloadProgress(snapshotIndex) {\n if (snapshotIndex != null && this.snapshotsTotal != null && this.downloadStartTime != null) {\n var {\n onDownloadProgressUpdate\n } = this.props;\n var downloadProgress = Math.floor(snapshotIndex * 100 / this.snapshotsTotal);\n var estimateTime = snapshotIndex > 1 ? Math.floor((Date.now() - this.downloadStartTime) * (this.snapshotsTotal - snapshotIndex) / snapshotIndex / 1000) : null;\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n }\n convertSnapshotIntoCsv(snapshot) {\n var csvString = '';\n var snapshotIterator = snapshot.added.iterator();\n var {\n dh,\n formatter\n } = this.props;\n var rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n assertNotNull(this.columns);\n var {\n useUnformattedValues\n } = this;\n for (var i = 0; i < rows.length; i += 1) {\n var rowIdx = rows[i];\n for (var j = 0; j < this.columns.length; j += 1) {\n var {\n type,\n name\n } = this.columns[j];\n var cellData = null;\n if (useUnformattedValues) {\n var _snapshot$getData;\n var value = (_snapshot$getData = snapshot.getData(rowIdx, this.columns[j])) !== null && _snapshot$getData !== void 0 ? _snapshot$getData : '';\n if (value !== '' && TableUtils.isDateType(type)) {\n // value is just a long value, we should return the value formatted as a full date string\n value = dh.i18n.DateTimeFormat.format(UNFORMATTED_DATE_PATTERN, value, dh.i18n.TimeZone.getTimeZone(formatter.timeZone));\n }\n cellData = value.toString();\n } else {\n var hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(formatter, name, type);\n var formatOverride = null;\n if (!hasCustomColumnFormat) {\n var cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);\n formatOverride = (cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.formatString) != null ? cellFormat : null;\n }\n if (formatOverride) {\n cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name, formatOverride);\n } else {\n cellData = formatter.getFormattedString(snapshot.getData(rowIdx, this.columns[j]), type, name);\n }\n }\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n return csvString;\n }\n makeSnapshot(n) {\n var _this = this;\n if (n <= 0) {\n return;\n }\n var {\n dh\n } = this.props;\n assertNotNull(this.gridRangeCounter);\n var i = 0;\n var currentGridRange = this.gridRanges[this.gridRangeCounter];\n assertNotNull(this.tableSubscription);\n assertNotNull(this.columns);\n var _loop = function _loop() {\n assertNotNull(currentGridRange);\n assertNotNull(currentGridRange.startRow);\n assertNotNull(currentGridRange.endRow);\n assertNotNull(_this.rangedSnapshotCounter);\n assertNotNull(_this.chunkRows);\n var snapshotStartRow = currentGridRange.startRow + _this.rangedSnapshotCounter * _this.chunkRows;\n var snapshotEndRow = Math.min(snapshotStartRow + _this.chunkRows - 1, currentGridRange.endRow);\n var snapshotIndex = _this.snapshotCounter;\n _this.cancelableSnapshots.push(PromiseUtils.makeCancelable(_this.tableSubscription.snapshot(dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow), _this.columns).then(snapshot => {\n assertIsUpdateEventData(snapshot);\n _this.handleSnapshotResolved(snapshot, snapshotIndex, snapshotStartRow, snapshotEndRow);\n return snapshotIndex;\n }).catch(err => {\n log.error(err);\n }), val => {\n log.info(\"snapshot \".concat(val, \" has been canceled\"));\n }));\n _this.rangedSnapshotCounter += 1;\n _this.snapshotCounter += 1;\n _this.snapshotPending += 1;\n if (_this.rangedSnapshotCounter >= _this.rangedSnapshotsTotal[_this.gridRangeCounter]) {\n _this.gridRangeCounter += 1;\n _this.rangedSnapshotCounter = 0;\n currentGridRange = _this.gridRanges[_this.gridRangeCounter];\n }\n i += 1;\n };\n while (i < n) {\n _loop();\n }\n }\n handlePortMessage(_ref) {\n var {\n data\n } = _ref;\n var {\n download,\n readableStreamPulling\n } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download != null) {\n var {\n includeColumnHeaders\n } = this;\n this.makeIframe(\"\".concat(download));\n this.writeCsvTable(includeColumnHeaders);\n }\n if (readableStreamPulling != null) {\n if (!this.useBlobFallback) {\n if (this.streamTimeout != null) {\n clearTimeout(this.streamTimeout);\n }\n this.streamTimeout = setTimeout(this.handleDownloadTimeout, TableSaver.STREAM_TIMEOUT);\n }\n }\n }\n handleSnapshotResolved(snapshot, snapshotIndex, snapshotStartRow, snapshotEndRow) {\n // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n makeIframe(src) {\n // make a return value and make it static method\n var iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = src;\n iframe.name = 'iframe';\n document.body.appendChild(iframe);\n this.iframe = iframe;\n }\n removeIframe() {\n var _this$iframe;\n (_this$iframe = this.iframe) === null || _this$iframe === void 0 || _this$iframe.remove();\n this.iframe = undefined;\n }\n render() {\n return null;\n }\n}\n_defineProperty(TableSaver, \"DOWNLOAD_CELL_CHUNK\", 6000);\n_defineProperty(TableSaver, \"SNAPSHOT_BUFFER_SIZE\", 5);\n_defineProperty(TableSaver, \"STREAM_TIMEOUT\", 8000);\n_defineProperty(TableSaver, \"SNAPSHOT_HANDLER_TIMEOUT\", 5);\n_defineProperty(TableSaver, \"defaultProps\", {\n isDownloading: false,\n onDownloadCompleted: () => undefined,\n onDownloadCanceled: () => undefined,\n onDownloadProgressUpdate: () => undefined\n});\n//# sourceMappingURL=TableSaver.js.map","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, ThemeExport } from '@deephaven/components';\nimport { dhSquareFilled, vsCheck, vsChromeClose, vsEdit, vsPaintcan, vsTrash } from '@deephaven/icons';\nimport \"./VisibilityOrderingGroup.css\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nexport default function VisibilityOrderingGroup(props) {\n var _group$color;\n var {\n group,\n onDelete,\n onColorChange,\n onNameChange,\n validateName\n } = props;\n var {\n isNew\n } = group;\n var nameInputRef = useRef(null);\n var colorInputRef = useRef(null);\n var [isColorInputOpen, setIsColorInputOpen] = useState(false);\n var [name, setName] = useState(isNew ? '' : group.name);\n var [isEditing, setIsEditing] = useState(isNew);\n var [shouldValidate, setShouldValidate] = useState(false);\n var nameValidationError = name !== group.name ? validateName(name) : '';\n var isValid = isNew && !shouldValidate || nameValidationError === '';\n var colorInputBlurHandler = useCallback(() => {\n setIsColorInputOpen(false);\n }, []);\n useEffect(function focusEditInput() {\n if (isEditing && nameInputRef.current) {\n // This is solely b/c RTL doesn't count select as focusing the element\n // Might be fixed in v13+ of RTL\n nameInputRef.current.focus();\n nameInputRef.current.select();\n }\n }, [isEditing]);\n useEffect(function openColorInput() {\n if (isColorInputOpen) {\n var _colorInputRef$curren, _colorInputRef$curren2;\n (_colorInputRef$curren = colorInputRef.current) === null || _colorInputRef$curren === void 0 || _colorInputRef$curren.click();\n // Mostly for testing. Chrome seems to not give the hidden input focus\n // Really would only affect screen readers\n (_colorInputRef$curren2 = colorInputRef.current) === null || _colorInputRef$curren2 === void 0 || _colorInputRef$curren2.focus();\n\n /**\n * Adding this event handler is for Firefox on Mac\n * There seems to be buggy behavior when multiple color inputs are on the same page\n * Clicking between the inputs without closing the previous causes a bad state\n * The user gets to a point where they can't open most of the pickers\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1618418\n * https://bugzilla.mozilla.org/show_bug.cgi?id=975468\n * Instead, we remove the color input when any focus is returned to the window\n * This causes Firefox on Mac to mostly operate correctly\n * Firefox seems to ignore the first click back into the window and emit no event\n * So opening a color picker when another is open requires 2 clicks in Firefox\n */\n window.addEventListener('click', colorInputBlurHandler, true);\n }\n return () => window.removeEventListener('click', colorInputBlurHandler, true);\n }, [isColorInputOpen, colorInputBlurHandler]);\n var handleConfirm = () => {\n if (isValid) {\n // Don't trigger change if the value is the same\n if (group.name !== name) {\n onNameChange(group, name);\n }\n setIsEditing(false);\n }\n };\n var handleCancel = () => {\n if (isNew) {\n onDelete(group);\n return;\n }\n setName(group.name);\n setIsEditing(false);\n };\n var handleEditKeyDown = e => {\n setShouldValidate(true);\n if (e.key === 'Enter') {\n e.stopPropagation();\n handleConfirm();\n }\n if (e.key === ' ') {\n e.stopPropagation();\n }\n if (e.key === 'Escape') {\n handleCancel();\n }\n };\n if (isEditing) {\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"editing-container\",\n children: [/*#__PURE__*/_jsx(\"input\", {\n ref: nameInputRef,\n className: classNames('form-control', {\n 'is-invalid': !isValid\n }),\n value: name,\n placeholder: \"Group Name\",\n onChange: e => setName(e.target.value),\n onKeyDown: handleEditKeyDown,\n onBlur: () => setShouldValidate(true)\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: vsCheck,\n tooltip: \"Confirm\",\n onClick: handleConfirm\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: vsChromeClose,\n tooltip: \"Cancel\",\n onClick: handleCancel\n })]\n }), !isValid && /*#__PURE__*/_jsx(\"p\", {\n className: \"mb-0 validate-label-error text-danger\",\n children: nameValidationError\n })]\n });\n }\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"group-name-wrapper\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"column-name\",\n children: name\n }), /*#__PURE__*/_jsx(Button, {\n className: \"p-1 mx-1\",\n kind: \"ghost\",\n icon: vsEdit,\n tooltip: \"Edit\",\n onClick: () => {\n setIsEditing(true);\n }\n }), /*#__PURE__*/_jsxs(\"span\", {\n className: \"right-buttons\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: vsTrash,\n tooltip: \"Delete group\",\n onClick: () => onDelete(group)\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"color-swatch mr-1\",\n icon: group.color !== undefined ? /*#__PURE__*/_jsxs(\"span\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n className: \"color-swatch\",\n icon: dhSquareFilled,\n color: ThemeExport.white,\n transform: \"down-1\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n className: \"color-swatch\",\n icon: dhSquareFilled,\n color: group.color,\n transform: \"shrink-2 down-1\"\n })]\n }) : vsPaintcan,\n tooltip: \"Set color\"\n /**\n * Toggle to close the picker on Chrome\n * Prevents Firefox on Mac from getting into a stuck state\n * Does not close on Firefox b/c the picker stays open when the element is removed\n */,\n onClick: () => setIsColorInputOpen(val => !val)\n }), isColorInputOpen && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"input\", {\n \"aria-label\": \"Color input\",\n ref: colorInputRef,\n type: \"color\",\n list: \"presetColors\",\n value: (_group$color = group.color) !== null && _group$color !== void 0 ? _group$color : ThemeExport['content-bg'],\n style: {\n visibility: 'hidden',\n width: 0,\n height: 0,\n padding: 0,\n border: 0\n },\n onChange: e => {\n onColorChange(group, e.target.value);\n }\n }), /*#__PURE__*/_jsxs(\"datalist\", {\n id: \"presetColors\",\n children: [/*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport['content-bg']\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.primary\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.foreground\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.green\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.yellow\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.orange\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.red\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.purple\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport.blue\n }), /*#__PURE__*/_jsx(\"option\", {\n children: ThemeExport['gray-400']\n })]\n })]\n })]\n })]\n });\n}\n//# sourceMappingURL=VisibilityOrderingGroup.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, { forwardRef, memo, useCallback, useRef } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhEye, dhEyeSlash, vsGripper } from '@deephaven/icons';\nimport { Button, Tooltip } from '@deephaven/components';\nimport VisibilityOrderingGroup from \"./VisibilityOrderingGroup.js\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction emptyOnClick() {\n // no-op\n}\nvar VisibilityOrderingItem = /*#__PURE__*/forwardRef(function VisibilityOrderingItem(props, ref) {\n var {\n value,\n clone,\n childCount,\n item,\n onVisibilityChange,\n visibilityClickAndDrag,\n onClick,\n onGroupDelete,\n onGroupColorChange,\n onGroupNameChange,\n validateGroupName,\n handleProps\n } = props;\n var {\n group,\n modelIndex,\n isVisible\n } = item.data;\n var buttonRef = useRef(null);\n var handleVisibilityChange = useCallback(e => {\n if (e.buttons === 1) {\n var _buttonRef$current;\n onVisibilityChange([modelIndex].flat(), !isVisible);\n (_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 || _buttonRef$current.focus();\n }\n }, [onVisibilityChange, modelIndex, isVisible]);\n var handleClick = useCallback(event => {\n onClick(value, event);\n }, [onClick, value]);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n _jsxs(\"div\", _objectSpread(_objectSpread({\n ref: ref,\n className: classNames('tree-item', {\n isSelected: item.selected,\n 'two-dragged': childCount === 2,\n 'multiple-dragged': childCount > 2\n }),\n onClick: handleClick,\n \"data-index\": item.index\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, handleProps), {}, {\n children: [!clone && /*#__PURE__*/_jsx(Button, {\n ref: buttonRef,\n kind: \"ghost\",\n className: \"px-1\"\n // We PropType validate onClick for Button\n ,\n onClick: emptyOnClick,\n onMouseDown: handleVisibilityChange,\n onMouseEnter: visibilityClickAndDrag ? handleVisibilityChange : undefined,\n icon: isVisible ? dhEye : dhEyeSlash,\n tooltip: \"Toggle visibility\"\n }), /*#__PURE__*/_jsx(\"span\", {\n title: value,\n className: classNames('column-name', group && 'column-group'),\n children: group && !clone ? /*#__PURE__*/_jsx(VisibilityOrderingGroup, {\n group: group,\n onDelete: onGroupDelete,\n onColorChange: onGroupColorChange,\n onNameChange: onGroupNameChange,\n validateName: validateGroupName\n }) : value\n }), /*#__PURE__*/_jsxs(\"div\", {\n children: [clone && childCount > 1 && /*#__PURE__*/_jsx(\"span\", {\n className: \"item-count\",\n children: childCount\n }), !clone && /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to re-order\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGripper\n })]\n })]\n })]\n }))\n );\n});\nvar MemoizedVisibilityOrderingItem = /*#__PURE__*/memo(VisibilityOrderingItem);\nexport default MemoizedVisibilityOrderingItem;\n//# sourceMappingURL=VisibilityOrderingItem.js.map","export function isFlattenedTreeItem(item) {\n return item.parentId !== undefined;\n}\n//# sourceMappingURL=types.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 { arrayMove } from '@dnd-kit/sortable';\nimport { GridRange, GridUtils } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\nimport { isFlattenedTreeItem } from \"./types.js\";\n/**\n * Gets the depth of an item dragged with a given x-axis offset\n *\n * @param offset x-axis offset of the dragging item\n * @param indentationWidth Width of indentation for each depth\n * @returns The drag depth for the given offset\n */\nfunction getDragDepth(offset, indentationWidth) {\n return Math.round(offset / indentationWidth);\n}\nfunction getTreeItem(nameToIndexes, movedColumns, columnHeaderGroupMap, name, hiddenColumnSet, selectedItems, showHiddenColumns) {\n var _nameToIndexes$get;\n var {\n modelIndex,\n visibleIndex\n } = (_nameToIndexes$get = nameToIndexes.get(name)) !== null && _nameToIndexes$get !== void 0 ? _nameToIndexes$get : {};\n if (modelIndex === undefined || visibleIndex === undefined) {\n var group = columnHeaderGroupMap.get(name);\n if (group == null) {\n throw new Error(\"Column or header group not found: \".concat(name));\n }\n var modelIndexes = group.childIndexes.flat();\n return {\n id: name,\n selected: selectedItems.has(name),\n children: group.children.filter((_, i) => showHiddenColumns || !hiddenColumnSet.has(group.childIndexes[i])).map(childName => getTreeItem(nameToIndexes, movedColumns, columnHeaderGroupMap, childName, hiddenColumnSet, selectedItems, showHiddenColumns)).sort((a, b) => {\n var aVal = Array.isArray(a.data.visibleIndex) ? a.data.visibleIndex[0] : a.data.visibleIndex;\n var bVal = Array.isArray(b.data.visibleIndex) ? b.data.visibleIndex[0] : b.data.visibleIndex;\n return aVal - bVal;\n }),\n data: {\n modelIndex: modelIndexes,\n visibleIndex: group.getVisibleRange(movedColumns),\n group,\n isVisible: modelIndexes.some(index => !hiddenColumnSet.has(index))\n }\n };\n }\n return {\n id: name,\n children: [],\n selected: selectedItems.has(name),\n data: {\n modelIndex,\n visibleIndex,\n isVisible: !hiddenColumnSet.has(modelIndex)\n }\n };\n}\nexport function getTreeItems(columns, movedColumns, columnHeaderGroups, hiddenColumns, selectedItems, showHiddenColumns) {\n var items = [];\n var selectedItemsSet = new Set(selectedItems);\n var groupMap = new Map(columnHeaderGroups.map(group => [group.name, group]));\n var hiddenColumnSet = new Set(hiddenColumns);\n var visibleIndex = 0;\n var modelRanges = GridRange.boundedRanges(GridUtils.getModelRange(GridRange.makeNormalized(0, 0, columns.length - 1, 0), movedColumns), columns.length, 1);\n var mapEntries = modelRanges.flatMap(range => {\n var {\n startColumn,\n endColumn\n } = range;\n var rangeLength = endColumn - startColumn + 1;\n var entries = new Array(rangeLength).fill(0).map((_, i) => [visibleIndex + i, startColumn + i]);\n visibleIndex += rangeLength;\n return entries;\n });\n var visibleToModelMap = new Map(mapEntries);\n var nameToIndexes = new Map([...visibleToModelMap.entries()].map(_ref => {\n var [v, m] = _ref;\n return [columns[m].name, {\n visibleIndex: v,\n modelIndex: m\n }];\n }));\n visibleIndex = 0;\n var _loop = function _loop() {\n var modelIndex = visibleToModelMap.get(visibleIndex);\n assertNotNull(modelIndex);\n var columnName = columns[modelIndex].name;\n var group = columnHeaderGroups.find(_ref2 => {\n var {\n children\n } = _ref2;\n return children.includes(columnName);\n });\n while (group !== undefined && group.parent !== undefined) {\n group = groupMap.get(group.parent);\n }\n var item = getTreeItem(nameToIndexes, movedColumns, groupMap, group ? group.name : columnName, hiddenColumnSet, selectedItemsSet, showHiddenColumns);\n items.push(item);\n if (Array.isArray(item.data.visibleIndex)) {\n visibleIndex += item.data.visibleIndex[1] - item.data.visibleIndex[0] + 1;\n } else {\n visibleIndex += 1;\n }\n };\n while (visibleIndex < columns.length) {\n _loop();\n }\n return items;\n}\n\n/**\n * Gets the projected drop position and depth of the dragged item\n *\n * @param items List of flattened items\n * @param activeId ID of the actively dragged item\n * @param overId ID of the item currently being dragged over\n * @param dragOffset The x-axis offset of the dragged item\n * @param indentationWidth The width for each level of the tree\n * @returns The projected position and depth if the item were to be dropped.\n * Null if the projection could not be calculated.\n */\nexport function getProjection(items, activeId, overId, dragOffset, indentationWidth) {\n var overItemIndex = items.findIndex(_ref3 => {\n var {\n id\n } = _ref3;\n return id === overId;\n });\n var activeItemIndex = items.findIndex(_ref4 => {\n var {\n id\n } = _ref4;\n return id === activeId;\n });\n if (overItemIndex === -1 || activeItemIndex === -1) {\n return null;\n }\n var activeItem = items[activeItemIndex];\n var newItems = arrayMove(items, activeItemIndex, overItemIndex);\n var previousItem = newItems[overItemIndex - 1];\n var nextItem = newItems[overItemIndex + 1];\n var dragDepth = getDragDepth(dragOffset, indentationWidth);\n var projectedDepth = activeItem.depth + dragDepth;\n var maxDepth = getMaxDepth({\n previousItem,\n nextItem\n });\n var minDepth = getMinDepth({\n nextItem\n });\n var depth = projectedDepth;\n if (projectedDepth >= maxDepth) {\n depth = maxDepth;\n } else if (projectedDepth < minDepth) {\n depth = minDepth;\n }\n return {\n depth,\n maxDepth,\n minDepth,\n parentId: getParentId()\n };\n function getParentId() {\n var _newItems$slice$rever;\n if (depth === 0 || !previousItem) {\n return null;\n }\n if (depth === previousItem.depth) {\n return previousItem.parentId;\n }\n if (depth > previousItem.depth) {\n return previousItem.id;\n }\n var newParent = (_newItems$slice$rever = newItems.slice(0, overItemIndex).reverse().find(item => item.depth === depth)) === null || _newItems$slice$rever === void 0 ? void 0 : _newItems$slice$rever.parentId;\n return newParent !== null && newParent !== void 0 ? newParent : null;\n }\n}\nfunction getMaxDepth(_ref5) {\n var _previousItem$depth, _nextItem$depth;\n var {\n previousItem,\n nextItem\n } = _ref5;\n return Math.max((_previousItem$depth = previousItem === null || previousItem === void 0 ? void 0 : previousItem.depth) !== null && _previousItem$depth !== void 0 ? _previousItem$depth : 0, (_nextItem$depth = nextItem === null || nextItem === void 0 ? void 0 : nextItem.depth) !== null && _nextItem$depth !== void 0 ? _nextItem$depth : 0);\n}\nfunction getMinDepth(_ref6) {\n var {\n nextItem\n } = _ref6;\n if (nextItem) {\n return nextItem.depth;\n }\n return 0;\n}\n\n/**\n * Helper function to recursively flatten a tree\n *\n * @param items Items to flatten\n * @param parentId The current parentId of the items\n * @param depth The current depth of the items\n * @returns Flattened items\n */\nfunction flatten(items) {\n var parentId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n return items.reduce((acc, item) => [...acc, _objectSpread(_objectSpread({}, item), {}, {\n parentId,\n depth,\n index: 0\n }),\n // Index will be recalculated after\n ...flatten(item.children, item.id, depth + 1)], []).map((item, index) => _objectSpread(_objectSpread({}, item), {}, {\n index\n })); // Recalculate indexes to be sequential\n}\n\n/**\n * Flattens a tree into a 1D array given the items\n * @param items The tree items to flatten\n * @returns The flattened tree items list\n */\nexport function flattenTree(items) {\n // Should help prevent double flattening since FlattenedItems are valid TreeItems\n if (items.every(isFlattenedTreeItem)) {\n return [...items];\n }\n return flatten(items);\n}\n\n/**\n * Recursively checks for the item in a list of items.\n * The list does not have to be flattened prior to searching.\n *\n * @param items Items to search\n * @param itemId Item to find\n * @returns The item if found\n */\nexport function findItemDeep(items, itemId) {\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n id,\n children\n } = item;\n if (id === itemId) {\n return item;\n }\n if (children.length) {\n var child = findItemDeep(children, itemId);\n if (child) {\n return child;\n }\n }\n }\n return undefined;\n}\nfunction countChildren(items) {\n var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return items.reduce((acc, _ref7) => {\n var {\n children\n } = _ref7;\n if (children.length) {\n return countChildren(children, acc + 1);\n }\n return acc + 1;\n }, count);\n}\nexport function getChildCount(items, id) {\n var item = findItemDeep(items, id);\n return item ? countChildren(item.children) : 0;\n}\n\n/**\n * Removes the children of the list of parents from the list of flattened items\n *\n * @param items The flattened items to remove from\n * @param ids The parents we want to remove the children of\n * @returns The flattened items without the children of the parents\n */\nexport function removeChildrenOf(items, ids) {\n var excludeParentIds = new Set(ids);\n return items.filter(item => {\n if (item.parentId != null && excludeParentIds.has(item.parentId)) {\n if (item.children.length) {\n excludeParentIds.add(item.id);\n }\n return false;\n }\n return true;\n });\n}\n//# sourceMappingURL=utilities.js.map","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { useMemo } from 'react';\nimport classNames from 'classnames';\nimport \"./TreeItem.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function TreeItem(props) {\n var {\n clone = false,\n depth,\n withDepthMarkers = true,\n disableInteraction = false,\n ghost = false,\n handleProps,\n value,\n dragRef = null,\n wrapperRef = null,\n renderItem,\n item,\n style,\n top\n } = props;\n var depthMarkers = useMemo(() => withDepthMarkers ? Array(depth).fill(0).map((_, i) => /*#__PURE__*/_jsx(\"span\", {\n className: \"depth-line\",\n style: style\n }, \"depth-line-\".concat(i))) : null, [depth, style, withDepthMarkers]);\n var renderItemProps = useMemo(() => ({\n ref: dragRef,\n clone,\n value,\n item,\n handleProps\n }), [dragRef, clone, value, item, handleProps]);\n var wrapperStyle = useMemo(() => ({\n top,\n position: 'absolute'\n }), [top]);\n return /*#__PURE__*/_jsxs(\"li\", {\n className: classNames('item-wrapper', {\n clone,\n ghost,\n disableInteraction\n }),\n \"data-id\": item.id,\n \"data-index\": item.index,\n ref: wrapperRef,\n style: wrapperStyle,\n children: [!clone && withDepthMarkers && depthMarkers, renderItem(renderItemProps)]\n }, value);\n}\nTreeItem.displayName = 'TreeItem';\n//# sourceMappingURL=TreeItem.js.map","var _excluded = [\"id\", \"depth\", \"top\", \"measureElement\"];\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); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\n/* eslint-disable import/prefer-default-export */\nimport React, { useCallback, useMemo } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { TreeItem } from \"./TreeItem.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar animateLayoutChanges = _ref => {\n var {\n isSorting,\n wasDragging\n } = _ref;\n return !(isSorting || wasDragging);\n};\nexport function SortableTreeItem(_ref2) {\n var {\n id,\n depth,\n top,\n measureElement\n } = _ref2,\n props = _objectWithoutProperties(_ref2, _excluded);\n var {\n attributes,\n isDragging,\n isSorting,\n listeners,\n setDraggableNodeRef,\n setDroppableNodeRef,\n transform,\n transition\n } = useSortable({\n id,\n animateLayoutChanges\n });\n var transformString = CSS.Translate.toString(transform);\n var style = useMemo(() => ({\n transform: transformString,\n transition\n }), [transformString, transition]);\n var handleProps = useMemo(() => _objectSpread(_objectSpread(_objectSpread({}, attributes), listeners), {}, {\n style\n }), [attributes, listeners, style]);\n var wrapperRef = useCallback(node => {\n setDroppableNodeRef(node);\n measureElement === null || measureElement === void 0 || measureElement(node);\n }, [setDroppableNodeRef, measureElement]);\n return /*#__PURE__*/_jsx(TreeItem, _objectSpread({\n dragRef: setDraggableNodeRef,\n wrapperRef: wrapperRef,\n depth: depth,\n ghost: isDragging,\n disableInteraction: isSorting,\n handleProps: handleProps,\n style: style,\n top: top\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props));\n}\n//# sourceMappingURL=SortableTreeItem.js.map","import React, { useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';\nimport classNames from 'classnames';\nimport { useDndContext } from '@dnd-kit/core';\nimport { defaultRangeExtractor, useVirtualizer } from '@tanstack/react-virtual';\nimport { getProjection } from \"./utilities.js\";\nimport { SortableTreeItem } from \"./SortableTreeItem.js\";\nimport { TreeItem } from \"./TreeItem.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function SortableTree(_ref) {\n var _ref2, _dndContext$active, _ref3, _dndContext$over, _dndContext$active$re, _dndContext$active$re2, _dndContext$active$re3, _dndContext$active$re4;\n var {\n items,\n indentationWidth = 30,\n renderItem,\n isDraggable = true,\n withDepthMarkers = true,\n virtualizerRef\n } = _ref;\n var dndContext = useDndContext();\n var activeId = (_ref2 = (_dndContext$active = dndContext.active) === null || _dndContext$active === void 0 ? void 0 : _dndContext$active.id) !== null && _ref2 !== void 0 ? _ref2 : null;\n var overId = (_ref3 = (_dndContext$over = dndContext.over) === null || _dndContext$over === void 0 ? void 0 : _dndContext$over.id) !== null && _ref3 !== void 0 ? _ref3 : null;\n var offsetLeft = dndContext.active ? ((_dndContext$active$re = (_dndContext$active$re2 = dndContext.active.rect.current.translated) === null || _dndContext$active$re2 === void 0 ? void 0 : _dndContext$active$re2.left) !== null && _dndContext$active$re !== void 0 ? _dndContext$active$re : 0) - ((_dndContext$active$re3 = (_dndContext$active$re4 = dndContext.active.rect.current.initial) === null || _dndContext$active$re4 === void 0 ? void 0 : _dndContext$active$re4.left) !== null && _dndContext$active$re3 !== void 0 ? _dndContext$active$re3 : 0) : 0;\n var filteredItems = useMemo(() => {\n if (activeId != null) {\n return items.filter(_ref4 => {\n var {\n id,\n selected\n } = _ref4;\n return id === activeId || !selected;\n });\n }\n return items;\n }, [activeId, items]);\n var activeIndex = useMemo(() => filteredItems.findIndex(_ref5 => {\n var {\n id\n } = _ref5;\n return id === activeId;\n }), [activeId, filteredItems]);\n\n // Add the active index to the range so it is always rendered\n var rangeExtractor = useCallback(range => {\n var extractedRange = defaultRangeExtractor(range);\n if (activeIndex >= 0 && (activeIndex < extractedRange[0] || activeIndex > extractedRange[extractedRange.length - 1])) {\n extractedRange.push(activeIndex);\n }\n return extractedRange;\n }, [activeIndex]);\n var getScrollElement = useCallback(() => {\n var _containerRef$current, _containerRef$current2;\n return (_containerRef$current = (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.parentElement) !== null && _containerRef$current !== void 0 ? _containerRef$current : null;\n }, []);\n var estimateSize = useCallback(() => 30, []);\n var containerRef = useRef(null);\n var virtualizer = useVirtualizer({\n count: filteredItems.length,\n getScrollElement,\n estimateSize,\n rangeExtractor,\n overscan: 10,\n gap: 1 // We set a 1px bottom margin before we virtualized this list\n });\n\n // Expose the virtualizer via ref\n useImperativeHandle(virtualizerRef, () => virtualizer, [virtualizer]);\n var virtualizedItems = virtualizer.getVirtualItems();\n var {\n measureDroppableContainers\n } = useDndContext();\n\n // Without this, animations are funky when using the move/sort buttons\n // dnd-kit only remeasures on drag/drop by default\n useEffect(function remeasureContainers() {\n measureDroppableContainers(virtualizedItems.map(_ref6 => {\n var {\n index\n } = _ref6;\n return filteredItems[index].id;\n }));\n }, [filteredItems, measureDroppableContainers, virtualizedItems]);\n var projected = isDraggable && activeId != null && overId != null ? getProjection(filteredItems, activeId, overId, offsetLeft, indentationWidth) : null;\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('tree-container', activeId != null && 'marching-ants'),\n style: {\n height: \"\".concat(virtualizer.getTotalSize(), \"px\"),\n position: 'relative'\n },\n ref: containerRef,\n children: virtualizer.getVirtualItems().map(_ref7 => {\n var {\n index,\n start\n } = _ref7;\n var item = filteredItems[index];\n var {\n id,\n depth\n } = item;\n return isDraggable ? /*#__PURE__*/_jsx(SortableTreeItem, {\n id: id,\n value: id,\n depth: id === activeId && projected ? projected.depth : depth,\n item: item,\n renderItem: renderItem,\n withDepthMarkers: withDepthMarkers,\n top: start\n // This allows the group items to expand when editing the name and shift the list correctly\n ,\n measureElement: virtualizer.measureElement\n }, id) : /*#__PURE__*/_jsx(TreeItem, {\n value: id,\n depth: depth,\n item: item,\n renderItem: renderItem,\n withDepthMarkers: withDepthMarkers,\n top: start,\n wrapperRef: virtualizer.measureElement\n }, id);\n })\n });\n}\n//# sourceMappingURL=SortableTree.js.map","import { GridUtils } from '@deephaven/grid';\nimport clamp from 'lodash.clamp';\nimport ColumnHeaderGroup from \"../../ColumnHeaderGroup.js\";\n/**\n * Moves an item as the result of drag and drop in the visibility ordering builder\n * This is extracted from the component mostly for testing purposes\n * Drag and drop interactions are not easily testable\n *\n * @param from The item being dragged\n * @param to The item being dropped on\n * @param movedColumns The existing moved columns\n * @param columnHeaderGroups The column header groups pre-drag\n * @param flattenedItems Flattened tree items representing the list\n * @param selectedParentItems The user selected items in tree order. Should not include items if their parent item is selected\n * @param firstMovableIndex The first visible index that can be moved\n * @param lastMovableIndex The last visible index that can be moved\n * @returns Object containing the updated column header groups and updated movedColumns array\n * The movedColumns returned is complete and does not need to be combined with the existing movedColumns\n */\nexport function moveItemsFromDrop(from, to, movedColumns, columnHeaderGroups, selectedParentItems, firstMovableIndex, lastMovableIndex) {\n var newMoves = [];\n var newGroups = columnHeaderGroups;\n var firstVisibleIndex = selectedParentItems[0].data.visibleIndex;\n var fromItemIndex = from.index;\n var toItemIndex = to.index;\n var toIndex = Array.isArray(firstVisibleIndex) ? firstVisibleIndex[1] + 1 : firstVisibleIndex + 1;\n newGroups = moveToGroup(selectedParentItems[0], to.parentId, newGroups);\n\n // Move the items after to all after the first selected item\n for (var i = 1; i < selectedParentItems.length; i += 1) {\n var {\n data: {\n visibleIndex\n }\n } = selectedParentItems[i];\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, true);\n toIndex += Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;\n newGroups = moveToGroup(selectedParentItems[i], to.parentId, newGroups);\n }\n var selectedRange = [Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex, toIndex - 1];\n var originalDropIndex = Array.isArray(to.data.visibleIndex) ? to.data.visibleIndex[0] : to.data.visibleIndex;\n var dropIndex = GridUtils.getVisibleIndex(originalDropIndex, newMoves);\n\n // When moving up from multi-select\n // And the items caused the drop index to shift (disjoint multi-select)\n // The drop index will be off by 1\n if (fromItemIndex > toItemIndex && dropIndex > originalDropIndex) {\n dropIndex -= 1;\n }\n // Dropping as first item in a group\n // Need to adjust visible index if dragging from before this group or it is off by 1\n if (to.children.length > 0 && (Array.isArray(firstVisibleIndex) ? firstVisibleIndex[0] : firstVisibleIndex) < dropIndex) {\n dropIndex -= 1;\n }\n if (selectedRange[0] < dropIndex) {\n dropIndex -= selectedRange[1] - selectedRange[0];\n }\n newMoves = GridUtils.moveItemOrRange(selectedRange, clamp(dropIndex, firstMovableIndex, lastMovableIndex), newMoves);\n return {\n groups: newGroups,\n movedColumns: newMoves.length > 0 ? movedColumns.concat(newMoves) : movedColumns\n };\n}\nexport function moveToGroup(item, toName, columnGroups) {\n if (item.parentId === toName) {\n // Don't need to move an item if it is already in the group\n return columnGroups;\n }\n var newGroups = columnGroups.map(group => new ColumnHeaderGroup(group));\n var newGroupMap = new Map(newGroups.map(group => [group.name, group]));\n var fromGroup = newGroups.find(g => g.name === item.parentId);\n var toGroup = newGroups.find(g => g.name === toName);\n var movedGroup = newGroups.find(g => g.name === item.id);\n if (fromGroup != null) {\n // Moved out of a group\n fromGroup.children = fromGroup.children.filter(name => name !== item.id);\n\n // Moved all children out of a group\n if (fromGroup.children.length === 0) {\n var _parent;\n var deleteNames = new Set([fromGroup.name]);\n var {\n parent: parentName = ''\n } = fromGroup;\n var parent = newGroupMap.get(parentName);\n (_parent = parent) === null || _parent === void 0 || _parent.removeChildren([fromGroup.name]);\n\n // Might need to delete parents if their only child is the now empty group\n while (parent && parent.children.length === 0) {\n var _parent$parent, _parent2;\n deleteNames.add(parent.name);\n var nextParentName = (_parent$parent = (_parent2 = parent) === null || _parent2 === void 0 ? void 0 : _parent2.parent) !== null && _parent$parent !== void 0 ? _parent$parent : '';\n var nextParent = newGroupMap.get(nextParentName);\n nextParent === null || nextParent === void 0 || nextParent.removeChildren([parent.name]);\n parent = nextParent;\n }\n\n // Delete all groups that are now empty\n newGroups = newGroups.filter(_ref => {\n var {\n name\n } = _ref;\n return !deleteNames.has(name);\n });\n }\n }\n if (toGroup != null) {\n // Moved into a group\n toGroup.addChildren([item.id]);\n }\n movedGroup === null || movedGroup === void 0 || movedGroup.setParent(toName !== null && toName !== void 0 ? toName : undefined);\n return newGroups;\n}\n//# sourceMappingURL=VisibilityOrderingBuilderUtils.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, { forwardRef, memo, useCallback } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { Tooltip } from '@deephaven/components';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar SearchItem = /*#__PURE__*/forwardRef(function SearchItem(props, ref) {\n var {\n value,\n item,\n onClick,\n onKeyDown,\n handleProps\n } = props;\n var handleClick = useCallback(event => {\n onClick(item, event);\n }, [onClick, item]);\n var handleKeyDown = useCallback(event => {\n onKeyDown(item, event);\n }, [onKeyDown, item]);\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n _jsxs(\"div\", _objectSpread(_objectSpread({\n ref: ref,\n className: classNames('tree-item', {\n isSelected: item.selected\n }),\n onClick: handleClick,\n onKeyDownCapture: handleKeyDown,\n \"data-index\": item.index\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, handleProps), {}, {\n children: [/*#__PURE__*/_jsx(\"span\", {\n title: value,\n className: classNames('column-name'),\n children: value\n }), /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to re-order\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGripper\n })]\n })]\n }))\n );\n});\nvar MemoizedSearchItem = /*#__PURE__*/memo(SearchItem);\nexport default MemoizedSearchItem;\n//# sourceMappingURL=SearchItem.js.map","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { useDndMonitor } from '@dnd-kit/core';\nimport { GridUtils } from '@deephaven/grid';\nimport { ActionButton, Popper, SearchField } from '@deephaven/components';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport SortableTree from \"./sortable-tree/SortableTree.js\";\nimport \"./SearchWithModal.css\";\nimport MemoizedSearchItem from \"./SearchItem.js\";\nimport { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nexport function SearchWithModal(_ref) {\n var _searchRef$current3, _searchRef$current4;\n var {\n items,\n onModalOpenChange,\n onClick,\n onDragStart,\n setSelection\n } = _ref;\n var [searchValue, setSearchValue] = useState('');\n var [isModalOpen, setIsModalOpen] = useState(false);\n var searchRef = useRef(null);\n var popperRef = useRef(null);\n var handleModalOpen = useCallback(() => {\n if (isModalOpen) {\n return;\n }\n setIsModalOpen(true);\n onModalOpenChange(true);\n }, [onModalOpenChange, isModalOpen]);\n var handleModalClose = useCallback(() => {\n if (!isModalOpen) {\n return;\n }\n setIsModalOpen(false);\n onModalOpenChange(false);\n }, [onModalOpenChange, isModalOpen]);\n var handleInputChange = useCallback(value => {\n // Open in case the user hit escape to close the modal then started typing\n // without blurring the input\n handleModalOpen();\n setSearchValue(value);\n }, [handleModalOpen]);\n var handleInputBlur = useCallback(e => {\n if (!popperRef.current || !popperRef.current.element.contains(e.relatedTarget)) {\n handleModalClose();\n }\n }, [handleModalClose]);\n var handleModalBlur = useCallback(e => {\n var _searchRef$current;\n var searchElement = (_searchRef$current = searchRef.current) === null || _searchRef$current === void 0 ? void 0 : _searchRef$current.getInputElement();\n if (!searchElement || !searchElement.contains(e.relatedTarget)) {\n handleModalClose();\n }\n }, [handleModalClose]);\n var handleDragStart = useCallback(event => {\n onDragStart === null || onDragStart === void 0 || onDragStart(event);\n handleModalClose();\n }, [onDragStart, handleModalClose]);\n useDndMonitor({\n onDragStart: isModalOpen ? handleDragStart : undefined\n });\n var handleClick = useCallback((item, event) => {\n onClick(item, event);\n if (!event.shiftKey && !GridUtils.isModifierKeyDown(event)) {\n handleModalClose();\n }\n }, [onClick, handleModalClose]);\n var handleItemKeyDown = useCallback((item, event) => {\n var {\n key\n } = event;\n if (key === 'Enter') {\n // Select item and close modal\n event.preventDefault();\n event.stopPropagation();\n setSelection([item]);\n handleModalClose();\n } else if (key === 'ArrowDown') {\n var _event$currentTarget$;\n // Move focus to the next item\n event.preventDefault();\n event.stopPropagation();\n var nextElement = (_event$currentTarget$ = event.currentTarget.parentElement) === null || _event$currentTarget$ === void 0 || (_event$currentTarget$ = _event$currentTarget$.nextElementSibling // The parent item-wrapper elements are siblings, not the tree-items\n ) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.querySelector('.tree-item[tabindex=\"0\"]');\n nextElement === null || nextElement === void 0 || nextElement.scrollIntoView({\n block: 'nearest'\n });\n nextElement === null || nextElement === void 0 || nextElement.focus();\n } else if (key === 'ArrowUp') {\n var _event$currentTarget$2;\n // Move focus to the previous item\n event.preventDefault();\n event.stopPropagation();\n var prevElement = (_event$currentTarget$2 = event.currentTarget.parentElement) === null || _event$currentTarget$2 === void 0 || (_event$currentTarget$2 = _event$currentTarget$2.previousElementSibling // The parent item-wrapper elements are siblings, not the tree-items\n ) === null || _event$currentTarget$2 === void 0 ? void 0 : _event$currentTarget$2.querySelector('.tree-item[tabindex=\"0\"]');\n if (prevElement) {\n prevElement.scrollIntoView({\n block: 'nearest'\n });\n prevElement.focus();\n } else {\n var _searchRef$current2;\n (_searchRef$current2 = searchRef.current) === null || _searchRef$current2 === void 0 || (_searchRef$current2 = _searchRef$current2.getInputElement()) === null || _searchRef$current2 === void 0 || _searchRef$current2.focus();\n }\n }\n }, [setSelection, handleModalClose]);\n var renderItem = useCallback(_ref2 => {\n var {\n value,\n item,\n ref,\n handleProps\n } = _ref2;\n return /*#__PURE__*/_jsx(MemoizedSearchItem, {\n ref: ref,\n value: value,\n item: item,\n onClick: handleClick,\n onKeyDown: handleItemKeyDown,\n handleProps: handleProps\n }, item.id);\n }, [handleClick, handleItemKeyDown]);\n\n // Detect if the user resizes the panel height while the popper is open\n useResizeObserver((_searchRef$current3 = searchRef.current) === null || _searchRef$current3 === void 0 || (_searchRef$current3 = _searchRef$current3.getInputElement()) === null || _searchRef$current3 === void 0 ? void 0 : _searchRef$current3.closest('.visibility-ordering-builder'), () => {\n var _popperRef$current;\n (_popperRef$current = popperRef.current) === null || _popperRef$current === void 0 || _popperRef$current.scheduleUpdate();\n });\n var filteredItems = useMemo(() => {\n if (searchValue === '') {\n return items;\n }\n var lowerSearch = searchValue.toLowerCase();\n return items.filter(item => item.id.toLowerCase().includes(lowerSearch));\n }, [items, searchValue]);\n var handleSearchKeyDown = useCallback(\n // Close on escape with empty search.\n // If there is a search value, let the input handle the escape to clear the search.\n e => {\n if (e.key === 'Escape' && searchValue === '') {\n handleModalClose();\n }\n if (e.key === 'Enter' && filteredItems.length > 0) {\n e.preventDefault();\n // Select the first item in the list\n var firstItem = filteredItems[0];\n setSelection([firstItem]);\n handleModalClose();\n }\n if (e.key === 'ArrowDown' && filteredItems.length > 0) {\n var _popperRef$current2;\n e.preventDefault();\n // Focus the first item in the list\n var item = (_popperRef$current2 = popperRef.current) === null || _popperRef$current2 === void 0 ? void 0 : _popperRef$current2.element.querySelector('.tree-item[tabindex=\"0\"]');\n item === null || item === void 0 || item.focus();\n }\n }, [setSelection, filteredItems, handleModalClose, searchValue]);\n var handleSelectMatching = useCallback(() => {\n setSelection(filteredItems);\n handleModalClose();\n }, [filteredItems, setSelection, handleModalClose]);\n var hasMultipleSelection = useMemo(() => {\n var foundOne = false;\n return filteredItems.some(item => {\n if (item.selected) {\n if (foundOne) {\n return true;\n }\n foundOne = true;\n }\n return false;\n });\n }, [filteredItems]);\n var hasMultipleMatches = searchValue !== '' && filteredItems.length > 1;\n var showFooterButtons = hasMultipleSelection || hasMultipleMatches;\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(SearchField, {\n \"aria-label\": \"Search columns\",\n ref: searchRef,\n value: searchValue,\n onChange: handleInputChange,\n onFocus: handleModalOpen,\n onBlur: handleInputBlur,\n onKeyDown: handleSearchKeyDown\n }), /*#__PURE__*/_jsx(Popper, {\n ref: popperRef,\n isShown: isModalOpen,\n interactive: true,\n keepInParent: true,\n onBlur: handleModalBlur,\n onExited: handleModalClose // May exit due to escape which does not trigger blur\n ,\n options: {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: {\n priority: ['top']\n },\n flip: {\n enabled: false\n }\n }\n },\n referenceObject: (_searchRef$current4 = searchRef.current) === null || _searchRef$current4 === void 0 ? void 0 : _searchRef$current4.getInputElement(),\n className: \"visibility-search-list\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"visibility-search-list-inner\",\n children: filteredItems.length === 0 ? /*#__PURE__*/_jsx(\"div\", {\n className: \"no-results\",\n children: \"No matching columns\"\n }) : /*#__PURE__*/_jsxs(_Fragment, {\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"search-tree-container\",\n children: /*#__PURE__*/_jsx(SortableTree, {\n items: filteredItems,\n withDepthMarkers: false,\n renderItem: renderItem\n })\n }), showFooterButtons && /*#__PURE__*/_jsxs(\"div\", {\n className: \"footer-buttons\",\n children: [hasMultipleSelection && /*#__PURE__*/_jsx(ActionButton, {\n isQuiet: true,\n onPress: handleModalClose,\n children: \"Select Group\"\n }), hasMultipleMatches && /*#__PURE__*/_jsx(ActionButton, {\n isQuiet: true,\n onPress: handleSelectMatching,\n children: \"Select Matching\"\n })]\n })]\n })\n })\n })]\n });\n}\nexport default SearchWithModal;\n//# sourceMappingURL=SearchWithModal.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); }\n/* eslint-disable import/prefer-default-export */\nimport { closestCorners, getFirstCollision, KeyboardCode } from '@dnd-kit/core';\nimport { getProjection } from \"./utilities.js\";\nvar DIRECTIONS = [KeyboardCode.Down, KeyboardCode.Right, KeyboardCode.Up, KeyboardCode.Left];\nvar HORIZONTAL = [KeyboardCode.Left, KeyboardCode.Right];\nexport function sortableTreeKeyboardCoordinates(context, indentationWidth) {\n return (event, _ref) => {\n var {\n currentCoordinates,\n context: {\n active,\n over,\n collisionRect,\n droppableRects,\n droppableContainers\n }\n } = _ref;\n if (DIRECTIONS.includes(event.code)) {\n if (!active || !collisionRect) {\n return;\n }\n event.preventDefault();\n var {\n current: {\n items,\n offset\n }\n } = context;\n var projection = (over === null || over === void 0 ? void 0 : over.id) != null ? getProjection(items, active.id, over.id, offset, indentationWidth) : null;\n if (HORIZONTAL.includes(event.code) && (over === null || over === void 0 ? void 0 : over.id) != null && projection != null) {\n var {\n depth,\n maxDepth,\n minDepth\n } = projection;\n switch (event.code) {\n case KeyboardCode.Left:\n if (depth > minDepth) {\n return _objectSpread(_objectSpread({}, currentCoordinates), {}, {\n x: currentCoordinates.x - indentationWidth\n });\n }\n break;\n case KeyboardCode.Right:\n if (depth < maxDepth) {\n return _objectSpread(_objectSpread({}, currentCoordinates), {}, {\n x: currentCoordinates.x + indentationWidth\n });\n }\n break;\n }\n return undefined;\n }\n var containers = [];\n droppableContainers.forEach(container => {\n if (container !== null && container !== void 0 && container.disabled || container.id === (over === null || over === void 0 ? void 0 : over.id)) {\n return;\n }\n var rect = droppableRects.get(container.id);\n if (!rect) {\n return;\n }\n switch (event.code) {\n case KeyboardCode.Down:\n if (collisionRect.top < rect.top) {\n containers.push(container);\n }\n break;\n case KeyboardCode.Up:\n if (collisionRect.top > rect.top) {\n containers.push(container);\n }\n break;\n }\n });\n var collisions = closestCorners({\n active,\n collisionRect,\n pointerCoordinates: null,\n droppableRects,\n droppableContainers: containers\n });\n var closestId = getFirstCollision(collisions, 'id');\n if (closestId === (over === null || over === void 0 ? void 0 : over.id) && collisions.length > 1) {\n closestId = collisions[1].id;\n }\n if (closestId != null && (over === null || over === void 0 ? void 0 : over.id) != null) {\n var activeRect = droppableRects.get(active.id);\n var newRect = droppableRects.get(closestId);\n var newDroppable = droppableContainers.get(closestId);\n if (activeRect && newRect && newDroppable) {\n var newIndex = items.findIndex(_ref2 => {\n var {\n id\n } = _ref2;\n return id === closestId;\n });\n var newItem = items[newIndex];\n var activeIndex = items.findIndex(_ref3 => {\n var {\n id\n } = _ref3;\n return id === active.id;\n });\n var activeItem = items[activeIndex];\n var closestProjection = getProjection(items, active.id, closestId, (newItem.depth - activeItem.depth) * indentationWidth, indentationWidth);\n if (newItem != null && activeItem != null && closestProjection != null) {\n var {\n depth: _depth\n } = closestProjection;\n var isBelow = newIndex > activeIndex;\n var modifier = isBelow ? 1 : -1;\n var newCoordinates = {\n x: newRect.left + _depth * indentationWidth,\n y: newRect.top + modifier\n };\n return newCoordinates;\n }\n }\n }\n }\n return undefined;\n };\n}\n//# sourceMappingURL=keyboardCoordinates.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 { PointerSensor } from '@dnd-kit/core';\n\n/**\n * An extended \"PointerSensor\" that prevent some\n * interactive html element(button, input, textarea, select, option...) from dragging\n */\nexport default class PointerSensorWithInteraction extends PointerSensor {}\n_defineProperty(PointerSensorWithInteraction, \"activators\", [{\n eventName: 'onPointerDown',\n handler: _ref => {\n var {\n nativeEvent: event\n } = _ref;\n if (!event.isPrimary || event.button !== 0 || isInteractiveElement(event.target)) {\n return false;\n }\n return true;\n }\n}]);\nvar INTERACTIVE_ELEMENTS = ['button', 'input', 'textarea', 'select', 'option'];\nfunction isInteractiveElement(element) {\n if ((element === null || element === void 0 ? void 0 : element.tagName) != null && INTERACTIVE_ELEMENTS.includes(element.tagName.toLowerCase())) {\n return true;\n }\n return false;\n}\n//# sourceMappingURL=PointerSensorWithInteraction.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DndContext, closestCenter, KeyboardSensor, useSensor, useSensors, MeasuringStrategy, DragOverlay, defaultDropAnimation } from '@dnd-kit/core';\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { getProjection } from \"./utilities.js\";\nimport { sortableTreeKeyboardCoordinates } from \"./keyboardCoordinates.js\";\nimport PointerSensorWithInteraction from \"./PointerSensorWithInteraction.js\";\nimport { TreeItem } from \"./TreeItem.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar MEASURING = {\n droppable: {\n strategy: MeasuringStrategy.Always\n }\n};\nvar CONSTRAINT = {\n activationConstraint: {\n distance: 5\n }\n};\n\n// Disabling pointer events allows us to use scroll wheel while dragging\nvar DRAG_OVERLAY_STYLE = {\n pointerEvents: 'none'\n};\nvar dropAnimationConfig = {\n keyframes(_ref) {\n var {\n transform\n } = _ref;\n return [{\n opacity: 1,\n transform: CSS.Transform.toString(transform.initial)\n }, {\n opacity: 0,\n transform: CSS.Transform.toString(transform.final)\n }];\n },\n easing: 'ease-out',\n sideEffects(_ref2) {\n var {\n active\n } = _ref2;\n active.node.animate([{\n opacity: 0\n }, {\n opacity: 1\n }], {\n duration: defaultDropAnimation.duration,\n easing: defaultDropAnimation.easing\n });\n }\n};\n\n/**\n * This adjusts the transform to move to the cursor if it gets shifted due to multi-select.\n * With multi-select, the selected items (except dragged) are removed on drag.\n * This can cause the overlay item to disconnect from the cursor in some cases.\n * E.g. select first 3 items, start dragging from 3rd item.\n * Without this modifier, the drag overlay will be shifted 60px up from the cursor after the items are removed.\n *\n * This assumes all items are the same height as the dragged item\n * @param args Modifier args from dnd-kit\n * @returns Transform so that the dragged item stays on the cursor\n */\nfunction adjustToCursor(args) {\n var _adjustToCursor$offse;\n if (adjustToCursor.offsetY == null && args.activeNodeRect && args.activatorEvent instanceof PointerEvent) {\n adjustToCursor.offsetY = Math.floor((args.activatorEvent.clientY - args.activeNodeRect.top) / args.activeNodeRect.height) * args.activeNodeRect.height;\n }\n if (!args.activeNodeRect) {\n adjustToCursor.offsetY = null;\n }\n return _objectSpread(_objectSpread({}, args.transform), {}, {\n y: args.transform.y + ((_adjustToCursor$offse = adjustToCursor.offsetY) !== null && _adjustToCursor$offse !== void 0 ? _adjustToCursor$offse : 0)\n });\n}\n\n// Used to track the offset for adjustToCursor\n// Once drag starts, set this. Once it ends, null this\n// Kind of hacky to store it as a property on the function,\n// but avoids a singleton state or needing hooks to maintain this.\n// The logic came from the dnd-kit example.\nadjustToCursor.offsetY = null;\n\n// From https://github.com/clauderic/dnd-kit/pull/334\nvar fixCursorSnapOffset = args => {\n // Bail out if keyboard activated\n if (!args.pointerCoordinates) {\n return closestCenter(args);\n }\n var {\n x,\n y\n } = args.pointerCoordinates;\n var {\n width,\n height\n } = args.collisionRect;\n var updated = _objectSpread(_objectSpread({}, args), {}, {\n // The collision rectangle is broken when using adjustToCursor. Reset\n // the collision rectangle based on pointer location and overlay size.\n collisionRect: {\n width,\n height,\n bottom: y + height / 2,\n left: x - width / 2,\n right: x + width / 2,\n top: y - height / 2\n }\n });\n return closestCenter(updated);\n};\nexport default function SortableTreeDndContext(_ref3) {\n var {\n items,\n indentationWidth = 30,\n onDragStart,\n onDragEnd,\n children,\n renderItem\n } = _ref3;\n var [activeId, setActiveId] = useState(null);\n var [offsetLeft, setOffsetLeft] = useState(0);\n var activeItem = activeId != null ? items.find(_ref4 => {\n var {\n id\n } = _ref4;\n return id === activeId;\n }) : null;\n var sensorContext = useRef({\n items,\n offset: offsetLeft\n });\n var keyboardOptions = useMemo(() => ({\n coordinateGetter: sortableTreeKeyboardCoordinates(sensorContext, indentationWidth),\n keyboardCodes: {\n // Default is space and enter for start/end,\n // but enter is used to select items from the search list\n start: ['Space'],\n cancel: ['Escape'],\n end: ['Space']\n }\n }), [indentationWidth]);\n var sensors = useSensors(useSensor(PointerSensorWithInteraction, CONSTRAINT), useSensor(KeyboardSensor, keyboardOptions));\n var sortedIds = useMemo(() => items.map(_ref5 => {\n var {\n id\n } = _ref5;\n return id;\n }), [items]);\n useEffect(() => {\n sensorContext.current = {\n items,\n offset: offsetLeft\n };\n }, [items, offsetLeft]);\n var handleDragStart = useCallback(event => {\n var {\n active: {\n id: newActiveId\n }\n } = event;\n setActiveId(newActiveId);\n onDragStart === null || onDragStart === void 0 || onDragStart(newActiveId, event);\n document.body.style.setProperty('cursor', 'grabbing');\n }, [onDragStart]);\n var handleDragMove = useCallback(_ref6 => {\n var {\n delta\n } = _ref6;\n setOffsetLeft(delta.x);\n }, []);\n var resetState = useCallback(() => {\n setActiveId(null);\n setOffsetLeft(0);\n document.body.style.setProperty('cursor', '');\n }, []);\n var handleDragEnd = useCallback(_ref7 => {\n var _active$rect$current$, _active$rect$current$2, _active$rect$current$3, _active$rect$current$4;\n var {\n active,\n over\n } = _ref7;\n var projected = active.id != null && (over === null || over === void 0 ? void 0 : over.id) != null ? getProjection(items, active.id, over.id, ((_active$rect$current$ = (_active$rect$current$2 = active.rect.current.translated) === null || _active$rect$current$2 === void 0 ? void 0 : _active$rect$current$2.left) !== null && _active$rect$current$ !== void 0 ? _active$rect$current$ : 0) - ((_active$rect$current$3 = (_active$rect$current$4 = active.rect.current.initial) === null || _active$rect$current$4 === void 0 ? void 0 : _active$rect$current$4.left) !== null && _active$rect$current$3 !== void 0 ? _active$rect$current$3 : 0), indentationWidth) : null;\n if (projected && over) {\n var {\n depth,\n parentId\n } = projected;\n var clonedItems = JSON.parse(JSON.stringify(items));\n var overIndex = clonedItems.findIndex(_ref8 => {\n var {\n id\n } = _ref8;\n return id === over.id;\n });\n var activeIndex = clonedItems.findIndex(_ref9 => {\n var {\n id\n } = _ref9;\n return id === active.id;\n });\n var activeTreeItem = clonedItems[activeIndex];\n clonedItems[activeIndex] = _objectSpread(_objectSpread({}, activeTreeItem), {}, {\n depth,\n parentId\n });\n onDragEnd === null || onDragEnd === void 0 || onDragEnd(activeTreeItem, _objectSpread(_objectSpread({}, clonedItems[overIndex]), {}, {\n parentId: projected.parentId\n }));\n }\n resetState();\n }, [items, indentationWidth, onDragEnd, resetState]);\n var handleDragCancel = useCallback(() => {\n resetState();\n }, [resetState]);\n return /*#__PURE__*/_jsx(DndContext, {\n sensors: sensors,\n collisionDetection: fixCursorSnapOffset,\n measuring: MEASURING,\n onDragStart: handleDragStart,\n onDragMove: handleDragMove,\n onDragEnd: handleDragEnd,\n onDragCancel: handleDragCancel,\n children: /*#__PURE__*/_jsxs(SortableContext, {\n items: sortedIds,\n strategy: verticalListSortingStrategy,\n children: [children, /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(DragOverlay, {\n dropAnimation: dropAnimationConfig,\n modifiers: [adjustToCursor],\n className: \"visibility-ordering-list\",\n style: DRAG_OVERLAY_STYLE,\n children: activeId != null && activeItem ? /*#__PURE__*/_jsx(TreeItem, {\n depth: activeItem.depth,\n clone: true,\n value: activeId,\n renderItem: renderItem,\n item: activeItem\n }) : null\n }), document.body)]\n })\n });\n}\n//# sourceMappingURL=SortableTreeDndContext.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, { memo, PureComponent, useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport { GridUtils } from '@deephaven/grid';\nimport { TextUtils, assertNotNull, DbNameValidator } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhEye, dhEyeSlash, dhSortAlphaDown, dhSortAlphaUp, dhArrowToTop, dhArrowToBottom, vsChevronUp, vsChevronDown, vsSymbolStructure, vsRefresh, vsCircleLargeFilled, vsAdd, vsBlank, vsCheck, vsKebabVertical } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport { ActionButton, Button, GLOBAL_SHORTCUTS, Icon, Item, Keyboard, MenuTrigger, Section, SpectrumMenu, Text } from '@deephaven/components';\nimport clamp from 'lodash.clamp';\nimport throttle from 'lodash.throttle';\nimport { useUndoRedo } from '@deephaven/react-hooks';\nimport Log from '@deephaven/log';\nimport \"./VisibilityOrderingBuilder.css\";\nimport ColumnHeaderGroup from \"../../ColumnHeaderGroup.js\";\nimport VisibilityOrderingItem from \"./VisibilityOrderingItem.js\";\nimport { flattenTree, getTreeItems } from \"./sortable-tree/utilities.js\";\nimport SortableTree from \"./sortable-tree/SortableTree.js\";\nimport { moveItemsFromDrop, moveToGroup } from \"./VisibilityOrderingBuilderUtils.js\";\nimport IrisGridUtils from \"../../IrisGridUtils.js\";\nimport SearchWithModal from \"./SearchWithModal.js\";\nimport SortableTreeDndContext from \"./sortable-tree/SortableTreeDndContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar log = Log.module('VisibilityOrderingBuilder');\nclass VisibilityOrderingBuilderInner extends PureComponent {\n static shouldRenderColumn(column) {\n // We don't want to render the proxy column in the visibility ordering list\n return column.isProxy !== true;\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"wrapperRef\", /*#__PURE__*/React.createRef());\n /**\n * Used to track the last focused item index to maintain focus on updates.\n * Cannot use name because it may change or be deleted when undoing or redoing.\n */\n _defineProperty(this, \"lastFocusedItemIndex\", null);\n _defineProperty(this, \"list\", void 0);\n _defineProperty(this, \"virtualizerRef\", /*#__PURE__*/React.createRef());\n /**\n * This is set by the search modal handlers since a column could be hidden\n * and not displayed in the list. We need to wait until the update to scroll to it.\n */\n _defineProperty(this, \"scrollAndFocusColumnOnUpdate\", null);\n _defineProperty(this, \"handleGroupColorChange\", throttle((group, color) => {\n var {\n columnHeaderGroups,\n onColumnHeaderGroupChanged\n } = this.props;\n var newGroups = [...columnHeaderGroups];\n var newGroup = new ColumnHeaderGroup(_objectSpread(_objectSpread({}, group), {}, {\n color\n }));\n newGroups.splice(newGroups.findIndex(_ref => {\n var {\n name\n } = _ref;\n return name === group.name;\n }), 1, newGroup);\n onColumnHeaderGroupChanged(newGroups);\n }, 250));\n _defineProperty(this, \"getMemoizedFirstMovableIndex\", memoize((model, columns, movedColumns) => {\n for (var i = 0; i < columns.length; i += 1) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (model.isColumnMovable(modelIndex)) {\n return i;\n }\n }\n return null;\n }, {\n max: 10\n }));\n _defineProperty(this, \"getMemoizedLastMovableIndex\", memoize((model, columns, movedColumns) => {\n for (var i = columns.length - 1; i >= 0; i -= 1) {\n var modelIndex = GridUtils.getModelIndex(i, movedColumns);\n if (model.isColumnMovable(modelIndex)) {\n return i;\n }\n }\n return null;\n }, {\n max: 10\n }));\n _defineProperty(this, \"memoizedGetTreeItems\", memoize((columns, movedColumns, columnHeaderGroups, hiddenColumns, selectedColumns, showHiddenColumns) => getTreeItems(columns, movedColumns, columnHeaderGroups, hiddenColumns, [...selectedColumns.values()], showHiddenColumns), {\n max: 2\n }));\n _defineProperty(this, \"memoizedGetFlattenedTree\", memoize(treeItems => flattenTree(treeItems), {\n max: 2\n }));\n _defineProperty(this, \"makeVisibilityOrderingList\", memoize((columns, treeItems, showHiddenColumns, isDraggable) => {\n var {\n movedColumns\n } = this.props;\n var elements = [];\n var firstMovableIndex = this.getFirstMovableIndex();\n var lastMovableIndex = this.getLastMovableIndex();\n var firstMovableTreeIndex = treeItems.findIndex(_ref2 => {\n var {\n data\n } = _ref2;\n return Array.isArray(data.visibleIndex) ? data.visibleIndex[0] === firstMovableIndex : data.visibleIndex === firstMovableIndex;\n });\n\n // Searches from the end so it's faster than findIndex\n var lastMovableTreeIndex = treeItems.findLastIndex(_ref3 => {\n var {\n data\n } = _ref3;\n return Array.isArray(data.visibleIndex) ? data.visibleIndex[1] === lastMovableIndex : data.visibleIndex === lastMovableIndex;\n });\n var movableItems = treeItems.slice(firstMovableTreeIndex, lastMovableTreeIndex + 1);\n if (!showHiddenColumns) {\n movableItems = movableItems.filter(item => item.data.isVisible);\n }\n\n // No movable items. Render all as immovable\n if (firstMovableIndex == null || lastMovableIndex === null) {\n for (var visibleIndex = 0; visibleIndex < columns.length; visibleIndex += 1) {\n var modelIndex = GridUtils.getModelIndex(visibleIndex, movedColumns);\n var column = columns[modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(column)) {\n elements.push(this.renderImmovableItem(column.name));\n }\n }\n return elements;\n }\n\n // Currently immovable groups are not supported\n for (var _visibleIndex = 0; _visibleIndex < firstMovableIndex; _visibleIndex += 1) {\n var _modelIndex = GridUtils.getModelIndex(_visibleIndex, movedColumns);\n var _column = columns[_modelIndex];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(_column)) {\n elements.push(this.renderImmovableItem(_column.name));\n }\n }\n if (firstMovableIndex !== null && firstMovableIndex > 0) {\n elements.push(/*#__PURE__*/_jsx(\"hr\", {}, \"top-horizontal-divider\"));\n }\n elements.push(/*#__PURE__*/_jsx(SortableTree, {\n items: movableItems,\n renderItem: this.renderItem,\n isDraggable: isDraggable,\n virtualizerRef: this.virtualizerRef\n }, \"movable-items\"));\n if (lastMovableIndex != null && lastMovableIndex < columns.length - 1) {\n elements.push(/*#__PURE__*/_jsx(\"hr\", {}, \"bottom-horizontal-divider\"));\n }\n for (var _visibleIndex2 = lastMovableIndex + 1; _visibleIndex2 < columns.length; _visibleIndex2 += 1) {\n var _modelIndex2 = GridUtils.getModelIndex(_visibleIndex2, movedColumns);\n var _column2 = columns[_modelIndex2];\n if (VisibilityOrderingBuilderInner.shouldRenderColumn(_column2)) {\n elements.push(this.renderImmovableItem(_column2.name));\n }\n }\n return elements;\n }, {\n max: 10\n }));\n _defineProperty(this, \"renderImmovableItem\", memoize(columnName => /*#__PURE__*/_jsx(\"div\", {\n className: \"visibility-ordering-list-item immovable\",\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"column-item\",\n children: /*#__PURE__*/_jsx(\"span\", {\n className: \"column-name\",\n children: columnName\n })\n })\n }, columnName), {\n max: 100\n }));\n this.handleItemClick = this.handleItemClick.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupDelete = this.handleGroupDelete.bind(this);\n this.handleGroupNameChange = this.handleGroupNameChange.bind(this);\n this.handleGroupCreate = this.handleGroupCreate.bind(this);\n this.validateGroupName = this.validateGroupName.bind(this);\n this.addColumnToSelected = this.addColumnToSelected.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleOverflowAction = this.handleOverflowAction.bind(this);\n this.handleKeyboardShortcut = this.handleKeyboardShortcut.bind(this);\n this.handleSearchModalOpenChange = this.handleSearchModalOpenChange.bind(this);\n this.handleSearchSelect = this.handleSearchSelect.bind(this);\n this.handleSearchItemClicked = this.handleSearchItemClicked.bind(this);\n this.renderItem = this.renderItem.bind(this);\n this.state = {\n selectedColumns: new Set(),\n lastSelectedColumn: '',\n showHiddenColumns: true,\n isSearchModalOpen: false,\n movedColumns: props.movedColumns,\n columnHeaderGroups: props.columnHeaderGroups\n };\n this.list = null;\n }\n componentDidMount() {\n assertNotNull(this.wrapperRef.current);\n // This fixes focus loss when editing a group because we use the name as the key for rendering.\n // When the name is changed or group deleted, we lose focus entirely which is indicated by\n // the focusout relatedTarget being null.\n this.wrapperRef.current.addEventListener('focusin', e => {\n if (e.target instanceof HTMLElement) {\n var treeItem = e.target.closest('.tree-item');\n if (treeItem != null) {\n this.lastFocusedItemIndex = typeof treeItem.dataset.index === 'string' ? parseInt(treeItem.dataset.index, 10) : null;\n }\n }\n });\n }\n componentDidUpdate(prevProps) {\n // If we change because of undo/redo or reorders in the grid, update internal state\n var {\n movedColumns,\n columnHeaderGroups\n } = this.props;\n if (prevProps.movedColumns !== movedColumns) {\n this.setState({\n movedColumns\n });\n }\n if (prevProps.columnHeaderGroups !== columnHeaderGroups) {\n this.setState({\n columnHeaderGroups\n });\n }\n\n // Scroll to the item when it's available\n if (this.scrollAndFocusColumnOnUpdate != null) {\n var _this$virtualizerRef$;\n var [itemIndex, itemName] = this.scrollAndFocusColumnOnUpdate;\n (_this$virtualizerRef$ = this.virtualizerRef.current) === null || _this$virtualizerRef$ === void 0 || _this$virtualizerRef$.scrollToIndex(itemIndex);\n\n // Need to wait for the paint after the scroll so the item exists in the DOM\n window.requestAnimationFrame(() => {\n var _this$list;\n if (this.scrollAndFocusColumnOnUpdate == null) {\n return;\n }\n var itemElement = (_this$list = this.list) === null || _this$list === void 0 ? void 0 : _this$list.querySelector(\".item-wrapper[data-id=\\\"\".concat(itemName, \"\\\"] .tree-item\"));\n if (itemElement instanceof HTMLElement) {\n itemElement.focus();\n } else {\n log.warn(\"Could not focus item \".concat(itemName, \" after scroll\"));\n }\n this.scrollAndFocusColumnOnUpdate = null;\n });\n }\n\n // document.activeElement is either body or html when nothing is focused.\n // If there is no focused element, then we probably deleted or renamed a group\n // resulting in focus loss. Try to re-establish focus.\n // Cannot rely on focusout event for this because it doesn't fire when the focused element is deleted\n // (except in Chrome which is against the spec here).\n if ((document.activeElement === document.body || document.activeElement === document.documentElement) && this.lastFocusedItemIndex !== null) {\n var _this$list2;\n var itemToFocus = (_this$list2 = this.list) === null || _this$list2 === void 0 ? void 0 : _this$list2.querySelector(\".item-wrapper[data-index=\\\"\".concat(this.lastFocusedItemIndex, \"\\\"] .tree-item\"));\n if (itemToFocus != null && itemToFocus instanceof HTMLElement) {\n itemToFocus.focus();\n } else {\n log.warn('Could not maintain focus');\n this.lastFocusedItemIndex = null;\n }\n }\n }\n componentWillUnmount() {\n var {\n columnHeaderGroups,\n onColumnHeaderGroupChanged\n } = this.props;\n // Clean up unnamed groups on unmount\n var filteredGroups = columnHeaderGroups.filter(group => !group.isNew);\n if (filteredGroups.length !== columnHeaderGroups.length) {\n onColumnHeaderGroupChanged(filteredGroups);\n }\n }\n resetVisibilityOrdering() {\n var {\n model,\n onReset,\n onMovedColumnsChanged,\n onColumnHeaderGroupChanged\n } = this.props;\n this.setState({\n selectedColumns: new Set(),\n lastSelectedColumn: ''\n });\n onReset();\n onColumnHeaderGroupChanged(model.initialColumnHeaderGroups);\n onMovedColumnsChanged(model.initialMovedColumns);\n }\n resetSelection() {\n this.setState({\n selectedColumns: new Set(),\n lastSelectedColumn: ''\n });\n }\n\n /**\n * Moves the currently selected columns in the direction specified.\n * Does not commit any changes to any state, just gets the required modifications.\n *\n * Items that are part of a selected group should not be moved separate from the group.\n *\n * Items moved to top or bottom should be removed from any groups they are within,\n * unless part of a group that is also selected. The highest level selected group will\n * be moved to the root level of the tree.\n *\n * Items moved up or down should move into and out of groups when applicable.\n * They should never move more than 1 depth level at a time.\n *\n * Multiple selected items should move to the top or bottom in their existing order,\n * but become one block of continuous columns.\n *\n * Multiple selected items moving up or down should move independently,\n * unless they are at the same depth and contiguous. In that case, they should\n * move in and out of groups together. I.e. if the 2 items above a group are selected,\n * and the move down button is pressed, then both items should be moved into the group.\n *\n * @param option The movement option\n * @returns A new copy of the movedColumns including moves required to perform the operation.\n *\n */\n moveSelectedColumns(option) {\n var {\n columnHeaderGroups\n } = this.props;\n var {\n selectedColumns\n } = this.state;\n var treeItems = this.getFlattenedTree();\n var firstMovableIndex = this.getFirstMovableIndex();\n var lastMovableIndex = this.getLastMovableIndex();\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n var selectedItems = this.getSelectedParentItems();\n var isMovingUpward = option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP || option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP;\n\n // for moving up and to the top, move column(s) in visibility index order\n // for moving down and to the bottom, move column(s) in reverse visibility index order\n if (!isMovingUpward) {\n selectedItems.reverse();\n }\n var newMoves = [];\n var updatedGroups = columnHeaderGroups;\n var _loop = function _loop() {\n var {\n id,\n parentId,\n depth,\n data: {\n visibleIndex\n }\n } = selectedItems[i];\n switch (option) {\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP:\n {\n newMoves = GridUtils.moveItemOrRange(visibleIndex, firstMovableIndex, newMoves, true);\n var size = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;\n firstMovableIndex += size;\n // Moving items to top should move out of any groups\n updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM:\n {\n newMoves = GridUtils.moveItemOrRange(visibleIndex, lastMovableIndex, newMoves, true);\n var _size = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;\n lastMovableIndex -= _size;\n // Moving items to bottom should move out of any groups\n updatedGroups = moveToGroup(selectedItems[i], null, updatedGroups);\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP:\n {\n var itemIndex = treeItems.findIndex(item => item.id === id);\n // Array.findLast would be better here, but it's too new for our browser support\n var prevItemIndex = treeItems.map((item, idx) => idx < itemIndex && !selectedColumns.has(item.id)).lastIndexOf(true);\n var prevItem = treeItems[prevItemIndex];\n if (prevItem != null && prevItem.parentId !== parentId) {\n // Moving into a different parent\n if (Math.abs(prevItem.depth - depth) > 1) {\n // Prev item is more than 1 level away\n // Find prev parent at same depth as current\n // This way we only ever move 1 depth level per event\n var newParentItemIndex = treeItems.map((item, idx) => idx < prevItemIndex && item.depth === depth).lastIndexOf(true);\n var newParentItem = treeItems[newParentItemIndex];\n updatedGroups = moveToGroup(selectedItems[i], newParentItem.id, updatedGroups);\n } else {\n updatedGroups = moveToGroup(selectedItems[i], prevItem.parentId, updatedGroups);\n }\n } else {\n var toIndex = clamp(Array.isArray(visibleIndex) ? visibleIndex[0] - 1 : visibleIndex - 1, firstMovableIndex, lastMovableIndex);\n newMoves = GridUtils.moveItemOrRange(visibleIndex, toIndex, newMoves, false);\n var _size2 = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;\n firstMovableIndex += _size2;\n }\n break;\n }\n case VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN:\n {\n var _itemIndex = treeItems.findIndex(item => item.id === id);\n var nextItem = treeItems.find((item, idx) => idx > _itemIndex && !selectedColumns.has(item.id));\n if ((nextItem === null || nextItem === void 0 ? void 0 : nextItem.parentId) !== parentId) {\n var _parentItem$parentId;\n // Moving out of our group\n // Move to the parent of our parent\n // That way we only ever move 1 level at a time\n var parentItem = treeItems.find(item => item.id === parentId);\n updatedGroups = moveToGroup(selectedItems[i], (_parentItem$parentId = parentItem === null || parentItem === void 0 ? void 0 : parentItem.parentId) !== null && _parentItem$parentId !== void 0 ? _parentItem$parentId : null, updatedGroups);\n break;\n } else if ((nextItem === null || nextItem === void 0 ? void 0 : nextItem.children.length) > 0) {\n // Moving into a group as 1st item\n updatedGroups = moveToGroup(selectedItems[i], nextItem.id, updatedGroups);\n break;\n }\n var _toIndex = clamp(Array.isArray(visibleIndex) ? visibleIndex[0] + 1 : visibleIndex + 1, firstMovableIndex, lastMovableIndex);\n newMoves = GridUtils.moveItemOrRange(visibleIndex, _toIndex, newMoves, false);\n var _size3 = Array.isArray(visibleIndex) ? visibleIndex[1] - visibleIndex[0] + 1 : 1;\n lastMovableIndex -= _size3;\n break;\n }\n }\n };\n for (var i = 0; i < selectedItems.length; i += 1) {\n _loop();\n }\n return {\n newMoves,\n groups: updatedGroups\n };\n }\n\n /**\n * Moves the selected columns according to the option.\n * Commits changes to state and scrolls the list if moving to top or bottom.\n *\n * @param option The move operation\n */\n handleMoveColumns(option) {\n var {\n onMovedColumnsChanged,\n movedColumns,\n onColumnHeaderGroupChanged\n } = this.props;\n var {\n newMoves,\n groups\n } = this.moveSelectedColumns(option);\n var scrollListAfterMove;\n if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP) {\n scrollListAfterMove = () => {\n var _this$virtualizerRef$2;\n (_this$virtualizerRef$2 = this.virtualizerRef.current) === null || _this$virtualizerRef$2 === void 0 || _this$virtualizerRef$2.scrollToOffset(0);\n };\n }\n if (option === VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM) {\n scrollListAfterMove = () => {\n var _this$virtualizerRef$3;\n (_this$virtualizerRef$3 = this.virtualizerRef.current) === null || _this$virtualizerRef$3 === void 0 || _this$virtualizerRef$3.scrollBy(this.virtualizerRef.current.getTotalSize());\n };\n }\n onColumnHeaderGroupChanged(groups);\n if (newMoves.length > 0) {\n onMovedColumnsChanged(movedColumns.concat(newMoves), scrollListAfterMove);\n }\n }\n\n /**\n * Get the move operations required to recursively sort the grid\n * Column header groups are sorted using their name\n * Children of column header groups are then sorted within each group\n *\n * @param items The tree items to sort\n * @param option Direction of the sort\n * @param movedColumns The existing moved columns for the sort\n * Grids may use an initial move list from the model (e.g. column header groups)\n * Also used to recursively sort header groups\n * @returns The moves required to sort the grid. Includes the starting movedColumns in the array\n */\n getSortMoves(itemsParam, option, movedColumns) {\n var items = [...itemsParam];\n // Sort all the movable columns\n var isAscending = option === VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC;\n items.sort((a, b) => {\n var aName = a.id.toUpperCase();\n var bName = b.id.toUpperCase();\n return TextUtils.sort(aName, bName, isAscending);\n });\n var newMoves = [...movedColumns]; // Start with the base state moves by the model\n var moveToIndex = Math.min(...items.flatMap(item => {\n var {\n modelIndex\n } = item.data;\n return Array.isArray(modelIndex) ? GridUtils.getVisibleIndexes(modelIndex, newMoves) : GridUtils.getVisibleIndex(modelIndex, newMoves);\n }));\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n modelIndex\n } = item.data;\n var visibleIndex = Array.isArray(modelIndex) ? GridUtils.getVisibleIndexes(modelIndex, newMoves) : GridUtils.getVisibleIndex(modelIndex, newMoves);\n newMoves = Array.isArray(visibleIndex) ? GridUtils.moveRange([Math.min(...visibleIndex), Math.max(...visibleIndex)], moveToIndex, newMoves, true) : GridUtils.moveItem(visibleIndex, moveToIndex, newMoves);\n if (Array.isArray(visibleIndex)) {\n // Recursively sort groups\n newMoves = this.getSortMoves(item.children, option, newMoves);\n }\n moveToIndex += Array.isArray(modelIndex) ? modelIndex.length : 1;\n }\n return newMoves;\n }\n handleSortColumns(option) {\n var _this$getFirstMovable, _this$getLastMovableI;\n var {\n model,\n onMovedColumnsChanged\n } = this.props;\n var tree = this.getTreeItems();\n var firstIndex = (_this$getFirstMovable = this.getFirstMovableIndex()) !== null && _this$getFirstMovable !== void 0 ? _this$getFirstMovable : 0;\n var lastIndex = (_this$getLastMovableI = this.getLastMovableIndex()) !== null && _this$getLastMovableI !== void 0 ? _this$getLastMovableI : tree.length - 1;\n var moveableTree = tree.slice(firstIndex, lastIndex + 1);\n\n // add frozen moves\n var initialAndFrozenMovedColumns = [...model.initialMovedColumns];\n for (var i = 0; i < model.frozenColumns.length; i += 1) {\n var _model$getColumnIndex;\n var frozenColumn = model.frozenColumns[i];\n var newFrozenIndex = GridUtils.getVisibleIndex((_model$getColumnIndex = model.getColumnIndexByName(frozenColumn)) !== null && _model$getColumnIndex !== void 0 ? _model$getColumnIndex : 0, initialAndFrozenMovedColumns);\n if (newFrozenIndex !== i) {\n initialAndFrozenMovedColumns.push({\n from: newFrozenIndex,\n to: i\n });\n }\n }\n var newMoves = this.getSortMoves(moveableTree, option, initialAndFrozenMovedColumns);\n onMovedColumnsChanged(newMoves);\n }\n\n /**\n * Handles clicking on an item in the visibility ordering list.\n * Adds and removes to selection as necessary based on modifier and shift keys.\n * Returns the columns to be added to the selection, if any.\n *\n * @param name The name of the column clicked\n * @param event The click event\n * @param showHiddenColumns If hidden columns should be included in the selection\n * @returns The columns to be added to the selection, if any`\n */\n handleItemClick(name, event) {\n var _event$currentTarget;\n var showHiddenColumns = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n event.stopPropagation();\n\n // Click was triggered by an interactive element. Ignore select\n if (event.target instanceof HTMLElement && (event.target.tagName === 'BUTTON' || event.target.tagName === 'INPUT')) {\n return [];\n }\n (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || _event$currentTarget.focus();\n var {\n selectedColumns,\n lastSelectedColumn\n } = this.state;\n var isModifierKeyDown = GridUtils.isModifierKeyDown(event);\n var isShiftKeyDown = event.shiftKey;\n var isSelected = selectedColumns.has(name);\n var columnsToBeAdded = [name];\n if (isSelected && isModifierKeyDown) {\n this.removeColumnFromSelected(name);\n return [];\n }\n var movableItems = this.getFlattenedTree(showHiddenColumns);\n if (isSelected && !isShiftKeyDown && lastSelectedColumn === name) {\n var selectedItem = movableItems.find(_ref4 => {\n var {\n id\n } = _ref4;\n return id === name;\n });\n assertNotNull(selectedItem);\n var childCount = flattenTree(selectedItem.children).length;\n // If clicking on an item and it's the only thing selected, deselect it\n if (childCount + 1 === selectedColumns.size) {\n this.resetSelection();\n return [];\n }\n }\n if (isShiftKeyDown) {\n var selectedIndex = movableItems.findIndex(item => item.id === name);\n var lastSelectedIndex = movableItems.findIndex(item => item.id === lastSelectedColumn);\n columnsToBeAdded.push(...movableItems.slice(Math.min(lastSelectedIndex, selectedIndex), Math.max(lastSelectedIndex, selectedIndex) + 1).map(item => item.id));\n }\n this.addColumnToSelected(columnsToBeAdded, isModifierKeyDown || isShiftKeyDown);\n this.setState({\n lastSelectedColumn: name\n });\n return columnsToBeAdded;\n }\n handleSearchItemClicked(item, event) {\n var columnsToAdd = this.handleItemClick(item.id, event, true);\n var {\n showHiddenColumns\n } = this.state;\n var {\n onColumnVisibilityChanged\n } = this.props;\n if (columnsToAdd.length === 0) {\n return;\n }\n var modelIndexesToShow = this.getSelectedItemModelIndexes(new Set(columnsToAdd));\n if (!showHiddenColumns) {\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n if (event.shiftKey || GridUtils.isModifierKeyDown(event)) {\n return;\n }\n this.scrollAndFocusColumnOnUpdate = [item.index, item.id];\n }\n handleSearchSelect(items) {\n if (items.length === 0) {\n return;\n }\n var {\n showHiddenColumns\n } = this.state;\n var {\n onColumnVisibilityChanged\n } = this.props;\n if (!showHiddenColumns) {\n var modelIndexesToShow = [...new Set(items.map(item => item.data.modelIndex).flat())];\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n this.scrollAndFocusColumnOnUpdate = [items[0].index, items[0].id];\n this.addColumnToSelected(items.map(item => item.id), false);\n }\n\n /**\n * Adds columns or groups to the selected column set\n * Groups being added will add all of their children to the selection as well\n *\n * @param columnsToBeAdded Array of column or group names to add\n * @param addToExisting If these should be added to the existing selection or overwrite it\n */\n addColumnToSelected(columnsToBeAdded, addToExisting) {\n var {\n selectedColumns\n } = this.state;\n var newSelectedColumns = new Set(addToExisting ? [...selectedColumns.values()].concat(columnsToBeAdded) : columnsToBeAdded);\n var flattenedItems = this.getFlattenedTree();\n\n // Add all children of selected groups to the selected columns\n // The treeItems array will always be parent -> child in the order\n // We don't need to recursively iterate because of this\n // The parent will always be added before any children for nested selections\n flattenedItems.forEach(_ref5 => {\n var {\n id,\n children\n } = _ref5;\n if (newSelectedColumns.has(id)) {\n children.forEach(child => newSelectedColumns.add(child.id));\n }\n });\n this.setState({\n selectedColumns: newSelectedColumns\n });\n }\n\n /**\n * Removes a column or group from selected columns set.\n *\n * Removing a group will deselect all of its children.\n *\n * Removing a child will deselect all parent groups.\n * Other children in those parents will stay selected, just not the group item.\n *\n * @param name Name of the column to remove\n */\n removeColumnFromSelected(name) {\n var {\n selectedColumns\n } = this.state;\n var flattenedItems = this.getFlattenedTree();\n var item = flattenedItems.find(_ref6 => {\n var {\n id\n } = _ref6;\n return id === name;\n });\n assertNotNull(item);\n var parentItem = flattenedItems.find(_ref7 => {\n var {\n id\n } = _ref7;\n return id === item.parentId;\n });\n\n // Remove all children of deselected groups\n flattenTree(item === null || item === void 0 ? void 0 : item.children).forEach(child => selectedColumns.delete(child.id));\n\n // Remove all parents of the removed group since it is no longer fully selected\n var _loop2 = function _loop2() {\n selectedColumns.delete(parentItem.id);\n var newParentId = parentItem.parentId;\n parentItem = flattenedItems.find(_ref8 => {\n var {\n id\n } = _ref8;\n return id === newParentId;\n });\n };\n while (parentItem != null) {\n _loop2();\n }\n selectedColumns.delete(name);\n this.setState({\n selectedColumns: new Set(selectedColumns)\n });\n }\n handleDragStart(id, event) {\n var {\n selectedColumns\n } = this.state;\n if (selectedColumns.has(id)) {\n return;\n }\n var dragEvent = event.activatorEvent;\n var isAddingToSelection = GridUtils.isModifierKeyDown(dragEvent) || dragEvent.shiftKey;\n this.handleItemClick(id, event.activatorEvent, true);\n // Always add the dragged item back to selected in case the user ctrl+dragged on an already\n // selected item. The handleItemClick would deselect it, but we want to keep it selected.\n this.addColumnToSelected([id], isAddingToSelection);\n }\n handleDragEnd(from, to) {\n var {\n model,\n movedColumns,\n onMovedColumnsChanged,\n columnHeaderGroups,\n onColumnHeaderGroupChanged\n } = this.props;\n var selectedParentItems = this.getSelectedParentItems();\n var firstMovableIndex = this.getFirstMovableIndex();\n var lastMovableIndex = this.getLastMovableIndex();\n assertNotNull(firstMovableIndex);\n assertNotNull(lastMovableIndex);\n var {\n groups: groupsAfterDrop,\n movedColumns: newMoves\n } = moveItemsFromDrop(from, to, movedColumns, columnHeaderGroups, selectedParentItems, firstMovableIndex, lastMovableIndex);\n\n // Need to parse so the internal state is correct to prevent weird drop animations\n // when adding/removing from groups. But don't parse if nothing changed to prevent\n // unnecessary undo/redo states.\n var newGroups = groupsAfterDrop !== columnHeaderGroups ? IrisGridUtils.parseColumnHeaderGroups(model, groupsAfterDrop).groups : columnHeaderGroups;\n onColumnHeaderGroupChanged(newGroups);\n onMovedColumnsChanged(newMoves);\n // Without tracking the state here, React 18 is rendering the child separately from\n // the render which changes the prop. As a result, the drop animations go to the\n // original location because of that render with stale items. I could not find any\n // other way to fix this (removing memoization, removing keys, etc.)\n this.setState({\n movedColumns: newMoves,\n columnHeaderGroups: newGroups\n });\n // Focus the dragged item after the move. Should not scroll since it's already in view\n this.scrollAndFocusColumnOnUpdate = [to.index, from.id];\n }\n handleGroupNameChange(group, newName) {\n var _this$list3;\n var {\n columnHeaderGroups,\n onColumnHeaderGroupChanged,\n endUndoGroup\n } = this.props;\n var newGroups = [...columnHeaderGroups];\n var oldName = group.name;\n var groupIndex = newGroups.findIndex(_ref9 => {\n var {\n name\n } = _ref9;\n return name === oldName;\n });\n var oldGroup = newGroups[groupIndex];\n assertNotNull(oldGroup); // Also means groupIndex >= 0\n\n var newGroup = new ColumnHeaderGroup(oldGroup);\n newGroup.name = newName;\n newGroups.splice(groupIndex, 1, newGroup);\n var parentIndex = newGroups.findIndex(_ref0 => {\n var {\n name\n } = _ref0;\n return name === newGroup.parent;\n });\n if (parentIndex >= 0) {\n var newParent = new ColumnHeaderGroup(newGroups[parentIndex]);\n newParent.removeChildren([oldName]);\n newParent.addChildren([newName]);\n newGroups.splice(parentIndex, 1, newParent);\n }\n var oldElement = (_this$list3 = this.list) === null || _this$list3 === void 0 ? void 0 : _this$list3.querySelector(\".item-wrapper[data-id=\\\"\".concat(oldName, \"\\\"]\"));\n if (oldElement != null) {\n // The group will be a new item, so focus it after the update\n // otherwise we may lose focus entirely\n var indexAttr = oldElement.getAttribute('data-index');\n this.scrollAndFocusColumnOnUpdate = indexAttr != null ? [parseInt(indexAttr, 10), newName] : null;\n }\n onColumnHeaderGroupChanged(newGroups);\n endUndoGroup();\n }\n handleGroupDelete(group) {\n var {\n columnHeaderGroups,\n endUndoGroup,\n onColumnHeaderGroupChanged\n } = this.props;\n var newGroups = columnHeaderGroups.filter(g => g.name !== group.name);\n var parentIndex = newGroups.findIndex(g => g.name === group.parent);\n if (parentIndex >= 0) {\n var newParent = new ColumnHeaderGroup(newGroups[parentIndex]);\n newParent.addChildren(group.children);\n newParent.removeChildren([group.name]);\n newGroups.splice(parentIndex, 1, newParent);\n }\n onColumnHeaderGroupChanged(newGroups);\n // Could be started from editing a new group which is deleted without saving\n endUndoGroup();\n }\n handleGroupCreate() {\n var {\n movedColumns,\n onMovedColumnsChanged,\n onColumnHeaderGroupChanged,\n startUndoGroup\n } = this.props;\n var {\n newMoves,\n groups\n } = this.moveSelectedColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP);\n var newGroups = groups.filter(group => !group.isNew);\n var selectedItems = this.getSelectedParentItems();\n var childIndexes = selectedItems.map(item => item.data.modelIndex).flat().filter(index => index >= 0);\n\n // We don't care about this name really as long as it's unique\n // The user must change it and we display a placeholder instead\n var name = \"\".concat(ColumnHeaderGroup.NEW_GROUP_PREFIX, \"-\").concat(Date.now());\n var newGroup = new ColumnHeaderGroup({\n name,\n children: selectedItems.map(_ref1 => {\n var {\n id\n } = _ref1;\n return id;\n }),\n depth: 0,\n childIndexes: [...new Set(childIndexes)] // Remove any duplicates\n });\n startUndoGroup();\n onMovedColumnsChanged(movedColumns.concat(newMoves), () => {\n var _this$virtualizerRef$4;\n (_this$virtualizerRef$4 = this.virtualizerRef.current) === null || _this$virtualizerRef$4 === void 0 || (_this$virtualizerRef$4 = _this$virtualizerRef$4.scrollElement) === null || _this$virtualizerRef$4 === void 0 || _this$virtualizerRef$4.scrollTo({\n top: 0\n });\n });\n onColumnHeaderGroupChanged(newGroups.concat([newGroup]));\n this.resetSelection();\n }\n\n /**\n * Validates if a header group name is valid and not in use by any header groups or columns\n * @param groupName The name to validate\n * @returns Error message if invalid\n */\n validateGroupName(groupName) {\n var {\n model,\n columnHeaderGroups\n } = this.props;\n var {\n columns\n } = model;\n if (!DbNameValidator.isValidColumnName(groupName)) {\n return 'Invalid name';\n }\n if (columns.some(_ref10 => {\n var {\n name\n } = _ref10;\n return name === groupName;\n }) || columnHeaderGroups.some(_ref11 => {\n var {\n name\n } = _ref11;\n return name === groupName;\n })) {\n return 'Duplicate name';\n }\n return '';\n }\n renderItem(_ref12) {\n var {\n value,\n clone,\n item,\n ref,\n handleProps\n } = _ref12;\n var {\n onColumnVisibilityChanged\n } = this.props;\n var {\n selectedColumns,\n showHiddenColumns\n } = this.state;\n var displayString = value;\n\n // The cloned drag overlay we want to show the items being dragged\n if (clone) {\n var selectedItemNames = this.getSelectedParentItems().map(_ref13 => {\n var {\n id\n } = _ref13;\n return id;\n });\n displayString = selectedItemNames.join(', ');\n }\n return /*#__PURE__*/_jsx(VisibilityOrderingItem, {\n ref: ref,\n value: displayString,\n clone: clone,\n item: item,\n childCount: selectedColumns.size,\n onVisibilityChange: onColumnVisibilityChanged,\n visibilityClickAndDrag: showHiddenColumns,\n onClick: this.handleItemClick,\n onGroupDelete: this.handleGroupDelete,\n onGroupColorChange: this.handleGroupColorChange,\n onGroupNameChange: this.handleGroupNameChange,\n validateGroupName: this.validateGroupName,\n handleProps: handleProps\n }, item.id);\n }\n /**\n * Gets the first movable visible index\n */\n getFirstMovableIndex() {\n var {\n model,\n movedColumns\n } = this.props;\n return this.getMemoizedFirstMovableIndex(model, model.columns, movedColumns);\n }\n /**\n * Gets the last movable visible index\n */\n getLastMovableIndex() {\n var {\n model,\n movedColumns\n } = this.props;\n return this.getMemoizedLastMovableIndex(model, model.columns, movedColumns);\n }\n /**\n * Gets the tree items in order. Memoized for efficiency\n * Use this.getFlattenedTree() if a flat list is needed\n * @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.\n * @returns The tree items in order\n */\n getTreeItems(showHiddenColumns) {\n var {\n model,\n hiddenColumns\n } = this.props;\n var {\n movedColumns,\n columnHeaderGroups,\n selectedColumns,\n showHiddenColumns: showHiddenColumnsState\n } = this.state;\n return this.memoizedGetTreeItems(model.columns, movedColumns, columnHeaderGroups, hiddenColumns, selectedColumns, showHiddenColumns !== null && showHiddenColumns !== void 0 ? showHiddenColumns : showHiddenColumnsState);\n }\n /**\n * Gets the flattened tree items in order. Memoized for efficiency\n * @param showHiddenColumns Whether to show hidden columns in the tree. Defaults to the current state value.\n * @returns The flattened tree items in order\n */\n getFlattenedTree(showHiddenColumns) {\n return this.memoizedGetFlattenedTree(this.getTreeItems(showHiddenColumns));\n }\n getSelectedItemModelIndexes(columnNames) {\n var {\n model\n } = this.props;\n return [...columnNames.values()].map(name => model.getColumnIndexByName(name)).filter(i => i != null).flat();\n }\n\n /**\n * Gets the selected items that are movable.\n * This is any item whose parent is not also selected.\n *\n * @returns The array of items whose parents are not selected\n */\n getSelectedParentItems() {\n var {\n selectedColumns\n } = this.state;\n var treeItems = this.getFlattenedTree();\n return treeItems.filter(_ref14 => {\n var {\n id,\n parentId\n } = _ref14;\n return (\n // All items whose parents are not selected\n selectedColumns.has(id) && !selectedColumns.has(parentId !== null && parentId !== void 0 ? parentId : '')\n );\n });\n }\n handleOverflowAction(key) {\n var {\n undo,\n redo\n } = this.props;\n switch (key) {\n case 'undo':\n undo();\n break;\n case 'redo':\n redo();\n break;\n case 'showHidden':\n this.setState(prev => ({\n showHiddenColumns: !prev.showHiddenColumns,\n selectedColumns: new Set()\n }));\n break;\n }\n }\n handleKeyboardShortcut(event) {\n var {\n canUndo,\n canRedo,\n undo,\n redo\n } = this.props;\n if (GLOBAL_SHORTCUTS.UNDO.matchesEvent(event) && canUndo) {\n event.preventDefault();\n undo();\n } else if (GLOBAL_SHORTCUTS.REDO.matchesEvent(event) && canRedo) {\n event.preventDefault();\n redo();\n }\n }\n handleSearchModalOpenChange(isOpen) {\n if (isOpen) {\n this.resetSelection();\n } else {\n var {\n showHiddenColumns,\n selectedColumns\n } = this.state;\n var {\n onColumnVisibilityChanged\n } = this.props;\n // Make sure all selected columns are visible when closing the search modal\n if (!showHiddenColumns) {\n var modelIndexesToShow = this.getSelectedItemModelIndexes(selectedColumns);\n onColumnVisibilityChanged(modelIndexesToShow, true);\n }\n }\n this.setState({\n isSearchModalOpen: isOpen\n });\n }\n render() {\n var {\n model,\n hiddenColumns,\n onColumnVisibilityChanged,\n canUndo,\n canRedo\n } = this.props;\n var {\n selectedColumns,\n showHiddenColumns,\n isSearchModalOpen\n } = this.state;\n var hasSelection = selectedColumns.size > 0;\n var flattenedItems = this.getFlattenedTree();\n var hiddenColumnsSet = new Set(hiddenColumns);\n var columnsToToggle = hasSelection ? this.getSelectedItemModelIndexes(selectedColumns) : model.columns.map((_, i) => i);\n var areSomeVisible = hasSelection ? columnsToToggle.some(column => !hiddenColumnsSet.has(column)) : hiddenColumnsSet.size < model.columns.length;\n var allToggleText = areSomeVisible ? 'Hide All' : 'Show All';\n var selectedToggleText = areSomeVisible ? 'Hide Selected' : 'Show Selected';\n var visibilityOrderingList = this.makeVisibilityOrderingList(model.columns, flattenedItems, showHiddenColumns, !isSearchModalOpen);\n return /*#__PURE__*/_jsx(SortableTreeDndContext, {\n items: flattenedItems,\n onDragStart: this.handleDragStart,\n onDragEnd: this.handleDragEnd,\n renderItem: this.renderItem,\n children: /*#__PURE__*/_jsxs(\"div\", {\n role: \"menu\",\n ref: this.wrapperRef,\n className: \"visibility-ordering-builder\",\n tabIndex: 0,\n onKeyUp: this.handleKeyboardShortcut,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"top-menu\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"toggle-visibility-btn\",\n onClick: () => {\n onColumnVisibilityChanged(columnsToToggle, !areSomeVisible);\n },\n icon: areSomeVisible ? dhEye : dhEyeSlash,\n tooltip: \"Toggle column visibility\",\n children: !hasSelection ? allToggleText : selectedToggleText\n }), /*#__PURE__*/_jsx(SearchWithModal, {\n items: flattenedItems,\n onModalOpenChange: this.handleSearchModalOpenChange,\n onClick: this.handleSearchItemClicked,\n setSelection: this.handleSearchSelect\n }), /*#__PURE__*/_jsxs(MenuTrigger, {\n closeOnSelect: true,\n children: [/*#__PURE__*/_jsx(ActionButton, {\n isQuiet: true,\n \"aria-label\": \"More options\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsKebabVertical\n })\n }), /*#__PURE__*/_jsxs(SpectrumMenu, {\n onAction: this.handleOverflowAction,\n disabledKeys: [!canUndo && 'undo', !canRedo && 'redo'].filter(k => typeof k === 'string'),\n children: [/*#__PURE__*/_jsxs(Section, {\n \"aria-label\": \"Undo and Redo\",\n children: [/*#__PURE__*/_jsxs(Item, {\n textValue: \"Undo\",\n children: [/*#__PURE__*/_jsx(Icon, {\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsBlank\n })\n }), /*#__PURE__*/_jsx(Text, {\n children: \"Undo\"\n }), /*#__PURE__*/_jsx(Keyboard, {\n children: GLOBAL_SHORTCUTS.UNDO.getDisplayText()\n })]\n }, \"undo\"), /*#__PURE__*/_jsxs(Item, {\n textValue: \"Redo\",\n children: [/*#__PURE__*/_jsx(Icon, {\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsBlank\n })\n }), /*#__PURE__*/_jsx(Text, {\n children: \"Redo\"\n }), /*#__PURE__*/_jsx(Keyboard, {\n children: GLOBAL_SHORTCUTS.REDO.getDisplayText()\n })]\n }, \"redo\")]\n }), /*#__PURE__*/_jsx(Section, {\n \"aria-label\": \"More actions\",\n children: /*#__PURE__*/_jsxs(Item, {\n textValue: \"Show hidden columns\",\n children: [/*#__PURE__*/_jsx(Icon, {\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: showHiddenColumns ? vsCheck : vsBlank\n })\n }), /*#__PURE__*/_jsx(Text, {\n children: \"Show hidden columns\"\n })]\n }, \"showHidden\")\n })]\n })]\n })]\n }), /*#__PURE__*/_jsxs(\"div\", {\n className: \"top-menu\",\n children: [/*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: vsRefresh,\n className: \"px-1\",\n tooltip: \"Reset to default\",\n onClick: () => {\n this.resetVisibilityOrdering();\n },\n children: \"Reset\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"vertical-divider\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: dhSortAlphaDown,\n className: \"px-1\",\n tooltip: \"Sort ascending\",\n onClick: () => {\n this.handleSortColumns(VisibilityOrderingBuilderInner.SORTING_OPTIONS.ASC);\n }\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: dhSortAlphaUp,\n className: \"px-1\",\n tooltip: \"Sort descending\",\n onClick: () => {\n this.handleSortColumns(VisibilityOrderingBuilderInner.SORTING_OPTIONS.DSC);\n }\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"vertical-divider\"\n }), /*#__PURE__*/_jsxs(Button, {\n kind: \"ghost\",\n className: \"px-1\",\n tooltip: \"Create group from selection\",\n disabled: !hasSelection,\n onClick: this.handleGroupCreate,\n children: [/*#__PURE__*/_jsxs(\"span\", {\n className: \"fa-layers\",\n children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {\n mask: vsSymbolStructure,\n icon: vsCircleLargeFilled,\n transform: \"right-7 down-5 shrink-6\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsAdd,\n transform: \"right-8 down-6 shrink-8\"\n })]\n }), \"Group\"]\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"vertical-divider\"\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: vsChevronUp,\n className: \"px-1\",\n tooltip: \"Move selection up\",\n onClick: () => {\n this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.UP);\n },\n disabled: !hasSelection\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: vsChevronDown,\n className: \"px-1\",\n tooltip: \"Move selection down\",\n onClick: () => {\n this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.DOWN);\n },\n disabled: !hasSelection\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: dhArrowToTop,\n className: \"px-1\",\n tooltip: \"Move selection to top\",\n onClick: () => {\n this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.TOP);\n },\n disabled: !hasSelection\n }), /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: dhArrowToBottom,\n className: \"px-1\",\n tooltip: \"Move selection to bottom\",\n onClick: () => {\n this.handleMoveColumns(VisibilityOrderingBuilderInner.MOVE_OPTIONS.BOTTOM);\n },\n disabled: !hasSelection\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n role: \"menu\",\n ref: list => {\n this.list = list;\n },\n className: classNames('visibility-ordering-list'),\n children: visibilityOrderingList\n })]\n })\n });\n }\n}\n\n// drag and drop display\n_defineProperty(VisibilityOrderingBuilderInner, \"SORTING_OPTIONS\", {\n DSC: 'DSC',\n ASC: 'ASC'\n});\n_defineProperty(VisibilityOrderingBuilderInner, \"MOVE_OPTIONS\", {\n TOP: 'TOP',\n BOTTOM: 'BOTTOM',\n UP: 'UP',\n DOWN: 'DOWN'\n});\nvar VisibilityOrderingBuilder = /*#__PURE__*/memo(props => {\n var {\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n onMovedColumnsChanged,\n onColumnVisibilityChanged,\n onColumnHeaderGroupChanged,\n onFrozenColumnsChanged,\n // Used for unit tests only\n __testRef\n } = props;\n var {\n set: setUndoState,\n undo,\n canUndo,\n redo,\n canRedo,\n state\n } = useUndoRedo({\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n frozenColumns: props.model.frozenColumns\n });\n\n // On undo/redo, we need to ignore the prop change\n // because we are the ones updating the props\n var isUndoRedoAction = useRef(false);\n var isBatched = useRef(false);\n var startUndoGroup = useCallback(() => {\n isBatched.current = true;\n }, []);\n var endUndoGroup = useCallback(() => {\n isBatched.current = false;\n }, []);\n useEffect(() => {\n if (isUndoRedoAction.current) {\n onMovedColumnsChanged(state.movedColumns);\n onColumnVisibilityChanged(hiddenColumns, true);\n onColumnVisibilityChanged(state.hiddenColumns, false);\n onColumnHeaderGroupChanged(state.columnHeaderGroups);\n onFrozenColumnsChanged(state.frozenColumns);\n isUndoRedoAction.current = false;\n } else if (\n // If the parent props changed and it's not an undo/redo action, update the undo state\n !isBatched.current && (movedColumns !== state.movedColumns || columnHeaderGroups !== state.columnHeaderGroups || hiddenColumns.length !== state.hiddenColumns.length || hiddenColumns.some((col, index) => col !== state.hiddenColumns[index]))) {\n setUndoState({\n movedColumns,\n hiddenColumns,\n columnHeaderGroups,\n frozenColumns: props.model.frozenColumns\n });\n }\n }, [columnHeaderGroups, hiddenColumns, isBatched, movedColumns, onColumnHeaderGroupChanged, onColumnVisibilityChanged, onFrozenColumnsChanged, onMovedColumnsChanged, props.model.frozenColumns, setUndoState, state.columnHeaderGroups, state.frozenColumns, state.hiddenColumns, state.movedColumns]);\n var handleColumnHeaderGroupChanged = useCallback(groups => {\n if (groups !== columnHeaderGroups) {\n onColumnHeaderGroupChanged(\n // Updates which model indexes are in the groups if items were added/removed\n IrisGridUtils.parseColumnHeaderGroups(props.model, groups).groups);\n }\n }, [columnHeaderGroups, onColumnHeaderGroupChanged, props.model]);\n var handleUndo = useCallback(() => {\n isUndoRedoAction.current = true;\n undo();\n }, [undo]);\n var handleRedo = useCallback(() => {\n isUndoRedoAction.current = true;\n redo();\n }, [redo]);\n return /*#__PURE__*/_jsx(VisibilityOrderingBuilderInner\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, props), {}, {\n ref: __testRef,\n movedColumns: movedColumns,\n hiddenColumns: hiddenColumns,\n columnHeaderGroups: columnHeaderGroups,\n onMovedColumnsChanged: onMovedColumnsChanged,\n onColumnVisibilityChanged: onColumnVisibilityChanged,\n onColumnHeaderGroupChanged: handleColumnHeaderGroupChanged,\n undo: handleUndo,\n canUndo: canUndo,\n redo: handleRedo,\n canRedo: canRedo,\n startUndoGroup: startUndoGroup,\n endUndoGroup: endUndoGroup\n }));\n});\nVisibilityOrderingBuilder.displayName = 'VisibilityOrderingBuilder';\nexport default VisibilityOrderingBuilder;\n//# sourceMappingURL=VisibilityOrderingBuilder.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { GridMouseHandler } from '@deephaven/grid';\nimport deepEqual from 'fast-deep-equal';\n/**\n * Handles cursor and click action for cell overflow button\n * The button is rendered via IrisGridRenderer\n */\nclass IrisGridCellOverflowMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(850); // Needs to be before GridSelectionMouseHandler\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyColumnTooltip() {\n this.irisGrid.setState({\n overflowButtonTooltipProps: null\n });\n }\n setCursor(point) {\n if (this.isHoveringOverflowButton(point)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n getButtonPosition(_ref) {\n var {\n x,\n y,\n column,\n row\n } = _ref;\n if (column == null || row == null) {\n return null;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return null;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = this.irisGrid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n var {\n left,\n top,\n width,\n height\n } = renderer.getCellOverflowButtonPosition(rendererState);\n if (left == null || width == null || top == null || height == null) {\n return null;\n }\n return {\n left,\n top,\n width,\n height\n };\n }\n isHoveringOverflowButton(point) {\n var _this$getButtonPositi;\n var {\n x,\n y\n } = point;\n var {\n left,\n top,\n width,\n height\n } = (_this$getButtonPositi = this.getButtonPosition(point)) !== null && _this$getButtonPositi !== void 0 ? _this$getButtonPositi : {};\n if (left == null || width == null || top == null || height == null) {\n return false;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return false;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n return renderer.shouldRenderOverflowButton(rendererState) && x >= left && x <= left + width && y >= top && y <= top + height;\n }\n onMove(point) {\n if (this.isHoveringOverflowButton(point)) {\n var {\n overflowButtonTooltipProps\n } = this.irisGrid.state;\n var newProps = this.getButtonPosition(point);\n if (!deepEqual(overflowButtonTooltipProps, newProps)) {\n this.irisGrid.setState({\n overflowButtonTooltipProps: newProps\n });\n }\n } else {\n this.destroyColumnTooltip();\n }\n return this.setCursor(point);\n }\n onWheel(point) {\n this.destroyColumnTooltip();\n return this.onMove(point);\n }\n\n // Needs to be onDown and not onClick b/c of GridSelectionMouseHandler shifting cell onDown\n onDown(point) {\n this.destroyColumnTooltip();\n var {\n column,\n row\n } = point;\n if (this.isHoveringOverflowButton(point)) {\n this.irisGrid.setState({\n showOverflowModal: true,\n overflowText: this.irisGrid.getValueForCell(column, row)\n });\n }\n return false;\n }\n onContextMenu() {\n this.destroyColumnTooltip();\n return false;\n }\n onLeave() {\n this.destroyColumnTooltip();\n return false;\n }\n}\nexport default IrisGridCellOverflowMouseHandler;\n//# sourceMappingURL=IrisGridCellOverflowMouseHandler.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 { GridMouseHandler } from '@deephaven/grid';\n/**\n * Handles interaction with tables when the Linker tool is active\n */\nclass IrisGridColumnSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n isActive() {\n var {\n isSelectingColumn\n } = this.irisGrid.props;\n return isSelectingColumn;\n }\n isValidColumn(tableColumn) {\n if (tableColumn == null || tableColumn.isProxy === true) {\n return false;\n }\n var {\n columnSelectionValidator\n } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n return columnSelectionValidator(tableColumn);\n }\n return true;\n }\n updateColumnSelectionStatus() {\n var {\n columnSelectionValidator\n } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n columnSelectionValidator(null);\n }\n }\n getTableColumn(columnIndex) {\n if (columnIndex == null) {\n return null;\n }\n var {\n model\n } = this.irisGrid.props;\n var modelColumn = this.irisGrid.getModelColumn(columnIndex);\n if (modelColumn == null) {\n return null;\n }\n return model.columns[modelColumn];\n }\n onMove(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n columnAllowedCursor,\n columnNotAllowedCursor\n } = this.irisGrid.props;\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: column\n });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n return true;\n }\n\n // keeps linker cursor state during wheel event\n onWheel(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n columnAllowedCursor,\n columnNotAllowedCursor\n } = this.irisGrid.props;\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: column\n });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n\n // don't block wheel event from scrolling\n return {\n preventDefault: false,\n stopPropagation: false\n };\n }\n onLeave() {\n if (this.isActive()) {\n this.irisGrid.setState({\n hoverSelectColumn: null\n });\n }\n this.updateColumnSelectionStatus();\n return false;\n }\n onDown() {\n return this.isActive();\n }\n onClick(gridPoint) {\n if (!this.isActive()) {\n return false;\n }\n var {\n column\n } = gridPoint;\n var tableColumn = this.getTableColumn(column);\n if (tableColumn != null && this.isValidColumn(tableColumn)) {\n this.irisGrid.selectColumn(tableColumn);\n }\n return true;\n }\n}\nexport default IrisGridColumnSelectMouseHandler;\n//# sourceMappingURL=IrisGridColumnSelectMouseHandler.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 { flushSync } from 'react-dom';\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Detects mouse hover over column headers and displays the appropriate tooltip\n */\nclass IrisGridColumnTooltipMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n hideColumnTooltip() {\n var {\n tooltip\n } = this.irisGrid;\n if (tooltip) {\n tooltip.stopTimer();\n tooltip.hide();\n }\n }\n onDown() {\n this.hideColumnTooltip();\n return false;\n }\n onContextMenu() {\n this.hideColumnTooltip();\n return false;\n }\n onWheel() {\n this.hideColumnTooltip();\n return false;\n }\n onLeave(gridPoint, grid, event) {\n /**\n * This should always be a react event\n * React seems to be handling onMouseLeave incorrectly at times\n * When moving to the padding between the column and popper, React sets\n * event.relatedTarget to window, but event.nativeEvent.relatedTarget is the popper.\n * It's possibly related to popper being rendered in a portal\n */\n var {\n relatedTarget\n } = event instanceof MouseEvent ? event : event.nativeEvent;\n var {\n tooltip\n } = this.irisGrid;\n if (!tooltip) {\n return false;\n }\n var popper = tooltip.popper.current;\n if (popper && relatedTarget instanceof Element && popper.element.contains(relatedTarget)) {\n // Do not hide the popper if we moved the cursor from canvas to popper\n return false;\n }\n this.hideColumnTooltip();\n return false;\n }\n onMove(gridPoint) {\n var {\n column,\n row,\n columnHeaderDepth\n } = gridPoint;\n var {\n shownColumnTooltip\n } = this.irisGrid.state;\n var newTooltip = null;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n newTooltip = column;\n }\n if (newTooltip !== shownColumnTooltip) {\n flushSync(() => {\n this.irisGrid.setState({\n shownColumnTooltip: newTooltip\n });\n });\n }\n return false;\n }\n}\nexport default IrisGridColumnTooltipMouseHandler;\n//# sourceMappingURL=IrisGridColumnTooltipMouseHandler.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 { Tooltip } from '@deephaven/components';\nimport { DOMUtils } from '@deephaven/utils';\nimport \"./CustomFormatAction.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Renders menuElement option with custom format input for use in formatting context menus\n *\n * TODO:\n * - capture focus when this menu action is selected via ArrowUp/ArrowDown keys\n * - dynamically update selected menu item when clicking on the input box\n */\nclass CustomFormatAction extends Component {\n constructor() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : CustomFormatAction.defaultProps;\n super(props);\n _defineProperty(this, \"inputRef\", void 0);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.inputRef = /*#__PURE__*/React.createRef();\n }\n handleInputChange() {\n var {\n onChange\n } = this.props;\n if (this.inputRef.current) {\n onChange(this.inputRef.current.value);\n }\n }\n closeContextMenu() {\n var {\n forwardedProps\n } = this.props;\n var {\n closeMenu\n } = forwardedProps;\n closeMenu(true);\n }\n revertToDefault() {\n var {\n onChange\n } = this.props;\n onChange(null);\n }\n returnFocusToContextMenu() {\n var parentContextMenu = DOMUtils.getClosestByClassName(this.inputRef.current, 'context-menu-container');\n if (parentContextMenu instanceof HTMLElement) {\n parentContextMenu.focus();\n }\n }\n handleKeyDown(event) {\n switch (event.key) {\n case 'Enter':\n event.stopPropagation();\n this.closeContextMenu();\n break;\n case 'Escape':\n event.stopPropagation();\n this.revertToDefault();\n this.closeContextMenu();\n break;\n case 'ArrowRight':\n case 'ArrowLeft':\n event.stopPropagation();\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n this.returnFocusToContextMenu();\n break;\n default:\n event.stopPropagation();\n }\n }\n render() {\n var {\n formatString,\n forwardedProps,\n placeholder,\n title\n } = this.props;\n var {\n menuItem: {\n description\n },\n iconElement\n } = forwardedProps;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"form-group flex-grow mb-0\",\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"custom-format-title\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"icon\",\n children: iconElement\n }), /*#__PURE__*/_jsxs(\"label\", {\n className: \"title mb-0\",\n htmlFor: \"custom-format-input\",\n children: [title, description != null && /*#__PURE__*/_jsx(Tooltip, {\n children: description\n })]\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"pl-2 pr-2 pb-2\",\n children: /*#__PURE__*/_jsx(\"input\", {\n id: \"custom-format-input\",\n className: \"form-control text-right mb-0\",\n type: \"text\",\n defaultValue: formatString,\n ref: this.inputRef,\n placeholder: placeholder,\n onKeyDown: this.handleKeyDown,\n onChange: this.handleInputChange,\n autoComplete: \"off\",\n autoCorrect: \"off\",\n autoCapitalize: \"off\",\n spellCheck: \"false\"\n })\n })]\n });\n }\n}\n_defineProperty(CustomFormatAction, \"defaultProps\", {\n formatString: '',\n forwardedProps: {\n menuItem: {},\n closeMenu(focusInput) {\n // no-op\n },\n iconElement: null\n },\n placeholder: '',\n title: '',\n onChange(value) {\n // no-op\n }\n});\nexport default CustomFormatAction;\n//# sourceMappingURL=CustomFormatAction.js.map","import React from 'react';\nimport { TableColumnFormatter } from '@deephaven/jsapi-utils';\nimport CustomFormatAction from \"./CustomFormatAction.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nclass FormatContextMenuUtils {\n /**\n * Returns true if default option should be active in the context menu\n * @param selectedFormat selected format object or null\n */\n static isDefaultSelected(selectedFormat) {\n return !selectedFormat || ![TableColumnFormatter.TYPE_CONTEXT_CUSTOM, TableColumnFormatter.TYPE_CONTEXT_PRESET].includes(selectedFormat.type);\n }\n\n /**\n * Returns true if custom format option should be active in the context menu\n * @param selectedFormat selected format object or null\n */\n static isCustomSelected(selectedFormat) {\n return selectedFormat != null && selectedFormat.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM;\n }\n\n /**\n * Creates context menu option\n * @param title Context menu title\n * @param format Format object\n * @param group Context menu group\n * @param isSelected Is current option selected\n */\n static makeOption(title, format, group, isSelected) {\n return {\n title,\n description: title,\n group,\n format,\n isSelected\n };\n }\n\n /**\n * Creates context menu option with an input element\n * @param format Format object\n * @param group Context menu group\n * @param placeholder Input element placeholder\n * @param isSelected Is current option selected\n * @param onChange Input element onChange callback\n */\n static makeCustomFormatOption(format, group, placeholder, isSelected, onChange) {\n var _format$formatString;\n return {\n title: format.label,\n description: format.label,\n format,\n group,\n isSelected,\n menuElement: /*#__PURE__*/_jsx(CustomFormatAction, {\n formatString: (_format$formatString = format.formatString) !== null && _format$formatString !== void 0 ? _format$formatString : undefined,\n title: format.label,\n placeholder: placeholder,\n onChange: onChange\n })\n };\n }\n}\nexport default FormatContextMenuUtils;\n//# sourceMappingURL=FormatContextMenuUtils.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 { DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass DateTimeFormatContextMenu {\n /**\n * Creates list of formatting options for DateTime context menu\n * @param formatter Formatter instance\n * @param selectedFormat Selected format object, null for no selected format\n * @returns Array of formatting options for the context menu\n */\n static getOptions(formatter, selectedFormat) {\n var currentTime = new Date();\n var formatItems = [{\n group: DateTimeFormatContextMenu.dateGroup,\n formatString: 'yyyy-MM-dd'\n }, {\n group: DateTimeFormatContextMenu.dateGroup,\n formatString: 'MM-dd-yyyy'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss.SSS'\n }, {\n group: DateTimeFormatContextMenu.timeGroup,\n formatString: 'HH:mm:ss.SSSSSSSSS'\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss\"\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss.SSS\"\n }, {\n group: DateTimeFormatContextMenu.dateTimeGroup,\n formatString: \"yyyy-MM-dd HH:mm:ss.SSSSSSSSS\"\n }];\n var presetFormatOptions = formatItems.map(item => {\n var format = DateTimeColumnFormatter.makeFormat('', item.formatString, DateTimeColumnFormatter.TYPE_CONTEXT_PRESET);\n var title = formatter.getFormattedString(currentTime, TableUtils.dataType.DATETIME, '', format);\n return FormatContextMenuUtils.makeOption(title, format, item.group, DateTimeColumnFormatter.isSameFormat(format, selectedFormat));\n });\n var defaultOption = FormatContextMenuUtils.makeOption('Default', null, DateTimeFormatContextMenu.dateGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n return [defaultOption, ...presetFormatOptions];\n }\n}\n_defineProperty(DateTimeFormatContextMenu, \"dateGroup\", 10);\n_defineProperty(DateTimeFormatContextMenu, \"timeGroup\", 20);\n_defineProperty(DateTimeFormatContextMenu, \"dateTimeGroup\", 30);\nexport default DateTimeFormatContextMenu;\n//# sourceMappingURL=DateTimeFormatContextMenu.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 { DecimalColumnFormatter } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass DecimalFormatContextMenu {\n /**\n * Creates list of formatting options for Decimal context menu\n * @param dh JSAPI instance\n * @param selectedFormat Selected format object, null for no selected format\n * @param onCustomFormatChange Callback to call when the custom format is changed\n * @returns Array of formatting options for the context menu\n */\n static getOptions(dh, selectedFormat, onCustomFormatChange) {\n var formatItems = [{\n format: DecimalColumnFormatter.FORMAT_PERCENT,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_BASIS_POINTS,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_THOUSANDS,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_MILLIONS,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_SCIENTIFIC_NOTATION,\n group: DecimalFormatContextMenu.presetGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND,\n group: DecimalFormatContextMenu.presetRoundGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND_TWO_DECIMALS,\n group: DecimalFormatContextMenu.presetRoundGroup\n }, {\n format: DecimalColumnFormatter.FORMAT_ROUND_FOUR_DECIMALS,\n group: DecimalFormatContextMenu.presetRoundGroup\n }];\n var defaultFormatOption = FormatContextMenuUtils.makeOption('Default', null, DecimalFormatContextMenu.defaultGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n var presetFormatOptions = formatItems.map(item => FormatContextMenuUtils.makeOption(item.format.label, item.format, item.group, DecimalColumnFormatter.isSameFormat(item.format, selectedFormat)));\n var isCustomSelected = FormatContextMenuUtils.isCustomSelected(selectedFormat);\n var customFormat = isCustomSelected ? selectedFormat : DecimalColumnFormatter.makeCustomFormat();\n var customFormatOption = FormatContextMenuUtils.makeCustomFormatOption(customFormat, DecimalFormatContextMenu.customGroup, DecimalColumnFormatter.DEFAULT_FORMAT_STRING, isCustomSelected, formatString => {\n if (formatString != null) {\n var newCustomFormat = DecimalColumnFormatter.makeCustomFormat(formatString);\n if (DecimalColumnFormatter.isValid(dh, newCustomFormat)) {\n onCustomFormatChange(newCustomFormat);\n }\n } else {\n onCustomFormatChange(null);\n }\n });\n return [defaultFormatOption, ...presetFormatOptions, customFormatOption];\n }\n}\n_defineProperty(DecimalFormatContextMenu, \"defaultGroup\", 10);\n_defineProperty(DecimalFormatContextMenu, \"presetGroup\", 20);\n_defineProperty(DecimalFormatContextMenu, \"presetRoundGroup\", 30);\n_defineProperty(DecimalFormatContextMenu, \"customGroup\", 40);\nexport default DecimalFormatContextMenu;\n//# sourceMappingURL=DecimalFormatContextMenu.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 { IntegerColumnFormatter } from '@deephaven/jsapi-utils';\nimport FormatContextMenuUtils from \"./FormatContextMenuUtils.js\";\nclass IntegerFormatContextMenu {\n /**\n * Creates list of formatting options for Integer context menu\n * @param dh JSAPI instance\n * @param selectedFormat Selected format object, null for no selected format\n * @param onCustomFormatChange Callback to call when the custom format is changed\n * @returns Array of formatting options for the context menu\n */\n static getOptions(dh, selectedFormat, onCustomFormatChange) {\n var formatItems = [{\n format: IntegerColumnFormatter.FORMAT_THOUSANDS,\n group: IntegerFormatContextMenu.presetGroup\n }, {\n format: IntegerColumnFormatter.FORMAT_MILLIONS,\n group: IntegerFormatContextMenu.presetGroup\n }, {\n format: IntegerColumnFormatter.FORMAT_SCIENTIFIC_NOTATION,\n group: IntegerFormatContextMenu.presetGroup\n }];\n var defaultFormatOption = FormatContextMenuUtils.makeOption('Default', null, IntegerFormatContextMenu.defaultGroup, FormatContextMenuUtils.isDefaultSelected(selectedFormat));\n var presetFormatOptions = formatItems.map(item => FormatContextMenuUtils.makeOption(item.format.label, item.format, item.group, IntegerColumnFormatter.isSameFormat(item.format, selectedFormat)));\n var isCustomSelected = FormatContextMenuUtils.isCustomSelected(selectedFormat);\n var customFormat = isCustomSelected ? selectedFormat : IntegerColumnFormatter.makeCustomFormat();\n var customFormatOption = FormatContextMenuUtils.makeCustomFormatOption(customFormat, IntegerFormatContextMenu.customGroup, IntegerColumnFormatter.DEFAULT_FORMAT_STRING, isCustomSelected, formatString => {\n if (formatString != null) {\n var newCustomFormat = IntegerColumnFormatter.makeCustomFormat(formatString);\n if (IntegerColumnFormatter.isValid(dh, newCustomFormat)) {\n onCustomFormatChange(newCustomFormat);\n }\n } else {\n onCustomFormatChange(null);\n }\n });\n return [defaultFormatOption, ...presetFormatOptions, customFormatOption];\n }\n}\n_defineProperty(IntegerFormatContextMenu, \"defaultGroup\", 10);\n_defineProperty(IntegerFormatContextMenu, \"presetGroup\", 20);\n_defineProperty(IntegerFormatContextMenu, \"customGroup\", 30);\nexport default IntegerFormatContextMenu;\n//# sourceMappingURL=IntegerFormatContextMenu.js.map","var _TextAlignmentFormatContextMenu;\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 { dhLeftAlign, dhCenterAlign, dhRightAlign } from '@deephaven/icons';\nclass TextAlignmentFormatContextMenu {\n /**\n * Gets the associated icon for a given alignment\n * @param alignment The text alignment\n * @returns The corresponding icon definition\n */\n static getIconForAlignment(alignment) {\n if (alignment === 'center') return dhCenterAlign;\n if (alignment === 'left') return dhLeftAlign;\n return dhRightAlign;\n }\n}\n_TextAlignmentFormatContextMenu = TextAlignmentFormatContextMenu;\n_defineProperty(TextAlignmentFormatContextMenu, \"defaultGroup\", 10);\n_defineProperty(TextAlignmentFormatContextMenu, \"alignmentGroup\", 20);\n_defineProperty(TextAlignmentFormatContextMenu, \"alignmentOptions\", [{\n title: 'Default',\n alignment: null,\n group: _TextAlignmentFormatContextMenu.defaultGroup\n}, {\n title: 'Left Align',\n alignment: 'left',\n icon: dhLeftAlign,\n group: _TextAlignmentFormatContextMenu.alignmentGroup\n}, {\n title: 'Center Align',\n alignment: 'center',\n icon: dhCenterAlign,\n group: _TextAlignmentFormatContextMenu.alignmentGroup\n}, {\n title: 'Right Align',\n alignment: 'right',\n icon: dhRightAlign,\n group: _TextAlignmentFormatContextMenu.alignmentGroup\n}]);\nexport default TextAlignmentFormatContextMenu;\n//# sourceMappingURL=TextAlignmentFormatContextMenu.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); }\n/* eslint class-methods-use-this: \"off\" */\nimport React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhFilterFilled, vsRemove, vsCheck, vsFilter } from '@deephaven/icons';\nimport debounce from 'lodash.debounce';\nimport { ContextActions, ContextActionUtils, GLOBAL_SHORTCUTS } from '@deephaven/components';\nimport { GridMouseHandler, GridRange, GridRenderer, GridSelectionMouseHandler, isDeletableGridModel, isEditableGridModel, isExpandableColumnGridModel, isExpandableGridModel } from '@deephaven/grid';\nimport { TableColumnFormatter, DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { ClipboardPermissionsDeniedError, ClipboardUnavailableError, TextUtils, assertNotEmpty, assertNotNaN, assertNotNull, copyToClipboard, readFromClipboard } from '@deephaven/utils';\nimport { DateTimeFormatContextMenu, DecimalFormatContextMenu, IntegerFormatContextMenu, TextAlignmentFormatContextMenu } from \"../format-context-menus/index.js\";\nimport \"./IrisGridContextMenuHandler.css\";\nimport SHORTCUTS from \"../IrisGridShortcuts.js\";\nimport { isPartitionedGridModel } from \"../PartitionedGridModel.js\";\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('IrisGridContextMenuHandler');\nvar DEBOUNCE_UPDATE_FORMAT = 150;\nvar CONTEXT_MENU_DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS';\nvar MAX_MULTISELECT_ROWS = 1000;\n\n/**\n * Used to eat the mouse event in the bottom right corner of the scroll bar\n */\nclass IrisGridContextMenuHandler extends GridMouseHandler {\n /**\n * Get filter condition for quick filter and combines with a new filter using the operator specified,\n * returns new filter if no operator supplied.\n * @param columnFilter\n * @param newColumnFilter\n * @param operator\n */\n static getQuickFilterCondition(columnFilter, newColumnFilter, operator) {\n if (columnFilter && operator === '&&') {\n return columnFilter.and(newColumnFilter);\n }\n if (columnFilter && operator === '||') {\n return columnFilter.or(newColumnFilter);\n }\n return newColumnFilter;\n }\n\n /**\n * combines filter text with operator if declared\n * @param filterText\n * @param newFilterText\n * @param operator\n */\n static getQuickFilterText(filterText, newFilterText, operator) {\n return operator && filterText != null ? \"\".concat(filterText, \" \").concat(operator, \" \").concat(newFilterText) : newFilterText;\n }\n\n /**\n * Converts operator to text string,\n */\n static getOperatorAsText(operator) {\n return operator === '&&' ? 'And' : 'Or';\n }\n static getRowOptionFormatted(command, cellValue) {\n var len = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;\n return \"\".concat(command, \" \\\"\").concat(GridRenderer.truncate(cellValue, len - command.length - 3), \"\\\"\");\n }\n constructor(irisGrid, dh) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"debouncedUpdateCustomFormat\", void 0);\n _defineProperty(this, \"dh\", void 0);\n this.getNumberValueEqualsFilter = this.getNumberValueEqualsFilter.bind(this);\n this.getFilterValueForNumberOrChar = this.getFilterValueForNumberOrChar.bind(this);\n this.debouncedUpdateCustomFormat = debounce(irisGrid.handleFormatSelection, DEBOUNCE_UPDATE_FORMAT);\n this.dh = dh;\n this.irisGrid = irisGrid;\n }\n componentWillUnmount() {\n this.debouncedUpdateCustomFormat.flush();\n }\n getHeaderActions(modelIndex, gridPoint) {\n var {\n irisGrid\n } = this;\n var {\n column: visibleIndex\n } = gridPoint;\n assertNotNull(visibleIndex);\n var {\n model\n } = irisGrid.props;\n var {\n columns\n } = model;\n var column = columns[modelIndex];\n var actions = [];\n var {\n metrics,\n reverse,\n quickFilters,\n advancedFilters,\n searchFilter\n } = irisGrid.state;\n var theme = irisGrid.getTheme();\n assertNotNull(metrics);\n var {\n filterIconColor,\n filterBarActiveColor,\n contextMenuSortIconColor,\n contextMenuReverseIconColor\n } = theme;\n var modelSort = model.sort;\n var columnSort = TableUtils.getSortForColumn(modelSort, column.name);\n var {\n userColumnWidths\n } = metrics;\n var isColumnHidden = [...userColumnWidths.values()].some(columnWidth => columnWidth === 0);\n var isColumnFreezable = model.getColumnHeaderParentGroup(modelIndex, 0) === undefined && !(isExpandableGridModel(model) && model.hasExpandableRows);\n var isColumnFrozen = model.isColumnFrozen(modelIndex);\n var isColumnSortable = model.isColumnSortable(modelIndex);\n actions.push({\n title: 'Hide Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.hideColumnByVisibleIndex(visibleIndex);\n }\n });\n actions.push({\n title: isColumnFrozen ? 'Unfreeze Column' : 'Freeze Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n disabled: !isColumnFreezable,\n action: () => {\n if (isColumnFrozen) {\n this.irisGrid.unFreezeColumnByColumnName(column.name);\n } else {\n this.irisGrid.freezeColumnByColumnName(column.name);\n }\n },\n order: 30\n });\n actions.push({\n title: 'Show All Columns',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.showAllColumns();\n },\n disabled: !isColumnHidden\n });\n if (isExpandableColumnGridModel(model) && model.hasExpandableColumns) {\n if (model.isExpandAllColumnsAvailable) {\n actions.push({\n title: 'Expand All Columns',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 30,\n action: () => {\n this.irisGrid.expandAllColumns();\n }\n });\n actions.push({\n title: 'Collapse All Columns',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 40,\n action: () => {\n this.irisGrid.collapseAllColumns();\n }\n });\n }\n }\n actions.push({\n title: 'Resize Column',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.handleResizeColumn(modelIndex);\n },\n order: 10\n });\n actions.push({\n title: 'Resize All Columns',\n group: IrisGridContextMenuHandler.GROUP_HIDE_COLUMNS,\n action: () => {\n this.irisGrid.handleResizeAllColumns();\n },\n order: 20\n });\n actions.push({\n title: 'Quick Filters',\n icon: vsRemove,\n iconColor: filterBarActiveColor,\n shortcut: SHORTCUTS.TABLE.TOGGLE_QUICK_FILTER,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n action: () => {\n this.irisGrid.toggleFilterBar(visibleIndex);\n },\n disabled: !model.isFilterable(modelIndex)\n });\n actions.push({\n title: 'Advanced Filters',\n icon: advancedFilters.get(modelIndex) ? dhFilterFilled : vsFilter,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 20,\n action: () => {\n this.irisGrid.handleAdvancedMenuOpened(visibleIndex);\n },\n disabled: !model.isFilterable(modelIndex)\n });\n actions.push({\n title: 'Clear Table Filters',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 40,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.CLEAR_FILTERS,\n action: () => {\n this.irisGrid.clearAllFilters();\n },\n disabled: !(quickFilters.size > 0 || advancedFilters.size > 0 || searchFilter != null)\n });\n actions.push({\n title: 'Sort by',\n icon: vsRemove,\n iconColor: contextMenuSortIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 10,\n actions: this.sortByActions(column, modelIndex, columnSort),\n disabled: !isColumnSortable\n });\n actions.push({\n title: 'Add Additional Sort',\n /**\n * disable conditions:\n * 1. table is sorted only by this column\n * 2. table is only reversed\n * 3. 1 & 2 combined\n * 4. table has no sort\n * reverse is a type of sort, so needs to be accounted for in exclusions\n * */\n disabled: columnSort && modelSort.length === 1 || reverse && modelSort.length === 1 || columnSort && reverse && modelSort.length === 2 || modelSort.length === 0 || !isColumnSortable,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 20,\n actions: this.additionalSortActions(column, modelIndex)\n });\n actions.push({\n title: 'Clear Table Sorting',\n disabled:\n // reverse is a type of sort, but special and needs to be exluded despite being part of model.sort\n modelSort.length === 0 || reverse && modelSort.length === 1,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n action: () => {\n this.irisGrid.sortColumn(visibleIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none);\n },\n order: 30\n });\n actions.push({\n title: reverse ? 'Clear Reverse Table' : 'Reverse Table',\n icon: vsRemove,\n iconColor: contextMenuReverseIconColor,\n group: IrisGridContextMenuHandler.GROUP_SORT,\n order: 40,\n disabled: !model.isReversible,\n // this just displays the shortcut, the actual listener is in irisgrid handleKeyDown\n shortcut: SHORTCUTS.TABLE.REVERSE,\n action: () => {\n this.irisGrid.reverse(!reverse);\n }\n });\n actions.push({\n title: 'Copy Column Name',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform() ? '⌥Click' : 'Alt+Click',\n action: () => {\n var _model$textForColumnH;\n copyToClipboard((_model$textForColumnH = model.textForColumnHeader(modelIndex)) !== null && _model$textForColumnH !== void 0 ? _model$textForColumnH : '').catch(e => log.error('Unable to copy header', e));\n }\n });\n if (TableUtils.isDateType(column.type)) {\n actions.push({\n title: 'Date/Time Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: this.dateFormatActions(column)\n });\n } else if (TableUtils.isNumberType(column.type)) {\n var _this$numberFormatAct;\n actions.push({\n title: 'Number Format',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: (_this$numberFormatAct = this.numberFormatActions(column)) !== null && _this$numberFormatAct !== void 0 ? _this$numberFormatAct : undefined\n });\n }\n actions.push({\n title: 'Text Alignment',\n group: IrisGridContextMenuHandler.GROUP_FORMAT,\n actions: this.textAlignmentFormatActions(column)\n });\n return actions;\n }\n getCellActions(modelColumn, grid, gridPoint) {\n var {\n irisGrid\n } = this;\n var {\n column: columnIndex,\n row: rowIndex\n } = gridPoint;\n var {\n model,\n canCopy\n } = irisGrid.props;\n var {\n columns\n } = model;\n var modelRow = irisGrid.getModelRow(rowIndex);\n assertNotNull(modelRow);\n var sourceCell = model.sourceForCell(modelColumn, modelRow);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var {\n selectedRanges\n } = irisGrid.state;\n var column = columns[sourceColumn];\n var actions = [];\n var theme = irisGrid.getTheme();\n var {\n filterIconColor\n } = theme;\n if (column == null || rowIndex == null) return actions;\n\n // Expand/Collapse options\n if (isExpandableGridModel(model) && model.isRowExpandable(sourceRow)) {\n // If there are grouped columns, then it is a rollup\n // The first column will be the \"group\" column with the value that should be expanded\n var expandingColumn = 0;\n var cellValue = model.valueForCell(expandingColumn, sourceRow);\n var cellText = cellValue == null ? 'null' : model.textForCell(expandingColumn, sourceRow);\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted(model.isRowExpanded(sourceRow) ? 'Collapse' : 'Expand', cellText),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 10,\n action: () => {\n model.setRowExpanded(sourceRow, !model.isRowExpanded(sourceRow));\n }\n });\n if (model.isExpandAllAvailable === true) {\n actions.push({\n title: IrisGridContextMenuHandler.getRowOptionFormatted('Expand All in', cellText),\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 20,\n action: () => {\n model.setRowExpanded(sourceRow, true, true);\n }\n });\n }\n }\n if (isExpandableGridModel(model) && model.hasExpandableRows && model.isExpandAllAvailable === true) {\n actions.push({\n title: 'Expand Entire Table',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 30,\n action: () => {\n model.expandAll();\n }\n });\n actions.push({\n title: 'Collapse Entire Table',\n group: IrisGridContextMenuHandler.GROUP_EXPAND_COLLAPSE,\n order: 40,\n action: () => {\n model.collapseAll();\n }\n });\n }\n var gotoRow = {\n title: 'Go to',\n iconColor: filterIconColor,\n shortcut: SHORTCUTS.TABLE.GOTO_ROW,\n group: IrisGridContextMenuHandler.GROUP_GOTO,\n order: 10,\n action: () => {\n // Use raw value (same as Copy Cell Unformatted) to preserve full precision and timezone\n var rawValue = String(irisGrid.getValueForCell(columnIndex, rowIndex, true));\n this.irisGrid.toggleGotoRow(\"\".concat(rowIndex + 1), rawValue, column.name);\n }\n };\n actions.push(gotoRow);\n if (canCopy) {\n actions.push({\n title: 'Copy Cell',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n shortcutText: ContextActionUtils.isMacPlatform() ? '⌥Click' : 'Alt+Click',\n order: 10,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex);\n }\n });\n actions.push({\n title: 'Copy Cell Unformatted',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 20,\n action: () => {\n irisGrid.copyCell(columnIndex, rowIndex, true);\n }\n });\n }\n if (isEditableGridModel(model) && model.isEditable) {\n // selectedRanges is updated by GridSelectionMouseHandler in the same cycle so can't access the updated value here\n // so need to handle cases where a cell is right clicked without highlighting it first\n var canPasteInOriginalRange = selectedRanges.every(range => model.isEditableRange(range));\n\n // To account for how when a cell outside of a selection is right clicked, that selection gets cleared\n var isCellInOriginalRange = GridRange.containsCell(selectedRanges, columnIndex, rowIndex);\n var canPasteInCell = model.isEditableRange(GridRange.makeCell(columnIndex, rowIndex));\n if ((canPasteInOriginalRange || !isCellInOriginalRange) && canPasteInCell) {\n actions.push({\n title: 'Paste',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 50,\n action: function () {\n var _action = _asyncToGenerator(function* () {\n try {\n var text = yield readFromClipboard();\n var items = text.split('\\n').map(row => row.split('\\t'));\n yield grid.pasteValue(items);\n } catch (err) {\n if (err instanceof ClipboardUnavailableError) {\n irisGrid.handleOpenNoPastePermissionModal('For security reasons your browser does not allow access to your clipboard on click.');\n } else if (err instanceof ClipboardPermissionsDeniedError) {\n irisGrid.handleOpenNoPastePermissionModal('Requested clipboard permissions have not been granted, please grant them and try again.');\n } else {\n throw err;\n }\n }\n });\n function action() {\n return _action.apply(this, arguments);\n }\n return action;\n }()\n });\n }\n }\n actions.push({\n title: 'View Cell Contents',\n group: IrisGridContextMenuHandler.GROUP_VIEW_CONTENTS,\n order: 10,\n action: () => {\n irisGrid.setState({\n showOverflowModal: true,\n overflowText: irisGrid.getValueForCell(columnIndex, rowIndex)\n });\n }\n });\n if (isPartitionedGridModel(model) && !model.isPartitionAwareSourceTable) {\n actions.push({\n title: 'View Constituent Table',\n group: IrisGridContextMenuHandler.GROUP_VIEW_CONTENTS,\n order: 40,\n action: () => {\n irisGrid.selectPartitionKeyFromTable(rowIndex);\n }\n });\n }\n return actions;\n }\n\n // moved out of getCellActions since snapshots are async\n getCellFilterActions(modelColumn, grid, gridPoint) {\n var _this = this;\n return _asyncToGenerator(function* () {\n var {\n dh,\n irisGrid\n } = _this;\n var {\n row: rowIndex\n } = gridPoint;\n var {\n model\n } = irisGrid.props;\n var {\n columns\n } = model;\n var modelRow = irisGrid.getModelRow(rowIndex);\n var {\n getSelectedRanges\n } = grid;\n assertNotNull(modelRow);\n var sourceCell = model.sourceForCell(modelColumn, modelRow);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var column = columns[sourceColumn];\n if (column == null || rowIndex == null) return [];\n if (!model.isFilterable(sourceColumn)) return [];\n var {\n quickFilters\n } = irisGrid.state;\n var theme = irisGrid.getTheme();\n var {\n filterIconColor\n } = theme;\n var {\n settings\n } = irisGrid.props;\n var selectedRanges = [...getSelectedRanges()];\n // no selected range (i.e. right clicked a cell without highlighting it)\n // although GridSelectionMouseHandler does change selectedRanges, state isn't updated in\n // time for getSelectedRanges to show the selected cell\n if (selectedRanges.length === 0) {\n selectedRanges.push(new GridRange(sourceColumn, sourceRow, sourceColumn, sourceRow));\n }\n\n // - this block truncates the selected ranges to MAX_MULTISELECT_ROWS rows\n // - NOT first MAX_MULTISELECT_ROWS rows after the first row\n // - NOT first MAX_MULTISELECT_ROWS unique values (prevent case where there are a small\n // amount of values, but a large amount of rows with those values)\n if (GridRange.containsCell(selectedRanges, sourceColumn, sourceRow)) {\n var rowCount = GridRange.rowCount(selectedRanges);\n while (rowCount > MAX_MULTISELECT_ROWS) {\n var lastRow = selectedRanges.pop();\n // should never occur, sanity check\n assertNotNull(lastRow, 'Selected ranges should not be empty');\n var lastRowSize = GridRange.rowCount([lastRow]);\n // should never occur, sanity check\n assertNotNaN(lastRowSize, 'Selected ranges should not be unbounded');\n\n // if removing the last rows makes it dip below the max, then need to\n // bring it back but truncated\n if (rowCount - lastRowSize < MAX_MULTISELECT_ROWS) {\n var _lastRow$endRow;\n // nullish operator to make TS happy, but the check above should prevent this\n selectedRanges.push(new GridRange(lastRow.startColumn, lastRow.startRow, lastRow.endColumn, ((_lastRow$endRow = lastRow.endRow) !== null && _lastRow$endRow !== void 0 ? _lastRow$endRow : 0) - (rowCount - MAX_MULTISELECT_ROWS)));\n break;\n }\n rowCount -= lastRowSize;\n }\n } else {\n // if the block is not in the selected ranges, meaning the user must've right-clicked\n // outside the selected ranges`\n selectedRanges = [new GridRange(sourceColumn, sourceRow, sourceColumn, sourceRow)];\n }\n\n // this should be non empty\n // - valid selected ranges will always have a startRow and endRow\n // - if there are no selected ranges, then one with sourceColumn/Row is added\n assertNotEmpty(selectedRanges);\n\n // get the snapshot values, but ignore all null/undefined values\n var snapshot = yield model.snapshot(selectedRanges);\n var snapshotValues = new Set();\n for (var i = 0; i < snapshot.length; i += 1) {\n if (snapshot[i].length === 1) {\n // if the selected range has start/end columns defined, so the snapshot is a 1D array of the row\n if (snapshot[i][0] != null) {\n snapshotValues.add(snapshot[i][0]);\n }\n } else if (snapshot[i][sourceColumn] != null) {\n // if the selected range is an entire row\n snapshotValues.add(snapshot[i][sourceColumn]);\n }\n }\n // if snapshotValues is empty here, it means all of the snapshot's values were null/undefined\n\n var filterMenu = {\n title: \"Filter by Value\".concat(snapshotValues.size > 1 ? 's' : ''),\n icon: vsRemove,\n iconColor: filterIconColor,\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 10,\n actions: []\n };\n\n // only made of null/undefineds\n if (snapshotValues.size === 0) {\n // null gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.nullFilterActions(column, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.nullFilterActions(column));\n } else if (snapshotValues.size === 1 && snapshotValues.has('')) {\n // empty string gets a special menu\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.emptyStringFilterActions(column, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.emptyStringFilterActions(column));\n } else if (TableUtils.isBooleanType(column.type)) {\n // boolean should have OR condition, and handles it's own null menu options\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'Or',\n actions: _this.booleanFilterActions(column, model.textForCell(sourceColumn, sourceRow), quickFilters.get(sourceColumn), '||'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.booleanFilterActions(column, model.textForCell(sourceColumn, sourceRow)));\n } else if (TableUtils.isNumberType(column.type) || TableUtils.isCharType(column.type)) {\n // Chars get treated like numbers in terms of which filters are available\n assertNotNull(sourceColumn);\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.numberFilterActions(column, snapshotValues, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.numberFilterActions(column, snapshotValues, quickFilters.get(sourceColumn)));\n } else if (TableUtils.isDateType(column.type)) {\n var dateFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT\n });\n var previewFilterFormatter = new DateTimeColumnFormatter(dh, {\n timeZone: settings === null || settings === void 0 ? void 0 : settings.timeZone,\n showTimeZone: settings === null || settings === void 0 ? void 0 : settings.showTimeZone,\n showTSeparator: settings === null || settings === void 0 ? void 0 : settings.showTSeparator,\n defaultDateTimeFormatString: CONTEXT_MENU_DATE_FORMAT\n });\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilters.get(sourceColumn)));\n } else {\n if (quickFilters.get(sourceColumn)) {\n filterMenu.actions.push({\n title: 'And',\n actions: _this.stringFilterActions(column, snapshotValues, quickFilters.get(sourceColumn), '&&'),\n order: 2,\n group: ContextActions.groups.high\n });\n }\n filterMenu.actions.push(..._this.stringFilterActions(column, snapshotValues));\n }\n return [filterMenu];\n })();\n }\n\n /**\n * Gets an equality filter for the provided numeric value\n * @param column The column to make the filter for\n * @param value The value to get the equality filter for\n */\n getNumberValueEqualsFilter(column, value) {\n var {\n dh\n } = this;\n var columnFilter = column.filter();\n if (value === Number.POSITIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));\n }\n if (Number.isNaN(value)) {\n return dh.FilterCondition.invoke('isNaN', columnFilter);\n }\n var filterValue = this.getFilterValueForNumberOrChar(column.type, value);\n return columnFilter.eq(filterValue);\n }\n getFilterValueForNumberOrChar(columnType, value) {\n var {\n dh\n } = this;\n return TableUtils.isCharType(columnType) ? dh.FilterValue.ofString(String.fromCharCode(value)) : dh.FilterValue.ofNumber(value);\n }\n onContextMenu(gridPoint, grid, event) {\n var {\n irisGrid\n } = this;\n var {\n y,\n column: columnIndex,\n row: rowIndex,\n columnHeaderDepth\n } = gridPoint;\n var modelColumn = irisGrid.getModelColumn(columnIndex);\n var modelRow = irisGrid.getModelRow(rowIndex);\n var {\n model,\n canCopy\n } = irisGrid.props;\n var {\n columns\n } = model;\n var {\n metrics,\n isFilterBarShown,\n quickFilters,\n advancedFilters,\n selectedRanges: stateSelectedRanges\n } = irisGrid.state;\n var selectedRanges = GridSelectionMouseHandler.getLatestSelection(stateSelectedRanges, columnIndex, rowIndex);\n assertNotNull(metrics);\n var {\n columnHeaderHeight,\n gridY,\n columnHeaderMaxDepth\n } = metrics;\n var actions = [];\n if (modelColumn != null && modelRow != null) {\n var sourceCell = model.sourceForCell(modelColumn, modelRow !== null && modelRow !== void 0 ? modelRow : 0);\n var {\n column: sourceColumn,\n row: sourceRow\n } = sourceCell;\n var value = model.valueForCell(sourceColumn, sourceRow);\n var valueText = model.textForCell(sourceColumn, sourceRow);\n var column = columns[sourceColumn];\n var {\n onContextMenu\n } = irisGrid.props;\n if (column != null) {\n actions.push(...onContextMenu({\n model,\n value,\n valueText,\n column,\n rowIndex,\n columnIndex,\n modelRow,\n modelColumn\n }));\n }\n }\n if (modelColumn != null) {\n var clearFilterRange = model.getClearFilterRange(modelColumn);\n if (clearFilterRange != null && clearFilterRange.length > 0) {\n // Clear column filter should still be available after last row\n // And should be available in both header and body context menus\n actions.push({\n title: clearFilterRange[1] - clearFilterRange[0] > 0 ? 'Clear Group Filter' : 'Clear Column Filter',\n group: IrisGridContextMenuHandler.GROUP_FILTER,\n order: 30,\n action: () => {\n this.irisGrid.removeColumnFilter(clearFilterRange);\n },\n disabled: !Array.from(quickFilters.keys()).some(col => col >= clearFilterRange[0] && col <= clearFilterRange[1]) && !Array.from(advancedFilters.keys()).some(col => col >= clearFilterRange[0] && col <= clearFilterRange[1])\n });\n }\n }\n if (isFilterBarShown ? y <= gridY : y <= columnHeaderHeight * columnHeaderMaxDepth && columnHeaderDepth === 0) {\n // grid header context menu options\n if (modelColumn != null) {\n actions.push(...this.getHeaderActions(modelColumn, gridPoint));\n }\n } else {\n // grid body context menu options\n if (modelColumn != null && modelRow != null) {\n actions.push(...this.getCellActions(modelColumn, grid, gridPoint));\n actions.push(this.getCellFilterActions(modelColumn, grid, gridPoint));\n }\n\n // blank space context menu options\n if (canCopy && selectedRanges.length > 0) {\n actions.push({\n title: 'Copy Selection',\n shortcut: GLOBAL_SHORTCUTS.COPY,\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 30,\n action: () => {\n irisGrid.copyRanges(selectedRanges);\n }\n });\n actions.push({\n title: 'Copy Selection w/ Headers',\n group: IrisGridContextMenuHandler.GROUP_COPY,\n order: 40,\n action: () => {\n irisGrid.copyRanges(selectedRanges, true);\n }\n });\n }\n if (isEditableGridModel(model) && model.isEditable && selectedRanges.length > 0 && isDeletableGridModel(model) && model.isDeletable) {\n actions.push({\n title: 'Delete Selected Rows',\n group: IrisGridContextMenuHandler.GROUP_EDIT,\n disabled: !model.isDeletableRanges(selectedRanges),\n order: 50,\n action: () => {\n this.irisGrid.deleteRanges(selectedRanges);\n }\n });\n }\n }\n if (actions.length === 0) {\n return false;\n }\n assertNotNull(irisGrid.gridWrapper);\n ContextActions.triggerMenu(irisGrid.gridWrapper, event.clientX, event.clientY, actions);\n return true;\n }\n dateFormatActions(column) {\n var _this2 = this;\n var {\n model\n } = this.irisGrid.props;\n var {\n formatter\n } = model;\n var selectedFormat = formatter.getColumnFormat(column.type, column.name);\n var formatOptions = DateTimeFormatContextMenu.getOptions(formatter, selectedFormat);\n var actions = [];\n var _loop = function _loop() {\n var {\n description,\n format,\n group,\n isSelected,\n title\n } = formatOptions[i];\n actions.push({\n title,\n description,\n icon: isSelected ? vsCheck : undefined,\n group,\n order: i,\n action: () => {\n var modelIndex = model.getColumnIndexByName(column.name);\n assertNotNull(modelIndex);\n _this2.irisGrid.handleFormatSelection(modelIndex, format);\n }\n });\n };\n for (var i = 0; i < formatOptions.length; i += 1) {\n _loop();\n }\n return actions;\n }\n numberFormatActions(column) {\n var _this3 = this;\n var {\n model\n } = this.irisGrid.props;\n var {\n formatter\n } = model;\n var {\n dh\n } = this;\n var selectedFormat = formatter.getColumnFormat(column.type, column.name);\n var formatOptions;\n var columnIndex = model.getColumnIndexByName(column.name);\n if (TableUtils.isDecimalType(column.type)) {\n formatOptions = DecimalFormatContextMenu.getOptions(dh, selectedFormat, format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n });\n } else if (TableUtils.isIntegerType(column.type)) {\n formatOptions = IntegerFormatContextMenu.getOptions(dh, selectedFormat, format => {\n assertNotNull(columnIndex);\n this.debouncedUpdateCustomFormat(columnIndex, format);\n });\n } else {\n log.error('Invalid column type in numberFormatActions');\n return null;\n }\n var actions = [];\n var _loop2 = function _loop2() {\n var {\n format,\n isSelected\n } = formatOptions[i];\n actions.push(_objectSpread(_objectSpread({}, formatOptions[i]), {}, {\n icon: isSelected ? vsCheck : undefined,\n order: i,\n action: () => {\n if (columnIndex === undefined && format && format.type === TableColumnFormatter.TYPE_CONTEXT_CUSTOM) {\n return;\n }\n assertNotNull(columnIndex);\n _this3.irisGrid.handleFormatSelection(columnIndex, format);\n }\n }));\n };\n for (var i = 0; i < formatOptions.length; i += 1) {\n _loop2();\n }\n return actions;\n }\n textAlignmentFormatActions(column) {\n var {\n model\n } = this.irisGrid.props;\n var {\n columnAlignmentMap\n } = this.irisGrid.state;\n var modelIndex = model.getColumnIndexByName(column.name);\n assertNotNull(modelIndex);\n var currentAlignment = columnAlignmentMap.get(column.name);\n return TextAlignmentFormatContextMenu.alignmentOptions.map((option, index) => ({\n title: option.title,\n icon: currentAlignment == null && option.alignment == null || currentAlignment === option.alignment ? vsCheck : option.icon,\n order: index,\n group: option.group,\n action: () => {\n this.irisGrid.handleColumnAlignmentChange(modelIndex, option.alignment);\n }\n }));\n }\n stringFilterActions(column, snapshotValues, quickFilter, operator) {\n var {\n dh\n } = this;\n var values = Array.from(snapshotValues.keys());\n var filterValues = values.map(value => dh.FilterValue.ofString(value));\n var valueDescription = filterValues.length === 1 ? filterValues[0] : 'the selected values';\n var newQuickFilter = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = {\n filter: null,\n text: null\n };\n }\n var {\n filter,\n text: filterText\n } = newQuickFilter;\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n var toFilterText = item => {\n var _TableUtils$escapeQui;\n return (_TableUtils$escapeQui = TableUtils.escapeQuickTextFilter(item)) !== null && _TableUtils$escapeQui !== void 0 ? _TableUtils$escapeQui : '';\n };\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(toFilterText(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'text is exactly',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDescription, \" (case sensitive)\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(filterValue => column.filter().eq(filterValue)).reduce((prev, curr) => prev.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(toFilterText).join(' || '), operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text is not exactly',\n description: \"Show only rows where \".concat(column.name, \" is not \").concat(valueDescription, \" (case sensitive)\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(filterValue => column.filter().notEq(filterValue)).reduce((prev, curr) => prev.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(toFilterText(value))).join(' && '), operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: \"text contains\",\n description: \"Show only rows where \".concat(column.name, \" contains \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().contains(filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"~\".concat(toFilterText(value))).join(' || '), operator));\n },\n order: 30,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text does not contain',\n description: \"Show only rows where \".concat(column.name, \" does not contain \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().or(filterValues.map(filterValue => column.filter().contains(filterValue).not()).reduce((prev, curr) => prev.and(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!~\".concat(toFilterText(value))).join(' && '), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text starts with',\n description: \"Show only rows where \".concat(column.name, \" starts with \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().invoke('startsWith', filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"\".concat(toFilterText(value), \"*\")).join(' || '), operator));\n },\n order: 50,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'text ends with',\n description: \"Show only rows where \".concat(column.name, \" ends with \").concat(valueDescription),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not().and(filterValues.map(filterValue => column.filter().invoke('endsWith', filterValue)).reduce((prev, curr) => prev.or(curr))), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"*\".concat(toFilterText(value))).join(' || '), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n return actions;\n }\n numberFilterActions(column, snapshotValues, quickFilter, operator) {\n var values = Array.from(snapshotValues.keys());\n var valueDesc = values.length === 1 ? \"\".concat(values) : 'the selected values';\n // We want to show the full unformatted value if it's a number, so user knows which value they are matching\n // If it's a Char we just show the char\n var toFilterText = item => TableUtils.isCharType(column.type) ? String.fromCharCode(item) : \"\".concat(item);\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(toFilterText(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is equal to',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, values.map(value => this.getNumberValueEqualsFilter(column, value)).reduce((acc, curr) => acc.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"=\".concat(toFilterText(value))).join(' || '), operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not equal to',\n description: \"Show only rows where \".concat(column.name, \" is not \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, values.map(value => this.getNumberValueEqualsFilter(column, value).not()).reduce((acc, curr) => acc.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(toFilterText(value))).join(' && '), operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n\n // IDS-6092 Less/greater than filters don't make sense for Infinite/NaN\n // TODO (DH-11799): These char filters should work in Bard, with the merge for DH-11040: https://gitlab.eng.illumon.com/illumon/iris/merge_requests/5801\n // They do not work in Powell though, so disable them.\n if (!snapshotValues.has(Number.NaN) && !snapshotValues.has(Number.POSITIVE_INFINITY) && !snapshotValues.has(Number.NEGATIVE_INFINITY) && !TableUtils.isCharType(column.type)) {\n // get the min/max because these are all ge/ne filters\n var maxValue = values.reduce((a, b) => a > b ? a : b);\n var minValue = values.reduce((a, b) => a < b ? a : b);\n var maxFilterValue = this.getFilterValueForNumberOrChar(column.type, maxValue);\n var minFilterValue = this.getFilterValueForNumberOrChar(column.type, minValue);\n var maxValueText = \"\".concat(maxFilterValue);\n var minValueText = \"\".concat(minFilterValue);\n actions.push({\n title: 'greater than',\n description: \"Show only rows where \".concat(column.name, \" is greater than \").concat(maxValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">\".concat(toFilterText(maxValue)), operator));\n },\n order: 30,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'greater than or equal to',\n description: \"Show only rows where \".concat(column.name, \" is greater than or equal to \").concat(maxValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">=\".concat(toFilterText(maxValue)), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'less than',\n description: \"Show only rows where \".concat(column.name, \" is less than \").concat(minValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<\".concat(toFilterText(minValue)), operator));\n },\n order: 50,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'less than or equal to',\n description: \"Show only rows where \".concat(column.name, \" is less than or equal to \").concat(minValueText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<=\".concat(toFilterText(minValue)), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n }\n return actions;\n }\n booleanFilterActions(column, valueText, quickFilter, operator) {\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var {\n filter,\n text: filterText\n } = quickFilter || {};\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', \"\\\"\", valueText !== null && valueText !== void 0 ? valueText : 'null', \"\\\"\"]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'true',\n description: \"Show only rows where \".concat(column.name, \" is true\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isTrue(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'true', operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'false',\n description: \"Show only rows where \".concat(column.name, \" is false\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isFalse(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'false', operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is null',\n description: \"Show only rows where \".concat(column.name, \" is null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));\n },\n order: 30,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not null',\n description: \"Show only rows where \".concat(column.name, \" is not null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n return actions;\n }\n dateFilterActions(column, snapshotValues, dateFilterFormatter, previewFilterFormatter, quickFilter, operator) {\n var {\n dh\n } = this;\n var values = Array.from(snapshotValues.keys());\n var filterValues = values.map(value => dh.FilterValue.ofNumber(value));\n var valueDesc = filterValues.length === 1 ? previewFilterFormatter.format(values[0]) : 'the selected values';\n var maxValue = values.reduce((a, b) => a > b ? a : b);\n var minValue = values.reduce((a, b) => a < b ? a : b);\n var maxFilterValue = dh.FilterValue.ofNumber(maxValue);\n var minFilterValue = dh.FilterValue.ofNumber(minValue);\n var maxDateText = dateFilterFormatter.format(maxValue);\n var minDateText = dateFilterFormatter.format(minValue);\n var maxPreviewText = previewFilterFormatter.format(maxValue);\n var minPreviewText = previewFilterFormatter.format(minValue);\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n var actions = [];\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', TextUtils.join(values.slice(0, 20).map(value => \"\\\"\".concat(previewFilterFormatter.format(value), \"\\\"\"))), values.length > 1 && /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-subtitle\",\n children: [\"(\", values.length, \" values selected)\"]\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'date is',\n description: \"Show only rows where \".concat(column.name, \" is \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(valueFilter => column.filter().eq(valueFilter)).reduce((acc, curr) => acc.or(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"=\".concat(dateFilterFormatter.format(value))).join(' || '), operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is not',\n description: \"Show only rows where \".concat(column.name, \" is not \").concat(valueDesc),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, filterValues.map(valueFilter => column.filter().notEq(valueFilter)).reduce((acc, curr) => acc.and(curr)), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, values.map(value => \"!=\".concat(dateFilterFormatter.format(value))).join(' && '), operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is before',\n description: \"Show only rows where \".concat(column.name, \" is before \").concat(minPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThan(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<\".concat(minDateText), operator));\n },\n order: 30,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is before or equal',\n description: \"Show only rows where \".concat(column.name, \" is before or equal to \").concat(minPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().lessThanOrEqualTo(minFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"<=\".concat(minDateText), operator));\n },\n order: 40,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is after',\n description: \"Show only rows where \".concat(column.name, \" is greater than \").concat(maxPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThan(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">\".concat(maxDateText), operator));\n },\n order: 50,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'date is after or equal',\n description: \"Show only rows where \".concat(column.name, \" is after or equal to \").concat(maxPreviewText),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().greaterThanOrEqualTo(maxFilterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \">=\".concat(maxDateText), operator));\n },\n order: 60,\n group: ContextActions.groups.low\n });\n return actions;\n }\n emptyStringFilterActions(column, quickFilter, operator) {\n var {\n dh\n } = this;\n var filterValue = dh.FilterValue.ofString('');\n var newQuickFilter = quickFilter;\n if (!newQuickFilter) {\n newQuickFilter = {\n filter: null,\n text: null\n };\n }\n var {\n filter,\n text: filterText\n } = newQuickFilter;\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"empty\"\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is empty string',\n description: \"Show only rows where \".concat(column.name, \" is empty\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().eq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"=\", operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not empty string',\n description: \"Show only rows where \".concat(column.name, \" is not empty\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().notEq(filterValue), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, \"!=\", operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n return actions;\n }\n nullFilterActions(column, quickFilter, operator) {\n var filter = null;\n var filterText = null;\n if (quickFilter) {\n filter = quickFilter.filter;\n filterText = quickFilter.text;\n }\n var actions = [];\n var {\n model\n } = this.irisGrid.props;\n var columnIndex = model.getColumnIndexByName(column.name);\n assertNotNull(columnIndex);\n actions.push({\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"iris-grid-filter-menu-item-value\",\n children: [operator ? IrisGridContextMenuHandler.getOperatorAsText(operator) : '', ' ', /*#__PURE__*/_jsx(\"i\", {\n className: \"text-muted\",\n children: \"null\"\n })]\n }),\n order: 1,\n group: ContextActions.groups.high\n });\n actions.push({\n title: 'is null',\n description: \"Show only rows where \".concat(column.name, \" is null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, 'null', operator));\n },\n order: 10,\n group: ContextActions.groups.low\n });\n actions.push({\n title: 'is not null',\n description: \"Show only rows where \".concat(column.name, \" is not null\"),\n action: () => {\n this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, column.filter().isNull().not(), operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, '!null', operator));\n },\n order: 20,\n group: ContextActions.groups.low\n });\n return actions;\n }\n sortByActions(column, modelColumn, columnSort) {\n var theme = this.irisGrid.getTheme();\n var {\n contextMenuSortIconColor\n } = theme;\n var sortActions = [{\n title: \"\".concat(column.name, \" Ascending\"),\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n }, {\n title: \"\".concat(column.name, \" Descending\"),\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n }, {\n title: \"Remove Sort\",\n order: 50,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.none, false, true);\n },\n disabled: !columnSort\n }];\n if (TableUtils.isNumberType(column.type)) {\n sortActions.push({\n title: \"ABS(\".concat(column.name, \") Ascending\"),\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n });\n sortActions.push({\n title: \"ABS(\".concat(column.name, \") Descending\"),\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(modelColumn, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true);\n },\n icon: this.checkColumnSort(columnSort, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true) ? vsRemove : undefined,\n iconColor: contextMenuSortIconColor\n });\n }\n return sortActions;\n }\n additionalSortActions(column, columnIndex) {\n var theme = this.irisGrid.getTheme();\n var {\n contextMenuSortIconColor\n } = theme;\n var additionalSortActions = [{\n title: 'Add Sort By',\n menuElement: /*#__PURE__*/_jsxs(\"div\", {\n className: \"btn-context-menu menu-title\",\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"icon\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsRemove,\n style: {\n color: contextMenuSortIconColor !== null && contextMenuSortIconColor !== void 0 ? contextMenuSortIconColor : undefined\n }\n })\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"title\",\n children: \"Add Additional Sort\"\n }), /*#__PURE__*/_jsx(\"span\", {\n className: \"shortcut\",\n children: ContextActionUtils.isMacPlatform() ? '⌘Click' : 'Ctrl+Click'\n })]\n }),\n order: 1\n }, {\n title: \"\".concat(column.name, \" Ascending\"),\n order: 10,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, false, true);\n }\n }, {\n title: \"\".concat(column.name, \" Descending\"),\n order: 20,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, false, true);\n }\n }];\n if (TableUtils.isNumberType(column.type)) {\n additionalSortActions.push({\n title: \"ABS(\".concat(column.name, \") Ascending\"),\n order: 30,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.ascending, true, true);\n }\n });\n additionalSortActions.push({\n title: \"ABS(\".concat(column.name, \") Descending\"),\n order: 40,\n action: () => {\n this.irisGrid.sortColumn(columnIndex, IrisGridContextMenuHandler.COLUMN_SORT_DIRECTION.descending, true, true);\n }\n });\n }\n return additionalSortActions;\n }\n checkColumnSort(columnSort) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var isAbs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n if (!columnSort) {\n return false;\n }\n return columnSort.direction === direction && columnSort.isAbs === isAbs;\n }\n}\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_EDIT\", ContextActions.groups.high + 10);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_HIDE_COLUMNS\", ContextActions.groups.high + 25);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_FILTER\", ContextActions.groups.high + 50);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_EXPAND_COLLAPSE\", ContextActions.groups.high + 55);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_GOTO\", ContextActions.groups.high + 60);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_SORT\", ContextActions.groups.high + 75);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_COPY\", ContextActions.groups.high + 100);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_FORMAT\", ContextActions.groups.high + 150);\n_defineProperty(IrisGridContextMenuHandler, \"GROUP_VIEW_CONTENTS\", ContextActions.groups.high + 175);\n_defineProperty(IrisGridContextMenuHandler, \"COLUMN_SORT_DIRECTION\", {\n ascending: 'ASC',\n descending: 'DESC',\n none: null\n});\nexport default IrisGridContextMenuHandler;\n//# sourceMappingURL=IrisGridContextMenuHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { GridMouseHandler, GridRange } from '@deephaven/grid';\nimport { ContextActionUtils } from '@deephaven/components';\nclass IrisGridCopyCellMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(250);\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n onClick(gridPoint, grid, event) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey) {\n this.cursor = null;\n if (gridPoint.columnHeaderDepth !== undefined) {\n this.irisGrid.copyColumnHeader(gridPoint.column, gridPoint.columnHeaderDepth);\n } else {\n this.irisGrid.copyRanges([GridRange.makeCell(gridPoint.column, gridPoint.row)]);\n }\n return true;\n }\n return false;\n }\n onMove(gridPoint, _grid, event) {\n if (event.altKey && !ContextActionUtils.isModifierKeyDown(event) && !event.shiftKey && gridPoint.column != null && (gridPoint.row != null || gridPoint.columnHeaderDepth != null)) {\n this.cursor = this.irisGrid.props.copyCursor;\n return true;\n }\n return false;\n }\n}\nexport default IrisGridCopyCellMouseHandler;\n//# sourceMappingURL=IrisGridCopyCellMouseHandler.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 { GridMouseHandler } from '@deephaven/grid';\n/**\n * Handles sending data selected via double click\n */\nclass IrisGridDataSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(880);\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDoubleClick(gridPoint, grid) {\n var {\n column,\n row\n } = gridPoint;\n if (row == null || column == null) {\n return false;\n }\n this.irisGrid.selectData(column, row);\n return false;\n }\n}\nexport default IrisGridDataSelectMouseHandler;\n//# sourceMappingURL=IrisGridDataSelectMouseHandler.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 { GridMouseHandler } from '@deephaven/grid';\n/**\n * Trigger quick filters and advanced filters\n */\nclass IrisGridFilterMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDown(gridPoint) {\n var {\n y,\n column,\n row\n } = gridPoint;\n if (column !== null && row === null) {\n var {\n isFilterBarShown,\n metrics\n } = this.irisGrid.state;\n if (!metrics) throw new Error('Metrics not set');\n var {\n columnHeaderMaxDepth\n } = metrics;\n var theme = this.irisGrid.getTheme();\n if (isFilterBarShown && theme.columnHeaderHeight != null && theme.filterBarHeight != null && y > theme.columnHeaderHeight * columnHeaderMaxDepth && y <= theme.columnHeaderHeight * columnHeaderMaxDepth + theme.filterBarHeight) {\n this.irisGrid.focusFilterBar(column);\n return true;\n }\n }\n return false;\n }\n onMove(gridPoint) {\n var {\n y,\n column\n } = gridPoint;\n var {\n isFilterBarShown,\n hoverAdvancedFilter,\n metrics\n } = this.irisGrid.state;\n if (!metrics) throw new Error('Metrics not set');\n var {\n columnHeaderMaxDepth\n } = metrics;\n var theme = this.irisGrid.getTheme();\n var newHoverAdvancedFilter = null;\n if (isFilterBarShown && theme.columnHeaderHeight != null && theme.filterBarHeight != null && column !== null && y >= theme.columnHeaderHeight * columnHeaderMaxDepth && y <= theme.columnHeaderHeight * columnHeaderMaxDepth + theme.filterBarHeight) {\n newHoverAdvancedFilter = column;\n }\n if (newHoverAdvancedFilter !== hoverAdvancedFilter) {\n this.irisGrid.setState({\n hoverAdvancedFilter: newHoverAdvancedFilter\n });\n }\n return false;\n }\n onLeave(gridPoint) {\n var {\n column\n } = gridPoint;\n var {\n hoverAdvancedFilter\n } = this.irisGrid.state;\n if (hoverAdvancedFilter !== null && column !== hoverAdvancedFilter) {\n this.irisGrid.setState({\n hoverAdvancedFilter: null\n });\n }\n return false;\n }\n}\nexport default IrisGridFilterMouseHandler;\n//# sourceMappingURL=IrisGridFilterMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { GridMouseHandler, GridRowTreeMouseHandler, isExpandableGridModel } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\nimport deepEqual from 'fast-deep-equal';\nclass IrisGridRowTreeMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(750); // Needs to be before GridRowTreeMouseHandler\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n destroyTooltip() {\n this.irisGrid.setState({\n expandCellTooltipProps: null\n });\n }\n setCursor(gridPoint, grid) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n getButtonPosition(_ref) {\n var {\n x,\n y,\n column,\n row\n } = _ref;\n if (column == null || row == null) {\n return null;\n }\n var {\n renderer,\n grid,\n state,\n props\n } = this.irisGrid;\n if (!grid) {\n return null;\n }\n var {\n metrics\n } = state;\n var {\n model\n } = props;\n var {\n canvasContext: context\n } = grid;\n var theme = grid.getTheme();\n var rendererState = {\n context,\n mouseX: x,\n mouseY: y,\n metrics,\n model,\n theme\n };\n var depth = isExpandableGridModel(model) ? model.depthForRow(row) : null;\n var {\n left,\n top,\n width,\n height\n } = renderer.getExpandButtonPosition(rendererState, depth);\n if (left == null || width == null || top == null || height == null) {\n return null;\n }\n return {\n left,\n top,\n width,\n height\n };\n }\n onMove(gridPoint, grid) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n var {\n expandCellTooltipProps\n } = this.irisGrid.state;\n var {\n model\n } = this.irisGrid.props;\n var newProps = this.getButtonPosition(gridPoint);\n var {\n row\n } = gridPoint;\n assertNotNull(row);\n var isRowExpanded = isExpandableGridModel(model) && model.isRowExpanded(row);\n if (!deepEqual(expandCellTooltipProps, newProps)) {\n this.irisGrid.setState({\n expandCellTooltipProps: newProps,\n expandTooltipDisplayValue: isRowExpanded ? 'collapse' : 'expand'\n });\n }\n } else {\n this.destroyTooltip();\n }\n return this.setCursor(gridPoint, grid);\n }\n onDown() {\n this.destroyTooltip();\n return false;\n }\n onContextMenu() {\n this.destroyTooltip();\n return false;\n }\n onWheel() {\n this.destroyTooltip();\n return false;\n }\n onLeave() {\n this.destroyTooltip();\n return false;\n }\n}\nexport default IrisGridRowTreeMouseHandler;\n//# sourceMappingURL=IrisGridRowTreeMouseHandler.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 { ContextActionUtils } from '@deephaven/components';\nimport { GridMouseHandler } from '@deephaven/grid';\n/**\n * Used to handle sorting on column header clicks\n */\nclass IrisGridSortMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"column\", void 0);\n this.column = null;\n this.irisGrid = irisGrid;\n }\n getColumnFromGridPoint(gridPoint) {\n var {\n column,\n row,\n columnHeaderDepth\n } = gridPoint;\n if (column !== null && row === null && columnHeaderDepth === 0) {\n return column;\n }\n return null;\n }\n\n // We need to remember where the down started, because the canvas element will trigger a click whereever mouseUp is\n onDown(gridPoint) {\n this.column = this.getColumnFromGridPoint(gridPoint);\n return false;\n }\n onClick(gridPoint, grid, event) {\n var column = this.getColumnFromGridPoint(gridPoint);\n if (column != null && column === this.column) {\n var addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.irisGrid.toggleSort(column, addToExisting);\n return true;\n }\n return false;\n }\n}\nexport default IrisGridSortMouseHandler;\n//# sourceMappingURL=IrisGridSortMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { GridMouseHandler, GridUtils, isEditableGridModel } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\n\n/**\n * Handles sending data selected via double click\n */\n\nclass PendingMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super();\n this.irisGrid = irisGrid;\n }\n onWheel(gridPoint, grid, wheelEvent) {\n var {\n irisGrid\n } = this;\n var {\n model\n } = irisGrid.props;\n var {\n metrics,\n pendingRowCount\n } = irisGrid.state;\n assertNotNull(metrics);\n var {\n bottom,\n rowCount,\n rowHeight\n } = metrics;\n var {\n deltaY\n } = GridUtils.getScrollDelta(wheelEvent);\n if (isEditableGridModel(model) && model.isEditable && bottom >= rowCount - 1 && deltaY > 0) {\n // We add new rows onto the bottom, but we don't consume the event\n irisGrid.setState({\n pendingRowCount: pendingRowCount + Math.ceil(deltaY / rowHeight)\n });\n }\n return false;\n }\n}\nexport default PendingMouseHandler;\n//# sourceMappingURL=PendingMouseHandler.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 { isLinkToken, GridTokenMouseHandler } from '@deephaven/grid';\nimport deepEqual from 'fast-deep-equal';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\n// Handler also helps with other tooltips\nclass IrisGridTokenMouseHandler extends GridTokenMouseHandler {\n constructor(irisGrid) {\n super();\n _defineProperty(this, \"irisGrid\", void 0);\n _defineProperty(this, \"lastColumn\", void 0);\n _defineProperty(this, \"lastRow\", void 0);\n this.irisGrid = irisGrid;\n this.lastColumn = null;\n this.lastRow = null;\n }\n destroyTooltip() {\n this.irisGrid.setState({\n hoverTooltipProps: null\n });\n }\n setCursor(gridPoint, grid) {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n return {\n stopPropagation: false,\n preventDefault: false\n };\n }\n this.cursor = null;\n return false;\n }\n onMove(gridPoint, grid) {\n var {\n model\n } = this.irisGrid.props;\n var isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n var modelColumn = this.irisGrid.getModelColumn(gridPoint.column);\n var modelRow = this.irisGrid.getModelRow(gridPoint.row);\n var tooltip = modelColumn != null && modelRow != null ? model.tooltipForCell(modelColumn, modelRow) : null;\n if (isUserHoveringLink && this.currentLinkBox != null && isLinkToken(this.currentLinkBox.token)) {\n var {\n hoverTooltipProps\n } = this.irisGrid.state;\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = this.currentLinkBox;\n var {\n href\n } = this.currentLinkBox.token;\n var width = right - left;\n var height = bottom - top;\n var newProps = {\n left,\n top: top + 1,\n width,\n height\n };\n if (!deepEqual(hoverTooltipProps, newProps)) {\n this.irisGrid.setState({\n hoverTooltipProps: newProps,\n hoverDisplayValue: /*#__PURE__*/_jsxs(_Fragment, {\n children: [href, \" - Click once to follow.\", /*#__PURE__*/_jsx(\"br\", {}), \"Click and hold to select this cell.\"]\n })\n });\n }\n } else if (tooltip !== null) {\n var {\n hoverTooltipProps: _hoverTooltipProps\n } = this.irisGrid.state;\n var _newProps = {\n left: gridPoint.x,\n top: gridPoint.y + 1,\n width: 1,\n height: 1\n };\n if (!deepEqual(_hoverTooltipProps, _newProps)) {\n if (_hoverTooltipProps == null) {\n this.irisGrid.setState({\n hoverTooltipProps: _newProps,\n hoverDisplayValue: tooltip\n });\n } else if (this.lastColumn !== gridPoint.column || this.lastRow !== gridPoint.row) {\n this.irisGrid.setState({\n hoverTooltipProps: null\n }, () => this.irisGrid.setState({\n hoverTooltipProps: _newProps,\n hoverDisplayValue: tooltip\n }));\n }\n }\n } else {\n this.destroyTooltip();\n }\n this.lastColumn = gridPoint.column;\n this.lastRow = gridPoint.row;\n return this.setCursor(gridPoint, grid);\n }\n onDown() {\n this.destroyTooltip();\n return false;\n }\n onContextMenu() {\n this.destroyTooltip();\n return false;\n }\n onWheel() {\n this.destroyTooltip();\n return false;\n }\n onLeave() {\n this.destroyTooltip();\n return false;\n }\n}\nexport default IrisGridTokenMouseHandler;\n//# sourceMappingURL=IrisGridTokenMouseHandler.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 { GridMouseHandler } from '@deephaven/grid';\nimport { isPartitionedGridModel } from \"../PartitionedGridModel.js\";\n/**\n * Handles sending data selected via double click\n */\nclass IrisGridPartitionedTableMouseHandler extends GridMouseHandler {\n constructor(irisGrid) {\n super(878);\n _defineProperty(this, \"irisGrid\", void 0);\n this.irisGrid = irisGrid;\n }\n onDoubleClick(gridPoint, grid) {\n var {\n column,\n row\n } = gridPoint;\n var {\n irisGrid\n } = this;\n var {\n model\n } = irisGrid.props;\n var {\n partitionConfig\n } = irisGrid.state;\n if (row == null || column == null || !isPartitionedGridModel(model) || partitionConfig == null || partitionConfig.mode !== 'keys') {\n return false;\n }\n this.irisGrid.selectPartitionKeyFromTable(row);\n return true;\n }\n}\nexport default IrisGridPartitionedTableMouseHandler;\n//# sourceMappingURL=IrisGridPartitionedTableMouseHandler.js.map","/**\n * Interface for tree nodes used in rebalancing\n */\n\n/**\n * Helper function to rebalance a tree according to the following rules:\n * - Each node value must equal the sum of its immediate children with adjustments\n * - Can only add to nodes, no subtraction\n * - Excess value from parents is distributed evenly among all children\n * - Minimize the sum of all leaf nodes\n *\n * The function does not mutate the tree. Instead, it returns an adjustments map\n * indicating how much to add to each node to achieve the balanced state.\n *\n * @example\n * Tree structure:\n * root(20)\n * / \\\n * a(4) b(6)\n * / \\ / \\\n * c(5) d(1) e(2) f(3)\n *\n * After rebalancing, the adjusted values would be:\n * root(20)\n * / \\\n * a(10) b(10)\n * / \\ / \\\n * c(7) d(3) e(4.5) f(5.5)\n *\n * The resulting adjustments map:\n * {\n * \"root\": 0,\n * \"a\": 6,\n * \"b\": 4,\n * \"c\": 2,\n * \"d\": 2,\n * \"e\": 2.5,\n * \"f\": 2.5\n * }\n *\n * @param node The root of the tree to rebalance\n * @returns A map of node names to adjustment values\n */\nexport function rebalanceTree(node) {\n var adjustments = new Map();\n processNode(node, adjustments);\n return adjustments;\n}\nfunction isLeaf(node) {\n return node.children.length === 0;\n}\n\n/**\n * Add a value to a subtree, distributing it evenly among all nodes\n * @param node Current node to process\n * @param amount Amount to add to this subtree\n * @param adjustments Mutable map to store adjustments\n */\nfunction addToSubtree(node, amount, adjustments) {\n var _adjustments$get;\n // Add the amount to this node's adjustment\n var prevAdjustment = (_adjustments$get = adjustments.get(node.name)) !== null && _adjustments$get !== void 0 ? _adjustments$get : 0;\n adjustments.set(node.name, prevAdjustment + amount);\n if (!isLeaf(node)) {\n // Distribute the addition evenly among children\n var additionPerChild = amount / node.children.length;\n node.children.forEach(child => addToSubtree(child, additionPerChild, adjustments));\n }\n}\n\n/**\n * Calculate adjustments map for a subtree\n * @param node Node to process\n * @param adjustments Mutable map to store adjustments\n * @returns The adjusted value for the current node\n */\nfunction processNode(node, adjustments) {\n if (isLeaf(node)) {\n return node.value;\n }\n\n // Recursively process children first and get their adjusted values\n var childrenAdjustedValues = node.children.map(child => processNode(child, adjustments));\n\n // Calculate the adjusted sum of children\n var adjustedChildrenSum = childrenAdjustedValues.reduce((sum, value) => sum + value, 0);\n\n // Ensure this node's value is at least the sum of children\n if (node.value <= adjustedChildrenSum) {\n var _adjustments$get2;\n var adjustment = adjustedChildrenSum - node.value;\n var prevAdjustment = (_adjustments$get2 = adjustments.get(node.name)) !== null && _adjustments$get2 !== void 0 ? _adjustments$get2 : 0;\n adjustments.set(node.name, prevAdjustment + adjustment);\n return adjustedChildrenSum;\n }\n\n // Node value exceeds children sum, distribute the excess evenly among all children\n var additionPerChild = (node.value - adjustedChildrenSum) / node.children.length;\n node.children.forEach(child => {\n addToSubtree(child, additionPerChild, adjustments);\n });\n return node.value;\n}\nexport default rebalanceTree;\n//# sourceMappingURL=TreeRebalanceUtil.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 deepEqual from 'fast-deep-equal';\nimport memoizeOne from 'memoize-one';\nimport { GridMetricCalculator, trimMap, isExpandableColumnGridModel } from '@deephaven/grid';\nimport { assertNotNull } from '@deephaven/utils';\nimport { rebalanceTree } from \"./TreeRebalanceUtil.js\";\nexport class IrisGridMetricCalculator extends GridMetricCalculator {\n constructor() {\n super(...arguments);\n // Column widths by name to keep track of columns going in and out of viewport\n _defineProperty(this, \"userColumnWidthsByName\", new Map());\n // Cached model column names to detect when the column width map update is necessary\n _defineProperty(this, \"cachedModelColumnNames\", void 0);\n _defineProperty(this, \"cachedHeaderGroupNames\", void 0);\n // Cached padding maps for column header groups\n _defineProperty(this, \"cachedPaddingMaps\", new Map());\n _defineProperty(this, \"getCachedCurrentModelColumnNames\", memoizeOne(columns => columns.map(col => col.name)));\n _defineProperty(this, \"getCachedCurrentHeaderGroupNames\", memoizeOne(columnHeaderGroups => columnHeaderGroups.map(group => group.name)));\n }\n static getModelColumnRoot(model, modelColumn) {\n var depth = 0;\n var current = model.getColumnHeaderParentGroup(modelColumn, depth);\n var root = current;\n while (current != null) {\n root = current;\n depth += 1;\n current = model.getColumnHeaderParentGroup(modelColumn, depth);\n }\n return root;\n }\n\n /**\n * Builds a TreeNode from the model header groups and columns for padding calculation\n * @param name The name of the root node to build the tree for\n * @param model The IrisGridModel containing columns and header groups\n * @param getLeafValue Function to get the value for leaf nodes (columns)\n * @param getGroupValue Function to get the value for group nodes (header groups)\n * @returns The TreeNode structure\n */\n static buildNode(name, model, getLeafValue, getGroupValue) {\n var _getLeafValue;\n var headerGroup = model.columnHeaderGroupMap.get(name);\n if (headerGroup) {\n var value = getGroupValue(name);\n var children = headerGroup.children.map(childName => IrisGridMetricCalculator.buildNode(childName, model, getLeafValue, getGroupValue));\n\n // Group node\n return {\n name,\n children,\n value\n };\n }\n\n // Leaf node\n return {\n name,\n children: [],\n value: (_getLeafValue = getLeafValue(name)) !== null && _getLeafValue !== void 0 ? _getLeafValue : 0\n };\n }\n\n /**\n * Gets the header padding for a specific column based on the widths of its group tree nodes.\n * We only adjust paddings on the column, because the group widths are automatically sized to fit their children.\n * @param state The current IrisGridMetricState\n * @param modelColumn The column index to get the padding for\n * @param maxColumnWidth Maximum allowed column width, applies only to leaf nodes\n * @returns The calculated header padding for the column\n */\n getHeaderPadding(state, modelColumn, maxColumnWidth) {\n var _paddingMap$get;\n var {\n model\n } = state;\n var root = IrisGridMetricCalculator.getModelColumnRoot(model, modelColumn);\n if (root == null) {\n return 0;\n }\n var cachedMap = this.cachedPaddingMaps.get(root.name);\n if (cachedMap != null) {\n var _cachedMap$get;\n return (_cachedMap$get = cachedMap.get(model.columns[modelColumn].name)) !== null && _cachedMap$get !== void 0 ? _cachedMap$get : 0;\n }\n var groupTree = IrisGridMetricCalculator.buildNode(root.name, model, name => {\n var columnIndex = model.getColumnIndexByName(name);\n assertNotNull(columnIndex, \"\".concat(name, \" not found in model columns\"));\n return super.calculateColumnHeaderWidth(columnIndex, state, maxColumnWidth);\n }, name => {\n var group = model.columnHeaderGroupMap.get(name);\n assertNotNull(group, \"\".concat(name, \" not found in columnHeaderGroupMap\"));\n return this.getColumnHeaderGroupWidth(group.childIndexes[0], group.depth, state, maxColumnWidth);\n });\n var paddingMap = rebalanceTree(groupTree);\n this.cachedPaddingMaps.set(root.name, paddingMap);\n return (_paddingMap$get = paddingMap.get(model.columns[modelColumn].name)) !== null && _paddingMap$get !== void 0 ? _paddingMap$get : 0;\n }\n updateCalculatedColumnWidths(model) {\n assertNotNull(this.cachedModelColumnNames);\n var calculatedColumnWidthsByName = new Map();\n this.cachedModelColumnNames.forEach((name, index) => {\n var prevColumnWidth = this.calculatedColumnWidths.get(index);\n if (prevColumnWidth != null) {\n calculatedColumnWidthsByName.set(name, prevColumnWidth);\n }\n });\n this.resetCalculatedColumnWidths();\n calculatedColumnWidthsByName.forEach((width, name) => {\n var index = model.getColumnIndexByName(name);\n if (index != null) {\n this.calculatedColumnWidths.set(index, width);\n }\n });\n trimMap(this.calculatedColumnWidths);\n }\n\n /**\n * Updates the user column widths based on the current model state\n * @param model The current IrisGridModel\n */\n updateUserColumnWidths(model) {\n this.userColumnWidths = new Map();\n this.userColumnWidthsByName.forEach((width, name) => {\n var modelIndex = model.getColumnIndexByName(name);\n if (modelIndex != null) {\n super.setColumnWidth(modelIndex, width);\n }\n });\n }\n\n /**\n * Updates the user and calculated column widths if the model columns have changed\n * @param model The current IrisGridModel\n */\n updateColumnWidthsIfNecessary(model) {\n // Comparing model.columns references wouldn't work here because\n // the reference can change in the model without the actual column definitions changing\n var modelColumnNames = this.getCachedCurrentModelColumnNames(model.columns);\n if (this.cachedModelColumnNames != null && this.cachedModelColumnNames !== modelColumnNames && !deepEqual(modelColumnNames, this.cachedModelColumnNames)) {\n // Preserve column widths when possible to minimize visual shifts in the grid layout\n this.updateCalculatedColumnWidths(model);\n this.updateUserColumnWidths(model);\n this.cachedPaddingMaps.clear();\n }\n this.cachedModelColumnNames = modelColumnNames;\n if (this.cachedHeaderGroupNames != null && !deepEqual(this.getCachedCurrentHeaderGroupNames(model.columnHeaderGroups), this.cachedHeaderGroupNames)) {\n this.resetCalculatedColumnWidths();\n }\n this.cachedHeaderGroupNames = model.columnHeaderGroups.map(group => group.name);\n }\n resetCalculatedHeaderGroupWidths() {\n this.cachedPaddingMaps.clear();\n }\n resetCalculatedColumnWidths() {\n super.resetCalculatedColumnWidths();\n this.resetCalculatedHeaderGroupWidths();\n }\n getGridY(state) {\n // The state here seems to be a GridMetricState with stateOverrides passed from IrisGrid in the props,\n // not guaranteed to be IrisGridMetricState\n var gridY = super.getGridY(state);\n var {\n isFilterBarShown,\n theme,\n advancedFilters,\n quickFilters,\n sorts,\n reverse\n } = state;\n if (isFilterBarShown) {\n gridY += theme.filterBarHeight;\n } else if (quickFilters != null && quickFilters.size > 0 || advancedFilters != null && advancedFilters.size > 0) {\n gridY += theme.filterBarCollapsedHeight;\n }\n if (reverse && sorts != null && sorts.length > 0) {\n gridY += theme.reverseHeaderBarHeight;\n }\n return gridY;\n }\n\n /**\n * Gets the metrics for the current state. This method has to be called before setColumnSize or resetColumnSize.\n * @param state The current IrisGridMetricState\n * @returns The metrics for the current state\n */\n getMetrics(state) {\n var {\n model\n } = state;\n // Update column widths if columns in the cached model don't match the current model passed in the state\n this.updateColumnWidthsIfNecessary(model);\n return super.getMetrics(state);\n }\n\n /**\n * Sets the width for a specific column by index\n * @param column The index of the column to set\n * @param size The new width for the column\n */\n setColumnWidth(column, size) {\n super.setColumnWidth(column, size);\n assertNotNull(this.cachedModelColumnNames, 'setColumnWidth should be called after getMetrics');\n var name = this.cachedModelColumnNames[column];\n if (name != null) {\n this.userColumnWidthsByName.set(name, size);\n trimMap(this.userColumnWidthsByName);\n }\n }\n\n /**\n * Resets the width for a specific column by index\n * @param column The index of the column to reset\n */\n resetColumnWidth(column) {\n super.resetColumnWidth(column);\n assertNotNull(this.cachedModelColumnNames, 'resetColumnWidth should be called after getMetrics');\n var name = this.cachedModelColumnNames[column];\n if (name != null) {\n this.userColumnWidthsByName.delete(name);\n }\n }\n\n /**\n * Resets all user column widths\n */\n resetAllColumnWidths() {\n this.userColumnWidths = new Map();\n this.userColumnWidthsByName = new Map();\n }\n\n /**\n * Gets the user column widths\n * @returns A map of user column widths\n */\n getUserColumnWidths() {\n // This might return stale data if getMetrics hasn't been called\n return this.userColumnWidths;\n }\n getCalculatedColumnWidths() {\n return this.calculatedColumnWidths;\n }\n\n /**\n * Calculate the width of the specified column's header\n * @param modelColumn ModelIndex of the column to get the header width for\n * @param state The grid metric state\n * @param maxColumnWidth Maximum allowed column width, applies only to leaf nodes\n * @returns The calculated width of the column header\n */\n calculateColumnHeaderWidth(modelColumn, state, maxColumnWidth) {\n var {\n model\n } = state;\n var parent = model.getColumnHeaderParentGroup(modelColumn, 0);\n var baseHeaderWidth = super.calculateColumnHeaderWidth(modelColumn, state, maxColumnWidth);\n\n // Column header with no grouping, use base implementation\n if (parent == null) {\n return baseHeaderWidth;\n }\n var headerPadding = this.getHeaderPadding(state, modelColumn, maxColumnWidth);\n return baseHeaderWidth + headerPadding;\n }\n\n // Original width of column header group content, including title, padding, icons, etc.\n // Does not include any rebalancing adjustments\n getColumnHeaderGroupWidth(modelColumn, depth, state, maxColumnWidth) {\n var {\n model,\n theme,\n context\n } = state;\n var {\n headerHorizontalPadding,\n headerFont\n } = theme;\n this.calculateLowerFontWidth(headerFont, context);\n this.calculateUpperFontWidth(headerFont, context);\n var padding = headerHorizontalPadding * 2;\n var headerText = model.textForColumnHeader(modelColumn, depth);\n var isColumnExpandable = isExpandableColumnGridModel(model) && model.isColumnExpandable(modelColumn);\n var expandCollapseIconWidth = isColumnExpandable ? theme.iconSize : 0;\n if (headerText !== undefined && headerText !== '') {\n return this.calculateTextWidth(context, headerFont, headerText, maxColumnWidth - padding) + padding + expandCollapseIconWidth;\n }\n return padding + expandCollapseIconWidth;\n }\n\n /**\n * Get metrics for positioning the filter bar input field.\n * @param index The visible index of the column to get the filter box coordinates for\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns Coordinates for the filter input field, or null if positioning cannot be calculated\n */\n // eslint-disable-next-line class-methods-use-this\n getFilterInputCoordinates(index, state, metrics) {\n // Only handle standard columns (>= 0) in the base implementation\n // Plugins can override to handle special columns (e.g., negative indices)\n if (index < 0) {\n return null;\n }\n var {\n theme\n } = state;\n var {\n filterBarHeight = 0\n } = theme;\n var {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths\n } = metrics;\n var columnX = allColumnXs.get(index);\n var columnWidth = allColumnWidths.get(index);\n if (columnX == null || columnWidth == null ||\n // Don't show the filter box for invisible columns\n columnWidth === 0 || filterBarHeight === 0) {\n return null;\n }\n return {\n x: gridX + columnX,\n y: gridY - filterBarHeight,\n width: columnWidth + 1,\n // cover right border\n height: filterBarHeight - 1 // remove bottom border\n };\n }\n\n /**\n * Calculate the new left index to bring the given column into view.\n * @param column The column that should be scrolled into view\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns The left column index to scroll to, or null if no scroll is needed\n */\n getScrollLeftForColumn(column, state, metrics) {\n var {\n left,\n rightVisible,\n lastLeft\n } = metrics;\n if (column < 0) {\n return null;\n }\n if (column < left) {\n // Column is to the left of visible area\n return column;\n }\n if (rightVisible < column) {\n // Column is to the right of visible area\n var newLeft = this.getLastLeft(state, column, this.getVisibleWidth(state));\n return Math.min(newLeft, lastLeft);\n }\n\n // Column is already visible, no scroll needed\n return null;\n }\n\n /**\n * Get the coordinates for the advanced filter button positioned in the filter bar.\n * @param index The column index\n * @param state The current IrisGridMetricState\n * @param metrics The grid metrics\n * @returns Coordinates for the advanced filter button, or null if it should not be shown\n */\n getAdvancedFilterButtonCoordinates(index, state, metrics) {\n var filterBoxCoordinates = this.getFilterInputCoordinates(index, state, metrics);\n if (filterBoxCoordinates == null) {\n return null;\n }\n var {\n x,\n y,\n width\n } = filterBoxCoordinates;\n return {\n x: x + width - 25,\n // Right edge of filter box (24px button + 1px for border)\n y: y + 2 // 2px top margin for the button\n };\n }\n}\nexport default IrisGridMetricCalculator;\n//# sourceMappingURL=IrisGridMetricCalculator.js.map","import { memoizeClear } from '@deephaven/grid';\nimport { vsTriangleDown, vsTriangleRight, vsTriangleUp, vsLinkExternal } from '@deephaven/icons';\nvar iconMap = new Map([['sortUp', vsTriangleUp], ['sortDown', vsTriangleDown], ['caretDown', vsTriangleDown], ['caretRight', vsTriangleRight], ['cellOverflow', vsLinkExternal]]);\nvar makeIcon = memoizeClear((name, size) => {\n var faIcon = iconMap.get(name);\n if (faIcon === undefined) {\n throw new Error('Icon is undefined');\n }\n var path = Array.isArray(faIcon.icon[4]) ? faIcon.icon[4][0] : faIcon.icon[4];\n var icon = new Path2D(path);\n var scaledIcon = new Path2D();\n var scaleMatrix = {\n a: size / faIcon.icon[0],\n d: size / faIcon.icon[1]\n };\n scaledIcon.addPath(icon, scaleMatrix);\n return scaledIcon;\n}, {\n max: 1000\n});\nexport function getIcon(name, size) {\n return makeIcon(name, size);\n}\n//# sourceMappingURL=IrisGridIcons.js.map","import { getIcon } from \"./IrisGridIcons.js\";\nclass IrisGridCellRendererUtils {\n static drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n context.save();\n var {\n theme\n } = state;\n var {\n iconSize\n } = theme;\n var {\n x1,\n x2,\n y1,\n y2\n } = treeBox;\n var markerIcon = isExpanded ? getIcon('caretDown', iconSize) : getIcon('caretRight', iconSize);\n var iconX = columnX + (x1 + x2) / 2 - iconSize / 2; // Midpoint of the tree box minus half the icon width\n var iconY = rowY + (y2 - y1 - iconSize) / 2; // y2 - y1 is effectively rowHeight\n\n context.fillStyle = color;\n context.textAlign = 'center';\n context.translate(iconX, iconY);\n context.fill(markerIcon);\n context.restore();\n }\n}\nexport default IrisGridCellRendererUtils;\n//# sourceMappingURL=IrisGridCellRendererUtils.js.map","/* eslint-disable class-methods-use-this */\nimport { getOrThrow, GridUtils, TextCellRenderer } from '@deephaven/grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport IrisGridCellRendererUtils from \"./IrisGridCellRendererUtils.js\";\nclass IrisGridTextCellRenderer extends TextCellRenderer {\n drawCellContent(context, state, column, row) {\n var _model$columns$modelC;\n var {\n metrics,\n model\n } = state;\n var {\n modelColumns,\n modelRows\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) {\n return;\n }\n var value = model.valueForCell(modelColumn, modelRow);\n if (TableUtils.isTextType((_model$columns$modelC = model.columns[modelColumn]) === null || _model$columns$modelC === void 0 ? void 0 : _model$columns$modelC.type)) {\n if (value === null || value === '') {\n var originalFont = context.font;\n context.font = \"italic \".concat(originalFont);\n super.drawCellContent(context, state, column, row);\n context.font = originalFont;\n return;\n }\n }\n super.drawCellContent(context, state, column, row);\n }\n\n // This will shrink the size the text may take when the overflow button is rendered\n // The text will truncate to a smaller width and won't overlap the button\n getTextRenderMetrics(state, column, row) {\n var textMetrics = GridUtils.getTextRenderMetrics(state, column, row);\n var {\n mouseX,\n mouseY,\n metrics,\n theme\n } = state;\n if (mouseX == null || mouseY == null) {\n return textMetrics;\n }\n var {\n column: mouseColumn,\n row: mouseRow\n } = GridUtils.getGridPointFromXY(mouseX, mouseY, metrics);\n if (column === mouseColumn && row === mouseRow) {\n var {\n left\n } = this.getCellOverflowButtonPosition(mouseX, mouseY, metrics, theme);\n if (this.shouldRenderOverflowButton(state) && left != null) {\n textMetrics.width = left - metrics.gridX - textMetrics.x;\n }\n }\n return textMetrics;\n }\n getCellOverflowButtonPosition(mouseX, mouseY, metrics, theme) {\n var NULL_POSITION = {\n left: null,\n top: null,\n width: null,\n height: null\n };\n if (mouseX == null || mouseY == null || metrics == null) {\n return NULL_POSITION;\n }\n var {\n rowHeight,\n columnWidth,\n left,\n top\n } = GridUtils.getCellInfoFromXY(mouseX, mouseY, metrics);\n if (left == null || columnWidth == null || top == null) {\n return NULL_POSITION;\n }\n var {\n width: gridWidth,\n verticalBarWidth\n } = metrics;\n var {\n cellHorizontalPadding,\n iconSize\n } = theme;\n var width = iconSize + 2 * cellHorizontalPadding;\n var height = rowHeight;\n // Right edge of column or of visible grid, whichever is smaller\n var right = Math.min(metrics.gridX + left + columnWidth, gridWidth - verticalBarWidth);\n var buttonLeft = right - width;\n var buttonTop = metrics.gridY + top;\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height\n };\n }\n shouldRenderOverflowButton(state) {\n var _model$textForCell;\n var {\n context,\n mouseX,\n mouseY,\n metrics,\n model,\n theme\n } = state;\n if (mouseX == null || mouseY == null) {\n return false;\n }\n var {\n row,\n column,\n modelRow,\n modelColumn\n } = GridUtils.getCellInfoFromXY(mouseX, mouseY, metrics);\n if (row == null || column == null || modelRow == null || modelColumn == null || !TableUtils.isStringType(model.columns[modelColumn].type)) {\n return false;\n }\n var text = (_model$textForCell = model.textForCell(modelColumn, modelRow)) !== null && _model$textForCell !== void 0 ? _model$textForCell : '';\n var {\n width: textWidth\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var fontWidthLower = metrics.fontWidthsLower.get(theme.font);\n var fontWidthUpper = metrics.fontWidthsUpper.get(theme.font);\n context.save();\n context.font = theme.font;\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, model.truncationCharForCell(modelColumn, modelRow));\n context.restore();\n return text !== '' && truncatedText !== text;\n }\n drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n IrisGridCellRendererUtils.drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded);\n }\n}\nexport default IrisGridTextCellRenderer;\n//# sourceMappingURL=IrisGridTextCellRenderer.js.map","/* eslint-disable class-methods-use-this */\nimport { DataBarCellRenderer } from '@deephaven/grid';\nimport IrisGridCellRendererUtils from \"./IrisGridCellRendererUtils.js\";\nclass IrisGridDataBarCellRenderer extends DataBarCellRenderer {\n drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n IrisGridCellRendererUtils.drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded);\n }\n}\nexport default IrisGridDataBarCellRenderer;\n//# sourceMappingURL=IrisGridDataBarCellRenderer.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); }\n/* eslint class-methods-use-this: \"off\" */\nimport { GridRenderer, GridUtils } from '@deephaven/grid';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { assertNotNull, getOrThrow } from '@deephaven/utils';\nimport IrisGridTextCellRenderer from \"./IrisGridTextCellRenderer.js\";\nimport IrisGridDataBarCellRenderer from \"./IrisGridDataBarCellRenderer.js\";\nimport { getIcon } from \"./IrisGridIcons.js\";\nvar ICON_NAMES = Object.freeze({\n SORT_UP: 'sortUp',\n SORT_DOWN: 'sortDown',\n CARET_DOWN: 'caretDown',\n CARET_RIGHT: 'caretRight',\n CELL_OVERFLOW: 'cellOverflow'\n});\nvar EXPAND_ICON_SIZE = 10;\n/**\n * Handles rendering some of the Iris specific features, such as sorting icons, sort bar display\n * */\nexport class IrisGridRenderer extends GridRenderer {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"textCellRenderer\", new IrisGridTextCellRenderer());\n _defineProperty(this, \"dataBarCellRenderer\", new IrisGridDataBarCellRenderer());\n }\n static isFilterValid(advancedFilter, quickFilter) {\n var isAdvancedFilterValid = advancedFilter == null || advancedFilter.filter != null;\n var isQuickFilterValid = quickFilter == null || quickFilter.filter != null;\n return isAdvancedFilterValid && isQuickFilterValid;\n }\n getSortIcon(sort, size) {\n if (!sort) {\n return null;\n }\n if (sort.direction === TableUtils.sortDirection.ascending) {\n return getIcon(ICON_NAMES.SORT_UP, size);\n }\n if (sort.direction === TableUtils.sortDirection.descending) {\n return getIcon(ICON_NAMES.SORT_DOWN, size);\n }\n return null;\n }\n drawCanvas(state) {\n super.drawCanvas(state);\n this.drawScrim(state);\n }\n drawGrid(context, state) {\n super.drawGrid(context, state);\n this.drawCellOverflowButton(state);\n }\n drawGridLines(context, state) {\n super.drawGridLines(context, state);\n this.drawGroupedColumnLine(context, state);\n this.drawPendingRowLine(context, state);\n }\n drawCellContent(context, state, column, row) {\n var {\n metrics,\n model\n } = state;\n var {\n modelColumns,\n modelRows\n } = metrics;\n var modelColumn = modelColumns.get(column);\n var modelRow = getOrThrow(modelRows, row);\n if (modelColumn === undefined) {\n return;\n }\n var renderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n getCellOverflowButtonPosition(_ref) {\n var {\n mouseX,\n mouseY,\n metrics,\n theme\n } = _ref;\n return this.textCellRenderer.getCellOverflowButtonPosition(mouseX, mouseY, metrics, theme);\n }\n shouldRenderOverflowButton(state) {\n return this.textCellRenderer.shouldRenderOverflowButton(state);\n }\n drawCellOverflowButton(state) {\n var {\n context,\n mouseX,\n mouseY,\n theme\n } = state;\n if (mouseX == null || mouseY == null) return;\n if (!this.shouldRenderOverflowButton(state)) {\n return;\n }\n var {\n left: buttonLeft,\n top: buttonTop,\n width: buttonWidth,\n height: buttonHeight\n } = this.getCellOverflowButtonPosition(state);\n var {\n cellHorizontalPadding,\n overflowButtonColor,\n overflowButtonHoverColor,\n iconSize\n } = theme;\n context.save();\n if (overflowButtonHoverColor != null && buttonLeft != null && buttonWidth != null && buttonTop != null && buttonHeight != null && mouseX >= buttonLeft && mouseX <= buttonLeft + buttonWidth && mouseY >= buttonTop && mouseY <= buttonTop + buttonHeight) {\n context.fillStyle = overflowButtonHoverColor;\n } else if (overflowButtonColor != null) {\n context.fillStyle = overflowButtonColor;\n }\n var icon = getIcon(ICON_NAMES.CELL_OVERFLOW, iconSize);\n if (buttonLeft != null && buttonTop != null && buttonHeight != null) {\n context.translate(buttonLeft + cellHorizontalPadding, buttonTop + (buttonHeight - iconSize) / 2);\n }\n context.fill(icon);\n context.restore();\n }\n drawGroupedColumnLine(context, state) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n groupedColumns\n } = model;\n var {\n maxY,\n allColumnWidths,\n allColumnXs\n } = metrics;\n if (groupedColumns.length === 0 || theme.groupedColumnDividerColor == null) {\n return;\n }\n\n // This assumes that the engine puts the grouped columns at the start of the\n // model, so model and visible index match for grouped columns. If we ever\n // add freeze support for tree tables or allow moving the grouped columns,\n // this assumption may no longer hold true. If such a change occurs, we'll\n // need to revisit this since a single vertical divider may no longer make\n // sense.\n var lastVisibleGroupColumnIndex = groupedColumns.length - 1;\n var columnX = allColumnXs.get(lastVisibleGroupColumnIndex);\n var columnWidth = allColumnWidths.get(lastVisibleGroupColumnIndex);\n if (columnX == null || columnWidth == null) {\n return;\n }\n var x = columnX + columnWidth + 0.5;\n context.strokeStyle = theme.groupedColumnDividerColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n context.stroke();\n }\n drawPendingRowLine(context, state) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n allRowYs,\n maxX\n } = metrics;\n var {\n pendingRowCount\n } = model;\n if (pendingRowCount <= 0) {\n return;\n }\n var firstPendingRow = model.rowCount - model.pendingRowCount - model.floatingBottomRowCount;\n var y = allRowYs.get(firstPendingRow);\n if (y == null) {\n return;\n }\n y -= 0.5;\n context.save();\n context.setLineDash([4, 2]);\n context.strokeStyle = theme.pendingTextColor;\n context.lineWidth = 1;\n context.beginPath();\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n context.stroke();\n context.restore();\n }\n drawMouseColumnHover(context, state) {\n var {\n theme,\n metrics,\n hoverSelectColumn\n } = state;\n if (hoverSelectColumn == null || theme.linkerColumnHoverBackgroundColor == null) {\n return;\n }\n var {\n allColumnWidths,\n allColumnXs,\n maxY\n } = metrics;\n var x = getOrThrow(allColumnXs, hoverSelectColumn);\n var columnWidth = getOrThrow(allColumnWidths, hoverSelectColumn);\n context.fillStyle = theme.linkerColumnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n drawMouseRowHover(context, state) {\n var {\n isSelectingColumn\n } = state;\n if (!isSelectingColumn) {\n super.drawMouseRowHover(context, state);\n }\n }\n drawScrim(state) {\n var {\n context,\n loadingScrimProgress,\n metrics,\n theme\n } = state;\n if (loadingScrimProgress == null) {\n return;\n }\n var {\n width,\n height,\n gridY\n } = metrics;\n var {\n scrimBlurSize,\n scrimColor\n } = theme;\n context.save();\n\n // Use global composite so we can change the underlying layer to grayscale\n context.globalCompositeOperation = 'color';\n context.filter = \"blur(\".concat(scrimBlurSize, \"px)\");\n if (scrimColor != null) {\n context.fillStyle = scrimColor;\n }\n\n // Clip the path so the top edge is hard edge, bottom edge is soft/blurry\n context.beginPath();\n context.rect(0, gridY, width, height - gridY);\n context.clip();\n\n // Extend the edges beyond the clip area so they're hard edges\n context.fillRect(-scrimBlurSize, -scrimBlurSize + gridY, scrimBlurSize * 2 + width, (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress);\n\n // add an overlay of the scrim color to darken things a bit\n context.globalCompositeOperation = 'source-over';\n context.filter = \"blur(\".concat(scrimBlurSize, \"px) opacity(15%)\");\n context.fillRect(-scrimBlurSize, -scrimBlurSize + gridY, scrimBlurSize * 2 + width, (scrimBlurSize * 2 + (height - gridY)) * loadingScrimProgress);\n context.restore();\n }\n drawColumnHeaders(context, state) {\n super.drawColumnHeaders(context, state);\n var {\n theme,\n metrics,\n model,\n reverse\n } = state;\n var {\n columnHeaderHeight\n } = metrics;\n this.drawFilterHeaders(context, state);\n if (columnHeaderHeight <= 0) {\n return;\n }\n var {\n sort\n } = model;\n // if there is only one sort bar, it is interior to the header to save space\n if (sort.length === 1) {\n var color;\n if (reverse) {\n color = theme.headerReverseBarColor;\n } else {\n color = theme.headerSortBarColor;\n }\n this.drawHeaderBar(context, state, color, reverse ? theme.reverseHeaderBarHeight : theme.sortHeaderBarHeight);\n } else if (sort.length > 1) {\n // if there's multiple bars, the sort is interior to header\n // and the reverse claims space in the table\n if (reverse) {\n this.drawHeaderBar(context, state, theme.headerReverseBarColor, theme.reverseHeaderBarHeight, false);\n }\n this.drawHeaderBar(context, state, theme.headerSortBarColor, theme.sortHeaderBarHeight);\n }\n }\n drawHeaderBar(context, state, color, barHeight) {\n var interior = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var {\n theme,\n metrics,\n model\n } = state;\n var {\n columnHeaderHeight,\n width\n } = metrics;\n // Draw casing with 1 pixel above and below the bar,\n // 1px falls on the existing split between grid/headers\n // so don't need to be accounnted for in math elsewhere\n var offset = 0;\n if (!interior) {\n offset = barHeight;\n }\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(0, model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 2 + offset, width, barHeight + 2);\n context.fillStyle = color;\n context.fillRect(0, model.columnHeaderMaxDepth * columnHeaderHeight - barHeight - 1 + offset, width, barHeight);\n }\n drawColumnHeadersAtDepth(context, state, range, boundsProp, depth) {\n var {\n metrics,\n model,\n isMenuShown,\n theme\n } = state;\n var {\n columnHeaderMaxDepth\n } = model;\n var {\n width\n } = metrics;\n var {\n columnHeaderHeight\n } = theme;\n var bounds = _objectSpread(_objectSpread({}, boundsProp), {}, {\n maxX: depth === columnHeaderMaxDepth - 1 && boundsProp.maxX === width ? width - (isMenuShown ? 0 : columnHeaderHeight) // Account for the menu button\n : boundsProp.maxX\n });\n super.drawColumnHeadersAtDepth(context, state, range, bounds, depth);\n }\n drawColumnHeaderAtIndex(context, state, index, bounds) {\n var _model$columns$modelC;\n super.drawColumnHeaderAtIndex(context, state, index, bounds);\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX,\n columnHeaderHeight\n } = metrics;\n var {\n headerHorizontalPadding,\n iconSize: themeIconSize\n } = theme;\n var iconSize = Math.round(themeIconSize * 0.75); // The vsTriangle icons are a bit bigger than we want\n var columnWidth = getOrThrow(allColumnWidths, index, 0);\n var columnX = getOrThrow(allColumnXs, index) + gridX;\n var modelColumn = modelColumns.get(index);\n if (modelColumn == null) {\n return;\n }\n var columnName = (_model$columns$modelC = model.columns[modelColumn]) === null || _model$columns$modelC === void 0 ? void 0 : _model$columns$modelC.name;\n if (columnName == null) {\n return;\n }\n var sort = TableUtils.getSortForColumn(model.sort, columnName);\n if (!sort) {\n return;\n }\n var icon = this.getSortIcon(sort, iconSize);\n if (!icon) {\n return;\n }\n var text = model.textForColumnHeader(modelColumn);\n if (text === undefined) {\n return;\n }\n var textWidth = this.getCachedHeaderWidth(context, text);\n var textRight = gridX + columnX + textWidth + headerHorizontalPadding;\n var {\n maxX\n } = bounds;\n maxX -= headerHorizontalPadding; // Right visible edge of the headers\n // Right edge of the column. The icon has its own horizontal padding\n var defaultX = gridX + columnX + columnWidth - iconSize;\n\n // If the text is partially off the screen, put the icon to the right of the text\n // else put it at the right edge of the column/grid (whichever is smaller)\n var x = textRight > maxX ? textRight + 1 : Math.min(maxX, defaultX);\n var y = (columnHeaderHeight - iconSize) * 0.5;\n context.save();\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n context.fillStyle = theme.headerSortBarColor;\n context.translate(x, y);\n context.fill(icon);\n context.restore();\n }\n drawFilterHeaders(context, state) {\n var {\n isFilterBarShown,\n quickFilters,\n advancedFilters\n } = state;\n if (isFilterBarShown) {\n this.drawExpandedFilterHeaders(context, state);\n } else if (quickFilters != null && quickFilters.size > 0 || advancedFilters != null && advancedFilters.size > 0) {\n this.drawCollapsedFilterHeaders(context, state);\n }\n }\n drawExpandedFilterHeaders(context, state) {\n var {\n metrics,\n model,\n theme,\n quickFilters,\n advancedFilters\n } = state;\n var {\n filterBarHeight\n } = theme;\n if (filterBarHeight <= 0) {\n return;\n }\n var {\n gridX,\n gridY,\n maxX,\n modelColumns,\n visibleColumns,\n allColumnWidths,\n allColumnXs\n } = metrics;\n var columnHeaderHeight = gridY - filterBarHeight;\n context.save();\n context.font = theme.filterBarFont;\n context.textAlign = 'left';\n if (quickFilters != null && quickFilters.size > 0 || advancedFilters != null && advancedFilters.size > 0) {\n // fill style if a fiter is set on any column\n context.fillStyle = theme.filterBarExpandedActiveBackgroundColor;\n } else {\n // fill style with no filters set\n context.fillStyle = theme.filterBarExpandedBackgroundColor;\n }\n\n // Draw the background\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarHeight - 1);\n\n // Draw the bottom border\n context.fillStyle = theme.headerBarCasingColor;\n context.fillRect(gridX, columnHeaderHeight + filterBarHeight - 1, maxX, 1);\n\n // Draw the filter input boxes\n var y1 = columnHeaderHeight;\n context.strokeStyle = theme.filterBarSeparatorColor;\n context.beginPath();\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var column = visibleColumns[i];\n var modelColumn = getOrThrow(modelColumns, column);\n var columnX = getOrThrow(allColumnXs, column);\n var columnWidth = getOrThrow(allColumnWidths, column);\n if (model.isFilterable(modelColumn) && columnWidth > 0) {\n var x1 = gridX + (columnX !== null && columnX !== void 0 ? columnX : 0);\n context.rect(x1 + 0.5, y1 + 0.5, columnWidth, filterBarHeight - 2); // 1 for the border, 1 for the casing\n }\n }\n context.stroke();\n for (var _i = 0; _i < visibleColumns.length; _i += 1) {\n var _column = visibleColumns[_i];\n var _columnWidth = getOrThrow(allColumnWidths, _column);\n var _columnX = getOrThrow(allColumnXs, _column);\n var x = _columnX + gridX;\n this.drawExpandedFilterHeader(context, state, _column, x, _columnWidth);\n }\n context.restore();\n }\n drawExpandedFilterHeader(context, state, column, columnX, columnWidth) {\n if (columnWidth <= 0) {\n return;\n }\n var {\n metrics,\n theme,\n quickFilters,\n advancedFilters\n } = state;\n var {\n modelColumns,\n gridY\n } = metrics;\n var {\n filterBarHeight,\n filterBarExpandedActiveCellBackgroundColor,\n filterBarErrorColor,\n filterBarHorizontalPadding,\n headerColor\n } = theme;\n var columnHeaderHeight = gridY - filterBarHeight;\n var modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n var quickFilter = quickFilters.get(modelColumn);\n var advancedFilter = advancedFilters.get(modelColumn);\n if (quickFilter == null && advancedFilter == null) {\n return;\n }\n var text = null;\n if (quickFilter != null) {\n var {\n text: filterText\n } = quickFilter;\n text = filterText;\n if (!text) {\n text = TableUtils.getFilterText(quickFilter.filter);\n }\n if (text != null) {\n var {\n fontWidthsLower,\n fontWidthsUpper\n } = metrics;\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var maxLength = columnWidth - filterBarHorizontalPadding * 2;\n text = this.textCellRenderer.getCachedTruncatedString(context, text, maxLength, fontWidthLower, fontWidthUpper);\n }\n }\n context.save();\n var isFilterValid = IrisGridRenderer.isFilterValid(advancedFilter, quickFilter);\n if (isFilterValid && filterBarExpandedActiveCellBackgroundColor != null) {\n // draw active filter background inside cell\n context.fillStyle = filterBarExpandedActiveCellBackgroundColor;\n context.fillRect(columnX + 1,\n // +1 left border\n columnHeaderHeight + 1,\n // +1 top border\n columnWidth - 1,\n // -1 right border\n filterBarHeight - 3 // -3 top, bottom border and bottom casing\n );\n } else if (filterBarErrorColor != null) {\n // draw error box inside cell\n context.fillStyle = filterBarErrorColor;\n context.lineWidth = 2;\n context.strokeStyle = filterBarErrorColor;\n // Because this is drawn with a strokeRect, we have to add/subtract half the,\n // linewidth from each side to make interior, in addition to accounting for any borders/casings\n var rectLeft = columnX + 2; // 1 for strokeRect, 1 for border\n var rectTop = columnHeaderHeight + 2; // 1 for strokeRect, 1 for border\n var rectWidth = columnWidth - 3; // for 2 border and 1 for strokeRect\n var rectHeight = filterBarHeight - 5; // -2 for strokeRect, -3 for top, bottom border and bottom casing\n context.strokeRect(rectLeft, rectTop, rectWidth, rectHeight);\n }\n if (text != null && text !== '') {\n var textX = columnX + filterBarHorizontalPadding;\n var textY = columnHeaderHeight + filterBarHeight * 0.5 + 1; // + 1 for border\n context.fillStyle = headerColor;\n context.fillText(text, textX, textY);\n }\n context.restore();\n }\n drawCollapsedFilterHeaders(context, state) {\n var {\n metrics,\n theme\n } = state;\n var {\n headerSeparatorColor,\n filterBarCollapsedHeight\n } = theme;\n if (filterBarCollapsedHeight <= 0) {\n return;\n }\n var {\n gridX,\n gridY,\n maxX,\n visibleColumns,\n allColumnWidths,\n allColumnXs\n } = metrics;\n var columnHeaderHeight = gridY - filterBarCollapsedHeight;\n context.save();\n\n // Draw the background of the collapsed filter bar\n context.fillStyle = headerSeparatorColor;\n context.fillRect(gridX, columnHeaderHeight, maxX, filterBarCollapsedHeight);\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var column = visibleColumns[i];\n var columnWidth = allColumnWidths.get(column);\n var columnX = allColumnXs.get(column);\n if (columnX != null && columnWidth != null) {\n var x = columnX + gridX;\n // draw the collapsed cells\n this.drawCollapsedFilterHeader(context, state, column, x, columnWidth);\n }\n }\n context.restore();\n }\n drawCollapsedFilterHeader(context, state, column, columnX, columnWidth) {\n if (columnWidth <= 0) {\n return;\n }\n var {\n metrics,\n theme,\n quickFilters,\n advancedFilters\n } = state;\n var {\n modelColumns,\n gridY\n } = metrics;\n var modelColumn = modelColumns.get(column);\n if (modelColumn === undefined) return;\n var quickFilter = quickFilters.get(modelColumn);\n var advancedFilter = advancedFilters.get(modelColumn);\n var {\n filterBarCollapsedHeight,\n filterBarActiveColor,\n filterBarActiveBackgroundColor,\n filterBarErrorColor\n } = theme;\n context.save();\n var isFilterValid = IrisGridRenderer.isFilterValid(advancedFilter, quickFilter);\n if (filterBarActiveBackgroundColor != null && quickFilter == null && advancedFilter == null) {\n context.fillStyle = filterBarActiveBackgroundColor;\n } else if (filterBarActiveColor != null && isFilterValid) {\n context.fillStyle = filterBarActiveColor;\n } else if (filterBarErrorColor != null) {\n context.fillStyle = filterBarErrorColor;\n }\n var x = columnX + 1; // for gap between columns\n var y = gridY - filterBarCollapsedHeight;\n var rectWidth = columnWidth - 1; // for gap between columns\n var rectHeight = filterBarCollapsedHeight - 1; // for casing bottom\n context.fillRect(x, y, rectWidth, rectHeight);\n context.restore();\n }\n drawRowFooters(context, state) {\n var {\n metrics,\n model,\n mouseX,\n mouseY,\n theme\n } = state;\n var {\n gridY,\n gridX,\n maxX,\n modelRows,\n floatingTopHeight,\n floatingBottomHeight,\n floatingRows,\n rowFooterWidth,\n height,\n horizontalBarHeight,\n verticalBarWidth,\n allRowHeights,\n allRowYs,\n width\n } = metrics;\n // Only draw the footers on the floating rows\n if (rowFooterWidth <= 0 || floatingRows.length === 0) {\n return;\n }\n var {\n cellHorizontalPadding,\n floatingGridRowColor,\n floatingRowBackgroundColors,\n headerColor,\n rowHoverBackgroundColor\n } = theme;\n context.translate(gridX, gridY);\n context.beginPath();\n var x = Math.min(maxX, width - rowFooterWidth - verticalBarWidth - gridX);\n context.fillStyle = floatingRowBackgroundColors;\n if (floatingTopHeight > 0) {\n context.rect(x, 0, rowFooterWidth, floatingTopHeight);\n }\n if (floatingBottomHeight > 0) {\n context.rect(x, height - gridY - horizontalBarHeight - floatingBottomHeight, rowFooterWidth, floatingBottomHeight);\n }\n context.fill();\n var mouseRow = mouseX != null && mouseY != null && mouseX >= gridX && mouseX <= maxX + rowFooterWidth ? GridUtils.getRowAtY(mouseY, metrics) : null;\n if (rowHoverBackgroundColor != null && mouseRow !== null && floatingRows.includes(mouseRow)) {\n context.fillStyle = rowHoverBackgroundColor;\n var y = allRowYs.get(mouseRow);\n var rowHeight = allRowHeights.get(mouseRow);\n assertNotNull(y);\n assertNotNull(rowHeight);\n context.fillRect(x, y, rowFooterWidth, rowHeight);\n }\n context.beginPath();\n if (floatingGridRowColor != null) {\n context.strokeStyle = floatingGridRowColor;\n }\n if (floatingTopHeight > 0) {\n context.moveTo(x + 0.5, 0.5);\n context.lineTo(x + 0.5, floatingTopHeight - 0.5);\n }\n if (floatingBottomHeight > 0) {\n var _y = height - gridY - horizontalBarHeight - floatingBottomHeight;\n context.moveTo(x - 0.5, _y + 0.5);\n context.lineTo(x - 0.5, _y + floatingBottomHeight - 0.5);\n }\n context.stroke();\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n var textX = x + cellHorizontalPadding;\n for (var i = 0; i < floatingRows.length; i += 1) {\n var row = floatingRows[i];\n var _rowHeight = allRowHeights.get(row);\n var rowY = allRowYs.get(row);\n var modelRow = modelRows.get(row);\n if (rowY != null && _rowHeight != null && modelRow != null) {\n var textY = rowY + _rowHeight * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n context.translate(-gridX, -gridY);\n }\n getExpandButtonPosition(_ref2, depth) {\n var {\n mouseX,\n mouseY,\n metrics,\n theme\n } = _ref2;\n var NULL_POSITION = {\n left: null,\n top: null,\n width: null,\n height: null\n };\n if (mouseX == null || mouseY == null || depth == null || !metrics) {\n return NULL_POSITION;\n }\n var {\n rowHeight,\n left,\n top\n } = GridUtils.getCellInfoFromXY(mouseX, mouseY, metrics);\n if (left == null || rowHeight == null || top == null) {\n return NULL_POSITION;\n }\n var {\n cellHorizontalPadding\n } = theme;\n var width = EXPAND_ICON_SIZE + 2 * cellHorizontalPadding;\n var buttonLeft = Math.max(left + EXPAND_ICON_SIZE * depth, metrics.gridX);\n var buttonTop = metrics.gridY + top;\n return {\n left: buttonLeft,\n top: buttonTop,\n width,\n height: rowHeight\n };\n }\n}\nexport default IrisGridRenderer;\n//# sourceMappingURL=IrisGridRenderer.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 { getExpressionRanges, resolveCssVariablesInRecord } from '@deephaven/components';\nimport { GridTheme } from '@deephaven/grid';\nimport Log from '@deephaven/log';\nimport { ColorUtils } from '@deephaven/utils';\nimport IrisGridThemeRaw from \"./IrisGridTheme.module.css\";\nvar log = Log.module('IrisGridTheme');\n/**\n * Derive default Iris grid theme from IrisGridThemeRaw. Note that CSS variables\n * contained in IrisGridThemeRaw are resolved to their actual values. This means\n * that the returned theme is statically defined based on the CSS variable values\n * at the time this function is called. They will not automatically update if the\n * CSS variables change.\n */\nexport function createDefaultIrisGridTheme() {\n var _IrisGridTheme$rowBa;\n var IrisGridTheme = resolveCssVariablesInRecord(IrisGridThemeRaw);\n // row-background-colors is a space-separated list of colors, so we need to\n // normalize each color expression in the list individually\n IrisGridTheme['row-background-colors'] = getExpressionRanges((_IrisGridTheme$rowBa = IrisGridTheme['row-background-colors']) !== null && _IrisGridTheme$rowBa !== void 0 ? _IrisGridTheme$rowBa : '').map(_ref => {\n var [start, end] = _ref;\n return ColorUtils.normalizeCssColor(IrisGridTheme['row-background-colors'].substring(start, end + 1));\n }).join(' ');\n log.debug2('Iris grid theme:', IrisGridThemeRaw);\n log.debug2('Iris grid theme derived:', IrisGridTheme);\n return Object.freeze(_objectSpread(_objectSpread({}, GridTheme), {}, {\n backgroundColor: IrisGridTheme['grid-bg'],\n white: IrisGridTheme.white,\n black: IrisGridTheme.black,\n font: IrisGridTheme.font,\n filterBarFont: IrisGridTheme.font,\n headerBackgroundColor: IrisGridTheme['header-bg'],\n headerColor: IrisGridTheme['header-color'],\n headerSeparatorColor: IrisGridTheme['header-separator-color'],\n headerSeparatorHoverColor: IrisGridTheme['header-separator-hover-color'],\n headerHiddenSeparatorHoverColor: IrisGridTheme['header-hidden-separator-hover-color'],\n headerSortBarColor: IrisGridTheme['header-sort-bar-color'],\n headerReverseBarColor: IrisGridTheme['header-reverse-bar-color'],\n headerBarCasingColor: IrisGridTheme['header-bar-casing-color'],\n headerFont: IrisGridTheme['header-font'],\n rowBackgroundColors: IrisGridTheme['row-background-colors'],\n rowHoverBackgroundColor: IrisGridTheme['row-hover-bg'],\n selectionColor: IrisGridTheme['selection-color'],\n selectionOutlineColor: IrisGridTheme['selection-outline-color'],\n selectionOutlineCasingColor: IrisGridTheme['selection-outline-casing-color'],\n selectedRowHoverBackgroundColor: IrisGridTheme['selected-row-hover-bg'],\n scrollBarBackgroundColor: IrisGridTheme['scroll-bar-bg'],\n scrollBarHoverBackgroundColor: IrisGridTheme['scroll-bar-hover-bg'],\n scrollBarCasingColor: IrisGridTheme['scroll-bar-casing-color'],\n scrollBarCornerColor: IrisGridTheme['scroll-bar-corner-color'],\n scrollBarColor: IrisGridTheme['scroll-bar-color'],\n scrollBarHoverColor: IrisGridTheme['scroll-bar-hover-color'],\n scrollBarActiveColor: IrisGridTheme['scroll-bar-active-color'],\n scrollBarSelectionTickColor: IrisGridTheme['selected-row-hover-bg'],\n scrollBarActiveSelectionTickColor: IrisGridTheme['scroll-bar-active-selection-tick-color'],\n textColor: IrisGridTheme['text-color'],\n hyperlinkColor: IrisGridTheme['hyperlink-color'],\n positiveNumberColor: IrisGridTheme['positive-number-color'],\n negativeNumberColor: IrisGridTheme['negative-number-color'],\n zeroNumberColor: IrisGridTheme['zero-number-color'],\n dateColor: IrisGridTheme['date-color'],\n pendingTextColor: IrisGridTheme['pending-text-color'],\n errorTextColor: IrisGridTheme['error-text-color'],\n nullStringColor: IrisGridTheme['null-string-color'],\n filterBarActiveBackgroundColor: IrisGridTheme['filter-bar-active-bg'],\n filterBarExpandedBackgroundColor: IrisGridTheme['filter-bar-expanded-bg'],\n filterBarExpandedActiveBackgroundColor: IrisGridTheme['filter-bar-expanded-active-bg'],\n filterBarExpandedActiveCellBackgroundColor: IrisGridTheme['filter-bar-expanded-active-cell-bg'],\n filterBarSeparatorColor: IrisGridTheme['filter-bar-separator-color'],\n filterBarActiveColor: IrisGridTheme['filter-bar-active-color'],\n filterBarErrorColor: IrisGridTheme['filter-bar-error-color'],\n filterIconColor: IrisGridTheme['filter-icon-color'],\n scrimColor: IrisGridTheme['scrim-color'],\n contextMenuSortIconColor: IrisGridTheme['context-menu-sort-icon-color'],\n contextMenuReverseIconColor: IrisGridTheme['context-menu-reverse-icon-color'],\n allowRowResize: false,\n autoSelectRow: true,\n gridColumnColor: null,\n gridRowColor: null,\n groupedColumnDividerColor: IrisGridTheme['grouped-column-divider-color'],\n columnHoverBackgroundColor: null,\n headerHorizontalPadding: 12,\n scrollBarSize: 13,\n scrollBarHoverSize: 16,\n // system default scrollbar width is 17\n minScrollHandleSize: 24,\n rowHeight: parseInt(IrisGridTheme['row-height'], 10) || 19,\n // IrisGrid test breaks without the fallback value\n columnWidth: 100,\n rowHeaderWidth: 0,\n rowFooterWidth: 90,\n columnHeaderHeight: parseInt(IrisGridTheme['header-height'], 10) || 30,\n filterBarHeight: 30,\n // includes 1px casing at bottom\n filterBarCollapsedHeight: 5,\n // includes 1px casing at bottom\n sortHeaderBarHeight: 2,\n reverseHeaderBarHeight: 4,\n filterBarHorizontalPadding: 4,\n iconSize: 16,\n activeCellSelectionBorderWidth: parseInt(IrisGridTheme['active-cell-selection-border-width'], 10) || 2,\n shadowAlpha: parseFloat(IrisGridTheme['row-shadow-alpha']) || 0.15,\n // Amount of blur to apply to the bottom of the scrim while animating in\n scrimBlurSize: 25,\n minScrimTransitionTime: 150,\n maxScrimTransitionTime: 350,\n scrollSnapToRow: true,\n linkerColumnHoverBackgroundColor: IrisGridTheme['linker-column-hover-bg'],\n treeLineColor: IrisGridTheme['tree-line-color'],\n treeMarkerColor: IrisGridTheme['tree-marker-color'],\n treeMarkerHoverColor: IrisGridTheme['tree-marker-hover-color'],\n floatingGridColumnColor: null,\n floatingGridRowColor: IrisGridTheme['floating-grid-row-color'],\n floatingRowBackgroundColors: IrisGridTheme['floating-row-background-colors'],\n floatingDividerInnerColor: IrisGridTheme['floating-divider-inner-color'],\n floatingDividerOuterColor: IrisGridTheme['floating-divider-outer-color'],\n overflowButtonColor: IrisGridTheme['overflow-button-color'],\n overflowButtonHoverColor: IrisGridTheme['overflow-button-hover-color'],\n zeroLineColor: IrisGridTheme['zero-line-color'],\n positiveBarColor: IrisGridTheme['positive-bar-color'],\n negativeBarColor: IrisGridTheme['negative-bar-color'],\n markerBarColor: IrisGridTheme['marker-bar-color'],\n density: {\n compact: {\n cellHorizontalPadding: 5,\n // Same as regular set in GridTheme\n headerHorizontalPadding: 10,\n minColumnWidth: 10,\n rowHeight: 16,\n font: '11px Fira Sans, sans-serif',\n iconSize: 14,\n columnHeaderHeight: 26\n },\n spacious: {\n cellHorizontalPadding: 7,\n headerHorizontalPadding: 15,\n rowHeight: 28\n }\n }\n }));\n}\n//# sourceMappingURL=IrisGridTheme.js.map","import { useEffect } from 'react';\nimport Log from '@deephaven/log';\nvar log = Log.module('useTableListener');\nexport var useTableListener = (eventEmitter, eventName, callback) => useEffect(function initEventEmitter() {\n if (eventEmitter == null) {\n log.debug2('Emitter undefined, skipping addEventListener', eventName);\n return;\n }\n log.debug2('Adding listener', eventName);\n return eventEmitter.addEventListener(eventName, callback);\n}, [eventEmitter, eventName, callback]);\nexport default useTableListener;\n//# sourceMappingURL=useTableListener.js.map","/**\n * Get the key column if column name is provided, otherwise use the first column.\n * @param table The table to get the key column from\n * @param keyColumnName The name of the column to use for key data\n * @returns DH Column containing the key values\n */\nexport function getItemKeyColumn(table, keyColumnName) {\n return keyColumnName == null ? table.columns[0] : table.findColumn(keyColumnName);\n}\n\n/**\n * Get the label column if column name is provided, otherwise use the key column.\n * @param table The table to get the label column from\n * @param keyColumn The key column to fallback to if the label column name is not provided\n * @param labelColumnName The name of the column to use for label data\n * @returns DH Column containing the label values\n */\nexport function getItemLabelColumn(table, keyColumn, labelColumnName) {\n return labelColumnName == null ? keyColumn : table.findColumn(labelColumnName);\n}\n//# sourceMappingURL=itemUtils.js.map","import { useCallback, useMemo } from 'react';\nimport { assertNotNull } from '@deephaven/utils';\nimport { getItemKeyColumn, getItemLabelColumn } from \"./itemUtils.js\";\nfunction defaultFormatKey(value) {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n return String(value);\n}\nfunction defaultFormatValue(value, _columnType) {\n return String(value);\n}\n\n/**\n * Returns a function that deserializes a row into a normalized item data object.\n * @param table The table to get the key and label columns from\n * @param descriptionColumnName The name of the column to use for description data\n * @param iconColumnName The name of the column to use for icon data\n * @param keyColumnName The name of the column to use for key data\n * @param labelColumnName The name of the column to use for label data\n * @param formatValue Optional function to format the label value\n * @returns A function that deserializes a row into a normalized item data object\n */\nexport function useItemRowDeserializer(_ref) {\n var {\n table,\n descriptionColumnName,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue = defaultFormatValue\n } = _ref;\n var keyColumn = useMemo(() => table == null ? null : getItemKeyColumn(table, keyColumnName), [keyColumnName, table]);\n var labelColumn = useMemo(() => table == null || keyColumn == null ? null : getItemLabelColumn(table, keyColumn, labelColumnName), [keyColumn, labelColumnName, table]);\n var descriptionColumn = useMemo(() => table == null || descriptionColumnName == null ? null : table.findColumn(descriptionColumnName), [descriptionColumnName, table]);\n var iconColumn = useMemo(() => table == null || iconColumnName == null ? null : table.findColumn(iconColumnName), [iconColumnName, table]);\n var deserializeRow = useCallback(row => {\n // `deserializeRow` can be created on a null `table` which results in null\n // `keyColumn` + `labelColumn`, but it should never actually be called.\n // The assumption is that the `table` will eventually be non-null,\n // `deserializeRow` will be recreated, and then applied to the non-null\n // table.\n assertNotNull(keyColumn, 'keyColumn cannot be null.');\n assertNotNull(labelColumn, 'labelColumn cannot be null.');\n var key = defaultFormatKey(row.get(keyColumn));\n var content = formatValue(row.get(labelColumn), labelColumn.type);\n var description = descriptionColumn == null ? undefined : formatValue(row.get(descriptionColumn), descriptionColumn.type);\n var icon = iconColumn == null ? undefined : row.get(iconColumn);\n return {\n key,\n content,\n textValue: content,\n description,\n icon\n };\n }, [descriptionColumn, formatValue, iconColumn, keyColumn, labelColumn]);\n return deserializeRow;\n}\nexport default useItemRowDeserializer;\n//# sourceMappingURL=useItemRowDeserializer.js.map","import { useApi } from '@deephaven/jsapi-bootstrap';\nimport { createFormatterFromSettings } from '@deephaven/jsapi-utils';\nimport { bindAllMethods } from '@deephaven/utils';\nimport { useMemo } from 'react';\n/**\n * Returns a subset of members of a `Formatter` instance. The `Formatter` will be\n * constructed based on the given options or fallback to the configuration found\n * in the current `FormatSettingsContext`. Members that are functions are bound\n * to the `Formatter` instance, so they are safe to destructure. Static methods\n * can still be accessed statically from the `Formatter` class.\n * @param settings Optional settings to use when constructing the `Formatter`\n */\nexport function useFormatter(settings) {\n var dh = useApi();\n var formatter = useMemo(() => {\n var instance = createFormatterFromSettings(dh, settings);\n\n // Bind all methods so we can destructure them\n bindAllMethods(instance);\n return instance;\n }, [dh, settings]);\n var {\n getColumnFormat,\n getColumnFormatMapForType,\n getColumnTypeFormatter,\n getFormattedString\n } = formatter;\n return {\n getColumnFormat,\n getColumnFormatMapForType,\n getColumnTypeFormatter,\n getFormattedString,\n timeZone: formatter.timeZone\n };\n}\nexport default useFormatter;\n//# sourceMappingURL=useFormatter.js.map","import { useMemo } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { TableUtils } from '@deephaven/jsapi-utils';\n\n/**\n * Get a `TableUtils` instance using `dh` api from the current context.\n */\nexport function useTableUtils() {\n var dh = useApi();\n return useMemo(() => new TableUtils(dh), [dh]);\n}\nexport default useTableUtils;\n//# sourceMappingURL=useTableUtils.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); }); }; }\nimport { useCallback } from 'react';\nimport { useTableUtils } from \"./useTableUtils.js\";\n/**\n * Returns a function that gets the index of the first row containing a column\n * value.\n * @param columnName The name of the column to search\n * @param value The value to search for\n * @param table The table to search in\n * @returns A function that returns the index of the first row containing the\n * matching value, or `null` if no match is found\n */\nexport function useGetItemIndexByValue(_ref) {\n var {\n columnName,\n value,\n table\n } = _ref;\n var tableUtils = useTableUtils();\n return useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n if (table == null || value == null || columnName == null) {\n return null;\n }\n var column = table.findColumn(columnName);\n var columnValueType = tableUtils.getValueType(column.type);\n var index = yield table.seekRow(0, column, columnValueType, value);\n return index === -1 ? null : index;\n }), [columnName, table, tableUtils, value]);\n}\nexport default useGetItemIndexByValue;\n//# sourceMappingURL=useGetItemIndexByValue.js.map","import { useCallback, useState } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { getSize } from '@deephaven/jsapi-utils';\nimport useTableListener from \"./useTableListener.js\";\n/**\n * React hook that returns the size of a given table or zero if table is null or\n * undefined. The hook subscribes to the dh.Table.EVENT_SIZECHANGED event and\n * triggers a re-render if any events are received to ensure we have the current\n * size.\n * @param table The table to check the size on.\n */\nexport function useTableSize(table) {\n var [, forceRerender] = useState(0);\n var dh = useApi();\n var onSizeChanged = useCallback(() => {\n forceRerender(i => i + 1);\n }, []);\n useTableListener(table, dh.Table.EVENT_SIZECHANGED, onSizeChanged);\n return getSize(table);\n}\nexport default useTableSize;\n//# sourceMappingURL=useTableSize.js.map","import { useEffect } from 'react';\nimport { generateEmptyKeyedItems } from '@deephaven/jsapi-utils';\nimport { useWindowedListData } from '@deephaven/react-hooks';\nimport Log from '@deephaven/log';\nimport useTableSize from \"./useTableSize.js\";\nvar log = Log.module('useInitializeViewportData');\n\n/**\n * Given an array of items, returns a new array containing the target number of\n * items. If reuseExistingItems is true, existing items will be re-used. If\n * false, all items will be replaced with new, empty items.\n * @param items The array of items to resize.\n * @param targetSize The desired size of the array.\n * @param reuseExistingItems If true, existing items will be re-used. If false,\n * all items will be replaced with new, empty items.\n * @returns The resized array of items.\n */\nfunction resizeItemsArray(_ref) {\n var {\n items,\n targetSize,\n reuseExistingItems\n } = _ref;\n var currentSize = items.length;\n\n // If size isn't changing, do nothing\n if (currentSize === targetSize) {\n return items;\n }\n log.debug('size changed:', {\n currentSize,\n targetSize\n });\n\n // Re-create entire array with empty items\n if (!reuseExistingItems) {\n return Array.from(generateEmptyKeyedItems(0, targetSize - 1));\n }\n\n // Drop extra items\n if (currentSize > targetSize) {\n return items.slice(0, targetSize);\n }\n\n // Add missing items\n return [...items, ...generateEmptyKeyedItems(currentSize, targetSize - 1)];\n}\n\n/**\n * Initializes a ListData instance that can be used for windowed views of a\n * Table. The list must always contain a KeyedItem for every record in the table,\n * so it is pre-populated with empty items that can be updated with real data as\n * the window changes.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table The table that will be used to determine the list size.\n * @param reuseItemsOnTableResize Whether to reuse existing items when the table\n * size changes (defaults to false).\n * - If true, existing items will be reused when the table resizes. This is\n * recommended for ticking tables where the data is frequently updated in order\n * to avoid UI flicker.\n * - If false, all of the items will be replaced when the table resizes. This is\n * recommnded for tables that don't change size frequently but may change size\n * due to a user interaction. e.g. Filter via a search input. This avoids a\n * different kind of flicker, where the item values will shift around as the\n * user types. It is less jarring for the items to all reset to empty and then\n * show the new results all at once.\n * @returns a WindowedListData object.\n */\nexport function useInitializeViewportData(table) {\n var reuseItemsOnTableResize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var viewportData = useWindowedListData({});\n\n // If the table changes size, we need to re-initialize it.\n var targetSize = Math.max(0, useTableSize(table));\n\n // Whenever the table reference or size changes, resize the list.\n useEffect(() => {\n viewportData.setItems(resizeItemsArray({\n items: viewportData.items,\n targetSize,\n reuseExistingItems: reuseItemsOnTableResize\n }));\n\n // Intentionally excluding viewportData since it changes on every render.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [targetSize, table]);\n return viewportData;\n}\nexport default useInitializeViewportData;\n//# sourceMappingURL=useInitializeViewportData.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 { useCallback, useEffect, useRef } from 'react';\nimport { getSize, padFirstAndLastRow, TableUtils } from '@deephaven/jsapi-utils';\n\n/**\n * Creates a callback function that will set a Table viewport. The callback has\n * a closure over the Table, a desired viewport size, and additional padding.\n * These will be combined with a first row index passed to the callback to\n * calculate the final viewport.\n * @param table The `Table` or `TreeTable` to retrieve data from.\n * @param viewportSize The desired viewport size.\n * @param viewportPadding The padding to add before and after the viewport.\n * @param viewportSubscriptionOptions The viewport subscription options to use. If provided and\n * the table is not a `TreeTable`, the data will be requested using a `TableViewportSubscription`.\n * Rows and columns are filled in when the subscription is created if they are missing.\n * @returns A callback function for setting the viewport.\n */\nexport function useSetPaddedViewportCallback(table, viewportSize, viewportPadding) {\n var viewportSubscriptionOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var subscriptionRef = useRef(null);\n var prevTableRef = useRef(null);\n var prevViewportOptionsRef = useRef(null);\n var cleanupSubscription = () => {\n if (subscriptionRef.current) {\n subscriptionRef.current.close();\n subscriptionRef.current = null;\n }\n };\n if (prevTableRef.current !== table || prevViewportOptionsRef.current !== viewportSubscriptionOptions) {\n prevTableRef.current = table;\n prevViewportOptionsRef.current = viewportSubscriptionOptions;\n cleanupSubscription();\n }\n useEffect(() => cleanupSubscription, []);\n return useCallback(function setPaddedViewport(firstRow) {\n if (table == null) {\n return;\n }\n var [first, last] = padFirstAndLastRow(firstRow, viewportSize, viewportPadding, getSize(table));\n if (subscriptionRef.current == null && viewportSubscriptionOptions != null && !TableUtils.isTreeTable(table)) {\n var _viewportSubscription, _viewportSubscription2;\n var subscriptionOptions = _objectSpread(_objectSpread({}, viewportSubscriptionOptions), {}, {\n rows: (_viewportSubscription = viewportSubscriptionOptions.rows) !== null && _viewportSubscription !== void 0 ? _viewportSubscription : {\n first,\n last\n },\n columns: (_viewportSubscription2 = viewportSubscriptionOptions.columns) !== null && _viewportSubscription2 !== void 0 ? _viewportSubscription2 : table.columns\n });\n subscriptionRef.current = table.createViewportSubscription(subscriptionOptions);\n }\n if (subscriptionRef.current == null) {\n table.setViewport(first, last);\n return;\n }\n subscriptionRef.current.update({\n rows: {\n first,\n last\n },\n columns: table.columns\n });\n }, [table, viewportPadding, viewportSize, viewportSubscriptionOptions]);\n}\nexport default useSetPaddedViewportCallback;\n//# sourceMappingURL=useSetPaddedViewportCallback.js.map","export var SCROLL_DEBOUNCE_MS = 150;\nexport var SEARCH_DEBOUNCE_MS = 200;\nexport var VIEWPORT_PADDING = 250;\nexport var VIEWPORT_SIZE = 500;\n//# sourceMappingURL=Constants.js.map","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { defaultRowDeserializer, isClosed, createOnTableUpdatedHandler } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { useOnScrollOffsetChangeCallback } from '@deephaven/react-hooks';\nimport useInitializeViewportData from \"./useInitializeViewportData.js\";\nimport useSetPaddedViewportCallback from \"./useSetPaddedViewportCallback.js\";\nimport useTableSize from \"./useTableSize.js\";\nimport useTableListener from \"./useTableListener.js\";\nimport { SCROLL_DEBOUNCE_MS } from \"./Constants.js\";\nvar log = Log.module('useViewportData');\n/**\n * Sets up state management for windowed Table viewports. Returns a ListData\n * instance for managing items associated with the Table + a `setViewport`\n * callback for changing the current viewport.\n *\n * IMPORTANT: this will create an empty KeyedItem object for every row in the\n * source table. This is intended for \"human\" sized tables such as those used in\n * admin panels. This is not suitable for \"machine\" scale with millions+ rows.\n * @param table The Table to viewport.\n * @param itemHeight The height of each item in the viewport.\n * @param scrollDebounce The number of milliseconds to debounce scroll events.\n * @param viewportSize The number of items to display in the viewport.\n * @param viewportPadding The number of items to fetch at start and end of the viewport.\n * @param deserializeRow A function to deserialize a row from the Table.\n * @param reuseItemsOnTableResize If true, existing items will be re-used when\n * @param viewportSubscriptionOptions The viewport subscription options to use. If provided and\n * the table is not a `TreeTable`, the data will be requested using a `TableViewportSubscription`.\n * Rows and columns are filled in when the subscription is created if they are missing.\n * @returns An object for managing Table viewport state.\n */\nexport function useViewportData(_ref) {\n var {\n table,\n itemHeight = 1,\n scrollDebounce = SCROLL_DEBOUNCE_MS,\n viewportSize = 10,\n viewportPadding = 50,\n deserializeRow = defaultRowDeserializer,\n reuseItemsOnTableResize = false,\n viewportSubscriptionOptions = null\n } = _ref;\n var currentViewportFirstRowRef = useRef(0);\n var viewportData = useInitializeViewportData(table, reuseItemsOnTableResize);\n var setPaddedViewport = useSetPaddedViewportCallback(table, viewportSize, viewportPadding, viewportSubscriptionOptions);\n var setViewport = useCallback(firstRow => {\n currentViewportFirstRowRef.current = firstRow;\n if (table && !isClosed(table)) {\n setPaddedViewport(firstRow);\n } else {\n log.debug('setViewport called on closed table.', table);\n }\n }, [table, setPaddedViewport]);\n var applyFiltersAndRefresh = useCallback(filters => {\n if (table && !isClosed(table)) {\n table.applyFilter(filters);\n setViewport(0);\n } else {\n log.debug('applyFiltersAndRefresh called on closed table.', table);\n }\n }, [setViewport, table]);\n var dh = useApi();\n\n // Store the memoized callback in a ref so that changes to `viewportData`\n // don't invalidate the memoization of `onTableUpdated`. This prevents\n // `useTableListener` from unnecessarily re-subscribing to the same event over\n // and over.\n var onTableUpdatedRef = useRef();\n onTableUpdatedRef.current = useMemo(() => createOnTableUpdatedHandler(viewportData, deserializeRow), [deserializeRow, viewportData]);\n var onTableUpdated = useCallback(event => {\n var _onTableUpdatedRef$cu;\n (_onTableUpdatedRef$cu = onTableUpdatedRef.current) === null || _onTableUpdatedRef$cu === void 0 || _onTableUpdatedRef$cu.call(onTableUpdatedRef, event);\n }, []);\n useTableListener(table, dh.Table.EVENT_UPDATED, onTableUpdated);\n var size = useTableSize(table);\n useEffect(() => {\n log.debug('Initializing viewport');\n\n // Hydrate the viewport with real data. This will fetch data from index\n // 0 to the end of the viewport + padding.\n setViewport(0);\n }, [table, setViewport]);\n useEffect(() => {\n setViewport(currentViewportFirstRowRef.current);\n }, [setViewport, size]);\n var onScroll = useOnScrollOffsetChangeCallback(itemHeight, setViewport, scrollDebounce);\n return useMemo(() => ({\n viewportData,\n size,\n table,\n applyFiltersAndRefresh,\n setViewport,\n onScroll\n }), [applyFiltersAndRefresh, onScroll, setViewport, size, table, viewportData]);\n}\nexport default useViewportData;\n//# sourceMappingURL=useViewportData.js.map","import { useMemo } from 'react';\nimport { removeNullAndUndefined } from '@deephaven/utils';\nexport function useFilterConditionFactories(maybeTable) {\n for (var _len = arguments.length, filterConditionFactories = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n filterConditionFactories[_key - 1] = arguments[_key];\n }\n return useMemo(() => removeNullAndUndefined(...filterConditionFactories.map(f => f(maybeTable))),\n // Intentionally disabling hooks check so we can spread\n // the array items as dependencies.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [maybeTable, ...filterConditionFactories]);\n}\nexport default useFilterConditionFactories;\n//# sourceMappingURL=useFilterConditionFactories.js.map","import { useEffect } from 'react';\n/**\n * Applies a filter to a viewport.\n * @param viewportData Viewport to filter\n * @param filter Filter to apply\n */\nexport function useViewportFilter(viewportData, filter) {\n var {\n applyFiltersAndRefresh\n } = viewportData;\n useEffect(() => {\n applyFiltersAndRefresh(filter);\n }, [applyFiltersAndRefresh, filter]);\n}\nexport default useViewportFilter;\n//# sourceMappingURL=useViewportFilter.js.map","var _excluded = [\"additionalFilterConditionFactories\", \"searchColumnNames\", \"timeZone\"];\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); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { useMemo, useState } from 'react';\nimport { TABLE_ROW_HEIGHT } from '@deephaven/components';\nimport { createSearchTextFilter } from '@deephaven/jsapi-utils';\nimport { useDebouncedCallback } from '@deephaven/react-hooks';\nimport { useTableUtils } from \"./useTableUtils.js\";\nimport useViewportData from \"./useViewportData.js\";\nimport useFilterConditionFactories from \"./useFilterConditionFactories.js\";\nimport useViewportFilter from \"./useViewportFilter.js\";\nimport { SEARCH_DEBOUNCE_MS, VIEWPORT_PADDING, VIEWPORT_SIZE } from \"./Constants.js\";\n/**\n * Use a viewport data list with a search text filter. Supports additional filters.\n * @param table The table to use\n * @param itemHeight The height of each item\n * @param scrollDebounce The debounce time for scroll events\n * @param viewportSize The size of the viewport\n * @param viewportPadding The padding around the viewport\n * @param deserializeRow The row deserializer\n * @param searchColumnNames The column names to search\n * @param timeZone Timezone to use for date parsing\n * @param additionalFilterConditionFactories Additional filter condition factories\n */\nexport function useSearchableViewportData(_ref) {\n var {\n additionalFilterConditionFactories = [],\n searchColumnNames,\n timeZone\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var tableUtils = useTableUtils();\n var [searchText, setSearchText] = useState('');\n var searchTextFilter = useMemo(() => createSearchTextFilter(tableUtils, searchColumnNames, searchText, timeZone), [searchColumnNames, searchText, tableUtils, timeZone]);\n var onSearchTextChange = useDebouncedCallback(setSearchText, SEARCH_DEBOUNCE_MS);\n var list = useViewportData(_objectSpread({\n itemHeight: TABLE_ROW_HEIGHT,\n viewportSize: VIEWPORT_SIZE,\n viewportPadding: VIEWPORT_PADDING\n }, props));\n var filter = useFilterConditionFactories(list.table, searchTextFilter, ...additionalFilterConditionFactories);\n useViewportFilter(list, filter);\n return _objectSpread(_objectSpread({}, list), {}, {\n onSearchTextChange\n });\n}\nexport default useSearchableViewportData;\n//# sourceMappingURL=useSearchableViewportData.js.map","import { useEffect } from 'react';\nimport { isClosed } from '@deephaven/jsapi-utils';\n\n/**\n * React hook that closes a given widget when the reference changes or when the\n * component unmounts.\n * @param widget The widget to close\n */\nexport default function useWidgetClose(widget) {\n useEffect(() => () => {\n if (widget == null) {\n return;\n }\n if (!isClosed(widget)) {\n var _widget$close;\n (_widget$close = widget.close) === null || _widget$close === void 0 || _widget$close.call(widget);\n }\n }, [widget]);\n}\n\n/**\n * @deprecated Use `useWidgetClose` instead.\n */\nexport var useTableClose = useWidgetClose;\n//# sourceMappingURL=useWidgetClose.js.map","var _excluded = [\"table\", \"keyColumn\", \"labelColumn\", \"iconColumn\", \"settings\", \"onChange\", \"onSelectionChange\"];\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); }\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 _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { PICKER_TOP_OFFSET, usePickerItemScale } from '@deephaven/components';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { usePromiseFactory } from '@deephaven/react-hooks';\nimport useFormatter from \"../../useFormatter.js\";\nimport { getItemKeyColumn, getItemLabelColumn } from \"./itemUtils.js\";\nimport { useItemRowDeserializer } from \"./useItemRowDeserializer.js\";\nimport { useGetItemIndexByValue } from \"../../useGetItemIndexByValue.js\";\nimport useSearchableViewportData from \"../../useSearchableViewportData.js\";\nimport useWidgetClose from \"../../useWidgetClose.js\";\nvar log = Log.module('jsapi-components.usePickerProps');\n\n/** Props that are derived by `usePickerProps`. */\n\n/** \n * Props that are passed through untouched. (should exclude all of the\n * destructured props passed into `usePickerProps` that are not in the spread\n * ...props)\n) */\n\n/** Props returned by `usePickerProps` hook. */\n\nexport function usePickerProps(_ref) {\n var _keyColumn$name;\n var {\n table: tableSource,\n keyColumn: keyColumnName,\n labelColumn: labelColumnName,\n iconColumn: iconColumnName,\n settings,\n onChange,\n onSelectionChange\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var {\n itemHeight\n } = usePickerItemScale();\n var {\n getFormattedString: formatValue,\n timeZone\n } = useFormatter(settings);\n\n // `null` is a valid value for `selectedKey` in controlled mode, so we check\n // for explicit `undefined` to identify uncontrolled mode.\n var isUncontrolled = props.selectedKey === undefined;\n var [uncontrolledSelectedKey, setUncontrolledSelectedKey] = useState(props.defaultSelectedKey);\n\n // Copy table so we can apply filters without affecting the original table.\n // (Note that this call is not actually applying any filters. Filter will be\n // applied in `useSearchableViewportData`.)\n var {\n data: tableCopy\n } = usePromiseFactory(TableUtils.copyTableAndApplyFilters, [tableSource]);\n useWidgetClose(tableCopy);\n var keyColumn = useMemo(() => tableCopy == null ? null : getItemKeyColumn(tableCopy, keyColumnName), [keyColumnName, tableCopy]);\n var labelColumn = useMemo(() => tableCopy == null || keyColumn == null ? null : getItemLabelColumn(tableCopy, keyColumn, labelColumnName), [keyColumn, labelColumnName, tableCopy]);\n var searchColumnNames = useMemo(() => labelColumn == null ? [] : [labelColumn.name], [labelColumn]);\n var deserializeRow = useItemRowDeserializer({\n table: tableCopy,\n iconColumnName,\n keyColumnName,\n labelColumnName,\n formatValue\n });\n var getItemIndexByValue = useGetItemIndexByValue({\n table: tableCopy,\n columnName: (_keyColumn$name = keyColumn === null || keyColumn === void 0 ? void 0 : keyColumn.name) !== null && _keyColumn$name !== void 0 ? _keyColumn$name : null,\n value: isUncontrolled ? uncontrolledSelectedKey : props.selectedKey\n });\n var getInitialScrollPosition = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n var index = yield getItemIndexByValue();\n if (index == null) {\n return null;\n }\n return index * itemHeight + PICKER_TOP_OFFSET;\n }), [getItemIndexByValue, itemHeight]);\n var {\n onScroll,\n onSearchTextChange,\n setViewport,\n viewportData\n } = useSearchableViewportData({\n reuseItemsOnTableResize: true,\n table: tableCopy,\n itemHeight,\n deserializeRow,\n searchColumnNames,\n timeZone\n });\n useEffect(\n // Set viewport to include the selected item so that its data will load and\n // the real `key` will be available to show the selection in the UI.\n function setViewportFromSelectedKey() {\n var isCanceled = false;\n getItemIndexByValue().then(index => {\n if (index == null || isCanceled) {\n return;\n }\n setViewport(index);\n }).catch(err => {\n log.error('Error setting viewport from selected key', err);\n });\n return () => {\n isCanceled = true;\n };\n }, [getItemIndexByValue, settings, setViewport]);\n var onSelectionChangeInternal = useCallback(key => {\n var _ref3;\n // If our component is uncontrolled, track the selected key internally\n // so that we can scroll to the selected item if the user re-opens\n if (isUncontrolled) {\n setUncontrolledSelectedKey(key);\n }\n (_ref3 = onChange !== null && onChange !== void 0 ? onChange : onSelectionChange) === null || _ref3 === void 0 || _ref3(key);\n }, [isUncontrolled, onChange, onSelectionChange]);\n return _objectSpread(_objectSpread({}, props), {}, {\n normalizedItems: viewportData.items,\n showItemIcons: iconColumnName != null,\n getInitialScrollPosition,\n onChange: onSelectionChangeInternal,\n onScroll,\n onSearchTextChange\n });\n}\nexport default usePickerProps;\n//# sourceMappingURL=usePickerProps.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 { PickerNormalized } from '@deephaven/components';\nimport { usePickerProps } from \"./utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function Picker(props) {\n var pickerProps = usePickerProps(props);\n return /*#__PURE__*/_jsx(PickerNormalized\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread({}, pickerProps));\n}\nexport default Picker;\n//# sourceMappingURL=Picker.js.map","import { useTheme } from '@deephaven/components';\nimport { createContext, useMemo } from 'react';\nimport { createDefaultIrisGridTheme } from \"./IrisGridTheme.js\";\n/**\n * The context value for the IrisGridThemeProvider.\n * This must be a full object and not a partial so that we\n * can createDefaultIrisGridTheme once, and not per grid.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var IrisGridThemeContext = /*#__PURE__*/createContext({\n theme: null,\n density: 'regular'\n});\nIrisGridThemeContext.displayName = 'IrisGridThemeContext';\nexport function IrisGridThemeProvider(_ref) {\n var {\n children,\n density = 'regular'\n } = _ref;\n var {\n activeThemes\n } = useTheme();\n var gridTheme = useMemo(() => createDefaultIrisGridTheme(),\n // When the theme changes, we need to update the grid theme which reads CSS variables to JS\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [activeThemes]);\n var contextValue = useMemo(() => ({\n theme: gridTheme,\n density\n }), [gridTheme, density]);\n return /*#__PURE__*/_jsx(IrisGridThemeContext.Provider, {\n value: contextValue,\n children: children\n });\n}\n//# sourceMappingURL=IrisGridThemeProvider.js.map"],"names":["useOnChange","callback","deps","prevDeps","usePrevious","dep","i","useOnScrollOffsetChangeCallback","offsetSize","onChange","debounceMs","debounceTimeout","useRef","previousOffsetRef","useCallback","event","offset","useWindowedListData","getKey","defaultGetKey","items","setItems","useState","selectedKeys","setSelectedKeys","matchKey","key","item","findItem","_items$find","getItem","append","values","prevItems","insert","index","remove","keys","keySet","update","bulkUpdate","itemMap","indices","indexMap","a","b","newItems","_key","newItem","listData","useMemo","hasKey","ownKeys","e","r","t","o","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","useUndoRedo","initialState","limit","value","setValue","set","newState","prevValue","undoStack","state","undo","redoStack","newValue","redo","clear","log","Log","Aggregations","_ref","isRollup","settings","availablePlacements","onEdit","dh","aggregations","showOnTop","options","SELECTABLE_OPTIONS","option","aggregation","AggregationOperation","selectedOperation","setSelectedOperation","selectedRanges","setSelectedRanges","changeSettings","changedSettings","added","removed","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","DragUtils","handleDragEnd","_ref2","destination","source","destinationIndex","draggedItems","insertIndex","newSelectedRanges","handleOperationChange","operation","handleAdd","handleDeleteClicked","itemIndex","keep","_ref3","keepSoFar","removeSoFar","handleAggregationSelectionChange","handleAggregationSelect","AggregationUtils","handleShowOnTopChange","useEffect","renderAggregation","_ref4","isClone","selectedCount","text","badgeText","className","isRollupOperation","isRollupProhibited","isEditable","_jsxs","_Fragment","classNames","_jsx","FontAwesomeIcon","dhWarningFilled","DraggableItemList","Button","vsEdit","vsTrash","isOptionsShown","isAggregationsShown","Select","Option","dhNewCircleLargeFilled","RadioGroup","Radio","DragDropContext","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","columns","top","setTop","bottom","setBottom","sort","setSort","invert","selected","list","isSelected","name","validColumns","filteredColumns","filterValidColumns","TableUtils","c","handleSelect","selectedIndex","newSelected","newInvert","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","Checkbox","FadeTransition","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","ItemList","SvgBarIcon","props","SvgHistogramIcon","SvgLineIcon","SvgPieIcon","SvgScatterIcon","FormatColumnWhereIcon","FormatRowWhereIcon","ChartBuilder","PureComponent","type","nanoid","maxSeriesCount","bindAllMethods","model","xAxis","seriesItems","LineIcon","BarIcon","ScatterIcon","PieIcon","HistogramIcon","newSeriesItems","isLinked","eventTargetValue","onSubmit","series","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","column","seriesItem","v","dhTable","vsCircleLargeFilled","vsLink","dhUnlink","InputEditor","Component","_this$editor$getModel","editorSettings","inputEditorSettings","monaco.editor","_this$editor","_this$editor2","onContentChanged","_this$editor$getModel2","_this$editor3","_this$editor4","isEditorFocused","onTab","editorIndex","invalid","placeholder","isEditorEmpty","editorContainer","INPUT_TYPE","EMPTY_FN","CustomColumnInput","eventKey","inputIndex","formula","_onChange","onDeleteColumn","onTabInEditor","isDuplicate","isValidName","DbNameValidator","handleFormulaEditorContentChanged","formulaValue","Draggable","provided","snapshot","vsGripper","isDeletableGridModel","isExpandableColumnGridModel","CustomColumnBuilder","memoize","inputs","input","customColumns","IrisGridModel","customColumnInputs","customColumn","newInputs","customColumnIndex","customColumnInput","newCustomInput","isCustomColumnApplying","customEvent","vsWarning","result","sourceIndex","sourceInput","focusEditorIndex","shiftKey","_this$container","_this$container2","_this$container3","nextFocusIndex","onSave","originalCustomColumns","hasRequestFailed","nameCount","_nameCount$get","_nameCount$get2","isSuccessShowing","saveText","areNamesValid","filteredNames","_ref5","areNamesUnique","vsPass","LoadingSpinner","onCancel","errorMessage","container","Droppable","OptionType","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","currentGroupings","newGroupings","groupings","grouping","debounce","searchFilter","focusIndex","assertNotNull","groupedColumns","React","config","_columns","showConstituents","showNonAggregatedColumns","prevProps","prevState","groupedSelectedRanges","newColumns","isSameList","ungroupedSelectedRanges","sourceItems","sourceRanges","_ref6","_ref7","stateUngroupedSelectedRanges","_ref8","stateGroupedSelectedRanges","_ref9","_ref0","_ref1","originalColumns","_ref10","indent","dragSource","ungroupedColumns","groupListHeight","ungroupMaxListHeight","ungroupMinListHeight","SearchInput","Tooltip","asyncGeneratorStep","n","u","_asyncToGenerator","_next","_throw","TableCsvExporter","downloadRowOption","customizedDownloadRowOption","customizedDownloadRows","rowCount","columnCount","snapshotRanges","GridRange","range","rangeA","rangeB","ranges","userColumnWidths","movedColumns","includeHiddenColumns","hiddenColumns","IrisGridUtils","modelRanges","GridUtils","subtractRanges","_this","isDownloading","onDownloadStart","onDownload","fileName","includeColumnHeaders","useUnformattedValues","frozenTable","tableSubscription","error","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","id","Picker","Item","NumberField","TimeUtils","ClassNames","UNFORMATTED_DATE_PATTERN","isUpdateEventData","data","assertIsUpdateEventData","TableSaver","str","memoizeClear","FormatterUtils","getDownloadWorker","sw","port","useBlob","chunks","encode","streamConfig","chunk","blob","link","encodedFileName","messageChannel","onDownloadCompleted","_this$table","_this$tableSubscripti","_this$fileWriter","cancelable","onDownloadCanceled","_this$fileWriter2","headerString","total","snapshotCount","snapshotIndex","snapshotStartRow","snapshotEndRow","onDownloadProgressUpdate","downloadProgress","estimateTime","csvString","snapshotIterator","formatter","rows","rowIdx","j","cellData","_snapshot$getData","hasCustomColumnFormat","formatOverride","cellFormat","currentGridRange","_loop","PromiseUtils","err","val","download","readableStreamPulling","src","iframe","_this$iframe","VisibilityOrderingGroup","_group$color","group","onDelete","onColorChange","onNameChange","validateName","isNew","nameInputRef","colorInputRef","isColorInputOpen","setIsColorInputOpen","setName","isEditing","setIsEditing","shouldValidate","setShouldValidate","nameValidationError","isValid","colorInputBlurHandler","_colorInputRef$curren","_colorInputRef$curren2","handleConfirm","handleCancel","handleEditKeyDown","vsCheck","vsChromeClose","dhSquareFilled","vsPaintcan","emptyOnClick","VisibilityOrderingItem","forwardRef","ref","clone","childCount","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","onGroupNameChange","validateGroupName","handleProps","modelIndex","isVisible","buttonRef","handleVisibilityChange","_buttonRef$current","handleClick","dhEye","dhEyeSlash","MemoizedVisibilityOrderingItem","memo","isFlattenedTreeItem","getDragDepth","indentationWidth","getTreeItem","nameToIndexes","columnHeaderGroupMap","hiddenColumnSet","selectedItems","showHiddenColumns","_nameToIndexes$get","visibleIndex","modelIndexes","_","childName","aVal","bVal","getTreeItems","columnHeaderGroups","selectedItemsSet","groupMap","mapEntries","startColumn","endColumn","rangeLength","entries","visibleToModelMap","m","columnName","children","getProjection","activeId","overId","dragOffset","overItemIndex","activeItemIndex","activeItem","arrayMove","previousItem","nextItem","dragDepth","projectedDepth","maxDepth","getMaxDepth","minDepth","getMinDepth","depth","getParentId","_newItems$slice$rever","newParent","_previousItem$depth","_nextItem$depth","flatten","parentId","acc","flattenTree","TreeItem","withDepthMarkers","disableInteraction","ghost","dragRef","wrapperRef","renderItem","style","depthMarkers","renderItemProps","wrapperStyle","_excluded","_objectWithoutProperties","_objectWithoutPropertiesLoose","animateLayoutChanges","isSorting","wasDragging","SortableTreeItem","measureElement","attributes","isDragging","listeners","setDraggableNodeRef","setDroppableNodeRef","transform","transition","useSortable","transformString","CSS","node","SortableTree","_dndContext$active","_dndContext$over","_dndContext$active$re","_dndContext$active$re2","_dndContext$active$re3","_dndContext$active$re4","isDraggable","virtualizerRef","dndContext","useDndContext","offsetLeft","filteredItems","activeIndex","rangeExtractor","extractedRange","defaultRangeExtractor","getScrollElement","_containerRef$current","_containerRef$current2","containerRef","estimateSize","virtualizer","useVirtualizer","useImperativeHandle","virtualizedItems","measureDroppableContainers","projected","start","moveItemsFromDrop","from","to","selectedParentItems","firstMovableIndex","lastMovableIndex","newMoves","newGroups","firstVisibleIndex","fromItemIndex","toItemIndex","toIndex","moveToGroup","selectedRange","originalDropIndex","dropIndex","clamp","toName","columnGroups","ColumnHeaderGroup","newGroupMap","fromGroup","g","toGroup","movedGroup","_parent","deleteNames","parentName","parent","_parent$parent","_parent2","nextParentName","nextParent","SearchItem","onKeyDown","handleKeyDown","MemoizedSearchItem","SearchWithModal","_searchRef$current3","_searchRef$current4","onModalOpenChange","onDragStart","setSelection","searchValue","setSearchValue","isModalOpen","setIsModalOpen","searchRef","popperRef","handleModalOpen","handleModalClose","handleInputChange","handleInputBlur","handleModalBlur","_searchRef$current","searchElement","useDndMonitor","handleItemKeyDown","_event$currentTarget$","nextElement","_event$currentTarget$2","prevElement","_searchRef$current2","useResizeObserver","_popperRef$current","lowerSearch","handleSearchKeyDown","firstItem","_popperRef$current2","handleSelectMatching","hasMultipleSelection","foundOne","hasMultipleMatches","showFooterButtons","SearchField","Popper","ActionButton","DIRECTIONS","KeyboardCode","HORIZONTAL","sortableTreeKeyboardCoordinates","context","currentCoordinates","active","over","collisionRect","droppableRects","droppableContainers","projection","containers","rect","collisions","closestCorners","closestId","getFirstCollision","activeRect","newRect","newDroppable","newIndex","closestProjection","_depth","isBelow","modifier","newCoordinates","PointerSensorWithInteraction","PointerSensor","isInteractiveElement","INTERACTIVE_ELEMENTS","element","MEASURING","MeasuringStrategy","CONSTRAINT","DRAG_OVERLAY_STYLE","dropAnimationConfig","defaultDropAnimation","adjustToCursor","args","_adjustToCursor$offse","fixCursorSnapOffset","closestCenter","x","y","width","height","updated","SortableTreeDndContext","onDragEnd","setActiveId","setOffsetLeft","sensorContext","keyboardOptions","sensors","useSensors","useSensor","KeyboardSensor","sortedIds","newActiveId","handleDragMove","delta","resetState","_active$rect$current$","_active$rect$current$2","_active$rect$current$3","_active$rect$current$4","clonedItems","overIndex","activeTreeItem","handleDragCancel","DndContext","SortableContext","verticalListSortingStrategy","createPortal","DragOverlay","VisibilityOrderingBuilderInner","throttle","color","onColumnHeaderGroupChanged","newGroup","selectedColumns","treeItems","elements","firstMovableTreeIndex","lastMovableTreeIndex","movableItems","_visibleIndex","_modelIndex","_column","_visibleIndex2","_modelIndex2","_column2","treeItem","_this$virtualizerRef$","itemName","_this$list","itemElement","_this$list2","itemToFocus","filteredGroups","onReset","onMovedColumnsChanged","isMovingUpward","updatedGroups","size","_size","prevItemIndex","idx","prevItem","newParentItemIndex","newParentItem","_size2","_itemIndex","_parentItem$parentId","parentItem","_toIndex","_size3","groups","scrollListAfterMove","_this$virtualizerRef$2","_this$virtualizerRef$3","itemsParam","isAscending","aName","bName","TextUtils","moveToIndex","_this$getFirstMovable","_this$getLastMovableI","tree","firstIndex","lastIndex","moveableTree","initialAndFrozenMovedColumns","_model$getColumnIndex","frozenColumn","newFrozenIndex","_event$currentTarget","lastSelectedColumn","isModifierKeyDown","isShiftKeyDown","columnsToBeAdded","selectedItem","lastSelectedIndex","columnsToAdd","onColumnVisibilityChanged","modelIndexesToShow","addToExisting","newSelectedColumns","flattenedItems","child","_loop2","newParentId","dragEvent","isAddingToSelection","groupsAfterDrop","newName","_this$list3","endUndoGroup","oldName","groupIndex","oldGroup","parentIndex","oldElement","indexAttr","startUndoGroup","childIndexes","_this$virtualizerRef$4","groupName","_ref11","_ref12","displayString","selectedItemNames","_ref13","showHiddenColumnsState","columnNames","_ref14","prev","canUndo","canRedo","GLOBAL_SHORTCUTS","isOpen","isSearchModalOpen","hasSelection","hiddenColumnsSet","columnsToToggle","areSomeVisible","allToggleText","selectedToggleText","visibilityOrderingList","MenuTrigger","vsKebabVertical","SpectrumMenu","k","Section","Icon","vsBlank","Text","Keyboard","vsRefresh","vsSymbolStructure","vsAdd","vsChevronUp","vsChevronDown","dhArrowToTop","dhArrowToBottom","VisibilityOrderingBuilder","onFrozenColumnsChanged","__testRef","setUndoState","isUndoRedoAction","isBatched","col","handleColumnHeaderGroupChanged","handleUndo","handleRedo","IrisGridCellOverflowMouseHandler","GridMouseHandler","irisGrid","point","row","renderer","grid","metrics","theme","rendererState","left","_this$getButtonPositi","overflowButtonTooltipProps","newProps","deepEqual","IrisGridColumnSelectMouseHandler","isSelectingColumn","tableColumn","columnSelectionValidator","columnIndex","modelColumn","gridPoint","columnAllowedCursor","columnNotAllowedCursor","IrisGridColumnTooltipMouseHandler","tooltip","relatedTarget","popper","columnHeaderDepth","shownColumnTooltip","newTooltip","flushSync","CustomFormatAction","forwardedProps","closeMenu","parentContextMenu","DOMUtils","formatString","title","description","iconElement","focusInput","FormatContextMenuUtils","selectedFormat","TableColumnFormatter","format","_format$formatString","DateTimeFormatContextMenu","currentTime","formatItems","presetFormatOptions","DateTimeColumnFormatter","defaultOption","DecimalFormatContextMenu","onCustomFormatChange","DecimalColumnFormatter","defaultFormatOption","isCustomSelected","customFormat","customFormatOption","newCustomFormat","IntegerFormatContextMenu","IntegerColumnFormatter","_TextAlignmentFormatContextMenu","TextAlignmentFormatContextMenu","alignment","dhCenterAlign","dhLeftAlign","dhRightAlign","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","MAX_MULTISELECT_ROWS","IrisGridContextMenuHandler","columnFilter","newColumnFilter","operator","filterText","newFilterText","command","cellValue","len","GridRenderer","actions","reverse","quickFilters","advancedFilters","filterIconColor","filterBarActiveColor","contextMenuSortIconColor","contextMenuReverseIconColor","modelSort","columnSort","isColumnHidden","columnWidth","isColumnFreezable","isExpandableGridModel","isColumnFrozen","isColumnSortable","vsRemove","SHORTCUTS","dhFilterFilled","vsFilter","ContextActionUtils","_model$textForColumnH","copyToClipboard","_this$numberFormatAct","rowIndex","canCopy","modelRow","sourceCell","sourceColumn","sourceRow","expandingColumn","cellText","gotoRow","rawValue","isEditableGridModel","canPasteInOriginalRange","isCellInOriginalRange","canPasteInCell","_action","readFromClipboard","ClipboardUnavailableError","ClipboardPermissionsDeniedError","action","isPartitionedGridModel","getSelectedRanges","lastRow","lastRowSize","assertNotNaN","_lastRow$endRow","assertNotEmpty","snapshotValues","filterMenu","ContextActions","dateFilterFormatter","previewFilterFormatter","filterValue","columnType","isFilterBarShown","stateSelectedRanges","GridSelectionMouseHandler","columnHeaderHeight","gridY","columnHeaderMaxDepth","valueText","onContextMenu","clearFilterRange","_this2","formatOptions","_this3","columnAlignmentMap","currentAlignment","quickFilter","filterValues","valueDescription","newQuickFilter","filter","toFilterText","_TableUtils$escapeQui","curr","valueDesc","maxValue","minValue","maxFilterValue","minFilterValue","maxValueText","minValueText","maxDateText","minDateText","maxPreviewText","minPreviewText","valueFilter","sortActions","additionalSortActions","direction","isAbs","IrisGridCopyCellMouseHandler","_grid","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","hoverAdvancedFilter","newHoverAdvancedFilter","IrisGridRowTreeMouseHandler","GridRowTreeMouseHandler","expandCellTooltipProps","isRowExpanded","IrisGridSortMouseHandler","PendingMouseHandler","wheelEvent","pendingRowCount","rowHeight","deltaY","IrisGridTokenMouseHandler","GridTokenMouseHandler","isUserHoveringLink","isLinkToken","hoverTooltipProps","right","href","_hoverTooltipProps","_newProps","IrisGridPartitionedTableMouseHandler","partitionConfig","rebalanceTree","adjustments","processNode","isLeaf","addToSubtree","amount","_adjustments$get","prevAdjustment","additionPerChild","childrenAdjustedValues","adjustedChildrenSum","sum","_adjustments$get2","adjustment","IrisGridMetricCalculator","GridMetricCalculator","memoizeOne","current","root","getLeafValue","getGroupValue","_getLeafValue","headerGroup","maxColumnWidth","_paddingMap$get","cachedMap","_cachedMap$get","groupTree","paddingMap","calculatedColumnWidthsByName","prevColumnWidth","trimMap","modelColumnNames","sorts","baseHeaderWidth","headerPadding","headerHorizontalPadding","headerFont","padding","headerText","isColumnExpandable","expandCollapseIconWidth","filterBarHeight","gridX","allColumnXs","allColumnWidths","columnX","rightVisible","lastLeft","newLeft","filterBoxCoordinates","iconMap","vsTriangleUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","makeIcon","faIcon","path","icon","scaledIcon","scaleMatrix","getIcon","IrisGridCellRendererUtils","rowY","treeBox","isExpanded","iconSize","x1","x2","y1","y2","markerIcon","iconX","iconY","IrisGridTextCellRenderer","TextCellRenderer","_model$columns$modelC","modelColumns","modelRows","getOrThrow","originalFont","textMetrics","mouseX","mouseY","mouseColumn","mouseRow","NULL_POSITION","gridWidth","verticalBarWidth","cellHorizontalPadding","buttonLeft","buttonTop","_model$textForCell","textWidth","fontWidthLower","fontWidthUpper","truncatedText","IrisGridDataBarCellRenderer","DataBarCellRenderer","ICON_NAMES","EXPAND_ICON_SIZE","IrisGridRenderer","advancedFilter","isAdvancedFilterValid","isQuickFilterValid","renderType","cellRenderer","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","maxY","lastVisibleGroupColumnIndex","allRowYs","maxX","firstPendingRow","hoverSelectColumn","loadingScrimProgress","scrimBlurSize","scrimColor","barHeight","interior","boundsProp","isMenuShown","bounds","themeIconSize","textRight","defaultX","visibleColumns","_i","_columnWidth","_columnX","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","headerColor","fontWidthsLower","fontWidthsUpper","maxLength","isFilterValid","rectLeft","rectTop","rectWidth","rectHeight","textX","textY","headerSeparatorColor","filterBarCollapsedHeight","filterBarActiveBackgroundColor","floatingTopHeight","floatingBottomHeight","floatingRows","rowFooterWidth","horizontalBarHeight","allRowHeights","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","_y","_rowHeight","createDefaultIrisGridTheme","_IrisGridTheme$rowBa","IrisGridTheme","resolveCssVariablesInRecord","IrisGridThemeRaw","getExpressionRanges","end","ColorUtils","GridTheme","useTableListener","eventEmitter","eventName","getItemKeyColumn","table","keyColumnName","getItemLabelColumn","keyColumn","labelColumnName","defaultFormatKey","defaultFormatValue","_columnType","useItemRowDeserializer","descriptionColumnName","iconColumnName","formatValue","labelColumn","descriptionColumn","iconColumn","deserializeRow","content","useFormatter","useApi","instance","createFormatterFromSettings","getColumnFormat","getColumnFormatMapForType","getColumnTypeFormatter","getFormattedString","useTableUtils","useGetItemIndexByValue","tableUtils","columnValueType","useTableSize","forceRerender","onSizeChanged","getSize","resizeItemsArray","targetSize","reuseExistingItems","currentSize","generateEmptyKeyedItems","useInitializeViewportData","reuseItemsOnTableResize","viewportData","useSetPaddedViewportCallback","viewportSize","viewportPadding","viewportSubscriptionOptions","subscriptionRef","prevTableRef","prevViewportOptionsRef","cleanupSubscription","firstRow","first","last","padFirstAndLastRow","_viewportSubscription","_viewportSubscription2","subscriptionOptions","SCROLL_DEBOUNCE_MS","SEARCH_DEBOUNCE_MS","VIEWPORT_PADDING","VIEWPORT_SIZE","useViewportData","itemHeight","scrollDebounce","defaultRowDeserializer","currentViewportFirstRowRef","setPaddedViewport","setViewport","isClosed","applyFiltersAndRefresh","filters","onTableUpdatedRef","createOnTableUpdatedHandler","onTableUpdated","_onTableUpdatedRef$cu","onScroll","useFilterConditionFactories","maybeTable","_len","filterConditionFactories","removeNullAndUndefined","f","useViewportFilter","useSearchableViewportData","additionalFilterConditionFactories","searchColumnNames","timeZone","searchText","setSearchText","searchTextFilter","createSearchTextFilter","onSearchTextChange","useDebouncedCallback","TABLE_ROW_HEIGHT","useWidgetClose","widget","_widget$close","useTableClose","usePickerProps","_keyColumn$name","tableSource","onSelectionChange","usePickerItemScale","isUncontrolled","uncontrolledSelectedKey","setUncontrolledSelectedKey","tableCopy","usePromiseFactory","getItemIndexByValue","getInitialScrollPosition","PICKER_TOP_OFFSET","isCanceled","onSelectionChangeInternal","pickerProps","PickerNormalized","IrisGridThemeContext","createContext","IrisGridThemeProvider","density","activeThemes","useTheme","gridTheme","contextValue"],"mappings":"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"}