Task: Sidebar Nav Item Component
Type: Component
Milestone: M0.5 — Shared Component Library
Estimate: S
Component Type
Props Interface
interface SidebarNavItemProps {
label: string;
icon: ReactNode;
isActive?: boolean;
badge?: number | string; // count (3) or label ("new")
badgeVariant?: 'danger' | 'info';
onClick?: () => void;
className?: string;
}
Variants / States
| State |
Description |
| Default |
Secondary text, no background |
| Active |
Secondary bg, primary text, medium weight |
| Hover |
Secondary bg, primary text |
| With danger badge |
Red pill on right — used for Pending + Escalated counts |
| With info badge |
Blue pill — used for Resolved count |
Acceptance Criteria
Notes
- Used in desktop
Sidebar and as the basis for BottomNavItem on mobile — keep layout flexible enough to adapt to horizontal orientation
- Badge counts here must stay in sync with queue counts from
useReports — the parent layout handles this, SidebarNavItem just renders what it receives
Task: Sidebar Nav Item Component
Type: Component
Milestone: M0.5 — Shared Component Library
Estimate: S
Component Type
Props Interface
Variants / States
Acceptance Criteria
badgerenders only when provided — no empty pill ghostisActiveand hover states are visually distinct from each otherNotes
Sidebarand as the basis forBottomNavItemon mobile — keep layout flexible enough to adapt to horizontal orientationuseReports— the parent layout handles this,SidebarNavItemjust renders what it receives