# 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) ```ts type Role = 'Owner' | 'Administrator' | 'User'; ``` Sourced from `useAuth().user.role`. Used by `Sidebar` to filter `NavItem[]`. ## Theme ```ts type Theme = 'light' | 'dark'; ``` Persisted in `localStorage` under key `cms-theme`. Applied as class on ``. ## SupportedLanguage (existing, Unit 1) ```ts type SupportedLanguage = 'en' | 'nl'; ``` No changes — `changeLanguage` from `@/i18n/config` is reused as-is.