@deephaven/code-studio 1.15.1 → 1.15.2-alpha-fetch-variable-def.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/build/assets/{AppRoot-yoU6xO7o.js → AppRoot-DwJuOWo6.js} +4 -4
  2. package/build/assets/{AppRoot-yoU6xO7o.js.map → AppRoot-DwJuOWo6.js.map} +1 -1
  3. package/build/assets/{Chart-B-lgYFRk.js → Chart-C1i1ho1y.js} +2 -2
  4. package/build/assets/{Chart-B-lgYFRk.js.map → Chart-C1i1ho1y.js.map} +1 -1
  5. package/build/assets/{ControlType-BXDfYonb.js → ControlType-BEonYtyB.js} +4 -4
  6. package/build/assets/{ControlType-BXDfYonb.js.map → ControlType-BEonYtyB.js.map} +1 -1
  7. package/build/assets/{FormatterUtils-VvugcpnR.js → FormatterUtils-Bg2N5U7m.js} +2 -2
  8. package/build/assets/{FormatterUtils-VvugcpnR.js.map → FormatterUtils-Bg2N5U7m.js.map} +1 -1
  9. package/build/assets/{Grid-BhSfx_MV.js → Grid-Hz5UYdT_.js} +2 -2
  10. package/build/assets/{Grid-BhSfx_MV.js.map → Grid-Hz5UYdT_.js.map} +1 -1
  11. package/build/assets/GridTokenMouseHandler-DHkBdrVc.js +2 -0
  12. package/build/assets/GridTokenMouseHandler-DHkBdrVc.js.map +1 -0
  13. package/build/assets/{IrisGrid-CxxjDqw5.js → IrisGrid-DkGF7p3K.js} +3 -3
  14. package/build/assets/{IrisGrid-CxxjDqw5.js.map → IrisGrid-DkGF7p3K.js.map} +1 -1
  15. package/build/assets/{IrisGridModel-DSlx1u3X.js → IrisGridModel-DoD8cIz5.js} +3 -3
  16. package/build/assets/{IrisGridModel-DSlx1u3X.js.map → IrisGridModel-DoD8cIz5.js.map} +1 -1
  17. package/build/assets/{IrisGridShortcuts-RA3wXust.js → IrisGridShortcuts-DBc8G-3x.js} +2 -2
  18. package/build/assets/{IrisGridShortcuts-RA3wXust.js.map → IrisGridShortcuts-DBc8G-3x.js.map} +1 -1
  19. package/build/assets/{IrisGridThemeProvider-6it02n4x.js → IrisGridThemeProvider-BJrYi5zT.js} +6 -6
  20. package/build/assets/IrisGridThemeProvider-BJrYi5zT.js.map +1 -0
  21. package/build/assets/{LocalWorkspaceStorage-BZKRnSF8.js → LocalWorkspaceStorage-Ddl67eNC.js} +2 -2
  22. package/build/assets/{LocalWorkspaceStorage-BZKRnSF8.js.map → LocalWorkspaceStorage-Ddl67eNC.js.map} +1 -1
  23. package/build/assets/{MarkdownEditor-C2AAm9ih.js → MarkdownEditor-BcHfeFVY.js} +2 -2
  24. package/build/assets/{MarkdownEditor-C2AAm9ih.js.map → MarkdownEditor-BcHfeFVY.js.map} +1 -1
  25. package/build/assets/{MarkdownNotebook-DBOYivNl.js → MarkdownNotebook-Du5g1GaK.js} +2 -2
  26. package/build/assets/{MarkdownNotebook-DBOYivNl.js.map → MarkdownNotebook-Du5g1GaK.js.map} +1 -1
  27. package/build/assets/{MissingPartitionError-uL8lR3Hy.js → MissingPartitionError-Cjrlbi18.js} +2 -2
  28. package/build/assets/{MissingPartitionError-uL8lR3Hy.js.map → MissingPartitionError-Cjrlbi18.js.map} +1 -1
  29. package/build/assets/{MockChartModel-DTdba9NN.js → MockChartModel-B9nKAkLg.js} +2 -2
  30. package/build/assets/{MockChartModel-DTdba9NN.js.map → MockChartModel-B9nKAkLg.js.map} +1 -1
  31. package/build/assets/Plot-D75AfC4O.js +2 -0
  32. package/build/assets/{Plot-Cachc_IP.js.map → Plot-D75AfC4O.js.map} +1 -1
  33. package/build/assets/{Plotly-CqwB2UoY.js → Plotly-CAcUhtAR.js} +2 -2
  34. package/build/assets/{Plotly-CqwB2UoY.js.map → Plotly-CAcUhtAR.js.map} +1 -1
  35. package/build/assets/{StyleGuideRoot-DTTYIKzl.js → StyleGuideRoot-WshrSVsS.js} +2 -2
  36. package/build/assets/{StyleGuideRoot-DTTYIKzl.js.map → StyleGuideRoot-WshrSVsS.js.map} +1 -1
  37. package/build/assets/{index-Pb0fT4BS.js → index-CAjC8rry.js} +4 -4
  38. package/build/assets/{index-Pb0fT4BS.js.map → index-CAjC8rry.js.map} +1 -1
  39. package/build/assets/{index-SLNddBo_.js → index-Nhi6EDbw.js} +3 -3
  40. package/build/assets/{index-SLNddBo_.js.map → index-Nhi6EDbw.js.map} +1 -1
  41. package/build/assets/index-ODecto2-.js +2 -0
  42. package/build/assets/index-ODecto2-.js.map +1 -0
  43. package/build/assets/plotly-Cm_x6xfs.js +7 -0
  44. package/build/assets/{plotly-CJ0h1Bb8.js.map → plotly-Cm_x6xfs.js.map} +1 -1
  45. package/build/index.html +1 -1
  46. package/package.json +31 -31
  47. package/build/assets/GridTokenMouseHandler-Dem4pZ7B.js +0 -2
  48. package/build/assets/GridTokenMouseHandler-Dem4pZ7B.js.map +0 -1
  49. package/build/assets/IrisGridThemeProvider-6it02n4x.js.map +0 -1
  50. package/build/assets/Plot-Cachc_IP.js +0 -2
  51. package/build/assets/index-DZpheLqH.js +0 -2
  52. package/build/assets/index-DZpheLqH.js.map +0 -1
  53. package/build/assets/plotly-CJ0h1Bb8.js +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridTokenMouseHandler-DHkBdrVc.js","sources":["../../../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/useStringifiedSelection.js","../../../components/dist/spectrum/ActionMenu.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/GridSelectionMouseHandler.js","../../../grid/dist/mouse-handlers/GridRowTreeMouseHandler.js","../../../grid/dist/TokenBoxCellRenderer.js","../../../grid/dist/mouse-handlers/GridTokenMouseHandler.js"],"sourcesContent":["var _excluded = [\"defaultSelectedKeys\", \"disabledKeys\", \"children\", \"selectedKeys\", \"UNSAFE_className\", \"onChange\", \"onSelectionChange\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { useMemo } from 'react';\nimport { ActionGroup as SpectrumActionGroup } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { wrapItemChildren } from \"./utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Augmented version of the Spectrum ActionGroup component that supports\n * primitive item children.\n */\nexport function ActionGroup(_ref) {\n var {\n defaultSelectedKeys,\n disabledKeys,\n children,\n selectedKeys,\n UNSAFE_className,\n onChange,\n onSelectionChange\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var wrappedChildren = useMemo(() => typeof children === 'function' ? children : wrapItemChildren(children, null), [children]);\n return /*#__PURE__*/_jsx(SpectrumActionGroup\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, props), {}, {\n UNSAFE_className: cl('dh-action-group', UNSAFE_className),\n defaultSelectedKeys: defaultSelectedKeys,\n disabledKeys: disabledKeys,\n selectedKeys: selectedKeys,\n onSelectionChange: onChange !== null && onChange !== void 0 ? onChange : onSelectionChange,\n children: wrappedChildren\n }));\n}\nexport default ActionGroup;\n//# sourceMappingURL=ActionGroup.js.map","/**\n * This component doesn't actually render anything. It is a prop container that\n * gets passed to `NormalizedListView`. The actual `ActionGroup` elements will\n * be created from this component's props on each item in the list view.\n */\nexport function ListActionGroup(_props) {\n return null;\n}\n//# sourceMappingURL=ListActionGroup.js.map","/**\n * This component doesn't actually render anything. It is a prop container that\n * gets passed to `NormalizedListView`. The actual `ActionMenu` elements will\n * be created from this component's props on each item in the list view.\n */\nexport function ListActionMenu(_props) {\n return null;\n}\n//# sourceMappingURL=ListActionMenu.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { isElementOfType } from '@deephaven/react-hooks';\nimport { useCallback } from 'react';\nimport ActionGroup from \"../ActionGroup.js\";\nimport ActionMenu from \"../ActionMenu.js\";\nimport { ItemContent } from \"../ItemContent.js\";\nimport { ListActionGroup } from \"../ListActionGroup.js\";\nimport { ListActionMenu } from \"../ListActionMenu.js\";\nimport { Item } from \"../shared.js\";\nimport { getItemKey, ITEM_EMPTY_STRING_TEXT_VALUE } from \"./itemUtils.js\";\nimport { wrapIcon, wrapPrimitiveWithText } from \"./itemWrapperUtils.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Returns a render function that can be used to render a normalized item in\n * collection components.\n * @param itemIconSlot Slot to use for item icons\n * @param showItemDescriptions Whether to show item descriptions\n * @param showItemIcons Whether to show item icons\n * @param tooltipOptions Tooltip options to use when rendering the item\n * @param actions Optional actions to render with the item\n * @returns Render function for normalized items\n */\nexport function useRenderNormalizedItem(_ref) {\n var {\n itemIconSlot,\n showItemDescriptions,\n showItemIcons,\n tooltipOptions,\n actions\n } = _ref;\n return useCallback(normalizedItem => {\n var _normalizedItem$item, _normalizedItem$item$, _normalizedItem$item2, _normalizedItem$item3, _normalizedItem$item4;\n var itemKey = getItemKey(normalizedItem);\n var content = wrapPrimitiveWithText((_normalizedItem$item = normalizedItem.item) === null || _normalizedItem$item === void 0 ? void 0 : _normalizedItem$item.content);\n var textValue = (_normalizedItem$item$ = (_normalizedItem$item2 = normalizedItem.item) === null || _normalizedItem$item2 === void 0 ? void 0 : _normalizedItem$item2.textValue) !== null && _normalizedItem$item$ !== void 0 ? _normalizedItem$item$ : itemKey == null ? undefined : String(itemKey);\n var description = showItemDescriptions ? wrapPrimitiveWithText((_normalizedItem$item3 = normalizedItem.item) === null || _normalizedItem$item3 === void 0 ? void 0 : _normalizedItem$item3.description, 'description') : null;\n var icon = showItemIcons ? wrapIcon((_normalizedItem$item4 = normalizedItem.item) === null || _normalizedItem$item4 === void 0 ? void 0 : _normalizedItem$item4.icon, itemIconSlot) : null;\n var action = null;\n if (isElementOfType(actions, ListActionGroup)) {\n action = /*#__PURE__*/_jsx(ActionGroup\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, actions.props), {}, {\n onAction: key => actions.props.onAction(key, itemKey),\n onChange: keys => {\n var _actions$props$onChan, _actions$props;\n return (_actions$props$onChan = (_actions$props = actions.props).onChange) === null || _actions$props$onChan === void 0 ? void 0 : _actions$props$onChan.call(_actions$props, keys, itemKey);\n }\n }));\n } else if (isElementOfType(actions, ListActionMenu)) {\n action = /*#__PURE__*/_jsx(ActionMenu\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, actions.props), {}, {\n onAction: key => actions.props.onAction(key, itemKey),\n onOpenChange: isOpen => {\n var _actions$props$onOpen, _actions$props2;\n return (_actions$props$onOpen = (_actions$props2 = actions.props).onOpenChange) === null || _actions$props$onOpen === void 0 ? void 0 : _actions$props$onOpen.call(_actions$props2, isOpen, itemKey);\n }\n }));\n }\n return /*#__PURE__*/_jsx(Item\n // Note that setting the `key` prop explicitly on `Item` elements\n // causes the picker to expect `selectedKey` and `defaultSelectedKey`\n // to be strings. It also passes the stringified value of the key to\n // `onSelectionChange` handlers` regardless of the actual type of the\n // key. We can't really get around setting in order to support Windowed\n // data, so we'll need to do some manual conversion of keys to strings\n // in other components that use this hook.\n , {\n // The `textValue` prop gets used to provide the content of `<option>`\n // elements that back the Spectrum Picker. These are not visible in the UI,\n // but are used for accessibility purposes, so we set to an arbitrary\n // `ITEM_EMPTY_STRING_TEXT_VALUE` value so that they are not empty strings.\n textValue: textValue === '' ? ITEM_EMPTY_STRING_TEXT_VALUE : textValue,\n children: /*#__PURE__*/_jsxs(ItemContent, {\n tooltipOptions: tooltipOptions,\n children: [icon, content, description, action]\n })\n }, itemKey);\n }, [actions, itemIconSlot, showItemDescriptions, showItemIcons, tooltipOptions]);\n}\nexport default useRenderNormalizedItem;\n//# sourceMappingURL=useRenderNormalizedItem.js.map","import { useCallback, useMemo } from 'react';\nimport { getItemKey, itemSelectionToStringSet } from \"./itemUtils.js\";\n/**\n * Spectrum collection components treat keys as strings if the `key` prop is\n * explicitly set on `Item` elements. Since we do this in `useRenderNormalizedItem`,\n * we need to ensure that keys are strings in order for selection to work. We\n * then need to convert back to the original key types in the onChange handler.\n * This hook encapsulates converting to and from strings so that keys can match\n * the original key type.\n * @param normalizedItems The normalized items to select from.\n * @param selectedKey The currently selected key in the collection.\n * @param defaultSelectedKey The initial selected key in the collection.\n * @param disabledKeys The currently disabled keys in the collection.\n * @param onChange Handler that is called when the selection changes.\n * @returns UseStringifiedSelectionResult with stringified key sets and string\n * key selection change handler.\n */\nexport function useStringifiedSelection(_ref) {\n var {\n normalizedItems,\n defaultSelectedKey,\n selectedKey,\n disabledKeys,\n onChange\n } = _ref;\n var selectedStringKey = useMemo(() => selectedKey == null ? selectedKey : String(selectedKey), [selectedKey]);\n var defaultSelectedStringKey = useMemo(() => defaultSelectedKey == null ? defaultSelectedKey : String(defaultSelectedKey), [defaultSelectedKey]);\n var disabledStringKeys = useMemo(() => itemSelectionToStringSet(disabledKeys), [disabledKeys]);\n var onStringSelectionChange = useCallback(key => {\n var _getItemKey;\n if (onChange == null) {\n return;\n }\n\n // The `key` arg will always be a string due to us setting the `Item` key\n // prop in `renderItem`. We need to find the matching item to determine\n // the actual key.\n var selectedItem = normalizedItems.find(item => String(getItemKey(item)) === key);\n var actualKey = (_getItemKey = getItemKey(selectedItem)) !== null && _getItemKey !== void 0 ? _getItemKey : key;\n onChange(actualKey);\n }, [normalizedItems, onChange]);\n return {\n selectedStringKey,\n defaultSelectedStringKey,\n disabledStringKeys,\n onStringSelectionChange\n };\n}\nexport default useStringifiedSelection;\n//# sourceMappingURL=useStringifiedSelection.js.map","var _excluded = [\"disabledKeys\", \"children\", \"UNSAFE_className\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { useMemo } from 'react';\nimport { ActionMenu as SpectrumActionMenu } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { wrapItemChildren } from \"./utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Augmented version of the Spectrum ActionMenu component that supports\n * primitive item children.\n */\nexport function ActionMenu(_ref) {\n var {\n disabledKeys,\n children,\n UNSAFE_className\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var wrappedChildren = useMemo(() => typeof children === 'function' ? children : wrapItemChildren(children, null), [children]);\n return /*#__PURE__*/_jsx(SpectrumActionMenu\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, props), {}, {\n UNSAFE_className: cl('dh-action-menu', UNSAFE_className),\n disabledKeys: disabledKeys,\n children: wrappedChildren\n }));\n}\nexport default ActionMenu;\n//# sourceMappingURL=ActionMenu.js.map","var _excluded = [\"defaultSelectedKey\", \"disabledKeys\", \"getInitialScrollPosition\", \"normalizedItems\", \"onChange\", \"onOpenChange\", \"onScroll\", \"onSelectionChange\", \"selectedKey\", \"showItemIcons\", \"tooltip\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { useCallback, useMemo } from 'react';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { getItemKey, isNormalizedSection, normalizeTooltipOptions, useRenderNormalizedItem, useStringifiedSelection } from \"../utils/index.js\";\nimport { usePickerScrollOnOpen } from \"./usePickerScrollOnOpen.js\";\nimport { Section } from \"../shared.js\";\n/** Props that are derived by `usePickerNormalizedProps` */\n/**\n * Props that are passed through untouched. (should exclude all of the\n * destructured props passed into `usePickerNormalizedProps` that are not in the\n * spread ...props)\n */\n/** Props returned from `usePickerNormalizedProps` hook. */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function usePickerNormalizedProps(_ref) {\n var {\n defaultSelectedKey,\n disabledKeys,\n getInitialScrollPosition,\n normalizedItems,\n onChange,\n onOpenChange,\n onScroll = EMPTY_FUNCTION,\n onSelectionChange,\n selectedKey,\n showItemIcons,\n tooltip = true\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var tooltipOptions = useMemo(() => normalizeTooltipOptions(tooltip), [tooltip]);\n var renderNormalizedItem = useRenderNormalizedItem({\n itemIconSlot: 'icon',\n // Descriptions introduce variable item heights which throws off calculation\n // of initial scroll position and setting viewport on windowed data. For now\n // not going to implement description support in Picker.\n // https://github.com/deephaven/web-client-ui/issues/1958\n showItemDescriptions: false,\n showItemIcons,\n tooltipOptions\n });\n\n // Spectrum doesn't re-render if only the `renderNormalizedItems` function\n // changes, so we create a key from its dependencies that can be used to force\n // re-render.\n var forceRerenderKey = \"\".concat(showItemIcons, \"-\").concat(tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.placement);\n var {\n ref,\n onOpenChange: onOpenChangeInternal\n } = usePickerScrollOnOpen({\n getInitialScrollPosition,\n onScroll,\n onOpenChange\n });\n\n // Spectrum Picker treats keys as strings if the `key` prop is explicitly\n // set on `Item` elements. Since we do this in `renderItem`, we need to\n // map original key types to and from strings so that selection works.\n var {\n selectedStringKey,\n defaultSelectedStringKey,\n disabledStringKeys,\n onStringSelectionChange\n } = useStringifiedSelection({\n normalizedItems,\n selectedKey,\n defaultSelectedKey,\n disabledKeys,\n onChange: onChange !== null && onChange !== void 0 ? onChange : onSelectionChange\n });\n var children = useCallback(itemOrSection => {\n if (isNormalizedSection(itemOrSection)) {\n var _itemOrSection$item, _itemOrSection$item2;\n return /*#__PURE__*/_jsx(Section, {\n title: (_itemOrSection$item = itemOrSection.item) === null || _itemOrSection$item === void 0 ? void 0 : _itemOrSection$item.title,\n items: (_itemOrSection$item2 = itemOrSection.item) === null || _itemOrSection$item2 === void 0 ? void 0 : _itemOrSection$item2.items,\n children: renderNormalizedItem\n }, getItemKey(itemOrSection));\n }\n return renderNormalizedItem(itemOrSection);\n }, [renderNormalizedItem]);\n return _objectSpread(_objectSpread({}, props), {}, {\n children,\n forceRerenderKey,\n ref,\n items: normalizedItems,\n selectedKey: selectedStringKey,\n defaultSelectedKey: defaultSelectedStringKey,\n disabledKeys: disabledStringKeys,\n onSelectionChange: onStringSelectionChange,\n onOpenChange: onOpenChangeInternal\n });\n}\nexport default usePickerNormalizedProps;\n//# sourceMappingURL=usePickerNormalizedProps.js.map","var _excluded = [\"UNSAFE_className\"],\n _excluded2 = [\"forceRerenderKey\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport { Picker as SpectrumPicker } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport usePickerNormalizedProps from \"./usePickerNormalizedProps.js\";\n/**\n * Picker that takes an array of `NormalizedItem` or `NormalizedSection` items\n * as children and uses a render item function to render the items. This is\n * necessary to support windowed data.\n */\nimport { createElement as _createElement } from \"react\";\nexport function PickerNormalized(_ref) {\n var {\n UNSAFE_className\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var _usePickerNormalizedP = usePickerNormalizedProps(props),\n {\n forceRerenderKey\n } = _usePickerNormalizedP,\n pickerProps = _objectWithoutProperties(_usePickerNormalizedP, _excluded2);\n return /*#__PURE__*/_createElement(SpectrumPicker\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, pickerProps), {}, {\n key: forceRerenderKey,\n UNSAFE_className: cl('dh-picker', 'dh-picker-normalized', UNSAFE_className)\n }));\n}\nexport default PickerNormalized;\n//# sourceMappingURL=PickerNormalized.js.map","var _excluded = [\"UNSAFE_className\"],\n _excluded2 = [\"defaultSelectedKey\", \"disabledKeys\", \"selectedKey\", \"ref\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport React from 'react';\nimport { ComboBox as SpectrumComboBox } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { useMergeRef } from '@deephaven/react-hooks';\nimport { usePickerProps } from \"../picker/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport { SpectrumComboBox };\nexport var ComboBox = /*#__PURE__*/React.forwardRef(function ComboBox(_ref, ref) {\n var {\n UNSAFE_className\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n var _usePickerProps = usePickerProps(props),\n {\n defaultSelectedKey,\n disabledKeys,\n selectedKey,\n ref: scrollRef\n } = _usePickerProps,\n comboBoxProps = _objectWithoutProperties(_usePickerProps, _excluded2);\n var pickerRef = useMergeRef(ref, scrollRef);\n return /*#__PURE__*/_jsx(SpectrumComboBox\n // eslint-disable-next-line react/jsx-props-no-spreading\n , _objectSpread(_objectSpread({}, comboBoxProps), {}, {\n UNSAFE_className: cl('dh-combobox', UNSAFE_className),\n ref: pickerRef\n // Type assertions are necessary here since Spectrum types don't account\n // for number and boolean key values even though they are valid runtime\n // values.\n ,\n defaultSelectedKey: defaultSelectedKey,\n disabledKeys: disabledKeys,\n selectedKey: selectedKey\n }));\n});\nComboBox.displayName = 'ComboBox';\n//# sourceMappingURL=ComboBox.js.map","/* eslint-disable import/prefer-default-export */\nexport function DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(value, replaceIndex, newChar) {\n return value.substring(0, replaceIndex) + newChar + value.substring(replaceIndex + 1);\n}\n\n/**\n * Fill the string on the right side with the example value to the given length\n * @param checkValue Initial string to pad\n * @param exampleValue Example value\n * @param length Target length\n * @returns String padded with the given example value\n */\nexport function fillToLength(checkValue, exampleValue, length) {\n return checkValue.length < length ? \"\".concat(checkValue).concat(exampleValue.substring(checkValue.length, length)) : checkValue;\n}\n\n/**\n * Trim all characters matching the empty mask on the right side of the given value\n * @param value String to trim\n * @param emptyMask Empty mask\n * @returns Trimmed string\n */\nexport function trimTrailingMask(value, emptyMask) {\n var {\n length\n } = value;\n for (var i = value.length - 1; i >= 0; i -= 1) {\n if (emptyMask[i] === value[i]) {\n length = i;\n } else {\n break;\n }\n }\n return value.substring(0, length);\n}\n//# sourceMappingURL=MaskedInputUtils.js.map","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { useMemo, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport { DEFAULT_GET_PREFERRED_REPLACEMENT_STRING, fillToLength, trimTrailingMask } from \"./MaskedInputUtils.js\";\nimport \"./MaskedInput.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nvar log = Log.module('MaskedInput');\nvar SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none'\n};\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nvar FIXED_WIDTH_SPACE = '\\u2007';\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nvar MaskedInput = /*#__PURE__*/React.forwardRef((props, ref) => {\n var {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n normalizePastedText = text => text,\n onChange = () => false,\n onSelect = () => false,\n onSubmit,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId\n } = props;\n var input = useForwardedRef(ref);\n var examples = useMemo(() => Array.isArray(example) ? example : [example], [example]);\n var emptyMask = useMemo(() => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE), [examples]);\n useEffect(function setSelectedSegment() {\n if (selection != null) {\n var _input$current;\n log.debug('setting selection...', selection);\n var {\n selectionStart,\n selectionEnd,\n selectionDirection\n } = selection;\n (_input$current = input.current) === null || _input$current === void 0 || _input$current.setSelectionRange(selectionStart, selectionEnd, selectionDirection);\n log.debug('selection set!');\n }\n }, [selection, input]);\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n var getSegment = useCallback(cursorPosition => {\n var selectionStart = cursorPosition;\n var selectionEnd = cursorPosition;\n var testValue = examples.length > 0 ? examples[0] : value;\n for (var i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n selectionStart = i;\n }\n for (var _i = selectionEnd; _i < testValue.length; _i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(_i))) {\n break;\n }\n selectionEnd = _i + 1;\n }\n var selectionDirection = selectionStart === selectionEnd ? SELECTION_DIRECTION.NONE : SELECTION_DIRECTION.BACKWARD;\n return {\n selectionStart,\n selectionEnd,\n selectionDirection\n };\n }, [examples, value]);\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(checkValue, exampleValue) {\n var cursorPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : checkValue.length;\n var filledValue = '';\n for (var i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n var isValid = useCallback(function (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 }, [pattern, examples]);\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\n /**\n * Handles paste events into the input\n * @param event The paste event\n */\n var handlePaste = useCallback(event => {\n event.preventDefault();\n event.stopPropagation();\n if (!input.current) {\n return;\n }\n var pastedText = event.clipboardData.getData('text/plain');\n log.debug('handlePaste', pastedText);\n\n // Normalize the pasted text\n var normalizedText = normalizePastedText(pastedText);\n\n // Check if the pasted value is valid\n if (isValid(normalizedText, normalizedText.length)) {\n onChange(normalizedText);\n onSelect({\n selectionStart: normalizedText.length,\n selectionEnd: normalizedText.length,\n selectionDirection: SELECTION_DIRECTION.NONE\n });\n }\n }, [input, onChange, onSelect, isValid, normalizePastedText]);\n function handleKeyDown(event) {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n var {\n key\n } = event;\n var {\n selectionStart = 0,\n selectionEnd = 0\n } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error('Selection key event on non-text input element', event.target);\n return;\n }\n if (key === 'Enter') {\n onSubmit === null || onSubmit === void 0 || onSubmit(event);\n return;\n }\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n var newValue = value.substring(0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd ? selectionStart - 1 : selectionStart);\n var trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE\n });\n }\n return;\n }\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n var _newValue = value.substring(0, selectionStart) + value.substring(selectionStart, selectionEnd).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionEnd);\n log.debug('Range ', selectionStart, selectionEnd, 'deleted, setting value', _newValue);\n onChange(_newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE\n });\n } else if (selectionStart > 0) {\n for (var i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n var _newValue2 = value.substring(0, i) + value.substring(i, selectionStart).replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) + value.substring(selectionStart);\n if (_newValue2 !== value) {\n onChange(_newValue2);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE\n });\n return;\n }\n }\n }\n return;\n }\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n var newChars = Array.from(new Set([key, key.toUpperCase(), key.toLowerCase()]));\n for (var _i2 = 0; _i2 < newChars.length; _i2 += 1) {\n var newChar = newChars[_i2];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n var maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar) ? examples[0].length - 1 : selectionStart;\n for (var replaceIndex = selectionStart; replaceIndex <= maxReplaceIndex; replaceIndex += 1) {\n // Fill with the example chars if necessary\n var filledValue = fillToLength(value, examples[0], replaceIndex + 1);\n var _newValue3 = getPreferredReplacementString(filledValue, replaceIndex, newChar, selectionStart, selectionEnd);\n if (isValid(_newValue3, replaceIndex + 1)) {\n var currentSegment = getSegment(replaceIndex);\n var newSelectionStart = replaceIndex + 1;\n var newSelection = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n var nextSegmentSelection = nextSegment(replaceIndex);\n if (nextSegmentSelection.selectionStart !== currentSegment.selectionStart) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', _newValue3, newSelection);\n onChange(_newValue3);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return /*#__PURE__*/_jsx(\"input\", {\n ref: input,\n className: classNames('form-control masked-input', className),\n type: \"text\",\n pattern: pattern,\n placeholder: placeholder,\n value: value,\n onChange: () => undefined,\n onKeyDown: handleKeyDown,\n onPaste: handlePaste,\n onSelect: handleSelect,\n onSelectCapture: handleSelectCapture,\n onFocus: onFocus,\n onBlur: onBlur,\n \"data-testid\": dataTestId\n });\n});\nexport default MaskedInput;\n//# sourceMappingURL=MaskedInput.js.map","export function getNextNumberSegmentValue(delta, segmentValue, lowerBound, upperBound, length) {\n var modValue = upperBound - lowerBound + 1;\n var newSegmentValue = ((parseInt(segmentValue, 10) - delta - lowerBound) % modValue + modValue) % modValue + lowerBound;\n return \"\".concat(newSegmentValue).padStart(length, '0');\n}\nexport function getNextSegmentValue(range, delta, segmentValue) {\n var {\n selectionStart\n } = range;\n if (selectionStart === 0) {\n return getNextNumberSegmentValue(delta, segmentValue, 1900, 2099, 4);\n }\n if (selectionStart === 5) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 12, 2);\n }\n if (selectionStart === 8) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 31, 2);\n }\n if (selectionStart === 11) {\n // Hours input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 23, 2);\n }\n if (selectionStart === 17 || selectionStart === 14) {\n // Minutes/seconds input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 59, 2);\n }\n if (selectionStart === 20 || selectionStart === 24 || selectionStart === 28) {\n // Milli, micro, and nanosecond input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 999, 3);\n }\n return segmentValue;\n}\n//# sourceMappingURL=DateInputUtils.js.map","/* eslint-disable import/prefer-default-export */\nexport function addSeparators(value) {\n var dateTimeMillis = value.substring(0, 23);\n var micros = value.substring(23, 26);\n var nanos = value.substring(26);\n return [dateTimeMillis, micros, nanos].filter(v => v !== '').join('\\u200B');\n}\n//# sourceMappingURL=DateTimeInputUtils.js.map","import React, { useCallback, useEffect, 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\n /**\n * Normalize text by:\n * - Replacing 'T' with space to support ISO 8601 format\n * - Removing timezone information (e.g., \"EDT\", \"+05:00\", \"Z\")\n * - Adding zero-width space separators in the nanosecond part\n * @param text The text\n * @returns The normalized text\n */\n var normalizeText = useCallback(text => {\n // Replace first 'T' separator with space for ISO 8601 format (without global flag to preserve 'T' in timezone like EDT)\n var normalized = text.replace(/T/, ' ');\n\n // Remove timezone information\n // Match datetime up to optional fractional seconds, then strip everything else\n // Pattern: YYYY-MM-DD HH:MM:SS[.SSSSSSSSS] followed by optional timezone\n var dateTimeMatch = normalized.match(/^(\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?)/);\n if (dateTimeMatch) {\n [, normalized] = dateTimeMatch;\n }\n\n // Add zero-width space separators to match the expected pattern\n return addSeparators(normalized);\n }, []);\n\n // Sync internal state with defaultValue prop when it changes\n // Apply normalization to handle raw unformatted values (e.g., with timezone info)\n useEffect(() => {\n if (defaultValue.length > 0) {\n var normalized = normalizeText(defaultValue);\n setValue(normalized);\n // Notify parent with the normalized value (without separators)\n onChange(fixIncompleteValue(removeSeparators(normalized)));\n } else {\n setValue('');\n onChange('');\n }\n }, [defaultValue, normalizeText, onChange]);\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 normalizePastedText: normalizeText,\n onChange: handleChange,\n onSelect: setSelection,\n onSubmit: onSubmit,\n pattern: FULL_DATE_PATTERN,\n placeholder: FULL_DATE_FORMAT,\n selection: selection,\n value: value,\n onFocus: onFocus,\n onBlur: handleBlur,\n \"data-testid\": dataTestId\n })\n });\n});\nDateTimeInput.displayName = 'DateTimeInput';\nexport default DateTimeInput;\n//# sourceMappingURL=DateTimeInput.js.map","var _DraggableItemList;\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable } from '@hello-pangea/dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils } from '@deephaven/utils';\nimport ItemList from \"./ItemList.js\";\nimport { Tooltip } from \"./popper/index.js\";\nimport \"./DraggableItemList.css\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses @hello-pangea/dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to @hello-pangea/dnd).\n * One caveat with the use of @hello-pangea/dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/@hello-pangea/dnd/issues/1678\n */\nclass DraggableItemList extends PureComponent {\n static renderHandle() {\n return /*#__PURE__*/_jsxs(\"div\", {\n children: [/*#__PURE__*/_jsx(Tooltip, {\n children: \"Drag to re-order\"\n }), /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsGripper\n })]\n });\n }\n static renderBadge(_ref) {\n var {\n text\n } = _ref;\n return text != null && text.length > 0 ? /*#__PURE__*/_jsx(\"span\", {\n className: \"number-badge\",\n children: text\n }) : null;\n }\n static renderTextItem(_ref2) {\n var {\n text,\n badgeText = '',\n className = ''\n } = _ref2;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: classNames('item-list-item-content', 'draggable-item-list-item-content', className),\n children: [/*#__PURE__*/_jsx(\"span\", {\n className: \"title\",\n children: text\n }), DraggableItemList.renderBadge({\n text: badgeText\n }), DraggableItemList.renderHandle()]\n });\n }\n static renderItem(_ref3) {\n var _ref4, _item$displayValue;\n var {\n item,\n isClone,\n selectedCount\n } = _ref3;\n var text = item != null ? (_ref4 = (_item$displayValue = item.displayValue) !== null && _item$displayValue !== void 0 ? _item$displayValue : item.value) !== null && _ref4 !== void 0 ? _ref4 : \"\".concat(item) : '';\n var badgeText = isClone !== undefined && isClone ? \"\".concat(selectedCount) : '';\n var className = isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({\n text,\n badgeText,\n className\n });\n }\n static getDraggableId(draggablePrefix, itemIndex) {\n return \"\".concat(draggablePrefix, \"/\").concat(itemIndex);\n }\n static getDraggableIndex(draggableId) {\n var num = draggableId.split('/').pop();\n return parseInt(num !== undefined ? num : '', 10);\n }\n constructor(props) {\n super(props);\n _defineProperty(this, \"itemList\", void 0);\n _defineProperty(this, \"getCachedDraggableItem\", memoize((draggablePrefix, renderItem, item, itemIndex, isFocused, isSelected, isDragDisabled, style) => /*#__PURE__*/_jsx(Draggable, {\n draggableId: DraggableItemList.getDraggableId(draggablePrefix, itemIndex),\n index: itemIndex,\n isDragDisabled: isDragDisabled,\n children: provided => /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread(_objectSpread({\n role: \"menuitem\",\n className: \"draggable-item-list-item\",\n ref: provided.innerRef,\n tabIndex: -1\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), provided.dragHandleProps), {}, {\n children: renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false\n })\n }))\n }, itemIndex), {\n max: ItemList.CACHE_SIZE\n }));\n _defineProperty(this, \"getCachedRenderDraggableItem\", memoize((draggablePrefix, isDragDisabled, renderItem) => _ref5 => {\n var {\n item,\n itemIndex,\n isFocused,\n isSelected,\n style\n } = _ref5;\n return this.getCachedDraggableItem(draggablePrefix, renderItem, item, itemIndex, isFocused, isSelected, isDragDisabled, style);\n }, {\n max: 1\n }));\n _defineProperty(this, \"getCachedRenderClone\", memoize((draggingItemClassName, items, offset, renderItem) =>\n // eslint-disable-next-line react/no-unstable-nested-components, react/display-name, react/function-component-definition\n (provided, snapshot, rubric) => {\n // eslint-disable-next-line react/no-this-in-sfc\n var {\n selectedCount\n } = this.state;\n var {\n draggableProps,\n dragHandleProps,\n innerRef\n } = provided;\n var {\n index: itemIndex\n } = rubric.source;\n var item = items[itemIndex - offset];\n return /*#__PURE__*/_jsx(\"div\", _objectSpread(_objectSpread(_objectSpread({\n className: classNames('draggable-item-list-dragging-item-container', draggingItemClassName)\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, draggableProps), dragHandleProps), {}, {\n ref: innerRef,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: classNames('draggable-item-list-dragging-item', {\n 'two-dragged': selectedCount === 2\n }, {\n 'multiple-dragged': selectedCount > 2\n }),\n children: renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount\n })\n })\n }));\n }, {\n max: 1\n }));\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n this.itemList = /*#__PURE__*/React.createRef();\n this.state = {\n selectedCount: 0\n };\n }\n selectItem(itemIndex) {\n var _this$itemList$curren;\n (_this$itemList$curren = this.itemList.current) === null || _this$itemList$curren === void 0 || _this$itemList$curren.selectItem(itemIndex);\n }\n focusItem(itemIndex) {\n var _this$itemList$curren2;\n (_this$itemList$curren2 = this.itemList.current) === null || _this$itemList$curren2 === void 0 || _this$itemList$curren2.focusItem(itemIndex);\n }\n scrollToItem(itemIndex) {\n var _this$itemList$curren3;\n (_this$itemList$curren3 = this.itemList.current) === null || _this$itemList$curren3 === void 0 || _this$itemList$curren3.scrollToItem(itemIndex);\n }\n handleSelectionChange(selectedRanges) {\n this.setState({\n selectedCount: RangeUtils.count(selectedRanges)\n });\n var {\n onSelectionChange\n } = this.props;\n onSelectionChange(selectedRanges);\n }\n render() {\n var {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n hasPlaceholder,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n 'data-testid': dataTestId\n } = this.props;\n return /*#__PURE__*/_jsx(Droppable, {\n isDropDisabled: isDropDisabled,\n droppableId: droppableId,\n mode: \"virtual\",\n renderClone: this.getCachedRenderClone(draggingItemClassName, items, offset, renderItem),\n \"data-testid\": dataTestId,\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n role: \"menu\",\n className: classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith\n }),\n style: style,\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n children: [/*#__PURE__*/_jsx(ItemList, {\n focusSelector: \".draggable-item-list-item\",\n isDoubleClickSelect: isDoubleClickSelect,\n isDragSelect: false,\n isMultiSelect: isMultiSelect,\n isStickyBottom: isStickyBottom,\n itemCount: itemCount,\n items: items,\n onFocusChange: onFocusChange,\n onSelect: onSelect,\n onSelectionChange: this.handleSelectionChange,\n onViewportChange: onViewportChange,\n offset: offset,\n ref: this.itemList,\n renderItem: this.getCachedRenderDraggableItem(draggablePrefix, isDragDisabled, renderItem),\n rowHeight: rowHeight,\n selectedRanges: selectedRanges\n }), hasPlaceholder && provided.placeholder]\n }))\n });\n }\n}\n_DraggableItemList = DraggableItemList;\n_defineProperty(DraggableItemList, \"DEFAULT_ROW_HEIGHT\", 30);\n_defineProperty(DraggableItemList, \"defaultProps\", {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: _DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n hasPlaceholder: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange() {\n // no-op\n },\n onSelect() {\n // no-op\n },\n onSelectionChange() {\n // no-op\n },\n onViewportChange() {\n // no-op\n },\n renderItem: _DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n 'data-testid': undefined\n});\nexport default DraggableItemList;\n//# sourceMappingURL=DraggableItemList.js.map","import React, { useMemo } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport \"./MenuItem.css\";\nimport UISwitch from \"../UISwitch.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction isSwitchMenuItemType(item) {\n return item.isOn !== undefined;\n}\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport function MenuItem(_ref) {\n var {\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId\n } = _ref;\n var {\n icon,\n subtitle,\n title\n } = item;\n var handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"btn btn-navigation-menu-item\",\n \"data-testid\": \"menu-item-\".concat(title),\n onClick: handleSelect,\n onKeyDown: event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n },\n tabIndex: 0,\n role: \"menuitem\",\n children: [icon !== undefined && /*#__PURE__*/_jsx(\"div\", {\n className: \"icon\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"title\",\n children: title\n }), subtitle !== undefined && /*#__PURE__*/_jsx(\"div\", {\n className: \"shortcut\",\n children: subtitle\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"accessory\",\n \"data-testid\": dataTestId,\n children: isSwitchMenuItemType(item) ? /*#__PURE__*/_jsx(UISwitch, {\n on: item.isOn,\n onClick: event => {\n event.stopPropagation();\n handleSelect();\n }\n }) : /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight\n })\n })]\n });\n}\nexport default MenuItem;\n//# sourceMappingURL=MenuItem.js.map","import React from 'react';\nimport MenuItem from \"./MenuItem.js\";\nimport \"./Menu.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function Menu(_ref) {\n var {\n items,\n onSelect: _onSelect = () => undefined,\n 'data-testid': dataTestId\n } = _ref;\n return /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-menu-view\",\n \"data-testid\": dataTestId,\n children: /*#__PURE__*/_jsx(\"ul\", {\n className: \"navigation-menu-list\",\n children: items.map((item, itemIndex) => /*#__PURE__*/_jsx(\"li\", {\n children: /*#__PURE__*/_jsx(MenuItem, {\n item: item,\n onSelect: () => {\n _onSelect(itemIndex);\n }\n })\n }, item.title))\n })\n });\n}\nexport default Menu;\n//# sourceMappingURL=Menu.js.map","import React from 'react';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport \"./Page.css\";\nimport Button from \"../Button.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport function Page(_ref) {\n var {\n children,\n onBack,\n onClose,\n title,\n 'data-testid': dataTestId\n } = _ref;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"navigation-page\",\n \"data-testid\": dataTestId,\n children: [/*#__PURE__*/_jsxs(\"div\", {\n className: \"navigation-title-bar\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-left-buttons\",\n children: onBack !== undefined && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-back m-1 btn-sm\",\n \"data-testid\": \"btn-page-back\",\n onClick: onBack,\n icon: vsChevronLeft,\n children: \"Back\"\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-title\",\n children: title\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-right-buttons\",\n children: onClose !== undefined && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-close btn-sm px-2 m-1\",\n \"data-testid\": \"btn-page-close\",\n onClick: onClose,\n icon: vsClose,\n tooltip: \"Close\"\n })\n })]\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"navigation-content\",\n children: children\n })]\n });\n}\nexport default Page;\n//# sourceMappingURL=Page.js.map","import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport \"./Stack.css\";\nimport { SlideTransition } from \"../transitions/index.js\";\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport function Stack(_ref) {\n var {\n children,\n 'data-testid': dataTestId\n } = _ref;\n var childrenArray = useMemo(() => React.Children.toArray(children), [children]);\n var prevChildrenArray = usePrevious(childrenArray);\n var [mainView, setMainView] = useState(childrenArray[childrenArray.length - 1]);\n var [pushingView, setPushingView] = useState(null);\n var [poppingView, setPoppingView] = useState(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(function initAnimation() {\n if (prevChildrenArray === undefined || childrenArray === prevChildrenArray) {\n return;\n }\n var topChild = childrenArray[childrenArray.length - 1];\n if (childrenArray.length === prevChildrenArray.length || prevChildrenArray.length === 0 || pushingView !== null || poppingView !== null) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n }, [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]);\n var pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n var popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"navigation-stack\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"main-view\",\n \"data-testid\": dataTestId,\n children: mainView\n }), /*#__PURE__*/_jsx(SlideTransition, {\n direction: \"right\",\n in: poppingView != null,\n onEntered: popComplete,\n children: /*#__PURE__*/_jsx(_Fragment, {\n children: poppingView != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"popping-view\",\n children: poppingView\n })\n })\n }), /*#__PURE__*/_jsx(SlideTransition, {\n in: pushingView != null,\n onEntered: pushComplete,\n children: /*#__PURE__*/_jsx(_Fragment, {\n children: pushingView != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"pushing-view\",\n children: pushingView\n })\n })\n })]\n });\n}\nexport default Stack;\n//# sourceMappingURL=Stack.js.map","var _excluded = [\"children\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }\nimport React from 'react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction Option(_ref) {\n var {\n children\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n // eslint-disable-next-line react/jsx-props-no-spreading\n return /*#__PURE__*/_jsx(\"option\", _objectSpread(_objectSpread({}, props), {}, {\n children: children\n }));\n}\nexport default Option;\n//# sourceMappingURL=Option.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport React, { PureComponent } from 'react';\nimport \"./SelectValueList.css\";\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport Checkbox from \"./Checkbox.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass SelectValueList extends PureComponent {\n constructor(props) {\n super(props);\n _defineProperty(this, \"list\", void 0);\n _defineProperty(this, \"topRow\", void 0);\n _defineProperty(this, \"bottomRow\", void 0);\n _defineProperty(this, \"getCachedItem\", memoize((itemIndex, key, value, displayValue, rowHeight, isSelected, disabled) => {\n var style = {\n height: rowHeight\n };\n var text = displayValue != null ? displayValue : \"\".concat(value);\n return (\n /*#__PURE__*/\n // Tab index is needed so the item could be a related target in the blur event details\n _jsx(\"li\", {\n className: \"value-list-item\",\n style: style,\n tabIndex: -1,\n children: /*#__PURE__*/_jsx(Checkbox, {\n checked: isSelected,\n disabled: disabled,\n onChange: () => this.handleSelect(itemIndex),\n children: text\n })\n }, key)\n );\n }, {\n max: 1000\n }));\n _defineProperty(this, \"getCachedItems\", memoize((items, rowHeight, offset, disabled) => {\n var itemElements = [];\n for (var i = 0; i < items.length; i += 1) {\n var item = items[i];\n var {\n value,\n displayValue,\n isSelected\n } = item;\n var itemIndex = offset + i;\n var key = itemIndex;\n var element = this.getCachedItem(itemIndex, key, value, displayValue, rowHeight, isSelected, disabled);\n itemElements.push(element);\n }\n return itemElements;\n }, {\n max: 1\n }));\n this.handleBlur = this.handleBlur.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.list = /*#__PURE__*/React.createRef();\n this.topRow = null;\n this.bottomRow = null;\n }\n componentDidMount() {\n this.sendViewportUpdate();\n }\n componentDidUpdate() {\n this.sendViewportUpdate();\n }\n handleBlur(e) {\n if (!e.relatedTarget || this.list.current && e.relatedTarget instanceof HTMLElement && !this.list.current.contains(e.relatedTarget)) {\n // Next focused element is outside of the list\n var {\n onBlur\n } = this.props;\n onBlur === null || onBlur === void 0 || onBlur(e);\n }\n }\n handleScroll() {\n this.sendViewportUpdate();\n }\n handleSelect(itemIndex) {\n var {\n items,\n offset,\n onSelect\n } = this.props;\n var visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n var item = items[visibleItemIndex];\n var {\n value\n } = item;\n onSelect(itemIndex, value);\n } else {\n onSelect(itemIndex, null);\n }\n }\n sendViewportUpdate() {\n if (!this.list.current || this.list.current.clientHeight === 0) {\n return;\n }\n var {\n onViewportChange,\n rowHeight\n } = this.props;\n var top = this.list.current.scrollTop;\n var bottom = top + this.list.current.clientHeight;\n var topRow = Math.floor(top / rowHeight);\n var bottomRow = Math.ceil(bottom / rowHeight);\n if (this.topRow !== topRow || this.bottomRow !== bottomRow) {\n this.topRow = topRow;\n this.bottomRow = bottomRow;\n onViewportChange(topRow, bottomRow);\n }\n }\n getElement(itemIndex) {\n if (this.list.current == null) {\n return null;\n }\n var elements = this.list.current.querySelectorAll('.value-list-item');\n return elements[itemIndex];\n }\n scrollIntoView(index) {\n var element = this.getElement(index);\n element === null || element === void 0 || element.scrollIntoView({\n block: 'center'\n });\n }\n render() {\n var {\n className,\n disabled,\n isInvalid,\n items,\n itemCount,\n offset,\n rowHeight,\n 'data-testid': dataTestId\n } = this.props;\n var itemElements = this.getCachedItems(items, rowHeight, offset, disabled);\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('select-value-list-scroll-pane h-100 w-100', {\n 'is-invalid': isInvalid\n }, className),\n onBlur: this.handleBlur,\n onScroll: this.handleScroll,\n ref: this.list,\n \"data-testid\": dataTestId,\n children: /*#__PURE__*/_jsx(\"div\", {\n className: \"select-value-list\",\n style: {\n height: itemCount * rowHeight\n },\n children: /*#__PURE__*/_jsx(\"ol\", {\n className: \"select-value-list-content\",\n style: {\n position: 'absolute',\n height: items.length * rowHeight,\n top: offset * rowHeight,\n left: 0\n },\n children: itemElements\n })\n })\n });\n }\n}\n_defineProperty(SelectValueList, \"defaultProps\", {\n disabled: false,\n rowHeight: 21,\n onBlur: () => undefined,\n 'data-testid': undefined\n});\nexport default SelectValueList;\n//# sourceMappingURL=SelectValueList.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nexport class AssertionError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isAssertionFailed\", true);\n }\n}\nexport default AssertionError;\n//# sourceMappingURL=AssertionError.js.map","import { AssertionError } from \"./errors/index.js\";\nexport function isEditableGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.isEditable) !== undefined;\n}\nexport function assertIsEditableGridModel(model) {\n if (!isEditableGridModel(model)) {\n throw new AssertionError(\"Expected 'model' to be editable, but received \".concat(model));\n }\n}\n\n/**\n * Edit operation when applying multiple edits\n */\n\n/**\n * Model for an editable grid\n */\n//# sourceMappingURL=EditableGridModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { getOrThrow } from '@deephaven/utils';\nimport GridUtils from \"./GridUtils.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nexport { getOrThrow } from '@deephaven/utils';\n/* eslint class-methods-use-this: \"off\" */\n/* eslint react/destructuring-assignment: \"off\" */\n\n/**\n * Trim the provided map in place. Trims oldest inserted items down to the target size if the cache size is exceeded.\n * Instead of trimming one item on every tick, we trim half the items so there isn't a cache clear on every new item.\n * @param map The map to trim\n * @param cacheSize The maximum number of elements to cache\n * @param targetSize The number of elements to reduce the cache down to if `cacheSize` is exceeded\n */\nexport function trimMap(map) {\n var cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GridMetricCalculator.CACHE_SIZE;\n var targetSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Math.floor(cacheSize / 2);\n if (map.size > cacheSize) {\n var iter = map.keys();\n while (map.size > targetSize) {\n map.delete(iter.next().value);\n }\n }\n}\n\n/**\n * Get the coordinates of floating items in one dimension.\n * Can be used for getting the y coordinates of floating rows, or x coordinates of floating columns, calculated using the `sizeMap` passed in.\n * @param startCount The number of floating items at the start (ie. `floatingTopRowCount` for rows, `floatingLeftColumnCount` for columns)\n * @param endCount The number of floating items at the end (ie. `floatingBottomRowCount` for rows, `floatingRightColumnCount` for columns)\n * @param totalCount Total number of items in this dimension (ie. `rowCount` for rows, `columnCount` for columns)\n * @param max The max coordinate value (ie. `maxY` for rows, `maxX` for columns)\n * @param sizeMap Map from index to size of item (ie. `rowHeightMap` for rows, `columnWidthMap` for columns)\n */\nexport function getFloatingCoordinates(startCount, endCount, totalCount, max, sizeMap) {\n var coordinates = new Map();\n var x = 0;\n for (var i = 0; i < startCount && i < totalCount; i += 1) {\n coordinates.set(i, x);\n x += getOrThrow(sizeMap, i);\n }\n x = max;\n for (var _i = 0; _i < endCount && totalCount - _i - 1 >= 0; _i += 1) {\n x -= getOrThrow(sizeMap, totalCount - _i - 1);\n coordinates.set(totalCount - _i - 1, x);\n }\n return coordinates;\n}\n\n/**\n * Class to calculate all the metrics for drawing a grid.\n * Call getMetrics() with the state to get the full metrics.\n * Override this class and override the individual methods to provide additional functionality.\n */\nexport class GridMetricCalculator {\n constructor() {\n var {\n userColumnWidths = new Map(),\n userRowHeights = new Map(),\n calculatedColumnWidths = new Map(),\n calculatedRowHeights = new Map(),\n contentColumnWidths = new Map(),\n contentRowHeights = new Map(),\n fontWidthsLower = new Map(),\n fontWidthsUpper = new Map(),\n allCharWidths = new Map(),\n modelRows = new Map(),\n modelColumns = new Map(),\n movedRows = [],\n movedColumns = [],\n initialRowHeights = new Map(),\n initialColumnWidths = new Map()\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n /** The initial row heights if any overrides from the default calculated values */\n _defineProperty(this, \"initialRowHeights\", void 0);\n // Readonly so it should be safe to make public\n /** The initial column widths if any overrides from the default calculated values */\n _defineProperty(this, \"initialColumnWidths\", void 0);\n // Readonly so it should be safe to make public\n /** User set column widths */\n _defineProperty(this, \"userColumnWidths\", void 0);\n /** User set row heights */\n _defineProperty(this, \"userRowHeights\", void 0);\n /** Calculated column widths based on cell contents and caching largest value */\n _defineProperty(this, \"calculatedColumnWidths\", void 0);\n /** Calculated row heights based on cell contents and caching largest value */\n _defineProperty(this, \"calculatedRowHeights\", void 0);\n /** Calculated column widths based on cell contents */\n _defineProperty(this, \"contentColumnWidths\", void 0);\n /** Calculated row heights based on cell contents */\n _defineProperty(this, \"contentRowHeights\", void 0);\n /** Cache of fonts to estimated width of the smallest char */\n _defineProperty(this, \"fontWidthsLower\", void 0);\n /** Cache of fonts to estimated width of the largest char */\n _defineProperty(this, \"fontWidthsUpper\", void 0);\n /** Cache of fonts to width of all chars */\n _defineProperty(this, \"allCharWidths\", void 0);\n /** Map from visible index to model index for rows (e.g. reversing movedRows operations) */\n _defineProperty(this, \"modelRows\", void 0);\n /** Map from visible index to model index for columns (e.g. reversing movedColumns operations) */\n _defineProperty(this, \"modelColumns\", void 0);\n /** List of moved row operations. Need to track the previous value so we know if modelRows needs to be cleared. */\n _defineProperty(this, \"movedRows\", void 0);\n /** List of moved column operations. Need to track the previous value so we know if modelColumns needs to be cleared. */\n _defineProperty(this, \"movedColumns\", void 0);\n this.userColumnWidths = userColumnWidths;\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights = calculatedRowHeights;\n this.calculatedColumnWidths = calculatedColumnWidths;\n this.allCharWidths = allCharWidths;\n this.fontWidthsLower = fontWidthsLower;\n this.contentColumnWidths = contentColumnWidths;\n this.contentRowHeights = contentRowHeights;\n this.fontWidthsUpper = fontWidthsUpper;\n\n // Need to track the last moved rows/columns array so we know if we need to reset our models cache\n this.modelRows = modelRows;\n this.modelColumns = modelColumns;\n this.movedRows = movedRows;\n this.movedColumns = movedColumns;\n this.initialRowHeights = initialRowHeights;\n this.initialColumnWidths = initialColumnWidths;\n }\n\n /**\n * Get the metrics for the provided metric state\n * @params state The state to get metrics for\n * @returns The full metrics\n */\n getMetrics(state) {\n var {\n left,\n top,\n leftOffset,\n topOffset,\n width,\n height,\n theme,\n model,\n movedRows,\n movedColumns,\n draggingColumn\n } = state;\n var {\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n columnWidth,\n columnHeaderHeight,\n minScrollHandleSize,\n scrollBarSize\n } = theme;\n if (movedRows !== this.movedRows) {\n this.movedRows = movedRows;\n this.modelRows.clear();\n }\n if (movedColumns !== this.movedColumns) {\n this.movedColumns = movedColumns;\n this.modelColumns.clear();\n }\n var {\n columnCount,\n rowCount,\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnHeaderMaxDepth\n } = model;\n\n // Get some basic metrics\n var firstRow = this.getFirstRow(state);\n var firstColumn = this.getFirstColumn(state);\n var gridX = this.getGridX(state);\n var gridY = this.getGridY(state);\n var treePaddingX = isExpandableGridModel(model) && model.hasExpandableRows ? this.calculateTreePaddingX(state) : 0;\n var treePaddingY = 0; // We don't support trees on columns (at least not yet)\n\n var visibleRowHeights = this.getVisibleRowHeights(state);\n var [visibleColumnWidths, columnsForRender] = this.getVisibleColumnWidths(state, firstColumn, treePaddingX);\n\n // Calculate the metrics for the main grid\n var visibleRows = Array.from(visibleRowHeights.keys());\n var visibleColumns = Array.from(visibleColumnWidths.keys());\n\n // Add the floating row heights/column widths\n var allRowHeights = new Map([...visibleRowHeights, ...this.getFloatingRowHeights(state)]);\n var allColumnWidths = new Map([...visibleColumnWidths, ...this.getFloatingColumnWidths(state)]);\n var visibleColumnXs = this.getVisibleColumnXs(allColumnWidths, visibleColumns, leftOffset);\n var visibleRowYs = this.getVisibleRowYs(allRowHeights, visibleRows, topOffset);\n var bottom = visibleRows.length > 0 ? visibleRows[visibleRows.length - 1] : top;\n var right = visibleColumns.length > 0 ? visibleColumns[visibleColumns.length - 1] : left;\n var bottomViewport = this.getBottomViewport(state, visibleRows, visibleRowYs, allRowHeights);\n var rightViewport = this.getRightViewport(state, visibleColumns, visibleColumnXs, allColumnWidths);\n var floatingTopHeight = this.getFloatingTopHeight(state, allRowHeights);\n var floatingBottomHeight = this.getFloatingBottomHeight(state, allRowHeights);\n var floatingLeftWidth = this.getFloatingLeftWidth(state, allColumnWidths);\n var floatingRightWidth = this.getFloatingRightWidth(state, allColumnWidths);\n var columnWidthValues = Array.from(allColumnWidths.values());\n var rowHeightValues = Array.from(allRowHeights.values());\n var maxX = columnWidthValues.reduce((x, w) => x + w, 0) - leftOffset;\n var maxY = rowHeightValues.reduce((y, h) => y + h, 0) - topOffset;\n\n // How much total space the content will take\n var scrollableContentWidth = leftOffset + maxX + rowFooterWidth;\n var scrollableContentHeight = topOffset + maxY;\n\n // Visible space available in the canvas viewport\n var scrollableViewportWidth = width - gridX;\n var scrollableViewportHeight = height - gridY;\n var lastLeftWithoutScroll = this.getLastLeft(state, null, scrollableViewportWidth - rowFooterWidth);\n var lastLeftWithScroll = this.getLastLeft(state, null, scrollableViewportWidth - rowFooterWidth - scrollBarSize);\n var lastTopWithoutScroll = this.getLastTop(state, null, scrollableViewportHeight - floatingBottomHeight);\n var lastTopWithScroll = this.getLastTop(state, null, scrollableViewportHeight - floatingBottomHeight - scrollBarSize);\n var lastLeft = lastLeftWithScroll;\n var lastTop = lastTopWithScroll;\n if (lastLeftWithoutScroll === 0 && lastTopWithoutScroll === 0) {\n // Fully visible without any scroll bars\n lastLeft = 0;\n lastTop = 0;\n }\n\n // Calculate some metrics for the scroll bars\n var hasHorizontalBar = lastLeft > 0;\n var horizontalBarHeight = hasHorizontalBar ? scrollBarSize : 0;\n var hasVerticalBar = lastTop > 0;\n var verticalBarWidth = hasVerticalBar ? scrollBarSize : 0;\n var barLeft = gridX;\n var barTop = columnHeaderMaxDepth * columnHeaderHeight;\n var barWidth = width - barLeft - verticalBarWidth;\n var barHeight = height - barTop - horizontalBarHeight;\n\n // How big the scroll handle is relative to the bar\n var horizontalHandlePercent = columnCount === 1 ? barWidth / scrollableContentWidth : (columnCount - lastLeft) / columnCount;\n var verticalHandlePercent = rowCount === 1 ? barHeight / scrollableContentHeight : (rowCount - lastTop) / rowCount;\n var handleWidth = hasHorizontalBar ? clamp(barWidth * horizontalHandlePercent, minScrollHandleSize, barWidth - 1) : 0;\n var handleHeight = hasVerticalBar ? clamp(barHeight * verticalHandlePercent, minScrollHandleSize, barHeight - 1) : 0;\n var leftColumnWidth = getOrThrow(allColumnWidths, left, 0);\n var topRowHeight = getOrThrow(allRowHeights, top, 0);\n var leftOffsetPercent = leftColumnWidth > 0 ? leftOffset / leftColumnWidth : 0;\n var topOffsetPercent = topRowHeight > 0 ? topOffset / topRowHeight : 0;\n\n // How much of the available space has been scrolled\n var horizontalScrollPercent = columnCount === 1 ? leftOffset / (scrollableContentWidth - scrollableViewportWidth) : (left + leftOffsetPercent) / lastLeft;\n var verticalScrollPercent = rowCount === 1 ? topOffset / (scrollableContentHeight - scrollableViewportHeight) : (top + topOffsetPercent) / lastTop;\n var scrollX = hasHorizontalBar ? horizontalScrollPercent * (barWidth - handleWidth) : 0;\n var scrollY = hasVerticalBar ? verticalScrollPercent * (barHeight - handleHeight) : 0;\n\n // Now add the floating sections positions\n var floatingRows = [...Array(floatingTopRowCount).keys(), ...[...Array(floatingBottomRowCount).keys()].map(i => rowCount - i - 1)];\n var allRowYs = new Map([...visibleRowYs, ...this.getFloatingRowYs(state, allRowHeights, Math.floor(height - gridY - horizontalBarHeight))]);\n var floatingColumns = [...Array(floatingLeftColumnCount).keys(), ...[...Array(floatingRightColumnCount).keys()].map(i => columnCount - i - 1)];\n var allColumnXs = new Map([...visibleColumnXs, ...this.getFloatingColumnXs(state, allColumnWidths, Math.floor(width - gridX - verticalBarWidth))]);\n var draggingColumns = [];\n if (draggingColumn) {\n for (var i = draggingColumn.range[0]; i <= draggingColumn.range[1]; i += 1) {\n draggingColumns.push(i);\n if (!allColumnWidths.has(i)) {\n allColumnWidths.set(i, this.getVisibleColumnWidth(i, state));\n }\n if (!allColumnXs.has(i)) {\n allColumnXs.set(i, 0);\n }\n }\n }\n var allRows = visibleRows.concat(floatingRows);\n var allColumns = visibleColumns.concat(floatingColumns).concat(draggingColumns);\n var modelRows = this.getModelRows(allRows, state);\n var modelColumns = this.getModelColumns(allColumns, state);\n var visibleRowTreeBoxes = this.getVisibleRowTreeBoxes(allRowHeights, modelRows, state);\n\n // Calculate the visible viewport based on scroll position and floating sections\n var topVisible = this.getTopVisible(state, allRowYs, allRowHeights, visibleRows);\n var leftVisible = this.getLeftVisible(state, allColumnXs, allColumnWidths, visibleColumns);\n var bottomVisible = lastTop > 0 ? this.getBottomVisible(state, allRowYs, allRowHeights, visibleRows, gridY) : bottom;\n var rightVisible = lastLeft > 0 ? this.getRightVisible(state, allColumnXs, allColumnWidths, visibleColumns, gridX) : right;\n var {\n fontWidthsLower,\n fontWidthsUpper,\n userColumnWidths,\n userRowHeights,\n calculatedRowHeights,\n calculatedColumnWidths,\n contentColumnWidths,\n contentRowHeights\n } = this;\n return {\n // Row/Column metrics from model\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n rowCount,\n columnWidth,\n columnCount,\n columnHeaderHeight,\n // Floating row and column counts\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n // The grid offset from the top left\n gridX,\n gridY,\n // Index of non-hidden row/columns\n firstRow,\n firstColumn,\n // The amount of padding for tree (if applicable)\n treePaddingX,\n treePaddingY,\n // What viewport is currently visible, limited by data size\n left,\n top,\n bottom,\n right,\n topOffset,\n leftOffset,\n // Bottom and right that are fully visible, not overlapped by scroll bars or anything\n topVisible,\n leftVisible,\n bottomVisible,\n rightVisible,\n // Bottom and right of the viewport, not limited by data size\n bottomViewport,\n rightViewport,\n // Canvas width/height\n width,\n height,\n // Max x/y coordinate of the grid (does not include headers)\n maxX,\n maxY,\n // Last valid column/row that can be the left/top of the grid\n lastLeft,\n lastTop,\n // Scroll bar metrics\n barHeight,\n barTop,\n barWidth,\n barLeft,\n handleHeight,\n handleWidth,\n hasHorizontalBar,\n hasVerticalBar,\n verticalBarWidth,\n horizontalBarHeight,\n // The vertical x/y scroll amount\n scrollX,\n scrollY,\n scrollableContentWidth,\n scrollableContentHeight,\n scrollableViewportWidth,\n scrollableViewportHeight,\n // Array of visible (i.e., in the viewport) rows/columns, by VisibleIndex\n visibleRows,\n visibleColumns,\n // Array of visible, non-hidden columns, by VisibleIndex\n columnsForRender,\n // Map of the height/width of columns in the viewport (excluding floating columns)\n visibleRowHeights,\n visibleColumnWidths,\n // Map of the height/width of visible rows/columns without caching largest value\n contentColumnWidths,\n contentRowHeights,\n // Array of floating rows/columns, by grid index\n floatingRows,\n floatingColumns,\n // Array of all rows/columns, visible and floating, by grid index\n allRows,\n allColumns,\n // Map of the height/width of all rendered columns (visible + floating + dragging)\n allRowHeights,\n allColumnWidths,\n // Floating metrics\n floatingTopHeight,\n floatingBottomHeight,\n floatingLeftWidth,\n floatingRightWidth,\n // Map of the X/Y coordinates of the visible rows/columns, from the top left of the grid\n visibleRowYs,\n visibleColumnXs,\n // Map of the X/Y coordinates of all rows/columns, visible and floating, from the top left of the grid\n allRowYs,\n allColumnXs,\n // The boxes user can click on for expanding/collapsing tree rows\n visibleRowTreeBoxes,\n // Mapping from visible row indexes to the model row/columns they pull from\n modelRows,\n modelColumns,\n movedRows,\n movedColumns,\n // Map of the width of the fonts\n fontWidthsLower,\n fontWidthsUpper,\n // Map of user set column/row width/height\n userColumnWidths,\n userRowHeights,\n // Map of calculated row/column height/width\n calculatedRowHeights,\n calculatedColumnWidths,\n columnHeaderMaxDepth\n };\n }\n\n /**\n * The x offset of the grid\n * @param state The current grid state\n * @returns x value of the left side of the first cell\n */\n getGridX(state) {\n var {\n theme\n } = state;\n var {\n rowHeaderWidth\n } = theme;\n return rowHeaderWidth;\n }\n\n /**\n * The y offset of the grid\n * @param state The current grid state\n * @returns y value of the top side of the first cell\n */\n getGridY(state) {\n var {\n theme,\n model\n } = state;\n var {\n columnHeaderHeight\n } = theme;\n var {\n columnHeaderMaxDepth\n } = model;\n return columnHeaderMaxDepth * columnHeaderHeight;\n }\n\n /**\n * The height of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleRowHeights All the visible row heights\n * @returns The visible height in pixels\n */\n getVisibleHeight(state) {\n var visibleRowHeights = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingRowHeights(state);\n var {\n height,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var gridY = this.getGridY(state);\n var floatingBottomHeight = this.getFloatingBottomHeight(state, visibleRowHeights);\n var floatingTopHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n return height - floatingBottomHeight - floatingTopHeight - gridY - scrollBarSize;\n }\n\n /**\n * The width of the \"visible\" area (excludes floating areas)\n * @param state The current grid state\n * @param visibleColumnWidths All the visible column widths\n * @returns The visible width in pixels\n */\n getVisibleWidth(state) {\n var visibleColumnWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingColumnWidths(state);\n var {\n width,\n theme\n } = state;\n var {\n scrollBarSize,\n rowFooterWidth\n } = theme;\n var gridX = this.getGridX(state);\n var floatingRightWidth = this.getFloatingRightWidth(state, visibleColumnWidths);\n var floatingLeftWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n return width - floatingLeftWidth - floatingRightWidth - gridX - scrollBarSize - rowFooterWidth;\n }\n\n /**\n * Retrieve the index of the first non-hidden item\n * @param itemSizes The size of the items in this dimension\n * @param getModelIndex A function to map from the Index to the ModelIndex\n * @param state The current grid state\n * @returns The first item that is not hidden\n */\n getFirstIndex(itemSizes, getModelIndex, state) {\n // We only need to check at the very most the number of items the user has hidden + 1\n var max = itemSizes.size + 1;\n for (var i = 0; i < max; i += 1) {\n var modelIndex = getModelIndex(i, state);\n if (itemSizes.get(modelIndex) !== 0) {\n return i;\n }\n }\n return 0;\n }\n\n /**\n * Get the first column index that isn't hidden\n * @param state The current grid state\n * @returns The first column that is not hidden\n */\n getFirstColumn(state) {\n return this.getFirstIndex(this.userColumnWidths, this.getModelColumn.bind(this), state);\n }\n\n /**\n * Get the first row index that isn't hidden\n * @param state The current grid state\n * @returns The first row that is not hidden\n */\n getFirstRow(state) {\n return this.getFirstIndex(this.userRowHeights, this.getModelRow.bind(this), state);\n }\n\n /**\n * Get the last column that can be the left most column (e.g. scrolled to the right)\n * If no right column is provided, then the last column is used.\n * @param state The current grid state\n * @param right The right-most column to be visible, or null to default to last cell\n * @param visibleWidth The width of the \"visible\" area (excluding floating items)\n * @returns The index of the last left visible column\n */\n getLastLeft(state, right, visibleWidth) {\n var {\n model\n } = state;\n var {\n columnCount,\n floatingRightColumnCount\n } = model;\n if (columnCount === 0) {\n return 0;\n }\n var lastLeft = Math.max(0, columnCount - floatingRightColumnCount - 1);\n if (right != null) {\n lastLeft = right;\n }\n var x = 0;\n while (lastLeft >= 0) {\n var columnWidth = this.getVisibleColumnWidth(lastLeft, state);\n x += columnWidth;\n if (x >= visibleWidth) {\n return clamp(lastLeft + 1, 0, right !== null && right !== void 0 ? right : columnCount - 1);\n }\n lastLeft -= 1;\n }\n return 0;\n }\n\n /**\n * The last row that can be the top row (e.g. scrolled to the bottom)\n * If no bottom row is provided, then the last row that is not floating is used\n * @param state The current grid state\n * @param bottom The bottom-most row to be visible, or null to default to last cell\n * @param visibleHeight The height of the \"visible\" area (excluding floating items)\n * @returns The index of the last top visible row\n */\n getLastTop(state, bottom, visibleHeight) {\n var {\n model\n } = state;\n var {\n rowCount,\n floatingBottomRowCount\n } = model;\n var lastTop = Math.max(0, rowCount - floatingBottomRowCount - 1);\n if (bottom != null) {\n lastTop = bottom;\n }\n var y = 0;\n while (lastTop >= 0) {\n var rowHeight = this.getVisibleRowHeight(lastTop, state);\n y += rowHeight;\n if (y >= visibleHeight) {\n return clamp(lastTop + 1, 0, rowCount - 1);\n }\n lastTop -= 1;\n }\n return 0;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `topVisible` is completely visible, taking the floating rows into account.\n * The `top` row is at the top underneath any floating rows, whereas `topVisible` is visible below the floating rows.\n * If there are no floating rows, they should be the same value.\n * @param state The grid metric state\n * @param topVisible The top row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForTopVisible(state, topVisible) {\n var floatingTopHeight = this.getFloatingTopHeight(state);\n var top = topVisible;\n var y = 0;\n while (top > 0 && y < floatingTopHeight) {\n top -= 1;\n y += this.getVisibleRowHeight(top, state);\n }\n return top;\n }\n\n /**\n * Retrieve the top row to scroll to so the passed in `bottomVisible` is completely visible\n * at the bottom of the visible viewport, taking the floating rows into account.\n * @param state The grid metric state\n * @param bottomVisible The bottom row to be visible\n * @returns The index of the top row to scroll to (under the floating top rows)\n */\n getTopForBottomVisible(state, bottomVisible) {\n var {\n height,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var gridY = this.getGridY(state);\n var floatingBottomHeight = this.getFloatingBottomHeight(state);\n // Account for scrollbar space to match lastTop calculation\n var availableHeight = height - gridY - floatingBottomHeight - scrollBarSize;\n return this.getLastTop(state, bottomVisible, availableHeight);\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `leftVisible` is completely visible\n * at the left of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param leftVisible The left column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForLeftVisible(state, leftVisible) {\n var floatingLeftWidth = this.getFloatingLeftWidth(state);\n var left = leftVisible;\n var x = 0;\n while (left > 0 && x < floatingLeftWidth) {\n left -= 1;\n x += this.getVisibleColumnWidth(left, state);\n }\n return left;\n }\n\n /**\n * Retrieve the left column to scroll to so the passed in `rightVisible` is completely visible\n * at the right of the visible viewport, taking the floating columns into account.\n * @param state The grid metric state\n * @param rightVisible The right column to be visible\n * @returns The index of the left column to scroll to (under the floating left columns)\n */\n getLeftForRightVisible(state, rightVisible) {\n var {\n width,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var gridX = this.getGridX(state);\n var floatingRightWidth = this.getFloatingRightWidth(state);\n // Account for scrollbar space to match lastLeft calculation\n var availableWidth = width - gridX - floatingRightWidth - scrollBarSize;\n return this.getLastLeft(state, rightVisible, availableWidth);\n }\n\n /**\n * Retrieve a map of the height of each floating row\n * @param state The grid metric state\n * @returns The heights of all the floating rows\n */\n getFloatingRowHeights(state) {\n var {\n model\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = model;\n var rowHeights = new Map();\n for (var i = 0; i < floatingTopRowCount && i < rowCount; i += 1) {\n rowHeights.set(i, this.getVisibleRowHeight(i, state));\n }\n for (var _i2 = 0; _i2 < floatingBottomRowCount && rowCount - _i2 - 1 >= 0; _i2 += 1) {\n var row = rowCount - _i2 - 1;\n rowHeights.set(row, this.getVisibleRowHeight(row, state));\n }\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the height of all the visible rows (non-floating)\n * @param state The grid metric state\n * @returns The heights of all the visible rows\n */\n getVisibleRowHeights(state) {\n var {\n top,\n topOffset,\n height,\n model\n } = state;\n var y = 0;\n var row = top;\n var rowHeights = new Map();\n var {\n rowCount,\n floatingBottomRowCount\n } = model;\n while (y < height + topOffset && row < rowCount - floatingBottomRowCount) {\n var rowHeight = this.getVisibleRowHeight(row, state);\n rowHeights.set(row, rowHeight);\n y += rowHeight;\n row += 1;\n }\n return rowHeights;\n }\n\n /**\n * Retrieve a map of the width of each floating column\n * @param state The grid metric state\n * @param firstColumn The first non-hidden column\n * @param treePaddingX The amount of padding taken up for the tree expansion buttons\n * @returns The widths of all the floating columns\n */\n getFloatingColumnWidths(state) {\n var firstColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFirstColumn(state);\n var treePaddingX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.calculateTreePaddingX(state);\n var {\n model\n } = state;\n var {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount\n } = model;\n var columnWidths = new Map();\n for (var i = 0; i < floatingLeftColumnCount && i < columnCount; i += 1) {\n columnWidths.set(i, this.getVisibleColumnWidth(i, state, firstColumn, treePaddingX));\n }\n for (var _i3 = 0; _i3 < floatingRightColumnCount && columnCount - _i3 - 1 >= 0; _i3 += 1) {\n var column = columnCount - _i3 - 1;\n columnWidths.set(column, this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX));\n }\n return columnWidths;\n }\n\n /**\n * Retrieve a map of the width of all the visible columns (non-floating)\n * @param state The grid metric state\n * @returns The widths of all the visible columns and an array of visible, non-hidden 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 columnsForRender = [];\n var {\n columnCount,\n floatingRightColumnCount\n } = model;\n while (x < width + leftOffset && column < columnCount - floatingRightColumnCount) {\n var columnWidth = this.getVisibleColumnWidth(column, state, firstColumn, treePaddingX);\n columnWidths.set(column, columnWidth);\n if (columnWidth > 0) {\n columnsForRender.push(column);\n }\n x += columnWidth;\n column += 1;\n }\n return [columnWidths, columnsForRender];\n }\n\n /**\n * Retrieve a map of all the floating columns to their x coordinate\n * @param state The grid metric state\n * @param columnWidthMap Map from visible index to column width\n * @param maxX The maximum X size for the grid\n * @returns Map of the x coordinate of all floating columns\n */\n getFloatingColumnXs(state, columnWidthMap, maxX) {\n var {\n model\n } = state;\n var {\n columnCount,\n floatingLeftColumnCount,\n floatingRightColumnCount\n } = model;\n return getFloatingCoordinates(floatingLeftColumnCount, floatingRightColumnCount, columnCount, maxX, columnWidthMap);\n }\n\n /**\n * Retrieve a map of all the visible columns to their x coordinate.\n * Starts at leftOffset with the first index in `visibleColumns`, then\n * calculates all the coordinates from there\n * @param visibleColumnWidths Map of visible column index to widths\n * @param visibleColumns All visible columns\n * @param leftOffset The left scroll offset\n * @returns Map of the x coordinate of all visible columns\n */\n getVisibleColumnXs(visibleColumnWidths, visibleColumns, leftOffset) {\n var visibleColumnXs = new Map();\n var x = -leftOffset;\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var column = visibleColumns[i];\n var columnWidth = getOrThrow(visibleColumnWidths, column);\n visibleColumnXs.set(column, x);\n x += columnWidth;\n }\n return visibleColumnXs;\n }\n\n /**\n * Retrieve a map of all the floating rows to their y coordinate\n * @param state The grid metric state\n * @param rowHeightMap Map of visible index to row height\n * @param maxY The maximum Y size for the grid\n * @returns Map of the y coordinate of all floating rows\n */\n getFloatingRowYs(state, rowHeightMap, maxY) {\n var {\n model\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = model;\n return getFloatingCoordinates(floatingTopRowCount, floatingBottomRowCount, rowCount, maxY, rowHeightMap);\n }\n\n /**\n * Retrieve a map of all the visible rows to their y coordinate.\n * Starts at topOffset with the first index in `visibleRows`, then\n * calculates all the coordinates from there\n * @param visibleRowHeights Map of visible row index to heights\n * @param visibleRows All visible rows\n * @param topOffset The top scroll offset\n * @returns Map of the y coordinate of all visible rows\n */\n getVisibleRowYs(visibleRowHeights, visibleRows, topOffset) {\n var visibleRowYs = new Map();\n var y = -topOffset;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var rowHeight = getOrThrow(visibleRowHeights, row);\n visibleRowYs.set(row, y);\n y += rowHeight;\n }\n return visibleRowYs;\n }\n\n /**\n * Calculates the tree box click areas that are visible. In relation to the columnX/rowY\n * @param visibleRowHeights Map of visible index to row height\n * @param modelRows Map from visible `Index` to `ModelIndex`\n * @param state The grid metric state\n * @returns Coordinates of tree boxes for each row\n */\n getVisibleRowTreeBoxes(visibleRowHeights, modelRows, state) {\n var visibleRowTreeBoxes = new Map();\n var {\n model,\n theme\n } = state;\n var {\n treeDepthIndent,\n treeHorizontalPadding\n } = theme;\n if (isExpandableGridModel(model) && model.hasExpandableRows) {\n visibleRowHeights.forEach((rowHeight, row) => {\n var modelRow = getOrThrow(modelRows, row);\n if (model.isRowExpandable(modelRow)) {\n var depth = model.depthForRow(modelRow);\n var x1 = depth * treeDepthIndent + treeHorizontalPadding;\n var x2 = (depth + 1) * treeDepthIndent + treeHorizontalPadding;\n var y1 = 0;\n var y2 = rowHeight;\n visibleRowTreeBoxes.set(row, {\n x1,\n y1,\n x2,\n y2\n });\n }\n });\n }\n return visibleRowTreeBoxes;\n }\n\n /**\n * Get the total width of the floating columns on the left\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating left section\n */\n getFloatingLeftWidth(state) {\n var columnWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingColumnWidths(state);\n var {\n model\n } = state;\n var {\n floatingLeftColumnCount\n } = model;\n var floatingWidth = 0;\n for (var i = 0; i < floatingLeftColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, i);\n }\n return floatingWidth;\n }\n\n /**\n * Get the total width of the floating columns on the right\n * @param state The grid metric state\n * @param columnWidths Map of column index to width\n * @returns The total width of the floating right section\n */\n getFloatingRightWidth(state) {\n var columnWidths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingColumnWidths(state);\n var {\n model\n } = state;\n var {\n floatingRightColumnCount,\n columnCount\n } = model;\n var floatingWidth = 0;\n for (var i = 0; i < floatingRightColumnCount; i += 1) {\n floatingWidth += getOrThrow(columnWidths, columnCount - i - 1);\n }\n return floatingWidth;\n }\n\n /**\n * Get the total height of the floating rows on the top\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating top section\n */\n getFloatingTopHeight(state) {\n var rowHeights = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingRowHeights(state);\n var {\n model\n } = state;\n var {\n floatingTopRowCount\n } = model;\n var floatingHeight = 0;\n for (var i = 0; i < floatingTopRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, i);\n }\n return floatingHeight;\n }\n\n /**\n * Get the total height of the floating rows on the bottom\n * @param state The grid metric state\n * @param rowHeights Map of row index to height\n * @returns The total height of the floating bottom section\n */\n getFloatingBottomHeight(state) {\n var rowHeights = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getFloatingRowHeights(state);\n var {\n model\n } = state;\n var {\n floatingBottomRowCount,\n rowCount\n } = model;\n var floatingHeight = 0;\n for (var i = 0; i < floatingBottomRowCount; i += 1) {\n floatingHeight += getOrThrow(rowHeights, rowCount - i - 1);\n }\n return floatingHeight;\n }\n\n /**\n * Retrieve the index of the first fully visible row in the \"visible\" viewport of the grid.\n * E.g. First row visible after the floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @returns Index of the top visible row\n */\n getTopVisible(state, visibleRowYs, visibleRowHeights, visibleRows) {\n var floatingHeight = this.getFloatingTopHeight(state, visibleRowHeights);\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var y = getOrThrow(visibleRowYs, row);\n if (y >= floatingHeight) {\n return row;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the first fully visible column in the \"visible\" viewport of the grid.\n * E.g. First column visible after the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible row indexes\n * @returns Index of the left visible column\n */\n getLeftVisible(state, visibleColumnXs, visibleColumnWidths, visibleColumns) {\n var floatingWidth = this.getFloatingLeftWidth(state, visibleColumnWidths);\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var column = visibleColumns[i];\n var x = getOrThrow(visibleColumnXs, column);\n if (x >= floatingWidth) {\n return column;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible row in the \"visible\" viewport of the grid.\n * E.g. Last row visible before the bottom floating rows, provided the visible rows.\n * @param state The grid metric state\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @param visibleRows Array of visible row indexes\n * @param gridY The starting y coordinate of the grid\n * @returns Index of the bottom visible row\n */\n getBottomVisible(state, visibleRowYs, visibleRowHeights, visibleRows, gridY) {\n var {\n height,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var floatingHeight = this.getFloatingBottomHeight(state, visibleRowHeights);\n var visibleHeight = height - gridY - scrollBarSize - floatingHeight;\n for (var i = visibleRows.length - 1; i >= 0; i -= 1) {\n var row = visibleRows[i];\n var rowY = getOrThrow(visibleRowYs, row);\n var rowHeight = getOrThrow(visibleRowHeights, row);\n if (rowY + rowHeight <= visibleHeight) {\n return row;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the index of the last fully visible column in the \"visible\" viewport of the grid.\n * E.g. Last column visible before the floating columns, provided the visible columns.\n * @param state The grid metric state\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to widths\n * @param visibleColumns Array of visible column indexes\n * @returns Index of the right visible column\n */\n getRightVisible(state, visibleColumnXs, visibleColumnWidths, visibleColumns, gridX) {\n var {\n width,\n theme\n } = state;\n var {\n scrollBarSize\n } = theme;\n var floatingWidth = this.getFloatingRightWidth(state, visibleColumnWidths);\n var visibleWidth = width - gridX - scrollBarSize - floatingWidth;\n for (var i = visibleColumns.length - 1; i >= 0; i -= 1) {\n var column = visibleColumns[i];\n var columnX = getOrThrow(visibleColumnXs, column);\n var columnWidth = getOrThrow(visibleColumnWidths, column);\n if (columnX + columnWidth <= visibleWidth) {\n return column;\n }\n }\n return 0;\n }\n\n /**\n * Retrieve the possible bottom of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleRows Array of visible row indexes\n * @param visibleRowYs Map of row index to y coordinate\n * @param visibleRowHeights Map of row index to height\n * @returns The index of the bottom viewport possible\n */\n getBottomViewport(state, visibleRows, visibleRowYs, visibleRowHeights) {\n var {\n height,\n theme\n } = state;\n var {\n rowHeight\n } = theme;\n return this.getLastIndexViewport(visibleRows, visibleRowYs, visibleRowHeights, height, rowHeight);\n }\n\n /**\n * Retrieve the possible right of the visible viewport (not limited by data size)\n * @param state The grid metric state\n * @param visibleColumns Array of visible column indexes\n * @param visibleColumnXs Map of column index to x coordinate\n * @param visibleColumnWidths Map of column index to width\n * @returns The index of the right viewport possible\n */\n getRightViewport(state, visibleColumns, visibleColumnXs, visibleColumnWidths) {\n var {\n width,\n theme\n } = state;\n var {\n columnWidth\n } = theme;\n return this.getLastIndexViewport(visibleColumns, visibleColumnXs, visibleColumnWidths, width, columnWidth);\n }\n\n /**\n * Get the Index of the of the last index visible\n * @param items Array of visible item indexes\n * @param itemXs Map of index to coordinate\n * @param itemSizes Map of index to size\n * @param maxSize Full size of the grid\n * @param defaultItemSize Default size of an item\n * @returns The Index of the last index visible\n */\n getLastIndexViewport(items, itemXs, itemSizes, maxSize, defaultItemSize) {\n var lastIndex = 0;\n var dataSize = 0;\n if (items.length > 0) {\n lastIndex = items[items.length - 1];\n dataSize = getOrThrow(itemXs, lastIndex) + getOrThrow(itemSizes, lastIndex);\n }\n if (dataSize < maxSize) {\n lastIndex += Math.ceil((maxSize - dataSize) / defaultItemSize);\n }\n return lastIndex;\n }\n\n /**\n * Get the size from the provided size map of the specified item\n * @param modelIndex The model index to get the size for\n * @param userSizes The user set sizes\n * @param getDefaultSize Method to get the default size for this item\n * @returns The size from the provided size map of the specified item\n */\n getVisibleItemSize(modelIndex, userSizes, getDefaultSize) {\n var _userSizes$get;\n return (_userSizes$get = userSizes.get(modelIndex)) !== null && _userSizes$get !== void 0 ? _userSizes$get : getDefaultSize();\n }\n\n /**\n * Get the height of the specified row\n * @param row Index of the row to get the height of\n * @param state The grid metric state\n * @returns The height of the row specified\n */\n getVisibleRowHeight(row, state) {\n var modelRow = this.getModelRow(row, state);\n var calculatedHeight = this.calculateRowHeight(row, modelRow, state); // Need to call this so calculated map is always populated\n\n return this.getVisibleItemSize(modelRow, this.userRowHeights, () => {\n var initialHeight = this.initialRowHeights.get(modelRow);\n if (initialHeight !== undefined) {\n return initialHeight;\n }\n return calculatedHeight;\n });\n }\n\n /**\n * Get the width of the specified column\n * @param column Index of the column to get the width of\n * @param state The grid metric state\n * @param firstColumn Index of first visible column\n * @param treePaddingX The amount of tree padding to add to the first visible column\n * @returns The width of the column\n */\n getVisibleColumnWidth(column, state) {\n var firstColumn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.getFirstColumn(state);\n var treePaddingX = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.calculateTreePaddingX(state);\n var modelColumn = this.getModelColumn(column, state);\n\n // Need to call this so calculated map is always populated\n var calculatedWidth = this.calculateColumnWidth(column, modelColumn, state, firstColumn, treePaddingX);\n return this.getVisibleItemSize(modelColumn, this.userColumnWidths, () => {\n var initialWidth = this.initialColumnWidths.get(modelColumn);\n if (initialWidth !== undefined) {\n return initialWidth;\n }\n return calculatedWidth;\n });\n }\n\n /**\n * Get a map of VisibleIndex to ModelIndex\n * @param visibleRows Array of visible row indexes\n * @param state The grid metric state\n * @returns Map of VisibleIndex to ModelIndex\n */\n getModelRows(visibleRows, state) {\n var modelRows = new Map();\n for (var i = 0; i < visibleRows.length; i += 1) {\n var visibleRow = visibleRows[i];\n var modelRow = this.getModelRow(visibleRow, state);\n modelRows.set(visibleRow, modelRow);\n }\n return modelRows;\n }\n\n /**\n * Get the ModelIndex of the specified row\n * @param visibleRow Index of the row\n * @param state The grid metric state\n * @returns ModelIndex of the row\n */\n getModelRow(visibleRow, state) {\n if (this.modelRows.has(visibleRow)) {\n return getOrThrow(this.modelRows, visibleRow);\n }\n var {\n movedRows\n } = state;\n var modelRow = GridUtils.getModelIndex(visibleRow, movedRows);\n this.modelRows.set(visibleRow, modelRow);\n return modelRow;\n }\n\n /**\n * Get a map of Index to ModelIndex. Applies the move operations to get the transformation.\n * @param visibleColumns Array of visible column indexes\n * @param state The grid metric state\n * @returns Map of Index to ModelIndex\n */\n getModelColumns(visibleColumns, state) {\n var modelColumns = new Map();\n for (var i = 0; i < visibleColumns.length; i += 1) {\n var visibleColumn = visibleColumns[i];\n var modelColumn = this.getModelColumn(visibleColumn, state);\n modelColumns.set(visibleColumn, modelColumn);\n }\n return modelColumns;\n }\n\n /**\n * Get the ModelIndex of the specified column\n * @param visibleColumn Index of the column\n * @param state The grid metric state\n * @returns ModelIndex of the column\n */\n getModelColumn(visibleColumn, state) {\n var hasVisibleColumn = this.modelColumns.has(visibleColumn);\n if (hasVisibleColumn) {\n return getOrThrow(this.modelColumns, visibleColumn);\n }\n var {\n movedColumns\n } = state;\n var modelColumn = GridUtils.getModelIndex(visibleColumn, movedColumns);\n this.modelColumns.set(visibleColumn, modelColumn);\n return modelColumn;\n }\n\n /**\n * Calculate the height of the row specified.\n * @param row Index of the row to calculate the height for\n * @param modelRow ModelIndex of the row to calculate the height\n * @param state The grid metric state\n * @returns The height of the row\n */\n calculateRowHeight(row, modelRow, state) {\n var {\n theme\n } = state;\n var {\n autoSizeRows,\n rowHeight\n } = theme;\n if (!autoSizeRows) {\n return rowHeight;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.contentRowHeights.set(modelRow, Math.ceil(rowHeight));\n trimMap(this.contentRowHeights);\n var cachedValue = this.calculatedRowHeights.get(modelRow);\n if (cachedValue != null && cachedValue > rowHeight) {\n return cachedValue;\n }\n\n // Not sure how to accurately get the height of text. For now just return the theme height.\n this.calculatedRowHeights.set(modelRow, Math.ceil(rowHeight));\n trimMap(this.calculatedRowHeights);\n return rowHeight;\n }\n\n /**\n * Calculates the column width based on the provided column model index\n * @param column Index of the column to calculate the width for\n * @param modelColumn ModelIndex of the column to calculate the width\n * @param state The grid metric state\n * @param firstColumn The first visible column\n * @param treePaddingX Tree padding offset for expandable rows\n * @returns The width of the column\n */\n calculateColumnWidth(column, modelColumn, state) {\n var firstColumn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.getFirstColumn(state);\n var treePaddingX = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.calculateTreePaddingX(state);\n var {\n theme\n } = state;\n var {\n autoSizeColumns,\n minColumnWidth,\n maxColumnWidth\n } = theme;\n if (!autoSizeColumns) {\n var {\n columnWidth: _columnWidth\n } = theme;\n return _columnWidth;\n }\n var cachedValue = this.calculatedColumnWidths.get(modelColumn);\n\n // Performance optimization: if the column is hidden and has a cached value, avoid recalculating until the column is shown again\n if (cachedValue != null && this.isColumnHidden(modelColumn)) {\n return cachedValue;\n }\n var headerWidth = this.calculateColumnHeaderWidth(modelColumn, state, maxColumnWidth);\n var dataWidth = this.calculateColumnDataWidth(modelColumn, state, maxColumnWidth);\n var columnWidth = Math.ceil(Math.max(headerWidth, dataWidth));\n columnWidth = Math.max(minColumnWidth, columnWidth);\n columnWidth = Math.min(maxColumnWidth, columnWidth);\n this.contentColumnWidths.set(modelColumn, columnWidth);\n trimMap(this.contentColumnWidths);\n if (cachedValue != null && cachedValue > columnWidth) {\n columnWidth = cachedValue;\n } else {\n this.calculatedColumnWidths.set(modelColumn, columnWidth);\n trimMap(this.calculatedColumnWidths);\n }\n if (column === firstColumn) {\n columnWidth += treePaddingX;\n }\n return columnWidth;\n }\n\n /**\n * Checks if a column is hidden either by a user setting the width to 0 or by initial width being 0\n * @param modelIndex the model index of the column to check\n * @returns true if the column is hidden, false otherwise\n */\n isColumnHidden(modelIndex) {\n var userSetWidth = this.userColumnWidths.get(modelIndex);\n // The column is hidden if the user set the width to 0 or if the initial width is 0 and the user hasn't set a width\n return userSetWidth === 0 || userSetWidth === undefined && this.initialColumnWidths.get(modelIndex) === 0;\n }\n\n /**\n * Calculate the width of the specified column's header\n * @param modelColumn ModelIndex of the column to get the header width for\n * @param state The grid metric state\n * @returns The calculated width of the column header\n */\n calculateColumnHeaderWidth(modelColumn, state, maxColumnWidth) {\n var {\n model,\n theme,\n context\n } = state;\n var {\n headerHorizontalPadding,\n headerFont\n } = theme;\n this.calculateLowerFontWidth(headerFont, context);\n this.calculateUpperFontWidth(headerFont, context);\n var totalPadding = headerHorizontalPadding * 2;\n var headerText = model.textForColumnHeader(modelColumn, 0);\n if (headerText !== undefined && headerText !== '') {\n return this.calculateTextWidth(context, headerFont, headerText, maxColumnWidth - totalPadding) + totalPadding;\n }\n return totalPadding;\n }\n\n /**\n * Calculate the width of the specified column's data\n * @param modelColumn ModelIndex of the column to get the data width for\n * @param state The grid metric state\n * @returns The calculated width of the column data\n */\n calculateColumnDataWidth(modelColumn, state, maxColumnWidth) {\n var {\n top,\n height,\n width,\n model,\n theme,\n context\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n rowCount\n } = model;\n var {\n font,\n cellHorizontalPadding,\n rowHeight,\n rowHeaderWidth,\n rowFooterWidth,\n scrollBarSize,\n dataBarHorizontalPadding\n } = theme;\n this.calculateLowerFontWidth(font, context);\n this.calculateUpperFontWidth(font, context);\n var columnWidth = 0;\n var gridY = this.getGridY(state);\n var rowsPerPage = Math.floor((height - gridY) / rowHeight);\n var bottom = Math.ceil(top + rowsPerPage);\n var cellPadding = cellHorizontalPadding * 2;\n GridUtils.iterateAllItems(top, bottom, floatingTopRowCount, floatingBottomRowCount, rowCount, row => {\n var modelRow = this.getModelRow(row, state);\n var text = model.textForCell(modelColumn, modelRow);\n var cellRenderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellWidth = 0;\n if (text) {\n cellWidth = this.calculateTextWidth(context, font, text, maxColumnWidth - cellPadding) + cellPadding;\n }\n if (cellRenderType === 'dataBar') {\n cellWidth += dataBarHorizontalPadding;\n }\n columnWidth = Math.max(columnWidth, cellWidth);\n });\n columnWidth = Math.max(Math.min(columnWidth, (width - rowHeaderWidth - scrollBarSize - rowFooterWidth) * GridMetricCalculator.MAX_COLUMN_WIDTH), cellPadding);\n return columnWidth;\n }\n\n /**\n * Calculates the width of a string using widths of individual and pairs of characters to take into account font kerning\n * @param context The canvas rendering context\n * @param font The font to get the width for\n * @param text The text to calculate the width for\n * @param maxWidth The maximum width to calculate to\n */\n calculateTextWidth(context, font, text, maxWidth) {\n if (text.length === 0) return 0;\n context.font = font;\n if (!this.allCharWidths.has(font)) {\n this.allCharWidths.set(font, new Map());\n }\n var charWidths = getOrThrow(this.allCharWidths, font);\n var result = 0;\n for (var i = 0; i < text.length; i += 1) {\n var char = text[i];\n var nextChar = text[i + 1];\n if (!charWidths.has(char)) {\n charWidths.set(char, context.measureText(char).width);\n }\n if (nextChar !== undefined) {\n if (!charWidths.has(nextChar)) {\n charWidths.set(nextChar, context.measureText(nextChar).width);\n }\n var pair = char + nextChar;\n if (!charWidths.has(pair)) {\n charWidths.set(pair, context.measureText(pair).width);\n }\n result += getOrThrow(charWidths, pair);\n if (i > 0) {\n // Need to remove the current character that was already counted in the previous pair\n result -= getOrThrow(charWidths, char);\n }\n if (maxWidth !== undefined && result > maxWidth) {\n return maxWidth;\n }\n } else if (result === 0) {\n // On last char and no pair found before that => Only one char in string\n result = getOrThrow(charWidths, char);\n }\n }\n return result;\n }\n\n /**\n * The coordinate for where the tree padding should be drawn\n * @param state The grid metric state\n * @returns The coordinate for tree padding\n */\n calculateTreePaddingX(state) {\n var {\n top,\n height,\n model,\n theme\n } = state;\n var {\n rowHeight,\n treeDepthIndent\n } = theme;\n if (!isExpandableGridModel(model) || !model.hasExpandableRows) {\n return 0;\n }\n var treePadding = 0;\n var rowsPerPage = height / rowHeight;\n var bottom = Math.ceil(top + rowsPerPage);\n for (var row = top; row <= bottom; row += 1) {\n var modelRow = this.getModelRow(row, state);\n var depth = model.depthForRow(modelRow);\n treePadding = Math.max(treePadding, treeDepthIndent * (depth + 1));\n }\n return treePadding;\n }\n\n /**\n * Calculates the lower bound width of a character of the provided font.\n * @param font The font to get the width for\n * @param context The canvas rendering context\n */\n calculateLowerFontWidth(font, context) {\n if (this.fontWidthsLower.has(font)) {\n return;\n }\n context.font = font;\n // Assume char `.` is the smallest character\n var textMetrics = context.measureText('.');\n var {\n width\n } = textMetrics;\n\n // context.font changes the string a little bit, e.g. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidthsLower.set(font, width);\n this.fontWidthsLower.set(context.font, width);\n }\n\n /**\n * Calculates the upper bound width of a character of the provided font.\n * @param font The font to get the width for\n * @param context The canvas rendering context\n */\n calculateUpperFontWidth(font, context) {\n if (this.fontWidthsUpper.has(font)) {\n return;\n }\n context.font = font;\n // Assume char `m` is the largest character\n var textMetrics = context.measureText('m');\n var {\n width\n } = textMetrics;\n\n // context.font changes the string a little bit, e.g. '10px Arial, sans serif' => '10px Arial, \"sans serif\"'\n // Rather than require checking with the correct font def (theme, or context font), just key it to both\n this.fontWidthsUpper.set(font, width);\n this.fontWidthsUpper.set(context.font, width);\n }\n\n /**\n * Sets the width for the specified column\n * @param column The column model index to set\n * @param size The size to set it to\n */\n setColumnWidth(column, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.set(column, Math.ceil(size));\n trimMap(userColumnWidths);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Resets the column width for the specified column to the calculated width\n * @param column The column model index to reset\n */\n resetColumnWidth(column) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userColumnWidths = new Map(this.userColumnWidths);\n userColumnWidths.delete(column);\n this.userColumnWidths = userColumnWidths;\n }\n\n /**\n * Sets the calculated width for the specified column\n * @param column The column model index to set\n * @param size The size to set it to\n */\n setCalculatedColumnWidth(column, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var calculatedColumnWidths = new Map(this.calculatedColumnWidths);\n calculatedColumnWidths.set(column, Math.ceil(size));\n trimMap(calculatedColumnWidths);\n this.calculatedColumnWidths = calculatedColumnWidths;\n }\n\n /**\n * Resets all the calculated column widths\n * Useful if the theme minimum column width changes\n */\n resetCalculatedColumnWidths() {\n this.calculatedColumnWidths = new Map();\n }\n\n /**\n * Sets the width for the specified row\n * @param row The row model index to set\n * @param size The size to set it to\n */\n setRowHeight(row, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userRowHeights = new Map(this.userRowHeights);\n userRowHeights.set(row, Math.ceil(size));\n trimMap(userRowHeights);\n this.userRowHeights = userRowHeights;\n }\n\n /**\n * Resets the row height for the specified row to the calculated height\n * @param row The row model index to reset\n */\n resetRowHeight(row) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var userRowHeights = new Map(this.userRowHeights);\n userRowHeights.delete(row);\n this.userRowHeights = userRowHeights;\n this.calculatedRowHeights.delete(row);\n }\n\n /**\n * Sets the calculated height for the specified row\n * @param row The column model index to set\n * @param size The size to set it to\n */\n setCalculatedRowHeight(row, size) {\n // Always use a new instance of the map so any consumer of the metrics knows there has been a change\n var calculatedRowHeights = new Map(this.calculatedRowHeights);\n calculatedRowHeights.set(row, Math.ceil(size));\n trimMap(calculatedRowHeights);\n this.calculatedColumnWidths = calculatedRowHeights;\n }\n\n /**\n * Resets all the calculated row heights\n * Useful if the theme row height changes\n */\n resetCalculatedRowHeights() {\n this.calculatedRowHeights = new Map();\n }\n}\n/** The size of the caches this calculator stores */\n_defineProperty(GridMetricCalculator, \"CACHE_SIZE\", 10000);\n/** The maximum column width as a percentage of the full grid */\n_defineProperty(GridMetricCalculator, \"MAX_COLUMN_WIDTH\", 0.8);\nexport default GridMetricCalculator;\n//# sourceMappingURL=GridMetricCalculator.js.map","/** A color parsed as CSS color value, eg. '#FF0000' */\n\n/** A nullable color, eg. pass `null` to skip drawing this item */\n\n/** One or more colors parsed as CSS color value separated by space, eg. '#FF0000 #00FF00' */\n\n/** A font parsed as CSS font value */\n\n/**\n * Default theme for a Grid.\n */\nvar defaultTheme = Object.freeze({\n allowColumnResize: true,\n allowRowResize: true,\n autoSelectRow: false,\n // Select the full row upon selection\n autoSelectColumn: false,\n // Select the full column upon selection\n autoSizeColumns: true,\n // Automatically size the columns to fit content\n autoSizeRows: true,\n backgroundColor: '#000000',\n black: '#000000',\n white: '#ffffff',\n cellHorizontalPadding: 5,\n headerHorizontalPadding: 5,\n font: '12px Arial, sans-serif',\n gridColumnColor: '#8f8f8f66',\n gridRowColor: '#8f8f8f66',\n headerBackgroundColor: '#222222',\n headerSeparatorColor: '#000000',\n headerSeparatorHoverColor: '#888888',\n headerSeparatorHandleSize: 5,\n headerHiddenSeparatorSize: 5,\n headerHiddenSeparatorHoverColor: '#8888FF',\n headerColor: '#d5d5d5',\n headerFont: '10px Arial, sans-serif',\n columnHoverBackgroundColor: '#444444',\n selectedColumnHoverBackgroundColor: '#494949',\n rowBackgroundColors: '#333333 #222222',\n rowHoverBackgroundColor: '#444444',\n selectedRowHoverBackgroundColor: '#494949',\n minScrollHandleSize: 50,\n scrollBarBackgroundColor: '#111111',\n scrollBarHoverBackgroundColor: '#333333',\n scrollBarCasingColor: '#000000',\n scrollBarCornerColor: '#000000',\n scrollBarColor: '#555555',\n scrollBarHoverColor: '#888888',\n scrollBarActiveColor: '#AAAAAA',\n scrollBarSize: 12,\n scrollBarHoverSize: 16,\n scrollBarCasingWidth: 1,\n scrollSnapToColumn: false,\n scrollSnapToRow: false,\n activeCellSelectionBorderWidth: 2,\n selectionColor: '#4286f433',\n selectionOutlineColor: '#4286f4',\n selectionOutlineCasingColor: '#222222',\n scrollBarSelectionTick: true,\n scrollBarSelectionTickColor: '#4286f433',\n scrollBarActiveSelectionTickColor: '#4286f480',\n shadowBlur: 8,\n shadowAlpha: 0.15,\n shadowColor: '#000000',\n textColor: '#ffffff',\n hyperlinkColor: '#4878ea',\n maxDepth: 6,\n treeDepthIndent: 10,\n treeHorizontalPadding: 5,\n treeLineColor: '#888888',\n treeMarkerColor: '#cccccc',\n treeMarkerHoverColor: '#ffffff',\n rowHeight: 20,\n columnWidth: 100,\n minRowHeight: 20,\n minColumnWidth: 55,\n maxColumnWidth: 600,\n columnHeaderHeight: 20,\n rowHeaderWidth: 30,\n rowFooterWidth: 0,\n // When resizing the header, will snap to the auto size of the header within this threshold\n headerResizeSnapThreshold: 10,\n headerResizeHiddenSnapThreshold: 8,\n allowColumnReorder: true,\n allowRowReorder: true,\n reorderOffset: 2,\n // Colors for the grid in floating sections\n floatingGridColumnColor: '#8f8f8f66',\n floatingGridRowColor: '#8f8f8f66',\n // Background row colors for grid in the floating sections\n floatingRowBackgroundColors: '#393939 #292929',\n // Divider colors between the floating parts and the grid\n floatingDividerOuterColor: '#000000',\n floatingDividerInnerColor: '#cccccc',\n // Databar\n zeroLineColor: '#888888',\n positiveBarColor: '#00ff00',\n negativeBarColor: '#ff0000',\n markerBarColor: '#ffffff',\n dataBarHorizontalPadding: 90\n});\nexport default defaultTheme;\n//# sourceMappingURL=GridTheme.js.map","import convert from 'color-convert';\nimport clamp from 'lodash.clamp';\n/**\n * Darken the provided colour\n * @param color Color in hex format to convert (with #)\n * @param depth Depth to convert the color to\n * @param maxDepth Maximum depth. Defaults to 6\n * @returns Darkened colour in hex format\n */\nexport function darkenForDepth(color, depth) {\n var maxDepth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 6;\n var lab = convert.hex.lab.raw(color);\n\n // determined via a trial an error approach to getting\n // something that works for both light and dark\n var modifier = lab[0] < 50 ? 17 : 10;\n lab[0] = Math.max(lab[0] - modifier / maxDepth * depth, 0);\n return \"#\".concat(convert.lab.hex(lab));\n}\n\n/**\n * Convert a hex colour to an rgba with specified alpha\n * @param color Color in hex format to convert (with #)\n * @param alpha Alpha to apply to the color\n * @returns Color with the newly applied alpha in rgba format\n */\nexport function colorWithAlpha(color, alpha) {\n var [r, g, b] = convert.hex.rgb(color);\n return \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(alpha, \")\");\n}\n\n/**\n * Converts a color in RGB to Oklab\n * Formula provided here: https://bottosson.github.io/posts/oklab/#converting-from-linear-srgb-to-oklab\n * @param color An RGB color\n * @returns The color but respresented as an Oklab color\n */\nvar linearSRGBToOklab = color => {\n var {\n r,\n g,\n b\n } = color;\n var l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\n var m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\n var s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\n var l2 = Math.cbrt(l);\n var m2 = Math.cbrt(m);\n var s2 = Math.cbrt(s);\n return {\n L: 0.2104542553 * l2 + 0.793617785 * m2 - 0.0040720468 * s2,\n a: 1.9779984951 * l2 - 2.428592205 * m2 + 0.4505937099 * s2,\n b: 0.0259040371 * l2 + 0.7827717662 * m2 - 0.808675766 * s2\n };\n};\n\n/**\n * Converts an Oklab color to RGB\n * Formula provided here: https://bottosson.github.io/posts/oklab/#converting-from-linear-srgb-to-oklab\n * @param color An Oklab color\n * @returns The given color but represented as a RGB color\n */\nvar OklabToLinearSRGB = color => {\n var {\n L,\n a,\n b\n } = color;\n var l2 = L + 0.3963377774 * a + 0.2158037573 * b;\n var m2 = L - 0.1055613458 * a - 0.0638541728 * b;\n var s2 = L - 0.0894841775 * a - 1.291485548 * b;\n var l = l2 * l2 * l2;\n var m = m2 * m2 * m2;\n var s = s2 * s2 * s2;\n return {\n r: clamp(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s, 0, 255),\n g: clamp(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s, 0, 255),\n b: clamp(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s, 0, 255)\n };\n};\n\n/**\n * Converts a hex color to RGB\n * Algorithm from https://stackoverflow.com/a/39077686/20005358\n * @param hex A hex color\n * @returns The RGB representation of the given color\n */\nvar hexToRgb = hex => {\n var _hex$replace$substrin, _hex$replace$substrin2;\n var rgbArray = (_hex$replace$substrin = (_hex$replace$substrin2 = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => \"#\".concat(r).concat(r).concat(g).concat(g).concat(b).concat(b)).substring(1).match(/.{2}/g)) === null || _hex$replace$substrin2 === void 0 ? void 0 : _hex$replace$substrin2.map(x => parseInt(x, 16))) !== null && _hex$replace$substrin !== void 0 ? _hex$replace$substrin : [0, 0, 0];\n return {\n r: rgbArray[0],\n g: rgbArray[1],\n b: rgbArray[2]\n };\n};\n\n/**\n * Converts a RGB color to hex\n * Algorithm from https://stackoverflow.com/a/39077686/20005358\n * @param color A RGB color\n * @returns The hexcode of the given color\n */\nvar rgbToHex = color => {\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n return \"#\".concat([r, g, b].map(x => {\n var hex = x.toString(16);\n return hex.length === 1 ? \"0\".concat(hex) : hex;\n }).join(''));\n};\n\n/**\n * Calculates a color given an interpolation factor between two given colors\n * @param color1 Color on one end\n * @param color2 Color on other end\n * @param factor The interpolation factor (0 to 1, 0 will be color1 while 1 will be color2)\n * @returns The color determined by the interpolation factor between the two colors\n */\nvar lerpColor = (color1, color2, factor) => {\n var {\n L: L1,\n a: a1,\n b: b1\n } = color1;\n var {\n L: L2,\n a: a2,\n b: b2\n } = color2;\n var L = L1 + (L2 - L1) * factor;\n var a = a1 + (a2 - a1) * factor;\n var b = b1 + (b2 - b1) * factor;\n return {\n L,\n a,\n b\n };\n};\nexport default {\n colorWithAlpha,\n darkenForDepth,\n linearSRGBToOklab,\n OklabToLinearSRGB,\n hexToRgb,\n rgbToHex,\n lerpColor\n};\n//# sourceMappingURL=GridColorUtils.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\n/**\n * Some events we listen to are a native mouse event, and others are wrapped with React's SyntheticEvent.\n * The GridMouseHandler shouldn't care though - the properties it accesses should be common on both types of events.\n */\n\n/**\n * Define a region in the grid that interacts with the mouse on a grid.\n * Return true from any of the events to indicate they're consumed, and stopPropagation/preventDefault will be called.\n */\nexport class GridMouseHandler {\n // What order this mouse handler should trigger in. Smaller numbers trigger first\n // Default to well below any of the GRID mouse handlers 100-1000+\n constructor() {\n var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 5000;\n _defineProperty(this, \"order\", void 0);\n // Cursor to use if this returns any truthy value including { stopPropagation: false, preventDefault: false }\n _defineProperty(this, \"cursor\", null);\n this.order = order;\n }\n onDown(gridPoint, grid, event) {\n return false;\n }\n onMove(gridPoint, grid, event) {\n return false;\n }\n onDrag(gridPoint, grid, event) {\n return false;\n }\n onLeave(gridPoint, grid, event) {\n return false;\n }\n onClick(gridPoint, grid, event) {\n return false;\n }\n onContextMenu(gridPoint, grid, event) {\n return false;\n }\n onDoubleClick(gridPoint, grid, event) {\n return false;\n }\n onUp(gridPoint, grid, event) {\n return false;\n }\n onWheel(gridPoint, grid, event) {\n return false;\n }\n}\nexport default GridMouseHandler;\n//# sourceMappingURL=GridMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\"; // The different properties that can be used by implementing classes, whether for rows or columns\n/**\n * Abstract class that should be extended for column/row behaviour\n * Override the necessary functions/properties\n */\nclass GridSeparatorMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n // The index where dragging the column separator started\n _defineProperty(this, \"draggingIndex\", void 0);\n // The columns in the order they're being resized\n _defineProperty(this, \"resizingItems\", []);\n // Columns that were hidden under the separator when starting a drag\n _defineProperty(this, \"hiddenItems\", []);\n // The target width of the columns being resized\n _defineProperty(this, \"targetSizes\", new Map());\n _defineProperty(this, \"dragOffset\", 0);\n } // Override/Implement these properties/functions\n // End of overrides\n\n onDown(gridPoint, grid) {\n var {\n metrics\n } = grid;\n var {\n model\n } = grid.props;\n var theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n var separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n var separatorIndex = separator.index;\n this.dragOffset = 0;\n this.draggingIndex = separatorIndex;\n this.resizingItems = [separatorIndex];\n this.hiddenItems = this.getHiddenItems(separatorIndex, metrics).reverse();\n this.targetSizes.clear();\n this.addTargetSize(metrics, separatorIndex);\n this.updateCursor(metrics, separatorIndex);\n this.updateSeparator(grid, separator);\n return true;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n var {\n metrics\n } = grid;\n var {\n model\n } = grid.props;\n var theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n var separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n this.updateCursor(metrics, separator.index);\n return true;\n }\n return false;\n }\n onDrag(gridPoint, grid) {\n if (this.draggingIndex == null) {\n return false;\n }\n var point = gridPoint[this.pointProperty];\n var {\n metricCalculator,\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var theme = grid.getTheme();\n var visibleOffsets = metrics[this.visibleOffsetProperty];\n var margin = metrics[this.marginProperty];\n var calculatedSizes = metrics[this.calculatedSizesProperty];\n var modelIndexes = metrics[this.modelIndexesProperty];\n var firstIndex = metrics[this.firstIndexProperty];\n var treePadding = metrics[this.treePaddingProperty];\n\n // New sizes are batched and applied after the loop to avoid updating state while calculating next step\n var newSizes = new Map();\n\n // Use a loop as we may need to resize multiple items if they drag quickly\n var resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n while (resizeIndex != null) {\n var itemOffset = getOrThrow(visibleOffsets, resizeIndex);\n var itemSize = point - margin - itemOffset - this.dragOffset;\n var _modelIndex = getOrThrow(modelIndexes, resizeIndex);\n var targetSize = this.targetSizes.get(_modelIndex);\n var isResizingMultiple = this.resizingItems.length > 1;\n var hiddenIndex = this.hiddenItems.indexOf(resizeIndex);\n var calculatedSize = calculatedSizes.get(_modelIndex);\n if (calculatedSize != null && resizeIndex === firstIndex) {\n calculatedSize += treePadding;\n }\n var newSize = itemSize;\n if (calculatedSize != null && Math.abs(itemSize - calculatedSize) <= theme.headerResizeSnapThreshold) {\n // Snapping behaviour to \"natural\" width\n newSize = calculatedSize;\n } else if (targetSize !== undefined && itemSize > targetSize && (isResizingMultiple && hiddenIndex !== 0 || hiddenIndex > 0)) {\n newSize = targetSize;\n } else if (itemSize <= theme.headerResizeHiddenSnapThreshold) {\n // Snapping to hidden item\n newSize = 0;\n }\n newSizes.set(_modelIndex, newSize);\n if (itemSize < -theme.headerResizeSnapThreshold && newSize === 0) {\n if (hiddenIndex >= 0 && isResizingMultiple) {\n var _this$targetSizes$get;\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n this.dragOffset -= (_this$targetSizes$get = this.targetSizes.get(getOrThrow(modelIndexes, resizeIndex))) !== null && _this$targetSizes$get !== void 0 ? _this$targetSizes$get : 0;\n } else {\n resizeIndex = this.getNextShownItem(resizeIndex, metrics);\n if (resizeIndex !== null) {\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n }\n }\n } else if (targetSize !== undefined && itemSize > targetSize + theme.headerResizeSnapThreshold && newSize === targetSize) {\n if (hiddenIndex > 0) {\n this.dragOffset += newSize;\n resizeIndex = this.hiddenItems[hiddenIndex - 1];\n this.resizingItems.push(resizeIndex);\n this.addTargetSize(metrics, resizeIndex);\n } else if (isResizingMultiple) {\n this.resizingItems.pop();\n this.removeTargetSize(metrics, resizeIndex);\n resizeIndex = this.resizingItems[this.resizingItems.length - 1];\n } else {\n resizeIndex = null;\n }\n } else {\n resizeIndex = null;\n }\n }\n newSizes.forEach((newSize, modelIndex) => {\n var _metricCalculator$thi;\n var defaultSize = (_metricCalculator$thi = metricCalculator[this.initialSizesProperty].get(modelIndex)) !== null && _metricCalculator$thi !== void 0 ? _metricCalculator$thi : calculatedSizes.get(modelIndex);\n if (newSize === defaultSize) {\n this.resetSize(metricCalculator, modelIndex);\n } else {\n this.setSize(metricCalculator, modelIndex, newSize);\n }\n });\n this.updateCursor(metrics, this.draggingIndex);\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.draggingIndex != null) {\n this.draggingIndex = undefined;\n this.resizingItems = [];\n this.hiddenItems = [];\n this.targetSizes.clear();\n this.updateSeparator(grid, null);\n }\n return false;\n }\n onDoubleClick(gridPoint, grid) {\n var {\n metrics,\n metricCalculator\n } = grid;\n var {\n model\n } = grid.props;\n var theme = grid.getTheme();\n if (!metrics) throw new Error('metrics not set');\n var separator = this.getSeparator(gridPoint, metrics, model, theme);\n if (separator != null) {\n var modelIndexes = metrics[this.modelIndexesProperty];\n var _modelIndex2 = getOrThrow(modelIndexes, separator.index);\n this.resetSize(metricCalculator, _modelIndex2);\n grid.forceUpdate();\n return true;\n }\n return false;\n }\n updateCursor(metrics, itemIndex) {\n var visibleSizes = metrics[this.visibleSizesProperty];\n var itemSize = getOrThrow(visibleSizes, itemIndex);\n if (itemSize === 0) {\n this.cursor = this.hiddenCursor;\n } else {\n this.cursor = this.defaultCursor;\n }\n }\n addTargetSize(metrics, itemIndex) {\n var modelIndexes = metrics[this.modelIndexesProperty];\n var userSizes = metrics[this.userSizesProperty];\n var calculatedSizes = metrics[this.calculatedSizesProperty];\n var treePadding = itemIndex === 0 ? metrics[this.treePaddingProperty] : 0;\n var modelIndex = getOrThrow(modelIndexes, itemIndex);\n var targetSize = userSizes.get(modelIndex);\n if (targetSize == null || targetSize === 0) {\n var _calculatedSizes$get;\n targetSize = ((_calculatedSizes$get = calculatedSizes.get(modelIndex)) !== null && _calculatedSizes$get !== void 0 ? _calculatedSizes$get : 0) + treePadding;\n }\n this.targetSizes.set(modelIndex, targetSize);\n }\n removeTargetSize(metrics, itemIndex) {\n var modelIndexes = metrics[this.modelIndexesProperty];\n var modelIndex = getOrThrow(modelIndexes, itemIndex);\n this.targetSizes.delete(modelIndex);\n }\n}\nexport default GridSeparatorMouseHandler;\n//# sourceMappingURL=GridSeparatorMouseHandler.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\nimport GridUtils from \"../GridUtils.js\";\nimport GridSeparatorMouseHandler from \"./GridSeparatorMouseHandler.js\";\nclass GridColumnSeparatorMouseHandler extends GridSeparatorMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"hiddenCursor\", 'e-resize');\n _defineProperty(this, \"defaultCursor\", 'col-resize');\n _defineProperty(this, \"pointProperty\", 'x');\n _defineProperty(this, \"userSizesProperty\", 'userColumnWidths');\n _defineProperty(this, \"visibleOffsetProperty\", 'visibleColumnXs');\n _defineProperty(this, \"visibleSizesProperty\", 'visibleColumnWidths');\n _defineProperty(this, \"marginProperty\", 'rowHeaderWidth');\n _defineProperty(this, \"calculatedSizesProperty\", 'calculatedColumnWidths');\n _defineProperty(this, \"initialSizesProperty\", 'initialColumnWidths');\n _defineProperty(this, \"modelIndexesProperty\", 'modelColumns');\n _defineProperty(this, \"firstIndexProperty\", 'firstColumn');\n _defineProperty(this, \"treePaddingProperty\", 'treePaddingX');\n _defineProperty(this, \"getHiddenItems\", GridUtils.getHiddenColumns);\n _defineProperty(this, \"getNextShownItem\", GridUtils.getNextShownColumn);\n _defineProperty(this, \"getSeparator\", GridColumnSeparatorMouseHandler.getColumnSeparator);\n }\n static getColumnSeparator(gridPoint, metrics, model, theme) {\n if (!theme.allowColumnResize) {\n return null;\n }\n var {\n x,\n y,\n columnHeaderDepth: depth\n } = gridPoint;\n var {\n modelColumns\n } = metrics;\n var separatorIndex = GridUtils.getColumnSeparatorIndex(x, y, metrics, theme, model);\n if (separatorIndex == null || depth == null) {\n return null;\n }\n var columnIndex = modelColumns.get(separatorIndex);\n if (columnIndex != null) {\n return {\n index: separatorIndex,\n depth\n };\n }\n return null;\n }\n setSize(metricCalculator, modelIndex, size) {\n metricCalculator.setColumnWidth(modelIndex, size);\n }\n resetSize(metricCalculator, modelIndex) {\n metricCalculator.resetColumnWidth(modelIndex);\n }\n updateSeparator(grid, separator) {\n grid.setState({\n draggingColumnSeparator: separator,\n isDragging: separator !== null\n });\n }\n}\nexport default GridColumnSeparatorMouseHandler;\n//# sourceMappingURL=GridColumnSeparatorMouseHandler.js.map","// Default font width in pixels if it cannot be retrieved from the context\nexport var DEFAULT_FONT_WIDTH = 10;\n//# sourceMappingURL=GridRendererTypes.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport GridRenderer from \"./GridRenderer.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass CellRenderer {\n constructor() {\n _defineProperty(this, \"getCachedTruncatedString\", memoizeClear((context, text, width, fontWidthLower, fontWidthUpper, truncationChar) => GridRenderer.truncateToWidth(context, text, width, fontWidthLower, fontWidthUpper, truncationChar), {\n max: 10000\n }));\n }\n drawCellRowTreeMarker(context, state, row) {\n var {\n metrics,\n model,\n mouseX,\n mouseY,\n theme\n } = state;\n var {\n firstColumn,\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\n visibleRowTreeBoxes\n } = metrics;\n var {\n treeMarkerColor,\n treeMarkerHoverColor\n } = theme;\n var columnX = getOrThrow(allColumnXs, firstColumn);\n var columnWidth = getOrThrow(allColumnWidths, firstColumn);\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {\n return;\n }\n var treeBox = getOrThrow(visibleRowTreeBoxes, row);\n var color = mouseX != null && mouseY != null && mouseX >= gridX + columnX && mouseX <= gridX + columnX + columnWidth && mouseY >= gridY + rowY && mouseY <= gridY + rowY + rowHeight ? treeMarkerHoverColor : treeMarkerColor;\n this.drawTreeMarker(context, state, columnX, rowY, treeBox, color, model.isRowExpanded(row));\n }\n drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {\n var {\n x1,\n y1,\n x2,\n y2\n } = treeBox;\n var markerText = isExpanded ? '⊟' : '⊞';\n var textX = columnX + (x1 + x2) * 0.5 + 0.5;\n var textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n}\nexport default CellRenderer;\n//# sourceMappingURL=CellRenderer.js.map","/** Map from ModelIndex to the axis option of the column */\n\n/** Map from ModelIndex to a color or an array of colors\n * If given an array, then the bar will be a gradient\n * The colors should be given left to right (e.g. it should be like ['yellow', 'green'] for positive color and ['red', 'yellow'] for negative color)\n */\n\n/** Map from ModelIndex to the value placement option of the column */\n\n/** Map from ModelIndex to the opacity of the column */\n\n/** Map from ModelIndex to the direction of the column */\n\n/** Map from ModelIndex to the text alignment of the column */\n\n/** Map from column to the columns its markers are from */\n\n/** Map from column to whether the bar has a gradient */\n\n// Map from ModelIndex to the minimum number in the column\n\n// Map from ModelIndex to the maximum number in the column\n\nexport function isDataBarGridModel(model) {\n return (model === null || model === void 0 ? void 0 : model.dataBarOptionsForCell) !== undefined;\n}\n//# sourceMappingURL=DataBarGridModel.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport CellRenderer from \"./CellRenderer.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { isDataBarGridModel } from \"./DataBarGridModel.js\";\nimport GridColorUtils from \"./GridColorUtils.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass DataBarCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"getCachedWidth\", memoizeClear((context, text) => context.measureText(text).width, {\n max: 10000\n }));\n /**\n * Returns the width of the widest value in pixels\n */\n _defineProperty(this, \"getCachedWidestValueForColumn\", memoizeClear((context, visibleRows, modelRows, model, column) => {\n var widestValue = 0;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var modelRow = getOrThrow(modelRows, row);\n var text = model.textForCell(column, modelRow);\n widestValue = Math.max(widestValue, this.getCachedWidth(context, text));\n }\n return widestValue;\n }, {\n max: 1000\n }));\n }\n drawCellContent(context, state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n if (!isDataBarGridModel(model)) {\n return;\n }\n var {\n modelColumns,\n modelRows,\n allRowHeights,\n allRowYs,\n firstColumn,\n fontWidthsLower,\n fontWidthsUpper\n } = metrics;\n var isFirstColumn = column === firstColumn;\n var rowHeight = getOrThrow(allRowHeights, row);\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var rowY = getOrThrow(allRowYs, row);\n var textAlign = model.textAlignForCell(modelColumn, modelRow);\n var text = model.textForCell(modelColumn, modelRow);\n var {\n x: textX,\n y: textY,\n width: textWidth\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);\n var {\n columnMin,\n columnMax,\n axis,\n color: dataBarColor,\n valuePlacement,\n opacity,\n markers,\n direction,\n value\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n var hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;\n if (columnMin == null || columnMax == null) {\n return;\n }\n var {\n maxWidth,\n x: dataBarX,\n y: dataBarY,\n zeroPosition,\n leftmostPosition,\n markerXs,\n totalValueRange,\n dataBarWidth\n } = this.getDataBarRenderMetrics(context, state, column, row);\n context.save();\n context.textAlign = textAlign;\n if (hasGradient) {\n var color = value >= 0 ? dataBarColor[dataBarColor.length - 1] : dataBarColor[0];\n context.fillStyle = color;\n } else {\n context.fillStyle = Array.isArray(dataBarColor) ? dataBarColor[0] : dataBarColor;\n }\n context.textBaseline = 'middle';\n context.font = theme.font;\n if (valuePlacement !== 'hide') {\n context.fillText(truncatedText, textX, textY);\n }\n var hasRowDividers = theme.gridRowColor != null;\n var yOffset = hasRowDividers ? 2 : 1;\n context.save();\n context.beginPath();\n context.roundRect(dataBarX, rowY + yOffset,\n // yOffset includes 1px for top padding\n dataBarWidth, rowHeight - 1 - yOffset,\n // 1px for bottom padding\n 1);\n context.clip();\n context.globalAlpha = opacity;\n\n // Draw bar\n if (hasGradient) {\n // Draw gradient bar\n\n var gradientWidth = 0;\n var gradientX = 0;\n context.save();\n\n // Translate the context so its origin is at the start of the gradient\n // and increasing x value moves towards the end of the gradient.\n // For RTL, scale x by -1 to flip across the x-axis\n if (value < 0) {\n if (direction === 'LTR') {\n gradientWidth = Math.round(Math.abs(columnMin) / totalValueRange * maxWidth);\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n gradientWidth = Math.round(maxWidth - Math.abs(columnMax) / totalValueRange * maxWidth);\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n } else if (direction === 'LTR') {\n // Value is greater than or equal to 0\n gradientWidth = Math.round(maxWidth - Math.abs(columnMin) / totalValueRange * maxWidth) - 1;\n gradientX = Math.round(zeroPosition);\n context.translate(gradientX, 0);\n } else if (direction === 'RTL') {\n // Value is greater than or equal to 0\n gradientWidth = Math.round(Math.abs(columnMax) / totalValueRange * maxWidth);\n gradientX = Math.round(leftmostPosition);\n context.translate(gradientX + gradientWidth, 0);\n context.scale(-1, 1);\n }\n var gradient = DataBarCellRenderer.getGradient(gradientWidth, dataBarColor);\n context.fillStyle = gradient;\n context.fillRect(0, dataBarY, gradientWidth, rowHeight);\n context.restore(); // Restore gradient translate/scale\n } else {\n // Draw normal bar\n context.beginPath();\n context.roundRect(dataBarX, dataBarY, dataBarWidth, rowHeight, 1);\n context.fill();\n }\n\n // Draw markers\n if (maxWidth > 0) {\n markerXs.forEach((markerX, index) => {\n context.fillStyle = markers[index].color;\n context.fillRect(markerX, dataBarY, 1, rowHeight);\n });\n }\n\n // restore clip\n context.restore();\n var shouldRenderDashedLine = !(axis === 'directional' && (valuePlacement === 'beside' && textAlign === 'right' && direction === 'LTR' || valuePlacement === 'beside' && textAlign === 'left' && direction === 'RTL' || valuePlacement !== 'beside'));\n\n // Draw dashed line\n if (shouldRenderDashedLine) {\n context.strokeStyle = theme.zeroLineColor;\n context.beginPath();\n context.setLineDash([2, 1]);\n context.moveTo(zeroPosition, rowY);\n context.lineTo(zeroPosition, rowY + rowHeight);\n context.stroke();\n }\n context.restore();\n\n // Draw tree marker\n if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n getDataBarRenderMetrics(context, state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n if (!isDataBarGridModel(model)) {\n throw new Error('Grid model is not a data bar grid model');\n }\n var {\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n modelColumns,\n modelRows,\n visibleRows\n } = metrics;\n var {\n cellHorizontalPadding,\n treeDepthIndent,\n treeHorizontalPadding\n } = theme;\n var modelColumn = getOrThrow(modelColumns, column);\n var modelRow = getOrThrow(modelRows, row);\n var x = getOrThrow(allColumnXs, column);\n var y = getOrThrow(allRowYs, row);\n var columnWidth = getOrThrow(allColumnWidths, column);\n var isFirstColumn = column === firstColumn;\n var treeIndent = 0;\n if (isExpandableGridModel(model) && model.hasExpandableRows && isFirstColumn) {\n treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;\n }\n var textAlign = model.textAlignForCell(modelColumn, modelRow);\n var {\n columnMin,\n columnMax,\n axis,\n valuePlacement,\n markers,\n direction,\n value\n } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);\n var longestValueWidth = this.getCachedWidestValueForColumn(context, visibleRows, modelRows, model, modelColumn);\n var leftPadding = 2;\n var rightPadding = valuePlacement === 'beside' && textAlign === 'right' ? 2 : 1;\n\n // The value of the total range (e.g. max - column)\n var totalValueRange = columnMax - columnMin;\n // If min and max are both positive or min and max are equal, the max length is columnMax\n if (columnMax >= 0 && columnMin >= 0 || columnMin === columnMax) {\n totalValueRange = columnMax;\n } else if (columnMax <= 0 && columnMin <= 0) {\n // If min and max are both negative, the max length is the absolute value of columnMin\n totalValueRange = Math.abs(columnMin);\n }\n var maxWidth = columnWidth - treeIndent - rightPadding - leftPadding;\n if (valuePlacement === 'beside') {\n maxWidth = maxWidth - cellHorizontalPadding - longestValueWidth;\n }\n if (maxWidth < 0) {\n maxWidth = 0;\n }\n var columnLongest = Math.max(Math.abs(columnMin), Math.abs(columnMax));\n // If axis is proportional, totalValueRange is proportional to maxWidth\n var dataBarWidth = Math.abs(value) / totalValueRange * maxWidth;\n if (maxWidth === 0) {\n dataBarWidth = 0;\n } else if (axis === 'middle') {\n // The longest bar is proportional to half of the maxWidth\n dataBarWidth = Math.abs(value) / columnLongest * (maxWidth / 2);\n } else if (axis === 'directional') {\n // The longest bar is proportional to the maxWidth\n dataBarWidth = Math.abs(value) / columnLongest * maxWidth;\n }\n\n // Default: proportional, beside, LTR, right text align\n // All positions are assuming the left side is 0 and the right side is maxWidth\n var zeroPosition = columnMin >= 0 ? 0 : Math.abs(columnMin) / totalValueRange * maxWidth;\n var dataBarX = value >= 0 ? zeroPosition : zeroPosition - Math.abs(value) / totalValueRange * maxWidth;\n var markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n var offset = Math.abs(markerValue) / totalValueRange * maxWidth;\n return markerValue >= 0 ? zeroPosition + offset : zeroPosition - offset;\n });\n var leftmostPosition = valuePlacement === 'beside' && textAlign === 'left' ? cellHorizontalPadding + longestValueWidth + leftPadding : leftPadding;\n var rightmostPosition = valuePlacement === 'beside' && textAlign === 'right' ? columnWidth - cellHorizontalPadding - longestValueWidth - rightPadding : rightPadding;\n\n // Proportional, RTL\n if (direction === 'RTL') {\n zeroPosition = columnMin >= 0 ? columnWidth : columnWidth - Math.abs(columnMin) / totalValueRange * maxWidth;\n dataBarX = value >= 0 ? zeroPosition - value / totalValueRange * maxWidth : zeroPosition;\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return markerValue >= 0 ? zeroPosition - Math.abs(markerValue) / totalValueRange * maxWidth : zeroPosition + Math.abs(markerValue) / totalValueRange * maxWidth;\n });\n }\n if (axis === 'middle') {\n zeroPosition = maxWidth / 2;\n if (direction === 'LTR') {\n // Middle, LTR\n dataBarX = value >= 0 ? zeroPosition : zeroPosition - Math.abs(value) / columnLongest * (maxWidth / 2);\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return markerValue >= 0 ? zeroPosition + Math.abs(markerValue) / columnLongest * (maxWidth / 2) : zeroPosition - Math.abs(markerValue) / columnLongest * (maxWidth / 2);\n });\n } else if (direction === 'RTL') {\n // Middle, RTL\n dataBarX = value <= 0 ? zeroPosition : zeroPosition - Math.abs(value) / columnLongest * (maxWidth / 2);\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return markerValue <= 0 ? zeroPosition + Math.abs(markerValue) / columnLongest * (maxWidth / 2) : zeroPosition - Math.abs(markerValue) / columnLongest * (maxWidth / 2);\n });\n }\n } else if (axis === 'directional') {\n if (direction === 'LTR') {\n // Directional, LTR\n zeroPosition = 0;\n dataBarX = zeroPosition;\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return zeroPosition + Math.abs(markerValue) / columnLongest * maxWidth;\n });\n } else if (direction === 'RTL') {\n // Directional, RTL\n zeroPosition = columnWidth;\n dataBarX = zeroPosition - Math.abs(value) / columnLongest * maxWidth;\n markerXs = markers.map(marker => {\n var {\n value: markerValue\n } = marker;\n return zeroPosition - Math.abs(markerValue) / columnLongest * maxWidth;\n });\n }\n }\n\n // Offset all values by the actual x value and padding\n if (direction === 'LTR') {\n zeroPosition += x + leftPadding + treeIndent;\n dataBarX += x + leftPadding + treeIndent;\n markerXs = markerXs.map(markerX => markerX + x + leftPadding + treeIndent);\n if (valuePlacement === 'beside' && textAlign === 'left') {\n zeroPosition += longestValueWidth + cellHorizontalPadding;\n dataBarX += longestValueWidth + cellHorizontalPadding;\n markerXs = markerXs.map(markerX => markerX + longestValueWidth + cellHorizontalPadding);\n }\n } else if (direction === 'RTL') {\n zeroPosition = zeroPosition + x - rightPadding;\n dataBarX = dataBarX + x - rightPadding;\n markerXs = markerXs.map(markerX => markerX + x - rightPadding);\n if (valuePlacement === 'beside' && textAlign === 'right') {\n zeroPosition = zeroPosition - cellHorizontalPadding - longestValueWidth;\n dataBarX = dataBarX - cellHorizontalPadding - longestValueWidth;\n markerXs = markerXs.map(markerX => markerX - cellHorizontalPadding - longestValueWidth);\n }\n }\n leftmostPosition += x + treeIndent;\n rightmostPosition += x;\n return {\n maxWidth,\n x: dataBarX,\n y,\n zeroPosition,\n leftmostPosition,\n rightmostPosition,\n totalValueRange,\n dataBarWidth,\n markerXs\n };\n }\n}\n_defineProperty(DataBarCellRenderer, \"getGradient\", memoizeClear((width, colors) => {\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n if (ctx == null) {\n throw new Error('Failed to create canvas context');\n }\n if (Number.isNaN(width)) {\n return ctx.createLinearGradient(0, 0, 0, 0);\n }\n var gradient = ctx.createLinearGradient(0, 0, width, 0);\n var oklabColors = colors.map(color => GridColorUtils.linearSRGBToOklab(GridColorUtils.hexToRgb(color)));\n for (var i = 0; i < width; i += 1) {\n var colorStop = i / width;\n var colorChangeInterval = 1 / (colors.length - 1);\n var leftColorIndex = Math.floor(colorStop / colorChangeInterval);\n var color = GridColorUtils.lerpColor(oklabColors[leftColorIndex], oklabColors[leftColorIndex + 1], colorStop % colorChangeInterval / colorChangeInterval);\n gradient.addColorStop(i / width, GridColorUtils.rgbToHex(GridColorUtils.OklabToLinearSRGB(color)));\n }\n return gradient;\n}, {\n max: 1000,\n primitive: true // Stringify the arguments for memoization. Lets the color arrays be different arrays in memory, but still cache hit\n}));\nexport default DataBarCellRenderer;\n//# sourceMappingURL=DataBarCellRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint-disable class-methods-use-this */\nimport { EMPTY_ARRAY, getOrThrow } from '@deephaven/utils';\nimport CellRenderer from \"./CellRenderer.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport memoizeClear from \"./memoizeClear.js\";\nclass TextCellRenderer extends CellRenderer {\n constructor() {\n super(...arguments);\n /**\n * Returns an array of token boxes with the coordinates relative to the top left corner of the text\n */\n _defineProperty(this, \"getCachedTokenBoxesForVisibleCell\", memoizeClear((truncatedText, tokens, _font, _baseline, textHeight, context) => {\n var top = 0;\n var bottom = textHeight;\n var tokenBoxes = [];\n\n // The index where the last token ended\n var lastTokenEnd = 0;\n // The width of the text preceding the current token\n var currentTextWidth = 0;\n // Loop through array and push them to array\n for (var i = 0; i < tokens.length; i += 1) {\n var token = tokens[i];\n var {\n start,\n end\n } = token;\n // The last token value is calculated based on the full text so the value needs to be truncated\n var value = end > truncatedText.length ? truncatedText.substring(start) : token.value;\n\n // Add the width of the text in between this token and the last token\n currentTextWidth += context.measureText(truncatedText.substring(lastTokenEnd, start)).width;\n var tokenWidth = context.measureText(value).width;\n\n // Check if the x position is less than the grid x, then tokenWidth should be shifted by gridX - startX\n\n var left = currentTextWidth;\n var right = left + tokenWidth;\n var newTokenBox = {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom,\n token\n };\n tokenBoxes.push(newTokenBox);\n lastTokenEnd = end;\n currentTextWidth += tokenWidth;\n }\n return tokenBoxes;\n }, {\n max: 10000\n }));\n }\n drawCellContent(context, state, column, row) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n fontWidthsLower,\n fontWidthsUpper,\n modelColumns,\n modelRows,\n allRowHeights,\n firstColumn\n } = metrics;\n var isFirstColumn = column === firstColumn;\n var {\n textColor\n } = theme;\n var rowHeight = getOrThrow(allRowHeights, row);\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var text = model.textForCell(modelColumn, modelRow);\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n if (text && rowHeight > 0) {\n var textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';\n context.textAlign = textAlign;\n var color = model.colorForCell(modelColumn, modelRow, theme) || textColor;\n context.fillStyle = color;\n context.save();\n var {\n width: textWidth,\n x: textX,\n y: textY\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);\n var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);\n if (truncatedText) {\n var tokenIndex = 0;\n var textStart = 0;\n var left = textX;\n var {\n actualBoundingBoxDescent\n } = context.measureText(truncatedText);\n while (textStart < truncatedText.length) {\n var _ref, _token$end;\n var nextToken = tokens[tokenIndex];\n var token = textStart === (nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) ? nextToken : null;\n var textEnd = (_ref = (_token$end = token === null || token === void 0 ? void 0 : token.end) !== null && _token$end !== void 0 ? _token$end : nextToken === null || nextToken === void 0 ? void 0 : nextToken.start) !== null && _ref !== void 0 ? _ref : truncatedText.length;\n var value = truncatedText.substring(textStart, textEnd);\n var {\n width\n } = context.measureText(value);\n var widthOfUnderline = value.endsWith('…') ? width - context.measureText('…').width : width;\n\n // Set the styling based on the token, then draw the text\n if (token != null) {\n context.fillStyle = theme.hyperlinkColor;\n context.fillText(value, left, textY);\n context.fillRect(left, textY + actualBoundingBoxDescent, widthOfUnderline, 1);\n } else {\n context.fillStyle = color;\n context.fillText(value, left, textY);\n }\n left += width;\n textStart = textEnd;\n if (token != null) tokenIndex += 1;\n }\n }\n context.restore();\n }\n if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {\n this.drawCellRowTreeMarker(context, state, row);\n }\n }\n\n /**\n * Gets the token boxes that are visible in the cell\n * @param column The visible column\n * @param row The visible row\n * @param state The GridRenderState\n * @returns An array of TokenBox of visible tokens or empty array with coordinates relative to gridX and gridY\n */\n getTokenBoxesForVisibleCell(column, row, state) {\n var {\n metrics,\n context,\n model,\n theme\n } = state;\n if (context == null || metrics == null) {\n return EMPTY_ARRAY;\n }\n var {\n modelRows,\n modelColumns\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var text = model.textForCell(modelColumn, modelRow);\n var {\n width: textWidth,\n x: textX,\n y: textY\n } = GridUtils.getTextRenderMetrics(state, column, row);\n var {\n fontWidthsLower,\n fontWidthsUpper\n } = metrics;\n\n // Set the font and baseline and change it back after\n context.save();\n this.configureContext(context, state);\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var truncationChar = model.truncationCharForCell(modelColumn, modelRow);\n var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);\n var {\n actualBoundingBoxAscent,\n actualBoundingBoxDescent\n } = context.measureText(truncatedText);\n var textHeight = actualBoundingBoxAscent + actualBoundingBoxDescent;\n var tokens = model.tokensForCell(modelColumn, modelRow, truncatedText.length);\n\n // Check if the truncated text contains a link\n if (tokens.length === 0) {\n context.restore();\n return EMPTY_ARRAY;\n }\n var cachedTokenBoxes = this.getCachedTokenBoxesForVisibleCell(truncatedText, tokens, theme.font, 'middle', textHeight, context).map(tokenBox => ({\n x1: tokenBox.x1 + textX,\n y1: tokenBox.y1 + (textY - actualBoundingBoxAscent),\n x2: tokenBox.x2 + textX,\n y2: tokenBox.y2 + (textY - actualBoundingBoxAscent),\n token: tokenBox.token\n }));\n context.restore();\n return cachedTokenBoxes;\n }\n configureContext(context, state) {\n var {\n theme\n } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n}\nexport default TextCellRenderer;\n//# sourceMappingURL=TextCellRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport clamp from 'lodash.clamp';\nimport { ColorUtils, getOrThrow } from '@deephaven/utils';\nimport memoizeClear from \"./memoizeClear.js\";\nimport GridUtils from \"./GridUtils.js\";\nimport GridColorUtils from \"./GridColorUtils.js\";\nimport { isExpandableGridModel } from \"./ExpandableGridModel.js\";\nimport { isEditableGridModel } from \"./EditableGridModel.js\";\nimport GridColumnSeparatorMouseHandler from \"./mouse-handlers/GridColumnSeparatorMouseHandler.js\";\nimport { DEFAULT_FONT_WIDTH } from \"./GridRendererTypes.js\";\nimport DataBarCellRenderer from \"./DataBarCellRenderer.js\";\nimport TextCellRenderer from \"./TextCellRenderer.js\";\n/* eslint react/destructuring-assignment: \"off\" */\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-param-reassign: \"off\" */\n/**\n * A GridRenderer handles rendering the different parts of the grid\n * This default rendering just renders a basic grid. Extend this class and implement\n * your own methods to customize drawing of the grid (eg. Draw icons or special features)\n */\nexport class GridRenderer {\n constructor() {\n _defineProperty(this, \"textCellRenderer\", new TextCellRenderer());\n _defineProperty(this, \"dataBarCellRenderer\", new DataBarCellRenderer());\n _defineProperty(this, \"getCachedHeaderWidth\", memoizeClear((context, text) => context.measureText(text).width, {\n max: 1000\n }));\n }\n /**\n * Truncate a string to the specified length and add ellipses if necessary\n * @param str The string to truncate\n * @param len The length to truncate the string to. If longer than the actual string, just returns the string\n * @returns The truncated string\n */\n static truncate(str, len) {\n if (len < str.length) {\n // eslint-disable-next-line prefer-template\n return str.substr(0, len) + '…';\n }\n return str;\n }\n\n /**\n * Uses binary search to truncate a string to fit in the provided width\n * @param context The drawing context to measure the text in\n * @param str The string to get the maximum length it can draw\n * @param width The width to truncate it to\n * @param start The low boundary to start the search\n * @param end The high boundary to start the search\n * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\n * @returns The truncated string\n */\n static binaryTruncateToWidth(context, str, width) {\n var start = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var end = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : str.length;\n var truncationChar = arguments.length > 5 ? arguments[5] : undefined;\n if (end >= str.length && context.measureText(str).width <= width) {\n // IDS-6069 If the whole string can fit, don't bother checking for truncation\n // The ellipses are actually slightly wider than other chars, and it's possible\n // that the \"truncation\" ends up being slightly longer, which messes up the search\n // algorithm below.\n // Besides, if we already fit, it's just faster to not bother checking other truncations.\n return str;\n }\n if (truncationChar !== undefined) {\n var charWidth = context.measureText(truncationChar).width;\n return truncationChar.repeat(Math.max(1, Math.floor(width / charWidth)));\n }\n var lo = start;\n var hi = Math.min(str.length - 1, end);\n var result = str;\n while (hi >= lo) {\n var mid = Math.ceil((hi + lo) / 2);\n var truncatedStr = GridRenderer.truncate(str, mid);\n if (context.measureText(truncatedStr).width <= width) {\n result = truncatedStr;\n if (lo === mid) {\n break;\n }\n lo = mid;\n } else if (mid === 0) {\n // We already truncated to zero chars and it still doesn't fit, no need to keep looking\n result = truncatedStr;\n break;\n } else {\n hi = mid - 1;\n }\n }\n return result;\n }\n\n /**\n * Truncate a string (if necessary) to fit in the specified width.\n * First uses the estimated font width to calculate a lower/upper bound\n * Then uses binary search within those bounds to find the exact max length\n * @param context The drawing context\n * @param str The string to calculate max length for\n * @param width The width to truncate within\n * @param fontWidth The estimated width of each character\n * @param truncationChar This char will be repeated as the display string if the string is truncated instead of just adding an ellipsis\n * @returns The truncated string that fits within the width provided\n */\n static truncateToWidth(context, str, width) {\n var fontWidthLower = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_FONT_WIDTH / 2;\n var fontWidthUpper = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : DEFAULT_FONT_WIDTH * 2;\n var truncationChar = arguments.length > 5 ? arguments[5] : undefined;\n if (width <= 0 || str.length <= 0) {\n return '';\n }\n\n // Estimate the possible low and high boundaries for truncating the text\n // Use the width of the space divided by the upper and lower bounds of the width of a character\n // (minus 5 on the lower bound just to be extra safe)\n var lo = Math.min(Math.max(0, Math.floor(width / fontWidthUpper) - 5), str.length);\n var hi = Math.min(Math.ceil(width / fontWidthLower), str.length);\n return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi, truncationChar);\n }\n\n /**\n * Cache shared between all grids. Often grids will have the same theme/colors, so we should share the cache.\n */\n\n /**\n * Draw the grid canvas with the state provided\n * @param state The state of the grid\n */\n drawCanvas(state) {\n var {\n context\n } = state;\n context.save();\n this.configureContext(context, state);\n this.drawBackground(context, state);\n this.drawGrid(context, state);\n this.drawHeaders(context, state);\n this.drawFooters(context, state);\n this.drawDraggingColumn(context, state);\n this.drawDraggingRow(context, state);\n this.drawScrollBars(context, state);\n context.restore();\n }\n configureContext(context, state) {\n var {\n theme\n } = state;\n context.font = theme.font;\n context.textBaseline = 'middle';\n context.lineCap = 'butt';\n }\n drawBackground(context, state) {\n var {\n theme,\n metrics\n } = state;\n var {\n width,\n height\n } = metrics;\n context.fillStyle = theme.backgroundColor;\n context.fillRect(0, 0, width, height);\n }\n drawGrid(context, state) {\n var {\n metrics,\n draggingRow,\n draggingColumn\n } = state;\n var {\n gridX,\n gridY\n } = metrics;\n context.translate(gridX, gridY);\n this.drawGridBackground(context, state, draggingRow == null && draggingColumn == null);\n this.drawCellContents(context, state);\n this.drawFloatingRows(context, state);\n this.drawFloatingColumns(context, state);\n context.translate(-gridX, -gridY);\n }\n drawFloatingRows(context, state) {\n var {\n draggingRow,\n draggingColumn,\n metrics,\n theme\n } = state;\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingRows,\n rowCount,\n columnsForRender,\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, columnsForRender, floatingRows, theme.floatingGridColumnColor, theme.floatingGridRowColor);\n this.drawCellBackgroundsForItems(context, state, columnsForRender, 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 < columnsForRender.length; c += 1) {\n var column = columnsForRender[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 columnsForRender,\n visibleRows\n } = metrics;\n this.drawGridLinesForItems(context, state, columnsForRender, 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 columnsForRender,\n visibleRows\n } = metrics;\n this.drawCellBackgroundsForItems(context, state, columnsForRender, 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 columnsForRender\n } = metrics;\n for (var i = 0; i < columnsForRender.length; i += 1) {\n var column = columnsForRender[i];\n this.drawColumnCellContents(context, state, column);\n }\n }\n drawColumnCellContents(context, state, column) {\n var {\n metrics\n } = state;\n var {\n allColumnXs,\n allColumnWidths,\n visibleRows,\n height\n } = metrics;\n var x = getOrThrow(allColumnXs, column);\n var columnWidth = getOrThrow(allColumnWidths, column);\n context.save();\n context.beginPath();\n context.rect(x, 0, columnWidth, height);\n context.clip();\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n this.drawCellContent(context, state, column, row);\n }\n context.restore();\n }\n drawCellContent(context, state, column, row) {\n var {\n metrics,\n model\n } = state;\n var {\n modelColumns,\n modelRows\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var renderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellRenderer = this.getCellRenderer(renderType);\n cellRenderer.drawCellContent(context, state, column, row);\n }\n getCellRenderer(renderType) {\n switch (renderType) {\n case 'dataBar':\n return this.dataBarCellRenderer;\n default:\n return this.textCellRenderer;\n }\n }\n drawCellRowTreeDepthLines(context, state, row, rowAfter) {\n var {\n metrics,\n model,\n theme\n } = state;\n if (!isExpandableGridModel(model)) return;\n var depth = model.depthForRow(row);\n if (depth === 0) return;\n var {\n firstColumn,\n allColumnXs,\n allRowYs,\n allRowHeights\n } = metrics;\n var {\n treeDepthIndent,\n treeHorizontalPadding,\n treeLineColor\n } = theme;\n var columnX = getOrThrow(allColumnXs, firstColumn);\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n var depthRowAfter = rowAfter !== undefined ? model.depthForRow(rowAfter) : 0;\n var depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;\n context.strokeStyle = treeLineColor;\n context.lineWidth = 1;\n\n // draw normal depth lines\n if (depth - depthDiff > 0) {\n context.beginPath();\n for (var i = 0; i < depth - depthDiff; i += 1) {\n var lineX = Math.floor(columnX + i * treeDepthIndent + treeDepthIndent * 0.5 + treeHorizontalPadding) + 0.5; // The 0.5 makes the line crisp https://stackoverflow.com/questions/9311428/draw-single-pixel-line-in-html5-canvas\n context.moveTo(lineX, rowY);\n context.lineTo(lineX, rowY + rowHeight);\n }\n context.stroke();\n }\n\n // draw as hockey stick if last row at depth\n if (depthDiff > 0) {\n context.beginPath();\n for (var _i4 = depth - depthDiff; _i4 < depth; _i4 += 1) {\n var _lineX = Math.floor(columnX + _i4 * treeDepthIndent + treeDepthIndent * 0.5 + treeHorizontalPadding) + 0.5;\n context.moveTo(_lineX, rowY);\n context.lineTo(_lineX, rowY + Math.floor(rowHeight / 2));\n // extra moveTo prevents halfpixel in corner\n context.moveTo(_lineX - 0.5, rowY + Math.floor(rowHeight / 2) + 0.5);\n context.lineTo(_lineX + treeDepthIndent - 0.5, rowY + Math.floor(rowHeight / 2) + 0.5);\n }\n context.stroke();\n }\n }\n drawHeaders(context, state) {\n var {\n theme\n } = state;\n context.font = theme.headerFont;\n this.drawColumnHeaders(context, state);\n this.drawRowHeaders(context, state);\n }\n drawFooters(context, state) {\n var {\n theme\n } = state;\n context.font = theme.headerFont;\n this.drawRowFooters(context, state);\n }\n drawColumnHeaders(context, state) {\n var {\n mouseX,\n mouseY,\n theme,\n metrics,\n draggingColumnSeparator,\n isDragging,\n model\n } = state;\n var {\n columnHeaderHeight,\n floatingColumns,\n gridX,\n width,\n visibleColumns,\n allColumnWidths,\n allColumnXs,\n floatingLeftColumnCount,\n floatingLeftWidth,\n floatingRightWidth,\n modelColumns,\n columnHeaderMaxDepth\n } = metrics;\n if (columnHeaderHeight <= 0) {\n return;\n }\n var {\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor\n } = theme;\n var hiddenSeparatorHeight = columnHeaderHeight * 0.5;\n var hiddenY = columnHeaderHeight * (columnHeaderMaxDepth - 1) + columnHeaderHeight * 0.5 - hiddenSeparatorHeight * 0.5;\n var containsFrozenColumns = floatingLeftColumnCount > 0;\n context.save();\n this.drawColumnHeadersForRange(context, state, [visibleColumns[0], visibleColumns[visibleColumns.length - 1]], {\n minX: gridX + floatingLeftWidth,\n maxX: width - floatingRightWidth\n });\n if (containsFrozenColumns) {\n this.drawColumnHeadersForRange(context, state, [floatingColumns[0], floatingColumns[floatingColumns.length - 1]], {\n minX: gridX,\n maxX: gridX + floatingLeftWidth\n });\n }\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n var hiddenColumns = [...allColumnWidths.entries()].filter(_ref => {\n var [_, w] = _ref;\n return w === 0;\n }).map(_ref2 => {\n var [index] = _ref2;\n return index;\n });\n\n // Now draw the hidden column separator boxes\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (var i = 0; i < hiddenColumns.length; i += 1) {\n var column = hiddenColumns[i];\n var columnX = getOrThrow(allColumnXs, column);\n var columnWidth = getOrThrow(allColumnWidths, column);\n var minX = gridX + columnX + columnWidth + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(minX, hiddenY, headerHiddenSeparatorSize, hiddenSeparatorHeight);\n }\n context.fill();\n }\n if (headerSeparatorHoverColor) {\n var {\n index: highlightedSeparator,\n depth\n } = draggingColumnSeparator !== null && draggingColumnSeparator !== void 0 ? draggingColumnSeparator : {};\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n var separator = GridColumnSeparatorMouseHandler.getColumnSeparator(GridUtils.getGridPointFromXY(mouseX, mouseY, metrics), metrics, model, theme);\n highlightedSeparator = separator === null || separator === void 0 ? void 0 : separator.index;\n depth = separator === null || separator === void 0 ? void 0 : separator.depth;\n }\n var shouldDrawSeparator;\n if (highlightedSeparator == null) {\n shouldDrawSeparator = false;\n } else {\n var columnIndex = modelColumns.get(highlightedSeparator);\n var nextColumnIndex = modelColumns.get(highlightedSeparator + 1);\n if (columnIndex == null || nextColumnIndex == null) {\n shouldDrawSeparator = false;\n } else {\n shouldDrawSeparator = model.textForColumnHeader(columnIndex, depth) !== model.textForColumnHeader(nextColumnIndex, depth);\n }\n }\n if (shouldDrawSeparator && highlightedSeparator != null && depth != null && (!isDragging || draggingColumnSeparator != null)) {\n context.strokeStyle = headerSeparatorHoverColor;\n var _columnX = getOrThrow(allColumnXs, highlightedSeparator);\n var _columnWidth = getOrThrow(allColumnWidths, highlightedSeparator);\n var x = gridX + _columnX + _columnWidth + 0.5;\n var visibleColumnIndex = visibleColumns.indexOf(highlightedSeparator);\n var nextColumn = visibleColumnIndex < visibleColumns.length - 1 ? visibleColumns[visibleColumnIndex + 1] : null;\n var nextColumnWidth = nextColumn != null ? allColumnWidths.get(nextColumn) : null;\n var isColumnHidden = _columnWidth === 0;\n var isNextColumnHidden = nextColumnWidth != null && nextColumnWidth === 0;\n if (isColumnHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(x, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);\n } else if (isNextColumnHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(x - headerHiddenSeparatorSize * 0.5, hiddenY, headerHiddenSeparatorSize * 0.5, hiddenSeparatorHeight);\n }\n\n // column seperator hover line\n context.beginPath();\n context.moveTo(x, (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight);\n context.lineTo(x, (columnHeaderMaxDepth - depth) * columnHeaderHeight - 1);\n context.stroke();\n }\n }\n context.restore();\n }\n drawColumnHeadersForRange(context, state, range, bounds) {\n var {\n model\n } = state;\n var {\n columnHeaderMaxDepth\n } = model;\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n for (var d = 0; d <= columnHeaderMaxDepth; d += 1) {\n this.drawColumnHeadersAtDepth(context, state, range, bounds, d);\n }\n }\n drawColumnHeadersAtDepth(context, state, range, bounds, depth) {\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n modelColumns,\n allColumnXs,\n gridX,\n userColumnWidths,\n allColumnWidths,\n movedColumns\n } = metrics;\n var {\n columnHeaderHeight,\n columnWidth\n } = theme;\n var {\n columnHeaderMaxDepth\n } = model;\n var {\n minX,\n maxX\n } = bounds;\n var visibleWidth = maxX - minX;\n if (columnHeaderMaxDepth === 0) {\n return;\n }\n var startIndex = range[0];\n var endIndex = range[1];\n context.save();\n context.translate(0, (columnHeaderMaxDepth - depth - 1) * columnHeaderHeight);\n if (depth === 0) {\n // Make sure base column header background always goes to the right edge\n this.drawColumnHeader(context, state, '', minX, maxX);\n\n // Draw base column headers\n for (var i = startIndex; i <= endIndex; i += 1) {\n this.drawColumnHeaderAtIndex(context, state, i, bounds);\n }\n }\n\n // Draw column header group\n if (depth > 0) {\n var columnIndex = startIndex;\n while (columnIndex <= endIndex) {\n var {\n columnCount,\n calculatedColumnWidths\n } = metrics;\n var modelColumn = getOrThrow(modelColumns, columnIndex);\n var columnGroupName = model.textForColumnHeader(modelColumn, depth);\n var columnGroupColor = model.colorForColumnHeader(modelColumn, depth);\n var columnGroupLeft = getOrThrow(allColumnXs, columnIndex) + gridX;\n var columnGroupRight = columnGroupLeft + getOrThrow(allColumnWidths, columnIndex);\n if (columnGroupName != null) {\n // Need to determine if the column group is at least the width of the bounds\n // And if the left/right of the group extend past the bounds\n // The group will be drawn as if it were a column with a max width of the bounds width\n var prevColumnIndex = columnIndex - 1;\n while (prevColumnIndex >= 0 && (columnGroupRight - columnGroupLeft < visibleWidth || columnGroupLeft > minX)) {\n var _modelColumns$get, _ref3, _ref4, _userColumnWidths$get;\n var prevModelIndex = (_modelColumns$get = modelColumns.get(prevColumnIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(prevColumnIndex, movedColumns);\n if (prevModelIndex == null || model.textForColumnHeader(prevModelIndex, depth) !== columnGroupName) {\n // Previous column not in the same group\n break;\n }\n var prevColumnWidth = (_ref3 = (_ref4 = (_userColumnWidths$get = userColumnWidths.get(prevModelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : allColumnWidths.get(prevColumnIndex)) !== null && _ref4 !== void 0 ? _ref4 : calculatedColumnWidths.get(prevModelIndex)) !== null && _ref3 !== void 0 ? _ref3 : columnWidth;\n columnGroupLeft -= prevColumnWidth;\n prevColumnIndex -= 1;\n }\n var nextColumnIndex = columnIndex + 1;\n while (nextColumnIndex < columnCount && (columnGroupRight - columnGroupLeft < visibleWidth || columnGroupRight < maxX)) {\n var _modelColumns$get2, _ref5, _userColumnWidths$get2;\n var nextModelIndex = (_modelColumns$get2 = modelColumns.get(nextColumnIndex)) !== null && _modelColumns$get2 !== void 0 ? _modelColumns$get2 : GridUtils.getModelIndex(nextColumnIndex, movedColumns);\n if (model.textForColumnHeader(nextModelIndex, depth) !== columnGroupName) {\n // Next column not in the same group\n break;\n }\n var nextColumnWidth = (_ref5 = (_userColumnWidths$get2 = userColumnWidths.get(nextModelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : allColumnWidths.get(nextColumnIndex)) !== null && _ref5 !== void 0 ? _ref5 : columnWidth;\n columnGroupRight += nextColumnWidth;\n nextColumnIndex += 1;\n }\n\n // Set column index to end of the current group\n columnIndex = nextColumnIndex - 1;\n var isFullWidth = columnGroupRight - columnGroupLeft >= visibleWidth;\n var x = columnGroupLeft;\n if (isFullWidth) {\n if (columnGroupRight < maxX) {\n x = columnGroupRight - visibleWidth;\n } else if (columnGroupLeft < minX) {\n x = minX;\n }\n }\n this.drawColumnHeader(context, state, columnGroupName, x, Math.min(columnGroupRight - columnGroupLeft, visibleWidth), {\n backgroundColor: columnGroupColor !== null && columnGroupColor !== void 0 ? columnGroupColor : undefined\n }, bounds);\n }\n columnIndex += 1;\n }\n }\n context.restore();\n }\n\n /**\n * Draws the column header for the given visible index\n * @param context Canvas context\n * @param state Grid render state\n * @param index Visible index of the column header to draw\n * @param bounds The horizontal bounds the header can be drawn in\n */\n drawColumnHeaderAtIndex(context, state, index, bounds) {\n var _model$colorForColumn;\n var {\n metrics,\n model\n } = state;\n var {\n modelColumns,\n allColumnWidths,\n allColumnXs,\n gridX\n } = metrics;\n var width = getOrThrow(allColumnWidths, index);\n var x = getOrThrow(allColumnXs, index) + gridX;\n var modelColumn = getOrThrow(modelColumns, index);\n var text = model.textForColumnHeader(modelColumn);\n if (text == null) {\n return;\n }\n this.drawColumnHeader(context, state, text, x, width, {\n backgroundColor: (_model$colorForColumn = model.colorForColumnHeader(modelColumn)) !== null && _model$colorForColumn !== void 0 ? _model$colorForColumn : undefined\n }, bounds);\n }\n drawColumnHeader(context, state, columnText, columnX, columnWidth, style, bounds) {\n if (columnWidth <= 0) {\n return;\n }\n var {\n metrics,\n theme\n } = state;\n var {\n headerHorizontalPadding,\n columnHeaderHeight,\n headerBackgroundColor,\n headerColor,\n headerSeparatorColor,\n black,\n white\n } = theme;\n var {\n fontWidthsLower,\n fontWidthsUpper,\n width\n } = metrics;\n var maxWidth = columnWidth - headerHorizontalPadding * 2;\n var {\n backgroundColor = headerBackgroundColor,\n separatorColor = headerSeparatorColor\n } = style !== null && style !== void 0 ? style : {};\n var {\n textColor = headerColor\n } = style !== null && style !== void 0 ? style : {};\n try {\n var isDarkBackground = GridRenderer.getCachedColorIsDark(backgroundColor);\n var isDarkText = GridRenderer.getCachedColorIsDark(textColor);\n if (isDarkBackground && isDarkText) {\n textColor = white;\n } else if (!isDarkBackground && !isDarkText) {\n textColor = black;\n }\n } catch (_unused) {\n // Invalid color provided\n // no-op since we don't use logging in base grid\n }\n var {\n minX = 0,\n maxX = width\n } = bounds !== null && bounds !== void 0 ? bounds : {};\n context.save();\n context.rect(minX, 0, maxX - minX, columnHeaderHeight);\n context.clip();\n\n // Fill background color if specified\n if (backgroundColor != null) {\n context.fillStyle = backgroundColor;\n context.fillRect(columnX, 0, columnWidth, columnHeaderHeight);\n }\n if (separatorColor != null) {\n context.strokeStyle = separatorColor;\n context.beginPath();\n\n // Don't draw left separator if column touches the left edge\n if (columnX > 0) {\n context.moveTo(columnX + 0.5, 0);\n context.lineTo(columnX + 0.5, columnHeaderHeight);\n }\n context.moveTo(columnX + columnWidth + 0.5, 0);\n context.lineTo(columnX + columnWidth + 0.5, columnHeaderHeight);\n\n // Bottom Border, should be interior to the header height\n context.moveTo(columnX, columnHeaderHeight - 0.5);\n context.lineTo(columnX + columnWidth, columnHeaderHeight - 0.5);\n context.stroke();\n }\n context.beginPath();\n context.rect(columnX, 0, columnWidth, columnHeaderHeight);\n context.clip();\n context.fillStyle = textColor;\n var fontWidthLower = fontWidthsLower.get(context.font);\n var fontWidthUpper = fontWidthsUpper.get(context.font);\n var renderText = this.textCellRenderer.getCachedTruncatedString(context, columnText, maxWidth, fontWidthLower, fontWidthUpper);\n var x = columnX + columnWidth * 0.5;\n var y = columnHeaderHeight * 0.5;\n minX += headerHorizontalPadding;\n maxX -= headerHorizontalPadding;\n var columnLeft = columnX + headerHorizontalPadding;\n var visibleLeft = clamp(columnLeft, minX, maxX);\n var columnRight = columnX + columnWidth - headerHorizontalPadding;\n var visibleRight = clamp(columnRight, minX, maxX);\n var visibleWidth = visibleRight - visibleLeft;\n var textWidth = this.getCachedHeaderWidth(context, renderText);\n var isBeyondLeft = x - textWidth * 0.5 < minX;\n var isBeyondRight = x + textWidth * 0.5 > maxX;\n if (isBeyondLeft) {\n // Column name would be off the left side of the canvas\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to left\n x = minX + textWidth * 0.5;\n } else {\n x = columnRight - textWidth * 0.5;\n }\n } else if (isBeyondRight) {\n if (textWidth < visibleWidth) {\n // Can render the entire text in the visible space. Stick to right\n x = maxX - textWidth * 0.5;\n } else {\n x = columnLeft + textWidth * 0.5;\n }\n }\n context.textAlign = 'center';\n context.fillText(renderText, x, y);\n context.restore();\n }\n drawRowHeaders(context, state) {\n var {\n mouseX,\n mouseY,\n metrics,\n theme,\n draggingRowSeparator\n } = state;\n var {\n gridY,\n rowHeaderWidth,\n height,\n visibleRows,\n allRowHeights,\n allRowYs\n } = metrics;\n if (rowHeaderWidth <= 0) {\n return;\n }\n var {\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor\n } = theme;\n var hiddenSeparatorWidth = rowHeaderWidth * 0.5;\n var hiddenX = rowHeaderWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n context.save();\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(0, 0, rowHeaderWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(0, gridY + 0.5);\n context.lineTo(rowHeaderWidth, gridY + 0.5);\n var hiddenRows = [];\n var isPreviousRowHidden = false;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n if (rowHeight > 0) {\n var y = gridY + rowY + rowHeight + 0.5;\n context.moveTo(0, y);\n context.lineTo(rowHeaderWidth, y);\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border right, interior to the headerWidth\n context.moveTo(rowHeaderWidth - 0.5, 0);\n context.lineTo(rowHeaderWidth - 0.5, height);\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (var _i5 = 0; _i5 < hiddenRows.length; _i5 += 1) {\n var _row4 = hiddenRows[_i5];\n var _rowY = getOrThrow(allRowYs, _row4);\n var _rowHeight = getOrThrow(allRowHeights, _row4);\n var minY = gridY + _rowY + _rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);\n }\n context.fill();\n }\n if (headerSeparatorHoverColor) {\n var {\n index: highlightedSeparator = null\n } = draggingRowSeparator !== null && draggingRowSeparator !== void 0 ? draggingRowSeparator : {};\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);\n }\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n var _rowY2 = getOrThrow(allRowYs, highlightedSeparator);\n var _rowHeight2 = getOrThrow(allRowHeights, highlightedSeparator);\n var _y5 = gridY + _rowY2 + _rowHeight2 + 0.5;\n var visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n var nextRow = visibleRowIndex < visibleRows.length - 1 ? visibleRows[visibleRowIndex + 1] : null;\n var nextRowHeight = nextRow != null ? allRowHeights.get(nextRow) : null;\n var isRowHidden = _rowHeight2 === 0;\n var isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(hiddenX, _y5, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(hiddenX, _y5 - headerHiddenSeparatorSize * 0.5, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n }\n context.beginPath();\n context.moveTo(0.5, _y5);\n context.lineTo(rowHeaderWidth + 0.5, _y5);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(0, gridY, rowHeaderWidth, height);\n context.clip();\n context.fillStyle = headerColor;\n context.textAlign = 'right';\n for (var _i6 = 0; _i6 < visibleRows.length; _i6 += 1) {\n var _row5 = visibleRows[_i6];\n var _rowHeight3 = getOrThrow(allRowHeights, _row5);\n var _y6 = getOrThrow(allRowYs, _row5) + gridY;\n this.drawRowHeader(context, state, _row5, _y6, _rowHeight3);\n }\n context.restore();\n }\n drawRowHeader(context, state, row, rowY, rowHeight) {\n if (rowHeight <= 0) {\n return;\n }\n var {\n metrics,\n model,\n theme\n } = state;\n var {\n modelRows,\n rowHeaderWidth\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var x = rowHeaderWidth - theme.cellHorizontalPadding;\n var y = rowY + rowHeight * 0.5;\n context.fillText(model.textForRowHeader(modelRow), x, y);\n }\n drawRowFooters(context, state) {\n var {\n mouseX,\n mouseY,\n metrics,\n model,\n theme,\n draggingRowSeparator\n } = state;\n var {\n gridY,\n gridX,\n maxX,\n modelRows,\n rowFooterWidth,\n height,\n verticalBarWidth,\n visibleRows,\n allRowHeights,\n allRowYs,\n width\n } = metrics;\n if (rowFooterWidth <= 0) {\n return;\n }\n var {\n cellHorizontalPadding,\n headerBackgroundColor,\n headerColor,\n headerHiddenSeparatorSize,\n headerHiddenSeparatorHoverColor,\n headerSeparatorColor,\n headerSeparatorHoverColor\n } = theme;\n var hiddenSeparatorWidth = rowFooterWidth * 0.5;\n var hiddenX = rowFooterWidth * 0.5 - hiddenSeparatorWidth * 0.5;\n var x = Math.min(gridX + maxX, width - rowFooterWidth - verticalBarWidth);\n context.save();\n context.beginPath();\n\n // Fill in the background\n context.fillStyle = headerBackgroundColor;\n context.fillRect(x, gridY, rowFooterWidth, height);\n\n // Draw the separators\n if (headerSeparatorColor) {\n context.strokeStyle = headerSeparatorColor;\n context.beginPath();\n context.moveTo(x, gridY + 0.5);\n context.lineTo(rowFooterWidth, gridY + 0.5);\n var hiddenRows = [];\n var isPreviousRowHidden = false;\n for (var i = 0; i < visibleRows.length; i += 1) {\n var row = visibleRows[i];\n var rowY = getOrThrow(allRowYs, row);\n var rowHeight = getOrThrow(allRowHeights, row);\n if (rowHeight > 0) {\n var y = gridY + rowY + rowHeight + 0.5;\n context.moveTo(x + 0.5, y);\n context.lineTo(x + rowFooterWidth - 0.5, y);\n isPreviousRowHidden = false;\n } else if (!isPreviousRowHidden) {\n isPreviousRowHidden = true;\n hiddenRows.push(row);\n }\n }\n\n // border left, interior to the headerWidth\n context.moveTo(x + 0.5, gridY);\n context.lineTo(x + 0.5, height);\n context.stroke();\n\n // Draw the hidden column separators\n context.beginPath();\n context.fillStyle = headerSeparatorColor;\n for (var _i7 = 0; _i7 < hiddenRows.length; _i7 += 1) {\n var _row6 = hiddenRows[_i7];\n var _rowY3 = getOrThrow(allRowYs, _row6);\n var _rowHeight4 = getOrThrow(allRowHeights, _row6);\n var minY = gridY + _rowY3 + _rowHeight4 + 0.5 - headerHiddenSeparatorSize * 0.5;\n context.rect(x + hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);\n }\n context.fill();\n }\n if (headerSeparatorHoverColor) {\n var {\n index: highlightedSeparator = null\n } = draggingRowSeparator !== null && draggingRowSeparator !== void 0 ? draggingRowSeparator : {};\n if (highlightedSeparator == null && mouseX != null && mouseY != null) {\n highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);\n }\n if (highlightedSeparator != null) {\n context.strokeStyle = headerSeparatorHoverColor;\n var _rowY4 = getOrThrow(allRowYs, highlightedSeparator);\n var _rowHeight5 = getOrThrow(allRowHeights, highlightedSeparator);\n var _y7 = gridY + _rowY4 + _rowHeight5 + 0.5;\n var visibleRowIndex = visibleRows.indexOf(highlightedSeparator);\n var nextRow = visibleRowIndex < visibleRows.length - 1 ? visibleRows[visibleRowIndex + 1] : null;\n var nextRowHeight = nextRow != null ? allRowHeights.get(nextRow) : null;\n var isRowHidden = _rowHeight5 === 0;\n var isNextRowHidden = nextRowHeight != null && nextRowHeight === 0;\n if (isRowHidden) {\n context.strokeStyle = headerHiddenSeparatorHoverColor;\n context.fillStyle = headerHiddenSeparatorHoverColor;\n context.fillRect(hiddenX, _y7, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n } else if (isNextRowHidden) {\n context.fillStyle = headerSeparatorHoverColor;\n context.fillRect(hiddenX, _y7 - headerHiddenSeparatorSize * 0.5, hiddenSeparatorWidth, headerHiddenSeparatorSize * 0.5);\n }\n context.beginPath();\n context.moveTo(x + 0.5, _y7);\n context.lineTo(x + rowFooterWidth + 0.5, _y7);\n context.stroke();\n }\n }\n\n // Fill in the text\n context.beginPath();\n context.rect(x, gridY, rowFooterWidth, height);\n context.clip();\n context.fillStyle = headerColor;\n context.textAlign = 'left';\n var textX = x + cellHorizontalPadding;\n for (var _i8 = 0; _i8 < visibleRows.length; _i8 += 1) {\n var _row7 = visibleRows[_i8];\n var _rowHeight6 = getOrThrow(allRowHeights, _row7);\n if (_rowHeight6 > 0) {\n var _rowY5 = getOrThrow(allRowYs, _row7) + gridY;\n var modelRow = getOrThrow(modelRows, _row7);\n var textY = _rowY5 + _rowHeight6 * 0.5;\n context.fillText(model.textForRowFooter(modelRow), textX, textY);\n }\n }\n context.restore();\n }\n drawSelectedRanges(context, state) {\n var viewport = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var {\n cursorColumn: column,\n cursorRow: row,\n draggingRow,\n draggingColumn,\n editingCell,\n metrics,\n model,\n selectedRanges,\n theme\n } = state;\n var {\n allColumnWidths,\n allColumnXs,\n allRowHeights,\n allRowYs,\n width,\n height\n } = metrics;\n var {\n left = metrics.left,\n top = metrics.top,\n right = metrics.right,\n bottom = metrics.bottom,\n minY = -10,\n maxY = height + 10,\n minX = -10,\n maxX = width + 10\n } = viewport;\n if (selectedRanges.length === 0) {\n return;\n }\n var isCursorVisible = isEditableGridModel(model) && model.isEditable && editingCell == null && draggingRow == null && draggingColumn == null && column != null && row != null && allColumnXs.has(column) && allRowYs.has(row);\n if (isCursorVisible) {\n // Punch a hole out where the active cell is, it gets styled differently.\n var x = getOrThrow(allColumnXs, column);\n var y = getOrThrow(allRowYs, row);\n var w = getOrThrow(allColumnWidths, column);\n var h = getOrThrow(allRowHeights, row);\n context.save();\n context.beginPath();\n context.rect(0, 0, width, height);\n context.rect(x, y, w, h);\n context.clip('evenodd');\n }\n\n // Draw selection ranges\n context.beginPath();\n for (var i = 0; i < selectedRanges.length; i += 1) {\n var selectedRange = selectedRanges[i];\n var startColumn = selectedRange.startColumn !== null ? selectedRange.startColumn : left;\n var startRow = selectedRange.startRow !== null ? selectedRange.startRow : top;\n var endColumn = selectedRange.endColumn !== null ? selectedRange.endColumn : right;\n var endRow = selectedRange.endRow !== null ? selectedRange.endRow : bottom;\n if (endRow >= top && bottom >= startRow && endColumn >= left && right >= startColumn) {\n // Need to offset the x/y coordinates so that the line draws nice and crisp\n var _x4 = startColumn >= left && allColumnXs.has(startColumn) ? Math.round(getOrThrow(allColumnXs, startColumn)) + 0.5 : minX;\n var _y8 = startRow >= top && allRowYs.has(startRow) ? Math.max(Math.round(getOrThrow(allRowYs, startRow)) + 0.5, 0.5) : minY;\n var endX = endColumn <= right && allColumnXs.has(endColumn) ? Math.round(getOrThrow(allColumnXs, endColumn) + getOrThrow(allColumnWidths, endColumn)) - 0.5 : maxX;\n var endY = endRow <= bottom && allRowYs.has(endRow) ? Math.round(getOrThrow(allRowYs, endRow) + getOrThrow(allRowHeights, endRow)) - 0.5 : maxY;\n context.rect(_x4, _y8, endX - _x4, endY - _y8);\n }\n }\n\n /**\n * Create the path, then draw it once. Fill and\n * stroke must be outside the beginPath loop otherwise\n * the fill/stroke will be drawn multiple times.\n */\n\n // draw the inner transparent fill\n context.fillStyle = theme.selectionColor;\n context.fill();\n\n /**\n * draw an \"inner stroke\" that's clipped to just inside of the rects\n * to act as a casing to the outer stroke. 3px width because 1px is outside\n * the rect (but clipped), 1px is \"on\" the rect (technically this pixel is\n * a half pixel clip as well due to rects offset, but we are immediately painting\n * over it), and then the 1px inside (which is the desired pixel).\n */\n context.save();\n context.clip();\n context.strokeStyle = theme.selectionOutlineCasingColor;\n context.lineWidth = 3;\n context.stroke();\n context.restore();\n\n // draw the outerstroke border on top of the inner stroke\n context.strokeStyle = theme.selectionOutlineColor;\n context.lineWidth = 1;\n context.stroke();\n if (isCursorVisible && column != null && row != null) {\n context.restore();\n this.drawActiveCell(context, state, column, row);\n }\n }\n drawActiveCell(context, state, column, row) {\n var {\n metrics,\n theme\n } = state;\n var {\n scrollX,\n scrollY,\n allColumnWidths,\n allColumnXs,\n allRowHeights,\n allRowYs\n } = metrics;\n var {\n activeCellSelectionBorderWidth: borderWidth\n } = theme;\n var cellX = getOrThrow(allColumnXs, column);\n var cellY = getOrThrow(allRowYs, row);\n var cellW = getOrThrow(allColumnWidths, column);\n var cellH = getOrThrow(allRowHeights, row);\n\n // Now get the outline for the active cell\n var x = cellX - borderWidth * 0.5;\n var y = cellY - borderWidth * 0.5;\n var w = cellW + borderWidth;\n var h = cellH + borderWidth;\n\n // Make sure the outline is interior on the edge\n if (x <= 0 && scrollX <= 0) {\n w -= borderWidth - x;\n x = borderWidth * 0.5;\n }\n if (y <= 0 && scrollY <= 0) {\n h -= borderWidth - y;\n y = borderWidth * 0.5;\n }\n var {\n lineWidth\n } = context;\n context.beginPath();\n context.lineWidth = borderWidth;\n context.strokeStyle = theme.selectionOutlineColor;\n this.drawRoundedRect(context, x, y, w, h);\n context.stroke();\n context.lineWidth = lineWidth;\n }\n\n /**\n * Draws a rounded rectangle using the current state of the canvas.\n *\n * @param context The canvas context\n * @param x coordinate of the left side\n * @param y coordinate of the top side\n * @param w width of the rectangle\n * @param h height of the rectangle\n * @param r corner radius of the rectangle\n */\n drawRoundedRect(context, x, y, w, h) {\n var r = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : GridRenderer.DEFAULT_EDGE_RADIUS;\n context.beginPath();\n context.moveTo(x + r, y);\n context.lineTo(x + w - r, y);\n context.quadraticCurveTo(x + w, y, x + w, y + r);\n context.lineTo(x + w, y + h - r);\n context.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n context.lineTo(x + r, y + h);\n context.quadraticCurveTo(x, y + h, x, y + h - r);\n context.lineTo(x, y + r);\n context.quadraticCurveTo(x, y, x + r, y);\n context.closePath();\n }\n drawDraggingColumn(context, state) {\n var _modelColumns$get3;\n var {\n draggingColumn,\n metrics,\n mouseX,\n theme,\n model\n } = state;\n if (draggingColumn == null || mouseX == null) {\n return;\n }\n var {\n range: draggingColumnVisibleRange,\n depth: draggingColumnDepth\n } = draggingColumn;\n var {\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n height,\n width,\n columnHeaderMaxDepth,\n columnHeaderHeight,\n movedColumns,\n modelColumns,\n floatingLeftWidth\n } = metrics;\n var draggingModelIndex = (_modelColumns$get3 = modelColumns.get(draggingColumnVisibleRange[0])) !== null && _modelColumns$get3 !== void 0 ? _modelColumns$get3 : GridUtils.getModelIndex(draggingColumnVisibleRange[0], movedColumns);\n var draggingGroup = model.getColumnHeaderGroup(draggingModelIndex, draggingColumnDepth);\n if (draggingColumnDepth > 0 && !draggingGroup) {\n return;\n }\n var [startIndex, endIndex] = draggingColumnVisibleRange;\n var originalLeft = getOrThrow(allColumnXs, startIndex);\n var originalRight = getOrThrow(allColumnXs, endIndex) + getOrThrow(allColumnWidths, endIndex);\n var originalWidth = originalRight - originalLeft;\n var draggingLeft = draggingColumn.left;\n var {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor\n } = theme;\n var columnHeaderOffset = (columnHeaderMaxDepth - draggingColumnDepth - 1) * columnHeaderHeight;\n context.save();\n context.translate(gridX, 0);\n context.save();\n context.beginPath();\n\n // Don't draw over frozen columns\n context.rect(floatingLeftWidth, 0, width, height);\n context.clip();\n\n // First, we need to draw over where the column is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(originalLeft, columnHeaderOffset, originalWidth, height);\n context.restore();\n\n // Then draw the shadow of the moving column\n context.translate(0, reorderOffset);\n context.save();\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n context.fillStyle = backgroundColor;\n context.fillRect(draggingColumn.left, columnHeaderOffset + reorderOffset, draggingColumn.width, height);\n context.restore(); // Reset style\n\n // Now set the clipping region and pretty much just redraw this column and all it's contents\n context.beginPath();\n context.rect(draggingColumn.left, columnHeaderOffset, draggingColumn.width + 1, height);\n context.clip();\n\n // The header drawing functions expect the context to be at the edge of the canvas\n // We offset it by how much the user has dragged\n context.translate(draggingLeft - originalLeft - gridX, 0);\n context.font = headerFont;\n var visibleColumns = [];\n for (var i = draggingColumn.range[0]; i <= draggingColumn.range[1]; i += 1) {\n visibleColumns.push(i);\n }\n\n /**\n * This will not draw the header text properly, but extensions of Grid\n * may draw extra things in the header like sorts and filters\n */\n this.drawColumnHeaders(context, state);\n\n // Ensure the column header gets drawn\n this.drawColumnHeadersForRange(context, state, [visibleColumns[0], visibleColumns[visibleColumns.length - 1]], {\n minX: originalLeft,\n maxX: width\n });\n\n // Now move to the edge of the \"grid\" (top-left of top-left cell). We then draw the\n // grid background, but only the clipped region will be drawn where the dragging column is.\n context.translate(gridX, gridY);\n context.font = font;\n this.drawGridBackground(context, state);\n\n // Then draw the contents of the column that is being dragged\n for (var _i9 = startIndex; _i9 <= endIndex; _i9 += 1) {\n this.drawColumnCellContents(context, state, _i9);\n }\n context.restore();\n }\n drawDraggingRow(context, state) {\n var {\n draggingRow,\n draggingRowOffset,\n metrics,\n mouseY,\n theme\n } = state;\n if (draggingRow == null || mouseY == null) {\n return;\n }\n var {\n gridX,\n gridY,\n allRowYs,\n allRowHeights,\n width\n } = metrics;\n var y = getOrThrow(allRowYs, draggingRow);\n var rowHeight = getOrThrow(allRowHeights, draggingRow) + 1;\n var {\n backgroundColor,\n font,\n headerFont,\n reorderOffset,\n shadowBlur,\n shadowColor\n } = theme;\n context.save();\n context.translate(0, gridY);\n\n // First, we need to draw over the row stripes where the row is coming from\n context.fillStyle = backgroundColor;\n context.fillRect(0, y, width, rowHeight);\n context.translate(gridX + reorderOffset, mouseY - y - gridY - (draggingRowOffset !== null && draggingRowOffset !== void 0 ? draggingRowOffset : 0));\n\n // Then draw the shadow of the moving row\n context.save();\n context.shadowColor = shadowColor;\n context.shadowBlur = shadowBlur;\n context.fillStyle = backgroundColor;\n context.fillRect(-gridX, y, width, rowHeight);\n context.restore();\n\n // Now set the clipping region and pretty much just redraw this row and all it's contents\n context.beginPath();\n context.rect(-gridX, y, width, rowHeight);\n context.clip();\n context.font = font;\n this.drawGridBackground(context, state);\n this.drawCellContents(context, state);\n\n // Now translate it back up and draw the header\n context.translate(-gridX, -gridY);\n context.font = headerFont;\n this.drawRowHeaders(context, state);\n context.restore();\n }\n drawScrollBars(context, state) {\n var {\n isDraggingHorizontalScrollBar,\n isDraggingVerticalScrollBar,\n isDragging,\n metrics,\n mouseX,\n mouseY,\n theme\n } = state;\n if (theme.scrollBarSize <= 0) {\n return;\n }\n var {\n width,\n height,\n handleHeight,\n handleWidth,\n scrollX,\n scrollY,\n hasHorizontalBar,\n hasVerticalBar,\n barWidth,\n barHeight,\n barLeft,\n barTop\n } = metrics;\n var {\n scrollBarBackgroundColor,\n scrollBarHoverBackgroundColor,\n scrollBarCasingColor,\n scrollBarCornerColor,\n scrollBarColor,\n scrollBarHoverColor,\n scrollBarActiveColor,\n scrollBarSize,\n scrollBarHoverSize,\n scrollBarCasingWidth,\n scrollBarSelectionTick,\n scrollBarSelectionTickColor,\n scrollBarActiveSelectionTickColor,\n autoSelectRow,\n autoSelectColumn\n } = theme;\n var isInbounds = mouseX != null && mouseY != null && mouseX <= width && mouseY <= height;\n var isVerticalBarHover = isDraggingVerticalScrollBar || hasVerticalBar && !isDraggingHorizontalScrollBar && !isDragging && mouseX != null && mouseY != null && mouseX >= width - scrollBarHoverSize && mouseY >= barTop && isInbounds;\n var isHorizontalBarHover = isDraggingHorizontalScrollBar || hasHorizontalBar && !isDraggingVerticalScrollBar && !isDragging && !isVerticalBarHover &&\n // vert bar gets priorty in overlapped corner hover area\n mouseX != null && mouseY != null && mouseY >= height - scrollBarHoverSize && mouseX >= barLeft && isInbounds;\n var hScrollBarSize = isHorizontalBarHover ? scrollBarHoverSize : scrollBarSize;\n var vScrollBarSize = isVerticalBarHover ? scrollBarHoverSize : scrollBarSize;\n context.translate(barLeft, barTop);\n if (hasHorizontalBar && hasVerticalBar) {\n // That little corner in the bottom right\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(width - barLeft - scrollBarSize, height - barTop - scrollBarSize, scrollBarSize, scrollBarSize);\n context.fillStyle = scrollBarCornerColor;\n context.fillRect(width - barLeft - scrollBarSize + scrollBarCasingWidth, height - barTop - scrollBarSize + scrollBarCasingWidth, scrollBarSize - scrollBarCasingWidth, scrollBarSize - scrollBarCasingWidth);\n }\n if (hasHorizontalBar) {\n var x = scrollX;\n var y = height - barTop - hScrollBarSize;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(0, y, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar track\n context.fillStyle = isHorizontalBarHover ? scrollBarHoverBackgroundColor : scrollBarBackgroundColor;\n context.fillRect(0, y + scrollBarCasingWidth, barWidth, hScrollBarSize - scrollBarCasingWidth);\n\n // scrollbar thumb\n if (isDraggingHorizontalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isHorizontalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n context.fillRect(x, y + scrollBarCasingWidth, handleWidth, hScrollBarSize - scrollBarCasingWidth);\n if (!autoSelectRow && scrollBarSelectionTick && scrollBarSelectionTickColor != null && scrollBarActiveSelectionTickColor != null) {\n context.fillStyle = scrollBarSelectionTickColor;\n // Scrollbar Selection Tick\n var {\n selectedRanges,\n cursorColumn\n } = state;\n var {\n lastLeft,\n columnCount\n } = metrics;\n var filteredRanges = [...selectedRanges].filter(value => value.startColumn != null && value.endColumn != null);\n var sortedRanges = filteredRanges.map(value => [value.startColumn, value.endColumn]).sort(GridUtils.compareRanges);\n var mergedRanges = GridUtils.mergeSortedRanges(sortedRanges);\n var getTickX = index => {\n if (index <= lastLeft) {\n return index / lastLeft * (barWidth - handleWidth);\n }\n return barWidth - handleWidth + (index - lastLeft) / (columnCount - lastLeft) * handleWidth;\n };\n for (var i = 0; i < mergedRanges.length; i += 1) {\n var range = mergedRanges[i];\n var startColumn = range[0];\n var endColumn = range[1];\n if (startColumn != null && endColumn != null && (startColumn !== cursorColumn || endColumn !== cursorColumn)) {\n var tickX = getTickX(startColumn);\n var tickWidth = Math.max(1, Math.round(getTickX(endColumn + 1) - tickX));\n var trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillRect(tickX, y + scrollBarCasingWidth + Math.round(trackHeight / 3), tickWidth, Math.round(trackHeight / 3));\n }\n }\n\n // Current Active Tick\n if (cursorColumn != null) {\n var _tickX = getTickX(cursorColumn);\n var _tickWidth = 2;\n var _trackHeight = hScrollBarSize - scrollBarCasingWidth;\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(_tickX, y + scrollBarCasingWidth, _tickWidth, _trackHeight);\n }\n }\n }\n if (hasVerticalBar) {\n var _x5 = width - barLeft - vScrollBarSize;\n var _y9 = scrollY;\n\n // scrollbar casing\n context.fillStyle = scrollBarCasingColor;\n context.fillRect(_x5, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar track\n context.fillStyle = isVerticalBarHover ? scrollBarHoverBackgroundColor : scrollBarBackgroundColor;\n context.fillRect(_x5 + scrollBarCasingWidth, 0, vScrollBarSize - scrollBarCasingWidth, barHeight);\n\n // scrollbar thumb\n if (isDraggingVerticalScrollBar) {\n context.fillStyle = scrollBarActiveColor;\n } else if (isVerticalBarHover) {\n context.fillStyle = scrollBarHoverColor;\n } else {\n context.fillStyle = scrollBarColor;\n }\n context.fillRect(_x5 + scrollBarCasingWidth, _y9, vScrollBarSize - scrollBarCasingWidth, handleHeight);\n if (!autoSelectColumn && scrollBarSelectionTick && scrollBarSelectionTickColor != null && scrollBarActiveSelectionTickColor != null) {\n // Scrollbar Selection Tick\n var {\n selectedRanges: _selectedRanges,\n cursorRow\n } = state;\n var {\n lastTop,\n rowCount\n } = metrics;\n var getTickY = index => {\n if (index <= lastTop) {\n return index / lastTop * (barHeight - handleHeight);\n }\n return barHeight - handleHeight + (index - lastTop) / (rowCount - lastTop) * handleHeight;\n };\n context.fillStyle = scrollBarSelectionTickColor;\n var _filteredRanges = [..._selectedRanges].filter(value => value.startRow != null && value.endRow != null);\n var _sortedRanges = _filteredRanges.map(value => [value.startRow, value.endRow]).sort(GridUtils.compareRanges);\n var _mergedRanges = GridUtils.mergeSortedRanges(_sortedRanges);\n for (var _i0 = 0; _i0 < _mergedRanges.length; _i0 += 1) {\n var _range = _mergedRanges[_i0];\n var startRow = _range[0];\n var endRow = _range[1];\n if (startRow != null && endRow != null && (startRow !== cursorRow || endRow !== cursorRow)) {\n var tickY = getTickY(startRow);\n var trackWidth = vScrollBarSize - scrollBarCasingWidth;\n var tickHeight = Math.max(1, Math.round(getTickY(endRow + 1) - tickY));\n context.fillRect(_x5 + scrollBarCasingWidth + Math.round(trackWidth / 3), tickY, Math.round(trackWidth / 3), tickHeight);\n }\n }\n\n // Current Active Tick\n if (cursorRow != null) {\n var _tickY = Math.round(getTickY(cursorRow));\n var _trackWidth = vScrollBarSize - scrollBarCasingWidth;\n var _tickHeight = 2;\n context.fillStyle = scrollBarActiveSelectionTickColor;\n context.fillRect(_x5 + scrollBarCasingWidth, _tickY, _trackWidth, _tickHeight);\n }\n }\n }\n context.translate(-barLeft, -barTop);\n }\n}\n// Default radius in pixels for corners for some elements (like the active cell)\n_defineProperty(GridRenderer, \"DEFAULT_EDGE_RADIUS\", 2);\n_defineProperty(GridRenderer, \"getCachedBackgroundColors\", memoizeClear((backgroundColors, maxDepth) => backgroundColors.split(' ').map(color => {\n var colors = [];\n for (var i = 0; i < maxDepth; i += 1) {\n colors.push(GridColorUtils.darkenForDepth(color, i, maxDepth));\n }\n return colors;\n}), {\n max: 1000\n}));\n/**\n * A memoized version of the GridColorUtils.colorWithAlpha function.\n */\n_defineProperty(GridRenderer, \"getCachedColorWithAlpha\", memoizeClear(GridColorUtils.colorWithAlpha, {\n max: 1000\n}));\n/**\n * A memoized version of the ColorUtils.isDark function.\n * ColorUtils.isDark is a very expensive function, and having a shared cache between all grids is a good idea.\n */\n_defineProperty(GridRenderer, \"getCachedColorIsDark\", memoizeClear(ColorUtils.isDark, {\n max: 1000\n}));\nexport default GridRenderer;\n//# sourceMappingURL=GridRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\nimport GridUtils from \"../GridUtils.js\";\nvar DEFAULT_INTERVAL_MS = 100;\nclass GridSelectionMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"startPoint\", void 0);\n _defineProperty(this, \"hasExtendedFloating\", false);\n // Timer used when holding a drag past the end of the grid\n _defineProperty(this, \"timer\", void 0);\n _defineProperty(this, \"lastTriggerTime\", void 0);\n }\n /**\n * Returns the latest grid selection based on the current grid selection and where the user clicked\n * This code is dependent on the behavior of onContextMenu\n * @param originalSelection The selection from the current grid state which may be stale\n * @param columnIndex The column index where the user clicked\n * @param rowIndex The row index where the user clicked\n */\n static getLatestSelection(originalSelection, columnIndex, rowIndex) {\n var clickedInOriginalSelection = GridRange.containsCell(originalSelection, columnIndex, rowIndex);\n\n // If the user clicked in a valid cell outside of the original selection,\n // the selection will be changed to just that cell.\n return clickedInOriginalSelection || columnIndex == null || rowIndex == null ? originalSelection : [GridRange.makeCell(columnIndex, rowIndex)];\n }\n onDown(gridPoint, grid, event) {\n var {\n x,\n y,\n column,\n row\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n gridX,\n gridY,\n maxX,\n maxY\n } = metrics;\n var gridMouseX = x - gridX;\n var gridMouseY = y - gridY;\n if (gridMouseX < 0 || gridMouseY < 0 || column == null && gridMouseX > maxX || row == null && gridMouseY > maxY) {\n return false;\n }\n var isModifierKey = GridUtils.isModifierKeyDown(event);\n var isShiftKey = event.shiftKey;\n if (!isModifierKey) {\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n }\n var theme = grid.getTheme();\n var {\n autoSelectRow,\n autoSelectColumn\n } = theme;\n // If they click a column/row header, don't want to select the whole table if auto select column/row is on\n if ((column !== null || !autoSelectColumn) && (row !== null || !autoSelectRow)) {\n grid.focus();\n grid.moveCursorToPosition(column, row, isShiftKey, false, isShiftKey && isModifierKey);\n }\n this.startPoint = gridPoint;\n this.hasExtendedFloating = false;\n return true;\n }\n onDrag(gridPoint, grid) {\n if (this.startPoint === undefined) {\n return false;\n }\n this.stopTimer();\n var {\n row: startRow,\n column: startColumn\n } = this.startPoint;\n var {\n x,\n y\n } = gridPoint;\n var {\n row,\n column\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n left,\n lastLeft,\n top,\n lastTop,\n columnWidth,\n rowHeight\n } = metrics;\n var dragBounds = GridUtils.getScrollDragBounds(metrics, startRow, startColumn);\n\n // If we're dragging outside of the grid entirely, then we should start scrolling\n var deltaX = 0;\n var deltaY = 0;\n if (left < lastLeft) {\n if (x < dragBounds.x1) {\n deltaX = x - dragBounds.x1;\n } else if (x > dragBounds.x2) {\n deltaX = x - dragBounds.x2;\n }\n }\n if (top < lastTop) {\n if (y < dragBounds.y1) {\n deltaY = y - dragBounds.y1;\n } else if (y > dragBounds.y2) {\n deltaY = y - dragBounds.y2;\n }\n }\n if (deltaX !== 0 || deltaY !== 0) {\n // Have it go faster depending on how far out they've dragged\n this.startTimer(grid, gridPoint, deltaX > 0 ? Math.ceil(deltaX / columnWidth) : Math.floor(deltaX / columnWidth), deltaY > 0 ? Math.ceil(deltaY / rowHeight) : Math.floor(deltaY / rowHeight));\n } else if (row != null && column != null) {\n var {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n rowCount,\n bottom,\n right,\n topVisible,\n bottomVisible,\n leftVisible,\n rightVisible\n } = metrics;\n // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area\n // So when that happens, just adjust the point to be past the new boundary\n if (!this.hasExtendedFloating) {\n if (startRow !== null && startRow < floatingTopRowCount && row >= floatingTopRowCount) {\n // Extending from floating top into the view\n row = floatingTopRowCount;\n this.hasExtendedFloating = true;\n } else if (startRow !== null && startRow >= rowCount - floatingBottomRowCount && row < rowCount - floatingBottomRowCount) {\n // Extending from floating bottom into the view\n row = rowCount - floatingBottomRowCount - 1;\n this.hasExtendedFloating = true;\n }\n if (startColumn !== null && startColumn < floatingLeftColumnCount && column >= floatingLeftColumnCount) {\n // Extending from floating left into the view\n column = floatingLeftColumnCount;\n this.hasExtendedFloating = true;\n } else if (startColumn !== null && startColumn >= columnCount - floatingRightColumnCount && column < columnCount - floatingRightColumnCount) {\n // Extending from floating right into the view\n column = columnCount - floatingRightColumnCount - 1;\n this.hasExtendedFloating = true;\n }\n }\n\n // When a selection is dragging from within the main area to over a floating area, scroll.\n if (startRow !== null && !GridUtils.isFloatingRow(startRow, metrics) && GridUtils.isFloatingRow(row, metrics)) {\n // Need to scroll\n if (startRow > row && row < top) {\n row = topVisible - 1;\n } else if (startRow < row && row > bottom) {\n row = bottomVisible + 1;\n }\n }\n if (startColumn !== null && !GridUtils.isFloatingColumn(startColumn, metrics) && GridUtils.isFloatingColumn(column, metrics)) {\n if (startColumn > column && column < left) {\n column = leftVisible - 1;\n } else if (startColumn < column && column > right) {\n column = rightVisible + 1;\n }\n }\n grid.moveCursorToPosition(column, row, true, true);\n }\n return true;\n }\n onUp(gridPoint, grid) {\n if (this.startPoint !== undefined) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.commitSelection();\n }\n return false;\n }\n\n // eslint-disable-next-line class-methods-use-this\n onDoubleClick(gridPoint, grid, event) {\n var {\n column,\n row\n } = gridPoint;\n if (row == null || column == null) {\n return false;\n }\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(column, row);\n grid.commitSelection();\n return true;\n }\n onContextMenu(gridPoint, grid, event) {\n // check if the selected is already in the selected range\n var selectedRanges = grid.getSelectedRanges();\n var isInRange = GridRange.containsCell(selectedRanges, gridPoint.column, gridPoint.row);\n\n // only change the selected range if the selected cell is not in the selected range\n if (!isInRange && gridPoint.row !== null && gridPoint.column !== null) {\n this.startPoint = undefined;\n this.stopTimer();\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(gridPoint.column, gridPoint.row);\n }\n return false;\n }\n moveSelection(grid, gridPoint, deltaX, deltaY) {\n var {\n row,\n column\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n selectionEndRow,\n selectionEndColumn\n } = grid.state;\n if (selectionEndRow == null || selectionEndColumn == null) {\n throw new Error('selection not set');\n }\n var {\n rowCount,\n columnCount\n } = metrics;\n var minX = deltaX < 0 && column != null ? column : 0;\n var maxX = deltaX > 0 && column != null ? column : columnCount - 1;\n var minY = deltaY < 0 && row != null ? row : 0;\n var maxY = deltaY > 0 && row != null ? row : rowCount - 1;\n grid.moveCursorToPosition(Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX), Math.min(Math.max(minY, selectionEndRow + deltaY), maxY), true);\n this.lastTriggerTime = Date.now();\n }\n startTimer(grid, gridPoint, deltaX, deltaY) {\n this.stopTimer();\n var timeout = this.lastTriggerTime != null ? DEFAULT_INTERVAL_MS - Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime) : 0;\n this.timer = setTimeout(() => {\n this.moveSelection(grid, gridPoint, deltaX, deltaY);\n this.startTimer(grid, gridPoint, deltaX, deltaY);\n }, timeout);\n }\n stopTimer() {\n if (this.timer !== undefined) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\nexport default GridSelectionMouseHandler;\n//# sourceMappingURL=GridSelectionMouseHandler.js.map","/* eslint class-methods-use-this: \"off\" */\nimport { getOrThrow } from '@deephaven/utils';\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridUtils from \"../GridUtils.js\";\n/**\n * Detect when the tree expand/collapse button is clicked\n */\nclass GridRowTreeMouseHandler extends GridMouseHandler {\n static isInTreeBox(gridPoint, grid) {\n var {\n column,\n row,\n x,\n y\n } = gridPoint;\n var {\n metrics\n } = grid;\n if (!metrics) throw new Error('metrics not set');\n var {\n gridX,\n gridY,\n firstColumn,\n allColumnXs,\n allColumnWidths,\n allRowHeights,\n allRowYs,\n visibleRowTreeBoxes\n } = metrics;\n if (column === firstColumn && row != null && visibleRowTreeBoxes.get(row) != null && x > gridX && y > gridY) {\n var columnX = getOrThrow(allColumnXs, column);\n var width = getOrThrow(allColumnWidths, column);\n var rowY = getOrThrow(allRowYs, row);\n var height = getOrThrow(allRowHeights, row);\n if (x >= gridX + columnX && x <= gridX + columnX + width && y >= gridY + rowY && y <= gridY + rowY + height) {\n return true;\n }\n }\n return false;\n }\n onDown(gridPoint, grid) {\n return GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid);\n }\n onClick(gridPoint, grid, event) {\n if (GridRowTreeMouseHandler.isInTreeBox(gridPoint, grid)) {\n var {\n row\n } = gridPoint;\n if (row !== null) {\n grid.toggleRowExpanded(row, GridUtils.isModifierKeyDown(event));\n return true;\n }\n }\n return false;\n }\n}\nexport default GridRowTreeMouseHandler;\n//# sourceMappingURL=GridRowTreeMouseHandler.js.map","export function isTokenBoxCellRenderer(cellRenderer) {\n return (cellRenderer === null || cellRenderer === void 0 ? void 0 : cellRenderer.getTokenBoxesForVisibleCell) !== undefined;\n}\n//# sourceMappingURL=TokenBoxCellRenderer.js.map","function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/* eslint class-methods-use-this: \"off\" */\n\nimport { getOrThrow } from '@deephaven/utils';\nimport { isEditableGridModel } from \"../EditableGridModel.js\";\nimport GridMouseHandler from \"../GridMouseHandler.js\";\nimport GridRange from \"../GridRange.js\";\nimport GridUtils, { isLinkToken } from \"../GridUtils.js\";\nimport { isTokenBoxCellRenderer } from \"../TokenBoxCellRenderer.js\"; // Handler also helps with other tooltips\nclass GridTokenMouseHandler extends GridMouseHandler {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"timeoutId\", void 0);\n _defineProperty(this, \"isHold\", false);\n _defineProperty(this, \"isDown\", false);\n // Stores the current hovered token box if it exists with translated coordinates\n _defineProperty(this, \"currentLinkBox\", void 0);\n }\n isHoveringLink(gridPoint, grid) {\n var {\n column,\n row,\n x,\n y\n } = gridPoint;\n var {\n renderer,\n metrics,\n props\n } = grid;\n var {\n model\n } = props;\n if (column == null || row == null || metrics == null) {\n this.currentLinkBox = undefined;\n return false;\n }\n var {\n modelRows,\n modelColumns\n } = metrics;\n var modelRow = getOrThrow(modelRows, row);\n var modelColumn = getOrThrow(modelColumns, column);\n var renderType = model.renderTypeForCell(modelColumn, modelRow);\n var cellRenderer = renderer.getCellRenderer(renderType);\n if (!isTokenBoxCellRenderer(cellRenderer)) {\n return false;\n }\n if (this.currentLinkBox != null) {\n var {\n x1: left,\n y1: top,\n x2: right,\n y2: bottom\n } = this.currentLinkBox;\n if (x >= left && x <= right && y >= top && y <= bottom) {\n return true;\n }\n }\n var renderState = grid.updateRenderState();\n var tokensInCell = cellRenderer.getTokenBoxesForVisibleCell(column, row, renderState);\n\n // Loop through each link and check if cursor is in bounds\n for (var i = 0; i < tokensInCell.length; i += 1) {\n if (isLinkToken(tokensInCell[i].token)) {\n var translatedTokenBox = GridUtils.translateTokenBox(tokensInCell[i], metrics);\n var {\n x1: _left,\n x2: _right,\n y1: _top,\n y2: _bottom\n } = translatedTokenBox;\n if (x >= _left && x <= _right && y >= _top && y <= _bottom) {\n this.currentLinkBox = translatedTokenBox;\n return true;\n }\n }\n }\n\n // If this point is reached, that means the cursor was not hovering any of the links or there are no links\n this.currentLinkBox = undefined;\n return false;\n }\n\n /**\n * Set the cursor to pointer when hovering over a link\n * @param gridPoint Mouse position information\n * @param grid The grid\n * @returns False\n */\n setCursor(gridPoint, grid) {\n if (this.isHoveringLink(gridPoint, grid)) {\n this.cursor = 'pointer';\n } else {\n this.cursor = null;\n }\n return false;\n }\n onMove(gridPoint, grid) {\n return this.setCursor(gridPoint, grid);\n }\n onDown(gridPoint, grid, event) {\n var isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n\n // If a modifier key or shift is down, we don't want to handle it and set isDown to false so onUp won't handle it either\n if (GridUtils.isModifierKeyDown(event) || event.shiftKey || !isUserHoveringLink) {\n return false;\n }\n this.isDown = true;\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.isHold = false;\n this.timeoutId = setTimeout(() => {\n this.isHold = true;\n var {\n column,\n row\n } = gridPoint;\n var {\n model\n } = grid.props;\n\n // After 1 second, select the row and if it is an input table, start editing\n grid.clearSelectedRanges();\n grid.focus();\n grid.moveCursorToPosition(column, row);\n if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {\n grid.startEditing(column, row);\n }\n }, GridTokenMouseHandler.HOLD_LENGTH);\n return true;\n }\n onClick(gridPoint, grid) {\n var isUserHoveringLink = this.isHoveringLink(gridPoint, grid);\n if (!isUserHoveringLink || !this.isDown || this.currentLinkBox == null) {\n this.isDown = false;\n this.isHold = false;\n return false;\n }\n\n // User is hovering a link, isDown is true\n // If isHold is true, then the select already happened so onUp shouldn't do anything\n if (!this.isHold) {\n var _this$currentLinkBox;\n // Cancel the timeout and open a new tab with the link\n if (this.timeoutId != null) {\n clearTimeout(this.timeoutId);\n }\n this.timeoutId = undefined;\n grid.props.onTokenClicked((_this$currentLinkBox = this.currentLinkBox) === null || _this$currentLinkBox === void 0 ? void 0 : _this$currentLinkBox.token);\n }\n this.isHold = false;\n this.isDown = false;\n return true;\n }\n}\n_defineProperty(GridTokenMouseHandler, \"HOLD_LENGTH\", 1000);\nexport default GridTokenMouseHandler;\n//# sourceMappingURL=GridTokenMouseHandler.js.map"],"names":["_excluded","ownKeys","e","r","t","o","_objectSpread","_defineProperty","_toPropertyKey","i","_toPrimitive","_objectWithoutProperties","_objectWithoutPropertiesLoose","n","ActionGroup","_ref","defaultSelectedKeys","disabledKeys","children","selectedKeys","UNSAFE_className","onChange","onSelectionChange","props","wrappedChildren","useMemo","wrapItemChildren","_jsx","SpectrumActionGroup","cl","ListActionGroup","_props","ListActionMenu","useRenderNormalizedItem","itemIconSlot","showItemDescriptions","showItemIcons","tooltipOptions","actions","useCallback","normalizedItem","_normalizedItem$item","_normalizedItem$item$","_normalizedItem$item2","_normalizedItem$item3","_normalizedItem$item4","itemKey","getItemKey","content","wrapPrimitiveWithText","textValue","description","icon","wrapIcon","action","isElementOfType","key","keys","_actions$props$onChan","_actions$props","ActionMenu","isOpen","_actions$props$onOpen","_actions$props2","Item","ITEM_EMPTY_STRING_TEXT_VALUE","_jsxs","ItemContent","useStringifiedSelection","normalizedItems","defaultSelectedKey","selectedKey","selectedStringKey","defaultSelectedStringKey","disabledStringKeys","itemSelectionToStringSet","onStringSelectionChange","_getItemKey","selectedItem","item","actualKey","SpectrumActionMenu","usePickerNormalizedProps","getInitialScrollPosition","onOpenChange","onScroll","EMPTY_FUNCTION","tooltip","normalizeTooltipOptions","renderNormalizedItem","forceRerenderKey","ref","onOpenChangeInternal","usePickerScrollOnOpen","itemOrSection","isNormalizedSection","_itemOrSection$item","_itemOrSection$item2","Section","_excluded2","PickerNormalized","_usePickerNormalizedP","pickerProps","_createElement","SpectrumPicker","ComboBox","React","_usePickerProps","usePickerProps","scrollRef","comboBoxProps","pickerRef","useMergeRef","SpectrumComboBox","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","value","replaceIndex","newChar","fillToLength","checkValue","exampleValue","length","trimTrailingMask","emptyMask","log","Log","SELECTION_DIRECTION","FIXED_WIDTH_SPACE","MaskedInput","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","normalizePastedText","text","onSelect","onSubmit","pattern","placeholder","selection","onFocus","onBlur","dataTestId","input","useForwardedRef","examples","useEffect","_input$current","selectionStart","selectionEnd","selectionDirection","getSegment","cursorPosition","testValue","_i","fillValue","filledValue","isValid","patternRegex","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","newSelection","handleSelectCapture","_input$current$select","handleArrowKey","handlePaste","pastedText","normalizedText","handleKeyDown","trimmedValue","_newValue","_newValue2","newChars","_i2","maxReplaceIndex","_newValue3","newSelectionStart","nextSegmentSelection","classNames","getNextNumberSegmentValue","lowerBound","upperBound","modValue","addSeparators","dateTimeMillis","micros","nanos","v","DATE_PATTERN","TIME_PATTERN","FULL_DATE_PATTERN","DATE_VALUE_STRING","DEFAULT_VALUE_STRING","FULL_DATE_FORMAT","fixIncompleteValue","removeSeparators","EXAMPLES","DateTimeInput","defaultValue","setValue","useState","setSelection","normalizeText","normalized","dateTimeMatch","handleChange","handleBlur","prevValue","fixedValue","_DraggableItemList","DraggableItemList","PureComponent","Tooltip","FontAwesomeIcon","vsGripper","_ref2","badgeText","_ref3","_ref4","_item$displayValue","isClone","selectedCount","draggablePrefix","itemIndex","draggableId","num","memoize","renderItem","isFocused","isSelected","isDragDisabled","style","Draggable","provided","ItemList","_ref5","draggingItemClassName","items","offset","snapshot","rubric","draggableProps","dragHandleProps","innerRef","_this$itemList$curren","_this$itemList$curren2","_this$itemList$curren3","selectedRanges","RangeUtils","droppableId","isDoubleClickSelect","isDropDisabled","hasPlaceholder","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onViewportChange","rowHeight","Droppable","isSwitchMenuItemType","MenuItem","subtitle","title","UISwitch","vsChevronRight","Menu","_onSelect","Page","onBack","onClose","Button","vsChevronLeft","vsClose","Stack","childrenArray","prevChildrenArray","usePrevious","mainView","setMainView","pushingView","setPushingView","poppingView","setPoppingView","topChild","pushComplete","popComplete","SlideTransition","_Fragment","Option","SelectValueList","displayValue","disabled","Checkbox","itemElements","element","visibleItemIndex","top","bottom","topRow","bottomRow","elements","index","isInvalid","AssertionError","isEditableGridModel","model","assertIsEditableGridModel","trimMap","map","cacheSize","GridMetricCalculator","targetSize","iter","getFloatingCoordinates","startCount","endCount","totalCount","max","sizeMap","coordinates","x","getOrThrow","userColumnWidths","userRowHeights","calculatedColumnWidths","calculatedRowHeights","contentColumnWidths","contentRowHeights","fontWidthsLower","fontWidthsUpper","allCharWidths","modelRows","modelColumns","movedRows","movedColumns","initialRowHeights","initialColumnWidths","state","left","leftOffset","topOffset","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","columnsForRender","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","userSetWidth","context","headerHorizontalPadding","headerFont","totalPadding","headerText","font","cellHorizontalPadding","dataBarHorizontalPadding","rowsPerPage","cellPadding","cellRenderType","cellWidth","maxWidth","charWidths","result","char","nextChar","pair","treePadding","textMetrics","size","defaultTheme","darkenForDepth","color","maxDepth","lab","convert","modifier","colorWithAlpha","alpha","g","b","linearSRGBToOklab","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","GridColumnSeparatorMouseHandler","columnIndex","DEFAULT_FONT_WIDTH","CellRenderer","memoizeClear","fontWidthLower","fontWidthUpper","truncationChar","GridRenderer","mouseX","mouseY","treeMarkerColor","treeMarkerHoverColor","treeBox","isExpanded","markerText","textX","textY","isDataBarGridModel","DataBarCellRenderer","widestValue","isFirstColumn","textAlign","textWidth","truncatedText","columnMin","columnMax","axis","dataBarColor","valuePlacement","opacity","markers","direction","hasGradient","dataBarX","dataBarY","zeroPosition","leftmostPosition","markerXs","totalValueRange","dataBarWidth","hasRowDividers","yOffset","gradientWidth","gradientX","gradient","markerX","shouldRenderDashedLine","treeIndent","longestValueWidth","leftPadding","rightPadding","columnLongest","marker","markerValue","rightmostPosition","colors","canvas","ctx","oklabColors","colorStop","colorChangeInterval","leftColorIndex","TextCellRenderer","tokens","_font","_baseline","textHeight","tokenBoxes","lastTokenEnd","currentTextWidth","token","start","end","tokenWidth","newTokenBox","textColor","tokenIndex","textStart","actualBoundingBoxDescent","_token$end","nextToken","textEnd","widthOfUnderline","EMPTY_ARRAY","actualBoundingBoxAscent","cachedTokenBoxes","tokenBox","str","len","charWidth","lo","hi","mid","truncatedStr","draggingRow","c","floatingDividerOuterColor","floatingDividerInnerColor","_y","_x","_y2","_y3","_x2","_x3","drawHover","rowBackgroundColors","rows","minX","shadowBlur","shadowColor","shadowAlpha","colorSets","colorRowMap","topShadowRows","bottomShadowRows","addRowToColorMap","rowAbove","colorSet","depthAbove","colorRows","_row","startColor","endColor","_row2","_startColor","_endColor","_gradient","_row3","_y4","gradientY","mouseColumn","mouseRow","startRow","endRow","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","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","_i0","_range","tickY","trackWidth","tickHeight","_tickY","_trackWidth","_tickHeight","backgroundColors","ColorUtils","DEFAULT_INTERVAL_MS","GridSelectionMouseHandler","originalSelection","rowIndex","clickedInOriginalSelection","GridRange","gridMouseX","gridMouseY","isModifierKey","isShiftKey","dragBounds","deltaX","deltaY","isInRange","selectionEndRow","selectionEndColumn","timeout","GridRowTreeMouseHandler","isTokenBoxCellRenderer","GridTokenMouseHandler","renderer","renderState","tokensInCell","isLinkToken","translatedTokenBox","_left","_right","_top","_bottom","isUserHoveringLink","_this$currentLinkBox"],"mappings":"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"}