@react-aria/interactions 3.0.0-nightly.1263 → 3.0.0-nightly.1281

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/main.js CHANGED
@@ -19,7 +19,8 @@ var {
19
19
  useGlobalListeners,
20
20
  useSyncRef,
21
21
  isMac,
22
- useEvent
22
+ useEvent,
23
+ useDescription
23
24
  } = require("@react-aria/utils");
24
25
 
25
26
  var _babelRuntimeHelpersObjectWithoutPropertiesLoose = $parcel$interopDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
@@ -358,11 +359,12 @@ function usePress(props) {
358
359
  e.preventDefault();
359
360
  e.stopPropagation();
360
361
  state.isPressed = false;
361
- triggerPressEnd($ed8d760564e19d8c7d03a6a4$var$createEvent(state.target, e), 'keyboard', e.target === state.target);
362
+ let target = e.target;
363
+ triggerPressEnd($ed8d760564e19d8c7d03a6a4$var$createEvent(state.target, e), 'keyboard', state.target.contains(target));
362
364
  removeAllGlobalListeners(); // If the target is a link, trigger the click method to open the URL,
363
365
  // but defer triggering pressEnd until onClick event handler.
364
366
 
365
- if (e.target === state.target && $ed8d760564e19d8c7d03a6a4$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') {
367
+ if (state.target.contains(target) && $ed8d760564e19d8c7d03a6a4$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') {
366
368
  state.target.click();
367
369
  }
368
370
  }
@@ -721,6 +723,7 @@ function $ed8d760564e19d8c7d03a6a4$var$isHTMLAnchorLink(target) {
721
723
  function $ed8d760564e19d8c7d03a6a4$var$isValidKeyboardEvent(event) {
722
724
  const {
723
725
  key,
726
+ code,
724
727
  target
725
728
  } = event;
726
729
  const element = target;
@@ -731,7 +734,7 @@ function $ed8d760564e19d8c7d03a6a4$var$isValidKeyboardEvent(event) {
731
734
  const role = element.getAttribute('role'); // Accessibility for keyboards. Space and Enter only.
732
735
  // "Spacebar" is for IE 11
733
736
 
734
- return (key === 'Enter' || key === ' ' || key === 'Spacebar') && tagName !== 'INPUT' && tagName !== 'TEXTAREA' && isContentEditable !== true && ( // A link with a valid href should be handled natively,
737
+ return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && tagName !== 'INPUT' && tagName !== 'TEXTAREA' && isContentEditable !== true && ( // A link with a valid href should be handled natively,
735
738
  // unless it also has role='button' and was triggered using Space.
736
739
  !$ed8d760564e19d8c7d03a6a4$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && // An element with role='link' should only trigger with Enter key
737
740
  !(role === 'link' && key !== 'Enter');
@@ -949,7 +952,7 @@ function $b83372066b2b4e1d9257843b2455c$var$triggerChangeHandlers(modality, e) {
949
952
 
950
953
  function $b83372066b2b4e1d9257843b2455c$var$isValidKey(e) {
951
954
  // Control and Shift keys trigger when navigating back to the tab with keyboard.
952
- return !(e.metaKey || !isMac() && e.altKey || e.ctrlKey || e.type === 'keyup' && (e.key === 'Control' || e.key === 'Shift'));
955
+ return !(e.metaKey || !isMac() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');
953
956
  }
954
957
 
955
958
  function $b83372066b2b4e1d9257843b2455c$var$handleKeyboardEvent(e) {
@@ -1820,4 +1823,89 @@ function useScrollWheel(props, ref) {
1820
1823
  }
1821
1824
 
1822
1825
  exports.useScrollWheel = useScrollWheel;
1826
+ const $c770c63e4e3d986910ca483d5a$var$DEFAULT_THRESHOLD = 500;
1827
+
1828
+ function useLongPress(props) {
1829
+ let {
1830
+ isDisabled,
1831
+ onLongPressStart,
1832
+ onLongPressEnd,
1833
+ onLongPress,
1834
+ threshold = $c770c63e4e3d986910ca483d5a$var$DEFAULT_THRESHOLD,
1835
+ accessibilityDescription
1836
+ } = props;
1837
+ const timeRef = useRef(null);
1838
+ let {
1839
+ addGlobalListener,
1840
+ removeGlobalListener
1841
+ } = useGlobalListeners();
1842
+ let {
1843
+ pressProps
1844
+ } = usePress({
1845
+ isDisabled,
1846
+
1847
+ onPressStart(e) {
1848
+ if (e.pointerType === 'mouse' || e.pointerType === 'touch') {
1849
+ if (onLongPressStart) {
1850
+ onLongPressStart(_babelRuntimeHelpersExtends({}, e, {
1851
+ type: 'longpressstart'
1852
+ }));
1853
+ }
1854
+
1855
+ timeRef.current = setTimeout(() => {
1856
+ // Prevent other usePress handlers from also handling this event.
1857
+ e.target.dispatchEvent(new PointerEvent('pointercancel', {
1858
+ bubbles: true
1859
+ }));
1860
+
1861
+ if (onLongPress) {
1862
+ onLongPress(_babelRuntimeHelpersExtends({}, e, {
1863
+ type: 'longpress'
1864
+ }));
1865
+ }
1866
+
1867
+ timeRef.current = null;
1868
+ }, threshold); // Prevent context menu, which may be opened on long press on touch devices
1869
+
1870
+ if (e.pointerType === 'touch') {
1871
+ let onContextMenu = e => {
1872
+ e.preventDefault();
1873
+ };
1874
+
1875
+ addGlobalListener(e.target, 'contextmenu', onContextMenu, {
1876
+ once: true
1877
+ });
1878
+ addGlobalListener(window, 'pointerup', () => {
1879
+ // If no contextmenu event is fired quickly after pointerup, remove the handler
1880
+ // so future context menu events outside a long press are not prevented.
1881
+ setTimeout(() => {
1882
+ removeGlobalListener(e.target, 'contextmenu', onContextMenu);
1883
+ }, 30);
1884
+ }, {
1885
+ once: true
1886
+ });
1887
+ }
1888
+ }
1889
+ },
1890
+
1891
+ onPressEnd(e) {
1892
+ if (timeRef.current) {
1893
+ clearTimeout(timeRef.current);
1894
+ }
1895
+
1896
+ if (onLongPressEnd) {
1897
+ onLongPressEnd(_babelRuntimeHelpersExtends({}, e, {
1898
+ type: 'longpressend'
1899
+ }));
1900
+ }
1901
+ }
1902
+
1903
+ });
1904
+ let descriptionProps = useDescription(onLongPress && !isDisabled ? accessibilityDescription : null);
1905
+ return {
1906
+ longPressProps: mergeProps(pressProps, descriptionProps)
1907
+ };
1908
+ }
1909
+
1910
+ exports.useLongPress = useLongPress;
1823
1911
  //# sourceMappingURL=main.js.map