diff options
| author | adamelmore <[email protected]> | 2026-01-26 09:25:10 -0600 |
|---|---|---|
| committer | adamelmore <[email protected]> | 2026-01-26 09:33:42 -0600 |
| commit | cd4676171b03048e6894160c5f11199392e33e53 (patch) | |
| tree | 0352d2a6450777f08093c2ca52f7287477fc59a7 | |
| parent | 7016be073982e0612ac45b00b6f5795d5befeda6 (diff) | |
| download | opencode-cd4676171b03048e6894160c5f11199392e33e53.tar.gz opencode-cd4676171b03048e6894160c5f11199392e33e53.zip | |
feat(app): better sidebar hover when collapsed
| -rw-r--r-- | packages/app/src/pages/layout.tsx | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 2b9d563f1..4230f0745 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -138,6 +138,12 @@ export default function Layout(props: ParentProps) { const [hoverProject, setHoverProject] = createSignal<string | undefined>() const [nav, setNav] = createSignal<HTMLElement | undefined>(undefined) + const navLeave = { current: undefined as number | undefined } + + onCleanup(() => { + if (navLeave.current === undefined) return + clearTimeout(navLeave.current) + }) const sidebarHovering = createMemo(() => !layout.sidebar.opened() && hoverProject() !== undefined) const sidebarExpanded = createMemo(() => layout.sidebar.opened() || sidebarHovering()) @@ -1702,9 +1708,10 @@ export default function Layout(props: ParentProps) { > <HoverCard openDelay={1000} - closeDelay={sidebarHovering() ? 300 : 0} - placement="right" - gutter={28} + closeDelay={sidebarHovering() ? 600 : 0} + placement="right-start" + gutter={16} + shift={-2} trigger={item} mount={!props.mobile ? nav() : undefined} open={hoverSession() === props.session.id} @@ -2067,7 +2074,7 @@ export default function Layout(props: ParentProps) { size="large" onClick={(e: MouseEvent) => { loadMore() - ;(e.currentTarget as HTMLButtonElement).blur() + ; (e.currentTarget as HTMLButtonElement).blur() }} > {language.t("common.loadMore")} @@ -2302,7 +2309,7 @@ export default function Layout(props: ParentProps) { size="large" onClick={(e: MouseEvent) => { loadMore() - ;(e.currentTarget as HTMLButtonElement).blur() + ; (e.currentTarget as HTMLButtonElement).blur() }} > {language.t("common.loadMore")} @@ -2663,9 +2670,20 @@ export default function Layout(props: ParentProps) { ref={(el) => { setNav(el) }} + onMouseEnter={() => { + if (navLeave.current === undefined) return + clearTimeout(navLeave.current) + navLeave.current = undefined + }} onMouseLeave={() => { - setHoverSession(undefined) - setHoverProject(undefined) + if (!sidebarHovering()) return + + if (navLeave.current !== undefined) clearTimeout(navLeave.current) + navLeave.current = window.setTimeout(() => { + navLeave.current = undefined + setHoverProject(undefined) + setHoverSession(undefined) + }, 300) }} > <div class="@container w-full h-full contain-strict"> |
