@linzjs/step-ag-grid 1.4.6 → 1.4.8

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 (71) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +133 -99
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/components/GridCell.d.ts +5 -4
  5. package/dist/src/components/gridForm/GridFormPopoutMenu.d.ts +1 -0
  6. package/dist/src/components/gridRender/GridRenderGenericCell.d.ts +8 -5
  7. package/dist/src/react-menu3/components/ControlledMenu.d.ts +8 -2
  8. package/dist/src/react-menu3/components/FocusableItem.d.ts +2 -2
  9. package/dist/src/react-menu3/components/Menu.d.ts +1 -1
  10. package/dist/src/react-menu3/components/MenuButton.d.ts +1 -1
  11. package/dist/src/react-menu3/components/MenuDivider.d.ts +3 -3
  12. package/dist/src/react-menu3/components/MenuGroup.d.ts +1 -1
  13. package/dist/src/react-menu3/components/MenuHeader.d.ts +1 -1
  14. package/dist/src/react-menu3/components/MenuItem.d.ts +2 -4
  15. package/dist/src/react-menu3/components/MenuList.d.ts +2 -56
  16. package/dist/src/react-menu3/components/MenuRadioGroup.d.ts +2 -2
  17. package/dist/src/react-menu3/components/SubMenu.d.ts +6 -6
  18. package/dist/src/react-menu3/hooks/useBEM.d.ts +1 -1
  19. package/dist/src/react-menu3/hooks/useItems.d.ts +1 -1
  20. package/dist/src/react-menu3/hooks/useMenuChange.d.ts +1 -1
  21. package/dist/src/react-menu3/hooks/useMenuState.d.ts +1 -1
  22. package/dist/src/react-menu3/hooks/useMenuStateAndFocus.d.ts +1 -1
  23. package/dist/src/react-menu3/index.d.ts +1 -391
  24. package/dist/src/react-menu3/positionUtils/getPositionHelpers.d.ts +1 -1
  25. package/dist/src/react-menu3/positionUtils/placeLeftorRight.d.ts +1 -1
  26. package/dist/src/react-menu3/positionUtils/placeToporBottom.d.ts +1 -1
  27. package/dist/src/react-menu3/positionUtils/positionContextMenu.d.ts +1 -1
  28. package/dist/src/react-menu3/positionUtils/positionMenu.d.ts +1 -1
  29. package/dist/src/react-menu3/types.d.ts +389 -0
  30. package/dist/src/react-menu3/utils/constants.d.ts +12 -5
  31. package/dist/src/react-menu3/utils/index.d.ts +0 -1
  32. package/dist/src/react-menu3/utils/{propTypes.d.ts → propTypes2.d.ts} +0 -0
  33. package/dist/src/react-menu3/utils/utils.d.ts +2 -2
  34. package/dist/step-ag-grid.esm.js +124 -101
  35. package/dist/step-ag-grid.esm.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/components/GridCell.tsx +32 -16
  38. package/src/components/GridPopoverHook.tsx +1 -1
  39. package/src/components/gridForm/GridFormMultiSelect.tsx +32 -19
  40. package/src/components/gridForm/GridFormPopoutMenu.tsx +11 -8
  41. package/src/components/gridRender/GridRenderGenericCell.tsx +14 -9
  42. package/src/components/gridRender/GridRenderPopoutMenuCell.tsx +14 -2
  43. package/src/contexts/GridContextProvider.tsx +3 -2
  44. package/src/react-menu3/components/ControlledMenu.tsx +40 -46
  45. package/src/react-menu3/components/FocusableItem.tsx +2 -2
  46. package/src/react-menu3/components/Menu.tsx +1 -1
  47. package/src/react-menu3/components/MenuButton.tsx +1 -1
  48. package/src/react-menu3/components/MenuDivider.tsx +2 -2
  49. package/src/react-menu3/components/MenuGroup.tsx +1 -1
  50. package/src/react-menu3/components/MenuHeader.tsx +1 -1
  51. package/src/react-menu3/components/MenuItem.tsx +2 -3
  52. package/src/react-menu3/components/MenuList.tsx +19 -62
  53. package/src/react-menu3/components/MenuRadioGroup.tsx +2 -2
  54. package/src/react-menu3/components/SubMenu.tsx +17 -8
  55. package/src/react-menu3/hooks/useBEM.ts +1 -1
  56. package/src/react-menu3/hooks/useItems.ts +1 -1
  57. package/src/react-menu3/hooks/useMenuChange.ts +1 -1
  58. package/src/react-menu3/hooks/useMenuState.ts +1 -1
  59. package/src/react-menu3/hooks/useMenuStateAndFocus.ts +1 -1
  60. package/src/react-menu3/index.ts +1 -431
  61. package/src/react-menu3/positionUtils/getPositionHelpers.ts +3 -3
  62. package/src/react-menu3/positionUtils/placeLeftorRight.ts +1 -1
  63. package/src/react-menu3/positionUtils/placeToporBottom.ts +1 -1
  64. package/src/react-menu3/positionUtils/positionContextMenu.ts +1 -1
  65. package/src/react-menu3/positionUtils/positionMenu.ts +1 -1
  66. package/src/react-menu3/{index.d.ts → types.ts} +106 -359
  67. package/src/react-menu3/utils/constants.ts +24 -5
  68. package/src/react-menu3/utils/index.ts +1 -1
  69. package/src/react-menu3/utils/{propTypes.ts → propTypes2.ts} +0 -0
  70. package/src/react-menu3/utils/utils.ts +2 -2
  71. package/src/stories/components/GridReadOnly.stories.tsx +9 -5
package/dist/index.d.ts CHANGED
@@ -33,3 +33,4 @@ export { TextAreaInput } from "./src/lui/TextAreaInput";
33
33
  export { TextInputFormatted } from "./src/lui/TextInputFormatted";
34
34
  export * from "./src/utils/bearing";
35
35
  export * from "./src/utils/util";
