@react-aria/interactions 3.10.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/main.js CHANGED
@@ -292,8 +292,8 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
292
292
  };
293
293
  let pressProps = {
294
294
  onKeyDown (e) {
295
- if ($0294ea432cd92340$var$isValidKeyboardEvent(e.nativeEvent) && e.currentTarget.contains(e.target)) {
296
- if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard(e.target)) e.preventDefault();
295
+ if ($0294ea432cd92340$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && e.currentTarget.contains(e.target)) {
296
+ if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard(e.target, e.key)) e.preventDefault();
297
297
  e.stopPropagation();
298
298
  // If the event is repeating, it may have started on a different element
299
299
  // after which focus moved to the current element. Ignore these events and
@@ -306,10 +306,13 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
306
306
  // instead of the same element where the key down event occurred.
307
307
  addGlobalListener(document, 'keyup', onKeyUp, false);
308
308
  }
309
- }
309
+ } else if (e.key === 'Enter' && $0294ea432cd92340$var$isHTMLAnchorLink(e.currentTarget)) // If the target is a link, we won't have handled this above because we want the default
310
+ // browser behavior to open the link when pressing Enter. But we still need to prevent
311
+ // default so that elements above do not also handle it (e.g. table row).
312
+ e.stopPropagation();
310
313
  },
311
314
  onKeyUp (e) {
312
- if ($0294ea432cd92340$var$isValidKeyboardEvent(e.nativeEvent) && !e.repeat && e.currentTarget.contains(e.target)) triggerPressUp($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard');
315
+ if ($0294ea432cd92340$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && !e.repeat && e.currentTarget.contains(e.target)) triggerPressUp($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard');
313
316
  },
314
317
  onClick (e) {
315
318
  if (e && !e.currentTarget.contains(e.target)) return;
@@ -331,8 +334,8 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
331
334
  }
332
335
  };
333
336
  let onKeyUp = (e)=>{
334
- if (state.isPressed && $0294ea432cd92340$var$isValidKeyboardEvent(e)) {
335
- if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard(e.target)) e.preventDefault();
337
+ if (state.isPressed && $0294ea432cd92340$var$isValidKeyboardEvent(e, state.target)) {
338
+ if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard(e.target, e.key)) e.preventDefault();
336
339
  e.stopPropagation();
337
340
  state.isPressed = false;
338
341
  let target = e.target;
@@ -340,7 +343,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
340
343
  removeAllGlobalListeners();
341
344
  // If the target is a link, trigger the click method to open the URL,
342
345
  // but defer triggering pressEnd until onClick event handler.
343
- if (state.target instanceof HTMLElement && (state.target.contains(target) && $0294ea432cd92340$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link')) state.target.click();
346
+ if (state.target instanceof HTMLElement && state.target.contains(target) && ($0294ea432cd92340$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link')) state.target.click();
344
347
  }
345
348
  };
346
349
  if (typeof PointerEvent !== 'undefined') {
@@ -572,14 +575,13 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
572
575
  function $0294ea432cd92340$var$isHTMLAnchorLink(target) {
573
576
  return target.tagName === 'A' && target.hasAttribute('href');
574
577
  }
575
- function $0294ea432cd92340$var$isValidKeyboardEvent(event) {
576
- const { key: key , code: code , target: target } = event;
577
- const element = target;
578
- const { tagName: tagName , isContentEditable: isContentEditable } = element;
578
+ function $0294ea432cd92340$var$isValidKeyboardEvent(event, currentTarget) {
579
+ const { key: key , code: code } = event;
580
+ const element = currentTarget;
579
581
  const role = element.getAttribute('role');
580
582
  // Accessibility for keyboards. Space and Enter only.
581
583
  // "Spacebar" is for IE 11
582
- return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && tagName !== 'INPUT' && tagName !== 'TEXTAREA' && isContentEditable !== true && (!$0294ea432cd92340$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && // An element with role='link' should only trigger with Enter key
584
+ return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && !(element instanceof HTMLInputElement && !$0294ea432cd92340$var$isValidInputKey(element, key) || element instanceof HTMLTextAreaElement || element.isContentEditable) && (!$0294ea432cd92340$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && // An element with role='link' should only trigger with Enter key
583
585
  !(role === 'link' && key !== 'Enter');
584
586
  }
585
587
  function $0294ea432cd92340$var$getTouchFromEvent(event) {
@@ -630,8 +632,25 @@ function $0294ea432cd92340$var$shouldPreventDefault(target) {
630
632
  // We cannot prevent default if the target is a draggable element.
631
633
  return !(target instanceof HTMLElement) || !target.draggable;
632
634
  }
633
- function $0294ea432cd92340$var$shouldPreventDefaultKeyboard(target) {
634
- return !((target.tagName === 'INPUT' || target.tagName === 'BUTTON') && target.type === 'submit');
635
+ function $0294ea432cd92340$var$shouldPreventDefaultKeyboard(target, key) {
636
+ if (target instanceof HTMLInputElement) return !$0294ea432cd92340$var$isValidInputKey(target, key);
637
+ if (target instanceof HTMLButtonElement) return target.type !== 'submit';
638
+ return true;
639
+ }
640
+ const $0294ea432cd92340$var$nonTextInputTypes = new Set([
641
+ 'checkbox',
642
+ 'radio',
643
+ 'range',
644
+ 'color',
645
+ 'file',
646
+ 'image',
647
+ 'button',
648
+ 'submit',
649
+ 'reset'
650
+ ]);
651
+ function $0294ea432cd92340$var$isValidInputKey(target, key) {
652
+ // Only space should toggle checkboxes and radios, not enter.
653
+ return target.type === 'checkbox' || target.type === 'radio' ? key === ' ' : $0294ea432cd92340$var$nonTextInputTypes.has(target.type);
635
654
  }
636
655
  function $0294ea432cd92340$var$isVirtualPointerEvent(event) {
637
656
  // If the pointer size is zero, then we assume it's from a screen reader.