@linzjs/step-ag-grid 29.1.2 → 29.1.3

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 (29) hide show
  1. package/dist/src/components/Grid.d.ts +1 -1
  2. package/dist/src/components/GridPopoverHook.d.ts +1 -0
  3. package/dist/src/contexts/GridContext.d.ts +2 -2
  4. package/dist/src/utils/waitForCondition.d.ts +1 -1
  5. package/dist/step-ag-grid.cjs +73 -54
  6. package/dist/step-ag-grid.cjs.map +1 -1
  7. package/dist/step-ag-grid.esm.js +73 -55
  8. package/dist/step-ag-grid.esm.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/components/Grid.tsx +1 -1
  11. package/src/components/GridCell.tsx +34 -14
  12. package/src/components/GridPopoverHook.tsx +9 -15
  13. package/src/components/gridForm/GridFormDropDown.tsx +10 -3
  14. package/src/components/gridForm/GridFormMultiSelect.tsx +12 -4
  15. package/src/components/gridPopoverEdit/GridPopoverMessage.ts +1 -0
  16. package/src/contexts/GridContext.tsx +2 -2
  17. package/src/contexts/GridContextProvider.tsx +31 -23
  18. package/src/stories/grid/GridPopoutEditGeneric.stories.tsx +1 -1
  19. package/src/stories/grid/GridPopoverEditMultiSelect.stories.tsx +1 -1
  20. package/src/stories/grid/GridPopoverEditMultiSelectGrid.stories.tsx +1 -1
  21. package/src/stories/grid/gridFormInteraction/GridFormDropDownInteraction.stories.tsx +1 -1
  22. package/src/stories/grid/gridFormInteraction/GridFormEditBearingCorrectionInteraction.stories.tsx +2 -1
  23. package/src/stories/grid/gridFormInteraction/GridFormEditBearingInteraction.stories.tsx +1 -1
  24. package/src/stories/grid/gridFormInteraction/GridFormMultiSelectInteraction.stories.tsx +2 -1
  25. package/src/stories/grid/gridFormInteraction/GridFormPopoverMenuInteraction.stories.tsx +2 -2
  26. package/src/stories/grid/gridFormInteraction/GridFormTextAreaInteraction.stories.tsx +1 -1
  27. package/src/stories/grid/gridFormInteraction/GridFormTextInputInteraction.stories.tsx +1 -1
  28. package/src/stories/grid/interactions/GridKeyboardInteractions.stories.tsx +56 -13
  29. package/src/utils/waitForCondition.tsx +6 -2
@@ -3398,20 +3398,25 @@ const GridCell = (props, custom) => {
3398
3398
  sortable: true,
3399
3399
  resizable: true,
3400
3400
  valueSetter: custom?.editor ? blockValueSetter : undefined,
3401
- editable: props.editable ?? false,
3402
- ...(custom?.editor && {
3403
- cellClassRules: GridCellMultiSelectClassRules,
3404
- editable: props.editable ?? true,
3405
- cellEditor: GenericCellEditorComponentWrapper(custom?.editor),
3406
- }),
3401
+ editable: props.editable ?? !!custom?.editor,
3402
+ ...(custom?.editor
3403
+ ? {
3404
+ cellClassRules: GridCellMultiSelectClassRules,
3405
+ cellEditor: GenericCellEditorComponentWrapper(custom?.editor),
3406
+ }
3407
+ : {
3408
+ cellEditor: CellEditorToBlockEditing,
3409
+ }),
3407
3410
  suppressKeyboardEvent: suppressCellKeyboardEvents,
3408
- ...(custom?.editorParams && {
3409
- cellEditorParams: {
3410
- ...custom.editorParams,
3411
- multiEdit: custom.multiEdit,
3412
- preventAutoEdit: custom.preventAutoEdit ?? false,
3413
- },
3414
- }),
3411
+ ...(custom?.editorParams
3412
+ ? {
3413
+ cellEditorParams: {
3414
+ ...custom.editorParams,
3415
+ multiEdit: custom.multiEdit,
3416
+ preventAutoEdit: custom.preventAutoEdit ?? !custom?.editor,
3417
+ },
3418
+ }
3419
+ : { cellEditorParams: { preventAutoEdit: !custom?.editor } }),
3415
3420
  // If there's a valueFormatter and no filterValueGetter then create a filterValueGetter
3416
3421
  getQuickFilterText: filterValueGetter,
3417
3422
  // Default value formatter, otherwise react freaks out on objects
@@ -3428,6 +3433,19 @@ const GridCell = (props, custom) => {
3428
3433
  },
3429
3434
  };