36
+ export * from "./src/react-menu3/index";
package/dist/index.js CHANGED
@@ -8,7 +8,6 @@ var lodashEs = require('lodash-es');
8
8
  var agGridReact = require('ag-grid-react');
9
9
  var lui = require('@linzjs/lui');
10
10
  var reactDom = require('react-dom');
11
- var propTypes = require('prop-types');
12
11
  var reactTransitionState = require('react-transition-state');
13
12
  var debounce = require('debounce-promise');
14
13
  var uuid = require('uuid');
@@ -476,9 +475,11 @@ var GridContextProvider = function (props) {
476
475
  }
477
476
  // This is needed to trigger postSortRowsHook
478
477
  gridApi.refreshClientSideRowModel();
479
- stopEditing();
480
478
  }
481
- setSaving && setSaving(false);
479
+ else {
480
+ // Don't set saving if ok as the form has already closed
481
+ setSaving && setSaving(false);
482
+ }
482
483
  return [2 /*return*/, ok];
483
484
  }
484
485
  });
@@ -875,41 +876,55 @@ var GridLoadableCell = function (props) {
875
876
  var GridIcon = function (props) { return (jsxRuntime.jsx(lui.LuiIcon, { name: props.icon, title: props.title, alt: props.title, size: "md", className: "AgGridGenericCellRenderer-".concat(props.icon, "Icon") })); };
876
877
 
877
878
  var GridRendererGenericCell = function (props) {
878
- var _a, _b, _c, _d, _e, _f, _g;
879
+ var _a, _b, _c;
879
880
  var checkUpdating = react.useContext(UpdatingContext).checkUpdating;
880
- var cellRendererParams = (_a = props.colDef) === null || _a === void 0 ? void 0 : _a.cellRendererParams;
881
+ var colDef = props.colDef;
882
+ var cellRendererParams = colDef.cellRendererParams;
881
883
  var warningFn = cellRendererParams === null || cellRendererParams === void 0 ? void 0 : cellRendererParams.warning;
882
884
  var warningText = warningFn ? warningFn(props) : undefined;
883
885
  var infoFn = cellRendererParams === null || cellRendererParams === void 0 ? void 0 : cellRendererParams.info;
884
886
  var infoText = infoFn ? infoFn(props) : undefined;
885
887
  var defaultFormatter = function (props) { return props.value; };
886
- var formatter = (_c = (_b = props.colDef) === null || _b === void 0 ? void 0 : _b.valueFormatter) !== null && _c !== void 0 ? _c : defaultFormatter;
888
+ var formatter = (_a = colDef.valueFormatter) !== null && _a !== void 0 ? _a : defaultFormatter;
887
889
  if (typeof formatter === "string") {
888
890
  console.error("valueFormatter must be a function");
889
891
  return jsxRuntime.jsx("span", { children: "valueFormatter must be a function" });
890
892
  }
891
893
  var formatted = formatter(props);
892
- return (jsxRuntime.jsx(GridLoadableCell, __assign({ isLoading: checkUpdating((_g = (_e = (_d = props.colDef) === null || _d === void 0 ? void 0 : _d.field) !== null && _e !== void 0 ? _e : (_f = props.colDef) === null || _f === void 0 ? void 0 : _f.colId) !== null && _g !== void 0 ? _g : "", props.data.id) }, { children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [typeof warningText === "string" && jsxRuntime.jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsxRuntime.jsx(GridIcon, { icon: "ic_info", title: infoText }), jsxRuntime.jsx("span", __assign({ title: formatted }, { children: formatted }))] }) })));
894
+ return (jsxRuntime.jsx(GridLoadableCell, __assign({ isLoading: checkUpdating((_c = (_b = colDef.field) !== null && _b !== void 0 ? _b : colDef.colId) !== null && _c !== void 0 ? _c : "", props.data.id) }, { children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [typeof warningText === "string" && jsxRuntime.jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsxRuntime.jsx(GridIcon, { icon: "ic_info", title: infoText }), jsxRuntime.jsx("span", __assign({ title: formatted }, { children: formatted }))] }) })));
893
895
  };
894
896
 
895
- var GridCellRenderer = function (cellRendererParams) {
896
- var _a, _b, _c, _d, _e;
897
+ var GridCellRenderer = function (props) {
898
+ var _a, _b, _c;
897
899
  var checkUpdating = react.useContext(UpdatingContext).checkUpdating;
898
- var colDef = cellRendererParams.colDef;
899
- return ((_a = colDef === null || colDef === void 0 ? void 0 : colDef.cellRendererParams) === null || _a === void 0 ? void 0 : _a.oldCellRenderer) ? (jsxRuntime.jsx(GridLoadableCell, __assign({ isLoading: checkUpdating((_e = (_c = (_b = cellRendererParams.colDef) === null || _b === void 0 ? void 0 : _b.field) !== null && _c !== void 0 ? _c : (_d = cellRendererParams.colDef) === null || _d === void 0 ? void 0 : _d.colId) !== null && _e !== void 0 ? _e : "", cellRendererParams.data.id) }, { children: jsxRuntime.jsx(colDef.cellRendererParams.oldCellRenderer, __assign({}, cellRendererParams)) }))) : (jsxRuntime.jsx(GridRendererGenericCell, __assign({}, cellRendererParams)));
900
+ var colDef = props.colDef;
901
+ var rendererParams = colDef.cellRendererParams;
902
+ var warningFn = rendererParams === null || rendererParams === void 0 ? void 0 : rendererParams.warning;
903
+ var warningText = warningFn ? warningFn(props) : undefined;
904
+ var infoFn = rendererParams === null || rendererParams === void 0 ? void 0 : rendererParams.info;
905
+ var infoText = infoFn ? infoFn(props) : undefined;
906
+ return ((_a = colDef === null || colDef === void 0 ? void 0 : colDef.cellRendererParams) === null || _a === void 0 ? void 0 : _a.originalCellRenderer) ? (jsxRuntime.jsx(GridLoadableCell, __assign({ isLoading: checkUpdating((_c = (_b = colDef.field) !== null && _b !== void 0 ? _b : colDef.colId) !== null && _c !== void 0 ? _c : "", props.data.id) }, { children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [typeof warningText === "string" && jsxRuntime.jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsxRuntime.jsx(GridIcon, { icon: "ic_info", title: infoText }), jsxRuntime.jsx(colDef.cellRendererParams.originalCellRenderer, __assign({}, props))] }) }))) : (jsxRuntime.jsx(GridRendererGenericCell, __assign({}, props)));
900
907
  };
