@fluentui/react-menu 9.17.5 → 9.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -2
- package/dist/index.d.ts +21 -3
- package/lib/components/Menu/Menu.types.js.map +1 -1
- package/lib/components/Menu/renderMenu.js.map +1 -1
- package/lib/components/Menu/useMenu.js +61 -10
- package/lib/components/Menu/useMenu.js.map +1 -1
- package/lib/components/Menu/useMenuContextValues.js +2 -1
- package/lib/components/Menu/useMenuContextValues.js.map +1 -1
- package/lib/components/MenuItem/useMenuItemStyles.styles.js +29 -3
- package/lib/components/MenuItem/useMenuItemStyles.styles.js.map +1 -1
- package/lib/components/MenuPopover/MenuPopover.types.js +1 -3
- package/lib/components/MenuPopover/MenuPopover.types.js.map +1 -1
- package/lib/components/MenuPopover/renderMenuPopover.js +12 -4
- package/lib/components/MenuPopover/renderMenuPopover.js.map +1 -1
- package/lib/components/MenuPopover/useMenuPopover.js +10 -7
- package/lib/components/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib/components/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib/components/MenuTrigger/renderMenuTrigger.js.map +1 -1
- package/lib/components/MenuTrigger/useMenuTrigger.js +46 -20
- package/lib/components/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib/contexts/menuContext.js.map +1 -1
- package/lib/utils/index.js +2 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/useOnMenuEnter.js.map +1 -1
- package/lib/utils/useOnMenuSafeZoneTimeout.js +18 -0
- package/lib/utils/useOnMenuSafeZoneTimeout.js.map +1 -0
- package/lib-commonjs/components/Menu/Menu.types.js.map +1 -1
- package/lib-commonjs/components/Menu/renderMenu.js.map +1 -1
- package/lib-commonjs/components/Menu/useMenu.js +62 -11
- package/lib-commonjs/components/Menu/useMenu.js.map +1 -1
- package/lib-commonjs/components/Menu/useMenuContextValues.js +2 -1
- package/lib-commonjs/components/Menu/useMenuContextValues.js.map +1 -1
- package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.js +54 -3
- package/lib-commonjs/components/MenuItem/useMenuItemStyles.styles.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/MenuPopover.types.js +3 -3
- package/lib-commonjs/components/MenuPopover/MenuPopover.types.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/renderMenuPopover.js +11 -3
- package/lib-commonjs/components/MenuPopover/renderMenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuPopover/useMenuPopover.js +10 -7
- package/lib-commonjs/components/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/renderMenuTrigger.js.map +1 -1
- package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js +47 -21
- package/lib-commonjs/components/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib-commonjs/contexts/menuContext.js.map +1 -1
- package/lib-commonjs/utils/index.js +11 -0
- package/lib-commonjs/utils/index.js.map +1 -1
- package/lib-commonjs/utils/useOnMenuEnter.js.map +1 -1
- package/lib-commonjs/utils/useOnMenuSafeZoneTimeout.js +32 -0
- package/lib-commonjs/utils/useOnMenuSafeZoneTimeout.js.map +1 -0
- package/package.json +3 -3
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/Menu/useMenu.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n usePositioningMouseTarget,\n usePositioning,\n resolvePositioningShorthand,\n PositioningShorthandValue,\n} from '@fluentui/react-positioning';\nimport {\n useControllableState,\n useId,\n useOnClickOutside,\n useEventCallback,\n useOnScrollOutside,\n elementContains,\n useTimeout,\n useFirstMount,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\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// If it's not possible to position the submenu in smaller viewports, try\n// and fallback to this order of positions\nconst submenuFallbackPositions: PositioningShorthandValue[] = [\n 'after',\n 'after-bottom',\n 'before-top',\n 'before',\n 'before-bottom',\n 'above',\n];\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 mountNode = null,\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 fallbackPositions: isSubmenu ? submenuFallbackPositions : 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 mountNode,\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 'use no memo';\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 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 }\n\n if (data.bubble) {\n parentSetOpen(e, { ...data });\n }\n\n setOpenState(data.open);\n });\n\n const [setOpenTimeout, clearOpenTimeout] = useTimeout();\n\n const setOpen = useEventCallback((e: MenuOpenEvent, data: MenuOpenChangeData) => {\n clearOpenTimeout();\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 setOpenTimeout(() => 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 // 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 const firstMount = useFirstMount();\n React.useEffect(() => {\n if (open) {\n focusFirst();\n } else {\n if (!firstMount) {\n if (targetDocument?.activeElement === targetDocument?.body) {\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 // firstMount change should not re-run this effect\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.triggerRef, state.isSubmenu, open, focusFirst, targetDocument, state.menuPopoverRef]);\n\n return [open, setOpen] as const;\n};\n"],"names":["useMenu_unstable","submenuFallbackPositions","props","isSubmenu","useIsSubmenu","hoverDelay","inline","hasCheckmarks","hasIcons","closeOnScroll","openOnContext","persistOnItemClick","openOnHover","defaultCheckedValues","mountNode","triggerId","useId","contextTarget","setContextTarget","usePositioningMouseTarget","positioningState","position","align","target","undefined","fallbackPositions","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","name","checkedItems","currentValue","targetDocument","useFluent","parentSetOpen","useMenuContext_unstable","context","data","enteringTriggerRef","useRef","setOpenState","trySetOpen","event","CustomEvent","type","MENU_ENTER_EVENT","detail","nativeEvent","bubble","setOpenTimeout","clearOpenTimeout","useTimeout","Event","persist","current","contains","useOnClickOutside","elementContains","disabled","element","refs","filter","Boolean","callback","useOnScrollOutside","useOnMenuMouseEnter","findFirstFocusable","useFocusFinders","focusFirst","useCallback","firstFocusable","focus","firstMount","useFirstMount","useEffect","activeElement","body"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/components/Menu/useMenu.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n resolvePositioningShorthand,\n usePositioningMouseTarget,\n usePositioning,\n useSafeZoneArea,\n type PositioningShorthandValue,\n} from '@fluentui/react-positioning';\nimport {\n useControllableState,\n useId,\n useOnClickOutside,\n useEventCallback,\n useOnScrollOutside,\n elementContains,\n useTimeout,\n useFirstMount,\n useMergedRefs,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useFocusFinders } from '@fluentui/react-tabster';\n\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { MENU_SAFEZONE_TIMEOUT_EVENT, MENU_ENTER_EVENT, useOnMenuMouseEnter, useIsSubmenu } from '../../utils';\nimport { menuItemClassNames } from '../MenuItem/useMenuItemStyles.styles';\nimport type { MenuOpenChangeData, MenuOpenEvent, MenuProps, MenuState } from './Menu.types';\n\n// If it's not possible to position the submenu in smaller viewports, try\n// and fallback to this order of positions\nconst submenuFallbackPositions: PositioningShorthandValue[] = [\n 'after',\n 'after-bottom',\n 'before-top',\n 'before',\n 'before-bottom',\n 'above',\n];\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 & { safeZone?: boolean | { timeout?: number } }): 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 mountNode = null,\n safeZone,\n } = props;\n\n const { targetDocument } = useFluent();\n const triggerId = useId('menu');\n const [contextTarget, setContextTarget] = usePositioningMouseTarget();\n\n const positioningOptions = {\n position: isSubmenu ? 'after' : 'below',\n align: isSubmenu ? 'top' : 'start',\n target: props.openOnContext ? contextTarget : undefined,\n fallbackPositions: isSubmenu ? submenuFallbackPositions : 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, containerRef } = usePositioning(positioningOptions);\n\n const enableSafeZone = safeZone && openOnHover;\n const safeZoneDescriptorRef = React.useRef({\n isInside: false,\n mouseCoordinates: { x: 0, y: 0 },\n });\n\n const safeZoneHandle = useSafeZoneArea({\n disabled: !enableSafeZone,\n timeout: typeof safeZone === 'object' ? safeZone.timeout : 300,\n\n onSafeZoneEnter: e => {\n setOpen(e, { open: true, keyboard: false, type: 'menuSafeZoneMouseEnter', event: e });\n safeZoneDescriptorRef.current.isInside = true;\n },\n onSafeZoneLeave: () => {\n safeZoneDescriptorRef.current.isInside = false;\n },\n onSafeZoneMove: e => {\n safeZoneDescriptorRef.current.mouseCoordinates = {\n x: e.clientX,\n y: e.clientY,\n };\n },\n onSafeZoneTimeout: () => {\n const event = new CustomEvent(MENU_SAFEZONE_TIMEOUT_EVENT);\n\n setOpen(event, { open: false, keyboard: false, type: 'menuSafeZoneTimeout', event });\n\n if (safeZoneDescriptorRef.current.isInside && targetDocument) {\n const elementsInPoint = targetDocument.elementsFromPoint(\n safeZoneDescriptorRef.current.mouseCoordinates.x,\n safeZoneDescriptorRef.current.mouseCoordinates.y,\n );\n const menuItemEl = elementsInPoint.find(el => {\n return el.classList.contains(menuItemClassNames.root);\n }) as HTMLElement | null;\n\n menuItemEl?.dispatchEvent(event);\n }\n },\n });\n\n const triggerRef = useMergedRefs(targetRef, safeZoneHandle.targetRef);\n const menuPopoverRef = useMergedRefs(containerRef, safeZoneHandle.containerRef);\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 mountNode,\n triggerRef,\n menuPopoverRef,\n components: {},\n openOnContext,\n open,\n setOpen,\n checkedValues,\n onCheckedValueChange,\n persistOnItemClick,\n safeZone: safeZoneHandle.elementToRender,\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 'use no memo';\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 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 }\n\n if (data.bubble) {\n parentSetOpen(e, { ...data });\n }\n\n setOpenState(data.open);\n });\n\n const [setOpenTimeout, clearOpenTimeout] = useTimeout();\n\n const setOpen = useEventCallback((e: MenuOpenEvent, data: MenuOpenChangeData & { ignoreHoverDelay?: boolean }) => {\n clearOpenTimeout();\n if (!(e instanceof Event) && e.persist) {\n // < React 17 still uses pooled synthetic events\n e.persist();\n }\n\n const shouldUseDelay =\n !data.ignoreHoverDelay &&\n (e.type === 'mouseleave' || e.type === 'mouseover' || e.type === 'mousemove' || e.type === MENU_ENTER_EVENT);\n\n if (shouldUseDelay) {\n if (state.triggerRef.current?.contains(e.target as HTMLElement)) {\n enteringTriggerRef.current = e.type === 'mouseover' || e.type === 'mousemove';\n }\n\n setOpenTimeout(() => 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 // 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 const firstMount = useFirstMount();\n React.useEffect(() => {\n if (open) {\n focusFirst();\n } else {\n if (!firstMount) {\n if (targetDocument?.activeElement === targetDocument?.body) {\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 // firstMount change should not re-run this effect\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.triggerRef, state.isSubmenu, open, focusFirst, targetDocument, state.menuPopoverRef]);\n\n return [open, setOpen] as const;\n};\n"],"names":["useMenu_unstable","submenuFallbackPositions","props","isSubmenu","useIsSubmenu","hoverDelay","inline","hasCheckmarks","hasIcons","closeOnScroll","openOnContext","persistOnItemClick","openOnHover","defaultCheckedValues","mountNode","safeZone","targetDocument","useFluent","triggerId","useId","contextTarget","setContextTarget","usePositioningMouseTarget","positioningOptions","position","align","target","undefined","fallbackPositions","resolvePositioningShorthand","positioning","children","React","Children","toArray","process","env","NODE_ENV","length","console","warn","menuTrigger","menuPopover","targetRef","containerRef","usePositioning","enableSafeZone","safeZoneDescriptorRef","useRef","isInside","mouseCoordinates","x","y","safeZoneHandle","useSafeZoneArea","disabled","timeout","onSafeZoneEnter","e","setOpen","open","keyboard","type","event","current","onSafeZoneLeave","onSafeZoneMove","clientX","clientY","onSafeZoneTimeout","CustomEvent","MENU_SAFEZONE_TIMEOUT_EVENT","elementsInPoint","elementsFromPoint","menuItemEl","find","el","classList","contains","menuItemClassNames","root","dispatchEvent","triggerRef","useMergedRefs","menuPopoverRef","useMenuOpenState","defaultOpen","onOpenChange","checkedValues","onCheckedValueChange","useMenuSelectableState","components","elementToRender","setCheckedValues","useControllableState","state","defaultState","initialState","useEventCallback","name","checkedItems","currentValue","parentSetOpen","useMenuContext_unstable","context","data","enteringTriggerRef","setOpenState","trySetOpen","MENU_ENTER_EVENT","detail","nativeEvent","bubble","setOpenTimeout","clearOpenTimeout","useTimeout","Event","persist","shouldUseDelay","ignoreHoverDelay","useOnClickOutside","elementContains","element","refs","filter","Boolean","callback","useOnScrollOutside","useOnMenuMouseEnter","findFirstFocusable","useFocusFinders","focusFirst","useCallback","firstFocusable","focus","firstMount","useFirstMount","useEffect","activeElement","body"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
@@ -9,7 +9,7 @@ Object.defineProperty(exports, "useMenuContextValues_unstable", {
|
|
9
9
|
}
|
10
10
|
});
|
11
11
|
function useMenuContextValues_unstable(state) {
|
12
|
-
const { checkedValues, hasCheckmarks, hasIcons, inline, isSubmenu, menuPopoverRef, mountNode, onCheckedValueChange, open, openOnContext, openOnHover, persistOnItemClick, setOpen, triggerId, triggerRef } = state;
|
12
|
+
const { checkedValues, hasCheckmarks, hasIcons, inline, isSubmenu, menuPopoverRef, mountNode, onCheckedValueChange, open, openOnContext, openOnHover, persistOnItemClick, safeZone, setOpen, triggerId, triggerRef } = state;
|
13
13
|
// This context is created with "@fluentui/react-context-selector", these is no sense to memoize it
|
14
14
|
const menu = {
|
15
15
|
checkedValues,
|
@@ -24,6 +24,7 @@ function useMenuContextValues_unstable(state) {
|
|
24
24
|
openOnContext,
|
25
25
|
openOnHover,
|
26
26
|
persistOnItemClick,
|
27
|
+
safeZone,
|
27
28
|
setOpen,
|
28
29
|
triggerId,
|
29
30
|
triggerRef
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/Menu/useMenuContextValues.ts"],"sourcesContent":["import type { MenuContextValues, MenuState } from './Menu.types';\n\nexport function useMenuContextValues_unstable(state: MenuState): MenuContextValues {\n const {\n checkedValues,\n hasCheckmarks,\n hasIcons,\n inline,\n isSubmenu,\n menuPopoverRef,\n mountNode,\n onCheckedValueChange,\n open,\n openOnContext,\n openOnHover,\n persistOnItemClick,\n setOpen,\n triggerId,\n triggerRef,\n } = state;\n\n // This context is created with \"@fluentui/react-context-selector\", these is no sense to memoize it\n const menu = {\n checkedValues,\n hasCheckmarks,\n hasIcons,\n inline,\n isSubmenu,\n menuPopoverRef,\n mountNode,\n onCheckedValueChange,\n open,\n openOnContext,\n openOnHover,\n persistOnItemClick,\n setOpen,\n triggerId,\n triggerRef,\n };\n\n return { menu };\n}\n"],"names":["useMenuContextValues_unstable","state","checkedValues","hasCheckmarks","hasIcons","inline","isSubmenu","menuPopoverRef","mountNode","onCheckedValueChange","open","openOnContext","openOnHover","persistOnItemClick","setOpen","triggerId","triggerRef","menu"],"rangeMappings":"
|
1
|
+
{"version":3,"sources":["../src/components/Menu/useMenuContextValues.ts"],"sourcesContent":["import type { MenuContextValues, MenuState } from './Menu.types';\n\nexport function useMenuContextValues_unstable(state: MenuState): MenuContextValues {\n const {\n checkedValues,\n hasCheckmarks,\n hasIcons,\n inline,\n isSubmenu,\n menuPopoverRef,\n mountNode,\n onCheckedValueChange,\n open,\n openOnContext,\n openOnHover,\n persistOnItemClick,\n safeZone,\n setOpen,\n triggerId,\n triggerRef,\n } = state;\n\n // This context is created with \"@fluentui/react-context-selector\", these is no sense to memoize it\n const menu = {\n checkedValues,\n hasCheckmarks,\n hasIcons,\n inline,\n isSubmenu,\n menuPopoverRef,\n mountNode,\n onCheckedValueChange,\n open,\n openOnContext,\n openOnHover,\n persistOnItemClick,\n safeZone,\n setOpen,\n triggerId,\n triggerRef,\n };\n\n return { menu };\n}\n"],"names":["useMenuContextValues_unstable","state","checkedValues","hasCheckmarks","hasIcons","inline","isSubmenu","menuPopoverRef","mountNode","onCheckedValueChange","open","openOnContext","openOnHover","persistOnItemClick","safeZone","setOpen","triggerId","triggerRef","menu"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAEgBA;;;eAAAA;;;AAAT,SAASA,8BAA8BC,KAAgB;IAC5D,MAAM,EACJC,aAAa,EACbC,aAAa,EACbC,QAAQ,EACRC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,SAAS,EACTC,oBAAoB,EACpBC,IAAI,EACJC,aAAa,EACbC,WAAW,EACXC,kBAAkB,EAClBC,QAAQ,EACRC,OAAO,EACPC,SAAS,EACTC,UAAU,EACX,GAAGhB;IAEJ,mGAAmG;IACnG,MAAMiB,OAAO;QACXhB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,OAAO;QAAEC;IAAK;AAChB"}
|
@@ -115,14 +115,20 @@ const useStyles = /*#__PURE__*/ (0, _react.__styles)({
|
|
115
115
|
Bk3fhr4: "f19vpps7",
|
116
116
|
Bmfj8id: "fv5swzo",
|
117
117
|
Bg7n49j: "f1q1x1ba",
|
118
|
+
c7f7en: "ff3wrqt",
|
118
119
|
B2d53fq: "fcvwxyo",
|
119
120
|
iro3zm: "f1to34ca",
|
121
|
+
Bumww26: "fszh5vc",
|
120
122
|
t0hwav: "ft33916",
|
121
123
|
Bbusuzp: "f1dcs8yz",
|
122
124
|
ze5xyy: "f1kc2mi9",
|
123
125
|
Bqrx1nm: "fkavljg",
|
124
126
|
Bctn1xl: "fk56vqo",
|
125
127
|
h5esng: "ff3wi9b",
|
128
|
+
Bsk3rfj: "fduv4kr",
|
129
|
+
pc6evw: "fb3rf2x",
|
130
|
+
g2kj27: "f183y0b2",
|
131
|
+
evg1t5: "f12is0ou",
|
126
132
|
Bh6z0a4: "f1ikwg0d",
|
127
133
|
Bh953qp: "f10l1t5h"
|
128
134
|
}
|
@@ -149,8 +155,10 @@ const useStyles = /*#__PURE__*/ (0, _react.__styles)({
|
|
149
155
|
".f19vpps7:hover .fui-Icon-filled{display:none;}",
|
150
156
|
".fv5swzo:hover .fui-Icon-regular{display:inline;}",
|
151
157
|
".f1q1x1ba:hover .fui-MenuItem__icon{color:var(--colorNeutralForegroundDisabled);}",
|
158
|
+
".ff3wrqt:hover .fui-MenuItem__subText{color:var(--colorNeutralForegroundDisabled);}",
|
152
159
|
".fcvwxyo:hover:active{color:var(--colorNeutralForegroundDisabled);}",
|
153
|
-
".f1to34ca:hover:active{background-color:var(--colorNeutralBackground1);}"
|
160
|
+
".f1to34ca:hover:active{background-color:var(--colorNeutralBackground1);}",
|
161
|
+
".fszh5vc:hover:active .fui-MenuItem__subText{color:var(--colorNeutralForegroundDisabled);}"
|
154
162
|
],
|
155
163
|
f: [
|
156
164
|
".ft33916:focus{color:var(--colorNeutralForegroundDisabled);}"
|
@@ -186,6 +194,30 @@ const useStyles = /*#__PURE__*/ (0, _react.__styles)({
|
|
186
194
|
m: "(forced-colors: active)"
|
187
195
|
}
|
188
196
|
],
|
197
|
+
[
|
198
|
+
"@media (forced-colors: active){.fduv4kr:hover .fui-MenuItem__subText{color:GrayText;}}",
|
199
|
+
{
|
200
|
+
m: "(forced-colors: active)"
|
201
|
+
}
|
202
|
+
],
|
203
|
+
[
|
204
|
+
"@media (forced-colors: active){.fb3rf2x:hover:active{color:GrayText;}}",
|
205
|
+
{
|
206
|
+
m: "(forced-colors: active)"
|
207
|
+
}
|
208
|
+
],
|
209
|
+
[
|
210
|
+
"@media (forced-colors: active){.f183y0b2:hover:active{background-color:Canvas;}}",
|
211
|
+
{
|
212
|
+
m: "(forced-colors: active)"
|
213
|
+
}
|
214
|
+
],
|
215
|
+
[
|
216
|
+
"@media (forced-colors: active){.f12is0ou:hover:active .fui-MenuItem__subText{color:GrayText;}}",
|
217
|
+
{
|
218
|
+
m: "(forced-colors: active)"
|
219
|
+
}
|
220
|
+
],
|
189
221
|
[
|
190
222
|
"@media (forced-colors: active){.f1ikwg0d:focus{color:GrayText;}}",
|
191
223
|
{
|
@@ -200,6 +232,24 @@ const useStyles = /*#__PURE__*/ (0, _react.__styles)({
|
|
200
232
|
]
|
201
233
|
]
|
202
234
|
});
|
235
|
+
const useSubTextStyles = /*#__PURE__*/ (0, _react.__styles)({
|
236
|
+
disabled: {
|
237
|
+
sj55zd: "f1s2aq7o",
|
238
|
+
Bbusuzp: "f1dcs8yz"
|
239
|
+
}
|
240
|
+
}, {
|
241
|
+
d: [
|
242
|
+
".f1s2aq7o{color:var(--colorNeutralForegroundDisabled);}"
|
243
|
+
],
|
244
|
+
m: [
|
245
|
+
[
|
246
|
+
"@media (forced-colors: active){.f1dcs8yz{color:GrayText;}}",
|
247
|
+
{
|
248
|
+
m: "(forced-colors: active)"
|
249
|
+
}
|
250
|
+
]
|
251
|
+
]
|
252
|
+
});
|
203
253
|
const useMultilineStyles = /*#__PURE__*/ (0, _react.__styles)({
|
204
254
|
content: {
|
205
255
|
mc9l5x: "f22iagw",
|
@@ -228,6 +278,7 @@ const useMenuItemStyles_unstable = (state)=>{
|
|
228
278
|
const submenuIndicatorBaseStyles = useSubmenuIndicatorBaseStyles();
|
229
279
|
const multilineStyles = useMultilineStyles();
|
230
280
|
const subtextBaseStyles = useSubtextBaseStyles();
|
281
|
+
const subTextStyles = useSubTextStyles();
|
231
282
|
const multiline = !!state.subText;
|
232
283
|
state.root.className = (0, _react.mergeClasses)(menuItemClassNames.root, rootBaseStyles, state.disabled && styles.disabled, state.root.className);
|
233
284
|
if (state.content) {
|
@@ -237,7 +288,7 @@ const useMenuItemStyles_unstable = (state)=>{
|
|
237
288
|
state.checkmark.className = (0, _react.mergeClasses)(menuItemClassNames.checkmark, styles.checkmark, state.checkmark.className);
|
238
289
|
}
|
239
290
|
if (state.secondaryContent) {
|
240
|
-
state.secondaryContent.className = (0, _react.mergeClasses)(menuItemClassNames.secondaryContent,
|
291
|
+
state.secondaryContent.className = (0, _react.mergeClasses)(menuItemClassNames.secondaryContent, secondaryContentBaseStyles, state.disabled && styles.disabled, state.secondaryContent.className, multiline && multilineStyles.secondaryContent);
|
241
292
|
}
|
242
293
|
if (state.icon) {
|
243
294
|
state.icon.className = (0, _react.mergeClasses)(menuItemClassNames.icon, iconBaseStyles, state.icon.className);
|
@@ -246,7 +297,7 @@ const useMenuItemStyles_unstable = (state)=>{
|
|
246
297
|
state.submenuIndicator.className = (0, _react.mergeClasses)(menuItemClassNames.submenuIndicator, submenuIndicatorBaseStyles, state.submenuIndicator.className, multiline && multilineStyles.submenuIndicator);
|
247
298
|
}
|
248
299
|
if (state.subText) {
|
249
|
-
state.subText.className = (0, _react.mergeClasses)(menuItemClassNames.subText, state.subText.className, subtextBaseStyles);
|
300
|
+
state.subText.className = (0, _react.mergeClasses)(menuItemClassNames.subText, state.disabled && subTextStyles.disabled, state.subText.className, subtextBaseStyles);
|
250
301
|
}
|
251
302
|
(0, _index.useCheckmarkStyles_unstable)(state);
|
252
303
|
return state;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["useMenuItemStyles.styles.js"],"sourcesContent":["import { mergeClasses, makeStyles, makeResetStyles } from '@griffel/react';\nimport { iconFilledClassName, iconRegularClassName } from '@fluentui/react-icons';\nimport { createFocusOutlineStyle } from '@fluentui/react-tabster';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\nimport { useCheckmarkStyles_unstable } from '../../selectable/index';\nexport const menuItemClassNames = {\n root: 'fui-MenuItem',\n icon: 'fui-MenuItem__icon',\n checkmark: 'fui-MenuItem__checkmark',\n submenuIndicator: 'fui-MenuItem__submenuIndicator',\n content: 'fui-MenuItem__content',\n secondaryContent: 'fui-MenuItem__secondaryContent',\n subText: 'fui-MenuItem__subText'\n};\nconst useRootBaseStyles = makeResetStyles({\n borderRadius: tokens.borderRadiusMedium,\n position: 'relative',\n color: tokens.colorNeutralForeground2,\n backgroundColor: tokens.colorNeutralBackground1,\n paddingRight: tokens.spacingVerticalSNudge,\n paddingLeft: tokens.spacingVerticalSNudge,\n paddingTop: tokens.spacingVerticalSNudge,\n paddingBottom: tokens.spacingVerticalSNudge,\n boxSizing: 'border-box',\n maxWidth: '290px',\n minHeight: '32px',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'start',\n fontSize: tokens.fontSizeBase300,\n cursor: 'pointer',\n gap: '4px',\n ':hover': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n color: tokens.colorNeutralForeground2Hover,\n [`& .${iconFilledClassName}`]: {\n display: 'inline'\n },\n [`& .${iconRegularClassName}`]: {\n display: 'none'\n },\n [`& .${menuItemClassNames.icon}`]: {\n color: tokens.colorNeutralForeground2BrandSelected\n },\n [`& .${menuItemClassNames.subText}`]: {\n color: tokens.colorNeutralForeground3Hover\n }\n },\n ':hover:active': {\n backgroundColor: tokens.colorNeutralBackground1Pressed,\n color: tokens.colorNeutralForeground2Pressed,\n [`& .${menuItemClassNames.subText}`]: {\n color: tokens.colorNeutralForeground3Pressed\n }\n },\n // High contrast styles\n '@media (forced-colors: active)': {\n ':hover': {\n backgroundColor: 'Canvas',\n borderColor: 'Highlight',\n color: 'Highlight'\n },\n ...createFocusOutlineStyle({\n style: {\n outlineColor: 'Highlight'\n }\n })\n },\n userSelect: 'none',\n ...createFocusOutlineStyle()\n});\nconst useContentBaseStyles = makeResetStyles({\n paddingLeft: '2px',\n paddingRight: '2px',\n backgroundColor: 'transparent',\n flexGrow: 1\n});\nconst useSecondaryContentBaseStyles = makeResetStyles({\n paddingLeft: '2px',\n paddingRight: '2px',\n ...typographyStyles.caption1,\n lineHeight: tokens.lineHeightBase300,\n color: tokens.colorNeutralForeground3,\n ':hover': {\n color: tokens.colorNeutralForeground3Hover\n },\n ':focus': {\n color: tokens.colorNeutralForeground3Hover\n }\n});\nconst useIconBaseStyles = makeResetStyles({\n width: '20px',\n height: '20px',\n fontSize: '20px',\n lineHeight: 0,\n alignItems: 'center',\n display: 'inline-flex',\n justifyContent: 'center',\n flexShrink: 0\n});\nconst useSubmenuIndicatorBaseStyles = makeResetStyles({\n width: '20px',\n height: '20px',\n fontSize: '20px',\n lineHeight: 0,\n alignItems: 'center',\n display: 'inline-flex',\n justifyContent: 'center'\n});\nconst useSubtextBaseStyles = makeResetStyles({\n ...typographyStyles.caption2,\n color: tokens.colorNeutralForeground3\n});\nconst useStyles = makeStyles({\n checkmark: {\n marginTop: '2px'\n },\n splitItemMain: {\n flexGrow: 1\n },\n splitItemTrigger: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n paddingLeft: 0,\n '::before': {\n content: '\"\"',\n width: tokens.strokeWidthThin,\n height: '24px',\n backgroundColor: tokens.colorNeutralStroke1\n }\n },\n disabled: {\n color: tokens.colorNeutralForegroundDisabled,\n ':hover': {\n color: tokens.colorNeutralForegroundDisabled,\n backgroundColor: tokens.colorNeutralBackground1,\n cursor: 'not-allowed',\n [`& .${iconFilledClassName}`]: {\n display: 'none'\n },\n [`& .${iconRegularClassName}`]: {\n display: 'inline'\n },\n [`& .${menuItemClassNames.icon}`]: {\n color: tokens.colorNeutralForegroundDisabled\n }\n },\n ':hover:active': {\n color: tokens.colorNeutralForegroundDisabled,\n backgroundColor: tokens.colorNeutralBackground1\n },\n ':focus': {\n color: tokens.colorNeutralForegroundDisabled\n },\n '@media (forced-colors: active)': {\n color: 'GrayText',\n ':hover': {\n color: 'GrayText',\n backgroundColor: 'Canvas',\n [`& .${menuItemClassNames.icon}`]: {\n color: 'GrayText',\n backgroundColor: 'Canvas'\n }\n },\n ':focus': {\n color: 'GrayText',\n backgroundColor: 'Canvas'\n }\n }\n }\n});\nconst useMultilineStyles = makeStyles({\n content: {\n display: 'flex',\n flexDirection: 'column'\n },\n secondaryContent: {\n alignSelf: 'center'\n },\n submenuIndicator: {\n alignSelf: 'center'\n }\n});\n/** Applies style classnames to slots */ export const useMenuItemStyles_unstable = (state)=>{\n 'use no memo';\n const styles = useStyles();\n const rootBaseStyles = useRootBaseStyles();\n const contentBaseStyles = useContentBaseStyles();\n const secondaryContentBaseStyles = useSecondaryContentBaseStyles();\n const iconBaseStyles = useIconBaseStyles();\n const submenuIndicatorBaseStyles = useSubmenuIndicatorBaseStyles();\n const multilineStyles = useMultilineStyles();\n const subtextBaseStyles = useSubtextBaseStyles();\n const multiline = !!state.subText;\n state.root.className = mergeClasses(menuItemClassNames.root, rootBaseStyles, state.disabled && styles.disabled, state.root.className);\n if (state.content) {\n state.content.className = mergeClasses(menuItemClassNames.content, contentBaseStyles, state.content.className, multiline && multilineStyles.content);\n }\n if (state.checkmark) {\n state.checkmark.className = mergeClasses(menuItemClassNames.checkmark, styles.checkmark, state.checkmark.className);\n }\n if (state.secondaryContent) {\n state.secondaryContent.className = mergeClasses(menuItemClassNames.secondaryContent, !state.disabled && secondaryContentBaseStyles, state.secondaryContent.className, multiline && multilineStyles.secondaryContent);\n }\n if (state.icon) {\n state.icon.className = mergeClasses(menuItemClassNames.icon, iconBaseStyles, state.icon.className);\n }\n if (state.submenuIndicator) {\n state.submenuIndicator.className = mergeClasses(menuItemClassNames.submenuIndicator, submenuIndicatorBaseStyles, state.submenuIndicator.className, multiline && multilineStyles.submenuIndicator);\n }\n if (state.subText) {\n state.subText.className = mergeClasses(menuItemClassNames.subText, state.subText.className, subtextBaseStyles);\n }\n useCheckmarkStyles_unstable(state);\n return state;\n};\n"],"names":["menuItemClassNames","useMenuItemStyles_unstable","root","icon","checkmark","submenuIndicator","content","secondaryContent","subText","useRootBaseStyles","__resetStyles","r","s","useContentBaseStyles","useSecondaryContentBaseStyles","useIconBaseStyles","useSubmenuIndicatorBaseStyles","useSubtextBaseStyles","useStyles","__styles","B6of3ja","splitItemMain","Bh6795r","splitItemTrigger","Btl43ni","Beyfa6y","uwmqm3","Ftih45","Ccq8qp","Baz25je","cmx5o7","disabled","sj55zd","Bi91k9c","Jwef8y","eoavqd","Bk3fhr4","Bmfj8id","Bg7n49j","B2d53fq","iro3zm","t0hwav","Bbusuzp","ze5xyy","Bqrx1nm","Bctn1xl","h5esng","Bh6z0a4","Bh953qp","d","h","f","m","useMultilineStyles","mc9l5x","Beiy3e4","qb2dma","state","styles","rootBaseStyles","contentBaseStyles","secondaryContentBaseStyles","iconBaseStyles","submenuIndicatorBaseStyles","multilineStyles","subtextBaseStyles","multiline","className","mergeClasses","useCheckmarkStyles_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
1
|
+
{"version":3,"sources":["useMenuItemStyles.styles.js"],"sourcesContent":["import { mergeClasses, makeStyles, makeResetStyles } from '@griffel/react';\nimport { iconFilledClassName, iconRegularClassName } from '@fluentui/react-icons';\nimport { createFocusOutlineStyle } from '@fluentui/react-tabster';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\nimport { useCheckmarkStyles_unstable } from '../../selectable/index';\nexport const menuItemClassNames = {\n root: 'fui-MenuItem',\n icon: 'fui-MenuItem__icon',\n checkmark: 'fui-MenuItem__checkmark',\n submenuIndicator: 'fui-MenuItem__submenuIndicator',\n content: 'fui-MenuItem__content',\n secondaryContent: 'fui-MenuItem__secondaryContent',\n subText: 'fui-MenuItem__subText'\n};\nconst useRootBaseStyles = makeResetStyles({\n borderRadius: tokens.borderRadiusMedium,\n position: 'relative',\n color: tokens.colorNeutralForeground2,\n backgroundColor: tokens.colorNeutralBackground1,\n paddingRight: tokens.spacingVerticalSNudge,\n paddingLeft: tokens.spacingVerticalSNudge,\n paddingTop: tokens.spacingVerticalSNudge,\n paddingBottom: tokens.spacingVerticalSNudge,\n boxSizing: 'border-box',\n maxWidth: '290px',\n minHeight: '32px',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'start',\n fontSize: tokens.fontSizeBase300,\n cursor: 'pointer',\n gap: '4px',\n ':hover': {\n backgroundColor: tokens.colorNeutralBackground1Hover,\n color: tokens.colorNeutralForeground2Hover,\n [`& .${iconFilledClassName}`]: {\n display: 'inline'\n },\n [`& .${iconRegularClassName}`]: {\n display: 'none'\n },\n [`& .${menuItemClassNames.icon}`]: {\n color: tokens.colorNeutralForeground2BrandSelected\n },\n [`& .${menuItemClassNames.subText}`]: {\n color: tokens.colorNeutralForeground3Hover\n }\n },\n ':hover:active': {\n backgroundColor: tokens.colorNeutralBackground1Pressed,\n color: tokens.colorNeutralForeground2Pressed,\n [`& .${menuItemClassNames.subText}`]: {\n color: tokens.colorNeutralForeground3Pressed\n }\n },\n // High contrast styles\n '@media (forced-colors: active)': {\n ':hover': {\n backgroundColor: 'Canvas',\n borderColor: 'Highlight',\n color: 'Highlight'\n },\n ...createFocusOutlineStyle({\n style: {\n outlineColor: 'Highlight'\n }\n })\n },\n userSelect: 'none',\n ...createFocusOutlineStyle()\n});\nconst useContentBaseStyles = makeResetStyles({\n paddingLeft: '2px',\n paddingRight: '2px',\n backgroundColor: 'transparent',\n flexGrow: 1\n});\nconst useSecondaryContentBaseStyles = makeResetStyles({\n paddingLeft: '2px',\n paddingRight: '2px',\n ...typographyStyles.caption1,\n lineHeight: tokens.lineHeightBase300,\n color: tokens.colorNeutralForeground3,\n ':hover': {\n color: tokens.colorNeutralForeground3Hover\n },\n ':focus': {\n color: tokens.colorNeutralForeground3Hover\n }\n});\nconst useIconBaseStyles = makeResetStyles({\n width: '20px',\n height: '20px',\n fontSize: '20px',\n lineHeight: 0,\n alignItems: 'center',\n display: 'inline-flex',\n justifyContent: 'center',\n flexShrink: 0\n});\nconst useSubmenuIndicatorBaseStyles = makeResetStyles({\n width: '20px',\n height: '20px',\n fontSize: '20px',\n lineHeight: 0,\n alignItems: 'center',\n display: 'inline-flex',\n justifyContent: 'center'\n});\nconst useSubtextBaseStyles = makeResetStyles({\n ...typographyStyles.caption2,\n color: tokens.colorNeutralForeground3\n});\nconst useStyles = makeStyles({\n checkmark: {\n marginTop: '2px'\n },\n splitItemMain: {\n flexGrow: 1\n },\n splitItemTrigger: {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n paddingLeft: 0,\n '::before': {\n content: '\"\"',\n width: tokens.strokeWidthThin,\n height: '24px',\n backgroundColor: tokens.colorNeutralStroke1\n }\n },\n disabled: {\n color: tokens.colorNeutralForegroundDisabled,\n ':hover': {\n color: tokens.colorNeutralForegroundDisabled,\n backgroundColor: tokens.colorNeutralBackground1,\n cursor: 'not-allowed',\n [`& .${iconFilledClassName}`]: {\n display: 'none'\n },\n [`& .${iconRegularClassName}`]: {\n display: 'inline'\n },\n [`& .${menuItemClassNames.icon}`]: {\n color: tokens.colorNeutralForegroundDisabled\n },\n [`& .${menuItemClassNames.subText}`]: {\n color: tokens.colorNeutralForegroundDisabled\n }\n },\n ':hover:active': {\n color: tokens.colorNeutralForegroundDisabled,\n backgroundColor: tokens.colorNeutralBackground1,\n [`& .${menuItemClassNames.subText}`]: {\n color: tokens.colorNeutralForegroundDisabled\n }\n },\n ':focus': {\n color: tokens.colorNeutralForegroundDisabled\n },\n '@media (forced-colors: active)': {\n color: 'GrayText',\n ':hover': {\n color: 'GrayText',\n backgroundColor: 'Canvas',\n [`& .${menuItemClassNames.icon}`]: {\n color: 'GrayText',\n backgroundColor: 'Canvas'\n },\n [`& .${menuItemClassNames.subText}`]: {\n color: 'GrayText'\n }\n },\n ':hover:active': {\n color: 'GrayText',\n backgroundColor: 'Canvas',\n [`& .${menuItemClassNames.subText}`]: {\n color: 'GrayText'\n }\n },\n ':focus': {\n color: 'GrayText',\n backgroundColor: 'Canvas'\n }\n }\n }\n});\nconst useSubTextStyles = makeStyles({\n disabled: {\n color: tokens.colorNeutralForegroundDisabled,\n '@media (forced-colors: active)': {\n color: 'GrayText'\n }\n }\n});\nconst useMultilineStyles = makeStyles({\n content: {\n display: 'flex',\n flexDirection: 'column'\n },\n secondaryContent: {\n alignSelf: 'center'\n },\n submenuIndicator: {\n alignSelf: 'center'\n }\n});\n/** Applies style classnames to slots */ export const useMenuItemStyles_unstable = (state)=>{\n 'use no memo';\n const styles = useStyles();\n const rootBaseStyles = useRootBaseStyles();\n const contentBaseStyles = useContentBaseStyles();\n const secondaryContentBaseStyles = useSecondaryContentBaseStyles();\n const iconBaseStyles = useIconBaseStyles();\n const submenuIndicatorBaseStyles = useSubmenuIndicatorBaseStyles();\n const multilineStyles = useMultilineStyles();\n const subtextBaseStyles = useSubtextBaseStyles();\n const subTextStyles = useSubTextStyles();\n const multiline = !!state.subText;\n state.root.className = mergeClasses(menuItemClassNames.root, rootBaseStyles, state.disabled && styles.disabled, state.root.className);\n if (state.content) {\n state.content.className = mergeClasses(menuItemClassNames.content, contentBaseStyles, state.content.className, multiline && multilineStyles.content);\n }\n if (state.checkmark) {\n state.checkmark.className = mergeClasses(menuItemClassNames.checkmark, styles.checkmark, state.checkmark.className);\n }\n if (state.secondaryContent) {\n state.secondaryContent.className = mergeClasses(menuItemClassNames.secondaryContent, secondaryContentBaseStyles, state.disabled && styles.disabled, state.secondaryContent.className, multiline && multilineStyles.secondaryContent);\n }\n if (state.icon) {\n state.icon.className = mergeClasses(menuItemClassNames.icon, iconBaseStyles, state.icon.className);\n }\n if (state.submenuIndicator) {\n state.submenuIndicator.className = mergeClasses(menuItemClassNames.submenuIndicator, submenuIndicatorBaseStyles, state.submenuIndicator.className, multiline && multilineStyles.submenuIndicator);\n }\n if (state.subText) {\n state.subText.className = mergeClasses(menuItemClassNames.subText, state.disabled && subTextStyles.disabled, state.subText.className, subtextBaseStyles);\n }\n useCheckmarkStyles_unstable(state);\n return state;\n};\n"],"names":["menuItemClassNames","useMenuItemStyles_unstable","root","icon","checkmark","submenuIndicator","content","secondaryContent","subText","useRootBaseStyles","__resetStyles","r","s","useContentBaseStyles","useSecondaryContentBaseStyles","useIconBaseStyles","useSubmenuIndicatorBaseStyles","useSubtextBaseStyles","useStyles","__styles","B6of3ja","splitItemMain","Bh6795r","splitItemTrigger","Btl43ni","Beyfa6y","uwmqm3","Ftih45","Ccq8qp","Baz25je","cmx5o7","disabled","sj55zd","Bi91k9c","Jwef8y","eoavqd","Bk3fhr4","Bmfj8id","Bg7n49j","c7f7en","B2d53fq","iro3zm","Bumww26","t0hwav","Bbusuzp","ze5xyy","Bqrx1nm","Bctn1xl","h5esng","Bsk3rfj","pc6evw","g2kj27","evg1t5","Bh6z0a4","Bh953qp","d","h","f","m","useSubTextStyles","useMultilineStyles","mc9l5x","Beiy3e4","qb2dma","state","styles","rootBaseStyles","contentBaseStyles","secondaryContentBaseStyles","iconBaseStyles","submenuIndicatorBaseStyles","multilineStyles","subtextBaseStyles","subTextStyles","multiline","className","mergeClasses","useCheckmarkStyles_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
* State used in rendering MenuPopover
|
3
|
-
*/ "use strict";
|
1
|
+
"use strict";
|
4
2
|
Object.defineProperty(exports, "__esModule", {
|
5
3
|
value: true
|
6
4
|
});
|
5
|
+
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
6
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/MenuPopover/MenuPopover.types.ts"],"sourcesContent":["import type { PortalProps } from '@fluentui/react-portal';\nimport type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\n\nexport type MenuPopoverSlots = {\n root: Slot<'div'>;\n};\n\n/**\n * MenuPopover Props\n */\nexport type MenuPopoverProps = ComponentProps<MenuPopoverSlots>;\n\n/**\n * State used in rendering MenuPopover\n */\nexport type MenuPopoverState = ComponentState<MenuPopoverSlots> &\n Pick<PortalProps, 'mountNode'> & {\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 inline: boolean;\n };\n"],"names":[],"rangeMappings":"
|
1
|
+
{"version":3,"sources":["../src/components/MenuPopover/MenuPopover.types.ts"],"sourcesContent":["import type { PortalProps } from '@fluentui/react-portal';\nimport type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\nimport * as React from 'react';\n\nexport type MenuPopoverSlots = {\n root: Slot<'div'>;\n};\n\n/**\n * MenuPopover Props\n */\nexport type MenuPopoverProps = ComponentProps<MenuPopoverSlots>;\n\n/**\n * State used in rendering MenuPopover\n */\nexport type MenuPopoverState = ComponentState<MenuPopoverSlots> &\n Pick<PortalProps, 'mountNode'> & {\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 inline: boolean;\n\n safeZone?: React.ReactElement | null;\n };\n"],"names":[],"rangeMappings":";;;;;","mappings":";;;;;iEAEuB"}
|
@@ -14,10 +14,18 @@ const _reactportal = require("@fluentui/react-portal");
|
|
14
14
|
const renderMenuPopover_unstable = (state)=>{
|
15
15
|
(0, _reactutilities.assertSlots)(state);
|
16
16
|
if (state.inline) {
|
17
|
-
return /*#__PURE__*/ (0, _jsxruntime.
|
17
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
18
|
+
children: [
|
19
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(state.root, {}),
|
20
|
+
state.safeZone
|
21
|
+
]
|
22
|
+
});
|
18
23
|
}
|
19
|
-
return /*#__PURE__*/ (0, _jsxruntime.
|
24
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactportal.Portal, {
|
20
25
|
mountNode: state.mountNode,
|
21
|
-
children:
|
26
|
+
children: [
|
27
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(state.root, {}),
|
28
|
+
state.safeZone
|
29
|
+
]
|
22
30
|
});
|
23
31
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/MenuPopover/renderMenuPopover.tsx"],"sourcesContent":["/** @jsxRuntime automatic */\n/** @jsxImportSource @fluentui/react-jsx-runtime */\nimport { assertSlots } from '@fluentui/react-utilities';\nimport { MenuPopoverSlots, MenuPopoverState } from './MenuPopover.types';\nimport { Portal } from '@fluentui/react-portal';\n\n/**\n * Render the final JSX of MenuPopover\n */\nexport const renderMenuPopover_unstable = (state: MenuPopoverState) => {\n assertSlots<MenuPopoverSlots>(state);\n\n if (state.inline) {\n return <state.root
|
1
|
+
{"version":3,"sources":["../src/components/MenuPopover/renderMenuPopover.tsx"],"sourcesContent":["/** @jsxRuntime automatic */\n/** @jsxImportSource @fluentui/react-jsx-runtime */\nimport { assertSlots } from '@fluentui/react-utilities';\nimport { MenuPopoverSlots, MenuPopoverState } from './MenuPopover.types';\nimport { Portal } from '@fluentui/react-portal';\n\n/**\n * Render the final JSX of MenuPopover\n */\nexport const renderMenuPopover_unstable = (state: MenuPopoverState) => {\n assertSlots<MenuPopoverSlots>(state);\n\n if (state.inline) {\n return (\n <>\n <state.root />\n {state.safeZone}\n </>\n );\n }\n\n return (\n <Portal mountNode={state.mountNode}>\n <state.root />\n {state.safeZone}\n </Portal>\n );\n};\n"],"names":["renderMenuPopover_unstable","state","assertSlots","inline","_jsxs","_Fragment","_jsx","root","safeZone","Portal","mountNode"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BASaA;;;eAAAA;;;4BARb;gCAC4B;6BAEL;AAKhB,MAAMA,6BAA6B,CAACC;IACzCC,IAAAA,2BAAAA,EAA8BD;IAE9B,IAAIA,MAAME,MAAM,EAAE;QAChB,OAAA,WAAA,GACEC,IAAAA,gBAAA,EAAAC,oBAAA,EAAA;;8BACEC,IAAAA,eAAA,EAACL,MAAMM,IAAI,EAAA,CAAA;gBACVN,MAAMO,QAAQ;;;IAGrB;IAEA,OAAA,WAAA,GACEJ,IAAAA,gBAAA,EAACK,mBAAAA,EAAAA;QAAOC,WAAWT,MAAMS,SAAS;;0BAChCJ,IAAAA,eAAA,EAACL,MAAMM,IAAI,EAAA,CAAA;YACVN,MAAMO,QAAQ;;;AAGrB"}
|
@@ -9,22 +9,22 @@ Object.defineProperty(exports, "useMenuPopover_unstable", {
|
|
9
9
|
}
|
10
10
|
});
|
11
11
|
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
|
12
|
-
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
13
12
|
const _keyboardkeys = require("@fluentui/keyboard-keys");
|
13
|
+
const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
|
14
|
+
const _reacttabster = require("@fluentui/react-tabster");
|
14
15
|
const _reactutilities = require("@fluentui/react-utilities");
|
16
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
|
15
17
|
const _menuContext = require("../../contexts/menuContext");
|
16
18
|
const _index = require("../../utils/index");
|
17
|
-
const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
|
18
|
-
const _useIsSubmenu = require("../../utils/useIsSubmenu");
|
19
|
-
const _reacttabster = require("@fluentui/react-tabster");
|
20
19
|
const useMenuPopover_unstable = (props, ref)=>{
|
21
20
|
'use no memo';
|
21
|
+
const safeZone = (0, _menuContext.useMenuContext_unstable)((context)=>context.safeZone);
|
22
22
|
const popoverRef = (0, _menuContext.useMenuContext_unstable)((context)=>context.menuPopoverRef);
|
23
23
|
const setOpen = (0, _menuContext.useMenuContext_unstable)((context)=>context.setOpen);
|
24
24
|
const open = (0, _menuContext.useMenuContext_unstable)((context)=>context.open);
|
25
25
|
const openOnHover = (0, _menuContext.useMenuContext_unstable)((context)=>context.openOnHover);
|
26
26
|
const triggerRef = (0, _menuContext.useMenuContext_unstable)((context)=>context.triggerRef);
|
27
|
-
const isSubmenu = (0,
|
27
|
+
const isSubmenu = (0, _index.useIsSubmenu)();
|
28
28
|
const canDispatchCustomEventRef = _react.useRef(true);
|
29
29
|
const restoreFocusSourceAttributes = (0, _reacttabster.useRestoreFocusSource)();
|
30
30
|
const [setThrottleTimeout, clearThrottleTimeout] = (0, _reactutilities.useTimeout)();
|
@@ -41,7 +41,9 @@ const useMenuPopover_unstable = (props, ref)=>{
|
|
41
41
|
if (canDispatchCustomEventRef.current) {
|
42
42
|
canDispatchCustomEventRef.current = false;
|
43
43
|
(0, _index.dispatchMenuEnterEvent)(popoverRef.current, e);
|
44
|
-
setThrottleTimeout(()=>
|
44
|
+
setThrottleTimeout(()=>{
|
45
|
+
canDispatchCustomEventRef.current = true;
|
46
|
+
}, 250);
|
45
47
|
}
|
46
48
|
});
|
47
49
|
}
|
@@ -50,7 +52,7 @@ const useMenuPopover_unstable = (props, ref)=>{
|
|
50
52
|
setThrottleTimeout
|
51
53
|
]);
|
52
54
|
_react.useEffect(()=>{
|
53
|
-
()=>clearThrottleTimeout();
|
55
|
+
return ()=>clearThrottleTimeout();
|
54
56
|
}, [
|
55
57
|
clearThrottleTimeout
|
56
58
|
]);
|
@@ -113,6 +115,7 @@ const useMenuPopover_unstable = (props, ref)=>{
|
|
113
115
|
return {
|
114
116
|
inline,
|
115
117
|
mountNode,
|
118
|
+
safeZone,
|
116
119
|
components: {
|
117
120
|
root: 'div'
|
118
121
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/MenuPopover/useMenuPopover.ts"],"sourcesContent":["import
|
1
|
+
{"version":3,"sources":["../src/components/MenuPopover/useMenuPopover.ts"],"sourcesContent":["import { ArrowLeft, Tab, ArrowRight, Escape } from '@fluentui/keyboard-keys';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useRestoreFocusSource } from '@fluentui/react-tabster';\nimport { getIntrinsicElementProps, useEventCallback, useMergedRefs, slot, useTimeout } from '@fluentui/react-utilities';\nimport * as React from 'react';\n\nimport { useMenuContext_unstable } from '../../contexts/menuContext';\nimport { dispatchMenuEnterEvent, useIsSubmenu } from '../../utils/index';\nimport { MenuPopoverProps, MenuPopoverState } from './MenuPopover.types';\n\n/**\n * Create the state required to render MenuPopover.\n *\n * The returned state can be modified with hooks such as useMenuPopoverStyles_unstable,\n * before being passed to renderMenuPopover_unstable.\n *\n * @param props - props from this instance of MenuPopover\n * @param ref - reference to root HTMLElement of MenuPopover\n */\nexport const useMenuPopover_unstable = (props: MenuPopoverProps, ref: React.Ref<HTMLElement>): MenuPopoverState => {\n 'use no memo';\n\n const safeZone = useMenuContext_unstable(context => context.safeZone);\n const popoverRef = useMenuContext_unstable(context => context.menuPopoverRef);\n const setOpen = useMenuContext_unstable(context => context.setOpen);\n const open = useMenuContext_unstable(context => context.open);\n const openOnHover = useMenuContext_unstable(context => context.openOnHover);\n const triggerRef = useMenuContext_unstable(context => context.triggerRef);\n\n const isSubmenu = useIsSubmenu();\n const canDispatchCustomEventRef = React.useRef(true);\n const restoreFocusSourceAttributes = useRestoreFocusSource();\n const [setThrottleTimeout, clearThrottleTimeout] = useTimeout();\n\n const { dir } = useFluent();\n const CloseArrowKey = dir === 'ltr' ? ArrowLeft : ArrowRight;\n\n // use DOM listener since react events propagate up the react tree\n // no need to do `contains` logic as menus are all positioned in different portals\n const mouseOverListenerCallbackRef = React.useCallback(\n (node: HTMLElement) => {\n if (node) {\n // Dispatches the custom menu mouse enter event with throttling\n // Needs to trigger on mouseover to support keyboard + mouse together\n // i.e. keyboard opens submenus while cursor is still on the parent\n node.addEventListener('mouseover', e => {\n if (canDispatchCustomEventRef.current) {\n canDispatchCustomEventRef.current = false;\n dispatchMenuEnterEvent(popoverRef.current as HTMLElement, e);\n setThrottleTimeout(() => {\n canDispatchCustomEventRef.current = true;\n }, 250);\n }\n });\n }\n },\n [popoverRef, setThrottleTimeout],\n );\n\n React.useEffect(() => {\n return () => clearThrottleTimeout();\n }, [clearThrottleTimeout]);\n\n const inline = useMenuContext_unstable(context => context.inline) ?? false;\n const mountNode = useMenuContext_unstable(context => context.mountNode);\n\n const rootProps = slot.always(\n getIntrinsicElementProps('div', {\n role: 'presentation',\n ...restoreFocusSourceAttributes,\n ...props,\n // FIXME:\n // `ref` is wrongly assigned to be `HTMLElement` instead of `HTMLDivElement`\n // but since it would be a breaking change to fix it, we are casting ref to it's proper type\n ref: useMergedRefs(ref, popoverRef, mouseOverListenerCallbackRef) as React.Ref<HTMLDivElement>,\n }),\n { elementType: 'div' },\n );\n const { onMouseEnter: onMouseEnterOriginal, onKeyDown: onKeyDownOriginal } = rootProps;\n rootProps.onMouseEnter = useEventCallback((event: React.MouseEvent<HTMLDivElement>) => {\n if (openOnHover || isSubmenu) {\n setOpen(event, { open: true, keyboard: false, type: 'menuPopoverMouseEnter', event });\n }\n onMouseEnterOriginal?.(event);\n });\n rootProps.onKeyDown = useEventCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n const key = event.key;\n if (key === Escape || (isSubmenu && key === CloseArrowKey)) {\n if (open && popoverRef.current?.contains(event.target as HTMLElement) && !event.isDefaultPrevented()) {\n setOpen(event, { open: false, keyboard: true, type: 'menuPopoverKeyDown', event });\n // stop propagation to avoid conflicting with other elements that listen for `Escape`\n // e,g: Dialog, Popover, Menu and Tooltip\n event.preventDefault();\n }\n }\n if (key === Tab) {\n setOpen(event, { open: false, keyboard: true, type: 'menuPopoverKeyDown', event });\n if (!isSubmenu) {\n triggerRef.current?.focus();\n }\n }\n onKeyDownOriginal?.(event);\n });\n\n return {\n inline,\n mountNode,\n safeZone,\n components: { root: 'div' },\n root: rootProps,\n };\n};\n"],"names":["useMenuPopover_unstable","props","ref","safeZone","useMenuContext_unstable","context","popoverRef","menuPopoverRef","setOpen","open","openOnHover","triggerRef","isSubmenu","useIsSubmenu","canDispatchCustomEventRef","React","useRef","restoreFocusSourceAttributes","useRestoreFocusSource","setThrottleTimeout","clearThrottleTimeout","useTimeout","dir","useFluent","CloseArrowKey","ArrowLeft","ArrowRight","mouseOverListenerCallbackRef","useCallback","node","addEventListener","e","current","dispatchMenuEnterEvent","useEffect","inline","mountNode","rootProps","slot","always","getIntrinsicElementProps","role","useMergedRefs","elementType","onMouseEnter","onMouseEnterOriginal","onKeyDown","onKeyDownOriginal","useEventCallback","event","keyboard","type","key","Escape","contains","target","isDefaultPrevented","preventDefault","Tab","focus","components","root"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/MenuTrigger/MenuTrigger.types.ts"],"sourcesContent":["import { ARIAButtonResultProps, ARIAButtonType } from '@fluentui/react-aria';\nimport type { TriggerProps } from '@fluentui/react-utilities';\nimport * as React from 'react';\n\nexport type MenuTriggerProps = TriggerProps<MenuTriggerChildProps> & {\n /**\n * Disables internal trigger mechanism that ensures a child provided will be a compliant ARIA button.\n * @default false\n */\n disableButtonEnhancement?: boolean;\n};\n\n/**\n * Props that are passed to the child of the MenuTrigger when cloned to ensure correct behaviour for the Menu\n */\nexport type MenuTriggerChildProps<Type extends ARIAButtonType = ARIAButtonType, Props = {}> = ARIAButtonResultProps<\n Type,\n Props & {\n 'aria-haspopup'?: 'menu';\n 'aria-expanded'?: boolean;\n id: string;\n ref: React.Ref<never>;\n /* eslint-disable @nx/workspace-consistent-callback-type -- can't change type of existing callback */\n onMouseEnter: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n onMouseLeave: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n onMouseMove: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n onContextMenu: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n /* eslint-enable @nx/workspace-consistent-callback-type */\n }\n>;\n\nexport type MenuTriggerState = {\n children: React.ReactElement | null;\n isSubmenu: boolean;\n};\n"],"names":[],"rangeMappings":";;;;;","mappings":";;;;;iEAEuB"}
|
1
|
+
{"version":3,"sources":["../src/components/MenuTrigger/MenuTrigger.types.ts"],"sourcesContent":["import { ARIAButtonResultProps, ARIAButtonType } from '@fluentui/react-aria';\nimport type { TriggerProps } from '@fluentui/react-utilities';\nimport * as React from 'react';\n\nexport type MenuTriggerProps = TriggerProps<MenuTriggerChildProps> & {\n /**\n * Disables internal trigger mechanism that ensures a child provided will be a compliant ARIA button.\n * @default false\n */\n disableButtonEnhancement?: boolean;\n};\n\n/**\n * Props that are passed to the child of the MenuTrigger when cloned to ensure correct behaviour for the Menu\n */\nexport type MenuTriggerChildProps<Type extends ARIAButtonType = ARIAButtonType, Props = {}> = ARIAButtonResultProps<\n Type,\n Props & {\n 'aria-haspopup'?: 'menu';\n 'aria-expanded'?: boolean;\n id: string;\n ref: React.Ref<never>;\n /* eslint-disable @nx/workspace-consistent-callback-type -- can't change type of existing callback */\n onMouseEnter: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n onMouseLeave: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n onMouseMove: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n onMouseOver?: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n onContextMenu: React.MouseEventHandler<HTMLButtonElement & HTMLAnchorElement & HTMLDivElement>;\n /* eslint-enable @nx/workspace-consistent-callback-type */\n }\n>;\n\nexport type MenuTriggerState = {\n children: React.ReactElement | null;\n isSubmenu: boolean;\n};\n"],"names":[],"rangeMappings":";;;;;","mappings":";;;;;iEAEuB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/MenuTrigger/renderMenuTrigger.tsx"],"sourcesContent":["import * as React from 'react';\nimport { MenuTriggerContextProvider } from '../../contexts/menuTriggerContext';\nimport type { MenuTriggerState } from './MenuTrigger.types';\n\n/**\n * Render the final JSX of MenuTrigger\n *\n * Only renders children\n */\nexport const renderMenuTrigger_unstable = (state: MenuTriggerState) => {\n return <MenuTriggerContextProvider value={state.isSubmenu}>{state.children}</MenuTriggerContextProvider>;\n};\n"],"names":["renderMenuTrigger_unstable","state","React","createElement","MenuTriggerContextProvider","value","isSubmenu","children"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":";;;;+BASaA;;;eAAAA;;;;iEATU;oCACoB;AAQpC,MAAMA,6BAA6B,
|
1
|
+
{"version":3,"sources":["../src/components/MenuTrigger/renderMenuTrigger.tsx"],"sourcesContent":["import * as React from 'react';\nimport { MenuTriggerContextProvider } from '../../contexts/menuTriggerContext';\nimport type { MenuTriggerState } from './MenuTrigger.types';\n\n/**\n * Render the final JSX of MenuTrigger\n *\n * Only renders children\n */\nexport const renderMenuTrigger_unstable = (\n state: MenuTriggerState,\n): // eslint-disable-next-line @typescript-eslint/no-deprecated\nJSX.Element => {\n return <MenuTriggerContextProvider value={state.isSubmenu}>{state.children}</MenuTriggerContextProvider>;\n};\n"],"names":["renderMenuTrigger_unstable","state","React","createElement","MenuTriggerContextProvider","value","isSubmenu","children"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":";;;;+BASaA;;;eAAAA;;;;iEATU;oCACoB;AAQpC,MAAMA,6BAA6B,CACxCC;IAGA,OAAA,WAAA,GAAOC,OAAAC,aAAA,CAACC,8CAAAA,EAAAA;QAA2BC,OAAOJ,MAAMK,SAAS;OAAGL,MAAMM,QAAQ;AAC5E"}
|