@burdenoff/microfe-adaptercloud 2026.624.1 → 2026.625.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 (103) hide show
  1. package/dist/adaptercloud/components/EmptyState.js +17 -21
  2. package/dist/adaptercloud/components/EmptyState.js.map +1 -1
  3. package/dist/adaptercloud/components/InvestmentCard.js +25 -23
  4. package/dist/adaptercloud/components/InvestmentCard.js.map +1 -1
  5. package/dist/adaptercloud/components/MetricsCard.js +18 -12
  6. package/dist/adaptercloud/components/MetricsCard.js.map +1 -1
  7. package/dist/adaptercloud/components/PageLayout.js +38 -19
  8. package/dist/adaptercloud/components/PageLayout.js.map +1 -1
  9. package/dist/adaptercloud/components/RatingDisplay.js +3 -3
  10. package/dist/adaptercloud/components/RatingDisplay.js.map +1 -1
  11. package/dist/adaptercloud/components/StatusBadge.js +36 -16
  12. package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
  13. package/dist/adaptercloud/pages/HomePage.js +242 -231
  14. package/dist/adaptercloud/pages/HomePage.js.map +1 -1
  15. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +33 -33
  16. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
  17. package/dist/adaptercloud/pages/admin/AdminDashboard.js +32 -32
  18. package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
  19. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +11 -11
  20. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
  21. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +11 -11
  22. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
  23. package/dist/adaptercloud/pages/admin/AdminProfilePage.js +3 -3
  24. package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
  25. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +1 -1
  26. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
  27. package/dist/adaptercloud/pages/admin/CartManagementPage.js +28 -28
  28. package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
  29. package/dist/adaptercloud/pages/admin/UserManagementPage.js +25 -25
  30. package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
  31. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +19 -19
  32. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  33. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +7 -7
  34. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  35. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +40 -37
  36. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  37. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +21 -21
  38. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  39. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +24 -24
  40. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  41. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +20 -20
  42. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  43. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +36 -36
  44. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
  45. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +25 -25
  46. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
  47. package/dist/adaptercloud/pages/common/HelpSupportPage.js +43 -43
  48. package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
  49. package/dist/adaptercloud/pages/common/NotificationCenterPage.js +32 -31
  50. package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
  51. package/dist/adaptercloud/pages/common/SettingsPage.js +8 -8
  52. package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
  53. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +22 -21
  54. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
  55. package/dist/adaptercloud/pages/customer/CartDetailPage.js +18 -17
  56. package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
  57. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +12 -11
  58. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
  59. package/dist/adaptercloud/pages/customer/CheckoutPage.js +9 -9
  60. package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
  61. package/dist/adaptercloud/pages/customer/CustomerDashboard.js +30 -30
  62. package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
  63. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +19 -19
  64. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
  65. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +24 -23
  66. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
  67. package/dist/adaptercloud/pages/customer/FavoritesPage.js +9 -8
  68. package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
  69. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +4 -3
  70. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
  71. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +15 -14
  72. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
  73. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +10 -9
  74. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
  75. package/dist/adaptercloud/pages/customer/ReviewsPage.js +18 -17
  76. package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
  77. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +14 -13
  78. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
  79. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +32 -32
  80. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
  81. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +14 -13
  82. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  83. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +27 -27
  84. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  85. package/dist/adaptercloud/pages/investor/InvestorDashboard.js +16 -16
  86. package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
  87. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +9 -8
  88. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  89. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +12 -12
  90. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
  91. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +19 -19
  92. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
  93. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +26 -25
  94. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
  95. package/dist/adaptercloud/pages/worker/WorkerDashboard.js +43 -43
  96. package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
  97. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +37 -36
  98. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
  99. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +34 -34
  100. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
  101. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +27 -25
  102. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
  103. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/AnalyticsDashboard.tsx"],"sourcesContent":["/**\n * Analytics Dashboard Page\n *\n * Revenue overview (today/week/month/year with growth), order statistics,\n * popular times progress bars, performance metrics, top selling offerings,\n * category performance, customer overview with top customers table,\n * peak hours/days, date range selector.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState } from 'react';\nimport {\n IndianRupee,\n ShoppingCart,\n Users,\n TrendingUp,\n BarChart3,\n Clock,\n Star,\n ArrowUpRight,\n ArrowDownRight,\n Download,\n Target,\n Percent,\n ThumbsUp,\n CalendarDays,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { mockAdminAnalytics, mockDashboardStats } from '../../mocks/data';\nimport { formatCurrency, formatNumber } from '../../utils/formatters';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Mock Analytics Data (full from legacy)\n// ============================================================================\n\nconst analyticsData = {\n revenue: {\n today: 12450,\n week: 87150,\n month: 348600,\n year: 4183200,\n growth: { daily: 12.5, weekly: 8.3, monthly: 15.2 },\n },\n orders: {\n total: 156,\n pending: 3,\n completed: 145,\n cancelled: 8,\n averageValue: 285,\n averagePreparationTime: 18,\n popularTimes: [\n { hour: 8, orders: 12 },\n { hour: 9, orders: 15 },\n { hour: 10, orders: 18 },\n { hour: 11, orders: 22 },\n { hour: 12, orders: 28 },\n { hour: 13, orders: 32 },\n { hour: 14, orders: 16 },\n { hour: 15, orders: 12 },\n { hour: 16, orders: 14 },\n { hour: 17, orders: 18 },\n { hour: 18, orders: 20 },\n { hour: 19, orders: 25 },\n { hour: 20, orders: 22 },\n { hour: 21, orders: 15 },\n ],\n },\n offerings: {\n topSelling: [\n { id: '1', name: 'Masala Dosa', quantity: 245, revenue: 19600, category: 'Food & Beverage' },\n {\n id: '2',\n name: 'Haircut Service',\n quantity: 89,\n revenue: 11340,\n category: 'Personal Care & Beauty',\n },\n { id: '3', name: 'Filter Coffee', quantity: 312, revenue: 9360, category: 'Food & Beverage' },\n {\n id: '4',\n name: 'Mobile Repair',\n quantity: 67,\n revenue: 6680,\n category: 'Repair & Maintenance',\n },\n { id: '5', name: 'Pongal', quantity: 98, revenue: 5880, category: 'Food & Beverage' },\n ],\n leastSelling: [\n { id: '6', name: 'Bisi Bele Bath', quantity: 12, revenue: 1440, category: 'Food & Beverage' },\n { id: '7', name: 'Cleaning Service', quantity: 8, revenue: 640, category: 'Home Services' },\n { id: '8', name: 'Kosambari', quantity: 15, revenue: 450, category: 'Food & Beverage' },\n ],\n categories: [\n { category: 'Food & Beverage', revenue: 45000, orders: 450 },\n { category: 'Personal Care & Beauty', revenue: 25000, orders: 180 },\n { category: 'Repair & Maintenance', revenue: 15000, orders: 120 },\n { category: 'Home Services', revenue: 8000, orders: 80 },\n ],\n },\n customers: {\n total: 342,\n new: 45,\n returning: 297,\n topCustomers: [\n { id: '1', name: 'Rahul Sharma', orders: 23, totalSpent: 6555 },\n { id: '2', name: 'Priya Patel', orders: 19, totalSpent: 5415 },\n { id: '3', name: 'Amit Kumar', orders: 17, totalSpent: 4845 },\n { id: '4', name: 'Sneha Reddy', orders: 15, totalSpent: 4275 },\n { id: '5', name: 'Vijay Singh', orders: 14, totalSpent: 3990 },\n ],\n satisfaction: { rating: 4.6, reviews: 89, positiveReviews: 78 },\n },\n performance: {\n acceptanceRate: 94,\n cancellationRate: 6,\n onTimeDeliveryRate: 88,\n averageRating: 4.6,\n peakHours: [\n { hour: '12-1 PM', orders: 32 },\n { hour: '1-2 PM', orders: 28 },\n { hour: '7-8 PM', orders: 25 },\n { hour: '8-9 PM', orders: 22 },\n ],\n peakDays: [\n { day: 'Sunday', orders: 45 },\n { day: 'Saturday', orders: 42 },\n { day: 'Friday', orders: 38 },\n ],\n },\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const AnalyticsDashboard = () => {\n const { navigateTo } = useAdapterCloud();\n const [dateRange, setDateRange] = useState('week');\n\n const maxPopularTime = Math.max(...analyticsData.orders.popularTimes.map((t) => t.orders));\n const maxCategoryRevenue = Math.max(...analyticsData.offerings.categories.map((c) => c.revenue));\n const maxPeakHourOrders = Math.max(...analyticsData.performance.peakHours.map((h) => h.orders));\n const maxPeakDayOrders = Math.max(...analyticsData.performance.peakDays.map((d) => d.orders));\n\n const formatPct = (v: number) => `${v > 0 ? '+' : ''}${v}%`;\n\n return (\n <PageLayout\n title=\"Analytics Dashboard\"\n description=\"Business performance insights and data\"\n actions={\n <div className=\"flex items-center gap-2\">\n <select\n value={dateRange}\n onChange={(e) => setDateRange(e.target.value)}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"today\">Today</option>\n <option value=\"week\">This Week</option>\n <option value=\"month\">This Month</option>\n <option value=\"year\">This Year</option>\n </select>\n <button\n type=\"button\"\n onClick={() => alert('Export feature coming soon!')}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Download className=\"h-4 w-4\" />\n Export\n </button>\n </div>\n }\n >\n <div className=\"space-y-6\">\n {/* Revenue Overview */}\n <section>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Revenue Overview</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n {[\n {\n label: \"Today's Revenue\",\n value: analyticsData.revenue.today,\n growth: analyticsData.revenue.growth.daily,\n },\n {\n label: 'This Week',\n value: analyticsData.revenue.week,\n growth: analyticsData.revenue.growth.weekly,\n },\n {\n label: 'This Month',\n value: analyticsData.revenue.month,\n growth: analyticsData.revenue.growth.monthly,\n },\n { label: 'This Year', value: analyticsData.revenue.year, growth: null },\n ].map((card) => (\n <div\n key={card.label}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"rounded-md bg-accent p-2\">\n <IndianRupee className=\"h-5 w-5 text-text-secondary\" />\n </div>\n {card.growth !== null && (\n <div\n className={cn(\n 'flex items-center gap-1 text-xs font-medium',\n card.growth >= 0\n ? 'text-green-600 dark:text-green-400'\n : 'text-red-600 dark:text-red-400'\n )}\n >\n {card.growth >= 0 ? (\n <ArrowUpRight className=\"h-3.5 w-3.5\" />\n ) : (\n <ArrowDownRight className=\"h-3.5 w-3.5\" />\n )}\n {formatPct(card.growth)}\n </div>\n )}\n </div>\n <p className=\"mt-3 text-2xl font-bold text-text-primary\">\n {formatCurrency(card.value, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"mt-1 text-sm text-text-secondary\">{card.label}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* Order Statistics + Popular Times */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Order Statistics */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <ShoppingCart className=\"h-4 w-4 text-text-secondary\" />\n Order Statistics\n </h2>\n </div>\n <div className=\"p-5\">\n <div className=\"grid grid-cols-2 gap-4 mb-5\">\n <div>\n <p className=\"text-xs text-text-secondary\">Total Orders</p>\n <p className=\"text-2xl font-bold text-text-primary\">{analyticsData.orders.total}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Avg. Order Value</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(analyticsData.orders.averageValue, {\n minimumFractionDigits: 0,\n })}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Completed</p>\n <p className=\"text-xl font-bold text-green-600 dark:text-green-400\">\n {analyticsData.orders.completed}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Cancelled</p>\n <p className=\"text-xl font-bold text-red-600 dark:text-red-400\">\n {analyticsData.orders.cancelled}\n </p>\n </div>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary mb-1\">Avg. Preparation Time</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {analyticsData.orders.averagePreparationTime} minutes\n </p>\n </div>\n </div>\n </div>\n\n {/* Popular Times */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n Popular Times\n </h2>\n </div>\n <div className=\"p-5 space-y-2\">\n {analyticsData.orders.popularTimes.map((t) => {\n const pct = (t.orders / maxPopularTime) * 100;\n const label = `${t.hour}:00`;\n return (\n <div key={t.hour}>\n <div className=\"flex items-center justify-between text-xs mb-0.5\">\n <span className=\"text-text-primary w-14\">{label}</span>\n <span className=\"text-text-secondary\">{t.orders} orders</span>\n </div>\n <div className=\"h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className={cn(\n 'h-full rounded-full transition-all',\n t.orders > 25\n ? 'bg-red-500/60'\n : t.orders > 18\n ? 'bg-yellow-500/60'\n : 'bg-green-500/60'\n )}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Performance Metrics */}\n <section>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Performance Metrics</h2>\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n {[\n {\n label: 'Acceptance Rate',\n value: `${analyticsData.performance.acceptanceRate}%`,\n icon: Target,\n color: 'text-green-600 dark:text-green-400',\n },\n {\n label: 'Cancellation Rate',\n value: `${analyticsData.performance.cancellationRate}%`,\n icon: Percent,\n color: 'text-red-600 dark:text-red-400',\n },\n {\n label: 'On-Time Delivery',\n value: `${analyticsData.performance.onTimeDeliveryRate}%`,\n icon: Clock,\n color: 'text-blue-600 dark:text-blue-400',\n },\n {\n label: 'Average Rating',\n value: `${analyticsData.performance.averageRating}`,\n icon: Star,\n color: 'text-yellow-600 dark:text-yellow-400',\n },\n ].map((metric) => {\n const Icon = metric.icon;\n return (\n <div\n key={metric.label}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm\"\n >\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon className={cn('h-5 w-5', metric.color)} />\n <span className=\"text-xs text-text-secondary\">{metric.label}</span>\n </div>\n <p className={cn('text-2xl font-bold', metric.color)}>{metric.value}</p>\n </div>\n );\n })}\n </div>\n </section>\n\n {/* Top Selling + Category Performance */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Top Selling Offerings */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n Top Selling Offerings\n </h2>\n </div>\n <div className=\"divide-y divide-border\">\n {analyticsData.offerings.topSelling.map((item, i) => (\n <div key={item.id} className=\"flex items-center justify-between px-5 py-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-6 w-6 items-center justify-center rounded-full bg-bg-sunken text-xs font-medium text-text-secondary\">\n {i + 1}\n </span>\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{item.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {item.category} | {item.quantity} sold\n </p>\n </div>\n </div>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatCurrency(item.revenue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n ))}\n </div>\n {/* Least Selling */}\n <div className=\"border-t border-border-subtle px-5 py-3\">\n <p className=\"text-xs font-medium text-text-secondary mb-2\">Least Selling</p>\n {analyticsData.offerings.leastSelling.map((item) => (\n <div key={item.id} className=\"flex items-center justify-between py-1.5\">\n <span className=\"text-xs text-text-secondary\">{item.name}</span>\n <span className=\"text-xs text-text-secondary\">\n {item.quantity} sold |{' '}\n {formatCurrency(item.revenue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Category Performance */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4 text-text-secondary\" />\n Category Performance\n </h2>\n </div>\n <div className=\"p-5 space-y-4\">\n {analyticsData.offerings.categories.map((cat) => {\n const pct = (cat.revenue / maxCategoryRevenue) * 100;\n return (\n <div key={cat.category}>\n <div className=\"flex items-center justify-between text-sm mb-1\">\n <span className=\"text-text-primary\">{cat.category}</span>\n <span className=\"text-text-secondary\">\n {formatCurrency(cat.revenue, { minimumFractionDigits: 0 })} ({cat.orders}{' '}\n orders)\n </span>\n </div>\n <div className=\"h-2.5 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-blue-500/60\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Customer Overview + Peak Hours/Days */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Customer Overview */}\n <div className=\"lg:col-span-2 rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Users className=\"h-4 w-4 text-text-secondary\" />\n Customer Overview\n </h2>\n </div>\n <div className=\"p-5\">\n {/* Customer Stats */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4 mb-5\">\n <div>\n <p className=\"text-xs text-text-secondary\">Total Customers</p>\n <p className=\"text-xl font-bold text-text-primary\">\n {analyticsData.customers.total}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">New This Month</p>\n <p className=\"text-xl font-bold text-blue-600 dark:text-blue-400\">\n {analyticsData.customers.new}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Returning</p>\n <p className=\"text-xl font-bold text-green-600 dark:text-green-400\">\n {analyticsData.customers.returning}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Satisfaction</p>\n <p className=\"text-xl font-bold text-yellow-600 dark:text-yellow-400 flex items-center gap-1\">\n <Star className=\"h-4 w-4 fill-yellow-400 text-yellow-400\" />\n {analyticsData.customers.satisfaction.rating}\n </p>\n </div>\n </div>\n\n {/* Top Customers Table */}\n <p className=\"text-sm font-medium text-text-primary mb-2\">Top Customers</p>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-subtle\">\n <th className=\"py-2 text-left font-medium text-text-secondary\">#</th>\n <th className=\"py-2 text-left font-medium text-text-secondary\">Customer</th>\n <th className=\"py-2 text-right font-medium text-text-secondary\">Orders</th>\n <th className=\"py-2 text-right font-medium text-text-secondary\">\n Total Spent\n </th>\n </tr>\n </thead>\n <tbody>\n {analyticsData.customers.topCustomers.map((cust, i) => (\n <tr key={cust.id} className=\"border-b border-border-subtle last:border-0\">\n <td className=\"py-2.5 text-text-secondary\">{i + 1}</td>\n <td className=\"py-2.5 font-medium text-text-primary\">{cust.name}</td>\n <td className=\"py-2.5 text-right text-text-primary\">{cust.orders}</td>\n <td className=\"py-2.5 text-right font-medium text-text-primary\">\n {formatCurrency(cust.totalSpent, { minimumFractionDigits: 0 })}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Reviews Summary */}\n <div className=\"mt-4 flex items-center gap-4 text-sm\">\n <div className=\"flex items-center gap-1.5\">\n <ThumbsUp className=\"h-4 w-4 text-green-600 dark:text-green-400\" />\n <span className=\"text-text-secondary\">\n {analyticsData.customers.satisfaction.positiveReviews}/\n {analyticsData.customers.satisfaction.reviews} positive reviews\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Peak Hours & Days */}\n <div className=\"space-y-6\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n Peak Hours\n </h2>\n </div>\n <div className=\"p-5 space-y-3\">\n {analyticsData.performance.peakHours.map((h) => {\n const pct = (h.orders / maxPeakHourOrders) * 100;\n return (\n <div key={h.hour}>\n <div className=\"flex items-center justify-between text-xs mb-1\">\n <span className=\"text-text-primary\">{h.hour}</span>\n <span className=\"text-text-secondary\">{h.orders} orders</span>\n </div>\n <div className=\"h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className={cn(\n 'h-full rounded-full',\n h.orders > 28\n ? 'bg-red-500/60'\n : h.orders > 22\n ? 'bg-yellow-500/60'\n : 'bg-green-500/60'\n )}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <CalendarDays className=\"h-4 w-4 text-text-secondary\" />\n Peak Days\n </h2>\n </div>\n <div className=\"p-5 space-y-3\">\n {analyticsData.performance.peakDays.map((d) => {\n const pct = (d.orders / maxPeakDayOrders) * 100;\n return (\n <div key={d.day}>\n <div className=\"flex items-center justify-between text-xs mb-1\">\n <span className=\"text-text-primary\">{d.day}</span>\n <span className=\"text-text-secondary\">{d.orders} orders</span>\n </div>\n <div className=\"h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-blue-500/60\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n\n {/* Order Trends Table (from mockAdminAnalytics) */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n Daily Order Trends\n </h2>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-subtle\">\n <th className=\"px-5 py-2.5 text-left font-medium text-text-secondary\">Date</th>\n <th className=\"px-5 py-2.5 text-right font-medium text-text-secondary\">\n Orders\n </th>\n <th className=\"px-5 py-2.5 text-right font-medium text-text-secondary\">\n Revenue\n </th>\n </tr>\n </thead>\n <tbody>\n {mockAdminAnalytics.orderTrends.map((day) => (\n <tr key={day.date} className=\"border-b border-border-subtle last:border-0\">\n <td className=\"px-5 py-2.5 text-text-primary\">\n {new Date(day.date).toLocaleDateString('en-IN', {\n day: '2-digit',\n month: 'short',\n })}\n </td>\n <td className=\"px-5 py-2.5 text-right text-text-primary\">{day.orders}</td>\n <td className=\"px-5 py-2.5 text-right font-medium text-text-primary\">\n {formatCurrency(day.revenue, { minimumFractionDigits: 0 })}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n\n {/* Customer Growth Mini Chart (from mockAdminAnalytics) */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Users className=\"h-4 w-4 text-text-secondary\" />\n Monthly Customer Growth\n </h2>\n </div>\n <div className=\"p-5\">\n <div className=\"flex items-end gap-1.5 h-20\">\n {mockAdminAnalytics.customerGrowth.map((month) => {\n const maxNew = Math.max(\n ...mockAdminAnalytics.customerGrowth.map((m) => m.newCustomers)\n );\n const height = (month.newCustomers / maxNew) * 100;\n return (\n <div\n key={month.month}\n className=\"flex-1 rounded-t bg-blue-500/40 hover:bg-blue-500/60 transition-colors cursor-default\"\n style={{ height: `${height}%` }}\n title={`${month.month}: ${month.newCustomers} new customers`}\n />\n );\n })}\n </div>\n <div className=\"flex justify-between mt-2 text-xs text-text-secondary\">\n {mockAdminAnalytics.customerGrowth.length > 0 && (\n <>\n <span>{mockAdminAnalytics.customerGrowth[0].month}</span>\n <span>\n {\n mockAdminAnalytics.customerGrowth[\n mockAdminAnalytics.customerGrowth.length - 1\n ].month\n }\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AnalyticsDashboard.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/AnalyticsDashboard.tsx"],"sourcesContent":["/**\n * Analytics Dashboard Page\n *\n * Revenue overview (today/week/month/year with growth), order statistics,\n * popular times progress bars, performance metrics, top selling offerings,\n * category performance, customer overview with top customers table,\n * peak hours/days, date range selector.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState } from'react';\nimport {\n IndianRupee,\n ShoppingCart,\n Users,\n TrendingUp,\n BarChart3,\n Clock,\n Star,\n ArrowUpRight,\n ArrowDownRight,\n Download,\n Target,\n Percent,\n ThumbsUp,\n CalendarDays,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { mockAdminAnalytics, mockDashboardStats } from'../../mocks/data';\nimport { formatCurrency, formatNumber } from'../../utils/formatters';\nimport { cn } from'../../utils/cn';\n\n// ============================================================================\n// Mock Analytics Data (full from legacy)\n// ============================================================================\n\nconst analyticsData = {\n revenue: {\n today: 12450,\n week: 87150,\n month: 348600,\n year: 4183200,\n growth: { daily: 12.5, weekly: 8.3, monthly: 15.2 },\n },\n orders: {\n total: 156,\n pending: 3,\n completed: 145,\n cancelled: 8,\n averageValue: 285,\n averagePreparationTime: 18,\n popularTimes: [\n { hour: 8, orders: 12 },\n { hour: 9, orders: 15 },\n { hour: 10, orders: 18 },\n { hour: 11, orders: 22 },\n { hour: 12, orders: 28 },\n { hour: 13, orders: 32 },\n { hour: 14, orders: 16 },\n { hour: 15, orders: 12 },\n { hour: 16, orders: 14 },\n { hour: 17, orders: 18 },\n { hour: 18, orders: 20 },\n { hour: 19, orders: 25 },\n { hour: 20, orders: 22 },\n { hour: 21, orders: 15 },\n ],\n },\n offerings: {\n topSelling: [\n { id: '1', name: 'Masala Dosa', quantity: 245, revenue: 19600, category: 'Food & Beverage' },\n {\n id: '2',\n name: 'Haircut Service',\n quantity: 89,\n revenue: 11340,\n category: 'Personal Care & Beauty',\n },\n { id: '3', name: 'Filter Coffee', quantity: 312, revenue: 9360, category: 'Food & Beverage' },\n {\n id: '4',\n name: 'Mobile Repair',\n quantity: 67,\n revenue: 6680,\n category: 'Repair & Maintenance',\n },\n { id: '5', name: 'Pongal', quantity: 98, revenue: 5880, category: 'Food & Beverage' },\n ],\n leastSelling: [\n { id: '6', name: 'Bisi Bele Bath', quantity: 12, revenue: 1440, category: 'Food & Beverage' },\n { id: '7', name: 'Cleaning Service', quantity: 8, revenue: 640, category: 'Home Services' },\n { id: '8', name: 'Kosambari', quantity: 15, revenue: 450, category: 'Food & Beverage' },\n ],\n categories: [\n { category: 'Food & Beverage', revenue: 45000, orders: 450 },\n { category: 'Personal Care & Beauty', revenue: 25000, orders: 180 },\n { category: 'Repair & Maintenance', revenue: 15000, orders: 120 },\n { category: 'Home Services', revenue: 8000, orders: 80 },\n ],\n },\n customers: {\n total: 342,\n new: 45,\n returning: 297,\n topCustomers: [\n { id: '1', name: 'Rahul Sharma', orders: 23, totalSpent: 6555 },\n { id: '2', name: 'Priya Patel', orders: 19, totalSpent: 5415 },\n { id: '3', name: 'Amit Kumar', orders: 17, totalSpent: 4845 },\n { id: '4', name: 'Sneha Reddy', orders: 15, totalSpent: 4275 },\n { id: '5', name: 'Vijay Singh', orders: 14, totalSpent: 3990 },\n ],\n satisfaction: { rating: 4.6, reviews: 89, positiveReviews: 78 },\n },\n performance: {\n acceptanceRate: 94,\n cancellationRate: 6,\n onTimeDeliveryRate: 88,\n averageRating: 4.6,\n peakHours: [\n { hour: '12-1 PM', orders: 32 },\n { hour: '1-2 PM', orders: 28 },\n { hour: '7-8 PM', orders: 25 },\n { hour: '8-9 PM', orders: 22 },\n ],\n peakDays: [\n { day: 'Sunday', orders: 45 },\n { day: 'Saturday', orders: 42 },\n { day: 'Friday', orders: 38 },\n ],\n },\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const AnalyticsDashboard = () => {\n const { navigateTo } = useAdapterCloud();\n const [dateRange, setDateRange] = useState('week');\n\n const maxPopularTime = Math.max(...analyticsData.orders.popularTimes.map((t) => t.orders));\n const maxCategoryRevenue = Math.max(...analyticsData.offerings.categories.map((c) => c.revenue));\n const maxPeakHourOrders = Math.max(...analyticsData.performance.peakHours.map((h) => h.orders));\n const maxPeakDayOrders = Math.max(...analyticsData.performance.peakDays.map((d) => d.orders));\n\n const formatPct = (v: number) => `${v > 0 ? '+' : ''}${v}%`;\n\n return (\n <PageLayout\n title=\"Analytics Dashboard\"\n description=\"Business performance insights and data\"\n actions={\n <div className=\"flex items-center gap-2\">\n <select\n value={dateRange}\n onChange={(e) => setDateRange(e.target.value)}\n className=\"rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"today\">Today</option>\n <option value=\"week\">This Week</option>\n <option value=\"month\">This Month</option>\n <option value=\"year\">This Year</option>\n </select>\n <button\n type=\"button\"\n onClick={() => alert('Export feature coming soon!')}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken transition-colors\"\n >\n <Download className=\"h-4 w-4\" />\n Export\n </button>\n </div>\n }\n >\n <div className=\"space-y-6\">\n {/* Revenue Overview */}\n <section>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Revenue Overview</h2>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n {[\n {\n label: \"Today's Revenue\",\n value: analyticsData.revenue.today,\n growth: analyticsData.revenue.growth.daily,\n },\n {\n label: 'This Week',\n value: analyticsData.revenue.week,\n growth: analyticsData.revenue.growth.weekly,\n },\n {\n label: 'This Month',\n value: analyticsData.revenue.month,\n growth: analyticsData.revenue.growth.monthly,\n },\n { label: 'This Year', value: analyticsData.revenue.year, growth: null },\n ].map((card) => (\n <div\n key={card.label}\n className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"rounded-md bg-accent p-2\">\n <IndianRupee className=\"h-5 w-5 text-text-secondary\" />\n </div>\n {card.growth !== null && (\n <div\n className={cn(\n 'flex items-center gap-1 text-xs font-medium',\n card.growth >= 0\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n {card.growth >= 0 ? (\n <ArrowUpRight className=\"h-3.5 w-3.5\" />\n ) : (\n <ArrowDownRight className=\"h-3.5 w-3.5\" />\n )}\n {formatPct(card.growth)}\n </div>\n )}\n </div>\n <p className=\"mt-3 text-2xl font-bold text-text-primary\">\n {formatCurrency(card.value, { minimumFractionDigits: 0 })}\n </p>\n <p className=\"mt-1 text-sm text-text-secondary\">{card.label}</p>\n </div>\n ))}\n </div>\n </section>\n\n {/* Order Statistics + Popular Times */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Order Statistics */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <ShoppingCart className=\"h-4 w-4 text-text-secondary\" />\n Order Statistics\n </h2>\n </div>\n <div className=\"p-5\">\n <div className=\"grid grid-cols-2 gap-4 mb-5\">\n <div>\n <p className=\"text-xs text-text-secondary\">Total Orders</p>\n <p className=\"text-2xl font-bold text-text-primary\">{analyticsData.orders.total}</p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Avg. Order Value</p>\n <p className=\"text-2xl font-bold text-text-primary\">\n {formatCurrency(analyticsData.orders.averageValue, {\n minimumFractionDigits: 0,\n })}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Completed</p>\n <p className=\"text-xl font-bold text-status-success-text\">\n {analyticsData.orders.completed}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Cancelled</p>\n <p className=\"text-xl font-bold text-status-error-text\">\n {analyticsData.orders.cancelled}\n </p>\n </div>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary mb-1\">Avg. Preparation Time</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {analyticsData.orders.averagePreparationTime} minutes\n </p>\n </div>\n </div>\n </div>\n\n {/* Popular Times */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n Popular Times\n </h2>\n </div>\n <div className=\"p-5 space-y-2\">\n {analyticsData.orders.popularTimes.map((t) => {\n const pct = (t.orders / maxPopularTime) * 100;\n const label = `${t.hour}:00`;\n return (\n <div key={t.hour}>\n <div className=\"flex items-center justify-between text-xs mb-0.5\">\n <span className=\"text-text-primary w-14\">{label}</span>\n <span className=\"text-text-secondary\">{t.orders} orders</span>\n </div>\n <div className=\"h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className={cn(\n 'h-full rounded-full transition-all',\n t.orders > 25\n ? 'bg-status-error-bg-subtle/60'\n : t.orders > 18\n ? 'bg-status-warning-bg-subtle/60'\n : 'bg-status-success-bg-subtle/60'\n )}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Performance Metrics */}\n <section>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Performance Metrics</h2>\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n {[\n {\n label: 'Acceptance Rate',\n value: `${analyticsData.performance.acceptanceRate}%`,\n icon: Target,\n color: 'text-status-success-text',\n },\n {\n label: 'Cancellation Rate',\n value: `${analyticsData.performance.cancellationRate}%`,\n icon: Percent,\n color: 'text-status-error-text',\n },\n {\n label: 'On-Time Delivery',\n value: `${analyticsData.performance.onTimeDeliveryRate}%`,\n icon: Clock,\n color: 'text-accent-blue',\n },\n {\n label: 'Average Rating',\n value: `${analyticsData.performance.averageRating}`,\n icon: Star,\n color: 'text-status-warning-text',\n },\n ].map((metric) => {\n const Icon = metric.icon;\n return (\n <div\n key={metric.label}\n className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\"\n >\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon className={cn('h-5 w-5', metric.color)} />\n <span className=\"text-xs text-text-secondary\">{metric.label}</span>\n </div>\n <p className={cn('text-2xl font-bold', metric.color)}>{metric.value}</p>\n </div>\n );\n })}\n </div>\n </section>\n\n {/* Top Selling + Category Performance */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Top Selling Offerings */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n Top Selling Offerings\n </h2>\n </div>\n <div className=\"divide-y divide-border\">\n {analyticsData.offerings.topSelling.map((item, i) => (\n <div key={item.id} className=\"flex items-center justify-between px-5 py-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-6 w-6 items-center justify-center rounded-full bg-bg-sunken text-xs font-medium text-text-secondary\">\n {i + 1}\n </span>\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{item.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {item.category} | {item.quantity} sold\n </p>\n </div>\n </div>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatCurrency(item.revenue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n ))}\n </div>\n {/* Least Selling */}\n <div className=\"border-t border-border-subtle px-5 py-3\">\n <p className=\"text-xs font-medium text-text-secondary mb-2\">Least Selling</p>\n {analyticsData.offerings.leastSelling.map((item) => (\n <div key={item.id} className=\"flex items-center justify-between py-1.5\">\n <span className=\"text-xs text-text-secondary\">{item.name}</span>\n <span className=\"text-xs text-text-secondary\">\n {item.quantity} sold |{' '}\n {formatCurrency(item.revenue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n {/* Category Performance */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4 text-text-secondary\" />\n Category Performance\n </h2>\n </div>\n <div className=\"p-5 space-y-4\">\n {analyticsData.offerings.categories.map((cat) => {\n const pct = (cat.revenue / maxCategoryRevenue) * 100;\n return (\n <div key={cat.category}>\n <div className=\"flex items-center justify-between text-sm mb-1\">\n <span className=\"text-text-primary\">{cat.category}</span>\n <span className=\"text-text-secondary\">\n {formatCurrency(cat.revenue, { minimumFractionDigits: 0 })} ({cat.orders}{' '}\n orders)\n </span>\n </div>\n <div className=\"h-2.5 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-accent-blue-subtle/60\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Customer Overview + Peak Hours/Days */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Customer Overview */}\n <div className=\"lg:col-span-2 rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Users className=\"h-4 w-4 text-text-secondary\" />\n Customer Overview\n </h2>\n </div>\n <div className=\"p-5\">\n {/* Customer Stats */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4 mb-5\">\n <div>\n <p className=\"text-xs text-text-secondary\">Total Customers</p>\n <p className=\"text-xl font-bold text-text-primary\">\n {analyticsData.customers.total}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">New This Month</p>\n <p className=\"text-xl font-bold text-accent-blue\">\n {analyticsData.customers.new}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Returning</p>\n <p className=\"text-xl font-bold text-status-success-text\">\n {analyticsData.customers.returning}\n </p>\n </div>\n <div>\n <p className=\"text-xs text-text-secondary\">Satisfaction</p>\n <p className=\"text-xl font-bold text-status-warning-text flex items-center gap-1\">\n <Star className=\"h-4 w-4 fill-status-warning-text text-status-warning-text\" />\n {analyticsData.customers.satisfaction.rating}\n </p>\n </div>\n </div>\n\n {/* Top Customers Table */}\n <p className=\"text-sm font-medium text-text-primary mb-2\">Top Customers</p>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-subtle\">\n <th className=\"py-2 text-left font-medium text-text-secondary\">#</th>\n <th className=\"py-2 text-left font-medium text-text-secondary\">Customer</th>\n <th className=\"py-2 text-right font-medium text-text-secondary\">Orders</th>\n <th className=\"py-2 text-right font-medium text-text-secondary\">\n Total Spent\n </th>\n </tr>\n </thead>\n <tbody>\n {analyticsData.customers.topCustomers.map((cust, i) => (\n <tr key={cust.id} className=\"border-b border-border-subtle last:border-0\">\n <td className=\"py-2.5 text-text-secondary\">{i + 1}</td>\n <td className=\"py-2.5 font-medium text-text-primary\">{cust.name}</td>\n <td className=\"py-2.5 text-right text-text-primary\">{cust.orders}</td>\n <td className=\"py-2.5 text-right font-medium text-text-primary\">\n {formatCurrency(cust.totalSpent, { minimumFractionDigits: 0 })}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {/* Reviews Summary */}\n <div className=\"mt-4 flex items-center gap-4 text-sm\">\n <div className=\"flex items-center gap-1.5\">\n <ThumbsUp className=\"h-4 w-4 text-status-success-text\" />\n <span className=\"text-text-secondary\">\n {analyticsData.customers.satisfaction.positiveReviews}/\n {analyticsData.customers.satisfaction.reviews} positive reviews\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Peak Hours & Days */}\n <div className=\"space-y-6\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-text-secondary\" />\n Peak Hours\n </h2>\n </div>\n <div className=\"p-5 space-y-3\">\n {analyticsData.performance.peakHours.map((h) => {\n const pct = (h.orders / maxPeakHourOrders) * 100;\n return (\n <div key={h.hour}>\n <div className=\"flex items-center justify-between text-xs mb-1\">\n <span className=\"text-text-primary\">{h.hour}</span>\n <span className=\"text-text-secondary\">{h.orders} orders</span>\n </div>\n <div className=\"h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className={cn(\n 'h-full rounded-full',\n h.orders > 28\n ? 'bg-status-error-bg-subtle/60'\n : h.orders > 22\n ? 'bg-status-warning-bg-subtle/60'\n : 'bg-status-success-bg-subtle/60'\n )}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <CalendarDays className=\"h-4 w-4 text-text-secondary\" />\n Peak Days\n </h2>\n </div>\n <div className=\"p-5 space-y-3\">\n {analyticsData.performance.peakDays.map((d) => {\n const pct = (d.orders / maxPeakDayOrders) * 100;\n return (\n <div key={d.day}>\n <div className=\"flex items-center justify-between text-xs mb-1\">\n <span className=\"text-text-primary\">{d.day}</span>\n <span className=\"text-text-secondary\">{d.orders} orders</span>\n </div>\n <div className=\"h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-accent-blue-subtle/60\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n\n {/* Order Trends Table (from mockAdminAnalytics) */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n Daily Order Trends\n </h2>\n </div>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-subtle\">\n <th className=\"px-5 py-2.5 text-left font-medium text-text-secondary\">Date</th>\n <th className=\"px-5 py-2.5 text-right font-medium text-text-secondary\">\n Orders\n </th>\n <th className=\"px-5 py-2.5 text-right font-medium text-text-secondary\">\n Revenue\n </th>\n </tr>\n </thead>\n <tbody>\n {mockAdminAnalytics.orderTrends.map((day) => (\n <tr key={day.date} className=\"border-b border-border-subtle last:border-0\">\n <td className=\"px-5 py-2.5 text-text-primary\">\n {new Date(day.date).toLocaleDateString('en-IN', {\n day: '2-digit',\n month: 'short',\n })}\n </td>\n <td className=\"px-5 py-2.5 text-right text-text-primary\">{day.orders}</td>\n <td className=\"px-5 py-2.5 text-right font-medium text-text-primary\">\n {formatCurrency(day.revenue, { minimumFractionDigits: 0 })}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n\n {/* Customer Growth Mini Chart (from mockAdminAnalytics) */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm\">\n <div className=\"border-b border-border-subtle px-5 py-4\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Users className=\"h-4 w-4 text-text-secondary\" />\n Monthly Customer Growth\n </h2>\n </div>\n <div className=\"p-5\">\n <div className=\"flex items-end gap-1.5 h-20\">\n {mockAdminAnalytics.customerGrowth.map((month) => {\n const maxNew = Math.max(\n ...mockAdminAnalytics.customerGrowth.map((m) => m.newCustomers)\n );\n const height = (month.newCustomers / maxNew) * 100;\n return (\n <div\n key={month.month}\n className=\"flex-1 rounded-t bg-accent-blue-subtle/40 hover:bg-accent-blue-subtle/60 transition-colors cursor-default\"\n style={{ height: `${height}%` }}\n title={`${month.month}: ${month.newCustomers} new customers`}\n />\n );\n })}\n </div>\n <div className=\"flex justify-between mt-2 text-xs text-text-secondary\">\n {mockAdminAnalytics.customerGrowth.length > 0 && (\n <>\n <span>{mockAdminAnalytics.customerGrowth[0].month}</span>\n <span>\n {\n mockAdminAnalytics.customerGrowth[\n mockAdminAnalytics.customerGrowth.length - 1\n ].month\n }\n </span>\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
@@ -99,7 +99,7 @@ var _ = [
99
99
  })] }), /* @__PURE__ */ h("button", {
100
100
  type: "button",
101
101
  onClick: () => i(!r),
102
- className: t("h-6 w-11 rounded-full transition-colors relative", r ? "bg-blue-500" : "bg-muted-foreground/30"),
102
+ className: t("h-6 w-11 rounded-full transition-colors relative", r ? "bg-accent-blue-subtle" : "bg-muted-foreground/30"),
103
103
  children: /* @__PURE__ */ h("div", { className: t("absolute top-0.5 h-5 w-5 rounded-full bg-white transition-transform", r ? "translate-x-5" : "translate-x-0.5") })
104
104
  })]