901
908
  /**
902
909
  * For editing a text area.
903
910
  */
904
911
  var GridCell = function (props) {
905
912
  var _a;
906
- return __assign(__assign(__assign({ cellRenderer: GridCellRenderer, sortable: !!((props === null || props === void 0 ? void 0 : props.field) || (props === null || props === void 0 ? void 0 : props.valueGetter)), resizable: true }, (props.cellEditorParams && {
913
+ return __assign(__assign(__assign(__assign({ sortable: !!((props === null || props === void 0 ? void 0 : props.field) || (props === null || props === void 0 ? void 0 : props.valueGetter)), resizable: true }, (props.cellEditorParams && {
907
914
  cellClass: ((_a = props === null || props === void 0 ? void 0 : props.cellEditorParams) === null || _a === void 0 ? void 0 : _a.multiEdit) ? GenericMultiEditCellClass : undefined,
908
915
  editable: true,
909
916
  cellEditor: GenericCellEditorComponent
910
- })), props), { cellRendererParams: __assign({ originalCellRender: props.cellRenderer }, props.cellRendererParams) });
917
+ })), {
918
+ // Default value formatter, otherwise react freaks out on objects
919
+ valueFormatter: function (params) {
920
+ var types = ["number", "undefined", "boolean", "string"];
921
+ if (types.includes(typeof params.value))
922
+ return params.value;
923
+ else
924
+ return JSON.stringify(params.value);
925
+ } }), props), { cellRenderer: GridCellRenderer, cellRendererParams: __assign({ originalCellRenderer: props.cellRenderer }, props.cellRendererParams) });
911
926
  };
912
- var GenericCellEditorComponent = function (props) {
927
+ var GenericCellEditorComponentFr = function (props, _) {
913
928
  var _a, _b, _c;
914
929
  var _d = react.useContext(GridContext), updatingCells = _d.updatingCells, getSelectedRows = _d.getSelectedRows;
915
930
  var colDef = props.colDef, data = props.data;
@@ -938,7 +953,8 @@ var GenericCellEditorComponent = function (props) {
938
953
  if (cellEditorParams == null)
939
954
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
940
955
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { children: colDef.cellRenderer ? jsxRuntime.jsx(colDef.cellRenderer, __assign({}, props, { saving: saving })) : props.value }), (cellEditorParams === null || cellEditorParams === void 0 ? void 0 : cellEditorParams.form) && (jsxRuntime.jsx(cellEditorParams.form, { cellEditorParams: props, updateValue: updateValue, saving: saving, formProps: formProps, value: value, field: field, selectedRows: selectedRows }))] }));
941
- };
956
+ };
957
+ var GenericCellEditorComponent = react.forwardRef(GenericCellEditorComponentFr);
942
958
 
