@burdenoff/microfe-subscriberbot 2026.624.1 → 2026.626.1

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 (104) hide show
  1. package/dist/subscriberbot/components/EmptyState.js +17 -10
  2. package/dist/subscriberbot/components/EmptyState.js.map +1 -1
  3. package/dist/subscriberbot/components/InvestmentCard.js +23 -22
  4. package/dist/subscriberbot/components/InvestmentCard.js.map +1 -1
  5. package/dist/subscriberbot/components/MetricsCard.js +15 -12
  6. package/dist/subscriberbot/components/MetricsCard.js.map +1 -1
  7. package/dist/subscriberbot/components/PageLayout.js +27 -15
  8. package/dist/subscriberbot/components/PageLayout.js.map +1 -1
  9. package/dist/subscriberbot/components/RatingDisplay.js +3 -3
  10. package/dist/subscriberbot/components/RatingDisplay.js.map +1 -1
  11. package/dist/subscriberbot/components/StatusBadge.js +25 -13
  12. package/dist/subscriberbot/components/StatusBadge.js.map +1 -1
  13. package/dist/subscriberbot/context/SubscriberBotContext.js.map +1 -1
  14. package/dist/subscriberbot/pages/HomePage.js +72 -63
  15. package/dist/subscriberbot/pages/HomePage.js.map +1 -1
  16. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js +106 -100
  17. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js.map +1 -1
  18. package/dist/subscriberbot/pages/admin/AdminDashboard.js +125 -85
  19. package/dist/subscriberbot/pages/admin/AdminDashboard.js.map +1 -1
  20. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js +51 -45
  21. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js.map +1 -1
  22. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js +246 -241
  23. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js.map +1 -1
  24. package/dist/subscriberbot/pages/admin/AdminProfilePage.js +131 -129
  25. package/dist/subscriberbot/pages/admin/AdminProfilePage.js.map +1 -1
  26. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js +247 -242
  27. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js.map +1 -1
  28. package/dist/subscriberbot/pages/admin/CartManagementPage.js +307 -302
  29. package/dist/subscriberbot/pages/admin/CartManagementPage.js.map +1 -1
  30. package/dist/subscriberbot/pages/admin/UserManagementPage.js +308 -303
  31. package/dist/subscriberbot/pages/admin/UserManagementPage.js.map +1 -1
  32. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js +89 -84
  33. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  34. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js +269 -264
  35. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  36. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js +269 -227
  37. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  38. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js +191 -186
  39. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  40. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js +168 -166
  41. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  42. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js +344 -347
  43. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  44. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js +270 -272
  45. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js.map +1 -1
  46. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js +294 -289
  47. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js.map +1 -1
  48. package/dist/subscriberbot/pages/common/HelpSupportPage.js +156 -158
  49. package/dist/subscriberbot/pages/common/HelpSupportPage.js.map +1 -1
  50. package/dist/subscriberbot/pages/common/NotificationCenterPage.js +94 -87
  51. package/dist/subscriberbot/pages/common/NotificationCenterPage.js.map +1 -1
  52. package/dist/subscriberbot/pages/common/SettingsPage.js +749 -740
  53. package/dist/subscriberbot/pages/common/SettingsPage.js.map +1 -1
  54. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js +357 -324
  55. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js.map +1 -1
  56. package/dist/subscriberbot/pages/customer/CartDetailPage.js +281 -247
  57. package/dist/subscriberbot/pages/customer/CartDetailPage.js.map +1 -1
  58. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js +106 -98
  59. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js.map +1 -1
  60. package/dist/subscriberbot/pages/customer/CheckoutPage.js +235 -238
  61. package/dist/subscriberbot/pages/customer/CheckoutPage.js.map +1 -1
  62. package/dist/subscriberbot/pages/customer/CustomerDashboard.js +426 -390
  63. package/dist/subscriberbot/pages/customer/CustomerDashboard.js.map +1 -1
  64. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js +488 -479
  65. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js.map +1 -1
  66. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js +522 -512
  67. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js.map +1 -1
  68. package/dist/subscriberbot/pages/customer/FavoritesPage.js +73 -66
  69. package/dist/subscriberbot/pages/customer/FavoritesPage.js.map +1 -1
  70. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js +75 -67
  71. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js.map +1 -1
  72. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js +82 -76
  73. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js.map +1 -1
  74. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js +100 -93
  75. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js.map +1 -1
  76. package/dist/subscriberbot/pages/customer/ReviewsPage.js +97 -90
  77. package/dist/subscriberbot/pages/customer/ReviewsPage.js.map +1 -1
  78. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js +86 -79
  79. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js.map +1 -1
  80. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js +330 -293
  81. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js.map +1 -1
  82. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js +269 -261
  83. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  84. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js +97 -91
  85. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  86. package/dist/subscriberbot/pages/investor/InvestorDashboard.js +354 -322
  87. package/dist/subscriberbot/pages/investor/InvestorDashboard.js.map +1 -1
  88. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js +118 -111
  89. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  90. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js +75 -69
  91. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js.map +1 -1
  92. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js +435 -430
  93. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js.map +1 -1
  94. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js +328 -289
  95. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js.map +1 -1
  96. package/dist/subscriberbot/pages/worker/WorkerDashboard.js +135 -103
  97. package/dist/subscriberbot/pages/worker/WorkerDashboard.js.map +1 -1
  98. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js +120 -114
  99. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js.map +1 -1
  100. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js +125 -120
  101. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js.map +1 -1
  102. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js +354 -344
  103. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js.map +1 -1
  104. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"InvestmentDetailsPage.js","names":[],"sources":["../../../../src/subscriberbot/pages/investor/InvestmentDetailsPage.tsx"],"sourcesContent":["/**\n * Investment Details Page\n * @module subscriberbot/pages/investor\n *\n * 4-tab UI (overview/financials/documents/updates), manage investment modal,\n * growth indicators with progress bars, document status badges\n * (verified/pending/rejected), investment summary sidebar, back navigation.\n */\n\nimport { useState, useMemo, useEffect } from 'react';\nimport {\n ArrowLeft,\n TrendingUp,\n Shield,\n AlertTriangle,\n Users,\n FileText,\n Clock,\n Building2,\n IndianRupee,\n Calendar,\n Download,\n BarChart3,\n PieChart,\n Activity,\n Package,\n Star,\n CheckCircle2,\n AlertCircle,\n X,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { useSubscriberBot } from '../../context/SubscriberBotContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InvestmentDetails {\n id: string;\n cartName: string;\n cartOwner: string;\n location: string;\n businessType: string;\n establishedDate: string;\n\n investmentAmount: number;\n investmentDate: string;\n equityPercentage: number;\n valuationAtInvestment: number;\n currentValuation: number;\n investmentType: string;\n\n monthlyRevenue: number;\n monthlyOrders: number;\n averageOrderValue: number;\n customerRating: number;\n activeCustomers: number;\n\n revenueGrowth: number;\n profitMargin: number;\n returnOnInvestment: number;\n paybackPeriod: string;\n\n documents: Array<{\n type: string;\n name: string;\n uploadDate: string;\n status: 'verified' | 'pending' | 'rejected';\n }>;\n\n recentUpdates: Array<{\n date: string;\n type: string;\n description: string;\n }>;\n}\n\ntype TabKey = 'overview' | 'financials' | 'documents' | 'updates';\n\n// ---------------------------------------------------------------------------\n// Mock data\n// ---------------------------------------------------------------------------\n\nconst mockInvestmentDetails: InvestmentDetails = {\n id: 'INV-001',\n cartName: 'Dosa Express - Koramangala',\n cartOwner: 'Suresh Rao',\n location: 'Koramangala 6th Block, Bangalore',\n businessType: 'South Indian Cuisine',\n establishedDate: '2022-06-15',\n\n investmentAmount: 500000,\n investmentDate: '2023-03-10',\n equityPercentage: 15,\n valuationAtInvestment: 3333333,\n currentValuation: 4333333,\n investmentType: 'Equity Investment',\n\n monthlyRevenue: 280000,\n monthlyOrders: 1850,\n averageOrderValue: 151,\n customerRating: 4.6,\n activeCustomers: 450,\n\n revenueGrowth: 18.5,\n profitMargin: 22,\n returnOnInvestment: 30,\n paybackPeriod: '2.5 years',\n\n documents: [\n {\n type: 'Investment Agreement',\n name: 'investment_agreement_dosa_express.pdf',\n uploadDate: '2023-03-10',\n status: 'verified',\n },\n {\n type: 'Financial Statement',\n name: 'financial_statement_q4_2023.pdf',\n uploadDate: '2024-01-05',\n status: 'verified',\n },\n {\n type: 'Tax Returns',\n name: 'tax_returns_2023.pdf',\n uploadDate: '2024-01-10',\n status: 'pending',\n },\n {\n type: 'Business License',\n name: 'fssai_license.pdf',\n uploadDate: '2023-03-08',\n status: 'verified',\n },\n ],\n\n recentUpdates: [\n {\n date: '2024-01-12',\n type: 'Performance',\n description: 'Monthly revenue exceeded target by 15%',\n },\n {\n date: '2024-01-08',\n type: 'Operations',\n description: 'Expanded menu with 5 new items',\n },\n {\n date: '2024-01-01',\n type: 'Financial',\n description: 'Q4 2023 profit distribution completed',\n },\n {\n date: '2023-12-20',\n type: 'Growth',\n description: 'Opened second location in BTM Layout',\n },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getDocStatusConfig(status: string) {\n switch (status) {\n case 'verified':\n return {\n color: 'text-green-600 dark:text-green-400',\n Icon: CheckCircle2,\n label: 'Verified',\n };\n case 'pending':\n return {\n color: 'text-yellow-600 dark:text-yellow-400',\n Icon: Clock,\n label: 'Pending',\n };\n case 'rejected':\n return {\n color: 'text-red-600 dark:text-red-400',\n Icon: AlertCircle,\n label: 'Rejected',\n };\n default:\n return {\n color: 'text-text-secondary',\n Icon: AlertCircle,\n label: status,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function InvestmentDetailsPage() {\n const { navigateTo } = useSubscriberBot();\n const [activeTab, setActiveTab] = useState<TabKey>('overview');\n const [isLoading, setIsLoading] = useState(true);\n const [showManageModal, setShowManageModal] = useState(false);\n const [investment, setInvestment] = useState<InvestmentDetails | null>(null);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setInvestment(mockInvestmentDetails);\n setIsLoading(false);\n }, 600);\n return () => clearTimeout(timer);\n }, []);\n\n const tabs: Array<{ id: TabKey; label: string; Icon: typeof BarChart3 }> = [\n { id: 'overview', label: 'Overview', Icon: BarChart3 },\n { id: 'financials', label: 'Financials', Icon: IndianRupee },\n { id: 'documents', label: 'Documents', Icon: FileText },\n { id: 'updates', label: 'Updates', Icon: Activity },\n ];\n\n if (isLoading) {\n return (\n <PageLayout title=\"Investment Details\" description=\"Loading...\">\n <div className=\"flex items-center justify-center py-20\">\n <div className=\"text-center\">\n <div className=\"mx-auto mb-4 h-12 w-12 animate-spin rounded-full border-b-2 border-primary\" />\n <p className=\"text-sm text-text-secondary\">Loading investment details...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n if (!investment) {\n return (\n <PageLayout title=\"Investment Not Found\">\n <div className=\"flex flex-col items-center justify-center py-12\">\n <AlertCircle className=\"mb-4 h-12 w-12 text-red-500\" />\n <p className=\"text-text-primary\">Investment not found</p>\n </div>\n </PageLayout>\n );\n }\n\n const currentReturns =\n investment.currentValuation * (investment.equityPercentage / 100) - investment.investmentAmount;\n const returnsPercentage = (currentReturns / investment.investmentAmount) * 100;\n\n return (\n <PageLayout\n title={investment.cartName}\n description=\"Investment Details & Performance\"\n actions={\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/investor/portfolio')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Back to Portfolio</span>\n <span className=\"sm:hidden\">Back</span>\n </button>\n <button\n type=\"button\"\n onClick={() => alert('Report export initiated')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Download className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Export Report</span>\n <span className=\"sm:hidden\">Export</span>\n </button>\n <button\n type=\"button\"\n onClick={() => setShowManageModal(true)}\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 <span className=\"hidden sm:inline\">Manage Investment</span>\n <span className=\"sm:hidden\">Manage</span>\n </button>\n </div>\n }\n >\n {/* Investment Summary Cards */}\n <div className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 text-center\">\n <IndianRupee className=\"mx-auto mb-2 h-6 w-6 text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(investment.investmentAmount, { minimumFractionDigits: 0 })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Your Investment</div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 text-center\">\n <TrendingUp className=\"mx-auto mb-2 h-6 w-6 text-green-600 sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-green-600 dark:text-green-400 sm:text-2xl\">\n {returnsPercentage > 0 ? '+' : ''}\n {returnsPercentage.toFixed(1)}%\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Returns</div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 text-center\">\n <PieChart className=\"mx-auto mb-2 h-6 w-6 text-blue-600 sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {investment.equityPercentage}%\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Equity Stake</div>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 text-center\">\n <Building2 className=\"mx-auto mb-2 h-6 w-6 text-purple-600 sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(investment.currentValuation * (investment.equityPercentage / 100), {\n minimumFractionDigits: 0,\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Current Value</div>\n </div>\n </div>\n\n {/* Tabs */}\n <div className=\"mt-6 flex gap-2 overflow-x-auto pb-2\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex items-center gap-2 whitespace-nowrap rounded-lg px-3 py-2 text-sm font-medium transition-colors sm:px-4 sm:py-3',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface text-text-primary hover:bg-bg-sunken'\n )}\n >\n <tab.Icon className=\"h-4 w-4 flex-shrink-0\" />\n <span className=\"hidden sm:inline\">{tab.label}</span>\n <span className=\"sm:hidden\">{tab.label.split(' ')[0]}</span>\n </button>\n ))}\n </div>\n\n {/* Tab Content */}\n <div className=\"mt-6\">\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"grid gap-6 lg:grid-cols-3\">\n {/* Business Details */}\n <div className=\"space-y-6 lg:col-span-2\">\n {/* Business Information */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Business Information\n </h2>\n <div className=\"grid gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary\">Owner</p>\n <p className=\"font-medium text-text-primary\">{investment.cartOwner}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Business Type</p>\n <p className=\"font-medium text-text-primary\">{investment.businessType}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Location</p>\n <p className=\"font-medium text-text-primary\">{investment.location}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Established</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(investment.establishedDate, {\n hour: undefined,\n minute: undefined,\n })}\n </p>\n </div>\n </div>\n </div>\n\n {/* Performance Metrics */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Performance Metrics\n </h2>\n <div className=\"grid grid-cols-1 gap-4 text-center sm:grid-cols-3 sm:gap-6\">\n <div>\n <Package className=\"mx-auto mb-2 h-6 w-6 text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-xl font-bold text-text-primary sm:text-2xl\">\n {investment.monthlyOrders}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Monthly Orders</div>\n </div>\n <div>\n <IndianRupee className=\"mx-auto mb-2 h-6 w-6 text-green-600 sm:h-8 sm:w-8\" />\n <div className=\"text-xl font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(investment.monthlyRevenue, { minimumFractionDigits: 0 })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Monthly Revenue</div>\n </div>\n <div>\n <Users className=\"mx-auto mb-2 h-6 w-6 text-blue-600 sm:h-8 sm:w-8\" />\n <div className=\"text-xl font-bold text-text-primary sm:text-2xl\">\n {investment.activeCustomers}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Active Customers</div>\n </div>\n </div>\n <div className=\"mt-4 flex flex-col items-start justify-between gap-4 border-t border-border-subtle pt-4 sm:mt-6 sm:flex-row sm:items-center sm:pt-6\">\n <div>\n <p className=\"text-sm text-text-secondary\">Customer Rating</p>\n <div className=\"mt-1 flex items-center gap-1\">\n {Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n className={cn(\n 'h-4 w-4',\n i < Math.floor(investment.customerRating)\n ? 'fill-yellow-400 text-yellow-400'\n : 'fill-none text-text-secondary/40'\n )}\n />\n ))}\n <span className=\"ml-1 text-sm font-medium text-text-primary\">\n {investment.customerRating}\n </span>\n </div>\n </div>\n <div className=\"text-left sm:text-right\">\n <p className=\"text-sm text-text-secondary\">Avg Order Value</p>\n <p className=\"text-lg font-semibold text-text-primary\">\n {formatCurrency(investment.averageOrderValue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* Investment Summary */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Investment Summary\n </h2>\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Investment Date</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(investment.investmentDate, {\n hour: undefined,\n minute: undefined,\n })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Investment Type</p>\n <p className=\"font-medium text-text-primary\">{investment.investmentType}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Initial Valuation</p>\n <p className=\"font-medium text-text-primary\">\n {formatCurrency(investment.valuationAtInvestment, {\n minimumFractionDigits: 0,\n })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Current Valuation</p>\n <p className=\"text-lg font-medium text-text-primary\">\n {formatCurrency(investment.currentValuation, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"border-t border-border-subtle pt-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Your Returns</span>\n <span\n className={cn(\n 'text-lg font-semibold',\n currentReturns > 0\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n )}\n >\n {currentReturns > 0 ? '+' : ''}\n {formatCurrency(currentReturns, { minimumFractionDigits: 0 })}\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Growth Indicators */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Growth Indicators\n </h2>\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Revenue Growth</span>\n <span className=\"text-sm font-medium text-green-600 dark:text-green-400\">\n +{investment.revenueGrowth}%\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-green-600\"\n style={{ width: `${Math.min(investment.revenueGrowth, 100)}%` }}\n />\n </div>\n </div>\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Profit Margin</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {investment.profitMargin}%\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-blue-600\"\n style={{ width: `${investment.profitMargin}%` }}\n />\n </div>\n </div>\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">ROI</span>\n <span className=\"text-sm font-medium text-green-600 dark:text-green-400\">\n +{investment.returnOnInvestment}%\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-green-500\"\n style={{ width: `${Math.min(investment.returnOnInvestment, 100)}%` }}\n />\n </div>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Expected Payback</p>\n <p className=\"font-medium text-text-primary\">{investment.paybackPeriod}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Financials Tab */}\n {activeTab === 'financials' && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Financial Performance\n </h2>\n\n {/* Key Financial Metrics */}\n <div className=\"mb-6 grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Monthly Revenue</p>\n <p className=\"mt-1 text-lg font-bold text-text-primary\">\n {formatCurrency(investment.monthlyRevenue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Revenue Growth</p>\n <p className=\"mt-1 text-lg font-bold text-green-600 dark:text-green-400\">\n +{investment.revenueGrowth}%\n </p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Profit Margin</p>\n <p className=\"mt-1 text-lg font-bold text-text-primary\">{investment.profitMargin}%</p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Avg Order Value</p>\n <p className=\"mt-1 text-lg font-bold text-text-primary\">\n {formatCurrency(investment.averageOrderValue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n\n {/* Financial Details Table */}\n <div className=\"overflow-hidden rounded-lg border border-border-subtle\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-text-secondary\">\n Metric\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-text-secondary\">\n Value\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-text-secondary\">\n Trend\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {[\n {\n metric: 'Monthly Revenue',\n value: formatCurrency(investment.monthlyRevenue, {\n minimumFractionDigits: 0,\n }),\n trend: '+18.5%',\n },\n {\n metric: 'Monthly Orders',\n value: String(investment.monthlyOrders),\n trend: '+12%',\n },\n {\n metric: 'Average Order Value',\n value: formatCurrency(investment.averageOrderValue, {\n minimumFractionDigits: 0,\n }),\n trend: '+5.8%',\n },\n {\n metric: 'Active Customers',\n value: String(investment.activeCustomers),\n trend: '+22%',\n },\n {\n metric: 'Profit Margin',\n value: `${investment.profitMargin}%`,\n trend: '+2.1%',\n },\n {\n metric: 'Return on Investment',\n value: `${investment.returnOnInvestment}%`,\n trend: '+8.5%',\n },\n ].map((row) => (\n <tr key={row.metric} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3 text-sm font-medium text-text-primary\">\n {row.metric}\n </td>\n <td className=\"px-4 py-3 text-right text-sm text-text-primary\">{row.value}</td>\n <td className=\"px-4 py-3 text-right text-sm font-medium text-green-600 dark:text-green-400\">\n {row.trend}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* Documents Tab */}\n {activeTab === 'documents' && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Investment Documents\n </h2>\n <div className=\"space-y-4\">\n {investment.documents.map((doc, index) => {\n const statusConfig = getDocStatusConfig(doc.status);\n const StatusIcon = statusConfig.Icon;\n\n return (\n <div\n key={index}\n className=\"flex flex-col gap-4 rounded-lg bg-bg-sunken/50 p-4 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"flex items-start gap-3 flex-1 min-w-0 sm:items-center sm:gap-4\">\n <FileText className=\"mt-1 h-6 w-6 flex-shrink-0 text-primary sm:mt-0 sm:h-8 sm:w-8\" />\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium text-text-primary sm:text-base\">\n {doc.type}\n </h4>\n <p className=\"truncate text-xs text-text-secondary sm:text-sm\">\n {doc.name}\n </p>\n <p className=\"text-xs text-text-secondary\">\n Uploaded{' '}\n {formatDate(doc.uploadDate, { hour: undefined, minute: undefined })}\n </p>\n </div>\n </div>\n <div className=\"flex w-full items-center justify-between gap-3 sm:w-auto sm:justify-end\">\n <span\n className={cn(\n 'flex items-center gap-1 text-xs sm:text-sm',\n statusConfig.color\n )}\n >\n <StatusIcon className=\"h-3 w-3 sm:h-4 sm:w-4\" />\n <span className=\"capitalize\">{statusConfig.label}</span>\n </span>\n <button\n type=\"button\"\n onClick={() => alert(`Downloading ${doc.name}`)}\n className=\"flex items-center gap-1 rounded-lg border border-border-subtle px-3 py-1.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Download className=\"h-3 w-3 sm:h-4 sm:w-4\" />\n <span className=\"hidden sm:inline\">Download</span>\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Updates Tab */}\n {activeTab === 'updates' && (\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">Recent Updates</h2>\n <div className=\"space-y-4\">\n {investment.recentUpdates.map((update, index) => (\n <div key={index} className=\"flex gap-3 rounded-lg bg-bg-sunken/50 p-4 sm:gap-4\">\n <div className=\"flex-shrink-0\">\n <Activity className=\"mt-1 h-4 w-4 text-primary sm:h-5 sm:w-5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-1 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between\">\n <h4 className=\"text-sm font-medium text-text-primary sm:text-base\">\n {update.type}\n </h4>\n <span className=\"text-xs text-text-secondary sm:text-sm\">\n {formatDate(update.date, { hour: undefined, minute: undefined })}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary sm:text-sm\">{update.description}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Manage Investment Modal */}\n {showManageModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"relative max-h-[90vh] w-full max-w-md overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface\">\n <div className=\"border-b border-border-subtle p-4 sm:p-6\">\n <button\n type=\"button\"\n onClick={() => setShowManageModal(false)}\n className=\"absolute right-3 top-3 rounded-lg p-1 text-text-secondary hover:bg-accent transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n <h2 className=\"text-lg font-semibold text-text-primary sm:text-xl\">\n Manage Investment\n </h2>\n </div>\n <div className=\"space-y-4 p-4 sm:p-6\">\n <p className=\"text-sm text-text-secondary sm:text-base\">\n Choose an action for your investment in {investment.cartName}:\n </p>\n <div className=\"space-y-3\">\n <button\n type=\"button\"\n onClick={() => alert('Partial withdrawal request submitted')}\n className=\"w-full rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Request Partial Withdrawal\n </button>\n <button\n type=\"button\"\n onClick={() => alert('Transfer ownership feature coming soon')}\n className=\"w-full rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Transfer Ownership\n </button>\n <button\n type=\"button\"\n onClick={() => alert('Exit options will be displayed')}\n className=\"w-full rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n View Exit Options\n </button>\n </div>\n <div className=\"rounded-lg border border-yellow-500/30 bg-yellow-500/10 p-3 sm:p-4\">\n <p className=\"text-xs text-yellow-800 dark:text-yellow-200 sm:text-sm\">\n Any changes to your investment require approval from the business owner and may be\n subject to terms in your investment agreement.\n </p>\n </div>\n </div>\n <div className=\"flex justify-end gap-3 border-t border-border-subtle p-4 sm:p-6\">\n <button\n type=\"button\"\n onClick={() => setShowManageModal(false)}\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 </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"InvestmentDetailsPage.js","names":[],"sources":["../../../../src/subscriberbot/pages/investor/InvestmentDetailsPage.tsx"],"sourcesContent":["/**\n * Investment Details Page\n * @module subscriberbot/pages/investor\n *\n * 4-tab UI (overview/financials/documents/updates), manage investment modal,\n * growth indicators with progress bars, document status badges\n * (verified/pending/rejected), investment summary sidebar, back navigation.\n */\n\nimport { useState, useMemo, useEffect } from 'react';\nimport {\n ArrowLeft,\n TrendingUp,\n Shield,\n AlertTriangle,\n Users,\n FileText,\n Clock,\n Building2,\n IndianRupee,\n Calendar,\n Download,\n BarChart3,\n PieChart,\n Briefcase,\n Target,\n Activity,\n Package,\n Star,\n CheckCircle2,\n AlertCircle,\n X,\n} from 'lucide-react';\nimport { PagePurpose, NextSteps, EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { StatusBadge } from '../../components/StatusBadge';\nimport { useSubscriberBot } from '../../context/SubscriberBotContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InvestmentDetails {\n id: string;\n cartName: string;\n cartOwner: string;\n location: string;\n businessType: string;\n establishedDate: string;\n\n investmentAmount: number;\n investmentDate: string;\n equityPercentage: number;\n valuationAtInvestment: number;\n currentValuation: number;\n investmentType: string;\n\n monthlyRevenue: number;\n monthlyOrders: number;\n averageOrderValue: number;\n customerRating: number;\n activeCustomers: number;\n\n revenueGrowth: number;\n profitMargin: number;\n returnOnInvestment: number;\n paybackPeriod: string;\n\n documents: Array<{\n type: string;\n name: string;\n uploadDate: string;\n status: 'verified' | 'pending' | 'rejected';\n }>;\n\n recentUpdates: Array<{\n date: string;\n type: string;\n description: string;\n }>;\n}\n\ntype TabKey = 'overview' | 'financials' | 'documents' | 'updates';\n\n// ---------------------------------------------------------------------------\n// Mock data\n// ---------------------------------------------------------------------------\n\nconst mockInvestmentDetails: InvestmentDetails = {\n id: 'INV-001',\n cartName: 'Dosa Express - Koramangala',\n cartOwner: 'Suresh Rao',\n location: 'Koramangala 6th Block, Bangalore',\n businessType: 'South Indian Cuisine',\n establishedDate: '2022-06-15',\n\n investmentAmount: 500000,\n investmentDate: '2023-03-10',\n equityPercentage: 15,\n valuationAtInvestment: 3333333,\n currentValuation: 4333333,\n investmentType: 'Equity Investment',\n\n monthlyRevenue: 280000,\n monthlyOrders: 1850,\n averageOrderValue: 151,\n customerRating: 4.6,\n activeCustomers: 450,\n\n revenueGrowth: 18.5,\n profitMargin: 22,\n returnOnInvestment: 30,\n paybackPeriod: '2.5 years',\n\n documents: [\n {\n type: 'Investment Agreement',\n name: 'investment_agreement_dosa_express.pdf',\n uploadDate: '2023-03-10',\n status: 'verified',\n },\n {\n type: 'Financial Statement',\n name: 'financial_statement_q4_2023.pdf',\n uploadDate: '2024-01-05',\n status: 'verified',\n },\n {\n type: 'Tax Returns',\n name: 'tax_returns_2023.pdf',\n uploadDate: '2024-01-10',\n status: 'pending',\n },\n {\n type: 'Business License',\n name: 'fssai_license.pdf',\n uploadDate: '2023-03-08',\n status: 'verified',\n },\n ],\n\n recentUpdates: [\n {\n date: '2024-01-12',\n type: 'Performance',\n description: 'Monthly revenue exceeded target by 15%',\n },\n {\n date: '2024-01-08',\n type: 'Operations',\n description: 'Expanded menu with 5 new items',\n },\n {\n date: '2024-01-01',\n type: 'Financial',\n description: 'Q4 2023 profit distribution completed',\n },\n {\n date: '2023-12-20',\n type: 'Growth',\n description: 'Opened second location in BTM Layout',\n },\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getDocStatusConfig(status: string) {\n switch (status) {\n case 'verified':\n return {\n color: 'text-status-success-text',\n Icon: CheckCircle2,\n label: 'Verified',\n };\n case 'pending':\n return {\n color: 'text-status-warning-text',\n Icon: Clock,\n label: 'Pending',\n };\n case 'rejected':\n return {\n color: 'text-status-error-text',\n Icon: AlertCircle,\n label: 'Rejected',\n };\n default:\n return {\n color: 'text-text-secondary',\n Icon: AlertCircle,\n label: status,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function InvestmentDetailsPage() {\n const { navigateTo } = useSubscriberBot();\n const [activeTab, setActiveTab] = useState<TabKey>('overview');\n const [isLoading, setIsLoading] = useState(true);\n const [showManageModal, setShowManageModal] = useState(false);\n const [investment, setInvestment] = useState<InvestmentDetails | null>(null);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setInvestment(mockInvestmentDetails);\n setIsLoading(false);\n }, 600);\n return () => clearTimeout(timer);\n }, []);\n\n const tabs: Array<{ id: TabKey; label: string; Icon: typeof BarChart3 }> = [\n { id: 'overview', label: 'Overview', Icon: BarChart3 },\n { id: 'financials', label: 'Financials', Icon: IndianRupee },\n { id: 'documents', label: 'Documents', Icon: FileText },\n { id: 'updates', label: 'Updates', Icon: Activity },\n ];\n\n if (isLoading) {\n return (\n <PageLayout title=\"Investment Details\" description=\"Loading...\">\n <div className=\"flex items-center justify-center py-20\">\n <div className=\"text-center\">\n <div className=\"mx-auto mb-4 h-12 w-12 animate-spin rounded-full border-b-2 border-primary\" />\n <p className=\"text-sm text-text-secondary\">Loading investment details...</p>\n </div>\n </div>\n </PageLayout>\n );\n }\n\n if (!investment) {\n return (\n <PageLayout title=\"Investment Not Found\">\n <EmptyState\n illustration=\"empty-generic\"\n title=\"Investment not found\"\n description=\"We couldn't find this investment. It may have been removed, or the link may be out of date.\"\n action={\n <button\n type=\"button\"\n onClick={() => navigateTo('/investor/portfolio')}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Portfolio\n </button>\n }\n />\n </PageLayout>\n );\n }\n\n const currentReturns =\n investment.currentValuation * (investment.equityPercentage / 100) - investment.investmentAmount;\n const returnsPercentage = (currentReturns / investment.investmentAmount) * 100;\n\n return (\n <PageLayout\n title={investment.cartName}\n description=\"Investment Details & Performance\"\n actions={\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/investor/portfolio')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Back to Portfolio</span>\n <span className=\"sm:hidden\">Back</span>\n </button>\n <button\n type=\"button\"\n onClick={() => alert('Report export initiated')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Download className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">Export Report</span>\n <span className=\"sm:hidden\">Export</span>\n </button>\n <button\n type=\"button\"\n onClick={() => setShowManageModal(true)}\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 <span className=\"hidden sm:inline\">Manage Investment</span>\n <span className=\"sm:hidden\">Manage</span>\n </button>\n </div>\n }\n >\n <PagePurpose icon={<TrendingUp className=\"h-4 w-4\" />} className=\"mb-6\">\n A deep dive into one of your holdings. See exactly how much you put in, your equity\n stake, current value and returns, then switch tabs for performance history, business\n updates and documents. Use Manage Investment when you want to top up, withdraw\n dividends or adjust your position.\n </PagePurpose>\n\n <NextSteps\n storageKey=\"subscriberbot-investment-details\"\n steps={[\n {\n id: 'manage-investment',\n label: 'Manage this investment',\n description: 'Top up, withdraw dividends or adjust your position.',\n icon: <Briefcase className=\"h-4 w-4\" />,\n onClick: () => setShowManageModal(true),\n },\n {\n id: 'back-portfolio',\n label: 'Back to your portfolio',\n description: 'Compare this holding against the rest of your investments.',\n icon: <PieChart className=\"h-4 w-4\" />,\n onClick: () => navigateTo('/investor/portfolio'),\n },\n {\n id: 'more-opps',\n label: 'Find more opportunities',\n description: 'Diversify by backing other promising local carts.',\n icon: <Target className=\"h-4 w-4\" />,\n onClick: () => navigateTo('/investor/opportunities'),\n },\n ]}\n />\n\n {/* Investment Summary Cards — the ONE emphasis zone */}\n <EmphasisPanel className=\"grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-center\">\n <IndianRupee className=\"mx-auto mb-2 h-6 w-6 text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(investment.investmentAmount, { minimumFractionDigits: 0 })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Your Investment</div>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-center\">\n <TrendingUp className=\"mx-auto mb-2 h-6 w-6 text-status-success-text sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-status-success-text sm:text-2xl\">\n {returnsPercentage > 0 ? '+' : ''}\n {returnsPercentage.toFixed(1)}%\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Returns</div>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-center\">\n <PieChart className=\"mx-auto mb-2 h-6 w-6 text-status-info-text sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {investment.equityPercentage}%\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Equity Stake</div>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 text-center\">\n <Building2 className=\"mx-auto mb-2 h-6 w-6 text-accent-purple sm:h-8 sm:w-8\" />\n <div className=\"text-lg font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(investment.currentValuation * (investment.equityPercentage / 100), {\n minimumFractionDigits: 0,\n })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Current Value</div>\n </div>\n </EmphasisPanel>\n\n {/* Tabs */}\n <div className=\"mt-6 flex gap-2 overflow-x-auto pb-2\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex items-center gap-2 whitespace-nowrap rounded-lg px-3 py-2 text-sm font-medium transition-colors sm:px-4 sm:py-3',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface text-text-primary hover:bg-bg-sunken'\n )}\n >\n <tab.Icon className=\"h-4 w-4 flex-shrink-0\" />\n <span className=\"hidden sm:inline\">{tab.label}</span>\n <span className=\"sm:hidden\">{tab.label.split(' ')[0]}</span>\n </button>\n ))}\n </div>\n\n {/* Tab Content */}\n <div className=\"mt-6\">\n {/* Overview Tab */}\n {activeTab === 'overview' && (\n <div className=\"grid gap-6 lg:grid-cols-3\">\n {/* Business Details */}\n <div className=\"space-y-6 lg:col-span-2\">\n {/* Business Information */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Business Information\n </h2>\n <div className=\"grid gap-4 sm:grid-cols-2 sm:gap-6\">\n <div>\n <p className=\"text-sm text-text-secondary\">Owner</p>\n <p className=\"font-medium text-text-primary\">{investment.cartOwner}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Business Type</p>\n <p className=\"font-medium text-text-primary\">{investment.businessType}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Location</p>\n <p className=\"font-medium text-text-primary\">{investment.location}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Established</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(investment.establishedDate, {\n hour: undefined,\n minute: undefined,\n })}\n </p>\n </div>\n </div>\n </div>\n\n {/* Performance Metrics */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Performance Metrics\n </h2>\n <div className=\"grid grid-cols-1 gap-4 text-center sm:grid-cols-3 sm:gap-6\">\n <div>\n <Package className=\"mx-auto mb-2 h-6 w-6 text-primary sm:h-8 sm:w-8\" />\n <div className=\"text-xl font-bold text-text-primary sm:text-2xl\">\n {investment.monthlyOrders}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Monthly Orders</div>\n </div>\n <div>\n <IndianRupee className=\"mx-auto mb-2 h-6 w-6 text-status-success-text sm:h-8 sm:w-8\" />\n <div className=\"text-xl font-bold text-text-primary sm:text-2xl\">\n {formatCurrency(investment.monthlyRevenue, { minimumFractionDigits: 0 })}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Monthly Revenue</div>\n </div>\n <div>\n <Users className=\"mx-auto mb-2 h-6 w-6 text-status-info-text sm:h-8 sm:w-8\" />\n <div className=\"text-xl font-bold text-text-primary sm:text-2xl\">\n {investment.activeCustomers}\n </div>\n <div className=\"text-xs text-text-secondary sm:text-sm\">Active Customers</div>\n </div>\n </div>\n <div className=\"mt-4 flex flex-col items-start justify-between gap-4 border-t border-border-seam pt-4 sm:mt-6 sm:flex-row sm:items-center sm:pt-6\">\n <div>\n <p className=\"text-sm text-text-secondary\">Customer Rating</p>\n <div className=\"mt-1 flex items-center gap-1\">\n {Array.from({ length: 5 }, (_, i) => (\n <Star\n key={i}\n className={cn(\n 'h-4 w-4',\n i < Math.floor(investment.customerRating)\n ? 'fill-status-warning-text text-status-warning-text'\n : 'fill-none text-text-secondary/40'\n )}\n />\n ))}\n <span className=\"ml-1 text-sm font-medium text-text-primary\">\n {investment.customerRating}\n </span>\n </div>\n </div>\n <div className=\"text-left sm:text-right\">\n <p className=\"text-sm text-text-secondary\">Avg Order Value</p>\n <p className=\"text-lg font-semibold text-text-primary\">\n {formatCurrency(investment.averageOrderValue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* Investment Summary */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Investment Summary\n </h2>\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm text-text-secondary\">Investment Date</p>\n <p className=\"font-medium text-text-primary\">\n {formatDate(investment.investmentDate, {\n hour: undefined,\n minute: undefined,\n })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Investment Type</p>\n <p className=\"font-medium text-text-primary\">{investment.investmentType}</p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Initial Valuation</p>\n <p className=\"font-medium text-text-primary\">\n {formatCurrency(investment.valuationAtInvestment, {\n minimumFractionDigits: 0,\n })}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Current Valuation</p>\n <p className=\"text-lg font-medium text-text-primary\">\n {formatCurrency(investment.currentValuation, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"border-t border-border-seam pt-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Your Returns</span>\n <span\n className={cn(\n 'text-lg font-semibold',\n currentReturns > 0 ? 'text-status-success-text' : 'text-status-error-text'\n )}\n >\n {currentReturns > 0 ? '+' : ''}\n {formatCurrency(currentReturns, { minimumFractionDigits: 0 })}\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Growth Indicators */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Growth Indicators\n </h2>\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Revenue Growth</span>\n <span className=\"text-sm font-medium text-status-success-text\">\n +{investment.revenueGrowth}%\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-status-success-text\"\n style={{ width: `${Math.min(investment.revenueGrowth, 100)}%` }}\n />\n </div>\n </div>\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">Profit Margin</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {investment.profitMargin}%\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-status-info-text\"\n style={{ width: `${investment.profitMargin}%` }}\n />\n </div>\n </div>\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm text-text-secondary\">ROI</span>\n <span className=\"text-sm font-medium text-status-success-text\">\n +{investment.returnOnInvestment}%\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-status-success-text\"\n style={{ width: `${Math.min(investment.returnOnInvestment, 100)}%` }}\n />\n </div>\n </div>\n <div>\n <p className=\"text-sm text-text-secondary\">Expected Payback</p>\n <p className=\"font-medium text-text-primary\">{investment.paybackPeriod}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Financials Tab */}\n {activeTab === 'financials' && (\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Financial Performance\n </h2>\n\n {/* Key Financial Metrics */}\n <div className=\"mb-6 grid grid-cols-2 gap-4 lg:grid-cols-4\">\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Monthly Revenue</p>\n <p className=\"mt-1 text-lg font-bold text-text-primary\">\n {formatCurrency(investment.monthlyRevenue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Revenue Growth</p>\n <p className=\"mt-1 text-lg font-bold text-status-success-text\">\n +{investment.revenueGrowth}%\n </p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Profit Margin</p>\n <p className=\"mt-1 text-lg font-bold text-text-primary\">\n {investment.profitMargin}%\n </p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-3\">\n <p className=\"text-xs text-text-secondary\">Avg Order Value</p>\n <p className=\"mt-1 text-lg font-bold text-text-primary\">\n {formatCurrency(investment.averageOrderValue, { minimumFractionDigits: 0 })}\n </p>\n </div>\n </div>\n\n {/* Financial Details Table */}\n <div className=\"overflow-hidden rounded-lg border border-border-seam\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-bg-sunken/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-text-secondary\">\n Metric\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-text-secondary\">\n Value\n </th>\n <th className=\"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-text-secondary\">\n Trend\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {[\n {\n metric: 'Monthly Revenue',\n value: formatCurrency(investment.monthlyRevenue, {\n minimumFractionDigits: 0,\n }),\n trend: '+18.5%',\n },\n {\n metric: 'Monthly Orders',\n value: String(investment.monthlyOrders),\n trend: '+12%',\n },\n {\n metric: 'Average Order Value',\n value: formatCurrency(investment.averageOrderValue, {\n minimumFractionDigits: 0,\n }),\n trend: '+5.8%',\n },\n {\n metric: 'Active Customers',\n value: String(investment.activeCustomers),\n trend: '+22%',\n },\n {\n metric: 'Profit Margin',\n value: `${investment.profitMargin}%`,\n trend: '+2.1%',\n },\n {\n metric: 'Return on Investment',\n value: `${investment.returnOnInvestment}%`,\n trend: '+8.5%',\n },\n ].map((row) => (\n <tr key={row.metric} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3 text-sm font-medium text-text-primary\">\n {row.metric}\n </td>\n <td className=\"px-4 py-3 text-right text-sm text-text-primary\">\n {row.value}\n </td>\n <td className=\"px-4 py-3 text-right text-sm font-medium text-status-success-text\">\n {row.trend}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n\n {/* Documents Tab */}\n {activeTab === 'documents' && (\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">\n Investment Documents\n </h2>\n <div className=\"space-y-4\">\n {investment.documents.map((doc, index) => {\n const statusConfig = getDocStatusConfig(doc.status);\n const StatusIcon = statusConfig.Icon;\n\n return (\n <div\n key={index}\n className=\"flex flex-col gap-4 rounded-lg bg-bg-sunken/50 p-4 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"flex items-start gap-3 flex-1 min-w-0 sm:items-center sm:gap-4\">\n <FileText className=\"mt-1 h-6 w-6 flex-shrink-0 text-primary sm:mt-0 sm:h-8 sm:w-8\" />\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"text-sm font-medium text-text-primary sm:text-base\">\n {doc.type}\n </h4>\n <p className=\"truncate text-xs text-text-secondary sm:text-sm\">\n {doc.name}\n </p>\n <p className=\"text-xs text-text-secondary\">\n Uploaded{' '}\n {formatDate(doc.uploadDate, { hour: undefined, minute: undefined })}\n </p>\n </div>\n </div>\n <div className=\"flex w-full items-center justify-between gap-3 sm:w-auto sm:justify-end\">\n <span\n className={cn(\n 'flex items-center gap-1 text-xs sm:text-sm',\n statusConfig.color\n )}\n >\n <StatusIcon className=\"h-3 w-3 sm:h-4 sm:w-4\" />\n <span className=\"capitalize\">{statusConfig.label}</span>\n </span>\n <button\n type=\"button\"\n onClick={() => alert(`Downloading ${doc.name}`)}\n className=\"flex items-center gap-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Download className=\"h-3 w-3 sm:h-4 sm:w-4\" />\n <span className=\"hidden sm:inline\">Download</span>\n </button>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Updates Tab */}\n {activeTab === 'updates' && (\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 sm:p-6\">\n <h2 className=\"mb-4 text-lg font-semibold text-text-primary sm:mb-6\">Recent Updates</h2>\n <div className=\"space-y-4\">\n {investment.recentUpdates.map((update, index) => (\n <div key={index} className=\"flex gap-3 rounded-lg bg-bg-sunken/50 p-4 sm:gap-4\">\n <div className=\"flex-shrink-0\">\n <Activity className=\"mt-1 h-4 w-4 text-primary sm:h-5 sm:w-5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-1 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between\">\n <h4 className=\"text-sm font-medium text-text-primary sm:text-base\">\n {update.type}\n </h4>\n <span className=\"text-xs text-text-secondary sm:text-sm\">\n {formatDate(update.date, { hour: undefined, minute: undefined })}\n </span>\n </div>\n <p className=\"text-xs text-text-secondary sm:text-sm\">{update.description}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n {/* Manage Investment Modal */}\n {showManageModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-bg-canvas/50 p-4\">\n <div className=\"relative max-h-[90vh] w-full max-w-md overflow-y-auto rounded-lg border border-border-seam bg-bg-surface\">\n <div className=\"border-b border-border-seam p-4 sm:p-6\">\n <button\n type=\"button\"\n onClick={() => setShowManageModal(false)}\n className=\"absolute right-3 top-3 rounded-lg p-1 text-text-secondary hover:bg-accent transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n <h2 className=\"text-lg font-semibold text-text-primary sm:text-xl\">\n Manage Investment\n </h2>\n </div>\n <div className=\"space-y-4 p-4 sm:p-6\">\n <p className=\"text-sm text-text-secondary sm:text-base\">\n Choose an action for your investment in {investment.cartName}:\n </p>\n <div className=\"space-y-3\">\n <button\n type=\"button\"\n onClick={() => alert('Partial withdrawal request submitted')}\n className=\"w-full rounded-lg border border-border-seam px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Request Partial Withdrawal\n </button>\n <button\n type=\"button\"\n onClick={() => alert('Transfer ownership feature coming soon')}\n className=\"w-full rounded-lg border border-border-seam px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Transfer Ownership\n </button>\n <button\n type=\"button\"\n onClick={() => alert('Exit options will be displayed')}\n className=\"w-full rounded-lg border border-border-seam px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n View Exit Options\n </button>\n </div>\n <div className=\"rounded-lg border border-status-warning-border/30 bg-status-warning-bg/10 p-3 sm:p-4\">\n <p className=\"text-xs text-status-warning-text sm:text-sm\">\n Any changes to your investment require approval from the business owner and may be\n subject to terms in your investment agreement.\n </p>\n </div>\n </div>\n <div className=\"flex justify-end gap-3 border-t border-border-seam p-4 sm:p-6\">\n <button\n type=\"button\"\n onClick={() => setShowManageModal(false)}\n className=\"rounded-lg border border-border-seam 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 </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}