@react-aria/interactions 3.27.1 → 3.28.0

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 (118) hide show
  1. package/dist/import.mjs +21 -15
  2. package/dist/main.js +45 -39
  3. package/dist/main.js.map +1 -1
  4. package/dist/module.js +21 -15
  5. package/dist/module.js.map +1 -1
  6. package/dist/types/src/index.d.ts +31 -0
  7. package/package.json +16 -15
  8. package/src/index.ts +30 -34
  9. package/dist/PressResponder.main.js +0 -61
  10. package/dist/PressResponder.main.js.map +0 -1
  11. package/dist/PressResponder.mjs +0 -51
  12. package/dist/PressResponder.module.js +0 -51
  13. package/dist/PressResponder.module.js.map +0 -1
  14. package/dist/Pressable.main.js +0 -69
  15. package/dist/Pressable.main.js.map +0 -1
  16. package/dist/Pressable.mjs +0 -60
  17. package/dist/Pressable.module.js +0 -60
  18. package/dist/Pressable.module.js.map +0 -1
  19. package/dist/context.main.js +0 -30
  20. package/dist/context.main.js.map +0 -1
  21. package/dist/context.mjs +0 -21
  22. package/dist/context.module.js +0 -21
  23. package/dist/context.module.js.map +0 -1
  24. package/dist/createEventHandler.main.js +0 -46
  25. package/dist/createEventHandler.main.js.map +0 -1
  26. package/dist/createEventHandler.mjs +0 -41
  27. package/dist/createEventHandler.module.js +0 -41
  28. package/dist/createEventHandler.module.js.map +0 -1
  29. package/dist/focusSafely.main.js +0 -41
  30. package/dist/focusSafely.main.js.map +0 -1
  31. package/dist/focusSafely.mjs +0 -36
  32. package/dist/focusSafely.module.js +0 -36
  33. package/dist/focusSafely.module.js.map +0 -1
  34. package/dist/textSelection.main.js +0 -77
  35. package/dist/textSelection.main.js.map +0 -1
  36. package/dist/textSelection.mjs +0 -71
  37. package/dist/textSelection.module.js +0 -71
  38. package/dist/textSelection.module.js.map +0 -1
  39. package/dist/types.d.ts +0 -255
  40. package/dist/types.d.ts.map +0 -1
  41. package/dist/useFocus.main.js +0 -66
  42. package/dist/useFocus.main.js.map +0 -1
  43. package/dist/useFocus.mjs +0 -61
  44. package/dist/useFocus.module.js +0 -61
  45. package/dist/useFocus.module.js.map +0 -1
  46. package/dist/useFocusVisible.main.js +0 -267
  47. package/dist/useFocusVisible.main.js.map +0 -1
  48. package/dist/useFocusVisible.mjs +0 -255
  49. package/dist/useFocusVisible.module.js +0 -255
  50. package/dist/useFocusVisible.module.js.map +0 -1
  51. package/dist/useFocusWithin.main.js +0 -107
  52. package/dist/useFocusWithin.main.js.map +0 -1
  53. package/dist/useFocusWithin.mjs +0 -102
  54. package/dist/useFocusWithin.module.js +0 -102
  55. package/dist/useFocusWithin.module.js.map +0 -1
  56. package/dist/useFocusable.main.js +0 -113
  57. package/dist/useFocusable.main.js.map +0 -1
  58. package/dist/useFocusable.mjs +0 -101
  59. package/dist/useFocusable.module.js +0 -101
  60. package/dist/useFocusable.module.js.map +0 -1
  61. package/dist/useHover.main.js +0 -159
  62. package/dist/useHover.main.js.map +0 -1
  63. package/dist/useHover.mjs +0 -154
  64. package/dist/useHover.module.js +0 -154
  65. package/dist/useHover.module.js.map +0 -1
  66. package/dist/useInteractOutside.main.js +0 -107
  67. package/dist/useInteractOutside.main.js.map +0 -1
  68. package/dist/useInteractOutside.mjs +0 -102
  69. package/dist/useInteractOutside.module.js +0 -102
  70. package/dist/useInteractOutside.module.js.map +0 -1
  71. package/dist/useKeyboard.main.js +0 -30
  72. package/dist/useKeyboard.main.js.map +0 -1
  73. package/dist/useKeyboard.mjs +0 -25
  74. package/dist/useKeyboard.module.js +0 -25
  75. package/dist/useKeyboard.module.js.map +0 -1
  76. package/dist/useLongPress.main.js +0 -86
  77. package/dist/useLongPress.main.js.map +0 -1
  78. package/dist/useLongPress.mjs +0 -81
  79. package/dist/useLongPress.module.js +0 -81
  80. package/dist/useLongPress.module.js.map +0 -1
  81. package/dist/useMove.main.js +0 -272
  82. package/dist/useMove.main.js.map +0 -1
  83. package/dist/useMove.mjs +0 -267
  84. package/dist/useMove.module.js +0 -267
  85. package/dist/useMove.module.js.map +0 -1
  86. package/dist/usePress.main.js +0 -763
  87. package/dist/usePress.main.js.map +0 -1
  88. package/dist/usePress.mjs +0 -758
  89. package/dist/usePress.module.js +0 -758
  90. package/dist/usePress.module.js.map +0 -1
  91. package/dist/useScrollWheel.main.js +0 -41
  92. package/dist/useScrollWheel.main.js.map +0 -1
  93. package/dist/useScrollWheel.mjs +0 -36
  94. package/dist/useScrollWheel.module.js +0 -36
  95. package/dist/useScrollWheel.module.js.map +0 -1
  96. package/dist/utils.main.js +0 -164
  97. package/dist/utils.main.js.map +0 -1
  98. package/dist/utils.mjs +0 -155
  99. package/dist/utils.module.js +0 -155
  100. package/dist/utils.module.js.map +0 -1
  101. package/src/PressResponder.tsx +0 -67
  102. package/src/Pressable.tsx +0 -97
  103. package/src/context.ts +0 -23
  104. package/src/createEventHandler.ts +0 -55
  105. package/src/focusSafely.ts +0 -49
  106. package/src/textSelection.ts +0 -101
  107. package/src/useFocus.ts +0 -88
  108. package/src/useFocusVisible.ts +0 -359
  109. package/src/useFocusWithin.ts +0 -134
  110. package/src/useFocusable.tsx +0 -191
  111. package/src/useHover.ts +0 -222
  112. package/src/useInteractOutside.ts +0 -143
  113. package/src/useKeyboard.ts +0 -36
  114. package/src/useLongPress.ts +0 -135
  115. package/src/useMove.ts +0 -259
  116. package/src/usePress.ts +0 -1095
  117. package/src/useScrollWheel.ts +0 -41
  118. package/src/utils.ts +0 -175
