You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import {
|
|
BarChart3, BellRing, Boxes, FilePlus2, Files, Filter, LayoutDashboard, ListChecks,
|
|
Settings as SettingsIcon, Upload, UserCog, Users, Wrench,
|
|
type LucideIcon,
|
|
} from 'lucide-react'
|
|
|
|
export interface NavItem {
|
|
to: string; label: string; icon: LucideIcon; ownerOnly?: boolean
|
|
/** Match this route exactly (for parents like /documents whose children have their own items). */
|
|
end?: boolean
|
|
}
|
|
export interface NavGroup { label: string; items: NavItem[] }
|
|
|
|
/** Grouped sidebar (spec §3). Pipeline sits right after Dashboard (funnel spec §6b). */
|
|
export const NAV_GROUPS: NavGroup[] = [
|
|
{
|
|
label: 'Work',
|
|
items: [
|
|
{ to: '/', label: 'Dashboard', icon: LayoutDashboard },
|
|
{ to: '/pipeline', label: 'Pipeline', icon: Filter },
|
|
{ to: '/reminders', label: 'Reminders', icon: BellRing },
|
|
{ to: '/projects', label: 'Onboarding', icon: ListChecks },
|
|
{ to: '/tickets', label: 'Tickets', icon: Wrench },
|
|
{ to: '/clients', label: 'Clients', icon: Users },
|
|
{ to: '/documents', label: 'Documents', icon: Files, end: true },
|
|
{ to: '/documents/new', label: 'New Document', icon: FilePlus2 },
|
|
],
|
|
},
|
|
{ label: 'Catalog', items: [{ to: '/modules', label: 'Modules', icon: Boxes }] },
|
|
{ label: 'Insight', items: [{ to: '/reports', label: 'Reports', icon: BarChart3 }] },
|
|
{
|
|
label: 'Admin',
|
|
items: [
|
|
{ to: '/employees', label: 'Employees', icon: UserCog, ownerOnly: true },
|
|
{ to: '/import', label: 'APEX Import', icon: Upload, ownerOnly: true },
|
|
{ to: '/settings', label: 'Settings', icon: SettingsIcon },
|
|
],
|
|
},
|
|
]
|