3430
3435
  };
3436
+ /**
3437
+ * Ag-grid will start its own editor if editable is true and there is no cell editor
3438
+ * like in the case of a cell that is editable because it triggers a modal.
3439
+ * This will block that editor.
3440
+ */
3441
+ const CellEditorToBlockEditing = ({ stopEditing }) => {
3442
+ useEffect(() => {
3443
+ defer(() => {
3444
+ stopEditing();
3445
+ });
3446
+ }, [stopEditing]);
3447
+ return jsx(Fragment, {});
3448
+ };
3431
3449
  const GenericCellEditorComponentWrapper = (editor) => {
3432
3450
  const obj = { editor };
3433
3451
  return forwardRef(function GenericCellEditorComponentFr(cellEditorParams, _) {
@@ -3936,8 +3954,8 @@ const textMatch = (text, filter) => {
3936
3954
  negativeFilters.every((superFilter) => values.every((value) => isMatch(value, superFilter)))));
3937
3955
  };
3938
3956
 
3957
+ const CancelPromise = () => Promise.resolve(true);
3939
3958
  const useGridPopoverHook = ({ className, save, invalid, dontSaveOnExternalClick, }) => {
3940
- const { onBulkEditingComplete, redrawRows } = useGridContext();
3941
3959
  const { anchorRef, saving, updateValue, stopEditing } = useGridPopoverContext();
3942
3960
  const saveButtonRef = useRef(null);
3943
3961
  const [isOpen, setOpen] = useState(false);
@@ -3946,27 +3964,18 @@ const useGridPopoverHook = ({ className, save, invalid, dontSaveOnExternalClick,
3946
3964
  }, []);
3947
3965
  const triggerSave = useCallback(async (reason) => {
3948
3966
  if (reason == CloseReason.CANCEL) {
3967
+ await updateValue(CancelPromise, 0);
3949
3968
  stopEditing();
3950
- onBulkEditingComplete();
3951
- redrawRows();
3952
3969
  return;
3953
3970
  }
3954
3971
  if (invalid?.()) {
3955
3972
  // Don't close, don't do anything it's invalid
3956
3973
  return;
3957
3974
  }
3958
- if (!save) {
3959
- // No save method so just close
3975
+ if (await updateValue(save ?? (() => Promise.resolve(true)), reason === CloseReason.TAB_FORWARD ? 1 : reason === CloseReason.TAB_BACKWARD ? -1 : 0)) {
3960
3976
  stopEditing();
3961
- onBulkEditingComplete();
3962
- redrawRows();
3963
- return;
3964
3977
  }
3965
- if (await updateValue(save, reason === CloseReason.TAB_FORWARD ? 1 : reason === CloseReason.TAB_BACKWARD ? -1 : 0)) {
3966
- stopEditing();
3967
- redrawRows();
3968
- }
3969
- }, [invalid, onBulkEditingComplete, redrawRows, save, stopEditing, updateValue]);
3978
+ }, [invalid, save, stopEditing, updateValue]);
3970
3979
  const popoverWrapper = useCallback((children) => {
3971
3980
  return (jsx(Fragment, { children: anchorRef.current && (jsxs(ControlledMenu, { state: isOpen ? 'open' : 'closed', portal: true, unmountOnClose: true, anchorRef: anchorRef, saveButtonRef: saveButtonRef, menuClassName: 'step-ag-grid-react-menu', onClose: (event) => {
3972
3981
  // Prevent menu from closing when modals are invoked
@@ -3992,7 +4001,7 @@ const useGridPopoverHook = ({ className, save, invalid, dontSaveOnExternalClick,
3992
4001
  const primitiveToSelectOption = (value) => {
3993
4002
  return {
3994
4003
  value: value,
3995
- label: value ? String(value) : '',
4004
+ label: value ? String(value) : '-',
3996
4005
  };
3997
4006
  };
3998
4007
  const MenuSeparatorString = '_____MENU_SEPARATOR_____';
@@ -4084,7 +4093,13 @@ const GridFormDropDown = (props) => {
4084
4093
  if (selectedItem === null) {
4085
4094
  if (props.onSelectFilter) {
4086
4095
  const { onSelectFilter } = props;
4087
- await onSelectFilter({ selectedRows, selectedRowIds: selectedRows.map((row) => row.id), value: filter });
4096
+ if (!isEmpty(filter)) {
4097
+ await onSelectFilter({
4098
+ selectedRows,
4099
+ selectedRowIds: selectedRows.map((row) => row.id),
4100
+ value: filter,
4101
+ });
4102
+ }
4088
4103
  return true;
4089
4104
  }
4090
4105
  else {
@@ -4114,7 +4129,7 @@ const GridFormDropDown = (props) => {
4114
4129
  setSubSelectedValue(null);
4115
4130
  subComponentIsValid.current = true;
4116
4131
  }, children: ({ ref }) => (jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '100%' }, children: [jsx("input", { className: 'LuiTextInput-input', ref: ref, type: "text", placeholder: props.filterPlaceholder ?? 'Filter...', "data-testid": 'filteredMenu-free-text-input', defaultValue: filter, "data-allowtabtosave": true, "data-disableenterautosave": !props.onSelectFilter &&
4117
- !(filteredValues && filteredValues.length === 1 && !filteredValues[0].subComponent), onChange: (e) => setFilter(e.target.value) }), props.filterHelpText && isNotEmpty(filter) && (jsx(FormError, { error: null, helpText: props.filterHelpText }))] })) }), jsx(MenuDivider, {}, `$$divider_filter`)] })), jsx(ComponentLoadingWrapper, { loading: !options, className: 'GridFormDropDown-options', children: jsxs(Fragment, { children: [options && (isEmpty(options) || (filteredValues && isEmpty(filteredValues))) && (jsx(MenuItem, { className: 'GridPopoverEditDropDown-noOptions', disabled: true, children: props.noOptionsMessage ?? 'No Options' }, `${fieldToString(field)}-empty`)), options?.map((item, index) => {
4132
+ !(filteredValues && filteredValues.length === 1 && !filteredValues[0].subComponent), onChange: (e) => setFilter(e.target.value.trim()) }), props.filterHelpText && isNotEmpty(filter) && (jsx(FormError, { error: null, helpText: props.filterHelpText }))] })) }), jsx(MenuDivider, {}, `$$divider_filter`)] })), jsx(ComponentLoadingWrapper, { loading: !options, className: 'GridFormDropDown-options', children: jsxs(Fragment, { children: [options && (isEmpty(options) || (filteredValues && isEmpty(filteredValues))) && (jsx(MenuItem, { className: 'GridPopoverEditDropDown-noOptions', disabled: true, children: props.noOptionsMessage ?? 'No Options' }, `${fieldToString(field)}-empty`)), options?.map((item, index) => {
4118
4133
  showHeader = null;
4119
4134
  if (item.value === MenuSeparatorString) {
4120
4135
  return jsx(MenuDivider, {}, `$$divider_${index}`);
@@ -4344,11 +4359,13 @@ const GridFormMultiSelect = (props) => {
4344
4359
  props.invalid(selectedRows, options.filter((o) => o.checked)));
4345
4360
  }, [options, props, selectedRows]);
4346
4361
  const save = useCallback(async (selectedRows) => {
4347
- if (!options || !props.onSave)
4362
+ if (!options || !props.onSave) {
4348
4363
  return true;
4364
+ }
4349
4365
  // Any changes to save?
4350
- if (initialValues === JSON.stringify(options))
4366
+ if (initialValues === JSON.stringify(options)) {
4351
4367
  return true;
4368
+ }
4352
4369
  return props.onSave({
4353
4370
  selectedRows,
4354
4371
  selectedOptions: options.filter((o) => o.checked),
@@ -4441,8 +4458,9 @@ const FilterInput = (props) => {
4441
4458
  setOptions([...options]);
4442
4459
  }, [filter, headerGroups, options, setOptions]);
4443
4460
  const addCustomFilterValue = useCallback(() => {
4444
- if (!options || !onSelectFilter)
4461
+ if (!options || !onSelectFilter) {
4445
4462
  return;
4463
+ }
4446
4464
  const filterTrimmed = filter.trim();
4447
4465
  if (isEmpty(filterTrimmed)) {
4448
4466
  void triggerSave();
@@ -4451,8 +4469,9 @@ const FilterInput = (props) => {
4451
4469
  const preFilterOptions = JSON.stringify(options);
4452
4470
  onSelectFilter({ filter: filterTrimmed, options });
4453
4471
  // Detect if options list changed and update
4454
- if (preFilterOptions === JSON.stringify(options))
4472
+ if (preFilterOptions === JSON.stringify(options)) {
4455
4473
  return;
4474
+ }
4456
4475
  setOptions([...options]);
4457
4476
  setFilter('');
4458
4477
  }, [filter, onSelectFilter, options, setFilter, setOptions, triggerSave]);
@@ -5047,6 +5066,7 @@ const GridPopoverMessage = (colDef, props) => GridCell({
5047
5066
  singleClickEdit: true,
5048
5067
  }, {
5049
5068
  editor: GridFormMessage,
5069
+ preventAutoEdit: true,
5050
5070
  ...props,
5051
5071
  });
5052
5072
 
@@ -5062,7 +5082,7 @@ const GridWrapper = ({ children, maxHeight }) => (jsx("div", { className: 'Grid-
5062
5082
  const getColId = (colDef) => colDef.colId ?? '';
5063
5083
  const isFlexColumn = (colDef) => !!colDef.flex && !isGridCellFiller(colDef);
5064
5084
 
5065
- const waitForCondition = async (condition, timeoutMs) => {
5085
+ const waitForCondition = async (error, condition, timeoutMs) => {
5066
5086
  const endTime = Date.now() + timeoutMs;
5067
5087
  while (Date.now() < endTime) {
5068
5088
  if (condition()) {
@@ -5070,7 +5090,7 @@ const waitForCondition = async (condition, timeoutMs) => {
5070
5090
  }
5071
5091
  await wait(100);
5072
5092
  }
5073
- console.warn('waitForCondition failed');
5093
+ console.warn(error);
5074
5094
  return false;
5075
5095
  };
5076
5096
 
@@ -5419,8 +5439,7 @@ const GridContextProvider = (props) => {
5419
5439
  startCellEditingInProgressRef.current = true;
5420
5440
  try {
5421
5441
  // Edit in progress so don't edit until finished, timeout waiting after 5s
5422
- if (!(await waitForCondition(() => !anyUpdating(), 5000))) {
5423
- console.error("Could not start edit because previous edit hasn't finished after 5 seconds");
5442
+ if (!(await waitForCondition('startCellEditing failed as update still in progress, waited for 15 seconds', () => !anyUpdating(), 15000))) {
5424
5443
  return;
5425
5444
  }
5426
5445
  const colDef = gridApi.getColumnDef(colId);
@@ -5442,11 +5461,12 @@ const GridContextProvider = (props) => {
5442
5461
  const rowIndex = rowNode.rowIndex;
5443
5462
  if (rowIndex != null) {
5444
5463
  defer(() => {
5445
- !gridApi.isDestroyed() &&
5464
+ if (!gridApi.isDestroyed()) {
5446
5465
  gridApi.startEditingCell({
5447
5466
  rowIndex,
5448
5467
  colKey: colId,
5449
5468
  });
5469
+ }
5450
5470
  });
5451
5471
  }
5452
5472
  }
@@ -5455,9 +5475,9 @@ const GridContextProvider = (props) => {
5455
5475
  }
5456
5476
  }, [anyUpdating, gridApi, prePopupOps, waitForExternallySelectedItemsToBeInSync]);
5457
5477
  const bulkEditingCompleteCallbackRef = useRef();
5458
- const onBulkEditingComplete = useCallback(() => {
5478
+ const onBulkEditingComplete = useCallback(async () => {
5459
5479
  resetFocusedCellAfterCellEditing();
5460
- bulkEditingCompleteCallbackRef.current?.();
5480
+ await bulkEditingCompleteCallbackRef.current?.();
5461
5481
  }, [resetFocusedCellAfterCellEditing]);
5462
5482
  const setOnBulkEditingComplete = useCallback((cellEditingCompleteCallback) => {
5463
5483
  bulkEditingCompleteCallbackRef.current = cellEditingCompleteCallback;
@@ -5488,8 +5508,10 @@ const GridContextProvider = (props) => {
5488
5508
  // Prevent resetting focus to original editing cell
5489
5509
  prePopupFocusedCell.current = undefined;
5490
5510
  const preRow = gridApi.getFocusedCell();
5511
+ // If we don't do this ag-grid will do its own continuation of an edit on tab, we don't want that as
5512
+ // we are managing it ourselves
5513
+ gridApi.stopEditing();
5491
5514
  if (tabDirection === 1) {
5492
- gridApi.stopEditing();
5493
5515
  gridApi.tabToNextCell();
5494
5516
  }
5495
5517
  else {
@@ -5526,29 +5548,25 @@ const GridContextProvider = (props) => {
5526
5548
  const selectedRows = props.selectedRows;
5527
5549
  let ok = false;
5528
5550
  await modifyUpdating(props.field ?? '', selectedRows.map((data) => data.id), async () => {
5529
- // MATT Disabled I don't believe these are needed anymore
5530
- // I've left them here just in case they are
5531
5551
  // Need to refresh to get spinners to work on all rows
5532
- // gridApi.refreshCells({ rowNodes: props.selectedRows as RowNode[], force: true });
5552
+ gridApi.refreshCells({ rowNodes: props.selectedRows, force: true });
5533
5553
  ok = await fnUpdate(selectedRows).catch((ex) => {
5534
5554
  console.error('Exception during modifyUpdating', ex);
5535
5555
  return false;
5536
5556
  });
5537
5557
  });
5538
- // MATT Disabled I don't believe these are needed anymore
5539
- // I've left them here just in case they are
5540
5558
  // async processes need to refresh their own rows
5541
- // gridApi.refreshCells({ rowNodes: selectedRows as RowNode[], force: true });
5559
+ gridApi.refreshCells({ rowNodes: selectedRows, force: true });
5542
5560
  if (gridApi.isDestroyed()) {
5543
5561
  return ok;
5544
5562
  }
5545
5563
  if (ok) {
5546
- const cell = gridApi.getFocusedCell();
5547
- if (cell && gridApi.getFocusedCell() == null) {
5548
- !gridApi.isDestroyed && gridApi.setFocusedCell(cell.rowIndex, cell.column);
5549
- }
5564
+ //const cell = gridApi.getFocusedCell();
5565
+ //if (cell && gridApi.getFocusedCell() == null) {
5566
+ // !gridApi.isDestroyed && gridApi.setFocusedCell(cell.rowIndex, cell.column);
5567
+ // }
5550
5568
  // This is needed to trigger postSortRowsHook
5551
- gridApi.refreshClientSideRowModel();
5569
+ !gridApi.isDestroyed && gridApi.refreshClientSideRowModel();
5552
5570
  }
5553
5571
  void (async () => {
5554
5572
  // Only focus next cell if user hasn't already manually changed focus
@@ -5558,11 +5576,11 @@ const GridContextProvider = (props) => {
5558
5576
  prePopupFocusedCell.current.rowIndex == postPopupFocusedCell.rowIndex &&
5559
5577
  prePopupFocusedCell.current.column.getColId() == postPopupFocusedCell.column.getColId()) {
5560
5578
  if (!tabDirection || !(await selectNextEditableCell(tabDirection))) {
5561
- onBulkEditingComplete();
5579
+ await onBulkEditingComplete();
5562
5580
  }
5563
5581
  }
5564
5582
  else {
5565
- onBulkEditingComplete();
5583
+ await onBulkEditingComplete();
5566
5584
  }
5567
5585
  })();
5568
5586
  return ok;
@@ -5873,5 +5891,5 @@ const useDeferredPromise = () => {
5873
5891
  };
5874
5892
  };
5875
5893
 
5876
- export { ActionButton, ComponentLoadingWrapper, ControlledMenu, Editor, FocusableItem, FormError, GenericCellEditorComponentWrapper, Grid, GridButton, GridCell, GridCellFiller, GridCellFillerColId, GridCellMultiEditor, GridCellMultiSelectClassRules, GridCellRenderer, GridContext, GridContextProvider, GridEditBoolean, GridFilterButtons, GridFilterColumnsToggle, GridFilterDownloadCsvButton, GridFilterHeaderIconButton, GridFilterQuick, GridFilters, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormMultiSelectGrid, GridFormPopoverMenu, GridFormSubComponentTextArea, GridFormSubComponentTextInput, GridFormTextArea, GridFormTextInput, GridIcon, GridLoadableCell, GridNoRowsOverlay, GridNoRowsOverlayFr, GridPopoutEditMultiSelect, GridPopoutEditMultiSelectGrid, GridPopoverContext, GridPopoverContextProvider, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditBearingCorrectionEditorParams, GridPopoverEditBearingEditorParams, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridSubComponentContext, GridUpdatingContext, GridUpdatingContextProvider, GridWrapper, Menu, MenuButton, MenuDivider, MenuGroup, MenuHeader, MenuHeaderItem, MenuHeaderString, MenuItem, MenuRadioGroup, MenuSeparator, MenuSeparatorString, PopoutMenuSeparator, SubMenu, TextAreaInput, TextInputFormatted, TextInputValidator, bearingCorrectionRangeValidator, bearingCorrectionValueFormatter, bearingNumberParser, bearingRangeValidator, bearingStringValidator, bearingValueFormatter, convertDDToDMS, defaultValueFormatter, downloadCsvUseValueFormattersProcessCellCallback, findParentWithClass, fnOrVar, generateFilterGetter, hasParentClass, isFloat, isGridCellFiller, isNotEmpty, primitiveToSelectOption, sanitiseFileName, stringByteLengthIsInvalid, suppressCellKeyboardEvents, textMatch, useDeferredPromise, useGridContext, useGridContextMenu, useGridFilter, useGridPopoverContext, useGridPopoverHook, useMenuState, usePostSortRowsHook, wait, waitForCondition };
5894
+ export { ActionButton, CancelPromise, ComponentLoadingWrapper, ControlledMenu, Editor, FocusableItem, FormError, GenericCellEditorComponentWrapper, Grid, GridButton, GridCell, GridCellFiller, GridCellFillerColId, GridCellMultiEditor, GridCellMultiSelectClassRules, GridCellRenderer, GridContext, GridContextProvider, GridEditBoolean, GridFilterButtons, GridFilterColumnsToggle, GridFilterDownloadCsvButton, GridFilterHeaderIconButton, GridFilterQuick, GridFilters, GridFormDropDown, GridFormEditBearing, GridFormMessage, GridFormMultiSelect, GridFormMultiSelectGrid, GridFormPopoverMenu, GridFormSubComponentTextArea, GridFormSubComponentTextInput, GridFormTextArea, GridFormTextInput, GridIcon, GridLoadableCell, GridNoRowsOverlay, GridNoRowsOverlayFr, GridPopoutEditMultiSelect, GridPopoutEditMultiSelectGrid, GridPopoverContext, GridPopoverContextProvider, GridPopoverEditBearing, GridPopoverEditBearingCorrection, GridPopoverEditBearingCorrectionEditorParams, GridPopoverEditBearingEditorParams, GridPopoverEditDropDown, GridPopoverMenu, GridPopoverMessage, GridPopoverTextArea, GridPopoverTextInput, GridRenderPopoutMenuCell, GridSubComponentContext, GridUpdatingContext, GridUpdatingContextProvider, GridWrapper, Menu, MenuButton, MenuDivider, MenuGroup, MenuHeader, MenuHeaderItem, MenuHeaderString, MenuItem, MenuRadioGroup, MenuSeparator, MenuSeparatorString, PopoutMenuSeparator, SubMenu, TextAreaInput, TextInputFormatted, TextInputValidator, bearingCorrectionRangeValidator, bearingCorrectionValueFormatter, bearingNumberParser, bearingRangeValidator, bearingStringValidator, bearingValueFormatter, convertDDToDMS, defaultValueFormatter, downloadCsvUseValueFormattersProcessCellCallback, findParentWithClass, fnOrVar, generateFilterGetter, hasParentClass, isFloat, isGridCellFiller, isNotEmpty, primitiveToSelectOption, sanitiseFileName, stringByteLengthIsInvalid, suppressCellKeyboardEvents, textMatch, useDeferredPromise, useGridContext, useGridContextMenu, useGridFilter, useGridPopoverContext, useGridPopoverHook, useMenuState, usePostSortRowsHook, wait, waitForCondition };
5877
5895
  //# sourceMappingURL=step-ag-grid.esm.js.map