@react-aria/interactions 3.9.0 → 3.11.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.
package/dist/module.js CHANGED
@@ -1,16 +1,7 @@
1
1
  import {mergeProps as $bx7SL$mergeProps, useSyncRef as $bx7SL$useSyncRef, useGlobalListeners as $bx7SL$useGlobalListeners, focusWithoutScrolling as $bx7SL$focusWithoutScrolling, isIOS as $bx7SL$isIOS, runAfterTransition as $bx7SL$runAfterTransition, useLayoutEffect as $bx7SL$useLayoutEffect, isMac as $bx7SL$isMac, useEvent as $bx7SL$useEvent, useDescription as $bx7SL$useDescription} from "@react-aria/utils";
2
2
  import $bx7SL$react, {useRef as $bx7SL$useRef, useContext as $bx7SL$useContext, useState as $bx7SL$useState, useMemo as $bx7SL$useMemo, useEffect as $bx7SL$useEffect, useCallback as $bx7SL$useCallback} from "react";
3
3
 
4
- function $parcel$export(e, n, v, s) {
5
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
6
- }
7
- var $3b117e43dc0ca95d$exports = {};
8
-
9
- $parcel$export($3b117e43dc0ca95d$exports, "Pressable", () => $3b117e43dc0ca95d$export$27c701ed9e449e99);
10
-
11
- var $f6c31cce2adf654f$exports = {};
12
4
 
13
- $parcel$export($f6c31cce2adf654f$exports, "usePress", () => $f6c31cce2adf654f$export$45712eceda6fad21);
14
5
 
15
6
  // Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element
16
7
  // rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually
@@ -24,7 +15,7 @@ function $14c0b72509d70225$export$16a4697467175487(target) {
24
15
  document.documentElement.style.webkitUserSelect = 'none';
25
16
  }
26
17
  $14c0b72509d70225$var$state = 'disabled';
27
- } else if (target) {
18
+ } else if (target instanceof HTMLElement || target instanceof SVGElement) {
28
19
  // If not iOS, store the target's original user-select and change to user-select: none
29
20
  // Ignore state since it doesn't apply for non iOS
30
21
  $14c0b72509d70225$var$modifiedElementMap.set(target, target.style.userSelect);
@@ -51,13 +42,15 @@ function $14c0b72509d70225$export$b0d6fa1ab32e3295(target) {
51
42
  }
52
43
  });
53
44
  }, 300);
54
- } else // If not iOS, restore the target's original user-select if any
45
+ } else if (target instanceof HTMLElement || target instanceof SVGElement) // If not iOS, restore the target's original user-select if any
55
46
  // Ignore state since it doesn't apply for non iOS
56
- if (target && $14c0b72509d70225$var$modifiedElementMap.has(target)) {
57
- let targetOldUserSelect = $14c0b72509d70225$var$modifiedElementMap.get(target);
58
- if (target.style.userSelect === 'none') target.style.userSelect = targetOldUserSelect;
59
- if (target.getAttribute('style') === '') target.removeAttribute('style');
60
- $14c0b72509d70225$var$modifiedElementMap.delete(target);
47
+ {
48
+ if (target && $14c0b72509d70225$var$modifiedElementMap.has(target)) {
49
+ let targetOldUserSelect = $14c0b72509d70225$var$modifiedElementMap.get(target);
50
+ if (target.style.userSelect === 'none') target.style.userSelect = targetOldUserSelect;
51
+ if (target.getAttribute('style') === '') target.removeAttribute('style');
52
+ $14c0b72509d70225$var$modifiedElementMap.delete(target);
53
+ }
61
54
  }
62
55
  }
63
56
 