943
959
  /**
944
960
  * If loading is true this returns a loading spinner, otherwise it returns its children.
@@ -1075,7 +1091,6 @@ var MenuStateMap = Object.freeze({
1075
1091
 
1076
1092
  var isMenuOpen = function (state) { return !!state && state[0] === "o"; };
1077
1093
  var batchedUpdates = reactDom.unstable_batchedUpdates || (function (callback) { return callback(); });
1078
- var values = Object.values || (function (obj) { return Object.keys(obj).map(function (key) { return obj[key]; }); });
1079
1094
  var floatEqual = function (a, b, diff) {
1080
1095
  if (diff === void 0) { diff = 0.0001; }
1081
1096
  return Math.abs(a - b) < diff;
@@ -1146,36 +1161,6 @@ function commonProps(isDisabled, isHovering) {
1146
1161
  }
1147
1162
  var indexOfNode = function (nodeList, node) { return lodashEs.findIndex(nodeList, node); };
1148
1163
 
1149
- var stylePropTypes = function (name) {
1150
- var _a;
1151
- return (_a = {},
1152
- _a[name ? "".concat(name, "ClassName") : "className"] = propTypes.oneOfType([propTypes.string, propTypes.func]),
1153
- _a);
1154
- };
1155
- var Direction = propTypes.oneOf(["left", "right", "top", "bottom"]);
1156
- // Menu, SubMenu and ControlledMenu
1157
- var menuPropTypes = __assign(__assign(__assign({ className: propTypes.string }, stylePropTypes("menu")), stylePropTypes("arrow")), { menuStyle: propTypes.object, arrowStyle: propTypes.object, arrow: propTypes.bool, setDownOverflow: propTypes.bool, offsetX: propTypes.number, offsetY: propTypes.number, align: propTypes.oneOf(["start", "center", "end"]), direction: Direction, position: propTypes.oneOf(["auto", "anchor", "initial"]), overflow: propTypes.oneOf(["auto", "visible", "hidden"]) });
1158
- // Menu and ControlledMenu
1159
- var rootMenuPropTypes = __assign(__assign({}, menuPropTypes), { containerProps: propTypes.object, initialMounted: propTypes.bool, unmountOnClose: propTypes.bool, transition: propTypes.oneOfType([
1160
- propTypes.bool,
1161
- propTypes.exact({
1162
- open: propTypes.bool,
1163
- close: propTypes.bool,
1164
- item: propTypes.bool
1165
- }),
1166
- ]), transitionTimeout: propTypes.number, boundingBoxRef: propTypes.object, boundingBoxPadding: propTypes.string, reposition: propTypes.oneOf(["auto", "initial"]), repositionFlag: propTypes.oneOfType([propTypes.string, propTypes.number]), viewScroll: propTypes.oneOf(["auto", "close", "initial"]), submenuOpenDelay: propTypes.number, submenuCloseDelay: propTypes.number, portal: propTypes.oneOfType([
1167
- propTypes.bool,
1168
- propTypes.exact({
1169
- target: propTypes.object,
1170
- stablePosition: propTypes.bool
1171
- }),
1172
- ]), theming: propTypes.string, onItemClick: propTypes.func });
1173
- // Menu and SubMenu
1174
- ({
1175
- instanceRef: propTypes.oneOfType([propTypes.object, propTypes.func]),
1176
- onMenuChange: propTypes.func
1177
- });
1178
-
1179
1164
  var withHovering = function (name, WrappedComponent) {
1180
1165
  var Component = react.memo(WrappedComponent);
1181
1166
  var WithHovering = react.forwardRef(function (props, ref) {
@@ -1390,17 +1375,17 @@ var useMenuStateAndFocus = function (options) {
1390
1375
  return [__assign({ menuItemFocus: menuItemFocus }, menuProps), toggleMenu, openMenu];
1391
1376
  };
1392
1377
 
1393
- react.forwardRef(function MenuButton(_a, ref) {
1378
+ var MenuButton = react.forwardRef(function MenuButton(_a, ref) {
1394
1379
  var className = _a.className, isOpen = _a.isOpen, disabled = _a.disabled, children = _a.children, restProps = __rest(_a, ["className", "isOpen", "disabled", "children"]);
1395
1380
  var modifiers = react.useMemo(function () { return ({ open: isOpen }); }, [isOpen]);
1396
1381
  return (jsxRuntime.jsx("button", __assign({ "aria-haspopup": true, "aria-expanded": isOpen, "aria-disabled": disabled || undefined, type: "button", disabled: disabled }, restProps, { ref: ref, className: useBEM({ block: menuButtonClass, modifiers: modifiers, className: className }) }, { children: children })));
1397
1382
  });
1398
1383
 
1399
1384
  var getPositionHelpers = function (containerRef, menuRef, menuScroll, boundingBoxPadding) {
1400
- var _a;
1385
+ var _a, _b, _c;
1401
1386
  var menuRect = menuRef.current.getBoundingClientRect();
1402
- var containerRect = containerRef.current.getBoundingClientRect();
1403
- var thisWindow = (_a = containerRef.current.ownerDocument.defaultView) !== null && _a !== void 0 ? _a : window;
1387
+ var thisWindow = (_b = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument.defaultView) !== null && _b !== void 0 ? _b : window;
1388
+ var containerRect = ((_c = containerRef.current) !== null && _c !== void 0 ? _c : thisWindow.document.body).getBoundingClientRect();
1404
1389
  var boundingRect = menuScroll === window || menuScroll === thisWindow
1405
1390
  ? {
1406
1391
  left: 0,
@@ -1751,7 +1736,7 @@ var MenuList = function (_a) {
1751
1736
  endTransition && safeCall(endTransition);
1752
1737
  };
1753
1738
  var handlePosition = react.useCallback(function (noOverflowCheck) {
1754
- if (!containerRef.current) {
1739
+ if (!(containerRef === null || containerRef === void 0 ? void 0 : containerRef.current)) {
1755
1740
  if (process.env.NODE_ENV !== "production") {
1756
1741
  console.error('[React-Menu] Menu cannot be positioned properly as container ref is null. If you need to initialise `state` prop to "open" for ControlledMenu, please see this solution: https://codesandbox.io/s/initial-open-sp10wn');
1757
1742
  }
@@ -1950,10 +1935,27 @@ var MenuList = function (_a) {
1950
1935
  else if (captureFocus) {
1951
1936
  // Use a timeout here because if set focus immediately, page might scroll unexpectedly.
1952
1937
  var id_1 = setTimeout(function () {
1953
- var _a;
1938
+ var _a, _b, _c;
1954
1939
  // If focus has already been set to a children element, don't set focus on menu or item
1955
1940
  if (!menuRef.current.contains(document.activeElement)) {
1956
- (_a = focusRef.current) === null || _a === void 0 ? void 0 : _a.focus();
1941
+ // Handle popover portal focus
1942
+ var popupElement = (_a = focusRef.current) === null || _a === void 0 ? void 0 : _a.nextSibling;
1943
+ if (popupElement instanceof Element) {
1944
+ var input = popupElement.querySelectorAll("input,textarea")[0];
1945
+ if (input) {
1946
+ input.focus();
1947
+ // Text areas should start at end
1948
+ if (input instanceof HTMLTextAreaElement) {
1949
+ input.selectionStart = input.value.length;
1950
+ }
1951
+ }
1952
+ else {
1953
+ (_b = focusRef.current) === null || _b === void 0 ? void 0 : _b.focus();
1954
+ }
1955
+ }
1956
+ else {
1957
+ (_c = focusRef.current) === null || _c === void 0 ? void 0 : _c.focus();
1958
+ }
1957
1959
  setItemFocus();
1958
1960
  }
1959
1961
  }, openTransition ? 170 : 100);
@@ -1996,9 +1998,9 @@ var MenuList = function (_a) {
1996
1998
  return (jsxRuntime.jsxs("ul", __assign({ role: "menu", "aria-label": ariaLabel }, mergeProps({ onKeyDown: onKeyDown, onAnimationEnd: onAnimationEnd }, restProps), commonProps(isDisabled), { ref: useCombinedRef(externalRef, menuRef), className: useBEM({ block: menuClass, modifiers: modifiers, className: menuClassName }), style: __assign(__assign(__assign({}, menuStyle), overflowStyle), { margin: 0, display: state === "closed" ? "none" : undefined, position: "absolute", left: menuPosition.x, top: menuPosition.y }) }, { children: [jsxRuntime.jsx("div", { ref: focusRef, tabIndex: -1, style: { position: "absolute", left: 0, top: 0 } }), arrow && (jsxRuntime.jsx("div", { className: _arrowClass, style: __assign(__assign({}, arrowStyle), { position: "absolute", left: arrowPosition.x, top: arrowPosition.y }), ref: arrowRef })), jsxRuntime.jsx(MenuListContext.Provider, __assign({ value: listContext }, { children: jsxRuntime.jsx(MenuListItemContext.Provider, __assign({ value: itemContext }, { children: jsxRuntime.jsx(HoverItemContext.Provider, __assign({ value: hoverItem }, { children: children })) })) }))] })));
1997
1999
  };
1998
2000
 
1999
- var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2001
+ var ControlledMenuFr = function (_a, externalRef) {
2000
2002
  var ariaLabel = _a["aria-label"], className = _a.className, containerProps = _a.containerProps, initialMounted = _a.initialMounted, unmountOnClose = _a.unmountOnClose, transition = _a.transition, transitionTimeout = _a.transitionTimeout, boundingBoxRef = _a.boundingBoxRef, boundingBoxPadding = _a.boundingBoxPadding, _b = _a.reposition, reposition = _b === void 0 ? "auto" : _b, _c = _a.submenuOpenDelay, submenuOpenDelay = _c === void 0 ? 300 : _c, _d = _a.submenuCloseDelay, submenuCloseDelay = _d === void 0 ? 150 : _d, skipOpen = _a.skipOpen, _e = _a.viewScroll, viewScroll = _e === void 0 ? "initial" : _e, portal = _a.portal, theming = _a.theming, onItemClick = _a.onItemClick, onClose = _a.onClose, saveButtonRef = _a.saveButtonRef, restProps = __rest(_a, ["aria-label", "className", "containerProps", "initialMounted", "unmountOnClose", "transition", "transitionTimeout", "boundingBoxRef", "boundingBoxPadding", "reposition", "submenuOpenDelay", "submenuCloseDelay", "skipOpen", "viewScroll", "portal", "theming", "onItemClick", "onClose", "saveButtonRef"]);
2001
- var containerRef = react.useRef(null);
2003
+ var containerRef = react.useRef();
2002
2004
  var scrollNodesRef = react.useRef({});
2003
2005
  var anchorRef = restProps.anchorRef, state = restProps.state;
2004
2006
  var settings = react.useMemo(function () { return ({
@@ -2036,7 +2038,7 @@ var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2036
2038
  // the cell doesn't refresh during update if save is invoked from a native event
2037
2039
  // This doesn't happen in React18
2038
2040
  // To work around it, I invoke the save by clicking on a passed in invisible button ref
2039
- if (saveButtonRef.current)
2041
+ if (saveButtonRef === null || saveButtonRef === void 0 ? void 0 : saveButtonRef.current)
2040
2042
  saveButtonRef.current.click();
2041
2043
  else
2042
2044
  safeCall(onClose, { reason: CloseReason.BLUR });
@@ -2051,7 +2053,7 @@ var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2051
2053
  setTimeout(function () { return (skipOpen.current = false); }, 300);
2052
2054
  }
2053
2055
  }
2054
- }, [clickIsWithinMenu, onClose]);
2056
+ }, [clickIsWithinMenu, onClose, saveButtonRef, skipOpen]);
2055
2057
  var handleScreenEventForCancel = react.useCallback(function (ev) {
2056
2058
  if (!clickIsWithinMenu(ev)) {
2057
2059
  ev.preventDefault();
@@ -2060,7 +2062,7 @@ var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2060
2062
  }, [clickIsWithinMenu]);
2061
2063
  react.useEffect(function () {
2062
2064
  if (isMenuOpen(state)) {
2063
- var thisDocument_1 = anchorRef.current ? anchorRef.current.ownerDocument : document;
2065
+ var thisDocument_1 = (anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) ? anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current.ownerDocument : document;
2064
2066
  thisDocument_1.addEventListener("mousedown", handleScreenEventForCancel, true);
2065
2067
  thisDocument_1.addEventListener("mouseup", handleScreenEventForSave, true);
2066
2068
  thisDocument_1.addEventListener("click", handleScreenEventForCancel, true);
@@ -2073,13 +2075,13 @@ var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2073
2075
  };
2074
2076
  }
2075
2077
  return function () { };
2076
- }, [handleScreenEventForSave, handleScreenEventForCancel, state]);
2078
+ }, [handleScreenEventForSave, handleScreenEventForCancel, state, anchorRef]);
2077
2079
  var itemSettings = react.useMemo(function () { return ({
2078
2080
  submenuOpenDelay: submenuOpenDelay,
2079
2081
  submenuCloseDelay: submenuCloseDelay
2080
2082
  }); }, [submenuOpenDelay, submenuCloseDelay]);
2081
2083
  var eventHandlers = react.useMemo(function () { return ({
2082
- handleClick: function (event, isCheckorRadio) {
2084
+ handleClick: function (event, isCheckOrRadio) {
2083
2085
  if (!event.stopPropagation)
2084
2086
  safeCall(onItemClick, event);
2085
2087
  var keepOpen = event.keepOpen;
@@ -2087,7 +2089,7 @@ var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2087
2089
  // if event.keepOpen is undefined, the following default behaviour is used
2088
2090
  // According to WAI-ARIA Authoring Practices 1.1
2089
2091
  // Keep menu open when check or radio is invoked by SPACE key
2090
- keepOpen = isCheckorRadio && event.key === Keys.SPACE;
2092
+ keepOpen = isCheckOrRadio && event.key === Keys.SPACE;
2091
2093
  }
2092
2094
  if (!keepOpen) {
2093
2095
  safeCall(onClose, {
@@ -2115,7 +2117,7 @@ var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2115
2117
  // If a user clicks on the menu button when a menu is open, we need to close the menu.
2116
2118
  // However, a blur event will be fired prior to the click event on menu button,
2117
2119
  // which makes the menu first close and then open again.
2118
- // If this happen, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,
2120
+ // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,
2119
2121
  // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.
2120
2122
  // This is a workaround approach which sets a flag to skip a following click event.
2121
2123
  if (skipOpen) {
@@ -2131,24 +2133,22 @@ var ControlledMenu = react.forwardRef(function ControlledMenu(_a, externalRef) {
2131
2133
  modifiers: modifiers,
2132
2134
  className: className
2133
2135
  }), style: __assign(__assign({}, containerProps === null || containerProps === void 0 ? void 0 : containerProps.style), { position: "relative" }), ref: containerRef }, { children: state && (jsxRuntime.jsx(SettingsContext.Provider, __assign({ value: settings }, { children: jsxRuntime.jsx(ItemSettingsContext.Provider, __assign({ value: itemSettings }, { children: jsxRuntime.jsx(EventHandlersContext.Provider, __assign({ value: eventHandlers }, { children: jsxRuntime.jsx(MenuList, __assign({}, restProps, { ariaLabel: ariaLabel || "Menu", externalRef: externalRef, containerRef: containerRef, onClose: onClose })) })) })) }))) })));
2134
- if (portal === true && anchorRef.current !== undefined) {
2136
+ if (portal === true && (anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) !== undefined) {
2135
2137
  portal = { target: anchorRef.current.ownerDocument.body };
2136
2138
  }
2137
- if (portal === true && typeof document !== "undefined") {
2138
- return reactDom.createPortal(menuList, document.body);
2139
- }
2140
- else if (portal) {
2141
- return portal.target ? reactDom.createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;
2139
+ if (portal) {
2140
+ if (typeof portal === "boolean") {
2141
+ if (portal && typeof document !== "undefined") {
2142
+ return reactDom.createPortal(menuList, document.body);
2143
+ }
2144
+ }
2145
+ else {
2146
+ return portal.target ? reactDom.createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;
2147
+ }
2142
2148
  }
2143
2149
  return menuList;
2144
- });
2145
- ControlledMenu.propTypes /* remove-proptypes */ = __assign(__assign({}, rootMenuPropTypes), { state: propTypes.oneOf(values(MenuStateMap)), anchorPoint: propTypes.exact({
2146
- x: propTypes.number,
2147
- y: propTypes.number
2148
- }), anchorRef: propTypes.object, skipOpen: propTypes.object, captureFocus: propTypes.bool, menuItemFocus: propTypes.exact({
2149
- position: propTypes.oneOfType([propTypes.string, propTypes.number]),
2150
- alwaysUpdate: propTypes.bool
2151
- }), onClose: propTypes.func });
2150
+ };
2151
+ var ControlledMenu = react.forwardRef(ControlledMenuFr);
2152
2152
 