105
105
  }), x = () => {
@@ -186,7 +186,7 @@ var _ = [
186
186
  type: "button",
187
187
  onClick: F,
188
188
  disabled: l,
189
- className: t("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", f ? "bg-green-500/10 text-green-600 dark:text-green-400" : l ? "bg-bg-sunken text-text-secondary cursor-not-allowed" : "bg-accent text-text-primary hover:bg-accent/80"),
189
+ className: t("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", f ? "bg-status-success-bg-subtle/10 text-status-success-text" : l ? "bg-bg-sunken text-text-secondary cursor-not-allowed" : "bg-accent text-text-primary hover:bg-accent/80"),
190
190
  children: l ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), "Saving..."] }) : f ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(o, { className: "h-4 w-4" }), "Saved!"] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(d, { className: "h-4 w-4" }), "Save Settings"] })
191
191
  }),
192
192
  children: /* @__PURE__ */ g("div", {
@@ -240,7 +240,7 @@ var _ = [
240
240
  /* @__PURE__ */ h("div", {
241
241
  className: "flex-1 min-w-0",
242
242
  children: /* @__PURE__ */ g("div", {
243
- className: "rounded-lg border border-border-subtle bg-bg-surface p-5 sm:p-6 shadow-sm",
243
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 sm:p-6 bg-gloss-card shadow-pop",
244
244
  children: [
245
245
  s === "general" && /* @__PURE__ */ g("div", {
246
246
  className: "space-y-5",
@@ -271,9 +271,9 @@ var _ = [
271
271
  })]
272
272
  }),
273
273
  /* @__PURE__ */ g("div", {
274
- className: "flex items-start gap-3 rounded-md bg-blue-500/5 border border-blue-500/20 p-3",
275
- children: [/* @__PURE__ */ h(i, { className: "h-4 w-4 text-blue-600 dark:text-blue-400 shrink-0 mt-0.5" }), /* @__PURE__ */ h("p", {
276
- className: "text-xs text-blue-600 dark:text-blue-400",
274
+ className: "flex items-start gap-3 rounded-md bg-accent-blue-subtle/5 border border-accent-blue-subtle/20 p-3",
275
+ children: [/* @__PURE__ */ h(i, { className: "h-4 w-4 text-accent-blue shrink-0 mt-0.5" }), /* @__PURE__ */ h("p", {
276
+ className: "text-xs text-accent-blue",
277
277
  children: "GST, PAN, and FSSAI details are used for invoicing and compliance. Changes require verification."
278
278
  })]
279
279
  }),
@@ -683,7 +683,7 @@ var _ = [
683
683
  type: "button",
684
684
  onClick: F,
685
685
  disabled: l,
686
- className: t("inline-flex items-center gap-2 rounded-md px-6 py-2 text-sm font-medium transition-colors", f ? "bg-green-500/10 text-green-600 dark:text-green-400" : l ? "bg-bg-sunken text-text-secondary cursor-not-allowed" : "bg-accent text-text-primary hover:bg-accent/80"),
686
+ className: t("inline-flex items-center gap-2 rounded-md px-6 py-2 text-sm font-medium transition-colors", f ? "bg-status-success-bg-subtle/10 text-status-success-text" : l ? "bg-bg-sunken text-text-secondary cursor-not-allowed" : "bg-accent text-text-primary hover:bg-accent/80"),
687
687
  children: l ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), "Saving..."] }) : f ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(o, { className: "h-4 w-4" }), "Saved!"] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(d, { className: "h-4 w-4" }), "Save Settings"] })
688
688
  })
