Task: Header/Top Nav Component
Type: Component
Milestone: M0.5 — Shared Component Library
Estimate: S
Component Type
Props Interface
interface TopbarProps {
title: string;
searchSlot?: ReactNode; // Input component with search config
actionsSlot?: ReactNode; // right side — avatar, notification bell
onMenuToggle?: () => void; // hamburger tap on mobile — opens drawer
className?: string;
}
Variants / States
| State |
Description |
| Desktop |
Title left, search center, actions right. No hamburger. |
| Mobile |
Hamburger left, title center, avatar right. Search hidden. |
| With search |
Search box renders in center slot — desktop only |
| Without search |
Title expands to fill available space |
Acceptance Criteria
Notes
- Topbar lives inside
AdminLayout — it is not a page-level component and should not be used outside the admin shell
actionsSlot in the admin layout will receive <Avatar name="AdminMod" size="sm" /> — wire this up in AdminLayout, not here
Task: Header/Top Nav Component
Type: Component
Milestone: M0.5 — Shared Component Library
Estimate: S
Component Type
Props Interface
Variants / States
Acceptance Criteria
< 768px), hidden on desktoponMenuTogglefires when hamburger is tapped —AdminLayoutcontrols the drawer state, not TopbarsearchSlothidden on mobile — search accessed via dedicated screen or bottom sheetactionsSlotrenders right-aligned, accepts any ReactNode (Avatar, notification bell, theme picker)--border-tertiary--bg-primarywith correct z-index above contentNotes
AdminLayout— it is not a page-level component and should not be used outside the admin shellactionsSlotin the admin layout will receive<Avatar name="AdminMod" size="sm" />— wire this up inAdminLayout, not here