@@ -65,7 +58,6 @@ function $14c0b72509d70225$export$b0d6fa1ab32e3295(target) {
65
58
 
66
59
 
67
60
 
68
-
69
61
  function $8a9cb279dc87e130$export$60278871457622de(event) {
70
62
  // JAWS/NVDA with Firefox.
71
63
  if (event.mozInputSource === 0 && event.isTrusted) return true;
@@ -169,6 +161,7 @@ const $ae1eeba8b9eafd08$export$5165eccb35aaadb5 = $bx7SL$react.createContext(nul
169
161
  $ae1eeba8b9eafd08$export$5165eccb35aaadb5.displayName = 'PressResponderContext';
170
162
 
171
163
 
164
+
172
165
  function $f6c31cce2adf654f$var$usePressResponderContext(props) {
173
166
  // Consume context from <PressResponder> and merge with props.
174
167
  let context = $bx7SL$useContext($ae1eeba8b9eafd08$export$5165eccb35aaadb5);
@@ -275,8 +268,8 @@ function $f6c31cce2adf654f$export$45712eceda6fad21(props) {
275
268
  };
276
269
  let pressProps = {
277
270
  onKeyDown (e) {
278
- if ($f6c31cce2adf654f$var$isValidKeyboardEvent(e.nativeEvent) && e.currentTarget.contains(e.target)) {
279
- if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(e.target)) e.preventDefault();
271
+ if ($f6c31cce2adf654f$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && e.currentTarget.contains(e.target)) {
272
+ if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(e.target, e.key)) e.preventDefault();
280
273
  e.stopPropagation();
281
274
  // If the event is repeating, it may have started on a different element
282
275
  // after which focus moved to the current element. Ignore these events and
@@ -289,10 +282,13 @@ function $f6c31cce2adf654f$export$45712eceda6fad21(props) {
289
282
  // instead of the same element where the key down event occurred.
290
283
  addGlobalListener(document, 'keyup', onKeyUp, false);
291
284
  }
292
- }
285
+ } else if (e.key === 'Enter' && $f6c31cce2adf654f$var$isHTMLAnchorLink(e.currentTarget)) // If the target is a link, we won't have handled this above because we want the default
286
+ // browser behavior to open the link when pressing Enter. But we still need to prevent
287
+ // default so that elements above do not also handle it (e.g. table row).
288
+ e.stopPropagation();
293
289
  },
294
290
  onKeyUp (e) {
295
- if ($f6c31cce2adf654f$var$isValidKeyboardEvent(e.nativeEvent) && !e.repeat && e.currentTarget.contains(e.target)) triggerPressUp($f6c31cce2adf654f$var$createEvent(state.target, e), 'keyboard');
291
+ if ($f6c31cce2adf654f$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && !e.repeat && e.currentTarget.contains(e.target)) triggerPressUp($f6c31cce2adf654f$var$createEvent(state.target, e), 'keyboard');
296
292
  },
297
293
  onClick (e) {
298
294
  if (e && !e.currentTarget.contains(e.target)) return;
@@ -314,8 +310,8 @@ function $f6c31cce2adf654f$export$45712eceda6fad21(props) {
314
310
  }
315
311
  };
316
312
  let onKeyUp = (e)=>{
317
- if (state.isPressed && $f6c31cce2adf654f$var$isValidKeyboardEvent(e)) {
318
- if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(e.target)) e.preventDefault();
313
+ if (state.isPressed && $f6c31cce2adf654f$var$isValidKeyboardEvent(e, state.target)) {
314
+ if ($f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(e.target, e.key)) e.preventDefault();
319
315
  e.stopPropagation();
320
316
  state.isPressed = false;
321
317
  let target = e.target;
@@ -323,7 +319,7 @@ function $f6c31cce2adf654f$export$45712eceda6fad21(props) {
323
319
  removeAllGlobalListeners();
324
320
  // If the target is a link, trigger the click method to open the URL,
325
321
  // but defer triggering pressEnd until onClick event handler.
326
- if (state.target.contains(target) && $f6c31cce2adf654f$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') state.target.click();
322
+ if (state.target instanceof HTMLElement && state.target.contains(target) && ($f6c31cce2adf654f$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link')) state.target.click();
327
323
  }
328
324
  };
329
325
  if (typeof PointerEvent !== 'undefined') {
@@ -555,14 +551,13 @@ function $f6c31cce2adf654f$export$45712eceda6fad21(props) {
555
551
  function $f6c31cce2adf654f$var$isHTMLAnchorLink(target) {
556
552
  return target.tagName === 'A' && target.hasAttribute('href');
557
553
  }
558
- function $f6c31cce2adf654f$var$isValidKeyboardEvent(event) {
559
- const { key: key , code: code , target: target } = event;
560
- const element = target;
561
- const { tagName: tagName , isContentEditable: isContentEditable } = element;
554
+ function $f6c31cce2adf654f$var$isValidKeyboardEvent(event, currentTarget) {
555
+ const { key: key , code: code } = event;
556
+ const element = currentTarget;
562
557
  const role = element.getAttribute('role');
563
558
  // Accessibility for keyboards. Space and Enter only.
564
559
  // "Spacebar" is for IE 11
565
- return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && tagName !== 'INPUT' && tagName !== 'TEXTAREA' && isContentEditable !== true && (!$f6c31cce2adf654f$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && // An element with role='link' should only trigger with Enter key
560
+ return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && !(element instanceof HTMLInputElement && !$f6c31cce2adf654f$var$isValidInputKey(element, key) || element instanceof HTMLTextAreaElement || element.isContentEditable) && (!$f6c31cce2adf654f$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && // An element with role='link' should only trigger with Enter key
566
561
  !(role === 'link' && key !== 'Enter');
567
562
  }
568
563
  function $f6c31cce2adf654f$var$getTouchFromEvent(event) {
@@ -611,10 +606,27 @@ function $f6c31cce2adf654f$var$isOverTarget(point, target) {
611
606
  }
612
607
  function $f6c31cce2adf654f$var$shouldPreventDefault(target) {
613
608
  // We cannot prevent default if the target is a draggable element.
614
- return !target.draggable;
609
+ return !(target instanceof HTMLElement) || !target.draggable;
610
+ }
611
+ function $f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(target, key) {
612
+ if (target instanceof HTMLInputElement) return !$f6c31cce2adf654f$var$isValidInputKey(target, key);
613
+ if (target instanceof HTMLButtonElement) return target.type !== 'submit';
614
+ return true;
615
615
  }
616
- function $f6c31cce2adf654f$var$shouldPreventDefaultKeyboard(target) {
617
- return !((target.tagName === 'INPUT' || target.tagName === 'BUTTON') && target.type === 'submit');
616
+ const $f6c31cce2adf654f$var$nonTextInputTypes = new Set([
617
+ 'checkbox',
618
+ 'radio',
619
+ 'range',
620
+ 'color',
621
+ 'file',
622
+ 'image',
623
+ 'button',
624
+ 'submit',
625
+ 'reset'
626
+ ]);
627
+ function $f6c31cce2adf654f$var$isValidInputKey(target, key) {
628
+ // Only space should toggle checkboxes and radios, not enter.
629
+ return target.type === 'checkbox' || target.type === 'radio' ? key === ' ' : $f6c31cce2adf654f$var$nonTextInputTypes.has(target.type);
618
630
  }
619
631
  function $f6c31cce2adf654f$var$isVirtualPointerEvent(event) {
620
632
  // If the pointer size is zero, then we assume it's from a screen reader.
@@ -644,9 +656,6 @@ const $3b117e43dc0ca95d$export$27c701ed9e449e99 = /*#__PURE__*/ $bx7SL$react.for
644
656
  });
645
657
 
646
658
 
647
- var $f1ab8c75478c6f73$exports = {};
648
-
649
- $parcel$export($f1ab8c75478c6f73$exports, "PressResponder", () => $f1ab8c75478c6f73$export$3351871ee4b288b8);
650
659
 
651
660
 
652
661
 
@@ -672,9 +681,6 @@ const $f1ab8c75478c6f73$export$3351871ee4b288b8 = /*#__PURE__*/ $bx7SL$react.for
672
681
  });
673
682
 
674
683
 
675
- var $a1ea59d68270f0dd$exports = {};
676
-
677
- $parcel$export($a1ea59d68270f0dd$exports, "useFocus", () => $a1ea59d68270f0dd$export$f8168d8dd8fd66e6);
678
684
 
679
685
 
680
686
  function $a1ea59d68270f0dd$export$f8168d8dd8fd66e6(props) {
@@ -710,14 +716,6 @@ function $a1ea59d68270f0dd$export$f8168d8dd8fd66e6(props) {
710
716
  }
711
717
 
712
718
 
713
- var $507fabe10e71c6fb$exports = {};
714
-
715
- $parcel$export($507fabe10e71c6fb$exports, "isFocusVisible", () => $507fabe10e71c6fb$export$b9b3dfddab17db27);
716
- $parcel$export($507fabe10e71c6fb$exports, "getInteractionModality", () => $507fabe10e71c6fb$export$630ff653c5ada6a9);
717
- $parcel$export($507fabe10e71c6fb$exports, "setInteractionModality", () => $507fabe10e71c6fb$export$8397ddfc504fdb9a);
718
- $parcel$export($507fabe10e71c6fb$exports, "useInteractionModality", () => $507fabe10e71c6fb$export$98e20ec92f614cfe);
719
- $parcel$export($507fabe10e71c6fb$exports, "useFocusVisible", () => $507fabe10e71c6fb$export$ffd9e5021c1fb2d6);
720
- $parcel$export($507fabe10e71c6fb$exports, "useFocusVisibleListener", () => $507fabe10e71c6fb$export$ec71b4b83ac08ec3);
721
719
 
722
720
 
723
721
 
@@ -875,9 +873,6 @@ function $507fabe10e71c6fb$export$ec71b4b83ac08ec3(fn, deps, opts) {
875
873
  }
876
874
 
877
875
 
878
- var $9ab94262bd0047c7$exports = {};
879
-
880
- $parcel$export($9ab94262bd0047c7$exports, "useFocusWithin", () => $9ab94262bd0047c7$export$420e68273165f4ec);
881
876
 
882
877
 
883
878
  function $9ab94262bd0047c7$export$420e68273165f4ec(props) {
@@ -927,9 +922,6 @@ function $9ab94262bd0047c7$export$420e68273165f4ec(props) {
927
922
  }
928
923
 
929
924
 
930
- var $6179b936705e76d3$exports = {};
931
-
932
- $parcel$export($6179b936705e76d3$exports, "useHover", () => $6179b936705e76d3$export$ae780daf29e6d456);
933
925
 
934
926
  // iOS fires onPointerEnter twice: once with pointerType="touch" and again with pointerType="mouse".
935
927
  // We want to ignore these emulated events so they do not trigger hover behavior.
@@ -1049,9 +1041,6 @@ function $6179b936705e76d3$export$ae780daf29e6d456(props) {
1049
1041
  }
1050
1042
 
1051
1043
 
1052
- var $e0b6e0b68ec7f50f$exports = {};
1053
-
1054
- $parcel$export($e0b6e0b68ec7f50f$exports, "useInteractOutside", () => $e0b6e0b68ec7f50f$export$872b660ac5a1ff98);
1055
1044
 
1056
1045
  function $e0b6e0b68ec7f50f$export$872b660ac5a1ff98(props) {
1057
1046
  let { ref: ref , onInteractOutside: onInteractOutside , isDisabled: isDisabled , onInteractOutsideStart: onInteractOutsideStart } = props;
@@ -1130,9 +1119,6 @@ function $e0b6e0b68ec7f50f$var$isValidEvent(event, ref) {
1130
1119
  }
1131
1120
 
1132
1121
 
1133
- var $46d819fcbaf35654$exports = {};
1134
-
1135
- $parcel$export($46d819fcbaf35654$exports, "useKeyboard", () => $46d819fcbaf35654$export$8f71654801c2f7cd);
1136
1122
  function $93925083ecbb358c$export$48d1ea6320830260(handler) {
1137
1123
  if (!handler) return;
1138
1124
  let shouldStopPropagation = true;
@@ -1169,9 +1155,6 @@ function $46d819fcbaf35654$export$8f71654801c2f7cd(props) {
1169
1155
  }
1170
1156
 
1171
1157
 
1172
- var $e8a7022cf87cba2a$exports = {};
1173
-
1174
- $parcel$export($e8a7022cf87cba2a$exports, "useMove", () => $e8a7022cf87cba2a$export$36da96379f79f245);
1175
1158
 
1176
1159
 
1177
1160
 
@@ -1386,9 +1369,6 @@ function $e8a7022cf87cba2a$export$36da96379f79f245(props) {
1386
1369
 
1387
1370
 
1388
1371
 
1389
- var $7d0a636d7a4dcefd$exports = {};
1390
-
1391
- $parcel$export($7d0a636d7a4dcefd$exports, "useScrollWheel", () => $7d0a636d7a4dcefd$export$2123ff2b87c81ca);
1392
1372
 
1393
1373
 
1394
1374
  function $7d0a636d7a4dcefd$export$2123ff2b87c81ca(props, ref) {
@@ -1410,9 +1390,6 @@ function $7d0a636d7a4dcefd$export$2123ff2b87c81ca(props, ref) {
1410
1390
  }
1411
1391
 
1412
1392
 
1413
- var $8a26561d2877236e$exports = {};
1414
-
1415
- $parcel$export($8a26561d2877236e$exports, "useLongPress", () => $8a26561d2877236e$export$c24ed0104d07eab9);
1416
1393
 
1417
1394
 
1418
1395