@fluentui/react-menu 9.4.1 → 9.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. package/CHANGELOG.json +60 -1
  2. package/CHANGELOG.md +17 -2
  3. package/dist/index.d.ts +45 -4
  4. package/lib/components/Menu/Menu.types.js.map +1 -1
  5. package/lib/components/Menu/useMenu.js +13 -7
  6. package/lib/components/Menu/useMenu.js.map +1 -1
  7. package/lib/components/MenuItem/useMenuItem.js +3 -1
  8. package/lib/components/MenuItem/useMenuItem.js.map +1 -1
  9. package/lib/components/MenuPopover/useMenuPopover.js +20 -14
  10. package/lib/components/MenuPopover/useMenuPopover.js.map +1 -1
  11. package/lib/components/MenuTrigger/useMenuTrigger.js +42 -28
  12. package/lib/components/MenuTrigger/useMenuTrigger.js.map +1 -1
  13. package/lib/index.js.map +1 -1
  14. package/lib-amd/Menu.js +6 -0
  15. package/lib-amd/Menu.js.map +1 -0
  16. package/lib-amd/MenuDivider.js +6 -0
  17. package/lib-amd/MenuDivider.js.map +1 -0
  18. package/lib-amd/MenuGroup.js +6 -0
  19. package/lib-amd/MenuGroup.js.map +1 -0
  20. package/lib-amd/MenuGroupHeader.js +6 -0
  21. package/lib-amd/MenuGroupHeader.js.map +1 -0
  22. package/lib-amd/MenuItem.js +6 -0
  23. package/lib-amd/MenuItem.js.map +1 -0
  24. package/lib-amd/MenuItemCheckbox.js +6 -0
  25. package/lib-amd/MenuItemCheckbox.js.map +1 -0
  26. package/lib-amd/MenuItemRadio.js +6 -0
  27. package/lib-amd/MenuItemRadio.js.map +1 -0
  28. package/lib-amd/MenuList.js +6 -0
  29. package/lib-amd/MenuList.js.map +1 -0
  30. package/lib-amd/MenuPopover.js +6 -0
  31. package/lib-amd/MenuPopover.js.map +1 -0
  32. package/lib-amd/MenuSplitGroup.js +6 -0
  33. package/lib-amd/MenuSplitGroup.js.map +1 -0
  34. package/lib-amd/MenuTrigger.js +6 -0
  35. package/lib-amd/MenuTrigger.js.map +1 -0
  36. package/lib-amd/components/Menu/Menu.js +16 -0
  37. package/lib-amd/components/Menu/Menu.js.map +1 -0
  38. package/lib-amd/components/Menu/Menu.types.js +5 -0
  39. package/lib-amd/components/Menu/Menu.types.js.map +1 -0
  40. package/lib-amd/components/Menu/index.js +10 -0
  41. package/lib-amd/components/Menu/index.js.map +1 -0
  42. package/lib-amd/components/Menu/renderMenu.js +15 -0
  43. package/lib-amd/components/Menu/renderMenu.js.map +1 -0
  44. package/lib-amd/components/Menu/useMenu.js +233 -0
  45. package/lib-amd/components/Menu/useMenu.js.map +1 -0
  46. package/lib-amd/components/Menu/useMenuContextValues.js +29 -0
  47. package/lib-amd/components/Menu/useMenuContextValues.js.map +1 -0
  48. package/lib-amd/components/MenuDivider/MenuDivider.js +15 -0
  49. package/lib-amd/components/MenuDivider/MenuDivider.js.map +1 -0
  50. package/lib-amd/components/MenuDivider/MenuDivider.types.js +5 -0
  51. package/lib-amd/components/MenuDivider/MenuDivider.types.js.map +1 -0
  52. package/lib-amd/components/MenuDivider/index.js +10 -0
  53. package/lib-amd/components/MenuDivider/index.js.map +1 -0
  54. package/lib-amd/components/MenuDivider/renderMenuDivider.js +15 -0
  55. package/lib-amd/components/MenuDivider/renderMenuDivider.js.map +1 -0
  56. package/lib-amd/components/MenuDivider/useMenuDivider.js +18 -0
  57. package/lib-amd/components/MenuDivider/useMenuDivider.js.map +1 -0
  58. package/lib-amd/components/MenuDivider/useMenuDividerStyles.js +18 -0
  59. package/lib-amd/components/MenuDivider/useMenuDividerStyles.js.map +1 -0
  60. package/lib-amd/components/MenuGroup/MenuGroup.js +16 -0
  61. package/lib-amd/components/MenuGroup/MenuGroup.js.map +1 -0
  62. package/lib-amd/components/MenuGroup/MenuGroup.types.js +5 -0
  63. package/lib-amd/components/MenuGroup/MenuGroup.types.js.map +1 -0
  64. package/lib-amd/components/MenuGroup/index.js +11 -0
  65. package/lib-amd/components/MenuGroup/index.js.map +1 -0
  66. package/lib-amd/components/MenuGroup/renderMenuGroup.js +16 -0
  67. package/lib-amd/components/MenuGroup/renderMenuGroup.js.map +1 -0
  68. package/lib-amd/components/MenuGroup/useMenuGroup.js +20 -0
  69. package/lib-amd/components/MenuGroup/useMenuGroup.js.map +1 -0
  70. package/lib-amd/components/MenuGroup/useMenuGroupContextValues.js +12 -0
  71. package/lib-amd/components/MenuGroup/useMenuGroupContextValues.js.map +1 -0
  72. package/lib-amd/components/MenuGroup/useMenuGroupStyles.js +14 -0
  73. package/lib-amd/components/MenuGroup/useMenuGroupStyles.js.map +1 -0
  74. package/lib-amd/components/MenuGroupHeader/MenuGroupHeader.js +15 -0
  75. package/lib-amd/components/MenuGroupHeader/MenuGroupHeader.js.map +1 -0
  76. package/lib-amd/components/MenuGroupHeader/MenuGroupHeader.types.js +5 -0
  77. package/lib-amd/components/MenuGroupHeader/MenuGroupHeader.types.js.map +1 -0
  78. package/lib-amd/components/MenuGroupHeader/index.js +10 -0
  79. package/lib-amd/components/MenuGroupHeader/index.js.map +1 -0
  80. package/lib-amd/components/MenuGroupHeader/renderMenuGroupHeader.js +15 -0
  81. package/lib-amd/components/MenuGroupHeader/renderMenuGroupHeader.js.map +1 -0
  82. package/lib-amd/components/MenuGroupHeader/useMenuGroupHeader.js +19 -0
  83. package/lib-amd/components/MenuGroupHeader/useMenuGroupHeader.js.map +1 -0
  84. package/lib-amd/components/MenuGroupHeader/useMenuGroupHeaderStyles.js +27 -0
  85. package/lib-amd/components/MenuGroupHeader/useMenuGroupHeaderStyles.js.map +1 -0
  86. package/lib-amd/components/MenuItem/MenuItem.js +15 -0
  87. package/lib-amd/components/MenuItem/MenuItem.js.map +1 -0
  88. package/lib-amd/components/MenuItem/MenuItem.types.js +5 -0
  89. package/lib-amd/components/MenuItem/MenuItem.types.js.map +1 -0
  90. package/lib-amd/components/MenuItem/index.js +10 -0
  91. package/lib-amd/components/MenuItem/index.js.map +1 -0
  92. package/lib-amd/components/MenuItem/renderMenuItem.js +19 -0
  93. package/lib-amd/components/MenuItem/renderMenuItem.js.map +1 -0
  94. package/lib-amd/components/MenuItem/useCharacterSearch.js +22 -0
  95. package/lib-amd/components/MenuItem/useCharacterSearch.js.map +1 -0
  96. package/lib-amd/components/MenuItem/useMenuItem.js +80 -0
  97. package/lib-amd/components/MenuItem/useMenuItem.js.map +1 -0
  98. package/lib-amd/components/MenuItem/useMenuItemStyles.js +100 -0
  99. package/lib-amd/components/MenuItem/useMenuItemStyles.js.map +1 -0
  100. package/lib-amd/components/MenuItemCheckbox/MenuItemCheckbox.js +15 -0
  101. package/lib-amd/components/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -0
  102. package/lib-amd/components/MenuItemCheckbox/MenuItemCheckbox.types.js +5 -0
  103. package/lib-amd/components/MenuItemCheckbox/MenuItemCheckbox.types.js.map +1 -0
  104. package/lib-amd/components/MenuItemCheckbox/index.js +10 -0
  105. package/lib-amd/components/MenuItemCheckbox/index.js.map +1 -0
  106. package/lib-amd/components/MenuItemCheckbox/renderMenuItemCheckbox.js +16 -0
  107. package/lib-amd/components/MenuItemCheckbox/renderMenuItemCheckbox.js.map +1 -0
  108. package/lib-amd/components/MenuItemCheckbox/useMenuItemCheckbox.js +26 -0
  109. package/lib-amd/components/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -0
  110. package/lib-amd/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js +31 -0
  111. package/lib-amd/components/MenuItemCheckbox/useMenuItemCheckboxStyles.js.map +1 -0
  112. package/lib-amd/components/MenuItemRadio/MenuItemRadio.js +15 -0
  113. package/lib-amd/components/MenuItemRadio/MenuItemRadio.js.map +1 -0
  114. package/lib-amd/components/MenuItemRadio/MenuItemRadio.types.js +5 -0
  115. package/lib-amd/components/MenuItemRadio/MenuItemRadio.types.js.map +1 -0
  116. package/lib-amd/components/MenuItemRadio/index.js +10 -0
  117. package/lib-amd/components/MenuItemRadio/index.js.map +1 -0
  118. package/lib-amd/components/MenuItemRadio/renderMenuItemRadio.js +19 -0
  119. package/lib-amd/components/MenuItemRadio/renderMenuItemRadio.js.map +1 -0
  120. package/lib-amd/components/MenuItemRadio/useMenuItemRadio.js +27 -0
  121. package/lib-amd/components/MenuItemRadio/useMenuItemRadio.js.map +1 -0
  122. package/lib-amd/components/MenuItemRadio/useMenuItemRadioStyles.js +31 -0
  123. package/lib-amd/components/MenuItemRadio/useMenuItemRadioStyles.js.map +1 -0
  124. package/lib-amd/components/MenuList/MenuList.js +16 -0
  125. package/lib-amd/components/MenuList/MenuList.js.map +1 -0
  126. package/lib-amd/components/MenuList/MenuList.types.js +5 -0
  127. package/lib-amd/components/MenuList/MenuList.types.js.map +1 -0
  128. package/lib-amd/components/MenuList/index.js +11 -0
  129. package/lib-amd/components/MenuList/index.js.map +1 -0
  130. package/lib-amd/components/MenuList/renderMenuList.js +15 -0
  131. package/lib-amd/components/MenuList/renderMenuList.js.map +1 -0
  132. package/lib-amd/components/MenuList/useMenuList.js +119 -0
  133. package/lib-amd/components/MenuList/useMenuList.js.map +1 -0
  134. package/lib-amd/components/MenuList/useMenuListContextValues.js +21 -0
  135. package/lib-amd/components/MenuList/useMenuListContextValues.js.map +1 -0
  136. package/lib-amd/components/MenuList/useMenuListStyles.js +21 -0
  137. package/lib-amd/components/MenuList/useMenuListStyles.js.map +1 -0
  138. package/lib-amd/components/MenuPopover/MenuPopover.js +15 -0
  139. package/lib-amd/components/MenuPopover/MenuPopover.js.map +1 -0
  140. package/lib-amd/components/MenuPopover/MenuPopover.types.js +5 -0
  141. package/lib-amd/components/MenuPopover/MenuPopover.types.js.map +1 -0
  142. package/lib-amd/components/MenuPopover/index.js +10 -0
  143. package/lib-amd/components/MenuPopover/index.js.map +1 -0
  144. package/lib-amd/components/MenuPopover/renderMenuPopover.js +18 -0
  145. package/lib-amd/components/MenuPopover/renderMenuPopover.js.map +1 -0
  146. package/lib-amd/components/MenuPopover/useMenuPopover.js +82 -0
  147. package/lib-amd/components/MenuPopover/useMenuPopover.js.map +1 -0
  148. package/lib-amd/components/MenuPopover/useMenuPopoverStyles.js +21 -0
  149. package/lib-amd/components/MenuPopover/useMenuPopoverStyles.js.map +1 -0
  150. package/lib-amd/components/MenuSplitGroup/MenuSplitGroup.js +15 -0
  151. package/lib-amd/components/MenuSplitGroup/MenuSplitGroup.js.map +1 -0
  152. package/lib-amd/components/MenuSplitGroup/MenuSplitGroup.types.js +5 -0
  153. package/lib-amd/components/MenuSplitGroup/MenuSplitGroup.types.js.map +1 -0
  154. package/lib-amd/components/MenuSplitGroup/index.js +10 -0
  155. package/lib-amd/components/MenuSplitGroup/index.js.map +1 -0
  156. package/lib-amd/components/MenuSplitGroup/renderMenuSplitGroup.js +14 -0
  157. package/lib-amd/components/MenuSplitGroup/renderMenuSplitGroup.js.map +1 -0
  158. package/lib-amd/components/MenuSplitGroup/useMenuSplitGroup.js +47 -0
  159. package/lib-amd/components/MenuSplitGroup/useMenuSplitGroup.js.map +1 -0
  160. package/lib-amd/components/MenuSplitGroup/useMenuSplitGroupStyles.js +43 -0
  161. package/lib-amd/components/MenuSplitGroup/useMenuSplitGroupStyles.js.map +1 -0
  162. package/lib-amd/components/MenuTrigger/MenuTrigger.js +18 -0
  163. package/lib-amd/components/MenuTrigger/MenuTrigger.js.map +1 -0
  164. package/lib-amd/components/MenuTrigger/MenuTrigger.types.js +5 -0
  165. package/lib-amd/components/MenuTrigger/MenuTrigger.types.js.map +1 -0
  166. package/lib-amd/components/MenuTrigger/index.js +9 -0
  167. package/lib-amd/components/MenuTrigger/index.js.map +1 -0
  168. package/lib-amd/components/MenuTrigger/renderMenuTrigger.js +15 -0
  169. package/lib-amd/components/MenuTrigger/renderMenuTrigger.js.map +1 -0
  170. package/lib-amd/components/MenuTrigger/useMenuTrigger.js +112 -0
  171. package/lib-amd/components/MenuTrigger/useMenuTrigger.js.map +1 -0
  172. package/lib-amd/components/index.js +7 -0
  173. package/lib-amd/components/index.js.map +1 -0
  174. package/lib-amd/contexts/menuContext.js +32 -0
  175. package/lib-amd/contexts/menuContext.js.map +1 -0
  176. package/lib-amd/contexts/menuGroupContext.js +13 -0
  177. package/lib-amd/contexts/menuGroupContext.js.map +1 -0
  178. package/lib-amd/contexts/menuListContext.js +24 -0
  179. package/lib-amd/contexts/menuListContext.js.map +1 -0
  180. package/lib-amd/contexts/menuTriggerContext.js +14 -0
  181. package/lib-amd/contexts/menuTriggerContext.js.map +1 -0
  182. package/lib-amd/index.js +69 -0
  183. package/lib-amd/index.js.map +1 -0
  184. package/lib-amd/selectable/index.js +7 -0
  185. package/lib-amd/selectable/index.js.map +1 -0
  186. package/lib-amd/selectable/types.js +5 -0
  187. package/lib-amd/selectable/types.js.map +1 -0
  188. package/lib-amd/selectable/useCheckmarkStyles.js +28 -0
  189. package/lib-amd/selectable/useCheckmarkStyles.js.map +1 -0
  190. package/lib-amd/utils/index.js +6 -0
  191. package/lib-amd/utils/index.js.map +1 -0
  192. package/lib-amd/utils/useIsSubmenu.js +20 -0
  193. package/lib-amd/utils/useIsSubmenu.js.map +1 -0
  194. package/lib-amd/utils/useOnMenuEnter.js +59 -0
  195. package/lib-amd/utils/useOnMenuEnter.js.map +1 -0
  196. package/lib-commonjs/components/Menu/useMenu.js +13 -7
  197. package/lib-commonjs/components/Menu/useMenu.js.map +1 -1
  198. package/lib-commonjs/components/MenuItem/useMenuItem.js +3 -1
  199. package/lib-commonjs/components/MenuItem/useMenuItem.js.map +1 -1
  200. package/lib-commonjs/components/MenuPopover/useMenuPopover.js +20 -14
  201. package/lib-commonjs/components/MenuPopover/useMenuPopover.js.map +1 -1
  202. package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js +42 -28
  203. package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js.map +1 -1
  204. package/lib-commonjs/index.js.map +1 -1
  205. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["packages/react-components/react-menu/src/components/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"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","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 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 = (e: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(e)) {\n return;\n }\n\n if (openOnContext) {\n e.preventDefault();\n setOpen(e, { open: true, keyboard: false });\n }\n };\n\n const onClick = (e: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(e)) {\n return;\n }\n\n if (!openOnContext) {\n setOpen(e, { open: !open, keyboard: openedWithKeyboardRef.current });\n openedWithKeyboardRef.current = false;\n }\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(e)) {\n return;\n }\n\n const key = e.key;\n\n if (!openOnContext && ((isSubmenu && key === OpenArrowKey) || (!isSubmenu && key === ArrowDown))) {\n setOpen(e, { open: true, keyboard: true });\n }\n\n if (key === Escape && !isSubmenu) {\n setOpen(e, { open: false, keyboard: true });\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 = (e: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(e)) {\n return;\n }\n if (openOnHover && hasMouseMoved.current) {\n setOpen(e, { open: true, keyboard: false });\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 = (e: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(e)) {\n return;\n }\n if (openOnHover && !hasMouseMoved.current) {\n setOpen(e, { open: true, keyboard: false });\n hasMouseMoved.current = true;\n }\n };\n\n const onMouseLeave = (e: React.MouseEvent<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>) => {\n if (isTargetDisabled(e)) {\n return;\n }\n if (openOnHover) {\n setOpen(e, { open: false, keyboard: false });\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 = (e: React.SyntheticEvent | Event) => {\n const isDisabled = (el: HTMLElement) =>\n el.hasAttribute('disabled') || (el.hasAttribute('aria-disabled') && el.getAttribute('aria-disabled') === 'true');\n if (e.target instanceof HTMLElement && isDisabled(e.target)) {\n return true;\n }\n\n return e.currentTarget instanceof HTMLElement && isDisabled(e.currentTarget);\n};\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"sources":["packages/react-components/react-menu/src/components/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"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","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 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 = (e: React.SyntheticEvent | Event) => {\n const isDisabled = (el: HTMLElement) =>\n el.hasAttribute('disabled') || (el.hasAttribute('aria-disabled') && el.getAttribute('aria-disabled') === 'true');\n if (e.target instanceof HTMLElement && isDisabled(e.target)) {\n return true;\n }\n\n return e.currentTarget instanceof HTMLElement && isDisabled(e.currentTarget);\n};\n"],"sourceRoot":"../src/"}
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["packages/react-components/react-menu/src/index.ts"],"names":[],"mappings":"AAAA,SAAS,YAAT,EAAuB,uBAAvB,QAAsD,wBAAtD;AAEA,SAAS,0BAAT,EAAqC,8BAArC,QAA2E,+BAA3E;AACA,SAAS,wBAAT,EAAmC,4BAAnC,QAAuE,6BAAvE;AAEA,SAAS,gBAAT,EAA2B,2BAA3B,QAA8D,4BAA9D;AAGA,SAAS,IAAT,EAAe,mBAAf,EAAoC,6BAApC,EAAmE,gBAAnE,QAA2F,QAA3F;AAEA,SACE,WADF,EAEE,qBAFF,EAGE,0BAHF,EAIE,6BAJF,EAKE,uBALF,QAMO,eANP;AAQA,SACE,SADF,EAEE,mBAFF,EAGE,wBAHF,EAIE,kCAJF,EAKE,2BALF,EAME,qBANF,QAOO,aAPP;AASA,SACE,eADF,EAEE,yBAFF,EAGE,8BAHF,EAIE,iCAJF,EAKE,2BALF,QAMO,mBANP;AAQA,SACE,QADF,EAEE,kBAFF,EAGE,uBAHF,EAIE,0BAJF,EAKE,oBALF,QAMO,YANP;AAQA,SACE,gBADF,EAEE,0BAFF,EAGE,+BAHF,EAIE,kCAJF,EAKE,4BALF,QAMO,oBANP;AAQA,SACE,aADF,EAEE,uBAFF,EAGE,4BAHF,EAIE,+BAJF,EAKE,yBALF,QAMO,iBANP;AAQA,SACE,QADF,EAEE,kBAFF,EAGE,uBAHF,EAIE,iCAJF,EAKE,0BALF,EAME,oBANF,QAOO,YAPP;AAiBA,SACE,WADF,EAEE,qBAFF,EAGE,0BAHF,EAIE,6BAJF,EAKE,uBALF,QAMO,eANP;AAQA,SACE,cADF,EAEE,wBAFF,EAGE,6BAHF,EAIE,gCAJF,EAKE,0BALF,QAMO,kBANP;AAQA,SAAS,WAAT,EAAsB,0BAAtB,EAAkD,uBAAlD,QAAiF,eAAjF;AAGA,SAAS,2BAAT,QAA4C,oBAA5C","sourcesContent":["export { MenuProvider, useMenuContext_unstable } from './contexts/menuContext';\nexport type { MenuContextValue } from './contexts/menuContext';\nexport { MenuTriggerContextProvider, useMenuTriggerContext_unstable } from './contexts/menuTriggerContext';\nexport { MenuGroupContextProvider, useMenuGroupContext_unstable } from './contexts/menuGroupContext';\nexport type { MenuGroupContextValue } from './contexts/menuGroupContext';\nexport { MenuListProvider, useMenuListContext_unstable } from './contexts/menuListContext';\nexport type { MenuListContextValue } from './contexts/menuListContext';\n\nexport { Menu, renderMenu_unstable, useMenuContextValues_unstable, useMenu_unstable } from './Menu';\nexport type { MenuContextValues, MenuOpenChangeData, MenuOpenEvents, MenuProps, MenuSlots, MenuState } from './Menu';\nexport {\n MenuDivider,\n menuDividerClassNames,\n renderMenuDivider_unstable,\n useMenuDividerStyles_unstable,\n useMenuDivider_unstable,\n} from './MenuDivider';\nexport type { MenuDividerProps, MenuDividerSlots, MenuDividerState } from './MenuDivider';\nexport {\n MenuGroup,\n menuGroupClassNames,\n renderMenuGroup_unstable,\n useMenuGroupContextValues_unstable,\n useMenuGroupStyles_unstable,\n useMenuGroup_unstable,\n} from './MenuGroup';\nexport type { MenuGroupContextValues, MenuGroupProps, MenuGroupSlots, MenuGroupState } from './MenuGroup';\nexport {\n MenuGroupHeader,\n menuGroupHeaderClassNames,\n renderMenuGroupHeader_unstable,\n useMenuGroupHeaderStyles_unstable,\n useMenuGroupHeader_unstable,\n} from './MenuGroupHeader';\nexport type { MenuGroupHeaderProps, MenuGroupHeaderSlots, MenuGroupHeaderState } from './MenuGroupHeader';\nexport {\n MenuItem,\n menuItemClassNames,\n renderMenuItem_unstable,\n useMenuItemStyles_unstable,\n useMenuItem_unstable,\n} from './MenuItem';\nexport type { MenuItemProps, MenuItemSlots, MenuItemState } from './MenuItem';\nexport {\n MenuItemCheckbox,\n menuItemCheckboxClassNames,\n renderMenuItemCheckbox_unstable,\n useMenuItemCheckboxStyles_unstable,\n useMenuItemCheckbox_unstable,\n} from './MenuItemCheckbox';\nexport type { MenuItemCheckboxProps, MenuItemCheckboxState } from './MenuItemCheckbox';\nexport {\n MenuItemRadio,\n menuItemRadioClassNames,\n renderMenuItemRadio_unstable,\n useMenuItemRadioStyles_unstable,\n useMenuItemRadio_unstable,\n} from './MenuItemRadio';\nexport type { MenuItemRadioProps, MenuItemRadioState } from './MenuItemRadio';\nexport {\n MenuList,\n menuListClassNames,\n renderMenuList_unstable,\n useMenuListContextValues_unstable,\n useMenuListStyles_unstable,\n useMenuList_unstable,\n} from './MenuList';\nexport type {\n MenuCheckedValueChangeData,\n MenuCheckedValueChangeEvent,\n MenuListContextValues,\n MenuListProps,\n MenuListSlots,\n MenuListState,\n UninitializedMenuListState,\n} from './MenuList';\nexport {\n MenuPopover,\n menuPopoverClassNames,\n renderMenuPopover_unstable,\n useMenuPopoverStyles_unstable,\n useMenuPopover_unstable,\n} from './MenuPopover';\nexport type { MenuPopoverProps, MenuPopoverSlots, MenuPopoverState } from './MenuPopover';\nexport {\n MenuSplitGroup,\n menuSplitGroupClassNames,\n renderMenuSplitGroup_unstable,\n useMenuSplitGroupStyles_unstable,\n useMenuSplitGroup_unstable,\n} from './MenuSplitGroup';\nexport type { MenuSplitGroupProps, MenuSplitGroupSlots, MenuSplitGroupState } from './MenuSplitGroup';\nexport { MenuTrigger, renderMenuTrigger_unstable, useMenuTrigger_unstable } from './MenuTrigger';\nexport type { MenuTriggerChildProps, MenuTriggerProps, MenuTriggerState } from './MenuTrigger';\n\nexport { useCheckmarkStyles_unstable } from './selectable/index';\nexport type { MenuItemSelectableProps, MenuItemSelectableState, SelectableHandler } from './selectable/index';\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"sources":["packages/react-components/react-menu/src/index.ts"],"names":[],"mappings":"AAAA,SAAS,YAAT,EAAuB,uBAAvB,QAAsD,wBAAtD;AAEA,SAAS,0BAAT,EAAqC,8BAArC,QAA2E,+BAA3E;AACA,SAAS,wBAAT,EAAmC,4BAAnC,QAAuE,6BAAvE;AAEA,SAAS,gBAAT,EAA2B,2BAA3B,QAA8D,4BAA9D;AAGA,SAAS,IAAT,EAAe,mBAAf,EAAoC,6BAApC,EAAmE,gBAAnE,QAA2F,QAA3F;AAYA,SACE,WADF,EAEE,qBAFF,EAGE,0BAHF,EAIE,6BAJF,EAKE,uBALF,QAMO,eANP;AAQA,SACE,SADF,EAEE,mBAFF,EAGE,wBAHF,EAIE,kCAJF,EAKE,2BALF,EAME,qBANF,QAOO,aAPP;AASA,SACE,eADF,EAEE,yBAFF,EAGE,8BAHF,EAIE,iCAJF,EAKE,2BALF,QAMO,mBANP;AAQA,SACE,QADF,EAEE,kBAFF,EAGE,uBAHF,EAIE,0BAJF,EAKE,oBALF,QAMO,YANP;AAQA,SACE,gBADF,EAEE,0BAFF,EAGE,+BAHF,EAIE,kCAJF,EAKE,4BALF,QAMO,oBANP;AAQA,SACE,aADF,EAEE,uBAFF,EAGE,4BAHF,EAIE,+BAJF,EAKE,yBALF,QAMO,iBANP;AAQA,SACE,QADF,EAEE,kBAFF,EAGE,uBAHF,EAIE,iCAJF,EAKE,0BALF,EAME,oBANF,QAOO,YAPP;AAiBA,SACE,WADF,EAEE,qBAFF,EAGE,0BAHF,EAIE,6BAJF,EAKE,uBALF,QAMO,eANP;AAQA,SACE,cADF,EAEE,wBAFF,EAGE,6BAHF,EAIE,gCAJF,EAKE,0BALF,QAMO,kBANP;AAQA,SAAS,WAAT,EAAsB,0BAAtB,EAAkD,uBAAlD,QAAiF,eAAjF;AAGA,SAAS,2BAAT,QAA4C,oBAA5C","sourcesContent":["export { MenuProvider, useMenuContext_unstable } from './contexts/menuContext';\nexport type { MenuContextValue } from './contexts/menuContext';\nexport { MenuTriggerContextProvider, useMenuTriggerContext_unstable } from './contexts/menuTriggerContext';\nexport { MenuGroupContextProvider, useMenuGroupContext_unstable } from './contexts/menuGroupContext';\nexport type { MenuGroupContextValue } from './contexts/menuGroupContext';\nexport { MenuListProvider, useMenuListContext_unstable } from './contexts/menuListContext';\nexport type { MenuListContextValue } from './contexts/menuListContext';\n\nexport { Menu, renderMenu_unstable, useMenuContextValues_unstable, useMenu_unstable } from './Menu';\nexport type {\n MenuContextValues,\n MenuOpenChangeData,\n MenuOpenEvent,\n // MenuOpenEvents is deprecated but removing it would be a breaking change\n // eslint-disable-next-line deprecation/deprecation\n MenuOpenEvents,\n MenuProps,\n MenuSlots,\n MenuState,\n} from './Menu';\nexport {\n MenuDivider,\n menuDividerClassNames,\n renderMenuDivider_unstable,\n useMenuDividerStyles_unstable,\n useMenuDivider_unstable,\n} from './MenuDivider';\nexport type { MenuDividerProps, MenuDividerSlots, MenuDividerState } from './MenuDivider';\nexport {\n MenuGroup,\n menuGroupClassNames,\n renderMenuGroup_unstable,\n useMenuGroupContextValues_unstable,\n useMenuGroupStyles_unstable,\n useMenuGroup_unstable,\n} from './MenuGroup';\nexport type { MenuGroupContextValues, MenuGroupProps, MenuGroupSlots, MenuGroupState } from './MenuGroup';\nexport {\n MenuGroupHeader,\n menuGroupHeaderClassNames,\n renderMenuGroupHeader_unstable,\n useMenuGroupHeaderStyles_unstable,\n useMenuGroupHeader_unstable,\n} from './MenuGroupHeader';\nexport type { MenuGroupHeaderProps, MenuGroupHeaderSlots, MenuGroupHeaderState } from './MenuGroupHeader';\nexport {\n MenuItem,\n menuItemClassNames,\n renderMenuItem_unstable,\n useMenuItemStyles_unstable,\n useMenuItem_unstable,\n} from './MenuItem';\nexport type { MenuItemProps, MenuItemSlots, MenuItemState } from './MenuItem';\nexport {\n MenuItemCheckbox,\n menuItemCheckboxClassNames,\n renderMenuItemCheckbox_unstable,\n useMenuItemCheckboxStyles_unstable,\n useMenuItemCheckbox_unstable,\n} from './MenuItemCheckbox';\nexport type { MenuItemCheckboxProps, MenuItemCheckboxState } from './MenuItemCheckbox';\nexport {\n MenuItemRadio,\n menuItemRadioClassNames,\n renderMenuItemRadio_unstable,\n useMenuItemRadioStyles_unstable,\n useMenuItemRadio_unstable,\n} from './MenuItemRadio';\nexport type { MenuItemRadioProps, MenuItemRadioState } from './MenuItemRadio';\nexport {\n MenuList,\n menuListClassNames,\n renderMenuList_unstable,\n useMenuListContextValues_unstable,\n useMenuListStyles_unstable,\n useMenuList_unstable,\n} from './MenuList';\nexport type {\n MenuCheckedValueChangeData,\n MenuCheckedValueChangeEvent,\n MenuListContextValues,\n MenuListProps,\n MenuListSlots,\n MenuListState,\n UninitializedMenuListState,\n} from './MenuList';\nexport {\n MenuPopover,\n menuPopoverClassNames,\n renderMenuPopover_unstable,\n useMenuPopoverStyles_unstable,\n useMenuPopover_unstable,\n} from './MenuPopover';\nexport type { MenuPopoverProps, MenuPopoverSlots, MenuPopoverState } from './MenuPopover';\nexport {\n MenuSplitGroup,\n menuSplitGroupClassNames,\n renderMenuSplitGroup_unstable,\n useMenuSplitGroupStyles_unstable,\n useMenuSplitGroup_unstable,\n} from './MenuSplitGroup';\nexport type { MenuSplitGroupProps, MenuSplitGroupSlots, MenuSplitGroupState } from './MenuSplitGroup';\nexport { MenuTrigger, renderMenuTrigger_unstable, useMenuTrigger_unstable } from './MenuTrigger';\nexport type { MenuTriggerChildProps, MenuTriggerProps, MenuTriggerState } from './MenuTrigger';\n\nexport { useCheckmarkStyles_unstable } from './selectable/index';\nexport type { MenuItemSelectableProps, MenuItemSelectableState, SelectableHandler } from './selectable/index';\n"],"sourceRoot":"../src/"}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/Menu/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=Menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/Menu.ts"],"names":[],"mappings":";;;IAAA,uCAAwC","sourcesContent":["export * from './components/Menu/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuDivider/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuDivider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuDivider.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuDivider.ts"],"names":[],"mappings":";;;IAAA,uCAA+C","sourcesContent":["export * from './components/MenuDivider/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuGroup/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuGroup.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuGroup.ts"],"names":[],"mappings":";;;IAAA,uCAA6C","sourcesContent":["export * from './components/MenuGroup/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuGroupHeader/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuGroupHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuGroupHeader.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuGroupHeader.ts"],"names":[],"mappings":";;;IAAA,uCAAmD","sourcesContent":["export * from './components/MenuGroupHeader/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuItem/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuItem.ts"],"names":[],"mappings":";;;IAAA,uCAA4C","sourcesContent":["export * from './components/MenuItem/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuItemCheckbox/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuItemCheckbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuItemCheckbox.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuItemCheckbox.ts"],"names":[],"mappings":";;;IAAA,uCAAoD","sourcesContent":["export * from './components/MenuItemCheckbox/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuItemRadio/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuItemRadio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuItemRadio.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuItemRadio.ts"],"names":[],"mappings":";;;IAAA,uCAAiD","sourcesContent":["export * from './components/MenuItemRadio/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuList/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuList.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuList.ts"],"names":[],"mappings":";;;IAAA,uCAA4C","sourcesContent":["export * from './components/MenuList/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuPopover/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuPopover.ts"],"names":[],"mappings":";;;IAAA,uCAA+C","sourcesContent":["export * from './components/MenuPopover/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuSplitGroup/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuSplitGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSplitGroup.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuSplitGroup.ts"],"names":[],"mappings":";;;IAAA,uCAAkD","sourcesContent":["export * from './components/MenuSplitGroup/index';\n"]}
@@ -0,0 +1,6 @@
1
+ define(["require", "exports", "tslib", "./components/MenuTrigger/index"], function (require, exports, tslib_1, index_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(index_1, exports);
5
+ });
6
+ //# sourceMappingURL=MenuTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuTrigger.js","sourceRoot":"","sources":["../../../../../../../packages/react-components/react-menu/src/MenuTrigger.ts"],"names":[],"mappings":";;;IAAA,uCAA+C","sourcesContent":["export * from './components/MenuTrigger/index';\n"]}
@@ -0,0 +1,16 @@
1
+ define(["require", "exports", "./useMenu", "./useMenuContextValues", "./renderMenu"], function (require, exports, useMenu_1, useMenuContextValues_1, renderMenu_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Menu = void 0;
5
+ /**
6
+ * Wrapper component that manages state for a popup MenuList and a MenuTrigger
7
+ */
8
+ var Menu = function (props) {
9
+ var state = useMenu_1.useMenu_unstable(props);
10
+ var contextValues = useMenuContextValues_1.useMenuContextValues_unstable(state);
11
+ return renderMenu_1.renderMenu_unstable(state, contextValues);
12
+ };
13
+ exports.Menu = Menu;
14
+ exports.Menu.displayName = 'Menu';
15
+ });
16
+ //# sourceMappingURL=Menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-menu/src/components/Menu/Menu.tsx"],"names":[],"mappings":";;;;IAMA;;OAEG;IACI,IAAM,IAAI,GAAwB,UAAA,KAAK;QAC5C,IAAM,KAAK,GAAG,0BAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,IAAM,aAAa,GAAG,oDAA6B,CAAC,KAAK,CAAC,CAAC;QAE3D,OAAO,gCAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC,CAAC;IALW,QAAA,IAAI,QAKf;IAEF,YAAI,CAAC,WAAW,GAAG,MAAM,CAAC","sourcesContent":["import * as React from 'react';\nimport { useMenu_unstable } from './useMenu';\nimport { useMenuContextValues_unstable } from './useMenuContextValues';\nimport { renderMenu_unstable } from './renderMenu';\nimport type { MenuProps } from './Menu.types';\n\n/**\n * Wrapper component that manages state for a popup MenuList and a MenuTrigger\n */\nexport const Menu: React.FC<MenuProps> = props => {\n const state = useMenu_unstable(props);\n const contextValues = useMenuContextValues_unstable(state);\n\n return renderMenu_unstable(state, contextValues);\n};\n\nMenu.displayName = 'Menu';\n"]}
@@ -0,0 +1,5 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ });
5
+ //# sourceMappingURL=Menu.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Menu.types.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-menu/src/components/Menu/Menu.types.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\nimport { PositioningVirtualElement, SetVirtualMouseTarget } from '@fluentui/react-positioning';\nimport type { PositioningShorthand } from '@fluentui/react-positioning';\nimport type { ComponentProps, ComponentState } from '@fluentui/react-utilities';\nimport type { MenuContextValue } from '../../contexts/menuContext';\nimport type { MenuListProps } from '../MenuList/MenuList.types';\n\nexport type MenuSlots = {};\n\n/**\n * Extends and drills down Menulist props to simplify API\n */\nexport type MenuProps = ComponentProps<MenuSlots> &\n Pick<\n MenuListProps,\n 'checkedValues' | 'defaultCheckedValues' | 'hasCheckmarks' | 'hasIcons' | 'onCheckedValueChange'\n > & {\n /**\n * Can contain two children including {@link MenuTrigger} and {@link MenuPopover}.\n * Alternatively can only contain {@link MenuPopover} if using a custom `target`.\n */\n children: [JSX.Element, JSX.Element] | JSX.Element;\n\n /**\n * Whether the popup is open by default\n *\n * @default false\n */\n defaultOpen?: boolean;\n\n /**\n * Sets the delay for mouse open/close for the popover one mouse enter/leave\n */\n hoverDelay?: number;\n\n /**\n * Root menus are rendered out of DOM order on `document.body`, use this to render the menu in DOM order\n * This option is disregarded for submenus\n *\n * @default false\n */\n inline?: boolean;\n\n /**\n * Call back when the component requests to change value\n * The `open` value is used as a hint when directly controlling the component\n */\n onOpenChange?: (e: MenuOpenEvent, data: MenuOpenChangeData) => void;\n\n /**\n * Whether the popup is open\n *\n * @default false\n */\n open?: boolean;\n\n /**\n * Opens the menu on right click (context menu), removes all other menu open interactions\n *\n * @default false\n */\n openOnContext?: boolean;\n\n /**\n * Opens the menu on hover\n *\n * @default false\n */\n openOnHover?: boolean;\n\n /**\n * Do not dismiss the menu when a menu item is clicked\n *\n * @default false\n */\n persistOnItemClick?: boolean;\n\n /**\n * Configures the positioned menu\n */\n positioning?: PositioningShorthand;\n\n /**\n * Close when scroll outside of it\n *\n * @default false\n */\n closeOnScroll?: boolean;\n };\n\nexport type MenuState = ComponentState<MenuSlots> &\n Pick<MenuProps, 'onOpenChange' | 'defaultCheckedValues'> &\n Required<\n Pick<\n MenuProps,\n | 'hasCheckmarks'\n | 'hasIcons'\n | 'inline'\n | 'checkedValues'\n | 'onCheckedValueChange'\n | 'open'\n | 'openOnHover'\n | 'closeOnScroll'\n | 'hoverDelay'\n | 'openOnContext'\n | 'persistOnItemClick'\n >\n > & {\n /**\n * Anchors the popper to the mouse click for context events\n */\n contextTarget?: PositioningVirtualElement;\n\n /**\n * Whether this menu is a submenu\n */\n isSubmenu: boolean;\n\n /**\n * Internal react node that just simplifies handling children\n */\n menuPopover: React.ReactNode;\n\n /**\n * The ref for the popup\n */\n menuPopoverRef: React.MutableRefObject<HTMLElement>;\n\n /**\n * Internal react node that just simplifies handling children\n */\n menuTrigger: React.ReactNode;\n\n /**\n * A callback to set the target of the popper to the mouse click for context events\n */\n setContextTarget: SetVirtualMouseTarget;\n\n /**\n * Callback to open/close the popup\n */\n setOpen: (e: MenuOpenEvent, data: MenuOpenChangeData) => void;\n\n /**\n * Id for the MenuTrigger element for aria relationship\n */\n triggerId: string;\n\n /**\n * The ref for the MenuTrigger, used for popup positioning\n */\n triggerRef: React.MutableRefObject<HTMLElement>;\n };\n\nexport type MenuContextValues = {\n menu: MenuContextValue;\n};\n\n/**\n * The supported events that will trigger open/close of the menu\n */\nexport type MenuOpenEvent = MenuOpenChangeData['event'];\n/**\n * @deprecated use MenuOpenEvent instead\n */\nexport type MenuOpenEvents = MenuOpenEvent;\n\n/**\n * Data attached to open/close events\n */\nexport type MenuOpenChangeData = {\n /**\n * indicates whether the request for the open state was bubbled from a nested menu\n */\n bubble?: boolean;\n /**\n * Indicates whether the change of state was a keyboard interaction\n * @deprecated\n * This should not be used, since `Enter`, `Space` and click should be interpreted as the same thing as a click\n */\n keyboard?: boolean;\n open: boolean;\n} & (\n | {\n type: 'menuTriggerContextMenu';\n event: React.MouseEvent<HTMLElement>;\n }\n | {\n type: 'menuTriggerClick';\n event: React.MouseEvent<HTMLElement>;\n }\n | {\n type: 'menuTriggerMouseEnter';\n event: React.MouseEvent<HTMLElement>;\n }\n | {\n type: 'menuTriggerMouseLeave';\n event: React.MouseEvent<HTMLElement>;\n }\n | {\n type: 'menuTriggerMouseMove';\n event: React.MouseEvent<HTMLElement>;\n }\n | {\n type: 'menuTriggerKeyDown';\n event: React.KeyboardEvent<HTMLElement>;\n }\n | {\n type: 'menuItemClick';\n event: React.MouseEvent<HTMLElement>;\n }\n | {\n type: 'menuPopoverMouseEnter';\n event: React.MouseEvent<HTMLElement>;\n }\n | {\n type: 'menuPopoverKeyDown';\n event: React.KeyboardEvent<HTMLElement>;\n }\n | {\n type: 'clickOutside';\n event: MouseEvent | TouchEvent;\n }\n | {\n type: 'scrollOutside';\n event: MouseEvent | TouchEvent;\n }\n | {\n type: 'menuMouseEnter';\n event: MouseEvent | TouchEvent;\n }\n);\n"]}
@@ -0,0 +1,10 @@
1
+ define(["require", "exports", "tslib", "./Menu", "./Menu.types", "./renderMenu", "./useMenu", "./useMenuContextValues"], function (require, exports, tslib_1, Menu_1, Menu_types_1, renderMenu_1, useMenu_1, useMenuContextValues_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ tslib_1.__exportStar(Menu_1, exports);
5
+ tslib_1.__exportStar(Menu_types_1, exports);
6
+ tslib_1.__exportStar(renderMenu_1, exports);
7
+ tslib_1.__exportStar(useMenu_1, exports);
8
+ tslib_1.__exportStar(useMenuContextValues_1, exports);
9
+ });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-menu/src/components/Menu/index.ts"],"names":[],"mappings":";;;IAAA,sCAAuB;IACvB,4CAA6B;IAC7B,4CAA6B;IAC7B,yCAA0B;IAC1B,sDAAuC","sourcesContent":["export * from './Menu';\nexport * from './Menu.types';\nexport * from './renderMenu';\nexport * from './useMenu';\nexport * from './useMenuContextValues';\n"]}
@@ -0,0 +1,15 @@
1
+ define(["require", "exports", "react", "../../contexts/menuContext"], function (require, exports, React, menuContext_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.renderMenu_unstable = void 0;
5
+ /**
6
+ * Render the final JSX of Menu
7
+ */
8
+ var renderMenu_unstable = function (state, contextValues) {
9
+ return (React.createElement(menuContext_1.MenuProvider, { value: contextValues.menu },
10
+ state.menuTrigger,
11
+ state.open && state.menuPopover));
12
+ };
13
+ exports.renderMenu_unstable = renderMenu_unstable;
14
+ });
15
+ //# sourceMappingURL=renderMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderMenu.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-menu/src/components/Menu/renderMenu.tsx"],"names":[],"mappings":";;;;IAIA;;OAEG;IACI,IAAM,mBAAmB,GAAG,UAAC,KAAgB,EAAE,aAAgC;QACpF,OAAO,CACL,oBAAC,0BAAY,IAAC,KAAK,EAAE,aAAa,CAAC,IAAI;YACpC,KAAK,CAAC,WAAW;YACjB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,CACnB,CAChB,CAAC;IACJ,CAAC,CAAC;IAPW,QAAA,mBAAmB,uBAO9B","sourcesContent":["import * as React from 'react';\nimport { MenuProvider } from '../../contexts/menuContext';\nimport type { MenuContextValues, MenuState } from './Menu.types';\n\n/**\n * Render the final JSX of Menu\n */\nexport const renderMenu_unstable = (state: MenuState, contextValues: MenuContextValues) => {\n return (\n <MenuProvider value={contextValues.menu}>\n {state.menuTrigger}\n {state.open && state.menuPopover}\n </MenuProvider>\n );\n};\n"]}
@@ -0,0 +1,233 @@
1
+ define(["require", "exports", "tslib", "react", "@fluentui/react-positioning", "@fluentui/react-utilities", "@fluentui/react-shared-contexts", "@fluentui/react-portal", "@fluentui/react-tabster", "../../contexts/menuContext", "../../utils/index", "../../utils/useIsSubmenu", "@fluentui/keyboard-keys"], function (require, exports, tslib_1, React, react_positioning_1, react_utilities_1, react_shared_contexts_1, react_portal_1, react_tabster_1, menuContext_1, index_1, useIsSubmenu_1, keyboard_keys_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useMenu_unstable = void 0;
5
+ /**
6
+ * Create the state required to render Menu.
7
+ *
8
+ * The returned state can be modified with hooks such as useMenuStyles,
9
+ * before being passed to renderMenu_unstable.
10
+ *
11
+ * @param props - props from this instance of Menu
12
+ */
13
+ var useMenu_unstable = function (props) {
14
+ var isSubmenu = useIsSubmenu_1.useIsSubmenu();
15
+ var _a = props.hoverDelay, hoverDelay = _a === void 0 ? 500 : _a, _b = props.inline, inline = _b === void 0 ? false : _b, _c = props.hasCheckmarks, hasCheckmarks = _c === void 0 ? false : _c, _d = props.hasIcons, hasIcons = _d === void 0 ? false : _d, _e = props.closeOnScroll, closeOnScroll = _e === void 0 ? false : _e, _f = props.openOnContext, openOnContext = _f === void 0 ? false : _f, _g = props.persistOnItemClick, persistOnItemClick = _g === void 0 ? false : _g, _h = props.openOnHover, openOnHover = _h === void 0 ? isSubmenu : _h, defaultCheckedValues = props.defaultCheckedValues;
16
+ var triggerId = react_utilities_1.useId('menu');
17
+ var _j = react_positioning_1.usePositioningMouseTarget(), contextTarget = _j[0], setContextTarget = _j[1];
18
+ var positioningState = tslib_1.__assign({ position: isSubmenu ? 'after' : 'below', align: isSubmenu ? 'top' : 'start', target: props.openOnContext ? contextTarget : undefined }, react_positioning_1.resolvePositioningShorthand(props.positioning));
19
+ var children = React.Children.toArray(props.children);
20
+ if (process.env.NODE_ENV !== 'production') {
21
+ if (children.length === 0) {
22
+ // eslint-disable-next-line no-console
23
+ console.warn('Menu must contain at least one child');
24
+ }
25
+ if (children.length > 2) {
26
+ // eslint-disable-next-line no-console
27
+ console.warn('Menu must contain at most two children');
28
+ }
29
+ }
30
+ var menuTrigger = undefined;
31
+ var menuPopover = undefined;
32
+ if (children.length === 2) {
33
+ menuTrigger = children[0];
34
+ menuPopover = children[1];
35
+ }
36
+ else if (children.length === 1) {
37
+ menuPopover = children[0];
38
+ }
39
+ var _k = react_positioning_1.usePositioning(positioningState), triggerRef = _k.targetRef, menuPopoverRef = _k.containerRef;
40
+ // TODO Better way to narrow types ?
41
+ var _l = useMenuOpenState({
42
+ hoverDelay: hoverDelay,
43
+ isSubmenu: isSubmenu,
44
+ setContextTarget: setContextTarget,
45
+ closeOnScroll: closeOnScroll,
46
+ menuPopoverRef: menuPopoverRef,
47
+ triggerRef: triggerRef,
48
+ open: props.open,
49
+ defaultOpen: props.defaultOpen,
50
+ onOpenChange: props.onOpenChange,
51
+ openOnContext: openOnContext,
52
+ }), open = _l[0], setOpen = _l[1];
53
+ var _m = useMenuSelectableState({
54
+ checkedValues: props.checkedValues,
55
+ defaultCheckedValues: defaultCheckedValues,
56
+ onCheckedValueChange: props.onCheckedValueChange,
57
+ }), checkedValues = _m[0], onCheckedValueChange = _m[1];
58
+ return {
59
+ inline: inline,
60
+ hoverDelay: hoverDelay,
61
+ triggerId: triggerId,
62
+ isSubmenu: isSubmenu,
63
+ openOnHover: openOnHover,
64
+ contextTarget: contextTarget,
65
+ setContextTarget: setContextTarget,
66
+ hasCheckmarks: hasCheckmarks,
67
+ hasIcons: hasIcons,
68
+ closeOnScroll: closeOnScroll,
69
+ menuTrigger: menuTrigger,
70
+ menuPopover: menuPopover,
71
+ triggerRef: triggerRef,
72
+ menuPopoverRef: menuPopoverRef,
73
+ components: {},
74
+ openOnContext: openOnContext,
75
+ open: open,
76
+ setOpen: setOpen,
77
+ checkedValues: checkedValues,
78
+ defaultCheckedValues: defaultCheckedValues,
79
+ onCheckedValueChange: onCheckedValueChange,
80
+ persistOnItemClick: persistOnItemClick,
81
+ };
82
+ };
83
+ exports.useMenu_unstable = useMenu_unstable;
84
+ /**
85
+ * Adds appropriate state values and handlers for selectable items
86
+ * i.e checkboxes and radios
87
+ */
88
+ var useMenuSelectableState = function (state) {
89
+ var _a = react_utilities_1.useControllableState({
90
+ state: state.checkedValues,
91
+ defaultState: state.defaultCheckedValues,
92
+ initialState: {},
93
+ }), checkedValues = _a[0], setCheckedValues = _a[1];
94
+ var onCheckedValueChangeOriginal = state.onCheckedValueChange;
95
+ var onCheckedValueChange = react_utilities_1.useEventCallback(function (e, _a) {
96
+ var name = _a.name, checkedItems = _a.checkedItems;
97
+ if (onCheckedValueChangeOriginal) {
98
+ onCheckedValueChangeOriginal(e, { name: name, checkedItems: checkedItems });
99
+ }
100
+ setCheckedValues(function (s) {
101
+ var _a, _b;
102
+ return s ? tslib_1.__assign(tslib_1.__assign({}, s), (_a = {}, _a[name] = checkedItems, _a)) : (_b = {}, _b[name] = checkedItems, _b);
103
+ });
104
+ });
105
+ return [checkedValues, onCheckedValueChange];
106
+ };
107
+ var useMenuOpenState = function (state) {
108
+ var targetDocument = react_shared_contexts_1.useFluent_unstable().targetDocument;
109
+ var parentSetOpen = menuContext_1.useMenuContext_unstable(function (context) { return context.setOpen; });
110
+ var onOpenChange = react_utilities_1.useEventCallback(function (e, data) { var _a; return (_a = state.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(state, e, data); });
111
+ var shouldHandleCloseRef = React.useRef(false);
112
+ var shouldHandleTabRef = React.useRef(false);
113
+ var pressedShiftRef = React.useRef(false);
114
+ var setOpenTimeout = React.useRef(0);
115
+ var enteringTriggerRef = React.useRef(false);
116
+ var _a = react_utilities_1.useControllableState({
117
+ state: state.open,
118
+ defaultState: state.defaultOpen,
119
+ initialState: false,
120
+ }), open = _a[0], setOpenState = _a[1];
121
+ var trySetOpen = react_utilities_1.useEventCallback(function (e, data) {
122
+ var event = e instanceof CustomEvent && e.type === index_1.MENU_ENTER_EVENT ? e.detail.nativeEvent : e;
123
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(event, tslib_1.__assign({}, data));
124
+ if (data.open && e.type === 'contextmenu') {
125
+ state.setContextTarget(e);
126
+ }
127
+ if (!data.open) {
128
+ state.setContextTarget(undefined);
129
+ shouldHandleCloseRef.current = true;
130
+ }
131
+ if (e.type === 'keydown') {
132
+ if (e.key === keyboard_keys_1.Tab) {
133
+ shouldHandleTabRef.current = true;
134
+ pressedShiftRef.current = e.shiftKey;
135
+ }
136
+ }
137
+ if (data.bubble) {
138
+ parentSetOpen(e, tslib_1.__assign({}, data));
139
+ }
140
+ setOpenState(data.open);
141
+ });
142
+ var setOpen = react_utilities_1.useEventCallback(function (e, data) {
143
+ var _a;
144
+ clearTimeout(setOpenTimeout.current);
145
+ if (!(e instanceof Event) && e.persist) {
146
+ // < React 17 still uses pooled synthetic events
147
+ e.persist();
148
+ }
149
+ if (e.type === 'mouseleave' || e.type === 'mouseenter' || e.type === 'mousemove' || e.type === index_1.MENU_ENTER_EVENT) {
150
+ if ((_a = state.triggerRef.current) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {
151
+ enteringTriggerRef.current = e.type === 'mouseenter' || e.type === 'mousemove';
152
+ }
153
+ // FIXME leaking Node timeout type
154
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
155
+ // @ts-ignore
156
+ setOpenTimeout.current = setTimeout(function () { return trySetOpen(e, data); }, state.hoverDelay);
157
+ }
158
+ else {
159
+ trySetOpen(e, data);
160
+ }
161
+ });
162
+ react_utilities_1.useOnClickOutside({
163
+ contains: react_portal_1.elementContains,
164
+ disabled: !open,
165
+ element: targetDocument,
166
+ refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(Boolean),
167
+ callback: function (event) { return setOpen(event, { open: false, type: 'clickOutside', event: event }); },
168
+ });
169
+ // only close on scroll for context, or when closeOnScroll is specified
170
+ var closeOnScroll = state.openOnContext || state.closeOnScroll;
171
+ react_utilities_1.useOnScrollOutside({
172
+ contains: react_portal_1.elementContains,
173
+ element: targetDocument,
174
+ callback: function (event) { return setOpen(event, { open: false, type: 'scrollOutside', event: event }); },
175
+ refs: [state.menuPopoverRef, !state.openOnContext && state.triggerRef].filter(Boolean),
176
+ disabled: !open || !closeOnScroll,
177
+ });
178
+ index_1.useOnMenuMouseEnter({
179
+ element: targetDocument,
180
+ callback: function (event) {
181
+ // When moving from a menu directly back to its trigger, this handler can close the menu
182
+ // Explicitly check a flag to see if this situation happens
183
+ if (!enteringTriggerRef.current) {
184
+ setOpen(event, { open: false, type: 'menuMouseEnter', event: event });
185
+ }
186
+ },
187
+ disabled: !open,
188
+ refs: [state.menuPopoverRef],
189
+ });
190
+ // Clear timeout on unmount
191
+ // Setting state after a component unmounts can cause memory leaks
192
+ React.useEffect(function () {
193
+ return function () {
194
+ clearTimeout(setOpenTimeout.current);
195
+ };
196
+ }, []);
197
+ // Manage focus for open state
198
+ var _b = react_tabster_1.useFocusFinders(), findFirstFocusable = _b.findFirstFocusable, findNextFocusable = _b.findNextFocusable, findPrevFocusable = _b.findPrevFocusable;
199
+ var focusFirst = React.useCallback(function () {
200
+ var firstFocusable = findFirstFocusable(state.menuPopoverRef.current);
201
+ firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
202
+ }, [findFirstFocusable, state.menuPopoverRef]);
203
+ var focusAfterMenuTrigger = React.useCallback(function () {
204
+ var nextFocusable = findNextFocusable(state.triggerRef.current);
205
+ nextFocusable === null || nextFocusable === void 0 ? void 0 : nextFocusable.focus();
206
+ }, [findNextFocusable, state.triggerRef]);
207
+ var focusBeforeMenuTrigger = React.useCallback(function () {
208
+ var prevFocusable = findPrevFocusable(state.triggerRef.current);
209
+ prevFocusable === null || prevFocusable === void 0 ? void 0 : prevFocusable.focus();
210
+ }, [findPrevFocusable, state.triggerRef]);
211
+ React.useEffect(function () {
212
+ var _a;
213
+ if (open) {
214
+ focusFirst();
215
+ }
216
+ else {
217
+ if (shouldHandleCloseRef.current) {
218
+ if (shouldHandleTabRef.current && !state.isSubmenu) {
219
+ pressedShiftRef.current ? focusBeforeMenuTrigger() : focusAfterMenuTrigger();
220
+ }
221
+ else {
222
+ (_a = state.triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
223
+ }
224
+ }
225
+ }
226
+ shouldHandleCloseRef.current = false;
227
+ shouldHandleTabRef.current = false;
228
+ pressedShiftRef.current = false;
229
+ }, [state.triggerRef, state.isSubmenu, open, focusFirst, focusAfterMenuTrigger, focusBeforeMenuTrigger]);
230
+ return [open, setOpen];
231
+ };
232
+ });
233
+ //# sourceMappingURL=useMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenu.js","sourceRoot":"","sources":["../../../../../../../../../packages/react-components/react-menu/src/components/Menu/useMenu.tsx"],"names":[],"mappings":"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","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';\nimport { Tab } from '@fluentui/keyboard-keys';\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' as const) : ('below' as const),\n align: isSubmenu ? ('top' as const) : ('start' as const),\n target: props.openOnContext ? contextTarget : undefined,\n ...resolvePositioningShorthand(props.positioning),\n };\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 const { targetRef: triggerRef, containerRef: menuPopoverRef } = usePositioning(positioningState);\n\n // TODO Better way to narrow types ?\n\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 defaultCheckedValues,\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 state: Pick<MenuProps, 'checkedValues' | 'defaultCheckedValues' | 'onCheckedValueChange'>,\n) => {\n const [checkedValues, setCheckedValues] = useControllableState({\n state: state.checkedValues,\n defaultState: state.defaultCheckedValues,\n initialState: {},\n });\n const { onCheckedValueChange: onCheckedValueChangeOriginal } = state;\n const onCheckedValueChange: MenuState['onCheckedValueChange'] = useEventCallback((e, { name, checkedItems }) => {\n if (onCheckedValueChangeOriginal) {\n onCheckedValueChangeOriginal(e, { name, checkedItems });\n }\n\n setCheckedValues(s => {\n return s ? { ...s, [name]: checkedItems } : { [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 | 'onOpenChange'\n | 'setContextTarget'\n | 'triggerRef'\n | 'openOnContext'\n | 'closeOnScroll'\n | 'hoverDelay'\n > &\n Pick<MenuProps, 'open' | 'defaultOpen'>,\n) => {\n const { targetDocument } = useFluent();\n const parentSetOpen = useMenuContext_unstable(context => context.setOpen);\n const onOpenChange: MenuState['onOpenChange'] = useEventCallback((e, data) => state.onOpenChange?.(e, data));\n\n const shouldHandleCloseRef = React.useRef(false);\n const shouldHandleTabRef = React.useRef(false);\n const pressedShiftRef = 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 (e.type === 'keydown') {\n if ((e as React.KeyboardEvent<HTMLElement>).key === Tab) {\n shouldHandleTabRef.current = true;\n pressedShiftRef.current = (e as React.KeyboardEvent<HTMLElement>).shiftKey;\n }\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, findNextFocusable, findPrevFocusable } = useFocusFinders();\n const focusFirst = React.useCallback(() => {\n const firstFocusable = findFirstFocusable(state.menuPopoverRef.current);\n firstFocusable?.focus();\n }, [findFirstFocusable, state.menuPopoverRef]);\n\n const focusAfterMenuTrigger = React.useCallback(() => {\n const nextFocusable = findNextFocusable(state.triggerRef.current);\n nextFocusable?.focus();\n }, [findNextFocusable, state.triggerRef]);\n\n const focusBeforeMenuTrigger = React.useCallback(() => {\n const prevFocusable = findPrevFocusable(state.triggerRef.current);\n prevFocusable?.focus();\n }, [findPrevFocusable, state.triggerRef]);\n\n React.useEffect(() => {\n if (open) {\n focusFirst();\n } else {\n if (shouldHandleCloseRef.current) {\n if (shouldHandleTabRef.current && !state.isSubmenu) {\n pressedShiftRef.current ? focusBeforeMenuTrigger() : focusAfterMenuTrigger();\n } else {\n state.triggerRef.current?.focus();\n }\n }\n }\n\n shouldHandleCloseRef.current = false;\n shouldHandleTabRef.current = false;\n pressedShiftRef.current = false;\n }, [state.triggerRef, state.isSubmenu, open, focusFirst, focusAfterMenuTrigger, focusBeforeMenuTrigger]);\n\n return [open, setOpen] as const;\n};\n"]}
@@ -0,0 +1,29 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useMenuContextValues_unstable = void 0;
5
+ function useMenuContextValues_unstable(state) {
6
+ var checkedValues = state.checkedValues, defaultCheckedValues = state.defaultCheckedValues, hasCheckmarks = state.hasCheckmarks, hasIcons = state.hasIcons, inline = state.inline, isSubmenu = state.isSubmenu, menuPopoverRef = state.menuPopoverRef, onCheckedValueChange = state.onCheckedValueChange, open = state.open, openOnContext = state.openOnContext, openOnHover = state.openOnHover, persistOnItemClick = state.persistOnItemClick, setOpen = state.setOpen, triggerId = state.triggerId, triggerRef = state.triggerRef;
7
+ // This context is created with "@fluentui/react-context-selector", these is no sense to memoize it
8
+ var menu = {
9
+ checkedValues: checkedValues,
10
+ defaultCheckedValues: defaultCheckedValues,
11
+ hasCheckmarks: hasCheckmarks,
12
+ hasIcons: hasIcons,
13
+ inline: inline,
14
+ isSubmenu: isSubmenu,
15
+ menuPopoverRef: menuPopoverRef,
16
+ onCheckedValueChange: onCheckedValueChange,
17
+ open: open,
18
+ openOnContext: openOnContext,
19
+ openOnHover: openOnHover,
20
+ persistOnItemClick: persistOnItemClick,
21
+ setOpen: setOpen,
22
+ triggerId: triggerId,
23
+ triggerRef: triggerRef,
24
+ };
25
+ return { menu: menu };
26
+ }
27
+ exports.useMenuContextValues_unstable = useMenuContextValues_unstable;
28
+ });
29
+ //# sourceMappingURL=useMenuContextValues.js.map