@react-aria/menu 3.9.1-nightly.3856 → 3.9.1-nightly.3863

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,9 +1,11 @@
1
- import {useId as $1Hnir$useId, filterDOMProps as $1Hnir$filterDOMProps, mergeProps as $1Hnir$mergeProps, useSlotId as $1Hnir$useSlotId} from "@react-aria/utils";
2
- import {useLocalizedStringFormatter as $1Hnir$useLocalizedStringFormatter} from "@react-aria/i18n";
3
- import {useLongPress as $1Hnir$useLongPress, usePress as $1Hnir$usePress, useHover as $1Hnir$useHover, isFocusVisible as $1Hnir$isFocusVisible} from "@react-aria/interactions";
1
+ import {useId as $1Hnir$useId, filterDOMProps as $1Hnir$filterDOMProps, mergeProps as $1Hnir$mergeProps, useEffectEvent as $1Hnir$useEffectEvent, useLayoutEffect as $1Hnir$useLayoutEffect, useSlotId as $1Hnir$useSlotId} from "@react-aria/utils";
2
+ import {useLocalizedStringFormatter as $1Hnir$useLocalizedStringFormatter, useLocale as $1Hnir$useLocale} from "@react-aria/i18n";
3
+ import {useLongPress as $1Hnir$useLongPress, usePress as $1Hnir$usePress, useHover as $1Hnir$useHover, isFocusVisible as $1Hnir$isFocusVisible, useKeyboard as $1Hnir$useKeyboard} from "@react-aria/interactions";
4
4
  import {useOverlayTrigger as $1Hnir$useOverlayTrigger} from "@react-aria/overlays";
5
5
  import {useSelectableList as $1Hnir$useSelectableList, useSelectableItem as $1Hnir$useSelectableItem} from "@react-aria/selection";
6
+ import {focusSafely as $1Hnir$focusSafely} from "@react-aria/focus";
6
7
  import {getItemCount as $1Hnir$getItemCount} from "@react-stately/collections";
8
+ import {useRef as $1Hnir$useRef, useCallback as $1Hnir$useCallback} from "react";
7
9
 
8
10
  function $parcel$interopDefault(a) {
9
11
  return a && a.__esModule ? a.default : a;
@@ -402,15 +404,44 @@ function $d5336fe17ce95402$export$38eaa17faae8f579(props, state, ref) {
402
404
 
403
405
 
404
406
 
407
+
408
+
409
+
405
410
  function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
406
- let { key: key , closeOnSelect: closeOnSelect , isVirtualized: isVirtualized } = props;
411
+ let { key: key , closeOnSelect: closeOnSelect , isVirtualized: isVirtualized , "aria-haspopup": hasPopup } = props;
412
+ let { direction: direction } = (0, $1Hnir$useLocale)();
413
+ let isMenuDialogTrigger = state.collection.getItem(key).hasChildNodes;
414
+ let isOpen = state.expandedKeys.has(key);
407
415
  var _props_isDisabled;
408
416
  let isDisabled = (_props_isDisabled = props.isDisabled) !== null && _props_isDisabled !== void 0 ? _props_isDisabled : state.disabledKeys.has(key);
409
417
  var _props_isSelected;
410
418
  let isSelected = (_props_isSelected = props.isSelected) !== null && _props_isSelected !== void 0 ? _props_isSelected : state.selectionManager.isSelected(key);
419
+ let openTimeout = (0, $1Hnir$useRef)();
420
+ let cancelOpenTimeout = (0, $1Hnir$useCallback)(()=>{
421
+ if (openTimeout.current) {
422
+ clearTimeout(openTimeout.current);
423
+ openTimeout.current = undefined;
424
+ }
425
+ }, [
426
+ openTimeout
427
+ ]);
428
+ let onSubmenuOpen = (0, $1Hnir$useEffectEvent)(()=>{
429
+ cancelOpenTimeout();
430
+ if (!state.expandedKeys.has(key)) state.toggleKey(key);
431
+ });
432
+ (0, $1Hnir$useLayoutEffect)(()=>{
433
+ return ()=>cancelOpenTimeout();
434
+ }, [
435
+ cancelOpenTimeout
436
+ ]);
411
437
  let data = (0, $d5336fe17ce95402$export$6f49b4016bfc8d56).get(state);
412
438
  let onClose = props.onClose || data.onClose;
413
- let onAction = props.onAction || data.onAction;
439
+ let onActionMenuDialogTrigger = (0, $1Hnir$useCallback)(()=>{
440
+ onSubmenuOpen();
441
+ // will need to disable this lint rule when using useEffectEvent https://react.dev/learn/separating-events-from-effects#logic-inside-effects-is-reactive
442
+ // eslint-disable-next-line react-hooks/exhaustive-deps
443
+ }, []);
444
+ let onAction = isMenuDialogTrigger ? onActionMenuDialogTrigger : props.onAction || data.onAction;
414
445
  let role = "menuitem";
415
446
  if (state.selectionManager.selectionMode === "single") role = "menuitemradio";
416
447
  else if (state.selectionManager.selectionMode === "multiple") role = "menuitemcheckbox";
@@ -432,20 +463,10 @@ function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
432
463
  ariaProps["aria-posinset"] = state.collection.getItem(key).index;
433
464
  ariaProps["aria-setsize"] = (0, $1Hnir$getItemCount)(state.collection);
434
465
  }
435
- let onKeyDown = (e)=>{
436
- // Ignore repeating events, which may have started on the menu trigger before moving
437
- // focus to the menu item. We want to wait for a second complete key press sequence.
438
- if (e.repeat) return;
439
- switch(e.key){
440
- case " ":
441
- if (!isDisabled && state.selectionManager.selectionMode === "none" && closeOnSelect !== false && onClose) onClose();
442
- break;
443
- case "Enter":
444
- // The Enter key should always close on select, except if overridden.
445
- if (!isDisabled && closeOnSelect !== false && onClose) onClose();
446
- break;
447
- }
448
- };
466
+ if (hasPopup != null) {
467
+ ariaProps["aria-haspopup"] = hasPopup;
468
+ ariaProps["aria-expanded"] = isOpen ? "true" : "false";
469
+ }
449
470
  let onPressStart = (e)=>{
450
471
  if (e.pointerType === "keyboard" && onAction) onAction(key);
451
472
  };
@@ -454,7 +475,7 @@ function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
454
475
  if (onAction) onAction(key);
455
476
  // Pressing a menu item should close by default in single selection mode but not multiple
456
477
  // selection mode, except if overridden by the closeOnSelect prop.
457
- if (onClose && (closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : state.selectionManager.selectionMode !== "multiple")) onClose();
478
+ if (!isMenuDialogTrigger && onClose && (closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : state.selectionManager.selectionMode !== "multiple")) onClose();
458
479
  }
459
480
  };
460
481
  let { itemProps: itemProps , isFocused: isFocused } = (0, $1Hnir$useSelectableItem)({
@@ -475,15 +496,56 @@ function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
475
496
  if (!(0, $1Hnir$isFocusVisible)()) {
476
497
  state.selectionManager.setFocused(true);
477
498
  state.selectionManager.setFocusedKey(key);
499
+ // focus immediately so that a focus scope opened on hover has the correct restore node
500
+ let isFocused = key === state.selectionManager.focusedKey;
501
+ if (isFocused && state.selectionManager.isFocused && document.activeElement !== ref.current) {
502
+ if (state.expandedKeys.size > 0 && !state.expandedKeys.has(key)) for (let expandedKey of state.expandedKeys)state.toggleKey(expandedKey);
503
+ (0, $1Hnir$focusSafely)(ref.current);
504
+ }
505
+ }
506
+ },
507
+ onHoverChange: (isHovered)=>{
508
+ if (isHovered && isMenuDialogTrigger) {
509
+ if (!openTimeout.current) openTimeout.current = setTimeout(()=>{
510
+ onSubmenuOpen();
511
+ }, 200);
512
+ } else if (!isHovered) cancelOpenTimeout();
513
+ }
514
+ });
515
+ let { keyboardProps: keyboardProps } = (0, $1Hnir$useKeyboard)({
516
+ onKeyDown: (e)=>{
517
+ // Ignore repeating events, which may have started on the menu trigger before moving
518
+ // focus to the menu item. We want to wait for a second complete key press sequence.
519
+ if (e.repeat) {
520
+ e.continuePropagation();
521
+ return;
522
+ }
523
+ switch(e.key){
524
+ case " ":
525
+ if (!isDisabled && state.selectionManager.selectionMode === "none" && !isMenuDialogTrigger && closeOnSelect !== false && onClose) onClose();
526
+ break;
527
+ case "Enter":
528
+ // The Enter key should always close on select, except if overridden.
529
+ if (!isDisabled && closeOnSelect !== false && !isMenuDialogTrigger && onClose) onClose();
530
+ break;
531
+ case "ArrowRight":
532
+ if (isMenuDialogTrigger && direction === "ltr") onSubmenuOpen();
533
+ else e.continuePropagation();
534
+ break;
535
+ case "ArrowLeft":
536
+ if (isMenuDialogTrigger && direction === "rtl") onSubmenuOpen();
537
+ else e.continuePropagation();
538
+ break;
539
+ default:
540
+ e.continuePropagation();
541
+ break;
478
542
  }
479
543
  }
480
544
  });
