Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,16 @@ export default function RootLayout({
}) {
return (
<html lang="en" className={`${font.variable} ${font2.variable}`}>
<body className="h-screen flex flex-col font-body overflow-x-hidden bg-base-950 text-base-100">
<body className="min-h-screen overflow-x-hidden bg-base-950 font-body text-base-100">
<Analytics />
<Header />
<ContextMenu />
<main className="max-w-xl w-full mx-auto px-4 mb-12 mt-8">
{children}
</main>
<Footer />
<div className="mx-auto flex min-h-screen w-full max-w-5xl flex-col px-4 md:flex-row md:gap-14 md:px-6">
<Header />
<div className="flex min-h-screen w-full flex-col md:max-w-xl">
<main className="mb-12 mt-8 w-full">{children}</main>
<Footer />
</div>
</div>
</body>
</html>
)
Expand Down
43 changes: 26 additions & 17 deletions components/header.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use client'

import { clsx } from 'clsx'
import Image from 'next/image'
import Link, { LinkProps } from 'next/link'
import { usePathname } from 'next/navigation'
Expand All @@ -10,44 +11,52 @@ export default function Header() {
const isRootPage = pathname === '/'

return (
<div className="py-4 px-4 mx-auto w-full max-w-xl text-base-800 dark:text-base-50 flex flex-row justify-between items-center gap-y-4 md:gap-y-0">
{!isRootPage && (
<div className="flex flex-col justify-center">
<header className="w-full py-4 text-base-800 dark:text-base-50 md:sticky md:top-0 md:h-screen md:w-52 md:py-12">
<div className="flex flex-row items-center justify-between gap-4 md:flex-col md:items-start md:justify-start md:gap-8">
{!isRootPage && (
<Link
href="/"
className="hover:text-accent-600 text-base-300 transition-all"
className="text-base-300 transition-all hover:text-accent-600"
>
<h1 className="-mb-1 font-bold hidden">Chris Jarling</h1>
<h1 className="sr-only">Chris Jarling</h1>
<ViewTransition name="avatar">
<Image
src="/dithered.png"
alt="Chris Jarling"
width={48}
height={48}
className="rounded-lg border border-base-900 w-12 h-12 grayscale-50 hover:grayscale-0 transition-all"
className="h-12 w-12 rounded-lg border border-base-900 grayscale-50 transition-all hover:grayscale-0"
/>
</ViewTransition>
</Link>
</div>
)}
<nav className="ml-auto">
<div className="gap-2 flex justify-center items-center">
<NavLink href="/about">About</NavLink>
<NavLink href="/now">Now</NavLink>
</div>
</nav>
</div>
)}
<nav className="ml-auto md:ml-0 md:w-full">
<div className="flex items-center justify-center gap-2 md:w-full md:flex-col md:items-stretch">
<NavLink href="/about" active={pathname === '/about'}>
About
</NavLink>
<NavLink href="/now" active={pathname === '/now'}>
Now
</NavLink>
</div>
</nav>
</div>
</header>
)
}

type NavLinkProps = {
children: React.ReactNode
active?: boolean
} & LinkProps

const NavLink = ({ children, ...rest }: NavLinkProps) => {
const NavLink = ({ children, active = false, ...rest }: NavLinkProps) => {
return (
<Link
className="font-title transition-all text-base-500 hover:bg-base-800 hover:text-base-200 px-4 py-2 rounded-full"
className={clsx(
'font-title rounded-full px-4 py-2 text-base-500 transition-all hover:bg-base-800 hover:text-base-200 md:w-full md:rounded-lg md:text-left',
active && 'bg-base-900 text-base-100',
)}
{...rest}
>
{children}
Expand Down
Loading