From b6f81aca4755652315593a42aa5af215edcfa995 Mon Sep 17 00:00:00 2001 From: jer3m01 Date: Tue, 27 Aug 2024 00:31:56 +0200 Subject: [PATCH] fix(navigation-menu): incorrect animation after closed --- packages/core/src/menu/menu-content-base.tsx | 2 ++ packages/core/src/menu/menu-context.tsx | 2 +- packages/core/src/navigation-menu/navigation-menu-root.tsx | 6 ++++++ .../core/src/navigation-menu/navigation-menu-trigger.tsx | 4 +++- .../core/src/navigation-menu/navigation-menu-viewport.tsx | 2 ++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/core/src/menu/menu-content-base.tsx b/packages/core/src/menu/menu-content-base.tsx index b788cca6..a6005673 100644 --- a/packages/core/src/menu/menu-content-base.tsx +++ b/packages/core/src/menu/menu-content-base.tsx @@ -290,6 +290,8 @@ export function MenuContentBase( createEffect(() => onCleanup(context.registerContentId(local.id!))); + onCleanup(() => context.setContentRef(undefined)); + const commonAttributes: Omit = { ref: mergeRefs((el) => { diff --git a/packages/core/src/menu/menu-context.tsx b/packages/core/src/menu/menu-context.tsx index b3cfd3ec..17136c37 100644 --- a/packages/core/src/menu/menu-context.tsx +++ b/packages/core/src/menu/menu-context.tsx @@ -25,7 +25,7 @@ export interface MenuContextValue { triggerId: Accessor; contentId: Accessor; setTriggerRef: (el: HTMLElement) => void; - setContentRef: (el: HTMLElement) => void; + setContentRef: (el: HTMLElement | undefined) => void; open: (focusStrategy: FocusStrategy | boolean) => void; close: (recursively?: boolean) => void; toggle: (focusStrategy: FocusStrategy | boolean) => void; diff --git a/packages/core/src/navigation-menu/navigation-menu-root.tsx b/packages/core/src/navigation-menu/navigation-menu-root.tsx index 2b43286f..91097010 100644 --- a/packages/core/src/navigation-menu/navigation-menu-root.tsx +++ b/packages/core/src/navigation-menu/navigation-menu-root.tsx @@ -168,6 +168,12 @@ export function NavigationMenuRoot( element: () => viewportRef() ?? null, }); + createEffect(() => { + if (!viewportPresent()) { + context.setPreviousMenu(undefined); + } + }); + const context: NavigationMenuContextValue = { dataset, delayDuration: () => local.delayDuration!, diff --git a/packages/core/src/navigation-menu/navigation-menu-trigger.tsx b/packages/core/src/navigation-menu/navigation-menu-trigger.tsx index 7e047bf1..dd8f44f2 100644 --- a/packages/core/src/navigation-menu/navigation-menu-trigger.tsx +++ b/packages/core/src/navigation-menu/navigation-menu-trigger.tsx @@ -69,8 +69,10 @@ export function NavigationMenuTrigger( if (context.dataset()["data-expanded"] === "") return; timeoutId = window.setTimeout(() => { - context.setAutoFocusMenu(true); menuContext?.triggerRef()?.focus(); + setTimeout(() => { + context.setAutoFocusMenu(true); + }); }, context.delayDuration()); }; diff --git a/packages/core/src/navigation-menu/navigation-menu-viewport.tsx b/packages/core/src/navigation-menu/navigation-menu-viewport.tsx index 331330e4..090262a6 100644 --- a/packages/core/src/navigation-menu/navigation-menu-viewport.tsx +++ b/packages/core/src/navigation-menu/navigation-menu-viewport.tsx @@ -117,10 +117,12 @@ export function NavigationMenuViewport( ); const height = createMemo((prev) => { + if (ref() === undefined || !context.viewportPresent()) return undefined; if (size.height() === 0) return prev; return size.height(); }); const width = createMemo((prev) => { + if (ref() === undefined || !context.viewportPresent()) return undefined; if (size.width() === 0) return prev; return size.width(); });