summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/layout
diff options
context:
space:
mode:
authorDavid Hill <[email protected]>2026-03-06 22:33:34 +0000
committerGitHub <[email protected]>2026-03-06 16:33:34 -0600
commitb0bc3d87f59fb28340fc4c047131919031890898 (patch)
tree35c56cbdb069fb720de642d7a4cc0bd6332e3747 /packages/app/src/pages/layout
parenta2634337b84643c08df5337243e8f82399c85615 (diff)
downloadopencode-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.tsx26
-rw-r--r--packages/app/src/pages/layout/sidebar-workspace.tsx4
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>