Skip to content
Draft
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
Copy link
Copy Markdown

@github-actions github-actions Bot May 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕵🏾‍♀️ visual changes to review in the Visual Change Report

vr-tests-react-components/Charts-DonutChart 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Charts-DonutChart.Dynamic - Dark Mode.default.chromium.png 7530 Changed
vr-tests-react-components/Charts-DonutChart.Dynamic - RTL.default.chromium.png 5570 Changed
vr-tests-react-components/Charts-DonutChart.Dynamic.default.chromium.png 5581 Changed
vr-tests-react-components/Positioning 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 40 Changed
vr-tests-react-components/Positioning.Positioning end.chromium.png 959 Changed
vr-tests-react-components/ProgressBar converged 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - Dark Mode.default.chromium.png 115 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png 223 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness.default.chromium.png 112 Changed
vr-tests-react-components/TagPicker 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - High Contrast.disabled input hover.chromium.png 1319 Changed
vr-tests-react-components/TagPicker.disabled.chromium.png 677 Changed

There were 2 duplicate changes discarded. Check the build logs for more information.

"type": "minor",
"comment": "feat: add Menu component (Menu, MenuTrigger, MenuList, MenuItem, MenuPopover, MenuDivider) — wraps v9 useMenu*Base_unstable hooks; uses native popover='auto' for top-layer rendering instead of Portal",
"packageName": "@fluentui/react-headless-components-preview",
"email": "viktorgenaev@microsoft.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "minor",
"comment": "feat: expose react-menu base hooks",
"packageName": "@fluentui/react-menu",
"email": "vgenaev@gmail.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import * as Drawer from '@fluentui/react-headless-components-preview/drawer';
import * as Field from '@fluentui/react-headless-components-preview/field';
import * as Input from '@fluentui/react-headless-components-preview/input';
import * as Link from '@fluentui/react-headless-components-preview/link';
import * as Menu from '@fluentui/react-headless-components-preview/menu';
import * as MessageBar from '@fluentui/react-headless-components-preview/message-bar';
import * as ProgressBar from '@fluentui/react-headless-components-preview/progress-bar';
import * as Popover from '@fluentui/react-headless-components-preview/popover';
Expand Down Expand Up @@ -45,6 +46,7 @@ console.log({
Field,
Input,
Link,
Menu,
MessageBar,
ProgressBar,
Popover,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
## API Report File for "@fluentui/react-headless-components-preview"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts

import type { ARIAButtonElement } from '@fluentui/react-aria';
import type { ForwardRefComponent } from '@fluentui/react-utilities';
import { JSXElement } from '@fluentui/react-utilities';
import type { MenuBaseProps } from '@fluentui/react-menu';
import type { MenuBaseState } from '@fluentui/react-menu';
import type { MenuContextValue } from '@fluentui/react-menu';
import { MenuDividerProps } from '@fluentui/react-menu';
import { MenuDividerSlots } from '@fluentui/react-menu';
import { MenuDividerState } from '@fluentui/react-menu';
import { MenuGroupContextValues } from '@fluentui/react-menu';
import { MenuGroupHeaderProps } from '@fluentui/react-menu';
import { MenuGroupHeaderSlots } from '@fluentui/react-menu';
import { MenuGroupHeaderState } from '@fluentui/react-menu';
import { MenuGroupProps } from '@fluentui/react-menu';
import { MenuGroupSlots } from '@fluentui/react-menu';
import { MenuGroupState } from '@fluentui/react-menu';
import { MenuItemCheckboxProps } from '@fluentui/react-menu';
import { MenuItemCheckboxState } from '@fluentui/react-menu';
import { MenuItemLinkProps } from '@fluentui/react-menu';
import { MenuItemLinkSlots } from '@fluentui/react-menu';
import { MenuItemLinkState } from '@fluentui/react-menu';
import { MenuItemProps } from '@fluentui/react-menu';
import { MenuItemRadioBaseProps as MenuItemRadioProps } from '@fluentui/react-menu';
import { MenuItemRadioBaseState as MenuItemRadioState } from '@fluentui/react-menu';
import { MenuItemRadioState as MenuItemRadioState_2 } from '@fluentui/react-menu';
import { MenuItemSlots } from '@fluentui/react-menu';
import { MenuItemState } from '@fluentui/react-menu';
import { MenuItemSwitchProps } from '@fluentui/react-menu';
import { MenuItemSwitchSlots } from '@fluentui/react-menu';
import { MenuItemSwitchState } from '@fluentui/react-menu';
import { MenuListContextValues } from '@fluentui/react-menu';
import type { MenuListProps as MenuListProps_2 } from '@fluentui/react-menu';
import type { MenuListSlots } from '@fluentui/react-menu';
import { MenuListState as MenuListState_2 } from '@fluentui/react-menu';
import type { MenuOpenChangeData } from '@fluentui/react-menu';
import type { MenuOpenEvent } from '@fluentui/react-menu';
import { MenuPopoverProps } from '@fluentui/react-menu';
import { MenuPopoverSlots } from '@fluentui/react-menu';
import { MenuPopoverState } from '@fluentui/react-menu';
import { MenuSplitGroupProps } from '@fluentui/react-menu';
import { MenuSplitGroupSlots } from '@fluentui/react-menu';
import { MenuSplitGroupState } from '@fluentui/react-menu';
import { MenuTriggerChildProps } from '@fluentui/react-menu';
import { MenuTriggerProps } from '@fluentui/react-menu';
import { MenuTriggerState } from '@fluentui/react-menu';
import type { PositioningShorthand } from '@fluentui/react-positioning';
import * as React_2 from 'react';
import { useMenuContext_unstable as useMenuContext } from '@fluentui/react-menu';

// @public
export const Menu: React_2.FC<MenuProps>;

export { MenuContextValue }

// @public (undocumented)
export type MenuContextValues = {
menu: MenuContextValue;
};

// @public
export const MenuDivider: ForwardRefComponent<MenuDividerProps>;

export { MenuDividerProps }

export { MenuDividerSlots }

export { MenuDividerState }

// @public
export const MenuGroup: ForwardRefComponent<MenuGroupProps>;

export { MenuGroupContextValues }

// @public
export const MenuGroupHeader: ForwardRefComponent<MenuGroupHeaderProps>;

export { MenuGroupHeaderProps }

export { MenuGroupHeaderSlots }

export { MenuGroupHeaderState }

export { MenuGroupProps }

export { MenuGroupSlots }

export { MenuGroupState }

// @public
export const MenuItem: ForwardRefComponent<MenuItemProps>;

// @public
export const MenuItemCheckbox: ForwardRefComponent<MenuItemCheckboxProps>;

export { MenuItemCheckboxProps }

export { MenuItemCheckboxState }

// @public
export const MenuItemLink: ForwardRefComponent<MenuItemLinkProps>;

export { MenuItemLinkProps }

export { MenuItemLinkSlots }

export { MenuItemLinkState }

export { MenuItemProps }

// @public
export const MenuItemRadio: ForwardRefComponent<MenuItemRadioProps>;

export { MenuItemRadioProps }

export { MenuItemRadioState }

export { MenuItemSlots }

export { MenuItemState }

// @public
export const MenuItemSwitch: ForwardRefComponent<MenuItemSwitchProps>;

export { MenuItemSwitchProps }

export { MenuItemSwitchSlots }

export { MenuItemSwitchState }

// @public
export const MenuList: ForwardRefComponent<MenuListProps>;

// @public (undocumented)
export type MenuListProps = MenuListProps_2;

export { MenuListSlots }

// @public (undocumented)
export type MenuListState = MenuListState_2 & {
root: {
focusgroup?: string;
};
};

export { MenuOpenChangeData }

export { MenuOpenEvent }

// @public
export const MenuPopover: ForwardRefComponent<MenuPopoverProps>;

export { MenuPopoverProps }

export { MenuPopoverSlots }

export { MenuPopoverState }

// @public
export type MenuProps = Omit<MenuBaseProps, 'positioning'> & {
positioning?: PositioningShorthand;
};

// @public
export const MenuSplitGroup: ForwardRefComponent<MenuSplitGroupProps>;

export { MenuSplitGroupProps }

export { MenuSplitGroupSlots }

export { MenuSplitGroupState }

// @public (undocumented)
export type MenuState = MenuBaseState;

// @public
export const MenuTrigger: React_2.FC<MenuTriggerProps>;

export { MenuTriggerChildProps }

export { MenuTriggerProps }

export { MenuTriggerState }

// @public (undocumented)
export const renderMenu: (state: MenuState, contextValues: MenuContextValues) => JSXElement;

// @public (undocumented)
export const renderMenuDivider: (state: MenuDividerState) => JSXElement;

// @public (undocumented)
export const renderMenuGroup: (state: MenuGroupState, contextValues: MenuGroupContextValues) => JSXElement;

// @public (undocumented)
export const renderMenuGroupHeader: (state: MenuGroupHeaderState) => JSXElement;

// @public (undocumented)
export const renderMenuItem: (state: MenuItemState) => JSXElement;

// @public (undocumented)
export const renderMenuItemCheckbox: (state: MenuItemCheckboxState) => JSXElement;

// @public (undocumented)
export const renderMenuItemLink: (state: MenuItemLinkState) => JSXElement;

// @public (undocumented)
export const renderMenuItemRadio: (state: MenuItemRadioState_2) => JSXElement;

// @public (undocumented)
export const renderMenuItemSwitch: (state: MenuItemSwitchState) => JSXElement;

// @public (undocumented)
export const renderMenuList: (state: MenuListState_2, contextValues: MenuListContextValues) => JSXElement;

// @public
export const renderMenuPopover: (state: MenuPopoverState) => JSXElement;

// @public (undocumented)
export const renderMenuSplitGroup: (state: MenuSplitGroupState, contexts?: {
menuSplitGroup: {
setMultiline: (multiline: boolean) => void;
};
}) => JSXElement;

// @public
export const renderMenuTrigger: (state: MenuTriggerState) => JSXElement;

// @public (undocumented)
export const useMenu: (props: MenuProps) => MenuState;

export { useMenuContext }

// @public (undocumented)
export const useMenuContextValues: (state: MenuState) => MenuContextValues;

// @public
export const useMenuDivider: (props: MenuDividerProps, ref: React_2.Ref<HTMLElement>) => MenuDividerState;

// @public
export const useMenuGroup: (props: MenuGroupProps, ref: React_2.Ref<HTMLElement>) => MenuGroupState;

// @public (undocumented)
export const useMenuGroupContextValues: (state: MenuGroupState) => MenuGroupContextValues;

// @public
export const useMenuGroupHeader: (props: MenuGroupHeaderProps, ref: React_2.Ref<HTMLElement>) => MenuGroupHeaderState;

// @public
export const useMenuItem: (props: MenuItemProps, ref: React_2.Ref<ARIAButtonElement<"div">>) => MenuItemState;

// @public
export const useMenuItemCheckbox: (props: MenuItemCheckboxProps, ref: React_2.Ref<ARIAButtonElement<"div">>) => MenuItemCheckboxState;

// @public
export const useMenuItemLink: (props: MenuItemLinkProps, ref: React_2.Ref<HTMLAnchorElement>) => MenuItemLinkState;

// @public
export const useMenuItemRadio: (props: MenuItemRadioProps, ref: React_2.Ref<ARIAButtonElement<"div">>) => MenuItemRadioState;

// @public
export const useMenuItemSwitch: (props: MenuItemSwitchProps, ref: React_2.Ref<HTMLDivElement>) => MenuItemSwitchState;

// @public
export const useMenuList: (props: MenuListProps, ref: React_2.Ref<HTMLElement>) => MenuListState;

// @public
export const useMenuPopover: (props: MenuPopoverProps, ref: React_2.Ref<HTMLElement>) => MenuPopoverState;

// @public
export const useMenuSplitGroup: (props: MenuSplitGroupProps, ref: React_2.Ref<HTMLElement>) => MenuSplitGroupState;

// @public
export const useMenuTrigger: (props: MenuTriggerProps) => MenuTriggerState;

// (No @packageDocumentation comment for this package)

```
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"@fluentui/react-input": "^9.8.2",
"@fluentui/react-label": "^9.4.1",
"@fluentui/react-link": "^9.8.1",
"@fluentui/react-menu": "^9.24.1",
"@fluentui/react-message-bar": "^9.7.0",
"@fluentui/react-persona": "^9.7.3",
"@fluentui/react-popover": "^9.14.2",
Expand Down Expand Up @@ -147,6 +148,12 @@
"import": "./lib/link.js",
"require": "./lib-commonjs/link.js"
},
"./menu": {
"types": "./dist/menu.d.ts",
"node": "./lib-commonjs/menu.js",
"import": "./lib/menu.js",
"require": "./lib-commonjs/menu.js"
},
"./message-bar": {
"types": "./dist/message-bar.d.ts",
"node": "./lib-commonjs/message-bar.js",
Expand Down
Loading
Loading