@fluentui/react-menu 0.0.0-nightly-20230317-1454.1 → 0.0.0-nightly-20230322-0439.1
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/.swcrc +2 -11
- package/CHANGELOG.json +116 -23
- package/CHANGELOG.md +36 -14
- package/lib/Menu.js +1 -1
- package/lib/MenuDivider.js +1 -1
- package/lib/MenuGroup.js +1 -1
- package/lib/MenuGroupHeader.js +1 -1
- package/lib/MenuItem.js +1 -1
- package/lib/MenuItemCheckbox.js +1 -1
- package/lib/MenuItemRadio.js +1 -1
- package/lib/MenuList.js +1 -1
- package/lib/MenuPopover.js +1 -1
- package/lib/MenuSplitGroup.js +1 -1
- package/lib/MenuTrigger.js +1 -1
- package/lib/components/Menu/Menu.js +5 -5
- package/lib/components/Menu/Menu.types.js +1 -1
- package/lib/components/Menu/index.js +5 -5
- package/lib/components/Menu/renderMenu.js +2 -2
- package/lib/components/Menu/useMenu.js +35 -28
- package/lib/components/Menu/useMenu.js.map +1 -1
- package/lib/components/MenuDivider/MenuDivider.js +6 -6
- package/lib/components/MenuDivider/index.js +5 -5
- package/lib/components/MenuDivider/renderMenuDivider.js +2 -2
- package/lib/components/MenuDivider/useMenuDivider.js +6 -6
- package/lib/components/MenuDivider/useMenuDividerStyles.js +3 -3
- package/lib/components/MenuGroup/MenuGroup.js +7 -7
- package/lib/components/MenuGroup/index.js +6 -6
- package/lib/components/MenuGroup/renderMenuGroup.js +3 -3
- package/lib/components/MenuGroup/useMenuGroup.js +7 -7
- package/lib/components/MenuGroup/useMenuGroupContextValues.js +1 -1
- package/lib/components/MenuGroup/useMenuGroupStyles.js +2 -2
- package/lib/components/MenuGroupHeader/MenuGroupHeader.js +6 -6
- package/lib/components/MenuGroupHeader/index.js +5 -5
- package/lib/components/MenuGroupHeader/renderMenuGroupHeader.js +2 -2
- package/lib/components/MenuGroupHeader/useMenuGroupHeader.js +5 -5
- package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.js +3 -3
- package/lib/components/MenuItem/MenuItem.js +6 -6
- package/lib/components/MenuItem/index.js +5 -5
- package/lib/components/MenuItem/renderMenuItem.js +2 -2
- package/lib/components/MenuItem/useCharacterSearch.js +6 -5
- package/lib/components/MenuItem/useCharacterSearch.js.map +1 -1
- package/lib/components/MenuItem/useMenuItem.js +27 -24
- package/lib/components/MenuItem/useMenuItem.js.map +1 -1
- package/lib/components/MenuItem/useMenuItemStyles.js +26 -13
- package/lib/components/MenuItem/useMenuItemStyles.js.map +1 -1
- package/lib/components/MenuItemCheckbox/MenuItemCheckbox.js +6 -6
- package/lib/components/MenuItemCheckbox/index.js +5 -5
- package/lib/components/MenuItemCheckbox/renderMenuItemCheckbox.js +2 -2
- package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js +12 -10
- package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js +8 -8
- package/lib/components/MenuItemRadio/MenuItemRadio.js +6 -6
- package/lib/components/MenuItemRadio/index.js +5 -5
- package/lib/components/MenuItemRadio/renderMenuItemRadio.js +2 -2
- package/lib/components/MenuItemRadio/useMenuItemRadio.js +12 -10
- package/lib/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
- package/lib/components/MenuItemRadio/useMenuItemRadioStyles.js +8 -8
- package/lib/components/MenuList/MenuList.js +7 -7
- package/lib/components/MenuList/MenuList.types.js +1 -1
- package/lib/components/MenuList/index.js +6 -6
- package/lib/components/MenuList/renderMenuList.js +3 -3
- package/lib/components/MenuList/useMenuList.js +24 -19
- package/lib/components/MenuList/useMenuList.js.map +1 -1
- package/lib/components/MenuList/useMenuListStyles.js +2 -2
- package/lib/components/MenuPopover/MenuPopover.js +6 -6
- package/lib/components/MenuPopover/index.js +5 -5
- package/lib/components/MenuPopover/renderMenuPopover.js +3 -3
- package/lib/components/MenuPopover/useMenuPopover.js +21 -19
- package/lib/components/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib/components/MenuPopover/useMenuPopoverStyles.js +3 -3
- package/lib/components/MenuSplitGroup/MenuSplitGroup.js +6 -6
- package/lib/components/MenuSplitGroup/index.js +5 -5
- package/lib/components/MenuSplitGroup/renderMenuSplitGroup.js +2 -2
- package/lib/components/MenuSplitGroup/useMenuSplitGroup.js +13 -12
- package/lib/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
- package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.js +4 -4
- package/lib/components/MenuTrigger/MenuTrigger.js +4 -4
- package/lib/components/MenuTrigger/MenuTrigger.types.js +1 -1
- package/lib/components/MenuTrigger/index.js +4 -4
- package/lib/components/MenuTrigger/renderMenuTrigger.js +2 -2
- package/lib/components/MenuTrigger/useMenuTrigger.js +29 -29
- package/lib/components/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib/components/index.js +2 -2
- package/lib/contexts/menuContext.js +3 -3
- package/lib/contexts/menuGroupContext.js +4 -3
- package/lib/contexts/menuGroupContext.js.map +1 -1
- package/lib/contexts/menuListContext.js +2 -2
- package/lib/contexts/menuTriggerContext.js +3 -2
- package/lib/contexts/menuTriggerContext.js.map +1 -1
- package/lib/index.js +16 -16
- package/lib/selectable/index.js +2 -2
- package/lib/selectable/types.js +1 -1
- package/lib/selectable/useCheckmarkStyles.js +1 -1
- package/lib/utils/index.js +1 -1
- package/lib/utils/useIsSubmenu.js +3 -3
- package/lib/utils/useOnMenuEnter.js +6 -5
- package/lib/utils/useOnMenuEnter.js.map +1 -1
- package/lib-commonjs/Menu.js.map +1 -1
- package/lib-commonjs/MenuDivider.js.map +1 -1
- package/lib-commonjs/MenuGroup.js.map +1 -1
- package/lib-commonjs/MenuGroupHeader.js.map +1 -1
- package/lib-commonjs/MenuItem.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemRadio.js.map +1 -1
- package/lib-commonjs/MenuList.js.map +1 -1
- package/lib-commonjs/MenuPopover.js.map +1 -1
- package/lib-commonjs/MenuSplitGroup.js.map +1 -1
- package/lib-commonjs/MenuTrigger.js.map +1 -1
- package/lib-commonjs/components/Menu/Menu.js +1 -1
- package/lib-commonjs/components/Menu/Menu.js.map +1 -1
- package/lib-commonjs/components/Menu/Menu.types.js.map +1 -1
- package/lib-commonjs/components/Menu/index.js.map +1 -1
- package/lib-commonjs/components/Menu/renderMenu.js.map +1 -1
- package/lib-commonjs/components/Menu/useMenu.js +31 -25
- package/lib-commonjs/components/Menu/useMenu.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/MenuDivider.js +1 -1
- package/lib-commonjs/components/MenuDivider/MenuDivider.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/index.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/renderMenuDivider.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/useMenuDivider.js +4 -4
- package/lib-commonjs/components/MenuDivider/useMenuDivider.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.js +1 -1
- package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/MenuGroup.js +1 -1
- package/lib-commonjs/components/MenuGroup/MenuGroup.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/index.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/renderMenuGroup.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/useMenuGroup.js +5 -5
- package/lib-commonjs/components/MenuGroup/useMenuGroup.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/useMenuGroupContextValues.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/useMenuGroupStyles.js +1 -1
- package/lib-commonjs/components/MenuGroup/useMenuGroupStyles.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.js +1 -1
- package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/index.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/renderMenuGroupHeader.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeader.js +2 -2
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeader.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.js +1 -1
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.js.map +1 -1
- package/lib-commonjs/components/MenuItem/MenuItem.js +1 -1
- package/lib-commonjs/components/MenuItem/MenuItem.js.map +1 -1
- package/lib-commonjs/components/MenuItem/index.js.map +1 -1
- package/lib-commonjs/components/MenuItem/renderMenuItem.js.map +1 -1
- package/lib-commonjs/components/MenuItem/useCharacterSearch.js +4 -3
- package/lib-commonjs/components/MenuItem/useCharacterSearch.js.map +1 -1
- package/lib-commonjs/components/MenuItem/useMenuItem.js +17 -14
- package/lib-commonjs/components/MenuItem/useMenuItem.js.map +1 -1
- package/lib-commonjs/components/MenuItem/useMenuItemStyles.js +38 -8
- package/lib-commonjs/components/MenuItem/useMenuItemStyles.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.js +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/index.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/renderMenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js +7 -5
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js +5 -5
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.js +1 -1
- package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/index.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/renderMenuItemRadio.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js +7 -5
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.js +5 -5
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.js.map +1 -1
- package/lib-commonjs/components/MenuList/MenuList.js +1 -1
- package/lib-commonjs/components/MenuList/MenuList.js.map +1 -1
- package/lib-commonjs/components/MenuList/MenuList.types.js.map +1 -1
- package/lib-commonjs/components/MenuList/index.js.map +1 -1
- package/lib-commonjs/components/MenuList/renderMenuList.js.map +1 -1
- package/lib-commonjs/components/MenuList/useMenuList.js +20 -15
- package/lib-commonjs/components/MenuList/useMenuList.js.map +1 -1
- package/lib-commonjs/components/MenuList/useMenuListStyles.js +1 -1
- package/lib-commonjs/components/MenuList/useMenuListStyles.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/MenuPopover.js +1 -1
- package/lib-commonjs/components/MenuPopover/MenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/index.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/renderMenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/useMenuPopover.js +14 -12
- package/lib-commonjs/components/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.js +1 -1
- package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.js +1 -1
- package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/index.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/renderMenuSplitGroup.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroup.js +8 -7
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.js +2 -2
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.js +1 -1
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/index.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/renderMenuTrigger.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js +21 -21
- package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib-commonjs/components/index.js.map +1 -1
- package/lib-commonjs/contexts/menuContext.js +1 -1
- package/lib-commonjs/contexts/menuContext.js.map +1 -1
- package/lib-commonjs/contexts/menuGroupContext.js +3 -2
- package/lib-commonjs/contexts/menuGroupContext.js.map +1 -1
- package/lib-commonjs/contexts/menuListContext.js.map +1 -1
- package/lib-commonjs/contexts/menuTriggerContext.js +2 -1
- package/lib-commonjs/contexts/menuTriggerContext.js.map +1 -1
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/selectable/index.js.map +1 -1
- package/lib-commonjs/selectable/types.js.map +1 -1
- package/lib-commonjs/selectable/useCheckmarkStyles.js.map +1 -1
- package/lib-commonjs/utils/index.js.map +1 -1
- package/lib-commonjs/utils/useIsSubmenu.js.map +1 -1
- package/lib-commonjs/utils/useOnMenuEnter.js +3 -2
- package/lib-commonjs/utils/useOnMenuEnter.js.map +1 -1
- package/package.json +13 -12
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { useMenuPopover_unstable } from
|
|
3
|
-
import { useMenuPopoverStyles_unstable } from
|
|
4
|
-
import { renderMenuPopover_unstable } from
|
|
5
|
-
import { useCustomStyleHooks_unstable } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useMenuPopover_unstable } from './useMenuPopover';
|
|
3
|
+
import { useMenuPopoverStyles_unstable } from './useMenuPopoverStyles';
|
|
4
|
+
import { renderMenuPopover_unstable } from './renderMenuPopover';
|
|
5
|
+
import { useCustomStyleHooks_unstable } from '@fluentui/react-shared-contexts';
|
|
6
6
|
/**
|
|
7
7
|
* Popover intended to wrap `MenuList` and adds styling and interaction support specific to menus
|
|
8
8
|
*/
|
|
@@ -15,5 +15,5 @@ export const MenuPopover = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
15
15
|
useCustomStyles(state);
|
|
16
16
|
return renderMenuPopover_unstable(state);
|
|
17
17
|
});
|
|
18
|
-
MenuPopover.displayName =
|
|
18
|
+
MenuPopover.displayName = 'MenuPopover';
|
|
19
19
|
//# sourceMappingURL=MenuPopover.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
1
|
+
export * from './MenuPopover';
|
|
2
|
+
export * from './MenuPopover.types';
|
|
3
|
+
export * from './renderMenuPopover';
|
|
4
|
+
export * from './useMenuPopover';
|
|
5
|
+
export * from './useMenuPopoverStyles';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { getSlots } from
|
|
3
|
-
import { Portal } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { getSlots } from '@fluentui/react-utilities';
|
|
3
|
+
import { Portal } from '@fluentui/react-portal';
|
|
4
4
|
/**
|
|
5
5
|
* Render the final JSX of MenuPopover
|
|
6
6
|
*/
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { ArrowLeft, Tab, ArrowRight, Escape } from
|
|
3
|
-
import { getNativeElementProps, useEventCallback, useMergedRefs } from
|
|
4
|
-
import { useMenuContext_unstable } from
|
|
5
|
-
import { dispatchMenuEnterEvent } from
|
|
6
|
-
import { useFluent_unstable as useFluent } from
|
|
7
|
-
import { useIsSubmenu } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ArrowLeft, Tab, ArrowRight, Escape } from '@fluentui/keyboard-keys';
|
|
3
|
+
import { getNativeElementProps, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';
|
|
4
|
+
import { useMenuContext_unstable } from '../../contexts/menuContext';
|
|
5
|
+
import { dispatchMenuEnterEvent } from '../../utils/index';
|
|
6
|
+
import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
|
|
7
|
+
import { useIsSubmenu } from '../../utils/useIsSubmenu';
|
|
8
8
|
/**
|
|
9
9
|
* Create the state required to render MenuPopover.
|
|
10
10
|
*
|
|
@@ -25,7 +25,7 @@ export const useMenuPopover_unstable = (props, ref) => {
|
|
|
25
25
|
const {
|
|
26
26
|
dir
|
|
27
27
|
} = useFluent();
|
|
28
|
-
const CloseArrowKey = dir ===
|
|
28
|
+
const CloseArrowKey = dir === 'ltr' ? ArrowLeft : ArrowRight;
|
|
29
29
|
// use DOM listener since react events propagate up the react tree
|
|
30
30
|
// no need to do `contains` logic as menus are all positioned in different portals
|
|
31
31
|
const mouseOverListenerCallbackRef = React.useCallback(node => {
|
|
@@ -33,7 +33,7 @@ export const useMenuPopover_unstable = (props, ref) => {
|
|
|
33
33
|
// Dispatches the custom menu mouse enter event with throttling
|
|
34
34
|
// Needs to trigger on mouseover to support keyboard + mouse together
|
|
35
35
|
// i.e. keyboard opens submenus while cursor is still on the parent
|
|
36
|
-
node.addEventListener(
|
|
36
|
+
node.addEventListener('mouseover', e => {
|
|
37
37
|
if (canDispatchCustomEventRef.current) {
|
|
38
38
|
canDispatchCustomEventRef.current = false;
|
|
39
39
|
dispatchMenuEnterEvent(popoverRef.current, e);
|
|
@@ -47,10 +47,11 @@ export const useMenuPopover_unstable = (props, ref) => {
|
|
|
47
47
|
React.useEffect(() => {
|
|
48
48
|
() => clearTimeout(throttleDispatchTimerRef.current);
|
|
49
49
|
}, []);
|
|
50
|
-
|
|
50
|
+
var _useMenuContext_unstable;
|
|
51
|
+
const inline = (_useMenuContext_unstable = useMenuContext_unstable(context => context.inline)) !== null && _useMenuContext_unstable !== void 0 ? _useMenuContext_unstable : false;
|
|
51
52
|
const mountNode = useMenuContext_unstable(context => context.mountNode);
|
|
52
|
-
const rootProps = getNativeElementProps(
|
|
53
|
-
role:
|
|
53
|
+
const rootProps = getNativeElementProps('div', {
|
|
54
|
+
role: 'presentation',
|
|
54
55
|
...props,
|
|
55
56
|
ref: useMergedRefs(ref, popoverRef, mouseOverListenerCallbackRef)
|
|
56
57
|
});
|
|
@@ -63,20 +64,21 @@ export const useMenuPopover_unstable = (props, ref) => {
|
|
|
63
64
|
setOpen(event, {
|
|
64
65
|
open: true,
|
|
65
66
|
keyboard: false,
|
|
66
|
-
type:
|
|
67
|
+
type: 'menuPopoverMouseEnter',
|
|
67
68
|
event
|
|
68
69
|
});
|
|
69
70
|
}
|
|
70
|
-
onMouseEnterOriginal
|
|
71
|
+
onMouseEnterOriginal === null || onMouseEnterOriginal === void 0 ? void 0 : onMouseEnterOriginal(event);
|
|
71
72
|
});
|
|
72
73
|
rootProps.onKeyDown = useEventCallback(event => {
|
|
73
74
|
const key = event.key;
|
|
74
75
|
if (key === Escape || isSubmenu && key === CloseArrowKey) {
|
|
75
|
-
|
|
76
|
+
var _popoverRef_current;
|
|
77
|
+
if (open && ((_popoverRef_current = popoverRef.current) === null || _popoverRef_current === void 0 ? void 0 : _popoverRef_current.contains(event.target))) {
|
|
76
78
|
setOpen(event, {
|
|
77
79
|
open: false,
|
|
78
80
|
keyboard: true,
|
|
79
|
-
type:
|
|
81
|
+
type: 'menuPopoverKeyDown',
|
|
80
82
|
event
|
|
81
83
|
});
|
|
82
84
|
// stop propagation to avoid conflicting with other elements that listen for `Escape`
|
|
@@ -88,17 +90,17 @@ export const useMenuPopover_unstable = (props, ref) => {
|
|
|
88
90
|
setOpen(event, {
|
|
89
91
|
open: false,
|
|
90
92
|
keyboard: true,
|
|
91
|
-
type:
|
|
93
|
+
type: 'menuPopoverKeyDown',
|
|
92
94
|
event
|
|
93
95
|
});
|
|
94
96
|
}
|
|
95
|
-
onKeyDownOriginal
|
|
97
|
+
onKeyDownOriginal === null || onKeyDownOriginal === void 0 ? void 0 : onKeyDownOriginal(event);
|
|
96
98
|
});
|
|
97
99
|
return {
|
|
98
100
|
inline,
|
|
99
101
|
mountNode,
|
|
100
102
|
components: {
|
|
101
|
-
root:
|
|
103
|
+
root: 'div'
|
|
102
104
|
},
|
|
103
105
|
root: rootProps
|
|
104
106
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","ArrowLeft","Tab","ArrowRight","Escape","getNativeElementProps","useEventCallback","useMergedRefs","useMenuContext_unstable","dispatchMenuEnterEvent","useFluent_unstable","useFluent","useIsSubmenu","useMenuPopover_unstable","props","ref","popoverRef","context","menuPopoverRef","setOpen","open","openOnHover","isSubmenu","canDispatchCustomEventRef","useRef","throttleDispatchTimerRef","dir","CloseArrowKey","mouseOverListenerCallbackRef","useCallback","node","addEventListener","e","current","setTimeout","useEffect","clearTimeout","inline","mountNode","rootProps","role","onMouseEnter","onMouseEnterOriginal","onKeyDown","onKeyDownOriginal","event","keyboard","type","key","contains","target","stopPropagation","components","root"],"sources":["../../../src/components/MenuPopover/useMenuPopover.ts"],"sourcesContent":["import * as React from 'react';\nimport { ArrowLeft, Tab, ArrowRight, Escape } from '@fluentui/keyboard-keys';\nimport { getNativeElementProps, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { MenuPopoverProps, MenuPopoverState } from './MenuPopover.types';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { dispatchMenuEnterEvent } from '../../utils/index';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useIsSubmenu } from '../../utils/useIsSubmenu';\n\n/**\n * Create the state required to render MenuPopover.\n *\n * The returned state can be modified with hooks such as useMenuPopoverStyles_unstable,\n * before being passed to renderMenuPopover_unstable.\n *\n * @param props - props from this instance of MenuPopover\n * @param ref - reference to root HTMLElement of MenuPopover\n */\nexport const useMenuPopover_unstable = (props: MenuPopoverProps, ref: React.Ref<HTMLElement>): MenuPopoverState => {\n const popoverRef = useMenuContext_unstable(context => context.menuPopoverRef);\n const setOpen = useMenuContext_unstable(context => context.setOpen);\n const open = useMenuContext_unstable(context => context.open);\n const openOnHover = useMenuContext_unstable(context => context.openOnHover);\n const isSubmenu = useIsSubmenu();\n const canDispatchCustomEventRef = React.useRef(true);\n const throttleDispatchTimerRef = React.useRef(0);\n\n const { dir } = useFluent();\n const CloseArrowKey = dir === 'ltr' ? ArrowLeft : ArrowRight;\n\n // use DOM listener since react events propagate up the react tree\n // no need to do `contains` logic as menus are all positioned in different portals\n const mouseOverListenerCallbackRef = React.useCallback(\n (node: HTMLElement) => {\n if (node) {\n // Dispatches the custom menu mouse enter event with throttling\n // Needs to trigger on mouseover to support keyboard + mouse together\n // i.e. keyboard opens submenus while cursor is still on the parent\n node.addEventListener('mouseover', e => {\n if (canDispatchCustomEventRef.current) {\n canDispatchCustomEventRef.current = false;\n dispatchMenuEnterEvent(popoverRef.current as HTMLElement, e);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore #16889 Node setTimeout type leaking\n throttleDispatchTimerRef.current = setTimeout(() => (canDispatchCustomEventRef.current = true), 250);\n }\n });\n }\n },\n [popoverRef, throttleDispatchTimerRef],\n );\n\n React.useEffect(() => {\n () => clearTimeout(throttleDispatchTimerRef.current);\n }, []);\n\n const inline = useMenuContext_unstable(context => context.inline) ?? false;\n const mountNode = useMenuContext_unstable(context => context.mountNode);\n\n const rootProps = getNativeElementProps('div', {\n role: 'presentation',\n ...props,\n ref: useMergedRefs(ref, popoverRef, mouseOverListenerCallbackRef),\n });\n\n const { onMouseEnter: onMouseEnterOriginal, onKeyDown: onKeyDownOriginal } = rootProps;\n\n rootProps.onMouseEnter = useEventCallback((event: React.MouseEvent<HTMLElement>) => {\n if (openOnHover) {\n setOpen(event, { open: true, keyboard: false, type: 'menuPopoverMouseEnter', event });\n }\n\n onMouseEnterOriginal?.(event);\n });\n\n rootProps.onKeyDown = useEventCallback((event: React.KeyboardEvent<HTMLElement>) => {\n const key = event.key;\n\n if (key === Escape || (isSubmenu && key === CloseArrowKey)) {\n if (open && popoverRef.current?.contains(event.target as HTMLElement)) {\n setOpen(event, { open: false, keyboard: true, type: 'menuPopoverKeyDown', event });\n // stop propagation to avoid conflicting with other elements that listen for `Escape`\n // e,g: Dialog, Popover and Tooltip\n event.stopPropagation();\n }\n }\n\n if (key === Tab) {\n setOpen(event, { open: false, keyboard: true, type: 'menuPopoverKeyDown', event });\n }\n\n onKeyDownOriginal?.(event);\n });\n\n return {\n inline,\n mountNode,\n components: {\n root: 'div',\n },\n root: rootProps,\n };\n};\n"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AACvB,SAASC,SAAS,EAAEC,GAAG,EAAEC,UAAU,EAAEC,MAAM,QAAQ;AACnD,SAASC,qBAAqB,EAAEC,gBAAgB,EAAEC,aAAa,QAAQ;AAEvE,SAASC,uBAAuB,QAAQ;AACxC,SAASC,sBAAsB,QAAQ;AACvC,SAASC,kBAAA,IAAsBC,SAAS,QAAQ;AAChD,SAASC,YAAY,QAAQ;AAE7B;;;;;;;;;AASA,OAAO,MAAMC,uBAAA,GAA0BA,CAACC,KAAA,EAAyBC,GAAA,KAAkD;EACjH,MAAMC,UAAA,GAAaR,uBAAA,CAAwBS,OAAA,IAAWA,OAAA,CAAQC,cAAc;EAC5E,MAAMC,OAAA,GAAUX,uBAAA,CAAwBS,OAAA,IAAWA,OAAA,CAAQE,OAAO;EAClE,MAAMC,IAAA,GAAOZ,uBAAA,CAAwBS,OAAA,IAAWA,OAAA,CAAQG,IAAI;EAC5D,MAAMC,WAAA,GAAcb,uBAAA,CAAwBS,OAAA,IAAWA,OAAA,CAAQI,WAAW;EAC1E,MAAMC,SAAA,GAAYV,YAAA;EAClB,MAAMW,yBAAA,GAA4BvB,KAAA,CAAMwB,MAAM,CAAC,IAAI;EACnD,MAAMC,wBAAA,GAA2BzB,KAAA,CAAMwB,MAAM,CAAC;EAE9C,MAAM;IAAEE;EAAG,CAAE,GAAGf,SAAA;EAChB,MAAMgB,aAAA,GAAgBD,GAAA,KAAQ,QAAQzB,SAAA,GAAYE,UAAU;EAE5D;EACA;EACA,MAAMyB,4BAAA,GAA+B5B,KAAA,CAAM6B,WAAW,CACnDC,IAAA,IAAsB;IACrB,IAAIA,IAAA,EAAM;MACR;MACA;MACA;MACAA,IAAA,CAAKC,gBAAgB,CAAC,aAAaC,CAAA,IAAK;QACtC,IAAIT,yBAAA,CAA0BU,OAAO,EAAE;UACrCV,yBAAA,CAA0BU,OAAO,GAAG,KAAK;UACzCxB,sBAAA,CAAuBO,UAAA,CAAWiB,OAAO,EAAiBD,CAAA;UAC1D;UACA;UACAP,wBAAA,CAAyBQ,OAAO,GAAGC,UAAA,CAAW,MAAOX,yBAAA,CAA0BU,OAAO,GAAG,IAAI,EAAG;QAClG;MACF;IACF;EACF,GACA,CAACjB,UAAA,EAAYS,wBAAA,CAAyB;EAGxCzB,KAAA,CAAMmC,SAAS,CAAC,MAAM;IACpB,MAAMC,YAAA,CAAaX,wBAAA,CAAyBQ,OAAO;EACrD,GAAG,EAAE;
|
|
1
|
+
{"version":3,"names":["React","ArrowLeft","Tab","ArrowRight","Escape","getNativeElementProps","useEventCallback","useMergedRefs","useMenuContext_unstable","dispatchMenuEnterEvent","useFluent_unstable","useFluent","useIsSubmenu","useMenuPopover_unstable","props","ref","popoverRef","context","menuPopoverRef","setOpen","open","openOnHover","isSubmenu","canDispatchCustomEventRef","useRef","throttleDispatchTimerRef","dir","CloseArrowKey","mouseOverListenerCallbackRef","useCallback","node","addEventListener","e","current","setTimeout","useEffect","clearTimeout","_useMenuContext_unstable","inline","mountNode","rootProps","role","onMouseEnter","onMouseEnterOriginal","onKeyDown","onKeyDownOriginal","event","keyboard","type","key","_popoverRef_current","contains","target","stopPropagation","components","root"],"sources":["../../../src/components/MenuPopover/useMenuPopover.ts"],"sourcesContent":["import * as React from 'react';\nimport { ArrowLeft, Tab, ArrowRight, Escape } from '@fluentui/keyboard-keys';\nimport { getNativeElementProps, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';\nimport { MenuPopoverProps, MenuPopoverState } from './MenuPopover.types';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { dispatchMenuEnterEvent } from '../../utils/index';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useIsSubmenu } from '../../utils/useIsSubmenu';\n\n/**\n * Create the state required to render MenuPopover.\n *\n * The returned state can be modified with hooks such as useMenuPopoverStyles_unstable,\n * before being passed to renderMenuPopover_unstable.\n *\n * @param props - props from this instance of MenuPopover\n * @param ref - reference to root HTMLElement of MenuPopover\n */\nexport const useMenuPopover_unstable = (props: MenuPopoverProps, ref: React.Ref<HTMLElement>): MenuPopoverState => {\n const popoverRef = useMenuContext_unstable(context => context.menuPopoverRef);\n const setOpen = useMenuContext_unstable(context => context.setOpen);\n const open = useMenuContext_unstable(context => context.open);\n const openOnHover = useMenuContext_unstable(context => context.openOnHover);\n const isSubmenu = useIsSubmenu();\n const canDispatchCustomEventRef = React.useRef(true);\n const throttleDispatchTimerRef = React.useRef(0);\n\n const { dir } = useFluent();\n const CloseArrowKey = dir === 'ltr' ? ArrowLeft : ArrowRight;\n\n // use DOM listener since react events propagate up the react tree\n // no need to do `contains` logic as menus are all positioned in different portals\n const mouseOverListenerCallbackRef = React.useCallback(\n (node: HTMLElement) => {\n if (node) {\n // Dispatches the custom menu mouse enter event with throttling\n // Needs to trigger on mouseover to support keyboard + mouse together\n // i.e. keyboard opens submenus while cursor is still on the parent\n node.addEventListener('mouseover', e => {\n if (canDispatchCustomEventRef.current) {\n canDispatchCustomEventRef.current = false;\n dispatchMenuEnterEvent(popoverRef.current as HTMLElement, e);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore #16889 Node setTimeout type leaking\n throttleDispatchTimerRef.current = setTimeout(() => (canDispatchCustomEventRef.current = true), 250);\n }\n });\n }\n },\n [popoverRef, throttleDispatchTimerRef],\n );\n\n React.useEffect(() => {\n () => clearTimeout(throttleDispatchTimerRef.current);\n }, []);\n\n const inline = useMenuContext_unstable(context => context.inline) ?? false;\n const mountNode = useMenuContext_unstable(context => context.mountNode);\n\n const rootProps = getNativeElementProps('div', {\n role: 'presentation',\n ...props,\n ref: useMergedRefs(ref, popoverRef, mouseOverListenerCallbackRef),\n });\n\n const { onMouseEnter: onMouseEnterOriginal, onKeyDown: onKeyDownOriginal } = rootProps;\n\n rootProps.onMouseEnter = useEventCallback((event: React.MouseEvent<HTMLElement>) => {\n if (openOnHover) {\n setOpen(event, { open: true, keyboard: false, type: 'menuPopoverMouseEnter', event });\n }\n\n onMouseEnterOriginal?.(event);\n });\n\n rootProps.onKeyDown = useEventCallback((event: React.KeyboardEvent<HTMLElement>) => {\n const key = event.key;\n\n if (key === Escape || (isSubmenu && key === CloseArrowKey)) {\n if (open && popoverRef.current?.contains(event.target as HTMLElement)) {\n setOpen(event, { open: false, keyboard: true, type: 'menuPopoverKeyDown', event });\n // stop propagation to avoid conflicting with other elements that listen for `Escape`\n // e,g: Dialog, Popover and Tooltip\n event.stopPropagation();\n }\n }\n\n if (key === Tab) {\n setOpen(event, { open: false, keyboard: true, type: 'menuPopoverKeyDown', event });\n }\n\n onKeyDownOriginal?.(event);\n });\n\n return {\n inline,\n mountNode,\n components: {\n root: 'div',\n },\n root: rootProps,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { shorthands, mergeClasses, __styles } from
|
|
2
|
-
import { tokens, typographyStyles } from
|
|
1
|
+
import { shorthands, mergeClasses, __styles } from '@griffel/react';
|
|
2
|
+
import { tokens, typographyStyles } from '@fluentui/react-theme';
|
|
3
3
|
export const menuPopoverClassNames = {
|
|
4
|
-
root:
|
|
4
|
+
root: 'fui-MenuPopover'
|
|
5
5
|
};
|
|
6
6
|
const useStyles = /*#__PURE__*/__styles({
|
|
7
7
|
root: {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { useMenuSplitGroup_unstable } from
|
|
3
|
-
import { renderMenuSplitGroup_unstable } from
|
|
4
|
-
import { useMenuSplitGroupStyles_unstable } from
|
|
5
|
-
import { useCustomStyleHooks_unstable } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useMenuSplitGroup_unstable } from './useMenuSplitGroup';
|
|
3
|
+
import { renderMenuSplitGroup_unstable } from './renderMenuSplitGroup';
|
|
4
|
+
import { useMenuSplitGroupStyles_unstable } from './useMenuSplitGroupStyles';
|
|
5
|
+
import { useCustomStyleHooks_unstable } from '@fluentui/react-shared-contexts';
|
|
6
6
|
/**
|
|
7
7
|
* Layout wrapper that provides extra keyboard navigation behavior for two `MenuItem` components.
|
|
8
8
|
*/
|
|
@@ -15,5 +15,5 @@ export const MenuSplitGroup = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
15
15
|
useCustomStyles(state);
|
|
16
16
|
return renderMenuSplitGroup_unstable(state);
|
|
17
17
|
});
|
|
18
|
-
MenuSplitGroup.displayName =
|
|
18
|
+
MenuSplitGroup.displayName = 'MenuSplitGroup';
|
|
19
19
|
//# sourceMappingURL=MenuSplitGroup.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
1
|
+
export * from './MenuSplitGroup';
|
|
2
|
+
export * from './MenuSplitGroup.types';
|
|
3
|
+
export * from './renderMenuSplitGroup';
|
|
4
|
+
export * from './useMenuSplitGroup';
|
|
5
|
+
export * from './useMenuSplitGroupStyles';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { getNativeElementProps, getRTLSafeKey, useMergedRefs } from
|
|
3
|
-
import { useFocusFinders } from
|
|
4
|
-
import { useFluent_unstable as useFluent } from
|
|
5
|
-
import { ArrowRight, ArrowLeft } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { getNativeElementProps, getRTLSafeKey, useMergedRefs } from '@fluentui/react-utilities';
|
|
3
|
+
import { useFocusFinders } from '@fluentui/react-tabster';
|
|
4
|
+
import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
|
|
5
|
+
import { ArrowRight, ArrowLeft } from '@fluentui/keyboard-keys';
|
|
6
6
|
/**
|
|
7
7
|
* Create the state required to render MenuSplitGroup.
|
|
8
8
|
*
|
|
@@ -25,32 +25,33 @@ export const useMenuSplitGroup_unstable = (props, ref) => {
|
|
|
25
25
|
findPrevFocusable
|
|
26
26
|
} = useFocusFinders();
|
|
27
27
|
const onKeyDown = React.useCallback(e => {
|
|
28
|
-
|
|
28
|
+
var _innerRef_current;
|
|
29
|
+
const activeElement = targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.activeElement;
|
|
29
30
|
if (!activeElement) {
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
|
-
if (!innerRef.current
|
|
33
|
+
if (!((_innerRef_current = innerRef.current) === null || _innerRef_current === void 0 ? void 0 : _innerRef_current.contains(activeElement))) {
|
|
33
34
|
return;
|
|
34
35
|
}
|
|
35
36
|
if (e.key === nextArrowKey) {
|
|
36
37
|
const next = findNextFocusable(activeElement, {
|
|
37
38
|
container: innerRef.current
|
|
38
39
|
});
|
|
39
|
-
next
|
|
40
|
+
next === null || next === void 0 ? void 0 : next.focus();
|
|
40
41
|
}
|
|
41
42
|
if (e.key === prevArrowKey) {
|
|
42
43
|
const prev = findPrevFocusable(activeElement, {
|
|
43
44
|
container: innerRef.current
|
|
44
45
|
});
|
|
45
|
-
prev
|
|
46
|
+
prev === null || prev === void 0 ? void 0 : prev.focus();
|
|
46
47
|
}
|
|
47
48
|
}, [findNextFocusable, findPrevFocusable, targetDocument, nextArrowKey, prevArrowKey]);
|
|
48
49
|
return {
|
|
49
50
|
components: {
|
|
50
|
-
root:
|
|
51
|
+
root: 'div'
|
|
51
52
|
},
|
|
52
|
-
root: getNativeElementProps(
|
|
53
|
-
role:
|
|
53
|
+
root: getNativeElementProps('div', {
|
|
54
|
+
role: 'group',
|
|
54
55
|
ref: useMergedRefs(ref, innerRef),
|
|
55
56
|
onKeyDown,
|
|
56
57
|
...props
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","getNativeElementProps","getRTLSafeKey","useMergedRefs","useFocusFinders","useFluent_unstable","useFluent","ArrowRight","ArrowLeft","useMenuSplitGroup_unstable","props","ref","innerRef","useRef","dir","targetDocument","nextArrowKey","prevArrowKey","findNextFocusable","findPrevFocusable","onKeyDown","useCallback","e","activeElement","current","contains","key","next","container","focus","prev","components","root","role"],"sources":["../../../src/components/MenuSplitGroup/useMenuSplitGroup.ts"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, getRTLSafeKey, useMergedRefs } from '@fluentui/react-utilities';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport type { MenuSplitGroupProps, MenuSplitGroupState } from './MenuSplitGroup.types';\nimport { ArrowRight, ArrowLeft } from '@fluentui/keyboard-keys';\n\n/**\n * Create the state required to render MenuSplitGroup.\n *\n * The returned state can be modified with hooks such as useMenuSplitGroupStyles_unstable,\n * before being passed to renderMenuSplitGroup_unstable.\n *\n * @param props - props from this instance of MenuSplitGroup\n * @param ref - reference to root HTMLElement of MenuSplitGroup\n */\nexport const useMenuSplitGroup_unstable = (\n props: MenuSplitGroupProps,\n ref: React.Ref<HTMLElement>,\n): MenuSplitGroupState => {\n const innerRef = React.useRef<HTMLElement>();\n const { dir, targetDocument } = useFluent();\n\n const nextArrowKey = getRTLSafeKey(ArrowRight, dir);\n const prevArrowKey = getRTLSafeKey(ArrowLeft, dir);\n\n const { findNextFocusable, findPrevFocusable } = useFocusFinders();\n\n const onKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n const activeElement = targetDocument?.activeElement;\n if (!activeElement) {\n return;\n }\n\n if (!innerRef.current?.contains(activeElement)) {\n return;\n }\n\n if (e.key === nextArrowKey) {\n const next = findNextFocusable(activeElement as HTMLElement, { container: innerRef.current });\n next?.focus();\n }\n\n if (e.key === prevArrowKey) {\n const prev = findPrevFocusable(activeElement as HTMLElement, { container: innerRef.current });\n prev?.focus();\n }\n },\n [findNextFocusable, findPrevFocusable, targetDocument, nextArrowKey, prevArrowKey],\n );\n\n return {\n components: {\n root: 'div',\n },\n root: getNativeElementProps('div', {\n role: 'group',\n ref: useMergedRefs(ref, innerRef),\n onKeyDown,\n ...props,\n }),\n };\n};\n"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AACvB,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AACpE,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAA,IAAsBC,SAAS,QAAQ;AAEhD,SAASC,UAAU,EAAEC,SAAS,QAAQ;AAEtC;;;;;;;;;AASA,OAAO,MAAMC,0BAAA,GAA6BA,CACxCC,KAAA,EACAC,GAAA,KACwB;EACxB,MAAMC,QAAA,GAAWZ,KAAA,CAAMa,MAAM;EAC7B,MAAM;IAAEC,GAAA;IAAKC;EAAc,CAAE,GAAGT,SAAA;EAEhC,MAAMU,YAAA,GAAed,aAAA,CAAcK,UAAA,EAAYO,GAAA;EAC/C,MAAMG,YAAA,GAAef,aAAA,CAAcM,SAAA,EAAWM,GAAA;EAE9C,MAAM;IAAEI,iBAAA;IAAmBC;EAAiB,CAAE,GAAGf,eAAA;EAEjD,MAAMgB,SAAA,GAAYpB,KAAA,CAAMqB,WAAW,CAChCC,CAAA,IAAwC;
|
|
1
|
+
{"version":3,"names":["React","getNativeElementProps","getRTLSafeKey","useMergedRefs","useFocusFinders","useFluent_unstable","useFluent","ArrowRight","ArrowLeft","useMenuSplitGroup_unstable","props","ref","innerRef","useRef","dir","targetDocument","nextArrowKey","prevArrowKey","findNextFocusable","findPrevFocusable","onKeyDown","useCallback","e","_innerRef_current","activeElement","current","contains","key","next","container","focus","prev","components","root","role"],"sources":["../../../src/components/MenuSplitGroup/useMenuSplitGroup.ts"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, getRTLSafeKey, useMergedRefs } from '@fluentui/react-utilities';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport type { MenuSplitGroupProps, MenuSplitGroupState } from './MenuSplitGroup.types';\nimport { ArrowRight, ArrowLeft } from '@fluentui/keyboard-keys';\n\n/**\n * Create the state required to render MenuSplitGroup.\n *\n * The returned state can be modified with hooks such as useMenuSplitGroupStyles_unstable,\n * before being passed to renderMenuSplitGroup_unstable.\n *\n * @param props - props from this instance of MenuSplitGroup\n * @param ref - reference to root HTMLElement of MenuSplitGroup\n */\nexport const useMenuSplitGroup_unstable = (\n props: MenuSplitGroupProps,\n ref: React.Ref<HTMLElement>,\n): MenuSplitGroupState => {\n const innerRef = React.useRef<HTMLElement>();\n const { dir, targetDocument } = useFluent();\n\n const nextArrowKey = getRTLSafeKey(ArrowRight, dir);\n const prevArrowKey = getRTLSafeKey(ArrowLeft, dir);\n\n const { findNextFocusable, findPrevFocusable } = useFocusFinders();\n\n const onKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLElement>) => {\n const activeElement = targetDocument?.activeElement;\n if (!activeElement) {\n return;\n }\n\n if (!innerRef.current?.contains(activeElement)) {\n return;\n }\n\n if (e.key === nextArrowKey) {\n const next = findNextFocusable(activeElement as HTMLElement, { container: innerRef.current });\n next?.focus();\n }\n\n if (e.key === prevArrowKey) {\n const prev = findPrevFocusable(activeElement as HTMLElement, { container: innerRef.current });\n prev?.focus();\n }\n },\n [findNextFocusable, findPrevFocusable, targetDocument, nextArrowKey, prevArrowKey],\n );\n\n return {\n components: {\n root: 'div',\n },\n root: getNativeElementProps('div', {\n role: 'group',\n ref: useMergedRefs(ref, innerRef),\n onKeyDown,\n ...props,\n }),\n };\n};\n"],"mappings":"AAAA,YAAYA,KAAA,MAAW;AACvB,SAASC,qBAAqB,EAAEC,aAAa,EAAEC,aAAa,QAAQ;AACpE,SAASC,eAAe,QAAQ;AAChC,SAASC,kBAAA,IAAsBC,SAAS,QAAQ;AAEhD,SAASC,UAAU,EAAEC,SAAS,QAAQ;AAEtC;;;;;;;;;AASA,OAAO,MAAMC,0BAAA,GAA6BA,CACxCC,KAAA,EACAC,GAAA,KACwB;EACxB,MAAMC,QAAA,GAAWZ,KAAA,CAAMa,MAAM;EAC7B,MAAM;IAAEC,GAAA;IAAKC;EAAc,CAAE,GAAGT,SAAA;EAEhC,MAAMU,YAAA,GAAed,aAAA,CAAcK,UAAA,EAAYO,GAAA;EAC/C,MAAMG,YAAA,GAAef,aAAA,CAAcM,SAAA,EAAWM,GAAA;EAE9C,MAAM;IAAEI,iBAAA;IAAmBC;EAAiB,CAAE,GAAGf,eAAA;EAEjD,MAAMgB,SAAA,GAAYpB,KAAA,CAAMqB,WAAW,CAChCC,CAAA,IAAwC;QAMlCC,iBAAA;IALL,MAAMC,aAAA,GAAgBT,cAAA,aAAAA,cAAA,uBAAAA,cAAA,CAAgBS,aAAa;IACnD,IAAI,CAACA,aAAA,EAAe;MAClB;IACF;IAEA,IAAI,EAAC,CAAAD,iBAAA,GAAAX,QAAA,CAASa,OAAO,cAAhBF,iBAAA,uBAAAA,iBAAA,CAAkBG,QAAA,CAASF,aAAA,IAAgB;MAC9C;IACF;IAEA,IAAIF,CAAA,CAAEK,GAAG,KAAKX,YAAA,EAAc;MAC1B,MAAMY,IAAA,GAAOV,iBAAA,CAAkBM,aAAA,EAA8B;QAAEK,SAAA,EAAWjB,QAAA,CAASa;MAAQ;MAC3FG,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAME,KAAK;IACb;IAEA,IAAIR,CAAA,CAAEK,GAAG,KAAKV,YAAA,EAAc;MAC1B,MAAMc,IAAA,GAAOZ,iBAAA,CAAkBK,aAAA,EAA8B;QAAEK,SAAA,EAAWjB,QAAA,CAASa;MAAQ;MAC3FM,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAMD,KAAK;IACb;EACF,GACA,CAACZ,iBAAA,EAAmBC,iBAAA,EAAmBJ,cAAA,EAAgBC,YAAA,EAAcC,YAAA,CAAa;EAGpF,OAAO;IACLe,UAAA,EAAY;MACVC,IAAA,EAAM;IACR;IACAA,IAAA,EAAMhC,qBAAA,CAAsB,OAAO;MACjCiC,IAAA,EAAM;MACNvB,GAAA,EAAKR,aAAA,CAAcQ,GAAA,EAAKC,QAAA;MACxBQ,SAAA;MACA,GAAGV;IACL;EACF;AACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { __styles, mergeClasses } from
|
|
2
|
-
import { tokens } from
|
|
3
|
-
import { menuItemClassNames } from
|
|
1
|
+
import { __styles, mergeClasses } from '@griffel/react';
|
|
2
|
+
import { tokens } from '@fluentui/react-theme';
|
|
3
|
+
import { menuItemClassNames } from '../MenuItem/useMenuItemStyles';
|
|
4
4
|
export const menuSplitGroupClassNames = {
|
|
5
|
-
root:
|
|
5
|
+
root: 'fui-MenuSplitGroup'
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
8
|
* Styles for the root slot
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { useMenuTrigger_unstable } from
|
|
3
|
-
import { renderMenuTrigger_unstable } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useMenuTrigger_unstable } from './useMenuTrigger';
|
|
3
|
+
import { renderMenuTrigger_unstable } from './renderMenuTrigger';
|
|
4
4
|
/**
|
|
5
5
|
* Wraps a trigger element as an only child
|
|
6
6
|
* and adds the necessary event handling to open a popup menu
|
|
@@ -9,7 +9,7 @@ export const MenuTrigger = props => {
|
|
|
9
9
|
const state = useMenuTrigger_unstable(props);
|
|
10
10
|
return renderMenuTrigger_unstable(state);
|
|
11
11
|
};
|
|
12
|
-
MenuTrigger.displayName =
|
|
12
|
+
MenuTrigger.displayName = 'MenuTrigger';
|
|
13
13
|
// type casting here is required to ensure internal type FluentTriggerComponent is not leaked
|
|
14
14
|
MenuTrigger.isFluentTriggerComponent = true;
|
|
15
15
|
//# sourceMappingURL=MenuTrigger.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import * as React from
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
//# sourceMappingURL=MenuTrigger.types.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from './MenuTrigger';
|
|
2
|
+
export * from './MenuTrigger.types';
|
|
3
|
+
export * from './renderMenuTrigger';
|
|
4
|
+
export * from './useMenuTrigger';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { MenuTriggerContextProvider } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { MenuTriggerContextProvider } from '../../contexts/menuTriggerContext';
|
|
3
3
|
/**
|
|
4
4
|
* Render the final JSX of MenuTrigger
|
|
5
5
|
*
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { useMenuContext_unstable } from
|
|
3
|
-
import { useIsSubmenu } from
|
|
4
|
-
import { useFocusFinders } from
|
|
5
|
-
import { useFluent_unstable as useFluent } from
|
|
6
|
-
import { ArrowRight, ArrowLeft, Escape, ArrowDown } from
|
|
7
|
-
import { applyTriggerPropsToChildren, getTriggerChild, isHTMLElement, mergeCallbacks, useEventCallback, useMergedRefs } from
|
|
8
|
-
import { useARIAButtonProps } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useMenuContext_unstable } from '../../contexts/menuContext';
|
|
3
|
+
import { useIsSubmenu } from '../../utils/useIsSubmenu';
|
|
4
|
+
import { useFocusFinders } from '@fluentui/react-tabster';
|
|
5
|
+
import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
|
|
6
|
+
import { ArrowRight, ArrowLeft, Escape, ArrowDown } from '@fluentui/keyboard-keys';
|
|
7
|
+
import { applyTriggerPropsToChildren, getTriggerChild, isHTMLElement, mergeCallbacks, useEventCallback, useMergedRefs } from '@fluentui/react-utilities';
|
|
8
|
+
import { useARIAButtonProps } from '@fluentui/react-aria';
|
|
9
9
|
/**
|
|
10
10
|
* Create the state required to render MenuTrigger.
|
|
11
11
|
* Clones the only child component and adds necessary event handling behaviours to open a popup menu
|
|
@@ -30,14 +30,14 @@ export const useMenuTrigger_unstable = props => {
|
|
|
30
30
|
} = useFocusFinders();
|
|
31
31
|
const focusFirst = React.useCallback(() => {
|
|
32
32
|
const firstFocusable = findFirstFocusable(menuPopoverRef.current);
|
|
33
|
-
firstFocusable
|
|
33
|
+
firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
|
|
34
34
|
}, [findFirstFocusable, menuPopoverRef]);
|
|
35
35
|
const openedWithKeyboardRef = React.useRef(false);
|
|
36
36
|
const hasMouseMoved = React.useRef(false);
|
|
37
37
|
const {
|
|
38
38
|
dir
|
|
39
39
|
} = useFluent();
|
|
40
|
-
const OpenArrowKey = dir ===
|
|
40
|
+
const OpenArrowKey = dir === 'ltr' ? ArrowRight : ArrowLeft;
|
|
41
41
|
const child = getTriggerChild(children);
|
|
42
42
|
const onContextMenu = event => {
|
|
43
43
|
if (isTargetDisabled(event)) {
|
|
@@ -48,7 +48,7 @@ export const useMenuTrigger_unstable = props => {
|
|
|
48
48
|
setOpen(event, {
|
|
49
49
|
open: true,
|
|
50
50
|
keyboard: false,
|
|
51
|
-
type:
|
|
51
|
+
type: 'menuTriggerContextMenu',
|
|
52
52
|
event
|
|
53
53
|
});
|
|
54
54
|
}
|
|
@@ -61,7 +61,7 @@ export const useMenuTrigger_unstable = props => {
|
|
|
61
61
|
setOpen(event, {
|
|
62
62
|
open: !open,
|
|
63
63
|
keyboard: openedWithKeyboardRef.current,
|
|
64
|
-
type:
|
|
64
|
+
type: 'menuTriggerClick',
|
|
65
65
|
event
|
|
66
66
|
});
|
|
67
67
|
openedWithKeyboardRef.current = false;
|
|
@@ -76,7 +76,7 @@ export const useMenuTrigger_unstable = props => {
|
|
|
76
76
|
setOpen(event, {
|
|
77
77
|
open: true,
|
|
78
78
|
keyboard: true,
|
|
79
|
-
type:
|
|
79
|
+
type: 'menuTriggerKeyDown',
|
|
80
80
|
event
|
|
81
81
|
});
|
|
82
82
|
}
|
|
@@ -84,7 +84,7 @@ export const useMenuTrigger_unstable = props => {
|
|
|
84
84
|
setOpen(event, {
|
|
85
85
|
open: false,
|
|
86
86
|
keyboard: true,
|
|
87
|
-
type:
|
|
87
|
+
type: 'menuTriggerKeyDown',
|
|
88
88
|
event
|
|
89
89
|
});
|
|
90
90
|
}
|
|
@@ -101,7 +101,7 @@ export const useMenuTrigger_unstable = props => {
|
|
|
101
101
|
setOpen(event, {
|
|
102
102
|
open: true,
|
|
103
103
|
keyboard: false,
|
|
104
|
-
type:
|
|
104
|
+
type: 'menuTriggerMouseEnter',
|
|
105
105
|
event
|
|
106
106
|
});
|
|
107
107
|
}
|
|
@@ -117,7 +117,7 @@ export const useMenuTrigger_unstable = props => {
|
|
|
117
117
|
setOpen(event, {
|
|
118
118
|
open: true,
|
|
119
119
|
keyboard: false,
|
|
120
|
-
type:
|
|
120
|
+
type: 'menuTriggerMouseMove',
|
|
121
121
|
event
|
|
122
122
|
});
|
|
123
123
|
hasMouseMoved.current = true;
|
|
@@ -131,35 +131,35 @@ export const useMenuTrigger_unstable = props => {
|
|
|
131
131
|
setOpen(event, {
|
|
132
132
|
open: false,
|
|
133
133
|
keyboard: false,
|
|
134
|
-
type:
|
|
134
|
+
type: 'menuTriggerMouseLeave',
|
|
135
135
|
event
|
|
136
136
|
});
|
|
137
137
|
}
|
|
138
138
|
};
|
|
139
139
|
const contextMenuProps = {
|
|
140
140
|
id: triggerId,
|
|
141
|
-
...child
|
|
142
|
-
ref: useMergedRefs(triggerRef, child
|
|
143
|
-
onMouseEnter: useEventCallback(mergeCallbacks(child
|
|
144
|
-
onMouseLeave: useEventCallback(mergeCallbacks(child
|
|
145
|
-
onContextMenu: useEventCallback(mergeCallbacks(child
|
|
146
|
-
onMouseMove: useEventCallback(mergeCallbacks(child
|
|
141
|
+
...(child === null || child === void 0 ? void 0 : child.props),
|
|
142
|
+
ref: useMergedRefs(triggerRef, child === null || child === void 0 ? void 0 : child.ref),
|
|
143
|
+
onMouseEnter: useEventCallback(mergeCallbacks(child === null || child === void 0 ? void 0 : child.props.onMouseEnter, onMouseEnter)),
|
|
144
|
+
onMouseLeave: useEventCallback(mergeCallbacks(child === null || child === void 0 ? void 0 : child.props.onMouseLeave, onMouseLeave)),
|
|
145
|
+
onContextMenu: useEventCallback(mergeCallbacks(child === null || child === void 0 ? void 0 : child.props.onContextMenu, onContextMenu)),
|
|
146
|
+
onMouseMove: useEventCallback(mergeCallbacks(child === null || child === void 0 ? void 0 : child.props.onMouseMove, onMouseMove))
|
|
147
147
|
};
|
|
148
148
|
const triggerChildProps = {
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
'aria-haspopup': 'menu',
|
|
150
|
+
'aria-expanded': !open && !isSubmenu ? undefined : open,
|
|
151
151
|
...contextMenuProps,
|
|
152
|
-
onClick: useEventCallback(mergeCallbacks(child
|
|
153
|
-
onKeyDown: useEventCallback(mergeCallbacks(child
|
|
152
|
+
onClick: useEventCallback(mergeCallbacks(child === null || child === void 0 ? void 0 : child.props.onClick, onClick)),
|
|
153
|
+
onKeyDown: useEventCallback(mergeCallbacks(child === null || child === void 0 ? void 0 : child.props.onKeyDown, onKeyDown))
|
|
154
154
|
};
|
|
155
|
-
const ariaButtonTriggerChildProps = useARIAButtonProps(child
|
|
155
|
+
const ariaButtonTriggerChildProps = useARIAButtonProps((child === null || child === void 0 ? void 0 : child.type) === 'button' || (child === null || child === void 0 ? void 0 : child.type) === 'a' ? child.type : 'div', triggerChildProps);
|
|
156
156
|
return {
|
|
157
157
|
isSubmenu,
|
|
158
158
|
children: applyTriggerPropsToChildren(children, openOnContext ? contextMenuProps : disableButtonEnhancement ? triggerChildProps : ariaButtonTriggerChildProps)
|
|
159
159
|
};
|
|
160
160
|
};
|
|
161
161
|
const isTargetDisabled = event => {
|
|
162
|
-
const isDisabled = el => el.hasAttribute(
|
|
162
|
+
const isDisabled = el => el.hasAttribute('disabled') || el.hasAttribute('aria-disabled') && el.getAttribute('aria-disabled') === 'true';
|
|
163
163
|
if (isHTMLElement(event.target) && isDisabled(event.target)) {
|
|
164
164
|
return true;
|
|
165
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMenuContext_unstable","useIsSubmenu","useFocusFinders","useFluent_unstable","useFluent","ArrowRight","ArrowLeft","Escape","ArrowDown","applyTriggerPropsToChildren","getTriggerChild","isHTMLElement","mergeCallbacks","useEventCallback","useMergedRefs","useARIAButtonProps","useMenuTrigger_unstable","props","children","disableButtonEnhancement","triggerRef","context","menuPopoverRef","setOpen","open","triggerId","openOnHover","openOnContext","isSubmenu","findFirstFocusable","focusFirst","useCallback","firstFocusable","current","focus","openedWithKeyboardRef","useRef","hasMouseMoved","dir","OpenArrowKey","child","onContextMenu","event","isTargetDisabled","preventDefault","keyboard","type","onClick","onKeyDown","key","onMouseEnter","onMouseMove","onMouseLeave","contextMenuProps","id","ref","triggerChildProps","undefined","ariaButtonTriggerChildProps","isDisabled","el","hasAttribute","getAttribute","target","currentTarget"],"sources":["../../../src/components/MenuTrigger/useMenuTrigger.ts"],"sourcesContent":["import * as React from 'react';\nimport { MenuTriggerProps, MenuTriggerState } from './MenuTrigger.types';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { useIsSubmenu } from '../../utils/useIsSubmenu';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { ArrowRight, ArrowLeft, Escape, ArrowDown } from '@fluentui/keyboard-keys';\nimport {\n applyTriggerPropsToChildren,\n getTriggerChild,\n isHTMLElement,\n mergeCallbacks,\n useEventCallback,\n useMergedRefs,\n} from '@fluentui/react-utilities';\nimport { useARIAButtonProps } from '@fluentui/react-aria';\n\n/**\n * Create the state required to render MenuTrigger.\n * Clones the only child component and adds necessary event handling behaviours to open a popup menu\n *\n * @param props - props from this instance of MenuTrigger\n */\nexport const useMenuTrigger_unstable = (props: MenuTriggerProps): MenuTriggerState => {\n const { children, disableButtonEnhancement = false } = props;\n\n const triggerRef = useMenuContext_unstable(context => context.triggerRef);\n const menuPopoverRef = useMenuContext_unstable(context => context.menuPopoverRef);\n const setOpen = useMenuContext_unstable(context => context.setOpen);\n const open = useMenuContext_unstable(context => context.open);\n const triggerId = useMenuContext_unstable(context => context.triggerId);\n const openOnHover = useMenuContext_unstable(context => context.openOnHover);\n const openOnContext = useMenuContext_unstable(context => context.openOnContext);\n\n const isSubmenu = useIsSubmenu();\n\n const { findFirstFocusable } = useFocusFinders();\n const focusFirst = React.useCallback(() => {\n const firstFocusable = findFirstFocusable(menuPopoverRef.current);\n firstFocusable?.focus();\n }, [findFirstFocusable, menuPopoverRef]);\n\n const openedWithKeyboardRef = React.useRef(false);\n const hasMouseMoved = React.useRef(false);\n\n const { dir } = useFluent();\n const OpenArrowKey = dir === 'ltr' ? ArrowRight : ArrowLeft;\n\n const child = getTriggerChild(children);\n\n const onContextMenu = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n\n if (openOnContext) {\n event.preventDefault();\n setOpen(event, { open: true, keyboard: false, type: 'menuTriggerContextMenu', event });\n }\n };\n\n const onClick = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n\n if (!openOnContext) {\n setOpen(event, { open: !open, keyboard: openedWithKeyboardRef.current, type: 'menuTriggerClick', event });\n openedWithKeyboardRef.current = false;\n }\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n\n const key = event.key;\n\n if (!openOnContext && ((isSubmenu && key === OpenArrowKey) || (!isSubmenu && key === ArrowDown))) {\n setOpen(event, { open: true, keyboard: true, type: 'menuTriggerKeyDown', event });\n }\n\n if (key === Escape && !isSubmenu) {\n setOpen(event, { open: false, keyboard: true, type: 'menuTriggerKeyDown', event });\n }\n\n // if menu is already open, can't rely on effects to focus\n if (open && key === OpenArrowKey && isSubmenu) {\n focusFirst();\n }\n };\n\n const onMouseEnter = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n if (openOnHover && hasMouseMoved.current) {\n setOpen(event, { open: true, keyboard: false, type: 'menuTriggerMouseEnter', event });\n }\n };\n\n // Opening a menu when a mouse hasn't moved and just entering the trigger is a bad a11y experience\n // First time open the mouse using mousemove and then continue with mouseenter\n // Only use once to determine that the user is using the mouse since it is an expensive event to handle\n const onMouseMove = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n if (openOnHover && !hasMouseMoved.current) {\n setOpen(event, { open: true, keyboard: false, type: 'menuTriggerMouseMove', event });\n hasMouseMoved.current = true;\n }\n };\n\n const onMouseLeave = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n if (openOnHover) {\n setOpen(event, { open: false, keyboard: false, type: 'menuTriggerMouseLeave', event });\n }\n };\n\n const contextMenuProps = {\n id: triggerId,\n ...child?.props,\n ref: useMergedRefs(triggerRef, child?.ref),\n onMouseEnter: useEventCallback(mergeCallbacks(child?.props.onMouseEnter, onMouseEnter)),\n onMouseLeave: useEventCallback(mergeCallbacks(child?.props.onMouseLeave, onMouseLeave)),\n onContextMenu: useEventCallback(mergeCallbacks(child?.props.onContextMenu, onContextMenu)),\n onMouseMove: useEventCallback(mergeCallbacks(child?.props.onMouseMove, onMouseMove)),\n };\n\n const triggerChildProps = {\n 'aria-haspopup': 'menu',\n 'aria-expanded': !open && !isSubmenu ? undefined : open,\n ...contextMenuProps,\n onClick: useEventCallback(mergeCallbacks(child?.props.onClick, onClick)),\n onKeyDown: useEventCallback(mergeCallbacks(child?.props.onKeyDown, onKeyDown)),\n } as const;\n\n const ariaButtonTriggerChildProps = useARIAButtonProps(\n child?.type === 'button' || child?.type === 'a' ? child.type : 'div',\n triggerChildProps,\n );\n\n return {\n isSubmenu,\n children: applyTriggerPropsToChildren(\n children,\n openOnContext ? contextMenuProps : disableButtonEnhancement ? triggerChildProps : ariaButtonTriggerChildProps,\n ),\n };\n};\n\nconst isTargetDisabled = (event: React.SyntheticEvent | Event) => {\n const isDisabled = (el: HTMLElement) =>\n el.hasAttribute('disabled') || (el.hasAttribute('aria-disabled') && el.getAttribute('aria-disabled') === 'true');\n if (isHTMLElement(event.target) && isDisabled(event.target)) {\n return true;\n }\n\n return isHTMLElement(event.currentTarget) && isDisabled(event.currentTarget);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useMenuContext_unstable","useIsSubmenu","useFocusFinders","useFluent_unstable","useFluent","ArrowRight","ArrowLeft","Escape","ArrowDown","applyTriggerPropsToChildren","getTriggerChild","isHTMLElement","mergeCallbacks","useEventCallback","useMergedRefs","useARIAButtonProps","useMenuTrigger_unstable","props","children","disableButtonEnhancement","triggerRef","context","menuPopoverRef","setOpen","open","triggerId","openOnHover","openOnContext","isSubmenu","findFirstFocusable","focusFirst","useCallback","firstFocusable","current","focus","openedWithKeyboardRef","useRef","hasMouseMoved","dir","OpenArrowKey","child","onContextMenu","event","isTargetDisabled","preventDefault","keyboard","type","onClick","onKeyDown","key","onMouseEnter","onMouseMove","onMouseLeave","contextMenuProps","id","ref","triggerChildProps","undefined","ariaButtonTriggerChildProps","isDisabled","el","hasAttribute","getAttribute","target","currentTarget"],"sources":["../../../src/components/MenuTrigger/useMenuTrigger.ts"],"sourcesContent":["import * as React from 'react';\nimport { MenuTriggerProps, MenuTriggerState } from './MenuTrigger.types';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { useIsSubmenu } from '../../utils/useIsSubmenu';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { ArrowRight, ArrowLeft, Escape, ArrowDown } from '@fluentui/keyboard-keys';\nimport {\n applyTriggerPropsToChildren,\n getTriggerChild,\n isHTMLElement,\n mergeCallbacks,\n useEventCallback,\n useMergedRefs,\n} from '@fluentui/react-utilities';\nimport { useARIAButtonProps } from '@fluentui/react-aria';\n\n/**\n * Create the state required to render MenuTrigger.\n * Clones the only child component and adds necessary event handling behaviours to open a popup menu\n *\n * @param props - props from this instance of MenuTrigger\n */\nexport const useMenuTrigger_unstable = (props: MenuTriggerProps): MenuTriggerState => {\n const { children, disableButtonEnhancement = false } = props;\n\n const triggerRef = useMenuContext_unstable(context => context.triggerRef);\n const menuPopoverRef = useMenuContext_unstable(context => context.menuPopoverRef);\n const setOpen = useMenuContext_unstable(context => context.setOpen);\n const open = useMenuContext_unstable(context => context.open);\n const triggerId = useMenuContext_unstable(context => context.triggerId);\n const openOnHover = useMenuContext_unstable(context => context.openOnHover);\n const openOnContext = useMenuContext_unstable(context => context.openOnContext);\n\n const isSubmenu = useIsSubmenu();\n\n const { findFirstFocusable } = useFocusFinders();\n const focusFirst = React.useCallback(() => {\n const firstFocusable = findFirstFocusable(menuPopoverRef.current);\n firstFocusable?.focus();\n }, [findFirstFocusable, menuPopoverRef]);\n\n const openedWithKeyboardRef = React.useRef(false);\n const hasMouseMoved = React.useRef(false);\n\n const { dir } = useFluent();\n const OpenArrowKey = dir === 'ltr' ? ArrowRight : ArrowLeft;\n\n const child = getTriggerChild(children);\n\n const onContextMenu = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n\n if (openOnContext) {\n event.preventDefault();\n setOpen(event, { open: true, keyboard: false, type: 'menuTriggerContextMenu', event });\n }\n };\n\n const onClick = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n\n if (!openOnContext) {\n setOpen(event, { open: !open, keyboard: openedWithKeyboardRef.current, type: 'menuTriggerClick', event });\n openedWithKeyboardRef.current = false;\n }\n };\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n\n const key = event.key;\n\n if (!openOnContext && ((isSubmenu && key === OpenArrowKey) || (!isSubmenu && key === ArrowDown))) {\n setOpen(event, { open: true, keyboard: true, type: 'menuTriggerKeyDown', event });\n }\n\n if (key === Escape && !isSubmenu) {\n setOpen(event, { open: false, keyboard: true, type: 'menuTriggerKeyDown', event });\n }\n\n // if menu is already open, can't rely on effects to focus\n if (open && key === OpenArrowKey && isSubmenu) {\n focusFirst();\n }\n };\n\n const onMouseEnter = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n if (openOnHover && hasMouseMoved.current) {\n setOpen(event, { open: true, keyboard: false, type: 'menuTriggerMouseEnter', event });\n }\n };\n\n // Opening a menu when a mouse hasn't moved and just entering the trigger is a bad a11y experience\n // First time open the mouse using mousemove and then continue with mouseenter\n // Only use once to determine that the user is using the mouse since it is an expensive event to handle\n const onMouseMove = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n if (openOnHover && !hasMouseMoved.current) {\n setOpen(event, { open: true, keyboard: false, type: 'menuTriggerMouseMove', event });\n hasMouseMoved.current = true;\n }\n };\n\n const onMouseLeave = (event: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(event)) {\n return;\n }\n if (openOnHover) {\n setOpen(event, { open: false, keyboard: false, type: 'menuTriggerMouseLeave', event });\n }\n };\n\n const contextMenuProps = {\n id: triggerId,\n ...child?.props,\n ref: useMergedRefs(triggerRef, child?.ref),\n onMouseEnter: useEventCallback(mergeCallbacks(child?.props.onMouseEnter, onMouseEnter)),\n onMouseLeave: useEventCallback(mergeCallbacks(child?.props.onMouseLeave, onMouseLeave)),\n onContextMenu: useEventCallback(mergeCallbacks(child?.props.onContextMenu, onContextMenu)),\n onMouseMove: useEventCallback(mergeCallbacks(child?.props.onMouseMove, onMouseMove)),\n };\n\n const triggerChildProps = {\n 'aria-haspopup': 'menu',\n 'aria-expanded': !open && !isSubmenu ? undefined : open,\n ...contextMenuProps,\n onClick: useEventCallback(mergeCallbacks(child?.props.onClick, onClick)),\n onKeyDown: useEventCallback(mergeCallbacks(child?.props.onKeyDown, onKeyDown)),\n } as const;\n\n const ariaButtonTriggerChildProps = useARIAButtonProps(\n child?.type === 'button' || child?.type === 'a' ? child.type : 'div',\n triggerChildProps,\n );\n\n return {\n isSubmenu,\n children: applyTriggerPropsToChildren(\n children,\n openOnContext ? contextMenuProps : disableButtonEnhancement ? triggerChildProps : ariaButtonTriggerChildProps,\n ),\n };\n};\n\nconst isTargetDisabled = (event: React.SyntheticEvent | Event) => {\n const isDisabled = (el: HTMLElement) =>\n el.hasAttribute('disabled') || (el.hasAttribute('aria-disabled') && el.getAttribute('aria-disabled') === 'true');\n if (isHTMLElement(event.target) && isDisabled(event.target)) {\n return true;\n }\n\n return isHTMLElement(event.currentTarget) && isDisabled(event.currentTarget);\n};\n"],"mappings":"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"}
|
package/lib/components/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from './MenuItem/index';
|
|
2
|
+
export * from './MenuList/index';
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as React from
|
|
2
|
-
import { createContext, useContextSelector } from
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { createContext, useContextSelector } from '@fluentui/react-context-selector';
|
|
3
3
|
export const MenuContext = /*#__PURE__*/createContext(undefined);
|
|
4
4
|
const menuContextDefaultValue = {
|
|
5
5
|
open: false,
|
|
@@ -14,7 +14,7 @@ const menuContextDefaultValue = {
|
|
|
14
14
|
current: null
|
|
15
15
|
},
|
|
16
16
|
mountNode: null,
|
|
17
|
-
triggerId:
|
|
17
|
+
triggerId: '',
|
|
18
18
|
openOnContext: false,
|
|
19
19
|
openOnHover: false,
|
|
20
20
|
hasIcons: false,
|