diff options
| author | David Hill <[email protected]> | 2026-03-06 22:33:34 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-06 16:33:34 -0600 |
| commit | b0bc3d87f59fb28340fc4c047131919031890898 (patch) | |
| tree | 35c56cbdb069fb720de642d7a4cc0bd6332e3747 /packages/app/src/pages/layout | |
| parent | a2634337b84643c08df5337243e8f82399c85615 (diff) | |
| download | opencode-b0bc3d87f59fb28340fc4c047131919031890898.tar.gz opencode-b0bc3d87f59fb28340fc4c047131919031890898.zip | |
feat(app): sidebar reveal animation, hover peek overlay, and weaker dividers (#16374)
Co-authored-by: Adam <[email protected]>
Diffstat (limited to 'packages/app/src/pages/layout')
| -rw-r--r-- | packages/app/src/pages/layout/sidebar-shell.tsx | 26 | ||||
| -rw-r--r-- | packages/app/src/pages/layout/sidebar-workspace.tsx | 4 |
2 files changed, 25 insertions, 5 deletions
diff --git a/packages/app/src/pages/layout/sidebar-shell.tsx b/packages/app/src/pages/layout/sidebar-shell.tsx index d813ef3e1..d3070e374 100644 --- a/packages/app/src/pages/layout/sidebar-shell.tsx +++ b/packages/app/src/pages/layout/sidebar-shell.tsx @@ -1,4 +1,4 @@ -import { createMemo, For, Show, type Accessor, type JSX } from "solid-js" +import { createEffect, createMemo, For, Show, type Accessor, type JSX } from "solid-js" import { DragDropProvider, DragDropSensors, @@ -35,10 +35,22 @@ export const SidebarContent = (props: { }): JSX.Element => { const expanded = createMemo(() => sidebarExpanded(props.mobile, props.opened())) const placement = () => (props.mobile ? "bottom" : "right") + let panel: HTMLDivElement | undefined + + createEffect(() => { + const el = panel + if (!el) return + if (expanded()) { + el.removeAttribute("inert") + return + } + el.setAttribute("inert", "") + }) return ( - <div class="flex h-full w-full overflow-hidden"> + <div class="flex h-full w-full min-w-0 overflow-hidden"> <div + data-component="sidebar-rail" class="w-16 shrink-0 bg-background-base flex flex-col items-center overflow-hidden" onMouseMove={props.aimMove} > @@ -100,7 +112,15 @@ export const SidebarContent = (props: { </div> </div> - <Show when={expanded()}>{props.renderPanel()}</Show> + <div + ref={(el) => { + panel = el + }} + classList={{ "flex h-full min-h-0 min-w-0 overflow-hidden": true, "pointer-events-none": !expanded() }} + aria-hidden={!expanded()} + > + {props.renderPanel()} + </div> </div> ) } diff --git a/packages/app/src/pages/layout/sidebar-workspace.tsx b/packages/app/src/pages/layout/sidebar-workspace.tsx index 43d99cf89..f2fd3af2a 100644 --- a/packages/app/src/pages/layout/sidebar-workspace.tsx +++ b/packages/app/src/pages/layout/sidebar-workspace.tsx @@ -249,7 +249,7 @@ const WorkspaceSessionList = (props: { loadMore: () => Promise<void> language: ReturnType<typeof useLanguage> }): JSX.Element => ( - <nav class="flex flex-col gap-1 px-2"> + <nav class="flex flex-col gap-1 px-3"> <Show when={props.showNew()}> <NewSessionItem slug={props.slug()} @@ -490,7 +490,7 @@ export const LocalWorkspace = (props: { ref={(el) => props.ctx.setScrollContainerRef(el, props.mobile)} class="size-full flex flex-col py-2 overflow-y-auto no-scrollbar [overflow-anchor:none]" > - <nav class="flex flex-col gap-1 px-2"> + <nav class="flex flex-col gap-1 px-3"> <Show when={loading()}> <SessionSkeleton /> </Show> |