481
545
  return {
482
546
  menuItemProps: {
483
547
  ...ariaProps,
484
- ...(0, $1Hnir$mergeProps)(itemProps, pressProps, hoverProps, {
485
- onKeyDown: onKeyDown
486
- })
548
+ ...(0, $1Hnir$mergeProps)(itemProps, pressProps, hoverProps, keyboardProps)
487
549
  },
488
550
  labelProps: {
489
551
  id: labelId
package/dist/main.js CHANGED
@@ -3,7 +3,9 @@ var $fHYTQ$reactariai18n = require("@react-aria/i18n");
3
3
  var $fHYTQ$reactariainteractions = require("@react-aria/interactions");
4
4
  var $fHYTQ$reactariaoverlays = require("@react-aria/overlays");
5
5
  var $fHYTQ$reactariaselection = require("@react-aria/selection");
6
+ var $fHYTQ$reactariafocus = require("@react-aria/focus");
6
7
  var $fHYTQ$reactstatelycollections = require("@react-stately/collections");
8
+ var $fHYTQ$react = require("react");
7
9
 
8
10
  function $parcel$export(e, n, v, s) {
9
11
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
@@ -410,15 +412,44 @@ function $a3815f0132802737$export$38eaa17faae8f579(props, state, ref) {
410
412
 
411
413
 
412
414
 
415
+
416
+
417
+
413
418
  function $38191ed02615ec07$export$9d32628fc2aea7da(props, state, ref) {
414
- let { key: key , closeOnSelect: closeOnSelect , isVirtualized: isVirtualized } = props;
419
+ let { key: key , closeOnSelect: closeOnSelect , isVirtualized: isVirtualized , "aria-haspopup": hasPopup } = props;
420
+ let { direction: direction } = (0, $fHYTQ$reactariai18n.useLocale)();
421
+ let isMenuDialogTrigger = state.collection.getItem(key).hasChildNodes;
422
+ let isOpen = state.expandedKeys.has(key);
415
423
  var _props_isDisabled;
416
424
  let isDisabled = (_props_isDisabled = props.isDisabled) !== null && _props_isDisabled !== void 0 ? _props_isDisabled : state.disabledKeys.has(key);
417
425
  var _props_isSelected;
418
426
  let isSelected = (_props_isSelected = props.isSelected) !== null && _props_isSelected !== void 0 ? _props_isSelected : state.selectionManager.isSelected(key);
427
+ let openTimeout = (0, $fHYTQ$react.useRef)();
428
+ let cancelOpenTimeout = (0, $fHYTQ$react.useCallback)(()=>{
429
+ if (openTimeout.current) {
430
+ clearTimeout(openTimeout.current);
431
+ openTimeout.current = undefined;
432
+ }
433
+ }, [
434
+ openTimeout
435
+ ]);
436
+ let onSubmenuOpen = (0, $fHYTQ$reactariautils.useEffectEvent)(()=>{
437
+ cancelOpenTimeout();
438
+ if (!state.expandedKeys.has(key)) state.toggleKey(key);
439
+ });
440
+ (0, $fHYTQ$reactariautils.useLayoutEffect)(()=>{
441
+ return ()=>cancelOpenTimeout();
442
+ }, [
443
+ cancelOpenTimeout
444
+ ]);
419
445
  let data = (0, $a3815f0132802737$export$6f49b4016bfc8d56).get(state);
420
446
  let onClose = props.onClose || data.onClose;
421
- let onAction = props.onAction || data.onAction;
447
+ let onActionMenuDialogTrigger = (0, $fHYTQ$react.useCallback)(()=>{
448
+ onSubmenuOpen();
449
+ // will need to disable this lint rule when using useEffectEvent https://react.dev/learn/separating-events-from-effects#logic-inside-effects-is-reactive
450
+ // eslint-disable-next-line react-hooks/exhaustive-deps
451
+ }, []);
452
+ let onAction = isMenuDialogTrigger ? onActionMenuDialogTrigger : props.onAction || data.onAction;
422
453
  let role = "menuitem";
423
454
  if (state.selectionManager.selectionMode === "single") role = "menuitemradio";
424
455
  else if (state.selectionManager.selectionMode === "multiple") role = "menuitemcheckbox";
@@ -440,20 +471,10 @@ function $38191ed02615ec07$export$9d32628fc2aea7da(props, state, ref) {
440
471
  ariaProps["aria-posinset"] = state.collection.getItem(key).index;
441
472
  ariaProps["aria-setsize"] = (0, $fHYTQ$reactstatelycollections.getItemCount)(state.collection);
442
473
  }
443
- let onKeyDown = (e)=>{
444
- // Ignore repeating events, which may have started on the menu trigger before moving
445
- // focus to the menu item. We want to wait for a second complete key press sequence.
446
- if (e.repeat) return;
447
- switch(e.key){
448
- case " ":
449
- if (!isDisabled && state.selectionManager.selectionMode === "none" && closeOnSelect !== false && onClose) onClose();
450
- break;
451
- case "Enter":
452
- // The Enter key should always close on select, except if overridden.
453
- if (!isDisabled && closeOnSelect !== false && onClose) onClose();
454
- break;
455
- }
456
- };
474
+ if (hasPopup != null) {
475
+ ariaProps["aria-haspopup"] = hasPopup;
476
+ ariaProps["aria-expanded"] = isOpen ? "true" : "false";
477
+ }
457
478
  let onPressStart = (e)=>{
458
479
  if (e.pointerType === "keyboard" && onAction) onAction(key);
459
480
  };
@@ -462,7 +483,7 @@ function $38191ed02615ec07$export$9d32628fc2aea7da(props, state, ref) {
462
483
  if (onAction) onAction(key);
463
484
  // Pressing a menu item should close by default in single selection mode but not multiple
464
485
  // selection mode, except if overridden by the closeOnSelect prop.
465
- if (onClose && (closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : state.selectionManager.selectionMode !== "multiple")) onClose();
486
+ if (!isMenuDialogTrigger && onClose && (closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : state.selectionManager.selectionMode !== "multiple")) onClose();
466
487
  }
467
488
  };
468
489
  let { itemProps: itemProps , isFocused: isFocused } = (0, $fHYTQ$reactariaselection.useSelectableItem)({
@@ -483,15 +504,56 @@ function $38191ed02615ec07$export$9d32628fc2aea7da(props, state, ref) {
483
504
  if (!(0, $fHYTQ$reactariainteractions.isFocusVisible)()) {
484
505
  state.selectionManager.setFocused(true);
485
506
  state.selectionManager.setFocusedKey(key);
507
+ // focus immediately so that a focus scope opened on hover has the correct restore node
508
+ let isFocused = key === state.selectionManager.focusedKey;
509
+ if (isFocused && state.selectionManager.isFocused && document.activeElement !== ref.current) {
510
+ if (state.expandedKeys.size > 0 && !state.expandedKeys.has(key)) for (let expandedKey of state.expandedKeys)state.toggleKey(expandedKey);
511
+ (0, $fHYTQ$reactariafocus.focusSafely)(ref.current);
512
+ }
513
+ }
514
+ },
515
+ onHoverChange: (isHovered)=>{
516
+ if (isHovered && isMenuDialogTrigger) {
517
+ if (!openTimeout.current) openTimeout.current = setTimeout(()=>{
518
+ onSubmenuOpen();
519
+ }, 200);
520
+ } else if (!isHovered) cancelOpenTimeout();
521
+ }
522
+ });
523
+ let { keyboardProps: keyboardProps } = (0, $fHYTQ$reactariainteractions.useKeyboard)({
524
+ onKeyDown: (e)=>{
525
+ // Ignore repeating events, which may have started on the menu trigger before moving
526
+ // focus to the menu item. We want to wait for a second complete key press sequence.
527
+ if (e.repeat) {
528
+ e.continuePropagation();
529
+ return;
530
+ }
531
+ switch(e.key){
532
+ case " ":
533
+ if (!isDisabled && state.selectionManager.selectionMode === "none" && !isMenuDialogTrigger && closeOnSelect !== false && onClose) onClose();
534
+ break;
535
+ case "Enter":
536
+ // The Enter key should always close on select, except if overridden.
537
+ if (!isDisabled && closeOnSelect !== false && !isMenuDialogTrigger && onClose) onClose();
538
+ break;
539
+ case "ArrowRight":
540
+ if (isMenuDialogTrigger && direction === "ltr") onSubmenuOpen();
541
+ else e.continuePropagation();
542
+ break;
543
+ case "ArrowLeft":
544
+ if (isMenuDialogTrigger && direction === "rtl") onSubmenuOpen();
545
+ else e.continuePropagation();
546
+ break;
547
+ default:
548
+ e.continuePropagation();
549
+ break;
486
550
  }
487
551
  }
488
552
  });
489
553
  return {
490
554
  menuItemProps: {
491
555
  ...ariaProps,
492
- ...(0, $fHYTQ$reactariautils.mergeProps)(itemProps, pressProps, hoverProps, {
493
- onKeyDown: onKeyDown
494
- })
556
+ ...(0, $fHYTQ$reactariautils.mergeProps)(itemProps, pressProps, hoverProps, keyboardProps)
495
557
  },
496
558
  labelProps: {
497
559
  id: labelId
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-aria/menu/src/index.ts","packages/@react-aria/menu/src/useMenuTrigger.ts","packages/@react-aria/menu/intl/*.js","packages/@react-aria/menu/intl/ar-AE.json","packages/@react-aria/menu/intl/bg-BG.json","packages/@react-aria/menu/intl/cs-CZ.json","packages/@react-aria/menu/intl/da-DK.json","packages/@react-aria/menu/intl/de-DE.json","packages/@react-aria/menu/intl/el-GR.json","packages/@react-aria/menu/intl/en-US.json","packages/@react-aria/menu/intl/es-ES.json","packages/@react-aria/menu/intl/et-EE.json","packages/@react-aria/menu/intl/fi-FI.json","packages/@react-aria/menu/intl/fr-FR.json","packages/@react-aria/menu/intl/he-IL.json","packages/@react-aria/menu/intl/hr-HR.json","packages/@react-aria/menu/intl/hu-HU.json","packages/@react-aria/menu/intl/it-IT.json","packages/@react-aria/menu/intl/ja-JP.json","packages/@react-aria/menu/intl/ko-KR.json","packages/@react-aria/menu/intl/lt-LT.json","packages/@react-aria/menu/intl/lv-LV.json","packages/@react-aria/menu/intl/nb-NO.json","packages/@react-aria/menu/intl/nl-NL.json","packages/@react-aria/menu/intl/pl-PL.json","packages/@react-aria/menu/intl/pt-BR.json","packages/@react-aria/menu/intl/pt-PT.json","packages/@react-aria/menu/intl/ro-RO.json","packages/@react-aria/menu/intl/ru-RU.json","packages/@react-aria/menu/intl/sk-SK.json","packages/@react-aria/menu/intl/sl-SI.json","packages/@react-aria/menu/intl/sr-SP.json","packages/@react-aria/menu/intl/sv-SE.json","packages/@react-aria/menu/intl/tr-TR.json","packages/@react-aria/menu/intl/uk-UA.json","packages/@react-aria/menu/intl/zh-CN.json","packages/@react-aria/menu/intl/zh-TW.json","packages/@react-aria/menu/src/useMenu.ts","packages/@react-aria/menu/src/useMenuItem.ts","packages/@react-aria/menu/src/useMenuSection.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport {useMenuTrigger} from './useMenuTrigger';\nexport {useMenu} from './useMenu';\nexport {useMenuItem} from './useMenuItem';\nexport {useMenuSection} from './useMenuSection';\n\nexport type {AriaMenuProps} from '@react-types/menu';\nexport type {AriaMenuTriggerProps, MenuTriggerAria} from './useMenuTrigger';\nexport type {AriaMenuOptions, MenuAria} from './useMenu';\nexport type {AriaMenuItemProps, MenuItemAria} from './useMenuItem';\nexport type {AriaMenuSectionProps, MenuSectionAria} from './useMenuSection';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {AriaMenuOptions} from './useMenu';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {MenuTriggerState} from '@react-stately/menu';\nimport {MenuTriggerType} from '@react-types/menu';\nimport {RefObject} from 'react';\nimport {useId} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useLongPress} from '@react-aria/interactions';\nimport {useOverlayTrigger} from '@react-aria/overlays';\n\nexport interface AriaMenuTriggerProps {\n /** The type of menu that the menu trigger opens. */\n type?: 'menu' | 'listbox',\n /** Whether menu trigger is disabled. */\n isDisabled?: boolean,\n /** How menu is triggered. */\n trigger?: MenuTriggerType\n}\n\nexport interface MenuTriggerAria<T> {\n /** Props for the menu trigger element. */\n menuTriggerProps: AriaButtonProps,\n\n /** Props for the menu. */\n menuProps: AriaMenuOptions<T>\n}\n\n/**\n * Provides the behavior and accessibility implementation for a menu trigger.\n * @param props - Props for the menu trigger.\n * @param state - State for the menu trigger.\n */\nexport function useMenuTrigger<T>(props: AriaMenuTriggerProps, state: MenuTriggerState, ref: RefObject<Element>): MenuTriggerAria<T> {\n let {\n type = 'menu' as AriaMenuTriggerProps['type'],\n isDisabled,\n trigger = 'press'\n } = props;\n\n let menuTriggerId = useId();\n let {triggerProps, overlayProps} = useOverlayTrigger({type}, state, ref);\n\n let onKeyDown = (e) => {\n if (isDisabled) {\n return;\n }\n\n if (trigger === 'longPress' && !e.altKey) {\n return;\n }\n\n if (ref && ref.current) {\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (trigger === 'longPress') {\n return;\n }\n // fallthrough\n case 'ArrowDown':\n // Stop propagation, unless it would already be handled by useKeyboard.\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('first');\n break;\n case 'ArrowUp':\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('last');\n break;\n }\n }\n };\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages);\n let {longPressProps} = useLongPress({\n isDisabled: isDisabled || trigger !== 'longPress',\n accessibilityDescription: stringFormatter.format('longPressMessage'),\n onLongPressStart() {\n state.close();\n },\n onLongPress() {\n state.open('first');\n }\n });\n\n let pressProps = {\n onPressStart(e) {\n // For consistency with native, open the menu on mouse/key down, but touch up.\n if (e.pointerType !== 'touch' && e.pointerType !== 'keyboard' && !isDisabled) {\n // If opened with a screen reader, auto focus the first item.\n // Otherwise, the menu itself will be focused.\n state.toggle(e.pointerType === 'virtual' ? 'first' : null);\n }\n },\n onPress(e) {\n if (e.pointerType === 'touch' && !isDisabled) {\n state.toggle();\n }\n }\n };\n\n // omit onPress from triggerProps since we override it above.\n delete triggerProps.onPress;\n\n return {\n menuTriggerProps: {\n ...triggerProps,\n ...(trigger === 'press' ? pressProps : longPressProps),\n id: menuTriggerId,\n onKeyDown\n },\n menuProps: {\n ...overlayProps,\n 'aria-labelledby': menuTriggerId,\n autoFocus: state.focusStrategy || true,\n onClose: state.close\n }\n };\n}\n","const _temp0 = require(\"./ar-AE.json\");\nconst _temp1 = require(\"./bg-BG.json\");\nconst _temp2 = require(\"./cs-CZ.json\");\nconst _temp3 = require(\"./da-DK.json\");\nconst _temp4 = require(\"./de-DE.json\");\nconst _temp5 = require(\"./el-GR.json\");\nconst _temp6 = require(\"./en-US.json\");\nconst _temp7 = require(\"./es-ES.json\");\nconst _temp8 = require(\"./et-EE.json\");\nconst _temp9 = require(\"./fi-FI.json\");\nconst _temp10 = require(\"./fr-FR.json\");\nconst _temp11 = require(\"./he-IL.json\");\nconst _temp12 = require(\"./hr-HR.json\");\nconst _temp13 = require(\"./hu-HU.json\");\nconst _temp14 = require(\"./it-IT.json\");\nconst _temp15 = require(\"./ja-JP.json\");\nconst _temp16 = require(\"./ko-KR.json\");\nconst _temp17 = require(\"./lt-LT.json\");\nconst _temp18 = require(\"./lv-LV.json\");\nconst _temp19 = require(\"./nb-NO.json\");\nconst _temp20 = require(\"./nl-NL.json\");\nconst _temp21 = require(\"./pl-PL.json\");\nconst _temp22 = require(\"./pt-BR.json\");\nconst _temp23 = require(\"./pt-PT.json\");\nconst _temp24 = require(\"./ro-RO.json\");\nconst _temp25 = require(\"./ru-RU.json\");\nconst _temp26 = require(\"./sk-SK.json\");\nconst _temp27 = require(\"./sl-SI.json\");\nconst _temp28 = require(\"./sr-SP.json\");\nconst _temp29 = require(\"./sv-SE.json\");\nconst _temp30 = require(\"./tr-TR.json\");\nconst _temp31 = require(\"./uk-UA.json\");\nconst _temp32 = require(\"./zh-CN.json\");\nconst _temp33 = require(\"./zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"longPressMessage\": \"اضغط مطولاً أو اضغط على Alt + السهم لأسفل لفتح القائمة\"\n}\n","{\n \"longPressMessage\": \"Натиснете продължително или натиснете Alt+ стрелка надолу, за да отворите менюто\"\n}\n","{\n \"longPressMessage\": \"Dlouhým stiskem nebo stisknutím kláves Alt + šipka dolů otevřete nabídku\"\n}\n","{\n \"longPressMessage\": \"Langt tryk eller tryk på Alt + pil ned for at åbne menuen\"\n}\n","{\n \"longPressMessage\": \"Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen\"\n}\n","{\n \"longPressMessage\": \"Πιέστε παρατεταμένα ή πατήστε Alt + κάτω βέλος για να ανοίξετε το μενού\"\n}\n","{\n \"longPressMessage\": \"Long press or press Alt + ArrowDown to open menu\"\n}\n","{\n \"longPressMessage\": \"Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú\"\n}\n","{\n \"longPressMessage\": \"Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool\"\n}\n","{\n \"longPressMessage\": \"Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli\"\n}\n","{\n \"longPressMessage\": \"Appuyez de manière prolongée ou appuyez sur Alt + Flèche vers le bas pour ouvrir le menu.\"\n}\n","{\n \"longPressMessage\": \"לחץ לחיצה ארוכה או הקש Alt + ArrowDown כדי לפתוח את התפריט\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika\"\n}\n","{\n \"longPressMessage\": \"Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyíl gombot a menü megnyitásához\"\n}\n","{\n \"longPressMessage\": \"Premere a lungo o premere Alt + Freccia giù per aprire il menu\"\n}\n","{\n \"longPressMessage\": \"長押しまたは Alt+下矢印キーでメニューを開く\"\n}\n","{\n \"longPressMessage\": \"길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기\"\n}\n","{\n \"longPressMessage\": \"Norėdami atidaryti meniu, nuspaudę palaikykite arba paspauskite „Alt + ArrowDown“.\"\n}\n","{\n \"longPressMessage\": \"Lai atvērtu izvēlni, turiet nospiestu vai nospiediet taustiņu kombināciju Alt + lejupvērstā bultiņa\"\n}\n","{\n \"longPressMessage\": \"Langt trykk eller trykk Alt + PilNed for å åpne menyen\"\n}\n","{\n \"longPressMessage\": \"Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen\"\n}\n","{\n \"longPressMessage\": \"Naciśnij i przytrzymaj lub naciśnij klawisze Alt + Strzałka w dół, aby otworzyć menu\"\n}\n","{\n \"longPressMessage\": \"Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Apăsați lung sau apăsați pe Alt + săgeată în jos pentru a deschide meniul\"\n}\n","{\n \"longPressMessage\": \"Нажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню\"\n}\n","{\n \"longPressMessage\": \"Ponuku otvoríte dlhým stlačením alebo stlačením klávesu Alt + klávesu so šípkou nadol\"\n}\n","{\n \"longPressMessage\": \"Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puščica navzdol\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni\"\n}\n","{\n \"longPressMessage\": \"Håll nedtryckt eller tryck på Alt + pil nedåt för att öppna menyn\"\n}\n","{\n \"longPressMessage\": \"Menüyü açmak için uzun basın veya Alt + Aşağı Ok tuşuna basın\"\n}\n","{\n \"longPressMessage\": \"Довго або звичайно натисніть комбінацію клавіш Alt і стрілка вниз, щоб відкрити меню\"\n}\n","{\n \"longPressMessage\": \"长按或按 Alt + 向下方向键以打开菜单\"\n}\n","{\n \"longPressMessage\": \"長按或按 Alt+向下鍵以開啟功能表\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaMenuProps} from '@react-types/menu';\nimport {DOMAttributes, KeyboardDelegate} from '@react-types/shared';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {Key, RefObject} from 'react';\nimport {TreeState} from '@react-stately/tree';\nimport {useSelectableList} from '@react-aria/selection';\n\nexport interface MenuAria {\n /** Props for the menu element. */\n menuProps: DOMAttributes\n}\n\nexport interface AriaMenuOptions<T> extends Omit<AriaMenuProps<T>, 'children'> {\n /** Whether the menu uses virtual scrolling. */\n isVirtualized?: boolean,\n\n /**\n * An optional keyboard delegate implementation for type to select,\n * to override the default.\n */\n keyboardDelegate?: KeyboardDelegate\n}\n\ninterface MenuData {\n onClose?: () => void,\n onAction?: (key: Key) => void\n}\n\nexport const menuData = new WeakMap<TreeState<unknown>, MenuData>();\n\n/**\n * Provides the behavior and accessibility implementation for a menu component.\n * A menu displays a list of actions or options that a user can choose.\n * @param props - Props for the menu.\n * @param state - State for the menu, as returned by `useListState`.\n */\nexport function useMenu<T>(props: AriaMenuOptions<T>, state: TreeState<T>, ref: RefObject<HTMLElement>): MenuAria {\n let {\n shouldFocusWrap = true,\n ...otherProps\n } = props;\n\n if (!props['aria-label'] && !props['aria-labelledby']) {\n console.warn('An aria-label or aria-labelledby prop is required for accessibility.');\n }\n\n let domProps = filterDOMProps(props, {labelable: true});\n let {listProps} = useSelectableList({\n ...otherProps,\n ref,\n selectionManager: state.selectionManager,\n collection: state.collection,\n disabledKeys: state.disabledKeys,\n shouldFocusWrap\n });\n\n menuData.set(state, {\n onClose: props.onClose,\n onAction: props.onAction\n });\n\n return {\n menuProps: mergeProps(domProps, {\n role: 'menu',\n ...listProps,\n onKeyDown: (e) => {\n // don't clear the menu selected keys if the user is presses escape since escape closes the menu\n if (e.key !== 'Escape') {\n listProps.onKeyDown(e);\n }\n }\n })\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableElement, PressEvent} from '@react-types/shared';\nimport {getItemCount} from '@react-stately/collections';\nimport {isFocusVisible, useHover, usePress} from '@react-aria/interactions';\nimport {Key, RefObject} from 'react';\nimport {menuData} from './useMenu';\nimport {mergeProps, useSlotId} from '@react-aria/utils';\nimport {TreeState} from '@react-stately/tree';\nimport {useSelectableItem} from '@react-aria/selection';\n\nexport interface MenuItemAria {\n /** Props for the menu item element. */\n menuItemProps: DOMAttributes,\n\n /** Props for the main text element inside the menu item. */\n labelProps: DOMAttributes,\n\n /** Props for the description text element inside the menu item, if any. */\n descriptionProps: DOMAttributes,\n\n /** Props for the keyboard shortcut text element inside the item, if any. */\n keyboardShortcutProps: DOMAttributes,\n\n /** Whether the item is currently focused. */\n isFocused: boolean,\n /** Whether the item is currently selected. */\n isSelected: boolean,\n /** Whether the item is currently in a pressed state. */\n isPressed: boolean,\n /** Whether the item is disabled. */\n isDisabled: boolean\n}\n\nexport interface AriaMenuItemProps {\n /**\n * Whether the menu item is disabled.\n * @deprecated - pass disabledKeys to useTreeState instead.\n */\n isDisabled?: boolean,\n\n /**\n * Whether the menu item is selected.\n * @deprecated - pass selectedKeys to useTreeState instead.\n */\n isSelected?: boolean,\n\n /** A screen reader only label for the menu item. */\n 'aria-label'?: string,\n\n /** The unique key for the menu item. */\n key?: Key,\n\n /**\n * Handler that is called when the menu should close after selecting an item.\n * @deprecated - pass to the menu instead.\n */\n onClose?: () => void,\n\n /**\n * Whether the menu should close when the menu item is selected.\n * @default true\n */\n closeOnSelect?: boolean,\n\n /** Whether the menu item is contained in a virtual scrolling menu. */\n isVirtualized?: boolean,\n\n /**\n * Handler that is called when the user activates the item.\n * @deprecated - pass to the menu instead.\n */\n onAction?: (key: Key) => void\n}\n\n/**\n * Provides the behavior and accessibility implementation for an item in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the item.\n * @param state - State for the menu, as returned by `useTreeState`.\n */\nexport function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, ref: RefObject<FocusableElement>): MenuItemAria {\n let {\n key,\n closeOnSelect,\n isVirtualized\n } = props;\n\n let isDisabled = props.isDisabled ?? state.disabledKeys.has(key);\n let isSelected = props.isSelected ?? state.selectionManager.isSelected(key);\n\n let data = menuData.get(state);\n let onClose = props.onClose || data.onClose;\n let onAction = props.onAction || data.onAction;\n\n let role = 'menuitem';\n if (state.selectionManager.selectionMode === 'single') {\n role = 'menuitemradio';\n } else if (state.selectionManager.selectionMode === 'multiple') {\n role = 'menuitemcheckbox';\n }\n\n let labelId = useSlotId();\n let descriptionId = useSlotId();\n let keyboardId = useSlotId();\n\n let ariaProps = {\n 'aria-disabled': isDisabled || undefined,\n role,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': labelId,\n 'aria-describedby': [descriptionId, keyboardId].filter(Boolean).join(' ') || undefined\n };\n\n if (state.selectionManager.selectionMode !== 'none') {\n ariaProps['aria-checked'] = isSelected;\n }\n\n if (isVirtualized) {\n ariaProps['aria-posinset'] = state.collection.getItem(key).index;\n ariaProps['aria-setsize'] = getItemCount(state.collection);\n }\n\n let onKeyDown = (e: KeyboardEvent) => {\n // Ignore repeating events, which may have started on the menu trigger before moving\n // focus to the menu item. We want to wait for a second complete key press sequence.\n if (e.repeat) {\n return;\n }\n\n switch (e.key) {\n case ' ':\n if (!isDisabled && state.selectionManager.selectionMode === 'none' && closeOnSelect !== false && onClose) {\n onClose();\n }\n break;\n case 'Enter':\n // The Enter key should always close on select, except if overridden.\n if (!isDisabled && closeOnSelect !== false && onClose) {\n onClose();\n }\n break;\n }\n };\n\n let onPressStart = (e: PressEvent) => {\n if (e.pointerType === 'keyboard' && onAction) {\n onAction(key);\n }\n };\n\n let onPressUp = (e: PressEvent) => {\n if (e.pointerType !== 'keyboard') {\n if (onAction) {\n onAction(key);\n }\n\n // Pressing a menu item should close by default in single selection mode but not multiple\n // selection mode, except if overridden by the closeOnSelect prop.\n if (onClose && (closeOnSelect ?? state.selectionManager.selectionMode !== 'multiple')) {\n onClose();\n }\n }\n };\n\n let {itemProps, isFocused} = useSelectableItem({\n selectionManager: state.selectionManager,\n key,\n ref,\n shouldSelectOnPressUp: true,\n allowsDifferentPressOrigin: true\n });\n\n let {pressProps, isPressed} = usePress({onPressStart, onPressUp, isDisabled});\n let {hoverProps} = useHover({\n isDisabled,\n onHoverStart() {\n if (!isFocusVisible()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(key);\n }\n }\n });\n\n return {\n menuItemProps: {\n ...ariaProps,\n ...mergeProps(itemProps, pressProps, hoverProps, {onKeyDown})\n },\n labelProps: {\n id: labelId\n },\n descriptionProps: {\n id: descriptionId\n },\n keyboardShortcutProps: {\n id: keyboardId\n },\n isFocused,\n isSelected,\n isPressed,\n isDisabled\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {ReactNode} from 'react';\nimport {useId} from '@react-aria/utils';\n\nexport interface AriaMenuSectionProps {\n /** The heading for the section. */\n heading?: ReactNode,\n /** An accessibility label for the section. Required if `heading` is not present. */\n 'aria-label'?: string\n}\n\nexport interface MenuSectionAria {\n /** Props for the wrapper list item. */\n itemProps: DOMAttributes,\n\n /** Props for the heading element, if any. */\n headingProps: DOMAttributes,\n\n /** Props for the group element. */\n groupProps: DOMAttributes\n}\n\n/**\n * Provides the behavior and accessibility implementation for a section in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the section.\n */\nexport function useMenuSection(props: AriaMenuSectionProps): MenuSectionAria {\n let {heading, 'aria-label': ariaLabel} = props;\n let headingId = useId();\n\n return {\n itemProps: {\n role: 'presentation'\n },\n headingProps: heading ? {\n // Techincally, menus cannot contain headings according to ARIA.\n // We hide the heading from assistive technology, and only use it\n // as a label for the nested group.\n id: headingId,\n 'aria-hidden': true\n } : {},\n groupProps: {\n role: 'group',\n 'aria-label': ariaLabel,\n 'aria-labelledby': heading ? headingId : undefined\n }\n };\n}\n"],"names":[],"version":3,"file":"main.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-aria/menu/src/index.ts","packages/@react-aria/menu/src/useMenuTrigger.ts","packages/@react-aria/menu/intl/*.js","packages/@react-aria/menu/intl/ar-AE.json","packages/@react-aria/menu/intl/bg-BG.json","packages/@react-aria/menu/intl/cs-CZ.json","packages/@react-aria/menu/intl/da-DK.json","packages/@react-aria/menu/intl/de-DE.json","packages/@react-aria/menu/intl/el-GR.json","packages/@react-aria/menu/intl/en-US.json","packages/@react-aria/menu/intl/es-ES.json","packages/@react-aria/menu/intl/et-EE.json","packages/@react-aria/menu/intl/fi-FI.json","packages/@react-aria/menu/intl/fr-FR.json","packages/@react-aria/menu/intl/he-IL.json","packages/@react-aria/menu/intl/hr-HR.json","packages/@react-aria/menu/intl/hu-HU.json","packages/@react-aria/menu/intl/it-IT.json","packages/@react-aria/menu/intl/ja-JP.json","packages/@react-aria/menu/intl/ko-KR.json","packages/@react-aria/menu/intl/lt-LT.json","packages/@react-aria/menu/intl/lv-LV.json","packages/@react-aria/menu/intl/nb-NO.json","packages/@react-aria/menu/intl/nl-NL.json","packages/@react-aria/menu/intl/pl-PL.json","packages/@react-aria/menu/intl/pt-BR.json","packages/@react-aria/menu/intl/pt-PT.json","packages/@react-aria/menu/intl/ro-RO.json","packages/@react-aria/menu/intl/ru-RU.json","packages/@react-aria/menu/intl/sk-SK.json","packages/@react-aria/menu/intl/sl-SI.json","packages/@react-aria/menu/intl/sr-SP.json","packages/@react-aria/menu/intl/sv-SE.json","packages/@react-aria/menu/intl/tr-TR.json","packages/@react-aria/menu/intl/uk-UA.json","packages/@react-aria/menu/intl/zh-CN.json","packages/@react-aria/menu/intl/zh-TW.json","packages/@react-aria/menu/src/useMenu.ts","packages/@react-aria/menu/src/useMenuItem.ts","packages/@react-aria/menu/src/useMenuSection.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport {useMenuTrigger} from './useMenuTrigger';\nexport {useMenu} from './useMenu';\nexport {useMenuItem} from './useMenuItem';\nexport {useMenuSection} from './useMenuSection';\n\nexport type {AriaMenuProps} from '@react-types/menu';\nexport type {AriaMenuTriggerProps, MenuTriggerAria} from './useMenuTrigger';\nexport type {AriaMenuOptions, MenuAria} from './useMenu';\nexport type {AriaMenuItemProps, MenuItemAria} from './useMenuItem';\nexport type {AriaMenuSectionProps, MenuSectionAria} from './useMenuSection';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {AriaMenuOptions} from './useMenu';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {MenuTriggerState} from '@react-stately/menu';\nimport {MenuTriggerType} from '@react-types/menu';\nimport {RefObject} from 'react';\nimport {useId} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useLongPress} from '@react-aria/interactions';\nimport {useOverlayTrigger} from '@react-aria/overlays';\n\nexport interface AriaMenuTriggerProps {\n /** The type of menu that the menu trigger opens. */\n type?: 'menu' | 'listbox',\n /** Whether menu trigger is disabled. */\n isDisabled?: boolean,\n /** How menu is triggered. */\n trigger?: MenuTriggerType\n}\n\nexport interface MenuTriggerAria<T> {\n /** Props for the menu trigger element. */\n menuTriggerProps: AriaButtonProps,\n\n /** Props for the menu. */\n menuProps: AriaMenuOptions<T>\n}\n\n/**\n * Provides the behavior and accessibility implementation for a menu trigger.\n * @param props - Props for the menu trigger.\n * @param state - State for the menu trigger.\n */\nexport function useMenuTrigger<T>(props: AriaMenuTriggerProps, state: MenuTriggerState, ref: RefObject<Element>): MenuTriggerAria<T> {\n let {\n type = 'menu' as AriaMenuTriggerProps['type'],\n isDisabled,\n trigger = 'press'\n } = props;\n\n let menuTriggerId = useId();\n let {triggerProps, overlayProps} = useOverlayTrigger({type}, state, ref);\n\n let onKeyDown = (e) => {\n if (isDisabled) {\n return;\n }\n\n if (trigger === 'longPress' && !e.altKey) {\n return;\n }\n\n if (ref && ref.current) {\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (trigger === 'longPress') {\n return;\n }\n // fallthrough\n case 'ArrowDown':\n // Stop propagation, unless it would already be handled by useKeyboard.\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('first');\n break;\n case 'ArrowUp':\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('last');\n break;\n }\n }\n };\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages);\n let {longPressProps} = useLongPress({\n isDisabled: isDisabled || trigger !== 'longPress',\n accessibilityDescription: stringFormatter.format('longPressMessage'),\n onLongPressStart() {\n state.close();\n },\n onLongPress() {\n state.open('first');\n }\n });\n\n let pressProps = {\n onPressStart(e) {\n // For consistency with native, open the menu on mouse/key down, but touch up.\n if (e.pointerType !== 'touch' && e.pointerType !== 'keyboard' && !isDisabled) {\n // If opened with a screen reader, auto focus the first item.\n // Otherwise, the menu itself will be focused.\n state.toggle(e.pointerType === 'virtual' ? 'first' : null);\n }\n },\n onPress(e) {\n if (e.pointerType === 'touch' && !isDisabled) {\n state.toggle();\n }\n }\n };\n\n // omit onPress from triggerProps since we override it above.\n delete triggerProps.onPress;\n\n return {\n menuTriggerProps: {\n ...triggerProps,\n ...(trigger === 'press' ? pressProps : longPressProps),\n id: menuTriggerId,\n onKeyDown\n },\n menuProps: {\n ...overlayProps,\n 'aria-labelledby': menuTriggerId,\n autoFocus: state.focusStrategy || true,\n onClose: state.close\n }\n };\n}\n","const _temp0 = require(\"./ar-AE.json\");\nconst _temp1 = require(\"./bg-BG.json\");\nconst _temp2 = require(\"./cs-CZ.json\");\nconst _temp3 = require(\"./da-DK.json\");\nconst _temp4 = require(\"./de-DE.json\");\nconst _temp5 = require(\"./el-GR.json\");\nconst _temp6 = require(\"./en-US.json\");\nconst _temp7 = require(\"./es-ES.json\");\nconst _temp8 = require(\"./et-EE.json\");\nconst _temp9 = require(\"./fi-FI.json\");\nconst _temp10 = require(\"./fr-FR.json\");\nconst _temp11 = require(\"./he-IL.json\");\nconst _temp12 = require(\"./hr-HR.json\");\nconst _temp13 = require(\"./hu-HU.json\");\nconst _temp14 = require(\"./it-IT.json\");\nconst _temp15 = require(\"./ja-JP.json\");\nconst _temp16 = require(\"./ko-KR.json\");\nconst _temp17 = require(\"./lt-LT.json\");\nconst _temp18 = require(\"./lv-LV.json\");\nconst _temp19 = require(\"./nb-NO.json\");\nconst _temp20 = require(\"./nl-NL.json\");\nconst _temp21 = require(\"./pl-PL.json\");\nconst _temp22 = require(\"./pt-BR.json\");\nconst _temp23 = require(\"./pt-PT.json\");\nconst _temp24 = require(\"./ro-RO.json\");\nconst _temp25 = require(\"./ru-RU.json\");\nconst _temp26 = require(\"./sk-SK.json\");\nconst _temp27 = require(\"./sl-SI.json\");\nconst _temp28 = require(\"./sr-SP.json\");\nconst _temp29 = require(\"./sv-SE.json\");\nconst _temp30 = require(\"./tr-TR.json\");\nconst _temp31 = require(\"./uk-UA.json\");\nconst _temp32 = require(\"./zh-CN.json\");\nconst _temp33 = require(\"./zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"longPressMessage\": \"اضغط مطولاً أو اضغط على Alt + السهم لأسفل لفتح القائمة\"\n}\n","{\n \"longPressMessage\": \"Натиснете продължително или натиснете Alt+ стрелка надолу, за да отворите менюто\"\n}\n","{\n \"longPressMessage\": \"Dlouhým stiskem nebo stisknutím kláves Alt + šipka dolů otevřete nabídku\"\n}\n","{\n \"longPressMessage\": \"Langt tryk eller tryk på Alt + pil ned for at åbne menuen\"\n}\n","{\n \"longPressMessage\": \"Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen\"\n}\n","{\n \"longPressMessage\": \"Πιέστε παρατεταμένα ή πατήστε Alt + κάτω βέλος για να ανοίξετε το μενού\"\n}\n","{\n \"longPressMessage\": \"Long press or press Alt + ArrowDown to open menu\"\n}\n","{\n \"longPressMessage\": \"Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú\"\n}\n","{\n \"longPressMessage\": \"Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool\"\n}\n","{\n \"longPressMessage\": \"Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli\"\n}\n","{\n \"longPressMessage\": \"Appuyez de manière prolongée ou appuyez sur Alt + Flèche vers le bas pour ouvrir le menu.\"\n}\n","{\n \"longPressMessage\": \"לחץ לחיצה ארוכה או הקש Alt + ArrowDown כדי לפתוח את התפריט\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika\"\n}\n","{\n \"longPressMessage\": \"Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyíl gombot a menü megnyitásához\"\n}\n","{\n \"longPressMessage\": \"Premere a lungo o premere Alt + Freccia giù per aprire il menu\"\n}\n","{\n \"longPressMessage\": \"長押しまたは Alt+下矢印キーでメニューを開く\"\n}\n","{\n \"longPressMessage\": \"길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기\"\n}\n","{\n \"longPressMessage\": \"Norėdami atidaryti meniu, nuspaudę palaikykite arba paspauskite „Alt + ArrowDown“.\"\n}\n","{\n \"longPressMessage\": \"Lai atvērtu izvēlni, turiet nospiestu vai nospiediet taustiņu kombināciju Alt + lejupvērstā bultiņa\"\n}\n","{\n \"longPressMessage\": \"Langt trykk eller trykk Alt + PilNed for å åpne menyen\"\n}\n","{\n \"longPressMessage\": \"Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen\"\n}\n","{\n \"longPressMessage\": \"Naciśnij i przytrzymaj lub naciśnij klawisze Alt + Strzałka w dół, aby otworzyć menu\"\n}\n","{\n \"longPressMessage\": \"Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Apăsați lung sau apăsați pe Alt + săgeată în jos pentru a deschide meniul\"\n}\n","{\n \"longPressMessage\": \"Нажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню\"\n}\n","{\n \"longPressMessage\": \"Ponuku otvoríte dlhým stlačením alebo stlačením klávesu Alt + klávesu so šípkou nadol\"\n}\n","{\n \"longPressMessage\": \"Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puščica navzdol\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni\"\n}\n","{\n \"longPressMessage\": \"Håll nedtryckt eller tryck på Alt + pil nedåt för att öppna menyn\"\n}\n","{\n \"longPressMessage\": \"Menüyü açmak için uzun basın veya Alt + Aşağı Ok tuşuna basın\"\n}\n","{\n \"longPressMessage\": \"Довго або звичайно натисніть комбінацію клавіш Alt і стрілка вниз, щоб відкрити меню\"\n}\n","{\n \"longPressMessage\": \"长按或按 Alt + 向下方向键以打开菜单\"\n}\n","{\n \"longPressMessage\": \"長按或按 Alt+向下鍵以開啟功能表\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaMenuProps} from '@react-types/menu';\nimport {DOMAttributes, KeyboardDelegate} from '@react-types/shared';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {Key, RefObject} from 'react';\nimport {TreeState} from '@react-stately/tree';\nimport {useSelectableList} from '@react-aria/selection';\n\nexport interface MenuAria {\n /** Props for the menu element. */\n menuProps: DOMAttributes\n}\n\nexport interface AriaMenuOptions<T> extends Omit<AriaMenuProps<T>, 'children'> {\n /** Whether the menu uses virtual scrolling. */\n isVirtualized?: boolean,\n\n /**\n * An optional keyboard delegate implementation for type to select,\n * to override the default.\n */\n keyboardDelegate?: KeyboardDelegate\n}\n\ninterface MenuData {\n onClose?: () => void,\n onAction?: (key: Key) => void\n}\n\nexport const menuData = new WeakMap<TreeState<unknown>, MenuData>();\n\n/**\n * Provides the behavior and accessibility implementation for a menu component.\n * A menu displays a list of actions or options that a user can choose.\n * @param props - Props for the menu.\n * @param state - State for the menu, as returned by `useListState`.\n */\nexport function useMenu<T>(props: AriaMenuOptions<T>, state: TreeState<T>, ref: RefObject<HTMLElement>): MenuAria {\n let {\n shouldFocusWrap = true,\n ...otherProps\n } = props;\n\n if (!props['aria-label'] && !props['aria-labelledby']) {\n console.warn('An aria-label or aria-labelledby prop is required for accessibility.');\n }\n\n let domProps = filterDOMProps(props, {labelable: true});\n let {listProps} = useSelectableList({\n ...otherProps,\n ref,\n selectionManager: state.selectionManager,\n collection: state.collection,\n disabledKeys: state.disabledKeys,\n shouldFocusWrap\n });\n\n menuData.set(state, {\n onClose: props.onClose,\n onAction: props.onAction\n });\n\n return {\n menuProps: mergeProps(domProps, {\n role: 'menu',\n ...listProps,\n onKeyDown: (e) => {\n // don't clear the menu selected keys if the user is presses escape since escape closes the menu\n if (e.key !== 'Escape') {\n listProps.onKeyDown(e);\n }\n }\n })\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableElement, PressEvent} from '@react-types/shared';\nimport {focusSafely} from '@react-aria/focus';\nimport {getItemCount} from '@react-stately/collections';\nimport {isFocusVisible, useHover, useKeyboard, usePress} from '@react-aria/interactions';\nimport {Key, RefObject, useCallback, useRef} from 'react';\nimport {menuData} from './useMenu';\nimport {mergeProps, useEffectEvent, useLayoutEffect, useSlotId} from '@react-aria/utils';\nimport {TreeState} from '@react-stately/tree';\nimport {useLocale} from '@react-aria/i18n';\nimport {useSelectableItem} from '@react-aria/selection';\n\nexport interface MenuItemAria {\n /** Props for the menu item element. */\n menuItemProps: DOMAttributes,\n\n /** Props for the main text element inside the menu item. */\n labelProps: DOMAttributes,\n\n /** Props for the description text element inside the menu item, if any. */\n descriptionProps: DOMAttributes,\n\n /** Props for the keyboard shortcut text element inside the item, if any. */\n keyboardShortcutProps: DOMAttributes,\n\n /** Whether the item is currently focused. */\n isFocused: boolean,\n /** Whether the item is currently selected. */\n isSelected: boolean,\n /** Whether the item is currently in a pressed state. */\n isPressed: boolean,\n /** Whether the item is disabled. */\n isDisabled: boolean\n}\n\nexport interface AriaMenuItemProps {\n /**\n * Whether the menu item is disabled.\n * @deprecated - pass disabledKeys to useTreeState instead.\n */\n isDisabled?: boolean,\n\n /**\n * Whether the menu item is selected.\n * @deprecated - pass selectedKeys to useTreeState instead.\n */\n isSelected?: boolean,\n\n /** A screen reader only label for the menu item. */\n 'aria-label'?: string,\n\n /** The unique key for the menu item. */\n key?: Key,\n\n /**\n * Handler that is called when the menu should close after selecting an item.\n * @deprecated - pass to the menu instead.\n */\n onClose?: () => void,\n\n /**\n * Whether the menu should close when the menu item is selected.\n * @default true\n */\n closeOnSelect?: boolean,\n\n /** Whether the menu item is contained in a virtual scrolling menu. */\n isVirtualized?: boolean,\n\n /**\n * Handler that is called when the user activates the item.\n * @deprecated - pass to the menu instead.\n */\n onAction?: (key: Key) => void,\n\n /** What kind of popup the item opens. */\n 'aria-haspopup'?: 'menu' | 'dialog'\n}\n\n/**\n * Provides the behavior and accessibility implementation for an item in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the item.\n * @param state - State for the menu, as returned by `useTreeState`.\n */\nexport function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, ref: RefObject<FocusableElement>): MenuItemAria {\n let {\n key,\n closeOnSelect,\n isVirtualized,\n 'aria-haspopup': hasPopup\n } = props;\n let {direction} = useLocale();\n\n let isMenuDialogTrigger = state.collection.getItem(key).hasChildNodes;\n let isOpen = state.expandedKeys.has(key);\n\n let isDisabled = props.isDisabled ?? state.disabledKeys.has(key);\n let isSelected = props.isSelected ?? state.selectionManager.isSelected(key);\n\n let openTimeout = useRef<ReturnType<typeof setTimeout> | undefined>();\n let cancelOpenTimeout = useCallback(() => {\n if (openTimeout.current) {\n clearTimeout(openTimeout.current);\n openTimeout.current = undefined;\n }\n }, [openTimeout]);\n\n let onSubmenuOpen = useEffectEvent(() => {\n cancelOpenTimeout();\n if (!state.expandedKeys.has(key)) {\n state.toggleKey(key);\n }\n });\n\n useLayoutEffect(() => {\n return () => cancelOpenTimeout();\n }, [cancelOpenTimeout]);\n\n let data = menuData.get(state);\n let onClose = props.onClose || data.onClose;\n let onActionMenuDialogTrigger = useCallback(() => {\n onSubmenuOpen();\n // will need to disable this lint rule when using useEffectEvent https://react.dev/learn/separating-events-from-effects#logic-inside-effects-is-reactive\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n let onAction = isMenuDialogTrigger ? onActionMenuDialogTrigger : props.onAction || data.onAction;\n\n let role = 'menuitem';\n if (state.selectionManager.selectionMode === 'single') {\n role = 'menuitemradio';\n } else if (state.selectionManager.selectionMode === 'multiple') {\n role = 'menuitemcheckbox';\n }\n\n let labelId = useSlotId();\n let descriptionId = useSlotId();\n let keyboardId = useSlotId();\n\n let ariaProps = {\n 'aria-disabled': isDisabled || undefined,\n role,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': labelId,\n 'aria-describedby': [descriptionId, keyboardId].filter(Boolean).join(' ') || undefined\n };\n\n if (state.selectionManager.selectionMode !== 'none') {\n ariaProps['aria-checked'] = isSelected;\n }\n\n if (isVirtualized) {\n ariaProps['aria-posinset'] = state.collection.getItem(key).index;\n ariaProps['aria-setsize'] = getItemCount(state.collection);\n }\n\n if (hasPopup != null) {\n ariaProps['aria-haspopup'] = hasPopup;\n ariaProps['aria-expanded'] = isOpen ? 'true' : 'false';\n }\n\n let onPressStart = (e: PressEvent) => {\n if (e.pointerType === 'keyboard' && onAction) {\n onAction(key);\n }\n };\n\n let onPressUp = (e: PressEvent) => {\n if (e.pointerType !== 'keyboard') {\n if (onAction) {\n onAction(key);\n }\n\n // Pressing a menu item should close by default in single selection mode but not multiple\n // selection mode, except if overridden by the closeOnSelect prop.\n if (!isMenuDialogTrigger && onClose && (closeOnSelect ?? state.selectionManager.selectionMode !== 'multiple')) {\n onClose();\n }\n }\n };\n\n let {itemProps, isFocused} = useSelectableItem({\n selectionManager: state.selectionManager,\n key,\n ref,\n shouldSelectOnPressUp: true,\n allowsDifferentPressOrigin: true\n });\n\n let {pressProps, isPressed} = usePress({onPressStart, onPressUp, isDisabled});\n let {hoverProps} = useHover({\n isDisabled,\n onHoverStart() {\n if (!isFocusVisible()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(key);\n // focus immediately so that a focus scope opened on hover has the correct restore node\n let isFocused = key === state.selectionManager.focusedKey;\n if (isFocused && state.selectionManager.isFocused && document.activeElement !== ref.current) {\n if (state.expandedKeys.size > 0 && !state.expandedKeys.has(key)) {\n for (let expandedKey of state.expandedKeys) {\n state.toggleKey(expandedKey);\n }\n }\n focusSafely(ref.current);\n }\n }\n },\n onHoverChange: isHovered => {\n if (isHovered && isMenuDialogTrigger) {\n if (!openTimeout.current) {\n openTimeout.current = setTimeout(() => {\n onSubmenuOpen();\n }, 200);\n }\n } else if (!isHovered) {\n cancelOpenTimeout();\n }\n }\n });\n\n let {keyboardProps} = useKeyboard({\n onKeyDown: (e) => {\n // Ignore repeating events, which may have started on the menu trigger before moving\n // focus to the menu item. We want to wait for a second complete key press sequence.\n if (e.repeat) {\n e.continuePropagation();\n return;\n }\n\n switch (e.key) {\n case ' ':\n if (!isDisabled && state.selectionManager.selectionMode === 'none' && !isMenuDialogTrigger && closeOnSelect !== false && onClose) {\n onClose();\n }\n break;\n case 'Enter':\n // The Enter key should always close on select, except if overridden.\n if (!isDisabled && closeOnSelect !== false && !isMenuDialogTrigger && onClose) {\n onClose();\n }\n break;\n case 'ArrowRight':\n if (isMenuDialogTrigger && direction === 'ltr') {\n onSubmenuOpen();\n } else {\n e.continuePropagation();\n }\n break;\n case 'ArrowLeft':\n if (isMenuDialogTrigger && direction === 'rtl') {\n onSubmenuOpen();\n } else {\n e.continuePropagation();\n }\n break;\n default:\n e.continuePropagation();\n break;\n }\n }\n });\n\n return {\n menuItemProps: {\n ...ariaProps,\n ...mergeProps(itemProps, pressProps, hoverProps, keyboardProps)\n },\n labelProps: {\n id: labelId\n },\n descriptionProps: {\n id: descriptionId\n },\n keyboardShortcutProps: {\n id: keyboardId\n },\n isFocused,\n isSelected,\n isPressed,\n isDisabled\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {ReactNode} from 'react';\nimport {useId} from '@react-aria/utils';\n\nexport interface AriaMenuSectionProps {\n /** The heading for the section. */\n heading?: ReactNode,\n /** An accessibility label for the section. Required if `heading` is not present. */\n 'aria-label'?: string\n}\n\nexport interface MenuSectionAria {\n /** Props for the wrapper list item. */\n itemProps: DOMAttributes,\n\n /** Props for the heading element, if any. */\n headingProps: DOMAttributes,\n\n /** Props for the group element. */\n groupProps: DOMAttributes\n}\n\n/**\n * Provides the behavior and accessibility implementation for a section in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the section.\n */\nexport function useMenuSection(props: AriaMenuSectionProps): MenuSectionAria {\n let {heading, 'aria-label': ariaLabel} = props;\n let headingId = useId();\n\n return {\n itemProps: {\n role: 'presentation'\n },\n headingProps: heading ? {\n // Techincally, menus cannot contain headings according to ARIA.\n // We hide the heading from assistive technology, and only use it\n // as a label for the nested group.\n id: headingId,\n 'aria-hidden': true\n } : {},\n groupProps: {\n role: 'group',\n 'aria-label': ariaLabel,\n 'aria-labelledby': heading ? headingId : undefined\n }\n };\n}\n"],"names":[],"version":3,"file":"main.js.map"}
package/dist/module.js CHANGED
@@ -1,9 +1,11 @@
1
- import {useId as $1Hnir$useId, filterDOMProps as $1Hnir$filterDOMProps, mergeProps as $1Hnir$mergeProps, useSlotId as $1Hnir$useSlotId} from "@react-aria/utils";
2
- import {useLocalizedStringFormatter as $1Hnir$useLocalizedStringFormatter} from "@react-aria/i18n";
3
- import {useLongPress as $1Hnir$useLongPress, usePress as $1Hnir$usePress, useHover as $1Hnir$useHover, isFocusVisible as $1Hnir$isFocusVisible} from "@react-aria/interactions";
1
+ import {useId as $1Hnir$useId, filterDOMProps as $1Hnir$filterDOMProps, mergeProps as $1Hnir$mergeProps, useEffectEvent as $1Hnir$useEffectEvent, useLayoutEffect as $1Hnir$useLayoutEffect, useSlotId as $1Hnir$useSlotId} from "@react-aria/utils";
2
+ import {useLocalizedStringFormatter as $1Hnir$useLocalizedStringFormatter, useLocale as $1Hnir$useLocale} from "@react-aria/i18n";
3
+ import {useLongPress as $1Hnir$useLongPress, usePress as $1Hnir$usePress, useHover as $1Hnir$useHover, isFocusVisible as $1Hnir$isFocusVisible, useKeyboard as $1Hnir$useKeyboard} from "@react-aria/interactions";
4
4
  import {useOverlayTrigger as $1Hnir$useOverlayTrigger} from "@react-aria/overlays";
5
5
  import {useSelectableList as $1Hnir$useSelectableList, useSelectableItem as $1Hnir$useSelectableItem} from "@react-aria/selection";
6
+ import {focusSafely as $1Hnir$focusSafely} from "@react-aria/focus";
6
7
  import {getItemCount as $1Hnir$getItemCount} from "@react-stately/collections";
8
+ import {useRef as $1Hnir$useRef, useCallback as $1Hnir$useCallback} from "react";
7
9
 
8
10
  function $parcel$interopDefault(a) {
9
11
  return a && a.__esModule ? a.default : a;
@@ -402,15 +404,44 @@ function $d5336fe17ce95402$export$38eaa17faae8f579(props, state, ref) {
402
404
 
403
405
 
404
406
 
407
+
408
+
409
+
405
410
  function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
406
- let { key: key , closeOnSelect: closeOnSelect , isVirtualized: isVirtualized } = props;
411
+ let { key: key , closeOnSelect: closeOnSelect , isVirtualized: isVirtualized , "aria-haspopup": hasPopup } = props;
412
+ let { direction: direction } = (0, $1Hnir$useLocale)();
413
+ let isMenuDialogTrigger = state.collection.getItem(key).hasChildNodes;
414
+ let isOpen = state.expandedKeys.has(key);
407
415
  var _props_isDisabled;
408
416
  let isDisabled = (_props_isDisabled = props.isDisabled) !== null && _props_isDisabled !== void 0 ? _props_isDisabled : state.disabledKeys.has(key);
409
417
  var _props_isSelected;
410
418
  let isSelected = (_props_isSelected = props.isSelected) !== null && _props_isSelected !== void 0 ? _props_isSelected : state.selectionManager.isSelected(key);
419
+ let openTimeout = (0, $1Hnir$useRef)();
420
+ let cancelOpenTimeout = (0, $1Hnir$useCallback)(()=>{
421
+ if (openTimeout.current) {
422
+ clearTimeout(openTimeout.current);
423
+ openTimeout.current = undefined;
424
+ }
425
+ }, [
426
+ openTimeout
427
+ ]);
428
+ let onSubmenuOpen = (0, $1Hnir$useEffectEvent)(()=>{
429
+ cancelOpenTimeout();
430
+ if (!state.expandedKeys.has(key)) state.toggleKey(key);
431
+ });
432
+ (0, $1Hnir$useLayoutEffect)(()=>{
433
+ return ()=>cancelOpenTimeout();
434
+ }, [
435
+ cancelOpenTimeout
436
+ ]);
411
437
  let data = (0, $d5336fe17ce95402$export$6f49b4016bfc8d56).get(state);
412
438
  let onClose = props.onClose || data.onClose;
413
- let onAction = props.onAction || data.onAction;
439
+ let onActionMenuDialogTrigger = (0, $1Hnir$useCallback)(()=>{
440
+ onSubmenuOpen();
441
+ // will need to disable this lint rule when using useEffectEvent https://react.dev/learn/separating-events-from-effects#logic-inside-effects-is-reactive
442
+ // eslint-disable-next-line react-hooks/exhaustive-deps
443
+ }, []);
444
+ let onAction = isMenuDialogTrigger ? onActionMenuDialogTrigger : props.onAction || data.onAction;
414
445
  let role = "menuitem";
415
446
  if (state.selectionManager.selectionMode === "single") role = "menuitemradio";
416
447
  else if (state.selectionManager.selectionMode === "multiple") role = "menuitemcheckbox";
@@ -432,20 +463,10 @@ function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
432
463
  ariaProps["aria-posinset"] = state.collection.getItem(key).index;
433
464
  ariaProps["aria-setsize"] = (0, $1Hnir$getItemCount)(state.collection);
434
465
  }
435
- let onKeyDown = (e)=>{
436
- // Ignore repeating events, which may have started on the menu trigger before moving
437
- // focus to the menu item. We want to wait for a second complete key press sequence.
438
- if (e.repeat) return;
439
- switch(e.key){
440
- case " ":
441
- if (!isDisabled && state.selectionManager.selectionMode === "none" && closeOnSelect !== false && onClose) onClose();
442
- break;
443
- case "Enter":
444
- // The Enter key should always close on select, except if overridden.
445
- if (!isDisabled && closeOnSelect !== false && onClose) onClose();
446
- break;
447
- }
448
- };
466
+ if (hasPopup != null) {
467
+ ariaProps["aria-haspopup"] = hasPopup;
468
+ ariaProps["aria-expanded"] = isOpen ? "true" : "false";
469
+ }
449
470
  let onPressStart = (e)=>{
450
471
  if (e.pointerType === "keyboard" && onAction) onAction(key);
451
472
  };
@@ -454,7 +475,7 @@ function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
454
475
  if (onAction) onAction(key);
455
476
  // Pressing a menu item should close by default in single selection mode but not multiple
456
477
  // selection mode, except if overridden by the closeOnSelect prop.
457
- if (onClose && (closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : state.selectionManager.selectionMode !== "multiple")) onClose();
478
+ if (!isMenuDialogTrigger && onClose && (closeOnSelect !== null && closeOnSelect !== void 0 ? closeOnSelect : state.selectionManager.selectionMode !== "multiple")) onClose();
458
479
  }
459
480
  };
460
481
  let { itemProps: itemProps , isFocused: isFocused } = (0, $1Hnir$useSelectableItem)({
@@ -475,15 +496,56 @@ function $a2e5df62f93c7633$export$9d32628fc2aea7da(props, state, ref) {
475
496
  if (!(0, $1Hnir$isFocusVisible)()) {
476
497
  state.selectionManager.setFocused(true);
477
498
  state.selectionManager.setFocusedKey(key);
499
+ // focus immediately so that a focus scope opened on hover has the correct restore node
500
+ let isFocused = key === state.selectionManager.focusedKey;
501
+ if (isFocused && state.selectionManager.isFocused && document.activeElement !== ref.current) {
502
+ if (state.expandedKeys.size > 0 && !state.expandedKeys.has(key)) for (let expandedKey of state.expandedKeys)state.toggleKey(expandedKey);
503
+ (0, $1Hnir$focusSafely)(ref.current);
504
+ }
505
+ }
506
+ },
507
+ onHoverChange: (isHovered)=>{
508
+ if (isHovered && isMenuDialogTrigger) {
509
+ if (!openTimeout.current) openTimeout.current = setTimeout(()=>{
510
+ onSubmenuOpen();
511
+ }, 200);
512
+ } else if (!isHovered) cancelOpenTimeout();
513
+ }
514
+ });
515
+ let { keyboardProps: keyboardProps } = (0, $1Hnir$useKeyboard)({
516
+ onKeyDown: (e)=>{
517
+ // Ignore repeating events, which may have started on the menu trigger before moving
518
+ // focus to the menu item. We want to wait for a second complete key press sequence.
519
+ if (e.repeat) {
520
+ e.continuePropagation();
521
+ return;
522
+ }
523
+ switch(e.key){
524
+ case " ":
525
+ if (!isDisabled && state.selectionManager.selectionMode === "none" && !isMenuDialogTrigger && closeOnSelect !== false && onClose) onClose();
526
+ break;
527
+ case "Enter":
528
+ // The Enter key should always close on select, except if overridden.
529
+ if (!isDisabled && closeOnSelect !== false && !isMenuDialogTrigger && onClose) onClose();
530
+ break;
531
+ case "ArrowRight":
532
+ if (isMenuDialogTrigger && direction === "ltr") onSubmenuOpen();
533
+ else e.continuePropagation();
534
+ break;
535
+ case "ArrowLeft":
536
+ if (isMenuDialogTrigger && direction === "rtl") onSubmenuOpen();
537
+ else e.continuePropagation();
538
+ break;
539
+ default:
540
+ e.continuePropagation();
541
+ break;
478
542
  }
479
543
  }
480
544
  });
481
545
  return {
482
546
  menuItemProps: {
483
547
  ...ariaProps,
484
- ...(0, $1Hnir$mergeProps)(itemProps, pressProps, hoverProps, {
485
- onKeyDown: onKeyDown
486
- })
548
+ ...(0, $1Hnir$mergeProps)(itemProps, pressProps, hoverProps, keyboardProps)
487
549
  },
488
550
  labelProps: {
489
551
  id: labelId
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-aria/menu/src/index.ts","packages/@react-aria/menu/src/useMenuTrigger.ts","packages/@react-aria/menu/intl/*.js","packages/@react-aria/menu/intl/ar-AE.json","packages/@react-aria/menu/intl/bg-BG.json","packages/@react-aria/menu/intl/cs-CZ.json","packages/@react-aria/menu/intl/da-DK.json","packages/@react-aria/menu/intl/de-DE.json","packages/@react-aria/menu/intl/el-GR.json","packages/@react-aria/menu/intl/en-US.json","packages/@react-aria/menu/intl/es-ES.json","packages/@react-aria/menu/intl/et-EE.json","packages/@react-aria/menu/intl/fi-FI.json","packages/@react-aria/menu/intl/fr-FR.json","packages/@react-aria/menu/intl/he-IL.json","packages/@react-aria/menu/intl/hr-HR.json","packages/@react-aria/menu/intl/hu-HU.json","packages/@react-aria/menu/intl/it-IT.json","packages/@react-aria/menu/intl/ja-JP.json","packages/@react-aria/menu/intl/ko-KR.json","packages/@react-aria/menu/intl/lt-LT.json","packages/@react-aria/menu/intl/lv-LV.json","packages/@react-aria/menu/intl/nb-NO.json","packages/@react-aria/menu/intl/nl-NL.json","packages/@react-aria/menu/intl/pl-PL.json","packages/@react-aria/menu/intl/pt-BR.json","packages/@react-aria/menu/intl/pt-PT.json","packages/@react-aria/menu/intl/ro-RO.json","packages/@react-aria/menu/intl/ru-RU.json","packages/@react-aria/menu/intl/sk-SK.json","packages/@react-aria/menu/intl/sl-SI.json","packages/@react-aria/menu/intl/sr-SP.json","packages/@react-aria/menu/intl/sv-SE.json","packages/@react-aria/menu/intl/tr-TR.json","packages/@react-aria/menu/intl/uk-UA.json","packages/@react-aria/menu/intl/zh-CN.json","packages/@react-aria/menu/intl/zh-TW.json","packages/@react-aria/menu/src/useMenu.ts","packages/@react-aria/menu/src/useMenuItem.ts","packages/@react-aria/menu/src/useMenuSection.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport {useMenuTrigger} from './useMenuTrigger';\nexport {useMenu} from './useMenu';\nexport {useMenuItem} from './useMenuItem';\nexport {useMenuSection} from './useMenuSection';\n\nexport type {AriaMenuProps} from '@react-types/menu';\nexport type {AriaMenuTriggerProps, MenuTriggerAria} from './useMenuTrigger';\nexport type {AriaMenuOptions, MenuAria} from './useMenu';\nexport type {AriaMenuItemProps, MenuItemAria} from './useMenuItem';\nexport type {AriaMenuSectionProps, MenuSectionAria} from './useMenuSection';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {AriaMenuOptions} from './useMenu';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {MenuTriggerState} from '@react-stately/menu';\nimport {MenuTriggerType} from '@react-types/menu';\nimport {RefObject} from 'react';\nimport {useId} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useLongPress} from '@react-aria/interactions';\nimport {useOverlayTrigger} from '@react-aria/overlays';\n\nexport interface AriaMenuTriggerProps {\n /** The type of menu that the menu trigger opens. */\n type?: 'menu' | 'listbox',\n /** Whether menu trigger is disabled. */\n isDisabled?: boolean,\n /** How menu is triggered. */\n trigger?: MenuTriggerType\n}\n\nexport interface MenuTriggerAria<T> {\n /** Props for the menu trigger element. */\n menuTriggerProps: AriaButtonProps,\n\n /** Props for the menu. */\n menuProps: AriaMenuOptions<T>\n}\n\n/**\n * Provides the behavior and accessibility implementation for a menu trigger.\n * @param props - Props for the menu trigger.\n * @param state - State for the menu trigger.\n */\nexport function useMenuTrigger<T>(props: AriaMenuTriggerProps, state: MenuTriggerState, ref: RefObject<Element>): MenuTriggerAria<T> {\n let {\n type = 'menu' as AriaMenuTriggerProps['type'],\n isDisabled,\n trigger = 'press'\n } = props;\n\n let menuTriggerId = useId();\n let {triggerProps, overlayProps} = useOverlayTrigger({type}, state, ref);\n\n let onKeyDown = (e) => {\n if (isDisabled) {\n return;\n }\n\n if (trigger === 'longPress' && !e.altKey) {\n return;\n }\n\n if (ref && ref.current) {\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (trigger === 'longPress') {\n return;\n }\n // fallthrough\n case 'ArrowDown':\n // Stop propagation, unless it would already be handled by useKeyboard.\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('first');\n break;\n case 'ArrowUp':\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('last');\n break;\n }\n }\n };\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages);\n let {longPressProps} = useLongPress({\n isDisabled: isDisabled || trigger !== 'longPress',\n accessibilityDescription: stringFormatter.format('longPressMessage'),\n onLongPressStart() {\n state.close();\n },\n onLongPress() {\n state.open('first');\n }\n });\n\n let pressProps = {\n onPressStart(e) {\n // For consistency with native, open the menu on mouse/key down, but touch up.\n if (e.pointerType !== 'touch' && e.pointerType !== 'keyboard' && !isDisabled) {\n // If opened with a screen reader, auto focus the first item.\n // Otherwise, the menu itself will be focused.\n state.toggle(e.pointerType === 'virtual' ? 'first' : null);\n }\n },\n onPress(e) {\n if (e.pointerType === 'touch' && !isDisabled) {\n state.toggle();\n }\n }\n };\n\n // omit onPress from triggerProps since we override it above.\n delete triggerProps.onPress;\n\n return {\n menuTriggerProps: {\n ...triggerProps,\n ...(trigger === 'press' ? pressProps : longPressProps),\n id: menuTriggerId,\n onKeyDown\n },\n menuProps: {\n ...overlayProps,\n 'aria-labelledby': menuTriggerId,\n autoFocus: state.focusStrategy || true,\n onClose: state.close\n }\n };\n}\n","const _temp0 = require(\"./ar-AE.json\");\nconst _temp1 = require(\"./bg-BG.json\");\nconst _temp2 = require(\"./cs-CZ.json\");\nconst _temp3 = require(\"./da-DK.json\");\nconst _temp4 = require(\"./de-DE.json\");\nconst _temp5 = require(\"./el-GR.json\");\nconst _temp6 = require(\"./en-US.json\");\nconst _temp7 = require(\"./es-ES.json\");\nconst _temp8 = require(\"./et-EE.json\");\nconst _temp9 = require(\"./fi-FI.json\");\nconst _temp10 = require(\"./fr-FR.json\");\nconst _temp11 = require(\"./he-IL.json\");\nconst _temp12 = require(\"./hr-HR.json\");\nconst _temp13 = require(\"./hu-HU.json\");\nconst _temp14 = require(\"./it-IT.json\");\nconst _temp15 = require(\"./ja-JP.json\");\nconst _temp16 = require(\"./ko-KR.json\");\nconst _temp17 = require(\"./lt-LT.json\");\nconst _temp18 = require(\"./lv-LV.json\");\nconst _temp19 = require(\"./nb-NO.json\");\nconst _temp20 = require(\"./nl-NL.json\");\nconst _temp21 = require(\"./pl-PL.json\");\nconst _temp22 = require(\"./pt-BR.json\");\nconst _temp23 = require(\"./pt-PT.json\");\nconst _temp24 = require(\"./ro-RO.json\");\nconst _temp25 = require(\"./ru-RU.json\");\nconst _temp26 = require(\"./sk-SK.json\");\nconst _temp27 = require(\"./sl-SI.json\");\nconst _temp28 = require(\"./sr-SP.json\");\nconst _temp29 = require(\"./sv-SE.json\");\nconst _temp30 = require(\"./tr-TR.json\");\nconst _temp31 = require(\"./uk-UA.json\");\nconst _temp32 = require(\"./zh-CN.json\");\nconst _temp33 = require(\"./zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"longPressMessage\": \"اضغط مطولاً أو اضغط على Alt + السهم لأسفل لفتح القائمة\"\n}\n","{\n \"longPressMessage\": \"Натиснете продължително или натиснете Alt+ стрелка надолу, за да отворите менюто\"\n}\n","{\n \"longPressMessage\": \"Dlouhým stiskem nebo stisknutím kláves Alt + šipka dolů otevřete nabídku\"\n}\n","{\n \"longPressMessage\": \"Langt tryk eller tryk på Alt + pil ned for at åbne menuen\"\n}\n","{\n \"longPressMessage\": \"Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen\"\n}\n","{\n \"longPressMessage\": \"Πιέστε παρατεταμένα ή πατήστε Alt + κάτω βέλος για να ανοίξετε το μενού\"\n}\n","{\n \"longPressMessage\": \"Long press or press Alt + ArrowDown to open menu\"\n}\n","{\n \"longPressMessage\": \"Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú\"\n}\n","{\n \"longPressMessage\": \"Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool\"\n}\n","{\n \"longPressMessage\": \"Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli\"\n}\n","{\n \"longPressMessage\": \"Appuyez de manière prolongée ou appuyez sur Alt + Flèche vers le bas pour ouvrir le menu.\"\n}\n","{\n \"longPressMessage\": \"לחץ לחיצה ארוכה או הקש Alt + ArrowDown כדי לפתוח את התפריט\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika\"\n}\n","{\n \"longPressMessage\": \"Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyíl gombot a menü megnyitásához\"\n}\n","{\n \"longPressMessage\": \"Premere a lungo o premere Alt + Freccia giù per aprire il menu\"\n}\n","{\n \"longPressMessage\": \"長押しまたは Alt+下矢印キーでメニューを開く\"\n}\n","{\n \"longPressMessage\": \"길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기\"\n}\n","{\n \"longPressMessage\": \"Norėdami atidaryti meniu, nuspaudę palaikykite arba paspauskite „Alt + ArrowDown“.\"\n}\n","{\n \"longPressMessage\": \"Lai atvērtu izvēlni, turiet nospiestu vai nospiediet taustiņu kombināciju Alt + lejupvērstā bultiņa\"\n}\n","{\n \"longPressMessage\": \"Langt trykk eller trykk Alt + PilNed for å åpne menyen\"\n}\n","{\n \"longPressMessage\": \"Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen\"\n}\n","{\n \"longPressMessage\": \"Naciśnij i przytrzymaj lub naciśnij klawisze Alt + Strzałka w dół, aby otworzyć menu\"\n}\n","{\n \"longPressMessage\": \"Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Apăsați lung sau apăsați pe Alt + săgeată în jos pentru a deschide meniul\"\n}\n","{\n \"longPressMessage\": \"Нажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню\"\n}\n","{\n \"longPressMessage\": \"Ponuku otvoríte dlhým stlačením alebo stlačením klávesu Alt + klávesu so šípkou nadol\"\n}\n","{\n \"longPressMessage\": \"Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puščica navzdol\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni\"\n}\n","{\n \"longPressMessage\": \"Håll nedtryckt eller tryck på Alt + pil nedåt för att öppna menyn\"\n}\n","{\n \"longPressMessage\": \"Menüyü açmak için uzun basın veya Alt + Aşağı Ok tuşuna basın\"\n}\n","{\n \"longPressMessage\": \"Довго або звичайно натисніть комбінацію клавіш Alt і стрілка вниз, щоб відкрити меню\"\n}\n","{\n \"longPressMessage\": \"长按或按 Alt + 向下方向键以打开菜单\"\n}\n","{\n \"longPressMessage\": \"長按或按 Alt+向下鍵以開啟功能表\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaMenuProps} from '@react-types/menu';\nimport {DOMAttributes, KeyboardDelegate} from '@react-types/shared';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {Key, RefObject} from 'react';\nimport {TreeState} from '@react-stately/tree';\nimport {useSelectableList} from '@react-aria/selection';\n\nexport interface MenuAria {\n /** Props for the menu element. */\n menuProps: DOMAttributes\n}\n\nexport interface AriaMenuOptions<T> extends Omit<AriaMenuProps<T>, 'children'> {\n /** Whether the menu uses virtual scrolling. */\n isVirtualized?: boolean,\n\n /**\n * An optional keyboard delegate implementation for type to select,\n * to override the default.\n */\n keyboardDelegate?: KeyboardDelegate\n}\n\ninterface MenuData {\n onClose?: () => void,\n onAction?: (key: Key) => void\n}\n\nexport const menuData = new WeakMap<TreeState<unknown>, MenuData>();\n\n/**\n * Provides the behavior and accessibility implementation for a menu component.\n * A menu displays a list of actions or options that a user can choose.\n * @param props - Props for the menu.\n * @param state - State for the menu, as returned by `useListState`.\n */\nexport function useMenu<T>(props: AriaMenuOptions<T>, state: TreeState<T>, ref: RefObject<HTMLElement>): MenuAria {\n let {\n shouldFocusWrap = true,\n ...otherProps\n } = props;\n\n if (!props['aria-label'] && !props['aria-labelledby']) {\n console.warn('An aria-label or aria-labelledby prop is required for accessibility.');\n }\n\n let domProps = filterDOMProps(props, {labelable: true});\n let {listProps} = useSelectableList({\n ...otherProps,\n ref,\n selectionManager: state.selectionManager,\n collection: state.collection,\n disabledKeys: state.disabledKeys,\n shouldFocusWrap\n });\n\n menuData.set(state, {\n onClose: props.onClose,\n onAction: props.onAction\n });\n\n return {\n menuProps: mergeProps(domProps, {\n role: 'menu',\n ...listProps,\n onKeyDown: (e) => {\n // don't clear the menu selected keys if the user is presses escape since escape closes the menu\n if (e.key !== 'Escape') {\n listProps.onKeyDown(e);\n }\n }\n })\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableElement, PressEvent} from '@react-types/shared';\nimport {getItemCount} from '@react-stately/collections';\nimport {isFocusVisible, useHover, usePress} from '@react-aria/interactions';\nimport {Key, RefObject} from 'react';\nimport {menuData} from './useMenu';\nimport {mergeProps, useSlotId} from '@react-aria/utils';\nimport {TreeState} from '@react-stately/tree';\nimport {useSelectableItem} from '@react-aria/selection';\n\nexport interface MenuItemAria {\n /** Props for the menu item element. */\n menuItemProps: DOMAttributes,\n\n /** Props for the main text element inside the menu item. */\n labelProps: DOMAttributes,\n\n /** Props for the description text element inside the menu item, if any. */\n descriptionProps: DOMAttributes,\n\n /** Props for the keyboard shortcut text element inside the item, if any. */\n keyboardShortcutProps: DOMAttributes,\n\n /** Whether the item is currently focused. */\n isFocused: boolean,\n /** Whether the item is currently selected. */\n isSelected: boolean,\n /** Whether the item is currently in a pressed state. */\n isPressed: boolean,\n /** Whether the item is disabled. */\n isDisabled: boolean\n}\n\nexport interface AriaMenuItemProps {\n /**\n * Whether the menu item is disabled.\n * @deprecated - pass disabledKeys to useTreeState instead.\n */\n isDisabled?: boolean,\n\n /**\n * Whether the menu item is selected.\n * @deprecated - pass selectedKeys to useTreeState instead.\n */\n isSelected?: boolean,\n\n /** A screen reader only label for the menu item. */\n 'aria-label'?: string,\n\n /** The unique key for the menu item. */\n key?: Key,\n\n /**\n * Handler that is called when the menu should close after selecting an item.\n * @deprecated - pass to the menu instead.\n */\n onClose?: () => void,\n\n /**\n * Whether the menu should close when the menu item is selected.\n * @default true\n */\n closeOnSelect?: boolean,\n\n /** Whether the menu item is contained in a virtual scrolling menu. */\n isVirtualized?: boolean,\n\n /**\n * Handler that is called when the user activates the item.\n * @deprecated - pass to the menu instead.\n */\n onAction?: (key: Key) => void\n}\n\n/**\n * Provides the behavior and accessibility implementation for an item in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the item.\n * @param state - State for the menu, as returned by `useTreeState`.\n */\nexport function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, ref: RefObject<FocusableElement>): MenuItemAria {\n let {\n key,\n closeOnSelect,\n isVirtualized\n } = props;\n\n let isDisabled = props.isDisabled ?? state.disabledKeys.has(key);\n let isSelected = props.isSelected ?? state.selectionManager.isSelected(key);\n\n let data = menuData.get(state);\n let onClose = props.onClose || data.onClose;\n let onAction = props.onAction || data.onAction;\n\n let role = 'menuitem';\n if (state.selectionManager.selectionMode === 'single') {\n role = 'menuitemradio';\n } else if (state.selectionManager.selectionMode === 'multiple') {\n role = 'menuitemcheckbox';\n }\n\n let labelId = useSlotId();\n let descriptionId = useSlotId();\n let keyboardId = useSlotId();\n\n let ariaProps = {\n 'aria-disabled': isDisabled || undefined,\n role,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': labelId,\n 'aria-describedby': [descriptionId, keyboardId].filter(Boolean).join(' ') || undefined\n };\n\n if (state.selectionManager.selectionMode !== 'none') {\n ariaProps['aria-checked'] = isSelected;\n }\n\n if (isVirtualized) {\n ariaProps['aria-posinset'] = state.collection.getItem(key).index;\n ariaProps['aria-setsize'] = getItemCount(state.collection);\n }\n\n let onKeyDown = (e: KeyboardEvent) => {\n // Ignore repeating events, which may have started on the menu trigger before moving\n // focus to the menu item. We want to wait for a second complete key press sequence.\n if (e.repeat) {\n return;\n }\n\n switch (e.key) {\n case ' ':\n if (!isDisabled && state.selectionManager.selectionMode === 'none' && closeOnSelect !== false && onClose) {\n onClose();\n }\n break;\n case 'Enter':\n // The Enter key should always close on select, except if overridden.\n if (!isDisabled && closeOnSelect !== false && onClose) {\n onClose();\n }\n break;\n }\n };\n\n let onPressStart = (e: PressEvent) => {\n if (e.pointerType === 'keyboard' && onAction) {\n onAction(key);\n }\n };\n\n let onPressUp = (e: PressEvent) => {\n if (e.pointerType !== 'keyboard') {\n if (onAction) {\n onAction(key);\n }\n\n // Pressing a menu item should close by default in single selection mode but not multiple\n // selection mode, except if overridden by the closeOnSelect prop.\n if (onClose && (closeOnSelect ?? state.selectionManager.selectionMode !== 'multiple')) {\n onClose();\n }\n }\n };\n\n let {itemProps, isFocused} = useSelectableItem({\n selectionManager: state.selectionManager,\n key,\n ref,\n shouldSelectOnPressUp: true,\n allowsDifferentPressOrigin: true\n });\n\n let {pressProps, isPressed} = usePress({onPressStart, onPressUp, isDisabled});\n let {hoverProps} = useHover({\n isDisabled,\n onHoverStart() {\n if (!isFocusVisible()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(key);\n }\n }\n });\n\n return {\n menuItemProps: {\n ...ariaProps,\n ...mergeProps(itemProps, pressProps, hoverProps, {onKeyDown})\n },\n labelProps: {\n id: labelId\n },\n descriptionProps: {\n id: descriptionId\n },\n keyboardShortcutProps: {\n id: keyboardId\n },\n isFocused,\n isSelected,\n isPressed,\n isDisabled\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {ReactNode} from 'react';\nimport {useId} from '@react-aria/utils';\n\nexport interface AriaMenuSectionProps {\n /** The heading for the section. */\n heading?: ReactNode,\n /** An accessibility label for the section. Required if `heading` is not present. */\n 'aria-label'?: string\n}\n\nexport interface MenuSectionAria {\n /** Props for the wrapper list item. */\n itemProps: DOMAttributes,\n\n /** Props for the heading element, if any. */\n headingProps: DOMAttributes,\n\n /** Props for the group element. */\n groupProps: DOMAttributes\n}\n\n/**\n * Provides the behavior and accessibility implementation for a section in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the section.\n */\nexport function useMenuSection(props: AriaMenuSectionProps): MenuSectionAria {\n let {heading, 'aria-label': ariaLabel} = props;\n let headingId = useId();\n\n return {\n itemProps: {\n role: 'presentation'\n },\n headingProps: heading ? {\n // Techincally, menus cannot contain headings according to ARIA.\n // We hide the heading from assistive technology, and only use it\n // as a label for the nested group.\n id: headingId,\n 'aria-hidden': true\n } : {},\n groupProps: {\n role: 'group',\n 'aria-label': ariaLabel,\n 'aria-labelledby': heading ? headingId : undefined\n }\n };\n}\n"],"names":[],"version":3,"file":"module.js.map"}
1
+ {"mappings":"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","sources":["packages/@react-aria/menu/src/index.ts","packages/@react-aria/menu/src/useMenuTrigger.ts","packages/@react-aria/menu/intl/*.js","packages/@react-aria/menu/intl/ar-AE.json","packages/@react-aria/menu/intl/bg-BG.json","packages/@react-aria/menu/intl/cs-CZ.json","packages/@react-aria/menu/intl/da-DK.json","packages/@react-aria/menu/intl/de-DE.json","packages/@react-aria/menu/intl/el-GR.json","packages/@react-aria/menu/intl/en-US.json","packages/@react-aria/menu/intl/es-ES.json","packages/@react-aria/menu/intl/et-EE.json","packages/@react-aria/menu/intl/fi-FI.json","packages/@react-aria/menu/intl/fr-FR.json","packages/@react-aria/menu/intl/he-IL.json","packages/@react-aria/menu/intl/hr-HR.json","packages/@react-aria/menu/intl/hu-HU.json","packages/@react-aria/menu/intl/it-IT.json","packages/@react-aria/menu/intl/ja-JP.json","packages/@react-aria/menu/intl/ko-KR.json","packages/@react-aria/menu/intl/lt-LT.json","packages/@react-aria/menu/intl/lv-LV.json","packages/@react-aria/menu/intl/nb-NO.json","packages/@react-aria/menu/intl/nl-NL.json","packages/@react-aria/menu/intl/pl-PL.json","packages/@react-aria/menu/intl/pt-BR.json","packages/@react-aria/menu/intl/pt-PT.json","packages/@react-aria/menu/intl/ro-RO.json","packages/@react-aria/menu/intl/ru-RU.json","packages/@react-aria/menu/intl/sk-SK.json","packages/@react-aria/menu/intl/sl-SI.json","packages/@react-aria/menu/intl/sr-SP.json","packages/@react-aria/menu/intl/sv-SE.json","packages/@react-aria/menu/intl/tr-TR.json","packages/@react-aria/menu/intl/uk-UA.json","packages/@react-aria/menu/intl/zh-CN.json","packages/@react-aria/menu/intl/zh-TW.json","packages/@react-aria/menu/src/useMenu.ts","packages/@react-aria/menu/src/useMenuItem.ts","packages/@react-aria/menu/src/useMenuSection.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport {useMenuTrigger} from './useMenuTrigger';\nexport {useMenu} from './useMenu';\nexport {useMenuItem} from './useMenuItem';\nexport {useMenuSection} from './useMenuSection';\n\nexport type {AriaMenuProps} from '@react-types/menu';\nexport type {AriaMenuTriggerProps, MenuTriggerAria} from './useMenuTrigger';\nexport type {AriaMenuOptions, MenuAria} from './useMenu';\nexport type {AriaMenuItemProps, MenuItemAria} from './useMenuItem';\nexport type {AriaMenuSectionProps, MenuSectionAria} from './useMenuSection';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaButtonProps} from '@react-types/button';\nimport {AriaMenuOptions} from './useMenu';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {MenuTriggerState} from '@react-stately/menu';\nimport {MenuTriggerType} from '@react-types/menu';\nimport {RefObject} from 'react';\nimport {useId} from '@react-aria/utils';\nimport {useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useLongPress} from '@react-aria/interactions';\nimport {useOverlayTrigger} from '@react-aria/overlays';\n\nexport interface AriaMenuTriggerProps {\n /** The type of menu that the menu trigger opens. */\n type?: 'menu' | 'listbox',\n /** Whether menu trigger is disabled. */\n isDisabled?: boolean,\n /** How menu is triggered. */\n trigger?: MenuTriggerType\n}\n\nexport interface MenuTriggerAria<T> {\n /** Props for the menu trigger element. */\n menuTriggerProps: AriaButtonProps,\n\n /** Props for the menu. */\n menuProps: AriaMenuOptions<T>\n}\n\n/**\n * Provides the behavior and accessibility implementation for a menu trigger.\n * @param props - Props for the menu trigger.\n * @param state - State for the menu trigger.\n */\nexport function useMenuTrigger<T>(props: AriaMenuTriggerProps, state: MenuTriggerState, ref: RefObject<Element>): MenuTriggerAria<T> {\n let {\n type = 'menu' as AriaMenuTriggerProps['type'],\n isDisabled,\n trigger = 'press'\n } = props;\n\n let menuTriggerId = useId();\n let {triggerProps, overlayProps} = useOverlayTrigger({type}, state, ref);\n\n let onKeyDown = (e) => {\n if (isDisabled) {\n return;\n }\n\n if (trigger === 'longPress' && !e.altKey) {\n return;\n }\n\n if (ref && ref.current) {\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (trigger === 'longPress') {\n return;\n }\n // fallthrough\n case 'ArrowDown':\n // Stop propagation, unless it would already be handled by useKeyboard.\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('first');\n break;\n case 'ArrowUp':\n if (!('continuePropagation' in e)) {\n e.stopPropagation();\n }\n e.preventDefault();\n state.toggle('last');\n break;\n }\n }\n };\n\n let stringFormatter = useLocalizedStringFormatter(intlMessages);\n let {longPressProps} = useLongPress({\n isDisabled: isDisabled || trigger !== 'longPress',\n accessibilityDescription: stringFormatter.format('longPressMessage'),\n onLongPressStart() {\n state.close();\n },\n onLongPress() {\n state.open('first');\n }\n });\n\n let pressProps = {\n onPressStart(e) {\n // For consistency with native, open the menu on mouse/key down, but touch up.\n if (e.pointerType !== 'touch' && e.pointerType !== 'keyboard' && !isDisabled) {\n // If opened with a screen reader, auto focus the first item.\n // Otherwise, the menu itself will be focused.\n state.toggle(e.pointerType === 'virtual' ? 'first' : null);\n }\n },\n onPress(e) {\n if (e.pointerType === 'touch' && !isDisabled) {\n state.toggle();\n }\n }\n };\n\n // omit onPress from triggerProps since we override it above.\n delete triggerProps.onPress;\n\n return {\n menuTriggerProps: {\n ...triggerProps,\n ...(trigger === 'press' ? pressProps : longPressProps),\n id: menuTriggerId,\n onKeyDown\n },\n menuProps: {\n ...overlayProps,\n 'aria-labelledby': menuTriggerId,\n autoFocus: state.focusStrategy || true,\n onClose: state.close\n }\n };\n}\n","const _temp0 = require(\"./ar-AE.json\");\nconst _temp1 = require(\"./bg-BG.json\");\nconst _temp2 = require(\"./cs-CZ.json\");\nconst _temp3 = require(\"./da-DK.json\");\nconst _temp4 = require(\"./de-DE.json\");\nconst _temp5 = require(\"./el-GR.json\");\nconst _temp6 = require(\"./en-US.json\");\nconst _temp7 = require(\"./es-ES.json\");\nconst _temp8 = require(\"./et-EE.json\");\nconst _temp9 = require(\"./fi-FI.json\");\nconst _temp10 = require(\"./fr-FR.json\");\nconst _temp11 = require(\"./he-IL.json\");\nconst _temp12 = require(\"./hr-HR.json\");\nconst _temp13 = require(\"./hu-HU.json\");\nconst _temp14 = require(\"./it-IT.json\");\nconst _temp15 = require(\"./ja-JP.json\");\nconst _temp16 = require(\"./ko-KR.json\");\nconst _temp17 = require(\"./lt-LT.json\");\nconst _temp18 = require(\"./lv-LV.json\");\nconst _temp19 = require(\"./nb-NO.json\");\nconst _temp20 = require(\"./nl-NL.json\");\nconst _temp21 = require(\"./pl-PL.json\");\nconst _temp22 = require(\"./pt-BR.json\");\nconst _temp23 = require(\"./pt-PT.json\");\nconst _temp24 = require(\"./ro-RO.json\");\nconst _temp25 = require(\"./ru-RU.json\");\nconst _temp26 = require(\"./sk-SK.json\");\nconst _temp27 = require(\"./sl-SI.json\");\nconst _temp28 = require(\"./sr-SP.json\");\nconst _temp29 = require(\"./sv-SE.json\");\nconst _temp30 = require(\"./tr-TR.json\");\nconst _temp31 = require(\"./uk-UA.json\");\nconst _temp32 = require(\"./zh-CN.json\");\nconst _temp33 = require(\"./zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"longPressMessage\": \"اضغط مطولاً أو اضغط على Alt + السهم لأسفل لفتح القائمة\"\n}\n","{\n \"longPressMessage\": \"Натиснете продължително или натиснете Alt+ стрелка надолу, за да отворите менюто\"\n}\n","{\n \"longPressMessage\": \"Dlouhým stiskem nebo stisknutím kláves Alt + šipka dolů otevřete nabídku\"\n}\n","{\n \"longPressMessage\": \"Langt tryk eller tryk på Alt + pil ned for at åbne menuen\"\n}\n","{\n \"longPressMessage\": \"Drücken Sie lange oder drücken Sie Alt + Nach-unten, um das Menü zu öffnen\"\n}\n","{\n \"longPressMessage\": \"Πιέστε παρατεταμένα ή πατήστε Alt + κάτω βέλος για να ανοίξετε το μενού\"\n}\n","{\n \"longPressMessage\": \"Long press or press Alt + ArrowDown to open menu\"\n}\n","{\n \"longPressMessage\": \"Mantenga pulsado o pulse Alt + flecha abajo para abrir el menú\"\n}\n","{\n \"longPressMessage\": \"Menüü avamiseks vajutage pikalt või vajutage klahve Alt + allanool\"\n}\n","{\n \"longPressMessage\": \"Avaa valikko painamalla pohjassa tai näppäinyhdistelmällä Alt + Alanuoli\"\n}\n","{\n \"longPressMessage\": \"Appuyez de manière prolongée ou appuyez sur Alt + Flèche vers le bas pour ouvrir le menu.\"\n}\n","{\n \"longPressMessage\": \"לחץ לחיצה ארוכה או הקש Alt + ArrowDown כדי לפתוח את התפריט\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dolje za otvaranje izbornika\"\n}\n","{\n \"longPressMessage\": \"Nyomja meg hosszan, vagy nyomja meg az Alt + lefele nyíl gombot a menü megnyitásához\"\n}\n","{\n \"longPressMessage\": \"Premere a lungo o premere Alt + Freccia giù per aprire il menu\"\n}\n","{\n \"longPressMessage\": \"長押しまたは Alt+下矢印キーでメニューを開く\"\n}\n","{\n \"longPressMessage\": \"길게 누르거나 Alt + 아래쪽 화살표를 눌러 메뉴 열기\"\n}\n","{\n \"longPressMessage\": \"Norėdami atidaryti meniu, nuspaudę palaikykite arba paspauskite „Alt + ArrowDown“.\"\n}\n","{\n \"longPressMessage\": \"Lai atvērtu izvēlni, turiet nospiestu vai nospiediet taustiņu kombināciju Alt + lejupvērstā bultiņa\"\n}\n","{\n \"longPressMessage\": \"Langt trykk eller trykk Alt + PilNed for å åpne menyen\"\n}\n","{\n \"longPressMessage\": \"Druk lang op Alt + pijl-omlaag of druk op Alt om het menu te openen\"\n}\n","{\n \"longPressMessage\": \"Naciśnij i przytrzymaj lub naciśnij klawisze Alt + Strzałka w dół, aby otworzyć menu\"\n}\n","{\n \"longPressMessage\": \"Pressione e segure ou pressione Alt + Seta para baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Prima continuamente ou prima Alt + Seta Para Baixo para abrir o menu\"\n}\n","{\n \"longPressMessage\": \"Apăsați lung sau apăsați pe Alt + săgeată în jos pentru a deschide meniul\"\n}\n","{\n \"longPressMessage\": \"Нажмите и удерживайте или нажмите Alt + Стрелка вниз, чтобы открыть меню\"\n}\n","{\n \"longPressMessage\": \"Ponuku otvoríte dlhým stlačením alebo stlačením klávesu Alt + klávesu so šípkou nadol\"\n}\n","{\n \"longPressMessage\": \"Za odprtje menija pritisnite in držite gumb ali pritisnite Alt+puščica navzdol\"\n}\n","{\n \"longPressMessage\": \"Dugo pritisnite ili pritisnite Alt + strelicu prema dole da otvorite meni\"\n}\n","{\n \"longPressMessage\": \"Håll nedtryckt eller tryck på Alt + pil nedåt för att öppna menyn\"\n}\n","{\n \"longPressMessage\": \"Menüyü açmak için uzun basın veya Alt + Aşağı Ok tuşuna basın\"\n}\n","{\n \"longPressMessage\": \"Довго або звичайно натисніть комбінацію клавіш Alt і стрілка вниз, щоб відкрити меню\"\n}\n","{\n \"longPressMessage\": \"长按或按 Alt + 向下方向键以打开菜单\"\n}\n","{\n \"longPressMessage\": \"長按或按 Alt+向下鍵以開啟功能表\"\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaMenuProps} from '@react-types/menu';\nimport {DOMAttributes, KeyboardDelegate} from '@react-types/shared';\nimport {filterDOMProps, mergeProps} from '@react-aria/utils';\nimport {Key, RefObject} from 'react';\nimport {TreeState} from '@react-stately/tree';\nimport {useSelectableList} from '@react-aria/selection';\n\nexport interface MenuAria {\n /** Props for the menu element. */\n menuProps: DOMAttributes\n}\n\nexport interface AriaMenuOptions<T> extends Omit<AriaMenuProps<T>, 'children'> {\n /** Whether the menu uses virtual scrolling. */\n isVirtualized?: boolean,\n\n /**\n * An optional keyboard delegate implementation for type to select,\n * to override the default.\n */\n keyboardDelegate?: KeyboardDelegate\n}\n\ninterface MenuData {\n onClose?: () => void,\n onAction?: (key: Key) => void\n}\n\nexport const menuData = new WeakMap<TreeState<unknown>, MenuData>();\n\n/**\n * Provides the behavior and accessibility implementation for a menu component.\n * A menu displays a list of actions or options that a user can choose.\n * @param props - Props for the menu.\n * @param state - State for the menu, as returned by `useListState`.\n */\nexport function useMenu<T>(props: AriaMenuOptions<T>, state: TreeState<T>, ref: RefObject<HTMLElement>): MenuAria {\n let {\n shouldFocusWrap = true,\n ...otherProps\n } = props;\n\n if (!props['aria-label'] && !props['aria-labelledby']) {\n console.warn('An aria-label or aria-labelledby prop is required for accessibility.');\n }\n\n let domProps = filterDOMProps(props, {labelable: true});\n let {listProps} = useSelectableList({\n ...otherProps,\n ref,\n selectionManager: state.selectionManager,\n collection: state.collection,\n disabledKeys: state.disabledKeys,\n shouldFocusWrap\n });\n\n menuData.set(state, {\n onClose: props.onClose,\n onAction: props.onAction\n });\n\n return {\n menuProps: mergeProps(domProps, {\n role: 'menu',\n ...listProps,\n onKeyDown: (e) => {\n // don't clear the menu selected keys if the user is presses escape since escape closes the menu\n if (e.key !== 'Escape') {\n listProps.onKeyDown(e);\n }\n }\n })\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes, FocusableElement, PressEvent} from '@react-types/shared';\nimport {focusSafely} from '@react-aria/focus';\nimport {getItemCount} from '@react-stately/collections';\nimport {isFocusVisible, useHover, useKeyboard, usePress} from '@react-aria/interactions';\nimport {Key, RefObject, useCallback, useRef} from 'react';\nimport {menuData} from './useMenu';\nimport {mergeProps, useEffectEvent, useLayoutEffect, useSlotId} from '@react-aria/utils';\nimport {TreeState} from '@react-stately/tree';\nimport {useLocale} from '@react-aria/i18n';\nimport {useSelectableItem} from '@react-aria/selection';\n\nexport interface MenuItemAria {\n /** Props for the menu item element. */\n menuItemProps: DOMAttributes,\n\n /** Props for the main text element inside the menu item. */\n labelProps: DOMAttributes,\n\n /** Props for the description text element inside the menu item, if any. */\n descriptionProps: DOMAttributes,\n\n /** Props for the keyboard shortcut text element inside the item, if any. */\n keyboardShortcutProps: DOMAttributes,\n\n /** Whether the item is currently focused. */\n isFocused: boolean,\n /** Whether the item is currently selected. */\n isSelected: boolean,\n /** Whether the item is currently in a pressed state. */\n isPressed: boolean,\n /** Whether the item is disabled. */\n isDisabled: boolean\n}\n\nexport interface AriaMenuItemProps {\n /**\n * Whether the menu item is disabled.\n * @deprecated - pass disabledKeys to useTreeState instead.\n */\n isDisabled?: boolean,\n\n /**\n * Whether the menu item is selected.\n * @deprecated - pass selectedKeys to useTreeState instead.\n */\n isSelected?: boolean,\n\n /** A screen reader only label for the menu item. */\n 'aria-label'?: string,\n\n /** The unique key for the menu item. */\n key?: Key,\n\n /**\n * Handler that is called when the menu should close after selecting an item.\n * @deprecated - pass to the menu instead.\n */\n onClose?: () => void,\n\n /**\n * Whether the menu should close when the menu item is selected.\n * @default true\n */\n closeOnSelect?: boolean,\n\n /** Whether the menu item is contained in a virtual scrolling menu. */\n isVirtualized?: boolean,\n\n /**\n * Handler that is called when the user activates the item.\n * @deprecated - pass to the menu instead.\n */\n onAction?: (key: Key) => void,\n\n /** What kind of popup the item opens. */\n 'aria-haspopup'?: 'menu' | 'dialog'\n}\n\n/**\n * Provides the behavior and accessibility implementation for an item in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the item.\n * @param state - State for the menu, as returned by `useTreeState`.\n */\nexport function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, ref: RefObject<FocusableElement>): MenuItemAria {\n let {\n key,\n closeOnSelect,\n isVirtualized,\n 'aria-haspopup': hasPopup\n } = props;\n let {direction} = useLocale();\n\n let isMenuDialogTrigger = state.collection.getItem(key).hasChildNodes;\n let isOpen = state.expandedKeys.has(key);\n\n let isDisabled = props.isDisabled ?? state.disabledKeys.has(key);\n let isSelected = props.isSelected ?? state.selectionManager.isSelected(key);\n\n let openTimeout = useRef<ReturnType<typeof setTimeout> | undefined>();\n let cancelOpenTimeout = useCallback(() => {\n if (openTimeout.current) {\n clearTimeout(openTimeout.current);\n openTimeout.current = undefined;\n }\n }, [openTimeout]);\n\n let onSubmenuOpen = useEffectEvent(() => {\n cancelOpenTimeout();\n if (!state.expandedKeys.has(key)) {\n state.toggleKey(key);\n }\n });\n\n useLayoutEffect(() => {\n return () => cancelOpenTimeout();\n }, [cancelOpenTimeout]);\n\n let data = menuData.get(state);\n let onClose = props.onClose || data.onClose;\n let onActionMenuDialogTrigger = useCallback(() => {\n onSubmenuOpen();\n // will need to disable this lint rule when using useEffectEvent https://react.dev/learn/separating-events-from-effects#logic-inside-effects-is-reactive\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n let onAction = isMenuDialogTrigger ? onActionMenuDialogTrigger : props.onAction || data.onAction;\n\n let role = 'menuitem';\n if (state.selectionManager.selectionMode === 'single') {\n role = 'menuitemradio';\n } else if (state.selectionManager.selectionMode === 'multiple') {\n role = 'menuitemcheckbox';\n }\n\n let labelId = useSlotId();\n let descriptionId = useSlotId();\n let keyboardId = useSlotId();\n\n let ariaProps = {\n 'aria-disabled': isDisabled || undefined,\n role,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': labelId,\n 'aria-describedby': [descriptionId, keyboardId].filter(Boolean).join(' ') || undefined\n };\n\n if (state.selectionManager.selectionMode !== 'none') {\n ariaProps['aria-checked'] = isSelected;\n }\n\n if (isVirtualized) {\n ariaProps['aria-posinset'] = state.collection.getItem(key).index;\n ariaProps['aria-setsize'] = getItemCount(state.collection);\n }\n\n if (hasPopup != null) {\n ariaProps['aria-haspopup'] = hasPopup;\n ariaProps['aria-expanded'] = isOpen ? 'true' : 'false';\n }\n\n let onPressStart = (e: PressEvent) => {\n if (e.pointerType === 'keyboard' && onAction) {\n onAction(key);\n }\n };\n\n let onPressUp = (e: PressEvent) => {\n if (e.pointerType !== 'keyboard') {\n if (onAction) {\n onAction(key);\n }\n\n // Pressing a menu item should close by default in single selection mode but not multiple\n // selection mode, except if overridden by the closeOnSelect prop.\n if (!isMenuDialogTrigger && onClose && (closeOnSelect ?? state.selectionManager.selectionMode !== 'multiple')) {\n onClose();\n }\n }\n };\n\n let {itemProps, isFocused} = useSelectableItem({\n selectionManager: state.selectionManager,\n key,\n ref,\n shouldSelectOnPressUp: true,\n allowsDifferentPressOrigin: true\n });\n\n let {pressProps, isPressed} = usePress({onPressStart, onPressUp, isDisabled});\n let {hoverProps} = useHover({\n isDisabled,\n onHoverStart() {\n if (!isFocusVisible()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(key);\n // focus immediately so that a focus scope opened on hover has the correct restore node\n let isFocused = key === state.selectionManager.focusedKey;\n if (isFocused && state.selectionManager.isFocused && document.activeElement !== ref.current) {\n if (state.expandedKeys.size > 0 && !state.expandedKeys.has(key)) {\n for (let expandedKey of state.expandedKeys) {\n state.toggleKey(expandedKey);\n }\n }\n focusSafely(ref.current);\n }\n }\n },\n onHoverChange: isHovered => {\n if (isHovered && isMenuDialogTrigger) {\n if (!openTimeout.current) {\n openTimeout.current = setTimeout(() => {\n onSubmenuOpen();\n }, 200);\n }\n } else if (!isHovered) {\n cancelOpenTimeout();\n }\n }\n });\n\n let {keyboardProps} = useKeyboard({\n onKeyDown: (e) => {\n // Ignore repeating events, which may have started on the menu trigger before moving\n // focus to the menu item. We want to wait for a second complete key press sequence.\n if (e.repeat) {\n e.continuePropagation();\n return;\n }\n\n switch (e.key) {\n case ' ':\n if (!isDisabled && state.selectionManager.selectionMode === 'none' && !isMenuDialogTrigger && closeOnSelect !== false && onClose) {\n onClose();\n }\n break;\n case 'Enter':\n // The Enter key should always close on select, except if overridden.\n if (!isDisabled && closeOnSelect !== false && !isMenuDialogTrigger && onClose) {\n onClose();\n }\n break;\n case 'ArrowRight':\n if (isMenuDialogTrigger && direction === 'ltr') {\n onSubmenuOpen();\n } else {\n e.continuePropagation();\n }\n break;\n case 'ArrowLeft':\n if (isMenuDialogTrigger && direction === 'rtl') {\n onSubmenuOpen();\n } else {\n e.continuePropagation();\n }\n break;\n default:\n e.continuePropagation();\n break;\n }\n }\n });\n\n return {\n menuItemProps: {\n ...ariaProps,\n ...mergeProps(itemProps, pressProps, hoverProps, keyboardProps)\n },\n labelProps: {\n id: labelId\n },\n descriptionProps: {\n id: descriptionId\n },\n keyboardShortcutProps: {\n id: keyboardId\n },\n isFocused,\n isSelected,\n isPressed,\n isDisabled\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {DOMAttributes} from '@react-types/shared';\nimport {ReactNode} from 'react';\nimport {useId} from '@react-aria/utils';\n\nexport interface AriaMenuSectionProps {\n /** The heading for the section. */\n heading?: ReactNode,\n /** An accessibility label for the section. Required if `heading` is not present. */\n 'aria-label'?: string\n}\n\nexport interface MenuSectionAria {\n /** Props for the wrapper list item. */\n itemProps: DOMAttributes,\n\n /** Props for the heading element, if any. */\n headingProps: DOMAttributes,\n\n /** Props for the group element. */\n groupProps: DOMAttributes\n}\n\n/**\n * Provides the behavior and accessibility implementation for a section in a menu.\n * See `useMenu` for more details about menus.\n * @param props - Props for the section.\n */\nexport function useMenuSection(props: AriaMenuSectionProps): MenuSectionAria {\n let {heading, 'aria-label': ariaLabel} = props;\n let headingId = useId();\n\n return {\n itemProps: {\n role: 'presentation'\n },\n headingProps: heading ? {\n // Techincally, menus cannot contain headings according to ARIA.\n // We hide the heading from assistive technology, and only use it\n // as a label for the nested group.\n id: headingId,\n 'aria-hidden': true\n } : {},\n groupProps: {\n role: 'group',\n 'aria-label': ariaLabel,\n 'aria-labelledby': heading ? headingId : undefined\n }\n };\n}\n"],"names":[],"version":3,"file":"module.js.map"}
package/dist/types.d.ts CHANGED
@@ -94,6 +94,8 @@ export interface AriaMenuItemProps {
94
94
  * @deprecated - pass to the menu instead.
95
95
  */
96
96
  onAction?: (key: Key) => void;
97
+ /** What kind of popup the item opens. */
98
+ 'aria-haspopup'?: 'menu' | 'dialog';
97
99
  }
98
100
  /**
99
101
  * Provides the behavior and accessibility implementation for an item in a menu.
@@ -1 +1 @@
1
- {"mappings":";;;;;;AAmBA;IACE,kCAAkC;IAClC,SAAS,EAAE,aAAa,CAAA;CACzB;AAED,iCAAiC,CAAC,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC;IAC5E,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC;AASD;;;;;GAKG;AACH,wBAAwB,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,WAAW,CAAC,GAAG,QAAQ,CAqChH;AC7DD;IACE,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;CAC1B;AAED,iCAAiC,CAAC;IAChC,0CAA0C;IAC1C,gBAAgB,EAAE,eAAe,CAAC;IAElC,0BAA0B;IAC1B,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAA;CAC9B;AAED;;;;GAIG;AACH,+BAA+B,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,UAAU,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC,CA2FnI;ACpHD;IACE,uCAAuC;IACvC,aAAa,EAAE,aAAa,CAAC;IAE7B,4DAA4D;IAC5D,UAAU,EAAE,aAAa,CAAC;IAE1B,2EAA2E;IAC3E,gBAAgB,EAAE,aAAa,CAAC;IAEhC,4EAA4E;IAC5E,qBAAqB,EAAE,aAAa,CAAC;IAErC,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;IACE;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,wCAAwC;IACxC,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;CAC9B;AAED;;;;;GAKG;AACH,4BAA4B,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,gBAAgB,CAAC,GAAG,YAAY,CA0H5H;ACrMD;IACE,mCAAmC;IACnC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;IACE,uCAAuC;IACvC,SAAS,EAAE,aAAa,CAAC;IAEzB,6CAA6C;IAC7C,YAAY,EAAE,aAAa,CAAC;IAE5B,mCAAmC;IACnC,UAAU,EAAE,aAAa,CAAA;CAC1B;AAED;;;;GAIG;AACH,+BAA+B,KAAK,EAAE,oBAAoB,GAAG,eAAe,CAqB3E;AC3CD,YAAY,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC","sources":["packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenu.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenuTrigger.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenuItem.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenuSection.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/index.ts","packages/@react-aria/menu/src/index.ts"],"sourcesContent":[null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport {useMenuTrigger} from './useMenuTrigger';\nexport {useMenu} from './useMenu';\nexport {useMenuItem} from './useMenuItem';\nexport {useMenuSection} from './useMenuSection';\n\nexport type {AriaMenuProps} from '@react-types/menu';\nexport type {AriaMenuTriggerProps, MenuTriggerAria} from './useMenuTrigger';\nexport type {AriaMenuOptions, MenuAria} from './useMenu';\nexport type {AriaMenuItemProps, MenuItemAria} from './useMenuItem';\nexport type {AriaMenuSectionProps, MenuSectionAria} from './useMenuSection';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
1
+ {"mappings":";;;;;;AAmBA;IACE,kCAAkC;IAClC,SAAS,EAAE,aAAa,CAAA;CACzB;AAED,iCAAiC,CAAC,CAAE,SAAQ,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,UAAU,CAAC;IAC5E,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC;AASD;;;;;GAKG;AACH,wBAAwB,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,WAAW,CAAC,GAAG,QAAQ,CAqChH;AC7DD;IACE,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;CAC1B;AAED,iCAAiC,CAAC;IAChC,0CAA0C;IAC1C,gBAAgB,EAAE,eAAe,CAAC;IAElC,0BAA0B;IAC1B,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAA;CAC9B;AAED;;;;GAIG;AACH,+BAA+B,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,UAAU,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC,CA2FnI;AClHD;IACE,uCAAuC;IACvC,aAAa,EAAE,aAAa,CAAC;IAE7B,4DAA4D;IAC5D,UAAU,EAAE,aAAa,CAAC;IAE1B,2EAA2E;IAC3E,gBAAgB,EAAE,aAAa,CAAC;IAEhC,4EAA4E;IAC5E,qBAAqB,EAAE,aAAa,CAAC;IAErC,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;IACE;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,wCAAwC;IACxC,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAE9B,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;CACpC;AAED;;;;;GAKG;AACH,4BAA4B,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,gBAAgB,CAAC,GAAG,YAAY,CAqM5H;ACrRD;IACE,mCAAmC;IACnC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;IACE,uCAAuC;IACvC,SAAS,EAAE,aAAa,CAAC;IAEzB,6CAA6C;IAC7C,YAAY,EAAE,aAAa,CAAC;IAE5B,mCAAmC;IACnC,UAAU,EAAE,aAAa,CAAA;CAC1B;AAED;;;;GAIG;AACH,+BAA+B,KAAK,EAAE,oBAAoB,GAAG,eAAe,CAqB3E;AC3CD,YAAY,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC","sources":["packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenu.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenuTrigger.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenuItem.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/useMenuSection.ts","packages/@react-aria/menu/src/packages/@react-aria/menu/src/index.ts","packages/@react-aria/menu/src/index.ts"],"sourcesContent":[null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nexport {useMenuTrigger} from './useMenuTrigger';\nexport {useMenu} from './useMenu';\nexport {useMenuItem} from './useMenuItem';\nexport {useMenuSection} from './useMenuSection';\n\nexport type {AriaMenuProps} from '@react-types/menu';\nexport type {AriaMenuTriggerProps, MenuTriggerAria} from './useMenuTrigger';\nexport type {AriaMenuOptions, MenuAria} from './useMenu';\nexport type {AriaMenuItemProps, MenuItemAria} from './useMenuItem';\nexport type {AriaMenuSectionProps, MenuSectionAria} from './useMenuSection';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-aria/menu",
3
- "version": "3.9.1-nightly.3856+bd89c6aba",
3
+ "version": "3.9.1-nightly.3863+424432c83",
4
4
  "description": "Spectrum UI components in React",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/main.js",
@@ -22,17 +22,18 @@
22
22
  "url": "https://github.com/adobe/react-spectrum"
23
23
  },
24
24
  "dependencies": {
25
- "@react-aria/i18n": "3.0.0-nightly.2154+bd89c6aba",
26
- "@react-aria/interactions": "3.0.0-nightly.2154+bd89c6aba",
27
- "@react-aria/overlays": "3.0.0-nightly.2154+bd89c6aba",
28
- "@react-aria/selection": "3.0.0-nightly.2154+bd89c6aba",
29
- "@react-aria/utils": "3.0.0-nightly.2154+bd89c6aba",
30
- "@react-stately/collections": "3.0.0-nightly.2154+bd89c6aba",
31
- "@react-stately/menu": "3.5.2-nightly.3856+bd89c6aba",
32
- "@react-stately/tree": "3.0.0-nightly.2154+bd89c6aba",
33
- "@react-types/button": "3.7.3-nightly.3856+bd89c6aba",
34
- "@react-types/menu": "3.9.1-nightly.3856+bd89c6aba",
35
- "@react-types/shared": "3.0.0-nightly.2154+bd89c6aba",
25
+ "@react-aria/focus": "3.0.0-nightly.2161+424432c83",
26
+ "@react-aria/i18n": "3.0.0-nightly.2161+424432c83",
27
+ "@react-aria/interactions": "3.0.0-nightly.2161+424432c83",
28
+ "@react-aria/overlays": "3.0.0-nightly.2161+424432c83",
29
+ "@react-aria/selection": "3.0.0-nightly.2161+424432c83",
30
+ "@react-aria/utils": "3.0.0-nightly.2161+424432c83",
31
+ "@react-stately/collections": "3.0.0-nightly.2161+424432c83",
32
+ "@react-stately/menu": "3.5.2-nightly.3863+424432c83",
33
+ "@react-stately/tree": "3.0.0-nightly.2161+424432c83",
34
+ "@react-types/button": "3.7.3-nightly.3863+424432c83",
35
+ "@react-types/menu": "3.9.1-nightly.3863+424432c83",
36
+ "@react-types/shared": "3.0.0-nightly.2161+424432c83",
36
37
  "@swc/helpers": "^0.4.14"
37
38
  },
38
39
  "peerDependencies": {
@@ -42,5 +43,5 @@
42
43
  "publishConfig": {
43
44
  "access": "public"
44
45
  },
45
- "gitHead": "bd89c6aba9dd1bf763a5166d37524ab6fb612509"
46
+ "gitHead": "424432c832b5e16296e11e2c36aa23165a4812aa"
46
47
  }
@@ -11,12 +11,14 @@
11
11
  */
12
12
 
13
13
  import {DOMAttributes, FocusableElement, PressEvent} from '@react-types/shared';
14
+ import {focusSafely} from '@react-aria/focus';
14
15
  import {getItemCount} from '@react-stately/collections';
15
- import {isFocusVisible, useHover, usePress} from '@react-aria/interactions';
16
- import {Key, RefObject} from 'react';
16
+ import {isFocusVisible, useHover, useKeyboard, usePress} from '@react-aria/interactions';
17
+ import {Key, RefObject, useCallback, useRef} from 'react';
17
18
  import {menuData} from './useMenu';
18
- import {mergeProps, useSlotId} from '@react-aria/utils';
19
+ import {mergeProps, useEffectEvent, useLayoutEffect, useSlotId} from '@react-aria/utils';
19
20
  import {TreeState} from '@react-stately/tree';
21
+ import {useLocale} from '@react-aria/i18n';
20
22
  import {useSelectableItem} from '@react-aria/selection';
21
23
 
22
24
  export interface MenuItemAria {
@@ -80,7 +82,10 @@ export interface AriaMenuItemProps {
80
82
  * Handler that is called when the user activates the item.
81
83
  * @deprecated - pass to the menu instead.
82
84
  */
83
- onAction?: (key: Key) => void
85
+ onAction?: (key: Key) => void,
86
+
87
+ /** What kind of popup the item opens. */
88
+ 'aria-haspopup'?: 'menu' | 'dialog'
84
89
  }
85
90
 
86
91
  /**
@@ -93,15 +98,44 @@ export function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, re
93
98
  let {
94
99
  key,
95
100
  closeOnSelect,
96
- isVirtualized
101
+ isVirtualized,
102
+ 'aria-haspopup': hasPopup
97
103
  } = props;
104
+ let {direction} = useLocale();
105
+
106
+ let isMenuDialogTrigger = state.collection.getItem(key).hasChildNodes;
107
+ let isOpen = state.expandedKeys.has(key);
98
108
 
99
109
  let isDisabled = props.isDisabled ?? state.disabledKeys.has(key);
100
110
  let isSelected = props.isSelected ?? state.selectionManager.isSelected(key);
101
111
 
112
+ let openTimeout = useRef<ReturnType<typeof setTimeout> | undefined>();
113
+ let cancelOpenTimeout = useCallback(() => {
114
+ if (openTimeout.current) {
115
+ clearTimeout(openTimeout.current);
116
+ openTimeout.current = undefined;
117
+ }
118
+ }, [openTimeout]);
119
+
120
+ let onSubmenuOpen = useEffectEvent(() => {
121
+ cancelOpenTimeout();
122
+ if (!state.expandedKeys.has(key)) {
123
+ state.toggleKey(key);
124
+ }
125
+ });
126
+
127
+ useLayoutEffect(() => {
128
+ return () => cancelOpenTimeout();
129
+ }, [cancelOpenTimeout]);
130
+
102
131
  let data = menuData.get(state);
103
132
  let onClose = props.onClose || data.onClose;
104
- let onAction = props.onAction || data.onAction;
133
+ let onActionMenuDialogTrigger = useCallback(() => {
134
+ onSubmenuOpen();
135
+ // will need to disable this lint rule when using useEffectEvent https://react.dev/learn/separating-events-from-effects#logic-inside-effects-is-reactive
136
+ // eslint-disable-next-line react-hooks/exhaustive-deps
137
+ }, []);
138
+ let onAction = isMenuDialogTrigger ? onActionMenuDialogTrigger : props.onAction || data.onAction;
105
139
 
106
140
  let role = 'menuitem';
107
141
  if (state.selectionManager.selectionMode === 'single') {
@@ -131,27 +165,10 @@ export function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, re
131
165
  ariaProps['aria-setsize'] = getItemCount(state.collection);
132
166
  }
133
167
 
134
- let onKeyDown = (e: KeyboardEvent) => {
135
- // Ignore repeating events, which may have started on the menu trigger before moving
136
- // focus to the menu item. We want to wait for a second complete key press sequence.
137
- if (e.repeat) {
138
- return;
139
- }
140
-
141
- switch (e.key) {
142
- case ' ':
143
- if (!isDisabled && state.selectionManager.selectionMode === 'none' && closeOnSelect !== false && onClose) {
144
- onClose();
145
- }
146
- break;
147
- case 'Enter':
148
- // The Enter key should always close on select, except if overridden.
149
- if (!isDisabled && closeOnSelect !== false && onClose) {
150
- onClose();
151
- }
152
- break;
153
- }
154
- };
168
+ if (hasPopup != null) {
169
+ ariaProps['aria-haspopup'] = hasPopup;
170
+ ariaProps['aria-expanded'] = isOpen ? 'true' : 'false';
171
+ }
155
172
 
156
173
  let onPressStart = (e: PressEvent) => {
157
174
  if (e.pointerType === 'keyboard' && onAction) {
@@ -167,7 +184,7 @@ export function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, re
167
184
 
168
185
  // Pressing a menu item should close by default in single selection mode but not multiple
169
186
  // selection mode, except if overridden by the closeOnSelect prop.
170
- if (onClose && (closeOnSelect ?? state.selectionManager.selectionMode !== 'multiple')) {
187
+ if (!isMenuDialogTrigger && onClose && (closeOnSelect ?? state.selectionManager.selectionMode !== 'multiple')) {
171
188
  onClose();
172
189
  }
173
190
  }
@@ -188,6 +205,69 @@ export function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, re
188
205
  if (!isFocusVisible()) {
189
206
  state.selectionManager.setFocused(true);
190
207
  state.selectionManager.setFocusedKey(key);
208
+ // focus immediately so that a focus scope opened on hover has the correct restore node
209
+ let isFocused = key === state.selectionManager.focusedKey;
210
+ if (isFocused && state.selectionManager.isFocused && document.activeElement !== ref.current) {
211
+ if (state.expandedKeys.size > 0 && !state.expandedKeys.has(key)) {
212
+ for (let expandedKey of state.expandedKeys) {
213
+ state.toggleKey(expandedKey);
214
+ }
215
+ }
216
+ focusSafely(ref.current);
217
+ }
218
+ }
219
+ },
220
+ onHoverChange: isHovered => {
221
+ if (isHovered && isMenuDialogTrigger) {
222
+ if (!openTimeout.current) {
223
+ openTimeout.current = setTimeout(() => {
224
+ onSubmenuOpen();
225
+ }, 200);
226
+ }
227
+ } else if (!isHovered) {
228
+ cancelOpenTimeout();
229
+ }
230
+ }
231
+ });
232
+
233
+ let {keyboardProps} = useKeyboard({
234
+ onKeyDown: (e) => {
235
+ // Ignore repeating events, which may have started on the menu trigger before moving
236
+ // focus to the menu item. We want to wait for a second complete key press sequence.
237
+ if (e.repeat) {
238
+ e.continuePropagation();
239
+ return;
240
+ }
241
+
242
+ switch (e.key) {
243
+ case ' ':
244
+ if (!isDisabled && state.selectionManager.selectionMode === 'none' && !isMenuDialogTrigger && closeOnSelect !== false && onClose) {
245
+ onClose();
246
+ }
247
+ break;
248
+ case 'Enter':
249
+ // The Enter key should always close on select, except if overridden.
250
+ if (!isDisabled && closeOnSelect !== false && !isMenuDialogTrigger && onClose) {
251
+ onClose();
252
+ }
253
+ break;
254
+ case 'ArrowRight':
255
+ if (isMenuDialogTrigger && direction === 'ltr') {
256
+ onSubmenuOpen();
257
+ } else {
258
+ e.continuePropagation();
259
+ }
260
+ break;
261
+ case 'ArrowLeft':
262
+ if (isMenuDialogTrigger && direction === 'rtl') {
263
+ onSubmenuOpen();
264
+ } else {
265
+ e.continuePropagation();
266
+ }
267
+ break;
268
+ default:
269
+ e.continuePropagation();
270
+ break;
191
271
  }
192
272
  }
193
273
  });
@@ -195,7 +275,7 @@ export function useMenuItem<T>(props: AriaMenuItemProps, state: TreeState<T>, re
195
275
  return {
196
276
  menuItemProps: {
197
277
  ...ariaProps,
198
- ...mergeProps(itemProps, pressProps, hoverProps, {onKeyDown})
278
+ ...mergeProps(itemProps, pressProps, hoverProps, keyboardProps)
199
279
  },
200
280
  labelProps: {
201
281
  id: labelId