689
689
  })
@@ -1 +1 @@
1
- {"version":3,"file":"BusinessSettingsPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/BusinessSettingsPage.tsx"],"sourcesContent":["/**\n * Business Settings Page\n *\n * Tabbed interface (general/contact/location/operating/policies/notifications/integrations),\n * all form fields per tab including social media, coordinates, delivery charges,\n * payment methods, policy textareas, notification toggles, payment gateway config.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState } from 'react';\nimport {\n Store,\n FileText,\n CreditCard,\n Building2,\n Save,\n AlertCircle,\n MapPin,\n Clock,\n Shield,\n Bell,\n Link2,\n CheckCircle2,\n Globe,\n Phone,\n Mail,\n Instagram,\n Twitter,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype TabId =\n | 'general'\n | 'contact'\n | 'location'\n | 'operating'\n | 'policies'\n | 'notifications'\n | 'integration';\n\ninterface Tab {\n id: TabId;\n label: string;\n icon: typeof Store;\n}\n\ninterface GeneralSettings {\n businessName: string;\n description: string;\n category: string;\n gstNumber: string;\n panNumber: string;\n fssaiLicense: string;\n establishedYear: string;\n}\n\ninterface ContactSettings {\n phone: string;\n email: string;\n website: string;\n whatsapp: string;\n instagram: string;\n twitter: string;\n facebook: string;\n}\n\ninterface LocationSettings {\n address: string;\n city: string;\n state: string;\n pincode: string;\n latitude: string;\n longitude: string;\n deliveryRadius: number;\n deliveryCharge: number;\n freeDeliveryAbove: number;\n}\n\ninterface OperatingSettings {\n autoAcceptOrders: boolean;\n preparationTime: number;\n maxConcurrentOrders: number;\n advanceBookingDays: number;\n}\n\ninterface PolicySettings {\n returnPolicy: string;\n cancellationPolicy: string;\n privacyPolicy: string;\n termsOfService: string;\n}\n\ninterface NotificationSettings {\n newOrderEmail: boolean;\n newOrderSms: boolean;\n newOrderPush: boolean;\n orderUpdateEmail: boolean;\n orderUpdatePush: boolean;\n dailySummaryEmail: boolean;\n weeklySummaryEmail: boolean;\n lowStockAlert: boolean;\n reviewNotification: boolean;\n marketingEmails: boolean;\n}\n\ninterface IntegrationSettings {\n paymentGateway: string;\n paymentGatewayKey: string;\n smsProvider: string;\n smsApiKey: string;\n analyticsId: string;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst tabs: Tab[] = [\n { id: 'general', label: 'General', icon: Store },\n { id: 'contact', label: 'Contact', icon: Phone },\n { id: 'location', label: 'Location', icon: MapPin },\n { id: 'operating', label: 'Operating', icon: Clock },\n { id: 'policies', label: 'Policies', icon: Shield },\n { id: 'notifications', label: 'Notifications', icon: Bell },\n { id: 'integration', label: 'Integrations', icon: Link2 },\n];\n\nconst categories = [\n 'Food & Beverage',\n 'Personal Care & Beauty',\n 'Repair & Maintenance',\n 'Home Services',\n 'Clothing & Fashion',\n 'Health & Wellness',\n 'Education & Skills',\n 'Retail & Merchandise',\n 'Grocery & Essentials',\n];\n\n// ============================================================================\n// Form Field Component\n// ============================================================================\n\ninterface FormFieldProps {\n label: string;\n value: string | number;\n onChange: (value: string) => void;\n type?: 'text' | 'email' | 'tel' | 'url' | 'number' | 'textarea' | 'select';\n options?: string[];\n placeholder?: string;\n hint?: string;\n rows?: number;\n}\n\nconst FormField = ({\n label,\n value,\n onChange,\n type = 'text',\n options,\n placeholder,\n hint,\n rows = 3,\n}: FormFieldProps) => {\n const id = label.toLowerCase().replace(/\\s+/g, '-');\n return (\n <div>\n <label htmlFor={id} className=\"block text-sm font-medium text-text-primary mb-1.5\">\n {label}\n </label>\n {type === 'textarea' ? (\n <textarea\n id={id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n rows={rows}\n placeholder={placeholder}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] resize-none\"\n />\n ) : type === 'select' ? (\n <select\n id={id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"w-full rounded-md 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 {options?.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n ) : (\n <input\n id={id}\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n )}\n {hint && <p className=\"mt-1 text-xs text-text-secondary\">{hint}</p>}\n </div>\n );\n};\n\n// ============================================================================\n// Toggle Component\n// ============================================================================\n\nconst Toggle = ({\n label,\n description,\n checked,\n onChange,\n}: {\n label: string;\n description?: string;\n checked: boolean;\n onChange: (v: boolean) => void;\n}) => (\n <div className=\"flex items-center justify-between py-3\">\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{label}</p>\n {description && <p className=\"text-xs text-text-secondary mt-0.5\">{description}</p>}\n </div>\n <button\n type=\"button\"\n onClick={() => onChange(!checked)}\n className={cn(\n 'h-6 w-11 rounded-full transition-colors relative',\n checked ? 'bg-blue-500' : 'bg-muted-foreground/30'\n )}\n >\n <div\n className={cn(\n 'absolute top-0.5 h-5 w-5 rounded-full bg-white transition-transform',\n checked ? 'translate-x-5' : 'translate-x-0.5'\n )}\n />\n </button>\n </div>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const BusinessSettingsPage = () => {\n const { navigateTo } = useAdapterCloud();\n const [activeTab, setActiveTab] = useState<TabId>('general');\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n\n // Form state\n const [general, setGeneral] = useState<GeneralSettings>({\n businessName: 'Dosa Express',\n description:\n 'Authentic South Indian street food with a modern twist. Serving crispy dosas, filter coffee, and more since 2020.',\n category: 'Food & Beverage',\n gstNumber: '29ABCDE1234F1Z5',\n panNumber: 'ABCDE1234F',\n fssaiLicense: '12345678',\n establishedYear: '2020',\n });\n\n const [contact, setContact] = useState<ContactSettings>({\n phone: '+91-9876543210',\n email: 'ravi@dosaexpress.in',\n website: 'https://dosaexpress.in',\n whatsapp: '+91-9876543210',\n instagram: '@dosaexpress',\n twitter: '@dosaexpress',\n facebook: 'dosaexpress',\n });\n\n const [location, setLocation] = useState<LocationSettings>({\n address: 'Koramangala 5th Block',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560034',\n latitude: '12.9352',\n longitude: '77.6245',\n deliveryRadius: 5,\n deliveryCharge: 30,\n freeDeliveryAbove: 300,\n });\n\n const [operating, setOperating] = useState<OperatingSettings>({\n autoAcceptOrders: true,\n preparationTime: 15,\n maxConcurrentOrders: 10,\n advanceBookingDays: 3,\n });\n\n const [policies, setPolicies] = useState<PolicySettings>({\n returnPolicy:\n 'Items can be returned within 30 minutes of delivery if there are quality issues. Refund will be processed within 2-3 business days.',\n cancellationPolicy:\n 'Orders can be cancelled within 2 minutes of placing. After preparation starts, cancellation is not allowed.',\n privacyPolicy:\n 'We collect and process your data in accordance with applicable privacy laws. Your data is never shared with third parties without consent.',\n termsOfService:\n 'By using our services, you agree to our terms. All prices are inclusive of taxes unless stated otherwise.',\n });\n\n const [notifications, setNotifications] = useState<NotificationSettings>({\n newOrderEmail: true,\n newOrderSms: true,\n newOrderPush: true,\n orderUpdateEmail: true,\n orderUpdatePush: true,\n dailySummaryEmail: true,\n weeklySummaryEmail: false,\n lowStockAlert: true,\n reviewNotification: true,\n marketingEmails: false,\n });\n\n const [integration, setIntegration] = useState<IntegrationSettings>({\n paymentGateway: 'razorpay',\n paymentGatewayKey: 'rzp_live_xxxxxxxx',\n smsProvider: 'twilio',\n smsApiKey: '',\n analyticsId: '',\n });\n\n const handleSave = () => {\n setSaving(true);\n setTimeout(() => {\n setSaving(false);\n setSaved(true);\n setTimeout(() => setSaved(false), 3000);\n }, 1000);\n };\n\n const updateGeneral = (field: keyof GeneralSettings) => (value: string) =>\n setGeneral((p) => ({ ...p, [field]: value }));\n const updateContact = (field: keyof ContactSettings) => (value: string) =>\n setContact((p) => ({ ...p, [field]: value }));\n const updateLocation = (field: keyof LocationSettings) => (value: string) =>\n setLocation((p) => ({\n ...p,\n [field]:\n field === 'deliveryRadius' || field === 'deliveryCharge' || field === 'freeDeliveryAbove'\n ? parseInt(value) || 0\n : value,\n }));\n const updatePolicies = (field: keyof PolicySettings) => (value: string) =>\n setPolicies((p) => ({ ...p, [field]: value }));\n const updateNotification = (field: keyof NotificationSettings) => (value: boolean) =>\n setNotifications((p) => ({ ...p, [field]: value }));\n const updateIntegration = (field: keyof IntegrationSettings) => (value: string) =>\n setIntegration((p) => ({ ...p, [field]: value }));\n\n // ---- Tab content renderers ----\n\n const renderGeneralTab = () => (\n <div className=\"space-y-5\">\n <FormField\n label=\"Business Name\"\n value={general.businessName}\n onChange={updateGeneral('businessName')}\n />\n <FormField\n label=\"Description\"\n value={general.description}\n onChange={updateGeneral('description')}\n type=\"textarea\"\n />\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Category\"\n value={general.category}\n onChange={updateGeneral('category')}\n type=\"select\"\n options={categories}\n />\n <FormField\n label=\"Established Year\"\n value={general.establishedYear}\n onChange={updateGeneral('establishedYear')}\n />\n </div>\n <div className=\"flex items-start gap-3 rounded-md bg-blue-500/5 border border-blue-500/20 p-3\">\n <AlertCircle className=\"h-4 w-4 text-blue-600 dark:text-blue-400 shrink-0 mt-0.5\" />\n <p className=\"text-xs text-blue-600 dark:text-blue-400\">\n GST, PAN, and FSSAI details are used for invoicing and compliance. Changes require\n verification.\n </p>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"GST Number\"\n value={general.gstNumber}\n onChange={updateGeneral('gstNumber')}\n hint=\"15-digit GST ID\"\n />\n <FormField\n label=\"PAN Number\"\n value={general.panNumber}\n onChange={updateGeneral('panNumber')}\n hint=\"10-digit PAN\"\n />\n <FormField\n label=\"FSSAI License\"\n value={general.fssaiLicense}\n onChange={updateGeneral('fssaiLicense')}\n hint=\"FSSAI license number\"\n />\n </div>\n </div>\n );\n\n const renderContactTab = () => (\n <div className=\"space-y-5\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Phone\"\n value={contact.phone}\n onChange={updateContact('phone')}\n type=\"tel\"\n />\n <FormField\n label=\"Email\"\n value={contact.email}\n onChange={updateContact('email')}\n type=\"email\"\n />\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Website\"\n value={contact.website}\n onChange={updateContact('website')}\n type=\"url\"\n placeholder=\"https://\"\n />\n <FormField\n label=\"WhatsApp\"\n value={contact.whatsapp}\n onChange={updateContact('whatsapp')}\n type=\"tel\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">Social Media</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"Instagram\"\n value={contact.instagram}\n onChange={updateContact('instagram')}\n placeholder=\"@handle\"\n />\n <FormField\n label=\"Twitter / X\"\n value={contact.twitter}\n onChange={updateContact('twitter')}\n placeholder=\"@handle\"\n />\n <FormField\n label=\"Facebook\"\n value={contact.facebook}\n onChange={updateContact('facebook')}\n placeholder=\"Page name\"\n />\n </div>\n </div>\n );\n\n const renderLocationTab = () => (\n <div className=\"space-y-5\">\n <FormField\n label=\"Address\"\n value={location.address}\n onChange={updateLocation('address')}\n type=\"textarea\"\n rows={2}\n />\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField label=\"City\" value={location.city} onChange={updateLocation('city')} />\n <FormField label=\"State\" value={location.state} onChange={updateLocation('state')} />\n <FormField label=\"Pincode\" value={location.pincode} onChange={updateLocation('pincode')} />\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Latitude\"\n value={location.latitude}\n onChange={updateLocation('latitude')}\n hint=\"e.g., 12.9352\"\n />\n <FormField\n label=\"Longitude\"\n value={location.longitude}\n onChange={updateLocation('longitude')}\n hint=\"e.g., 77.6245\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">Delivery Settings</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"Delivery Radius (km)\"\n value={location.deliveryRadius}\n onChange={updateLocation('deliveryRadius')}\n type=\"number\"\n />\n <FormField\n label=\"Delivery Charge (₹)\"\n value={location.deliveryCharge}\n onChange={updateLocation('deliveryCharge')}\n type=\"number\"\n />\n <FormField\n label=\"Free Delivery Above (₹)\"\n value={location.freeDeliveryAbove}\n onChange={updateLocation('freeDeliveryAbove')}\n type=\"number\"\n />\n </div>\n </div>\n );\n\n const renderOperatingTab = () => (\n <div className=\"space-y-5\">\n <Toggle\n label=\"Auto-Accept Orders\"\n description=\"Automatically accept incoming orders without manual confirmation\"\n checked={operating.autoAcceptOrders}\n onChange={(v) => setOperating((p) => ({ ...p, autoAcceptOrders: v }))}\n />\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"Default Preparation Time (min)\"\n value={operating.preparationTime}\n onChange={(v) => setOperating((p) => ({ ...p, preparationTime: parseInt(v) || 0 }))}\n type=\"number\"\n />\n <FormField\n label=\"Max Concurrent Orders\"\n value={operating.maxConcurrentOrders}\n onChange={(v) => setOperating((p) => ({ ...p, maxConcurrentOrders: parseInt(v) || 0 }))}\n type=\"number\"\n />\n <FormField\n label=\"Advance Booking (days)\"\n value={operating.advanceBookingDays}\n onChange={(v) => setOperating((p) => ({ ...p, advanceBookingDays: parseInt(v) || 0 }))}\n type=\"number\"\n />\n </div>\n </div>\n );\n\n const renderPoliciesTab = () => (\n <div className=\"space-y-5\">\n <FormField\n label=\"Return Policy\"\n value={policies.returnPolicy}\n onChange={updatePolicies('returnPolicy')}\n type=\"textarea\"\n rows={4}\n />\n <FormField\n label=\"Cancellation Policy\"\n value={policies.cancellationPolicy}\n onChange={updatePolicies('cancellationPolicy')}\n type=\"textarea\"\n rows={4}\n />\n <FormField\n label=\"Privacy Policy\"\n value={policies.privacyPolicy}\n onChange={updatePolicies('privacyPolicy')}\n type=\"textarea\"\n rows={4}\n />\n <FormField\n label=\"Terms of Service\"\n value={policies.termsOfService}\n onChange={updatePolicies('termsOfService')}\n type=\"textarea\"\n rows={4}\n />\n </div>\n );\n\n const renderNotificationsTab = () => (\n <div className=\"space-y-1 divide-y divide-border\">\n <h3 className=\"text-sm font-semibold text-text-primary pb-2\">New Orders</h3>\n <Toggle\n label=\"Email Notification\"\n description=\"Receive email for new orders\"\n checked={notifications.newOrderEmail}\n onChange={updateNotification('newOrderEmail')}\n />\n <Toggle\n label=\"SMS Notification\"\n description=\"Receive SMS for new orders\"\n checked={notifications.newOrderSms}\n onChange={updateNotification('newOrderSms')}\n />\n <Toggle\n label=\"Push Notification\"\n description=\"Receive push notifications for new orders\"\n checked={notifications.newOrderPush}\n onChange={updateNotification('newOrderPush')}\n />\n <h3 className=\"text-sm font-semibold text-text-primary pt-4 pb-2\">Order Updates</h3>\n <Toggle\n label=\"Email Updates\"\n description=\"Get email when order status changes\"\n checked={notifications.orderUpdateEmail}\n onChange={updateNotification('orderUpdateEmail')}\n />\n <Toggle\n label=\"Push Updates\"\n description=\"Get push notifications for order updates\"\n checked={notifications.orderUpdatePush}\n onChange={updateNotification('orderUpdatePush')}\n />\n <h3 className=\"text-sm font-semibold text-text-primary pt-4 pb-2\">Reports & Alerts</h3>\n <Toggle\n label=\"Daily Summary\"\n description=\"Receive daily business summary email\"\n checked={notifications.dailySummaryEmail}\n onChange={updateNotification('dailySummaryEmail')}\n />\n <Toggle\n label=\"Weekly Summary\"\n description=\"Receive weekly performance report\"\n checked={notifications.weeklySummaryEmail}\n onChange={updateNotification('weeklySummaryEmail')}\n />\n <Toggle\n label=\"Low Stock Alert\"\n description=\"Get alerted when items are low on stock\"\n checked={notifications.lowStockAlert}\n onChange={updateNotification('lowStockAlert')}\n />\n <Toggle\n label=\"Review Notifications\"\n description=\"Get notified for new customer reviews\"\n checked={notifications.reviewNotification}\n onChange={updateNotification('reviewNotification')}\n />\n <Toggle\n label=\"Marketing Emails\"\n description=\"Receive tips and promotional content\"\n checked={notifications.marketingEmails}\n onChange={updateNotification('marketingEmails')}\n />\n </div>\n );\n\n const renderIntegrationTab = () => (\n <div className=\"space-y-5\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Payment Gateway</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Provider</label>\n <select\n value={integration.paymentGateway}\n onChange={(e) => updateIntegration('paymentGateway')(e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"razorpay\">Razorpay</option>\n <option value=\"paytm\">Paytm</option>\n <option value=\"stripe\">Stripe</option>\n <option value=\"phonepe\">PhonePe</option>\n </select>\n </div>\n <FormField\n label=\"API Key\"\n value={integration.paymentGatewayKey}\n onChange={updateIntegration('paymentGatewayKey')}\n placeholder=\"Enter API key\"\n hint=\"Keep this secret\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">SMS Provider</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Provider</label>\n <select\n value={integration.smsProvider}\n onChange={(e) => updateIntegration('smsProvider')(e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"twilio\">Twilio</option>\n <option value=\"msg91\">MSG91</option>\n <option value=\"textlocal\">Textlocal</option>\n </select>\n </div>\n <FormField\n label=\"SMS API Key\"\n value={integration.smsApiKey}\n onChange={updateIntegration('smsApiKey')}\n placeholder=\"Enter SMS API key\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">Analytics</h3>\n <FormField\n label=\"Google Analytics ID\"\n value={integration.analyticsId}\n onChange={updateIntegration('analyticsId')}\n placeholder=\"GA-XXXXXXXXX\"\n />\n </div>\n );\n\n const ActiveIcon = tabs.find((t) => t.id === activeTab)?.icon || Store;\n\n return (\n <PageLayout\n title=\"Business Settings\"\n description=\"Manage your business profile and configuration\"\n actions={\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\n className={cn(\n 'inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors',\n saved\n ? 'bg-green-500/10 text-green-600 dark:text-green-400'\n : saving\n ? 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-accent text-text-primary hover:bg-accent/80'\n )}\n >\n {saving ? (\n <>\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n Saving...\n </>\n ) : saved ? (\n <>\n <CheckCircle2 className=\"h-4 w-4\" />\n Saved!\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Settings\n </>\n )}\n </button>\n }\n >\n <div className=\"flex flex-col lg:flex-row gap-6\">\n {/* Mobile Tab Navigation */}\n <div className=\"lg:hidden\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 shadow-sm\">\n <div className=\"grid grid-cols-4 gap-2\">\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex flex-col items-center gap-1 rounded-md px-2 py-2 text-xs font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-accent text-text-primary'\n : 'text-text-secondary hover:bg-bg-sunken'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Desktop Sidebar */}\n <div className=\"hidden lg:block lg:w-56 shrink-0\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm sticky top-24\">\n <div className=\"p-4 border-b border-border-subtle\">\n <h2 className=\"font-semibold text-text-primary text-sm\">Settings</h2>\n </div>\n <nav className=\"p-2\">\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'w-full text-left px-3 py-2 rounded-md mb-1 flex items-center gap-3 text-sm transition-colors',\n activeTab === tab.id\n ? 'bg-accent text-text-primary font-medium'\n : 'text-text-secondary hover:bg-bg-sunken hover:text-text-primary'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n );\n })}\n </nav>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 sm:p-6 shadow-sm\">\n {activeTab === 'general' && renderGeneralTab()}\n {activeTab === 'contact' && renderContactTab()}\n {activeTab === 'location' && renderLocationTab()}\n {activeTab === 'operating' && renderOperatingTab()}\n {activeTab === 'policies' && renderPoliciesTab()}\n {activeTab === 'notifications' && renderNotificationsTab()}\n {activeTab === 'integration' && renderIntegrationTab()}\n\n {/* Save Button (bottom) */}\n <div className=\"flex justify-end mt-8 pt-6 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\n className={cn(\n 'inline-flex items-center gap-2 rounded-md px-6 py-2 text-sm font-medium transition-colors',\n saved\n ? 'bg-green-500/10 text-green-600 dark:text-green-400'\n : saving\n ? 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-accent text-text-primary hover:bg-accent/80'\n )}\n >\n {saving ? (\n <>\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n Saving...\n </>\n ) : saved ? (\n <>\n <CheckCircle2 className=\"h-4 w-4\" />\n Saved!\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Settings\n </>\n )}\n </button>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"BusinessSettingsPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/cart-owner/BusinessSettingsPage.tsx"],"sourcesContent":["/**\n * Business Settings Page\n *\n * Tabbed interface (general/contact/location/operating/policies/notifications/integrations),\n * all form fields per tab including social media, coordinates, delivery charges,\n * payment methods, policy textareas, notification toggles, payment gateway config.\n *\n * @module adaptercloud/pages/cart-owner\n */\n\nimport { useState } from'react';\nimport {\n Store,\n FileText,\n CreditCard,\n Building2,\n Save,\n AlertCircle,\n MapPin,\n Clock,\n Shield,\n Bell,\n Link2,\n CheckCircle2,\n Globe,\n Phone,\n Mail,\n Instagram,\n Twitter,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { cn } from'../../utils/cn';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype TabId =\n | 'general'\n | 'contact'\n | 'location'\n | 'operating'\n | 'policies'\n | 'notifications'\n | 'integration';\n\ninterface Tab {\n id: TabId;\n label: string;\n icon: typeof Store;\n}\n\ninterface GeneralSettings {\n businessName: string;\n description: string;\n category: string;\n gstNumber: string;\n panNumber: string;\n fssaiLicense: string;\n establishedYear: string;\n}\n\ninterface ContactSettings {\n phone: string;\n email: string;\n website: string;\n whatsapp: string;\n instagram: string;\n twitter: string;\n facebook: string;\n}\n\ninterface LocationSettings {\n address: string;\n city: string;\n state: string;\n pincode: string;\n latitude: string;\n longitude: string;\n deliveryRadius: number;\n deliveryCharge: number;\n freeDeliveryAbove: number;\n}\n\ninterface OperatingSettings {\n autoAcceptOrders: boolean;\n preparationTime: number;\n maxConcurrentOrders: number;\n advanceBookingDays: number;\n}\n\ninterface PolicySettings {\n returnPolicy: string;\n cancellationPolicy: string;\n privacyPolicy: string;\n termsOfService: string;\n}\n\ninterface NotificationSettings {\n newOrderEmail: boolean;\n newOrderSms: boolean;\n newOrderPush: boolean;\n orderUpdateEmail: boolean;\n orderUpdatePush: boolean;\n dailySummaryEmail: boolean;\n weeklySummaryEmail: boolean;\n lowStockAlert: boolean;\n reviewNotification: boolean;\n marketingEmails: boolean;\n}\n\ninterface IntegrationSettings {\n paymentGateway: string;\n paymentGatewayKey: string;\n smsProvider: string;\n smsApiKey: string;\n analyticsId: string;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst tabs: Tab[] = [\n { id: 'general', label: 'General', icon: Store },\n { id: 'contact', label: 'Contact', icon: Phone },\n { id: 'location', label: 'Location', icon: MapPin },\n { id: 'operating', label: 'Operating', icon: Clock },\n { id: 'policies', label: 'Policies', icon: Shield },\n { id: 'notifications', label: 'Notifications', icon: Bell },\n { id: 'integration', label: 'Integrations', icon: Link2 },\n];\n\nconst categories = [\n 'Food & Beverage',\n 'Personal Care & Beauty',\n 'Repair & Maintenance',\n 'Home Services',\n 'Clothing & Fashion',\n 'Health & Wellness',\n 'Education & Skills',\n 'Retail & Merchandise',\n 'Grocery & Essentials',\n];\n\n// ============================================================================\n// Form Field Component\n// ============================================================================\n\ninterface FormFieldProps {\n label: string;\n value: string | number;\n onChange: (value: string) => void;\n type?: 'text' | 'email' | 'tel' | 'url' | 'number' | 'textarea' | 'select';\n options?: string[];\n placeholder?: string;\n hint?: string;\n rows?: number;\n}\n\nconst FormField = ({\n label,\n value,\n onChange,\n type = 'text',\n options,\n placeholder,\n hint,\n rows = 3,\n}: FormFieldProps) => {\n const id = label.toLowerCase().replace(/\\s+/g, '-');\n return (\n <div>\n <label htmlFor={id} className=\"block text-sm font-medium text-text-primary mb-1.5\">\n {label}\n </label>\n {type === 'textarea' ? (\n <textarea\n id={id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n rows={rows}\n placeholder={placeholder}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] resize-none\"\n />\n ) : type === 'select' ? (\n <select\n id={id}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"w-full rounded-md 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 {options?.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n ) : (\n <input\n id={id}\n type={type}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n )}\n {hint && <p className=\"mt-1 text-xs text-text-secondary\">{hint}</p>}\n </div>\n );\n};\n\n// ============================================================================\n// Toggle Component\n// ============================================================================\n\nconst Toggle = ({\n label,\n description,\n checked,\n onChange,\n}: {\n label: string;\n description?: string;\n checked: boolean;\n onChange: (v: boolean) => void;\n}) => (\n <div className=\"flex items-center justify-between py-3\">\n <div>\n <p className=\"text-sm font-medium text-text-primary\">{label}</p>\n {description && <p className=\"text-xs text-text-secondary mt-0.5\">{description}</p>}\n </div>\n <button\n type=\"button\"\n onClick={() => onChange(!checked)}\n className={cn(\n 'h-6 w-11 rounded-full transition-colors relative',\n checked ? 'bg-accent-blue-subtle' : 'bg-muted-foreground/30'\n )}\n >\n <div\n className={cn(\n 'absolute top-0.5 h-5 w-5 rounded-full bg-white transition-transform',\n checked ? 'translate-x-5' : 'translate-x-0.5'\n )}\n />\n </button>\n </div>\n);\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const BusinessSettingsPage = () => {\n const { navigateTo } = useAdapterCloud();\n const [activeTab, setActiveTab] = useState<TabId>('general');\n const [saving, setSaving] = useState(false);\n const [saved, setSaved] = useState(false);\n\n // Form state\n const [general, setGeneral] = useState<GeneralSettings>({\n businessName: 'Dosa Express',\n description:\n 'Authentic South Indian street food with a modern twist. Serving crispy dosas, filter coffee, and more since 2020.',\n category: 'Food & Beverage',\n gstNumber: '29ABCDE1234F1Z5',\n panNumber: 'ABCDE1234F',\n fssaiLicense: '12345678',\n establishedYear: '2020',\n });\n\n const [contact, setContact] = useState<ContactSettings>({\n phone: '+91-9876543210',\n email: 'ravi@dosaexpress.in',\n website: 'https://dosaexpress.in',\n whatsapp: '+91-9876543210',\n instagram: '@dosaexpress',\n twitter: '@dosaexpress',\n facebook: 'dosaexpress',\n });\n\n const [location, setLocation] = useState<LocationSettings>({\n address: 'Koramangala 5th Block',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560034',\n latitude: '12.9352',\n longitude: '77.6245',\n deliveryRadius: 5,\n deliveryCharge: 30,\n freeDeliveryAbove: 300,\n });\n\n const [operating, setOperating] = useState<OperatingSettings>({\n autoAcceptOrders: true,\n preparationTime: 15,\n maxConcurrentOrders: 10,\n advanceBookingDays: 3,\n });\n\n const [policies, setPolicies] = useState<PolicySettings>({\n returnPolicy:\n 'Items can be returned within 30 minutes of delivery if there are quality issues. Refund will be processed within 2-3 business days.',\n cancellationPolicy:\n 'Orders can be cancelled within 2 minutes of placing. After preparation starts, cancellation is not allowed.',\n privacyPolicy:\n 'We collect and process your data in accordance with applicable privacy laws. Your data is never shared with third parties without consent.',\n termsOfService:\n 'By using our services, you agree to our terms. All prices are inclusive of taxes unless stated otherwise.',\n });\n\n const [notifications, setNotifications] = useState<NotificationSettings>({\n newOrderEmail: true,\n newOrderSms: true,\n newOrderPush: true,\n orderUpdateEmail: true,\n orderUpdatePush: true,\n dailySummaryEmail: true,\n weeklySummaryEmail: false,\n lowStockAlert: true,\n reviewNotification: true,\n marketingEmails: false,\n });\n\n const [integration, setIntegration] = useState<IntegrationSettings>({\n paymentGateway: 'razorpay',\n paymentGatewayKey: 'rzp_live_xxxxxxxx',\n smsProvider: 'twilio',\n smsApiKey: '',\n analyticsId: '',\n });\n\n const handleSave = () => {\n setSaving(true);\n setTimeout(() => {\n setSaving(false);\n setSaved(true);\n setTimeout(() => setSaved(false), 3000);\n }, 1000);\n };\n\n const updateGeneral = (field: keyof GeneralSettings) => (value: string) =>\n setGeneral((p) => ({ ...p, [field]: value }));\n const updateContact = (field: keyof ContactSettings) => (value: string) =>\n setContact((p) => ({ ...p, [field]: value }));\n const updateLocation = (field: keyof LocationSettings) => (value: string) =>\n setLocation((p) => ({\n ...p,\n [field]:\n field === 'deliveryRadius' || field === 'deliveryCharge' || field === 'freeDeliveryAbove'\n ? parseInt(value) || 0\n : value,\n }));\n const updatePolicies = (field: keyof PolicySettings) => (value: string) =>\n setPolicies((p) => ({ ...p, [field]: value }));\n const updateNotification = (field: keyof NotificationSettings) => (value: boolean) =>\n setNotifications((p) => ({ ...p, [field]: value }));\n const updateIntegration = (field: keyof IntegrationSettings) => (value: string) =>\n setIntegration((p) => ({ ...p, [field]: value }));\n\n // ---- Tab content renderers ----\n\n const renderGeneralTab = () => (\n <div className=\"space-y-5\">\n <FormField\n label=\"Business Name\"\n value={general.businessName}\n onChange={updateGeneral('businessName')}\n />\n <FormField\n label=\"Description\"\n value={general.description}\n onChange={updateGeneral('description')}\n type=\"textarea\"\n />\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Category\"\n value={general.category}\n onChange={updateGeneral('category')}\n type=\"select\"\n options={categories}\n />\n <FormField\n label=\"Established Year\"\n value={general.establishedYear}\n onChange={updateGeneral('establishedYear')}\n />\n </div>\n <div className=\"flex items-start gap-3 rounded-md bg-accent-blue-subtle/5 border border-accent-blue-subtle/20 p-3\">\n <AlertCircle className=\"h-4 w-4 text-accent-blue shrink-0 mt-0.5\" />\n <p className=\"text-xs text-accent-blue\">\n GST, PAN, and FSSAI details are used for invoicing and compliance. Changes require\n verification.\n </p>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"GST Number\"\n value={general.gstNumber}\n onChange={updateGeneral('gstNumber')}\n hint=\"15-digit GST ID\"\n />\n <FormField\n label=\"PAN Number\"\n value={general.panNumber}\n onChange={updateGeneral('panNumber')}\n hint=\"10-digit PAN\"\n />\n <FormField\n label=\"FSSAI License\"\n value={general.fssaiLicense}\n onChange={updateGeneral('fssaiLicense')}\n hint=\"FSSAI license number\"\n />\n </div>\n </div>\n );\n\n const renderContactTab = () => (\n <div className=\"space-y-5\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Phone\"\n value={contact.phone}\n onChange={updateContact('phone')}\n type=\"tel\"\n />\n <FormField\n label=\"Email\"\n value={contact.email}\n onChange={updateContact('email')}\n type=\"email\"\n />\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Website\"\n value={contact.website}\n onChange={updateContact('website')}\n type=\"url\"\n placeholder=\"https://\"\n />\n <FormField\n label=\"WhatsApp\"\n value={contact.whatsapp}\n onChange={updateContact('whatsapp')}\n type=\"tel\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">Social Media</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"Instagram\"\n value={contact.instagram}\n onChange={updateContact('instagram')}\n placeholder=\"@handle\"\n />\n <FormField\n label=\"Twitter / X\"\n value={contact.twitter}\n onChange={updateContact('twitter')}\n placeholder=\"@handle\"\n />\n <FormField\n label=\"Facebook\"\n value={contact.facebook}\n onChange={updateContact('facebook')}\n placeholder=\"Page name\"\n />\n </div>\n </div>\n );\n\n const renderLocationTab = () => (\n <div className=\"space-y-5\">\n <FormField\n label=\"Address\"\n value={location.address}\n onChange={updateLocation('address')}\n type=\"textarea\"\n rows={2}\n />\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField label=\"City\" value={location.city} onChange={updateLocation('city')} />\n <FormField label=\"State\" value={location.state} onChange={updateLocation('state')} />\n <FormField label=\"Pincode\" value={location.pincode} onChange={updateLocation('pincode')} />\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <FormField\n label=\"Latitude\"\n value={location.latitude}\n onChange={updateLocation('latitude')}\n hint=\"e.g., 12.9352\"\n />\n <FormField\n label=\"Longitude\"\n value={location.longitude}\n onChange={updateLocation('longitude')}\n hint=\"e.g., 77.6245\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">Delivery Settings</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"Delivery Radius (km)\"\n value={location.deliveryRadius}\n onChange={updateLocation('deliveryRadius')}\n type=\"number\"\n />\n <FormField\n label=\"Delivery Charge (₹)\"\n value={location.deliveryCharge}\n onChange={updateLocation('deliveryCharge')}\n type=\"number\"\n />\n <FormField\n label=\"Free Delivery Above (₹)\"\n value={location.freeDeliveryAbove}\n onChange={updateLocation('freeDeliveryAbove')}\n type=\"number\"\n />\n </div>\n </div>\n );\n\n const renderOperatingTab = () => (\n <div className=\"space-y-5\">\n <Toggle\n label=\"Auto-Accept Orders\"\n description=\"Automatically accept incoming orders without manual confirmation\"\n checked={operating.autoAcceptOrders}\n onChange={(v) => setOperating((p) => ({ ...p, autoAcceptOrders: v }))}\n />\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-5\">\n <FormField\n label=\"Default Preparation Time (min)\"\n value={operating.preparationTime}\n onChange={(v) => setOperating((p) => ({ ...p, preparationTime: parseInt(v) || 0 }))}\n type=\"number\"\n />\n <FormField\n label=\"Max Concurrent Orders\"\n value={operating.maxConcurrentOrders}\n onChange={(v) => setOperating((p) => ({ ...p, maxConcurrentOrders: parseInt(v) || 0 }))}\n type=\"number\"\n />\n <FormField\n label=\"Advance Booking (days)\"\n value={operating.advanceBookingDays}\n onChange={(v) => setOperating((p) => ({ ...p, advanceBookingDays: parseInt(v) || 0 }))}\n type=\"number\"\n />\n </div>\n </div>\n );\n\n const renderPoliciesTab = () => (\n <div className=\"space-y-5\">\n <FormField\n label=\"Return Policy\"\n value={policies.returnPolicy}\n onChange={updatePolicies('returnPolicy')}\n type=\"textarea\"\n rows={4}\n />\n <FormField\n label=\"Cancellation Policy\"\n value={policies.cancellationPolicy}\n onChange={updatePolicies('cancellationPolicy')}\n type=\"textarea\"\n rows={4}\n />\n <FormField\n label=\"Privacy Policy\"\n value={policies.privacyPolicy}\n onChange={updatePolicies('privacyPolicy')}\n type=\"textarea\"\n rows={4}\n />\n <FormField\n label=\"Terms of Service\"\n value={policies.termsOfService}\n onChange={updatePolicies('termsOfService')}\n type=\"textarea\"\n rows={4}\n />\n </div>\n );\n\n const renderNotificationsTab = () => (\n <div className=\"space-y-1 divide-y divide-border\">\n <h3 className=\"text-sm font-semibold text-text-primary pb-2\">New Orders</h3>\n <Toggle\n label=\"Email Notification\"\n description=\"Receive email for new orders\"\n checked={notifications.newOrderEmail}\n onChange={updateNotification('newOrderEmail')}\n />\n <Toggle\n label=\"SMS Notification\"\n description=\"Receive SMS for new orders\"\n checked={notifications.newOrderSms}\n onChange={updateNotification('newOrderSms')}\n />\n <Toggle\n label=\"Push Notification\"\n description=\"Receive push notifications for new orders\"\n checked={notifications.newOrderPush}\n onChange={updateNotification('newOrderPush')}\n />\n <h3 className=\"text-sm font-semibold text-text-primary pt-4 pb-2\">Order Updates</h3>\n <Toggle\n label=\"Email Updates\"\n description=\"Get email when order status changes\"\n checked={notifications.orderUpdateEmail}\n onChange={updateNotification('orderUpdateEmail')}\n />\n <Toggle\n label=\"Push Updates\"\n description=\"Get push notifications for order updates\"\n checked={notifications.orderUpdatePush}\n onChange={updateNotification('orderUpdatePush')}\n />\n <h3 className=\"text-sm font-semibold text-text-primary pt-4 pb-2\">Reports & Alerts</h3>\n <Toggle\n label=\"Daily Summary\"\n description=\"Receive daily business summary email\"\n checked={notifications.dailySummaryEmail}\n onChange={updateNotification('dailySummaryEmail')}\n />\n <Toggle\n label=\"Weekly Summary\"\n description=\"Receive weekly performance report\"\n checked={notifications.weeklySummaryEmail}\n onChange={updateNotification('weeklySummaryEmail')}\n />\n <Toggle\n label=\"Low Stock Alert\"\n description=\"Get alerted when items are low on stock\"\n checked={notifications.lowStockAlert}\n onChange={updateNotification('lowStockAlert')}\n />\n <Toggle\n label=\"Review Notifications\"\n description=\"Get notified for new customer reviews\"\n checked={notifications.reviewNotification}\n onChange={updateNotification('reviewNotification')}\n />\n <Toggle\n label=\"Marketing Emails\"\n description=\"Receive tips and promotional content\"\n checked={notifications.marketingEmails}\n onChange={updateNotification('marketingEmails')}\n />\n </div>\n );\n\n const renderIntegrationTab = () => (\n <div className=\"space-y-5\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Payment Gateway</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Provider</label>\n <select\n value={integration.paymentGateway}\n onChange={(e) => updateIntegration('paymentGateway')(e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"razorpay\">Razorpay</option>\n <option value=\"paytm\">Paytm</option>\n <option value=\"stripe\">Stripe</option>\n <option value=\"phonepe\">PhonePe</option>\n </select>\n </div>\n <FormField\n label=\"API Key\"\n value={integration.paymentGatewayKey}\n onChange={updateIntegration('paymentGatewayKey')}\n placeholder=\"Enter API key\"\n hint=\"Keep this secret\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">SMS Provider</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-5\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Provider</label>\n <select\n value={integration.smsProvider}\n onChange={(e) => updateIntegration('smsProvider')(e.target.value)}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"twilio\">Twilio</option>\n <option value=\"msg91\">MSG91</option>\n <option value=\"textlocal\">Textlocal</option>\n </select>\n </div>\n <FormField\n label=\"SMS API Key\"\n value={integration.smsApiKey}\n onChange={updateIntegration('smsApiKey')}\n placeholder=\"Enter SMS API key\"\n />\n </div>\n <h3 className=\"text-sm font-semibold text-text-primary pt-2\">Analytics</h3>\n <FormField\n label=\"Google Analytics ID\"\n value={integration.analyticsId}\n onChange={updateIntegration('analyticsId')}\n placeholder=\"GA-XXXXXXXXX\"\n />\n </div>\n );\n\n const ActiveIcon = tabs.find((t) => t.id === activeTab)?.icon || Store;\n\n return (\n <PageLayout\n title=\"Business Settings\"\n description=\"Manage your business profile and configuration\"\n actions={\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\n className={cn(\n 'inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors',\n saved\n ? 'bg-status-success-bg-subtle/10 text-status-success-text'\n : saving\n ? 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-accent text-text-primary hover:bg-accent/80'\n )}\n >\n {saving ? (\n <>\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n Saving...\n </>\n ) : saved ? (\n <>\n <CheckCircle2 className=\"h-4 w-4\" />\n Saved!\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Settings\n </>\n )}\n </button>\n }\n >\n <div className=\"flex flex-col lg:flex-row gap-6\">\n {/* Mobile Tab Navigation */}\n <div className=\"lg:hidden\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 shadow-sm\">\n <div className=\"grid grid-cols-4 gap-2\">\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex flex-col items-center gap-1 rounded-md px-2 py-2 text-xs font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-accent text-text-primary'\n : 'text-text-secondary hover:bg-bg-sunken'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Desktop Sidebar */}\n <div className=\"hidden lg:block lg:w-56 shrink-0\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface shadow-sm sticky top-24\">\n <div className=\"p-4 border-b border-border-subtle\">\n <h2 className=\"font-semibold text-text-primary text-sm\">Settings</h2>\n </div>\n <nav className=\"p-2\">\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'w-full text-left px-3 py-2 rounded-md mb-1 flex items-center gap-3 text-sm transition-colors',\n activeTab === tab.id\n ? 'bg-accent text-text-primary font-medium'\n : 'text-text-secondary hover:bg-bg-sunken hover:text-text-primary'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n );\n })}\n </nav>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 sm:p-6 bg-gloss-card shadow-pop\">\n {activeTab === 'general' && renderGeneralTab()}\n {activeTab === 'contact' && renderContactTab()}\n {activeTab === 'location' && renderLocationTab()}\n {activeTab === 'operating' && renderOperatingTab()}\n {activeTab === 'policies' && renderPoliciesTab()}\n {activeTab === 'notifications' && renderNotificationsTab()}\n {activeTab === 'integration' && renderIntegrationTab()}\n\n {/* Save Button (bottom) */}\n <div className=\"flex justify-end mt-8 pt-6 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\n className={cn(\n 'inline-flex items-center gap-2 rounded-md px-6 py-2 text-sm font-medium transition-colors',\n saved\n ? 'bg-status-success-bg-subtle/10 text-status-success-text'\n : saving\n ? 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n : 'bg-accent text-text-primary hover:bg-accent/80'\n )}\n >\n {saving ? (\n <>\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n Saving...\n </>\n ) : saved ? (\n <>\n <CheckCircle2 className=\"h-4 w-4\" />\n Saved!\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Settings\n </>\n )}\n </button>\n </div>\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}