Skip to content

Commit bb45768

Browse files
committed
fix: graph sidebar — sticky header, visible scrollbar, remove footer hint, uncap connected nodes
1 parent 15c83a0 commit bb45768

2 files changed

Lines changed: 21 additions & 15 deletions

File tree

src/index.css

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,15 @@ html.light {
102102

103103
/* Thin scrollbar for contribution graph */
104104
/* Hide scrollbar on graph sidebar (keeps content full-width so HRs reach the edge) */
105-
.sidebar-scroll::-webkit-scrollbar { display: none; }
106-
.sidebar-scroll { scrollbar-width: none; -ms-overflow-style: none; }
105+
.sidebar-scroll { scrollbar-width: thin; scrollbar-color: #1e3a5f transparent; }
106+
.sidebar-scroll::-webkit-scrollbar { width: 4px; }
107+
.sidebar-scroll::-webkit-scrollbar-track { background: transparent; }
108+
.sidebar-scroll::-webkit-scrollbar-thumb { background: #1e3a5f; border-radius: 2px; }
109+
.sidebar-scroll::-webkit-scrollbar-thumb:hover { background: #2a5280; }
110+
111+
/* Scale graph sidebar down on short viewports, mirroring width-based sm: breakpoints */
112+
@media (max-height: 700px) { .graph-sidebar { zoom: 0.88; } }
113+
@media (max-height: 560px) { .graph-sidebar { zoom: 0.76; } }
107114

108115
.contrib-scroll::-webkit-scrollbar {
109116
height: 3px;

src/pages/Graph.tsx

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,12 @@ export default function Graph() {
429429

430430
// ── Load data ────────────────────────────────────────────────────────────────
431431

432+
// Lock body scroll so the graph page doesn't overflow the viewport
433+
useEffect(() => {
434+
document.body.style.overflow = 'hidden'
435+
return () => { document.body.style.overflow = '' }
436+
}, [])
437+
432438
useEffect(() => {
433439
// 250ms: ensures the navbar CSS transition (duration-200) fully completes.
434440
const timer = setTimeout(() => {
@@ -944,7 +950,7 @@ export default function Graph() {
944950

945951

946952
{/* Selected node panel */}
947-
<div className="px-3 sm:px-4 py-2 sm:py-3 flex-1 overflow-y-auto">
953+
<div className="px-3 sm:px-4 py-2 sm:py-3">
948954
<div className="text-[0.6rem] sm:text-xs font-bold uppercase tracking-wider mb-1.5 sm:mb-2" style={{ color: C.muted }}>
949955
Selected Node
950956
</div>
@@ -1020,7 +1026,7 @@ export default function Graph() {
10201026
<div className="text-[0.6rem] sm:text-xs uppercase tracking-wider mb-1" style={{ color: C.muted }}>
10211027
Connected ({selectedNode.connectedNodes.length})
10221028
</div>
1023-
<div className="flex flex-col gap-0.5 max-h-36 sm:max-h-48 overflow-y-auto">
1029+
<div className="flex flex-col gap-0.5">
10241030
{selectedNode.connectedNodes.map((n, i) => {
10251031
const meta = TYPE_META[n.type] ?? TYPE_META.skill
10261032
return (
@@ -1044,19 +1050,12 @@ export default function Graph() {
10441050
)}
10451051
</div>
10461052

1047-
{/* Footer hint — desktop only */}
1048-
<div
1049-
className="hidden sm:block px-4 py-2 flex-shrink-0 text-xs text-center"
1050-
style={{ borderTop: `1px solid ${C.border}`, color: C.border2 }}
1051-
>
1052-
scroll · pan · zoom · click · drag
1053-
</div>
10541053
</>
10551054
)
10561055

10571056
return (
10581057
<div
1059-
className="flex flex-col-reverse sm:flex-row overflow-hidden font-mono h-full max-w-[100vw]"
1058+
className="flex flex-col-reverse sm:flex-row overflow-hidden font-mono h-screen max-w-[100vw]"
10601059
style={{ background: C.bg }}
10611060
>
10621061
<SEO
@@ -1066,7 +1065,7 @@ export default function Graph() {
10661065
/>
10671066
{/* ── Sidebar — desktop: left panel (collapsible); mobile: bottom drawer ── */}
10681067
<aside
1069-
className={`flex flex-col flex-shrink-0 w-full ${sidebarOpen ? 'sm:w-[280px] sm:min-w-[280px] sm:max-w-[280px]' : 'sm:w-[21px] sm:min-w-[21px] sm:max-w-[21px]'}`}
1068+
className={`graph-sidebar flex flex-col flex-shrink-0 w-full ${sidebarOpen ? 'sm:w-[280px] sm:min-w-[280px] sm:max-w-[280px]' : 'sm:w-[21px] sm:min-w-[21px] sm:max-w-[21px]'}`}
10701069
style={{
10711070
background: C.surface,
10721071
borderRight: sidebarOpen ? `1px solid ${C.border}` : 'none',
@@ -1099,8 +1098,8 @@ export default function Graph() {
10991098

11001099
{/* ── Desktop header with collapse toggle (hidden on mobile) ── */}
11011100
<div
1102-
className="hidden sm:block relative flex-shrink-0"
1103-
style={{ borderBottom: `1px solid ${C.border}` }}
1101+
className="hidden sm:block relative flex-shrink-0 sticky top-0 z-10"
1102+
style={{ borderBottom: `1px solid ${C.border}`, background: C.surface }}
11041103
>
11051104
{/* Title text — pr-7 keeps text clear of the absolute button */}
11061105
{sidebarOpen && (

0 commit comments

Comments
 (0)