2153
2153
  function MenuFr(_a, externalRef) {
2154
2154
  var ariaLabel = _a["aria-label"], menuButton = _a.menuButton, instanceRef = _a.instanceRef, onMenuChange = _a.onMenuChange, restProps = __rest(_a, ["aria-label", "menuButton", "instanceRef", "onMenuChange"]);
@@ -2196,7 +2196,7 @@ function MenuFr(_a, externalRef) {
2196
2196
  }); });
2197
2197
  return (jsxRuntime.jsxs(react.Fragment, { children: [renderButton, jsxRuntime.jsx(ControlledMenu, __assign({}, restProps, stateProps, { "aria-label": ariaLabel || (typeof button.props.children === "string" ? button.props.children : "Menu"), anchorRef: buttonRef, ref: externalRef, onClose: handleClose, skipOpen: skipOpen }))] }));
2198
2198
  }
2199
- react.forwardRef(MenuFr);
2199
+ var Menu = react.forwardRef(MenuFr);
2200
2200
 
2201
2201
  var SubMenuFr = function (_a) {
2202
2202
  var ariaLabel = _a["aria-label"], className = _a.className, disabled = _a.disabled, direction = _a.direction, label = _a.label, openTrigger = _a.openTrigger, onMenuChange = _a.onMenuChange, isHovering = _a.isHovering, instanceRef = _a.instanceRef, menuItemRef = _a.menuItemRef, _b = _a.itemProps, itemProps = _b === void 0 ? {} : _b, restProps = __rest(_a, ["aria-label", "className", "disabled", "direction", "label", "openTrigger", "onMenuChange", "isHovering", "instanceRef", "menuItemRef", "itemProps"]);
@@ -2338,7 +2338,7 @@ var SubMenuFr = function (_a) {
2338
2338
  className: itemClassName
2339
2339
  }) }, { children: react.useMemo(function () { return safeCall(label, modifiers); }, [label, modifiers]) })), state && getMenuList()] })));
