@deephaven/embed-widget 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/assets/{App-B2pAGQHM.js → App-BwYPmKs1.js} +2 -2
- package/build/assets/{App-B2pAGQHM.js.map → App-BwYPmKs1.js.map} +1 -1
- package/build/assets/{Chart-D0mvOQeR.js → Chart-DpAX1kU9.js} +2 -2
- package/build/assets/{Chart-D0mvOQeR.js.map → Chart-DpAX1kU9.js.map} +1 -1
- package/build/assets/{IrisGrid-BAEWjqsP.js → IrisGrid-lXHDqgOc.js} +2 -2
- package/build/assets/{IrisGrid-BAEWjqsP.js.map → IrisGrid-lXHDqgOc.js.map} +1 -1
- package/build/assets/IrisGridThemeProvider-D1WMJ-f-.js +12 -0
- package/build/assets/IrisGridThemeProvider-D1WMJ-f-.js.map +1 -0
- package/build/assets/{LocalWorkspaceStorage-mvICFrlR.js → LocalWorkspaceStorage-DCry6bwG.js} +2 -2
- package/build/assets/{LocalWorkspaceStorage-mvICFrlR.js.map → LocalWorkspaceStorage-DCry6bwG.js.map} +1 -1
- package/build/assets/{LogPanel-BcMugwec.js → LogPanel-DtxZygrY.js} +2 -2
- package/build/assets/{LogPanel-BcMugwec.js.map → LogPanel-DtxZygrY.js.map} +1 -1
- package/build/assets/{MarkdownEditor-CdTPlZEB.js → MarkdownEditor-DTSMlBwd.js} +2 -2
- package/build/assets/{MarkdownEditor-CdTPlZEB.js.map → MarkdownEditor-DTSMlBwd.js.map} +1 -1
- package/build/assets/{MarkdownNotebook-C4vSRTHg.js → MarkdownNotebook-DDvlL_-R.js} +2 -2
- package/build/assets/{MarkdownNotebook-C4vSRTHg.js.map → MarkdownNotebook-DDvlL_-R.js.map} +1 -1
- package/build/assets/{index-ClzsYCKK.js → index-DyTRgJVI.js} +3 -3
- package/build/assets/{index-ClzsYCKK.js.map → index-DyTRgJVI.js.map} +1 -1
- package/build/assets/{index-Oq9pYG4A.js → index-S6ypQ8vd.js} +4 -4
- package/build/assets/index-S6ypQ8vd.js.map +1 -0
- package/build/assets/{index-IcoubmP7.js → index-bNPEJZLd.js} +4 -4
- package/build/assets/{index-IcoubmP7.js.map → index-bNPEJZLd.js.map} +1 -1
- package/build/index.html +2 -2
- package/package.json +9 -9
- package/build/assets/IrisGridThemeProvider-BASQ6h4_.js +0 -12
- package/build/assets/IrisGridThemeProvider-BASQ6h4_.js.map +0 -1
- package/build/assets/index-Oq9pYG4A.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IrisGridThemeProvider-D1WMJ-f-.js","sources":["../../../components/dist/spectrum/shared.js","../../../react-hooks/dist/ElementUtils.js","../../../react-hooks/dist/SpectrumUtils.js","../../../react-hooks/dist/useCheckOverflow.js","../../../react-hooks/dist/useOnChange.js","../../../react-hooks/dist/usePopoverOnScrollRef.js","../../../react-hooks/dist/usePromiseFactory.js","../../../react-hooks/dist/useOnScrollOffsetChangeCallback.js","../../../react-hooks/dist/useWindowedListData.js","../../../react-hooks/dist/useUndoRedo.js","../../../components/dist/spectrum/ItemTooltip.js","../../../components/dist/spectrum/ItemContent.js","../../../components/dist/spectrum/utils/itemUtils.js","../../../components/dist/spectrum/utils/itemWrapperUtils.js","../../../components/dist/spectrum/utils/useOnChangeTrackUncontrolled.js","../../../components/dist/spectrum/ActionGroup.js","../../../components/dist/spectrum/ListActionGroup.js","../../../components/dist/spectrum/ListActionMenu.js","../../../components/dist/spectrum/utils/useRenderNormalizedItem.js","../../../components/dist/spectrum/utils/useStaticItemInitialScrollPosition.js","../../../components/dist/spectrum/utils/useStringifiedSelection.js","../../../components/dist/spectrum/ActionMenu.js","../../../components/dist/UIConstants.js","../../../components/dist/theme/useSpectrumThemeProvider.js","../../../components/dist/spectrum/picker/usePickerItemScale.js","../../../components/dist/spectrum/picker/usePickerScrollOnOpen.js","../../../components/dist/spectrum/picker/usePickerProps.js","../../../components/dist/spectrum/picker/Picker.js","../../../components/dist/spectrum/picker/usePickerNormalizedProps.js","../../../components/dist/spectrum/picker/PickerNormalized.js","../../../components/dist/spectrum/comboBox/ComboBox.js","../../../components/dist/MaskedInputUtils.js","../../../components/dist/MaskedInput.js","../../../components/dist/DateInputUtils.js","../../../components/dist/DateTimeInputUtils.js","../../../components/dist/DateTimeInput.js","../../../components/dist/DraggableItemList.js","../../../components/dist/DragUtils.js","../../../components/dist/navigation/MenuItem.js","../../../components/dist/navigation/Menu.js","../../../components/dist/navigation/Page.js","../../../components/dist/transitions/SlideTransition.js","../../../components/dist/navigation/Stack.js","../../../components/dist/Option.js","../../../components/dist/SelectValueList.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/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/errors/AssertionError.js","../../../grid/dist/EditableGridModel.js","../../../grid/dist/DeletableGridModel.js","../../../grid/dist/ExpandableColumnGridModel.js","../../../grid/dist/GridMetricCalculator.js","../../../grid/dist/GridTheme.js","../../../grid/dist/GridColorUtils.js","../../../grid/dist/GridMouseHandler.js","../../../grid/dist/mouse-handlers/GridSeparatorMouseHandler.js","../../../grid/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js","../../../grid/dist/GridRendererTypes.js","../../../grid/dist/CellRenderer.js","../../../grid/dist/DataBarGridModel.js","../../../grid/dist/DataBarCellRenderer.js","../../../grid/dist/TextCellRenderer.js","../../../grid/dist/GridRenderer.js","../../../grid/dist/mouse-handlers/GridSelectionMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowTreeMouseHandler.js","../../../grid/dist/TokenBoxCellRenderer.js","../../../grid/dist/mouse-handlers/GridTokenMouseHandler.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/sidebar/DownloadServiceWorkerUtils.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/IrisGridShortcuts.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","../../../iris-grid/dist/IrisGridThemeProvider.js"],"sourcesContent":["/**\n * Wrapping Spectrum `Item` and `Section` components will break functionality\n * due to the way they are consumed by collection components. They are only used\n * to pass data and don't render anything on their own, so they don't need to be\n * wrapped. If we do ever need to wrap them for whatever reason, the static\n * `getCollectionNode` method will need to be implemented.\n * See https://github.com/adobe/react-spectrum/blob/main/packages/%40react-stately/collections/src/Item.ts#L17\n * https://github.com/adobe/react-spectrum/blob/main/packages/%40react-stately/collections/src/Section.ts#L18\n */\nimport { Section as SpectrumSection } from '@adobe/react-spectrum';\nexport { Item } from '@adobe/react-spectrum';\n\n/*\n * We support primitive values as shorthand for `Item` elements in certain\n * components. This type represents this augmentation of the Spectrum types.\n */\n\n/**\n * Spectrum SectionProps augmented with support for primitive item children.\n */\n\n/**\n * Re-export Spectrum Section component with augmented props type.\n */\nexport var Section = SpectrumSection;\n//# sourceMappingURL=shared.js.map","import { isValidElement } from 'react';\n\n/**\n * Extracts the props type from a React component type.\n */\n\n/**\n * Check if a node is a React element of a specific type.\n * @param node The node to check\n * @param type The type to check against\n * @returns True if the node is a React element of the specified type\n */\nexport function isElementOfType(node, type) {\n return /*#__PURE__*/isValidElement(node) && node.type === type;\n}\nexport default isElementOfType;\n//# sourceMappingURL=ElementUtils.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); }); }; }\n// eslint-disable-next-line no-restricted-imports\n\n/**\n * Creates validation props for a Spectrum field. If `isValid` is true, returns\n * empty props. If false, returns { errorMessage, validationState: 'invalid' }\n * @param isValid Whether props represent valid state\n * @param errorMessage Error message in the case `isValid` is false\n */\nexport function createValidationProps(isValid, errorMessage) {\n if (isValid) {\n return {};\n }\n return {\n errorMessage,\n validationState: 'invalid'\n };\n}\n\n/**\n * Extract DOM node from React Spectrum component ref.\n * @param ref\n */\nexport function extractSpectrumHTMLElement(ref) {\n var _ref$UNSAFE_getDOMNod;\n return (_ref$UNSAFE_getDOMNod = ref === null || ref === void 0 ? void 0 : ref.UNSAFE_getDOMNode()) !== null && _ref$UNSAFE_getDOMNod !== void 0 ? _ref$UNSAFE_getDOMNod : null;\n}\n\n/**\n * Extract lastElementChild from DOM element for given React Spectrum component\n * ref.\n * @param ref\n */\nexport function extractSpectrumLastChildHTMLElement(ref) {\n var _ref$UNSAFE_getDOMNod2;\n var maybeHTMLElement = ref === null || ref === void 0 || (_ref$UNSAFE_getDOMNod2 = ref.UNSAFE_getDOMNode()) === null || _ref$UNSAFE_getDOMNod2 === void 0 ? void 0 : _ref$UNSAFE_getDOMNod2.lastElementChild;\n return identityExtractHTMLElement(maybeHTMLElement);\n}\n\n/**\n * Find the popover associated with a given Spectrum ComboBox ref.\n * @param ref The ref to the Spectrum ComboBox component\n */\nexport function findSpectrumComboBoxScrollArea(ref) {\n return findSpectrumPopoverScrollArea(ref, 'input');\n}\n\n/**\n * Find the popover associated with a given Spectrum Picker ref.\n * @param ref The ref to the Spectrum Picker component\n */\nexport function findSpectrumPickerScrollArea(ref) {\n return findSpectrumPopoverScrollArea(ref, 'button');\n}\n\n/**\n * Find the popover associated with a given Spectrum component ref.\n * @param ref The ref to the Spectrum component\n * @param triggerElementType The type of element that triggers the popover\n */\nexport function findSpectrumPopoverScrollArea(ref, triggerElementType) {\n var maybeHTMLElement = ref === null || ref === void 0 ? void 0 : ref.UNSAFE_getDOMNode();\n var trigger = maybeHTMLElement === null || maybeHTMLElement === void 0 ? void 0 : maybeHTMLElement.querySelector(triggerElementType);\n var popupId = trigger === null || trigger === void 0 ? void 0 : trigger.getAttribute('aria-controls');\n var scrollArea = popupId == null ? null : document.getElementById(popupId);\n return scrollArea;\n}\n\n/**\n * Get the position of a selected item in a list of keyed items. The position is\n * based on the index, item height, and top offset.\n * @param keyedItems The list of keyed items\n * @param itemHeight The height of each item\n * @param selectedKey The key of the selected item\n * @param topOffset The offset from the top of the list (e.g. if there is top\n * padding surrounding the entire list)\n */\nexport function getPositionOfSelectedItem(_x) {\n return _getPositionOfSelectedItem.apply(this, arguments);\n}\n\n/**\n * Returns the given object if it is an HTMLElement. Otherwise returns null.\n * @param maybeHTMLElement\n */\nfunction _getPositionOfSelectedItem() {\n _getPositionOfSelectedItem = _asyncToGenerator(function* (_ref) {\n var {\n keyedItems,\n itemHeight,\n selectedKey,\n topOffset\n } = _ref;\n var i = keyedItems.findIndex(item => {\n var _item$item$key, _item$item;\n return ((_item$item$key = (_item$item = item.item) === null || _item$item === void 0 ? void 0 : _item$item.key) !== null && _item$item$key !== void 0 ? _item$item$key : item.key) === selectedKey;\n });\n if (i <= 0) {\n return topOffset;\n }\n return itemHeight * i + topOffset;\n });\n return _getPositionOfSelectedItem.apply(this, arguments);\n}\nexport function identityExtractHTMLElement(maybeHTMLElement) {\n return maybeHTMLElement instanceof HTMLElement ? maybeHTMLElement : null;\n}\n//# sourceMappingURL=SpectrumUtils.js.map","import { useCallback, useState } from 'react';\n/**\n * Provides a callback to check a Spectrum `DOMRefValue` for overflow. If\n * overflow is detected, `isOverflowing` will be set to `true` until reset by\n * calling `resetIsOverflowing`.\n */\nexport function useCheckOverflow() {\n var [isOverflowing, setIsOverflowing] = useState(false);\n\n /**\n * Check if a Spectrum `DOMRefValue` is overflowing.\n */\n var checkOverflow = useCallback(elRef => {\n var el = elRef === null || elRef === void 0 ? void 0 : elRef.UNSAFE_getDOMNode();\n if (el == null) {\n return;\n }\n if (el.scrollWidth > el.offsetWidth) {\n setIsOverflowing(true);\n }\n }, []);\n\n /** Reset `isOverflowing` to false */\n var resetIsOverflowing = useCallback(() => {\n setIsOverflowing(false);\n }, []);\n return {\n isOverflowing,\n checkOverflow,\n resetIsOverflowing\n };\n}\nexport default useCheckOverflow;\n//# sourceMappingURL=useCheckOverflow.js.map","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","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, useEffect, useRef, useState } from 'react';\n/**\n * This hook provides a way to attach a scroll event listener to a scroll area\n * inside a popover component. Popovers for picker components only exist when\n * the picker is open, and they get attached to the DOM outside of the child\n * tree, so we have to provide a function that can find the target DOM element\n * to attach the listener to.\n * @param findScrollArea Function to retreive the DOM element to attach a scroll\n * event listener to\n * @param onScroll Scroll event listener function to attach\n * @param getInitialScrollPosition Function to retrieve the initial scroll\n * position. If no function is given, or if the function returns `null`, no\n * initial scrolling will occur.\n */\nexport function usePopoverOnScrollRef(findScrollArea, onScroll, getInitialScrollPosition) {\n var ref = useRef(null);\n var isScrollOnOpenEnabledRef = useRef(false);\n var [scrollAreaEl, setScrollAreaEl] = useState(null);\n var scrollToInitialPosition = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n if (scrollAreaEl == null || getInitialScrollPosition == null) {\n return;\n }\n var position = yield getInitialScrollPosition();\n\n // If the position is null, don't scroll\n if (position == null) {\n return;\n }\n scrollAreaEl.scroll(0, position);\n }), [getInitialScrollPosition, scrollAreaEl]);\n useEffect(() => {\n scrollAreaEl === null || scrollAreaEl === void 0 || scrollAreaEl.addEventListener('scroll', onScroll);\n\n // Ticking tables can cause this effect to fire multiple times while the\n // popover is still open. This check ensures that we only scroll 1x.\n if (isScrollOnOpenEnabledRef.current) {\n scrollToInitialPosition();\n isScrollOnOpenEnabledRef.current = false;\n }\n return () => {\n scrollAreaEl === null || scrollAreaEl === void 0 || scrollAreaEl.removeEventListener('scroll', onScroll);\n };\n }, [onScroll, scrollAreaEl, scrollToInitialPosition]);\n var scrollTimeoutRef = useRef();\n\n // Popovers for picker components only exist when the popover opens, so we\n // have to wait to attach scroll listeners\n var onOpenChange = useCallback(isOpen => {\n window.clearTimeout(scrollTimeoutRef.current);\n if (isOpen) {\n isScrollOnOpenEnabledRef.current = true;\n\n // setTimeout is necessary for popover to be available\n scrollTimeoutRef.current = window.setTimeout(() => {\n setScrollAreaEl(findScrollArea(ref.current));\n }, 0);\n } else {\n setScrollAreaEl(null);\n }\n }, [findScrollArea]);\n return {\n ref,\n onOpenChange\n };\n}\nexport default usePopoverOnScrollRef;\n//# sourceMappingURL=usePopoverOnScrollRef.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); }); }; }\n/* eslint-disable import/prefer-default-export */\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport { useState, useCallback, useEffect } from 'react';\n\n/**\n * Configuration options for `usePromiseFactory` hook.\n */\n\n/**\n * Return type of `usePromiseFactory` hook.\n */\n\n/**\n * Manages the result of a promise factory function in a synchronous way.\n * @param promiseFactory The factory function which creates the promise to be awaited.\n * @param args arguments to pass to the factory function.\n * @returns object containing resolved data or error information.\n */\nexport default function usePromiseFactory(promiseFactory) {\n var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EMPTY_ARRAY;\n var {\n autoLoad = true\n } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var [data, setData] = useState(null);\n var [error, setError] = useState(null);\n var [isLoading, setIsLoading] = useState(autoLoad);\n var loadPromise = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n setIsLoading(true);\n try {\n var resolved = yield promiseFactory(...args);\n setData(resolved);\n setError(null);\n } catch (err) {\n setData(null);\n setError(err);\n } finally {\n setIsLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [promiseFactory, ...args]);\n useEffect(() => {\n if (autoLoad) {\n loadPromise();\n }\n }, [autoLoad, loadPromise]);\n return {\n data,\n error,\n isError: error != null,\n isLoading,\n reload: loadPromise\n };\n}\n//# sourceMappingURL=usePromiseFactory.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","import { isElementOfType } from '@deephaven/react-hooks';\nimport { Tooltip } from \"../popper/index.js\";\nimport { Flex } from \"./layout.js\";\nimport { Text } from \"./Text.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Tooltip for `<Item>` content.\n */\nexport function ItemTooltip(_ref) {\n var {\n children,\n options\n } = _ref;\n if (Array.isArray(children)) {\n return /*#__PURE__*/_jsx(Tooltip, {\n options: options,\n children: /*#__PURE__*/_jsx(Flex, {\n direction: \"column\",\n alignItems: \"start\",\n children: children.filter(node => isElementOfType(node, Text))\n })\n });\n }\n return /*#__PURE__*/_jsx(Tooltip, {\n options: options,\n children: children\n });\n}\nexport default ItemTooltip;\n//# sourceMappingURL=ItemTooltip.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 { Children, cloneElement, isValidElement, useState } from 'react';\nimport cl from 'classnames';\nimport { isElementOfType, useCheckOverflow } from '@deephaven/react-hooks';\nimport { NON_BREAKING_SPACE } from '@deephaven/utils';\nimport { Text } from \"./Text.js\";\nimport ItemTooltip from \"./ItemTooltip.js\";\nimport stylesCommon from \"../SpectrumComponent.module.css\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Item content. Text content will be wrapped in a Spectrum Text\n * component with ellipsis overflow handling. If text content overflows and\n * tooltipOptions are provided a tooltip will be displayed when hovering over\n * the item content.\n */\nexport function ItemContent(_ref) {\n var {\n children: content,\n tooltipOptions\n } = _ref;\n var {\n checkOverflow,\n isOverflowing,\n resetIsOverflowing\n } = useCheckOverflow();\n var [previousContent, setPreviousContent] = useState(content);\n\n // Reset `isOverflowing` if content changes. It will get re-calculated as\n // `Text` components render.\n if (previousContent !== content) {\n setPreviousContent(content);\n resetIsOverflowing();\n }\n if (/*#__PURE__*/isValidElement(content)) {\n return content;\n }\n\n /* eslint-disable no-param-reassign */\n if (content === '') {\n // Prevent the item height from collapsing when the content is empty\n content = NON_BREAKING_SPACE;\n } else if (typeof content === 'boolean') {\n // Boolean values need to be stringified to render\n content = String(content);\n } else if (Array.isArray(content)) {\n // For cases where there are multiple `Text` children, add a css class to\n // handle overflow. The primary use case for multiple text nodes is when a\n // description is provided for an item. e.g.\n // <Item textValue=\"Some Text\">\n // <SomeIcon />\n // <Text>Some Label</Text>\n // <Text slot=\"description\">Some Description</Text>\n // </Item>\n content = Children.map(content, el => isElementOfType(el, Text) ? /*#__PURE__*/cloneElement(el, _objectSpread(_objectSpread({}, el.props), {}, {\n ref: checkOverflow,\n UNSAFE_className: cl(el.props.UNSAFE_className, stylesCommon.spectrumEllipsis)\n })) : el);\n }\n if (typeof content === 'string' || typeof content === 'number') {\n content = /*#__PURE__*/_jsx(Text, {\n ref: checkOverflow,\n UNSAFE_className: stylesCommon.spectrumEllipsis,\n children: content\n });\n }\n /* eslint-enable no-param-reassign */\n\n var tooltip = tooltipOptions == null || !isOverflowing ? null : /*#__PURE__*/_jsx(ItemTooltip, {\n options: tooltipOptions,\n children: content\n });\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [content, tooltip]\n });\n}\nexport default ItemContent;\n//# sourceMappingURL=ItemContent.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 { isElementOfType } from '@deephaven/react-hooks';\nimport { ensureArray } from '@deephaven/utils';\nimport { Item, Section } from \"../shared.js\";\nimport { Text } from \"../Text.js\";\nimport ItemContent from \"../ItemContent.js\";\n/**\n * `Item.textValue` prop needs to be a non-empty string for accessibility\n * purposes. This is not displayed in the UI.\n */\nexport var ITEM_EMPTY_STRING_TEXT_VALUE = 'Empty';\n\n/**\n * React Spectrum <Section> supports an `ItemRenderer` function as a child. The\n * DH picker makes use of this internally, but we don't want to support it as\n * an incoming prop.\n */\n\n// Picker uses `icon` slot. ListView can use `image` or `illustration` slots.\n// https://github.com/adobe/react-spectrum/blob/main/packages/%40react-spectrum/picker/src/Picker.tsx#L194\n// https://github.com/adobe/react-spectrum/blob/main/packages/%40react-spectrum/list/src/ListViewItem.tsx#L266-L267\n\n/**\n * Augment the Spectrum selection key type to include boolean values.\n * Spectrum collection components already supports this, but the built in types\n * don't reflect it.\n */\n\n/**\n * Augment the Spectrum selection change handler type to include boolean keys.\n * Spectrum components already supports this, but the built in types don't\n * reflect it.\n */\n\n/**\n * Spectrum collection components support a variety of item types, including\n * strings, numbers, booleans, and more complex React elements. This type\n * represents a normalized form to make rendering items simpler and keep the\n * logic of transformation in separate util methods. It also adheres to the\n * `KeyedItem` interface to be compatible with Windowed data utils\n * (e.g. `useViewportData`).\n */\n\n/**\n * DH wrappers of Spectrum collection components use a normalized item that\n * includes a `key` prop and an optional `item` prop. This is mostly to support\n * Windowed data where items are created before their data has been loaded (data\n * gets set in the `item` prop). If data has loaded, return its `key`. If not,\n * return the top-level `key` on the normalized item.\n * @param item The normalized item or section\n * @returns The `key` of the item or section\n */\nexport function getItemKey(item) {\n var _item$item$key, _item$item;\n return (_item$item$key = item === null || item === void 0 || (_item$item = item.item) === null || _item$item === void 0 ? void 0 : _item$item.key) !== null && _item$item$key !== void 0 ? _item$item$key : item === null || item === void 0 ? void 0 : item.key;\n}\n\n/**\n * Determine Item `textValue` based on the `textValue` prop or primitive children\n * value.\n * @param item The item to get the text value for\n * @returns The text value of the item\n */\nexport function getItemTextValue(item) {\n if (item.props.textValue == null) {\n var itemKeyStr = item.key == null ? undefined : String(item.key);\n return ['string', 'boolean', 'number'].includes(typeof item.props.children) ? String(item.props.children) : itemKeyStr;\n }\n return item.props.textValue === '' ? ITEM_EMPTY_STRING_TEXT_VALUE : item.props.textValue;\n}\n\n/**\n * Get the position of the item with the given selected key in a list of items.\n * @param items The items to search\n * @param itemHeight The height of each item\n * @param selectedKey The key of the selected item\n * @param topOffset The top offset of the list\n * @returns The position of the selected item or the top offset if not found\n */\nexport function getPositionOfSelectedItemElement(_x) {\n return _getPositionOfSelectedItemElement.apply(this, arguments);\n}\n\n/**\n * Determine if a node is a Section element.\n * @param node The node to check\n * @returns True if the node is a Section element\n */\nfunction _getPositionOfSelectedItemElement() {\n _getPositionOfSelectedItemElement = _asyncToGenerator(function* (_ref) {\n var {\n items,\n itemHeight,\n selectedKey,\n topOffset\n } = _ref;\n var position = topOffset;\n if (selectedKey == null) {\n return position;\n }\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n if (item.key === selectedKey) {\n return position;\n }\n position += itemHeight;\n }\n return topOffset;\n });\n return _getPositionOfSelectedItemElement.apply(this, arguments);\n}\nexport function isSectionElement(node) {\n return isElementOfType(node, Section);\n}\n\n/**\n * Determine if a node is an Item element.\n * @param node The node to check\n * @returns True if the node is an Item element\n */\nexport function isItemElement(node) {\n return isElementOfType(node, Item);\n}\n\n/**\n * Determine if a node is an Item element containing a child `Text` element with\n * a `slot` prop set to `description`.\n * @param node The node to check\n * @returns True if the node is an Item element with a description\n */\nexport function isItemElementWithDescription(node) {\n if (!isItemElement(node)) {\n return false;\n }\n\n // If children are wrapped in `ItemContent`, go down 1 level\n var children = isElementOfType(node.props.children, ItemContent) ? node.props.children.props.children : node.props.children;\n var childrenArray = ensureArray(children);\n var result = childrenArray.some(child => {\n var _child$props;\n return isElementOfType(child, Text) && ((_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.slot) === 'description';\n });\n return result;\n}\n\n/**\n * Determine if a node is an array containing normalized items or sections with\n * keys. Note that this only checks the first node in the array.\n * @param node The node to check\n * @returns True if the node is a normalized item or section with keys array\n */\nexport function isNormalizedItemsWithKeysList(node) {\n if (!Array.isArray(node)) {\n return false;\n }\n if (node.length === 0) {\n return true;\n }\n return !isItemOrSection(node[0]) && node[0] != null && typeof node[0] === 'object' && 'key' in node[0];\n}\n\n/**\n * Determine if an object is a normalized section.\n * @param maybeNormalizedSection The object to check\n * @returns True if the object is a normalized section\n */\nexport function isNormalizedSection(maybeNormalizedSection) {\n return maybeNormalizedSection.item != null && 'items' in maybeNormalizedSection.item;\n}\n\n/**\n * Determine if a node is an item or section. Valid types include strings,\n * numbers, booleans, Item elements, and Section elements.\n * @param node The node to check\n * @returns True if the node is an item or section\n */\nexport function isItemOrSection(node) {\n return typeof node === 'string' || typeof node === 'number' || typeof node === 'boolean' || isItemElement(node) || isSectionElement(node);\n}\n\n/**\n * Returns a TooltipOptions object or null if options is false or null.\n * @param options Tooltip options\n * @param placement Default placement for the tooltip if `options` is set\n * explicitly to `true`\n * @returns TooltipOptions or null\n */\nexport function normalizeTooltipOptions(options) {\n var placement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'right';\n if (options == null || options === false) {\n return null;\n }\n if (options === true) {\n return {\n placement\n };\n }\n return options;\n}\n\n/**\n * Convert a selection of `ItemKey`s to a selection of strings.\n * @param itemKeys The selection of `ItemKey`s\n * @returns The selection of strings\n */\nexport function itemSelectionToStringSet(itemKeys) {\n if (itemKeys == null || itemKeys === 'all') {\n return itemKeys;\n }\n return new Set([...itemKeys].map(String));\n}\n//# sourceMappingURL=itemUtils.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 { cloneElement } from 'react';\nimport { Item } from '@adobe/react-spectrum';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dh as dhIcons } from '@deephaven/icons';\nimport { isElementOfType } from '@deephaven/react-hooks';\nimport { ensureArray, NON_BREAKING_SPACE } from '@deephaven/utils';\nimport { getItemTextValue, isItemElement, isSectionElement, ITEM_EMPTY_STRING_TEXT_VALUE } from \"./itemUtils.js\";\nimport { ItemContent } from \"../ItemContent.js\";\nimport { Icon } from \"../icons.js\";\nimport { Text } from \"../Text.js\";\n/**\n * If the given content is a string, wrap it in an Icon component. Otherwise,\n * return the original content. If the key is not found in the dhIcons object,\n * the vsBlank icon will be used.\n * @param maybeIconKey The content to wrap\n * @param slot The slot to use for the Icon component\n * @returns The wrapped content or original content if not a string\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function wrapIcon(maybeIconKey, slot) {\n var _dhIcons$maybeIconKey;\n // eslint-disable-next-line no-param-reassign\n maybeIconKey = maybeIconKey !== null && maybeIconKey !== void 0 ? maybeIconKey : '';\n if (typeof maybeIconKey !== 'string') {\n return maybeIconKey;\n }\n return /*#__PURE__*/_jsx(Icon, {\n slot: slot,\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: (_dhIcons$maybeIconKey = dhIcons[maybeIconKey]) !== null && _dhIcons$maybeIconKey !== void 0 ? _dhIcons$maybeIconKey : dhIcons.vsBlank\n })\n });\n}\n\n/**\n * Ensure all primitive children are wrapped in `Item` elements and that all\n * `Item` element content is wrapped in `ItemContent` elements to handle text\n * overflow consistently and to support tooltips.\n * @param itemsOrSections The items or sections to wrap\n * @param tooltipOptions The tooltip options to use when wrapping items\n * @returns The wrapped items or sections\n */\nexport function wrapItemChildren(itemsOrSections, tooltipOptions) {\n var itemsOrSectionsArray = ensureArray(itemsOrSections);\n var result = itemsOrSectionsArray.map(item => {\n if (isItemElement(item)) {\n var _item$key;\n // Item content is already wrapped\n if (isElementOfType(item.props.children, ItemContent)) {\n return item;\n }\n var key = (_item$key = item.key) !== null && _item$key !== void 0 ? _item$key : item.props.textValue;\n var _textValue = getItemTextValue(item);\n\n // Wrap in `ItemContent` so we can support tooltips and handle text\n // overflow\n return /*#__PURE__*/cloneElement(item, _objectSpread(_objectSpread({}, item.props), {}, {\n key,\n textValue: _textValue,\n children: /*#__PURE__*/_jsx(ItemContent, {\n tooltipOptions: tooltipOptions,\n children: item.props.children\n })\n }));\n }\n if (isSectionElement(item)) {\n var _item$key2;\n return /*#__PURE__*/cloneElement(item, _objectSpread(_objectSpread({}, item.props), {}, {\n key: (_item$key2 = item.key) !== null && _item$key2 !== void 0 ? _item$key2 : typeof item.props.title === 'string' ? item.props.title : undefined,\n children: wrapItemChildren(item.props.children, tooltipOptions)\n }));\n }\n var text = String(item);\n var textValue = text === '' ? ITEM_EMPTY_STRING_TEXT_VALUE : text;\n return /*#__PURE__*/_jsx(Item, {\n textValue: textValue,\n children: /*#__PURE__*/_jsx(ItemContent, {\n tooltipOptions: tooltipOptions,\n children: text\n })\n }, text);\n });\n\n // Keep consistent with original data structure as array or single node\n return Array.isArray(itemsOrSections) ? result : result[0];\n}\n\n/**\n * If the given content is a primitive type, wrap it in a Text component.\n * @param content The content to wrap\n * @param slot The slot to use for the Text component\n * @returns The wrapped content or original content if not a primitive type\n */\nexport function wrapPrimitiveWithText(content, slot) {\n // eslint-disable-next-line no-param-reassign\n content = content !== null && content !== void 0 ? content : '';\n if (['string', 'boolean', 'number'].includes(typeof content)) {\n return /*#__PURE__*/_jsx(Text, {\n slot: slot,\n children: content === '' ? NON_BREAKING_SPACE : String(content)\n });\n }\n return content;\n}\n//# sourceMappingURL=itemWrapperUtils.js.map","import { useCallback, useState } from 'react';\n/**\n * Returns a selectedKey and onChange handler that can manage selection state\n * for both controlled and uncontrolled components. Useful for cases where a\n * component needs to always track its selection state regardless of its\n * controlled / uncontrolled status.\n */\nexport function useOnChangeTrackUncontrolled(_ref) {\n var {\n defaultSelectedKey,\n selectedKey,\n onChange: onChangeHandler\n } = _ref;\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 = selectedKey === undefined;\n var [uncontrolledSelectedKey, setUncontrolledSelectedKey] = useState(defaultSelectedKey);\n var onChangeMaybeUncontrolled = useCallback(key => {\n // If our component is uncontrolled, track the selected key internally\n if (isUncontrolled) {\n setUncontrolledSelectedKey(key);\n }\n onChangeHandler === null || onChangeHandler === void 0 || onChangeHandler(key);\n }, [isUncontrolled, onChangeHandler]);\n return {\n selectedKeyMaybeUncontrolled: isUncontrolled ? uncontrolledSelectedKey : selectedKey,\n onChangeMaybeUncontrolled\n };\n}\nexport default useOnChangeTrackUncontrolled;\n//# sourceMappingURL=useOnChangeTrackUncontrolled.js.map","var _excluded = [\"defaultSelectedKeys\", \"disabledKeys\", \"children\", \"selectedKeys\", \"UNSAFE_className\", \"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 _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 } from 'react';\nimport { ActionGroup as SpectrumActionGroup } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { wrapItemChildren } from \"./utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Augmented version of the Spectrum ActionGroup component that supports\n * primitive item children.\n */\nexport function ActionGroup(_ref) {\n var {\n defaultSelectedKeys,\n disabledKeys,\n children,\n selectedKeys,\n UNSAFE_className,\n onChange,\n onSelectionChange\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var wrappedChildren = useMemo(() => typeof children === 'function' ? children : wrapItemChildren(children, null), [children]);\n return /*#__PURE__*/_jsx(SpectrumActionGroup\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, props), {}, {\n UNSAFE_className: cl('dh-action-group', UNSAFE_className),\n defaultSelectedKeys: defaultSelectedKeys,\n disabledKeys: disabledKeys,\n selectedKeys: selectedKeys,\n onSelectionChange: onChange !== null && onChange !== void 0 ? onChange : onSelectionChange,\n children: wrappedChildren\n }));\n}\nexport default ActionGroup;\n//# sourceMappingURL=ActionGroup.js.map","/**\n * This component doesn't actually render anything. It is a prop container that\n * gets passed to `NormalizedListView`. The actual `ActionGroup` elements will\n * be created from this component's props on each item in the list view.\n */\nexport function ListActionGroup(_props) {\n return null;\n}\n//# sourceMappingURL=ListActionGroup.js.map","/**\n * This component doesn't actually render anything. It is a prop container that\n * gets passed to `NormalizedListView`. The actual `ActionMenu` elements will\n * be created from this component's props on each item in the list view.\n */\nexport function ListActionMenu(_props) {\n return null;\n}\n//# sourceMappingURL=ListActionMenu.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 { isElementOfType } from '@deephaven/react-hooks';\nimport { useCallback } from 'react';\nimport ActionGroup from \"../ActionGroup.js\";\nimport ActionMenu from \"../ActionMenu.js\";\nimport { ItemContent } from \"../ItemContent.js\";\nimport { ListActionGroup } from \"../ListActionGroup.js\";\nimport { ListActionMenu } from \"../ListActionMenu.js\";\nimport { Item } from \"../shared.js\";\nimport { getItemKey, ITEM_EMPTY_STRING_TEXT_VALUE } from \"./itemUtils.js\";\nimport { wrapIcon, wrapPrimitiveWithText } from \"./itemWrapperUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Returns a render function that can be used to render a normalized item in\n * collection components.\n * @param itemIconSlot Slot to use for item icons\n * @param showItemDescriptions Whether to show item descriptions\n * @param showItemIcons Whether to show item icons\n * @param tooltipOptions Tooltip options to use when rendering the item\n * @param actions Optional actions to render with the item\n * @returns Render function for normalized items\n */\nexport function useRenderNormalizedItem(_ref) {\n var {\n itemIconSlot,\n showItemDescriptions,\n showItemIcons,\n tooltipOptions,\n actions\n } = _ref;\n return useCallback(normalizedItem => {\n var _normalizedItem$item, _normalizedItem$item$, _normalizedItem$item2, _normalizedItem$item3, _normalizedItem$item4;\n var itemKey = getItemKey(normalizedItem);\n var content = wrapPrimitiveWithText((_normalizedItem$item = normalizedItem.item) === null || _normalizedItem$item === void 0 ? void 0 : _normalizedItem$item.content);\n var textValue = (_normalizedItem$item$ = (_normalizedItem$item2 = normalizedItem.item) === null || _normalizedItem$item2 === void 0 ? void 0 : _normalizedItem$item2.textValue) !== null && _normalizedItem$item$ !== void 0 ? _normalizedItem$item$ : itemKey == null ? undefined : String(itemKey);\n var description = showItemDescriptions ? wrapPrimitiveWithText((_normalizedItem$item3 = normalizedItem.item) === null || _normalizedItem$item3 === void 0 ? void 0 : _normalizedItem$item3.description, 'description') : null;\n var icon = showItemIcons ? wrapIcon((_normalizedItem$item4 = normalizedItem.item) === null || _normalizedItem$item4 === void 0 ? void 0 : _normalizedItem$item4.icon, itemIconSlot) : null;\n var action = null;\n if (isElementOfType(actions, ListActionGroup)) {\n action = /*#__PURE__*/_jsx(ActionGroup\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, actions.props), {}, {\n onAction: key => actions.props.onAction(key, itemKey),\n onChange: keys => {\n var _actions$props$onChan, _actions$props;\n return (_actions$props$onChan = (_actions$props = actions.props).onChange) === null || _actions$props$onChan === void 0 ? void 0 : _actions$props$onChan.call(_actions$props, keys, itemKey);\n }\n }));\n } else if (isElementOfType(actions, ListActionMenu)) {\n action = /*#__PURE__*/_jsx(ActionMenu\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, actions.props), {}, {\n onAction: key => actions.props.onAction(key, itemKey),\n onOpenChange: isOpen => {\n var _actions$props$onOpen, _actions$props2;\n return (_actions$props$onOpen = (_actions$props2 = actions.props).onOpenChange) === null || _actions$props$onOpen === void 0 ? void 0 : _actions$props$onOpen.call(_actions$props2, isOpen, itemKey);\n }\n }));\n }\n return /*#__PURE__*/_jsx(Item\n // Note that setting the `key` prop explicitly on `Item` elements\n // causes the picker to expect `selectedKey` and `defaultSelectedKey`\n // to be strings. It also passes the stringified value of the key to\n // `onSelectionChange` handlers` regardless of the actual type of the\n // key. We can't really get around setting in order to support Windowed\n // data, so we'll need to do some manual conversion of keys to strings\n // in other components that use this hook.\n , {\n // The `textValue` prop gets used to provide the content of `<option>`\n // elements that back the Spectrum Picker. These are not visible in the UI,\n // but are used for accessibility purposes, so we set to an arbitrary\n // `ITEM_EMPTY_STRING_TEXT_VALUE` value so that they are not empty strings.\n textValue: textValue === '' ? ITEM_EMPTY_STRING_TEXT_VALUE : textValue,\n children: /*#__PURE__*/_jsxs(ItemContent, {\n tooltipOptions: tooltipOptions,\n children: [icon, content, description, action]\n })\n }, itemKey);\n }, [actions, itemIconSlot, showItemDescriptions, showItemIcons, tooltipOptions]);\n}\nexport default useRenderNormalizedItem;\n//# sourceMappingURL=useRenderNormalizedItem.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, useMemo } from 'react';\nimport { getPositionOfSelectedItemElement, isItemElementWithDescription, isSectionElement } from \"./itemUtils.js\";\nexport function useStaticItemInitialScrollPosition(_ref) {\n var {\n itemHeight,\n selectedKey,\n topOffset,\n items\n } = _ref;\n // Item descriptions and Section elements introduce variable item heights.\n // This throws off scroll position calculations, so we disable auto scrolling\n // if either of these are found.\n var disableScrollOnOpen = useMemo(() => items.some(item => isSectionElement(item) || isItemElementWithDescription(item)), [items]);\n var getInitialScrollPosition = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {\n return disableScrollOnOpen ? topOffset : getPositionOfSelectedItemElement({\n items,\n itemHeight,\n selectedKey,\n topOffset\n });\n }), [disableScrollOnOpen, itemHeight, items, selectedKey, topOffset]);\n return getInitialScrollPosition;\n}\nexport default useStaticItemInitialScrollPosition;\n//# sourceMappingURL=useStaticItemInitialScrollPosition.js.map","import { useCallback, useMemo } from 'react';\nimport { getItemKey, itemSelectionToStringSet } from \"./itemUtils.js\";\n/**\n * Spectrum collection components treat keys as strings if the `key` prop is\n * explicitly set on `Item` elements. Since we do this in `useRenderNormalizedItem`,\n * we need to ensure that keys are strings in order for selection to work. We\n * then need to convert back to the original key types in the onChange handler.\n * This hook encapsulates converting to and from strings so that keys can match\n * the original key type.\n * @param normalizedItems The normalized items to select from.\n * @param selectedKey The currently selected key in the collection.\n * @param defaultSelectedKey The initial selected key in the collection.\n * @param disabledKeys The currently disabled keys in the collection.\n * @param onChange Handler that is called when the selection changes.\n * @returns UseStringifiedSelectionResult with stringified key sets and string\n * key selection change handler.\n */\nexport function useStringifiedSelection(_ref) {\n var {\n normalizedItems,\n defaultSelectedKey,\n selectedKey,\n disabledKeys,\n onChange\n } = _ref;\n var selectedStringKey = useMemo(() => selectedKey == null ? selectedKey : String(selectedKey), [selectedKey]);\n var defaultSelectedStringKey = useMemo(() => defaultSelectedKey == null ? defaultSelectedKey : String(defaultSelectedKey), [defaultSelectedKey]);\n var disabledStringKeys = useMemo(() => itemSelectionToStringSet(disabledKeys), [disabledKeys]);\n var onStringSelectionChange = useCallback(key => {\n var _getItemKey;\n if (onChange == null) {\n return;\n }\n\n // The `key` arg will always be a string due to us setting the `Item` key\n // prop in `renderItem`. We need to find the matching item to determine\n // the actual key.\n var selectedItem = normalizedItems.find(item => String(getItemKey(item)) === key);\n var actualKey = (_getItemKey = getItemKey(selectedItem)) !== null && _getItemKey !== void 0 ? _getItemKey : key;\n onChange(actualKey);\n }, [normalizedItems, onChange]);\n return {\n selectedStringKey,\n defaultSelectedStringKey,\n disabledStringKeys,\n onStringSelectionChange\n };\n}\nexport default useStringifiedSelection;\n//# sourceMappingURL=useStringifiedSelection.js.map","var _excluded = [\"disabledKeys\", \"children\", \"UNSAFE_className\"];\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 } from 'react';\nimport { ActionMenu as SpectrumActionMenu } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { wrapItemChildren } from \"./utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Augmented version of the Spectrum ActionMenu component that supports\n * primitive item children.\n */\nexport function ActionMenu(_ref) {\n var {\n disabledKeys,\n children,\n UNSAFE_className\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var wrappedChildren = useMemo(() => typeof children === 'function' ? children : wrapItemChildren(children, null), [children]);\n return /*#__PURE__*/_jsx(SpectrumActionMenu\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, props), {}, {\n UNSAFE_className: cl('dh-action-menu', UNSAFE_className),\n disabledKeys: disabledKeys,\n children: wrappedChildren\n }));\n}\nexport default ActionMenu;\n//# sourceMappingURL=ActionMenu.js.map","export var ACTION_ICON_HEIGHT = 24;\n\n// Copied from https://github.com/adobe/react-spectrum/blob/b2d25ef23b827ec2427bf47b343e6dbd66326ed3/packages/%40react-spectrum/list/src/ListView.tsx#L78\nexport var LIST_VIEW_ROW_HEIGHTS = {\n compact: {\n medium: 32,\n large: 40\n },\n regular: {\n medium: 40,\n large: 50\n },\n spacious: {\n medium: 48,\n large: 60\n }\n};\n\n// https://github.com/adobe/react-spectrum/blob/main/packages/%40react-spectrum/listbox/src/ListBoxBase.tsx#L56\nexport var PICKER_ITEM_HEIGHTS = {\n medium: 32,\n large: 48\n};\nexport var PICKER_TOP_OFFSET = 4;\nexport var TABLE_ROW_HEIGHT = 33;\n//# sourceMappingURL=UIConstants.js.map","import { useProvider } from '@adobe/react-spectrum';\nexport var useSpectrumThemeProvider = useProvider;\nexport default useSpectrumThemeProvider;\n//# sourceMappingURL=useSpectrumThemeProvider.js.map","import { useSpectrumThemeProvider } from \"../../theme/index.js\";\nimport { PICKER_ITEM_HEIGHTS } from \"../../UIConstants.js\";\n/**\n * Get Picker Item height for current scale.\n * @returns Picker Item height\n */\nexport function usePickerItemScale() {\n var {\n scale\n } = useSpectrumThemeProvider();\n var itemHeight = PICKER_ITEM_HEIGHTS[scale];\n return {\n itemHeight\n };\n}\nexport default usePickerItemScale;\n//# sourceMappingURL=usePickerItemScale.js.map","import { useCallback } from 'react';\nimport { findSpectrumPickerScrollArea, usePopoverOnScrollRef } from '@deephaven/react-hooks';\n/**\n * Handle scroll event registration and scrolling to initial scroll position\n * whenever a Picker popover is opened.\n * @param getInitialScrollPosition Function to get the initial scroll position.\n * @param onScroll Callback for scroll events.\n * @param onOpenChange Callback for open change events.\n * @return A ref to attach to the Picker and a callback to handle open change\n * events for the Picker.\n */\nexport function usePickerScrollOnOpen(_ref) {\n var {\n getInitialScrollPosition,\n onScroll,\n onOpenChange\n } = _ref;\n var {\n ref,\n onOpenChange: popoverOnOpenChange\n } = usePopoverOnScrollRef(findSpectrumPickerScrollArea, onScroll, getInitialScrollPosition);\n var onOpenChangeInternal = useCallback((isOpen, menuTrigger) => {\n // Attach scroll event handling\n popoverOnOpenChange(isOpen);\n onOpenChange === null || onOpenChange === void 0 || onOpenChange(isOpen, menuTrigger);\n }, [onOpenChange, popoverOnOpenChange]);\n return {\n ref,\n onOpenChange: onOpenChangeInternal\n };\n}\nexport default usePickerScrollOnOpen;\n//# sourceMappingURL=usePickerScrollOnOpen.js.map","var _excluded = [\"children\", \"defaultSelectedKey\", \"selectedKey\", \"tooltip\", \"onChange\", \"onOpenChange\", \"onScroll\", \"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 _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 { EMPTY_FUNCTION, ensureArray } from '@deephaven/utils';\nimport { useMemo } from 'react';\nimport { PICKER_TOP_OFFSET } from \"../../UIConstants.js\";\nimport { normalizeTooltipOptions, wrapItemChildren, useOnChangeTrackUncontrolled, useStaticItemInitialScrollPosition } from \"../utils/index.js\";\nimport usePickerItemScale from \"./usePickerItemScale.js\";\nimport usePickerScrollOnOpen from \"./usePickerScrollOnOpen.js\";\n/** Props that are derived by `usePickerProps`. */\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/** Props returned from `usePickerProps` hook. */\n/**\n * Derive props for Picker components (e.g. Picker and ComboBox). Specifically\n * handles wrapping children items and initial scroll position when the picker\n * is opened.\n */\nexport function usePickerProps(_ref) {\n var {\n children,\n defaultSelectedKey,\n selectedKey,\n tooltip = true,\n onChange: onChangeHandler,\n onOpenChange: onOpenChangeHandler,\n onScroll = EMPTY_FUNCTION,\n onSelectionChange: onSelectionChangeHandler\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var {\n itemHeight\n } = usePickerItemScale();\n var tooltipOptions = useMemo(() => normalizeTooltipOptions(tooltip), [tooltip]);\n var items = useMemo(() => ensureArray(wrapItemChildren(children, tooltipOptions)), [children, tooltipOptions]);\n var {\n selectedKeyMaybeUncontrolled,\n onChangeMaybeUncontrolled\n } = useOnChangeTrackUncontrolled({\n defaultSelectedKey,\n selectedKey,\n onChange: onChangeHandler !== null && onChangeHandler !== void 0 ? onChangeHandler : onSelectionChangeHandler\n });\n var getInitialScrollPosition = useStaticItemInitialScrollPosition({\n itemHeight,\n items,\n selectedKey: selectedKeyMaybeUncontrolled,\n topOffset: PICKER_TOP_OFFSET\n });\n var {\n ref,\n onOpenChange\n } = usePickerScrollOnOpen({\n getInitialScrollPosition,\n onScroll,\n onOpenChange: onOpenChangeHandler\n });\n return _objectSpread(_objectSpread({}, props), {}, {\n defaultSelectedKey,\n ref,\n selectedKey,\n children: items,\n onOpenChange,\n onSelectionChange: onChangeMaybeUncontrolled\n });\n}\nexport default usePickerProps;\n//# sourceMappingURL=usePickerProps.js.map","var _excluded = [\"UNSAFE_className\"],\n _excluded2 = [\"defaultSelectedKey\", \"disabledKeys\", \"selectedKey\", \"ref\"];\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 { Picker as SpectrumPicker } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport React from 'react';\nimport { useMergeRef } from '@deephaven/react-hooks';\nimport { usePickerProps } from \"./usePickerProps.js\";\n/**\n * Picker component for selecting items from a list of items. Items can be\n * provided via the `children` prop. Each item can be a string,\tnumber, boolean,\n * or a Spectrum <Item> element. The remaining props are just\tpass through props\n * for the Spectrum Picker component.\n * See https://react-spectrum.adobe.com/react-spectrum/Picker.html\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var Picker = /*#__PURE__*/React.forwardRef(function Picker(_ref, ref) {\n var {\n UNSAFE_className\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var _usePickerProps = usePickerProps(props),\n {\n defaultSelectedKey,\n disabledKeys,\n selectedKey,\n ref: scrollRef\n } = _usePickerProps,\n pickerProps = _objectWithoutProperties(_usePickerProps, _excluded2);\n var pickerRef = useMergeRef(ref, scrollRef);\n return /*#__PURE__*/_jsx(SpectrumPicker\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, pickerProps), {}, {\n ref: pickerRef,\n UNSAFE_className: cl('dh-picker', UNSAFE_className)\n // Type assertions are necessary here since Spectrum types don't account\n // for number and boolean key values even though they are valid runtime\n // values.\n ,\n defaultSelectedKey: defaultSelectedKey,\n disabledKeys: disabledKeys,\n selectedKey: selectedKey\n }));\n});\nPicker.displayName = 'Picker';\nexport default Picker;\n//# sourceMappingURL=Picker.js.map","var _excluded = [\"defaultSelectedKey\", \"disabledKeys\", \"getInitialScrollPosition\", \"normalizedItems\", \"onChange\", \"onOpenChange\", \"onScroll\", \"onSelectionChange\", \"selectedKey\", \"showItemIcons\", \"tooltip\"];\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 { useCallback, useMemo } from 'react';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { getItemKey, isNormalizedSection, normalizeTooltipOptions, useRenderNormalizedItem, useStringifiedSelection } from \"../utils/index.js\";\nimport { usePickerScrollOnOpen } from \"./usePickerScrollOnOpen.js\";\nimport { Section } from \"../shared.js\";\n/** Props that are derived by `usePickerNormalizedProps` */\n/**\n * Props that are passed through untouched. (should exclude all of the\n * destructured props passed into `usePickerNormalizedProps` that are not in the\n * spread ...props)\n */\n/** Props returned from `usePickerNormalizedProps` hook. */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function usePickerNormalizedProps(_ref) {\n var {\n defaultSelectedKey,\n disabledKeys,\n getInitialScrollPosition,\n normalizedItems,\n onChange,\n onOpenChange,\n onScroll = EMPTY_FUNCTION,\n onSelectionChange,\n selectedKey,\n showItemIcons,\n tooltip = true\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var tooltipOptions = useMemo(() => normalizeTooltipOptions(tooltip), [tooltip]);\n var renderNormalizedItem = useRenderNormalizedItem({\n itemIconSlot: 'icon',\n // Descriptions introduce variable item heights which throws off calculation\n // of initial scroll position and setting viewport on windowed data. For now\n // not going to implement description support in Picker.\n // https://github.com/deephaven/web-client-ui/issues/1958\n showItemDescriptions: false,\n showItemIcons,\n tooltipOptions\n });\n\n // Spectrum doesn't re-render if only the `renderNormalizedItems` function\n // changes, so we create a key from its dependencies that can be used to force\n // re-render.\n var forceRerenderKey = \"\".concat(showItemIcons, \"-\").concat(tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.placement);\n var {\n ref,\n onOpenChange: onOpenChangeInternal\n } = usePickerScrollOnOpen({\n getInitialScrollPosition,\n onScroll,\n onOpenChange\n });\n\n // Spectrum Picker treats keys as strings if the `key` prop is explicitly\n // set on `Item` elements. Since we do this in `renderItem`, we need to\n // map original key types to and from strings so that selection works.\n var {\n selectedStringKey,\n defaultSelectedStringKey,\n disabledStringKeys,\n onStringSelectionChange\n } = useStringifiedSelection({\n normalizedItems,\n selectedKey,\n defaultSelectedKey,\n disabledKeys,\n onChange: onChange !== null && onChange !== void 0 ? onChange : onSelectionChange\n });\n var children = useCallback(itemOrSection => {\n if (isNormalizedSection(itemOrSection)) {\n var _itemOrSection$item, _itemOrSection$item2;\n return /*#__PURE__*/_jsx(Section, {\n title: (_itemOrSection$item = itemOrSection.item) === null || _itemOrSection$item === void 0 ? void 0 : _itemOrSection$item.title,\n items: (_itemOrSection$item2 = itemOrSection.item) === null || _itemOrSection$item2 === void 0 ? void 0 : _itemOrSection$item2.items,\n children: renderNormalizedItem\n }, getItemKey(itemOrSection));\n }\n return renderNormalizedItem(itemOrSection);\n }, [renderNormalizedItem]);\n return _objectSpread(_objectSpread({}, props), {}, {\n children,\n forceRerenderKey,\n ref,\n items: normalizedItems,\n selectedKey: selectedStringKey,\n defaultSelectedKey: defaultSelectedStringKey,\n disabledKeys: disabledStringKeys,\n onSelectionChange: onStringSelectionChange,\n onOpenChange: onOpenChangeInternal\n });\n}\nexport default usePickerNormalizedProps;\n//# sourceMappingURL=usePickerNormalizedProps.js.map","var _excluded = [\"UNSAFE_className\"],\n _excluded2 = [\"forceRerenderKey\"];\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 { Picker as SpectrumPicker } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport usePickerNormalizedProps from \"./usePickerNormalizedProps.js\";\n/**\n * Picker that takes an array of `NormalizedItem` or `NormalizedSection` items\n * as children and uses a render item function to render the items. This is\n * necessary to support windowed data.\n */\nimport { createElement as _createElement } from \"react\";\nexport function PickerNormalized(_ref) {\n var {\n UNSAFE_className\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var _usePickerNormalizedP = usePickerNormalizedProps(props),\n {\n forceRerenderKey\n } = _usePickerNormalizedP,\n pickerProps = _objectWithoutProperties(_usePickerNormalizedP, _excluded2);\n return /*#__PURE__*/_createElement(SpectrumPicker\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, pickerProps), {}, {\n key: forceRerenderKey,\n UNSAFE_className: cl('dh-picker', 'dh-picker-normalized', UNSAFE_className)\n }));\n}\nexport default PickerNormalized;\n//# sourceMappingURL=PickerNormalized.js.map","var _excluded = [\"UNSAFE_className\"],\n _excluded2 = [\"defaultSelectedKey\", \"disabledKeys\", \"selectedKey\", \"ref\"];\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 React from 'react';\nimport { ComboBox as SpectrumComboBox } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { useMergeRef } from '@deephaven/react-hooks';\nimport { usePickerProps } from \"../picker/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport { SpectrumComboBox };\nexport var ComboBox = /*#__PURE__*/React.forwardRef(function ComboBox(_ref, ref) {\n var {\n UNSAFE_className\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var _usePickerProps = usePickerProps(props),\n {\n defaultSelectedKey,\n disabledKeys,\n selectedKey,\n ref: scrollRef\n } = _usePickerProps,\n comboBoxProps = _objectWithoutProperties(_usePickerProps, _excluded2);\n var pickerRef = useMergeRef(ref, scrollRef);\n return /*#__PURE__*/_jsx(SpectrumComboBox\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, comboBoxProps), {}, {\n UNSAFE_className: cl('dh-combobox', UNSAFE_className),\n ref: pickerRef\n // Type assertions are necessary here since Spectrum types don't account\n // for number and boolean key values even though they are valid runtime\n // values.\n ,\n defaultSelectedKey: defaultSelectedKey,\n disabledKeys: disabledKeys,\n selectedKey: selectedKey\n }));\n});\nComboBox.displayName = 'ComboBox';\n//# sourceMappingURL=ComboBox.js.map","/* eslint-disable import/prefer-default-export */\nexport function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(value, replaceIndex, newChar) {\n return value.substring(0, replaceIndex) + newChar + value.substring(replaceIndex + 1);\n}\n\n/**\n * Fill the string on the right side with the example value to the given length\n * @param checkValue Initial string to pad\n * @param exampleValue Example value\n * @param length Target length\n * @returns String padded with the given example value\n */\nexport function fillToLength(checkValue, exampleValue, length) {\n return checkValue.length < length ? \"\".concat(checkValue).concat(exampleValue.substring(checkValue.length, length)) : checkValue;\n}\n\n/**\n * Trim all characters matching the empty mask on the right side of the given value\n * @param value String to trim\n * @param emptyMask Empty mask\n * @returns Trimmed string\n */\nexport function trimTrailingMask(value, emptyMask) {\n var {\n length\n } = value;\n for (var i = value.length - 1; i >= 0; i -= 1) {\n if (emptyMask[i] === value[i]) {\n length = i;\n } else {\n break;\n }\n }\n return value.substring(0, length);\n}\n//# sourceMappingURL=MaskedInputUtils.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, { useMemo, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport { DEFAULT_GET_PREFERRED_REPLACEMENT_STRING, fillToLength, trimTrailingMask } from \"./MaskedInputUtils.js\";\nimport \"./MaskedInput.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('MaskedInput');\nvar SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none'\n};\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nvar FIXED_WIDTH_SPACE = '\\u2007';\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nvar MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n onChange = () => false,\n onSelect = () => false,\n onSubmit,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId\n } = props;\n var input = useForwardedRef(ref);\n var examples = useMemo(() => Array.isArray(example) ? example : [example], [example]);\n var emptyMask = useMemo(() => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE), [examples]);\n useEffect(function setSelectedSegment() {\n if (selection != null) {\n var _input$current;\n log.debug('setting selection...', selection);\n var {\n selectionStart,\n selectionEnd,\n selectionDirection\n } = selection;\n (_input$current = input.current) === null || _input$current === void 0 || _input$current.setSelectionRange(selectionStart, selectionEnd, selectionDirection);\n log.debug('selection set!');\n }\n }, [selection, input]);\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n var getSegment = useCallback(cursorPosition => {\n var selectionStart = cursorPosition;\n var selectionEnd = cursorPosition;\n var testValue = examples.length > 0 ? examples[0] : value;\n for (var i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n selectionStart = i;\n }\n for (var _i = selectionEnd; _i < testValue.length; _i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(_i))) {\n break;\n }\n selectionEnd = _i + 1;\n }\n var selectionDirection = selectionStart === selectionEnd ? SELECTION_DIRECTION.NONE : SELECTION_DIRECTION.BACKWARD;\n return {\n selectionStart,\n selectionEnd,\n selectionDirection\n };\n }, [examples, value]);\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(checkValue, exampleValue) {\n var cursorPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : checkValue.length;\n var filledValue = '';\n for (var i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n function isValid(checkValue) {\n var cursorPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : checkValue.length;\n var patternRegex = new RegExp(\"^\".concat(pattern, \"$\"));\n if (patternRegex.test(checkValue)) {\n return true;\n }\n for (var i = 0; i < examples.length; i += 1) {\n var filledValue = fillValue(checkValue, examples[i], cursorPosition);\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns the next segment after the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function nextSegment(position) {\n var currentSegment = getSegment(position);\n var nextPosition = currentSegment.selectionEnd + 1;\n if (nextPosition >= value.length) {\n return currentSegment;\n }\n return getSegment(nextPosition);\n }\n\n /**\n * Returns the previous segment before the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function previousSegment(position) {\n var currentSegment = getSegment(position);\n var previousPosition = currentSegment.selectionStart - 1;\n if (previousPosition <= 0) {\n return currentSegment;\n }\n return getSegment(previousPosition);\n }\n function nextSegmentValue(position, delta) {\n var segment = getSegment(position);\n var segmentValue = value.substring(segment.selectionStart, segment.selectionEnd);\n var newSegmentValue = getNextSegmentValue(segment, delta, segmentValue, value);\n var newValue = value.substring(0, segment.selectionStart) + newSegmentValue + value.substring(segment.selectionEnd);\n if (isValid(newValue, segment.selectionEnd)) {\n onChange(newValue);\n onSelect(segment);\n }\n }\n var handleSelect = useCallback(event => {\n var {\n selectionStart = 0,\n selectionEnd = 0,\n selectionDirection = 'none'\n } = event.target;\n if (selectionStart === null || selectionEnd === null || selectionDirection === null) {\n log.error('Selection attempted on non-text input element', event.target);\n return;\n }\n log.debug2('handleSelect', selectionStart, selectionEnd, selectionDirection);\n if (selection != null && selectionStart === selection.selectionStart && selectionEnd === selection.selectionEnd) {\n return;\n }\n if (selection != null && selectionStart === value.length && selectionEnd === value.length && event.nativeEvent.type !== 'mouseup') {\n // React triggers onSelect event with the cursor at the end of the input content\n // when the component is rendered at a different location in the DOM,\n // i.e. when start/end times switch places in the TimeSlider.\n // Ignore this event and reset the selection to its previous state.\n onSelect(_objectSpread({}, selection));\n return;\n }\n if (selectionStart === selectionEnd) {\n var newSelection = getSegment(selectionStart);\n log.debug('Selection segment from ', selectionStart, selectionEnd, '=>', newSelection);\n onSelect(newSelection);\n } else {\n onSelect({\n selectionStart,\n selectionEnd,\n selectionDirection\n });\n }\n }, [getSegment, onSelect, selection, value]);\n var handleSelectCapture = useCallback(event => {\n var _input$current$select;\n if (!input.current) {\n return;\n }\n log.debug('handleSelectCapture', event);\n var selectionStart = (_input$current$select = input.current.selectionStart) !== null && _input$current$select !== void 0 ? _input$current$select : 0;\n if (selectionStart === value.length && selection != null && selectionStart !== selection.selectionStart) {\n event.preventDefault();\n event.stopPropagation();\n }\n }, [input, selection, value]);\n function handleArrowKey(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!input.current) {\n return;\n }\n var {\n key\n } = event;\n var {\n selectionStart = 0,\n selectionEnd = 0\n } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error('Selection arrow nvaigation attempted on non-text input element', event.target);\n return;\n }\n if (key === 'ArrowLeft') {\n onSelect(previousSegment(selectionStart));\n } else if (key === 'ArrowRight') {\n onSelect(nextSegment(selectionEnd));\n } else if (key === 'ArrowUp') {\n nextSegmentValue(selectionStart, -1);\n } else if (key === 'ArrowDown') {\n nextSegmentValue(selectionStart, 1);\n }\n }\n function handleKeyDown(event) {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n var {\n key\n } = event;\n var {\n selectionStart = 0,\n selectionEnd = 0\n } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error('Selection key event on non-text input element', event.target);\n return;\n }\n if (key === 'Enter') {\n onSubmit === null || onSubmit === void 0 || onSubmit(event);\n return;\n }\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n var newValue = value.substring(0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd ? selectionStart - 1 : selectionStart);\n var trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE\n });\n }\n return;\n }\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n var _newValue = value.substring(0, selectionStart) + value.substring(selectionStart, selectionEnd).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionEnd);\n log.debug('Range ', selectionStart, selectionEnd, 'deleted, setting value', _newValue);\n onChange(_newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE\n });\n } else if (selectionStart > 0) {\n for (var i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n var _newValue2 = value.substring(0, i) + value.substring(i, selectionStart).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionStart);\n if (_newValue2 !== value) {\n onChange(_newValue2);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE\n });\n return;\n }\n }\n }\n return;\n }\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n var newChars = Array.from(new Set([key, key.toUpperCase(), key.toLowerCase()]));\n for (var _i2 = 0; _i2 < newChars.length; _i2 += 1) {\n var newChar = newChars[_i2];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n var maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar) ? examples[0].length - 1 : selectionStart;\n for (var replaceIndex = selectionStart; replaceIndex <= maxReplaceIndex; replaceIndex += 1) {\n // Fill with the example chars if necessary\n var filledValue = fillToLength(value, examples[0], replaceIndex + 1);\n var _newValue3 = getPreferredReplacementString(filledValue, replaceIndex, newChar, selectionStart, selectionEnd);\n if (isValid(_newValue3, replaceIndex + 1)) {\n var currentSegment = getSegment(replaceIndex);\n var newSelectionStart = replaceIndex + 1;\n var newSelection = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n var nextSegmentSelection = nextSegment(replaceIndex);\n if (nextSegmentSelection.selectionStart !== currentSegment.selectionStart) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', _newValue3, newSelection);\n onChange(_newValue3);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return /*#__PURE__*/_jsx(\"input\", {\n ref: input,\n className: classNames('form-control masked-input', className),\n type: \"text\",\n pattern: pattern,\n placeholder: placeholder,\n value: value,\n onChange: () => undefined,\n onKeyDown: handleKeyDown,\n onSelect: handleSelect,\n onSelectCapture: handleSelectCapture,\n onFocus: onFocus,\n onBlur: onBlur,\n \"data-testid\": dataTestId\n });\n});\nexport default MaskedInput;\n//# sourceMappingURL=MaskedInput.js.map","export function getNextNumberSegmentValue(delta, segmentValue, lowerBound, upperBound, length) {\n var modValue = upperBound - lowerBound + 1;\n var newSegmentValue = ((parseInt(segmentValue, 10) - delta - lowerBound) % modValue + modValue) % modValue + lowerBound;\n return \"\".concat(newSegmentValue).padStart(length, '0');\n}\nexport function getNextSegmentValue(range, delta, segmentValue) {\n var {\n selectionStart\n } = range;\n if (selectionStart === 0) {\n return getNextNumberSegmentValue(delta, segmentValue, 1900, 2099, 4);\n }\n if (selectionStart === 5) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 12, 2);\n }\n if (selectionStart === 8) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 31, 2);\n }\n if (selectionStart === 11) {\n // Hours input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 23, 2);\n }\n if (selectionStart === 17 || selectionStart === 14) {\n // Minutes/seconds input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 59, 2);\n }\n if (selectionStart === 20 || selectionStart === 24 || selectionStart === 28) {\n // Milli, micro, and nanosecond input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 999, 3);\n }\n return segmentValue;\n}\n//# sourceMappingURL=DateInputUtils.js.map","/* eslint-disable import/prefer-default-export */\nexport function addSeparators(value) {\n var dateTimeMillis = value.substring(0, 23);\n var micros = value.substring(23, 26);\n var nanos = value.substring(26);\n return [dateTimeMillis, micros, nanos].filter(v => v !== '').join('\\u200B');\n}\n//# sourceMappingURL=DateTimeInputUtils.js.map","import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput from \"./MaskedInput.js\";\nimport { getNextSegmentValue } from \"./DateInputUtils.js\";\nimport { addSeparators } from \"./DateTimeInputUtils.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('DateTimeInput');\n\n// This could be more restrictive and restrict days to the number of days in the month...\n// But then gotta take leap year into account and everything.\nvar DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\n// Put zero width spaces in the nanosecond part of the date to allow jumping between segments\nvar TIME_PATTERN = '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\\\.[0-9]{3}\\u200B[0-9]{3}\\u200B[0-9]{3}';\nvar FULL_DATE_PATTERN = \"\".concat(DATE_PATTERN, \" \").concat(TIME_PATTERN);\nvar DATE_VALUE_STRING = '2022-01-01';\nvar DEFAULT_VALUE_STRING = \"\".concat(DATE_VALUE_STRING, \" 00:00:00.000000000\");\nvar FULL_DATE_FORMAT = 'YYYY-MM-DD HH:MM:SS.SSSSSSSSS';\nfunction fixIncompleteValue(value) {\n if (value != null && value.length >= DATE_VALUE_STRING.length) {\n return \"\".concat(value.substring(0, DATE_VALUE_STRING.length)).concat(value.substring(DATE_VALUE_STRING.length).replace(/\\u2007/g, '0')).concat(DEFAULT_VALUE_STRING.substring(value.length));\n }\n return value;\n}\nfunction removeSeparators(value) {\n return value.replace(/\\u200B/g, '');\n}\nvar EXAMPLES = [addSeparators(DEFAULT_VALUE_STRING)];\nexport var DateTimeInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n onSubmit,\n 'data-testid': dataTestId\n } = props;\n var [value, setValue] = useState(defaultValue.length > 0 ? addSeparators(defaultValue) : '');\n var [selection, setSelection] = useState();\n var handleChange = useCallback(newValue => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(fixIncompleteValue(removeSeparators(newValue)));\n }, [onChange]);\n var handleBlur = useCallback(() => {\n var prevValue = removeSeparators(value);\n var fixedValue = fixIncompleteValue(prevValue);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== prevValue) {\n setValue(addSeparators(fixedValue));\n }\n onBlur();\n }, [value, onBlur]);\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"d-flex flex-row align-items-center\",\n children: /*#__PURE__*/_jsx(MaskedInput, {\n ref: ref,\n className: classNames(className),\n example: EXAMPLES,\n getNextSegmentValue: getNextSegmentValue,\n onChange: handleChange,\n onSelect: setSelection,\n onSubmit: onSubmit,\n pattern: FULL_DATE_PATTERN,\n placeholder: FULL_DATE_FORMAT,\n selection: selection,\n value: value,\n onFocus: onFocus,\n onBlur: handleBlur,\n \"data-testid\": dataTestId\n })\n });\n});\nDateTimeInput.displayName = 'DateTimeInput';\nexport default DateTimeInput;\n//# sourceMappingURL=DateTimeInput.js.map","var _DraggableItemList;\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, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable } from '@hello-pangea/dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils } from '@deephaven/utils';\nimport ItemList from \"./ItemList.js\";\nimport { Tooltip } from \"./popper/index.js\";\nimport \"./DraggableItemList.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses @hello-pangea/dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to @hello-pangea/dnd).\n * One caveat with the use of @hello-pangea/dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/@hello-pangea/dnd/issues/1678\n */\nclass DraggableItemList extends PureComponent {\n static renderHandle() {\n return /*#__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 static renderBadge(_ref) {\n var {\n text\n } = _ref;\n return text != null && text.length > 0 ? /*#__PURE__*/_jsx(\"span\", {\n className: \"number-badge\",\n children: text\n }) : null;\n }\n static renderTextItem(_ref2) {\n var {\n text,\n badgeText = '',\n className = ''\n } = _ref2;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('item-list-item-content', 'draggable-item-list-item-content', className),\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"title\",\n children: text\n }), DraggableItemList.renderBadge({\n text: badgeText\n }), DraggableItemList.renderHandle()]\n });\n }\n static renderItem(_ref3) {\n var _ref4, _item$displayValue;\n var {\n item,\n isClone,\n selectedCount\n } = _ref3;\n var text = item != null ? (_ref4 = (_item$displayValue = item.displayValue) !== null && _item$displayValue !== void 0 ? _item$displayValue : item.value) !== null && _ref4 !== void 0 ? _ref4 : \"\".concat(item) : '';\n var badgeText = isClone !== undefined && isClone ? \"\".concat(selectedCount) : '';\n var className = isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({\n text,\n badgeText,\n className\n });\n }\n static getDraggableId(draggablePrefix, itemIndex) {\n return \"\".concat(draggablePrefix, \"/\").concat(itemIndex);\n }\n static getDraggableIndex(draggableId) {\n var num = draggableId.split('/').pop();\n return parseInt(num !== undefined ? num : '', 10);\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"itemList\", void 0);\n _defineProperty(this, \"getCachedDraggableItem\", memoize((draggablePrefix, renderItem, item, itemIndex, isFocused, isSelected, isDragDisabled, style) => /*#__PURE__*/_jsx(Draggable, {\n draggableId: DraggableItemList.getDraggableId(draggablePrefix, itemIndex),\n index: itemIndex,\n isDragDisabled: isDragDisabled,\n children: provided => /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread(_objectSpread({\n role: \"menuitem\",\n className: \"draggable-item-list-item\",\n ref: provided.innerRef,\n tabIndex: -1\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), provided.dragHandleProps), {}, {\n children: renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false\n })\n }))\n }, itemIndex), {\n max: ItemList.CACHE_SIZE\n }));\n _defineProperty(this, \"getCachedRenderDraggableItem\", memoize((draggablePrefix, isDragDisabled, renderItem) => _ref5 => {\n var {\n item,\n itemIndex,\n isFocused,\n isSelected,\n style\n } = _ref5;\n return this.getCachedDraggableItem(draggablePrefix, renderItem, item, itemIndex, isFocused, isSelected, isDragDisabled, style);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedRenderClone\", memoize((draggingItemClassName, items, offset, renderItem) =>\n // eslint-disable-next-line react/no-unstable-nested-components, react/display-name, react/function-component-definition\n (provided, snapshot, rubric) => {\n // eslint-disable-next-line react/no-this-in-sfc\n var {\n selectedCount\n } = this.state;\n var {\n draggableProps,\n dragHandleProps,\n innerRef\n } = provided;\n var {\n index: itemIndex\n } = rubric.source;\n var item = items[itemIndex - offset];\n return /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread(_objectSpread({\n className: classNames('draggable-item-list-dragging-item-container', draggingItemClassName)\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, draggableProps), dragHandleProps), {}, {\n ref: innerRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: classNames('draggable-item-list-dragging-item', {\n 'two-dragged': selectedCount === 2\n }, {\n 'multiple-dragged': selectedCount > 2\n }),\n children: renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount\n })\n })\n }));\n }, {\n max: 1\n }));\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n this.itemList = /*#__PURE__*/React.createRef();\n this.state = {\n selectedCount: 0\n };\n }\n selectItem(itemIndex) {\n var _this$itemList$curren;\n (_this$itemList$curren = this.itemList.current) === null || _this$itemList$curren === void 0 || _this$itemList$curren.selectItem(itemIndex);\n }\n focusItem(itemIndex) {\n var _this$itemList$curren2;\n (_this$itemList$curren2 = this.itemList.current) === null || _this$itemList$curren2 === void 0 || _this$itemList$curren2.focusItem(itemIndex);\n }\n scrollToItem(itemIndex) {\n var _this$itemList$curren3;\n (_this$itemList$curren3 = this.itemList.current) === null || _this$itemList$curren3 === void 0 || _this$itemList$curren3.scrollToItem(itemIndex);\n }\n handleSelectionChange(selectedRanges) {\n this.setState({\n selectedCount: RangeUtils.count(selectedRanges)\n });\n var {\n onSelectionChange\n } = this.props;\n onSelectionChange(selectedRanges);\n }\n render() {\n var {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n hasPlaceholder,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n 'data-testid': dataTestId\n } = this.props;\n return /*#__PURE__*/_jsx(Droppable, {\n isDropDisabled: isDropDisabled,\n droppableId: droppableId,\n mode: \"virtual\",\n renderClone: this.getCachedRenderClone(draggingItemClassName, items, offset, renderItem),\n \"data-testid\": dataTestId,\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n role: \"menu\",\n className: classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith\n }),\n style: style,\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n children: [/*#__PURE__*/_jsx(ItemList, {\n focusSelector: \".draggable-item-list-item\",\n isDoubleClickSelect: isDoubleClickSelect,\n isDragSelect: false,\n isMultiSelect: isMultiSelect,\n isStickyBottom: isStickyBottom,\n itemCount: itemCount,\n items: items,\n onFocusChange: onFocusChange,\n onSelect: onSelect,\n onSelectionChange: this.handleSelectionChange,\n onViewportChange: onViewportChange,\n offset: offset,\n ref: this.itemList,\n renderItem: this.getCachedRenderDraggableItem(draggablePrefix, isDragDisabled, renderItem),\n rowHeight: rowHeight,\n selectedRanges: selectedRanges\n }), hasPlaceholder && provided.placeholder]\n }))\n });\n }\n}\n_DraggableItemList = DraggableItemList;\n_defineProperty(DraggableItemList, \"DEFAULT_ROW_HEIGHT\", 30);\n_defineProperty(DraggableItemList, \"defaultProps\", {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: _DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n hasPlaceholder: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange() {\n // no-op\n },\n onSelect() {\n // no-op\n },\n onSelectionChange() {\n // no-op\n },\n onViewportChange() {\n // no-op\n },\n renderItem: _DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n 'data-testid': undefined\n});\nexport default DraggableItemList;\n//# sourceMappingURL=DraggableItemList.js.map","import flatten from 'lodash.flatten';\nclass DragUtils {\n /**\n * Re-orders the provided item lists in place based on the selectedRanges and destinationIndex provided\n * @param sourceList Array of the source items\n * @param selectedRanges Array of the selected ranges in the source list\n * @param destinationList Destination items. If dragging within the same list, set it to sourceItems\n * @param destinationIndex The index items are being dropped in the destinationList, adjusted for the removed items\n * @returns The items that were dragged\n */\n static reorder(sourceList, selectedRanges, destinationList, destinationIndex) {\n var insertIndex = sourceList === destinationList ? DragUtils.adjustDestinationIndex(destinationIndex, selectedRanges) : destinationIndex;\n var draggedItems = DragUtils.removeItems(sourceList, selectedRanges);\n destinationList.splice(insertIndex, 0, ...draggedItems);\n return draggedItems;\n }\n\n /**\n * Removes the provided ranges from the list in place\n * @param list Array of items to remove the ranges.\n * @param ranges Array of the ranges to remove.\n * @returns The removed items, in the order of the ranges removed.\n */\n static removeItems(list, ranges) {\n var items = [];\n\n // Sort them in reverse, so we don't screw up the range indexes\n var sortedRanges = ranges.map((range, index) => ({\n range,\n index\n })).sort((a, b) => b.range[0] - a.range[0]);\n for (var i = 0; i < sortedRanges.length; i += 1) {\n var {\n range,\n index\n } = sortedRanges[i];\n var [start, end] = range;\n items[index] = list.splice(start, end - start + 1);\n }\n return flatten(items);\n }\n\n /**\n * Adjusts the destination index for when dropping into the same list you're dragging from.\n * @param destinationIndex The original destination index\n * @param ranges The ranges that are moving\n * @returns Index where item should be inserted after all ranges are removed\n */\n static adjustDestinationIndex(destinationIndex, ranges) {\n var adjustedIndex = destinationIndex;\n for (var i = 0; i < ranges.length; i += 1) {\n var [start, end] = ranges[i];\n if (start > destinationIndex) {\n break;\n }\n adjustedIndex -= Math.min(end, destinationIndex - 1) - start + 1;\n }\n return adjustedIndex;\n }\n static startDragging() {\n document.documentElement.classList.add('drag-pointer-events-none');\n }\n static stopDragging() {\n document.documentElement.classList.remove('drag-pointer-events-none');\n }\n}\nexport default DragUtils;\n//# sourceMappingURL=DragUtils.js.map","import React, { useMemo } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport \"./MenuItem.css\";\nimport UISwitch from \"../UISwitch.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction isSwitchMenuItemType(item) {\n return item.isOn !== undefined;\n}\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport function MenuItem(_ref) {\n var {\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId\n } = _ref;\n var {\n icon,\n subtitle,\n title\n } = item;\n var handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"btn btn-navigation-menu-item\",\n \"data-testid\": \"menu-item-\".concat(title),\n onClick: handleSelect,\n onKeyDown: event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n },\n tabIndex: 0,\n role: \"menuitem\",\n children: [icon !== undefined && /*#__PURE__*/_jsx(\"div\", {\n className: \"icon\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"title\",\n children: title\n }), subtitle !== undefined && /*#__PURE__*/_jsx(\"div\", {\n className: \"shortcut\",\n children: subtitle\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"accessory\",\n \"data-testid\": dataTestId,\n children: isSwitchMenuItemType(item) ? /*#__PURE__*/_jsx(UISwitch, {\n on: item.isOn,\n onClick: event => {\n event.stopPropagation();\n handleSelect();\n }\n }) : /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n })\n })]\n });\n}\nexport default MenuItem;\n//# sourceMappingURL=MenuItem.js.map","import React from 'react';\nimport MenuItem from \"./MenuItem.js\";\nimport \"./Menu.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function Menu(_ref) {\n var {\n items,\n onSelect: _onSelect = () => undefined,\n 'data-testid': dataTestId\n } = _ref;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-menu-view\",\n \"data-testid\": dataTestId,\n children: /*#__PURE__*/_jsx(\"ul\", {\n className: \"navigation-menu-list\",\n children: items.map((item, itemIndex) => /*#__PURE__*/_jsx(\"li\", {\n children: /*#__PURE__*/_jsx(MenuItem, {\n item: item,\n onSelect: () => {\n _onSelect(itemIndex);\n }\n })\n }, item.title))\n })\n });\n}\nexport default Menu;\n//# sourceMappingURL=Menu.js.map","import React from 'react';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport \"./Page.css\";\nimport Button from \"../Button.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport function Page(_ref) {\n var {\n children,\n onBack,\n onClose,\n title,\n 'data-testid': dataTestId\n } = _ref;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"navigation-page\",\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"navigation-title-bar\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-left-buttons\",\n children: onBack !== undefined && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-back m-1 btn-sm\",\n \"data-testid\": \"btn-page-back\",\n onClick: onBack,\n icon: vsChevronLeft,\n children: \"Back\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-title\",\n children: title\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-right-buttons\",\n children: onClose !== undefined && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-close btn-sm px-2 m-1\",\n \"data-testid\": \"btn-page-close\",\n onClick: onClose,\n icon: vsClose,\n tooltip: \"Close\"\n })\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-content\",\n children: children\n })]\n });\n}\nexport default Page;\n//# sourceMappingURL=Page.js.map","var _excluded = [\"direction\", \"classNames\", \"children\", \"timeout\"];\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// SlideTransition class uses CSSTransition with slide-left and slide-right classNames, depending on the prop direction. The transition is 250ms long.\nimport { useCallback, useRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classNames from 'classnames';\nimport ThemeExport from \"../ThemeExport.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar DISPLAY_CONTENTS = {\n display: 'contents'\n};\n/**\n * Slides one component overtop of another component.\n * Defaults to sliding left, unless `direction='right'` is provided.\n * Timeout defaults to 200ms.\n */\nfunction SlideTransition(_ref) {\n var {\n direction = 'left',\n classNames: classNamesProp,\n children,\n /** Defaults to mid */\n timeout = ThemeExport.transitionMidMs\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var nodeRef = useRef(null);\n\n // Mimics findDOMNode for CSSTransition\n // The ref should be set before CSSTransition does anything with it\n var setRef = useCallback(node => {\n nodeRef.current = node === null || node === void 0 ? void 0 : node.firstElementChild;\n }, []);\n return /*#__PURE__*/_jsx(CSSTransition, _objectSpread(_objectSpread({\n nodeRef: nodeRef,\n timeout: timeout,\n classNames: classNames(\"slide-\".concat(direction), classNamesProp)\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, props), {}, {\n children: /*#__PURE__*/_jsx(\"div\", {\n ref: setRef,\n style: DISPLAY_CONTENTS,\n children: children\n })\n }));\n}\nexport default SlideTransition;\n//# sourceMappingURL=SlideTransition.js.map","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport \"./Stack.css\";\nimport { SlideTransition } from \"../transitions/index.js\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport function Stack(_ref) {\n var {\n children,\n 'data-testid': dataTestId\n } = _ref;\n var childrenArray = useMemo(() => React.Children.toArray(children), [children]);\n var prevChildrenArray = usePrevious(childrenArray);\n var [mainView, setMainView] = useState(childrenArray[childrenArray.length - 1]);\n var [pushingView, setPushingView] = useState(null);\n var [poppingView, setPoppingView] = useState(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(function initAnimation() {\n if (prevChildrenArray === undefined || childrenArray === prevChildrenArray) {\n return;\n }\n var topChild = childrenArray[childrenArray.length - 1];\n if (childrenArray.length === prevChildrenArray.length || prevChildrenArray.length === 0 || pushingView !== null || poppingView !== null) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n }, [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]);\n var pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n var popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"navigation-stack\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"main-view\",\n \"data-testid\": dataTestId,\n children: mainView\n }), /*#__PURE__*/_jsx(SlideTransition, {\n direction: \"right\",\n in: poppingView != null,\n onEntered: popComplete,\n children: /*#__PURE__*/_jsx(_Fragment, {\n children: poppingView != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"popping-view\",\n children: poppingView\n })\n })\n }), /*#__PURE__*/_jsx(SlideTransition, {\n in: pushingView != null,\n onEntered: pushComplete,\n children: /*#__PURE__*/_jsx(_Fragment, {\n children: pushingView != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"pushing-view\",\n children: pushingView\n })\n })\n })]\n });\n}\nexport default Stack;\n//# sourceMappingURL=Stack.js.map","var _excluded = [\"children\"];\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 React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction Option(_ref) {\n var {\n children\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(\"option\", _objectSpread(_objectSpread({}, props), {}, {\n children: children\n }));\n}\nexport default Option;\n//# sourceMappingURL=Option.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { PureComponent } from 'react';\nimport \"./SelectValueList.css\";\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport Checkbox from \"./Checkbox.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass SelectValueList extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"list\", void 0);\n _defineProperty(this, \"topRow\", void 0);\n _defineProperty(this, \"bottomRow\", void 0);\n _defineProperty(this, \"getCachedItem\", memoize((itemIndex, key, value, displayValue, rowHeight, isSelected, disabled) => {\n var style = {\n height: rowHeight\n };\n var text = displayValue != null ? displayValue : \"\".concat(value);\n return (\n /*#__PURE__*/\n // Tab index is needed so the item could be a related target in the blur event details\n _jsx(\"li\", {\n className: \"value-list-item\",\n style: style,\n tabIndex: -1,\n children: /*#__PURE__*/_jsx(Checkbox, {\n checked: isSelected,\n disabled: disabled,\n onChange: () => this.handleSelect(itemIndex),\n children: text\n })\n }, key)\n );\n }, {\n max: 1000\n }));\n _defineProperty(this, \"getCachedItems\", memoize((items, rowHeight, offset, disabled) => {\n var itemElements = [];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n value,\n displayValue,\n isSelected\n } = item;\n var itemIndex = offset + i;\n var key = itemIndex;\n var element = this.getCachedItem(itemIndex, key, value, displayValue, rowHeight, isSelected, disabled);\n itemElements.push(element);\n }\n return itemElements;\n }, {\n max: 1\n }));\n this.handleBlur = this.handleBlur.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.list = /*#__PURE__*/React.createRef();\n this.topRow = null;\n this.bottomRow = null;\n }\n componentDidMount() {\n this.sendViewportUpdate();\n }\n componentDidUpdate() {\n this.sendViewportUpdate();\n }\n handleBlur(e) {\n if (!e.relatedTarget || this.list.current && e.relatedTarget instanceof HTMLElement && !this.list.current.contains(e.relatedTarget)) {\n // Next focused element is outside of the list\n var {\n onBlur\n } = this.props;\n onBlur === null || onBlur === void 0 || onBlur(e);\n }\n }\n handleScroll() {\n this.sendViewportUpdate();\n }\n handleSelect(itemIndex) {\n var {\n items,\n offset,\n onSelect\n } = this.props;\n var visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n var item = items[visibleItemIndex];\n var {\n value\n } = item;\n onSelect(itemIndex, value);\n } else {\n onSelect(itemIndex, null);\n }\n }\n sendViewportUpdate() {\n if (!this.list.current || this.list.current.clientHeight === 0) {\n return;\n }\n var {\n onViewportChange,\n rowHeight\n } = this.props;\n var top = this.list.current.scrollTop;\n var bottom = top + this.list.current.clientHeight;\n var topRow = Math.floor(top / rowHeight);\n var bottomRow = Math.ceil(bottom / rowHeight);\n if (this.topRow !== topRow || this.bottomRow !== bottomRow) {\n this.topRow = topRow;\n this.bottomRow = bottomRow;\n onViewportChange(topRow, bottomRow);\n }\n }\n getElement(itemIndex) {\n if (this.list.current == null) {\n return null;\n }\n var elements = this.list.current.querySelectorAll('.value-list-item');\n return elements[itemIndex];\n }\n scrollIntoView(index) {\n var element = this.getElement(index);\n element === null || element === void 0 || element.scrollIntoView({\n block: 'center'\n });\n }\n render() {\n var {\n className,\n disabled,\n isInvalid,\n items,\n itemCount,\n offset,\n rowHeight,\n 'data-testid': dataTestId\n } = this.props;\n var itemElements = this.getCachedItems(items, rowHeight, offset, disabled);\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('select-value-list-scroll-pane h-100 w-100', {\n 'is-invalid': isInvalid\n }, className),\n onBlur: this.handleBlur,\n onScroll: this.handleScroll,\n ref: this.list,\n \"data-testid\": dataTestId,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"select-value-list\",\n style: {\n height: itemCount * rowHeight\n },\n children: /*#__PURE__*/_jsx(\"ol\", {\n className: \"select-value-list-content\",\n style: {\n position: 'absolute',\n height: items.length * rowHeight,\n top: offset * rowHeight,\n left: 0\n },\n children: itemElements\n })\n })\n });\n }\n}\n_defineProperty(SelectValueList, \"defaultProps\", {\n disabled: false,\n rowHeight: 21,\n onBlur: () => undefined,\n 'data-testid': undefined\n});\nexport default SelectValueList;\n//# sourceMappingURL=SelectValueList.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","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","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class AssertionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isAssertionFailed\", true);\n }\n}\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","import { AssertionError } from \"./errors/index.js\";\nexport function isEditableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.isEditable) !== undefined;\n}\nexport function assertIsEditableGridModel(model) {\n if (!isEditableGridModel(model)) {\n throw new AssertionError(\"Expected 'model' to be editable, but received \".concat(model));\n }\n}\n\n/**\n * Edit operation when applying multiple edits\n */\n\n/**\n * Model for an editable grid\n */\n//# sourceMappingURL=EditableGridModel.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 _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { getOrThrow } from '@deephaven/utils';\nimport GridUtils from \"./GridUtils.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nexport { getOrThrow } from '@deephaven/utils';\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n\n/**\n * Trim the provided map in place. Trims oldest inserted items down to the target size if the cache size is exceeded.\n * Instead of trimming one item on every tick, we trim half the items so there isn't a cache clear on every new item.\n * @param map The map to trim\n * @param cacheSize The maximum number of elements to cache\n * @param targetSize The number of elements to reduce the cache down to if `cacheSize` is exceeded\n */\nexport function trimMap(map) {\n var cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GridMetricCalculator.CACHE_SIZE;\n var targetSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Math.floor(cacheSize / 2);\n if (map.size > cacheSize) {\n var iter = map.keys();\n while (map.size > targetSize) {\n map.delete(iter.next().value);\n }\n }\n}\n\n/**\n * Get the coordinates of floating items in one dimension.\n * Can be used for getting the y coordinates of floating rows, or x coordinates of floating columns, calculated using the `sizeMap` passed in.\n * @param startCount The number of floating items at the start (ie. `floatingTopRowCount` for rows, `floatingLeftColumnCount` for columns)\n * @param endCount The number of floating items at the end (ie. `floatingBottomRowCount` for rows, `floatingRightColumnCount` for columns)\n * @param totalCount Total number of items in this dimension (ie. `rowCount` for rows, `columnCount` for columns)\n * @param max The max coordinate value (ie. `maxY` for rows, `maxX` for columns)\n * @param sizeMap Map from index to size of item (ie. `rowHeightMap` for rows, `columnWidthMap` for columns)\n */\nexport function getFloatingCoordinates(startCount, endCount, totalCount, max, sizeMap) {\n var coordinates = new Map();\n var x = 0;\n for (var i = 0; i < startCount && i < totalCount; i += 1) {\n coordinates.set(i, x);\n x += getOrThrow(sizeMap, i);\n }\n x = max;\n for (var _i = 0; _i < endCount && totalCount - _i - 1 >= 0; _i += 1) {\n x -= getOrThrow(sizeMap, totalCount - _i - 1);\n coordinates.set(totalCount - _i - 1, x);\n }\n return coordinates;\n}\n\n/**\n * Class to calculate all the metrics for drawing a grid.\n * Call getMetrics() with the state to get the full metrics.\n * Override this class and override the individual methods to provide additional functionality.\n */\nexport class GridMetricCalculator {\n constructor() {\n var {\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n calculatedRowHeights = new Map(),\n contentColumnWidths = new Map(),\n contentRowHeights = new Map(),\n fontWidthsLower = new Map(),\n fontWidthsUpper = new Map(),\n allCharWidths = new Map(),\n modelRows = new Map(),\n modelColumns = new Map(),\n movedRows = [],\n movedColumns = [],\n initialRowHeights = new Map(),\n initialColumnWidths = new Map()\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n /** The initial row heights if any overrides from the default calculated values */\n _defineProperty(this, \"initialRowHeights\", void 0);\n // Readonly so it should be safe to make public\n /** The initial column widths if any overrides from the default calculated values */\n _defineProperty(this, \"initialColumnWidths\", void 0);\n // Readonly so it should be safe to make public\n /** User set column widths */\n _defineProperty(this, \"userColumnWidths\", void 0);\n /** User set row heights */\n _defineProperty(this, \"userRowHeights\", void 0);\n /** Calculated column widths based on cell contents and caching largest value */\n _defineProperty(this, \"calculatedColumnWidths\", void 0);\n /** Calculated row heights based on cell contents and caching largest value */\n _defineProperty(this, \"calculatedRowHeights\", void 0);\n /** Calculated column widths based on cell contents */\n _defineProperty(this, \"contentColumnWidths\", void 0);\n /** Calculated row heights based on cell contents */\n _defineProperty(this, \"contentRowHeights\", void 0);\n /** Cache of fonts to estimated width of the smallest char */\n _defineProperty(this, \"fontWidthsLower\", void 0);\n /** Cache of fonts to estimated width of the largest char */\n _defineProperty(this, \"fontWidthsUpper\", void 0);\n /** Cache of fonts to width of all chars */\n _defineProperty(this, \"allCharWidths\", void 0);\n /** Map from visible index to model index for rows (e.g. reversing movedRows operations) */\n _defineProperty(this, \"modelRows\", void 0);\n /** Map from visible index to model index for columns (e.g. reversing movedColumns operations) */\n _defineProperty(this, \"modelColumns\", void 0);\n /** List of moved row operations. Need to track the previous value so we know if modelRows needs to be cleared. */\n _defineProperty(this, \"movedRows\", void 0);\n /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */\n _defineProperty(this, \"movedColumns\", void 0);\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.allCharWidths = allCharWidths;\n this.fontWidthsLower = fontWidthsLower;\n this.contentColumnWidths = contentColumnWidths;\n this.contentRowHeights = contentRowHeights;\n this.fontWidthsUpper = fontWidthsUpper;\n\n // Need to track the last moved rows/columns array so we know if we need to reset our models cache\n this.modelRows = modelRows;\n this.modelColumns = modelColumns;\n this.movedRows = movedRows;\n this.movedColumns = movedColumns;\n this.initialRowHeights = initialRowHeights;\n this.initialColumnWidths = initialColumnWidths;\n }\n\n /**\n * Get the metrics for the provided metric state\n * @params state The state to get metrics for\n * @returns The full metrics\n */\n getMetrics(state) {\n var {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n theme,\n model,\n movedRows,\n movedColumns,\n draggingColumn\n } = state;\n var {\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n columnWidth,\n columnHeaderHeight,\n minScrollHandleSize,\n scrollBarSize\n } = theme;\n if (movedRows !== this.movedRows) {\n this.movedRows = movedRows;\n this.modelRows.clear();\n }\n if (movedColumns !== this.movedColumns) {\n this.movedColumns = movedColumns;\n this.modelColumns.clear();\n }\n var {\n columnCount,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnHeaderMaxDepth\n } = model;\n\n // Get some basic metrics\n var firstRow = this.getFirstRow(state);\n var firstColumn = this.getFirstColumn(state);\n var gridX = this.getGridX(state);\n var gridY = this.getGridY(state);\n var treePaddingX = isExpandableGridModel(model) && model.hasExpandableRows ? this.calculateTreePaddingX(state) : 0;\n var treePaddingY = 0; // We don't support trees on columns (at least not yet)\n\n var visibleRowHeights = this.getVisibleRowHeights(state);\n var visibleColumnWidths = this.getVisibleColumnWidths(state, firstColumn, treePaddingX);\n\n // Calculate the metrics for the main grid\n var visibleRows = Array.from(visibleRowHeights.keys());\n var visibleColumns = Array.from(visibleColumnWidths.keys());\n\n // Add the floating row heights/column widths\n var allRowHeights = new Map([...visibleRowHeights, ...this.getFloatingRowHeights(state)]);\n var allColumnWidths = new Map([...visibleColumnWidths, ...this.getFloatingColumnWidths(state)]);\n var visibleColumnXs = this.getVisibleColumnXs(allColumnWidths, visibleColumns, leftOffset);\n var visibleRowYs = this.getVisibleRowYs(allRowHeights, visibleRows, topOffset);\n var bottom = visibleRows.length > 0 ? visibleRows[visibleRows.length - 1] : top;\n var right = visibleColumns.length > 0 ? visibleColumns[visibleColumns.length - 1] : left;\n var bottomViewport = this.getBottomViewport(state, visibleRows, visibleRowYs, allRowHeights);\n var rightViewport = this.getRightViewport(state, visibleColumns, visibleColumnXs, allColumnWidths);\n var floatingTopHeight = this.getFloatingTopHeight(state, allRowHeights);\n var floatingBottomHeight = this.getFloatingBottomHeight(state, allRowHeights);\n var floatingLeftWidth = this.getFloatingLeftWidth(state, allColumnWidths);\n var floatingRightWidth = this.getFloatingRightWidth(state, allColumnWidths);\n var columnWidthValues = Array.from(allColumnWidths.values());\n var rowHeightValues = Array.from(allRowHeights.values());\n var maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;\n var maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;\n\n // How much total space the content will take\n var scrollableContentWidth = leftOffset + maxX + rowFooterWidth;\n var scrollableContentHeight = topOffset + maxY;\n\n // Visible space available in the canvas viewport\n var scrollableViewportWidth = width - gridX;\n var scrollableViewportHeight = height - gridY;\n var lastLeftWithoutScroll = this.getLastLeft(state, null, scrollableViewportWidth - rowFooterWidth);\n var lastLeftWithScroll = this.getLastLeft(state, null, scrollableViewportWidth - rowFooterWidth - scrollBarSize);\n var lastTopWithoutScroll = this.getLastTop(state, null, scrollableViewportHeight - floatingBottomHeight);\n var lastTopWithScroll = this.getLastTop(state, null, scrollableViewportHeight - floatingBottomHeight - scrollBarSize);\n var lastLeft = lastLeftWithScroll;\n var lastTop = lastTopWithScroll;\n if (lastLeftWithoutScroll === 0 && lastTopWithoutScroll === 0) {\n // Fully visible without any scroll bars\n lastLeft = 0;\n lastTop = 0;\n }\n\n // Calculate some metrics for the scroll bars\n var hasHorizontalBar = lastLeft > 0;\n var horizontalBarHeight = hasHorizontalBar ? scrollBarSize : 0;\n var hasVerticalBar = lastTop > 0;\n var verticalBarWidth = hasVerticalBar ? scrollBarSize : 0;\n var barLeft = gridX;\n var barTop = columnHeaderMaxDepth * columnHeaderHeight;\n var barWidth = width - barLeft - verticalBarWidth;\n var barHeight = height - barTop - horizontalBarHeight;\n\n // How big the scroll handle is relative to the bar\n var horizontalHandlePercent = columnCount === 1 ? barWidth / scrollableContentWidth : (columnCount - lastLeft) / columnCount;\n var verticalHandlePercent = rowCount === 1 ? barHeight / scrollableContentHeight : (rowCount - lastTop) / rowCount;\n var handleWidth = hasHorizontalBar ? clamp(barWidth * horizontalHandlePercent, minScrollHandleSize, barWidth - 1) : 0;\n var handleHeight = hasVerticalBar ? clamp(barHeight * verticalHandlePercent, minScrollHandleSize, barHeight - 1) : 0;\n var leftColumnWidth = getOrThrow(allColumnWidths, left, 0);\n var topRowHeight = getOrThrow(allRowHeights, top, 0);\n var leftOffsetPercent = leftColumnWidth > 0 ? leftOffset / leftColumnWidth : 0;\n var topOffsetPercent = topRowHeight > 0 ? topOffset / topRowHeight : 0;\n\n // How much of the available space has been scrolled\n var horizontalScrollPercent = columnCount === 1 ? leftOffset / (scrollableContentWidth - scrollableViewportWidth) : (left + leftOffsetPercent) / lastLeft;\n var verticalScrollPercent = rowCount === 1 ? topOffset / (scrollableContentHeight - scrollableViewportHeight) : (top + topOffsetPercent) / lastTop;\n var scrollX = hasHorizontalBar ? horizontalScrollPercent * (barWidth - handleWidth) : 0;\n var scrollY = hasVerticalBar ? verticalScrollPercent * (barHeight - handleHeight) : 0;\n\n // Now add the floating sections positions\n var floatingRows = [...Array(floatingTopRowCount).keys(), ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1)];\n var allRowYs = new Map([...visibleRowYs, ...this.getFloatingRowYs(state, allRowHeights, Math.floor(height - gridY - horizontalBarHeight))]);\n var floatingColumns = [...Array(floatingLeftColumnCount).keys(), ...[...Array(floatingRightColumnCount).keys()].map(i => columnCount - i - 1)];\n var allColumnXs = new Map([...visibleColumnXs, ...this.getFloatingColumnXs(state, allColumnWidths, Math.floor(width - gridX - verticalBarWidth))]);\n var draggingColumns = [];\n if (draggingColumn) {\n for (var i = draggingColumn.range[0]; i <= draggingColumn.range[1]; i += 1) {\n draggingColumns.push(i);\n if (!allColumnWidths.has(i)) {\n allColumnWidths.set(i, this.getVisibleColumnWidth(i, state));\n }\n if (!allColumnXs.has(i)) {\n allColumnXs.set(i, 0);\n }\n }\n }\n var allRows = visibleRows.concat(floatingRows);\n var allColumns = visibleColumns.concat(floatingColumns).concat(draggingColumns);\n var modelRows = this.getModelRows(allRows, state);\n var modelColumns = this.getModelColumns(allColumns, state);\n var visibleRowTreeBoxes = this.getVisibleRowTreeBoxes(allRowHeights, modelRows, state);\n\n // Calculate the visible viewport based on scroll position and floating sections\n var topVisible = this.getTopVisible(state, allRowYs, allRowHeights, visibleRows);\n var leftVisible = this.getLeftVisible(state, allColumnXs, allColumnWidths, visibleColumns);\n var bottomVisible = lastTop > 0 ? this.getBottomVisible(state, allRowYs, allRowHeights, visibleRows, gridY) : bottom;\n var rightVisible = lastLeft > 0 ? this.getRightVisible(state, allColumnXs, allColumnWidths, visibleColumns, gridX) : right;\n var {\n fontWidthsLower,\n fontWidthsUpper,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths,\n contentColumnWidths,\n contentRowHeights\n } = this;\n return {\n // Row/Column metrics from model\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n rowCount,\n columnWidth,\n columnCount,\n columnHeaderHeight,\n // Floating row and column counts\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n // The grid offset from the top left\n gridX,\n gridY,\n // Index of non-hidden row/columns\n firstRow,\n firstColumn,\n // The amount of padding for tree (if applicable)\n treePaddingX,\n treePaddingY,\n // What viewport is currently visible, limited by data size\n left,\n top,\n bottom,\n right,\n topOffset,\n leftOffset,\n // Bottom and right that are fully visible, not overlapped by scroll bars or anything\n topVisible,\n leftVisible,\n bottomVisible,\n rightVisible,\n // Bottom and right of the viewport, not limited by data size\n bottomViewport,\n rightViewport,\n // Canvas width/height\n width,\n height,\n // Max x/y coordinate of the grid (does not include headers)\n maxX,\n maxY,\n // Last valid column/row that can be the left/top of the grid\n lastLeft,\n lastTop,\n // Scroll bar metrics\n barHeight,\n barTop,\n barWidth,\n barLeft,\n handleHeight,\n handleWidth,\n hasHorizontalBar,\n hasVerticalBar,\n verticalBarWidth,\n horizontalBarHeight,\n // The vertical x/y scroll amount\n scrollX,\n scrollY,\n scrollableContentWidth,\n scrollableContentHeight,\n scrollableViewportWidth,\n scrollableViewportHeight,\n // Array of visible rows/columns, by grid index\n visibleRows,\n visibleColumns,\n // Map of the height/width of columns in the viewport (excluding floating columns)\n visibleRowHeights,\n visibleColumnWidths,\n // Map of the height/width of visible rows/columns without caching largest value\n contentColumnWidths,\n contentRowHeights,\n // Array of floating rows/columns, by grid index\n floatingRows,\n floatingColumns,\n // Array of all rows/columns, visible and floating, by grid index\n allRows,\n allColumns,\n // Map of the height/width of all rendered columns (visible + floating + dragging)\n allRowHeights,\n allColumnWidths,\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n // Map of the X/Y coordinates of the visible rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n // Map of the X/Y coordinates of all rows/columns, visible and floating, from the top left of the grid\n allRowYs,\n allColumnXs,\n // The boxes user can click on for expanding/collapsing tree rows\n visibleRowTreeBoxes,\n // Mapping from visible row indexes to the model row/columns they pull from\n modelRows,\n modelColumns,\n movedRows,\n movedColumns,\n // Map of the width of the fonts\n fontWidthsLower,\n fontWidthsUpper,\n // Map of user set column/row width/height\n userColumnWidths,\n userRowHeights,\n // Map of calculated row/column height/width\n calculatedRowHeights,\n calculatedColumnWidths,\n columnHeaderMaxDepth\n };\n }\n\n /**\n * The x offset of the grid\n * @param state The current grid state\n * @returns x value of the left side of the first cell\n */\n getGridX(state) {\n var {\n theme\n } = state;\n var {\n rowHeaderWidth\n } = theme;\n return rowHeaderWidth;\n }\n\n /**\n * The y offset of the grid\n * @param state The current grid state\n * @returns y value of the top side of the first cell\n */\n getGridY(state) {\n var {\n theme,\n model\n } = state;\n var {\n columnHeaderHeight\n } = theme;\n var {\n columnHeaderMaxDepth\n } = model;\n return columnHeaderMaxDepth * columnHeaderHeight;\n }\n\n /**\n * The height of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleRowHeights All the visible row heights\n * @returns The visible height in pixels\n */\n getVisibleHeight(state) {\n var visibleRowHeights = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingRowHeights(state);\n var {\n height,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var gridY = this.getGridY(state);\n var floatingBottomHeight = this.getFloatingBottomHeight(state, visibleRowHeights);\n var floatingTopHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n return height - floatingBottomHeight - floatingTopHeight - gridY - scrollBarSize;\n }\n\n /**\n * The width of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleColumnWidths All the visible column widths\n * @returns The visible width in pixels\n */\n getVisibleWidth(state) {\n var visibleColumnWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingColumnWidths(state);\n var {\n width,\n theme\n } = state;\n var {\n scrollBarSize,\n rowFooterWidth\n } = theme;\n var gridX = this.getGridX(state);\n var floatingRightWidth = this.getFloatingRightWidth(state, visibleColumnWidths);\n var floatingLeftWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n return width - floatingLeftWidth - floatingRightWidth - gridX - scrollBarSize - rowFooterWidth;\n }\n\n /**\n * Retrieve the index of the first non-hidden item\n * @param itemSizes The size of the items in this dimension\n * @param getModelIndex A function to map from the Index to the ModelIndex\n * @param state The current grid state\n * @returns The first item that is not hidden\n */\n getFirstIndex(itemSizes, getModelIndex, state) {\n // We only need to check at the very most the number of items the user has hidden + 1\n var max = itemSizes.size + 1;\n for (var i = 0; i < max; i += 1) {\n var modelIndex = getModelIndex(i, state);\n if (itemSizes.get(modelIndex) !== 0) {\n return i;\n }\n }\n return 0;\n }\n\n /**\n * Get the first column index that isn't hidden\n * @param state The current grid state\n * @returns The first column that is not hidden\n */\n getFirstColumn(state) {\n return this.getFirstIndex(this.userColumnWidths, this.getModelColumn.bind(this), state);\n }\n\n /**\n * Get the first row index that isn't hidden\n * @param state The current grid state\n * @returns The first row that is not hidden\n */\n getFirstRow(state) {\n return this.getFirstIndex(this.userRowHeights, this.getModelRow.bind(this), state);\n }\n\n /**\n * Get the last column that can be the left most column (e.g. scrolled to the right)\n * If no right column is provided, then the last column is used.\n * @param state The current grid state\n * @param right The right-most column to be visible, or null to default to last cell\n * @param visibleWidth The width of the \"visible\" area (excluding floating items)\n * @returns The index of the last left visible column\n */\n getLastLeft(state, right, visibleWidth) {\n var {\n model\n } = state;\n var {\n columnCount,\n floatingRightColumnCount\n } = model;\n if (columnCount === 0) {\n return 0;\n }\n var lastLeft = Math.max(0, columnCount - floatingRightColumnCount - 1);\n if (right != null) {\n lastLeft = right;\n }\n var x = 0;\n while (lastLeft >= 0) {\n var columnWidth = this.getVisibleColumnWidth(lastLeft, state);\n x += columnWidth;\n if (x >= visibleWidth) {\n return clamp(lastLeft + 1, 0, right !== null && right !== void 0 ? right : columnCount - 1);\n }\n lastLeft -= 1;\n }\n return 0;\n }\n\n /**\n * The last row that can be the top row (e.g. scrolled to the bottom)\n * If no bottom row is provided, then the last row that is not floating is used\n * @param state The current grid state\n * @param bottom The bottom-most row to be visible, or null to default to last cell\n * @param visibleHeight The height of the \"visible\" area (excluding floating items)\n * @returns The index of the last top visible row\n */\n getLastTop(state, bottom, visibleHeight) {\n var {\n model\n } = state;\n var {\n rowCount,\n floatingBottomRowCount\n } = model;\n var lastTop = Math.max(0, rowCount - floatingBottomRowCount - 1);\n if (bottom != null) {\n lastTop = bottom;\n }\n var y = 0;\n while (lastTop >= 0) {\n var rowHeight = this.getVisibleRowHeight(lastTop, state);\n y += rowHeight;\n if (y >= visibleHeight) {\n return clamp(lastTop + 1, 0, rowCount - 1);\n }\n lastTop -= 1;\n }\n return 0;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `topVisible` is completely visible, taking the floating rows into account.\n * The `top` row is at the top underneath any floating rows, whereas `topVisible` is visible below the floating rows.\n * If there are no floating rows, they should be the same value.\n * @param state The grid metric state\n * @param topVisible The top row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForTopVisible(state, topVisible) {\n var floatingTopHeight = this.getFloatingTopHeight(state);\n var top = topVisible;\n var y = 0;\n while (top > 0 && y < floatingTopHeight) {\n top -= 1;\n y += this.getVisibleRowHeight(top, state);\n }\n return top;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `bottomVisible` is completely visible\n * at the bottom of the visible viewport, taking the floating rows into account.\n * @param state The grid metric state\n * @param bottomVisible The bottom row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForBottomVisible(state, bottomVisible) {\n var {\n height,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var gridY = this.getGridY(state);\n var floatingBottomHeight = this.getFloatingBottomHeight(state);\n // Account for scrollbar space to match lastTop calculation\n var availableHeight = height - gridY - floatingBottomHeight - scrollBarSize;\n return this.getLastTop(state, bottomVisible, availableHeight);\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `leftVisible` is completely visible\n * at the left of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param leftVisible The left column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForLeftVisible(state, leftVisible) {\n var floatingLeftWidth = this.getFloatingLeftWidth(state);\n var left = leftVisible;\n var x = 0;\n while (left > 0 && x < floatingLeftWidth) {\n left -= 1;\n x += this.getVisibleColumnWidth(left, state);\n }\n return left;\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `rightVisible` is completely visible\n * at the right of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param rightVisible The right column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForRightVisible(state, rightVisible) {\n var {\n width,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var gridX = this.getGridX(state);\n var floatingRightWidth = this.getFloatingRightWidth(state);\n // Account for scrollbar space to match lastLeft calculation\n var availableWidth = width - gridX - floatingRightWidth - scrollBarSize;\n return this.getLastLeft(state, rightVisible, availableWidth);\n }\n\n /**\n * Retrieve a map of the height of each floating row\n * @param state The grid metric state\n * @returns The heights of all the floating rows\n */\n getFloatingRowHeights(state) {\n var {\n model\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = model;\n var rowHeights = new Map();\n for (var i = 0; i < floatingTopRowCount && i < rowCount; i += 1) {\n rowHeights.set(i, this.getVisibleRowHeight(i, state));\n }\n for (var _i2 = 0; _i2 < floatingBottomRowCount && rowCount - _i2 - 1 >= 0; _i2 += 1) {\n var row = rowCount - _i2 - 1;\n rowHeights.set(row, this.getVisibleRowHeight(row, state));\n }\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the height of all the visible rows (non-floating)\n * @param state The grid metric state\n * @returns The heights of all the visible rows\n */\n getVisibleRowHeights(state) {\n var {\n top,\n topOffset,\n height,\n model\n } = state;\n var y = 0;\n var row = top;\n var rowHeights = new Map();\n var {\n rowCount,\n floatingBottomRowCount\n } = model;\n while (y < height + topOffset && row < rowCount - floatingBottomRowCount) {\n var rowHeight = this.getVisibleRowHeight(row, state);\n rowHeights.set(row, rowHeight);\n y += rowHeight;\n row += 1;\n }\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the width of each floating column\n * @param state The grid metric state\n * @param firstColumn The first non-hidden column\n * @param treePaddingX The amount of padding taken up for the tree expansion buttons\n * @returns The widths of all the floating columns\n */\n getFloatingColumnWidths(state) {\n var firstColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFirstColumn(state);\n var treePaddingX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.calculateTreePaddingX(state);\n var {\n model\n } = state;\n var {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount\n } = model;\n var columnWidths = new Map();\n for (var i = 0; i < floatingLeftColumnCount && i < columnCount; i += 1) {\n columnWidths.set(i, this.getVisibleColumnWidth(i, state, firstColumn, treePaddingX));\n }\n for (var _i3 = 0; _i3 < floatingRightColumnCount && columnCount - _i3 - 1 >= 0; _i3 += 1) {\n var column = columnCount - _i3 - 1;\n columnWidths.set(column, this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX));\n }\n return columnWidths;\n }\n\n /**\n * Retrieve a map of the width of all the visible columns (non-floating)\n * @param state The grid metric state\n * @returns The widths of all the visible columns\n */\n getVisibleColumnWidths(state) {\n var firstColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFirstColumn(state);\n var treePaddingX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.calculateTreePaddingX(state);\n var {\n left,\n leftOffset,\n width,\n model\n } = state;\n var x = 0;\n var column = left;\n var columnWidths = new Map();\n var {\n columnCount,\n floatingRightColumnCount\n } = model;\n while (x < width + leftOffset && column < columnCount - floatingRightColumnCount) {\n var columnWidth = this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX);\n columnWidths.set(column, columnWidth);\n x += columnWidth;\n column += 1;\n }\n return columnWidths;\n }\n\n /**\n * Retrieve a map of all the floating columns to their x coordinate\n * @param state The grid metric state\n * @param columnWidthMap Map from visible index to column width\n * @param maxX The maximum X size for the grid\n * @returns Map of the x coordinate of all floating columns\n */\n getFloatingColumnXs(state, columnWidthMap, maxX) {\n var {\n model\n } = state;\n var {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount\n } = model;\n return getFloatingCoordinates(floatingLeftColumnCount, floatingRightColumnCount, columnCount, maxX, columnWidthMap);\n }\n\n /**\n * Retrieve a map of all the visible columns to their x coordinate.\n * Starts at leftOffset with the first index in `visibleColumns`, then\n * calculates all the coordinates from there\n * @param visibleColumnWidths Map of visible column index to widths\n * @param visibleColumns All visible columns\n * @param leftOffset The left scroll offset\n * @returns Map of the x coordinate of all visible columns\n */\n getVisibleColumnXs(visibleColumnWidths, visibleColumns, leftOffset) {\n var visibleColumnXs = new Map();\n var x = -leftOffset;\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var column = visibleColumns[i];\n var columnWidth = getOrThrow(visibleColumnWidths, column);\n visibleColumnXs.set(column, x);\n x += columnWidth;\n }\n return visibleColumnXs;\n }\n\n /**\n * Retrieve a map of all the floating rows to their y coordinate\n * @param state The grid metric state\n * @param rowHeightMap Map of visible index to row height\n * @param maxY The maximum Y size for the grid\n * @returns Map of the y coordinate of all floating rows\n */\n getFloatingRowYs(state, rowHeightMap, maxY) {\n var {\n model\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = model;\n return getFloatingCoordinates(floatingTopRowCount, floatingBottomRowCount, rowCount, maxY, rowHeightMap);\n }\n\n /**\n * Retrieve a map of all the visible rows to their y coordinate.\n * Starts at topOffset with the first index in `visibleRows`, then\n * calculates all the coordinates from there\n * @param visibleRowHeights Map of visible row index to heights\n * @param visibleRows All visible rows\n * @param topOffset The top scroll offset\n * @returns Map of the y coordinate of all visible rows\n */\n getVisibleRowYs(visibleRowHeights, visibleRows, topOffset) {\n var visibleRowYs = new Map();\n var y = -topOffset;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var rowHeight = getOrThrow(visibleRowHeights, row);\n visibleRowYs.set(row, y);\n y += rowHeight;\n }\n return visibleRowYs;\n }\n\n /**\n * Calculates the tree box click areas that are visible. In relation to the columnX/rowY\n * @param visibleRowHeights Map of visible index to row height\n * @param modelRows Map from visible `Index` to `ModelIndex`\n * @param state The grid metric state\n * @returns Coordinates of tree boxes for each row\n */\n getVisibleRowTreeBoxes(visibleRowHeights, modelRows, state) {\n var visibleRowTreeBoxes = new Map();\n var {\n model,\n theme\n } = state;\n var {\n treeDepthIndent,\n treeHorizontalPadding\n } = theme;\n if (isExpandableGridModel(model) && model.hasExpandableRows) {\n visibleRowHeights.forEach((rowHeight, row) => {\n var modelRow = getOrThrow(modelRows, row);\n if (model.isRowExpandable(modelRow)) {\n var depth = model.depthForRow(modelRow);\n var x1 = depth * treeDepthIndent + treeHorizontalPadding;\n var x2 = (depth + 1) * treeDepthIndent + treeHorizontalPadding;\n var y1 = 0;\n var y2 = rowHeight;\n visibleRowTreeBoxes.set(row, {\n x1,\n y1,\n x2,\n y2\n });\n }\n });\n }\n return visibleRowTreeBoxes;\n }\n\n /**\n * Get the total width of the floating columns on the left\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating left section\n */\n getFloatingLeftWidth(state) {\n var columnWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingColumnWidths(state);\n var {\n model\n } = state;\n var {\n floatingLeftColumnCount\n } = model;\n var floatingWidth = 0;\n for (var i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, i);\n }\n return floatingWidth;\n }\n\n /**\n * Get the total width of the floating columns on the right\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating right section\n */\n getFloatingRightWidth(state) {\n var columnWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingColumnWidths(state);\n var {\n model\n } = state;\n var {\n floatingRightColumnCount,\n columnCount\n } = model;\n var floatingWidth = 0;\n for (var i = 0; i < floatingRightColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, columnCount - i - 1);\n }\n return floatingWidth;\n }\n\n /**\n * Get the total height of the floating rows on the top\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating top section\n */\n getFloatingTopHeight(state) {\n var rowHeights = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingRowHeights(state);\n var {\n model\n } = state;\n var {\n floatingTopRowCount\n } = model;\n var floatingHeight = 0;\n for (var i = 0; i < floatingTopRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, i);\n }\n return floatingHeight;\n }\n\n /**\n * Get the total height of the floating rows on the bottom\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating bottom section\n */\n getFloatingBottomHeight(state) {\n var rowHeights = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingRowHeights(state);\n var {\n model\n } = state;\n var {\n floatingBottomRowCount,\n rowCount\n } = model;\n var floatingHeight = 0;\n for (var i = 0; i < floatingBottomRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, rowCount - i - 1);\n }\n return floatingHeight;\n }\n\n /**\n * Retrieve the index of the first fully visible row in the \"visible\" viewport of the grid.\n * E.g. First row visible after the floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @returns Index of the top visible row\n */\n getTopVisible(state, visibleRowYs, visibleRowHeights, visibleRows) {\n var floatingHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var y = getOrThrow(visibleRowYs, row);\n if (y >= floatingHeight) {\n return row;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the first fully visible column in the \"visible\" viewport of the grid.\n * E.g. First column visible after the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible row indexes\n * @returns Index of the left visible column\n */\n getLeftVisible(state, visibleColumnXs, visibleColumnWidths, visibleColumns) {\n var floatingWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var column = visibleColumns[i];\n var x = getOrThrow(visibleColumnXs, column);\n if (x >= floatingWidth) {\n return column;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible row in the \"visible\" viewport of the grid.\n * E.g. Last row visible before the bottom floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @param gridY The starting y coordinate of the grid\n * @returns Index of the bottom visible row\n */\n getBottomVisible(state, visibleRowYs, visibleRowHeights, visibleRows, gridY) {\n var {\n height,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var floatingHeight = this.getFloatingBottomHeight(state, visibleRowHeights);\n var visibleHeight = height - gridY - scrollBarSize - floatingHeight;\n for (var i = visibleRows.length - 1; i >= 0; i -= 1) {\n var row = visibleRows[i];\n var rowY = getOrThrow(visibleRowYs, row);\n var rowHeight = getOrThrow(visibleRowHeights, row);\n if (rowY + rowHeight <= visibleHeight) {\n return row;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible column in the \"visible\" viewport of the grid.\n * E.g. Last column visible before the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible column indexes\n * @returns Index of the right visible column\n */\n getRightVisible(state, visibleColumnXs, visibleColumnWidths, visibleColumns, gridX) {\n var {\n width,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var floatingWidth = this.getFloatingRightWidth(state, visibleColumnWidths);\n var visibleWidth = width - gridX - scrollBarSize - floatingWidth;\n for (var i = visibleColumns.length - 1; i >= 0; i -= 1) {\n var column = visibleColumns[i];\n var columnX = getOrThrow(visibleColumnXs, column);\n var columnWidth = getOrThrow(visibleColumnWidths, column);\n if (columnX + columnWidth <= visibleWidth) {\n return column;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the possible bottom of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleRows Array of visible row indexes\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @returns The index of the bottom viewport possible\n */\n getBottomViewport(state, visibleRows, visibleRowYs, visibleRowHeights) {\n var {\n height,\n theme\n } = state;\n var {\n rowHeight\n } = theme;\n return this.getLastIndexViewport(visibleRows, visibleRowYs, visibleRowHeights, height, rowHeight);\n }\n\n /**\n * Retrieve the possible right of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleColumns Array of visible column indexes\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to width\n * @returns The index of the right viewport possible\n */\n getRightViewport(state, visibleColumns, visibleColumnXs, visibleColumnWidths) {\n var {\n width,\n theme\n } = state;\n var {\n columnWidth\n } = theme;\n return this.getLastIndexViewport(visibleColumns, visibleColumnXs, visibleColumnWidths, width, columnWidth);\n }\n\n /**\n * Get the Index of the of the last index visible\n * @param items Array of visible item indexes\n * @param itemXs Map of index to coordinate\n * @param itemSizes Map of index to size\n * @param maxSize Full size of the grid\n * @param defaultItemSize Default size of an item\n * @returns The Index of the last index visible\n */\n getLastIndexViewport(items, itemXs, itemSizes, maxSize, defaultItemSize) {\n var lastIndex = 0;\n var dataSize = 0;\n if (items.length > 0) {\n lastIndex = items[items.length - 1];\n dataSize = getOrThrow(itemXs, lastIndex) + getOrThrow(itemSizes, lastIndex);\n }\n if (dataSize < maxSize) {\n lastIndex += Math.ceil((maxSize - dataSize) / defaultItemSize);\n }\n return lastIndex;\n }\n\n /**\n * Get the size from the provided size map of the specified item\n * @param modelIndex The model index to get the size for\n * @param userSizes The user set sizes\n * @param getDefaultSize Method to get the default size for this item\n * @returns The size from the provided size map of the specified item\n */\n getVisibleItemSize(modelIndex, userSizes, getDefaultSize) {\n var _userSizes$get;\n return (_userSizes$get = userSizes.get(modelIndex)) !== null && _userSizes$get !== void 0 ? _userSizes$get : getDefaultSize();\n }\n\n /**\n * Get the height of the specified row\n * @param row Index of the row to get the height of\n * @param state The grid metric state\n * @returns The height of the row specified\n */\n getVisibleRowHeight(row, state) {\n var modelRow = this.getModelRow(row, state);\n var calculatedHeight = this.calculateRowHeight(row, modelRow, state); // Need to call this so calculated map is always populated\n\n return this.getVisibleItemSize(modelRow, this.userRowHeights, () => {\n var initialHeight = this.initialRowHeights.get(modelRow);\n if (initialHeight !== undefined) {\n return initialHeight;\n }\n return calculatedHeight;\n });\n }\n\n /**\n * Get the width of the specified column\n * @param column Index of the column to get the width of\n * @param state The grid metric state\n * @param firstColumn Index of first visible column\n * @param treePaddingX The amount of tree padding to add to the first visible column\n * @returns The width of the column\n */\n getVisibleColumnWidth(column, state) {\n var firstColumn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.getFirstColumn(state);\n var treePaddingX = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.calculateTreePaddingX(state);\n var modelColumn = this.getModelColumn(column, state);\n\n // Need to call this so calculated map is always populated\n var calculatedWidth = this.calculateColumnWidth(column, modelColumn, state, firstColumn, treePaddingX);\n return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () => {\n var initialWidth = this.initialColumnWidths.get(modelColumn);\n if (initialWidth !== undefined) {\n return initialWidth;\n }\n return calculatedWidth;\n });\n }\n\n /**\n * Get a map of VisibleIndex to ModelIndex\n * @param visibleRows Array of visible row indexes\n * @param state The grid metric state\n * @returns Map of VisibleIndex to ModelIndex\n */\n getModelRows(visibleRows, state) {\n var modelRows = new Map();\n for (var i = 0; i < visibleRows.length; i += 1) {\n var visibleRow = visibleRows[i];\n var modelRow = this.getModelRow(visibleRow, state);\n modelRows.set(visibleRow, modelRow);\n }\n return modelRows;\n }\n\n /**\n * Get the ModelIndex of the specified row\n * @param visibleRow Index of the row\n * @param state The grid metric state\n * @returns ModelIndex of the row\n */\n getModelRow(visibleRow, state) {\n if (this.modelRows.has(visibleRow)) {\n return getOrThrow(this.modelRows, visibleRow);\n }\n var {\n movedRows\n } = state;\n var modelRow = GridUtils.getModelIndex(visibleRow, movedRows);\n this.modelRows.set(visibleRow, modelRow);\n return modelRow;\n }\n\n /**\n * Get a map of Index to ModelIndex. Applies the move operations to get the transformation.\n * @param visibleColumns Array of visible column indexes\n * @param state The grid metric state\n * @returns Map of Index to ModelIndex\n */\n getModelColumns(visibleColumns, state) {\n var modelColumns = new Map();\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var visibleColumn = visibleColumns[i];\n var modelColumn = this.getModelColumn(visibleColumn, state);\n modelColumns.set(visibleColumn, modelColumn);\n }\n return modelColumns;\n }\n\n /**\n * Get the ModelIndex of the specified column\n * @param visibleColumn Index of the column\n * @param state The grid metric state\n * @returns ModelIndex of the column\n */\n getModelColumn(visibleColumn, state) {\n var hasVisibleColumn = this.modelColumns.has(visibleColumn);\n if (hasVisibleColumn) {\n return getOrThrow(this.modelColumns, visibleColumn);\n }\n var {\n movedColumns\n } = state;\n var modelColumn = GridUtils.getModelIndex(visibleColumn, movedColumns);\n this.modelColumns.set(visibleColumn, modelColumn);\n return modelColumn;\n }\n\n /**\n * Calculate the height of the row specified.\n * @param row Index of the row to calculate the height for\n * @param modelRow ModelIndex of the row to calculate the height\n * @param state The grid metric state\n * @returns The height of the row\n */\n calculateRowHeight(row, modelRow, state) {\n var {\n theme\n } = state;\n var {\n autoSizeRows,\n rowHeight\n } = theme;\n if (!autoSizeRows) {\n return rowHeight;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.contentRowHeights.set(modelRow, Math.ceil(rowHeight));\n trimMap(this.contentRowHeights);\n var cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null && cachedValue > rowHeight) {\n return cachedValue;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.calculatedRowHeights.set(modelRow, Math.ceil(rowHeight));\n trimMap(this.calculatedRowHeights);\n return rowHeight;\n }\n\n /**\n * Calculates the column width based on the provided column model index\n * @param column Index of the column to calculate the width for\n * @param modelColumn ModelIndex of the column to calculate the width\n * @param state The grid metric state\n * @param firstColumn The first visible column\n * @param treePaddingX Tree padding offset for expandable rows\n * @returns The width of the column\n */\n calculateColumnWidth(column, modelColumn, state) {\n var firstColumn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.getFirstColumn(state);\n var treePaddingX = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.calculateTreePaddingX(state);\n var {\n theme\n } = state;\n var {\n autoSizeColumns,\n minColumnWidth,\n maxColumnWidth\n } = theme;\n if (!autoSizeColumns) {\n var {\n columnWidth: _columnWidth\n } = theme;\n return _columnWidth;\n }\n var headerWidth = this.calculateColumnHeaderWidth(modelColumn, state, maxColumnWidth);\n var dataWidth = this.calculateColumnDataWidth(modelColumn, state, maxColumnWidth);\n var cachedValue = this.calculatedColumnWidths.get(modelColumn);\n var columnWidth = Math.ceil(Math.max(headerWidth, dataWidth));\n columnWidth = Math.max(minColumnWidth, columnWidth);\n columnWidth = Math.min(maxColumnWidth, columnWidth);\n this.contentColumnWidths.set(modelColumn, columnWidth);\n trimMap(this.contentColumnWidths);\n if (cachedValue != null && cachedValue > columnWidth) {\n columnWidth = cachedValue;\n } else {\n this.calculatedColumnWidths.set(modelColumn, columnWidth);\n trimMap(this.calculatedColumnWidths);\n }\n if (column === firstColumn) {\n columnWidth += treePaddingX;\n }\n return columnWidth;\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 * @returns The calculated width of the column header\n */\n calculateColumnHeaderWidth(modelColumn, 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 totalPadding = headerHorizontalPadding * 2;\n var headerText = model.textForColumnHeader(modelColumn, 0);\n if (headerText !== undefined && headerText !== '') {\n return this.calculateTextWidth(context, headerFont, headerText, maxColumnWidth - totalPadding) + totalPadding;\n }\n return totalPadding;\n }\n\n /**\n * Calculate the width of the specified column's data\n * @param modelColumn ModelIndex of the column to get the data width for\n * @param state The grid metric state\n * @returns The calculated width of the column data\n */\n calculateColumnDataWidth(modelColumn, state, maxColumnWidth) {\n var {\n top,\n height,\n width,\n model,\n theme,\n context\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = model;\n var {\n font,\n cellHorizontalPadding,\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n scrollBarSize,\n dataBarHorizontalPadding\n } = theme;\n this.calculateLowerFontWidth(font, context);\n this.calculateUpperFontWidth(font, context);\n var columnWidth = 0;\n var gridY = this.getGridY(state);\n var rowsPerPage = Math.floor((height - gridY) / rowHeight);\n var bottom = Math.ceil(top + rowsPerPage);\n var cellPadding = cellHorizontalPadding * 2;\n GridUtils.iterateAllItems(top, bottom, floatingTopRowCount, floatingBottomRowCount, rowCount, row => {\n var modelRow = this.getModelRow(row, state);\n var text = model.textForCell(modelColumn, modelRow);\n var cellRenderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellWidth = 0;\n if (text) {\n cellWidth = this.calculateTextWidth(context, font, text, maxColumnWidth - cellPadding) + cellPadding;\n }\n if (cellRenderType === 'dataBar') {\n cellWidth += dataBarHorizontalPadding;\n }\n columnWidth = Math.max(columnWidth, cellWidth);\n });\n columnWidth = Math.max(Math.min(columnWidth, (width - rowHeaderWidth - scrollBarSize - rowFooterWidth) * GridMetricCalculator.MAX_COLUMN_WIDTH), cellPadding);\n return columnWidth;\n }\n\n /**\n * Calculates the width of a string using widths of individual and pairs of characters to take into account font kerning\n * @param context The canvas rendering context\n * @param font The font to get the width for\n * @param text The text to calculate the width for\n * @param maxWidth The maximum width to calculate to\n */\n calculateTextWidth(context, font, text, maxWidth) {\n if (text.length === 0) return 0;\n context.font = font;\n if (!this.allCharWidths.has(font)) {\n this.allCharWidths.set(font, new Map());\n }\n var charWidths = getOrThrow(this.allCharWidths, font);\n var result = 0;\n for (var i = 0; i < text.length; i += 1) {\n var char = text[i];\n var nextChar = text[i + 1];\n if (!charWidths.has(char)) {\n charWidths.set(char, context.measureText(char).width);\n }\n if (nextChar !== undefined) {\n if (!charWidths.has(nextChar)) {\n charWidths.set(nextChar, context.measureText(nextChar).width);\n }\n var pair = char + nextChar;\n if (!charWidths.has(pair)) {\n charWidths.set(pair, context.measureText(pair).width);\n }\n result += getOrThrow(charWidths, pair);\n if (i > 0) {\n // Need to remove the current character that was already counted in the previous pair\n result -= getOrThrow(charWidths, char);\n }\n if (maxWidth !== undefined && result > maxWidth) {\n return maxWidth;\n }\n } else if (result === 0) {\n // On last char and no pair found before that => Only one char in string\n result = getOrThrow(charWidths, char);\n }\n }\n return result;\n }\n\n /**\n * The coordinate for where the tree padding should be drawn\n * @param state The grid metric state\n * @returns The coordinate for tree padding\n */\n calculateTreePaddingX(state) {\n var {\n top,\n height,\n model,\n theme\n } = state;\n var {\n rowHeight,\n treeDepthIndent\n } = theme;\n if (!isExpandableGridModel(model) || !model.hasExpandableRows) {\n return 0;\n }\n var treePadding = 0;\n var rowsPerPage = height / rowHeight;\n var bottom = Math.ceil(top + rowsPerPage);\n for (var row = top; row <= bottom; row += 1) {\n var modelRow = this.getModelRow(row, state);\n var depth = model.depthForRow(modelRow);\n treePadding = Math.max(treePadding, treeDepthIndent * (depth + 1));\n }\n return treePadding;\n }\n\n /**\n * Calculates the lower bound width of a character of the provided font.\n * @param font The font to get the width for\n * @param context The canvas rendering context\n */\n calculateLowerFontWidth(font, context) {\n if (this.fontWidthsLower.has(font)) {\n return;\n }\n context.font = font;\n // Assume char `.` is the smallest character\n var textMetrics = context.measureText('.');\n var {\n width\n } = textMetrics;\n\n // context.font changes the string a little bit, e.g. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidthsLower.set(font, width);\n this.fontWidthsLower.set(context.font, width);\n }\n\n /**\n * Calculates the upper bound width of a character of the provided font.\n * @param font The font to get the width for\n * @param context The canvas rendering context\n */\n calculateUpperFontWidth(font, context) {\n if (this.fontWidthsUpper.has(font)) {\n return;\n }\n context.font = font;\n // Assume char `m` is the largest character\n var textMetrics = context.measureText('m');\n var {\n width\n } = textMetrics;\n\n // context.font changes the string a little bit, e.g. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidthsUpper.set(font, width);\n this.fontWidthsUpper.set(context.font, width);\n }\n\n /**\n * Sets the width for the specified column\n * @param column The column model index to set\n * @param size The size to set it to\n */\n setColumnWidth(column, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.set(column, Math.ceil(size));\n trimMap(userColumnWidths);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Resets the column width for the specified column to the calculated width\n * @param column The column model index to reset\n */\n resetColumnWidth(column) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.delete(column);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Sets the calculated width for the specified column\n * @param column The column model index to set\n * @param size The size to set it to\n */\n setCalculatedColumnWidth(column, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var calculatedColumnWidths = new Map(this.calculatedColumnWidths);\n calculatedColumnWidths.set(column, Math.ceil(size));\n trimMap(calculatedColumnWidths);\n this.calculatedColumnWidths = calculatedColumnWidths;\n }\n\n /**\n * Resets all the calculated column widths\n * Useful if the theme minimum column width changes\n */\n resetCalculatedColumnWidths() {\n this.calculatedColumnWidths = new Map();\n }\n\n /**\n * Sets the width for the specified row\n * @param row The row model index to set\n * @param size The size to set it to\n */\n setRowHeight(row, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userRowHeights = new Map(this.userRowHeights);\n userRowHeights.set(row, Math.ceil(size));\n trimMap(userRowHeights);\n this.userRowHeights = userRowHeights;\n }\n\n /**\n * Resets the row height for the specified row to the calculated height\n * @param row The row model index to reset\n */\n resetRowHeight(row) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userRowHeights = new Map(this.userRowHeights);\n userRowHeights.delete(row);\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights.delete(row);\n }\n\n /**\n * Sets the calculated height for the specified row\n * @param row The column model index to set\n * @param size The size to set it to\n */\n setCalculatedRowHeight(row, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var calculatedRowHeights = new Map(this.calculatedRowHeights);\n calculatedRowHeights.set(row, Math.ceil(size));\n trimMap(calculatedRowHeights);\n this.calculatedColumnWidths = calculatedRowHeights;\n }\n\n /**\n * Resets all the calculated row heights\n * Useful if the theme row height changes\n */\n resetCalculatedRowHeights() {\n this.calculatedRowHeights = new Map();\n }\n}\n/** The size of the caches this calculator stores */\n_defineProperty(GridMetricCalculator, \"CACHE_SIZE\", 10000);\n/** The maximum column width as a percentage of the full grid */\n_defineProperty(GridMetricCalculator, \"MAX_COLUMN_WIDTH\", 0.8);\nexport default GridMetricCalculator;\n//# sourceMappingURL=GridMetricCalculator.js.map","/** A color parsed as CSS color value, eg. '#FF0000' */\n\n/** A nullable color, eg. pass `null` to skip drawing this item */\n\n/** One or more colors parsed as CSS color value separated by space, eg. '#FF0000 #00FF00' */\n\n/** A font parsed as CSS font value */\n\n/**\n * Default theme for a Grid.\n */\nvar defaultTheme = Object.freeze({\n allowColumnResize: true,\n allowRowResize: true,\n autoSelectRow: false,\n // Select the full row upon selection\n autoSelectColumn: false,\n // Select the full column upon selection\n autoSizeColumns: true,\n // Automatically size the columns to fit content\n autoSizeRows: true,\n backgroundColor: '#000000',\n black: '#000000',\n white: '#ffffff',\n cellHorizontalPadding: 5,\n headerHorizontalPadding: 5,\n font: '12px Arial, sans-serif',\n gridColumnColor: '#8f8f8f66',\n gridRowColor: '#8f8f8f66',\n headerBackgroundColor: '#222222',\n headerSeparatorColor: '#000000',\n headerSeparatorHoverColor: '#888888',\n headerSeparatorHandleSize: 5,\n headerHiddenSeparatorSize: 5,\n headerHiddenSeparatorHoverColor: '#8888FF',\n headerColor: '#d5d5d5',\n headerFont: '10px Arial, sans-serif',\n columnHoverBackgroundColor: '#444444',\n selectedColumnHoverBackgroundColor: '#494949',\n rowBackgroundColors: '#333333 #222222',\n rowHoverBackgroundColor: '#444444',\n selectedRowHoverBackgroundColor: '#494949',\n minScrollHandleSize: 50,\n scrollBarBackgroundColor: '#111111',\n scrollBarHoverBackgroundColor: '#333333',\n scrollBarCasingColor: '#000000',\n scrollBarCornerColor: '#000000',\n scrollBarColor: '#555555',\n scrollBarHoverColor: '#888888',\n scrollBarActiveColor: '#AAAAAA',\n scrollBarSize: 12,\n scrollBarHoverSize: 16,\n scrollBarCasingWidth: 1,\n scrollSnapToColumn: false,\n scrollSnapToRow: false,\n activeCellSelectionBorderWidth: 2,\n selectionColor: '#4286f433',\n selectionOutlineColor: '#4286f4',\n selectionOutlineCasingColor: '#222222',\n scrollBarSelectionTick: true,\n scrollBarSelectionTickColor: '#4286f433',\n scrollBarActiveSelectionTickColor: '#4286f480',\n shadowBlur: 8,\n shadowAlpha: 0.15,\n shadowColor: '#000000',\n textColor: '#ffffff',\n hyperlinkColor: '#4878ea',\n maxDepth: 6,\n treeDepthIndent: 10,\n treeHorizontalPadding: 5,\n treeLineColor: '#888888',\n treeMarkerColor: '#cccccc',\n treeMarkerHoverColor: '#ffffff',\n rowHeight: 20,\n columnWidth: 100,\n minRowHeight: 20,\n minColumnWidth: 55,\n maxColumnWidth: 600,\n columnHeaderHeight: 20,\n rowHeaderWidth: 30,\n rowFooterWidth: 0,\n // When resizing the header, will snap to the auto size of the header within this threshold\n headerResizeSnapThreshold: 10,\n headerResizeHiddenSnapThreshold: 8,\n allowColumnReorder: true,\n allowRowReorder: true,\n reorderOffset: 2,\n // Colors for the grid in floating sections\n floatingGridColumnColor: '#8f8f8f66',\n floatingGridRowColor: '#8f8f8f66',\n // Background row colors for grid in the floating sections\n floatingRowBackgroundColors: '#393939 #292929',\n // Divider colors between the floating parts and the grid\n floatingDividerOuterColor: '#000000',\n floatingDividerInnerColor: '#cccccc',\n // Databar\n zeroLineColor: '#888888',\n positiveBarColor: '#00ff00',\n negativeBarColor: '#ff0000',\n markerBarColor: '#ffffff',\n dataBarHorizontalPadding: 90\n});\nexport default defaultTheme;\n//# sourceMappingURL=GridTheme.js.map","import convert from 'color-convert';\nimport clamp from 'lodash.clamp';\n/**\n * Darken the provided colour\n * @param color Color in hex format to convert (with #)\n * @param depth Depth to convert the color to\n * @param maxDepth Maximum depth. Defaults to 6\n * @returns Darkened colour in hex format\n */\nexport function darkenForDepth(color, depth) {\n var maxDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 6;\n var lab = convert.hex.lab.raw(color);\n\n // determined via a trial an error approach to getting\n // something that works for both light and dark\n var modifier = lab[0] < 50 ? 17 : 10;\n lab[0] = Math.max(lab[0] - modifier / maxDepth * depth, 0);\n return \"#\".concat(convert.lab.hex(lab));\n}\n\n/**\n * Convert a hex colour to an rgba with specified alpha\n * @param color Color in hex format to convert (with #)\n * @param alpha Alpha to apply to the color\n * @returns Color with the newly applied alpha in rgba format\n */\nexport function colorWithAlpha(color, alpha) {\n var [r, g, b] = convert.hex.rgb(color);\n return \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(alpha, \")\");\n}\n\n/**\n * Converts a color in RGB to Oklab\n * Formula provided here: https://bottosson.github.io/posts/oklab/#converting-from-linear-srgb-to-oklab\n * @param color An RGB color\n * @returns The color but respresented as an Oklab color\n */\nvar linearSRGBToOklab = color => {\n var {\n r,\n g,\n b\n } = color;\n var l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n var m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n var s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n var l2 = Math.cbrt(l);\n var m2 = Math.cbrt(m);\n var s2 = Math.cbrt(s);\n return {\n L: 0.2104542553 * l2 + 0.793617785 * m2 - 0.0040720468 * s2,\n a: 1.9779984951 * l2 - 2.428592205 * m2 + 0.4505937099 * s2,\n b: 0.0259040371 * l2 + 0.7827717662 * m2 - 0.808675766 * s2\n };\n};\n\n/**\n * Converts an Oklab color to RGB\n * Formula provided here: https://bottosson.github.io/posts/oklab/#converting-from-linear-srgb-to-oklab\n * @param color An Oklab color\n * @returns The given color but represented as a RGB color\n */\nvar OklabToLinearSRGB = color => {\n var {\n L,\n a,\n b\n } = color;\n var l2 = L + 0.3963377774 * a + 0.2158037573 * b;\n var m2 = L - 0.1055613458 * a - 0.0638541728 * b;\n var s2 = L - 0.0894841775 * a - 1.291485548 * b;\n var l = l2 * l2 * l2;\n var m = m2 * m2 * m2;\n var s = s2 * s2 * s2;\n return {\n r: clamp(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, 0, 255),\n g: clamp(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, 0, 255),\n b: clamp(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s, 0, 255)\n };\n};\n\n/**\n * Converts a hex color to RGB\n * Algorithm from https://stackoverflow.com/a/39077686/20005358\n * @param hex A hex color\n * @returns The RGB representation of the given color\n */\nvar hexToRgb = hex => {\n var _hex$replace$substrin, _hex$replace$substrin2;\n var rgbArray = (_hex$replace$substrin = (_hex$replace$substrin2 = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => \"#\".concat(r).concat(r).concat(g).concat(g).concat(b).concat(b)).substring(1).match(/.{2}/g)) === null || _hex$replace$substrin2 === void 0 ? void 0 : _hex$replace$substrin2.map(x => parseInt(x, 16))) !== null && _hex$replace$substrin !== void 0 ? _hex$replace$substrin : [0, 0, 0];\n return {\n r: rgbArray[0],\n g: rgbArray[1],\n b: rgbArray[2]\n };\n};\n\n/**\n * Converts a RGB color to hex\n * Algorithm from https://stackoverflow.com/a/39077686/20005358\n * @param color A RGB color\n * @returns The hexcode of the given color\n */\nvar rgbToHex = color => {\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n return \"#\".concat([r, g, b].map(x => {\n var hex = x.toString(16);\n return hex.length === 1 ? \"0\".concat(hex) : hex;\n }).join(''));\n};\n\n/**\n * Calculates a color given an interpolation factor between two given colors\n * @param color1 Color on one end\n * @param color2 Color on other end\n * @param factor The interpolation factor (0 to 1, 0 will be color1 while 1 will be color2)\n * @returns The color determined by the interpolation factor between the two colors\n */\nvar lerpColor = (color1, color2, factor) => {\n var {\n L: L1,\n a: a1,\n b: b1\n } = color1;\n var {\n L: L2,\n a: a2,\n b: b2\n } = color2;\n var L = L1 + (L2 - L1) * factor;\n var a = a1 + (a2 - a1) * factor;\n var b = b1 + (b2 - b1) * factor;\n return {\n L,\n a,\n b\n };\n};\nexport default {\n colorWithAlpha,\n darkenForDepth,\n linearSRGBToOklab,\n OklabToLinearSRGB,\n hexToRgb,\n rgbToHex,\n lerpColor\n};\n//# sourceMappingURL=GridColorUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\n/**\n * Some events we listen to are a native mouse event, and others are wrapped with React's SyntheticEvent.\n * The GridMouseHandler shouldn't care though - the properties it accesses should be common on both types of events.\n */\n\n/**\n * Define a region in the grid that interacts with the mouse on a grid.\n * Return true from any of the events to indicate they're consumed, and stopPropagation/preventDefault will be called.\n */\nexport class GridMouseHandler {\n // What order this mouse handler should trigger in. Smaller numbers trigger first\n // Default to well below any of the GRID mouse handlers 100-1000+\n constructor() {\n var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;\n _defineProperty(this, \"order\", void 0);\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\n _defineProperty(this, \"cursor\", null);\n this.order = order;\n }\n onDown(gridPoint, grid, event) {\n return false;\n }\n onMove(gridPoint, grid, event) {\n return false;\n }\n onDrag(gridPoint, grid, event) {\n return false;\n }\n onLeave(gridPoint, grid, event) {\n return false;\n }\n onClick(gridPoint, grid, event) {\n return false;\n }\n onContextMenu(gridPoint, grid, event) {\n return false;\n }\n onDoubleClick(gridPoint, grid, event) {\n return false;\n }\n onUp(gridPoint, grid, event) {\n return false;\n }\n onWheel(gridPoint, grid, event) {\n return false;\n }\n}\nexport default GridMouseHandler;\n//# sourceMappingURL=GridMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\"; // The different properties that can be used by implementing classes, whether for rows or columns\n/**\n * Abstract class that should be extended for column/row behaviour\n * Override the necessary functions/properties\n */\nclass GridSeparatorMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n // The index where dragging the column separator started\n _defineProperty(this, \"draggingIndex\", void 0);\n // The columns in the order they're being resized\n _defineProperty(this, \"resizingItems\", []);\n // Columns that were hidden under the separator when starting a drag\n _defineProperty(this, \"hiddenItems\", []);\n // The target width of the columns being resized\n _defineProperty(this, \"targetSizes\", new Map());\n _defineProperty(this, \"dragOffset\", 0);\n } // Override/Implement these properties/functions\n // End of overrides\n\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n var {\n model\n } = grid.props;\n var theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n var separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n var separatorIndex = separator.index;\n this.dragOffset = 0;\n this.draggingIndex = separatorIndex;\n this.resizingItems = [separatorIndex];\n this.hiddenItems = this.getHiddenItems(separatorIndex, metrics).reverse();\n this.targetSizes.clear();\n this.addTargetSize(metrics, separatorIndex);\n this.updateCursor(metrics, separatorIndex);\n this.updateSeparator(grid, separator);\n return true;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n var {\n metrics\n } = grid;\n var {\n model\n } = grid.props;\n var theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n var separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n this.updateCursor(metrics, separator.index);\n return true;\n }\n return false;\n }\n onDrag(gridPoint, grid) {\n if (this.draggingIndex == null) {\n return false;\n }\n var point = gridPoint[this.pointProperty];\n var {\n metricCalculator,\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var theme = grid.getTheme();\n var visibleOffsets = metrics[this.visibleOffsetProperty];\n var margin = metrics[this.marginProperty];\n var calculatedSizes = metrics[this.calculatedSizesProperty];\n var modelIndexes = metrics[this.modelIndexesProperty];\n var firstIndex = metrics[this.firstIndexProperty];\n var treePadding = metrics[this.treePaddingProperty];\n\n // New sizes are batched and applied after the loop to avoid updating state while calculating next step\n var newSizes = new Map();\n\n // Use a loop as we may need to resize multiple items if they drag quickly\n var resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n while (resizeIndex != null) {\n var itemOffset = getOrThrow(visibleOffsets, resizeIndex);\n var itemSize = point - margin - itemOffset - this.dragOffset;\n var _modelIndex = getOrThrow(modelIndexes, resizeIndex);\n var targetSize = this.targetSizes.get(_modelIndex);\n var isResizingMultiple = this.resizingItems.length > 1;\n var hiddenIndex = this.hiddenItems.indexOf(resizeIndex);\n var calculatedSize = calculatedSizes.get(_modelIndex);\n if (calculatedSize != null && resizeIndex === firstIndex) {\n calculatedSize += treePadding;\n }\n var newSize = itemSize;\n if (calculatedSize != null && Math.abs(itemSize - calculatedSize) <= theme.headerResizeSnapThreshold) {\n // Snapping behaviour to \"natural\" width\n newSize = calculatedSize;\n } else if (targetSize !== undefined && itemSize > targetSize && (isResizingMultiple && hiddenIndex !== 0 || hiddenIndex > 0)) {\n newSize = targetSize;\n } else if (itemSize <= theme.headerResizeHiddenSnapThreshold) {\n // Snapping to hidden item\n newSize = 0;\n }\n newSizes.set(_modelIndex, newSize);\n if (itemSize < -theme.headerResizeSnapThreshold && newSize === 0) {\n if (hiddenIndex >= 0 && isResizingMultiple) {\n var _this$targetSizes$get;\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n this.dragOffset -= (_this$targetSizes$get = this.targetSizes.get(getOrThrow(modelIndexes, resizeIndex))) !== null && _this$targetSizes$get !== void 0 ? _this$targetSizes$get : 0;\n } else {\n resizeIndex = this.getNextShownItem(resizeIndex, metrics);\n if (resizeIndex !== null) {\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n }\n }\n } else if (targetSize !== undefined && itemSize > targetSize + theme.headerResizeSnapThreshold && newSize === targetSize) {\n if (hiddenIndex > 0) {\n this.dragOffset += newSize;\n resizeIndex = this.hiddenItems[hiddenIndex - 1];\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n } else if (isResizingMultiple) {\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n } else {\n resizeIndex = null;\n }\n } else {\n resizeIndex = null;\n }\n }\n newSizes.forEach((newSize, modelIndex) => {\n var _metricCalculator$thi;\n var defaultSize = (_metricCalculator$thi = metricCalculator[this.initialSizesProperty].get(modelIndex)) !== null && _metricCalculator$thi !== void 0 ? _metricCalculator$thi : calculatedSizes.get(modelIndex);\n if (newSize === defaultSize) {\n this.resetSize(metricCalculator, modelIndex);\n } else {\n this.setSize(metricCalculator, modelIndex, newSize);\n }\n });\n this.updateCursor(metrics, this.draggingIndex);\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.draggingIndex != null) {\n this.draggingIndex = undefined;\n this.resizingItems = [];\n this.hiddenItems = [];\n this.targetSizes.clear();\n this.updateSeparator(grid, null);\n }\n return false;\n }\n onDoubleClick(gridPoint, grid) {\n var {\n metrics,\n metricCalculator\n } = grid;\n var {\n model\n } = grid.props;\n var theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n var separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n var modelIndexes = metrics[this.modelIndexesProperty];\n var _modelIndex2 = getOrThrow(modelIndexes, separator.index);\n this.resetSize(metricCalculator, _modelIndex2);\n grid.forceUpdate();\n return true;\n }\n return false;\n }\n updateCursor(metrics, itemIndex) {\n var visibleSizes = metrics[this.visibleSizesProperty];\n var itemSize = getOrThrow(visibleSizes, itemIndex);\n if (itemSize === 0) {\n this.cursor = this.hiddenCursor;\n } else {\n this.cursor = this.defaultCursor;\n }\n }\n addTargetSize(metrics, itemIndex) {\n var modelIndexes = metrics[this.modelIndexesProperty];\n var userSizes = metrics[this.userSizesProperty];\n var calculatedSizes = metrics[this.calculatedSizesProperty];\n var treePadding = itemIndex === 0 ? metrics[this.treePaddingProperty] : 0;\n var modelIndex = getOrThrow(modelIndexes, itemIndex);\n var targetSize = userSizes.get(modelIndex);\n if (targetSize == null || targetSize === 0) {\n var _calculatedSizes$get;\n targetSize = ((_calculatedSizes$get = calculatedSizes.get(modelIndex)) !== null && _calculatedSizes$get !== void 0 ? _calculatedSizes$get : 0) + treePadding;\n }\n this.targetSizes.set(modelIndex, targetSize);\n }\n removeTargetSize(metrics, itemIndex) {\n var modelIndexes = metrics[this.modelIndexesProperty];\n var modelIndex = getOrThrow(modelIndexes, itemIndex);\n this.targetSizes.delete(modelIndex);\n }\n}\nexport default GridSeparatorMouseHandler;\n//# sourceMappingURL=GridSeparatorMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridSeparatorMouseHandler from \"./GridSeparatorMouseHandler.js\";\nclass GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"hiddenCursor\", 'e-resize');\n _defineProperty(this, \"defaultCursor\", 'col-resize');\n _defineProperty(this, \"pointProperty\", 'x');\n _defineProperty(this, \"userSizesProperty\", 'userColumnWidths');\n _defineProperty(this, \"visibleOffsetProperty\", 'visibleColumnXs');\n _defineProperty(this, \"visibleSizesProperty\", 'visibleColumnWidths');\n _defineProperty(this, \"marginProperty\", 'rowHeaderWidth');\n _defineProperty(this, \"calculatedSizesProperty\", 'calculatedColumnWidths');\n _defineProperty(this, \"initialSizesProperty\", 'initialColumnWidths');\n _defineProperty(this, \"modelIndexesProperty\", 'modelColumns');\n _defineProperty(this, \"firstIndexProperty\", 'firstColumn');\n _defineProperty(this, \"treePaddingProperty\", 'treePaddingX');\n _defineProperty(this, \"getHiddenItems\", GridUtils.getHiddenColumns);\n _defineProperty(this, \"getNextShownItem\", GridUtils.getNextShownColumn);\n _defineProperty(this, \"getSeparator\", GridColumnSeparatorMouseHandler.getColumnSeparator);\n }\n static getColumnSeparator(gridPoint, metrics, model, theme) {\n if (!theme.allowColumnResize) {\n return null;\n }\n var {\n x,\n y,\n columnHeaderDepth: depth\n } = gridPoint;\n var {\n modelColumns\n } = metrics;\n var separatorIndex = GridUtils.getColumnSeparatorIndex(x, y, metrics, theme, model);\n if (separatorIndex == null || depth == null) {\n return null;\n }\n var columnIndex = modelColumns.get(separatorIndex);\n if (columnIndex != null) {\n return {\n index: separatorIndex,\n depth\n };\n }\n return null;\n }\n setSize(metricCalculator, modelIndex, size) {\n metricCalculator.setColumnWidth(modelIndex, size);\n }\n resetSize(metricCalculator, modelIndex) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n updateSeparator(grid, separator) {\n grid.setState({\n draggingColumnSeparator: separator,\n isDragging: separator !== null\n });\n }\n}\nexport default GridColumnSeparatorMouseHandler;\n//# sourceMappingURL=GridColumnSeparatorMouseHandler.js.map","// Default font width in pixels if it cannot be retrieved from the context\nexport var DEFAULT_FONT_WIDTH = 10;\n//# sourceMappingURL=GridRendererTypes.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport GridRenderer from \"./GridRenderer.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass CellRenderer {\n constructor() {\n _defineProperty(this, \"getCachedTruncatedString\", memoizeClear((context, text, width, fontWidthLower, fontWidthUpper, truncationChar) => GridRenderer.truncateToWidth(context, text, width, fontWidthLower, fontWidthUpper, truncationChar), {\n max: 10000\n }));\n }\n drawCellRowTreeMarker(context, state, row) {\n var {\n metrics,\n model,\n mouseX,\n mouseY,\n theme\n } = state;\n var {\n firstColumn,\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\n visibleRowTreeBoxes\n } = metrics;\n var {\n treeMarkerColor,\n treeMarkerHoverColor\n } = theme;\n var columnX = getOrThrow(allColumnXs, firstColumn);\n var columnWidth = getOrThrow(allColumnWidths, firstColumn);\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {\n return;\n }\n var treeBox = getOrThrow(visibleRowTreeBoxes, row);\n var color = mouseX != null && mouseY != null && mouseX >= gridX + columnX && mouseX <= gridX + columnX + columnWidth && mouseY >= gridY + rowY && mouseY <= gridY + rowY + rowHeight ? treeMarkerHoverColor : treeMarkerColor;\n this.drawTreeMarker(context, state, columnX, rowY, treeBox, color, model.isRowExpanded(row));\n }\n drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n var {\n x1,\n y1,\n x2,\n y2\n } = treeBox;\n var markerText = isExpanded ? '⊟' : '⊞';\n var textX = columnX + (x1 + x2) * 0.5 + 0.5;\n var textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n}\nexport default CellRenderer;\n//# sourceMappingURL=CellRenderer.js.map","/** Map from ModelIndex to the axis option of the column */\n\n/** Map from ModelIndex to a color or an array of colors\n * If given an array, then the bar will be a gradient\n * The colors should be given left to right (e.g. it should be like ['yellow', 'green'] for positive color and ['red', 'yellow'] for negative color)\n */\n\n/** Map from ModelIndex to the value placement option of the column */\n\n/** Map from ModelIndex to the opacity of the column */\n\n/** Map from ModelIndex to the direction of the column */\n\n/** Map from ModelIndex to the text alignment of the column */\n\n/** Map from column to the columns its markers are from */\n\n/** Map from column to whether the bar has a gradient */\n\n// Map from ModelIndex to the minimum number in the column\n\n// Map from ModelIndex to the maximum number in the column\n\nexport function isDataBarGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.dataBarOptionsForCell) !== undefined;\n}\n//# sourceMappingURL=DataBarGridModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport CellRenderer from \"./CellRenderer.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { isDataBarGridModel } from \"./DataBarGridModel.js\";\nimport GridColorUtils from \"./GridColorUtils.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass DataBarCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"getCachedWidth\", memoizeClear((context, text) => context.measureText(text).width, {\n max: 10000\n }));\n /**\n * Returns the width of the widest value in pixels\n */\n _defineProperty(this, \"getCachedWidestValueForColumn\", memoizeClear((context, visibleRows, modelRows, model, column) => {\n var widestValue = 0;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var modelRow = getOrThrow(modelRows, row);\n var text = model.textForCell(column, modelRow);\n widestValue = Math.max(widestValue, this.getCachedWidth(context, text));\n }\n return widestValue;\n }, {\n max: 1000\n }));\n }\n drawCellContent(context, state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n if (!isDataBarGridModel(model)) {\n return;\n }\n var {\n modelColumns,\n modelRows,\n allRowHeights,\n allRowYs,\n firstColumn,\n fontWidthsLower,\n fontWidthsUpper\n } = metrics;\n var isFirstColumn = column === firstColumn;\n var rowHeight = getOrThrow(allRowHeights, row);\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var rowY = getOrThrow(allRowYs, row);\n var textAlign = model.textAlignForCell(modelColumn, modelRow);\n var text = model.textForCell(modelColumn, modelRow);\n var {\n x: textX,\n y: textY,\n width: textWidth\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);\n var {\n columnMin,\n columnMax,\n axis,\n color: dataBarColor,\n valuePlacement,\n opacity,\n markers,\n direction,\n value\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n var hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;\n if (columnMin == null || columnMax == null) {\n return;\n }\n var {\n maxWidth,\n x: dataBarX,\n y: dataBarY,\n zeroPosition,\n leftmostPosition,\n markerXs,\n totalValueRange,\n dataBarWidth\n } = this.getDataBarRenderMetrics(context, state, column, row);\n context.save();\n context.textAlign = textAlign;\n if (hasGradient) {\n var color = value >= 0 ? dataBarColor[dataBarColor.length - 1] : dataBarColor[0];\n context.fillStyle = color;\n } else {\n context.fillStyle = Array.isArray(dataBarColor) ? dataBarColor[0] : dataBarColor;\n }\n context.textBaseline = 'middle';\n context.font = theme.font;\n if (valuePlacement !== 'hide') {\n context.fillText(truncatedText, textX, textY);\n }\n var hasRowDividers = theme.gridRowColor != null;\n var yOffset = hasRowDividers ? 2 : 1;\n context.save();\n context.beginPath();\n context.roundRect(dataBarX, rowY + yOffset,\n // yOffset includes 1px for top padding\n dataBarWidth, rowHeight - 1 - yOffset,\n // 1px for bottom padding\n 1);\n context.clip();\n context.globalAlpha = opacity;\n\n // Draw bar\n if (hasGradient) {\n // Draw gradient bar\n\n var gradientWidth = 0;\n var gradientX = 0;\n context.save();\n\n // Translate the context so its origin is at the start of the gradient\n // and increasing x value moves towards the end of the gradient.\n // For RTL, scale x by -1 to flip across the x-axis\n if (value < 0) {\n if (direction === 'LTR') {\n gradientWidth = Math.round(Math.abs(columnMin) / totalValueRange * maxWidth);\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n gradientWidth = Math.round(maxWidth - Math.abs(columnMax) / totalValueRange * maxWidth);\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n } else if (direction === 'LTR') {\n // Value is greater than or equal to 0\n gradientWidth = Math.round(maxWidth - Math.abs(columnMin) / totalValueRange * maxWidth) - 1;\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n // Value is greater than or equal to 0\n gradientWidth = Math.round(Math.abs(columnMax) / totalValueRange * maxWidth);\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n var gradient = DataBarCellRenderer.getGradient(gradientWidth, dataBarColor);\n context.fillStyle = gradient;\n context.fillRect(0, dataBarY, gradientWidth, rowHeight);\n context.restore(); // Restore gradient translate/scale\n } else {\n // Draw normal bar\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight, 1);\n context.fill();\n }\n\n // Draw markers\n if (maxWidth > 0) {\n markerXs.forEach((markerX, index) => {\n context.fillStyle = markers[index].color;\n context.fillRect(markerX, dataBarY, 1, rowHeight);\n });\n }\n\n // restore clip\n context.restore();\n var shouldRenderDashedLine = !(axis === 'directional' && (valuePlacement === 'beside' && textAlign === 'right' && direction === 'LTR' || valuePlacement === 'beside' && textAlign === 'left' && direction === 'RTL' || valuePlacement !== 'beside'));\n\n // Draw dashed line\n if (shouldRenderDashedLine) {\n context.strokeStyle = theme.zeroLineColor;\n context.beginPath();\n context.setLineDash([2, 1]);\n context.moveTo(zeroPosition, rowY);\n context.lineTo(zeroPosition, rowY + rowHeight);\n context.stroke();\n }\n context.restore();\n\n // Draw tree marker\n if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n getDataBarRenderMetrics(context, state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n if (!isDataBarGridModel(model)) {\n throw new Error('Grid model is not a data bar grid model');\n }\n var {\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n modelColumns,\n modelRows,\n visibleRows\n } = metrics;\n var {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding\n } = theme;\n var modelColumn = getOrThrow(modelColumns, column);\n var modelRow = getOrThrow(modelRows, row);\n var x = getOrThrow(allColumnXs, column);\n var y = getOrThrow(allRowYs, row);\n var columnWidth = getOrThrow(allColumnWidths, column);\n var isFirstColumn = column === firstColumn;\n var treeIndent = 0;\n if (isExpandableGridModel(model) && model.hasExpandableRows && isFirstColumn) {\n treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n }\n var textAlign = model.textAlignForCell(modelColumn, modelRow);\n var {\n columnMin,\n columnMax,\n axis,\n valuePlacement,\n markers,\n direction,\n value\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n var longestValueWidth = this.getCachedWidestValueForColumn(context, visibleRows, modelRows, model, modelColumn);\n var leftPadding = 2;\n var rightPadding = valuePlacement === 'beside' && textAlign === 'right' ? 2 : 1;\n\n // The value of the total range (e.g. max - column)\n var totalValueRange = columnMax - columnMin;\n // If min and max are both positive or min and max are equal, the max length is columnMax\n if (columnMax >= 0 && columnMin >= 0 || columnMin === columnMax) {\n totalValueRange = columnMax;\n } else if (columnMax <= 0 && columnMin <= 0) {\n // If min and max are both negative, the max length is the absolute value of columnMin\n totalValueRange = Math.abs(columnMin);\n }\n var maxWidth = columnWidth - treeIndent - rightPadding - leftPadding;\n if (valuePlacement === 'beside') {\n maxWidth = maxWidth - cellHorizontalPadding - longestValueWidth;\n }\n if (maxWidth < 0) {\n maxWidth = 0;\n }\n var columnLongest = Math.max(Math.abs(columnMin), Math.abs(columnMax));\n // If axis is proportional, totalValueRange is proportional to maxWidth\n var dataBarWidth = Math.abs(value) / totalValueRange * maxWidth;\n if (maxWidth === 0) {\n dataBarWidth = 0;\n } else if (axis === 'middle') {\n // The longest bar is proportional to half of the maxWidth\n dataBarWidth = Math.abs(value) / columnLongest * (maxWidth / 2);\n } else if (axis === 'directional') {\n // The longest bar is proportional to the maxWidth\n dataBarWidth = Math.abs(value) / columnLongest * maxWidth;\n }\n\n // Default: proportional, beside, LTR, right text align\n // All positions are assuming the left side is 0 and the right side is maxWidth\n var zeroPosition = columnMin >= 0 ? 0 : Math.abs(columnMin) / totalValueRange * maxWidth;\n var dataBarX = value >= 0 ? zeroPosition : zeroPosition - Math.abs(value) / totalValueRange * maxWidth;\n var markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n var offset = Math.abs(markerValue) / totalValueRange * maxWidth;\n return markerValue >= 0 ? zeroPosition + offset : zeroPosition - offset;\n });\n var leftmostPosition = valuePlacement === 'beside' && textAlign === 'left' ? cellHorizontalPadding + longestValueWidth + leftPadding : leftPadding;\n var rightmostPosition = valuePlacement === 'beside' && textAlign === 'right' ? columnWidth - cellHorizontalPadding - longestValueWidth - rightPadding : rightPadding;\n\n // Proportional, RTL\n if (direction === 'RTL') {\n zeroPosition = columnMin >= 0 ? columnWidth : columnWidth - Math.abs(columnMin) / totalValueRange * maxWidth;\n dataBarX = value >= 0 ? zeroPosition - value / totalValueRange * maxWidth : zeroPosition;\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return markerValue >= 0 ? zeroPosition - Math.abs(markerValue) / totalValueRange * maxWidth : zeroPosition + Math.abs(markerValue) / totalValueRange * maxWidth;\n });\n }\n if (axis === 'middle') {\n zeroPosition = maxWidth / 2;\n if (direction === 'LTR') {\n // Middle, LTR\n dataBarX = value >= 0 ? zeroPosition : zeroPosition - Math.abs(value) / columnLongest * (maxWidth / 2);\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return markerValue >= 0 ? zeroPosition + Math.abs(markerValue) / columnLongest * (maxWidth / 2) : zeroPosition - Math.abs(markerValue) / columnLongest * (maxWidth / 2);\n });\n } else if (direction === 'RTL') {\n // Middle, RTL\n dataBarX = value <= 0 ? zeroPosition : zeroPosition - Math.abs(value) / columnLongest * (maxWidth / 2);\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return markerValue <= 0 ? zeroPosition + Math.abs(markerValue) / columnLongest * (maxWidth / 2) : zeroPosition - Math.abs(markerValue) / columnLongest * (maxWidth / 2);\n });\n }\n } else if (axis === 'directional') {\n if (direction === 'LTR') {\n // Directional, LTR\n zeroPosition = 0;\n dataBarX = zeroPosition;\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return zeroPosition + Math.abs(markerValue) / columnLongest * maxWidth;\n });\n } else if (direction === 'RTL') {\n // Directional, RTL\n zeroPosition = columnWidth;\n dataBarX = zeroPosition - Math.abs(value) / columnLongest * maxWidth;\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return zeroPosition - Math.abs(markerValue) / columnLongest * maxWidth;\n });\n }\n }\n\n // Offset all values by the actual x value and padding\n if (direction === 'LTR') {\n zeroPosition += x + leftPadding + treeIndent;\n dataBarX += x + leftPadding + treeIndent;\n markerXs = markerXs.map(markerX => markerX + x + leftPadding + treeIndent);\n if (valuePlacement === 'beside' && textAlign === 'left') {\n zeroPosition += longestValueWidth + cellHorizontalPadding;\n dataBarX += longestValueWidth + cellHorizontalPadding;\n markerXs = markerXs.map(markerX => markerX + longestValueWidth + cellHorizontalPadding);\n }\n } else if (direction === 'RTL') {\n zeroPosition = zeroPosition + x - rightPadding;\n dataBarX = dataBarX + x - rightPadding;\n markerXs = markerXs.map(markerX => markerX + x - rightPadding);\n if (valuePlacement === 'beside' && textAlign === 'right') {\n zeroPosition = zeroPosition - cellHorizontalPadding - longestValueWidth;\n dataBarX = dataBarX - cellHorizontalPadding - longestValueWidth;\n markerXs = markerXs.map(markerX => markerX - cellHorizontalPadding - longestValueWidth);\n }\n }\n leftmostPosition += x + treeIndent;\n rightmostPosition += x;\n return {\n maxWidth,\n x: dataBarX,\n y,\n zeroPosition,\n leftmostPosition,\n rightmostPosition,\n totalValueRange,\n dataBarWidth,\n markerXs\n };\n }\n}\n_defineProperty(DataBarCellRenderer, \"getGradient\", memoizeClear((width, colors) => {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (ctx == null) {\n throw new Error('Failed to create canvas context');\n }\n if (Number.isNaN(width)) {\n return ctx.createLinearGradient(0, 0, 0, 0);\n }\n var gradient = ctx.createLinearGradient(0, 0, width, 0);\n var oklabColors = colors.map(color => GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color)));\n for (var i = 0; i < width; i += 1) {\n var colorStop = i / width;\n var colorChangeInterval = 1 / (colors.length - 1);\n var leftColorIndex = Math.floor(colorStop / colorChangeInterval);\n var color = GridColorUtils.lerpColor(oklabColors[leftColorIndex], oklabColors[leftColorIndex + 1], colorStop % colorChangeInterval / colorChangeInterval);\n gradient.addColorStop(i / width, GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(color)));\n }\n return gradient;\n}, {\n max: 1000,\n primitive: true // Stringify the arguments for memoization. Lets the color arrays be different arrays in memory, but still cache hit\n}));\nexport default DataBarCellRenderer;\n//# sourceMappingURL=DataBarCellRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable class-methods-use-this */\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport CellRenderer from \"./CellRenderer.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass TextCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n _defineProperty(this, \"getCachedTokenBoxesForVisibleCell\", memoizeClear((truncatedText, tokens, _font, _baseline, textHeight, context) => {\n var top = 0;\n var bottom = textHeight;\n var tokenBoxes = [];\n\n // The index where the last token ended\n var lastTokenEnd = 0;\n // The width of the text preceding the current token\n var currentTextWidth = 0;\n // Loop through array and push them to array\n for (var i = 0; i < tokens.length; i += 1) {\n var token = tokens[i];\n var {\n start,\n end\n } = token;\n // The last token value is calculated based on the full text so the value needs to be truncated\n var value = end > truncatedText.length ? truncatedText.substring(start) : token.value;\n\n // Add the width of the text in between this token and the last token\n currentTextWidth += context.measureText(truncatedText.substring(lastTokenEnd, start)).width;\n var tokenWidth = context.measureText(value).width;\n\n // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX\n\n var left = currentTextWidth;\n var right = left + tokenWidth;\n var newTokenBox = {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom,\n token\n };\n tokenBoxes.push(newTokenBox);\n lastTokenEnd = end;\n currentTextWidth += tokenWidth;\n }\n return tokenBoxes;\n }, {\n max: 10000\n }));\n }\n drawCellContent(context, state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n fontWidthsLower,\n fontWidthsUpper,\n modelColumns,\n modelRows,\n allRowHeights,\n firstColumn\n } = metrics;\n var isFirstColumn = column === firstColumn;\n var {\n textColor\n } = theme;\n var rowHeight = getOrThrow(allRowHeights, row);\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var text = model.textForCell(modelColumn, modelRow);\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n if (text && rowHeight > 0) {\n var textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n var color = model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n context.save();\n var {\n width: textWidth,\n x: textX,\n y: textY\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);\n var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);\n if (truncatedText) {\n var tokenIndex = 0;\n var textStart = 0;\n var left = textX;\n var {\n actualBoundingBoxDescent\n } = context.measureText(truncatedText);\n while (textStart < truncatedText.length) {\n var _ref, _token$end;\n var nextToken = tokens[tokenIndex];\n var token = textStart === (nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) ? nextToken : null;\n var textEnd = (_ref = (_token$end = token === null || token === void 0 ? void 0 : token.end) !== null && _token$end !== void 0 ? _token$end : nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) !== null && _ref !== void 0 ? _ref : truncatedText.length;\n var value = truncatedText.substring(textStart, textEnd);\n var {\n width\n } = context.measureText(value);\n var widthOfUnderline = value.endsWith('…') ? width - context.measureText('…').width : width;\n\n // Set the styling based on the token, then draw the text\n if (token != null) {\n context.fillStyle = theme.hyperlinkColor;\n context.fillText(value, left, textY);\n context.fillRect(left, textY + actualBoundingBoxDescent, widthOfUnderline, 1);\n } else {\n context.fillStyle = color;\n context.fillText(value, left, textY);\n }\n left += width;\n textStart = textEnd;\n if (token != null) tokenIndex += 1;\n }\n }\n context.restore();\n }\n if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n /**\n * Gets the token boxes that are visible in the cell\n * @param column The visible column\n * @param row The visible row\n * @param state The GridRenderState\n * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY\n */\n getTokenBoxesForVisibleCell(column, row, state) {\n var {\n metrics,\n context,\n model,\n theme\n } = state;\n if (context == null || metrics == null) {\n return EMPTY_ARRAY;\n }\n var {\n modelRows,\n modelColumns\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var text = model.textForCell(modelColumn, modelRow);\n var {\n width: textWidth,\n x: textX,\n y: textY\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var {\n fontWidthsLower,\n fontWidthsUpper\n } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);\n var {\n actualBoundingBoxAscent,\n actualBoundingBoxDescent\n } = context.measureText(truncatedText);\n var textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;\n var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);\n\n // Check if the truncated text contains a link\n if (tokens.length === 0) {\n context.restore();\n return EMPTY_ARRAY;\n }\n var cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(truncatedText, tokens, theme.font, 'middle', textHeight, context).map(tokenBox => ({\n x1: tokenBox.x1 + textX,\n y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),\n x2: tokenBox.x2 + textX,\n y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),\n token: tokenBox.token\n }));\n context.restore();\n return cachedTokenBoxes;\n }\n configureContext(context, state) {\n var {\n theme\n } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n}\nexport default TextCellRenderer;\n//# sourceMappingURL=TextCellRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { ColorUtils, getOrThrow } from '@deephaven/utils';\nimport memoizeClear from \"./memoizeClear.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport GridColorUtils from \"./GridColorUtils.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { isEditableGridModel } from \"./EditableGridModel.js\";\nimport GridColumnSeparatorMouseHandler from \"./mouse-handlers/GridColumnSeparatorMouseHandler.js\";\nimport { DEFAULT_FONT_WIDTH } from \"./GridRendererTypes.js\";\nimport DataBarCellRenderer from \"./DataBarCellRenderer.js\";\nimport TextCellRenderer from \"./TextCellRenderer.js\";\n/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\n/**\n * A GridRenderer handles rendering the different parts of the grid\n * This default rendering just renders a basic grid. Extend this class and implement\n * your own methods to customize drawing of the grid (eg. Draw icons or special features)\n */\nexport class GridRenderer {\n constructor() {\n _defineProperty(this, \"textCellRenderer\", new TextCellRenderer());\n _defineProperty(this, \"dataBarCellRenderer\", new DataBarCellRenderer());\n _defineProperty(this, \"getCachedHeaderWidth\", memoizeClear((context, text) => context.measureText(text).width, {\n max: 1000\n }));\n }\n /**\n * Truncate a string to the specified length and add ellipses if necessary\n * @param str The string to truncate\n * @param len The length to truncate the string to. If longer than the actual string, just returns the string\n * @returns The truncated string\n */\n static truncate(str, len) {\n if (len < str.length) {\n // eslint-disable-next-line prefer-template\n return str.substr(0, len) + '…';\n }\n return str;\n }\n\n /**\n * Uses binary search to truncate a string to fit in the provided width\n * @param context The drawing context to measure the text in\n * @param str The string to get the maximum length it can draw\n * @param width The width to truncate it to\n * @param start The low boundary to start the search\n * @param end The high boundary to start the search\n * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\n * @returns The truncated string\n */\n static binaryTruncateToWidth(context, str, width) {\n var start = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var end = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : str.length;\n var truncationChar = arguments.length > 5 ? arguments[5] : undefined;\n if (end >= str.length && context.measureText(str).width <= width) {\n // IDS-6069 If the whole string can fit, don't bother checking for truncation\n // The ellipses are actually slightly wider than other chars, and it's possible\n // that the \"truncation\" ends up being slightly longer, which messes up the search\n // algorithm below.\n // Besides, if we already fit, it's just faster to not bother checking other truncations.\n return str;\n }\n if (truncationChar !== undefined) {\n var charWidth = context.measureText(truncationChar).width;\n return truncationChar.repeat(Math.max(1, Math.floor(width / charWidth)));\n }\n var lo = start;\n var hi = Math.min(str.length - 1, end);\n var result = str;\n while (hi >= lo) {\n var mid = Math.ceil((hi + lo) / 2);\n var truncatedStr = GridRenderer.truncate(str, mid);\n if (context.measureText(truncatedStr).width <= width) {\n result = truncatedStr;\n if (lo === mid) {\n break;\n }\n lo = mid;\n } else if (mid === 0) {\n // We already truncated to zero chars and it still doesn't fit, no need to keep looking\n result = truncatedStr;\n break;\n } else {\n hi = mid - 1;\n }\n }\n return result;\n }\n\n /**\n * Truncate a string (if necessary) to fit in the specified width.\n * First uses the estimated font width to calculate a lower/upper bound\n * Then uses binary search within those bounds to find the exact max length\n * @param context The drawing context\n * @param str The string to calculate max length for\n * @param width The width to truncate within\n * @param fontWidth The estimated width of each character\n * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\n * @returns The truncated string that fits within the width provided\n */\n static truncateToWidth(context, str, width) {\n var fontWidthLower = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_FONT_WIDTH / 2;\n var fontWidthUpper = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : DEFAULT_FONT_WIDTH * 2;\n var truncationChar = arguments.length > 5 ? arguments[5] : undefined;\n if (width <= 0 || str.length <= 0) {\n return '';\n }\n\n // Estimate the possible low and high boundaries for truncating the text\n // Use the width of the space divided by the upper and lower bounds of the width of a character\n // (minus 5 on the lower bound just to be extra safe)\n var lo = Math.min(Math.max(0, Math.floor(width / fontWidthUpper) - 5), str.length);\n var hi = Math.min(Math.ceil(width / fontWidthLower), str.length);\n return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi, truncationChar);\n }\n\n /**\n * Cache shared between all grids. Often grids will have the same theme/colors, so we should share the cache.\n */\n\n /**\n * Draw the grid canvas with the state provided\n * @param state The state of the grid\n */\n drawCanvas(state) {\n var {\n context\n } = state;\n context.save();\n this.configureContext(context, state);\n this.drawBackground(context, state);\n this.drawGrid(context, state);\n this.drawHeaders(context, state);\n this.drawFooters(context, state);\n this.drawDraggingColumn(context, state);\n this.drawDraggingRow(context, state);\n this.drawScrollBars(context, state);\n context.restore();\n }\n configureContext(context, state) {\n var {\n theme\n } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n drawBackground(context, state) {\n var {\n theme,\n metrics\n } = state;\n var {\n width,\n height\n } = metrics;\n context.fillStyle = theme.backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n drawGrid(context, state) {\n var {\n metrics,\n draggingRow,\n draggingColumn\n } = state;\n var {\n gridX,\n gridY\n } = metrics;\n context.translate(gridX, gridY);\n this.drawGridBackground(context, state, draggingRow == null && draggingColumn == null);\n this.drawCellContents(context, state);\n this.drawFloatingRows(context, state);\n this.drawFloatingColumns(context, state);\n context.translate(-gridX, -gridY);\n }\n drawFloatingRows(context, state) {\n var {\n draggingRow,\n draggingColumn,\n metrics,\n theme\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingRows,\n rowCount,\n visibleColumns,\n allRowYs,\n allRowHeights\n } = metrics;\n if (floatingRows.length === 0) {\n return;\n }\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(context, state, floatingRows, theme.floatingRowBackgroundColors);\n }\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n this.drawGridLinesForItems(context, state, visibleColumns, floatingRows, theme.floatingGridColumnColor, theme.floatingGridRowColor);\n this.drawCellBackgroundsForItems(context, state, visibleColumns, floatingRows);\n this.drawFloatingBorders(context, state);\n\n // Draw the floating row selection...\n if (floatingTopRowCount > 0) {\n this.drawSelectedRanges(context, state, {\n top: 0,\n bottom: floatingTopRowCount - 1,\n maxY: getOrThrow(allRowYs, floatingTopRowCount - 1) + getOrThrow(allRowHeights, floatingTopRowCount - 1) - 0.5\n });\n }\n if (floatingBottomRowCount > 0) {\n this.drawSelectedRanges(context, state, {\n top: rowCount - floatingBottomRowCount - 1,\n bottom: rowCount - 1,\n minY: getOrThrow(allRowYs, rowCount - floatingBottomRowCount) + 0.5,\n maxY: getOrThrow(allRowYs, rowCount - 1) + getOrThrow(allRowHeights, rowCount - 1) - 0.5\n });\n }\n\n // Draw the cell content...\n for (var c = 0; c < visibleColumns.length; c += 1) {\n var column = visibleColumns[c];\n for (var r = 0; r < floatingRows.length; r += 1) {\n var row = floatingRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n drawFloatingColumns(context, state) {\n var {\n draggingRow,\n draggingColumn,\n metrics,\n theme\n } = state;\n var {\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n floatingColumns,\n gridX,\n maxX,\n columnCount,\n visibleRows,\n allColumnXs,\n allColumnWidths,\n width,\n height\n } = metrics;\n if (floatingColumns.length === 0) {\n return;\n }\n if (theme.floatingRowBackgroundColors) {\n this.drawRowStripesForRows(context, state, visibleRows, theme.floatingRowBackgroundColors, 0, floatingLeftWidth);\n this.drawRowStripesForRows(context, state, visibleRows, theme.floatingRowBackgroundColors, width - gridX - floatingRightWidth, maxX);\n }\n if (draggingRow == null && draggingColumn == null) {\n this.drawFloatingMouseRowHover(context, state);\n }\n\n // Clip floated column grid lines.\n context.save();\n context.beginPath();\n context.rect(0, 0, floatingLeftWidth, height);\n context.clip();\n this.drawGridLinesForItems(context, state, floatingColumns, visibleRows, theme.floatingGridColumnColor, theme.floatingGridRowColor);\n context.restore();\n this.drawCellBackgroundsForItems(context, state, floatingColumns, visibleRows);\n this.drawFloatingBorders(context, state);\n\n // Draw the floating column selection...\n if (floatingLeftColumnCount > 0) {\n this.drawSelectedRanges(context, state, {\n left: 0,\n maxX: getOrThrow(allColumnXs, floatingLeftColumnCount - 1) + getOrThrow(allColumnWidths, floatingLeftColumnCount - 1)\n });\n }\n if (floatingRightColumnCount > 0) {\n this.drawSelectedRanges(context, state, {\n left: columnCount - floatingRightColumnCount,\n right: columnCount - 1,\n minX: getOrThrow(allColumnXs, columnCount - floatingRightColumnCount) + 0.5,\n maxX: getOrThrow(allColumnXs, columnCount - 1) + getOrThrow(allColumnWidths, columnCount - 1)\n });\n }\n\n // Draw the cell content...\n for (var c = 0; c < floatingColumns.length; c += 1) {\n var column = floatingColumns[c];\n for (var r = 0; r < visibleRows.length; r += 1) {\n var row = visibleRows[r];\n this.drawCellContent(context, state, column, row);\n }\n }\n }\n drawFloatingBorders(context, state) {\n var {\n metrics,\n theme\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n rowCount,\n columnCount,\n allRowYs,\n allColumnXs,\n allRowHeights,\n allColumnWidths,\n maxX,\n maxY\n } = metrics;\n var {\n floatingDividerOuterColor,\n floatingDividerInnerColor\n } = theme;\n context.lineWidth = 3;\n context.beginPath();\n context.strokeStyle = floatingDividerOuterColor;\n if (floatingTopRowCount > 0) {\n var y = getOrThrow(allRowYs, floatingTopRowCount - 1) + getOrThrow(allRowHeights, floatingTopRowCount - 1) + 0.5;\n context.moveTo(0, y);\n context.lineTo(maxX, y);\n }\n if (floatingBottomRowCount > 0) {\n var _y = getOrThrow(allRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0, _y);\n context.lineTo(maxX, _y);\n }\n if (floatingLeftColumnCount > 0) {\n var x = getOrThrow(allColumnXs, floatingLeftColumnCount - 1) + getOrThrow(allColumnWidths, floatingLeftColumnCount - 1) + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n if (floatingRightColumnCount > 0) {\n var _x = getOrThrow(allColumnXs, columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(_x, 0);\n context.lineTo(_x, maxY);\n }\n context.stroke();\n context.beginPath();\n context.lineWidth = 1;\n context.strokeStyle = floatingDividerInnerColor;\n if (floatingTopRowCount > 0) {\n var _y2 = getOrThrow(allRowYs, floatingTopRowCount - 1) + getOrThrow(allRowHeights, floatingTopRowCount - 1) + 0.5;\n context.moveTo(0, _y2);\n context.lineTo(maxX, _y2);\n }\n if (floatingBottomRowCount > 0) {\n var _y3 = getOrThrow(allRowYs, rowCount - floatingBottomRowCount) - 0.5;\n context.moveTo(0, _y3);\n context.lineTo(maxX, _y3);\n }\n if (floatingLeftColumnCount > 0) {\n var _x2 = getOrThrow(allColumnXs, floatingLeftColumnCount - 1) + getOrThrow(allColumnWidths, floatingLeftColumnCount - 1) + 0.5;\n context.moveTo(_x2, 0);\n context.lineTo(_x2, maxY);\n }\n if (floatingRightColumnCount > 0) {\n var _x3 = getOrThrow(allColumnXs, columnCount - floatingRightColumnCount) - 0.5;\n context.moveTo(_x3, 0);\n context.lineTo(_x3, maxY);\n }\n context.stroke();\n }\n drawGridBackground(context, state) {\n var drawHover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this.drawRowStripes(context, state);\n if (drawHover) {\n this.drawMouseColumnHover(context, state);\n this.drawMouseRowHover(context, state);\n }\n this.drawGridLines(context, state);\n this.drawCellBackgrounds(context, state);\n var {\n metrics\n } = state;\n var {\n bottom,\n right,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n floatingTopRowCount,\n columnCount,\n rowCount,\n allRowHeights,\n allRowYs,\n allColumnXs,\n allColumnWidths,\n width,\n height\n } = metrics;\n this.drawSelectedRanges(context, state, {\n bottom: Math.min(bottom, rowCount - floatingBottomRowCount - 1),\n right: Math.min(right, columnCount - floatingRightColumnCount - 1),\n minX: floatingLeftColumnCount > 0 && allColumnXs.has(floatingLeftColumnCount + 1) ? getOrThrow(allColumnXs, floatingLeftColumnCount + 1) : -10,\n minY: floatingTopRowCount > 0 && allRowYs.has(floatingTopRowCount + 1) ? getOrThrow(allRowYs, floatingTopRowCount + 1) : -10,\n maxX: floatingRightColumnCount > 0 && allColumnXs.has(columnCount - floatingRightColumnCount - 1) ? getOrThrow(allColumnXs, columnCount - floatingRightColumnCount - 1) + getOrThrow(allColumnWidths, columnCount - floatingRightColumnCount - 1) - 0.5 : width + 10,\n maxY: floatingBottomRowCount > 0 && allRowYs.has(rowCount - floatingBottomRowCount - 1) ? getOrThrow(allRowYs, rowCount - floatingBottomRowCount - 1) + getOrThrow(allRowHeights, rowCount - floatingBottomRowCount - 1) - 0.5 : height + 10\n });\n }\n drawRowStripes(context, state) {\n var {\n metrics,\n theme\n } = state;\n var {\n visibleRows\n } = metrics;\n var {\n rowBackgroundColors\n } = theme;\n if (!rowBackgroundColors) {\n return;\n }\n this.drawRowStripesForRows(context, state, visibleRows, rowBackgroundColors);\n }\n drawRowStripesForRows(context, state, rows, rowBackgroundColors) {\n var minX = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var maxX = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : state.metrics.maxX;\n var {\n theme,\n metrics,\n model\n } = state;\n var {\n maxDepth,\n shadowBlur,\n shadowColor,\n shadowAlpha\n } = theme;\n var colorSets = GridRenderer.getCachedBackgroundColors(rowBackgroundColors, maxDepth);\n var {\n allRowYs,\n allRowHeights\n } = metrics;\n\n // Optimize by grouping together all rows that end up with the same color\n var colorRowMap = new Map();\n var topShadowRows = []; // Rows that are deeper than the row above them\n var bottomShadowRows = [];\n var addRowToColorMap = (row, rowAbove) => {\n var depth = isExpandableGridModel(model) ? model.depthForRow(row) : 0;\n var colorSet = colorSets[row % colorSets.length];\n var color = colorSet[Math.min(depth, colorSet.length - 1)];\n if (!colorRowMap.has(color)) {\n colorRowMap.set(color, []);\n }\n colorRowMap.get(color).push(row);\n if (rowAbove != null) {\n var depthAbove = isExpandableGridModel(model) ? model.depthForRow(rowAbove) : 0;\n if (depthAbove < depth) {\n topShadowRows.push(row);\n } else if (depthAbove > depth) {\n bottomShadowRows.push(rowAbove);\n }\n }\n };\n\n // Add all the regular row stripes\n for (var i = 0; i < rows.length; i += 1) {\n var row = rows[i];\n var rowAbove = i > 0 ? rows[i - 1] : undefined;\n addRowToColorMap(row, rowAbove);\n }\n colorRowMap.forEach((colorRows, color) => {\n context.fillStyle = color;\n context.beginPath();\n for (var _i = 0; _i < colorRows.length; _i += 1) {\n var _row = colorRows[_i];\n var y = getOrThrow(allRowYs, _row);\n var rowHeight = getOrThrow(allRowHeights, _row);\n context.rect(minX, y, maxX, rowHeight);\n }\n context.fill();\n });\n if (topShadowRows.length > 0) {\n context.save();\n var startColor = GridRenderer.getCachedColorWithAlpha(shadowColor, shadowAlpha);\n var endColor = GridRenderer.getCachedColorWithAlpha(shadowColor, 0);\n var gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n context.fillStyle = gradient;\n for (var _i2 = 0; _i2 < topShadowRows.length; _i2 += 1) {\n var _row2 = topShadowRows[_i2];\n var y = getOrThrow(allRowYs, _row2);\n // Use a translate so we can reuse the gradient\n context.translate(0, y);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -y);\n }\n context.restore();\n }\n if (bottomShadowRows.length > 0) {\n context.save();\n var _startColor = GridRenderer.getCachedColorWithAlpha(shadowColor, 0);\n var _endColor = GridRenderer.getCachedColorWithAlpha(shadowColor, shadowAlpha);\n var _gradient = context.createLinearGradient(0, 0, 0, shadowBlur);\n _gradient.addColorStop(0, _startColor);\n _gradient.addColorStop(1, _endColor);\n context.fillStyle = _gradient;\n for (var _i3 = 0; _i3 < bottomShadowRows.length; _i3 += 1) {\n var _row3 = bottomShadowRows[_i3];\n var _y4 = getOrThrow(allRowYs, _row3);\n var rowHeight = getOrThrow(allRowHeights, _row3);\n var gradientY = _y4 + rowHeight - shadowBlur;\n // Use a translate so we can reuse the gradient\n context.translate(0, gradientY);\n context.fillRect(minX, 0, maxX, shadowBlur);\n context.translate(0, -gradientY);\n }\n context.restore();\n }\n }\n drawMouseColumnHover(context, state) {\n var {\n mouseX,\n mouseY,\n theme,\n metrics\n } = state;\n if (mouseX == null || mouseY == null) return;\n var mouseColumn = GridUtils.getColumnAtX(mouseX, metrics);\n if (mouseColumn == null || theme.columnHoverBackgroundColor == null) {\n return;\n }\n var {\n allColumnWidths,\n allColumnXs,\n maxY\n } = metrics;\n if (mouseY > maxY) {\n return;\n }\n var x = getOrThrow(allColumnXs, mouseColumn);\n var columnWidth = getOrThrow(allColumnWidths, mouseColumn);\n context.fillStyle = theme.columnHoverBackgroundColor;\n context.fillRect(x, 0, columnWidth, maxY);\n }\n drawMouseRowHover(context, state) {\n var {\n mouseX,\n mouseY,\n theme,\n metrics\n } = state;\n if (mouseX == null || mouseY == null) return;\n var {\n maxX\n } = metrics;\n if (mouseX > maxX || theme.rowHoverBackgroundColor == null) {\n return;\n }\n var mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (mouseRow == null) {\n return;\n }\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n drawFloatingMouseRowHover(context, state) {\n var {\n mouseX,\n mouseY,\n theme,\n metrics\n } = state;\n var {\n maxX,\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount,\n rowFooterWidth\n } = metrics;\n if (mouseX == null || mouseY == null || mouseX > maxX + rowFooterWidth || theme.rowHoverBackgroundColor == null) {\n return;\n }\n var mouseRow = GridUtils.getRowAtY(mouseY, metrics);\n if (mouseRow != null && (mouseRow < floatingTopRowCount || rowCount - floatingBottomRowCount <= mouseRow)) {\n this.drawMouseRowHoverForRow(context, state, mouseRow);\n }\n }\n drawMouseRowHoverForRow(context, state, row) {\n var {\n metrics,\n selectedRanges,\n theme\n } = state;\n var {\n allRowHeights,\n allRowYs,\n maxX\n } = metrics;\n var y = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n if (theme.rowHoverBackgroundColor != null) {\n context.fillStyle = theme.rowHoverBackgroundColor;\n }\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var {\n startRow,\n endRow\n } = selectedRanges[i];\n if (startRow != null && endRow != null && startRow <= row && endRow >= row) {\n if (theme.selectedRowHoverBackgroundColor != null) {\n context.fillStyle = theme.selectedRowHoverBackgroundColor;\n }\n break;\n }\n }\n context.fillRect(0, y, maxX, rowHeight);\n }\n drawGridLines(context, state) {\n var {\n metrics,\n theme\n } = state;\n var {\n visibleColumns,\n visibleRows\n } = metrics;\n this.drawGridLinesForItems(context, state, visibleColumns, visibleRows, theme.gridColumnColor, theme.gridRowColor);\n }\n drawGridLinesForItems(context, state, columns, rows, columnColor, rowColor) {\n if (columnColor == null && rowColor == null) {\n return;\n }\n context.lineWidth = 1;\n context.beginPath();\n if (columnColor != null) {\n context.strokeStyle = columnColor;\n this.drawGridLinesForColumns(context, state, columns);\n }\n if (rowColor != null) {\n context.strokeStyle = rowColor;\n this.drawGridLinesForRows(context, state, rows);\n }\n context.stroke();\n }\n drawGridLinesForColumns(context, state, columns) {\n var {\n metrics\n } = state;\n var {\n allColumnXs,\n maxY\n } = metrics;\n for (var i = 0; i < columns.length; i += 1) {\n var column = columns[i];\n var x = getOrThrow(allColumnXs, column) + 0.5;\n context.moveTo(x, 0);\n context.lineTo(x, maxY);\n }\n }\n drawGridLinesForRows(context, state, rows) {\n var {\n metrics\n } = state;\n var {\n allRowYs,\n maxX: metricsMaxX\n } = metrics;\n var maxX = metricsMaxX;\n\n // Draw row lines\n for (var i = 0; i < rows.length; i += 1) {\n var row = rows[i];\n var y = getOrThrow(allRowYs, row) + 0.5;\n context.moveTo(0.5, y);\n context.lineTo(maxX - 0.5, y);\n }\n }\n drawCellBackgrounds(context, state) {\n var {\n metrics\n } = state;\n var {\n visibleColumns,\n visibleRows\n } = metrics;\n this.drawCellBackgroundsForItems(context, state, visibleColumns, visibleRows);\n }\n drawCellBackgroundsForItems(context, state, columns, rows) {\n context.save();\n for (var i = 0; i < columns.length; i += 1) {\n var column = columns[i];\n for (var j = 0; j < rows.length; j += 1) {\n var row = rows[j];\n var rowAfter = j + 1 < rows.length ? rows[j + 1] : undefined;\n this.drawCellBackground(context, state, column, row, rowAfter);\n }\n }\n context.restore();\n }\n drawCellBackground(context, state, column, row, rowAfter) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n firstColumn,\n modelColumns,\n modelRows,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var backgroundColor = model.backgroundColorForCell(modelColumn, modelRow, theme);\n var isFirstColumn = column === firstColumn;\n var hasExpandableRows = isExpandableGridModel(model) && model.hasExpandableRows;\n if (backgroundColor != null) {\n var x = getOrThrow(allColumnXs, column) + 1;\n var y = getOrThrow(allRowYs, row) + 1;\n var columnWidth = getOrThrow(allColumnWidths, column) - 1;\n var rowHeight = getOrThrow(allRowHeights, row) - 1;\n context.fillStyle = backgroundColor;\n context.fillRect(x, y, columnWidth, rowHeight);\n }\n if (isFirstColumn && hasExpandableRows) {\n this.drawCellRowTreeDepthLines(context, state, row, rowAfter);\n }\n }\n drawCellContents(context, state) {\n var {\n metrics\n } = state;\n var {\n visibleColumns\n } = metrics;\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var column = visibleColumns[i];\n this.drawColumnCellContents(context, state, column);\n }\n }\n drawColumnCellContents(context, state, column) {\n var {\n metrics\n } = state;\n var {\n allColumnXs,\n allColumnWidths,\n visibleRows,\n height\n } = metrics;\n var x = getOrThrow(allColumnXs, column);\n var columnWidth = getOrThrow(allColumnWidths, column);\n context.save();\n context.beginPath();\n context.rect(x, 0, columnWidth, height);\n context.clip();\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n this.drawCellContent(context, state, column, row);\n }\n context.restore();\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 modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var renderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n getCellRenderer(renderType) {\n switch (renderType) {\n case 'dataBar':\n return this.dataBarCellRenderer;\n default:\n return this.textCellRenderer;\n }\n }\n drawCellRowTreeDepthLines(context, state, row, rowAfter) {\n var {\n metrics,\n model,\n theme\n } = state;\n if (!isExpandableGridModel(model)) return;\n var depth = model.depthForRow(row);\n if (depth === 0) return;\n var {\n firstColumn,\n allColumnXs,\n allRowYs,\n allRowHeights\n } = metrics;\n var {\n treeDepthIndent,\n treeHorizontalPadding,\n treeLineColor\n } = theme;\n var columnX = getOrThrow(allColumnXs, firstColumn);\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n var depthRowAfter = rowAfter !== undefined ? model.depthForRow(rowAfter) : 0;\n var depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;\n context.strokeStyle = treeLineColor;\n context.lineWidth = 1;\n\n // draw normal depth lines\n if (depth - depthDiff > 0) {\n context.beginPath();\n for (var i = 0; i < depth - depthDiff; i += 1) {\n var lineX = Math.floor(columnX + i * treeDepthIndent + treeDepthIndent * 0.5 + treeHorizontalPadding) + 0.5; // The 0.5 makes the line crisp https://stackoverflow.com/questions/9311428/draw-single-pixel-line-in-html5-canvas\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + rowHeight);\n }\n context.stroke();\n }\n\n // draw as hockey stick if last row at depth\n if (depthDiff > 0) {\n context.beginPath();\n for (var _i4 = depth - depthDiff; _i4 < depth; _i4 += 1) {\n var _lineX = Math.floor(columnX + _i4 * treeDepthIndent + treeDepthIndent * 0.5 + treeHorizontalPadding) + 0.5;\n context.moveTo(_lineX, rowY);\n context.lineTo(_lineX, rowY + Math.floor(rowHeight / 2));\n // extra moveTo prevents halfpixel in corner\n context.moveTo(_lineX - 0.5, rowY + Math.floor(rowHeight / 2) + 0.5);\n context.lineTo(_lineX + treeDepthIndent - 0.5, rowY + Math.floor(rowHeight / 2) + 0.5);\n }\n context.stroke();\n }\n }\n drawHeaders(context, state) {\n var {\n theme\n } = state;\n context.font = theme.headerFont;\n this.drawColumnHeaders(context, state);\n this.drawRowHeaders(context, state);\n }\n drawFooters(context, state) {\n var {\n theme\n } = state;\n context.font = theme.headerFont;\n this.drawRowFooters(context, state);\n }\n drawColumnHeaders(context, state) {\n var {\n mouseX,\n mouseY,\n theme,\n metrics,\n draggingColumnSeparator,\n isDragging,\n model\n } = state;\n var {\n columnHeaderHeight,\n floatingColumns,\n gridX,\n width,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n floatingLeftColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n modelColumns,\n columnHeaderMaxDepth\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n var {\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor\n } = theme;\n var hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n var hiddenY = columnHeaderHeight * (columnHeaderMaxDepth - 1) + columnHeaderHeight * 0.5 - hiddenSeparatorHeight * 0.5;\n var containsFrozenColumns = floatingLeftColumnCount > 0;\n context.save();\n this.drawColumnHeadersForRange(context, state, [visibleColumns[0], visibleColumns[visibleColumns.length - 1]], {\n minX: gridX + floatingLeftWidth,\n maxX: width - floatingRightWidth\n });\n if (containsFrozenColumns) {\n this.drawColumnHeadersForRange(context, state, [floatingColumns[0], floatingColumns[floatingColumns.length - 1]], {\n minX: gridX,\n maxX: gridX + floatingLeftWidth\n });\n }\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n var hiddenColumns = [...allColumnWidths.entries()].filter(_ref => {\n var [_, w] = _ref;\n return w === 0;\n }).map(_ref2 => {\n var [index] = _ref2;\n return index;\n });\n\n // Now draw the hidden column separator boxes\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (var i = 0; i < hiddenColumns.length; i += 1) {\n var column = hiddenColumns[i];\n var columnX = getOrThrow(allColumnXs, column);\n var columnWidth = getOrThrow(allColumnWidths, column);\n var minX = gridX + columnX + columnWidth + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(minX, hiddenY, headerHiddenSeparatorSize, hiddenSeparatorHeight);\n }\n context.fill();\n }\n if (headerSeparatorHoverColor) {\n var {\n index: highlightedSeparator,\n depth\n } = draggingColumnSeparator !== null && draggingColumnSeparator !== void 0 ? draggingColumnSeparator : {};\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n var separator = GridColumnSeparatorMouseHandler.getColumnSeparator(GridUtils.getGridPointFromXY(mouseX, mouseY, metrics), metrics, model, theme);\n highlightedSeparator = separator === null || separator === void 0 ? void 0 : separator.index;\n depth = separator === null || separator === void 0 ? void 0 : separator.depth;\n }\n var shouldDrawSeparator;\n if (highlightedSeparator == null) {\n shouldDrawSeparator = false;\n } else {\n var columnIndex = modelColumns.get(highlightedSeparator);\n var nextColumnIndex = modelColumns.get(highlightedSeparator + 1);\n if (columnIndex == null || nextColumnIndex == null) {\n shouldDrawSeparator = false;\n } else {\n shouldDrawSeparator = model.textForColumnHeader(columnIndex, depth) !== model.textForColumnHeader(nextColumnIndex, depth);\n }\n }\n if (shouldDrawSeparator && highlightedSeparator != null && depth != null && (!isDragging || draggingColumnSeparator != null)) {\n context.strokeStyle = headerSeparatorHoverColor;\n var _columnX = getOrThrow(allColumnXs, highlightedSeparator);\n var _columnWidth = getOrThrow(allColumnWidths, highlightedSeparator);\n var x = gridX + _columnX + _columnWidth + 0.5;\n var visibleColumnIndex = visibleColumns.indexOf(highlightedSeparator);\n var nextColumn = visibleColumnIndex < visibleColumns.length - 1 ? visibleColumns[visibleColumnIndex + 1] : null;\n var nextColumnWidth = nextColumn != null ? allColumnWidths.get(nextColumn) : null;\n var isColumnHidden = _columnWidth === 0;\n var isNextColumnHidden = nextColumnWidth != null && nextColumnWidth === 0;\n if (isColumnHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(x, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);\n } else if (isNextColumnHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(x - headerHiddenSeparatorSize * 0.5, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);\n }\n\n // column seperator hover line\n context.beginPath();\n context.moveTo(x, (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight);\n context.lineTo(x, (columnHeaderMaxDepth - depth) * columnHeaderHeight - 1);\n context.stroke();\n }\n }\n context.restore();\n }\n drawColumnHeadersForRange(context, state, range, bounds) {\n var {\n model\n } = state;\n var {\n columnHeaderMaxDepth\n } = model;\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n for (var d = 0; d <= columnHeaderMaxDepth; d += 1) {\n this.drawColumnHeadersAtDepth(context, state, range, bounds, d);\n }\n }\n drawColumnHeadersAtDepth(context, state, range, bounds, depth) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n modelColumns,\n allColumnXs,\n gridX,\n userColumnWidths,\n allColumnWidths,\n movedColumns\n } = metrics;\n var {\n columnHeaderHeight,\n columnWidth\n } = theme;\n var {\n columnHeaderMaxDepth\n } = model;\n var {\n minX,\n maxX\n } = bounds;\n var visibleWidth = maxX - minX;\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n var startIndex = range[0];\n var endIndex = range[1];\n context.save();\n context.translate(0, (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight);\n if (depth === 0) {\n // Make sure base column header background always goes to the right edge\n this.drawColumnHeader(context, state, '', minX, maxX);\n\n // Draw base column headers\n for (var i = startIndex; i <= endIndex; i += 1) {\n this.drawColumnHeaderAtIndex(context, state, i, bounds);\n }\n }\n\n // Draw column header group\n if (depth > 0) {\n var columnIndex = startIndex;\n while (columnIndex <= endIndex) {\n var {\n columnCount,\n calculatedColumnWidths\n } = metrics;\n var modelColumn = getOrThrow(modelColumns, columnIndex);\n var columnGroupName = model.textForColumnHeader(modelColumn, depth);\n var columnGroupColor = model.colorForColumnHeader(modelColumn, depth);\n var columnGroupLeft = getOrThrow(allColumnXs, columnIndex) + gridX;\n var columnGroupRight = columnGroupLeft + getOrThrow(allColumnWidths, columnIndex);\n if (columnGroupName != null) {\n // Need to determine if the column group is at least the width of the bounds\n // And if the left/right of the group extend past the bounds\n // The group will be drawn as if it were a column with a max width of the bounds width\n var prevColumnIndex = columnIndex - 1;\n while (prevColumnIndex >= 0 && (columnGroupRight - columnGroupLeft < visibleWidth || columnGroupLeft > minX)) {\n var _modelColumns$get, _ref3, _ref4, _userColumnWidths$get;\n var prevModelIndex = (_modelColumns$get = modelColumns.get(prevColumnIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(prevColumnIndex, movedColumns);\n if (prevModelIndex == null || model.textForColumnHeader(prevModelIndex, depth) !== columnGroupName) {\n // Previous column not in the same group\n break;\n }\n var prevColumnWidth = (_ref3 = (_ref4 = (_userColumnWidths$get = userColumnWidths.get(prevModelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : allColumnWidths.get(prevColumnIndex)) !== null && _ref4 !== void 0 ? _ref4 : calculatedColumnWidths.get(prevModelIndex)) !== null && _ref3 !== void 0 ? _ref3 : columnWidth;\n columnGroupLeft -= prevColumnWidth;\n prevColumnIndex -= 1;\n }\n var nextColumnIndex = columnIndex + 1;\n while (nextColumnIndex < columnCount && (columnGroupRight - columnGroupLeft < visibleWidth || columnGroupRight < maxX)) {\n var _modelColumns$get2, _ref5, _userColumnWidths$get2;\n var nextModelIndex = (_modelColumns$get2 = modelColumns.get(nextColumnIndex)) !== null && _modelColumns$get2 !== void 0 ? _modelColumns$get2 : GridUtils.getModelIndex(nextColumnIndex, movedColumns);\n if (model.textForColumnHeader(nextModelIndex, depth) !== columnGroupName) {\n // Next column not in the same group\n break;\n }\n var nextColumnWidth = (_ref5 = (_userColumnWidths$get2 = userColumnWidths.get(nextModelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : allColumnWidths.get(nextColumnIndex)) !== null && _ref5 !== void 0 ? _ref5 : columnWidth;\n columnGroupRight += nextColumnWidth;\n nextColumnIndex += 1;\n }\n\n // Set column index to end of the current group\n columnIndex = nextColumnIndex - 1;\n var isFullWidth = columnGroupRight - columnGroupLeft >= visibleWidth;\n var x = columnGroupLeft;\n if (isFullWidth) {\n if (columnGroupRight < maxX) {\n x = columnGroupRight - visibleWidth;\n } else if (columnGroupLeft < minX) {\n x = minX;\n }\n }\n this.drawColumnHeader(context, state, columnGroupName, x, Math.min(columnGroupRight - columnGroupLeft, visibleWidth), {\n backgroundColor: columnGroupColor !== null && columnGroupColor !== void 0 ? columnGroupColor : undefined\n }, bounds);\n }\n columnIndex += 1;\n }\n }\n context.restore();\n }\n\n /**\n * Draws the column header for the given visible index\n * @param context Canvas context\n * @param state Grid render state\n * @param index Visible index of the column header to draw\n * @param bounds The horizontal bounds the header can be drawn in\n */\n drawColumnHeaderAtIndex(context, state, index, bounds) {\n var _model$colorForColumn;\n var {\n metrics,\n model\n } = state;\n var {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX\n } = metrics;\n var width = getOrThrow(allColumnWidths, index);\n var x = getOrThrow(allColumnXs, index) + gridX;\n var modelColumn = getOrThrow(modelColumns, index);\n var text = model.textForColumnHeader(modelColumn);\n if (text == null) {\n return;\n }\n this.drawColumnHeader(context, state, text, x, width, {\n backgroundColor: (_model$colorForColumn = model.colorForColumnHeader(modelColumn)) !== null && _model$colorForColumn !== void 0 ? _model$colorForColumn : undefined\n }, bounds);\n }\n drawColumnHeader(context, state, columnText, columnX, columnWidth, style, bounds) {\n if (columnWidth <= 0) {\n return;\n }\n var {\n metrics,\n theme\n } = state;\n var {\n headerHorizontalPadding,\n columnHeaderHeight,\n headerBackgroundColor,\n headerColor,\n headerSeparatorColor,\n black,\n white\n } = theme;\n var {\n fontWidthsLower,\n fontWidthsUpper,\n width\n } = metrics;\n var maxWidth = columnWidth - headerHorizontalPadding * 2;\n var {\n backgroundColor = headerBackgroundColor,\n separatorColor = headerSeparatorColor\n } = style !== null && style !== void 0 ? style : {};\n var {\n textColor = headerColor\n } = style !== null && style !== void 0 ? style : {};\n try {\n var isDarkBackground = GridRenderer.getCachedColorIsDark(backgroundColor);\n var isDarkText = GridRenderer.getCachedColorIsDark(textColor);\n if (isDarkBackground && isDarkText) {\n textColor = white;\n } else if (!isDarkBackground && !isDarkText) {\n textColor = black;\n }\n } catch (_unused) {\n // Invalid color provided\n // no-op since we don't use logging in base grid\n }\n var {\n minX = 0,\n maxX = width\n } = bounds !== null && bounds !== void 0 ? bounds : {};\n context.save();\n context.rect(minX, 0, maxX - minX, columnHeaderHeight);\n context.clip();\n\n // Fill background color if specified\n if (backgroundColor != null) {\n context.fillStyle = backgroundColor;\n context.fillRect(columnX, 0, columnWidth, columnHeaderHeight);\n }\n if (separatorColor != null) {\n context.strokeStyle = separatorColor;\n context.beginPath();\n\n // Don't draw left separator if column touches the left edge\n if (columnX > 0) {\n context.moveTo(columnX + 0.5, 0);\n context.lineTo(columnX + 0.5, columnHeaderHeight);\n }\n context.moveTo(columnX + columnWidth + 0.5, 0);\n context.lineTo(columnX + columnWidth + 0.5, columnHeaderHeight);\n\n // Bottom Border, should be interior to the header height\n context.moveTo(columnX, columnHeaderHeight - 0.5);\n context.lineTo(columnX + columnWidth, columnHeaderHeight - 0.5);\n context.stroke();\n }\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n context.fillStyle = textColor;\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var renderText = this.textCellRenderer.getCachedTruncatedString(context, columnText, maxWidth, fontWidthLower, fontWidthUpper);\n var x = columnX + columnWidth * 0.5;\n var y = columnHeaderHeight * 0.5;\n minX += headerHorizontalPadding;\n maxX -= headerHorizontalPadding;\n var columnLeft = columnX + headerHorizontalPadding;\n var visibleLeft = clamp(columnLeft, minX, maxX);\n var columnRight = columnX + columnWidth - headerHorizontalPadding;\n var visibleRight = clamp(columnRight, minX, maxX);\n var visibleWidth = visibleRight - visibleLeft;\n var textWidth = this.getCachedHeaderWidth(context, renderText);\n var isBeyondLeft = x - textWidth * 0.5 < minX;\n var isBeyondRight = x + textWidth * 0.5 > maxX;\n if (isBeyondLeft) {\n // Column name would be off the left side of the canvas\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to left\n x = minX + textWidth * 0.5;\n } else {\n x = columnRight - textWidth * 0.5;\n }\n } else if (isBeyondRight) {\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to right\n x = maxX - textWidth * 0.5;\n } else {\n x = columnLeft + textWidth * 0.5;\n }\n }\n context.textAlign = 'center';\n context.fillText(renderText, x, y);\n context.restore();\n }\n drawRowHeaders(context, state) {\n var {\n mouseX,\n mouseY,\n metrics,\n theme,\n draggingRowSeparator\n } = state;\n var {\n gridY,\n rowHeaderWidth,\n height,\n visibleRows,\n allRowHeights,\n allRowYs\n } = metrics;\n if (rowHeaderWidth <= 0) {\n return;\n }\n var {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor\n } = theme;\n var hiddenSeparatorWidth = rowHeaderWidth * 0.5;\n var hiddenX = rowHeaderWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n context.save();\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(0, gridY + 0.5);\n context.lineTo(rowHeaderWidth, gridY + 0.5);\n var hiddenRows = [];\n var isPreviousRowHidden = false;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n if (rowHeight > 0) {\n var y = gridY + rowY + rowHeight + 0.5;\n context.moveTo(0, y);\n context.lineTo(rowHeaderWidth, y);\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border right, interior to the headerWidth\n context.moveTo(rowHeaderWidth - 0.5, 0);\n context.lineTo(rowHeaderWidth - 0.5, height);\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (var _i5 = 0; _i5 < hiddenRows.length; _i5 += 1) {\n var _row4 = hiddenRows[_i5];\n var _rowY = getOrThrow(allRowYs, _row4);\n var _rowHeight = getOrThrow(allRowHeights, _row4);\n var minY = gridY + _rowY + _rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);\n }\n context.fill();\n }\n if (headerSeparatorHoverColor) {\n var {\n index: highlightedSeparator = null\n } = draggingRowSeparator !== null && draggingRowSeparator !== void 0 ? draggingRowSeparator : {};\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);\n }\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n var _rowY2 = getOrThrow(allRowYs, highlightedSeparator);\n var _rowHeight2 = getOrThrow(allRowHeights, highlightedSeparator);\n var _y5 = gridY + _rowY2 + _rowHeight2 + 0.5;\n var visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n var nextRow = visibleRowIndex < visibleRows.length - 1 ? visibleRows[visibleRowIndex + 1] : null;\n var nextRowHeight = nextRow != null ? allRowHeights.get(nextRow) : null;\n var isRowHidden = _rowHeight2 === 0;\n var isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(hiddenX, _y5, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(hiddenX, _y5 - headerHiddenSeparatorSize * 0.5, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n }\n context.beginPath();\n context.moveTo(0.5, _y5);\n context.lineTo(rowHeaderWidth + 0.5, _y5);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(0, gridY, rowHeaderWidth, height);\n context.clip();\n context.fillStyle = headerColor;\n context.textAlign = 'right';\n for (var _i6 = 0; _i6 < visibleRows.length; _i6 += 1) {\n var _row5 = visibleRows[_i6];\n var _rowHeight3 = getOrThrow(allRowHeights, _row5);\n var _y6 = getOrThrow(allRowYs, _row5) + gridY;\n this.drawRowHeader(context, state, _row5, _y6, _rowHeight3);\n }\n context.restore();\n }\n drawRowHeader(context, state, row, rowY, rowHeight) {\n if (rowHeight <= 0) {\n return;\n }\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n modelRows,\n rowHeaderWidth\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var x = rowHeaderWidth - theme.cellHorizontalPadding;\n var y = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowHeader(modelRow), x, y);\n }\n drawRowFooters(context, state) {\n var {\n mouseX,\n mouseY,\n metrics,\n model,\n theme,\n draggingRowSeparator\n } = state;\n var {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n allRowHeights,\n allRowYs,\n width\n } = metrics;\n if (rowFooterWidth <= 0) {\n return;\n }\n var {\n cellHorizontalPadding,\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor\n } = theme;\n var hiddenSeparatorWidth = rowFooterWidth * 0.5;\n var hiddenX = rowFooterWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n var x = Math.min(gridX + maxX, width - rowFooterWidth - verticalBarWidth);\n context.save();\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(x, gridY, rowFooterWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(x, gridY + 0.5);\n context.lineTo(rowFooterWidth, gridY + 0.5);\n var hiddenRows = [];\n var isPreviousRowHidden = false;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n if (rowHeight > 0) {\n var y = gridY + rowY + rowHeight + 0.5;\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth - 0.5, y);\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border left, interior to the headerWidth\n context.moveTo(x + 0.5, gridY);\n context.lineTo(x + 0.5, height);\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (var _i7 = 0; _i7 < hiddenRows.length; _i7 += 1) {\n var _row6 = hiddenRows[_i7];\n var _rowY3 = getOrThrow(allRowYs, _row6);\n var _rowHeight4 = getOrThrow(allRowHeights, _row6);\n var minY = gridY + _rowY3 + _rowHeight4 + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(x + hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);\n }\n context.fill();\n }\n if (headerSeparatorHoverColor) {\n var {\n index: highlightedSeparator = null\n } = draggingRowSeparator !== null && draggingRowSeparator !== void 0 ? draggingRowSeparator : {};\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);\n }\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n var _rowY4 = getOrThrow(allRowYs, highlightedSeparator);\n var _rowHeight5 = getOrThrow(allRowHeights, highlightedSeparator);\n var _y7 = gridY + _rowY4 + _rowHeight5 + 0.5;\n var visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n var nextRow = visibleRowIndex < visibleRows.length - 1 ? visibleRows[visibleRowIndex + 1] : null;\n var nextRowHeight = nextRow != null ? allRowHeights.get(nextRow) : null;\n var isRowHidden = _rowHeight5 === 0;\n var isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(hiddenX, _y7, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(hiddenX, _y7 - headerHiddenSeparatorSize * 0.5, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n }\n context.beginPath();\n context.moveTo(x + 0.5, _y7);\n context.lineTo(x + rowFooterWidth + 0.5, _y7);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(x, gridY, rowFooterWidth, height);\n context.clip();\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n var textX = x + cellHorizontalPadding;\n for (var _i8 = 0; _i8 < visibleRows.length; _i8 += 1) {\n var _row7 = visibleRows[_i8];\n var _rowHeight6 = getOrThrow(allRowHeights, _row7);\n if (_rowHeight6 > 0) {\n var _rowY5 = getOrThrow(allRowYs, _row7) + gridY;\n var modelRow = getOrThrow(modelRows, _row7);\n var textY = _rowY5 + _rowHeight6 * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n context.restore();\n }\n drawSelectedRanges(context, state) {\n var viewport = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var {\n cursorColumn: column,\n cursorRow: row,\n draggingRow,\n draggingColumn,\n editingCell,\n metrics,\n model,\n selectedRanges,\n theme\n } = state;\n var {\n allColumnWidths,\n allColumnXs,\n allRowHeights,\n allRowYs,\n width,\n height\n } = metrics;\n var {\n left = metrics.left,\n top = metrics.top,\n right = metrics.right,\n bottom = metrics.bottom,\n minY = -10,\n maxY = height + 10,\n minX = -10,\n maxX = width + 10\n } = viewport;\n if (selectedRanges.length === 0) {\n return;\n }\n var isCursorVisible = isEditableGridModel(model) && model.isEditable && editingCell == null && draggingRow == null && draggingColumn == null && column != null && row != null && allColumnXs.has(column) && allRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n var x = getOrThrow(allColumnXs, column);\n var y = getOrThrow(allRowYs, row);\n var w = getOrThrow(allColumnWidths, column);\n var h = getOrThrow(allRowHeights, row);\n context.save();\n context.beginPath();\n context.rect(0, 0, width, height);\n context.rect(x, y, w, h);\n context.clip('evenodd');\n }\n\n // Draw selection ranges\n context.beginPath();\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var selectedRange = selectedRanges[i];\n var startColumn = selectedRange.startColumn !== null ? selectedRange.startColumn : left;\n var startRow = selectedRange.startRow !== null ? selectedRange.startRow : top;\n var endColumn = selectedRange.endColumn !== null ? selectedRange.endColumn : right;\n var endRow = selectedRange.endRow !== null ? selectedRange.endRow : bottom;\n if (endRow >= top && bottom >= startRow && endColumn >= left && right >= startColumn) {\n // Need to offset the x/y coordinates so that the line draws nice and crisp\n var _x4 = startColumn >= left && allColumnXs.has(startColumn) ? Math.round(getOrThrow(allColumnXs, startColumn)) + 0.5 : minX;\n var _y8 = startRow >= top && allRowYs.has(startRow) ? Math.max(Math.round(getOrThrow(allRowYs, startRow)) + 0.5, 0.5) : minY;\n var endX = endColumn <= right && allColumnXs.has(endColumn) ? Math.round(getOrThrow(allColumnXs, endColumn) + getOrThrow(allColumnWidths, endColumn)) - 0.5 : maxX;\n var endY = endRow <= bottom && allRowYs.has(endRow) ? Math.round(getOrThrow(allRowYs, endRow) + getOrThrow(allRowHeights, endRow)) - 0.5 : maxY;\n context.rect(_x4, _y8, endX - _x4, endY - _y8);\n }\n }\n\n /**\n * Create the path, then draw it once. Fill and\n * stroke must be outside the beginPath loop otherwise\n * the fill/stroke will be drawn multiple times.\n */\n\n // draw the inner transparent fill\n context.fillStyle = theme.selectionColor;\n context.fill();\n\n /**\n * draw an \"inner stroke\" that's clipped to just inside of the rects\n * to act as a casing to the outer stroke. 3px width because 1px is outside\n * the rect (but clipped), 1px is \"on\" the rect (technically this pixel is\n * a half pixel clip as well due to rects offset, but we are immediately painting\n * over it), and then the 1px inside (which is the desired pixel).\n */\n context.save();\n context.clip();\n context.strokeStyle = theme.selectionOutlineCasingColor;\n context.lineWidth = 3;\n context.stroke();\n context.restore();\n\n // draw the outerstroke border on top of the inner stroke\n context.strokeStyle = theme.selectionOutlineColor;\n context.lineWidth = 1;\n context.stroke();\n if (isCursorVisible && column != null && row != null) {\n context.restore();\n this.drawActiveCell(context, state, column, row);\n }\n }\n drawActiveCell(context, state, column, row) {\n var {\n metrics,\n theme\n } = state;\n var {\n scrollX,\n scrollY,\n allColumnWidths,\n allColumnXs,\n allRowHeights,\n allRowYs\n } = metrics;\n var {\n activeCellSelectionBorderWidth: borderWidth\n } = theme;\n var cellX = getOrThrow(allColumnXs, column);\n var cellY = getOrThrow(allRowYs, row);\n var cellW = getOrThrow(allColumnWidths, column);\n var cellH = getOrThrow(allRowHeights, row);\n\n // Now get the outline for the active cell\n var x = cellX - borderWidth * 0.5;\n var y = cellY - borderWidth * 0.5;\n var w = cellW + borderWidth;\n var h = cellH + borderWidth;\n\n // Make sure the outline is interior on the edge\n if (x <= 0 && scrollX <= 0) {\n w -= borderWidth - x;\n x = borderWidth * 0.5;\n }\n if (y <= 0 && scrollY <= 0) {\n h -= borderWidth - y;\n y = borderWidth * 0.5;\n }\n var {\n lineWidth\n } = context;\n context.beginPath();\n context.lineWidth = borderWidth;\n context.strokeStyle = theme.selectionOutlineColor;\n this.drawRoundedRect(context, x, y, w, h);\n context.stroke();\n context.lineWidth = lineWidth;\n }\n\n /**\n * Draws a rounded rectangle using the current state of the canvas.\n *\n * @param context The canvas context\n * @param x coordinate of the left side\n * @param y coordinate of the top side\n * @param w width of the rectangle\n * @param h height of the rectangle\n * @param r corner radius of the rectangle\n */\n drawRoundedRect(context, x, y, w, h) {\n var r = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : GridRenderer.DEFAULT_EDGE_RADIUS;\n context.beginPath();\n context.moveTo(x + r, y);\n context.lineTo(x + w - r, y);\n context.quadraticCurveTo(x + w, y, x + w, y + r);\n context.lineTo(x + w, y + h - r);\n context.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n context.lineTo(x + r, y + h);\n context.quadraticCurveTo(x, y + h, x, y + h - r);\n context.lineTo(x, y + r);\n context.quadraticCurveTo(x, y, x + r, y);\n context.closePath();\n }\n drawDraggingColumn(context, state) {\n var _modelColumns$get3;\n var {\n draggingColumn,\n metrics,\n mouseX,\n theme,\n model\n } = state;\n if (draggingColumn == null || mouseX == null) {\n return;\n }\n var {\n range: draggingColumnVisibleRange,\n depth: draggingColumnDepth\n } = draggingColumn;\n var {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n height,\n width,\n columnHeaderMaxDepth,\n columnHeaderHeight,\n movedColumns,\n modelColumns,\n floatingLeftWidth\n } = metrics;\n var draggingModelIndex = (_modelColumns$get3 = modelColumns.get(draggingColumnVisibleRange[0])) !== null && _modelColumns$get3 !== void 0 ? _modelColumns$get3 : GridUtils.getModelIndex(draggingColumnVisibleRange[0], movedColumns);\n var draggingGroup = model.getColumnHeaderGroup(draggingModelIndex, draggingColumnDepth);\n if (draggingColumnDepth > 0 && !draggingGroup) {\n return;\n }\n var [startIndex, endIndex] = draggingColumnVisibleRange;\n var originalLeft = getOrThrow(allColumnXs, startIndex);\n var originalRight = getOrThrow(allColumnXs, endIndex) + getOrThrow(allColumnWidths, endIndex);\n var originalWidth = originalRight - originalLeft;\n var draggingLeft = draggingColumn.left;\n var {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor\n } = theme;\n var columnHeaderOffset = (columnHeaderMaxDepth - draggingColumnDepth - 1) * columnHeaderHeight;\n context.save();\n context.translate(gridX, 0);\n context.save();\n context.beginPath();\n\n // Don't draw over frozen columns\n context.rect(floatingLeftWidth, 0, width, height);\n context.clip();\n\n // First, we need to draw over where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(originalLeft, columnHeaderOffset, originalWidth, height);\n context.restore();\n\n // Then draw the shadow of the moving column\n context.translate(0, reorderOffset);\n context.save();\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n context.fillStyle = backgroundColor;\n context.fillRect(draggingColumn.left, columnHeaderOffset + reorderOffset, draggingColumn.width, height);\n context.restore(); // Reset style\n\n // Now set the clipping region and pretty much just redraw this column and all it's contents\n context.beginPath();\n context.rect(draggingColumn.left, columnHeaderOffset, draggingColumn.width + 1, height);\n context.clip();\n\n // The header drawing functions expect the context to be at the edge of the canvas\n // We offset it by how much the user has dragged\n context.translate(draggingLeft - originalLeft - gridX, 0);\n context.font = headerFont;\n var visibleColumns = [];\n for (var i = draggingColumn.range[0]; i <= draggingColumn.range[1]; i += 1) {\n visibleColumns.push(i);\n }\n\n /**\n * This will not draw the header text properly, but extensions of Grid\n * may draw extra things in the header like sorts and filters\n */\n this.drawColumnHeaders(context, state);\n\n // Ensure the column header gets drawn\n this.drawColumnHeadersForRange(context, state, [visibleColumns[0], visibleColumns[visibleColumns.length - 1]], {\n minX: originalLeft,\n maxX: width\n });\n\n // Now move to the edge of the \"grid\" (top-left of top-left cell). We then draw the\n // grid background, but only the clipped region will be drawn where the dragging column is.\n context.translate(gridX, gridY);\n context.font = font;\n this.drawGridBackground(context, state);\n\n // Then draw the contents of the column that is being dragged\n for (var _i9 = startIndex; _i9 <= endIndex; _i9 += 1) {\n this.drawColumnCellContents(context, state, _i9);\n }\n context.restore();\n }\n drawDraggingRow(context, state) {\n var {\n draggingRow,\n draggingRowOffset,\n metrics,\n mouseY,\n theme\n } = state;\n if (draggingRow == null || mouseY == null) {\n return;\n }\n var {\n gridX,\n gridY,\n allRowYs,\n allRowHeights,\n width\n } = metrics;\n var y = getOrThrow(allRowYs, draggingRow);\n var rowHeight = getOrThrow(allRowHeights, draggingRow) + 1;\n var {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor\n } = theme;\n context.save();\n context.translate(0, gridY);\n\n // First, we need to draw over the row stripes where the row is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(0, y, width, rowHeight);\n context.translate(gridX + reorderOffset, mouseY - y - gridY - (draggingRowOffset !== null && draggingRowOffset !== void 0 ? draggingRowOffset : 0));\n\n // Then draw the shadow of the moving row\n context.save();\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n context.fillStyle = backgroundColor;\n context.fillRect(-gridX, y, width, rowHeight);\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this row and all it's contents\n context.beginPath();\n context.rect(-gridX, y, width, rowHeight);\n context.clip();\n context.font = font;\n this.drawGridBackground(context, state);\n this.drawCellContents(context, state);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n context.font = headerFont;\n this.drawRowHeaders(context, state);\n context.restore();\n }\n drawScrollBars(context, state) {\n var {\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n metrics,\n mouseX,\n mouseY,\n theme\n } = state;\n if (theme.scrollBarSize <= 0) {\n return;\n }\n var {\n width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n barLeft,\n barTop\n } = metrics;\n var {\n scrollBarBackgroundColor,\n scrollBarHoverBackgroundColor,\n scrollBarCasingColor,\n scrollBarCornerColor,\n scrollBarColor,\n scrollBarHoverColor,\n scrollBarActiveColor,\n scrollBarSize,\n scrollBarHoverSize,\n scrollBarCasingWidth,\n scrollBarSelectionTick,\n scrollBarSelectionTickColor,\n scrollBarActiveSelectionTickColor,\n autoSelectRow,\n autoSelectColumn\n } = theme;\n var isInbounds = mouseX != null && mouseY != null && mouseX <= width && mouseY <= height;\n var isVerticalBarHover = isDraggingVerticalScrollBar || hasVerticalBar && !isDraggingHorizontalScrollBar && !isDragging && mouseX != null && mouseY != null && mouseX >= width - scrollBarHoverSize && mouseY >= barTop && isInbounds;\n var isHorizontalBarHover = isDraggingHorizontalScrollBar || hasHorizontalBar && !isDraggingVerticalScrollBar && !isDragging && !isVerticalBarHover &&\n // vert bar gets priorty in overlapped corner hover area\n mouseX != null && mouseY != null && mouseY >= height - scrollBarHoverSize && mouseX >= barLeft && isInbounds;\n var hScrollBarSize = isHorizontalBarHover ? scrollBarHoverSize : scrollBarSize;\n var vScrollBarSize = isVerticalBarHover ? scrollBarHoverSize : scrollBarSize;\n context.translate(barLeft, barTop);\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(width - barLeft - scrollBarSize, height - barTop - scrollBarSize, scrollBarSize, scrollBarSize);\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(width - barLeft - scrollBarSize + scrollBarCasingWidth, height - barTop - scrollBarSize + scrollBarCasingWidth, scrollBarSize - scrollBarCasingWidth, scrollBarSize - scrollBarCasingWidth);\n }\n if (hasHorizontalBar) {\n var x = scrollX;\n var y = height - barTop - hScrollBarSize;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(0, y, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar track\n context.fillStyle = isHorizontalBarHover ? scrollBarHoverBackgroundColor : scrollBarBackgroundColor;\n context.fillRect(0, y + scrollBarCasingWidth, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar thumb\n if (isDraggingHorizontalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isHorizontalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n context.fillRect(x, y + scrollBarCasingWidth, handleWidth, hScrollBarSize - scrollBarCasingWidth);\n if (!autoSelectRow && scrollBarSelectionTick && scrollBarSelectionTickColor != null && scrollBarActiveSelectionTickColor != null) {\n context.fillStyle = scrollBarSelectionTickColor;\n // Scrollbar Selection Tick\n var {\n selectedRanges,\n cursorColumn\n } = state;\n var {\n lastLeft,\n columnCount\n } = metrics;\n var filteredRanges = [...selectedRanges].filter(value => value.startColumn != null && value.endColumn != null);\n var sortedRanges = filteredRanges.map(value => [value.startColumn, value.endColumn]).sort(GridUtils.compareRanges);\n var mergedRanges = GridUtils.mergeSortedRanges(sortedRanges);\n var getTickX = index => {\n if (index <= lastLeft) {\n return index / lastLeft * (barWidth - handleWidth);\n }\n return barWidth - handleWidth + (index - lastLeft) / (columnCount - lastLeft) * handleWidth;\n };\n for (var i = 0; i < mergedRanges.length; i += 1) {\n var range = mergedRanges[i];\n var startColumn = range[0];\n var endColumn = range[1];\n if (startColumn != null && endColumn != null && (startColumn !== cursorColumn || endColumn !== cursorColumn)) {\n var tickX = getTickX(startColumn);\n var tickWidth = Math.max(1, Math.round(getTickX(endColumn + 1) - tickX));\n var trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillRect(tickX, y + scrollBarCasingWidth + Math.round(trackHeight / 3), tickWidth, Math.round(trackHeight / 3));\n }\n }\n\n // Current Active Tick\n if (cursorColumn != null) {\n var _tickX = getTickX(cursorColumn);\n var _tickWidth = 2;\n var _trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(_tickX, y + scrollBarCasingWidth, _tickWidth, _trackHeight);\n }\n }\n }\n if (hasVerticalBar) {\n var _x5 = width - barLeft - vScrollBarSize;\n var _y9 = scrollY;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(_x5, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar track\n context.fillStyle = isVerticalBarHover ? scrollBarHoverBackgroundColor : scrollBarBackgroundColor;\n context.fillRect(_x5 + scrollBarCasingWidth, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar thumb\n if (isDraggingVerticalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isVerticalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n context.fillRect(_x5 + scrollBarCasingWidth, _y9, vScrollBarSize - scrollBarCasingWidth, handleHeight);\n if (!autoSelectColumn && scrollBarSelectionTick && scrollBarSelectionTickColor != null && scrollBarActiveSelectionTickColor != null) {\n // Scrollbar Selection Tick\n var {\n selectedRanges: _selectedRanges,\n cursorRow\n } = state;\n var {\n lastTop,\n rowCount\n } = metrics;\n var getTickY = index => {\n if (index <= lastTop) {\n return index / lastTop * (barHeight - handleHeight);\n }\n return barHeight - handleHeight + (index - lastTop) / (rowCount - lastTop) * handleHeight;\n };\n context.fillStyle = scrollBarSelectionTickColor;\n var _filteredRanges = [..._selectedRanges].filter(value => value.startRow != null && value.endRow != null);\n var _sortedRanges = _filteredRanges.map(value => [value.startRow, value.endRow]).sort(GridUtils.compareRanges);\n var _mergedRanges = GridUtils.mergeSortedRanges(_sortedRanges);\n for (var _i0 = 0; _i0 < _mergedRanges.length; _i0 += 1) {\n var _range = _mergedRanges[_i0];\n var startRow = _range[0];\n var endRow = _range[1];\n if (startRow != null && endRow != null && (startRow !== cursorRow || endRow !== cursorRow)) {\n var tickY = getTickY(startRow);\n var trackWidth = vScrollBarSize - scrollBarCasingWidth;\n var tickHeight = Math.max(1, Math.round(getTickY(endRow + 1) - tickY));\n context.fillRect(_x5 + scrollBarCasingWidth + Math.round(trackWidth / 3), tickY, Math.round(trackWidth / 3), tickHeight);\n }\n }\n\n // Current Active Tick\n if (cursorRow != null) {\n var _tickY = Math.round(getTickY(cursorRow));\n var _trackWidth = vScrollBarSize - scrollBarCasingWidth;\n var _tickHeight = 2;\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(_x5 + scrollBarCasingWidth, _tickY, _trackWidth, _tickHeight);\n }\n }\n }\n context.translate(-barLeft, -barTop);\n }\n}\n// Default radius in pixels for corners for some elements (like the active cell)\n_defineProperty(GridRenderer, \"DEFAULT_EDGE_RADIUS\", 2);\n_defineProperty(GridRenderer, \"getCachedBackgroundColors\", memoizeClear((backgroundColors, maxDepth) => backgroundColors.split(' ').map(color => {\n var colors = [];\n for (var i = 0; i < maxDepth; i += 1) {\n colors.push(GridColorUtils.darkenForDepth(color, i, maxDepth));\n }\n return colors;\n}), {\n max: 1000\n}));\n/**\n * A memoized version of the GridColorUtils.colorWithAlpha function.\n */\n_defineProperty(GridRenderer, \"getCachedColorWithAlpha\", memoizeClear(GridColorUtils.colorWithAlpha, {\n max: 1000\n}));\n/**\n * A memoized version of the ColorUtils.isDark function.\n * ColorUtils.isDark is a very expensive function, and having a shared cache between all grids is a good idea.\n */\n_defineProperty(GridRenderer, \"getCachedColorIsDark\", memoizeClear(ColorUtils.isDark, {\n max: 1000\n}));\nexport default GridRenderer;\n//# sourceMappingURL=GridRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\nimport GridUtils from \"../GridUtils.js\";\nvar DEFAULT_INTERVAL_MS = 100;\nclass GridSelectionMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"startPoint\", void 0);\n _defineProperty(this, \"hasExtendedFloating\", false);\n // Timer used when holding a drag past the end of the grid\n _defineProperty(this, \"timer\", void 0);\n _defineProperty(this, \"lastTriggerTime\", void 0);\n }\n /**\n * Returns the latest grid selection based on the current grid selection and where the user clicked\n * This code is dependent on the behavior of onContextMenu\n * @param originalSelection The selection from the current grid state which may be stale\n * @param columnIndex The column index where the user clicked\n * @param rowIndex The row index where the user clicked\n */\n static getLatestSelection(originalSelection, columnIndex, rowIndex) {\n var clickedInOriginalSelection = GridRange.containsCell(originalSelection, columnIndex, rowIndex);\n\n // If the user clicked in a valid cell outside of the original selection,\n // the selection will be changed to just that cell.\n return clickedInOriginalSelection || columnIndex == null || rowIndex == null ? originalSelection : [GridRange.makeCell(columnIndex, rowIndex)];\n }\n onDown(gridPoint, grid, event) {\n var {\n x,\n y,\n column,\n row\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n gridX,\n gridY,\n maxX,\n maxY\n } = metrics;\n var gridMouseX = x - gridX;\n var gridMouseY = y - gridY;\n if (gridMouseX < 0 || gridMouseY < 0 || column == null && gridMouseX > maxX || row == null && gridMouseY > maxY) {\n return false;\n }\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n var isShiftKey = event.shiftKey;\n if (!isModifierKey) {\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n }\n var theme = grid.getTheme();\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n // If they click a column/row header, don't want to select the whole table if auto select column/row is on\n if ((column !== null || !autoSelectColumn) && (row !== null || !autoSelectRow)) {\n grid.focus();\n grid.moveCursorToPosition(column, row, isShiftKey, false, isShiftKey && isModifierKey);\n }\n this.startPoint = gridPoint;\n this.hasExtendedFloating = false;\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.startPoint === undefined) {\n return false;\n }\n this.stopTimer();\n var {\n row: startRow,\n column: startColumn\n } = this.startPoint;\n var {\n x,\n y\n } = gridPoint;\n var {\n row,\n column\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n left,\n lastLeft,\n top,\n lastTop,\n columnWidth,\n rowHeight\n } = metrics;\n var dragBounds = GridUtils.getScrollDragBounds(metrics, startRow, startColumn);\n\n // If we're dragging outside of the grid entirely, then we should start scrolling\n var deltaX = 0;\n var deltaY = 0;\n if (left < lastLeft) {\n if (x < dragBounds.x1) {\n deltaX = x - dragBounds.x1;\n } else if (x > dragBounds.x2) {\n deltaX = x - dragBounds.x2;\n }\n }\n if (top < lastTop) {\n if (y < dragBounds.y1) {\n deltaY = y - dragBounds.y1;\n } else if (y > dragBounds.y2) {\n deltaY = y - dragBounds.y2;\n }\n }\n if (deltaX !== 0 || deltaY !== 0) {\n // Have it go faster depending on how far out they've dragged\n this.startTimer(grid, gridPoint, deltaX > 0 ? Math.ceil(deltaX / columnWidth) : Math.floor(deltaX / columnWidth), deltaY > 0 ? Math.ceil(deltaY / rowHeight) : Math.floor(deltaY / rowHeight));\n } else if (row != null && column != null) {\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n rowCount,\n bottom,\n right,\n topVisible,\n bottomVisible,\n leftVisible,\n rightVisible\n } = metrics;\n // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area\n // So when that happens, just adjust the point to be past the new boundary\n if (!this.hasExtendedFloating) {\n if (startRow !== null && startRow < floatingTopRowCount && row >= floatingTopRowCount) {\n // Extending from floating top into the view\n row = floatingTopRowCount;\n this.hasExtendedFloating = true;\n } else if (startRow !== null && startRow >= rowCount - floatingBottomRowCount && row < rowCount - floatingBottomRowCount) {\n // Extending from floating bottom into the view\n row = rowCount - floatingBottomRowCount - 1;\n this.hasExtendedFloating = true;\n }\n if (startColumn !== null && startColumn < floatingLeftColumnCount && column >= floatingLeftColumnCount) {\n // Extending from floating left into the view\n column = floatingLeftColumnCount;\n this.hasExtendedFloating = true;\n } else if (startColumn !== null && startColumn >= columnCount - floatingRightColumnCount && column < columnCount - floatingRightColumnCount) {\n // Extending from floating right into the view\n column = columnCount - floatingRightColumnCount - 1;\n this.hasExtendedFloating = true;\n }\n }\n\n // When a selection is dragging from within the main area to over a floating area, scroll.\n if (startRow !== null && !GridUtils.isFloatingRow(startRow, metrics) && GridUtils.isFloatingRow(row, metrics)) {\n // Need to scroll\n if (startRow > row && row < top) {\n row = topVisible - 1;\n } else if (startRow < row && row > bottom) {\n row = bottomVisible + 1;\n }\n }\n if (startColumn !== null && !GridUtils.isFloatingColumn(startColumn, metrics) && GridUtils.isFloatingColumn(column, metrics)) {\n if (startColumn > column && column < left) {\n column = leftVisible - 1;\n } else if (startColumn < column && column > right) {\n column = rightVisible + 1;\n }\n }\n grid.moveCursorToPosition(column, row, true, true);\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.startPoint !== undefined) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.commitSelection();\n }\n return false;\n }\n\n // eslint-disable-next-line class-methods-use-this\n onDoubleClick(gridPoint, grid, event) {\n var {\n column,\n row\n } = gridPoint;\n if (row == null || column == null) {\n return false;\n }\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(column, row);\n grid.commitSelection();\n return true;\n }\n onContextMenu(gridPoint, grid, event) {\n // check if the selected is already in the selected range\n var selectedRanges = grid.getSelectedRanges();\n var isInRange = GridRange.containsCell(selectedRanges, gridPoint.column, gridPoint.row);\n\n // only change the selected range if the selected cell is not in the selected range\n if (!isInRange && gridPoint.row !== null && gridPoint.column !== null) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(gridPoint.column, gridPoint.row);\n }\n return false;\n }\n moveSelection(grid, gridPoint, deltaX, deltaY) {\n var {\n row,\n column\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n selectionEndRow,\n selectionEndColumn\n } = grid.state;\n if (selectionEndRow == null || selectionEndColumn == null) {\n throw new Error('selection not set');\n }\n var {\n rowCount,\n columnCount\n } = metrics;\n var minX = deltaX < 0 && column != null ? column : 0;\n var maxX = deltaX > 0 && column != null ? column : columnCount - 1;\n var minY = deltaY < 0 && row != null ? row : 0;\n var maxY = deltaY > 0 && row != null ? row : rowCount - 1;\n grid.moveCursorToPosition(Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX), Math.min(Math.max(minY, selectionEndRow + deltaY), maxY), true);\n this.lastTriggerTime = Date.now();\n }\n startTimer(grid, gridPoint, deltaX, deltaY) {\n this.stopTimer();\n var timeout = this.lastTriggerTime != null ? DEFAULT_INTERVAL_MS - Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime) : 0;\n this.timer = setTimeout(() => {\n this.moveSelection(grid, gridPoint, deltaX, deltaY);\n this.startTimer(grid, gridPoint, deltaX, deltaY);\n }, timeout);\n }\n stopTimer() {\n if (this.timer !== undefined) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\nexport default GridSelectionMouseHandler;\n//# sourceMappingURL=GridSelectionMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\n/**\n * Detect when the tree expand/collapse button is clicked\n */\nclass GridRowTreeMouseHandler extends GridMouseHandler {\n static isInTreeBox(gridPoint, grid) {\n var {\n column,\n row,\n x,\n y\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n gridX,\n gridY,\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowHeights,\n allRowYs,\n visibleRowTreeBoxes\n } = metrics;\n if (column === firstColumn && row != null && visibleRowTreeBoxes.get(row) != null && x > gridX && y > gridY) {\n var columnX = getOrThrow(allColumnXs, column);\n var width = getOrThrow(allColumnWidths, column);\n var rowY = getOrThrow(allRowYs, row);\n var height = getOrThrow(allRowHeights, row);\n if (x >= gridX + columnX && x <= gridX + columnX + width && y >= gridY + rowY && y <= gridY + rowY + height) {\n return true;\n }\n }\n return false;\n }\n onDown(gridPoint, grid) {\n return GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid);\n }\n onClick(gridPoint, grid, event) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n var {\n row\n } = gridPoint;\n if (row !== null) {\n grid.toggleRowExpanded(row, GridUtils.isModifierKeyDown(event));\n return true;\n }\n }\n return false;\n }\n}\nexport default GridRowTreeMouseHandler;\n//# sourceMappingURL=GridRowTreeMouseHandler.js.map","export function isTokenBoxCellRenderer(cellRenderer) {\n return (cellRenderer === null || cellRenderer === void 0 ? void 0 : cellRenderer.getTokenBoxesForVisibleCell) !== undefined;\n}\n//# sourceMappingURL=TokenBoxCellRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { getOrThrow } from '@deephaven/utils';\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\nimport GridUtils, { isLinkToken } from \"../GridUtils.js\";\nimport { isTokenBoxCellRenderer } from \"../TokenBoxCellRenderer.js\"; // Handler also helps with other tooltips\nclass GridTokenMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"timeoutId\", void 0);\n _defineProperty(this, \"isHold\", false);\n _defineProperty(this, \"isDown\", false);\n // Stores the current hovered token box if it exists with translated coordinates\n _defineProperty(this, \"currentLinkBox\", void 0);\n }\n isHoveringLink(gridPoint, grid) {\n var {\n column,\n row,\n x,\n y\n } = gridPoint;\n var {\n renderer,\n metrics,\n props\n } = grid;\n var {\n model\n } = props;\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n var {\n modelRows,\n modelColumns\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var renderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\n return false;\n }\n if (this.currentLinkBox != null) {\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n var renderState = grid.updateRenderState();\n var tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(column, row, renderState);\n\n // Loop through each link and check if cursor is in bounds\n for (var i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n var translatedTokenBox = GridUtils.translateTokenBox(tokensInCell[i], metrics);\n var {\n x1: _left,\n x2: _right,\n y1: _top,\n y2: _bottom\n } = translatedTokenBox;\n if (x >= _left && x <= _right && y >= _top && y <= _bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n\n /**\n * Set the cursor to pointer when hovering over a link\n * @param gridPoint Mouse position information\n * @param grid The grid\n * @returns False\n */\n setCursor(gridPoint, grid) {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n } else {\n this.cursor = null;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n return this.setCursor(gridPoint, grid);\n }\n onDown(gridPoint, grid, event) {\n var isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n // If a modifier key or shift is down, we don't want to handle it and set isDown to false so onUp won't handle it either\n if (GridUtils.isModifierKeyDown(event) || event.shiftKey || !isUserHoveringLink) {\n return false;\n }\n this.isDown = true;\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.isHold = false;\n this.timeoutId = setTimeout(() => {\n this.isHold = true;\n var {\n column,\n row\n } = gridPoint;\n var {\n model\n } = grid.props;\n\n // After 1 second, select the row and if it is an input table, start editing\n grid.clearSelectedRanges();\n grid.focus();\n grid.moveCursorToPosition(column, row);\n if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n }\n }, GridTokenMouseHandler.HOLD_LENGTH);\n return true;\n }\n onClick(gridPoint, grid) {\n var isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n if (!isUserHoveringLink || !this.isDown || this.currentLinkBox == null) {\n this.isDown = false;\n this.isHold = false;\n return false;\n }\n\n // User is hovering a link, isDown is true\n // If isHold is true, then the select already happened so onUp shouldn't do anything\n if (!this.isHold) {\n var _this$currentLinkBox;\n // Cancel the timeout and open a new tab with the link\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.timeoutId = undefined;\n grid.props.onTokenClicked((_this$currentLinkBox = this.currentLinkBox) === null || _this$currentLinkBox === void 0 ? void 0 : _this$currentLinkBox.token);\n }\n this.isHold = false;\n this.isDown = false;\n return true;\n }\n}\n_defineProperty(GridTokenMouseHandler, \"HOLD_LENGTH\", 1000);\nexport default GridTokenMouseHandler;\n//# sourceMappingURL=GridTokenMouseHandler.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 asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Log from '@deephaven/log';\nvar log = Log.module('DownloadServiceWorkerUtils');\nclass DownloadServiceWorkerUtils {\n /**\n * Register the download service worker at the specified URL\n * Will unregister any existing service worker if register is called multiple times\n * @param url The URL of the service worker file\n */\n static register(url) {\n if (DownloadServiceWorkerUtils.serviceWorkerRegistration) {\n DownloadServiceWorkerUtils.unregisterSW();\n }\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.register(url).then(reg => {\n reg.update();\n DownloadServiceWorkerUtils.serviceWorkerRegistration = reg;\n log.info('Registering service worker on ', url, reg);\n }).catch(err => {\n log.error('Failed to register service worker', err);\n });\n } else {\n log.info('Service worker is not supported.');\n }\n }\n static getServiceWorker() {\n return _asyncToGenerator(function* () {\n if ('serviceWorker' in navigator) {\n var swReg = DownloadServiceWorkerUtils.serviceWorkerRegistration;\n if (swReg && swReg.active) {\n log.info('Download service worker is active.');\n return swReg.active;\n }\n throw new Error('Can not find download service worker.');\n }\n throw new Error('Download service worker is not available.');\n })();\n }\n static unregisterSW() {\n var _DownloadServiceWorke;\n (_DownloadServiceWorke = DownloadServiceWorkerUtils.serviceWorkerRegistration) === null || _DownloadServiceWorke === void 0 || _DownloadServiceWorke.unregister();\n }\n}\n_defineProperty(DownloadServiceWorkerUtils, \"serviceWorkerRegistration\", null);\nexport default DownloadServiceWorkerUtils;\n//# sourceMappingURL=DownloadServiceWorkerUtils.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","import { ShortcutRegistry, MODIFIER, KEY } from '@deephaven/components';\nvar TABLE = {\n TOGGLE_QUICK_FILTER: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_QUICK_FILTER',\n name: 'Toggle Quick Filter',\n shortcut: [MODIFIER.CTRL, KEY.F],\n macShortcut: [MODIFIER.CMD, KEY.F]\n }),\n CLEAR_ALL_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_ALL_FILTERS',\n name: 'Clear All Table Filters',\n shortcut: [MODIFIER.CTRL, KEY.E],\n macShortcut: [MODIFIER.CMD, KEY.E]\n }),\n CLEAR_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_FILTERS',\n name: 'Clear Active Table Filters',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.E],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.E]\n }),\n REVERSE: ShortcutRegistry.createAndAdd({\n id: 'TABLE.REVERSE',\n name: 'Reverse',\n shortcut: [MODIFIER.CTRL, KEY.I],\n macShortcut: [MODIFIER.CMD, KEY.I]\n }),\n TOGGLE_SEARCH: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_SEARCH',\n name: 'Toggle Search',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.F],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.F]\n }),\n GOTO_ROW: ShortcutRegistry.createAndAdd({\n id: 'TABLE.GOTO_ROW',\n name: 'Go to Row',\n shortcut: [MODIFIER.CTRL, KEY.G],\n macShortcut: [MODIFIER.CMD, KEY.G]\n })\n};\nvar INPUT_TABLE = {\n COMMIT: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.COMMIT',\n name: 'Commit',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S]\n }),\n DISCARD: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.DISCARD',\n name: 'Discard',\n shortcut: [MODIFIER.CTRL, MODIFIER.ALT, KEY.S],\n macShortcut: [MODIFIER.CMD, MODIFIER.OPTION, KEY.S]\n })\n};\nvar IRIS_GRID_SHORTCUTS = {\n TABLE,\n INPUT_TABLE\n};\nexport default IRIS_GRID_SHORTCUTS;\n//# sourceMappingURL=IrisGridShortcuts.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 value = model.valueForCell(sourceColumn, sourceRow);\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: () => this.irisGrid.toggleGotoRow(\"\".concat(rowIndex + 1), \"\".concat(value), column.name)\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 { 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":["Section","SpectrumSection","isElementOfType","node","type","isValidElement","asyncGeneratorStep","n","t","e","r","o","c","i","u","_asyncToGenerator","_next","_throw","createValidationProps","isValid","errorMessage","extractSpectrumHTMLElement","ref","_ref$UNSAFE_getDOMNod","extractSpectrumLastChildHTMLElement","_ref$UNSAFE_getDOMNod2","maybeHTMLElement","identityExtractHTMLElement","findSpectrumComboBoxScrollArea","findSpectrumPopoverScrollArea","findSpectrumPickerScrollArea","triggerElementType","trigger","popupId","scrollArea","getPositionOfSelectedItem","_x","_getPositionOfSelectedItem","_ref","keyedItems","itemHeight","selectedKey","topOffset","item","_item$item$key","_item$item","useCheckOverflow","isOverflowing","setIsOverflowing","useState","checkOverflow","useCallback","elRef","el","resetIsOverflowing","useOnChange","callback","deps","prevDeps","usePrevious","dep","usePopoverOnScrollRef","findScrollArea","onScroll","getInitialScrollPosition","useRef","isScrollOnOpenEnabledRef","scrollAreaEl","setScrollAreaEl","scrollToInitialPosition","position","useEffect","scrollTimeoutRef","onOpenChange","isOpen","usePromiseFactory","promiseFactory","args","EMPTY_ARRAY","autoLoad","data","setData","error","setError","isLoading","setIsLoading","loadPromise","resolved","err","useOnScrollOffsetChangeCallback","offsetSize","onChange","debounceMs","debounceTimeout","previousOffsetRef","event","offset","useWindowedListData","getKey","defaultGetKey","items","setItems","selectedKeys","setSelectedKeys","matchKey","key","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","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","useUndoRedo","initialState","limit","value","setValue","set","newState","prevValue","undoStack","state","undo","redoStack","newValue","redo","clear","ItemTooltip","children","options","_jsx","Tooltip","Flex","Text","ItemContent","content","tooltipOptions","previousContent","setPreviousContent","NON_BREAKING_SPACE","Children","cloneElement","cl","stylesCommon","tooltip","_jsxs","_Fragment","ITEM_EMPTY_STRING_TEXT_VALUE","getItemKey","getItemTextValue","itemKeyStr","getPositionOfSelectedItemElement","_getPositionOfSelectedItemElement","isSectionElement","isItemElement","Item","isItemElementWithDescription","childrenArray","ensureArray","result","child","_child$props","isNormalizedItemsWithKeysList","isItemOrSection","isNormalizedSection","maybeNormalizedSection","normalizeTooltipOptions","placement","itemSelectionToStringSet","itemKeys","wrapIcon","maybeIconKey","slot","_dhIcons$maybeIconKey","Icon","FontAwesomeIcon","dhIcons","wrapItemChildren","itemsOrSections","itemsOrSectionsArray","_item$key","_textValue","_item$key2","text","textValue","wrapPrimitiveWithText","useOnChangeTrackUncontrolled","defaultSelectedKey","onChangeHandler","isUncontrolled","uncontrolledSelectedKey","setUncontrolledSelectedKey","onChangeMaybeUncontrolled","_excluded","_objectWithoutProperties","_objectWithoutPropertiesLoose","ActionGroup","defaultSelectedKeys","disabledKeys","UNSAFE_className","onSelectionChange","props","wrappedChildren","SpectrumActionGroup","ListActionGroup","_props","ListActionMenu","useRenderNormalizedItem","itemIconSlot","showItemDescriptions","showItemIcons","actions","normalizedItem","_normalizedItem$item","_normalizedItem$item$","_normalizedItem$item2","_normalizedItem$item3","_normalizedItem$item4","itemKey","description","icon","action","_actions$props$onChan","_actions$props","ActionMenu","_actions$props$onOpen","_actions$props2","useStaticItemInitialScrollPosition","disableScrollOnOpen","useStringifiedSelection","normalizedItems","selectedStringKey","defaultSelectedStringKey","disabledStringKeys","onStringSelectionChange","_getItemKey","selectedItem","actualKey","SpectrumActionMenu","ACTION_ICON_HEIGHT","LIST_VIEW_ROW_HEIGHTS","PICKER_ITEM_HEIGHTS","PICKER_TOP_OFFSET","TABLE_ROW_HEIGHT","useSpectrumThemeProvider","useProvider","usePickerItemScale","scale","usePickerScrollOnOpen","popoverOnOpenChange","onOpenChangeInternal","menuTrigger","usePickerProps","onOpenChangeHandler","EMPTY_FUNCTION","onSelectionChangeHandler","selectedKeyMaybeUncontrolled","_excluded2","Picker","React","_usePickerProps","scrollRef","pickerProps","pickerRef","useMergeRef","SpectrumPicker","usePickerNormalizedProps","renderNormalizedItem","forceRerenderKey","itemOrSection","_itemOrSection$item","_itemOrSection$item2","PickerNormalized","_usePickerNormalizedP","_createElement","ComboBox","comboBoxProps","SpectrumComboBox","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","replaceIndex","newChar","fillToLength","checkValue","exampleValue","length","trimTrailingMask","emptyMask","log","Log","SELECTION_DIRECTION","FIXED_WIDTH_SPACE","MaskedInput","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onSelect","onSubmit","pattern","placeholder","selection","onFocus","onBlur","dataTestId","input","useForwardedRef","examples","_input$current","selectionStart","selectionEnd","selectionDirection","getSegment","cursorPosition","testValue","_i","fillValue","filledValue","patternRegex","nextSegment","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","handleSelect","newSelection","handleSelectCapture","_input$current$select","handleArrowKey","handleKeyDown","trimmedValue","_newValue","_newValue2","newChars","_i2","maxReplaceIndex","_newValue3","newSelectionStart","nextSegmentSelection","classNames","getNextNumberSegmentValue","lowerBound","upperBound","modValue","addSeparators","dateTimeMillis","micros","nanos","v","DATE_PATTERN","TIME_PATTERN","FULL_DATE_PATTERN","DATE_VALUE_STRING","DEFAULT_VALUE_STRING","FULL_DATE_FORMAT","fixIncompleteValue","removeSeparators","EXAMPLES","DateTimeInput","defaultValue","setSelection","handleChange","handleBlur","fixedValue","_DraggableItemList","DraggableItemList","PureComponent","vsGripper","_ref2","badgeText","_ref3","_ref4","_item$displayValue","isClone","selectedCount","draggablePrefix","itemIndex","draggableId","num","memoize","renderItem","isFocused","isSelected","isDragDisabled","style","Draggable","provided","ItemList","_ref5","draggingItemClassName","snapshot","rubric","draggableProps","dragHandleProps","innerRef","_this$itemList$curren","_this$itemList$curren2","_this$itemList$curren3","selectedRanges","RangeUtils","droppableId","isDoubleClickSelect","isDropDisabled","hasPlaceholder","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onViewportChange","rowHeight","Droppable","DragUtils","sourceList","destinationList","destinationIndex","insertIndex","draggedItems","list","ranges","sortedRanges","start","end","flatten","adjustedIndex","isSwitchMenuItemType","MenuItem","subtitle","title","UISwitch","vsChevronRight","Menu","_onSelect","Page","onBack","onClose","Button","vsChevronLeft","vsClose","DISPLAY_CONTENTS","SlideTransition","direction","classNamesProp","timeout","ThemeExport","nodeRef","setRef","CSSTransition","Stack","prevChildrenArray","mainView","setMainView","pushingView","setPushingView","poppingView","setPoppingView","topChild","pushComplete","popComplete","Option","SelectValueList","displayValue","disabled","Checkbox","itemElements","element","visibleItemIndex","top","bottom","topRow","bottomRow","elements","isInvalid","useTableListener","eventEmitter","eventName","getItemKeyColumn","table","keyColumnName","getItemLabelColumn","keyColumn","labelColumnName","defaultFormatKey","defaultFormatValue","_columnType","useItemRowDeserializer","descriptionColumnName","iconColumnName","formatValue","labelColumn","descriptionColumn","iconColumn","deserializeRow","row","assertNotNull","useFormatter","settings","dh","useApi","formatter","instance","createFormatterFromSettings","bindAllMethods","getColumnFormat","getColumnFormatMapForType","getColumnTypeFormatter","getFormattedString","useTableUtils","TableUtils","useGetItemIndexByValue","columnName","tableUtils","column","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","scrollDebounce","defaultRowDeserializer","currentViewportFirstRowRef","setPaddedViewport","setViewport","isClosed","applyFiltersAndRefresh","filters","onTableUpdatedRef","createOnTableUpdatedHandler","onTableUpdated","_onTableUpdatedRef$cu","size","useFilterConditionFactories","maybeTable","_len","filterConditionFactories","removeNullAndUndefined","f","useViewportFilter","filter","useSearchableViewportData","additionalFilterConditionFactories","searchColumnNames","timeZone","searchText","setSearchText","searchTextFilter","createSearchTextFilter","onSearchTextChange","useDebouncedCallback","useWidgetClose","widget","_widget$close","useTableClose","_keyColumn$name","tableSource","tableCopy","getItemIndexByValue","isCanceled","onSelectionChangeInternal","Aggregations","isRollup","availablePlacements","onEdit","aggregations","showOnTop","SELECTABLE_OPTIONS","option","aggregation","AggregationOperation","selectedOperation","setSelectedOperation","setSelectedRanges","changeSettings","changedSettings","added","removed","changeAggregations","newAggregations","changeShowOnTop","newShowOnTop","handleDragStart","handleDragEnd","destination","source","newSelectedRanges","handleOperationChange","operation","handleAdd","handleDeleteClicked","keep","keepSoFar","removeSoFar","handleAggregationSelectionChange","handleAggregationSelect","AggregationUtils","handleShowOnTopChange","renderAggregation","isRollupOperation","isRollupProhibited","isEditable","dhWarningFilled","vsEdit","vsTrash","isOptionsShown","isAggregationsShown","Select","dhNewCircleLargeFilled","RadioGroup","Radio","DragDropContext","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","columns","setTop","setBottom","sort","setSort","invert","selected","name","validColumns","filteredColumns","filterValidColumns","selectedIndex","newSelected","newInvert","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","FadeTransition","dhSortAlphaDown","dhSortAlphaUp","SvgBarIcon","SvgHistogramIcon","SvgLineIcon","SvgPieIcon","SvgScatterIcon","FormatColumnWhereIcon","FormatRowWhereIcon","ChartBuilder","nanoid","maxSeriesCount","model","xAxis","seriesItems","LineIcon","BarIcon","ScatterIcon","PieIcon","HistogramIcon","newSeriesItems","isLinked","eventTargetValue","series","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","seriesItem","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","isEditorEmpty","editorContainer","INPUT_TYPE","EMPTY_FN","CustomColumnInput","eventKey","inputIndex","formula","_onChange","onDeleteColumn","onTabInEditor","isDuplicate","isValidName","DbNameValidator","handleFormulaEditorContentChanged","formulaValue","AssertionError","isEditableGridModel","assertIsEditableGridModel","isDeletableGridModel","isExpandableColumnGridModel","trimMap","map","cacheSize","GridMetricCalculator","iter","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","x","getOrThrow","userColumnWidths","userRowHeights","calculatedColumnWidths","calculatedRowHeights","contentColumnWidths","contentRowHeights","fontWidthsLower","fontWidthsUpper","allCharWidths","modelRows","modelColumns","movedRows","movedColumns","initialRowHeights","initialColumnWidths","left","leftOffset","width","height","theme","draggingColumn","rowHeaderWidth","rowFooterWidth","columnWidth","columnHeaderHeight","minScrollHandleSize","scrollBarSize","columnCount","rowCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnHeaderMaxDepth","firstColumn","gridX","gridY","treePaddingX","isExpandableGridModel","treePaddingY","visibleRowHeights","visibleColumnWidths","visibleRows","visibleColumns","allRowHeights","allColumnWidths","visibleColumnXs","visibleRowYs","right","bottomViewport","rightViewport","floatingTopHeight","floatingBottomHeight","floatingLeftWidth","floatingRightWidth","columnWidthValues","rowHeightValues","maxX","w","maxY","y","h","scrollableContentWidth","scrollableContentHeight","scrollableViewportWidth","scrollableViewportHeight","lastLeftWithoutScroll","lastLeftWithScroll","lastTopWithoutScroll","lastTopWithScroll","lastLeft","lastTop","hasHorizontalBar","horizontalBarHeight","hasVerticalBar","verticalBarWidth","barLeft","barTop","barWidth","barHeight","horizontalHandlePercent","verticalHandlePercent","handleWidth","clamp","handleHeight","leftColumnWidth","topRowHeight","leftOffsetPercent","topOffsetPercent","horizontalScrollPercent","verticalScrollPercent","scrollX","scrollY","floatingRows","allRowYs","floatingColumns","allColumnXs","draggingColumns","allRows","allColumns","visibleRowTreeBoxes","topVisible","leftVisible","bottomVisible","rightVisible","itemSizes","getModelIndex","modelIndex","visibleWidth","visibleHeight","availableHeight","availableWidth","rowHeights","columnWidths","_i3","columnWidthMap","rowHeightMap","treeDepthIndent","treeHorizontalPadding","modelRow","depth","x1","x2","y1","y2","floatingWidth","floatingHeight","rowY","columnX","itemXs","maxSize","defaultItemSize","lastIndex","dataSize","userSizes","getDefaultSize","_userSizes$get","calculatedHeight","initialHeight","modelColumn","calculatedWidth","initialWidth","visibleRow","GridUtils","visibleColumn","hasVisibleColumn","autoSizeRows","cachedValue","autoSizeColumns","minColumnWidth","maxColumnWidth","_columnWidth","headerWidth","dataWidth","context","headerHorizontalPadding","headerFont","totalPadding","headerText","font","cellHorizontalPadding","dataBarHorizontalPadding","rowsPerPage","cellPadding","cellRenderType","cellWidth","maxWidth","charWidths","char","nextChar","pair","treePadding","textMetrics","defaultTheme","darkenForDepth","color","maxDepth","lab","convert","modifier","colorWithAlpha","alpha","g","linearSRGBToOklab","l","m","s","l2","m2","s2","OklabToLinearSRGB","L","hexToRgb","hex","_hex$replace$substrin","_hex$replace$substrin2","rgbArray","rgbToHex","lerpColor","color1","color2","factor","L1","a1","b1","L2","a2","b2","GridColorUtils","GridMouseHandler","order","gridPoint","grid","GridSeparatorMouseHandler","metrics","separator","separatorIndex","point","metricCalculator","visibleOffsets","margin","calculatedSizes","modelIndexes","firstIndex","newSizes","resizeIndex","itemOffset","itemSize","_modelIndex","isResizingMultiple","hiddenIndex","calculatedSize","newSize","_this$targetSizes$get","_metricCalculator$thi","defaultSize","_modelIndex2","visibleSizes","_calculatedSizes$get","GridColumnSeparatorMouseHandler","columnIndex","DEFAULT_FONT_WIDTH","CellRenderer","memoizeClear","fontWidthLower","fontWidthUpper","truncationChar","GridRenderer","mouseX","mouseY","treeMarkerColor","treeMarkerHoverColor","treeBox","isExpanded","markerText","textX","textY","isDataBarGridModel","DataBarCellRenderer","widestValue","isFirstColumn","textAlign","textWidth","truncatedText","columnMin","columnMax","axis","dataBarColor","valuePlacement","opacity","markers","hasGradient","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","hasRowDividers","yOffset","gradientWidth","gradientX","gradient","markerX","shouldRenderDashedLine","treeIndent","longestValueWidth","leftPadding","rightPadding","columnLongest","marker","markerValue","rightmostPosition","colors","canvas","ctx","oklabColors","colorStop","colorChangeInterval","leftColorIndex","TextCellRenderer","tokens","_font","_baseline","textHeight","tokenBoxes","lastTokenEnd","currentTextWidth","token","tokenWidth","newTokenBox","textColor","tokenIndex","textStart","actualBoundingBoxDescent","_token$end","nextToken","textEnd","widthOfUnderline","actualBoundingBoxAscent","cachedTokenBoxes","tokenBox","str","len","charWidth","lo","hi","mid","truncatedStr","draggingRow","floatingDividerOuterColor","floatingDividerInnerColor","_y","_y2","_y3","_x2","_x3","drawHover","rowBackgroundColors","rows","minX","shadowBlur","shadowColor","shadowAlpha","colorSets","colorRowMap","topShadowRows","bottomShadowRows","addRowToColorMap","rowAbove","colorSet","depthAbove","colorRows","_row","startColor","endColor","_row2","_startColor","_endColor","_gradient","_row3","_y4","gradientY","mouseColumn","mouseRow","startRow","endRow","columnColor","rowColor","metricsMaxX","j","rowAfter","backgroundColor","hasExpandableRows","renderType","cellRenderer","treeLineColor","depthRowAfter","depthDiff","lineX","_i4","_lineX","draggingColumnSeparator","isDragging","headerHiddenSeparatorSize","headerHiddenSeparatorHoverColor","headerSeparatorColor","headerSeparatorHoverColor","hiddenSeparatorHeight","hiddenY","containsFrozenColumns","hiddenColumns","_","highlightedSeparator","shouldDrawSeparator","nextColumnIndex","_columnX","visibleColumnIndex","nextColumn","nextColumnWidth","isColumnHidden","isNextColumnHidden","bounds","d","startIndex","endIndex","columnGroupName","columnGroupColor","columnGroupLeft","columnGroupRight","prevColumnIndex","_modelColumns$get","_userColumnWidths$get","prevModelIndex","prevColumnWidth","_modelColumns$get2","_userColumnWidths$get2","nextModelIndex","isFullWidth","_model$colorForColumn","columnText","headerBackgroundColor","headerColor","black","white","separatorColor","isDarkBackground","isDarkText","renderText","columnLeft","visibleLeft","columnRight","visibleRight","isBeyondLeft","isBeyondRight","draggingRowSeparator","hiddenSeparatorWidth","hiddenX","hiddenRows","isPreviousRowHidden","_i5","_row4","_rowY","_rowHeight","minY","_rowY2","_rowHeight2","_y5","visibleRowIndex","nextRow","nextRowHeight","isRowHidden","isNextRowHidden","_i6","_row5","_rowHeight3","_y6","_i7","_row6","_rowY3","_rowHeight4","_rowY4","_rowHeight5","_y7","_i8","_row7","_rowHeight6","_rowY5","viewport","editingCell","isCursorVisible","selectedRange","startColumn","endColumn","_x4","_y8","endX","endY","borderWidth","cellX","cellY","cellW","cellH","lineWidth","_modelColumns$get3","draggingColumnVisibleRange","draggingColumnDepth","draggingModelIndex","draggingGroup","originalLeft","originalRight","originalWidth","draggingLeft","reorderOffset","columnHeaderOffset","_i9","draggingRowOffset","isDraggingHorizontalScrollBar","isDraggingVerticalScrollBar","scrollBarBackgroundColor","scrollBarHoverBackgroundColor","scrollBarCasingColor","scrollBarCornerColor","scrollBarColor","scrollBarHoverColor","scrollBarActiveColor","scrollBarHoverSize","scrollBarCasingWidth","scrollBarSelectionTick","scrollBarSelectionTickColor","scrollBarActiveSelectionTickColor","autoSelectRow","autoSelectColumn","isInbounds","isVerticalBarHover","isHorizontalBarHover","hScrollBarSize","vScrollBarSize","cursorColumn","filteredRanges","mergedRanges","getTickX","tickX","tickWidth","trackHeight","_tickX","_tickWidth","_trackHeight","_x5","_y9","_selectedRanges","cursorRow","getTickY","_filteredRanges","_sortedRanges","_mergedRanges","_i0","_range","tickY","trackWidth","tickHeight","_tickY","_trackWidth","_tickHeight","backgroundColors","ColorUtils","DEFAULT_INTERVAL_MS","GridSelectionMouseHandler","originalSelection","rowIndex","clickedInOriginalSelection","GridRange","gridMouseX","gridMouseY","isModifierKey","isShiftKey","dragBounds","deltaX","deltaY","isInRange","selectionEndRow","selectionEndColumn","GridRowTreeMouseHandler","isTokenBoxCellRenderer","GridTokenMouseHandler","renderer","renderState","tokensInCell","isLinkToken","translatedTokenBox","_left","_right","_top","_bottom","isUserHoveringLink","_this$currentLinkBox","CustomColumnBuilder","inputs","customColumns","IrisGridModel","customColumnInputs","customColumn","newInputs","customColumnIndex","customColumnInput","newCustomInput","isCustomColumnApplying","customEvent","vsWarning","sourceIndex","sourceInput","focusEditorIndex","shiftKey","_this$container","_this$container2","_this$container3","nextFocusIndex","onSave","originalCustomColumns","hasRequestFailed","nameCount","_nameCount$get","_nameCount$get2","isSuccessShowing","saveText","areNamesValid","filteredNames","areNamesUnique","vsPass","LoadingSpinner","onCancel","container","OptionType","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","currentGroupings","newGroupings","groupings","grouping","debounce","searchFilter","focusIndex","groupedColumns","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","TableCsvExporter","downloadRowOption","customizedDownloadRowOption","customizedDownloadRows","snapshotRanges","rangeA","rangeB","includeHiddenColumns","IrisGridUtils","modelRanges","subtractRanges","_this","isDownloading","onDownloadStart","onDownload","fileName","includeColumnHeaders","useUnformattedValues","frozenTable","tableSubscription","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","id","NumberField","TimeUtils","ClassNames","UNFORMATTED_DATE_PATTERN","isUpdateEventData","assertIsUpdateEventData","TableSaver","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","rowIdx","cellData","_snapshot$getData","hasCustomColumnFormat","formatOverride","cellFormat","currentGridRange","_loop","PromiseUtils","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","colorInputBlurHandler","_colorInputRef$curren","_colorInputRef$curren2","handleConfirm","handleCancel","handleEditKeyDown","vsCheck","vsChromeClose","dhSquareFilled","vsPaintcan","emptyOnClick","VisibilityOrderingItem","forwardRef","clone","childCount","onVisibilityChange","visibilityClickAndDrag","onClick","onGroupDelete","onGroupColorChange","onGroupNameChange","validateGroupName","handleProps","isVisible","buttonRef","handleVisibilityChange","_buttonRef$current","handleClick","dhEye","dhEyeSlash","MemoizedVisibilityOrderingItem","memo","isFlattenedTreeItem","getDragDepth","indentationWidth","getTreeItem","nameToIndexes","columnHeaderGroupMap","hiddenColumnSet","selectedItems","showHiddenColumns","_nameToIndexes$get","visibleIndex","childName","aVal","bVal","getTreeItems","columnHeaderGroups","selectedItemsSet","groupMap","mapEntries","rangeLength","entries","visibleToModelMap","getProjection","activeId","overId","dragOffset","overItemIndex","activeItemIndex","activeItem","arrayMove","previousItem","nextItem","dragDepth","projectedDepth","getMaxDepth","minDepth","getMinDepth","getParentId","_newItems$slice$rever","newParent","_previousItem$depth","_nextItem$depth","parentId","acc","flattenTree","TreeItem","withDepthMarkers","disableInteraction","ghost","dragRef","wrapperRef","depthMarkers","renderItemProps","wrapperStyle","animateLayoutChanges","isSorting","wasDragging","SortableTreeItem","measureElement","attributes","listeners","setDraggableNodeRef","setDroppableNodeRef","transform","transition","useSortable","transformString","CSS","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","moveItemsFromDrop","from","to","selectedParentItems","firstMovableIndex","lastMovableIndex","newMoves","newGroups","firstVisibleIndex","fromItemIndex","toItemIndex","toIndex","moveToGroup","originalDropIndex","dropIndex","toName","columnGroups","ColumnHeaderGroup","newGroupMap","fromGroup","toGroup","movedGroup","_parent","deleteNames","parentName","parent","_parent$parent","_parent2","nextParentName","nextParent","SearchItem","onKeyDown","MemoizedSearchItem","SearchWithModal","_searchRef$current3","_searchRef$current4","onModalOpenChange","onDragStart","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","currentCoordinates","active","over","collisionRect","droppableRects","droppableContainers","projection","containers","rect","collisions","closestCorners","closestId","getFirstCollision","activeRect","newRect","newDroppable","newIndex","closestProjection","_depth","isBelow","newCoordinates","PointerSensorWithInteraction","PointerSensor","isInteractiveElement","INTERACTIVE_ELEMENTS","MEASURING","MeasuringStrategy","CONSTRAINT","DRAG_OVERLAY_STYLE","dropAnimationConfig","defaultDropAnimation","adjustToCursor","_adjustToCursor$offse","fixCursorSnapOffset","closestCenter","updated","SortableTreeDndContext","onDragEnd","setActiveId","setOffsetLeft","sensorContext","keyboardOptions","sensors","useSensors","useSensor","KeyboardSensor","sortedIds","newActiveId","handleDragMove","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","onColumnHeaderGroupChanged","newGroup","selectedColumns","treeItems","firstMovableTreeIndex","lastMovableTreeIndex","movableItems","_visibleIndex","_column","_visibleIndex2","_column2","treeItem","_this$virtualizerRef$","itemName","_this$list","itemElement","_this$list2","itemToFocus","filteredGroups","onReset","onMovedColumnsChanged","isMovingUpward","updatedGroups","_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","moveableTree","initialAndFrozenMovedColumns","_model$getColumnIndex","frozenColumn","newFrozenIndex","_event$currentTarget","lastSelectedColumn","isModifierKeyDown","isShiftKeyDown","columnsToBeAdded","lastSelectedIndex","columnsToAdd","onColumnVisibilityChanged","modelIndexesToShow","addToExisting","newSelectedColumns","flattenedItems","_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","isSearchModalOpen","hasSelection","hiddenColumnsSet","columnsToToggle","areSomeVisible","allToggleText","selectedToggleText","visibilityOrderingList","MenuTrigger","vsKebabVertical","SpectrumMenu","k","vsBlank","Keyboard","vsRefresh","vsSymbolStructure","vsAdd","vsChevronUp","vsChevronDown","dhArrowToTop","dhArrowToBottom","VisibilityOrderingBuilder","onFrozenColumnsChanged","__testRef","setUndoState","isUndoRedoAction","isBatched","col","handleColumnHeaderGroupChanged","handleUndo","handleRedo","DownloadServiceWorkerUtils","url","reg","swReg","_DownloadServiceWorke","IrisGridCellOverflowMouseHandler","irisGrid","rendererState","_this$getButtonPositi","overflowButtonTooltipProps","newProps","deepEqual","IrisGridColumnSelectMouseHandler","isSelectingColumn","tableColumn","columnSelectionValidator","columnAllowedCursor","columnNotAllowedCursor","IrisGridColumnTooltipMouseHandler","relatedTarget","popper","columnHeaderDepth","shownColumnTooltip","newTooltip","flushSync","CustomFormatAction","forwardedProps","closeMenu","parentContextMenu","DOMUtils","formatString","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","TABLE","ShortcutRegistry","MODIFIER","KEY","INPUT_TABLE","IRIS_GRID_SHORTCUTS","DEBOUNCE_UPDATE_FORMAT","CONTEXT_MENU_DATE_FORMAT","MAX_MULTISELECT_ROWS","IrisGridContextMenuHandler","columnFilter","newColumnFilter","operator","filterText","newFilterText","command","cellValue","reverse","quickFilters","advancedFilters","filterIconColor","filterBarActiveColor","contextMenuSortIconColor","contextMenuReverseIconColor","modelSort","columnSort","isColumnFreezable","isColumnFrozen","isColumnSortable","vsRemove","SHORTCUTS","dhFilterFilled","vsFilter","ContextActionUtils","_model$textForColumnH","copyToClipboard","_this$numberFormatAct","canCopy","sourceCell","sourceColumn","sourceRow","expandingColumn","cellText","gotoRow","canPasteInOriginalRange","isCellInOriginalRange","canPasteInCell","_action","readFromClipboard","ClipboardUnavailableError","ClipboardPermissionsDeniedError","isPartitionedGridModel","getSelectedRanges","lastRow","lastRowSize","assertNotNaN","_lastRow$endRow","assertNotEmpty","snapshotValues","filterMenu","ContextActions","dateFilterFormatter","previewFilterFormatter","filterValue","columnType","isFilterBarShown","stateSelectedRanges","valueText","onContextMenu","clearFilterRange","_this2","formatOptions","_this3","columnAlignmentMap","currentAlignment","quickFilter","filterValues","valueDescription","newQuickFilter","toFilterText","_TableUtils$escapeQui","curr","valueDesc","maxValue","minValue","maxFilterValue","minFilterValue","maxValueText","minValueText","maxDateText","minDateText","maxPreviewText","minPreviewText","valueFilter","sortActions","additionalSortActions","isAbs","IrisGridCopyCellMouseHandler","_grid","IrisGridDataSelectMouseHandler","IrisGridFilterMouseHandler","hoverAdvancedFilter","newHoverAdvancedFilter","IrisGridRowTreeMouseHandler","expandCellTooltipProps","isRowExpanded","IrisGridSortMouseHandler","PendingMouseHandler","wheelEvent","pendingRowCount","IrisGridTokenMouseHandler","hoverTooltipProps","href","_hoverTooltipProps","_newProps","IrisGridPartitionedTableMouseHandler","partitionConfig","rebalanceTree","adjustments","processNode","isLeaf","addToSubtree","amount","_adjustments$get","prevAdjustment","additionPerChild","childrenAdjustedValues","adjustedChildrenSum","sum","_adjustments$get2","adjustment","IrisGridMetricCalculator","memoizeOne","current","root","getLeafValue","getGroupValue","_getLeafValue","headerGroup","_paddingMap$get","cachedMap","_cachedMap$get","groupTree","paddingMap","calculatedColumnWidthsByName","modelColumnNames","sorts","baseHeaderWidth","headerPadding","padding","isColumnExpandable","expandCollapseIconWidth","filterBarHeight","newLeft","filterBoxCoordinates","iconMap","vsTriangleUp","vsTriangleDown","vsTriangleRight","vsLinkExternal","makeIcon","faIcon","path","scaledIcon","scaleMatrix","getIcon","IrisGridCellRendererUtils","iconSize","markerIcon","iconX","iconY","IrisGridTextCellRenderer","_model$columns$modelC","originalFont","NULL_POSITION","gridWidth","buttonLeft","buttonTop","_model$textForCell","IrisGridDataBarCellRenderer","ICON_NAMES","EXPAND_ICON_SIZE","IrisGridRenderer","advancedFilter","isAdvancedFilterValid","isQuickFilterValid","buttonWidth","buttonHeight","overflowButtonColor","overflowButtonHoverColor","lastVisibleGroupColumnIndex","firstPendingRow","hoverSelectColumn","loadingScrimProgress","scrimBlurSize","scrimColor","interior","boundsProp","isMenuShown","themeIconSize","textRight","defaultX","filterBarExpandedActiveCellBackgroundColor","filterBarErrorColor","filterBarHorizontalPadding","maxLength","isFilterValid","rectLeft","rectTop","rectWidth","rectHeight","filterBarCollapsedHeight","filterBarActiveBackgroundColor","floatingGridRowColor","floatingRowBackgroundColors","rowHoverBackgroundColor","createDefaultIrisGridTheme","_IrisGridTheme$rowBa","IrisGridTheme","resolveCssVariablesInRecord","IrisGridThemeRaw","getExpressionRanges","GridTheme","IrisGridThemeContext","createContext","IrisGridThemeProvider","density","activeThemes","useTheme","gridTheme","contextValue"],"mappings":"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"}
|