Skip to content

Commit 7a74be3

Browse files
committed
tweak(ui): add border to filetree on scroll
1 parent c95febb commit 7a74be3

2 files changed

Lines changed: 39 additions & 3 deletions

File tree

packages/app/src/pages/session/session-side-panel.tsx

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,12 @@ export function SessionSidePanel(props: {
145145

146146
const [store, setStore] = createStore({
147147
activeDraggable: undefined as string | undefined,
148+
fileTreeScrolled: false,
148149
})
149150

151+
let changesEl: HTMLDivElement | undefined
152+
let allEl: HTMLDivElement | undefined
153+
150154
const handleDragStart = (event: unknown) => {
151155
const id = getDraggableId(event)
152156
if (!id) return
@@ -167,6 +171,14 @@ export function SessionSidePanel(props: {
167171
setStore("activeDraggable", undefined)
168172
}
169173

174+
createEffect(() => {
175+
if (!layout.fileTree.opened()) return
176+
const tab = fileTreeTab()
177+
const el = tab === "changes" ? changesEl : allEl
178+
const next = (el?.scrollTop ?? 0) > 0
179+
setStore("fileTreeScrolled", (current) => (current === next ? current : next))
180+
})
181+
170182
createEffect(() => {
171183
if (!file.ready()) return
172184

@@ -335,7 +347,7 @@ export function SessionSidePanel(props: {
335347
class="h-full"
336348
data-scope="filetree"
337349
>
338-
<Tabs.List>
350+
<Tabs.List data-scrolled={store.fileTreeScrolled ? "" : undefined}>
339351
<Tabs.Trigger value="changes" class="flex-1" classes={{ button: "w-full" }}>
340352
{reviewCount()}{" "}
341353
{language.t(reviewCount() === 1 ? "session.review.change.one" : "session.review.change.other")}
@@ -344,7 +356,16 @@ export function SessionSidePanel(props: {
344356
{language.t("session.files.all")}
345357
</Tabs.Trigger>
346358
</Tabs.List>
347-
<Tabs.Content value="changes" class="bg-background-stronger px-3 py-0">
359+
<Tabs.Content
360+
value="changes"
361+
ref={(el: HTMLDivElement) => (changesEl = el)}
362+
onScroll={(e: UIEvent & { currentTarget: HTMLDivElement }) => {
363+
if (fileTreeTab() !== "changes") return
364+
const next = e.currentTarget.scrollTop > 0
365+
setStore("fileTreeScrolled", (current) => (current === next ? current : next))
366+
}}
367+
class="bg-background-stronger px-3 py-0"
368+
>
348369
<Switch>
349370
<Match when={hasReview()}>
350371
<Show
@@ -373,7 +394,16 @@ export function SessionSidePanel(props: {
373394
</Match>
374395
</Switch>
375396
</Tabs.Content>
376-
<Tabs.Content value="all" class="bg-background-stronger px-3 py-0">
397+
<Tabs.Content
398+
value="all"
399+
ref={(el: HTMLDivElement) => (allEl = el)}
400+
onScroll={(e: UIEvent & { currentTarget: HTMLDivElement }) => {
401+
if (fileTreeTab() !== "all") return
402+
const next = e.currentTarget.scrollTop > 0
403+
setStore("fileTreeScrolled", (current) => (current === next ? current : next))
404+
}}
405+
class="bg-background-stronger px-3 py-0"
406+
>
377407
<FileTree
378408
path=""
379409
modified={diffFiles()}

packages/ui/src/components/tabs.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,12 @@
386386
gap: 8px;
387387
align-items: center;
388388
background-color: var(--background-stronger);
389+
box-sizing: border-box;
390+
border-bottom: 1px solid transparent;
391+
392+
&[data-scrolled] {
393+
border-bottom-color: var(--border-weak-base);
394+
}
389395
}
390396

391397
[data-slot="tabs-trigger-wrapper"] {

0 commit comments

Comments
 (0)