Some checks failed
CD Pipeline / Deploy to Staging (push) Failing after 20s
CI Pipeline / Lint and Type Check (push) Failing after 32s
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Test Backend (push) Failing after 1m28s
CI Pipeline / Test Frontend (push) Failing after 33s
CI Pipeline / Security Scan (push) Failing after 1m6s
Deploy to Staging / Deploy to Staging (push) Failing after 33s
Portal CI / Portal Lint (push) Failing after 20s
Portal CI / Portal Type Check (push) Failing after 22s
Portal CI / Portal Test (push) Failing after 21s
Portal CI / Portal Build (push) Failing after 20s
Test Suite / frontend-tests (push) Failing after 32s
Test Suite / api-tests (push) Failing after 52s
Test Suite / blockchain-tests (push) Failing after 30s
Type Check / type-check (map[directory:. name:root]) (push) Failing after 23s
Type Check / type-check (map[directory:api name:api]) (push) Failing after 18s
Type Check / type-check (map[directory:portal name:portal]) (push) Failing after 18s
CD Pipeline / Deploy to Production (push) Has been skipped
Replace the generic S wordmark with geometric Sankofa, Phoenix, and PanTel marks, institutional palette tokens, IBM Plex Sans, ecosystem trinity homepage, /brand reference page, corporate graphics, and portal shell refresh. Co-authored-by: Cursor <cursoragent@cursor.com>
55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
'use client'
|
|
|
|
import Link from 'next/link'
|
|
import { usePathname } from 'next/navigation'
|
|
|
|
import { primaryNavigation, supportNavigation } from '@/lib/portal-navigation'
|
|
import { cn } from '@/lib/utils'
|
|
|
|
export function PortalSidebar() {
|
|
const pathname = usePathname()
|
|
|
|
return (
|
|
<aside className="fixed left-0 top-16 h-[calc(100vh-4rem)] w-64 overflow-y-auto border-r border-sovereign-bronze/25 bg-sovereign-midnight">
|
|
<nav className="space-y-1 p-4">
|
|
{primaryNavigation.map((item) => {
|
|
const isActive = pathname === item.href || pathname?.startsWith(item.href + '/')
|
|
return (
|
|
<Link
|
|
key={item.name}
|
|
href={item.href}
|
|
className={cn(
|
|
'flex items-center space-x-3 rounded-lg px-3 py-2 text-sm font-medium no-underline transition-colors',
|
|
isActive
|
|
? 'border border-sovereign-gold/25 bg-sovereign-gold/10 text-sovereign-gold'
|
|
: 'text-sovereign-ivory/55 hover:bg-sovereign-obsidian hover:text-sovereign-ivory'
|
|
)}
|
|
>
|
|
<item.icon className="h-5 w-5" />
|
|
<span>{item.name}</span>
|
|
</Link>
|
|
)
|
|
})}
|
|
</nav>
|
|
|
|
<div className="border-t border-gray-800 mt-4 pt-4 px-4">
|
|
<div className="text-xs font-semibold text-gray-500 uppercase tracking-wider mb-2">
|
|
Help & Support
|
|
</div>
|
|
<nav className="space-y-1">
|
|
{supportNavigation.map((item) => (
|
|
<Link
|
|
key={item.name}
|
|
href={item.href}
|
|
className="flex items-center space-x-3 rounded-lg px-3 py-2 text-sm font-medium text-gray-400 no-underline transition-colors hover:bg-gray-800 hover:text-white"
|
|
>
|
|
<item.icon className="h-5 w-5" />
|
|
<span>{item.name}</span>
|
|
</Link>
|
|
))}
|
|
</nav>
|
|
</div>
|
|
</aside>
|
|
)
|
|
}
|