@fluentui/react-menu 0.0.0-nightly-20230222-0421.1 → 0.0.0-nightly-20230223-2115.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 +33 -0
- package/CHANGELOG.json +38 -23
- package/CHANGELOG.md +23 -14
- package/lib/Menu.js.map +1 -1
- package/lib/MenuDivider.js.map +1 -1
- package/lib/MenuGroup.js.map +1 -1
- package/lib/MenuGroupHeader.js.map +1 -1
- package/lib/MenuItem.js.map +1 -1
- package/lib/MenuItemCheckbox.js.map +1 -1
- package/lib/MenuItemRadio.js.map +1 -1
- package/lib/MenuList.js.map +1 -1
- package/lib/MenuPopover.js.map +1 -1
- package/lib/MenuSplitGroup.js.map +1 -1
- package/lib/MenuTrigger.js.map +1 -1
- package/lib/components/Menu/Menu.js +1 -0
- package/lib/components/Menu/Menu.js.map +1 -1
- package/lib/components/Menu/Menu.types.js +1 -1
- package/lib/components/Menu/Menu.types.js.map +1 -1
- package/lib/components/Menu/index.js.map +1 -1
- package/lib/components/Menu/renderMenu.js.map +1 -1
- package/lib/components/Menu/useMenu.js +14 -12
- package/lib/components/Menu/useMenu.js.map +1 -1
- package/lib/components/Menu/useMenuContextValues.js.map +1 -1
- package/lib/components/MenuDivider/MenuDivider.js.map +1 -1
- package/lib/components/MenuDivider/MenuDivider.types.js.map +1 -1
- package/lib/components/MenuDivider/index.js.map +1 -1
- package/lib/components/MenuDivider/renderMenuDivider.js +2 -3
- package/lib/components/MenuDivider/renderMenuDivider.js.map +1 -1
- package/lib/components/MenuDivider/useMenuDivider.js +1 -0
- package/lib/components/MenuDivider/useMenuDivider.js.map +1 -1
- package/lib/components/MenuDivider/useMenuDividerStyles.js.map +1 -1
- package/lib/components/MenuGroup/MenuGroup.js.map +1 -1
- package/lib/components/MenuGroup/MenuGroup.types.js.map +1 -1
- package/lib/components/MenuGroup/index.js.map +1 -1
- package/lib/components/MenuGroup/renderMenuGroup.js +2 -3
- package/lib/components/MenuGroup/renderMenuGroup.js.map +1 -1
- package/lib/components/MenuGroup/useMenuGroup.js +1 -0
- package/lib/components/MenuGroup/useMenuGroup.js.map +1 -1
- package/lib/components/MenuGroup/useMenuGroupContextValues.js.map +1 -1
- package/lib/components/MenuGroup/useMenuGroupStyles.js.map +1 -1
- package/lib/components/MenuGroupHeader/MenuGroupHeader.js.map +1 -1
- package/lib/components/MenuGroupHeader/MenuGroupHeader.types.js.map +1 -1
- package/lib/components/MenuGroupHeader/index.js.map +1 -1
- package/lib/components/MenuGroupHeader/renderMenuGroupHeader.js +2 -3
- package/lib/components/MenuGroupHeader/renderMenuGroupHeader.js.map +1 -1
- package/lib/components/MenuGroupHeader/useMenuGroupHeader.js +1 -0
- package/lib/components/MenuGroupHeader/useMenuGroupHeader.js.map +1 -1
- package/lib/components/MenuGroupHeader/useMenuGroupHeaderStyles.js.map +1 -1
- package/lib/components/MenuItem/MenuItem.js.map +1 -1
- package/lib/components/MenuItem/MenuItem.types.js.map +1 -1
- package/lib/components/MenuItem/index.js.map +1 -1
- package/lib/components/MenuItem/renderMenuItem.js +2 -13
- package/lib/components/MenuItem/renderMenuItem.js.map +1 -1
- package/lib/components/MenuItem/useCharacterSearch.js +3 -2
- package/lib/components/MenuItem/useCharacterSearch.js.map +1 -1
- package/lib/components/MenuItem/useMenuItem.js +7 -7
- package/lib/components/MenuItem/useMenuItem.js.map +1 -1
- package/lib/components/MenuItem/useMenuItemStyles.js.map +1 -1
- package/lib/components/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib/components/MenuItemCheckbox/MenuItemCheckbox.types.js.map +1 -1
- package/lib/components/MenuItemCheckbox/index.js.map +1 -1
- package/lib/components/MenuItemCheckbox/renderMenuItemCheckbox.js +2 -11
- package/lib/components/MenuItemCheckbox/renderMenuItemCheckbox.js.map +1 -1
- package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js +4 -4
- package/lib/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js.map +1 -1
- package/lib/components/MenuItemRadio/MenuItemRadio.js.map +1 -1
- package/lib/components/MenuItemRadio/MenuItemRadio.types.js.map +1 -1
- package/lib/components/MenuItemRadio/index.js.map +1 -1
- package/lib/components/MenuItemRadio/renderMenuItemRadio.js +2 -11
- package/lib/components/MenuItemRadio/renderMenuItemRadio.js.map +1 -1
- package/lib/components/MenuItemRadio/useMenuItemRadio.js +4 -4
- package/lib/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
- package/lib/components/MenuItemRadio/useMenuItemRadioStyles.js.map +1 -1
- package/lib/components/MenuList/MenuList.js.map +1 -1
- package/lib/components/MenuList/MenuList.types.js +1 -1
- package/lib/components/MenuList/MenuList.types.js.map +1 -1
- package/lib/components/MenuList/index.js.map +1 -1
- package/lib/components/MenuList/renderMenuList.js +2 -3
- package/lib/components/MenuList/renderMenuList.js.map +1 -1
- package/lib/components/MenuList/useMenuList.js +4 -5
- package/lib/components/MenuList/useMenuList.js.map +1 -1
- package/lib/components/MenuList/useMenuListContextValues.js.map +1 -1
- package/lib/components/MenuList/useMenuListStyles.js.map +1 -1
- package/lib/components/MenuPopover/MenuPopover.js.map +1 -1
- package/lib/components/MenuPopover/MenuPopover.types.js.map +1 -1
- package/lib/components/MenuPopover/index.js.map +1 -1
- package/lib/components/MenuPopover/renderMenuPopover.js +3 -6
- package/lib/components/MenuPopover/renderMenuPopover.js.map +1 -1
- package/lib/components/MenuPopover/useMenuPopover.js +3 -4
- package/lib/components/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib/components/MenuPopover/useMenuPopoverStyles.js.map +1 -1
- package/lib/components/MenuSplitGroup/MenuSplitGroup.js.map +1 -1
- package/lib/components/MenuSplitGroup/MenuSplitGroup.types.js.map +1 -1
- package/lib/components/MenuSplitGroup/index.js.map +1 -1
- package/lib/components/MenuSplitGroup/renderMenuSplitGroup.js +2 -3
- package/lib/components/MenuSplitGroup/renderMenuSplitGroup.js.map +1 -1
- package/lib/components/MenuSplitGroup/useMenuSplitGroup.js +2 -2
- package/lib/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
- package/lib/components/MenuSplitGroup/useMenuSplitGroupStyles.js.map +1 -1
- package/lib/components/MenuTrigger/MenuTrigger.js +1 -0
- package/lib/components/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib/components/MenuTrigger/MenuTrigger.types.js +1 -1
- package/lib/components/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib/components/MenuTrigger/index.js.map +1 -1
- package/lib/components/MenuTrigger/renderMenuTrigger.js.map +1 -1
- package/lib/components/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib/components/index.js.map +1 -1
- package/lib/contexts/menuContext.js +5 -1
- package/lib/contexts/menuContext.js.map +1 -1
- package/lib/contexts/menuGroupContext.js +1 -4
- package/lib/contexts/menuGroupContext.js.map +1 -1
- package/lib/contexts/menuListContext.js +5 -1
- package/lib/contexts/menuListContext.js.map +1 -1
- package/lib/contexts/menuTriggerContext.js +1 -4
- package/lib/contexts/menuTriggerContext.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/selectable/index.js.map +1 -1
- package/lib/selectable/types.js +1 -1
- package/lib/selectable/types.js.map +1 -1
- package/lib/selectable/useCheckmarkStyles.js.map +1 -1
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/useIsSubmenu.js.map +1 -1
- package/lib/utils/useOnMenuEnter.js +1 -2
- package/lib/utils/useOnMenuEnter.js.map +1 -1
- package/lib-commonjs/Menu.js +5 -4
- package/lib-commonjs/Menu.js.map +1 -1
- package/lib-commonjs/MenuDivider.js +5 -4
- package/lib-commonjs/MenuDivider.js.map +1 -1
- package/lib-commonjs/MenuGroup.js +5 -4
- package/lib-commonjs/MenuGroup.js.map +1 -1
- package/lib-commonjs/MenuGroupHeader.js +5 -4
- package/lib-commonjs/MenuGroupHeader.js.map +1 -1
- package/lib-commonjs/MenuItem.js +5 -4
- package/lib-commonjs/MenuItem.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox.js +5 -4
- package/lib-commonjs/MenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemRadio.js +5 -4
- package/lib-commonjs/MenuItemRadio.js.map +1 -1
- package/lib-commonjs/MenuList.js +5 -4
- package/lib-commonjs/MenuList.js.map +1 -1
- package/lib-commonjs/MenuPopover.js +5 -4
- package/lib-commonjs/MenuPopover.js.map +1 -1
- package/lib-commonjs/MenuSplitGroup.js +5 -4
- package/lib-commonjs/MenuSplitGroup.js.map +1 -1
- package/lib-commonjs/MenuTrigger.js +5 -4
- package/lib-commonjs/MenuTrigger.js.map +1 -1
- package/lib-commonjs/components/Menu/Menu.js +16 -15
- package/lib-commonjs/components/Menu/Menu.js.map +1 -1
- package/lib-commonjs/components/Menu/Menu.types.js +5 -2
- package/lib-commonjs/components/Menu/Menu.types.js.map +1 -1
- package/lib-commonjs/components/Menu/index.js +9 -8
- package/lib-commonjs/components/Menu/index.js.map +1 -1
- package/lib-commonjs/components/Menu/renderMenu.js +14 -14
- package/lib-commonjs/components/Menu/renderMenu.js.map +1 -1
- package/lib-commonjs/components/Menu/useMenu.js +249 -252
- package/lib-commonjs/components/Menu/useMenu.js.map +1 -1
- package/lib-commonjs/components/Menu/useMenuContextValues.js +28 -41
- package/lib-commonjs/components/Menu/useMenuContextValues.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/MenuDivider.js +16 -15
- package/lib-commonjs/components/MenuDivider/MenuDivider.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/MenuDivider.types.js +3 -2
- package/lib-commonjs/components/MenuDivider/MenuDivider.types.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/index.js +9 -8
- package/lib-commonjs/components/MenuDivider/index.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/renderMenuDivider.js +15 -19
- package/lib-commonjs/components/MenuDivider/renderMenuDivider.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/useMenuDivider.js +22 -21
- package/lib-commonjs/components/MenuDivider/useMenuDivider.js.map +1 -1
- package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.js +47 -25
- package/lib-commonjs/components/MenuDivider/useMenuDividerStyles.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/MenuGroup.js +18 -17
- package/lib-commonjs/components/MenuGroup/MenuGroup.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/MenuGroup.types.js +3 -2
- package/lib-commonjs/components/MenuGroup/MenuGroup.types.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/index.js +10 -9
- package/lib-commonjs/components/MenuGroup/index.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/renderMenuGroup.js +18 -22
- package/lib-commonjs/components/MenuGroup/renderMenuGroup.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/useMenuGroup.js +23 -22
- package/lib-commonjs/components/MenuGroup/useMenuGroup.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/useMenuGroupContextValues.js +18 -15
- package/lib-commonjs/components/MenuGroup/useMenuGroupContextValues.js.map +1 -1
- package/lib-commonjs/components/MenuGroup/useMenuGroupStyles.js +19 -11
- package/lib-commonjs/components/MenuGroup/useMenuGroupStyles.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.js +16 -15
- package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.types.js +3 -2
- package/lib-commonjs/components/MenuGroupHeader/MenuGroupHeader.types.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/index.js +9 -8
- package/lib-commonjs/components/MenuGroupHeader/index.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/renderMenuGroupHeader.js +15 -19
- package/lib-commonjs/components/MenuGroupHeader/renderMenuGroupHeader.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeader.js +22 -23
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeader.js.map +1 -1
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.js +47 -25
- package/lib-commonjs/components/MenuGroupHeader/useMenuGroupHeaderStyles.js.map +1 -1
- package/lib-commonjs/components/MenuItem/MenuItem.js +16 -15
- package/lib-commonjs/components/MenuItem/MenuItem.js.map +1 -1
- package/lib-commonjs/components/MenuItem/MenuItem.types.js +3 -2
- package/lib-commonjs/components/MenuItem/MenuItem.types.js.map +1 -1
- package/lib-commonjs/components/MenuItem/index.js +9 -8
- package/lib-commonjs/components/MenuItem/index.js.map +1 -1
- package/lib-commonjs/components/MenuItem/renderMenuItem.js +15 -28
- package/lib-commonjs/components/MenuItem/renderMenuItem.js.map +1 -1
- package/lib-commonjs/components/MenuItem/useCharacterSearch.js +24 -22
- package/lib-commonjs/components/MenuItem/useCharacterSearch.js.map +1 -1
- package/lib-commonjs/components/MenuItem/useMenuItem.js +97 -104
- package/lib-commonjs/components/MenuItem/useMenuItem.js.map +1 -1
- package/lib-commonjs/components/MenuItem/useMenuItemStyles.js +282 -134
- package/lib-commonjs/components/MenuItem/useMenuItemStyles.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.js +16 -15
- package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.types.js +3 -2
- package/lib-commonjs/components/MenuItemCheckbox/MenuItemCheckbox.types.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/index.js +9 -8
- package/lib-commonjs/components/MenuItemCheckbox/index.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/renderMenuItemCheckbox.js +15 -24
- package/lib-commonjs/components/MenuItemCheckbox/renderMenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js +44 -45
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js +38 -30
- package/lib-commonjs/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.js +16 -15
- package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.types.js +3 -2
- package/lib-commonjs/components/MenuItemRadio/MenuItemRadio.types.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/index.js +9 -8
- package/lib-commonjs/components/MenuItemRadio/index.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/renderMenuItemRadio.js +15 -27
- package/lib-commonjs/components/MenuItemRadio/renderMenuItemRadio.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js +42 -45
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadio.js.map +1 -1
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.js +38 -30
- package/lib-commonjs/components/MenuItemRadio/useMenuItemRadioStyles.js.map +1 -1
- package/lib-commonjs/components/MenuList/MenuList.js +18 -17
- package/lib-commonjs/components/MenuList/MenuList.js.map +1 -1
- package/lib-commonjs/components/MenuList/MenuList.types.js +5 -2
- package/lib-commonjs/components/MenuList/MenuList.types.js.map +1 -1
- package/lib-commonjs/components/MenuList/index.js +10 -9
- package/lib-commonjs/components/MenuList/index.js.map +1 -1
- package/lib-commonjs/components/MenuList/renderMenuList.js +18 -21
- package/lib-commonjs/components/MenuList/renderMenuList.js.map +1 -1
- package/lib-commonjs/components/MenuList/useMenuList.js +141 -137
- package/lib-commonjs/components/MenuList/useMenuList.js.map +1 -1
- package/lib-commonjs/components/MenuList/useMenuListContextValues.js +20 -25
- package/lib-commonjs/components/MenuList/useMenuListContextValues.js.map +1 -1
- package/lib-commonjs/components/MenuList/useMenuListStyles.js +33 -23
- package/lib-commonjs/components/MenuList/useMenuListStyles.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/MenuPopover.js +16 -15
- package/lib-commonjs/components/MenuPopover/MenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/MenuPopover.types.js +3 -2
- package/lib-commonjs/components/MenuPopover/MenuPopover.types.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/index.js +9 -8
- package/lib-commonjs/components/MenuPopover/index.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/renderMenuPopover.js +19 -24
- package/lib-commonjs/components/MenuPopover/renderMenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/useMenuPopover.js +99 -108
- package/lib-commonjs/components/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.js +121 -50
- package/lib-commonjs/components/MenuPopover/useMenuPopoverStyles.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.js +16 -15
- package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.types.js +3 -2
- package/lib-commonjs/components/MenuSplitGroup/MenuSplitGroup.types.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/index.js +9 -8
- package/lib-commonjs/components/MenuSplitGroup/index.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/renderMenuSplitGroup.js +15 -18
- package/lib-commonjs/components/MenuSplitGroup/renderMenuSplitGroup.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroup.js +58 -64
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -1
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.js +61 -32
- package/lib-commonjs/components/MenuSplitGroup/useMenuSplitGroupStyles.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.js +15 -15
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.types.js +5 -2
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/index.js +8 -7
- package/lib-commonjs/components/MenuTrigger/index.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/renderMenuTrigger.js +14 -16
- package/lib-commonjs/components/MenuTrigger/renderMenuTrigger.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js +163 -170
- package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib-commonjs/components/index.js +6 -5
- package/lib-commonjs/components/index.js.map +1 -1
- package/lib-commonjs/contexts/menuContext.js +40 -26
- package/lib-commonjs/contexts/menuContext.js.map +1 -1
- package/lib-commonjs/contexts/menuGroupContext.js +18 -12
- package/lib-commonjs/contexts/menuGroupContext.js.map +1 -1
- package/lib-commonjs/contexts/menuListContext.js +28 -14
- package/lib-commonjs/contexts/menuListContext.js.map +1 -1
- package/lib-commonjs/contexts/menuTriggerContext.js +17 -12
- package/lib-commonjs/contexts/menuTriggerContext.js.map +1 -1
- package/lib-commonjs/index.js +91 -399
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/selectable/index.js +6 -5
- package/lib-commonjs/selectable/index.js.map +1 -1
- package/lib-commonjs/selectable/types.js +5 -2
- package/lib-commonjs/selectable/types.js.map +1 -1
- package/lib-commonjs/selectable/useCheckmarkStyles.js +28 -26
- package/lib-commonjs/selectable/useCheckmarkStyles.js.map +1 -1
- package/lib-commonjs/utils/index.js +5 -4
- package/lib-commonjs/utils/index.js.map +1 -1
- package/lib-commonjs/utils/useIsSubmenu.js +13 -19
- package/lib-commonjs/utils/useIsSubmenu.js.map +1 -1
- package/lib-commonjs/utils/useOnMenuEnter.js +56 -68
- package/lib-commonjs/utils/useOnMenuEnter.js.map +1 -1
- package/package.json +13 -13
|
@@ -1,266 +1,263 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
2
|
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
|
|
3
|
+
value: true
|
|
5
4
|
});
|
|
6
|
-
exports
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
align: isSubmenu ? 'top' : 'start',
|
|
42
|
-
target: props.openOnContext ? contextTarget : undefined,
|
|
43
|
-
...react_positioning_1.resolvePositioningShorthand(props.positioning)
|
|
44
|
-
};
|
|
45
|
-
const children = React.Children.toArray(props.children);
|
|
46
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
47
|
-
if (children.length === 0) {
|
|
48
|
-
// eslint-disable-next-line no-console
|
|
49
|
-
console.warn('Menu must contain at least one child');
|
|
5
|
+
Object.defineProperty(exports, "useMenu_unstable", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: ()=>useMenu_unstable
|
|
8
|
+
});
|
|
9
|
+
const _interopRequireWildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
|
|
10
|
+
const _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
|
|
11
|
+
const _reactPositioning = require("@fluentui/react-positioning");
|
|
12
|
+
const _reactUtilities = require("@fluentui/react-utilities");
|
|
13
|
+
const _reactSharedContexts = require("@fluentui/react-shared-contexts");
|
|
14
|
+
const _reactPortal = require("@fluentui/react-portal");
|
|
15
|
+
const _reactTabster = require("@fluentui/react-tabster");
|
|
16
|
+
const _menuContext = require("../../contexts/menuContext");
|
|
17
|
+
const _index = require("../../utils/index");
|
|
18
|
+
const _useIsSubmenu = require("../../utils/useIsSubmenu");
|
|
19
|
+
const useMenu_unstable = (props)=>{
|
|
20
|
+
const isSubmenu = (0, _useIsSubmenu.useIsSubmenu)();
|
|
21
|
+
const { hoverDelay =500 , inline =false , hasCheckmarks =false , hasIcons =false , closeOnScroll =false , openOnContext =false , persistOnItemClick =false , openOnHover =isSubmenu , defaultCheckedValues } = props;
|
|
22
|
+
const triggerId = (0, _reactUtilities.useId)('menu');
|
|
23
|
+
const [contextTarget, setContextTarget] = (0, _reactPositioning.usePositioningMouseTarget)();
|
|
24
|
+
const positioningState = {
|
|
25
|
+
position: isSubmenu ? 'after' : 'below',
|
|
26
|
+
align: isSubmenu ? 'top' : 'start',
|
|
27
|
+
target: props.openOnContext ? contextTarget : undefined,
|
|
28
|
+
...(0, _reactPositioning.resolvePositioningShorthand)(props.positioning)
|
|
29
|
+
};
|
|
30
|
+
const children = _react.Children.toArray(props.children);
|
|
31
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
32
|
+
if (children.length === 0) {
|
|
33
|
+
// eslint-disable-next-line no-console
|
|
34
|
+
console.warn('Menu must contain at least one child');
|
|
35
|
+
}
|
|
36
|
+
if (children.length > 2) {
|
|
37
|
+
// eslint-disable-next-line no-console
|
|
38
|
+
console.warn('Menu must contain at most two children');
|
|
39
|
+
}
|
|
50
40
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
41
|
+
let menuTrigger = undefined;
|
|
42
|
+
let menuPopover = undefined;
|
|
43
|
+
if (children.length === 2) {
|
|
44
|
+
menuTrigger = children[0];
|
|
45
|
+
menuPopover = children[1];
|
|
46
|
+
} else if (children.length === 1) {
|
|
47
|
+
menuPopover = children[0];
|
|
54
48
|
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
menuTrigger,
|
|
98
|
-
menuPopover,
|
|
99
|
-
triggerRef,
|
|
100
|
-
menuPopoverRef,
|
|
101
|
-
components: {},
|
|
102
|
-
openOnContext,
|
|
103
|
-
open,
|
|
104
|
-
setOpen,
|
|
105
|
-
checkedValues,
|
|
106
|
-
onCheckedValueChange,
|
|
107
|
-
persistOnItemClick
|
|
108
|
-
};
|
|
49
|
+
const { targetRef: triggerRef , containerRef: menuPopoverRef } = (0, _reactPositioning.usePositioning)(positioningState);
|
|
50
|
+
// TODO Better way to narrow types ?
|
|
51
|
+
const [open, setOpen] = useMenuOpenState({
|
|
52
|
+
hoverDelay,
|
|
53
|
+
isSubmenu,
|
|
54
|
+
setContextTarget,
|
|
55
|
+
closeOnScroll,
|
|
56
|
+
menuPopoverRef,
|
|
57
|
+
triggerRef,
|
|
58
|
+
open: props.open,
|
|
59
|
+
defaultOpen: props.defaultOpen,
|
|
60
|
+
onOpenChange: props.onOpenChange,
|
|
61
|
+
openOnContext
|
|
62
|
+
});
|
|
63
|
+
const [checkedValues, onCheckedValueChange] = useMenuSelectableState({
|
|
64
|
+
checkedValues: props.checkedValues,
|
|
65
|
+
defaultCheckedValues,
|
|
66
|
+
onCheckedValueChange: props.onCheckedValueChange
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
inline,
|
|
70
|
+
hoverDelay,
|
|
71
|
+
triggerId,
|
|
72
|
+
isSubmenu,
|
|
73
|
+
openOnHover,
|
|
74
|
+
contextTarget,
|
|
75
|
+
setContextTarget,
|
|
76
|
+
hasCheckmarks,
|
|
77
|
+
hasIcons,
|
|
78
|
+
closeOnScroll,
|
|
79
|
+
menuTrigger,
|
|
80
|
+
menuPopover,
|
|
81
|
+
triggerRef,
|
|
82
|
+
menuPopoverRef,
|
|
83
|
+
components: {},
|
|
84
|
+
openOnContext,
|
|
85
|
+
open,
|
|
86
|
+
setOpen,
|
|
87
|
+
checkedValues,
|
|
88
|
+
onCheckedValueChange,
|
|
89
|
+
persistOnItemClick
|
|
90
|
+
};
|
|
109
91
|
};
|
|
110
|
-
exports.useMenu_unstable = useMenu_unstable;
|
|
111
92
|
/**
|
|
112
93
|
* Adds appropriate state values and handlers for selectable items
|
|
113
94
|
* i.e checkboxes and radios
|
|
114
|
-
*/
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
95
|
+
*/ const useMenuSelectableState = (props)=>{
|
|
96
|
+
const [checkedValues, setCheckedValues] = (0, _reactUtilities.useControllableState)({
|
|
97
|
+
state: props.checkedValues,
|
|
98
|
+
defaultState: props.defaultCheckedValues,
|
|
99
|
+
initialState: {}
|
|
100
|
+
});
|
|
101
|
+
const onCheckedValueChange = (0, _reactUtilities.useEventCallback)((e, param)=>{
|
|
102
|
+
let { name , checkedItems } = param;
|
|
103
|
+
var _props_onCheckedValueChange;
|
|
104
|
+
(_props_onCheckedValueChange = props.onCheckedValueChange) === null || _props_onCheckedValueChange === void 0 ? void 0 : _props_onCheckedValueChange.call(props, e, {
|
|
105
|
+
name,
|
|
106
|
+
checkedItems
|
|
107
|
+
});
|
|
108
|
+
setCheckedValues((currentValue)=>({
|
|
109
|
+
...currentValue,
|
|
110
|
+
[name]: checkedItems
|
|
111
|
+
}));
|
|
129
112
|
});
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
});
|
|
135
|
-
return [checkedValues, onCheckedValueChange];
|
|
113
|
+
return [
|
|
114
|
+
checkedValues,
|
|
115
|
+
onCheckedValueChange
|
|
116
|
+
];
|
|
136
117
|
};
|
|
137
|
-
const useMenuOpenState = state
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
var _a;
|
|
144
|
-
return (_a = state.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(state, e, data);
|
|
145
|
-
});
|
|
146
|
-
const shouldHandleCloseRef = React.useRef(false);
|
|
147
|
-
const setOpenTimeout = React.useRef(0);
|
|
148
|
-
const enteringTriggerRef = React.useRef(false);
|
|
149
|
-
const [open, setOpenState] = react_utilities_1.useControllableState({
|
|
150
|
-
state: state.open,
|
|
151
|
-
defaultState: state.defaultOpen,
|
|
152
|
-
initialState: false
|
|
153
|
-
});
|
|
154
|
-
const trySetOpen = react_utilities_1.useEventCallback((e, data) => {
|
|
155
|
-
const event = e instanceof CustomEvent && e.type === index_1.MENU_ENTER_EVENT ? e.detail.nativeEvent : e;
|
|
156
|
-
onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(event, {
|
|
157
|
-
...data
|
|
118
|
+
const useMenuOpenState = (state)=>{
|
|
119
|
+
const { targetDocument } = (0, _reactSharedContexts.useFluent_unstable)();
|
|
120
|
+
const parentSetOpen = (0, _menuContext.useMenuContext_unstable)((context)=>context.setOpen);
|
|
121
|
+
const onOpenChange = (0, _reactUtilities.useEventCallback)((e, data)=>{
|
|
122
|
+
var _state_onOpenChange;
|
|
123
|
+
return (_state_onOpenChange = state.onOpenChange) === null || _state_onOpenChange === void 0 ? void 0 : _state_onOpenChange.call(state, e, data);
|
|
158
124
|
});
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
setOpenState(data.open);
|
|
172
|
-
});
|
|
173
|
-
const setOpen = react_utilities_1.useEventCallback((e, data) => {
|
|
174
|
-
var _a;
|
|
175
|
-
clearTimeout(setOpenTimeout.current);
|
|
176
|
-
if (!(e instanceof Event) && e.persist) {
|
|
177
|
-
// < React 17 still uses pooled synthetic events
|
|
178
|
-
e.persist();
|
|
179
|
-
}
|
|
180
|
-
if (e.type === 'mouseleave' || e.type === 'mouseenter' || e.type === 'mousemove' || e.type === index_1.MENU_ENTER_EVENT) {
|
|
181
|
-
if ((_a = state.triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {
|
|
182
|
-
enteringTriggerRef.current = e.type === 'mouseenter' || e.type === 'mousemove';
|
|
183
|
-
}
|
|
184
|
-
// FIXME leaking Node timeout type
|
|
185
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
186
|
-
// @ts-ignore
|
|
187
|
-
setOpenTimeout.current = setTimeout(() => trySetOpen(e, data), state.hoverDelay);
|
|
188
|
-
} else {
|
|
189
|
-
trySetOpen(e, data);
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
react_utilities_1.useOnClickOutside({
|
|
193
|
-
contains: react_portal_1.elementContains,
|
|
194
|
-
disabled: !open,
|
|
195
|
-
element: targetDocument,
|
|
196
|
-
refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(Boolean),
|
|
197
|
-
callback: event => setOpen(event, {
|
|
198
|
-
open: false,
|
|
199
|
-
type: 'clickOutside',
|
|
200
|
-
event
|
|
201
|
-
})
|
|
202
|
-
});
|
|
203
|
-
// only close on scroll for context, or when closeOnScroll is specified
|
|
204
|
-
const closeOnScroll = state.openOnContext || state.closeOnScroll;
|
|
205
|
-
react_utilities_1.useOnScrollOutside({
|
|
206
|
-
contains: react_portal_1.elementContains,
|
|
207
|
-
element: targetDocument,
|
|
208
|
-
callback: event => setOpen(event, {
|
|
209
|
-
open: false,
|
|
210
|
-
type: 'scrollOutside',
|
|
211
|
-
event
|
|
212
|
-
}),
|
|
213
|
-
refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(Boolean),
|
|
214
|
-
disabled: !open || !closeOnScroll
|
|
215
|
-
});
|
|
216
|
-
index_1.useOnMenuMouseEnter({
|
|
217
|
-
element: targetDocument,
|
|
218
|
-
callback: event => {
|
|
219
|
-
// When moving from a menu directly back to its trigger, this handler can close the menu
|
|
220
|
-
// Explicitly check a flag to see if this situation happens
|
|
221
|
-
if (!enteringTriggerRef.current) {
|
|
222
|
-
setOpen(event, {
|
|
223
|
-
open: false,
|
|
224
|
-
type: 'menuMouseEnter',
|
|
225
|
-
event
|
|
125
|
+
const shouldHandleCloseRef = _react.useRef(false);
|
|
126
|
+
const setOpenTimeout = _react.useRef(0);
|
|
127
|
+
const enteringTriggerRef = _react.useRef(false);
|
|
128
|
+
const [open, setOpenState] = (0, _reactUtilities.useControllableState)({
|
|
129
|
+
state: state.open,
|
|
130
|
+
defaultState: state.defaultOpen,
|
|
131
|
+
initialState: false
|
|
132
|
+
});
|
|
133
|
+
const trySetOpen = (0, _reactUtilities.useEventCallback)((e, data)=>{
|
|
134
|
+
const event = e instanceof CustomEvent && e.type === _index.MENU_ENTER_EVENT ? e.detail.nativeEvent : e;
|
|
135
|
+
onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(event, {
|
|
136
|
+
...data
|
|
226
137
|
});
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
138
|
+
if (data.open && e.type === 'contextmenu') {
|
|
139
|
+
state.setContextTarget(e);
|
|
140
|
+
}
|
|
141
|
+
if (!data.open) {
|
|
142
|
+
state.setContextTarget(undefined);
|
|
143
|
+
shouldHandleCloseRef.current = true;
|
|
144
|
+
}
|
|
145
|
+
if (data.bubble) {
|
|
146
|
+
parentSetOpen(e, {
|
|
147
|
+
...data
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
setOpenState(data.open);
|
|
151
|
+
});
|
|
152
|
+
const setOpen = (0, _reactUtilities.useEventCallback)((e, data)=>{
|
|
153
|
+
clearTimeout(setOpenTimeout.current);
|
|
154
|
+
if (!(e instanceof Event) && e.persist) {
|
|
155
|
+
// < React 17 still uses pooled synthetic events
|
|
156
|
+
e.persist();
|
|
157
|
+
}
|
|
158
|
+
if (e.type === 'mouseleave' || e.type === 'mouseenter' || e.type === 'mousemove' || e.type === _index.MENU_ENTER_EVENT) {
|
|
159
|
+
var _state_triggerRef_current;
|
|
160
|
+
if ((_state_triggerRef_current = state.triggerRef.current) === null || _state_triggerRef_current === void 0 ? void 0 : _state_triggerRef_current.contains(e.target)) {
|
|
161
|
+
enteringTriggerRef.current = e.type === 'mouseenter' || e.type === 'mousemove';
|
|
162
|
+
}
|
|
163
|
+
// FIXME leaking Node timeout type
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
165
|
+
// @ts-ignore
|
|
166
|
+
setOpenTimeout.current = setTimeout(()=>trySetOpen(e, data), state.hoverDelay);
|
|
167
|
+
} else {
|
|
168
|
+
trySetOpen(e, data);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
(0, _reactUtilities.useOnClickOutside)({
|
|
172
|
+
contains: _reactPortal.elementContains,
|
|
173
|
+
disabled: !open,
|
|
174
|
+
element: targetDocument,
|
|
175
|
+
refs: [
|
|
176
|
+
state.menuPopoverRef,
|
|
177
|
+
!state.openOnContext && state.triggerRef
|
|
178
|
+
].filter(Boolean),
|
|
179
|
+
callback: (event)=>setOpen(event, {
|
|
180
|
+
open: false,
|
|
181
|
+
type: 'clickOutside',
|
|
182
|
+
event
|
|
183
|
+
})
|
|
184
|
+
});
|
|
185
|
+
// only close on scroll for context, or when closeOnScroll is specified
|
|
186
|
+
const closeOnScroll = state.openOnContext || state.closeOnScroll;
|
|
187
|
+
(0, _reactUtilities.useOnScrollOutside)({
|
|
188
|
+
contains: _reactPortal.elementContains,
|
|
189
|
+
element: targetDocument,
|
|
190
|
+
callback: (event)=>setOpen(event, {
|
|
191
|
+
open: false,
|
|
192
|
+
type: 'scrollOutside',
|
|
193
|
+
event
|
|
194
|
+
}),
|
|
195
|
+
refs: [
|
|
196
|
+
state.menuPopoverRef,
|
|
197
|
+
!state.openOnContext && state.triggerRef
|
|
198
|
+
].filter(Boolean),
|
|
199
|
+
disabled: !open || !closeOnScroll
|
|
200
|
+
});
|
|
201
|
+
(0, _index.useOnMenuMouseEnter)({
|
|
202
|
+
element: targetDocument,
|
|
203
|
+
callback: (event)=>{
|
|
204
|
+
// When moving from a menu directly back to its trigger, this handler can close the menu
|
|
205
|
+
// Explicitly check a flag to see if this situation happens
|
|
206
|
+
if (!enteringTriggerRef.current) {
|
|
207
|
+
setOpen(event, {
|
|
208
|
+
open: false,
|
|
209
|
+
type: 'menuMouseEnter',
|
|
210
|
+
event
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
disabled: !open,
|
|
215
|
+
refs: [
|
|
216
|
+
state.menuPopoverRef
|
|
217
|
+
]
|
|
218
|
+
});
|
|
219
|
+
// Clear timeout on unmount
|
|
220
|
+
// Setting state after a component unmounts can cause memory leaks
|
|
221
|
+
_react.useEffect(()=>{
|
|
222
|
+
return ()=>{
|
|
223
|
+
clearTimeout(setOpenTimeout.current);
|
|
224
|
+
};
|
|
225
|
+
}, []);
|
|
226
|
+
// Manage focus for open state
|
|
227
|
+
const { findFirstFocusable } = (0, _reactTabster.useFocusFinders)();
|
|
228
|
+
const focusFirst = _react.useCallback(()=>{
|
|
229
|
+
const firstFocusable = findFirstFocusable(state.menuPopoverRef.current);
|
|
230
|
+
firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
|
|
231
|
+
}, [
|
|
232
|
+
findFirstFocusable,
|
|
233
|
+
state.menuPopoverRef
|
|
234
|
+
]);
|
|
235
|
+
_react.useEffect(()=>{
|
|
236
|
+
if (open) {
|
|
237
|
+
focusFirst();
|
|
238
|
+
} else {
|
|
239
|
+
if (shouldHandleCloseRef.current) {
|
|
240
|
+
var // We know that React effects are sync so we focus the trigger here
|
|
241
|
+
// after any event handler (event handlers will update state and re-render).
|
|
242
|
+
// Since the browser only performs the default behaviour for the Tab key once
|
|
243
|
+
// keyboard events have fully bubbled up the window, the browser will move
|
|
244
|
+
// focus to the next tabbable element before/after the trigger if needed.
|
|
245
|
+
// If the Tab key was not pressed, focus will remain on the trigger as expected.
|
|
246
|
+
_state_triggerRef_current;
|
|
247
|
+
(_state_triggerRef_current = state.triggerRef.current) === null || _state_triggerRef_current === void 0 ? void 0 : _state_triggerRef_current.focus();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
shouldHandleCloseRef.current = false;
|
|
251
|
+
}, [
|
|
252
|
+
state.triggerRef,
|
|
253
|
+
state.isSubmenu,
|
|
254
|
+
open,
|
|
255
|
+
focusFirst
|
|
256
|
+
]);
|
|
257
|
+
return [
|
|
258
|
+
open,
|
|
259
|
+
setOpen
|
|
260
|
+
];
|
|
261
|
+
}; //# sourceMappingURL=useMenu.js.map
|
|
262
|
+
|
|
266
263
|
//# sourceMappingURL=useMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["useMenu_unstable","props","isSubmenu","useIsSubmenu_1","hoverDelay","inline","hasCheckmarks","hasIcons","closeOnScroll","openOnContext","persistOnItemClick","openOnHover","defaultCheckedValues","triggerId","react_utilities_1","contextTarget","setContextTarget","react_positioning_1","positioningState","position","align","target","undefined","positioning","children","React","Children","toArray","process","env","NODE_ENV","length","console","warn","menuTrigger","menuPopover","targetRef","triggerRef","containerRef","menuPopoverRef","open","setOpen","useMenuOpenState","defaultOpen","onOpenChange","checkedValues","onCheckedValueChange","useMenuSelectableState","components","exports","setCheckedValues","state","defaultState","initialState","e","name","checkedItems","currentValue","targetDocument","react_shared_contexts_1","parentSetOpen","menuContext_1","context","data","shouldHandleCloseRef","useRef","setOpenTimeout","enteringTriggerRef","setOpenState","trySetOpen","event","CustomEvent","type","index_1","detail","nativeEvent","current","bubble","clearTimeout","Event","persist","contains","setTimeout","react_portal_1","disabled","element","refs","filter","Boolean","callback","useEffect","findFirstFocusable","react_tabster_1","focusFirst","useCallback","firstFocusable","focus"],"sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-menu/src/components/Menu/useMenu.tsx"],"sourcesContent":["import * as React from 'react';\nimport { usePositioningMouseTarget, usePositioning, resolvePositioningShorthand } from '@fluentui/react-positioning';\nimport {\n useControllableState,\n useId,\n useOnClickOutside,\n useEventCallback,\n useOnScrollOutside,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { elementContains } from '@fluentui/react-portal';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { MENU_ENTER_EVENT, useOnMenuMouseEnter } from '../../utils/index';\nimport { useIsSubmenu } from '../../utils/useIsSubmenu';\nimport type { MenuOpenChangeData, MenuOpenEvent, MenuProps, MenuState } from './Menu.types';\n\n/**\n * Create the state required to render Menu.\n *\n * The returned state can be modified with hooks such as useMenuStyles,\n * before being passed to renderMenu_unstable.\n *\n * @param props - props from this instance of Menu\n */\nexport const useMenu_unstable = (props: MenuProps): MenuState => {\n const isSubmenu = useIsSubmenu();\n const {\n hoverDelay = 500,\n inline = false,\n hasCheckmarks = false,\n hasIcons = false,\n closeOnScroll = false,\n openOnContext = false,\n persistOnItemClick = false,\n openOnHover = isSubmenu,\n defaultCheckedValues,\n } = props;\n const triggerId = useId('menu');\n const [contextTarget, setContextTarget] = usePositioningMouseTarget();\n\n const positioningState = {\n position: isSubmenu ? 'after' : 'below',\n align: isSubmenu ? 'top' : 'start',\n target: props.openOnContext ? contextTarget : undefined,\n ...resolvePositioningShorthand(props.positioning),\n } as const;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n if (process.env.NODE_ENV !== 'production') {\n if (children.length === 0) {\n // eslint-disable-next-line no-console\n console.warn('Menu must contain at least one child');\n }\n\n if (children.length > 2) {\n // eslint-disable-next-line no-console\n console.warn('Menu must contain at most two children');\n }\n }\n\n let menuTrigger: React.ReactElement | undefined = undefined;\n let menuPopover: React.ReactElement | undefined = undefined;\n if (children.length === 2) {\n menuTrigger = children[0];\n menuPopover = children[1];\n } else if (children.length === 1) {\n menuPopover = children[0];\n }\n\n const { targetRef: triggerRef, containerRef: menuPopoverRef } = usePositioning(positioningState);\n\n // TODO Better way to narrow types ?\n const [open, setOpen] = useMenuOpenState({\n hoverDelay,\n isSubmenu,\n setContextTarget,\n closeOnScroll,\n menuPopoverRef,\n triggerRef,\n open: props.open,\n defaultOpen: props.defaultOpen,\n onOpenChange: props.onOpenChange,\n openOnContext,\n });\n\n const [checkedValues, onCheckedValueChange] = useMenuSelectableState({\n checkedValues: props.checkedValues,\n defaultCheckedValues,\n onCheckedValueChange: props.onCheckedValueChange,\n });\n\n return {\n inline,\n hoverDelay,\n triggerId,\n isSubmenu,\n openOnHover,\n contextTarget,\n setContextTarget,\n hasCheckmarks,\n hasIcons,\n closeOnScroll,\n menuTrigger,\n menuPopover,\n triggerRef,\n menuPopoverRef,\n components: {},\n openOnContext,\n open,\n setOpen,\n checkedValues,\n onCheckedValueChange,\n persistOnItemClick,\n };\n};\n\n/**\n * Adds appropriate state values and handlers for selectable items\n * i.e checkboxes and radios\n */\nconst useMenuSelectableState = (\n props: Pick<MenuProps, 'checkedValues' | 'defaultCheckedValues' | 'onCheckedValueChange'>,\n) => {\n const [checkedValues, setCheckedValues] = useControllableState({\n state: props.checkedValues,\n defaultState: props.defaultCheckedValues,\n initialState: {},\n });\n const onCheckedValueChange: MenuState['onCheckedValueChange'] = useEventCallback((e, { name, checkedItems }) => {\n props.onCheckedValueChange?.(e, { name, checkedItems });\n\n setCheckedValues(currentValue => ({\n ...currentValue,\n [name]: checkedItems,\n }));\n });\n\n return [checkedValues, onCheckedValueChange] as const;\n};\n\nconst useMenuOpenState = (\n state: Pick<\n MenuState,\n | 'isSubmenu'\n | 'menuPopoverRef'\n | 'setContextTarget'\n | 'triggerRef'\n | 'openOnContext'\n | 'closeOnScroll'\n | 'hoverDelay'\n > &\n Pick<MenuProps, 'open' | 'defaultOpen' | 'onOpenChange'>,\n) => {\n const { targetDocument } = useFluent();\n const parentSetOpen = useMenuContext_unstable(context => context.setOpen);\n const onOpenChange: MenuProps['onOpenChange'] = useEventCallback((e, data) => state.onOpenChange?.(e, data));\n\n const shouldHandleCloseRef = React.useRef(false);\n const setOpenTimeout = React.useRef(0);\n const enteringTriggerRef = React.useRef(false);\n\n const [open, setOpenState] = useControllableState({\n state: state.open,\n defaultState: state.defaultOpen,\n initialState: false,\n });\n\n const trySetOpen = useEventCallback((e: MenuOpenEvent, data: MenuOpenChangeData) => {\n const event = e instanceof CustomEvent && e.type === MENU_ENTER_EVENT ? e.detail.nativeEvent : e;\n onOpenChange?.(event, { ...data });\n if (data.open && e.type === 'contextmenu') {\n state.setContextTarget(e as React.MouseEvent);\n }\n\n if (!data.open) {\n state.setContextTarget(undefined);\n shouldHandleCloseRef.current = true;\n }\n\n if (data.bubble) {\n parentSetOpen(e, { ...data });\n }\n\n setOpenState(data.open);\n });\n\n const setOpen = useEventCallback((e: MenuOpenEvent, data: MenuOpenChangeData) => {\n clearTimeout(setOpenTimeout.current);\n if (!(e instanceof Event) && e.persist) {\n // < React 17 still uses pooled synthetic events\n e.persist();\n }\n\n if (e.type === 'mouseleave' || e.type === 'mouseenter' || e.type === 'mousemove' || e.type === MENU_ENTER_EVENT) {\n if (state.triggerRef.current?.contains(e.target as HTMLElement)) {\n enteringTriggerRef.current = e.type === 'mouseenter' || e.type === 'mousemove';\n }\n\n // FIXME leaking Node timeout type\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setOpenTimeout.current = setTimeout(() => trySetOpen(e, data), state.hoverDelay);\n } else {\n trySetOpen(e, data);\n }\n });\n\n useOnClickOutside({\n contains: elementContains,\n disabled: !open,\n element: targetDocument,\n refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(\n Boolean,\n ) as React.MutableRefObject<HTMLElement>[],\n callback: event => setOpen(event, { open: false, type: 'clickOutside', event }),\n });\n\n // only close on scroll for context, or when closeOnScroll is specified\n const closeOnScroll = state.openOnContext || state.closeOnScroll;\n useOnScrollOutside({\n contains: elementContains,\n element: targetDocument,\n callback: event => setOpen(event, { open: false, type: 'scrollOutside', event }),\n refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(\n Boolean,\n ) as React.MutableRefObject<HTMLElement>[],\n disabled: !open || !closeOnScroll,\n });\n\n useOnMenuMouseEnter({\n element: targetDocument,\n callback: event => {\n // When moving from a menu directly back to its trigger, this handler can close the menu\n // Explicitly check a flag to see if this situation happens\n if (!enteringTriggerRef.current) {\n setOpen(event, { open: false, type: 'menuMouseEnter', event });\n }\n },\n disabled: !open,\n refs: [state.menuPopoverRef],\n });\n\n // Clear timeout on unmount\n // Setting state after a component unmounts can cause memory leaks\n React.useEffect(() => {\n return () => {\n clearTimeout(setOpenTimeout.current);\n };\n }, []);\n\n // Manage focus for open state\n const { findFirstFocusable } = useFocusFinders();\n const focusFirst = React.useCallback(() => {\n const firstFocusable = findFirstFocusable(state.menuPopoverRef.current);\n firstFocusable?.focus();\n }, [findFirstFocusable, state.menuPopoverRef]);\n\n React.useEffect(() => {\n if (open) {\n focusFirst();\n } else {\n if (shouldHandleCloseRef.current) {\n // We know that React effects are sync so we focus the trigger here\n // after any event handler (event handlers will update state and re-render).\n // Since the browser only performs the default behaviour for the Tab key once\n // keyboard events have fully bubbled up the window, the browser will move\n // focus to the next tabbable element before/after the trigger if needed.\n // If the Tab key was not pressed, focus will remain on the trigger as expected.\n state.triggerRef.current?.focus();\n }\n }\n\n shouldHandleCloseRef.current = false;\n }, [state.triggerRef, state.isSubmenu, open, focusFirst]);\n\n return [open, setOpen] as const;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../lib/components/Menu/useMenu.js"],"sourcesContent":["import * as React from 'react';\nimport { usePositioningMouseTarget, usePositioning, resolvePositioningShorthand } from '@fluentui/react-positioning';\nimport { useControllableState, useId, useOnClickOutside, useEventCallback, useOnScrollOutside } from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { elementContains } from '@fluentui/react-portal';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { MENU_ENTER_EVENT, useOnMenuMouseEnter } from '../../utils/index';\nimport { useIsSubmenu } from '../../utils/useIsSubmenu';\n/**\n * Create the state required to render Menu.\n *\n * The returned state can be modified with hooks such as useMenuStyles,\n * before being passed to renderMenu_unstable.\n *\n * @param props - props from this instance of Menu\n */\nexport const useMenu_unstable = props => {\n const isSubmenu = useIsSubmenu();\n const {\n hoverDelay = 500,\n inline = false,\n hasCheckmarks = false,\n hasIcons = false,\n closeOnScroll = false,\n openOnContext = false,\n persistOnItemClick = false,\n openOnHover = isSubmenu,\n defaultCheckedValues\n } = props;\n const triggerId = useId('menu');\n const [contextTarget, setContextTarget] = usePositioningMouseTarget();\n const positioningState = {\n position: isSubmenu ? 'after' : 'below',\n align: isSubmenu ? 'top' : 'start',\n target: props.openOnContext ? contextTarget : undefined,\n ...resolvePositioningShorthand(props.positioning)\n };\n const children = React.Children.toArray(props.children);\n if (process.env.NODE_ENV !== 'production') {\n if (children.length === 0) {\n // eslint-disable-next-line no-console\n console.warn('Menu must contain at least one child');\n }\n if (children.length > 2) {\n // eslint-disable-next-line no-console\n console.warn('Menu must contain at most two children');\n }\n }\n let menuTrigger = undefined;\n let menuPopover = undefined;\n if (children.length === 2) {\n menuTrigger = children[0];\n menuPopover = children[1];\n } else if (children.length === 1) {\n menuPopover = children[0];\n }\n const {\n targetRef: triggerRef,\n containerRef: menuPopoverRef\n } = usePositioning(positioningState);\n // TODO Better way to narrow types ?\n const [open, setOpen] = useMenuOpenState({\n hoverDelay,\n isSubmenu,\n setContextTarget,\n closeOnScroll,\n menuPopoverRef,\n triggerRef,\n open: props.open,\n defaultOpen: props.defaultOpen,\n onOpenChange: props.onOpenChange,\n openOnContext\n });\n const [checkedValues, onCheckedValueChange] = useMenuSelectableState({\n checkedValues: props.checkedValues,\n defaultCheckedValues,\n onCheckedValueChange: props.onCheckedValueChange\n });\n return {\n inline,\n hoverDelay,\n triggerId,\n isSubmenu,\n openOnHover,\n contextTarget,\n setContextTarget,\n hasCheckmarks,\n hasIcons,\n closeOnScroll,\n menuTrigger,\n menuPopover,\n triggerRef,\n menuPopoverRef,\n components: {},\n openOnContext,\n open,\n setOpen,\n checkedValues,\n onCheckedValueChange,\n persistOnItemClick\n };\n};\n/**\n * Adds appropriate state values and handlers for selectable items\n * i.e checkboxes and radios\n */\nconst useMenuSelectableState = props => {\n const [checkedValues, setCheckedValues] = useControllableState({\n state: props.checkedValues,\n defaultState: props.defaultCheckedValues,\n initialState: {}\n });\n const onCheckedValueChange = useEventCallback((e, param) => {\n let {\n name,\n checkedItems\n } = param;\n var _props_onCheckedValueChange;\n (_props_onCheckedValueChange = props.onCheckedValueChange) === null || _props_onCheckedValueChange === void 0 ? void 0 : _props_onCheckedValueChange.call(props, e, {\n name,\n checkedItems\n });\n setCheckedValues(currentValue => ({\n ...currentValue,\n [name]: checkedItems\n }));\n });\n return [checkedValues, onCheckedValueChange];\n};\nconst useMenuOpenState = state => {\n const {\n targetDocument\n } = useFluent();\n const parentSetOpen = useMenuContext_unstable(context => context.setOpen);\n const onOpenChange = useEventCallback((e, data) => {\n var _state_onOpenChange;\n return (_state_onOpenChange = state.onOpenChange) === null || _state_onOpenChange === void 0 ? void 0 : _state_onOpenChange.call(state, e, data);\n });\n const shouldHandleCloseRef = React.useRef(false);\n const setOpenTimeout = React.useRef(0);\n const enteringTriggerRef = React.useRef(false);\n const [open, setOpenState] = useControllableState({\n state: state.open,\n defaultState: state.defaultOpen,\n initialState: false\n });\n const trySetOpen = useEventCallback((e, data) => {\n const event = e instanceof CustomEvent && e.type === MENU_ENTER_EVENT ? e.detail.nativeEvent : e;\n onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(event, {\n ...data\n });\n if (data.open && e.type === 'contextmenu') {\n state.setContextTarget(e);\n }\n if (!data.open) {\n state.setContextTarget(undefined);\n shouldHandleCloseRef.current = true;\n }\n if (data.bubble) {\n parentSetOpen(e, {\n ...data\n });\n }\n setOpenState(data.open);\n });\n const setOpen = useEventCallback((e, data) => {\n clearTimeout(setOpenTimeout.current);\n if (!(e instanceof Event) && e.persist) {\n // < React 17 still uses pooled synthetic events\n e.persist();\n }\n if (e.type === 'mouseleave' || e.type === 'mouseenter' || e.type === 'mousemove' || e.type === MENU_ENTER_EVENT) {\n var _state_triggerRef_current;\n if ((_state_triggerRef_current = state.triggerRef.current) === null || _state_triggerRef_current === void 0 ? void 0 : _state_triggerRef_current.contains(e.target)) {\n enteringTriggerRef.current = e.type === 'mouseenter' || e.type === 'mousemove';\n }\n // FIXME leaking Node timeout type\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setOpenTimeout.current = setTimeout(() => trySetOpen(e, data), state.hoverDelay);\n } else {\n trySetOpen(e, data);\n }\n });\n useOnClickOutside({\n contains: elementContains,\n disabled: !open,\n element: targetDocument,\n refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(Boolean),\n callback: event => setOpen(event, {\n open: false,\n type: 'clickOutside',\n event\n })\n });\n // only close on scroll for context, or when closeOnScroll is specified\n const closeOnScroll = state.openOnContext || state.closeOnScroll;\n useOnScrollOutside({\n contains: elementContains,\n element: targetDocument,\n callback: event => setOpen(event, {\n open: false,\n type: 'scrollOutside',\n event\n }),\n refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(Boolean),\n disabled: !open || !closeOnScroll\n });\n useOnMenuMouseEnter({\n element: targetDocument,\n callback: event => {\n // When moving from a menu directly back to its trigger, this handler can close the menu\n // Explicitly check a flag to see if this situation happens\n if (!enteringTriggerRef.current) {\n setOpen(event, {\n open: false,\n type: 'menuMouseEnter',\n event\n });\n }\n },\n disabled: !open,\n refs: [state.menuPopoverRef]\n });\n // Clear timeout on unmount\n // Setting state after a component unmounts can cause memory leaks\n React.useEffect(() => {\n return () => {\n clearTimeout(setOpenTimeout.current);\n };\n }, []);\n // Manage focus for open state\n const {\n findFirstFocusable\n } = useFocusFinders();\n const focusFirst = React.useCallback(() => {\n const firstFocusable = findFirstFocusable(state.menuPopoverRef.current);\n firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();\n }, [findFirstFocusable, state.menuPopoverRef]);\n React.useEffect(() => {\n if (open) {\n focusFirst();\n } else {\n if (shouldHandleCloseRef.current) {\n var\n // We know that React effects are sync so we focus the trigger here\n // after any event handler (event handlers will update state and re-render).\n // Since the browser only performs the default behaviour for the Tab key once\n // keyboard events have fully bubbled up the window, the browser will move\n // focus to the next tabbable element before/after the trigger if needed.\n // If the Tab key was not pressed, focus will remain on the trigger as expected.\n _state_triggerRef_current;\n (_state_triggerRef_current = state.triggerRef.current) === null || _state_triggerRef_current === void 0 ? void 0 : _state_triggerRef_current.focus();\n }\n }\n shouldHandleCloseRef.current = false;\n }, [state.triggerRef, state.isSubmenu, open, focusFirst]);\n return [open, setOpen];\n};\n//# sourceMappingURL=useMenu.js.map"],"names":["useMenu_unstable","props","isSubmenu","useIsSubmenu","hoverDelay","inline","hasCheckmarks","hasIcons","closeOnScroll","openOnContext","persistOnItemClick","openOnHover","defaultCheckedValues","triggerId","useId","contextTarget","setContextTarget","usePositioningMouseTarget","positioningState","position","align","target","undefined","resolvePositioningShorthand","positioning","children","React","Children","toArray","process","env","NODE_ENV","length","console","warn","menuTrigger","menuPopover","targetRef","triggerRef","containerRef","menuPopoverRef","usePositioning","open","setOpen","useMenuOpenState","defaultOpen","onOpenChange","checkedValues","onCheckedValueChange","useMenuSelectableState","components","setCheckedValues","useControllableState","state","defaultState","initialState","useEventCallback","e","param","name","checkedItems","_props_onCheckedValueChange","call","currentValue","targetDocument","useFluent","parentSetOpen","useMenuContext_unstable","context","data","_state_onOpenChange","shouldHandleCloseRef","useRef","setOpenTimeout","enteringTriggerRef","setOpenState","trySetOpen","event","CustomEvent","type","MENU_ENTER_EVENT","detail","nativeEvent","current","bubble","clearTimeout","Event","persist","_state_triggerRef_current","contains","setTimeout","useOnClickOutside","elementContains","disabled","element","refs","filter","Boolean","callback","useOnScrollOutside","useOnMenuMouseEnter","useEffect","findFirstFocusable","useFocusFinders","focusFirst","useCallback","firstFocusable","focus"],"mappings":"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"}
|