@burdenoff/microfe-subscriberbot 2026.626.1 → 2026.628.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 (141) hide show
  1. package/dist/index.js +4 -4
  2. package/dist/subscriberbot/SubscriberBotRoot.js +61 -133
  3. package/dist/subscriberbot/SubscriberBotRoot.js.map +1 -1
  4. package/dist/subscriberbot/SubscriberBotRoutes.js +56 -187
  5. package/dist/subscriberbot/SubscriberBotRoutes.js.map +1 -1
  6. package/dist/subscriberbot/components/StateViews.js +49 -0
  7. package/dist/subscriberbot/components/StateViews.js.map +1 -0
  8. package/dist/subscriberbot/components/StatusBadge.js +45 -47
  9. package/dist/subscriberbot/components/StatusBadge.js.map +1 -1
  10. package/dist/subscriberbot/context/SubscriberBotContext.js +22 -30
  11. package/dist/subscriberbot/context/SubscriberBotContext.js.map +1 -1
  12. package/dist/subscriberbot/hooks/useSubscriberBotApi.js +342 -195
  13. package/dist/subscriberbot/hooks/useSubscriberBotApi.js.map +1 -1
  14. package/dist/subscriberbot/index.js +1 -1
  15. package/dist/subscriberbot/pages/DashboardPage.js +269 -0
  16. package/dist/subscriberbot/pages/DashboardPage.js.map +1 -0
  17. package/dist/subscriberbot/pages/InboxPage.js +186 -0
  18. package/dist/subscriberbot/pages/InboxPage.js.map +1 -0
  19. package/dist/subscriberbot/pages/InvoicesPage.js +211 -0
  20. package/dist/subscriberbot/pages/InvoicesPage.js.map +1 -0
  21. package/dist/subscriberbot/pages/WorkflowsPage.js +236 -0
  22. package/dist/subscriberbot/pages/WorkflowsPage.js.map +1 -0
  23. package/dist/subscriberbot/pages/agents/AgentDetailPage.js +160 -0
  24. package/dist/subscriberbot/pages/agents/AgentDetailPage.js.map +1 -0
  25. package/dist/subscriberbot/pages/agents/AgentNewPage.js +140 -0
  26. package/dist/subscriberbot/pages/agents/AgentNewPage.js.map +1 -0
  27. package/dist/subscriberbot/pages/agents/AgentsListPage.js +178 -0
  28. package/dist/subscriberbot/pages/agents/AgentsListPage.js.map +1 -0
  29. package/dist/subscriberbot/pages/providers/ProviderDetailPage.js +179 -0
  30. package/dist/subscriberbot/pages/providers/ProviderDetailPage.js.map +1 -0
  31. package/dist/subscriberbot/pages/providers/ProviderNewPage.js +185 -0
  32. package/dist/subscriberbot/pages/providers/ProviderNewPage.js.map +1 -0
  33. package/dist/subscriberbot/pages/providers/ProvidersListPage.js +254 -0
  34. package/dist/subscriberbot/pages/providers/ProvidersListPage.js.map +1 -0
  35. package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js +306 -0
  36. package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js.map +1 -0
  37. package/dist/subscriberbot/pages/relationships/RelationshipNewPage.js +253 -0
  38. package/dist/subscriberbot/pages/relationships/RelationshipNewPage.js.map +1 -0
  39. package/dist/subscriberbot/pages/relationships/RelationshipsListPage.js +248 -0
  40. package/dist/subscriberbot/pages/relationships/RelationshipsListPage.js.map +1 -0
  41. package/dist/subscriberbot/utils/formatters.js +50 -32
  42. package/dist/subscriberbot/utils/formatters.js.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/subscriberbot/components/InvestmentCard.js +0 -97
  45. package/dist/subscriberbot/components/InvestmentCard.js.map +0 -1
  46. package/dist/subscriberbot/components/RatingDisplay.js +0 -35
  47. package/dist/subscriberbot/components/RatingDisplay.js.map +0 -1
  48. package/dist/subscriberbot/mocks/data.js +0 -1517
  49. package/dist/subscriberbot/mocks/data.js.map +0 -1
  50. package/dist/subscriberbot/mocks/users.js +0 -34
  51. package/dist/subscriberbot/mocks/users.js.map +0 -1
  52. package/dist/subscriberbot/pages/HomePage.js +0 -930
  53. package/dist/subscriberbot/pages/HomePage.js.map +0 -1
  54. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js +0 -651
  55. package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js.map +0 -1
  56. package/dist/subscriberbot/pages/admin/AdminDashboard.js +0 -679
  57. package/dist/subscriberbot/pages/admin/AdminDashboard.js.map +0 -1
  58. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js +0 -427
  59. package/dist/subscriberbot/pages/admin/AdminFinancialPage.js.map +0 -1
  60. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js +0 -665
  61. package/dist/subscriberbot/pages/admin/AdminOrdersPage.js.map +0 -1
  62. package/dist/subscriberbot/pages/admin/AdminProfilePage.js +0 -261
  63. package/dist/subscriberbot/pages/admin/AdminProfilePage.js.map +0 -1
  64. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js +0 -654
  65. package/dist/subscriberbot/pages/admin/AdminSettingsPage.js.map +0 -1
  66. package/dist/subscriberbot/pages/admin/CartManagementPage.js +0 -874
  67. package/dist/subscriberbot/pages/admin/CartManagementPage.js.map +0 -1
  68. package/dist/subscriberbot/pages/admin/UserManagementPage.js +0 -898
  69. package/dist/subscriberbot/pages/admin/UserManagementPage.js.map +0 -1
  70. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js +0 -839
  71. package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js.map +0 -1
  72. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js +0 -705
  73. package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js.map +0 -1
  74. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js +0 -802
  75. package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js.map +0 -1
  76. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js +0 -891
  77. package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js.map +0 -1
  78. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js +0 -633
  79. package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js.map +0 -1
  80. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js +0 -910
  81. package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js.map +0 -1
  82. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js +0 -879
  83. package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js.map +0 -1
  84. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js +0 -838
  85. package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js.map +0 -1
  86. package/dist/subscriberbot/pages/common/HelpSupportPage.js +0 -1323
  87. package/dist/subscriberbot/pages/common/HelpSupportPage.js.map +0 -1
  88. package/dist/subscriberbot/pages/common/NotificationCenterPage.js +0 -672
  89. package/dist/subscriberbot/pages/common/NotificationCenterPage.js.map +0 -1
  90. package/dist/subscriberbot/pages/common/SettingsPage.js +0 -973
  91. package/dist/subscriberbot/pages/common/SettingsPage.js.map +0 -1
  92. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js +0 -626
  93. package/dist/subscriberbot/pages/customer/BookingDetailsPage.js.map +0 -1
  94. package/dist/subscriberbot/pages/customer/CartDetailPage.js +0 -654
  95. package/dist/subscriberbot/pages/customer/CartDetailPage.js.map +0 -1
  96. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js +0 -555
  97. package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js.map +0 -1
  98. package/dist/subscriberbot/pages/customer/CheckoutPage.js +0 -529
  99. package/dist/subscriberbot/pages/customer/CheckoutPage.js.map +0 -1
  100. package/dist/subscriberbot/pages/customer/CustomerDashboard.js +0 -532
  101. package/dist/subscriberbot/pages/customer/CustomerDashboard.js.map +0 -1
  102. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js +0 -630
  103. package/dist/subscriberbot/pages/customer/CustomerProfilePage.js.map +0 -1
  104. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js +0 -633
  105. package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js.map +0 -1
  106. package/dist/subscriberbot/pages/customer/FavoritesPage.js +0 -484
  107. package/dist/subscriberbot/pages/customer/FavoritesPage.js.map +0 -1
  108. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js +0 -446
  109. package/dist/subscriberbot/pages/customer/OrderHistoryPage.js.map +0 -1
  110. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js +0 -394
  111. package/dist/subscriberbot/pages/customer/OrderTrackingPage.js.map +0 -1
  112. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js +0 -495
  113. package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js.map +0 -1
  114. package/dist/subscriberbot/pages/customer/ReviewsPage.js +0 -613
  115. package/dist/subscriberbot/pages/customer/ReviewsPage.js.map +0 -1
  116. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js +0 -450
  117. package/dist/subscriberbot/pages/customer/SavedAddressesPage.js.map +0 -1
  118. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js +0 -886
  119. package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js.map +0 -1
  120. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js +0 -947
  121. package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js.map +0 -1
  122. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js +0 -687
  123. package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js.map +0 -1
  124. package/dist/subscriberbot/pages/investor/InvestorDashboard.js +0 -451
  125. package/dist/subscriberbot/pages/investor/InvestorDashboard.js.map +0 -1
  126. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js +0 -406
  127. package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js.map +0 -1
  128. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js +0 -575
  129. package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js.map +0 -1
  130. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js +0 -1070
  131. package/dist/subscriberbot/pages/investor/InvestorProfilePage.js.map +0 -1
  132. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js +0 -535
  133. package/dist/subscriberbot/pages/worker/TaskDetailsPage.js.map +0 -1
  134. package/dist/subscriberbot/pages/worker/WorkerDashboard.js +0 -666
  135. package/dist/subscriberbot/pages/worker/WorkerDashboard.js.map +0 -1
  136. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js +0 -681
  137. package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js.map +0 -1
  138. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js +0 -692
  139. package/dist/subscriberbot/pages/worker/WorkerProfilePage.js.map +0 -1
  140. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js +0 -588
  141. package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"StaffManagementPage.js","names":[],"sources":["../../../../src/subscriberbot/pages/cart-owner/StaffManagementPage.tsx"],"sourcesContent":["/**\n * Staff Management Page\n *\n * Stats overview, staff list with filters (role/status/search/sort),\n * invite staff modal, edit staff modal, performance metrics per staff,\n * status toggle (activate/deactivate), role badges, schedule info.\n *\n * @module subscriberbot/pages/cart-owner\n */\n\nimport { useState, useMemo } from 'react';\nimport {\n Users,\n Plus,\n Trash2,\n Calendar,\n Clock,\n UserPlus,\n Phone,\n Star,\n Search,\n Edit2,\n X,\n Mail,\n CheckCircle2,\n AlertCircle,\n Shield,\n Target,\n Award,\n} from 'lucide-react';\nimport { PagePurpose, EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { useSubscriberBot } from '../../context/SubscriberBotContext';\nimport { formatCurrency } from '../../utils/formatters';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype StaffRole = 'manager' | 'chef' | 'server' | 'delivery' | 'cashier';\ntype StaffStatus = 'active' | 'inactive' | 'on-leave' | 'terminated';\n\ninterface StaffMember {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n role: StaffRole;\n status: StaffStatus;\n dateJoined: string;\n lastActive?: string;\n hourlyRate: number;\n hoursWorked: number;\n totalEarnings: number;\n performance: {\n rating: number;\n tasksCompleted: number;\n customerRating: number;\n punctuality: number;\n };\n currentShift?: string;\n shiftsThisWeek: number;\n}\n\ninterface InviteForm {\n email: string;\n firstName: string;\n lastName: string;\n phone: string;\n role: StaffRole;\n hourlyRate: number;\n}\n\ninterface EditForm {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n role: StaffRole;\n hourlyRate: number;\n status: StaffStatus;\n}\n\ninterface StatusMessage {\n text: string;\n type: 'success' | 'error';\n}\n\n// ============================================================================\n// Mock Data\n// ============================================================================\n\nconst initialStaff: StaffMember[] = [\n {\n id: 'staff-001',\n firstName: 'Ravi',\n lastName: 'Kumar',\n email: 'ravi@dosaexpress.in',\n phone: '+91-9876543210',\n role: 'delivery',\n status: 'active',\n dateJoined: '2023-06-15',\n lastActive: '2024-01-16T10:00:00Z',\n hourlyRate: 200,\n hoursWorked: 160,\n totalEarnings: 32000,\n performance: { rating: 4.8, tasksCompleted: 245, customerRating: 4.7, punctuality: 95 },\n currentShift: '09:00 - 17:00',\n shiftsThisWeek: 5,\n },\n {\n id: 'staff-002',\n firstName: 'Suresh',\n lastName: 'Worker',\n email: 'suresh@dosaexpress.in',\n phone: '+91-9876543211',\n role: 'chef',\n status: 'active',\n dateJoined: '2023-08-20',\n lastActive: '2024-01-16T09:30:00Z',\n hourlyRate: 250,\n hoursWorked: 148,\n totalEarnings: 37000,\n performance: { rating: 4.6, tasksCompleted: 312, customerRating: 4.5, punctuality: 90 },\n currentShift: '10:00 - 18:00',\n shiftsThisWeek: 4,\n },\n {\n id: 'staff-003',\n firstName: 'Amit',\n lastName: 'Sharma',\n email: 'amit@dosaexpress.in',\n phone: '+91-9876543212',\n role: 'delivery',\n status: 'on-leave',\n dateJoined: '2023-10-01',\n hourlyRate: 180,\n hoursWorked: 120,\n totalEarnings: 21600,\n performance: { rating: 4.4, tasksCompleted: 178, customerRating: 4.3, punctuality: 85 },\n shiftsThisWeek: 0,\n },\n {\n id: 'staff-004',\n firstName: 'Priya',\n lastName: 'Helper',\n email: 'priya@dosaexpress.in',\n phone: '+91-9876543213',\n role: 'server',\n status: 'inactive',\n dateJoined: '2024-01-05',\n hourlyRate: 150,\n hoursWorked: 40,\n totalEarnings: 6000,\n performance: { rating: 4.7, tasksCompleted: 56, customerRating: 4.8, punctuality: 98 },\n shiftsThisWeek: 0,\n },\n {\n id: 'staff-005',\n firstName: 'Kiran',\n lastName: 'B.',\n email: 'kiran@dosaexpress.in',\n phone: '+91-9876543214',\n role: 'cashier',\n status: 'active',\n dateJoined: '2023-12-10',\n lastActive: '2024-01-16T11:00:00Z',\n hourlyRate: 175,\n hoursWorked: 80,\n totalEarnings: 14000,\n performance: { rating: 4.3, tasksCompleted: 134, customerRating: 4.2, punctuality: 88 },\n currentShift: '11:00 - 19:00',\n shiftsThisWeek: 5,\n },\n {\n id: 'staff-006',\n firstName: 'Meera',\n lastName: 'Devi',\n email: 'meera@dosaexpress.in',\n phone: '+91-9876543215',\n role: 'manager',\n status: 'active',\n dateJoined: '2023-04-01',\n lastActive: '2024-01-16T08:00:00Z',\n hourlyRate: 350,\n hoursWorked: 168,\n totalEarnings: 58800,\n performance: { rating: 4.9, tasksCompleted: 420, customerRating: 4.9, punctuality: 99 },\n currentShift: '08:00 - 16:00',\n shiftsThisWeek: 6,\n },\n];\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst statusConfig: Record<StaffStatus, { label: string; color: string; dot: string }> = {\n active: { label: 'Active', color: 'text-status-success-text', dot: 'bg-status-success-text' },\n inactive: { label: 'Inactive', color: 'text-text-secondary', dot: 'bg-muted-foreground' },\n 'on-leave': {\n label: 'On Leave',\n color: 'text-status-warning-text',\n dot: 'bg-status-warning-text',\n },\n terminated: { label: 'Terminated', color: 'text-status-error-text', dot: 'bg-status-error-text' },\n};\n\nconst roleConfig: Record<StaffRole, { label: string; color: string }> = {\n manager: { label: 'Manager', color: 'bg-accent-purple-subtle text-accent-purple' },\n chef: { label: 'Chef', color: 'bg-status-warning-bg/20 text-status-warning-text' },\n server: { label: 'Server', color: 'bg-status-info-bg/20 text-status-info-text' },\n delivery: { label: 'Delivery', color: 'bg-status-success-bg/20 text-status-success-text' },\n cashier: { label: 'Cashier', color: 'bg-status-info-bg/20 text-status-info-text' },\n};\n\nconst emptyInviteForm: InviteForm = {\n email: '',\n firstName: '',\n lastName: '',\n phone: '',\n role: 'server',\n hourlyRate: 150,\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const StaffManagementPage = () => {\n const { navigateTo } = useSubscriberBot();\n\n // Data\n const [staff, setStaff] = useState<StaffMember[]>(initialStaff);\n\n // Filters\n const [searchQuery, setSearchQuery] = useState('');\n const [roleFilter, setRoleFilter] = useState('');\n const [statusFilter, setStatusFilter] = useState('');\n const [sortBy, setSortBy] = useState('name');\n\n // Modals\n const [showInviteModal, setShowInviteModal] = useState(false);\n const [showEditModal, setShowEditModal] = useState(false);\n const [selectedStaff, setSelectedStaff] = useState<StaffMember | null>(null);\n const [inviteForm, setInviteForm] = useState<InviteForm>(emptyInviteForm);\n const [editForm, setEditForm] = useState<EditForm>({\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n role: 'server',\n hourlyRate: 150,\n status: 'active',\n });\n\n // Status\n const [statusMessage, setStatusMessage] = useState<StatusMessage | null>(null);\n\n const showStatus = (text: string, type: 'success' | 'error') => {\n setStatusMessage({ text, type });\n setTimeout(() => setStatusMessage(null), 3000);\n };\n\n // ---- Stats ----\n const activeCount = staff.filter((s) => s.status === 'active').length;\n const onLeaveCount = staff.filter((s) => s.status === 'on-leave').length;\n const avgRating =\n staff.length > 0\n ? (staff.reduce((a, s) => a + s.performance.rating, 0) / staff.length).toFixed(1)\n : '0';\n const totalEarnings = staff.reduce((a, s) => a + s.totalEarnings, 0);\n\n // ---- Filtered staff ----\n const filteredStaff = useMemo(() => {\n let result = [...staff];\n\n if (searchQuery) {\n const q = searchQuery.toLowerCase();\n result = result.filter(\n (s) =>\n `${s.firstName} ${s.lastName}`.toLowerCase().includes(q) ||\n s.email.toLowerCase().includes(q) ||\n s.phone.includes(q)\n );\n }\n if (roleFilter) result = result.filter((s) => s.role === roleFilter);\n if (statusFilter) result = result.filter((s) => s.status === statusFilter);\n\n switch (sortBy) {\n case 'name':\n result.sort((a, b) =>\n `${a.firstName} ${a.lastName}`.localeCompare(`${b.firstName} ${b.lastName}`)\n );\n break;\n case 'rating':\n result.sort((a, b) => b.performance.rating - a.performance.rating);\n break;\n case 'hours':\n result.sort((a, b) => b.hoursWorked - a.hoursWorked);\n break;\n case 'joined':\n result.sort((a, b) => new Date(b.dateJoined).getTime() - new Date(a.dateJoined).getTime());\n break;\n }\n\n return result;\n }, [staff, searchQuery, roleFilter, statusFilter, sortBy]);\n\n // ---- Handlers ----\n const handleInviteStaff = () => {\n if (!inviteForm.email || !inviteForm.firstName || !inviteForm.lastName) {\n showStatus('Please fill in all required fields', 'error');\n return;\n }\n const newStaff: StaffMember = {\n id: `staff-${Date.now()}`,\n ...inviteForm,\n status: 'active',\n dateJoined: new Date().toISOString().split('T')[0],\n hoursWorked: 0,\n totalEarnings: 0,\n performance: { rating: 0, tasksCompleted: 0, customerRating: 0, punctuality: 0 },\n shiftsThisWeek: 0,\n };\n setStaff((prev) => [...prev, newStaff]);\n setShowInviteModal(false);\n setInviteForm(emptyInviteForm);\n showStatus('Staff member invited successfully', 'success');\n };\n\n const handleEditStaff = (member: StaffMember) => {\n setSelectedStaff(member);\n setEditForm({\n firstName: member.firstName,\n lastName: member.lastName,\n email: member.email,\n phone: member.phone,\n role: member.role,\n hourlyRate: member.hourlyRate,\n status: member.status,\n });\n setShowEditModal(true);\n };\n\n const handleSaveEdit = () => {\n if (!selectedStaff) return;\n setStaff((prev) => prev.map((s) => (s.id === selectedStaff.id ? { ...s, ...editForm } : s)));\n setShowEditModal(false);\n showStatus('Staff member updated successfully', 'success');\n };\n\n const handleToggleStatus = (id: string) => {\n setStaff((prev) =>\n prev.map((s) => {\n if (s.id === id) {\n const newStatus: StaffStatus = s.status === 'active' ? 'inactive' : 'active';\n return { ...s, status: newStatus };\n }\n return s;\n })\n );\n showStatus('Staff status updated', 'success');\n };\n\n const handleRemoveStaff = (id: string) => {\n if (!confirm('Are you sure you want to remove this staff member?')) return;\n setStaff((prev) => prev.filter((s) => s.id !== id));\n showStatus('Staff member removed', 'success');\n };\n\n return (\n <PageLayout\n title=\"Staff Management\"\n description=\"Manage your workers, delivery partners, and shifts\"\n actions={\n <button\n type=\"button\"\n onClick={() => {\n setInviteForm(emptyInviteForm);\n setShowInviteModal(true);\n }}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <UserPlus className=\"h-4 w-4\" />\n Invite Staff\n </button>\n }\n >\n <div className=\"space-y-4\">\n <PagePurpose icon={<Users className=\"h-4 w-4\" />}>\n Build and run your team from one place. Invite chefs, servers and delivery\n partners, assign roles, and keep track of who's active, on leave or off duty.\n Staff ratings help you spot your strongest performers and anyone who needs a\n hand — so every shift is covered by the right people.\n </PagePurpose>\n\n {/* Status Message */}\n {statusMessage && (\n <div\n className={cn(\n 'flex items-center gap-2 rounded-lg border p-3',\n statusMessage.type === 'success'\n ? 'border-status-success-border/30 bg-status-success-bg/10'\n : 'border-status-error-border/30 bg-status-error-bg/10'\n )}\n >\n {statusMessage.type === 'success' ? (\n <CheckCircle2 className=\"h-4 w-4 text-status-success-text\" />\n ) : (\n <AlertCircle className=\"h-4 w-4 text-status-error-text\" />\n )}\n <span\n className={cn(\n 'text-sm font-medium',\n statusMessage.type === 'success'\n ? 'text-status-success-text'\n : 'text-status-error-text'\n )}\n >\n {statusMessage.text}\n </span>\n </div>\n )}\n\n {/* Summary Stats — the ONE emphasis zone */}\n <EmphasisPanel className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 shadow-sm\">\n <p className=\"text-2xl font-bold text-text-primary\">{staff.length}</p>\n <p className=\"text-xs text-text-secondary\">Total Staff</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 shadow-sm\">\n <p className=\"text-2xl font-bold text-status-success-text\">{activeCount}</p>\n <p className=\"text-xs text-text-secondary\">Active Now</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 shadow-sm\">\n <p className=\"text-2xl font-bold text-status-warning-text\">{onLeaveCount}</p>\n <p className=\"text-xs text-text-secondary\">On Leave</p>\n </div>\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 shadow-sm\">\n <p className=\"text-2xl font-bold text-text-primary\">{avgRating}</p>\n <p className=\"text-xs text-text-secondary\">Avg. Rating</p>\n </div>\n </EmphasisPanel>\n\n {/* Filters */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-4 shadow-sm\">\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n placeholder=\"Search staff...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface pl-10 pr-4 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 </div>\n <select\n value={roleFilter}\n onChange={(e) => setRoleFilter(e.target.value)}\n className=\"rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"\">All Roles</option>\n {Object.entries(roleConfig).map(([key, val]) => (\n <option key={key} value={key}>\n {val.label}\n </option>\n ))}\n </select>\n <select\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value)}\n className=\"rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"\">All Status</option>\n {Object.entries(statusConfig).map(([key, val]) => (\n <option key={key} value={key}>\n {val.label}\n </option>\n ))}\n </select>\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value)}\n className=\"rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"name\">Name A-Z</option>\n <option value=\"rating\">Rating: High to Low</option>\n <option value=\"hours\">Hours: Most Worked</option>\n <option value=\"joined\">Recently Joined</option>\n </select>\n </div>\n </div>\n\n {/* Staff List */}\n {filteredStaff.length === 0 ? (\n <EmptyState\n illustration=\"empty-people\"\n title=\"No staff members found\"\n description=\"Try adjusting your filters, or invite your first team member to get started.\"\n action={\n <button\n type=\"button\"\n onClick={() => {\n setInviteForm(emptyInviteForm);\n setShowInviteModal(true);\n }}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <UserPlus className=\"h-4 w-4\" />\n Invite Staff\n </button>\n }\n />\n ) : (\n <div className=\"rounded-lg border border-border-seam bg-bg-surface shadow-sm divide-y divide-border\">\n {filteredStaff.map((member) => {\n const status = statusConfig[member.status];\n const role = roleConfig[member.role];\n const initials = `${member.firstName[0]}${member.lastName[0]}`;\n\n return (\n <div key={member.id} className=\"p-4 sm:p-5 hover:bg-bg-sunken/30 transition-colors\">\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-4\">\n {/* Avatar + Info */}\n <div className=\"flex items-center gap-4 flex-1 min-w-0\">\n <div className=\"relative shrink-0\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-bg-sunken text-sm font-semibold text-text-primary\">\n {initials}\n </div>\n <span\n className={cn(\n 'absolute -bottom-0.5 -right-0.5 h-3.5 w-3.5 rounded-full border-2 border-card',\n status.dot\n )}\n />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <p className=\"text-sm font-medium text-text-primary\">\n {member.firstName} {member.lastName}\n </p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium',\n role.color\n )}\n >\n {role.label}\n </span>\n <span className={cn('text-xs', status.color)}>{status.label}</span>\n </div>\n <div className=\"flex items-center gap-3 mt-1 text-xs text-text-secondary flex-wrap\">\n <span className=\"flex items-center gap-1\">\n <Mail className=\"h-3 w-3\" />\n {member.email}\n </span>\n <span className=\"flex items-center gap-1\">\n <Phone className=\"h-3 w-3\" />\n {member.phone}\n </span>\n </div>\n </div>\n </div>\n\n {/* Performance + Actions */}\n <div className=\"flex items-center gap-4 sm:gap-6\">\n {/* Performance metrics */}\n <div className=\"hidden md:flex items-center gap-4 text-xs\">\n <div className=\"text-center\">\n <p className=\"font-bold text-text-primary flex items-center gap-0.5 justify-center\">\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n {member.performance.rating}\n </p>\n <p className=\"text-text-secondary\">Rating</p>\n </div>\n <div className=\"text-center\">\n <p className=\"font-bold text-text-primary\">\n {member.performance.tasksCompleted}\n </p>\n <p className=\"text-text-secondary\">Tasks</p>\n </div>\n <div className=\"text-center\">\n <p className=\"font-bold text-text-primary\">\n {member.performance.punctuality}%\n </p>\n <p className=\"text-text-secondary\">On Time</p>\n </div>\n {member.currentShift && (\n <div className=\"text-center\">\n <p className=\"font-bold text-text-primary flex items-center gap-0.5 justify-center\">\n <Clock className=\"h-3 w-3 text-text-secondary\" />\n {member.currentShift}\n </p>\n <p className=\"text-text-secondary\">Shift</p>\n </div>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => handleToggleStatus(member.id)}\n className={cn(\n 'h-6 w-11 rounded-full transition-colors relative',\n member.status === 'active'\n ? 'bg-status-success-text'\n : 'bg-muted-foreground/30'\n )}\n title={member.status === 'active' ? 'Deactivate' : 'Activate'}\n >\n <div\n className={cn(\n 'absolute top-0.5 h-5 w-5 rounded-full bg-bg-surface transition-transform',\n member.status === 'active' ? 'translate-x-5' : 'translate-x-0.5'\n )}\n />\n </button>\n <button\n type=\"button\"\n onClick={() => handleEditStaff(member)}\n className=\"rounded p-1.5 text-text-secondary hover:bg-bg-sunken hover:text-text-primary transition-colors\"\n title=\"Edit\"\n >\n <Edit2 className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => handleRemoveStaff(member.id)}\n className=\"rounded p-1.5 text-text-secondary hover:bg-status-error-bg/10 hover:text-status-error-text transition-colors\"\n title=\"Remove\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n </div>\n\n {/* Mobile performance row */}\n <div className=\"md:hidden flex items-center gap-4 mt-3 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-0.5\">\n <Star className=\"h-3 w-3 fill-status-warning-text text-status-warning-text\" />\n {member.performance.rating}\n </span>\n <span>{member.performance.tasksCompleted} tasks</span>\n <span>{member.performance.punctuality}% on time</span>\n {member.currentShift && (\n <span className=\"flex items-center gap-0.5\">\n <Clock className=\"h-3 w-3\" />\n {member.currentShift}\n </span>\n )}\n <span>{member.shiftsThisWeek} shifts/wk</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n\n {/* Invite Staff Modal */}\n {showInviteModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-bg-canvas/50 p-4\">\n <div className=\"w-full max-w-lg rounded-lg border border-border-seam bg-bg-surface shadow-xl\">\n <div className=\"p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Invite Staff Member</h3>\n <button\n type=\"button\"\n onClick={() => setShowInviteModal(false)}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-bg-sunken\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n First Name *\n </label>\n <input\n type=\"text\"\n value={inviteForm.firstName}\n onChange={(e) => setInviteForm((p) => ({ ...p, firstName: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n Last Name *\n </label>\n <input\n type=\"text\"\n value={inviteForm.lastName}\n onChange={(e) => setInviteForm((p) => ({ ...p, lastName: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n Email *\n </label>\n <input\n type=\"email\"\n value={inviteForm.email}\n onChange={(e) => setInviteForm((p) => ({ ...p, email: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">Phone</label>\n <input\n type=\"tel\"\n value={inviteForm.phone}\n onChange={(e) => setInviteForm((p) => ({ ...p, phone: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">Role</label>\n <select\n value={inviteForm.role}\n onChange={(e) =>\n setInviteForm((p) => ({ ...p, role: e.target.value as StaffRole }))\n }\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n {Object.entries(roleConfig).map(([key, val]) => (\n <option key={key} value={key}>\n {val.label}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n Hourly Rate (₹)\n </label>\n <input\n type=\"number\"\n value={inviteForm.hourlyRate}\n onChange={(e) =>\n setInviteForm((p) => ({ ...p, hourlyRate: parseInt(e.target.value) || 0 }))\n }\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n </div>\n </div>\n <div className=\"flex gap-3 mt-6\">\n <button\n type=\"button\"\n onClick={() => setShowInviteModal(false)}\n className=\"flex-1 rounded-md border border-border-seam px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleInviteStaff}\n className=\"flex-1 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80\"\n >\n Send Invite\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Edit Staff Modal */}\n {showEditModal && selectedStaff && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-bg-canvas/50 p-4\">\n <div className=\"w-full max-w-lg rounded-lg border border-border-seam bg-bg-surface shadow-xl\">\n <div className=\"p-6\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Edit Staff Member</h3>\n <button\n type=\"button\"\n onClick={() => setShowEditModal(false)}\n className=\"rounded p-1.5 text-text-secondary hover:text-text-primary hover:bg-bg-sunken\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n First Name\n </label>\n <input\n type=\"text\"\n value={editForm.firstName}\n onChange={(e) => setEditForm((p) => ({ ...p, firstName: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={editForm.lastName}\n onChange={(e) => setEditForm((p) => ({ ...p, lastName: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">Email</label>\n <input\n type=\"email\"\n value={editForm.email}\n onChange={(e) => setEditForm((p) => ({ ...p, email: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">Phone</label>\n <input\n type=\"tel\"\n value={editForm.phone}\n onChange={(e) => setEditForm((p) => ({ ...p, phone: e.target.value }))}\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div className=\"grid grid-cols-3 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">Role</label>\n <select\n value={editForm.role}\n onChange={(e) =>\n setEditForm((p) => ({ ...p, role: e.target.value as StaffRole }))\n }\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n {Object.entries(roleConfig).map(([key, val]) => (\n <option key={key} value={key}>\n {val.label}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n Rate (₹/hr)\n </label>\n <input\n type=\"number\"\n value={editForm.hourlyRate}\n onChange={(e) =>\n setEditForm((p) => ({ ...p, hourlyRate: parseInt(e.target.value) || 0 }))\n }\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n Status\n </label>\n <select\n value={editForm.status}\n onChange={(e) =>\n setEditForm((p) => ({ ...p, status: e.target.value as StaffStatus }))\n }\n className=\"w-full rounded-md border border-border-seam bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n {Object.entries(statusConfig).map(([key, val]) => (\n <option key={key} value={key}>\n {val.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n </div>\n <div className=\"flex gap-3 mt-6\">\n <button\n type=\"button\"\n onClick={() => setShowEditModal(false)}\n className=\"flex-1 rounded-md border border-border-seam px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSaveEdit}\n className=\"flex-1 rounded-md bg-accent px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent/80\"\n >\n Save Changes\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n};\n"],"mappings":"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"}