@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
@@ -1,10 +1,9 @@
1
- import { createContext, useRef, useContext, useCallback, useState, useEffect, useMemo, useLayoutEffect, memo, forwardRef, useReducer, cloneElement, useImperativeHandle, Fragment as Fragment$1 } from 'react';
1
+ import { createContext, useRef, useContext, useCallback, useState, useEffect, useMemo, forwardRef, useLayoutEffect, memo, useReducer, cloneElement, useImperativeHandle, Fragment as Fragment$1 } from 'react';
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { castArray, remove, flatten, isEmpty, delay, sortBy, last, difference, xorBy, findIndex } from 'lodash-es';
4
4
  import { AgGridReact } from 'ag-grid-react';
5
5
  import { LuiMiniSpinner, LuiIcon, LuiCheckboxInput } from '@linzjs/lui';
6
6
  import { unstable_batchedUpdates, flushSync, createPortal } from 'react-dom';
7
- import { oneOf, object, bool, number, string, oneOfType, exact, func } from 'prop-types';
8
7
  import { useTransition } from 'react-transition-state';
9
8
  import debounce from 'debounce-promise';
10
9
  import { v4 } from 'uuid';
@@ -468,9 +467,11 @@ var GridContextProvider = function (props) {
468
467
  }
469
468
  // This is needed to trigger postSortRowsHook
470
469
  gridApi.refreshClientSideRowModel();
471
- stopEditing();
472
470
  }
473
- setSaving && setSaving(false);
471
+ else {
472
+ // Don't set saving if ok as the form has already closed
473
+ setSaving && setSaving(false);
474
+ }
474
475
  return [2 /*return*/, ok];
475
476
  }
476
477
  });
@@ -867,41 +868,55 @@ var GridLoadableCell = function (props) {
867
868
  var GridIcon = function (props) { return (jsx(LuiIcon, { name: props.icon, title: props.title, alt: props.title, size: "md", className: "AgGridGenericCellRenderer-".concat(props.icon, "Icon") })); };
868
869
 
869
870
  var GridRendererGenericCell = function (props) {
870
- var _a, _b, _c, _d, _e, _f, _g;
871
+ var _a, _b, _c;
871
872
  var checkUpdating = useContext(UpdatingContext).checkUpdating;
872
- var cellRendererParams = (_a = props.colDef) === null || _a === void 0 ? void 0 : _a.cellRendererParams;
873
+ var colDef = props.colDef;
874
+ var cellRendererParams = colDef.cellRendererParams;
873
875
  var warningFn = cellRendererParams === null || cellRendererParams === void 0 ? void 0 : cellRendererParams.warning;
874
876
  var warningText = warningFn ? warningFn(props) : undefined;
875
877
  var infoFn = cellRendererParams === null || cellRendererParams === void 0 ? void 0 : cellRendererParams.info;
876
878
  var infoText = infoFn ? infoFn(props) : undefined;
877
879
  var defaultFormatter = function (props) { return props.value; };
878
- var formatter = (_c = (_b = props.colDef) === null || _b === void 0 ? void 0 : _b.valueFormatter) !== null && _c !== void 0 ? _c : defaultFormatter;
880
+ var formatter = (_a = colDef.valueFormatter) !== null && _a !== void 0 ? _a : defaultFormatter;
879
881
  if (typeof formatter === "string") {
880
882
  console.error("valueFormatter must be a function");
881
883
  return jsx("span", { children: "valueFormatter must be a function" });
882
884
  }
883
885
  var formatted = formatter(props);
884
- return (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: jsxs(Fragment, { children: [typeof warningText === "string" && jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsx(GridIcon, { icon: "ic_info", title: infoText }), jsx("span", __assign({ title: formatted }, { children: formatted }))] }) })));
886
+ return (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: jsxs(Fragment, { children: [typeof warningText === "string" && jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsx(GridIcon, { icon: "ic_info", title: infoText }), jsx("span", __assign({ title: formatted }, { children: formatted }))] }) })));
885
887
  };
886
888
 
