@deephaven/code-studio 0.86.1-beta.0 → 0.86.2-beta.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/{AppRoot-d6529975.js → AppRoot-56511b92.js} +3 -3
- package/build/assets/{AppRoot-d6529975.js.map → AppRoot-56511b92.js.map} +1 -1
- package/build/assets/{Chart-91302dcf.js → Chart-6997e8bb.js} +2 -2
- package/build/assets/{Chart-91302dcf.js.map → Chart-6997e8bb.js.map} +1 -1
- package/build/assets/{ControlType-a12820cc.js → ControlType-69e1fac5.js} +3 -3
- package/build/assets/{ControlType-a12820cc.js.map → ControlType-69e1fac5.js.map} +1 -1
- package/build/assets/{FontBootstrap-f6c0d03d.js → FontBootstrap-26cb4aa5.js} +2 -2
- package/build/assets/{FontBootstrap-f6c0d03d.js.map → FontBootstrap-26cb4aa5.js.map} +1 -1
- package/build/assets/{FormatterUtils-d09cd5a2.js → FormatterUtils-59e8cebb.js} +2 -2
- package/build/assets/{FormatterUtils-d09cd5a2.js.map → FormatterUtils-59e8cebb.js.map} +1 -1
- package/build/assets/{Grid-fef80846.js → Grid-7d3b8fcc.js} +2 -2
- package/build/assets/{Grid-fef80846.js.map → Grid-7d3b8fcc.js.map} +1 -1
- package/build/assets/{IrisGrid-4bf5ddc8.js → IrisGrid-f1cafb4e.js} +2 -2
- package/build/assets/{IrisGrid-4bf5ddc8.js.map → IrisGrid-f1cafb4e.js.map} +1 -1
- package/build/assets/{IrisGridModel-538a8746.js → IrisGridModel-ef7fbf31.js} +2 -2
- package/build/assets/{IrisGridModel-538a8746.js.map → IrisGridModel-ef7fbf31.js.map} +1 -1
- package/build/assets/{IrisGridShortcuts-0a8dd775.js → IrisGridShortcuts-e4e2e06e.js} +2 -2
- package/build/assets/{IrisGridShortcuts-0a8dd775.js.map → IrisGridShortcuts-e4e2e06e.js.map} +1 -1
- package/build/assets/{IrisGridThemeProvider-6bbaf5e5.js → IrisGridThemeProvider-0ed2b1a4.js} +2 -2
- package/build/assets/{IrisGridThemeProvider-6bbaf5e5.js.map → IrisGridThemeProvider-0ed2b1a4.js.map} +1 -1
- package/build/assets/{LocalWorkspaceStorage-c474272c.js → LocalWorkspaceStorage-00363c27.js} +2 -2
- package/build/assets/{LocalWorkspaceStorage-c474272c.js.map → LocalWorkspaceStorage-00363c27.js.map} +1 -1
- package/build/assets/{MarkdownEditor-bc7f8b86.js → MarkdownEditor-601f0820.js} +2 -2
- package/build/assets/{MarkdownEditor-bc7f8b86.js.map → MarkdownEditor-601f0820.js.map} +1 -1
- package/build/assets/{MarkdownNotebook-08e7e6b2.js → MarkdownNotebook-fa467ec2.js} +2 -2
- package/build/assets/{MarkdownNotebook-08e7e6b2.js.map → MarkdownNotebook-fa467ec2.js.map} +1 -1
- package/build/assets/{MissingPartitionError-ccd1b92c.js → MissingPartitionError-f67c33ed.js} +2 -2
- package/build/assets/{MissingPartitionError-ccd1b92c.js.map → MissingPartitionError-f67c33ed.js.map} +1 -1
- package/build/assets/{StyleGuideRoot-5adc572a.js → StyleGuideRoot-3a96cd30.js} +2 -2
- package/build/assets/{StyleGuideRoot-5adc572a.js.map → StyleGuideRoot-3a96cd30.js.map} +1 -1
- package/build/assets/{TokenBoxCellRenderer-fc88dfbc.js → TokenBoxCellRenderer-21fe6e70.js} +2 -2
- package/build/assets/{TokenBoxCellRenderer-fc88dfbc.js.map → TokenBoxCellRenderer-21fe6e70.js.map} +1 -1
- package/build/assets/{index-e1b9aa32.js → index-97d9bf03.js} +2 -2
- package/build/assets/{index-e1b9aa32.js.map → index-97d9bf03.js.map} +1 -1
- package/build/assets/{index-ec91dba2.js → index-bdc5e9b2.js} +2 -2
- package/build/assets/{index-ec91dba2.js.map → index-bdc5e9b2.js.map} +1 -1
- package/build/assets/{index-cd00d63a.js → index-f0d0452f.js} +6 -6
- package/build/assets/index-f0d0452f.js.map +1 -0
- package/build/index.html +2 -2
- package/package.json +30 -30
- package/build/assets/index-cd00d63a.js.map +0 -1
package/build/assets/{TokenBoxCellRenderer-fc88dfbc.js.map → TokenBoxCellRenderer-21fe6e70.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenBoxCellRenderer-fc88dfbc.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/useDebouncedCallback.js","../../../react-hooks/dist/usePopoverOnScrollRef.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/spectrum/picker/useMultiRef.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/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/navigation/MenuItem.js","../../../components/dist/navigation/Menu.js","../../../components/dist/navigation/Page.js","../../../components/dist/navigation/Stack.js","../../../components/dist/Option.js","../../../components/dist/SelectValueList.js","../../../grid/dist/errors/AssertionError.js","../../../grid/dist/EditableGridModel.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/GridRowTreeMouseHandler.js","../../../grid/dist/TokenBoxCellRenderer.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 * 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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 maybeHTMLElement = ref === null || ref === void 0 ? void 0 : ref.UNSAFE_getDOMNode().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 { useEffect, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n/**\n * Wraps a given callback in a cancelable, debounced function. The debounced\n * callback is automatically cancelled if the callback reference changes or the\n * component unmounts.\n * @param callback callback function to debounce\n * @param debounceMs debounce milliseconds\n * @returns a cancelable, debounced function\n */\nexport function useDebouncedCallback(callback, debounceMs) {\n var debouncedCallback = useMemo(() => debounce(callback, debounceMs), [callback, debounceMs]);\n useEffect(() => () => debouncedCallback.cancel(), [debouncedCallback]);\n return debouncedCallback;\n}\nexport default useDebouncedCallback;\n//# sourceMappingURL=useDebouncedCallback.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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 ? 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 ? 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","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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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 * 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 * 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 * 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 * 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 ? 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]) && '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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 _maybeIconKey, _dhIcons$maybeIconKey;\n // eslint-disable-next-line no-param-reassign\n maybeIconKey = (_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 var _content;\n // eslint-disable-next-line no-param-reassign\n content = (_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 ? 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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","import { useCallback } from 'react';\n\n/**\n * Takes in multiple refs and then returns one ref that can be assigned to the component.\n * In turn all the refs passed in will be assigned when the ref returned is assigned.\n * @param refs The refs to assign\n */\nfunction useMultiRef() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n return useCallback(newRef => {\n refs.forEach(ref => {\n if (typeof ref === 'function') {\n ref(newRef);\n } else if (ref != null) {\n // eslint-disable-next-line no-param-reassign\n ref.current = newRef;\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\nexport default useMultiRef;\n//# sourceMappingURL=useMultiRef.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 => {\n // Attach scroll event handling\n popoverOnOpenChange(isOpen);\n onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(isOpen);\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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 = [\"defaultSelectedKey\", \"disabledKeys\", \"getInitialScrollPosition\", \"normalizedItems\", \"onChange\", \"onOpenChange\", \"onScroll\", \"onSelectionChange\", \"selectedKey\", \"showItemIcons\", \"tooltip\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport { ComboBox as SpectrumComboBox } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { usePickerProps } from \"../picker/index.js\";\nimport useMultiRef from \"../picker/useMultiRef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\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 = useMultiRef(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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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: _selectionStart,\n selectionEnd: _selectionEnd,\n selectionDirection\n } = selection;\n (_input$current = input.current) === null || _input$current === void 0 ? 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 ? 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});\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange() {\n // no-op\n },\n onSelect() {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus() {\n // no-op\n },\n onBlur() {\n // no-op\n },\n 'data-testid': undefined\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';\nDateTimeInput.defaultProps = {\n className: '',\n onChange: () => undefined,\n defaultValue: '',\n onFocus: () => undefined,\n onBlur: () => undefined,\n 'data-testid': undefined\n};\nexport default DateTimeInput;\n//# sourceMappingURL=DateTimeInput.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable } from 'react-beautiful-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 } from \"react/jsx-runtime\";\nimport { 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 react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-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 ? 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 ? 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 ? 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 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__*/_jsx(\"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 })\n }))\n });\n }\n}\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 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 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 } from \"react/jsx-runtime\";\nimport { 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 } from \"react/jsx-runtime\";\nimport { 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","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 } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 : 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: _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 ? 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: _value2\n } = item;\n onSelect(itemIndex, _value2);\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 ? 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","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 * 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 /** The size of the caches this calculator stores */\n\n /** The maximum column width as a percentage of the full grid */\n\n /** The initial row heights if any overrides from the default calculated values */\n // Readonly so it should be safe to make public\n /** The initial column widths if any overrides from the default calculated values */\n // Readonly so it should be safe to make public\n /** User set column widths */\n /** User set row heights */\n /** Calculated column widths based on cell contents */\n /** Calculated row heights based on cell contents */\n /** Cache of fonts to estimated width of one char */\n /** Map from visible index to model index for rows (e.g. reversing movedRows operations) */\n /** Map from visible index to model index for columns (e.g. reversing movedColumns operations) */\n /** List of moved row operations. Need to track the previous value so we know if modelRows needs to be cleared. */\n /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */\n constructor() {\n var {\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n calculatedRowHeights = new Map(),\n fontWidths = 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 _defineProperty(this, \"initialRowHeights\", void 0);\n _defineProperty(this, \"initialColumnWidths\", void 0);\n _defineProperty(this, \"userColumnWidths\", void 0);\n _defineProperty(this, \"userRowHeights\", void 0);\n _defineProperty(this, \"calculatedColumnWidths\", void 0);\n _defineProperty(this, \"calculatedRowHeights\", void 0);\n _defineProperty(this, \"fontWidths\", void 0);\n _defineProperty(this, \"modelRows\", void 0);\n _defineProperty(this, \"modelColumns\", void 0);\n _defineProperty(this, \"movedRows\", void 0);\n _defineProperty(this, \"movedColumns\", void 0);\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.fontWidths = fontWidths;\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 fontWidths,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths\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 visible rows/columns\n visibleRowHeights,\n visibleColumnWidths,\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 visible rows/columns\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 fontWidths,\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 } = state;\n var gridY = this.getGridY(state);\n var floatingBottomHeight = this.getFloatingBottomHeight(state);\n var availableHeight = height - gridY - floatingBottomHeight;\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 } = state;\n var gridX = this.getGridX(state);\n var floatingRightWidth = this.getFloatingRightWidth(state);\n var availableWidth = width - gridX - floatingRightWidth;\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 } = model;\n while (y < height + topOffset && row < rowCount) {\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 } = model;\n while (x < width + leftOffset && column < columnCount) {\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 var cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null) {\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);\n var dataWidth = this.calculateColumnDataWidth(modelColumn, state);\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 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) {\n var {\n model,\n theme\n } = state;\n var {\n headerFont,\n headerHorizontalPadding\n } = theme;\n var headerText = model.textForColumnHeader(modelColumn, 0);\n if (headerText !== undefined && headerText !== '') {\n var headerFontWidth = this.getWidthForFont(headerFont, state);\n return headerText.length * headerFontWidth + headerHorizontalPadding * 2;\n }\n return headerHorizontalPadding * 2;\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) {\n var {\n top,\n height,\n width,\n model,\n theme\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 var columnWidth = 0;\n var fontWidth = this.getWidthForFont(font, state);\n var rowsPerPage = height / rowHeight;\n var bottom = Math.ceil(top + rowsPerPage);\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 var cellPadding = cellHorizontalPadding * 2;\n cellWidth = text.length * fontWidth + 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), cellHorizontalPadding * 2);\n return columnWidth;\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 * Get the width of the provided font. Exploits the fact that we're\n * using tabular figures so every character is same width\n * @param font The font to get the width for\n * @param state The grid metric state\n * @returns Width of the char `8` for the specified font\n */\n getWidthForFont(font, state) {\n if (this.fontWidths.has(font)) {\n return getOrThrow(this.fontWidths, font);\n }\n var {\n context\n } = state;\n context.font = font;\n var textMetrics = context.measureText('8');\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.fontWidths.set(font, width);\n this.fontWidths.set(context.font, width);\n return 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 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_defineProperty(GridMetricCalculator, \"CACHE_SIZE\", 10000);\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 _defineProperty(this, \"cursor\", null);\n this.order = order;\n }\n\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 _defineProperty(this, \"draggingIndex\", void 0);\n _defineProperty(this, \"resizingItems\", []);\n _defineProperty(this, \"hiddenItems\", []);\n _defineProperty(this, \"targetSizes\", new Map());\n _defineProperty(this, \"dragOffset\", 0);\n } // The index where dragging the column separator started\n // The columns in the order they're being resized\n // Columns that were hidden under the separator when starting a drag\n // The target width of the columns being resized\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 var calculatedSize = metrics[this.calculatedSizesProperty].get(_modelIndex2);\n var defaultSize = metricCalculator[this.initialSizesProperty].get(_modelIndex2);\n if (calculatedSize === defaultSize || calculatedSize == null) {\n this.resetSize(metricCalculator, _modelIndex2);\n } else {\n this.setSize(metricCalculator, _modelIndex2, calculatedSize);\n }\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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\n } = gridPoint;\n var {\n modelColumns\n } = metrics;\n var separatorIndex = GridUtils.getColumnSeparatorIndex(x, y, metrics, theme);\n\n // TODO #695: Allow resizing of column groups as well. Right now just allow resizing from base columns\n if (separatorIndex == null || columnHeaderDepth == null || columnHeaderDepth > 0) {\n return null;\n }\n var columnIndex = modelColumns.get(separatorIndex);\n if (columnIndex != null) {\n return {\n index: separatorIndex,\n depth: 0\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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, fontWidth, truncationChar) => GridRenderer.truncateToWidth(context, text, width, fontWidth, 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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\";\nimport { DEFAULT_FONT_WIDTH } from \"./GridRendererTypes.js\";\nclass DataBarCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"heightOfDigits\", void 0);\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, context.measureText(text).width);\n }\n return widestValue;\n }, {\n max: 1000\n }));\n }\n drawCellContent(context, state, column, row) {\n var _fontWidths$get;\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 fontWidths\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 width: textWidth\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var fontWidth = (_fontWidths$get = fontWidths === null || fontWidths === void 0 ? void 0 : fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, 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);\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 if (this.heightOfDigits === undefined) {\n var {\n actualBoundingBoxAscent,\n actualBoundingBoxDescent\n } = context.measureText('1234567890');\n this.heightOfDigits = actualBoundingBoxAscent + actualBoundingBoxDescent;\n }\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 = dataBarColor;\n }\n context.textBaseline = 'top';\n context.font = theme.font;\n if (valuePlacement !== 'hide') {\n context.fillText(truncatedText, textX, rowY + (rowHeight - this.heightOfDigits) / 2);\n }\n\n // Draw bar\n if (hasGradient) {\n // Draw gradient bar\n\n var dataBarColorsOklab = dataBarColor.map(color => GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color)));\n context.save();\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);\n context.clip();\n if (value < 0) {\n if (direction === 'LTR') {\n var totalGradientWidth = Math.round(Math.abs(columnMin) / totalValueRange * maxWidth);\n var partGradientWidth = totalGradientWidth / (dataBarColor.length - 1);\n var gradientX = Math.round(leftmostPosition);\n for (var i = 0; i < dataBarColor.length - 1; i += 1) {\n var leftColor = dataBarColorsOklab[i];\n var rightColor = dataBarColorsOklab[i + 1];\n this.drawGradient(context, leftColor, rightColor, gradientX, rowY + 1, partGradientWidth, rowHeight);\n gradientX += partGradientWidth;\n }\n } else if (direction === 'RTL') {\n var _totalGradientWidth = Math.round(maxWidth - Math.abs(columnMax) / totalValueRange * maxWidth);\n var _partGradientWidth = _totalGradientWidth / (dataBarColor.length - 1);\n var _gradientX = Math.round(zeroPosition);\n for (var _i = dataBarColor.length - 1; _i > 0; _i -= 1) {\n var _leftColor = dataBarColorsOklab[_i];\n var _rightColor = dataBarColorsOklab[_i - 1];\n this.drawGradient(context, _leftColor, _rightColor, _gradientX, rowY + 1, _partGradientWidth, rowHeight);\n _gradientX += _partGradientWidth;\n }\n }\n } else if (direction === 'LTR') {\n // Value is greater than or equal to 0\n var _totalGradientWidth2 = Math.round(maxWidth - Math.abs(columnMin) / totalValueRange * maxWidth) - 1;\n var _partGradientWidth2 = _totalGradientWidth2 / (dataBarColor.length - 1);\n var _gradientX2 = Math.round(zeroPosition);\n for (var _i2 = 0; _i2 < dataBarColor.length - 1; _i2 += 1) {\n var _leftColor2 = dataBarColorsOklab[_i2];\n var _rightColor2 = dataBarColorsOklab[_i2 + 1];\n this.drawGradient(context, _leftColor2, _rightColor2, _gradientX2, rowY + 1, _partGradientWidth2, rowHeight - 2);\n _gradientX2 += _partGradientWidth2;\n }\n } else if (direction === 'RTL') {\n // Value is greater than or equal to 0\n var _totalGradientWidth3 = Math.round(Math.abs(columnMax) / totalValueRange * maxWidth);\n var _partGradientWidth3 = _totalGradientWidth3 / (dataBarColor.length - 1);\n var _gradientX3 = Math.round(leftmostPosition);\n for (var _i3 = dataBarColor.length - 1; _i3 > 0; _i3 -= 1) {\n var _leftColor3 = dataBarColorsOklab[_i3];\n var _rightColor3 = dataBarColorsOklab[_i3 - 1];\n this.drawGradient(context, _leftColor3, _rightColor3, _gradientX3, rowY + 1, _partGradientWidth3, rowHeight - 2);\n _gradientX3 += _partGradientWidth3;\n }\n }\n\n // restore clip\n context.restore();\n } else {\n // Draw normal bar\n context.save();\n context.globalAlpha = opacity;\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);\n context.fill();\n context.restore();\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 - 2);\n });\n }\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: y + 1.5,\n zeroPosition,\n leftmostPosition,\n rightmostPosition,\n totalValueRange,\n dataBarWidth,\n markerXs\n };\n }\n drawGradient(context, leftColor, rightColor, x, y, width, height) {\n var currentColor = leftColor;\n // Increase by 0.5 because half-pixel will render weird on different zooms\n for (var currentX = x; currentX <= x + width; currentX += 0.5) {\n this.drawGradientPart(context, currentX, y, 1, height, GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(currentColor)));\n currentColor = GridColorUtils.lerpColor(leftColor, rightColor, (currentX - x) / width);\n }\n }\n drawGradientPart(context, x, y, width, height, color) {\n context.fillStyle = color;\n context.fillRect(x, y, width, height);\n }\n\n /**\n * Returns the width of the widest value in pixels\n */\n}\n\nexport default DataBarCellRenderer;\n//# sourceMappingURL=DataBarCellRenderer.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 { DEFAULT_FONT_WIDTH } from \"./GridRendererTypes.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass TextCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\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 fontWidths,\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 _fontWidths$get;\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 fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, 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('…') ? context.measureText(value.substring(0, value.length - 1)).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 _fontWidths$get2;\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 fontWidths\n } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n var fontWidth = (_fontWidths$get2 = fontWidths === null || fontWidths === void 0 ? void 0 : fontWidths.get(context.font)) !== null && _fontWidths$get2 !== void 0 ? _fontWidths$get2 : DEFAULT_FONT_WIDTH;\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, 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\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n}\n\nexport default TextCellRenderer;\n//# sourceMappingURL=TextCellRenderer.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } // Default radius in pixels for corners for some elements (like the active cell)\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 fontWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_FONT_WIDTH;\n var truncationChar = arguments.length > 4 ? arguments[4] : 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 estimated width of each character,\n // and take half that as the low (minus 5 just to be extra safe), and double that as the high.\n var lo = Math.min(Math.max(0, Math.floor(width / fontWidth / 2) - 5), str.length);\n var hi = Math.min(Math.ceil(width / fontWidth * 2), 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 * A memoized version of the GridColorUtils.colorWithAlpha function.\n */\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\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 } = 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, _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 = (_userColumnWidths$get = userColumnWidths.get(prevModelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : allColumnWidths.get(prevColumnIndex)) !== 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, _ref4, _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 = (_ref4 = (_userColumnWidths$get2 = userColumnWidths.get(nextModelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : allColumnWidths.get(nextColumnIndex)) !== null && _ref4 !== void 0 ? _ref4 : 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 var _fontWidths$get;\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 fontWidths,\n width\n } = metrics;\n var fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;\n var maxWidth = columnWidth - headerHorizontalPadding * 2;\n var maxLength = maxWidth / fontWidth;\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 renderText = columnText;\n if (maxLength <= 0) {\n renderText = '';\n } else if (renderText.length > maxLength) {\n renderText = \"\".concat(renderText.substring(0, maxLength - 1), \"\\u2026\");\n }\n var textWidth = renderText.length * fontWidth;\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 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 _i10 = 0; _i10 < _mergedRanges.length; _i10 += 1) {\n var _range = _mergedRanges[_i10];\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_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_defineProperty(GridRenderer, \"getCachedColorWithAlpha\", memoizeClear(GridColorUtils.colorWithAlpha, {\n max: 1000\n}));\n_defineProperty(GridRenderer, \"getCachedColorIsDark\", memoizeClear(ColorUtils.isDark, {\n max: 1000\n}));\nexport default GridRenderer;\n//# sourceMappingURL=GridRenderer.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"],"names":["Section","SpectrumSection","isElementOfType","node","type","isValidElement","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_asyncToGenerator","fn","self","args","err","createValidationProps","isValid","errorMessage","extractSpectrumHTMLElement","ref","_ref$UNSAFE_getDOMNod","extractSpectrumLastChildHTMLElement","maybeHTMLElement","identityExtractHTMLElement","findSpectrumComboBoxScrollArea","findSpectrumPopoverScrollArea","findSpectrumPickerScrollArea","triggerElementType","trigger","popupId","scrollArea","getPositionOfSelectedItem","_x","_getPositionOfSelectedItem","_ref","keyedItems","itemHeight","selectedKey","topOffset","i","item","_item$item$key","_item$item","useCheckOverflow","isOverflowing","setIsOverflowing","useState","checkOverflow","useCallback","elRef","el","resetIsOverflowing","useDebouncedCallback","callback","debounceMs","debouncedCallback","useMemo","debounce","useEffect","usePopoverOnScrollRef","findScrollArea","onScroll","getInitialScrollPosition","useRef","isScrollOnOpenEnabledRef","scrollAreaEl","setScrollAreaEl","scrollToInitialPosition","position","scrollTimeoutRef","onOpenChange","isOpen","ItemTooltip","children","options","_jsx","Tooltip","Flex","Text","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","source","_defineProperty","obj","_toPropertyKey","_toPrimitive","input","hint","prim","res","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","items","isSectionElement","isItemElement","Item","isItemElementWithDescription","childrenArray","ensureArray","result","child","_child$props","isNormalizedItemsWithKeysList","isItemOrSection","isNormalizedSection","maybeNormalizedSection","normalizeTooltipOptions","placement","itemSelectionToStringSet","itemKeys","wrapIcon","maybeIconKey","slot","_maybeIconKey","_dhIcons$maybeIconKey","Icon","FontAwesomeIcon","dhIcons","wrapItemChildren","itemsOrSections","itemsOrSectionsArray","_item$key","_textValue","_item$key2","text","textValue","wrapPrimitiveWithText","_content","useOnChangeTrackUncontrolled","defaultSelectedKey","onChangeHandler","isUncontrolled","uncontrolledSelectedKey","setUncontrolledSelectedKey","onChangeMaybeUncontrolled","_excluded","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","ActionGroup","defaultSelectedKeys","disabledKeys","selectedKeys","UNSAFE_className","onChange","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","useMultiRef","_len","refs","_key","newRef","ACTION_ICON_HEIGHT","LIST_VIEW_ROW_HEIGHTS","PICKER_ITEM_HEIGHTS","PICKER_TOP_OFFSET","TABLE_ROW_HEIGHT","useSpectrumThemeProvider","useProvider","usePickerItemScale","scale","usePickerScrollOnOpen","popoverOnOpenChange","onOpenChangeInternal","usePickerProps","onOpenChangeHandler","EMPTY_FUNCTION","onSelectionChangeHandler","selectedKeyMaybeUncontrolled","usePickerNormalizedProps","renderNormalizedItem","forceRerenderKey","itemOrSection","_itemOrSection$item","_itemOrSection$item2","_excluded2","PickerNormalized","_usePickerNormalizedP","pickerProps","_createElement","SpectrumPicker","ComboBox","React","_usePickerProps","scrollRef","comboBoxProps","pickerRef","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","useForwardedRef","examples","_input$current","_selectionStart","_selectionEnd","selectionDirection","getSegment","cursorPosition","selectionStart","selectionEnd","testValue","_i","fillValue","filledValue","patternRegex","nextSegment","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","newSelection","handleSelectCapture","_input$current$select","handleArrowKey","handleKeyDown","trimmedValue","_newValue","_newValue2","newChars","_i2","maxReplaceIndex","_replaceIndex","_newValue3","newSelectionStart","nextSegmentSelection","classNames","MaskedInput$1","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","setValue","setSelection","handleChange","handleBlur","prevValue","fixedValue","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","offset","snapshot","rubric","draggableProps","dragHandleProps","innerRef","_this$itemList$curren","_this$itemList$curren2","_this$itemList$curren3","selectedRanges","RangeUtils","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onViewportChange","rowHeight","Droppable","DraggableItemList$1","isSwitchMenuItemType","MenuItem","subtitle","title","UISwitch","vsChevronRight","Menu","_onSelect","Page","onBack","onClose","Button","vsChevronLeft","vsClose","Stack","prevChildrenArray","usePrevious","mainView","setMainView","pushingView","setPushingView","poppingView","setPoppingView","topChild","pushComplete","popComplete","SlideTransition","Option","SelectValueList","displayValue","disabled","Checkbox","itemElements","_value","_itemIndex","element","visibleItemIndex","_value2","top","bottom","topRow","bottomRow","elements","index","isInvalid","SelectValueList$1","AssertionError","AssertionError$1","isEditableGridModel","model","assertIsEditableGridModel","trimMap","map","cacheSize","GridMetricCalculator","targetSize","iter","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","x","getOrThrow","userColumnWidths","userRowHeights","calculatedColumnWidths","calculatedRowHeights","fontWidths","modelRows","modelColumns","movedRows","movedColumns","initialRowHeights","initialColumnWidths","state","left","leftOffset","width","height","theme","draggingColumn","rowHeaderWidth","rowFooterWidth","columnWidth","columnHeaderHeight","minScrollHandleSize","scrollBarSize","columnCount","rowCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnHeaderMaxDepth","firstRow","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","row","columnWidths","_i3","column","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","headerFont","headerHorizontalPadding","headerText","headerFontWidth","font","cellHorizontalPadding","dataBarHorizontalPadding","fontWidth","rowsPerPage","cellRenderType","cellWidth","cellPadding","treePadding","context","textMetrics","size","defaultTheme","GridTheme","darkenForDepth","color","maxDepth","lab","convert","modifier","colorWithAlpha","alpha","g","b","linearSRGBToOklab","r","l","m","s","l2","m2","s2","OklabToLinearSRGB","L","a","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","GridSeparatorMouseHandler$1","GridColumnSeparatorMouseHandler","columnHeaderDepth","columnIndex","GridColumnSeparatorMouseHandler$1","DEFAULT_FONT_WIDTH","CellRenderer","memoizeClear","truncationChar","GridRenderer","mouseX","mouseY","treeMarkerColor","treeMarkerHoverColor","treeBox","isExpanded","markerText","textX","textY","CellRenderer$1","isDataBarGridModel","DataBarCellRenderer","widestValue","_fontWidths$get","isFirstColumn","textAlign","textWidth","truncatedText","columnMin","columnMax","axis","dataBarColor","valuePlacement","opacity","markers","direction","hasGradient","maxWidth","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","actualBoundingBoxAscent","actualBoundingBoxDescent","dataBarColorsOklab","totalGradientWidth","partGradientWidth","gradientX","leftColor","rightColor","_totalGradientWidth","_partGradientWidth","_gradientX","_leftColor","_rightColor","_totalGradientWidth2","_partGradientWidth2","_gradientX2","_leftColor2","_rightColor2","_totalGradientWidth3","_partGradientWidth3","_gradientX3","_leftColor3","_rightColor3","markerX","shouldRenderDashedLine","treeIndent","longestValueWidth","leftPadding","rightPadding","columnLongest","marker","markerValue","rightmostPosition","currentColor","currentX","DataBarCellRenderer$1","TextCellRenderer","tokens","_font","_baseline","textHeight","tokenBoxes","lastTokenEnd","currentTextWidth","token","start","end","tokenWidth","newTokenBox","textColor","tokenIndex","textStart","_token$end","nextToken","textEnd","widthOfUnderline","_fontWidths$get2","EMPTY_ARRAY","cachedTokenBoxes","tokenBox","TextCellRenderer$1","str","len","charWidth","lo","hi","mid","truncatedStr","draggingRow","c","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","gradient","_row2","_startColor","_endColor","_gradient","_row3","_y4","gradientY","mouseColumn","mouseRow","startRow","endRow","columns","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","maxLength","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","sortedRanges","mergedRanges","getTickX","tickX","tickWidth","trackHeight","_tickX","_tickWidth","_trackHeight","_x5","_y9","_selectedRanges","cursorRow","getTickY","_filteredRanges","_sortedRanges","_mergedRanges","_i10","_range","tickY","trackWidth","tickHeight","_tickY","_trackWidth","_tickHeight","backgroundColors","colors","ColorUtils","GridRowTreeMouseHandler","GridRowTreeMouseHandler$1","isTokenBoxCellRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TokenBoxCellRenderer-21fe6e70.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/useDebouncedCallback.js","../../../react-hooks/dist/usePopoverOnScrollRef.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/spectrum/picker/useMultiRef.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/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/navigation/MenuItem.js","../../../components/dist/navigation/Menu.js","../../../components/dist/navigation/Page.js","../../../components/dist/navigation/Stack.js","../../../components/dist/Option.js","../../../components/dist/SelectValueList.js","../../../grid/dist/errors/AssertionError.js","../../../grid/dist/EditableGridModel.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/GridRowTreeMouseHandler.js","../../../grid/dist/TokenBoxCellRenderer.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 * 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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 maybeHTMLElement = ref === null || ref === void 0 ? void 0 : ref.UNSAFE_getDOMNode().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 { useEffect, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n/**\n * Wraps a given callback in a cancelable, debounced function. The debounced\n * callback is automatically cancelled if the callback reference changes or the\n * component unmounts.\n * @param callback callback function to debounce\n * @param debounceMs debounce milliseconds\n * @returns a cancelable, debounced function\n */\nexport function useDebouncedCallback(callback, debounceMs) {\n var debouncedCallback = useMemo(() => debounce(callback, debounceMs), [callback, debounceMs]);\n useEffect(() => () => debouncedCallback.cancel(), [debouncedCallback]);\n return debouncedCallback;\n}\nexport default useDebouncedCallback;\n//# sourceMappingURL=useDebouncedCallback.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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 ? 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 ? 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","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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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 * 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 * 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 * 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 * 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 ? 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]) && '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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 _maybeIconKey, _dhIcons$maybeIconKey;\n // eslint-disable-next-line no-param-reassign\n maybeIconKey = (_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 var _content;\n // eslint-disable-next-line no-param-reassign\n content = (_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 ? 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } from \"react/jsx-runtime\";\nimport { 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(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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","import { useCallback } from 'react';\n\n/**\n * Takes in multiple refs and then returns one ref that can be assigned to the component.\n * In turn all the refs passed in will be assigned when the ref returned is assigned.\n * @param refs The refs to assign\n */\nfunction useMultiRef() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n return useCallback(newRef => {\n refs.forEach(ref => {\n if (typeof ref === 'function') {\n ref(newRef);\n } else if (ref != null) {\n // eslint-disable-next-line no-param-reassign\n ref.current = newRef;\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, refs);\n}\nexport default useMultiRef;\n//# sourceMappingURL=useMultiRef.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 => {\n // Attach scroll event handling\n popoverOnOpenChange(isOpen);\n onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(isOpen);\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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 = [\"defaultSelectedKey\", \"disabledKeys\", \"getInitialScrollPosition\", \"normalizedItems\", \"onChange\", \"onOpenChange\", \"onScroll\", \"onSelectionChange\", \"selectedKey\", \"showItemIcons\", \"tooltip\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from 'react';\nimport { ComboBox as SpectrumComboBox } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { usePickerProps } from \"../picker/index.js\";\nimport useMultiRef from \"../picker/useMultiRef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\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 = useMultiRef(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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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: _selectionStart,\n selectionEnd: _selectionEnd,\n selectionDirection\n } = selection;\n (_input$current = input.current) === null || _input$current === void 0 ? 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 ? 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});\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange() {\n // no-op\n },\n onSelect() {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus() {\n // no-op\n },\n onBlur() {\n // no-op\n },\n 'data-testid': undefined\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';\nDateTimeInput.defaultProps = {\n className: '',\n onChange: () => undefined,\n defaultValue: '',\n onFocus: () => undefined,\n onBlur: () => undefined,\n 'data-testid': undefined\n};\nexport default DateTimeInput;\n//# sourceMappingURL=DateTimeInput.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable } from 'react-beautiful-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 } from \"react/jsx-runtime\";\nimport { 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 react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-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 ? 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 ? 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 ? 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 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__*/_jsx(\"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 })\n }))\n });\n }\n}\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 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 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 } from \"react/jsx-runtime\";\nimport { 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 } from \"react/jsx-runtime\";\nimport { 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","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 } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { 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(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 : 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: _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 ? 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: _value2\n } = item;\n onSelect(itemIndex, _value2);\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 ? 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","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 * 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 /** The size of the caches this calculator stores */\n\n /** The maximum column width as a percentage of the full grid */\n\n /** The initial row heights if any overrides from the default calculated values */\n // Readonly so it should be safe to make public\n /** The initial column widths if any overrides from the default calculated values */\n // Readonly so it should be safe to make public\n /** User set column widths */\n /** User set row heights */\n /** Calculated column widths based on cell contents */\n /** Calculated row heights based on cell contents */\n /** Cache of fonts to estimated width of one char */\n /** Map from visible index to model index for rows (e.g. reversing movedRows operations) */\n /** Map from visible index to model index for columns (e.g. reversing movedColumns operations) */\n /** List of moved row operations. Need to track the previous value so we know if modelRows needs to be cleared. */\n /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */\n constructor() {\n var {\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n calculatedRowHeights = new Map(),\n fontWidths = 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 _defineProperty(this, \"initialRowHeights\", void 0);\n _defineProperty(this, \"initialColumnWidths\", void 0);\n _defineProperty(this, \"userColumnWidths\", void 0);\n _defineProperty(this, \"userRowHeights\", void 0);\n _defineProperty(this, \"calculatedColumnWidths\", void 0);\n _defineProperty(this, \"calculatedRowHeights\", void 0);\n _defineProperty(this, \"fontWidths\", void 0);\n _defineProperty(this, \"modelRows\", void 0);\n _defineProperty(this, \"modelColumns\", void 0);\n _defineProperty(this, \"movedRows\", void 0);\n _defineProperty(this, \"movedColumns\", void 0);\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.fontWidths = fontWidths;\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 fontWidths,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths\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 visible rows/columns\n visibleRowHeights,\n visibleColumnWidths,\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 visible rows/columns\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 fontWidths,\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 } = state;\n var gridY = this.getGridY(state);\n var floatingBottomHeight = this.getFloatingBottomHeight(state);\n var availableHeight = height - gridY - floatingBottomHeight;\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 } = state;\n var gridX = this.getGridX(state);\n var floatingRightWidth = this.getFloatingRightWidth(state);\n var availableWidth = width - gridX - floatingRightWidth;\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 } = model;\n while (y < height + topOffset && row < rowCount) {\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 } = model;\n while (x < width + leftOffset && column < columnCount) {\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 var cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null) {\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);\n var dataWidth = this.calculateColumnDataWidth(modelColumn, state);\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 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) {\n var {\n model,\n theme\n } = state;\n var {\n headerFont,\n headerHorizontalPadding\n } = theme;\n var headerText = model.textForColumnHeader(modelColumn, 0);\n if (headerText !== undefined && headerText !== '') {\n var headerFontWidth = this.getWidthForFont(headerFont, state);\n return headerText.length * headerFontWidth + headerHorizontalPadding * 2;\n }\n return headerHorizontalPadding * 2;\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) {\n var {\n top,\n height,\n width,\n model,\n theme\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 var columnWidth = 0;\n var fontWidth = this.getWidthForFont(font, state);\n var rowsPerPage = height / rowHeight;\n var bottom = Math.ceil(top + rowsPerPage);\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 var cellPadding = cellHorizontalPadding * 2;\n cellWidth = text.length * fontWidth + 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), cellHorizontalPadding * 2);\n return columnWidth;\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 * Get the width of the provided font. Exploits the fact that we're\n * using tabular figures so every character is same width\n * @param font The font to get the width for\n * @param state The grid metric state\n * @returns Width of the char `8` for the specified font\n */\n getWidthForFont(font, state) {\n if (this.fontWidths.has(font)) {\n return getOrThrow(this.fontWidths, font);\n }\n var {\n context\n } = state;\n context.font = font;\n var textMetrics = context.measureText('8');\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.fontWidths.set(font, width);\n this.fontWidths.set(context.font, width);\n return 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 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_defineProperty(GridMetricCalculator, \"CACHE_SIZE\", 10000);\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 _defineProperty(this, \"cursor\", null);\n this.order = order;\n }\n\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 _defineProperty(this, \"draggingIndex\", void 0);\n _defineProperty(this, \"resizingItems\", []);\n _defineProperty(this, \"hiddenItems\", []);\n _defineProperty(this, \"targetSizes\", new Map());\n _defineProperty(this, \"dragOffset\", 0);\n } // The index where dragging the column separator started\n // The columns in the order they're being resized\n // Columns that were hidden under the separator when starting a drag\n // The target width of the columns being resized\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 var calculatedSize = metrics[this.calculatedSizesProperty].get(_modelIndex2);\n var defaultSize = metricCalculator[this.initialSizesProperty].get(_modelIndex2);\n if (calculatedSize === defaultSize || calculatedSize == null) {\n this.resetSize(metricCalculator, _modelIndex2);\n } else {\n this.setSize(metricCalculator, _modelIndex2, calculatedSize);\n }\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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\n } = gridPoint;\n var {\n modelColumns\n } = metrics;\n var separatorIndex = GridUtils.getColumnSeparatorIndex(x, y, metrics, theme);\n\n // TODO #695: Allow resizing of column groups as well. Right now just allow resizing from base columns\n if (separatorIndex == null || columnHeaderDepth == null || columnHeaderDepth > 0) {\n return null;\n }\n var columnIndex = modelColumns.get(separatorIndex);\n if (columnIndex != null) {\n return {\n index: separatorIndex,\n depth: 0\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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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, fontWidth, truncationChar) => GridRenderer.truncateToWidth(context, text, width, fontWidth, 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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\";\nimport { DEFAULT_FONT_WIDTH } from \"./GridRendererTypes.js\";\nclass DataBarCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"heightOfDigits\", void 0);\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, context.measureText(text).width);\n }\n return widestValue;\n }, {\n max: 1000\n }));\n }\n drawCellContent(context, state, column, row) {\n var _fontWidths$get;\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 fontWidths\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 width: textWidth\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var fontWidth = (_fontWidths$get = fontWidths === null || fontWidths === void 0 ? void 0 : fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, 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);\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 if (this.heightOfDigits === undefined) {\n var {\n actualBoundingBoxAscent,\n actualBoundingBoxDescent\n } = context.measureText('1234567890');\n this.heightOfDigits = actualBoundingBoxAscent + actualBoundingBoxDescent;\n }\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 = dataBarColor;\n }\n context.textBaseline = 'top';\n context.font = theme.font;\n if (valuePlacement !== 'hide') {\n context.fillText(truncatedText, textX, rowY + (rowHeight - this.heightOfDigits) / 2);\n }\n\n // Draw bar\n if (hasGradient) {\n // Draw gradient bar\n\n var dataBarColorsOklab = dataBarColor.map(color => GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color)));\n context.save();\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);\n context.clip();\n if (value < 0) {\n if (direction === 'LTR') {\n var totalGradientWidth = Math.round(Math.abs(columnMin) / totalValueRange * maxWidth);\n var partGradientWidth = totalGradientWidth / (dataBarColor.length - 1);\n var gradientX = Math.round(leftmostPosition);\n for (var i = 0; i < dataBarColor.length - 1; i += 1) {\n var leftColor = dataBarColorsOklab[i];\n var rightColor = dataBarColorsOklab[i + 1];\n this.drawGradient(context, leftColor, rightColor, gradientX, rowY + 1, partGradientWidth, rowHeight);\n gradientX += partGradientWidth;\n }\n } else if (direction === 'RTL') {\n var _totalGradientWidth = Math.round(maxWidth - Math.abs(columnMax) / totalValueRange * maxWidth);\n var _partGradientWidth = _totalGradientWidth / (dataBarColor.length - 1);\n var _gradientX = Math.round(zeroPosition);\n for (var _i = dataBarColor.length - 1; _i > 0; _i -= 1) {\n var _leftColor = dataBarColorsOklab[_i];\n var _rightColor = dataBarColorsOklab[_i - 1];\n this.drawGradient(context, _leftColor, _rightColor, _gradientX, rowY + 1, _partGradientWidth, rowHeight);\n _gradientX += _partGradientWidth;\n }\n }\n } else if (direction === 'LTR') {\n // Value is greater than or equal to 0\n var _totalGradientWidth2 = Math.round(maxWidth - Math.abs(columnMin) / totalValueRange * maxWidth) - 1;\n var _partGradientWidth2 = _totalGradientWidth2 / (dataBarColor.length - 1);\n var _gradientX2 = Math.round(zeroPosition);\n for (var _i2 = 0; _i2 < dataBarColor.length - 1; _i2 += 1) {\n var _leftColor2 = dataBarColorsOklab[_i2];\n var _rightColor2 = dataBarColorsOklab[_i2 + 1];\n this.drawGradient(context, _leftColor2, _rightColor2, _gradientX2, rowY + 1, _partGradientWidth2, rowHeight - 2);\n _gradientX2 += _partGradientWidth2;\n }\n } else if (direction === 'RTL') {\n // Value is greater than or equal to 0\n var _totalGradientWidth3 = Math.round(Math.abs(columnMax) / totalValueRange * maxWidth);\n var _partGradientWidth3 = _totalGradientWidth3 / (dataBarColor.length - 1);\n var _gradientX3 = Math.round(leftmostPosition);\n for (var _i3 = dataBarColor.length - 1; _i3 > 0; _i3 -= 1) {\n var _leftColor3 = dataBarColorsOklab[_i3];\n var _rightColor3 = dataBarColorsOklab[_i3 - 1];\n this.drawGradient(context, _leftColor3, _rightColor3, _gradientX3, rowY + 1, _partGradientWidth3, rowHeight - 2);\n _gradientX3 += _partGradientWidth3;\n }\n }\n\n // restore clip\n context.restore();\n } else {\n // Draw normal bar\n context.save();\n context.globalAlpha = opacity;\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight - 2, 1);\n context.fill();\n context.restore();\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 - 2);\n });\n }\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: y + 1.5,\n zeroPosition,\n leftmostPosition,\n rightmostPosition,\n totalValueRange,\n dataBarWidth,\n markerXs\n };\n }\n drawGradient(context, leftColor, rightColor, x, y, width, height) {\n var currentColor = leftColor;\n // Increase by 0.5 because half-pixel will render weird on different zooms\n for (var currentX = x; currentX <= x + width; currentX += 0.5) {\n this.drawGradientPart(context, currentX, y, 1, height, GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(currentColor)));\n currentColor = GridColorUtils.lerpColor(leftColor, rightColor, (currentX - x) / width);\n }\n }\n drawGradientPart(context, x, y, width, height, color) {\n context.fillStyle = color;\n context.fillRect(x, y, width, height);\n }\n\n /**\n * Returns the width of the widest value in pixels\n */\n}\n\nexport default DataBarCellRenderer;\n//# sourceMappingURL=DataBarCellRenderer.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 { DEFAULT_FONT_WIDTH } from \"./GridRendererTypes.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass TextCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\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 fontWidths,\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 _fontWidths$get;\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 fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, 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('…') ? context.measureText(value.substring(0, value.length - 1)).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 _fontWidths$get2;\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 fontWidths\n } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n var fontWidth = (_fontWidths$get2 = fontWidths === null || fontWidths === void 0 ? void 0 : fontWidths.get(context.font)) !== null && _fontWidths$get2 !== void 0 ? _fontWidths$get2 : DEFAULT_FONT_WIDTH;\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidth, 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\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n}\n\nexport default TextCellRenderer;\n//# sourceMappingURL=TextCellRenderer.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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 } // Default radius in pixels for corners for some elements (like the active cell)\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 fontWidth = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_FONT_WIDTH;\n var truncationChar = arguments.length > 4 ? arguments[4] : 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 estimated width of each character,\n // and take half that as the low (minus 5 just to be extra safe), and double that as the high.\n var lo = Math.min(Math.max(0, Math.floor(width / fontWidth / 2) - 5), str.length);\n var hi = Math.min(Math.ceil(width / fontWidth * 2), 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 * A memoized version of the GridColorUtils.colorWithAlpha function.\n */\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\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 } = 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, _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 = (_userColumnWidths$get = userColumnWidths.get(prevModelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : allColumnWidths.get(prevColumnIndex)) !== 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, _ref4, _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 = (_ref4 = (_userColumnWidths$get2 = userColumnWidths.get(nextModelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : allColumnWidths.get(nextColumnIndex)) !== null && _ref4 !== void 0 ? _ref4 : 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 var _fontWidths$get;\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 fontWidths,\n width\n } = metrics;\n var fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : DEFAULT_FONT_WIDTH;\n var maxWidth = columnWidth - headerHorizontalPadding * 2;\n var maxLength = maxWidth / fontWidth;\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 renderText = columnText;\n if (maxLength <= 0) {\n renderText = '';\n } else if (renderText.length > maxLength) {\n renderText = \"\".concat(renderText.substring(0, maxLength - 1), \"\\u2026\");\n }\n var textWidth = renderText.length * fontWidth;\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 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 _i10 = 0; _i10 < _mergedRanges.length; _i10 += 1) {\n var _range = _mergedRanges[_i10];\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_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_defineProperty(GridRenderer, \"getCachedColorWithAlpha\", memoizeClear(GridColorUtils.colorWithAlpha, {\n max: 1000\n}));\n_defineProperty(GridRenderer, \"getCachedColorIsDark\", memoizeClear(ColorUtils.isDark, {\n max: 1000\n}));\nexport default GridRenderer;\n//# sourceMappingURL=GridRenderer.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"],"names":["Section","SpectrumSection","isElementOfType","node","type","isValidElement","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_asyncToGenerator","fn","self","args","err","createValidationProps","isValid","errorMessage","extractSpectrumHTMLElement","ref","_ref$UNSAFE_getDOMNod","extractSpectrumLastChildHTMLElement","maybeHTMLElement","identityExtractHTMLElement","findSpectrumComboBoxScrollArea","findSpectrumPopoverScrollArea","findSpectrumPickerScrollArea","triggerElementType","trigger","popupId","scrollArea","getPositionOfSelectedItem","_x","_getPositionOfSelectedItem","_ref","keyedItems","itemHeight","selectedKey","topOffset","i","item","_item$item$key","_item$item","useCheckOverflow","isOverflowing","setIsOverflowing","useState","checkOverflow","useCallback","elRef","el","resetIsOverflowing","useDebouncedCallback","callback","debounceMs","debouncedCallback","useMemo","debounce","useEffect","usePopoverOnScrollRef","findScrollArea","onScroll","getInitialScrollPosition","useRef","isScrollOnOpenEnabledRef","scrollAreaEl","setScrollAreaEl","scrollToInitialPosition","position","scrollTimeoutRef","onOpenChange","isOpen","ItemTooltip","children","options","_jsx","Tooltip","Flex","Text","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","source","_defineProperty","obj","_toPropertyKey","_toPrimitive","input","hint","prim","res","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","items","isSectionElement","isItemElement","Item","isItemElementWithDescription","childrenArray","ensureArray","result","child","_child$props","isNormalizedItemsWithKeysList","isItemOrSection","isNormalizedSection","maybeNormalizedSection","normalizeTooltipOptions","placement","itemSelectionToStringSet","itemKeys","wrapIcon","maybeIconKey","slot","_maybeIconKey","_dhIcons$maybeIconKey","Icon","FontAwesomeIcon","dhIcons","wrapItemChildren","itemsOrSections","itemsOrSectionsArray","_item$key","_textValue","_item$key2","text","textValue","wrapPrimitiveWithText","_content","useOnChangeTrackUncontrolled","defaultSelectedKey","onChangeHandler","isUncontrolled","uncontrolledSelectedKey","setUncontrolledSelectedKey","onChangeMaybeUncontrolled","_excluded","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","ActionGroup","defaultSelectedKeys","disabledKeys","selectedKeys","UNSAFE_className","onChange","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","useMultiRef","_len","refs","_key","newRef","ACTION_ICON_HEIGHT","LIST_VIEW_ROW_HEIGHTS","PICKER_ITEM_HEIGHTS","PICKER_TOP_OFFSET","TABLE_ROW_HEIGHT","useSpectrumThemeProvider","useProvider","usePickerItemScale","scale","usePickerScrollOnOpen","popoverOnOpenChange","onOpenChangeInternal","usePickerProps","onOpenChangeHandler","EMPTY_FUNCTION","onSelectionChangeHandler","selectedKeyMaybeUncontrolled","usePickerNormalizedProps","renderNormalizedItem","forceRerenderKey","itemOrSection","_itemOrSection$item","_itemOrSection$item2","_excluded2","PickerNormalized","_usePickerNormalizedP","pickerProps","_createElement","SpectrumPicker","ComboBox","React","_usePickerProps","scrollRef","comboBoxProps","pickerRef","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","useForwardedRef","examples","_input$current","_selectionStart","_selectionEnd","selectionDirection","getSegment","cursorPosition","selectionStart","selectionEnd","testValue","_i","fillValue","filledValue","patternRegex","nextSegment","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","newSelection","handleSelectCapture","_input$current$select","handleArrowKey","handleKeyDown","trimmedValue","_newValue","_newValue2","newChars","_i2","maxReplaceIndex","_replaceIndex","_newValue3","newSelectionStart","nextSegmentSelection","classNames","MaskedInput$1","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","setValue","setSelection","handleChange","handleBlur","prevValue","fixedValue","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","offset","snapshot","rubric","draggableProps","dragHandleProps","innerRef","_this$itemList$curren","_this$itemList$curren2","_this$itemList$curren3","selectedRanges","RangeUtils","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onViewportChange","rowHeight","Droppable","DraggableItemList$1","isSwitchMenuItemType","MenuItem","subtitle","title","UISwitch","vsChevronRight","Menu","_onSelect","Page","onBack","onClose","Button","vsChevronLeft","vsClose","Stack","prevChildrenArray","usePrevious","mainView","setMainView","pushingView","setPushingView","poppingView","setPoppingView","topChild","pushComplete","popComplete","SlideTransition","Option","SelectValueList","displayValue","disabled","Checkbox","itemElements","_value","_itemIndex","element","visibleItemIndex","_value2","top","bottom","topRow","bottomRow","elements","index","isInvalid","SelectValueList$1","AssertionError","AssertionError$1","isEditableGridModel","model","assertIsEditableGridModel","trimMap","map","cacheSize","GridMetricCalculator","targetSize","iter","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","x","getOrThrow","userColumnWidths","userRowHeights","calculatedColumnWidths","calculatedRowHeights","fontWidths","modelRows","modelColumns","movedRows","movedColumns","initialRowHeights","initialColumnWidths","state","left","leftOffset","width","height","theme","draggingColumn","rowHeaderWidth","rowFooterWidth","columnWidth","columnHeaderHeight","minScrollHandleSize","scrollBarSize","columnCount","rowCount","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnHeaderMaxDepth","firstRow","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","row","columnWidths","_i3","column","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","headerFont","headerHorizontalPadding","headerText","headerFontWidth","font","cellHorizontalPadding","dataBarHorizontalPadding","fontWidth","rowsPerPage","cellRenderType","cellWidth","cellPadding","treePadding","context","textMetrics","size","defaultTheme","GridTheme","darkenForDepth","color","maxDepth","lab","convert","modifier","colorWithAlpha","alpha","g","b","linearSRGBToOklab","r","l","m","s","l2","m2","s2","OklabToLinearSRGB","L","a","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","GridSeparatorMouseHandler$1","GridColumnSeparatorMouseHandler","columnHeaderDepth","columnIndex","GridColumnSeparatorMouseHandler$1","DEFAULT_FONT_WIDTH","CellRenderer","memoizeClear","truncationChar","GridRenderer","mouseX","mouseY","treeMarkerColor","treeMarkerHoverColor","treeBox","isExpanded","markerText","textX","textY","CellRenderer$1","isDataBarGridModel","DataBarCellRenderer","widestValue","_fontWidths$get","isFirstColumn","textAlign","textWidth","truncatedText","columnMin","columnMax","axis","dataBarColor","valuePlacement","opacity","markers","direction","hasGradient","maxWidth","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","actualBoundingBoxAscent","actualBoundingBoxDescent","dataBarColorsOklab","totalGradientWidth","partGradientWidth","gradientX","leftColor","rightColor","_totalGradientWidth","_partGradientWidth","_gradientX","_leftColor","_rightColor","_totalGradientWidth2","_partGradientWidth2","_gradientX2","_leftColor2","_rightColor2","_totalGradientWidth3","_partGradientWidth3","_gradientX3","_leftColor3","_rightColor3","markerX","shouldRenderDashedLine","treeIndent","longestValueWidth","leftPadding","rightPadding","columnLongest","marker","markerValue","rightmostPosition","currentColor","currentX","DataBarCellRenderer$1","TextCellRenderer","tokens","_font","_baseline","textHeight","tokenBoxes","lastTokenEnd","currentTextWidth","token","start","end","tokenWidth","newTokenBox","textColor","tokenIndex","textStart","_token$end","nextToken","textEnd","widthOfUnderline","_fontWidths$get2","EMPTY_ARRAY","cachedTokenBoxes","tokenBox","TextCellRenderer$1","str","len","charWidth","lo","hi","mid","truncatedStr","draggingRow","c","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","gradient","_row2","_startColor","_endColor","_gradient","_row3","_y4","gradientY","mouseColumn","mouseRow","startRow","endRow","columns","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","maxLength","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","sortedRanges","mergedRanges","getTickX","tickX","tickWidth","trackHeight","_tickX","_tickWidth","_trackHeight","_x5","_y9","_selectedRanges","cursorRow","getTickY","_filteredRanges","_sortedRanges","_mergedRanges","_i10","_range","tickY","trackWidth","tickHeight","_tickY","_trackWidth","_tickHeight","backgroundColors","colors","ColorUtils","GridRowTreeMouseHandler","GridRowTreeMouseHandler$1","isTokenBoxCellRenderer"],"mappings":"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"}
|