import React, { useState, useEffect, useMemo } from 'react'; import clsx from 'clsx'; import { NavLink, useLocation, useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useUIStore } from '@/store/uiStore'; import { ArrowLeft, ArrowRightLeft, Brain, CheckCircle2, ChevronRight, FileText, Home, Settings, Store, Tags, Users } from 'lucide-react'; import { usePluginStore } from '@/store/pluginStore'; // Curated icon map — avoids `import * as LucideIcons` which loads ALL icons and causes OOM in tests import { Bot, Sparkles, Workflow, ArrowUpDown, Copy, Tag, Activity, Calendar, FolderOpen, Trash2, Link, MessageSquare, Mail, Shield, UsersRound, BarChart3, Bell, Search, LogOut, Menu, X, ChevronDown, User, Check, Plus, Edit, Filter, Star, Archive, Reply, Forward, Paperclip, MoreVertical, RefreshCw, Download, Upload, Eye, EyeOff, Lock, Unlock, Clock, AlertCircle, CheckCircle, XCircle, Info, Loader2, Inbox, Send, BookOpen, Lightbulb, } from 'lucide-react'; const ICON_MAP: Record> = { Bot, Sparkles, Workflow, ArrowUpDown, Copy, Tag, Activity, Calendar, FolderOpen, Trash2, Link, MessageSquare, Mail, Shield, UsersRound, BarChart3, Bell, Settings, Users, Home, FileText, Search, LogOut, Menu, X, ChevronDown, User, Check, Plus, Edit, Filter, Star, Archive, Reply, Forward, Paperclip, MoreVertical, RefreshCw, Download, Upload, Eye, EyeOff, Lock, Unlock, Clock, AlertCircle, CheckCircle, XCircle, Info, Loader2, Inbox, Send, ChevronRight, BookOpen, Lightbulb, Brain, Store, Tags, ArrowRightLeft, }; import { useMenuOrder } from '@/api/users'; import { usePermission } from '@/hooks/usePermission'; import { useWorkspace } from '@/hooks/useWorkspace'; import { useWorkspaceStore } from '@/store/workspaceStore'; import { useAuthStore } from '@/store/authStore'; interface NavSingleItem { to: string; labelKey: string; icon: React.ReactNode; order: number; } const chevronIcon = (expanded: boolean) => (