887
- var GridCellRenderer = function (cellRendererParams) {
888
- var _a, _b, _c, _d, _e;
889
+ var GridCellRenderer = function (props) {
890
+ var _a, _b, _c;
889
891
  var checkUpdating = useContext(UpdatingContext).checkUpdating;
890
- var colDef = cellRendererParams.colDef;
891
- return ((_a = colDef === null || colDef === void 0 ? void 0 : colDef.cellRendererParams) === null || _a === void 0 ? void 0 : _a.oldCellRenderer) ? (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: jsx(colDef.cellRendererParams.oldCellRenderer, __assign({}, cellRendererParams)) }))) : (jsx(GridRendererGenericCell, __assign({}, cellRendererParams)));
892
+ var colDef = props.colDef;
893
+ var rendererParams = colDef.cellRendererParams;
894
+ var warningFn = rendererParams === null || rendererParams === void 0 ? void 0 : rendererParams.warning;
895
+ var warningText = warningFn ? warningFn(props) : undefined;
896
+ var infoFn = rendererParams === null || rendererParams === void 0 ? void 0 : rendererParams.info;
897
+ var infoText = infoFn ? infoFn(props) : undefined;
898
+ return ((_a = colDef === null || colDef === void 0 ? void 0 : colDef.cellRendererParams) === null || _a === void 0 ? void 0 : _a.originalCellRenderer) ? (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: jsxs(Fragment, { children: [typeof warningText === "string" && jsx(GridIcon, { icon: "ic_warning", title: warningText }), typeof infoText === "string" && jsx(GridIcon, { icon: "ic_info", title: infoText }), jsx(colDef.cellRendererParams.originalCellRenderer, __assign({}, props))] }) }))) : (jsx(GridRendererGenericCell, __assign({}, props)));
892
899
  };
893
900
  /**
894
901
  * For editing a text area.
895
902
  */
896
903
  var GridCell = function (props) {
897
904
  var _a;
898
- 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 && {
905
+ 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 && {
899
906
  cellClass: ((_a = props === null || props === void 0 ? void 0 : props.cellEditorParams) === null || _a === void 0 ? void 0 : _a.multiEdit) ? GenericMultiEditCellClass : undefined,
900
907
  editable: true,
901
908
  cellEditor: GenericCellEditorComponent
902
- })), props), { cellRendererParams: __assign({ originalCellRender: props.cellRenderer }, props.cellRendererParams) });
909
+ })), {
910
+ // Default value formatter, otherwise react freaks out on objects
911
+ valueFormatter: function (params) {
912
+ var types = ["number", "undefined", "boolean", "string"];
913
+ if (types.includes(typeof params.value))
914
+ return params.value;
915
+ else
916
+ return JSON.stringify(params.value);
917
+ } }), props), { cellRenderer: GridCellRenderer, cellRendererParams: __assign({ originalCellRenderer: props.cellRenderer }, props.cellRendererParams) });
903
918
  };
