((props, ref
= performance.now())
+ ((headerCollapsed && !headerPinned) || scrolledHeaderExpanded) && !toggledCollapsedHeaderWasVisible
? `${headerContentHeight}px`
: 0,
}}
diff --git a/packages/main/src/internal/useObserveHeights.ts b/packages/main/src/internal/useObserveHeights.ts
index 72486485ece..0fc4dfeaa41 100644
--- a/packages/main/src/internal/useObserveHeights.ts
+++ b/packages/main/src/internal/useObserveHeights.ts
@@ -13,11 +13,13 @@ export const useObserveHeights = (
fixedHeader = false,
scrollTimeout = { current: 0 },
preserveHeaderStateOnScroll,
+ manuallyCollapsed = { current: false },
}: {
noHeader: boolean;
fixedHeader?: boolean;
scrollTimeout?: MutableRefObject;
preserveHeaderStateOnScroll?: boolean;
+ manuallyCollapsed?: MutableRefObject;
},
) => {
const [topHeaderHeight, setTopHeaderHeight] = useState(0);
@@ -34,6 +36,10 @@ export const useObserveHeights = (
if (scrollTimeout.current >= performance.now()) {
return;
}
+ // Manually collapsed headers re-expand at scrollTop 0 via the ObjectPage scroll handler, skip the scroll-driven toggle here.
+ if (manuallyCollapsed.current) {
+ return;
+ }
if (scrollDown && e.target.scrollTop >= headerContentHeight && !headerCollapsed) {
setIsIntersecting(false);