@react-aria/table 3.10.1-nightly.4049 → 3.10.1-nightly.4053

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/dist/import.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {useGridRowGroup as $lJcFS$useGridRowGroup, useGrid as $lJcFS$useGrid, GridKeyboardDelegate as $lJcFS$GridKeyboardDelegate, useGridCell as $lJcFS$useGridCell, useGridRow as $lJcFS$useGridRow, useGridSelectionCheckbox as $lJcFS$useGridSelectionCheckbox} from "@react-aria/grid";
2
2
  import {announce as $lJcFS$announce} from "@react-aria/live-announcer";
3
- import {useId as $lJcFS$useId, useDescription as $lJcFS$useDescription, useUpdateEffect as $lJcFS$useUpdateEffect, mergeProps as $lJcFS$mergeProps, isAndroid as $lJcFS$isAndroid, focusWithoutScrolling as $lJcFS$focusWithoutScrolling} from "@react-aria/utils";
4
- import {useMemo as $lJcFS$useMemo, useRef as $lJcFS$useRef, useCallback as $lJcFS$useCallback} from "react";
3
+ import {useId as $lJcFS$useId, useDescription as $lJcFS$useDescription, useUpdateEffect as $lJcFS$useUpdateEffect, mergeProps as $lJcFS$mergeProps, isAndroid as $lJcFS$isAndroid, useEffectEvent as $lJcFS$useEffectEvent} from "@react-aria/utils";
4
+ import {useMemo as $lJcFS$useMemo, useRef as $lJcFS$useRef, useCallback as $lJcFS$useCallback, useEffect as $lJcFS$useEffect} from "react";
5
5
  import {useCollator as $lJcFS$useCollator, useLocale as $lJcFS$useLocale, useLocalizedStringFormatter as $lJcFS$useLocalizedStringFormatter} from "@react-aria/i18n";
6
6
  import {getFirstItem as $lJcFS$getFirstItem, getChildNodes as $lJcFS$getChildNodes, getNthItem as $lJcFS$getNthItem, getLastItem as $lJcFS$getLastItem} from "@react-stately/collections";
7
7
  import {useFocusable as $lJcFS$useFocusable, focusSafely as $lJcFS$focusSafely} from "@react-aria/focus";