2340
2340
  };
2341
- withHovering("SubMenu", SubMenuFr);
2341
+ var SubMenu = withHovering("SubMenu", SubMenuFr);
2342
2342
 
2343
2343
  var MenuItemFr = function (_a) {
2344
2344
  var className = _a.className, value = _a.value, href = _a.href, type = _a.type, checked = _a.checked, disabled = _a.disabled, children = _a.children, onClick = _a.onClick, isHovering = _a.isHovering, menuItemRef = _a.menuItemRef, externalRef = _a.externalRef, restProps = __rest(_a, ["className", "value", "href", "type", "checked", "disabled", "children", "onClick", "isHovering", "menuItemRef", "externalRef"]);
@@ -2407,7 +2407,6 @@ var MenuItemFr = function (_a) {
2407
2407
  return jsxRuntime.jsx("li", __assign({}, menuItemProps));
2408
2408
  }
2409
2409
  };
2410
- // FIXME matt as any
2411
2410
  var MenuItem = withHovering("MenuItem", MenuItemFr);
2412
2411
 
2413
2412
  var FocusableItemFr = function (_a) {
@@ -2439,7 +2438,7 @@ var MenuHeaderFr = function (_a, externalRef) {
2439
2438
  var className = _a.className, restProps = __rest(_a, ["className"]);
2440
2439
  return (jsxRuntime.jsx("li", __assign({ role: "presentation" }, restProps, { ref: externalRef, className: useBEM({ block: menuClass, element: menuHeaderClass, className: className }) })));
2441
2440
  };
2442
- react.memo(react.forwardRef(MenuHeaderFr));
2441
+ var MenuHeader = react.memo(react.forwardRef(MenuHeaderFr));
2443
2442
 
2444
2443
  var MenuGroupFr = function (_a, externalRef) {
2445
2444
  var className = _a.className, style = _a.style, takeOverflow = _a.takeOverflow, restProps = __rest(_a, ["className", "style", "takeOverflow"]);
@@ -2462,14 +2461,14 @@ var MenuGroupFr = function (_a, externalRef) {
2462
2461
  }, [overflowStyle]);
2463
2462
  return (jsxRuntime.jsx("div", __assign({}, restProps, { ref: useCombinedRef(externalRef, ref), className: useBEM({ block: menuClass, element: menuGroupClass, className: className }), style: __assign(__assign({}, style), overflowStyle) })));
2464
2463
  };
