Botathon / templates /partials /sidebar.html
Jeetandar N Silwani
Initial commit
d6d292e
Raw
History Blame Contribute Delete
4.87 kB
{% set current_path = request.url.path %}
<aside class="fixed left-0 top-0 h-full w-64 flex flex-col z-30" style="background:var(--bg-secondary);border-right:1px solid var(--border-primary);display:flex;flex-direction:column;z-index:30;position:fixed;left:0;top:0;height:100%;width:256px;">
<div style="padding:24px;border-bottom:1px solid var(--border-primary);">
<a href="/dashboard" style="display:flex;align-items:center;gap:12px;text-decoration:none;">
<div class="avatar avatar-md" style="background:var(--gradient-primary);">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z"/>
</svg>
</div>
<div>
<span style="font-size:18px;font-weight:800;color:var(--text-primary);">MemoryBot</span>
<span style="display:block;font-size:10px;color:var(--text-muted);letter-spacing:0.05em;text-transform:uppercase;">AI Memory Companion</span>
</div>
</a>
</div>
<nav style="flex:1;display:flex;flex-direction:column;gap:6px;padding:24px 16px;">
{% set nav_items = [
("/dashboard", "Dashboard", '<path d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"/>'),
("/profiles", "Profiles", '<path d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"/>'),
("/chat", "Chat", '<path d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"/>'),
("/search", "Search", '<circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/>'),
("/admin", "Admin", '<circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z"/>'),
] %}
{% for path, label, icon in nav_items %}
{% set is_active = current_path == path or (path != '/dashboard' and current_path.startswith(path)) %}
<a href="{{ path }}" style="display:flex;align-items:center;gap:12px;padding:12px 20px;border-radius:12px;transition:all 0.2s;text-decoration:none;{% if is_active %}background:rgba(139,92,246,0.15);color:var(--accent-purple);{% else %}color:var(--text-secondary);{% endif %}">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">{{ icon }}</svg>
{{ label }}
</a>
{% endfor %}
</nav>
<div style="padding:16px;border-top:1px solid var(--border-primary);">
<div style="display:flex;align-items:center;gap:12px;padding:8px 16px;">
<div class="avatar avatar-sm avatar-purple">
<span>{{ user.name[0] if user else '?' }}</span>
</div>
<div style="flex:1;min-width:0;">
<p style="font-size:13px;font-weight:600;color:var(--text-primary);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">{{ user.name }}</p>
<p style="font-size:11px;color:var(--text-muted);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">{{ user.email }}</p>
</div>
</div>
<a href="/auth/logout" style="display:flex;align-items:center;gap:12px;padding:10px 16px;border-radius:12px;color:var(--text-secondary);transition:all 0.2s;margin-top:4px;text-decoration:none;" onmouseover="this.style.background='rgba(239,68,68,0.1)';this.style.color='#f87171'" onmouseout="this.style.background='';this.style.color='var(--text-secondary)'">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg>
Sign Out
</a>
</div>
</aside>