@@ -1016,64 +1016,49 @@ function $e91ef4e5004e3774$export$52994e973806c219(props, state, ref) {
1016
1016
  let isResizing = state.resizingColumn === item.key;
1017
1017
  let isResizingRef = (0, $lJcFS$useRef)(isResizing);
1018
1018
  let lastSize = (0, $lJcFS$useRef)(null);
1019
+ let wasFocusedOnResizeStart = (0, $lJcFS$useRef)(false);
1019
1020
  let editModeEnabled = state.tableState.isKeyboardNavigationDisabled;
1020
1021
  let { direction: direction } = (0, $lJcFS$useLocale)();
1021
1022
  let { keyboardProps: keyboardProps } = (0, $lJcFS$useKeyboard)({
1022
1023
  onKeyDown: (e)=>{
1023
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1024
1024
  if (editModeEnabled) {
1025
1025
  if (e.key === "Escape" || e.key === "Enter" || e.key === " " || e.key === "Tab") {
1026
1026
  e.preventDefault();
1027
- if (resizeOnFocus) // switch focus back to the column header on anything that ends edit mode
1028
- (0, $lJcFS$focusSafely)(triggerRef.current);
1029
- else {
1030
- endResize(item);
1031
- state.tableState.setKeyboardNavigationDisabled(false);
1032
- }
1027
+ endResize(item);
1033
1028
  }
1034
- } else if (!resizeOnFocus) {
1029
+ } else {
1035
1030
  // Continue propagation on keydown events so they still bubbles to useSelectableCollection and are handled there
1036
1031
  e.continuePropagation();
1037
- if (e.key === "Enter") {
1038
- startResize(item);
1039
- state.tableState.setKeyboardNavigationDisabled(true);
1040
- }
1032
+ if (e.key === "Enter") startResize(item);
1041
1033
  }
1042
1034
  }
1043
1035
  });
1044
- let startResize = (0, $lJcFS$useCallback)((item)=>{
1036
+ let startResize = (0, $lJcFS$useEffectEvent)((item)=>{
1045
1037
  if (!isResizingRef.current) {
1046
1038
  lastSize.current = state.updateResizedColumns(item.key, state.getColumnWidth(item.key));
1047
1039
  state.startResize(item.key);
1040
+ state.tableState.setKeyboardNavigationDisabled(true);
1048
1041
  onResizeStart === null || onResizeStart === void 0 ? void 0 : onResizeStart(lastSize.current);
1049
1042
  }
1050
1043
  isResizingRef.current = true;
1051
- }, [
1052
- isResizingRef,
1053
- onResizeStart,
1054
- state
1055
- ]);
1056
- let resize = (0, $lJcFS$useCallback)((item, newWidth)=>{
1044
+ });
1045
+ let resize = (0, $lJcFS$useEffectEvent)((item, newWidth)=>{
1057
1046
  let sizes = state.updateResizedColumns(item.key, newWidth);
1058
1047
  onResize === null || onResize === void 0 ? void 0 : onResize(sizes);
1059
1048
  lastSize.current = sizes;
1060
- }, [
1061
- onResize,
1062
- state
1063
- ]);
1064
- let endResize = (0, $lJcFS$useCallback)((item)=>{
1049
+ });
1050
+ let endResize = (0, $lJcFS$useEffectEvent)((item)=>{
1065
1051
  if (isResizingRef.current) {
1066
1052
  if (lastSize.current == null) lastSize.current = state.updateResizedColumns(item.key, state.getColumnWidth(item.key));
1067
1053
  state.endResize();
1054
+ state.tableState.setKeyboardNavigationDisabled(false);
1068
1055
  onResizeEnd === null || onResizeEnd === void 0 ? void 0 : onResizeEnd(lastSize.current);
1056
+ isResizingRef.current = false;
1057
+ if ((triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current) && !wasFocusedOnResizeStart.current) // switch focus back to the column header unless the resizer was already focused when resizing started.
1058
+ (0, $lJcFS$focusSafely)(triggerRef.current);
1069
1059
  }
1070
- isResizingRef.current = false;
1071
1060
  lastSize.current = null;
1072
- }, [
1073
- isResizingRef,
1074
- onResizeEnd,
1075
- state
1076
- ]);
1061
+ });
1077
1062
  const columnResizeWidthRef = (0, $lJcFS$useRef)(0);
1078
1063
  const { moveProps: moveProps } = (0, $lJcFS$useMove)({
1079
1064
  onMoveStart () {
@@ -1094,10 +1079,9 @@ function $e91ef4e5004e3774$export$52994e973806c219(props, state, ref) {
1094
1079
  }
1095
1080
  },
1096
1081
  onMoveEnd (e) {
1097
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1098
1082
  let { pointerType: pointerType } = e;
1099
1083
  columnResizeWidthRef.current = 0;
1100
- if (pointerType === "mouse" || pointerType === "touch" && !resizeOnFocus) endResize(item);
1084
+ if (pointerType === "mouse" || pointerType === "touch" && wasFocusedOnResizeStart.current) endResize(item);
1101
1085
  }
1102
1086
  });
1103
1087
  let onKeyDown = (0, $lJcFS$useCallback)((e)=>{
@@ -1128,10 +1112,29 @@ function $e91ef4e5004e3774$export$52994e973806c219(props, state, ref) {
1128
1112
  ...descriptionProps
1129
1113
  };
1130
1114
  const focusInput = (0, $lJcFS$useCallback)(()=>{
1131
- if (ref.current) (0, $lJcFS$focusWithoutScrolling)(ref.current);
1115
+ if (ref.current) (0, $lJcFS$focusSafely)(ref.current);
1132
1116
  }, [
1133
1117
  ref
1134
1118
  ]);
1119
+ let resizingColumn = state.resizingColumn;
1120
+ let prevResizingColumn = (0, $lJcFS$useRef)(null);
1121
+ (0, $lJcFS$useEffect)(()=>{
1122
+ if (prevResizingColumn.current !== resizingColumn && resizingColumn != null && resizingColumn === item.key) {
1123
+ wasFocusedOnResizeStart.current = document.activeElement === ref.current;
1124
+ startResize(item);
1125
+ focusInput();
1126
+ // VoiceOver on iOS has problems focusing the input from a menu.
1127
+ let timeout = setTimeout(focusInput, 400);
1128
+ return ()=>clearTimeout(timeout);
1129
+ }
1130
+ prevResizingColumn.current = resizingColumn;
1131
+ }, [
1132
+ resizingColumn,
1133
+ item,
1134
+ focusInput,
1135
+ ref,
1136
+ startResize
1137
+ ]);
1135
1138
  let onChange = (e)=>{
1136
1139
  let currentWidth = state.getColumnWidth(item.key);
1137
1140
  let nextValue = parseFloat(e.target.value);
@@ -1143,9 +1146,7 @@ function $e91ef4e5004e3774$export$52994e973806c219(props, state, ref) {
1143
1146
  onPressStart: (e)=>{
1144
1147
  if (e.ctrlKey || e.altKey || e.metaKey || e.shiftKey || e.pointerType === "keyboard") return;
1145
1148
  if (e.pointerType === "virtual" && state.resizingColumn != null) {
1146
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1147
1149
  endResize(item);
1148
- if (resizeOnFocus) (0, $lJcFS$focusSafely)(triggerRef.current);
1149
1150
  return;
1150
1151
  }
1151
1152
  // Sometimes onPress won't trigger for quick taps on mobile so we want to focus the input so blurring away
@@ -1156,8 +1157,7 @@ function $e91ef4e5004e3774$export$52994e973806c219(props, state, ref) {
1156
1157
  if (e.pointerType !== "virtual") startResize(item);
1157
1158
  },
1158
1159
  onPress: (e)=>{
1159
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1160
- if ((e.pointerType === "touch" && !resizeOnFocus || e.pointerType === "mouse") && state.resizingColumn != null) endResize(item);
1160
+ if ((e.pointerType === "touch" && wasFocusedOnResizeStart.current || e.pointerType === "mouse") && state.resizingColumn != null) endResize(item);
1161
1161
  }
1162
1162
  });
1163
1163
  let { visuallyHiddenProps: visuallyHiddenProps } = (0, $lJcFS$useVisuallyHidden)();
@@ -1165,21 +1165,15 @@ function $e91ef4e5004e3774$export$52994e973806c219(props, state, ref) {
1165
1165
  resizerProps: (0, $lJcFS$mergeProps)(keyboardProps, {
1166
1166
  ...moveProps,
1167
1167
  onKeyDown: onKeyDown
1168
- }, pressProps),
1168
+ }, pressProps, {
1169
+ style: {
1170
+ touchAction: "none"
1171
+ }
1172
+ }),
1169
1173
  inputProps: (0, $lJcFS$mergeProps)(visuallyHiddenProps, {
1170
1174
  id: id,
1171
- onFocus: ()=>{
1172
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1173
- if (resizeOnFocus) {
1174
- // useMove calls onMoveStart for every keypress, but we want resize start to only be called when we start resize mode
1175
- // call instead during focus and blur
1176
- startResize(item);
1177
- state.tableState.setKeyboardNavigationDisabled(true);
1178
- }
1179
- },
1180
1175
  onBlur: ()=>{
1181
1176
  endResize(item);
1182
- state.tableState.setKeyboardNavigationDisabled(false);
1183
1177
  },
1184
1178
  onChange: onChange,
1185
1179
  disabled: isDisabled
package/dist/main.js CHANGED
@@ -1029,64 +1029,49 @@ function $16d645f9e2153641$export$52994e973806c219(props, state, ref) {
1029
1029
  let isResizing = state.resizingColumn === item.key;
1030
1030
  let isResizingRef = (0, $kJQf8$react.useRef)(isResizing);
1031
1031
  let lastSize = (0, $kJQf8$react.useRef)(null);
1032
+ let wasFocusedOnResizeStart = (0, $kJQf8$react.useRef)(false);
1032
1033
  let editModeEnabled = state.tableState.isKeyboardNavigationDisabled;
1033
1034
  let { direction: direction } = (0, $kJQf8$reactariai18n.useLocale)();
1034
1035
  let { keyboardProps: keyboardProps } = (0, $kJQf8$reactariainteractions.useKeyboard)({
1035
1036
  onKeyDown: (e)=>{
1036
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1037
1037
  if (editModeEnabled) {
1038
1038
  if (e.key === "Escape" || e.key === "Enter" || e.key === " " || e.key === "Tab") {
1039
1039
  e.preventDefault();
1040
- if (resizeOnFocus) // switch focus back to the column header on anything that ends edit mode
1041
- (0, $kJQf8$reactariafocus.focusSafely)(triggerRef.current);
1042
- else {
1043
- endResize(item);
1044
- state.tableState.setKeyboardNavigationDisabled(false);
1045
- }
1040
+ endResize(item);
1046
1041
  }
1047
- } else if (!resizeOnFocus) {
1042
+ } else {
1048
1043
  // Continue propagation on keydown events so they still bubbles to useSelectableCollection and are handled there
1049
1044
  e.continuePropagation();
1050
- if (e.key === "Enter") {
1051
- startResize(item);
1052
- state.tableState.setKeyboardNavigationDisabled(true);
1053
- }
1045
+ if (e.key === "Enter") startResize(item);
1054
1046
  }
1055
1047
  }
1056
1048
  });
1057
- let startResize = (0, $kJQf8$react.useCallback)((item)=>{
1049
+ let startResize = (0, $kJQf8$reactariautils.useEffectEvent)((item)=>{
1058
1050
  if (!isResizingRef.current) {
1059
1051
  lastSize.current = state.updateResizedColumns(item.key, state.getColumnWidth(item.key));
1060
1052
  state.startResize(item.key);
1053
+ state.tableState.setKeyboardNavigationDisabled(true);
1061
1054
  onResizeStart === null || onResizeStart === void 0 ? void 0 : onResizeStart(lastSize.current);
1062
1055
  }
1063
1056
  isResizingRef.current = true;
1064
- }, [
1065
- isResizingRef,
1066
- onResizeStart,
1067
- state
1068
- ]);
1069
- let resize = (0, $kJQf8$react.useCallback)((item, newWidth)=>{
1057
+ });
1058
+ let resize = (0, $kJQf8$reactariautils.useEffectEvent)((item, newWidth)=>{
1070
1059
  let sizes = state.updateResizedColumns(item.key, newWidth);
1071
1060
  onResize === null || onResize === void 0 ? void 0 : onResize(sizes);
1072
1061
  lastSize.current = sizes;
1073
- }, [
1074
- onResize,
1075
- state
1076
- ]);
1077
- let endResize = (0, $kJQf8$react.useCallback)((item)=>{
1062
+ });
1063
+ let endResize = (0, $kJQf8$reactariautils.useEffectEvent)((item)=>{
1078
1064
  if (isResizingRef.current) {
1079
1065
  if (lastSize.current == null) lastSize.current = state.updateResizedColumns(item.key, state.getColumnWidth(item.key));
1080
1066
  state.endResize();
1067
+ state.tableState.setKeyboardNavigationDisabled(false);
1081
1068
  onResizeEnd === null || onResizeEnd === void 0 ? void 0 : onResizeEnd(lastSize.current);
1069
+ isResizingRef.current = false;
1070
+ if ((triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current) && !wasFocusedOnResizeStart.current) // switch focus back to the column header unless the resizer was already focused when resizing started.
1071
+ (0, $kJQf8$reactariafocus.focusSafely)(triggerRef.current);
1082
1072
  }
1083
- isResizingRef.current = false;
1084
1073
  lastSize.current = null;
1085
- }, [
1086
- isResizingRef,
1087
- onResizeEnd,
1088
- state
1089
- ]);
1074
+ });
1090
1075
  const columnResizeWidthRef = (0, $kJQf8$react.useRef)(0);
1091
1076
  const { moveProps: moveProps } = (0, $kJQf8$reactariainteractions.useMove)({
1092
1077
  onMoveStart () {
@@ -1107,10 +1092,9 @@ function $16d645f9e2153641$export$52994e973806c219(props, state, ref) {
1107
1092
  }
1108
1093
  },
1109
1094
  onMoveEnd (e) {
1110
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1111
1095
  let { pointerType: pointerType } = e;
1112
1096
  columnResizeWidthRef.current = 0;
1113
- if (pointerType === "mouse" || pointerType === "touch" && !resizeOnFocus) endResize(item);
1097
+ if (pointerType === "mouse" || pointerType === "touch" && wasFocusedOnResizeStart.current) endResize(item);
1114
1098
  }
1115
1099
  });
1116
1100
  let onKeyDown = (0, $kJQf8$react.useCallback)((e)=>{
@@ -1141,10 +1125,29 @@ function $16d645f9e2153641$export$52994e973806c219(props, state, ref) {
1141
1125
  ...descriptionProps
1142
1126
  };
1143
1127
  const focusInput = (0, $kJQf8$react.useCallback)(()=>{
1144
- if (ref.current) (0, $kJQf8$reactariautils.focusWithoutScrolling)(ref.current);
1128
+ if (ref.current) (0, $kJQf8$reactariafocus.focusSafely)(ref.current);
1145
1129
  }, [
1146
1130
  ref
1147
1131
  ]);
1132
+ let resizingColumn = state.resizingColumn;
1133
+ let prevResizingColumn = (0, $kJQf8$react.useRef)(null);
1134
+ (0, $kJQf8$react.useEffect)(()=>{
1135
+ if (prevResizingColumn.current !== resizingColumn && resizingColumn != null && resizingColumn === item.key) {
1136
+ wasFocusedOnResizeStart.current = document.activeElement === ref.current;
1137
+ startResize(item);
1138
+ focusInput();
1139
+ // VoiceOver on iOS has problems focusing the input from a menu.
1140
+ let timeout = setTimeout(focusInput, 400);
1141
+ return ()=>clearTimeout(timeout);
1142
+ }
1143
+ prevResizingColumn.current = resizingColumn;
1144
+ }, [
1145
+ resizingColumn,
1146
+ item,
1147
+ focusInput,
1148
+ ref,
1149
+ startResize
1150
+ ]);
1148
1151
  let onChange = (e)=>{
1149
1152
  let currentWidth = state.getColumnWidth(item.key);
1150
1153
  let nextValue = parseFloat(e.target.value);
@@ -1156,9 +1159,7 @@ function $16d645f9e2153641$export$52994e973806c219(props, state, ref) {
1156
1159
  onPressStart: (e)=>{
1157
1160
  if (e.ctrlKey || e.altKey || e.metaKey || e.shiftKey || e.pointerType === "keyboard") return;
1158
1161
  if (e.pointerType === "virtual" && state.resizingColumn != null) {
1159
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1160
1162
  endResize(item);
1161
- if (resizeOnFocus) (0, $kJQf8$reactariafocus.focusSafely)(triggerRef.current);
1162
1163
  return;
1163
1164
  }
1164
1165
  // Sometimes onPress won't trigger for quick taps on mobile so we want to focus the input so blurring away
@@ -1169,8 +1170,7 @@ function $16d645f9e2153641$export$52994e973806c219(props, state, ref) {
1169
1170
  if (e.pointerType !== "virtual") startResize(item);
1170
1171
  },
1171
1172
  onPress: (e)=>{
1172
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1173
- if ((e.pointerType === "touch" && !resizeOnFocus || e.pointerType === "mouse") && state.resizingColumn != null) endResize(item);
1173
+ if ((e.pointerType === "touch" && wasFocusedOnResizeStart.current || e.pointerType === "mouse") && state.resizingColumn != null) endResize(item);
1174
1174
  }
1175
1175
  });
1176
1176
  let { visuallyHiddenProps: visuallyHiddenProps } = (0, $kJQf8$reactariavisuallyhidden.useVisuallyHidden)();
@@ -1178,21 +1178,15 @@ function $16d645f9e2153641$export$52994e973806c219(props, state, ref) {
1178
1178
  resizerProps: (0, $kJQf8$reactariautils.mergeProps)(keyboardProps, {
1179
1179
  ...moveProps,
1180
1180
  onKeyDown: onKeyDown
1181
- }, pressProps),
1181
+ }, pressProps, {
1182
+ style: {
1183
+ touchAction: "none"
1184
+ }
1185
+ }),
1182
1186
  inputProps: (0, $kJQf8$reactariautils.mergeProps)(visuallyHiddenProps, {
1183
1187
  id: id,
1184
- onFocus: ()=>{
1185
- let resizeOnFocus = !!(triggerRef === null || triggerRef === void 0 ? void 0 : triggerRef.current);
1186
- if (resizeOnFocus) {
1187
- // useMove calls onMoveStart for every keypress, but we want resize start to only be called when we start resize mode
1188
- // call instead during focus and blur
1189
- startResize(item);
1190
- state.tableState.setKeyboardNavigationDisabled(true);
1191
- }
1192
- },
1193
1188
  onBlur: ()=>{
1194
1189
  endResize(item);
1195
- state.tableState.setKeyboardNavigationDisabled(false);
1196
1190
  },
1197
1191
  onChange: onChange,
1198
1192
  disabled: isDisabled