package/src/useMove.ts DELETED
@@ -1,259 +0,0 @@
1
- /*
2
- * Copyright 2020 Adobe. All rights reserved.
3
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
- * you may not use this file except in compliance with the License. You may obtain a copy
5
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
- *
7
- * Unless required by applicable law or agreed to in writing, software distributed under
8
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
- * OF ANY KIND, either express or implied. See the License for the specific language
10
- * governing permissions and limitations under the License.
11
- */
12
-
13
- import {disableTextSelection, restoreTextSelection} from './textSelection';
14
- import {DOMAttributes, MoveEvents, PointerType} from '@react-types/shared';
15
- import React, {useCallback, useMemo, useRef, useState} from 'react';
16
- import {useEffectEvent, useGlobalListeners, useLayoutEffect} from '@react-aria/utils';
17
-
18
- export interface MoveResult {
19
- /** Props to spread on the target element. */
20
- moveProps: DOMAttributes
21
- }
22
-
23
- interface EventBase {
24
- shiftKey: boolean,
25
- ctrlKey: boolean,
26
- metaKey: boolean,
27
- altKey: boolean
28
- }
29
-
30
- /**
31
- * Handles move interactions across mouse, touch, and keyboard, including dragging with
32
- * the mouse or touch, and using the arrow keys. Normalizes behavior across browsers and
33
- * platforms, and ignores emulated mouse events on touch devices.
34
- */
35
- export function useMove(props: MoveEvents): MoveResult {
36
- let {onMoveStart, onMove, onMoveEnd} = props;
37
-
38
- let state = useRef<{
39
- didMove: boolean,
40
- lastPosition: {pageX: number, pageY: number} | null,
41
- id: number | null
42
- }>({didMove: false, lastPosition: null, id: null});
43
-
44
- let {addGlobalListener, removeGlobalListener} = useGlobalListeners();
45
-
46
- let move = useCallback((originalEvent: EventBase, pointerType: PointerType, deltaX: number, deltaY: number) => {
47
- if (deltaX === 0 && deltaY === 0) {
48
- return;
49
- }
50
-
51
- if (!state.current.didMove) {
52
- state.current.didMove = true;
53
- onMoveStart?.({
54
- type: 'movestart',
55
- pointerType,
56
- shiftKey: originalEvent.shiftKey,
57
- metaKey: originalEvent.metaKey,
58
- ctrlKey: originalEvent.ctrlKey,
59
- altKey: originalEvent.altKey
60
- });
61
- }
62
- onMove?.({
63
- type: 'move',
64
- pointerType,
65
- deltaX: deltaX,
66
- deltaY: deltaY,
67
- shiftKey: originalEvent.shiftKey,
68
- metaKey: originalEvent.metaKey,
69
- ctrlKey: originalEvent.ctrlKey,
70
- altKey: originalEvent.altKey
71
- });
72
- }, [onMoveStart, onMove, state]);
73
- let moveEvent = useEffectEvent(move);
74
-
75
- let end = useCallback((originalEvent: EventBase, pointerType: PointerType) => {
76
- restoreTextSelection();
77
- if (state.current.didMove) {
78
- onMoveEnd?.({
79
- type: 'moveend',
80
- pointerType,
81
- shiftKey: originalEvent.shiftKey,
82
- metaKey: originalEvent.metaKey,
83
- ctrlKey: originalEvent.ctrlKey,
84
- altKey: originalEvent.altKey
85
- });
86
- }
87
- }, [onMoveEnd, state]);
88
- let endEvent = useEffectEvent(end);
89
-
90
- let [pointerDown, setPointerDown] = useState<'pointer' | 'mouse' | 'touch' | null>(null);
91
- useLayoutEffect(() => {
92
- if (pointerDown === 'pointer') {
93
- let onPointerMove = (e: PointerEvent) => {
94
- if (e.pointerId === state.current.id) {
95
- let pointerType = (e.pointerType || 'mouse') as PointerType;
96
-
97
- // Problems with PointerEvent#movementX/movementY:
98
- // 1. it is always 0 on macOS Safari.
99
- // 2. On Chrome Android, it's scaled by devicePixelRatio, but not on Chrome macOS
100
- moveEvent(e, pointerType, e.pageX - (state.current.lastPosition?.pageX ?? 0), e.pageY - (state.current.lastPosition?.pageY ?? 0));
101
- state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};
102
- }
103
- };
104
-
105
- let onPointerUp = (e: PointerEvent) => {
106
- if (e.pointerId === state.current.id) {
107
- let pointerType = (e.pointerType || 'mouse') as PointerType;
108
- endEvent(e, pointerType);
109
- state.current.id = null;
110
- removeGlobalListener(window, 'pointermove', onPointerMove, false);
111
- removeGlobalListener(window, 'pointerup', onPointerUp, false);
112
- removeGlobalListener(window, 'pointercancel', onPointerUp, false);
113
- setPointerDown(null);
114
- }
115
- };
116
- addGlobalListener(window, 'pointermove', onPointerMove, false);
117
- addGlobalListener(window, 'pointerup', onPointerUp, false);
118
- addGlobalListener(window, 'pointercancel', onPointerUp, false);
119
- return () => {
120
- removeGlobalListener(window, 'pointermove', onPointerMove, false);
121
- removeGlobalListener(window, 'pointerup', onPointerUp, false);
122
- removeGlobalListener(window, 'pointercancel', onPointerUp, false);
123
- };
124
- } else if (pointerDown === 'mouse' && process.env.NODE_ENV === 'test') {
125
- let onMouseMove = (e: MouseEvent) => {
126
- if (e.button === 0) {
127
- moveEvent(e, 'mouse', e.pageX - (state.current.lastPosition?.pageX ?? 0), e.pageY - (state.current.lastPosition?.pageY ?? 0));
128
- state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};
129
- }
130
- };
131
- let onMouseUp = (e: MouseEvent) => {
132
- if (e.button === 0) {
133
- endEvent(e, 'mouse');
134
- removeGlobalListener(window, 'mousemove', onMouseMove, false);
135
- removeGlobalListener(window, 'mouseup', onMouseUp, false);
136
- setPointerDown(null);
137
- }
138
- };
139
- addGlobalListener(window, 'mousemove', onMouseMove, false);
140
- addGlobalListener(window, 'mouseup', onMouseUp, false);
141
- return () => {
142
- removeGlobalListener(window, 'mousemove', onMouseMove, false);
143
- removeGlobalListener(window, 'mouseup', onMouseUp, false);
144
- };
145
- } else if (pointerDown === 'touch' && process.env.NODE_ENV === 'test') {
146
- let onTouchMove = (e: TouchEvent) => {
147
- let touch = [...e.changedTouches].findIndex(({identifier}) => identifier === state.current.id);
148
- if (touch >= 0) {
149
- let {pageX, pageY} = e.changedTouches[touch];
150
- moveEvent(e, 'touch', pageX - (state.current.lastPosition?.pageX ?? 0), pageY - (state.current.lastPosition?.pageY ?? 0));
151
- state.current.lastPosition = {pageX, pageY};
152
- }
153
- };
154
- let onTouchEnd = (e: TouchEvent) => {
155
- let touch = [...e.changedTouches].findIndex(({identifier}) => identifier === state.current.id);
156
- if (touch >= 0) {
157
- endEvent(e, 'touch');
158
- state.current.id = null;
159
- removeGlobalListener(window, 'touchmove', onTouchMove);
160
- removeGlobalListener(window, 'touchend', onTouchEnd);
161
- removeGlobalListener(window, 'touchcancel', onTouchEnd);
162
- setPointerDown(null);
163
- }
164
- };
165
- addGlobalListener(window, 'touchmove', onTouchMove, false);
166
- addGlobalListener(window, 'touchend', onTouchEnd, false);
167
- addGlobalListener(window, 'touchcancel', onTouchEnd, false);
168
- return () => {
169
- removeGlobalListener(window, 'touchmove', onTouchMove, false);
170
- removeGlobalListener(window, 'touchend', onTouchEnd, false);
171
- removeGlobalListener(window, 'touchcancel', onTouchEnd, false);
172
- };
173
- }
174
- }, [pointerDown, addGlobalListener, removeGlobalListener]);
175
-
176
- let moveProps = useMemo(() => {
177
- let moveProps: DOMAttributes = {};
178
-
179
- let start = () => {
180
- disableTextSelection();
181
- state.current.didMove = false;
182
- };
183
-
184
- if (typeof PointerEvent === 'undefined' && process.env.NODE_ENV === 'test') {
185
- moveProps.onMouseDown = (e: React.MouseEvent) => {
186
- if (e.button === 0) {
187
- start();
188
- e.stopPropagation();
189
- e.preventDefault();
190
- state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};
191
- setPointerDown('mouse');
192
- }
193
- };
194
- moveProps.onTouchStart = (e: React.TouchEvent) => {
195
- if (e.changedTouches.length === 0 || state.current.id != null) {
196
- return;
197
- }
198
-
199
- let {pageX, pageY, identifier} = e.changedTouches[0];
200
- start();
201
- e.stopPropagation();
202
- e.preventDefault();
203
- state.current.lastPosition = {pageX, pageY};
204
- state.current.id = identifier;
205
- setPointerDown('touch');
206
- };
207
- } else {
208
- moveProps.onPointerDown = (e: React.PointerEvent) => {
209
- if (e.button === 0 && state.current.id == null) {
210
- start();
211
- e.stopPropagation();
212
- e.preventDefault();
213
- state.current.lastPosition = {pageX: e.pageX, pageY: e.pageY};
214
- state.current.id = e.pointerId;
215
- setPointerDown('pointer');
216
- }
217
- };
218
- }
219
-
220
- let triggerKeyboardMove = (e: EventBase, deltaX: number, deltaY: number) => {
221
- start();
222
- move(e, 'keyboard', deltaX, deltaY);
223
- end(e, 'keyboard');
224
- };
225
-
226
- moveProps.onKeyDown = (e) => {
227
- switch (e.key) {
228
- case 'Left':
229
- case 'ArrowLeft':
230
- e.preventDefault();
231
- e.stopPropagation();
232
- triggerKeyboardMove(e, -1, 0);
233
- break;
234
- case 'Right':
235
- case 'ArrowRight':
236
- e.preventDefault();
237
- e.stopPropagation();
238
- triggerKeyboardMove(e, 1, 0);
239
- break;
240
- case 'Up':
241
- case 'ArrowUp':
242
- e.preventDefault();
243
- e.stopPropagation();
244
- triggerKeyboardMove(e, 0, -1);
245
- break;
246
- case 'Down':
247
- case 'ArrowDown':
248
- e.preventDefault();
249
- e.stopPropagation();
250
- triggerKeyboardMove(e, 0, 1);
251
- break;
252
- }
253
- };
254
-
255
- return moveProps;
256
- }, [state, move, end]);
257
-
258
- return {moveProps};
259
- }