904
- var GenericCellEditorComponent = function (props) {
919
+ var GenericCellEditorComponentFr = function (props, _) {
905
920
  var _a, _b, _c;
906
921
  var _d = useContext(GridContext), updatingCells = _d.updatingCells, getSelectedRows = _d.getSelectedRows;
907
922
  var colDef = props.colDef, data = props.data;
@@ -930,7 +945,8 @@ var GenericCellEditorComponent = function (props) {
930
945
  if (cellEditorParams == null)
931
946
  return jsx(Fragment, {});
932
947
  return (jsxs(Fragment, { children: [jsx("div", { children: colDef.cellRenderer ? jsx(colDef.cellRenderer, __assign({}, props, { saving: saving })) : props.value }), (cellEditorParams === null || cellEditorParams === void 0 ? void 0 : cellEditorParams.form) && (jsx(cellEditorParams.form, { cellEditorParams: props, updateValue: updateValue, saving: saving, formProps: formProps, value: value, field: field, selectedRows: selectedRows }))] }));
933
- };
948
+ };
949
+ var GenericCellEditorComponent = forwardRef(GenericCellEditorComponentFr);
934
950
 
935
951
  /**
936
952
  * If loading is true this returns a loading spinner, otherwise it returns its children.
@@ -1067,7 +1083,6 @@ var MenuStateMap = Object.freeze({
1067
1083
 
1068
1084
  var isMenuOpen = function (state) { return !!state && state[0] === "o"; };
1069
1085
  var batchedUpdates = unstable_batchedUpdates || (function (callback) { return callback(); });
1070
- var values = Object.values || (function (obj) { return Object.keys(obj).map(function (key) { return obj[key]; }); });
1071
1086
  var floatEqual = function (a, b, diff) {
1072
1087
  if (diff === void 0) { diff = 0.0001; }
1073
1088
  return Math.abs(a - b) < diff;
@@ -1138,36 +1153,6 @@ function commonProps(isDisabled, isHovering) {
1138
1153
  }
1139
1154
  var indexOfNode = function (nodeList, node) { return findIndex(nodeList, node); };
1140
1155
 
1141
- var stylePropTypes = function (name) {
1142
- var _a;
1143
- return (_a = {},
1144
- _a[name ? "".concat(name, "ClassName") : "className"] = oneOfType([string, func]),
1145
- _a);
1146
- };
1147
- var Direction = oneOf(["left", "right", "top", "bottom"]);
1148
- // Menu, SubMenu and ControlledMenu
1149
- var menuPropTypes = __assign(__assign(__assign({ className: string }, stylePropTypes("menu")), stylePropTypes("arrow")), { menuStyle: object, arrowStyle: object, arrow: bool, setDownOverflow: bool, offsetX: number, offsetY: number, align: oneOf(["start", "center", "end"]), direction: Direction, position: oneOf(["auto", "anchor", "initial"]), overflow: oneOf(["auto", "visible", "hidden"]) });
1150
- // Menu and ControlledMenu
1151
- var rootMenuPropTypes = __assign(__assign({}, menuPropTypes), { containerProps: object, initialMounted: bool, unmountOnClose: bool, transition: oneOfType([
1152
- bool,
1153
- exact({
1154
- open: bool,
1155
- close: bool,
1156
- item: bool
1157
- }),
1158
- ]), transitionTimeout: number, boundingBoxRef: object, boundingBoxPadding: string, reposition: oneOf(["auto", "initial"]), repositionFlag: oneOfType([string, number]), viewScroll: oneOf(["auto", "close", "initial"]), submenuOpenDelay: number, submenuCloseDelay: number, portal: oneOfType([
1159
- bool,
1160
- exact({
1161
- target: object,
1162
- stablePosition: bool
1163
- }),
1164
- ]), theming: string, onItemClick: func });
1165
- // Menu and SubMenu
1166
- ({
1167
- instanceRef: oneOfType([object, func]),
1168
- onMenuChange: func
1169
- });
1170
-
1171
1156
  var withHovering = function (name, WrappedComponent) {
1172
1157
  var Component = memo(WrappedComponent);
1173
1158
  var WithHovering = forwardRef(function (props, ref) {
@@ -1382,17 +1367,17 @@ var useMenuStateAndFocus = function (options) {
1382
1367
  return [__assign({ menuItemFocus: menuItemFocus }, menuProps), toggleMenu, openMenu];
1383
1368
  };
1384
1369
 
1385
- forwardRef(function MenuButton(_a, ref) {
1370
+ var MenuButton = forwardRef(function MenuButton(_a, ref) {
1386
1371
  var className = _a.className, isOpen = _a.isOpen, disabled = _a.disabled, children = _a.children, restProps = __rest(_a, ["className", "isOpen", "disabled", "children"]);
1387
1372
  var modifiers = useMemo(function () { return ({ open: isOpen }); }, [isOpen]);
1388
1373
  return (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 })));
1389
1374
  });
1390
1375
 
1391
1376
  var getPositionHelpers = function (containerRef, menuRef, menuScroll, boundingBoxPadding) {
1392
- var _a;
1377
+ var _a, _b, _c;
1393
1378
  var menuRect = menuRef.current.getBoundingClientRect();
1394
- var containerRect = containerRef.current.getBoundingClientRect();
1395
- var thisWindow = (_a = containerRef.current.ownerDocument.defaultView) !== null && _a !== void 0 ? _a : window;
1379
+ var thisWindow = (_b = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.ownerDocument.defaultView) !== null && _b !== void 0 ? _b : window;
1380
+ var containerRect = ((_c = containerRef.current) !== null && _c !== void 0 ? _c : thisWindow.document.body).getBoundingClientRect();
1396
1381
  var boundingRect = menuScroll === window || menuScroll === thisWindow
1397
1382
  ? {
1398
1383
  left: 0,
@@ -1743,7 +1728,7 @@ var MenuList = function (_a) {
1743
1728
  endTransition && safeCall(endTransition);
1744
1729
  };
1745
1730
  var handlePosition = useCallback(function (noOverflowCheck) {
1746
- if (!containerRef.current) {
1731
+ if (!(containerRef === null || containerRef === void 0 ? void 0 : containerRef.current)) {
1747
1732
  if (process.env.NODE_ENV !== "production") {
1748
1733
  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');
1749
1734
  }
@@ -1942,10 +1927,27 @@ var MenuList = function (_a) {
1942
1927
  else if (captureFocus) {
1943
1928
  // Use a timeout here because if set focus immediately, page might scroll unexpectedly.
1944
1929
  var id_1 = setTimeout(function () {
1945
- var _a;
1930
+ var _a, _b, _c;
1946
1931
  // If focus has already been set to a children element, don't set focus on menu or item
1947
1932
  if (!menuRef.current.contains(document.activeElement)) {
1948
- (_a = focusRef.current) === null || _a === void 0 ? void 0 : _a.focus();
1933
+ // Handle popover portal focus
1934
+ var popupElement = (_a = focusRef.current) === null || _a === void 0 ? void 0 : _a.nextSibling;
1935
+ if (popupElement instanceof Element) {
1936
+ var input = popupElement.querySelectorAll("input,textarea")[0];
1937
+ if (input) {
1938
+ input.focus();
1939
+ // Text areas should start at end
1940
+ if (input instanceof HTMLTextAreaElement) {
1941
+ input.selectionStart = input.value.length;
1942
+ }
1943
+ }
1944
+ else {
1945
+ (_b = focusRef.current) === null || _b === void 0 ? void 0 : _b.focus();
1946
+ }
1947
+ }
1948
+ else {
1949
+ (_c = focusRef.current) === null || _c === void 0 ? void 0 : _c.focus();
1950
+ }
1949
1951
  setItemFocus();
1950
1952
  }
1951
1953
  }, openTransition ? 170 : 100);
@@ -1988,9 +1990,9 @@ var MenuList = function (_a) {
1988
1990
  return (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: [jsx("div", { ref: focusRef, tabIndex: -1, style: { position: "absolute", left: 0, top: 0 } }), arrow && (jsx("div", { className: _arrowClass, style: __assign(__assign({}, arrowStyle), { position: "absolute", left: arrowPosition.x, top: arrowPosition.y }), ref: arrowRef })), jsx(MenuListContext.Provider, __assign({ value: listContext }, { children: jsx(MenuListItemContext.Provider, __assign({ value: itemContext }, { children: jsx(HoverItemContext.Provider, __assign({ value: hoverItem }, { children: children })) })) }))] })));
1989
1991
  };
1990
1992
 
1991
- var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
1993
+ var ControlledMenuFr = function (_a, externalRef) {
1992
1994
  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"]);
1993
- var containerRef = useRef(null);
1995
+ var containerRef = useRef();
1994
1996
  var scrollNodesRef = useRef({});
1995
1997
  var anchorRef = restProps.anchorRef, state = restProps.state;
1996
1998
  var settings = useMemo(function () { return ({
@@ -2028,7 +2030,7 @@ var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
2028
2030
  // the cell doesn't refresh during update if save is invoked from a native event
2029
2031
  // This doesn't happen in React18
2030
2032
  // To work around it, I invoke the save by clicking on a passed in invisible button ref
2031
- if (saveButtonRef.current)
2033
+ if (saveButtonRef === null || saveButtonRef === void 0 ? void 0 : saveButtonRef.current)
2032
2034
  saveButtonRef.current.click();
2033
2035
  else
2034
2036
  safeCall(onClose, { reason: CloseReason.BLUR });
@@ -2043,7 +2045,7 @@ var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
2043
2045
  setTimeout(function () { return (skipOpen.current = false); }, 300);
2044
2046
  }
2045
2047
  }
2046
- }, [clickIsWithinMenu, onClose]);
2048
+ }, [clickIsWithinMenu, onClose, saveButtonRef, skipOpen]);
2047
2049
  var handleScreenEventForCancel = useCallback(function (ev) {
2048
2050
  if (!clickIsWithinMenu(ev)) {
2049
2051
  ev.preventDefault();
@@ -2052,7 +2054,7 @@ var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
2052
2054
  }, [clickIsWithinMenu]);
2053
2055
  useEffect(function () {
2054
2056
  if (isMenuOpen(state)) {
2055
- var thisDocument_1 = anchorRef.current ? anchorRef.current.ownerDocument : document;
2057
+ var thisDocument_1 = (anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) ? anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current.ownerDocument : document;
2056
2058
  thisDocument_1.addEventListener("mousedown", handleScreenEventForCancel, true);
2057
2059
  thisDocument_1.addEventListener("mouseup", handleScreenEventForSave, true);
2058
2060
  thisDocument_1.addEventListener("click", handleScreenEventForCancel, true);
@@ -2065,13 +2067,13 @@ var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
2065
2067
  };
2066
2068
  }
2067
2069
  return function () { };
2068
- }, [handleScreenEventForSave, handleScreenEventForCancel, state]);
2070
+ }, [handleScreenEventForSave, handleScreenEventForCancel, state, anchorRef]);
2069
2071
  var itemSettings = useMemo(function () { return ({
2070
2072
  submenuOpenDelay: submenuOpenDelay,
2071
2073
  submenuCloseDelay: submenuCloseDelay
2072
2074
  }); }, [submenuOpenDelay, submenuCloseDelay]);
2073
2075
  var eventHandlers = useMemo(function () { return ({
2074
- handleClick: function (event, isCheckorRadio) {
2076
+ handleClick: function (event, isCheckOrRadio) {
2075
2077
  if (!event.stopPropagation)
2076
2078
  safeCall(onItemClick, event);
2077
2079
  var keepOpen = event.keepOpen;
@@ -2079,7 +2081,7 @@ var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
2079
2081
  // if event.keepOpen is undefined, the following default behaviour is used
2080
2082
  // According to WAI-ARIA Authoring Practices 1.1
2081
2083
  // Keep menu open when check or radio is invoked by SPACE key
2082
- keepOpen = isCheckorRadio && event.key === Keys.SPACE;
2084
+ keepOpen = isCheckOrRadio && event.key === Keys.SPACE;
2083
2085
  }
2084
2086
  if (!keepOpen) {
2085
2087
  safeCall(onClose, {
@@ -2107,7 +2109,7 @@ var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
2107
2109
  // If a user clicks on the menu button when a menu is open, we need to close the menu.
2108
2110
  // However, a blur event will be fired prior to the click event on menu button,
2109
2111
  // which makes the menu first close and then open again.
2110
- // If this happen, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,
2112
+ // If this happens, e.relatedTarget is incorrectly set to null instead of the button in Safari and Firefox,
2111
2113
  // and makes it difficult to determine whether onBlur is fired because of clicking on menu button.
2112
2114
  // This is a workaround approach which sets a flag to skip a following click event.
2113
2115
  if (skipOpen) {
@@ -2123,24 +2125,22 @@ var ControlledMenu = forwardRef(function ControlledMenu(_a, externalRef) {
2123
2125
  modifiers: modifiers,
2124
2126
  className: className
2125
2127
  }), style: __assign(__assign({}, containerProps === null || containerProps === void 0 ? void 0 : containerProps.style), { position: "relative" }), ref: containerRef }, { children: state && (jsx(SettingsContext.Provider, __assign({ value: settings }, { children: jsx(ItemSettingsContext.Provider, __assign({ value: itemSettings }, { children: jsx(EventHandlersContext.Provider, __assign({ value: eventHandlers }, { children: jsx(MenuList, __assign({}, restProps, { ariaLabel: ariaLabel || "Menu", externalRef: externalRef, containerRef: containerRef, onClose: onClose })) })) })) }))) })));
2126
- if (portal === true && anchorRef.current !== undefined) {
2128
+ if (portal === true && (anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) !== undefined) {
2127
2129
  portal = { target: anchorRef.current.ownerDocument.body };
2128
2130
  }
2129
- if (portal === true && typeof document !== "undefined") {
2130
- return createPortal(menuList, document.body);
2131
- }
2132
- else if (portal) {
2133
- return portal.target ? createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;
2131
+ if (portal) {
2132
+ if (typeof portal === "boolean") {
2133
+ if (portal && typeof document !== "undefined") {
2134
+ return createPortal(menuList, document.body);
2135
+ }
2136
+ }
2137
+ else {
2138
+ return portal.target ? createPortal(menuList, portal.target) : portal.stablePosition ? null : menuList;
2139
+ }
2134
2140
  }
2135
2141
  return menuList;
2136
- });
2137
- ControlledMenu.propTypes /* remove-proptypes */ = __assign(__assign({}, rootMenuPropTypes), { state: oneOf(values(MenuStateMap)), anchorPoint: exact({
2138
- x: number,
2139
- y: number
2140
- }), anchorRef: object, skipOpen: object, captureFocus: bool, menuItemFocus: exact({
2141
- position: oneOfType([string, number]),
2142
- alwaysUpdate: bool
2143
- }), onClose: func });
2142
+ };
2143
+ var ControlledMenu = forwardRef(ControlledMenuFr);
2144
2144
 
