From 0da8645704d34645249ec9552279f02da97fbe40 Mon Sep 17 00:00:00 2001 From: Trevor Burnham Date: Sat, 5 Apr 2025 18:06:23 -0400 Subject: [PATCH] fix: Implement TopNavigation breakpoints in CSS This commit switches from JavaScript-based breakpoints to CSS container queries for TopNavigation, making its appearance consistent when rendered with SSR. To support container queries, we need `container-type: inline-size;` on the TopNavigation root element. This causes overflowing content to get clipped (at least in Safari), so I've enabled `expandToViewport` to render utility dropdowns in a portal. Note that OverflowMenu doesn't need this treatment because it expands the height of TopNavigation rather than overflowing. Fixes #3337 --- .../components/menu-dropdown/index.tsx | 8 +- .../components/menu-dropdown/interfaces.ts | 5 +- .../styles/foundation/breakpoints.scss | 38 +++++++- src/test-utils/dom/top-navigation/index.ts | 4 +- src/top-navigation/internal.tsx | 96 ++++++------------- src/top-navigation/parts/utility.tsx | 9 +- src/top-navigation/styles.scss | 79 ++++++++------- src/top-navigation/use-top-navigation.ts | 8 +- 8 files changed, 130 insertions(+), 117 deletions(-) diff --git a/src/internal/components/menu-dropdown/index.tsx b/src/internal/components/menu-dropdown/index.tsx index cae25ab4d5..fb2a21bacf 100644 --- a/src/internal/components/menu-dropdown/index.tsx +++ b/src/internal/components/menu-dropdown/index.tsx @@ -31,6 +31,8 @@ export const ButtonTrigger = React.forwardRef( expanded, children, onClick, + // Used by TopNavigation to apply styles. + className, }: ButtonTriggerProps, ref: React.Ref ) => { @@ -40,7 +42,7 @@ export const ButtonTrigger = React.forwardRef(