Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
'use client'
|
|
|
|
import { motion, useScroll, useTransform } from 'framer-motion'
|
|
import Link from 'next/link'
|
|
import { usePathname } from 'next/navigation'
|
|
import { type IconName } from '@/components/common/icon'
|
|
import { Logo } from '@/components/common/logo'
|
|
import { SocialLink } from '@/components/navigation/social-link'
|
|
import { SearchButton } from '@/components/search/SearchButton'
|
|
import { ThemeSwitch } from '../common/theme-switch'
|
|
|
|
const socialLinks = [
|
|
{
|
|
caption: 'Twitter/X',
|
|
icon: 'twitter' as IconName,
|
|
href: 'https://x.com/tldraw/',
|
|
},
|
|
{
|
|
caption: 'Discord',
|
|
icon: 'discord' as IconName,
|
|
href: 'https://discord.tldraw.com/?utm_source=docs&utm_medium=organic&utm_campaign=sociallink',
|
|
},
|
|
{
|
|
caption: 'GitHub',
|
|
icon: 'github' as IconName,
|
|
href: 'https://github.com/tldraw/tldraw',
|
|
},
|
|
]
|
|
|
|
export function Header() {
|
|
const pathname = usePathname()
|
|
const { scrollY } = useScroll()
|
|
const navOpacity = useTransform(scrollY, [0, 32], [1, 0])
|
|
const socialsOpacityEffect = pathname === '/search'
|
|
|
|
return (
|
|
<header className="sticky top-0 w-full bg-white dark:bg-zinc-950 z-10">
|
|
<nav className="w-full max-w-screen-2xl mx-auto px-5 h-14 md:h-[4.5rem] flex justify-between items-center text-zinc-800 dark:text-zinc-200 border-b border-zinc-100 dark:border-zinc-800 dark:md:border-transparent md:border-transparent">
|
|
<Link href="/" className="w-28">
|
|
<Logo className="h-6" />
|
|
</Link>
|
|
<motion.ul
|
|
style={{ opacity: socialsOpacityEffect ? navOpacity : 1 }}
|
|
className="hidden sm:flex w-28 gap-4 justify-end xl:!opacity-100"
|
|
>
|
|
{socialLinks.map((item, index) => (
|
|
<li key={index}>
|
|
<SocialLink {...item} />
|
|
</li>
|
|
))}
|
|
<ThemeSwitch />
|
|
</motion.ul>
|
|
<div className="flex items-center sm:hidden -mr-2">
|
|
{!pathname?.startsWith('/search') && (
|
|
<SearchButton type={pathname?.startsWith('/blog') ? 'blog' : 'docs'} layout="mobile" />
|
|
)}
|
|
<ThemeSwitch />
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
)
|
|
}
|