2145
2145
  function MenuFr(_a, externalRef) {
2146
2146
  var ariaLabel = _a["aria-label"], menuButton = _a.menuButton, instanceRef = _a.instanceRef, onMenuChange = _a.onMenuChange, restProps = __rest(_a, ["aria-label", "menuButton", "instanceRef", "onMenuChange"]);
@@ -2188,7 +2188,7 @@ function MenuFr(_a, externalRef) {
2188
2188
  }); });
2189
2189
  return (jsxs(Fragment$1, { children: [renderButton, 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 }))] }));
2190
2190
  }
2191
- forwardRef(MenuFr);
2191
+ var Menu = forwardRef(MenuFr);
2192
2192
 
2193
2193
  var SubMenuFr = function (_a) {
2194
2194
  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"]);
@@ -2330,7 +2330,7 @@ var SubMenuFr = function (_a) {
2330
2330
  className: itemClassName
2331
2331
  }) }, { children: useMemo(function () { return safeCall(label, modifiers); }, [label, modifiers]) })), state && getMenuList()] })));
2332
2332
  };
2333
- withHovering("SubMenu", SubMenuFr);
2333
+ var SubMenu = withHovering("SubMenu", SubMenuFr);
2334
2334
 
2335
2335
  var MenuItemFr = function (_a) {
2336
2336
  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"]);
@@ -2399,7 +2399,6 @@ var MenuItemFr = function (_a) {
2399
2399
  return jsx("li", __assign({}, menuItemProps));
2400
2400
  }
2401
2401
  };
