@burdenoff/microfe-kadaikodi 2026.704.1 → 2026.704.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/kadaikodi/hooks/useKadaikodiApi.js +77 -26
  2. package/dist/kadaikodi/hooks/useKadaikodiApi.js.map +1 -1
  3. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js +341 -461
  4. package/dist/kadaikodi/pages/admin/AdminAnalyticsPage.js.map +1 -1
  5. package/dist/kadaikodi/pages/admin/AdminDashboard.js +115 -399
  6. package/dist/kadaikodi/pages/admin/AdminDashboard.js.map +1 -1
  7. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js +140 -283
  8. package/dist/kadaikodi/pages/admin/AdminFinancialPage.js.map +1 -1
  9. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js +282 -453
  10. package/dist/kadaikodi/pages/admin/AdminOrdersPage.js.map +1 -1
  11. package/dist/kadaikodi/pages/admin/AdminProfilePage.js +115 -242
  12. package/dist/kadaikodi/pages/admin/AdminProfilePage.js.map +1 -1
  13. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js +2 -2
  14. package/dist/kadaikodi/pages/admin/AdminSettingsPage.js.map +1 -1
  15. package/dist/kadaikodi/pages/admin/CartManagementPage.js.map +1 -1
  16. package/dist/kadaikodi/pages/admin/UserManagementPage.js.map +1 -1
  17. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js +503 -627
  18. package/dist/kadaikodi/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  19. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js +339 -282
  20. package/dist/kadaikodi/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  21. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js +323 -422
  22. package/dist/kadaikodi/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  23. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js +374 -383
  24. package/dist/kadaikodi/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  25. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js +249 -208
  26. package/dist/kadaikodi/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  27. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js +1 -1
  28. package/dist/kadaikodi/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  29. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js +1 -1
  30. package/dist/kadaikodi/pages/cart-owner/OrderManagementPage.js.map +1 -1
  31. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js +171 -627
  32. package/dist/kadaikodi/pages/cart-owner/StaffManagementPage.js.map +1 -1
  33. package/dist/kadaikodi/pages/common/HelpSupportPage.js +331 -415
  34. package/dist/kadaikodi/pages/common/HelpSupportPage.js.map +1 -1
  35. package/dist/kadaikodi/pages/common/NotificationCenterPage.js +18 -670
  36. package/dist/kadaikodi/pages/common/NotificationCenterPage.js.map +1 -1
  37. package/dist/kadaikodi/pages/common/SettingsPage.js.map +1 -1
  38. package/dist/kadaikodi/pages/customer/CheckoutPage.js +4 -2
  39. package/dist/kadaikodi/pages/customer/CheckoutPage.js.map +1 -1
  40. package/dist/kadaikodi/pages/customer/CustomerDashboard.js +191 -369
  41. package/dist/kadaikodi/pages/customer/CustomerDashboard.js.map +1 -1
  42. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js +233 -389
  43. package/dist/kadaikodi/pages/customer/CustomerProfilePage.js.map +1 -1
  44. package/dist/kadaikodi/pages/customer/DirectServiceBookingPage.js.map +1 -1
  45. package/dist/kadaikodi/pages/customer/OrderHistoryPage.js.map +1 -1
  46. package/dist/kadaikodi/pages/customer/OrderTrackingPage.js.map +1 -1
  47. package/dist/kadaikodi/pages/customer/PaymentMethodsPage.js +76 -118
  48. package/dist/kadaikodi/pages/customer/PaymentMethodsPage.js.map +1 -1
  49. package/dist/kadaikodi/pages/customer/ReviewsPage.js.map +1 -1
  50. package/dist/kadaikodi/pages/customer/SavedAddressesPage.js +135 -213
  51. package/dist/kadaikodi/pages/customer/SavedAddressesPage.js.map +1 -1
  52. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js +272 -774
  53. package/dist/kadaikodi/pages/investor/InvestmentDetailsPage.js.map +1 -1
  54. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js +232 -343
  55. package/dist/kadaikodi/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  56. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js +112 -600
  57. package/dist/kadaikodi/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  58. package/dist/kadaikodi/pages/investor/InvestorDashboard.js +127 -294
  59. package/dist/kadaikodi/pages/investor/InvestorDashboard.js.map +1 -1
  60. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js +204 -290
  61. package/dist/kadaikodi/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  62. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js +159 -500
  63. package/dist/kadaikodi/pages/investor/InvestorPortfolioPage.js.map +1 -1
  64. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js +399 -487
  65. package/dist/kadaikodi/pages/investor/InvestorProfilePage.js.map +1 -1
  66. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js +13 -13
  67. package/dist/kadaikodi/pages/worker/TaskDetailsPage.js.map +1 -1
  68. package/dist/kadaikodi/pages/worker/WorkerDashboard.js +192 -296
  69. package/dist/kadaikodi/pages/worker/WorkerDashboard.js.map +1 -1
  70. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js +245 -397
  71. package/dist/kadaikodi/pages/worker/WorkerOrdersPage.js.map +1 -1
  72. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js +85 -117
  73. package/dist/kadaikodi/pages/worker/WorkerProfilePage.js.map +1 -1
  74. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js +177 -395
  75. package/dist/kadaikodi/pages/worker/WorkerSchedulePage.js.map +1 -1
  76. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"InvestorProfilePage.js","names":[],"sources":["../../../../src/kadaikodi/pages/investor/InvestorProfilePage.tsx"],"sourcesContent":["/**\n * Investor Profile Page\n * @module kadaikodi/pages/investor\n *\n * Edit mode toggle, 6-tab system (personal/investment/portfolio/documents/\n * security/notifications), image upload, form fields for personal/professional/\n * address, investment profile with selects, preferred sectors checkboxes,\n * portfolio summary with active investments list, documents/KYC tab,\n * security tab (change password/2FA/login activity), notification toggles.\n */\n\nimport { useState, useCallback, useMemo } from 'react';\nimport {\n User,\n Mail,\n Phone,\n Camera,\n Save,\n X,\n Shield,\n Bell,\n TrendingUp,\n FileText,\n PieChart,\n Briefcase,\n DollarSign,\n CheckCircle2,\n AlertCircle,\n Eye,\n EyeOff,\n Lock,\n Smartphone,\n Monitor,\n Edit3,\n MapPin,\n Globe,\n Linkedin,\n Building2,\n BadgeCheck,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport { useInvestments } from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InvestorProfile {\n // Personal Information\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n profileImage: string;\n\n // Investment Profile\n investorType: string;\n investmentRange: string;\n preferredSectors: string[];\n investmentHorizon: string;\n riskProfile: string;\n\n // Company/Organization Details\n companyName: string;\n designation: string;\n companyWebsite: string;\n linkedinProfile: string;\n\n // Address\n address: string;\n city: string;\n state: string;\n country: string;\n pincode: string;\n\n // Portfolio\n portfolioValue?: number;\n activeInvestments?: number;\n totalReturns?: number;\n totalInvested?: number;\n}\n\ninterface NotificationPreference {\n id: string;\n label: string;\n description: string;\n enabled: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Tab definition\n// ---------------------------------------------------------------------------\n\nconst tabs = [\n { id: 'personal', label: 'Personal Info', Icon: User },\n { id: 'investment', label: 'Investment Profile', Icon: TrendingUp },\n { id: 'portfolio', label: 'Portfolio', Icon: PieChart },\n { id: 'documents', label: 'Documents', Icon: FileText },\n { id: 'security', label: 'Security', Icon: Shield },\n { id: 'notifications', label: 'Notifications', Icon: Bell },\n] as const;\n\ntype TabId = (typeof tabs)[number]['id'];\n\n// ---------------------------------------------------------------------------\n// Mock data\n// ---------------------------------------------------------------------------\n\nconst mockDocuments = [\n { name: 'PAN Card', verifiedOn: '15 Dec 2023', status: 'verified' as const },\n { name: 'Aadhar Card', verifiedOn: '15 Dec 2023', status: 'verified' as const },\n { name: 'Bank Statement', verifiedOn: '20 Dec 2023', status: 'uploaded' as const },\n { name: 'Investment Agreement', verifiedOn: '', status: 'template' as const },\n];\n\nconst mockLoginActivity = [\n {\n device: 'Chrome on macOS',\n location: 'Bangalore, India',\n date: '2024-01-16T08:30:00Z',\n current: true,\n },\n {\n device: 'Safari on iPhone',\n location: 'Bangalore, India',\n date: '2024-01-15T19:45:00Z',\n current: false,\n },\n {\n device: 'Chrome on Windows',\n location: 'Mumbai, India',\n date: '2024-01-14T10:20:00Z',\n current: false,\n },\n];\n\nconst sectorOptions = [\n 'Food & Beverage',\n 'Quick Commerce',\n 'Cloud Kitchen',\n 'Retail',\n 'Technology',\n 'Healthcare',\n 'Education',\n 'Logistics',\n 'FinTech',\n];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function InvestorProfilePage() {\n const { currentUser, navigateTo } = useKadaikodi();\n const { data: investments = [] } = useInvestments(currentUser?.id || '');\n\n const [activeTab, setActiveTab] = useState<TabId>('personal');\n const [isEditing, setIsEditing] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [saveMessage, setSaveMessage] = useState('');\n\n const initialProfile = useMemo(\n (): InvestorProfile => ({\n firstName: currentUser?.firstName ?? currentUser?.name?.split(' ')[0] ?? 'Rajesh',\n lastName: currentUser?.lastName ?? currentUser?.name?.split(' ')[1] ?? 'Mehta',\n email: currentUser?.email ?? 'investor@burdenoff.com',\n // phone/profilePicture are not yet part of the currentUser context; use placeholders until they are.\n phone: '+91 98765 43230',\n profileImage: currentUser?.avatar ?? '',\n\n investorType: 'Angel Investor',\n investmentRange: '5L - 25L',\n preferredSectors: ['Food & Beverage', 'Quick Commerce', 'Cloud Kitchen'],\n investmentHorizon: '3-5 years',\n riskProfile: 'Moderate',\n\n companyName: 'Mehta Ventures',\n designation: 'Managing Partner',\n companyWebsite: 'www.mehtaventures.com',\n linkedinProfile: 'linkedin.com/in/rajeshmehta',\n\n address: '456, MG Road',\n city: 'Bangalore',\n state: 'Karnataka',\n country: 'India',\n pincode: '560001',\n }),\n [currentUser]\n );\n\n const [profileData, setProfileData] = useState<InvestorProfile>(initialProfile);\n\n const portfolioStats = useMemo(() => {\n const totalInvested = investments.reduce((sum, inv) => sum + inv.investedAmount, 0);\n const portfolioValue = investments.reduce((sum, inv) => sum + inv.currentValue, 0);\n const totalReturns = investments.reduce((sum, inv) => sum + inv.returns, 0);\n\n return {\n totalInvested,\n portfolioValue,\n totalReturns,\n activeInvestments: investments.length,\n };\n }, [investments]);\n\n const [notifications, setNotifications] = useState<NotificationPreference[]>([\n {\n id: 'opportunities',\n label: 'New Investment Opportunities',\n description: 'Get notified about new investment opportunities matching your profile',\n enabled: true,\n },\n {\n id: 'updates',\n label: 'Portfolio Updates',\n description: 'Regular updates on your portfolio performance',\n enabled: true,\n },\n {\n id: 'reports',\n label: 'Monthly Reports',\n description: 'Detailed monthly investment reports',\n enabled: true,\n },\n {\n id: 'events',\n label: 'Investor Events',\n description: 'Invitations to investor meetups and events',\n enabled: false,\n },\n {\n id: 'news',\n label: 'Market News',\n description: 'Important market news and updates',\n enabled: true,\n },\n {\n id: 'dividends',\n label: 'Dividend Alerts',\n description: 'Notifications when dividends are credited to your account',\n enabled: true,\n },\n ]);\n\n // Security state\n const [showChangePassword, setShowChangePassword] = useState(false);\n const [currentPassword, setCurrentPassword] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showCurrentPassword, setShowCurrentPassword] = useState(false);\n const [showNewPassword, setShowNewPassword] = useState(false);\n const [twoFactorEnabled, setTwoFactorEnabled] = useState(false);\n\n const handleInputChange = useCallback(\n (field: keyof InvestorProfile, value: string | string[]) => {\n setProfileData((prev) => ({ ...prev, [field]: value }));\n },\n []\n );\n\n const handleSave = useCallback(() => {\n setIsSaving(true);\n setTimeout(() => {\n setIsSaving(false);\n setIsEditing(false);\n setSaveMessage('Profile updated successfully!');\n setTimeout(() => setSaveMessage(''), 3000);\n }, 1200);\n }, []);\n\n const handleImageUpload = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onloadend = () => {\n setProfileData((prev) => ({\n ...prev,\n profileImage: reader.result as string,\n }));\n };\n reader.readAsDataURL(file);\n }\n }, []);\n\n const handleToggleNotification = useCallback((id: string) => {\n setNotifications((prev) => prev.map((n) => (n.id === id ? { ...n, enabled: !n.enabled } : n)));\n }, []);\n\n const handleChangePassword = useCallback(() => {\n if (!currentPassword || !newPassword || !confirmPassword) return;\n if (newPassword !== confirmPassword) {\n alert('Passwords do not match');\n return;\n }\n if (newPassword.length < 8) {\n alert('Password must be at least 8 characters');\n return;\n }\n alert('Password changed successfully!');\n setShowChangePassword(false);\n setCurrentPassword('');\n setNewPassword('');\n setConfirmPassword('');\n }, [currentPassword, newPassword, confirmPassword]);\n\n const handleToggle2FA = useCallback(() => {\n setTwoFactorEnabled((prev) => {\n const next = !prev;\n alert(next ? '2FA has been enabled' : '2FA has been disabled');\n return next;\n });\n }, []);\n\n return (\n <PageLayout\n title=\"Investor Profile\"\n description=\"Manage your investment profile and preferences\"\n actions={\n <div className=\"flex items-center gap-2\">\n {saveMessage && (\n <span className=\"text-sm font-medium text-status-success-text\">{saveMessage}</span>\n )}\n {!isEditing ? (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\n className=\"flex items-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Edit3 className=\"h-4 w-4\" />\n Edit Profile\n </button>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => {\n setIsEditing(false);\n setProfileData(initialProfile);\n }}\n className=\"flex items-center gap-2 rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <X className=\"h-4 w-4\" />\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={isSaving}\n className={cn(\n 'flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n isSaving\n ? 'cursor-not-allowed bg-bg-sunken text-text-secondary'\n : 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90'\n )}\n >\n {isSaving ? (\n <>\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Changes\n </>\n )}\n </button>\n </>\n )}\n </div>\n }\n >\n <PagePurpose className=\"mb-6\">\n Your investor identity and how the platform tailors deals to you. Use this page to keep your\n personal and professional details current, set your investment profile (preferred sectors,\n ticket size and risk tolerance) so you see the right opportunities, review your portfolio at a\n glance, and complete KYC so you&apos;re cleared to invest. A complete, verified profile unlocks\n more and better opportunities.\n </PagePurpose>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-4\">\n {/* Sidebar */}\n <div className=\"lg:col-span-1\">\n {/* Profile Card — the one emphasis zone for this page */}\n <EmphasisPanel className=\"p-4 sm:p-6\">\n <div className=\"text-center\">\n <div className=\"relative mx-auto inline-block\">\n <div className=\"h-20 w-20 overflow-hidden rounded-full bg-bg-sunken sm:h-24 sm:w-24\">\n {profileData.profileImage ? (\n <img\n src={profileData.profileImage}\n alt=\"Profile\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"flex h-full w-full items-center justify-center\">\n <User className=\"h-10 w-10 text-text-secondary\" />\n </div>\n )}\n </div>\n {isEditing && (\n <label className=\"absolute bottom-0 right-0 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\">\n <Camera className=\"h-4 w-4\" />\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleImageUpload}\n className=\"hidden\"\n />\n </label>\n )}\n </div>\n <h3 className=\"mt-3 text-base font-semibold text-text-primary sm:text-lg\">\n {profileData.firstName} {profileData.lastName}\n </h3>\n <p className=\"text-sm text-text-secondary\">{profileData.investorType}</p>\n <p className=\"mt-1 truncate text-xs text-text-secondary\">{profileData.companyName}</p>\n </div>\n\n {/* Quick Stats */}\n <div className=\"mt-5 space-y-3 border-t border-border-subtle pt-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Portfolio Value</span>\n <span className=\"text-xs font-semibold text-primary sm:text-sm\">\n {formatCurrency(portfolioStats.portfolioValue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Active Investments</span>\n <span className=\"text-xs font-semibold text-text-primary sm:text-sm\">\n {portfolioStats.activeInvestments}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Total Returns</span>\n <span className=\"text-xs font-semibold text-status-success-text sm:text-sm\">\n +{formatCurrency(portfolioStats.totalReturns, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Total Invested</span>\n <span className=\"text-xs font-semibold text-text-primary sm:text-sm\">\n {formatCurrency(portfolioStats.totalInvested, { minimumFractionDigits: 0 })}\n </span>\n </div>\n </div>\n </EmphasisPanel>\n\n {/* Mobile: Horizontal scrolling tabs */}\n <div className=\"mt-4 flex gap-2 overflow-x-auto pb-2 lg:hidden\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex shrink-0 items-center gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text shadow-sm'\n : 'bg-bg-surface text-text-primary hover:bg-accent'\n )}\n >\n <tab.Icon className=\"h-4 w-4 shrink-0\" />\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Desktop: Vertical tabs */}\n <div className=\"mt-4 hidden space-y-2 lg:block\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg px-4 py-3 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface text-text-primary hover:bg-accent'\n )}\n >\n <tab.Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Content Area */}\n <div className=\"lg:col-span-3\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6 lg:p-8\">\n {/* ==================== Personal Info Tab ==================== */}\n {activeTab === 'personal' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Personal Information\n </h2>\n\n <div className=\"space-y-6\">\n {/* Name & Contact */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n First Name\n </label>\n <input\n type=\"text\"\n value={profileData.firstName}\n onChange={(e) => handleInputChange('firstName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={profileData.lastName}\n onChange={(e) => handleInputChange('lastName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Email Address\n </label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"email\"\n value={profileData.email}\n onChange={(e) => handleInputChange('email', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Phone Number\n </label>\n <div className=\"relative\">\n <Phone className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"tel\"\n value={profileData.phone}\n onChange={(e) => handleInputChange('phone', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </div>\n\n {/* Professional Details */}\n <div className=\"border-t border-border-subtle pt-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-text-primary sm:text-base\">\n Professional Details\n </h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Company/Organization\n </label>\n <div className=\"relative\">\n <Building2 className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={profileData.companyName}\n onChange={(e) => handleInputChange('companyName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Designation\n </label>\n <input\n type=\"text\"\n value={profileData.designation}\n onChange={(e) => handleInputChange('designation', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Company Website\n </label>\n <div className=\"relative\">\n <Globe className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={profileData.companyWebsite}\n onChange={(e) => handleInputChange('companyWebsite', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n LinkedIn Profile\n </label>\n <div className=\"relative\">\n <Linkedin className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={profileData.linkedinProfile}\n onChange={(e) => handleInputChange('linkedinProfile', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </div>\n </div>\n\n {/* Address */}\n <div className=\"border-t border-border-subtle pt-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-text-primary sm:text-base\">\n Address\n </h3>\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Street Address\n </label>\n <textarea\n rows={2}\n value={profileData.address}\n onChange={(e) => handleInputChange('address', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n City\n </label>\n <input\n type=\"text\"\n value={profileData.city}\n onChange={(e) => handleInputChange('city', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n State\n </label>\n <input\n type=\"text\"\n value={profileData.state}\n onChange={(e) => handleInputChange('state', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Country\n </label>\n <input\n type=\"text\"\n value={profileData.country}\n onChange={(e) => handleInputChange('country', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Pincode\n </label>\n <input\n type=\"text\"\n value={profileData.pincode}\n onChange={(e) => handleInputChange('pincode', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ==================== Investment Profile Tab ==================== */}\n {activeTab === 'investment' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Investment Profile\n </h2>\n\n <div className=\"space-y-6\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Investor Type\n </label>\n <select\n value={profileData.investorType}\n onChange={(e) => handleInputChange('investorType', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option>Angel Investor</option>\n <option>Venture Capitalist</option>\n <option>Private Equity</option>\n <option>Strategic Investor</option>\n </select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Investment Range\n </label>\n <select\n value={profileData.investmentRange}\n onChange={(e) => handleInputChange('investmentRange', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option>1L - 5L</option>\n <option>5L - 25L</option>\n <option>25L - 1Cr</option>\n <option>1Cr+</option>\n </select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Investment Horizon\n </label>\n <select\n value={profileData.investmentHorizon}\n onChange={(e) => handleInputChange('investmentHorizon', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option>1-2 years</option>\n <option>3-5 years</option>\n <option>5-7 years</option>\n <option>7+ years</option>\n </select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Risk Profile\n </label>\n <select\n value={profileData.riskProfile}\n onChange={(e) => handleInputChange('riskProfile', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option>Conservative</option>\n <option>Moderate</option>\n <option>Aggressive</option>\n </select>\n </div>\n </div>\n\n {/* Preferred Sectors */}\n <div>\n <label className=\"mb-3 block text-sm font-medium text-text-primary\">\n Preferred Sectors\n </label>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-3\">\n {sectorOptions.map((sector) => (\n <label key={sector} className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={profileData.preferredSectors.includes(sector)}\n onChange={(e) => {\n if (e.target.checked) {\n handleInputChange('preferredSectors', [\n ...profileData.preferredSectors,\n sector,\n ]);\n } else {\n handleInputChange(\n 'preferredSectors',\n profileData.preferredSectors.filter((s) => s !== sector)\n );\n }\n }}\n disabled={!isEditing}\n className=\"h-4 w-4 rounded border-border-subtle text-primary focus:ring-[var(--color-focus-ring)]\"\n />\n <span className=\"text-sm text-text-primary\">{sector}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Risk Tolerance Visual */}\n <div className=\"rounded-lg border border-border-subtle p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <p className=\"text-sm font-medium text-text-primary\">Risk Tolerance</p>\n <span\n className={cn(\n 'text-sm font-semibold',\n profileData.riskProfile === 'Conservative'\n ? 'text-status-success-text'\n : profileData.riskProfile === 'Moderate'\n ? 'text-status-warning-text'\n : 'text-status-error-text'\n )}\n >\n {profileData.riskProfile}\n </span>\n </div>\n <div className=\"flex gap-1\">\n {(['Conservative', 'Moderate', 'Aggressive'] as const).map((level) => (\n <div\n key={level}\n className={cn(\n 'h-2.5 flex-1 rounded-full',\n level === 'Conservative' && 'bg-status-success-bg-subtle',\n level === 'Moderate' && 'bg-status-warning-bg-subtle',\n level === 'Aggressive' && 'bg-status-error-bg-subtle',\n level === profileData.riskProfile &&\n level === 'Conservative' &&\n 'bg-status-success-text',\n level === profileData.riskProfile &&\n level === 'Moderate' &&\n 'bg-status-warning-text',\n level === profileData.riskProfile &&\n level === 'Aggressive' &&\n 'bg-status-error-text'\n )}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ==================== Portfolio Tab ==================== */}\n {activeTab === 'portfolio' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Investment Portfolio\n </h2>\n\n {/* Portfolio Summary */}\n <div className=\"mb-8 grid grid-cols-2 gap-4 sm:grid-cols-4 sm:gap-6\">\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <DollarSign className=\"mb-2 h-7 w-7 text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(portfolioStats.totalInvested, {\n minimumFractionDigits: 0,\n notation: 'compact',\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Total Invested</div>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <Briefcase className=\"mb-2 h-7 w-7 text-text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {portfolioStats.activeInvestments}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Active Investments</div>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <TrendingUp className=\"mb-2 h-7 w-7 text-status-success-text sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(portfolioStats.totalReturns, {\n minimumFractionDigits: 0,\n notation: 'compact',\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Total Returns</div>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <PieChart className=\"mb-2 h-7 w-7 text-text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(portfolioStats.portfolioValue, {\n minimumFractionDigits: 0,\n notation: 'compact',\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Portfolio Value</div>\n </div>\n </div>\n\n {/* Active Investments List */}\n <div>\n <h3 className=\"mb-4 text-base font-semibold text-text-primary\">\n Active Investments\n </h3>\n {investments.length === 0 ? (\n <p className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 text-sm text-text-secondary\">\n You don&apos;t have any active investments yet. Explore opportunities to start\n building your portfolio.\n </p>\n ) : (\n <div className=\"space-y-3\">\n {investments.map((investment, index) => (\n <div\n key={index}\n className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-4\"\n >\n <div className=\"mb-3 flex items-start justify-between\">\n <h4 className=\"text-sm font-medium text-text-primary sm:text-base\">\n {investment.cartName}\n </h4>\n <span\n className={cn(\n 'text-sm font-semibold',\n investment.returns > 0\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n {investment.returns > 0 ? '+' : ''}\n {investment.returns}%\n </span>\n </div>\n <div className=\"grid grid-cols-1 gap-3 text-sm sm:grid-cols-3\">\n <div>\n <span className=\"text-text-secondary\">Invested: </span>\n <span className=\"font-medium text-text-primary\">\n {formatCurrency(investment.investedAmount, {\n minimumFractionDigits: 0,\n })}\n </span>\n </div>\n <div>\n <span className=\"text-text-secondary\">Current Value: </span>\n <span className=\"font-medium text-text-primary\">\n {formatCurrency(investment.currentValue, {\n minimumFractionDigits: 0,\n })}\n </span>\n </div>\n <div>\n <span className=\"text-text-secondary\">Returns: </span>\n <span className=\"font-medium text-status-success-text\">\n {formatCurrency(investment.currentValue - investment.investedAmount, {\n minimumFractionDigits: 0,\n })}\n </span>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ==================== Documents Tab ==================== */}\n {activeTab === 'documents' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Documents & KYC\n </h2>\n\n <div className=\"space-y-6\">\n {/* KYC Status */}\n <div className=\"flex items-center gap-2 rounded-lg bg-status-success-bg-subtle px-4 py-3\">\n <CheckCircle2 className=\"h-5 w-5 text-status-success-text\" />\n <p className=\"text-sm font-medium text-status-success-text\">\n Your KYC is complete and verified\n </p>\n </div>\n\n {/* Document Cards */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n {mockDocuments.map((doc) => (\n <div\n key={doc.name}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\"\n >\n <FileText className=\"mb-3 h-8 w-8 text-primary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">{doc.name}</h3>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {doc.status === 'verified'\n ? `Verified on ${doc.verifiedOn}`\n : doc.status === 'uploaded'\n ? `Uploaded on ${doc.verifiedOn}`\n : 'Template available'}\n </p>\n <div className=\"mt-3 flex items-center gap-2\">\n {doc.status === 'verified' && (\n <span className=\"flex items-center gap-1 rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs font-medium text-status-success-text\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Verified\n </span>\n )}\n {doc.status === 'uploaded' && (\n <span className=\"flex items-center gap-1 rounded-full bg-[var(--color-accent-soft)] px-2 py-0.5 text-xs font-medium text-text-primary\">\n <FileText className=\"h-3 w-3\" />\n Uploaded\n </span>\n )}\n <button\n type=\"button\"\n onClick={() =>\n alert(\n doc.status === 'template'\n ? `Downloading ${doc.name} template...`\n : `Viewing ${doc.name}...`\n )\n }\n className=\"rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n {doc.status === 'template' ? 'Download Template' : 'View Document'}\n </button>\n </div>\n </div>\n ))}\n </div>\n\n {/* Upload New Document */}\n {isEditing && (\n <div className=\"rounded-lg border-2 border-dashed border-border-subtle p-6 text-center\">\n <FileText className=\"mx-auto mb-2 h-8 w-8 text-text-secondary\" />\n <p className=\"text-sm font-medium text-text-primary\">Upload New Document</p>\n <p className=\"mt-1 text-xs text-text-secondary\">\n PDF, JPG, or PNG up to 10MB\n </p>\n <label className=\"mt-3 inline-block cursor-pointer rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\">\n Choose File\n <input type=\"file\" accept=\".pdf,.jpg,.png\" className=\"hidden\" />\n </label>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ==================== Security Tab ==================== */}\n {activeTab === 'security' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Security Settings\n </h2>\n\n <div className=\"space-y-6\">\n {/* Change Password */}\n <div className=\"rounded-lg border border-border-subtle p-4 sm:p-6\">\n <div className=\"flex items-center gap-3 mb-3\">\n <Lock className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">Change Password</h3>\n </div>\n <p className=\"mb-4 text-sm text-text-secondary\">\n Update your password regularly to keep your account secure\n </p>\n\n {showChangePassword ? (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Current Password\n </label>\n <div className=\"relative\">\n <input\n type={showCurrentPassword ? 'text' : 'password'}\n value={currentPassword}\n onChange={(e) => setCurrentPassword(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 pr-10 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n <button\n type=\"button\"\n onClick={() => setShowCurrentPassword(!showCurrentPassword)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n {showCurrentPassword ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n New Password\n </label>\n <div className=\"relative\">\n <input\n type={showNewPassword ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 pr-10 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n <button\n type=\"button\"\n onClick={() => setShowNewPassword(!showNewPassword)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n {showNewPassword ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Confirm New Password\n </label>\n <input\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"flex gap-3\">\n <button\n type=\"button\"\n onClick={handleChangePassword}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n Update Password\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowChangePassword(false);\n setCurrentPassword('');\n setNewPassword('');\n setConfirmPassword('');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => setShowChangePassword(true)}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Change Password\n </button>\n )}\n </div>\n\n {/* Two-Factor Authentication */}\n <div className=\"rounded-lg border border-border-subtle p-4 sm:p-6\">\n <div className=\"flex items-center gap-3 mb-3\">\n <Smartphone className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">\n Two-Factor Authentication\n </h3>\n </div>\n <p className=\"mb-4 text-sm text-text-secondary\">\n Add an extra layer of security to your investment account\n </p>\n <div className=\"flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3\">\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n twoFactorEnabled\n ? 'bg-status-success-bg-subtle text-status-success-text'\n : 'bg-bg-sunken text-text-secondary'\n )}\n >\n {twoFactorEnabled ? 'Enabled' : 'Disabled'}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={handleToggle2FA}\n className={cn(\n 'rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n twoFactorEnabled\n ? 'border border-border-subtle text-text-primary hover:bg-accent'\n : 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90'\n )}\n >\n {twoFactorEnabled ? 'Disable 2FA' : 'Enable 2FA'}\n </button>\n </div>\n </div>\n\n {/* Login Activity */}\n <div className=\"rounded-lg border border-border-subtle p-4 sm:p-6\">\n <div className=\"flex items-center gap-3 mb-4\">\n <Monitor className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">Login Activity</h3>\n </div>\n <div className=\"space-y-3\">\n {mockLoginActivity.map((activity, index) => (\n <div\n key={index}\n className=\"flex items-center justify-between rounded-lg bg-bg-sunken/30 p-3\"\n >\n <div>\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium text-text-primary\">\n {activity.device}\n </p>\n {activity.current && (\n <span className=\"rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs font-medium text-status-success-text\">\n Current\n </span>\n )}\n </div>\n <div className=\"mt-1 flex items-center gap-2 text-xs text-text-secondary\">\n <MapPin className=\"h-3 w-3\" />\n <span>{activity.location}</span>\n <span>&bull;</span>\n <span>\n {formatDate(activity.date, { hour: 'numeric', minute: '2-digit' })}\n </span>\n </div>\n </div>\n {!activity.current && (\n <button\n type=\"button\"\n onClick={() => alert('Session revoked')}\n className=\"rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Revoke\n </button>\n )}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ==================== Notifications Tab ==================== */}\n {activeTab === 'notifications' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Notification Preferences\n </h2>\n\n <div className=\"space-y-4\">\n {notifications.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between rounded-lg border border-border-subtle bg-bg-sunken/30 p-4\"\n >\n <div className=\"flex-1 pr-4\">\n <h4 className=\"text-sm font-medium text-text-primary\">{item.label}</h4>\n <p className=\"mt-0.5 text-xs text-text-secondary sm:text-sm\">\n {item.description}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n if (isEditing) handleToggleNotification(item.id);\n }}\n disabled={!isEditing}\n className={cn(\n 'relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full transition-colors duration-200',\n item.enabled ? 'bg-action-primary-bg' : 'bg-bg-sunken',\n !isEditing && 'cursor-not-allowed opacity-60'\n )}\n >\n <span\n className={cn(\n 'pointer-events-none inline-block h-5 w-5 translate-y-0.5 rounded-full bg-white shadow ring-0 transition-transform duration-200',\n item.enabled ? 'translate-x-5' : 'translate-x-0.5'\n )}\n />\n </button>\n </div>\n ))}\n\n {/* Notification Summary */}\n <div className=\"mt-4 rounded-lg border border-border-subtle bg-bg-sunken/50 p-4\">\n <p className=\"text-sm text-text-secondary\">\n {notifications.filter((n) => n.enabled).length} of {notifications.length}{' '}\n notification types enabled.\n {!isEditing && (\n <span className=\"ml-1\">\n Click &quot;Edit Profile&quot; to modify preferences.\n </span>\n )}\n </p>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"InvestorProfilePage.js","names":[],"sources":["../../../../src/kadaikodi/pages/investor/InvestorProfilePage.tsx"],"sourcesContent":["/**\n * Investor Profile Page\n * @module kadaikodi/pages/investor\n *\n * Edit mode toggle, 6-tab system (personal/investment/portfolio/documents/\n * security/notifications), image upload, form fields for personal/professional/\n * address, investment profile with selects, preferred sectors checkboxes,\n * portfolio summary with active investments list, documents/KYC tab,\n * security tab (change password/2FA/login activity), notification toggles.\n */\n\nimport { useState, useCallback, useMemo } from 'react';\nimport {\n User,\n Mail,\n Phone,\n Camera,\n Save,\n X,\n Shield,\n Bell,\n TrendingUp,\n FileText,\n PieChart,\n Briefcase,\n DollarSign,\n Eye,\n EyeOff,\n Lock,\n Smartphone,\n Monitor,\n Edit3,\n Globe,\n Linkedin,\n Building2,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useKadaikodi } from '../../context/KadaikodiContext';\nimport { useInvestments } from '../../hooks/useKadaikodiApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InvestorProfile {\n // Personal Information\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n profileImage: string;\n\n // Investment Profile\n investorType: string;\n investmentRange: string;\n preferredSectors: string[];\n investmentHorizon: string;\n riskProfile: string;\n\n // Company/Organization Details\n companyName: string;\n designation: string;\n companyWebsite: string;\n linkedinProfile: string;\n\n // Address\n address: string;\n city: string;\n state: string;\n country: string;\n pincode: string;\n\n // Portfolio\n portfolioValue?: number;\n activeInvestments?: number;\n totalReturns?: number;\n totalInvested?: number;\n}\n\ninterface NotificationPreference {\n id: string;\n label: string;\n description: string;\n enabled: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Tab definition\n// ---------------------------------------------------------------------------\n\nconst tabs = [\n { id: 'personal', label: 'Personal Info', Icon: User },\n { id: 'investment', label: 'Investment Profile', Icon: TrendingUp },\n { id: 'portfolio', label: 'Portfolio', Icon: PieChart },\n { id: 'documents', label: 'Documents', Icon: FileText },\n { id: 'security', label: 'Security', Icon: Shield },\n { id: 'notifications', label: 'Notifications', Icon: Bell },\n] as const;\n\ntype TabId = (typeof tabs)[number]['id'];\n\n// ---------------------------------------------------------------------------\n// Static option lists (preference selectors — local UI state, not fabricated data)\n// ---------------------------------------------------------------------------\n\nconst sectorOptions = [\n 'Food & Beverage',\n 'Quick Commerce',\n 'Cloud Kitchen',\n 'Retail',\n 'Technology',\n 'Healthcare',\n 'Education',\n 'Logistics',\n 'FinTech',\n];\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function InvestorProfilePage() {\n const { currentUser, navigateTo } = useKadaikodi();\n const { data: investments = [] } = useInvestments(currentUser?.id || '');\n\n const [activeTab, setActiveTab] = useState<TabId>('personal');\n const [isEditing, setIsEditing] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [saveMessage, setSaveMessage] = useState('');\n\n const initialProfile = useMemo(\n (): InvestorProfile => ({\n // Identity comes from the signed-in user only — never fabricated.\n firstName: currentUser?.firstName ?? currentUser?.name?.split(' ')[0] ?? '',\n lastName: currentUser?.lastName ?? currentUser?.name?.split(' ').slice(1).join(' ') ?? '',\n email: currentUser?.email ?? '',\n phone: currentUser?.phone ?? '',\n profileImage: currentUser?.avatar ?? currentUser?.profilePicture ?? '',\n\n // Investment preferences are editable local settings — default to unset.\n investorType: '',\n investmentRange: '',\n preferredSectors: [],\n investmentHorizon: '',\n riskProfile: '',\n\n companyName: '',\n designation: '',\n companyWebsite: '',\n linkedinProfile: '',\n\n address: '',\n city: '',\n state: '',\n country: '',\n pincode: '',\n }),\n [currentUser]\n );\n\n const [profileData, setProfileData] = useState<InvestorProfile>(initialProfile);\n\n const portfolioStats = useMemo(() => {\n const totalInvested = investments.reduce((sum, inv) => sum + inv.investedAmount, 0);\n const portfolioValue = investments.reduce((sum, inv) => sum + inv.currentValue, 0);\n const totalReturns = investments.reduce((sum, inv) => sum + inv.returns, 0);\n\n return {\n totalInvested,\n portfolioValue,\n totalReturns,\n activeInvestments: investments.length,\n };\n }, [investments]);\n\n const [notifications, setNotifications] = useState<NotificationPreference[]>([\n {\n id: 'opportunities',\n label: 'New Investment Opportunities',\n description: 'Get notified about new investment opportunities matching your profile',\n enabled: true,\n },\n {\n id: 'updates',\n label: 'Portfolio Updates',\n description: 'Regular updates on your portfolio performance',\n enabled: true,\n },\n {\n id: 'reports',\n label: 'Monthly Reports',\n description: 'Detailed monthly investment reports',\n enabled: true,\n },\n {\n id: 'events',\n label: 'Investor Events',\n description: 'Invitations to investor meetups and events',\n enabled: false,\n },\n {\n id: 'news',\n label: 'Market News',\n description: 'Important market news and updates',\n enabled: true,\n },\n {\n id: 'dividends',\n label: 'Dividend Alerts',\n description: 'Notifications when dividends are credited to your account',\n enabled: true,\n },\n ]);\n\n // Security state\n const [showChangePassword, setShowChangePassword] = useState(false);\n const [currentPassword, setCurrentPassword] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [showCurrentPassword, setShowCurrentPassword] = useState(false);\n const [showNewPassword, setShowNewPassword] = useState(false);\n const [twoFactorEnabled, setTwoFactorEnabled] = useState(false);\n\n const handleInputChange = useCallback(\n (field: keyof InvestorProfile, value: string | string[]) => {\n setProfileData((prev) => ({ ...prev, [field]: value }));\n },\n []\n );\n\n const handleSave = useCallback(() => {\n setIsSaving(true);\n setTimeout(() => {\n setIsSaving(false);\n setIsEditing(false);\n setSaveMessage('Profile updated successfully!');\n setTimeout(() => setSaveMessage(''), 3000);\n }, 1200);\n }, []);\n\n const handleImageUpload = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onloadend = () => {\n setProfileData((prev) => ({\n ...prev,\n profileImage: reader.result as string,\n }));\n };\n reader.readAsDataURL(file);\n }\n }, []);\n\n const handleToggleNotification = useCallback((id: string) => {\n setNotifications((prev) => prev.map((n) => (n.id === id ? { ...n, enabled: !n.enabled } : n)));\n }, []);\n\n const handleChangePassword = useCallback(() => {\n if (!currentPassword || !newPassword || !confirmPassword) return;\n if (newPassword !== confirmPassword) {\n alert('Passwords do not match');\n return;\n }\n if (newPassword.length < 8) {\n alert('Password must be at least 8 characters');\n return;\n }\n alert('Password changed successfully!');\n setShowChangePassword(false);\n setCurrentPassword('');\n setNewPassword('');\n setConfirmPassword('');\n }, [currentPassword, newPassword, confirmPassword]);\n\n const handleToggle2FA = useCallback(() => {\n setTwoFactorEnabled((prev) => {\n const next = !prev;\n alert(next ? '2FA has been enabled' : '2FA has been disabled');\n return next;\n });\n }, []);\n\n return (\n <PageLayout\n title=\"Investor Profile\"\n description=\"Manage your investment profile and preferences\"\n actions={\n <div className=\"flex items-center gap-2\">\n {saveMessage && (\n <span className=\"text-sm font-medium text-status-success-text\">{saveMessage}</span>\n )}\n {!isEditing ? (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\n className=\"flex items-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Edit3 className=\"h-4 w-4\" />\n Edit Profile\n </button>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => {\n setIsEditing(false);\n setProfileData(initialProfile);\n }}\n className=\"flex items-center gap-2 rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <X className=\"h-4 w-4\" />\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={isSaving}\n className={cn(\n 'flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n isSaving\n ? 'cursor-not-allowed bg-bg-sunken text-text-secondary'\n : 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90'\n )}\n >\n {isSaving ? (\n <>\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Changes\n </>\n )}\n </button>\n </>\n )}\n </div>\n }\n >\n <PagePurpose className=\"mb-6\">\n Your investor identity and how the platform tailors deals to you. Use this page to keep your\n personal and professional details current, set your investment profile (preferred sectors,\n ticket size and risk tolerance) so you see the right opportunities, review your portfolio at\n a glance, and complete KYC so you&apos;re cleared to invest. A complete, verified profile\n unlocks more and better opportunities.\n </PagePurpose>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-4\">\n {/* Sidebar */}\n <div className=\"lg:col-span-1\">\n {/* Profile Card — the one emphasis zone for this page */}\n <EmphasisPanel className=\"p-4 sm:p-6\">\n <div className=\"text-center\">\n <div className=\"relative mx-auto inline-block\">\n <div className=\"h-20 w-20 overflow-hidden rounded-full bg-bg-sunken sm:h-24 sm:w-24\">\n {profileData.profileImage ? (\n <img\n src={profileData.profileImage}\n alt=\"Profile\"\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"flex h-full w-full items-center justify-center\">\n <User className=\"h-10 w-10 text-text-secondary\" />\n </div>\n )}\n </div>\n {isEditing && (\n <label className=\"absolute bottom-0 right-0 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\">\n <Camera className=\"h-4 w-4\" />\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleImageUpload}\n className=\"hidden\"\n />\n </label>\n )}\n </div>\n <h3 className=\"mt-3 text-base font-semibold text-text-primary sm:text-lg\">\n {profileData.firstName} {profileData.lastName}\n </h3>\n <p className=\"text-sm text-text-secondary\">{profileData.investorType}</p>\n <p className=\"mt-1 truncate text-xs text-text-secondary\">{profileData.companyName}</p>\n </div>\n\n {/* Quick Stats */}\n <div className=\"mt-5 space-y-3 border-t border-border-subtle pt-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Portfolio Value</span>\n <span className=\"text-xs font-semibold text-primary sm:text-sm\">\n {formatCurrency(portfolioStats.portfolioValue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Active Investments</span>\n <span className=\"text-xs font-semibold text-text-primary sm:text-sm\">\n {portfolioStats.activeInvestments}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Total Returns</span>\n <span className=\"text-xs font-semibold text-status-success-text sm:text-sm\">\n +{formatCurrency(portfolioStats.totalReturns, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs text-text-secondary sm:text-sm\">Total Invested</span>\n <span className=\"text-xs font-semibold text-text-primary sm:text-sm\">\n {formatCurrency(portfolioStats.totalInvested, { minimumFractionDigits: 0 })}\n </span>\n </div>\n </div>\n </EmphasisPanel>\n\n {/* Mobile: Horizontal scrolling tabs */}\n <div className=\"mt-4 flex gap-2 overflow-x-auto pb-2 lg:hidden\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex shrink-0 items-center gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text shadow-sm'\n : 'bg-bg-surface text-text-primary hover:bg-accent'\n )}\n >\n <tab.Icon className=\"h-4 w-4 shrink-0\" />\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Desktop: Vertical tabs */}\n <div className=\"mt-4 hidden space-y-2 lg:block\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg px-4 py-3 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface text-text-primary hover:bg-accent'\n )}\n >\n <tab.Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Content Area */}\n <div className=\"lg:col-span-3\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6 lg:p-8\">\n {/* ==================== Personal Info Tab ==================== */}\n {activeTab === 'personal' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Personal Information\n </h2>\n\n <div className=\"space-y-6\">\n {/* Name & Contact */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n First Name\n </label>\n <input\n type=\"text\"\n value={profileData.firstName}\n onChange={(e) => handleInputChange('firstName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={profileData.lastName}\n onChange={(e) => handleInputChange('lastName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Email Address\n </label>\n <div className=\"relative\">\n <Mail className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"email\"\n value={profileData.email}\n onChange={(e) => handleInputChange('email', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Phone Number\n </label>\n <div className=\"relative\">\n <Phone className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"tel\"\n value={profileData.phone}\n onChange={(e) => handleInputChange('phone', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </div>\n\n {/* Professional Details */}\n <div className=\"border-t border-border-subtle pt-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-text-primary sm:text-base\">\n Professional Details\n </h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Company/Organization\n </label>\n <div className=\"relative\">\n <Building2 className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={profileData.companyName}\n onChange={(e) => handleInputChange('companyName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Designation\n </label>\n <input\n type=\"text\"\n value={profileData.designation}\n onChange={(e) => handleInputChange('designation', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Company Website\n </label>\n <div className=\"relative\">\n <Globe className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={profileData.companyWebsite}\n onChange={(e) => handleInputChange('companyWebsite', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n LinkedIn Profile\n </label>\n <div className=\"relative\">\n <Linkedin className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={profileData.linkedinProfile}\n onChange={(e) => handleInputChange('linkedinProfile', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-10 pr-3 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </div>\n </div>\n\n {/* Address */}\n <div className=\"border-t border-border-subtle pt-6\">\n <h3 className=\"mb-4 text-sm font-semibold text-text-primary sm:text-base\">\n Address\n </h3>\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Street Address\n </label>\n <textarea\n rows={2}\n value={profileData.address}\n onChange={(e) => handleInputChange('address', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n City\n </label>\n <input\n type=\"text\"\n value={profileData.city}\n onChange={(e) => handleInputChange('city', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n State\n </label>\n <input\n type=\"text\"\n value={profileData.state}\n onChange={(e) => handleInputChange('state', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Country\n </label>\n <input\n type=\"text\"\n value={profileData.country}\n onChange={(e) => handleInputChange('country', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Pincode\n </label>\n <input\n type=\"text\"\n value={profileData.pincode}\n onChange={(e) => handleInputChange('pincode', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ==================== Investment Profile Tab ==================== */}\n {activeTab === 'investment' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Investment Profile\n </h2>\n\n <div className=\"space-y-6\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Investor Type\n </label>\n <select\n value={profileData.investorType}\n onChange={(e) => handleInputChange('investorType', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">Select investor type</option>\n <option>Angel Investor</option>\n <option>Venture Capitalist</option>\n <option>Private Equity</option>\n <option>Strategic Investor</option>\n </select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Investment Range\n </label>\n <select\n value={profileData.investmentRange}\n onChange={(e) => handleInputChange('investmentRange', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">Select range</option>\n <option>1L - 5L</option>\n <option>5L - 25L</option>\n <option>25L - 1Cr</option>\n <option>1Cr+</option>\n </select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Investment Horizon\n </label>\n <select\n value={profileData.investmentHorizon}\n onChange={(e) => handleInputChange('investmentHorizon', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">Select horizon</option>\n <option>1-2 years</option>\n <option>3-5 years</option>\n <option>5-7 years</option>\n <option>7+ years</option>\n </select>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Risk Profile\n </label>\n <select\n value={profileData.riskProfile}\n onChange={(e) => handleInputChange('riskProfile', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">Select risk profile</option>\n <option>Conservative</option>\n <option>Moderate</option>\n <option>Aggressive</option>\n </select>\n </div>\n </div>\n\n {/* Preferred Sectors */}\n <div>\n <label className=\"mb-3 block text-sm font-medium text-text-primary\">\n Preferred Sectors\n </label>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-3\">\n {sectorOptions.map((sector) => (\n <label key={sector} className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={profileData.preferredSectors.includes(sector)}\n onChange={(e) => {\n if (e.target.checked) {\n handleInputChange('preferredSectors', [\n ...profileData.preferredSectors,\n sector,\n ]);\n } else {\n handleInputChange(\n 'preferredSectors',\n profileData.preferredSectors.filter((s) => s !== sector)\n );\n }\n }}\n disabled={!isEditing}\n className=\"h-4 w-4 rounded border-border-subtle text-primary focus:ring-[var(--color-focus-ring)]\"\n />\n <span className=\"text-sm text-text-primary\">{sector}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Risk Tolerance Visual */}\n <div className=\"rounded-lg border border-border-subtle p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <p className=\"text-sm font-medium text-text-primary\">Risk Tolerance</p>\n <span\n className={cn(\n 'text-sm font-semibold',\n profileData.riskProfile === 'Conservative'\n ? 'text-status-success-text'\n : profileData.riskProfile === 'Moderate'\n ? 'text-status-warning-text'\n : 'text-status-error-text'\n )}\n >\n {profileData.riskProfile}\n </span>\n </div>\n <div className=\"flex gap-1\">\n {(['Conservative', 'Moderate', 'Aggressive'] as const).map((level) => (\n <div\n key={level}\n className={cn(\n 'h-2.5 flex-1 rounded-full',\n level === 'Conservative' && 'bg-status-success-bg-subtle',\n level === 'Moderate' && 'bg-status-warning-bg-subtle',\n level === 'Aggressive' && 'bg-status-error-bg-subtle',\n level === profileData.riskProfile &&\n level === 'Conservative' &&\n 'bg-status-success-text',\n level === profileData.riskProfile &&\n level === 'Moderate' &&\n 'bg-status-warning-text',\n level === profileData.riskProfile &&\n level === 'Aggressive' &&\n 'bg-status-error-text'\n )}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ==================== Portfolio Tab ==================== */}\n {activeTab === 'portfolio' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Investment Portfolio\n </h2>\n\n {/* Portfolio Summary */}\n <div className=\"mb-8 grid grid-cols-2 gap-4 sm:grid-cols-4 sm:gap-6\">\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <DollarSign className=\"mb-2 h-7 w-7 text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(portfolioStats.totalInvested, {\n minimumFractionDigits: 0,\n notation: 'compact',\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Total Invested</div>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <Briefcase className=\"mb-2 h-7 w-7 text-text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {portfolioStats.activeInvestments}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Active Investments</div>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <TrendingUp className=\"mb-2 h-7 w-7 text-status-success-text sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(portfolioStats.totalReturns, {\n minimumFractionDigits: 0,\n notation: 'compact',\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Total Returns</div>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <PieChart className=\"mb-2 h-7 w-7 text-text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(portfolioStats.portfolioValue, {\n minimumFractionDigits: 0,\n notation: 'compact',\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Portfolio Value</div>\n </div>\n </div>\n\n {/* Active Investments List */}\n <div>\n <h3 className=\"mb-4 text-base font-semibold text-text-primary\">\n Active Investments\n </h3>\n {investments.length === 0 ? (\n <p className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-4 text-sm text-text-secondary\">\n You don&apos;t have any active investments yet. Explore opportunities to start\n building your portfolio.\n </p>\n ) : (\n <div className=\"space-y-3\">\n {investments.map((investment, index) => (\n <div\n key={index}\n className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-4\"\n >\n <div className=\"mb-3 flex items-start justify-between\">\n <h4 className=\"text-sm font-medium text-text-primary sm:text-base\">\n {investment.cartName}\n </h4>\n <span\n className={cn(\n 'text-sm font-semibold',\n investment.returnsPercentage >= 0\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n {investment.returnsPercentage >= 0 ? '+' : ''}\n {investment.returnsPercentage}%\n </span>\n </div>\n <div className=\"grid grid-cols-1 gap-3 text-sm sm:grid-cols-3\">\n <div>\n <span className=\"text-text-secondary\">Invested: </span>\n <span className=\"font-medium text-text-primary\">\n {formatCurrency(investment.investedAmount, {\n minimumFractionDigits: 0,\n })}\n </span>\n </div>\n <div>\n <span className=\"text-text-secondary\">Current Value: </span>\n <span className=\"font-medium text-text-primary\">\n {formatCurrency(investment.currentValue, {\n minimumFractionDigits: 0,\n })}\n </span>\n </div>\n <div>\n <span className=\"text-text-secondary\">Returns: </span>\n <span className=\"font-medium text-status-success-text\">\n {formatCurrency(\n investment.currentValue - investment.investedAmount,\n {\n minimumFractionDigits: 0,\n }\n )}\n </span>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ==================== Documents Tab ==================== */}\n {activeTab === 'documents' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Documents & KYC\n </h2>\n\n <div className=\"space-y-6\">\n {/* No KYC/documents backend yet — honest empty state rather than fabricated records. */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken/30 p-6 text-center\">\n <FileText className=\"mx-auto mb-3 h-10 w-10 text-text-secondary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">\n No documents on file yet\n </h3>\n <p className=\"mx-auto mt-1 max-w-md text-sm text-text-secondary\">\n Your KYC and investment documents will appear here once uploaded. Complete\n verification to unlock more opportunities.\n </p>\n </div>\n\n {/* Upload New Document */}\n {isEditing && (\n <div className=\"rounded-lg border-2 border-dashed border-border-subtle p-6 text-center\">\n <FileText className=\"mx-auto mb-2 h-8 w-8 text-text-secondary\" />\n <p className=\"text-sm font-medium text-text-primary\">Upload New Document</p>\n <p className=\"mt-1 text-xs text-text-secondary\">\n PDF, JPG, or PNG up to 10MB\n </p>\n <label className=\"mt-3 inline-block cursor-pointer rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\">\n Choose File\n <input type=\"file\" accept=\".pdf,.jpg,.png\" className=\"hidden\" />\n </label>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ==================== Security Tab ==================== */}\n {activeTab === 'security' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Security Settings\n </h2>\n\n <div className=\"space-y-6\">\n {/* Change Password */}\n <div className=\"rounded-lg border border-border-subtle p-4 sm:p-6\">\n <div className=\"flex items-center gap-3 mb-3\">\n <Lock className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">Change Password</h3>\n </div>\n <p className=\"mb-4 text-sm text-text-secondary\">\n Update your password regularly to keep your account secure\n </p>\n\n {showChangePassword ? (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Current Password\n </label>\n <div className=\"relative\">\n <input\n type={showCurrentPassword ? 'text' : 'password'}\n value={currentPassword}\n onChange={(e) => setCurrentPassword(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 pr-10 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n <button\n type=\"button\"\n onClick={() => setShowCurrentPassword(!showCurrentPassword)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n {showCurrentPassword ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n New Password\n </label>\n <div className=\"relative\">\n <input\n type={showNewPassword ? 'text' : 'password'}\n value={newPassword}\n onChange={(e) => setNewPassword(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 pr-10 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n <button\n type=\"button\"\n onClick={() => setShowNewPassword(!showNewPassword)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n {showNewPassword ? (\n <EyeOff className=\"h-4 w-4\" />\n ) : (\n <Eye className=\"h-4 w-4\" />\n )}\n </button>\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-text-primary\">\n Confirm New Password\n </label>\n <input\n type=\"password\"\n value={confirmPassword}\n onChange={(e) => setConfirmPassword(e.target.value)}\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"flex gap-3\">\n <button\n type=\"button\"\n onClick={handleChangePassword}\n className=\"rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n Update Password\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowChangePassword(false);\n setCurrentPassword('');\n setNewPassword('');\n setConfirmPassword('');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n </div>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => setShowChangePassword(true)}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Change Password\n </button>\n )}\n </div>\n\n {/* Two-Factor Authentication */}\n <div className=\"rounded-lg border border-border-subtle p-4 sm:p-6\">\n <div className=\"flex items-center gap-3 mb-3\">\n <Smartphone className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">\n Two-Factor Authentication\n </h3>\n </div>\n <p className=\"mb-4 text-sm text-text-secondary\">\n Add an extra layer of security to your investment account\n </p>\n <div className=\"flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3\">\n <div className=\"flex items-center gap-2\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n twoFactorEnabled\n ? 'bg-status-success-bg-subtle text-status-success-text'\n : 'bg-bg-sunken text-text-secondary'\n )}\n >\n {twoFactorEnabled ? 'Enabled' : 'Disabled'}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={handleToggle2FA}\n className={cn(\n 'rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n twoFactorEnabled\n ? 'border border-border-subtle text-text-primary hover:bg-accent'\n : 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90'\n )}\n >\n {twoFactorEnabled ? 'Disable 2FA' : 'Enable 2FA'}\n </button>\n </div>\n </div>\n\n {/* Login Activity */}\n <div className=\"rounded-lg border border-border-subtle p-4 sm:p-6\">\n <div className=\"flex items-center gap-3 mb-4\">\n <Monitor className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-base font-semibold text-text-primary\">Login Activity</h3>\n </div>\n <p className=\"rounded-lg bg-bg-sunken/30 p-4 text-sm text-text-secondary\">\n Recent sign-in sessions for your account will be listed here.\n </p>\n </div>\n </div>\n </div>\n )}\n\n {/* ==================== Notifications Tab ==================== */}\n {activeTab === 'notifications' && (\n <div>\n <h2 className=\"mb-6 text-lg font-semibold text-text-primary sm:text-xl\">\n Notification Preferences\n </h2>\n\n <div className=\"space-y-4\">\n {notifications.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between rounded-lg border border-border-subtle bg-bg-sunken/30 p-4\"\n >\n <div className=\"flex-1 pr-4\">\n <h4 className=\"text-sm font-medium text-text-primary\">{item.label}</h4>\n <p className=\"mt-0.5 text-xs text-text-secondary sm:text-sm\">\n {item.description}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n if (isEditing) handleToggleNotification(item.id);\n }}\n disabled={!isEditing}\n className={cn(\n 'relative inline-flex h-6 w-11 shrink-0 cursor-pointer rounded-full transition-colors duration-200',\n item.enabled ? 'bg-action-primary-bg' : 'bg-bg-sunken',\n !isEditing && 'cursor-not-allowed opacity-60'\n )}\n >\n <span\n className={cn(\n 'pointer-events-none inline-block h-5 w-5 translate-y-0.5 rounded-full bg-white shadow ring-0 transition-transform duration-200',\n item.enabled ? 'translate-x-5' : 'translate-x-0.5'\n )}\n />\n </button>\n </div>\n ))}\n\n {/* Notification Summary */}\n <div className=\"mt-4 rounded-lg border border-border-subtle bg-bg-sunken/50 p-4\">\n <p className=\"text-sm text-text-secondary\">\n {notifications.filter((n) => n.enabled).length} of {notifications.length}{' '}\n notification types enabled.\n {!isEditing && (\n <span className=\"ml-1\">\n Click &quot;Edit Profile&quot; to modify preferences.\n </span>\n )}\n </p>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -32,24 +32,23 @@ function B(e) {
32
32
  }
33
33
  }
34
34
  function V(e) {
35
- let t = e.assignedTime, n = e.status === "in_progress" || e.status === "completed" ? new Date(new Date(t).getTime() + 15 * 6e4).toISOString() : null, r = e.status === "completed" ? (/* @__PURE__ */ new Date()).toISOString() : null;
36
35
  return [
37
36
  {
38
37
  status: "assigned",
39
38
  label: "Task Assigned",
40
- timestamp: t,
39
+ timestamp: e.assignedTime || null,
41
40
  completed: !0
42
41
  },
43
42
  {
44
43
  status: "in_progress",
45
44
  label: "Work Started",
46
- timestamp: n,
45
+ timestamp: null,
47
46
  completed: e.status === "in_progress" || e.status === "completed"
48
47
  },
49
48
  {
50
49
  status: "completed",
51
50
  label: "Task Completed",
52
- timestamp: r,
51
+ timestamp: e.status === "completed" ? e.completedAt ?? null : null,
53
52
  completed: e.status === "completed"
54
53
  }
55
54
  ];
@@ -80,7 +79,7 @@ function U(e) {
80
79
  description: e.description,
81
80
  estimatedTime: e.estimatedTime ?? 0,
82
81
  assignedBy: e.assignedBy ?? "",
83
- assignedTime: e.assignedAt || (/* @__PURE__ */ new Date()).toISOString(),
82
+ assignedTime: e.assignedAt || "",
84
83
  dueTime: e.dueAt,
85
84
  location: e.location,
86
85
  earnings: e.earnings,
@@ -92,7 +91,8 @@ function U(e) {
92
91
  },
93
92
  orderItems: [],
94
93
  specialInstructions: e.notes ?? void 0,
95
- notes: e.notes ?? ""
94
+ notes: e.notes ?? "",
95
+ completedAt: e.completedAt
96
96
  };
97
97
  }
98
98
  function W() {
@@ -228,7 +228,7 @@ function W() {
228
228
  children: G.priority
229
229
  }),
230
230
  /* @__PURE__ */ P(r, { status: G.status }),
231
- /* @__PURE__ */ F("span", {
231
+ G.estimatedTime > 0 && /* @__PURE__ */ F("span", {
232
232
  className: "text-xs text-text-secondary flex items-center gap-1",
233
233
  children: [
234
234
  /* @__PURE__ */ P(v, { className: "h-3 w-3" }),
@@ -239,18 +239,18 @@ function W() {
239
239
  ]
240
240
  })
241
241
  ] })]
242
- }), /* @__PURE__ */ F("div", {
242
+ }), (G.assignedBy || G.assignedTime) && /* @__PURE__ */ F("div", {
243
243
  className: "text-right shrink-0",
244
244
  children: [
245
245
  /* @__PURE__ */ P("p", {
246
246
  className: "text-xs text-text-secondary",
247
- children: "Assigned by"
247
+ children: "Assigned"
248
248
  }),
249
- /* @__PURE__ */ P("p", {
249
+ G.assignedBy && /* @__PURE__ */ P("p", {
250
250
  className: "text-sm font-medium text-text-primary",
251
251
  children: G.assignedBy
252
252
  }),
253
- /* @__PURE__ */ P("p", {
253
+ G.assignedTime && /* @__PURE__ */ P("p", {
254
254
  className: "text-xs text-text-secondary mt-1",
255
255
  children: H(G.assignedTime)
256
256
  })
@@ -421,7 +421,7 @@ function W() {
421
421
  children: G.cartName
422
422
  })] })]
423
423
  }),
424
- /* @__PURE__ */ F("div", {
424
+ G.dueTime && /* @__PURE__ */ F("div", {
425
425
  className: "flex items-center gap-2",
426
426
  children: [/* @__PURE__ */ P(v, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ F("div", { children: [/* @__PURE__ */ P("p", {
427
427
  className: "text-xs text-text-secondary",
@@ -451,7 +451,7 @@ function W() {
451
451
  children: [G.distance, " km"]
452
452
  })] })]
453
453
  }),
454
- /* @__PURE__ */ F("div", {
454
+ G.assignedTime && /* @__PURE__ */ F("div", {
455
455
  className: "flex items-center gap-2",
456
456
  children: [/* @__PURE__ */ P(v, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ F("div", { children: [/* @__PURE__ */ P("p", {
457
457
  className: "text-xs text-text-secondary",