Skip to content

Commit 9838f56

Browse files
committed
fix(app): sidebar ux
1 parent 98b3340 commit 9838f56

1 file changed

Lines changed: 32 additions & 22 deletions

File tree

packages/app/src/pages/layout.tsx

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,6 +1818,9 @@ export default function Layout(props: ParentProps) {
18181818
document.documentElement.style.setProperty("--dialog-left-margin", `${sidebarWidth}px`)
18191819
})
18201820

1821+
const side = createMemo(() => Math.max(layout.sidebar.width(), 244))
1822+
const panel = createMemo(() => Math.max(side() - 64, 0))
1823+
18211824
const loadedSessionDirs = new Set<string>()
18221825

18231826
createEffect(
@@ -2094,7 +2097,7 @@ export default function Layout(props: ParentProps) {
20942097
"max-w-full overflow-hidden": panelProps.mobile,
20952098
}}
20962099
style={{
2097-
width: panelProps.mobile ? undefined : `${Math.max(Math.max(layout.sidebar.width(), 244) - 64, 0)}px`,
2100+
width: panelProps.mobile ? undefined : `${panel()}px`,
20982101
}}
20992102
>
21002103
<Show
@@ -2157,9 +2160,11 @@ export default function Layout(props: ParentProps) {
21572160
variant="ghost"
21582161
data-action="project-menu"
21592162
data-project={slug()}
2160-
class="shrink-0 size-6 rounded-md data-[expanded]:bg-surface-base-active"
2163+
class="shrink-0 size-6 rounded-md transition-opacity data-[expanded]:bg-surface-base-active"
21612164
classList={{
2162-
"opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100": !panelProps.mobile,
2165+
"opacity-100": panelProps.mobile || merged(),
2166+
"opacity-0 group-hover/project:opacity-100 group-focus-within/project:opacity-100 data-[expanded]:opacity-100":
2167+
!panelProps.mobile && !merged(),
21632168
}}
21642169
aria-label={language.t("common.moreOptions")}
21652170
/>
@@ -2384,7 +2389,7 @@ export default function Layout(props: ParentProps) {
23842389
"absolute inset-y-0 left-0": true,
23852390
"z-10": true,
23862391
}}
2387-
style={{ width: `${Math.max(layout.sidebar.width(), 244)}px` }}
2392+
style={{ width: `${side()}px` }}
23882393
ref={(el) => {
23892394
setState("nav", el)
23902395
}}
@@ -2399,24 +2404,29 @@ export default function Layout(props: ParentProps) {
23992404
}}
24002405
>
24012406
<div class="@container w-full h-full contain-strict">{sidebarContent()}</div>
2402-
<Show when={layout.sidebar.opened()}>
2403-
<div onPointerDown={() => setState("sizing", true)}>
2404-
<ResizeHandle
2405-
direction="horizontal"
2406-
size={layout.sidebar.width()}
2407-
min={244}
2408-
max={typeof window === "undefined" ? 1000 : window.innerWidth * 0.3 + 64}
2409-
onResize={(w) => {
2410-
setState("sizing", true)
2411-
if (sizet !== undefined) clearTimeout(sizet)
2412-
sizet = window.setTimeout(() => setState("sizing", false), 120)
2413-
layout.sidebar.resize(w)
2414-
}}
2415-
/>
2416-
</div>
2417-
</Show>
24182407
</nav>
24192408

2409+
<Show when={layout.sidebar.opened()}>
2410+
<div
2411+
class="hidden xl:block absolute inset-y-0 z-30 w-0 overflow-visible"
2412+
style={{ left: `${side()}px` }}
2413+
onPointerDown={() => setState("sizing", true)}
2414+
>
2415+
<ResizeHandle
2416+
direction="horizontal"
2417+
size={layout.sidebar.width()}
2418+
min={244}
2419+
max={typeof window === "undefined" ? 1000 : window.innerWidth * 0.3 + 64}
2420+
onResize={(w) => {
2421+
setState("sizing", true)
2422+
if (sizet !== undefined) clearTimeout(sizet)
2423+
sizet = window.setTimeout(() => setState("sizing", false), 120)
2424+
layout.sidebar.resize(w)
2425+
}}
2426+
/>
2427+
</div>
2428+
</Show>
2429+
24202430
<div
24212431
class="hidden xl:block pointer-events-none absolute top-0 right-0 z-0 border-t border-border-weaker-base"
24222432
style={{ left: "calc(4rem + 12px)" }}
@@ -2456,7 +2466,7 @@ export default function Layout(props: ParentProps) {
24562466
!state.sizing,
24572467
}}
24582468
style={{
2459-
"--main-left": layout.sidebar.opened() ? `${Math.max(layout.sidebar.width(), 244)}px` : "4rem",
2469+
"--main-left": layout.sidebar.opened() ? `${side()}px` : "4rem",
24602470
}}
24612471
>
24622472
<main
@@ -2503,7 +2513,7 @@ export default function Layout(props: ParentProps) {
25032513
"duration-180 ease-out": state.peeked && !layout.sidebar.opened(),
25042514
"duration-120 ease-in": !state.peeked || layout.sidebar.opened(),
25052515
}}
2506-
style={{ left: `calc(4rem + ${Math.max(Math.max(layout.sidebar.width(), 244) - 64, 0)}px)` }}
2516+
style={{ left: `calc(4rem + ${panel()}px)` }}
25072517
>
25082518
<div class="h-full w-px" style={{ "box-shadow": "var(--shadow-sidebar-overlay)" }} />
25092519
</div>

0 commit comments

Comments
 (0)