2402
- // FIXME matt as any
2403
2402
  var MenuItem = withHovering("MenuItem", MenuItemFr);
2404
2403
 
2405
2404
  var FocusableItemFr = function (_a) {
@@ -2431,7 +2430,7 @@ var MenuHeaderFr = function (_a, externalRef) {
2431
2430
  var className = _a.className, restProps = __rest(_a, ["className"]);
2432
2431
  return (jsx("li", __assign({ role: "presentation" }, restProps, { ref: externalRef, className: useBEM({ block: menuClass, element: menuHeaderClass, className: className }) })));
2433
2432
  };
2434
- memo(forwardRef(MenuHeaderFr));
2433
+ var MenuHeader = memo(forwardRef(MenuHeaderFr));
2435
2434
 
2436
2435
  var MenuGroupFr = function (_a, externalRef) {
2437
2436
  var className = _a.className, style = _a.style, takeOverflow = _a.takeOverflow, restProps = __rest(_a, ["className", "style", "takeOverflow"]);
@@ -2454,14 +2453,14 @@ var MenuGroupFr = function (_a, externalRef) {
2454
2453
  }, [overflowStyle]);
2455
2454
  return (jsx("div", __assign({}, restProps, { ref: useCombinedRef(externalRef, ref), className: useBEM({ block: menuClass, element: menuGroupClass, className: className }), style: __assign(__assign({}, style), overflowStyle) })));
2456
2455
  };
