All Q1-Q5 answered A: - Topbar removed; LanguageSwitcher + UserMenu move to sidebar footer - Mobile: slide-over overlay with hamburger button - Theme toggle in sidebar footer - No-flash init via inline script in index.html - Role-filtered sidebar items client-side Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1002 B
1002 B
Domain Entities — Unit 3: Layout & Navigation
NavItem
Represents a single entry in the sidebar navigation. Defined as a constant array in Sidebar.tsx.
| Field | Type | Description |
|---|---|---|
to |
string |
TanStack Router route path |
labelKey |
string |
i18n key for the display label |
icon |
LucideIcon |
Icon component from lucide-react |
testId |
string |
data-testid value |
roles |
Role[] | undefined |
Roles that can see this item; undefined = all authenticated roles |
Role (from AuthContext — existing)
type Role = 'Owner' | 'Administrator' | 'User';
Sourced from useAuth().user.role. Used by Sidebar to filter NavItem[].
Theme
type Theme = 'light' | 'dark';
Persisted in localStorage under key cms-theme. Applied as class on <html>.
SupportedLanguage (existing, Unit 1)
type SupportedLanguage = 'en' | 'nl';
No changes — changeLanguage from @/i18n/config is reused as-is.