2465
- react.forwardRef(MenuGroupFr);
2464
+ var MenuGroup = react.forwardRef(MenuGroupFr);
2466
2465
 
2467
2466
  var MenuRadioGroupFr = function (_a, externalRef) {
2468
2467
  var ariaLabel = _a["aria-label"], className = _a.className, name = _a.name, value = _a.value, onRadioChange = _a.onRadioChange, restProps = __rest(_a, ["aria-label", "className", "name", "value", "onRadioChange"]);
2469
2468
  var contextValue = react.useMemo(function () { return ({ name: name, value: value, onRadioChange: onRadioChange }); }, [name, value, onRadioChange]);
2470
2469
  return (jsxRuntime.jsx(RadioGroupContext.Provider, __assign({ value: contextValue }, { children: jsxRuntime.jsx("li", __assign({ role: "presentation" }, { children: jsxRuntime.jsx("ul", __assign({ role: "group", "aria-label": ariaLabel || name || "Radio group" }, restProps, { ref: externalRef, className: useBEM({ block: menuClass, element: radioGroupClass, className: className }) })) })) })));
2471
2470
  };
2472
- react.forwardRef(MenuRadioGroupFr);
2471
+ var MenuRadioGroup = react.forwardRef(MenuRadioGroupFr);
2473
2472
 
2474
2473
  var useGridPopoverHook = function (props, save) {
2475
2474
  var cellEditorParams = props.cellEditorParams, saving = props.saving, updateValue = props.updateValue;
@@ -2523,7 +2522,18 @@ var GridRenderPopoutMenuCell = function (props) {
2523
2522
  var _a, _b, _c;
2524
2523
  var checkUpdating = react.useContext(UpdatingContext).checkUpdating;
2525
2524
  var isLoading = checkUpdating((_b = (_a = props.colDef) === null || _a === void 0 ? void 0 : _a.field) !== null && _b !== void 0 ? _b : "", props.data.id);
2526
- var disabled = !((_c = props.colDef) === null || _c === void 0 ? void 0 : _c.editable);
2525
+ var editable = (_c = props.colDef) === null || _c === void 0 ? void 0 : _c.editable;
2526
+ var disabled = !(typeof editable === "function"
2527
+ ? editable({
2528
+ node: props.node,
2529
+ data: props.data,
2530
+ column: props.column,
2531
+ colDef: props.colDef,
2532
+ api: props.api,
2533
+ columnApi: props.columnApi,
2534
+ context: props.context
2535
+ })
2536
+ : editable);
2527
2537
  return (jsxRuntime.jsx(GridLoadableCell, __assign({ isLoading: isLoading, className: disabled ? "GridPopoutMenu-burgerDisabled" : "GridPopoutMenu-burger" }, { children: jsxRuntime.jsx(lui.LuiIcon, { name: "ic_more_vert", alt: "More actions", size: "md" }) })));
2528
2538
  };
2529
2539
 
@@ -2606,7 +2616,7 @@ var GridFormMultiSelect = function (props) {
2606
2616
  return undefined;
2607
2617
  }
2608
2618
  var str = option.label || "";
2609
- return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
2619
+ return str.toLowerCase().indexOf(filter.trim()) === -1 ? option.value : undefined;
2610
2620
  })
2611
2621
  .filter(function (r) { return r !== undefined; }));
2612
2622
  }, [formProps.filtered, filter, options]);
@@ -2614,35 +2624,48 @@ var GridFormMultiSelect = function (props) {
2614
2624
  var _b;
2615
2625
  var ref = _a.ref;
2616
2626
  return (jsxRuntime.jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: jsxRuntime.jsx("input", { autoFocus: true, className: "free-text-input", style: { border: "0px" }, ref: ref, type: "text", placeholder: (_b = formProps.filterPlaceholder) !== null && _b !== void 0 ? _b : "Placeholder", "data-testid": "filteredMenu-free-text-input", defaultValue: "", onChange: function (e) { return setFilter(e.target.value.toLowerCase()); } }) })));
2617
- } })), jsxRuntime.jsx(MenuDivider, {}, "$$divider_filter")] })), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2627
+ } }), "filter"), jsxRuntime.jsx(MenuDivider, {}, "$$divider_filter")] })), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2618
2628
  var _a;