2457
- forwardRef(MenuGroupFr);
2456
+ var MenuGroup = forwardRef(MenuGroupFr);
2458
2457
 
2459
2458
  var MenuRadioGroupFr = function (_a, externalRef) {
2460
2459
  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"]);
2461
2460
  var contextValue = useMemo(function () { return ({ name: name, value: value, onRadioChange: onRadioChange }); }, [name, value, onRadioChange]);
2462
2461
  return (jsx(RadioGroupContext.Provider, __assign({ value: contextValue }, { children: jsx("li", __assign({ role: "presentation" }, { children: jsx("ul", __assign({ role: "group", "aria-label": ariaLabel || name || "Radio group" }, restProps, { ref: externalRef, className: useBEM({ block: menuClass, element: radioGroupClass, className: className }) })) })) })));
2463
2462
  };
2464
- forwardRef(MenuRadioGroupFr);
2463
+ var MenuRadioGroup = forwardRef(MenuRadioGroupFr);
2465
2464
 
2466
2465
  var useGridPopoverHook = function (props, save) {
2467
2466
  var cellEditorParams = props.cellEditorParams, saving = props.saving, updateValue = props.updateValue;
@@ -2515,7 +2514,18 @@ var GridRenderPopoutMenuCell = function (props) {
2515
2514
  var _a, _b, _c;
2516
2515
  var checkUpdating = useContext(UpdatingContext).checkUpdating;
2517
2516
  var isLoading = checkUpdating((_b = (_a = props.colDef) === null || _a === void 0 ? void 0 : _a.field) !== null && _b !== void 0 ? _b : "", props.data.id);
2518
- var disabled = !((_c = props.colDef) === null || _c === void 0 ? void 0 : _c.editable);
2517
+ var editable = (_c = props.colDef) === null || _c === void 0 ? void 0 : _c.editable;
2518
+ var disabled = !(typeof editable === "function"
2519
+ ? editable({
2520
+ node: props.node,
2521
+ data: props.data,
2522
+ column: props.column,
2523
+ colDef: props.colDef,
2524
+ api: props.api,
2525
+ columnApi: props.columnApi,
2526
+ context: props.context
2527
+ })
2528
+ : editable);
2519
2529
  return (jsx(GridLoadableCell, __assign({ isLoading: isLoading, className: disabled ? "GridPopoutMenu-burgerDisabled" : "GridPopoutMenu-burger" }, { children: jsx(LuiIcon, { name: "ic_more_vert", alt: "More actions", size: "md" }) })));
2520
2530
  };
2521
2531
 
@@ -2598,7 +2608,7 @@ var GridFormMultiSelect = function (props) {
2598
2608
  return undefined;
2599
2609
  }
2600
2610
  var str = option.label || "";
2601
- return str.toLowerCase().indexOf(filter) === -1 ? option.value : undefined;
2611
+ return str.toLowerCase().indexOf(filter.trim()) === -1 ? option.value : undefined;
2602
2612
  })
