@procore/data-table 14.12.1 → 14.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ## 14.12.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 7ba11177c: When using an input or date editor and focusing on an element outside of the table, clear the cell focus and ensure that the new element is focused.
8
+
3
9
  ## 14.12.1
4
10
 
5
11
  ### Patch Changes
@@ -8028,7 +8028,7 @@ var InternalBooleanCellEditor = React76__default.default.forwardRef(({ columnDef
8028
8028
  return /* @__PURE__ */ React76__default.default.createElement(
8029
8029
  coreReact.Select,
8030
8030
  {
8031
- afterHide: stopEditing,
8031
+ afterHide: () => stopEditing(),
8032
8032
  block: true,
8033
8033
  className: cx("input-cell"),
8034
8034
  label: value ? I18n.t("dataTable.cells.booleanCell.options.yes") : I18n.t("dataTable.cells.booleanCell.options.no"),
@@ -8249,8 +8249,8 @@ var Editor = React76__default.default.forwardRef(
8249
8249
  if (isEmptyValue(value) && !columnDefinition.editable) {
8250
8250
  return null;
8251
8251
  }
8252
- function onBlur() {
8253
- stopEditing();
8252
+ function onBlur(event) {
8253
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
8254
8254
  }
8255
8255
  const defaultValue = eventKey ? value : labsFinancialsUtils.formatNumber(value, {
8256
8256
  ...((_a = columnDefinition.cellEditorParams) == null ? void 0 : _a.formatConfig) ?? ((_b = columnDefinition.cellRendererParams) == null ? void 0 : _b.formatConfig) ?? {},
@@ -8693,8 +8693,8 @@ var DateCellRenderer = withDataTableRenderer(Renderer4, "date");
8693
8693
  var Editor2 = React76__default.default.forwardRef(
8694
8694
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8695
8695
  var _a, _b;
8696
- function afterHide() {
8697
- stopEditing();
8696
+ function afterHide(event) {
8697
+ stopEditing(ensureIsHTMLElement(event == null ? void 0 : event.target));
8698
8698
  }
8699
8699
  function onChange(date) {
8700
8700
  if (date) {
@@ -8767,8 +8767,8 @@ var DateTimeCellRenderer = withDataTableRenderer(Renderer5, "date");
8767
8767
  var Editor3 = React76__default.default.forwardRef(
8768
8768
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8769
8769
  var _a, _b;
8770
- function afterHide() {
8771
- stopEditing();
8770
+ function afterHide(event) {
8771
+ stopEditing(ensureIsHTMLElement(event == null ? void 0 : event.target));
8772
8772
  }
8773
8773
  function onChange(date) {
8774
8774
  if (date) {
@@ -53043,8 +53043,8 @@ var InternalNumberCellEditor = React76__default.default.forwardRef(({ columnDefi
53043
53043
  if (isEmptyValue(value) && !columnDefinition.editable) {
53044
53044
  return null;
53045
53045
  }
53046
- function onBlur() {
53047
- stopEditing();
53046
+ function onBlur(event) {
53047
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53048
53048
  }
53049
53049
  return /* @__PURE__ */ React76__default.default.createElement(
53050
53050
  coreReact.Input,
@@ -53335,8 +53335,8 @@ var PercentCellRenderer = withDataTableRenderer(Renderer7, "input");
53335
53335
  var Editor4 = React76__default.default.forwardRef(({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53336
53336
  var _a, _b, _c, _d, _e;
53337
53337
  const I18n = coreReact.useI18nContext();
53338
- function onBlur() {
53339
- stopEditing();
53338
+ function onBlur(event) {
53339
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53340
53340
  }
53341
53341
  if (isEmptyValue(value) && !columnDefinition.editable) {
53342
53342
  return null;
@@ -53741,8 +53741,8 @@ var TextCellRenderer = withDataTableRenderer(Renderer11, "input");
53741
53741
  var Editor7 = React76__default.default.forwardRef(
53742
53742
  ({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53743
53743
  var _a, _b, _c, _d;
53744
- function onBlur() {
53745
- stopEditing();
53744
+ function onBlur(event) {
53745
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53746
53746
  }
53747
53747
  const I18n = coreReact.useI18nContext();
53748
53748
  const internalValue = eventKey ? value : ((_a = columnDefinition.getStringFormattedValue) == null ? void 0 : _a.call(columnDefinition, value)) ?? value;
@@ -53815,8 +53815,8 @@ var Renderer12 = ({
53815
53815
  var Editor8 = React76__default.default.forwardRef(
53816
53816
  ({ columnDefinition, stopEditing, value }, ref) => {
53817
53817
  var _a, _b, _c, _d;
53818
- function onBlur() {
53819
- stopEditing();
53818
+ function onBlur(event) {
53819
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53820
53820
  }
53821
53821
  const I18n = coreReact.useI18nContext();
53822
53822
  const internalValue = ((_a = columnDefinition.getStringFormattedValue) == null ? void 0 : _a.call(columnDefinition, value)) ?? value;
@@ -56070,7 +56070,14 @@ var DataTableCellEditor = React76__default.default.forwardRef(
56070
56070
  node.setDataValue(field, newValue);
56071
56071
  setCurrentValue(newValue);
56072
56072
  },
56073
- stopEditing,
56073
+ stopEditing: (relatedTarget) => {
56074
+ const isRelatedTargetOutsideTable = (relatedTarget == null ? void 0 : relatedTarget.closest('[data-qa="data-table-table')) === null;
56075
+ stopEditing(isRelatedTargetOutsideTable);
56076
+ if (isRelatedTargetOutsideTable) {
56077
+ api.clearFocusedCell();
56078
+ relatedTarget.focus();
56079
+ }
56080
+ },
56074
56081
  tableApi: tableRef == null ? void 0 : tableRef.current,
56075
56082
  value: currentValue,
56076
56083
  ref: handleRefs(editorType)
@@ -56952,6 +56959,9 @@ function withDataTableRenderer(Component4, editorType) {
56952
56959
  }
56953
56960
  );
56954
56961
  }
56962
+ function ensureIsHTMLElement(element) {
56963
+ return element instanceof HTMLElement ? element : null;
56964
+ }
56955
56965
  function getGroupNodes(params) {
56956
56966
  var _a, _b;
56957
56967
  const currentParentId = ((_b = (_a = params.node) == null ? void 0 : _a.parent) == null ? void 0 : _b.id) ?? "root";
@@ -57200,7 +57210,7 @@ var MultiSelectEditor = React76__default.default.forwardRef(({ columnDefinition,
57200
57210
  coreReact.MultiSelect,
57201
57211
  {
57202
57212
  beforeShow,
57203
- afterHide: stopEditing,
57213
+ afterHide: () => stopEditing(),
57204
57214
  block: true,
57205
57215
  loading: isSearching || loading,
57206
57216
  getId: (option) => {
@@ -82346,6 +82356,7 @@ var Table = (props) => {
82346
82356
  return /* @__PURE__ */ React76__default.default.createElement(
82347
82357
  Spinner,
82348
82358
  {
82359
+ "data-qa": "data-table-table",
82349
82360
  loading: loadingStatus.loading,
82350
82361
  label: loadingStatus.message,
82351
82362
  style: {
@@ -198,7 +198,7 @@ interface DataTableCellEditorProps<TValue = any, TColumnDefinition extends Colum
198
198
  eventKey: string | null;
199
199
  ref?: ((instance: HTMLElement | null) => void) | React__default.MutableRefObject<HTMLElement | null> | null;
200
200
  setDataValue: (field: string, newValue: TValue) => void;
201
- stopEditing: () => void;
201
+ stopEditing: (relatedTarget?: HTMLElement | null) => void;
202
202
  }
203
203
 
204
204
  interface BooleanCellRendererParams {
@@ -198,7 +198,7 @@ interface DataTableCellEditorProps<TValue = any, TColumnDefinition extends Colum
198
198
  eventKey: string | null;
199
199
  ref?: ((instance: HTMLElement | null) => void) | React__default.MutableRefObject<HTMLElement | null> | null;
200
200
  setDataValue: (field: string, newValue: TValue) => void;
201
- stopEditing: () => void;
201
+ stopEditing: (relatedTarget?: HTMLElement | null) => void;
202
202
  }
203
203
 
204
204
  interface BooleanCellRendererParams {
@@ -8014,7 +8014,7 @@ var InternalBooleanCellEditor = React76.forwardRef(({ columnDefinition, setDataV
8014
8014
  return /* @__PURE__ */ React76.createElement(
8015
8015
  Select,
8016
8016
  {
8017
- afterHide: stopEditing,
8017
+ afterHide: () => stopEditing(),
8018
8018
  block: true,
8019
8019
  className: cx("input-cell"),
8020
8020
  label: value ? I18n.t("dataTable.cells.booleanCell.options.yes") : I18n.t("dataTable.cells.booleanCell.options.no"),
@@ -8235,8 +8235,8 @@ var Editor = React76.forwardRef(
8235
8235
  if (isEmptyValue(value) && !columnDefinition.editable) {
8236
8236
  return null;
8237
8237
  }
8238
- function onBlur() {
8239
- stopEditing();
8238
+ function onBlur(event) {
8239
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
8240
8240
  }
8241
8241
  const defaultValue = eventKey ? value : formatNumber(value, {
8242
8242
  ...((_a = columnDefinition.cellEditorParams) == null ? void 0 : _a.formatConfig) ?? ((_b = columnDefinition.cellRendererParams) == null ? void 0 : _b.formatConfig) ?? {},
@@ -8679,8 +8679,8 @@ var DateCellRenderer = withDataTableRenderer(Renderer4, "date");
8679
8679
  var Editor2 = React76.forwardRef(
8680
8680
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8681
8681
  var _a, _b;
8682
- function afterHide() {
8683
- stopEditing();
8682
+ function afterHide(event) {
8683
+ stopEditing(ensureIsHTMLElement(event == null ? void 0 : event.target));
8684
8684
  }
8685
8685
  function onChange(date) {
8686
8686
  if (date) {
@@ -8753,8 +8753,8 @@ var DateTimeCellRenderer = withDataTableRenderer(Renderer5, "date");
8753
8753
  var Editor3 = React76.forwardRef(
8754
8754
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8755
8755
  var _a, _b;
8756
- function afterHide() {
8757
- stopEditing();
8756
+ function afterHide(event) {
8757
+ stopEditing(ensureIsHTMLElement(event == null ? void 0 : event.target));
8758
8758
  }
8759
8759
  function onChange(date) {
8760
8760
  if (date) {
@@ -53029,8 +53029,8 @@ var InternalNumberCellEditor = React76.forwardRef(({ columnDefinition, stopEditi
53029
53029
  if (isEmptyValue(value) && !columnDefinition.editable) {
53030
53030
  return null;
53031
53031
  }
53032
- function onBlur() {
53033
- stopEditing();
53032
+ function onBlur(event) {
53033
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53034
53034
  }
53035
53035
  return /* @__PURE__ */ React76.createElement(
53036
53036
  Input,
@@ -53321,8 +53321,8 @@ var PercentCellRenderer = withDataTableRenderer(Renderer7, "input");
53321
53321
  var Editor4 = React76.forwardRef(({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53322
53322
  var _a, _b, _c, _d, _e;
53323
53323
  const I18n = useI18nContext();
53324
- function onBlur() {
53325
- stopEditing();
53324
+ function onBlur(event) {
53325
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53326
53326
  }
53327
53327
  if (isEmptyValue(value) && !columnDefinition.editable) {
53328
53328
  return null;
@@ -53727,8 +53727,8 @@ var TextCellRenderer = withDataTableRenderer(Renderer11, "input");
53727
53727
  var Editor7 = React76.forwardRef(
53728
53728
  ({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53729
53729
  var _a, _b, _c, _d;
53730
- function onBlur() {
53731
- stopEditing();
53730
+ function onBlur(event) {
53731
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53732
53732
  }
53733
53733
  const I18n = useI18nContext();
53734
53734
  const internalValue = eventKey ? value : ((_a = columnDefinition.getStringFormattedValue) == null ? void 0 : _a.call(columnDefinition, value)) ?? value;
@@ -53801,8 +53801,8 @@ var Renderer12 = ({
53801
53801
  var Editor8 = React76.forwardRef(
53802
53802
  ({ columnDefinition, stopEditing, value }, ref) => {
53803
53803
  var _a, _b, _c, _d;
53804
- function onBlur() {
53805
- stopEditing();
53804
+ function onBlur(event) {
53805
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53806
53806
  }
53807
53807
  const I18n = useI18nContext();
53808
53808
  const internalValue = ((_a = columnDefinition.getStringFormattedValue) == null ? void 0 : _a.call(columnDefinition, value)) ?? value;
@@ -56056,7 +56056,14 @@ var DataTableCellEditor = React76.forwardRef(
56056
56056
  node.setDataValue(field, newValue);
56057
56057
  setCurrentValue(newValue);
56058
56058
  },
56059
- stopEditing,
56059
+ stopEditing: (relatedTarget) => {
56060
+ const isRelatedTargetOutsideTable = (relatedTarget == null ? void 0 : relatedTarget.closest('[data-qa="data-table-table')) === null;
56061
+ stopEditing(isRelatedTargetOutsideTable);
56062
+ if (isRelatedTargetOutsideTable) {
56063
+ api.clearFocusedCell();
56064
+ relatedTarget.focus();
56065
+ }
56066
+ },
56060
56067
  tableApi: tableRef == null ? void 0 : tableRef.current,
56061
56068
  value: currentValue,
56062
56069
  ref: handleRefs(editorType)
@@ -56938,6 +56945,9 @@ function withDataTableRenderer(Component4, editorType) {
56938
56945
  }
56939
56946
  );
56940
56947
  }
56948
+ function ensureIsHTMLElement(element) {
56949
+ return element instanceof HTMLElement ? element : null;
56950
+ }
56941
56951
  function getGroupNodes(params) {
56942
56952
  var _a, _b;
56943
56953
  const currentParentId = ((_b = (_a = params.node) == null ? void 0 : _a.parent) == null ? void 0 : _b.id) ?? "root";
@@ -57186,7 +57196,7 @@ var MultiSelectEditor = React76.forwardRef(({ columnDefinition, value = [], setD
57186
57196
  MultiSelect,
57187
57197
  {
57188
57198
  beforeShow,
57189
- afterHide: stopEditing,
57199
+ afterHide: () => stopEditing(),
57190
57200
  block: true,
57191
57201
  loading: isSearching || loading,
57192
57202
  getId: (option) => {
@@ -82332,6 +82342,7 @@ var Table = (props) => {
82332
82342
  return /* @__PURE__ */ React76.createElement(
82333
82343
  Spinner,
82334
82344
  {
82345
+ "data-qa": "data-table-table",
82335
82346
  loading: loadingStatus.loading,
82336
82347
  label: loadingStatus.message,
82337
82348
  style: {
@@ -8025,7 +8025,7 @@ var InternalBooleanCellEditor = React76__default.default.forwardRef(({ columnDef
8025
8025
  return /* @__PURE__ */ React76__default.default.createElement(
8026
8026
  coreReact.Select,
8027
8027
  {
8028
- afterHide: stopEditing,
8028
+ afterHide: () => stopEditing(),
8029
8029
  block: true,
8030
8030
  className: cx("input-cell"),
8031
8031
  label: value ? I18n.t("dataTable.cells.booleanCell.options.yes") : I18n.t("dataTable.cells.booleanCell.options.no"),
@@ -8243,8 +8243,8 @@ var Editor = React76__default.default.forwardRef(
8243
8243
  if (isEmptyValue(value) && !columnDefinition.editable) {
8244
8244
  return null;
8245
8245
  }
8246
- function onBlur() {
8247
- stopEditing();
8246
+ function onBlur(event) {
8247
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
8248
8248
  }
8249
8249
  const defaultValue = eventKey ? value : labsFinancialsUtils.formatNumber(value, {
8250
8250
  ...columnDefinition.cellEditorParams?.formatConfig ?? columnDefinition.cellRendererParams?.formatConfig ?? {},
@@ -8682,8 +8682,8 @@ var Renderer4 = (props) => {
8682
8682
  var DateCellRenderer = withDataTableRenderer(Renderer4, "date");
8683
8683
  var Editor2 = React76__default.default.forwardRef(
8684
8684
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8685
- function afterHide() {
8686
- stopEditing();
8685
+ function afterHide(event) {
8686
+ stopEditing(ensureIsHTMLElement(event?.target));
8687
8687
  }
8688
8688
  function onChange(date) {
8689
8689
  if (date) {
@@ -8753,8 +8753,8 @@ var Renderer5 = (props) => {
8753
8753
  var DateTimeCellRenderer = withDataTableRenderer(Renderer5, "date");
8754
8754
  var Editor3 = React76__default.default.forwardRef(
8755
8755
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8756
- function afterHide() {
8757
- stopEditing();
8756
+ function afterHide(event) {
8757
+ stopEditing(ensureIsHTMLElement(event?.target));
8758
8758
  }
8759
8759
  function onChange(date) {
8760
8760
  if (date) {
@@ -53026,8 +53026,8 @@ var InternalNumberCellEditor = React76__default.default.forwardRef(({ columnDefi
53026
53026
  if (isEmptyValue(value) && !columnDefinition.editable) {
53027
53027
  return null;
53028
53028
  }
53029
- function onBlur() {
53030
- stopEditing();
53029
+ function onBlur(event) {
53030
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53031
53031
  }
53032
53032
  return /* @__PURE__ */ React76__default.default.createElement(
53033
53033
  coreReact.Input,
@@ -53310,8 +53310,8 @@ var Renderer7 = ({
53310
53310
  var PercentCellRenderer = withDataTableRenderer(Renderer7, "input");
53311
53311
  var Editor4 = React76__default.default.forwardRef(({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53312
53312
  const I18n = coreReact.useI18nContext();
53313
- function onBlur() {
53314
- stopEditing();
53313
+ function onBlur(event) {
53314
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53315
53315
  }
53316
53316
  if (isEmptyValue(value) && !columnDefinition.editable) {
53317
53317
  return null;
@@ -53702,8 +53702,8 @@ var Renderer11 = ({
53702
53702
  var TextCellRenderer = withDataTableRenderer(Renderer11, "input");
53703
53703
  var Editor7 = React76__default.default.forwardRef(
53704
53704
  ({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53705
- function onBlur() {
53706
- stopEditing();
53705
+ function onBlur(event) {
53706
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53707
53707
  }
53708
53708
  const I18n = coreReact.useI18nContext();
53709
53709
  const internalValue = eventKey ? value : columnDefinition.getStringFormattedValue?.(value) ?? value;
@@ -53773,8 +53773,8 @@ var Renderer12 = ({
53773
53773
  };
53774
53774
  var Editor8 = React76__default.default.forwardRef(
53775
53775
  ({ columnDefinition, stopEditing, value }, ref) => {
53776
- function onBlur() {
53777
- stopEditing();
53776
+ function onBlur(event) {
53777
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53778
53778
  }
53779
53779
  const I18n = coreReact.useI18nContext();
53780
53780
  const internalValue = columnDefinition.getStringFormattedValue?.(value) ?? value;
@@ -55984,7 +55984,14 @@ var DataTableCellEditor = React76__default.default.forwardRef(
55984
55984
  node.setDataValue(field, newValue);
55985
55985
  setCurrentValue(newValue);
55986
55986
  },
55987
- stopEditing,
55987
+ stopEditing: (relatedTarget) => {
55988
+ const isRelatedTargetOutsideTable = relatedTarget?.closest('[data-qa="data-table-table') === null;
55989
+ stopEditing(isRelatedTargetOutsideTable);
55990
+ if (isRelatedTargetOutsideTable) {
55991
+ api.clearFocusedCell();
55992
+ relatedTarget.focus();
55993
+ }
55994
+ },
55988
55995
  tableApi: tableRef?.current,
55989
55996
  value: currentValue,
55990
55997
  ref: handleRefs(editorType)
@@ -56856,6 +56863,9 @@ function withDataTableRenderer(Component4, editorType) {
56856
56863
  }
56857
56864
  );
56858
56865
  }
56866
+ function ensureIsHTMLElement(element) {
56867
+ return element instanceof HTMLElement ? element : null;
56868
+ }
56859
56869
  function getGroupNodes(params) {
56860
56870
  const currentParentId = params.node?.parent?.id ?? "root";
56861
56871
  let groupNodes = {
@@ -57095,7 +57105,7 @@ var MultiSelectEditor = React76__default.default.forwardRef(({ columnDefinition,
57095
57105
  coreReact.MultiSelect,
57096
57106
  {
57097
57107
  beforeShow,
57098
- afterHide: stopEditing,
57108
+ afterHide: () => stopEditing(),
57099
57109
  block: true,
57100
57110
  loading: isSearching || loading,
57101
57111
  getId: (option) => {
@@ -82145,6 +82155,7 @@ var Table = (props) => {
82145
82155
  return /* @__PURE__ */ React76__default.default.createElement(
82146
82156
  Spinner,
82147
82157
  {
82158
+ "data-qa": "data-table-table",
82148
82159
  loading: loadingStatus.loading,
82149
82160
  label: loadingStatus.message,
82150
82161
  style: {
@@ -198,7 +198,7 @@ interface DataTableCellEditorProps<TValue = any, TColumnDefinition extends Colum
198
198
  eventKey: string | null;
199
199
  ref?: ((instance: HTMLElement | null) => void) | React__default.MutableRefObject<HTMLElement | null> | null;
200
200
  setDataValue: (field: string, newValue: TValue) => void;
201
- stopEditing: () => void;
201
+ stopEditing: (relatedTarget?: HTMLElement | null) => void;
202
202
  }
203
203
 
204
204
  interface BooleanCellRendererParams {
@@ -198,7 +198,7 @@ interface DataTableCellEditorProps<TValue = any, TColumnDefinition extends Colum
198
198
  eventKey: string | null;
199
199
  ref?: ((instance: HTMLElement | null) => void) | React__default.MutableRefObject<HTMLElement | null> | null;
200
200
  setDataValue: (field: string, newValue: TValue) => void;
201
- stopEditing: () => void;
201
+ stopEditing: (relatedTarget?: HTMLElement | null) => void;
202
202
  }
203
203
 
204
204
  interface BooleanCellRendererParams {
@@ -8011,7 +8011,7 @@ var InternalBooleanCellEditor = React76.forwardRef(({ columnDefinition, setDataV
8011
8011
  return /* @__PURE__ */ React76.createElement(
8012
8012
  Select,
8013
8013
  {
8014
- afterHide: stopEditing,
8014
+ afterHide: () => stopEditing(),
8015
8015
  block: true,
8016
8016
  className: cx("input-cell"),
8017
8017
  label: value ? I18n.t("dataTable.cells.booleanCell.options.yes") : I18n.t("dataTable.cells.booleanCell.options.no"),
@@ -8229,8 +8229,8 @@ var Editor = React76.forwardRef(
8229
8229
  if (isEmptyValue(value) && !columnDefinition.editable) {
8230
8230
  return null;
8231
8231
  }
8232
- function onBlur() {
8233
- stopEditing();
8232
+ function onBlur(event) {
8233
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
8234
8234
  }
8235
8235
  const defaultValue = eventKey ? value : formatNumber(value, {
8236
8236
  ...columnDefinition.cellEditorParams?.formatConfig ?? columnDefinition.cellRendererParams?.formatConfig ?? {},
@@ -8668,8 +8668,8 @@ var Renderer4 = (props) => {
8668
8668
  var DateCellRenderer = withDataTableRenderer(Renderer4, "date");
8669
8669
  var Editor2 = React76.forwardRef(
8670
8670
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8671
- function afterHide() {
8672
- stopEditing();
8671
+ function afterHide(event) {
8672
+ stopEditing(ensureIsHTMLElement(event?.target));
8673
8673
  }
8674
8674
  function onChange(date) {
8675
8675
  if (date) {
@@ -8739,8 +8739,8 @@ var Renderer5 = (props) => {
8739
8739
  var DateTimeCellRenderer = withDataTableRenderer(Renderer5, "date");
8740
8740
  var Editor3 = React76.forwardRef(
8741
8741
  ({ columnDefinition, setDataValue, stopEditing, value }, ref) => {
8742
- function afterHide() {
8743
- stopEditing();
8742
+ function afterHide(event) {
8743
+ stopEditing(ensureIsHTMLElement(event?.target));
8744
8744
  }
8745
8745
  function onChange(date) {
8746
8746
  if (date) {
@@ -53012,8 +53012,8 @@ var InternalNumberCellEditor = React76.forwardRef(({ columnDefinition, stopEditi
53012
53012
  if (isEmptyValue(value) && !columnDefinition.editable) {
53013
53013
  return null;
53014
53014
  }
53015
- function onBlur() {
53016
- stopEditing();
53015
+ function onBlur(event) {
53016
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53017
53017
  }
53018
53018
  return /* @__PURE__ */ React76.createElement(
53019
53019
  Input,
@@ -53296,8 +53296,8 @@ var Renderer7 = ({
53296
53296
  var PercentCellRenderer = withDataTableRenderer(Renderer7, "input");
53297
53297
  var Editor4 = React76.forwardRef(({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53298
53298
  const I18n = useI18nContext();
53299
- function onBlur() {
53300
- stopEditing();
53299
+ function onBlur(event) {
53300
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53301
53301
  }
53302
53302
  if (isEmptyValue(value) && !columnDefinition.editable) {
53303
53303
  return null;
@@ -53688,8 +53688,8 @@ var Renderer11 = ({
53688
53688
  var TextCellRenderer = withDataTableRenderer(Renderer11, "input");
53689
53689
  var Editor7 = React76.forwardRef(
53690
53690
  ({ columnDefinition, eventKey, stopEditing, value }, ref) => {
53691
- function onBlur() {
53692
- stopEditing();
53691
+ function onBlur(event) {
53692
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53693
53693
  }
53694
53694
  const I18n = useI18nContext();
53695
53695
  const internalValue = eventKey ? value : columnDefinition.getStringFormattedValue?.(value) ?? value;
@@ -53759,8 +53759,8 @@ var Renderer12 = ({
53759
53759
  };
53760
53760
  var Editor8 = React76.forwardRef(
53761
53761
  ({ columnDefinition, stopEditing, value }, ref) => {
53762
- function onBlur() {
53763
- stopEditing();
53762
+ function onBlur(event) {
53763
+ stopEditing(ensureIsHTMLElement(event.relatedTarget));
53764
53764
  }
53765
53765
  const I18n = useI18nContext();
53766
53766
  const internalValue = columnDefinition.getStringFormattedValue?.(value) ?? value;
@@ -55970,7 +55970,14 @@ var DataTableCellEditor = React76.forwardRef(
55970
55970
  node.setDataValue(field, newValue);
55971
55971
  setCurrentValue(newValue);
55972
55972
  },
55973
- stopEditing,
55973
+ stopEditing: (relatedTarget) => {
55974
+ const isRelatedTargetOutsideTable = relatedTarget?.closest('[data-qa="data-table-table') === null;
55975
+ stopEditing(isRelatedTargetOutsideTable);
55976
+ if (isRelatedTargetOutsideTable) {
55977
+ api.clearFocusedCell();
55978
+ relatedTarget.focus();
55979
+ }
55980
+ },
55974
55981
  tableApi: tableRef?.current,
55975
55982
  value: currentValue,
55976
55983
  ref: handleRefs(editorType)
@@ -56842,6 +56849,9 @@ function withDataTableRenderer(Component4, editorType) {
56842
56849
  }
56843
56850
  );
56844
56851
  }
56852
+ function ensureIsHTMLElement(element) {
56853
+ return element instanceof HTMLElement ? element : null;
56854
+ }
56845
56855
  function getGroupNodes(params) {
56846
56856
  const currentParentId = params.node?.parent?.id ?? "root";
56847
56857
  let groupNodes = {
@@ -57081,7 +57091,7 @@ var MultiSelectEditor = React76.forwardRef(({ columnDefinition, value = [], setD
57081
57091
  MultiSelect,
57082
57092
  {
57083
57093
  beforeShow,
57084
- afterHide: stopEditing,
57094
+ afterHide: () => stopEditing(),
57085
57095
  block: true,
57086
57096
  loading: isSearching || loading,
57087
57097
  getId: (option) => {
@@ -82131,6 +82141,7 @@ var Table = (props) => {
82131
82141
  return /* @__PURE__ */ React76.createElement(
82132
82142
  Spinner,
82133
82143
  {
82144
+ "data-qa": "data-table-table",
82134
82145
  loading: loadingStatus.loading,
82135
82146
  label: loadingStatus.message,
82136
82147
  style: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@procore/data-table",
3
- "version": "14.12.1",
3
+ "version": "14.12.2",
4
4
  "description": "Complex data grid built on top of ag-grid, with DST components and styles.",
5
5
  "type": "module",
6
6
  "main": "dist/legacy/index.cjs",