2619
- return item.value === MenuSeparatorString$1 ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(MenuItem, __assign({ onClick: function (e) {
2620
- // FIXME Matt Event type guessed here
2629
+ return item.value === MenuSeparatorString$1 ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxRuntime.jsxs(react.Fragment, { children: [jsxRuntime.jsx(MenuItem, __assign({ onClick: function (e) {
2621
2630
  e.keepOpen = true;
2622
- if (selectedValues.includes(e.value)) {
2631
+ if (selectedValues.includes(item.value)) {
2623
2632
  setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
2624
2633
  }
2625
2634
  else {
2626
2635
  setSelectedValues(__spreadArray(__spreadArray([], selectedValues, true), [item.value], false));
2627
2636
  }
2628
- return false;
2629
- }, onKeyDown: function (e) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
2630
- return [2 /*return*/, e.key === "Enter" && triggerSave().then()];
2631
- }); }); } }, { children: jsxRuntime.jsx(lui.LuiCheckboxInput, { isChecked: selectedValues.includes(item.value), value: "".concat(item.value), label: (_a = item.label) !== null && _a !== void 0 ? _a : (item.value == null ? "<".concat(item.value, ">") : "".concat(item.value)), onChange: function (e) {
2632
- if (e.target.checked) {
2633
- setSelectedValues(__spreadArray(__spreadArray([], selectedValues, true), [item.value], false));
2637
+ }, onKeyDown: function (e) { return __awaiter(void 0, void 0, void 0, function () {
2638
+ return __generator(this, function (_a) {
2639
+ if (e.key === "Enter")
2640
+ triggerSave().then();
2641
+ else if (e.key === " ") {
2642
+ if (selectedValues.includes(item.value)) {
2643
+ setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
2644
+ }
2645
+ else {
2646
+ setSelectedValues(__spreadArray(__spreadArray([], selectedValues, true), [item.value], false));
2647
+ }
2648
+ e.preventDefault();
2649
+ e.stopPropagation();
2634
2650
  }
2635
- else {
2636
- setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
2651
+ return [2 /*return*/];
2652
+ });
2653
+ }); } }, { children: jsxRuntime.jsx(lui.LuiCheckboxInput, { isChecked: selectedValues.includes(item.value), value: "".concat(item.value), label: (_a = item.label) !== null && _a !== void 0 ? _a : (item.value == null ? "<".concat(item.value, ">") : "".concat(item.value)), inputProps: {
2654
+ onClick: function (e) {
2655
+ e.preventDefault();
2656
+ e.stopPropagation();
2657
+ return false;
2637
2658
  }
2638
- } }) }), "".concat(item.value)), selectedValues.includes(item.value) && item.subComponent && (jsxRuntime.jsx(FocusableItem, __assign({ className: "LuiDeprecatedForms" }, { children: function (ref) {
2659
+ }, onChange: function () {
2660
+ /*Do nothing, change handled by menuItem*/
2661
+ } }) }), "".concat(index)), selectedValues.includes(item.value) && item.subComponent && (jsxRuntime.jsx(FocusableItem, __assign({ className: "LuiDeprecatedForms" }, { children: function (ref) {
2639
2662
  return item.subComponent &&
2640
2663
  item.subComponent({
2641
2664
  setValue: function (value) {
2642
2665
  subSelectedValues.current[item.value] = value;
2643
2666
  }
2644
2667
  }, ref);
2645
- } }), "".concat(item.value, "_subcomponent")))] }));
2668
+ } }), "".concat(item.value, "_subcomponent")))] }, "".concat(index)));
2646
2669
  })] })) })));
2647
2670
  };
2648
2671
 
@@ -2724,7 +2747,7 @@ var GridFormPopoutMenu = function (props) {
2724
2747
  });
2725
2748
  var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
2726
2749
  return popoverWrapper(jsxRuntime.jsx(ComponentLoadingWrapper, __assign({ loading: !filteredOptions }, { children: jsxRuntime.jsx("div", __assign({ className: "Grid-popoverContainerList" }, { children: options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2727
- return item.label === MenuSeparator ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : (jsxRuntime.jsx(MenuItem, __assign({ onClick: function () { return actionClick(item); }, disabled: !!item.disabled || !(filteredOptions === null || filteredOptions === void 0 ? void 0 : filteredOptions.includes(item)), title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "" }, { children: item.label }), "".concat(item.label)));
2750
+ return item.label === MenuSeparator ? (jsxRuntime.jsx(MenuDivider, {}, "$$divider_".concat(index))) : (!item.hidden && (jsxRuntime.jsx(MenuItem, __assign({ onClick: function () { return actionClick(item); }, disabled: !!item.disabled || !(filteredOptions === null || filteredOptions === void 0 ? void 0 : filteredOptions.includes(item)), title: item.disabled && typeof item.disabled !== "boolean" ? item.disabled : "" }, { children: item.label }), "".concat(item.label))));
2728
2751
  }) })) })));
2729
2752
  };
2730
2753
 
@@ -3192,6 +3215,8 @@ var GridPopoverTextInput = function (colDef) {
3192
3215
  };
3193
3216
 
3194
3217
  exports.ComponentLoadingWrapper = ComponentLoadingWrapper;
3218
+ exports.ControlledMenu = ControlledMenu;
3219
+ exports.FocusableItem = FocusableItem;
3195
3220
  exports.GenericMultiEditCellClass = GenericMultiEditCellClass;
3196
3221
  exports.Grid = Grid;
3197
3222
  exports.GridCell = GridCell;
@@ -3217,6 +3242,14 @@ exports.GridPopoverTextArea = GridPopoverTextArea;
3217
3242
  exports.GridPopoverTextInput = GridPopoverTextInput;
3218
3243
  exports.GridRenderPopoutMenuCell = GridRenderPopoutMenuCell;
3219
3244
  exports.GridRendererGenericCell = GridRendererGenericCell;
3245
+ exports.Menu = Menu;
3246
+ exports.MenuButton = MenuButton;
3247
+ exports.MenuDivider = MenuDivider;
3248
+ exports.MenuGroup = MenuGroup;
3249
+ exports.MenuHeader = MenuHeader;
3250
+ exports.MenuItem = MenuItem;
3251
+ exports.MenuRadioGroup = MenuRadioGroup;
3252
+ exports.SubMenu = SubMenu;
3220
3253
  exports.TextAreaInput = TextAreaInput;
3221
3254
  exports.TextInputFormatted = TextInputFormatted;
3222
3255
  exports.UpdatingContext = UpdatingContext;
@@ -3230,6 +3263,7 @@ exports.hasParentClass = hasParentClass;
3230
3263
  exports.isFloat = isFloat;
3231
3264
  exports.isNotEmpty = isNotEmpty;
3232
3265
  exports.useGridPopoverHook = useGridPopoverHook;
3266
+ exports.useMenuState = useMenuState;
3233
3267
  exports.usePostSortRowsHook = usePostSortRowsHook;
3234
3268
  exports.wait = wait;
3235
3269
  //# sourceMappingURL=index.js.map