2603
2613
  .filter(function (r) { return r !== undefined; }));
2604
2614
  }, [formProps.filtered, filter, options]);
@@ -2606,35 +2616,48 @@ var GridFormMultiSelect = function (props) {
2606
2616
  var _b;
2607
2617
  var ref = _a.ref;
2608
2618
  return (jsx("div", __assign({ style: { display: "flex", width: "100%" } }, { children: 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()); } }) })));
2609
- } })), jsx(MenuDivider, {}, "$$divider_filter")] })), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2619
+ } }), "filter"), jsx(MenuDivider, {}, "$$divider_filter")] })), options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2610
2620
  var _a;
2611
- return item.value === MenuSeparatorString$1 ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxs(Fragment, { children: [jsx(MenuItem, __assign({ onClick: function (e) {
2612
- // FIXME Matt Event type guessed here
2621
+ return item.value === MenuSeparatorString$1 ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : filteredValues.includes(item.value) ? null : (jsxs(Fragment$1, { children: [jsx(MenuItem, __assign({ onClick: function (e) {
2613
2622
  e.keepOpen = true;
2614
- if (selectedValues.includes(e.value)) {
2623
+ if (selectedValues.includes(item.value)) {
2615
2624
  setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
2616
2625
  }
2617
2626
  else {
2618
2627
  setSelectedValues(__spreadArray(__spreadArray([], selectedValues, true), [item.value], false));
2619
2628
  }
2620
- return false;
2621
- }, onKeyDown: function (e) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
2622
- return [2 /*return*/, e.key === "Enter" && triggerSave().then()];
2623
- }); }); } }, { children: jsx(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) {
2624
- if (e.target.checked) {
2625
- setSelectedValues(__spreadArray(__spreadArray([], selectedValues, true), [item.value], false));
2629
+ }, onKeyDown: function (e) { return __awaiter(void 0, void 0, void 0, function () {
2630
+ return __generator(this, function (_a) {
2631
+ if (e.key === "Enter")
2632
+ triggerSave().then();
2633
+ else if (e.key === " ") {
2634
+ if (selectedValues.includes(item.value)) {
2635
+ setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
2636
+ }
2637
+ else {
2638
+ setSelectedValues(__spreadArray(__spreadArray([], selectedValues, true), [item.value], false));
2639
+ }
2640
+ e.preventDefault();
2641
+ e.stopPropagation();
2626
2642
  }
2627
- else {
2628
- setSelectedValues(selectedValues.filter(function (value) { return value != item.value; }));
2643
+ return [2 /*return*/];
2644
+ });
2645
+ }); } }, { children: jsx(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: {
2646
+ onClick: function (e) {
2647
+ e.preventDefault();
2648
+ e.stopPropagation();
2649
+ return false;
2629
2650
  }
2630
- } }) }), "".concat(item.value)), selectedValues.includes(item.value) && item.subComponent && (jsx(FocusableItem, __assign({ className: "LuiDeprecatedForms" }, { children: function (ref) {
2651
+ }, onChange: function () {
2652
+ /*Do nothing, change handled by menuItem*/
2653
+ } }) }), "".concat(index)), selectedValues.includes(item.value) && item.subComponent && (jsx(FocusableItem, __assign({ className: "LuiDeprecatedForms" }, { children: function (ref) {
2631
2654
  return item.subComponent &&
2632
2655
  item.subComponent({
2633
2656
  setValue: function (value) {
2634
2657
  subSelectedValues.current[item.value] = value;
2635
2658
  }
2636
2659
  }, ref);
2637
- } }), "".concat(item.value, "_subcomponent")))] }));
2660
+ } }), "".concat(item.value, "_subcomponent")))] }, "".concat(index)));
2638
2661
  })] })) })));
