diff --git a/.changeset/humble-jars-prove.md b/.changeset/humble-jars-prove.md new file mode 100644 index 0000000000..28f7484efd --- /dev/null +++ b/.changeset/humble-jars-prove.md @@ -0,0 +1,5 @@ +--- +"@radix-ui/react-navigation-menu": major +--- + +Fix missing data-state attribute on NavigationMenuContent when used with forceMount and NavigationMenuViewport diff --git a/apps/storybook/stories/navigation-menu.stories.tsx b/apps/storybook/stories/navigation-menu.stories.tsx index 8493dfb42f..36eb440d7f 100644 --- a/apps/storybook/stories/navigation-menu.stories.tsx +++ b/apps/storybook/stories/navigation-menu.stories.tsx @@ -4,6 +4,42 @@ import styles from './navigation-menu.stories.module.css'; export default { title: 'Components/NavigationMenu' }; +export const ForceMountWithViewport = () => { + return ( + + + + + Products + {/* forceMount keeps content mounted; Viewport routes it via ViewportContentMounter */} + + + + + + + Company + + + + + + + {/* Viewport is the key — this triggers the ViewportContentMounter path */} + + + + ); +}; + export const Basic = () => { return ( diff --git a/packages/react/navigation-menu/src/navigation-menu.tsx b/packages/react/navigation-menu/src/navigation-menu.tsx index e363f5e9b8..f839bdd85e 100644 --- a/packages/react/navigation-menu/src/navigation-menu.tsx +++ b/packages/react/navigation-menu/src/navigation-menu.tsx @@ -764,6 +764,7 @@ const NavigationMenuContent = React.forwardRef< const itemContext = useNavigationMenuItemContext(CONTENT_NAME, props.__scopeNavigationMenu); const composedRefs = useComposedRefs(itemContext.contentRef, forwardedRef); const open = itemContext.value === context.value; + const openState = getOpenState(open); const commonProps = { value: itemContext.value, @@ -794,7 +795,12 @@ const NavigationMenuContent = React.forwardRef< /> ) : ( - + ); });