HyperFlow / frontend /src /components /Sidebar.jsx
Gaurav711's picture
feat(ui): redesign frontend with luxury dark obsidian & coral pink theme based on ui frontend.png
8964497 verified
Raw
History Blame Contribute Delete
4.62 kB
import React from 'react';
import { NavLink } from 'react-router-dom';
const NAV_ITEMS = [
{ to: '/', icon: 'smart_toy', label: 'AI Agent', desc: 'LangGraph Agent' },
{ to: '/dark-store-intel', icon: 'warehouse', label: 'Store Intel', desc: 'Tobit Forecast' },
{ to: '/route-intelligence', icon: 'alt_route', label: 'Route Intel', desc: 'Kalman & Dispatch' },
{ to: '/ml-guard', icon: 'security', label: 'ML Guard', desc: 'Fraud Protection' },
{ to: '/analytics', icon: 'analytics', label: 'Analytics', desc: 'Command Center' },
];
export default function Sidebar() {
return (
<aside style={styles.sidebar}>
{/* Brand Title */}
<div style={styles.brandBox}>
<div style={styles.logoBadge}>H</div>
<div>
<div style={styles.brandName}>HyperFlow</div>
<div style={styles.brandSub}>Commerce Intelligence</div>
</div>
</div>
<div style={styles.divider} />
{/* Navigation */}
<nav style={styles.nav}>
{NAV_ITEMS.map(item => (
<NavLink
key={item.to}
to={item.to}
end={item.to === '/'}
style={({ isActive }) => ({
...styles.navCard,
...(isActive ? styles.navCardActive : {}),
})}
>
{({ isActive }) => (
<>
<div style={{
...styles.iconBox,
background: isActive ? 'var(--accent-gradient)' : 'rgba(255, 255, 255, 0.03)',
borderColor: isActive ? 'transparent' : 'var(--bg-border)',
boxShadow: isActive ? '0 4px 14px var(--accent-coral-glow)' : 'none',
}}>
<span
className="material-symbols-outlined"
style={{ fontSize: 18, color: isActive ? '#FFF' : 'var(--text-secondary)' }}
>
{item.icon}
</span>
</div>
<div style={styles.navText}>
<div style={{
...styles.navLabel,
color: isActive ? '#FFF' : 'var(--text-secondary)',
fontWeight: isActive ? 700 : 500,
}}>
{item.label}
</div>
<div style={styles.navDesc}>{item.desc}</div>
</div>
</>
)}
</NavLink>
))}
</nav>
</aside>
);
}
const styles = {
sidebar: {
width: 220,
flexShrink: 0,
background: 'rgba(14, 12, 18, 0.7)',
backdropFilter: 'blur(20px)',
borderRight: '1px solid var(--bg-border)',
display: 'flex',
flexDirection: 'column',
padding: '20px 14px',
gap: 16,
},
brandBox: {
display: 'flex',
alignItems: 'center',
gap: 12,
padding: '4px 6px',
},
logoBadge: {
width: 34,
height: 34,
borderRadius: 10,
background: 'var(--accent-gradient)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontFamily: 'var(--font-serif)',
fontSize: 18,
fontWeight: 700,
color: '#FFF',
boxShadow: '0 4px 16px var(--accent-coral-glow)',
},
brandName: {
fontFamily: 'var(--font-serif)',
fontSize: 18,
fontWeight: 700,
color: '#FFF',
letterSpacing: '-0.01em',
},
brandSub: {
fontFamily: 'var(--font-sans)',
fontSize: 10,
color: 'var(--text-muted)',
marginTop: 1,
},
divider: {
height: 1,
background: 'var(--bg-border)',
margin: '0 4px',
},
nav: {
display: 'flex',
flexDirection: 'column',
gap: 8,
},
navCard: {
display: 'flex',
alignItems: 'center',
gap: 12,
padding: '10px 12px',
borderRadius: 'var(--radius-md)',
textDecoration: 'none',
transition: 'all 0.2s ease',
background: 'transparent',
border: '1px solid transparent',
},
navCardActive: {
background: 'rgba(255, 51, 102, 0.08)',
borderColor: 'rgba(255, 51, 102, 0.2)',
},
iconBox: {
width: 32,
height: 32,
borderRadius: 10,
border: '1px solid var(--bg-border)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
flexShrink: 0,
transition: 'all 0.2s ease',
},
navText: {
flex: 1,
minWidth: 0,
},
navLabel: {
fontFamily: 'var(--font-sans)',
fontSize: 13,
letterSpacing: '-0.01em',
},
navDesc: {
fontFamily: 'var(--font-sans)',
fontSize: 10,
color: 'var(--text-muted)',
marginTop: 1,
},
};