2639
2662
  };
2640
2663
 
@@ -2716,7 +2739,7 @@ var GridFormPopoutMenu = function (props) {
2716
2739
  });
2717
2740
  var popoverWrapper = useGridPopoverHook(props).popoverWrapper;
2718
2741
  return popoverWrapper(jsx(ComponentLoadingWrapper, __assign({ loading: !filteredOptions }, { children: jsx("div", __assign({ className: "Grid-popoverContainerList" }, { children: options === null || options === void 0 ? void 0 : options.map(function (item, index) {
2719
- return item.label === MenuSeparator ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : (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)));
2742
+ return item.label === MenuSeparator ? (jsx(MenuDivider, {}, "$$divider_".concat(index))) : (!item.hidden && (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))));
2720
2743
  }) })) })));
2721
2744
  };
2722
2745
 
@@ -3183,5 +3206,5 @@ var GridPopoverTextInput = function (colDef) {
3183
3206
  })));
3184
3207
  };
3185
3208
 
3186
- export { ComponentLoadingWrapper, GenericMultiEditCellClass, Grid, GridCell, GridContext, GridContextProvider, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormPopoutMenu, GridFormTextArea, GridFormTextInput, GridHeaderSelect, GridIcon, GridLoadableCell, GridPopoutEditMultiSelect, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridRendererGenericCell, TextAreaInput, TextInputFormatted, UpdatingContext, UpdatingContextProvider, bearingCorrectionValueFormatter, bearingNumberParser, bearingStringValidator, bearingValueFormatter, convertDDToDMS, hasParentClass, isFloat, isNotEmpty, useGridPopoverHook, usePostSortRowsHook, wait };
3209
+ export { ComponentLoadingWrapper, ControlledMenu, FocusableItem, GenericMultiEditCellClass, Grid, GridCell, GridContext, GridContextProvider, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormPopoutMenu, GridFormTextArea, GridFormTextInput, GridHeaderSelect, GridIcon, GridLoadableCell, GridPopoutEditMultiSelect, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridRendererGenericCell, Menu, MenuButton, MenuDivider, MenuGroup, MenuHeader, MenuItem, MenuRadioGroup, SubMenu, TextAreaInput, TextInputFormatted, UpdatingContext, UpdatingContextProvider, bearingCorrectionValueFormatter, bearingNumberParser, bearingStringValidator, bearingValueFormatter, convertDDToDMS, hasParentClass, isFloat, isNotEmpty, useGridPopoverHook, useMenuState, usePostSortRowsHook, wait };
3187
3210
  //# sourceMappingURL=step-ag-grid.esm.js.map