@burdenoff/microfe-atheletebridge 2026.614.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.
- package/dist/atheletebridge/components/EmptyState.js +20 -13
- package/dist/atheletebridge/components/EmptyState.js.map +1 -1
- package/dist/atheletebridge/components/InvestmentCard.js +13 -13
- package/dist/atheletebridge/components/InvestmentCard.js.map +1 -1
- package/dist/atheletebridge/components/MetricsCard.js +23 -17
- package/dist/atheletebridge/components/MetricsCard.js.map +1 -1
- package/dist/atheletebridge/components/PageLayout.js +30 -19
- package/dist/atheletebridge/components/PageLayout.js.map +1 -1
- package/dist/atheletebridge/components/RatingDisplay.js +3 -3
- package/dist/atheletebridge/components/RatingDisplay.js.map +1 -1
- package/dist/atheletebridge/components/StatusBadge.js +2 -2
- package/dist/atheletebridge/components/StatusBadge.js.map +1 -1
- package/dist/atheletebridge/pages/HomePage.js +263 -252
- package/dist/atheletebridge/pages/HomePage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminAnalyticsPage.js +60 -60
- package/dist/atheletebridge/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminDashboard.js +77 -77
- package/dist/atheletebridge/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminFinancialPage.js +43 -43
- package/dist/atheletebridge/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminOrdersPage.js +85 -85
- package/dist/atheletebridge/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminProfilePage.js +34 -34
- package/dist/atheletebridge/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/AdminSettingsPage.js +40 -40
- package/dist/atheletebridge/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/CartManagementPage.js +86 -86
- package/dist/atheletebridge/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/admin/UserManagementPage.js +80 -80
- package/dist/atheletebridge/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/AnalyticsDashboard.js +100 -100
- package/dist/atheletebridge/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/BusinessSettingsPage.js +29 -29
- package/dist/atheletebridge/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/CartOwnerDashboard.js +81 -81
- package/dist/atheletebridge/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/CartOwnerProfilePage.js +100 -100
- package/dist/atheletebridge/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/CartServiceConfigPage.js +67 -67
- package/dist/atheletebridge/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/InventoryManagementPage.js +94 -94
- package/dist/atheletebridge/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/OrderManagementPage.js +57 -57
- package/dist/atheletebridge/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/cart-owner/StaffManagementPage.js +75 -75
- package/dist/atheletebridge/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/atheletebridge/pages/common/HelpSupportPage.js +102 -102
- package/dist/atheletebridge/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/atheletebridge/pages/common/NotificationCenterPage.js +36 -35
- package/dist/atheletebridge/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/atheletebridge/pages/common/SettingsPage.js +109 -109
- package/dist/atheletebridge/pages/common/SettingsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/BookingDetailsPage.js +61 -60
- package/dist/atheletebridge/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CartDetailPage.js +72 -71
- package/dist/atheletebridge/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CartDiscoveryPage.js +55 -54
- package/dist/atheletebridge/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CheckoutPage.js +75 -75
- package/dist/atheletebridge/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CustomerDashboard.js +69 -69
- package/dist/atheletebridge/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/customer/CustomerProfilePage.js +72 -72
- package/dist/atheletebridge/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/DirectServiceBookingPage.js +76 -75
- package/dist/atheletebridge/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/FavoritesPage.js +31 -30
- package/dist/atheletebridge/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/OrderHistoryPage.js +42 -41
- package/dist/atheletebridge/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/OrderTrackingPage.js +54 -53
- package/dist/atheletebridge/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/PaymentMethodsPage.js +52 -51
- package/dist/atheletebridge/pages/customer/PaymentMethodsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/ReviewsPage.js +34 -33
- package/dist/atheletebridge/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/atheletebridge/pages/customer/SavedAddressesPage.js +34 -33
- package/dist/atheletebridge/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestmentDetailsPage.js +108 -108
- package/dist/atheletebridge/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestmentOpportunitiesPage.js +77 -76
- package/dist/atheletebridge/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorAnalyticsPage.js +69 -69
- package/dist/atheletebridge/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorDashboard.js +53 -53
- package/dist/atheletebridge/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorInvestmentsPage.js +33 -32
- package/dist/atheletebridge/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorPortfolioPage.js +55 -55
- package/dist/atheletebridge/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/atheletebridge/pages/investor/InvestorProfilePage.js +138 -138
- package/dist/atheletebridge/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/TaskDetailsPage.js +66 -65
- package/dist/atheletebridge/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerDashboard.js +74 -74
- package/dist/atheletebridge/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerOrdersPage.js +50 -49
- package/dist/atheletebridge/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerProfilePage.js +92 -92
- package/dist/atheletebridge/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/atheletebridge/pages/worker/WorkerSchedulePage.js +57 -55
- package/dist/atheletebridge/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/dist/atheletebridge/utils/cn.js +2 -2
- package/dist/node_modules/{.bun/clsx@2.1.1/node_modules/clsx → clsx}/dist/clsx.js +1 -1
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/{.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge → tailwind-merge}/dist/bundle-mjs.js +212 -170
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/package.json +3 -3
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerProfilePage.js","names":[],"sources":["../../../../src/atheletebridge/pages/worker/WorkerProfilePage.tsx"],"sourcesContent":["/**\n * Worker Profile Page\n *\n * Full-featured profile page with:\n * - 6 sidebar tabs: Personal Info, Work Details, Address, Documents, Achievements, Notifications\n * - Edit/Save/Cancel mode toggle with all form fields becoming editable\n * - Profile image upload with camera icon overlay\n * - Personal Info: first/last name, email, phone, DOB + Emergency Contact\n * - Work Details: Employee ID, Designation, Department, Work Location, Joining Date, Employment Type + 3 stat cards\n * - Address tab: Current address + Permanent address with \"same as current\" checkbox\n * - Documents tab: PAN, Aadhar (masked, readonly), Bank Name, Account Number, IFSC Code + security notice\n * - Achievements tab: badges + Performance Metrics with progress bars\n * - Notifications tab: 5 toggle switches for notification preferences\n *\n * @module atheletebridge/pages/worker\n */\n\nimport { useState, type ChangeEvent } from 'react';\nimport {\n User,\n Phone,\n Briefcase,\n MapPin,\n CreditCard,\n Award,\n Bell,\n Camera,\n Save,\n X,\n Pencil,\n Loader2,\n Clock,\n Shield,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport { mockWorker } from '../../mocks/users';\nimport { mockWorkerStats } from '../../mocks/data';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ProfileTab = 'personal' | 'work' | 'address' | 'documents' | 'achievements' | 'notifications';\n\ninterface WorkerProfile {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n profileImage: string;\n dateOfBirth: string;\n employeeId: string;\n designation: string;\n department: string;\n workLocation: string;\n joiningDate: string;\n employmentType: string;\n currentAddress: string;\n city: string;\n state: string;\n pincode: string;\n permanentAddress: string;\n sameAsCurrent: boolean;\n emergencyContactName: string;\n emergencyContactPhone: string;\n emergencyContactRelation: string;\n bankName: string;\n accountNumber: string;\n ifscCode: string;\n panNumber: string;\n aadharNumber: string;\n}\n\ninterface NotificationPref {\n id: string;\n label: string;\n description: string;\n enabled: boolean;\n}\n\n// ============================================================================\n// Tab Configuration\n// ============================================================================\n\nconst tabs: { id: ProfileTab; label: string; icon: typeof User }[] = [\n { id: 'personal', label: 'Personal Info', icon: User },\n { id: 'work', label: 'Work Details', icon: Briefcase },\n { id: 'address', label: 'Address', icon: MapPin },\n { id: 'documents', label: 'Documents', icon: CreditCard },\n { id: 'achievements', label: 'Achievements', icon: Award },\n { id: 'notifications', label: 'Notifications', icon: Bell },\n];\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WorkerProfilePage = () => {\n const { navigateTo } = useAthleteBridge();\n const [activeTab, setActiveTab] = useState<ProfileTab>('personal');\n const [isEditing, setIsEditing] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n\n const [profile, setProfile] = useState<WorkerProfile>({\n firstName: mockWorker.firstName || 'Suresh',\n lastName: mockWorker.lastName || 'Kumar',\n email: mockWorker.email || 'suresh.worker@example.com',\n phone: mockWorker.phone || '+91-87654-32109',\n profileImage: mockWorker.profilePicture || '',\n dateOfBirth: '1990-05-15',\n employeeId: 'EMP-2024-001',\n designation: 'Delivery Executive',\n department: 'Operations',\n workLocation: 'Koramangala Zone',\n joiningDate: '2023-01-10',\n employmentType: 'Full Time',\n currentAddress: '45, 2nd Main, BTM Layout',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560076',\n permanentAddress: '',\n sameAsCurrent: true,\n emergencyContactName: 'Lakshmi Kumar',\n emergencyContactPhone: '+91-98765-12345',\n emergencyContactRelation: 'Spouse',\n bankName: 'HDFC Bank',\n accountNumber: '****5678',\n ifscCode: 'HDFC0001234',\n panNumber: 'ABCDE****F',\n aadharNumber: '****5678',\n });\n\n const [notifications, setNotifications] = useState<NotificationPref[]>([\n {\n id: 'orders',\n label: 'New Order Assignments',\n description: 'Get notified when new orders are assigned to you',\n enabled: true,\n },\n {\n id: 'schedule',\n label: 'Schedule Updates',\n description: 'Changes to your work schedule',\n enabled: true,\n },\n {\n id: 'earnings',\n label: 'Earnings Updates',\n description: 'Daily and weekly earnings summaries',\n enabled: true,\n },\n {\n id: 'performance',\n label: 'Performance Reviews',\n description: 'Feedback and performance metrics',\n enabled: true,\n },\n {\n id: 'announcements',\n label: 'Company Announcements',\n description: 'Important updates from management',\n enabled: true,\n },\n ]);\n\n const handleInputChange = (field: keyof WorkerProfile, value: string | boolean) => {\n setProfile((prev) => ({ ...prev, [field]: value }));\n };\n\n const handleSave = () => {\n setIsSaving(true);\n setTimeout(() => {\n setIsSaving(false);\n setIsEditing(false);\n alert('Profile updated successfully!');\n }, 1000);\n };\n\n const handleImageUpload = (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onloadend = () => {\n setProfile((prev) => ({ ...prev, profileImage: reader.result as string }));\n };\n reader.readAsDataURL(file);\n }\n };\n\n const toggleNotification = (id: string) => {\n if (!isEditing) return;\n setNotifications((prev) => prev.map((n) => (n.id === id ? { ...n, enabled: !n.enabled } : n)));\n };\n\n return (\n <PageLayout\n title=\"My Profile\"\n description=\"Manage your profile information\"\n actions={\n <div className=\"flex items-center gap-2\">\n {!isEditing ? (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-4 py-2 text-sm font-medium text-foreground hover:bg-accent/80 transition-colors\"\n >\n <Pencil className=\"h-4 w-4\" />\n Edit Profile\n </button>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => setIsEditing(false)}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-3 py-2 text-sm font-medium text-foreground hover:bg-accent/80 transition-colors\"\n >\n <X className=\"h-4 w-4\" />\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={isSaving}\n className=\"inline-flex items-center gap-2 rounded-md bg-blue-500/10 px-3 py-2 text-sm font-medium text-blue-600 dark:text-blue-400 hover:bg-blue-500/20 transition-colors disabled:opacity-50\"\n >\n {isSaving ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Changes\n </>\n )}\n </button>\n </>\n )}\n </div>\n }\n >\n <div className=\"grid lg:grid-cols-4 gap-6 max-w-6xl\">\n {/* Sidebar */}\n <div className=\"lg:col-span-1 space-y-4\">\n {/* Profile Card */}\n <div className=\"rounded-lg border border-border bg-card p-5 shadow-sm text-center\">\n <div className=\"relative inline-block\">\n <div className=\"h-20 w-20 rounded-full bg-muted overflow-hidden mx-auto\">\n {profile.profileImage ? (\n <img\n src={profile.profileImage}\n alt={`${profile.firstName} ${profile.lastName}`}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"flex h-full w-full items-center justify-center text-muted-foreground\">\n <User className=\"h-10 w-10\" />\n </div>\n )}\n </div>\n {isEditing && (\n <label className=\"absolute bottom-0 right-0 flex h-7 w-7 items-center justify-center rounded-full bg-blue-500/20 text-blue-600 dark:text-blue-400 cursor-pointer hover:bg-blue-500/30 transition-colors\">\n <Camera className=\"h-3.5 w-3.5\" />\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleImageUpload}\n className=\"hidden\"\n />\n </label>\n )}\n </div>\n <h3 className=\"mt-3 text-sm font-semibold text-foreground\">\n {profile.firstName} {profile.lastName}\n </h3>\n <p className=\"text-xs text-muted-foreground\">{profile.designation}</p>\n <p className=\"text-[10px] text-muted-foreground mt-0.5\">{profile.employeeId}</p>\n </div>\n\n {/* Tab Navigation */}\n <div className=\"space-y-1\">\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 flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-blue-500/10 text-blue-600 dark:text-blue-400'\n : 'bg-card text-foreground hover:bg-muted'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Content Area */}\n <div className=\"lg:col-span-3\">\n <div className=\"rounded-lg border border-border bg-card p-6 shadow-sm\">\n {/* ============= Personal Info ============= */}\n {activeTab === 'personal' && (\n <div>\n <h2 className=\"text-lg font-semibold text-foreground mb-5\">Personal Information</h2>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n First Name\n </label>\n <input\n type=\"text\"\n value={profile.firstName}\n onChange={(e) => handleInputChange('firstName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={profile.lastName}\n onChange={(e) => handleInputChange('lastName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Email Address\n </label>\n <input\n type=\"email\"\n value={profile.email}\n onChange={(e) => handleInputChange('email', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Phone Number\n </label>\n <input\n type=\"text\"\n value={profile.phone}\n onChange={(e) => handleInputChange('phone', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Date of Birth\n </label>\n <input\n type=\"date\"\n value={profile.dateOfBirth}\n onChange={(e) => handleInputChange('dateOfBirth', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n\n {/* Emergency Contact */}\n <div className=\"mt-7\">\n <h3 className=\"text-sm font-semibold text-foreground mb-4\">Emergency Contact</h3>\n <div className=\"grid sm:grid-cols-3 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Contact Name\n </label>\n <input\n type=\"text\"\n value={profile.emergencyContactName}\n onChange={(e) => handleInputChange('emergencyContactName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Contact Phone\n </label>\n <input\n type=\"text\"\n value={profile.emergencyContactPhone}\n onChange={(e) => handleInputChange('emergencyContactPhone', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Relationship\n </label>\n <input\n type=\"text\"\n value={profile.emergencyContactRelation}\n onChange={(e) =>\n handleInputChange('emergencyContactRelation', e.target.value)\n }\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Work Details ============= */}\n {activeTab === 'work' && (\n <div>\n <h2 className=\"text-lg font-semibold text-foreground mb-5\">Work Details</h2>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Employee ID\n </label>\n <input\n type=\"text\"\n value={profile.employeeId}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Designation\n </label>\n <input\n type=\"text\"\n value={profile.designation}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Department\n </label>\n <input\n type=\"text\"\n value={profile.department}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Work Location\n </label>\n <input\n type=\"text\"\n value={profile.workLocation}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Joining Date\n </label>\n <input\n type=\"date\"\n value={profile.joiningDate}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Employment Type\n </label>\n <input\n type=\"text\"\n value={profile.employmentType}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n </div>\n\n {/* Performance Stats */}\n <div className=\"mt-7 grid sm:grid-cols-3 gap-4\">\n <div className=\"rounded-lg bg-muted/50 p-4 text-center\">\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">\n {mockWorkerStats.totalDeliveries}\n </p>\n <p className=\"text-xs text-muted-foreground\">Total Deliveries</p>\n </div>\n <div className=\"rounded-lg bg-muted/50 p-4 text-center\">\n <p className=\"text-2xl font-bold text-green-600 dark:text-green-400\">\n {mockWorkerStats.averageRating}\n </p>\n <p className=\"text-xs text-muted-foreground\">Average Rating</p>\n </div>\n <div className=\"rounded-lg bg-muted/50 p-4 text-center\">\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">\n {mockWorkerStats.completionRate}%\n </p>\n <p className=\"text-xs text-muted-foreground\">On-Time Delivery</p>\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Address ============= */}\n {activeTab === 'address' && (\n <div>\n <h2 className=\"text-lg font-semibold text-foreground mb-5\">Address Information</h2>\n\n <div className=\"space-y-6\">\n {/* Current Address */}\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">Current Address</h3>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"sm:col-span-2\">\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Address Line\n </label>\n <textarea\n rows={2}\n value={profile.currentAddress}\n onChange={(e) => handleInputChange('currentAddress', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40 resize-none\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n City\n </label>\n <input\n type=\"text\"\n value={profile.city}\n onChange={(e) => handleInputChange('city', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n State\n </label>\n <input\n type=\"text\"\n value={profile.state}\n onChange={(e) => handleInputChange('state', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Pincode\n </label>\n <input\n type=\"text\"\n value={profile.pincode}\n onChange={(e) => handleInputChange('pincode', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n </div>\n\n {/* Permanent Address */}\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-3\">\n Permanent Address\n </h3>\n <label className=\"flex items-center gap-2 mb-3 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={profile.sameAsCurrent}\n onChange={(e) => handleInputChange('sameAsCurrent', e.target.checked)}\n disabled={!isEditing}\n className=\"h-4 w-4 rounded border-border text-blue-600 focus:ring-blue-500/40\"\n />\n <span className=\"text-xs text-foreground\">Same as current address</span>\n </label>\n {!profile.sameAsCurrent && (\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Address Line\n </label>\n <textarea\n rows={2}\n value={profile.permanentAddress}\n onChange={(e) => handleInputChange('permanentAddress', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40 resize-none\"\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Documents ============= */}\n {activeTab === 'documents' && (\n <div>\n <h2 className=\"text-lg font-semibold text-foreground mb-5\">Documents & Banking</h2>\n\n <div className=\"rounded-lg bg-yellow-500/10 border border-yellow-500/20 p-3 mb-5\">\n <p className=\"text-xs text-yellow-600 dark:text-yellow-400 flex items-center gap-2\">\n <Shield className=\"h-4 w-4 shrink-0\" />\n Your documents and banking information are encrypted and secure.\n </p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n PAN Number\n </label>\n <input\n type=\"text\"\n value={profile.panNumber}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Aadhar Number\n </label>\n <input\n type=\"text\"\n value={profile.aadharNumber}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Bank Name\n </label>\n <input\n type=\"text\"\n value={profile.bankName}\n onChange={(e) => handleInputChange('bankName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n Account Number\n </label>\n <input\n type=\"text\"\n value={profile.accountNumber}\n disabled\n className=\"w-full rounded-md border border-border bg-muted px-3 py-2 text-sm text-foreground cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-muted-foreground mb-1\">\n IFSC Code\n </label>\n <input\n type=\"text\"\n value={profile.ifscCode}\n onChange={(e) => handleInputChange('ifscCode', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground disabled:bg-muted disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Achievements ============= */}\n {activeTab === 'achievements' && (\n <div>\n <h2 className=\"text-lg font-semibold text-foreground mb-5\">\n Achievements & Recognition\n </h2>\n\n {/* Achievement Badges */}\n <div className=\"grid sm:grid-cols-2 gap-4 mb-7\">\n <div className=\"rounded-lg bg-yellow-500/5 border border-yellow-500/20 p-5 text-center\">\n <Award className=\"h-10 w-10 text-yellow-600 dark:text-yellow-400 mx-auto mb-2\" />\n <h3 className=\"text-sm font-semibold text-foreground\">Employee of the Month</h3>\n <p className=\"text-xs text-muted-foreground mt-1\">December 2023</p>\n </div>\n <div className=\"rounded-lg bg-blue-500/5 border border-blue-500/20 p-5 text-center\">\n <Clock className=\"h-10 w-10 text-blue-600 dark:text-blue-400 mx-auto mb-2\" />\n <h3 className=\"text-sm font-semibold text-foreground\">Perfect Attendance</h3>\n <p className=\"text-xs text-muted-foreground mt-1\">Q3 2023</p>\n </div>\n </div>\n\n {/* Performance Metrics with Progress Bars */}\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-4\">\n Performance Metrics\n </h3>\n <div className=\"space-y-4\">\n <div>\n <div className=\"flex justify-between items-center mb-1.5\">\n <span className=\"text-xs text-muted-foreground\">Delivery Success Rate</span>\n <span className=\"text-xs font-medium text-foreground\">98%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-green-500 transition-all\"\n style={{ width: '98%' }}\n />\n </div>\n </div>\n <div>\n <div className=\"flex justify-between items-center mb-1.5\">\n <span className=\"text-xs text-muted-foreground\">Customer Satisfaction</span>\n <span className=\"text-xs font-medium text-foreground\">95%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-blue-500 transition-all\"\n style={{ width: '95%' }}\n />\n </div>\n </div>\n <div>\n <div className=\"flex justify-between items-center mb-1.5\">\n <span className=\"text-xs text-muted-foreground\">Punctuality</span>\n <span className=\"text-xs font-medium text-foreground\">92%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-purple-500 transition-all\"\n style={{ width: '92%' }}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Notifications ============= */}\n {activeTab === 'notifications' && (\n <div>\n <h2 className=\"text-lg font-semibold text-foreground mb-5\">\n Notification Preferences\n </h2>\n <div className=\"space-y-4\">\n {notifications.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between p-4 rounded-lg bg-muted/50\"\n >\n <div>\n <h4 className=\"text-sm font-medium text-foreground\">{item.label}</h4>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{item.description}</p>\n </div>\n <button\n type=\"button\"\n onClick={() => toggleNotification(item.id)}\n disabled={!isEditing}\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full transition-colors',\n item.enabled ? 'bg-blue-500' : 'bg-muted-foreground/30',\n !isEditing && 'opacity-60 cursor-not-allowed'\n )}\n >\n <span\n className={cn(\n 'inline-block h-4 w-4 rounded-full bg-white transition-transform',\n item.enabled ? 'translate-x-6' : 'translate-x-1'\n )}\n />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkerProfilePage.js","names":[],"sources":["../../../../src/atheletebridge/pages/worker/WorkerProfilePage.tsx"],"sourcesContent":["/**\n * Worker Profile Page\n *\n * Full-featured profile page with:\n * - 6 sidebar tabs: Personal Info, Work Details, Address, Documents, Achievements, Notifications\n * - Edit/Save/Cancel mode toggle with all form fields becoming editable\n * - Profile image upload with camera icon overlay\n * - Personal Info: first/last name, email, phone, DOB + Emergency Contact\n * - Work Details: Employee ID, Designation, Department, Work Location, Joining Date, Employment Type + 3 stat cards\n * - Address tab: Current address + Permanent address with \"same as current\" checkbox\n * - Documents tab: PAN, Aadhar (masked, readonly), Bank Name, Account Number, IFSC Code + security notice\n * - Achievements tab: badges + Performance Metrics with progress bars\n * - Notifications tab: 5 toggle switches for notification preferences\n *\n * @module atheletebridge/pages/worker\n */\n\nimport { useState, type ChangeEvent } from 'react';\nimport {\n User,\n Phone,\n Briefcase,\n MapPin,\n CreditCard,\n Award,\n Bell,\n Camera,\n Save,\n X,\n Pencil,\n Loader2,\n Clock,\n Shield,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAthleteBridge } from '../../context/AthleteBridgeContext';\nimport { mockWorker } from '../../mocks/users';\nimport { mockWorkerStats } from '../../mocks/data';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ProfileTab = 'personal' | 'work' | 'address' | 'documents' | 'achievements' | 'notifications';\n\ninterface WorkerProfile {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n profileImage: string;\n dateOfBirth: string;\n employeeId: string;\n designation: string;\n department: string;\n workLocation: string;\n joiningDate: string;\n employmentType: string;\n currentAddress: string;\n city: string;\n state: string;\n pincode: string;\n permanentAddress: string;\n sameAsCurrent: boolean;\n emergencyContactName: string;\n emergencyContactPhone: string;\n emergencyContactRelation: string;\n bankName: string;\n accountNumber: string;\n ifscCode: string;\n panNumber: string;\n aadharNumber: string;\n}\n\ninterface NotificationPref {\n id: string;\n label: string;\n description: string;\n enabled: boolean;\n}\n\n// ============================================================================\n// Tab Configuration\n// ============================================================================\n\nconst tabs: { id: ProfileTab; label: string; icon: typeof User }[] = [\n { id: 'personal', label: 'Personal Info', icon: User },\n { id: 'work', label: 'Work Details', icon: Briefcase },\n { id: 'address', label: 'Address', icon: MapPin },\n { id: 'documents', label: 'Documents', icon: CreditCard },\n { id: 'achievements', label: 'Achievements', icon: Award },\n { id: 'notifications', label: 'Notifications', icon: Bell },\n];\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WorkerProfilePage = () => {\n const { navigateTo } = useAthleteBridge();\n const [activeTab, setActiveTab] = useState<ProfileTab>('personal');\n const [isEditing, setIsEditing] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n\n const [profile, setProfile] = useState<WorkerProfile>({\n firstName: mockWorker.firstName || 'Suresh',\n lastName: mockWorker.lastName || 'Kumar',\n email: mockWorker.email || 'suresh.worker@example.com',\n phone: mockWorker.phone || '+91-87654-32109',\n profileImage: mockWorker.profilePicture || '',\n dateOfBirth: '1990-05-15',\n employeeId: 'EMP-2024-001',\n designation: 'Delivery Executive',\n department: 'Operations',\n workLocation: 'Koramangala Zone',\n joiningDate: '2023-01-10',\n employmentType: 'Full Time',\n currentAddress: '45, 2nd Main, BTM Layout',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560076',\n permanentAddress: '',\n sameAsCurrent: true,\n emergencyContactName: 'Lakshmi Kumar',\n emergencyContactPhone: '+91-98765-12345',\n emergencyContactRelation: 'Spouse',\n bankName: 'HDFC Bank',\n accountNumber: '****5678',\n ifscCode: 'HDFC0001234',\n panNumber: 'ABCDE****F',\n aadharNumber: '****5678',\n });\n\n const [notifications, setNotifications] = useState<NotificationPref[]>([\n {\n id: 'orders',\n label: 'New Order Assignments',\n description: 'Get notified when new orders are assigned to you',\n enabled: true,\n },\n {\n id: 'schedule',\n label: 'Schedule Updates',\n description: 'Changes to your work schedule',\n enabled: true,\n },\n {\n id: 'earnings',\n label: 'Earnings Updates',\n description: 'Daily and weekly earnings summaries',\n enabled: true,\n },\n {\n id: 'performance',\n label: 'Performance Reviews',\n description: 'Feedback and performance metrics',\n enabled: true,\n },\n {\n id: 'announcements',\n label: 'Company Announcements',\n description: 'Important updates from management',\n enabled: true,\n },\n ]);\n\n const handleInputChange = (field: keyof WorkerProfile, value: string | boolean) => {\n setProfile((prev) => ({ ...prev, [field]: value }));\n };\n\n const handleSave = () => {\n setIsSaving(true);\n setTimeout(() => {\n setIsSaving(false);\n setIsEditing(false);\n alert('Profile updated successfully!');\n }, 1000);\n };\n\n const handleImageUpload = (e: ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n const reader = new FileReader();\n reader.onloadend = () => {\n setProfile((prev) => ({ ...prev, profileImage: reader.result as string }));\n };\n reader.readAsDataURL(file);\n }\n };\n\n const toggleNotification = (id: string) => {\n if (!isEditing) return;\n setNotifications((prev) => prev.map((n) => (n.id === id ? { ...n, enabled: !n.enabled } : n)));\n };\n\n return (\n <PageLayout\n title=\"My Profile\"\n description=\"Manage your profile information\"\n actions={\n <div className=\"flex items-center gap-2\">\n {!isEditing ? (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\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 <Pencil className=\"h-4 w-4\" />\n Edit Profile\n </button>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => setIsEditing(false)}\n className=\"inline-flex items-center gap-2 rounded-md bg-accent px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent/80 transition-colors\"\n >\n <X className=\"h-4 w-4\" />\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={isSaving}\n className=\"inline-flex items-center gap-2 rounded-md bg-blue-500/10 px-3 py-2 text-sm font-medium text-blue-600 dark:text-blue-400 hover:bg-blue-500/20 transition-colors disabled:opacity-50\"\n >\n {isSaving ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Saving...\n </>\n ) : (\n <>\n <Save className=\"h-4 w-4\" />\n Save Changes\n </>\n )}\n </button>\n </>\n )}\n </div>\n }\n >\n <div className=\"grid lg:grid-cols-4 gap-6 max-w-6xl\">\n {/* Sidebar */}\n <div className=\"lg:col-span-1 space-y-4\">\n {/* Profile Card */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5 shadow-sm text-center\">\n <div className=\"relative inline-block\">\n <div className=\"h-20 w-20 rounded-full bg-bg-sunken overflow-hidden mx-auto\">\n {profile.profileImage ? (\n <img\n src={profile.profileImage}\n alt={`${profile.firstName} ${profile.lastName}`}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div className=\"flex h-full w-full items-center justify-center text-text-secondary\">\n <User className=\"h-10 w-10\" />\n </div>\n )}\n </div>\n {isEditing && (\n <label className=\"absolute bottom-0 right-0 flex h-7 w-7 items-center justify-center rounded-full bg-blue-500/20 text-blue-600 dark:text-blue-400 cursor-pointer hover:bg-blue-500/30 transition-colors\">\n <Camera className=\"h-3.5 w-3.5\" />\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleImageUpload}\n className=\"hidden\"\n />\n </label>\n )}\n </div>\n <h3 className=\"mt-3 text-sm font-semibold text-text-primary\">\n {profile.firstName} {profile.lastName}\n </h3>\n <p className=\"text-xs text-text-secondary\">{profile.designation}</p>\n <p className=\"text-[10px] text-text-secondary mt-0.5\">{profile.employeeId}</p>\n </div>\n\n {/* Tab Navigation */}\n <div className=\"space-y-1\">\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 flex items-center gap-3 rounded-lg px-3 py-2.5 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-blue-500/10 text-blue-600 dark:text-blue-400'\n : 'bg-bg-surface text-text-primary hover:bg-bg-sunken'\n )}\n >\n <Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Content Area */}\n <div className=\"lg:col-span-3\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6 shadow-sm\">\n {/* ============= Personal Info ============= */}\n {activeTab === 'personal' && (\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary mb-5\">Personal Information</h2>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n First Name\n </label>\n <input\n type=\"text\"\n value={profile.firstName}\n onChange={(e) => handleInputChange('firstName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={profile.lastName}\n onChange={(e) => handleInputChange('lastName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Email Address\n </label>\n <input\n type=\"email\"\n value={profile.email}\n onChange={(e) => handleInputChange('email', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Phone Number\n </label>\n <input\n type=\"text\"\n value={profile.phone}\n onChange={(e) => handleInputChange('phone', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Date of Birth\n </label>\n <input\n type=\"date\"\n value={profile.dateOfBirth}\n onChange={(e) => handleInputChange('dateOfBirth', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n\n {/* Emergency Contact */}\n <div className=\"mt-7\">\n <h3 className=\"text-sm font-semibold text-text-primary mb-4\">Emergency Contact</h3>\n <div className=\"grid sm:grid-cols-3 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Contact Name\n </label>\n <input\n type=\"text\"\n value={profile.emergencyContactName}\n onChange={(e) => handleInputChange('emergencyContactName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Contact Phone\n </label>\n <input\n type=\"text\"\n value={profile.emergencyContactPhone}\n onChange={(e) => handleInputChange('emergencyContactPhone', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Relationship\n </label>\n <input\n type=\"text\"\n value={profile.emergencyContactRelation}\n onChange={(e) =>\n handleInputChange('emergencyContactRelation', e.target.value)\n }\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Work Details ============= */}\n {activeTab === 'work' && (\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary mb-5\">Work Details</h2>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Employee ID\n </label>\n <input\n type=\"text\"\n value={profile.employeeId}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Designation\n </label>\n <input\n type=\"text\"\n value={profile.designation}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Department\n </label>\n <input\n type=\"text\"\n value={profile.department}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Work Location\n </label>\n <input\n type=\"text\"\n value={profile.workLocation}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Joining Date\n </label>\n <input\n type=\"date\"\n value={profile.joiningDate}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Employment Type\n </label>\n <input\n type=\"text\"\n value={profile.employmentType}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n </div>\n\n {/* Performance Stats */}\n <div className=\"mt-7 grid sm:grid-cols-3 gap-4\">\n <div className=\"rounded-lg bg-bg-sunken/50 p-4 text-center\">\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">\n {mockWorkerStats.totalDeliveries}\n </p>\n <p className=\"text-xs text-text-secondary\">Total Deliveries</p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4 text-center\">\n <p className=\"text-2xl font-bold text-green-600 dark:text-green-400\">\n {mockWorkerStats.averageRating}\n </p>\n <p className=\"text-xs text-text-secondary\">Average Rating</p>\n </div>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4 text-center\">\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">\n {mockWorkerStats.completionRate}%\n </p>\n <p className=\"text-xs text-text-secondary\">On-Time Delivery</p>\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Address ============= */}\n {activeTab === 'address' && (\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary mb-5\">Address Information</h2>\n\n <div className=\"space-y-6\">\n {/* Current Address */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary mb-3\">Current Address</h3>\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"sm:col-span-2\">\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Address Line\n </label>\n <textarea\n rows={2}\n value={profile.currentAddress}\n onChange={(e) => handleInputChange('currentAddress', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40 resize-none\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n City\n </label>\n <input\n type=\"text\"\n value={profile.city}\n onChange={(e) => handleInputChange('city', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n State\n </label>\n <input\n type=\"text\"\n value={profile.state}\n onChange={(e) => handleInputChange('state', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Pincode\n </label>\n <input\n type=\"text\"\n value={profile.pincode}\n onChange={(e) => handleInputChange('pincode', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n </div>\n\n {/* Permanent Address */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary mb-3\">\n Permanent Address\n </h3>\n <label className=\"flex items-center gap-2 mb-3 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={profile.sameAsCurrent}\n onChange={(e) => handleInputChange('sameAsCurrent', e.target.checked)}\n disabled={!isEditing}\n className=\"h-4 w-4 rounded border-border-subtle text-blue-600 focus:ring-blue-500/40\"\n />\n <span className=\"text-xs text-text-primary\">Same as current address</span>\n </label>\n {!profile.sameAsCurrent && (\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Address Line\n </label>\n <textarea\n rows={2}\n value={profile.permanentAddress}\n onChange={(e) => handleInputChange('permanentAddress', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40 resize-none\"\n />\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Documents ============= */}\n {activeTab === 'documents' && (\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary mb-5\">Documents & Banking</h2>\n\n <div className=\"rounded-lg bg-yellow-500/10 border border-yellow-500/20 p-3 mb-5\">\n <p className=\"text-xs text-yellow-600 dark:text-yellow-400 flex items-center gap-2\">\n <Shield className=\"h-4 w-4 shrink-0\" />\n Your documents and banking information are encrypted and secure.\n </p>\n </div>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n PAN Number\n </label>\n <input\n type=\"text\"\n value={profile.panNumber}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Aadhar Number\n </label>\n <input\n type=\"text\"\n value={profile.aadharNumber}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Bank Name\n </label>\n <input\n type=\"text\"\n value={profile.bankName}\n onChange={(e) => handleInputChange('bankName', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n Account Number\n </label>\n <input\n type=\"text\"\n value={profile.accountNumber}\n disabled\n className=\"w-full rounded-md border border-border-subtle bg-bg-sunken px-3 py-2 text-sm text-text-primary cursor-not-allowed\"\n />\n </div>\n <div>\n <label className=\"block text-xs font-medium text-text-secondary mb-1\">\n IFSC Code\n </label>\n <input\n type=\"text\"\n value={profile.ifscCode}\n onChange={(e) => handleInputChange('ifscCode', e.target.value)}\n disabled={!isEditing}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary disabled:bg-bg-sunken disabled:cursor-not-allowed focus:outline-none focus:ring-2 focus:ring-blue-500/40\"\n />\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Achievements ============= */}\n {activeTab === 'achievements' && (\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary mb-5\">\n Achievements & Recognition\n </h2>\n\n {/* Achievement Badges */}\n <div className=\"grid sm:grid-cols-2 gap-4 mb-7\">\n <div className=\"rounded-lg bg-yellow-500/5 border border-yellow-500/20 p-5 text-center\">\n <Award className=\"h-10 w-10 text-yellow-600 dark:text-yellow-400 mx-auto mb-2\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">Employee of the Month</h3>\n <p className=\"text-xs text-text-secondary mt-1\">December 2023</p>\n </div>\n <div className=\"rounded-lg bg-blue-500/5 border border-blue-500/20 p-5 text-center\">\n <Clock className=\"h-10 w-10 text-blue-600 dark:text-blue-400 mx-auto mb-2\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">Perfect Attendance</h3>\n <p className=\"text-xs text-text-secondary mt-1\">Q3 2023</p>\n </div>\n </div>\n\n {/* Performance Metrics with Progress Bars */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary mb-4\">\n Performance Metrics\n </h3>\n <div className=\"space-y-4\">\n <div>\n <div className=\"flex justify-between items-center mb-1.5\">\n <span className=\"text-xs text-text-secondary\">Delivery Success Rate</span>\n <span className=\"text-xs font-medium text-text-primary\">98%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-green-500 transition-all\"\n style={{ width: '98%' }}\n />\n </div>\n </div>\n <div>\n <div className=\"flex justify-between items-center mb-1.5\">\n <span className=\"text-xs text-text-secondary\">Customer Satisfaction</span>\n <span className=\"text-xs font-medium text-text-primary\">95%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-blue-500 transition-all\"\n style={{ width: '95%' }}\n />\n </div>\n </div>\n <div>\n <div className=\"flex justify-between items-center mb-1.5\">\n <span className=\"text-xs text-text-secondary\">Punctuality</span>\n <span className=\"text-xs font-medium text-text-primary\">92%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-purple-500 transition-all\"\n style={{ width: '92%' }}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* ============= Notifications ============= */}\n {activeTab === 'notifications' && (\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary mb-5\">\n Notification Preferences\n </h2>\n <div className=\"space-y-4\">\n {notifications.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between p-4 rounded-lg bg-bg-sunken/50\"\n >\n <div>\n <h4 className=\"text-sm font-medium text-text-primary\">{item.label}</h4>\n <p className=\"text-xs text-text-secondary mt-0.5\">{item.description}</p>\n </div>\n <button\n type=\"button\"\n onClick={() => toggleNotification(item.id)}\n disabled={!isEditing}\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full transition-colors',\n item.enabled ? 'bg-blue-500' : 'bg-muted-foreground/30',\n !isEditing && 'opacity-60 cursor-not-allowed'\n )}\n >\n <span\n className={cn(\n 'inline-block h-4 w-4 rounded-full bg-white transition-transform',\n item.enabled ? 'translate-x-6' : 'translate-x-1'\n )}\n />\n </button>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
@@ -226,8 +226,8 @@ var A = () => {
|
|
|
226
226
|
className: "flex items-center justify-center py-24",
|
|
227
227
|
children: /* @__PURE__ */ w("div", {
|
|
228
228
|
className: "text-center",
|
|
229
|
-
children: [/* @__PURE__ */ C(p, { className: "h-10 w-10 animate-spin text-
|
|
230
|
-
className: "text-sm text-
|
|
229
|
+
children: [/* @__PURE__ */ C(p, { className: "h-10 w-10 animate-spin text-text-secondary mx-auto mb-4" }), /* @__PURE__ */ C("p", {
|
|
230
|
+
className: "text-sm text-text-secondary",
|
|
231
231
|
children: "Loading schedule..."
|
|
232
232
|
})]
|
|
233
233
|
})
|
|
@@ -241,61 +241,61 @@ var A = () => {
|
|
|
241
241
|
className: "grid grid-cols-2 md:grid-cols-4 gap-3",
|
|
242
242
|
children: [
|
|
243
243
|
/* @__PURE__ */ w("div", {
|
|
244
|
-
className: "rounded-lg border border-border bg-
|
|
244
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
245
245
|
children: [/* @__PURE__ */ C("p", {
|
|
246
|
-
className: "text-xs text-
|
|
246
|
+
className: "text-xs text-text-secondary",
|
|
247
247
|
children: "Hours This Week"
|
|
248
248
|
}), /* @__PURE__ */ w("p", {
|
|
249
|
-
className: "text-2xl font-bold text-
|
|
249
|
+
className: "text-2xl font-bold text-text-primary",
|
|
250
250
|
children: [U.hoursThisWeek, "h"]
|
|
251
251
|
})]
|
|
252
252
|
}),
|
|
253
253
|
/* @__PURE__ */ w("div", {
|
|
254
|
-
className: "rounded-lg border border-border bg-
|
|
254
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
255
255
|
children: [/* @__PURE__ */ C("p", {
|
|
256
|
-
className: "text-xs text-
|
|
256
|
+
className: "text-xs text-text-secondary",
|
|
257
257
|
children: "Shifts This Week"
|
|
258
258
|
}), /* @__PURE__ */ C("p", {
|
|
259
|
-
className: "text-2xl font-bold text-
|
|
259
|
+
className: "text-2xl font-bold text-text-primary",
|
|
260
260
|
children: U.shiftsThisWeek
|
|
261
261
|
})]
|
|
262
262
|
}),
|
|
263
263
|
/* @__PURE__ */ w("div", {
|
|
264
|
-
className: "rounded-lg border border-border bg-
|
|
264
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
265
265
|
children: [/* @__PURE__ */ C("p", {
|
|
266
|
-
className: "text-xs text-
|
|
266
|
+
className: "text-xs text-text-secondary",
|
|
267
267
|
children: "Week Earnings"
|
|
268
268
|
}), /* @__PURE__ */ C("p", {
|
|
269
|
-
className: "text-2xl font-bold text-
|
|
269
|
+
className: "text-2xl font-bold text-text-primary",
|
|
270
270
|
children: i(U.earningsThisWeek, { minimumFractionDigits: 0 })
|
|
271
271
|
})]
|
|
272
272
|
}),
|
|
273
273
|
/* @__PURE__ */ w("div", {
|
|
274
|
-
className: "rounded-lg border border-border bg-
|
|
274
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface p-4 shadow-sm",
|
|
275
275
|
children: [/* @__PURE__ */ C("p", {
|
|
276
|
-
className: "text-xs text-
|
|
276
|
+
className: "text-xs text-text-secondary",
|
|
277
277
|
children: "Next Shift"
|
|
278
278
|
}), /* @__PURE__ */ C("p", {
|
|
279
|
-
className: "text-sm font-bold text-
|
|
279
|
+
className: "text-sm font-bold text-text-primary",
|
|
280
280
|
children: U.nextShift ? `${T(U.nextShift.date)} ${E(U.nextShift.startTime)}` : "None scheduled"
|
|
281
281
|
})]
|
|
282
282
|
})
|
|
283
283
|
]
|
|
284
284
|
}), /* @__PURE__ */ w("div", {
|
|
285
|
-
className: "rounded-lg border border-border bg-
|
|
285
|
+
className: "rounded-lg border border-border-subtle bg-bg-surface shadow-sm overflow-hidden",
|
|
286
286
|
children: [/* @__PURE__ */ w("div", {
|
|
287
|
-
className: "flex border-b border-border",
|
|
287
|
+
className: "flex border-b border-border-subtle",
|
|
288
288
|
children: [
|
|
289
289
|
/* @__PURE__ */ w("button", {
|
|
290
290
|
type: "button",
|
|
291
291
|
onClick: () => P("schedule"),
|
|
292
|
-
className: t("flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2", N === "schedule" ? "border-b-2 border-blue-500 text-blue-600 dark:text-blue-400 bg-blue-500/5" : "text-
|
|
292
|
+
className: t("flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2", N === "schedule" ? "border-b-2 border-blue-500 text-blue-600 dark:text-blue-400 bg-blue-500/5" : "text-text-secondary hover:text-text-primary"),
|
|
293
293
|
children: [/* @__PURE__ */ C(l, { className: "h-4 w-4" }), "My Schedule"]
|
|
294
294
|
}),
|
|
295
295
|
/* @__PURE__ */ w("button", {
|
|
296
296
|
type: "button",
|
|
297
297
|
onClick: () => P("requests"),
|
|
298
|
-
className: t("flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2", N === "requests" ? "border-b-2 border-blue-500 text-blue-600 dark:text-blue-400 bg-blue-500/5" : "text-
|
|
298
|
+
className: t("flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2", N === "requests" ? "border-b-2 border-blue-500 text-blue-600 dark:text-blue-400 bg-blue-500/5" : "text-text-secondary hover:text-text-primary"),
|
|
299
299
|
children: [
|
|
300
300
|
/* @__PURE__ */ C(y, { className: "h-4 w-4" }),
|
|
301
301
|
"Shift Requests",
|
|
@@ -308,7 +308,7 @@ var A = () => {
|
|
|
308
308
|
/* @__PURE__ */ w("button", {
|
|
309
309
|
type: "button",
|
|
310
310
|
onClick: () => P("availability"),
|
|
311
|
-
className: t("flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2", N === "availability" ? "border-b-2 border-blue-500 text-blue-600 dark:text-blue-400 bg-blue-500/5" : "text-
|
|
311
|
+
className: t("flex-1 py-3 px-4 text-sm font-medium transition-colors flex items-center justify-center gap-2", N === "availability" ? "border-b-2 border-blue-500 text-blue-600 dark:text-blue-400 bg-blue-500/5" : "text-text-secondary hover:text-text-primary"),
|
|
312
312
|
children: [/* @__PURE__ */ C(S, { className: "h-4 w-4" }), "Availability"]
|
|
313
313
|
})
|
|
314
314
|
]
|
|
@@ -321,11 +321,11 @@ var A = () => {
|
|
|
321
321
|
/* @__PURE__ */ w("button", {
|
|
322
322
|
type: "button",
|
|
323
323
|
onClick: () => I((e) => e - 1),
|
|
324
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-
|
|
324
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
325
325
|
children: [/* @__PURE__ */ C(d, { className: "h-3.5 w-3.5" }), "Previous Week"]
|
|
326
326
|
}),
|
|
327
327
|
/* @__PURE__ */ w("h3", {
|
|
328
|
-
className: "text-sm font-medium text-
|
|
328
|
+
className: "text-sm font-medium text-text-primary",
|
|
329
329
|
children: [
|
|
330
330
|
G.start,
|
|
331
331
|
" - ",
|
|
@@ -335,32 +335,33 @@ var A = () => {
|
|
|
335
335
|
/* @__PURE__ */ w("button", {
|
|
336
336
|
type: "button",
|
|
337
337
|
onClick: () => I((e) => e + 1),
|
|
338
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-
|
|
338
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
339
339
|
children: ["Next Week", /* @__PURE__ */ C(f, { className: "h-3.5 w-3.5" })]
|
|
340
340
|
})
|
|
341
341
|
]
|
|
342
342
|
}), L.length === 0 ? /* @__PURE__ */ C(r, {
|
|
343
|
+
illustration: "empty-data",
|
|
343
344
|
icon: /* @__PURE__ */ C(c, { className: "h-12 w-12" }),
|
|
344
345
|
title: "No shifts scheduled",
|
|
345
346
|
description: "No shifts scheduled for this week"
|
|
346
347
|
}) : /* @__PURE__ */ C("div", {
|
|
347
348
|
className: "space-y-3",
|
|
348
349
|
children: L.map((e) => /* @__PURE__ */ w("div", {
|
|
349
|
-
className: t("rounded-lg border p-4 transition-colors", e.status === "ongoing" ? "border-green-500/30 bg-green-500/5" : "border-border hover:bg-
|
|
350
|
+
className: t("rounded-lg border p-4 transition-colors", e.status === "ongoing" ? "border-green-500/30 bg-green-500/5" : "border-border-subtle hover:bg-bg-sunken/30"),
|
|
350
351
|
children: [
|
|
351
352
|
/* @__PURE__ */ w("div", {
|
|
352
353
|
className: "flex items-center justify-between mb-3",
|
|
353
354
|
children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("div", {
|
|
354
355
|
className: "flex items-center gap-2 flex-wrap",
|
|
355
356
|
children: [/* @__PURE__ */ C("h4", {
|
|
356
|
-
className: "text-sm font-semibold text-
|
|
357
|
+
className: "text-sm font-semibold text-text-primary",
|
|
357
358
|
children: T(e.date)
|
|
358
359
|
}), /* @__PURE__ */ C("span", {
|
|
359
360
|
className: t("inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium capitalize", O(e.status)),
|
|
360
361
|
children: e.status === "ongoing" ? "Ongoing" : e.status
|
|
361
362
|
})]
|
|
362
363
|
}), /* @__PURE__ */ w("p", {
|
|
363
|
-
className: "text-xs text-
|
|
364
|
+
className: "text-xs text-text-secondary mt-1",
|
|
364
365
|
children: [
|
|
365
366
|
E(e.startTime),
|
|
366
367
|
" - ",
|
|
@@ -369,10 +370,10 @@ var A = () => {
|
|
|
369
370
|
})] }), /* @__PURE__ */ w("div", {
|
|
370
371
|
className: "text-right",
|
|
371
372
|
children: [/* @__PURE__ */ C("p", {
|
|
372
|
-
className: "text-lg font-bold text-
|
|
373
|
+
className: "text-lg font-bold text-text-primary",
|
|
373
374
|
children: i(e.earnings, { minimumFractionDigits: 0 })
|
|
374
375
|
}), e.rating != null && /* @__PURE__ */ w("p", {
|
|
375
|
-
className: "text-xs text-
|
|
376
|
+
className: "text-xs text-text-secondary flex items-center gap-1 justify-end",
|
|
376
377
|
children: [/* @__PURE__ */ C(x, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }), e.rating]
|
|
377
378
|
})]
|
|
378
379
|
})]
|
|
@@ -381,30 +382,30 @@ var A = () => {
|
|
|
381
382
|
className: "grid grid-cols-1 md:grid-cols-3 gap-3 text-sm",
|
|
382
383
|
children: [
|
|
383
384
|
/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
|
|
384
|
-
className: "text-xs text-
|
|
385
|
+
className: "text-xs text-text-secondary",
|
|
385
386
|
children: "Cart"
|
|
386
387
|
}), /* @__PURE__ */ w("p", {
|
|
387
|
-
className: "text-xs font-medium text-
|
|
388
|
-
children: [/* @__PURE__ */ C(b, { className: "h-3 w-3 text-
|
|
388
|
+
className: "text-xs font-medium text-text-primary flex items-center gap-1",
|
|
389
|
+
children: [/* @__PURE__ */ C(b, { className: "h-3 w-3 text-text-secondary" }), e.cartName]
|
|
389
390
|
})] }),
|
|
390
391
|
/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
|
|
391
|
-
className: "text-xs text-
|
|
392
|
+
className: "text-xs text-text-secondary",
|
|
392
393
|
children: "Location"
|
|
393
394
|
}), /* @__PURE__ */ w("p", {
|
|
394
|
-
className: "text-xs font-medium text-
|
|
395
|
-
children: [/* @__PURE__ */ C(g, { className: "h-3 w-3 text-
|
|
395
|
+
className: "text-xs font-medium text-text-primary flex items-center gap-1",
|
|
396
|
+
children: [/* @__PURE__ */ C(g, { className: "h-3 w-3 text-text-secondary" }), e.location]
|
|
396
397
|
})] }),
|
|
397
398
|
e.tasksCompleted != null && /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
|
|
398
|
-
className: "text-xs text-
|
|
399
|
+
className: "text-xs text-text-secondary",
|
|
399
400
|
children: "Tasks Completed"
|
|
400
401
|
}), /* @__PURE__ */ w("p", {
|
|
401
|
-
className: "text-xs font-medium text-
|
|
402
|
-
children: [/* @__PURE__ */ C(u, { className: "h-3 w-3 text-
|
|
402
|
+
className: "text-xs font-medium text-text-primary flex items-center gap-1",
|
|
403
|
+
children: [/* @__PURE__ */ C(u, { className: "h-3 w-3 text-text-secondary" }), e.tasksCompleted]
|
|
403
404
|
})] })
|
|
404
405
|
]
|
|
405
406
|
}),
|
|
406
407
|
e.status === "scheduled" && /* @__PURE__ */ C("div", {
|
|
407
|
-
className: "mt-3 pt-3 border-t border-border",
|
|
408
|
+
className: "mt-3 pt-3 border-t border-border-subtle",
|
|
408
409
|
children: /* @__PURE__ */ w("button", {
|
|
409
410
|
type: "button",
|
|
410
411
|
onClick: () => K(e.id),
|
|
@@ -420,7 +421,7 @@ var A = () => {
|
|
|
420
421
|
}), /* @__PURE__ */ w("button", {
|
|
421
422
|
type: "button",
|
|
422
423
|
onClick: () => q(e.id),
|
|
423
|
-
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-
|
|
424
|
+
className: "inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent/80 transition-colors",
|
|
424
425
|
children: [/* @__PURE__ */ C(h, { className: "h-3.5 w-3.5" }), "Check Out"]
|
|
425
426
|
})]
|
|
426
427
|
})
|
|
@@ -428,21 +429,22 @@ var A = () => {
|
|
|
428
429
|
}, e.id))
|
|
429
430
|
})] }),
|
|
430
431
|
N === "requests" && /* @__PURE__ */ C("div", { children: z.length === 0 ? /* @__PURE__ */ C(r, {
|
|
432
|
+
illustration: "empty-notifications",
|
|
431
433
|
icon: /* @__PURE__ */ C(y, { className: "h-12 w-12" }),
|
|
432
434
|
title: "No shift requests",
|
|
433
435
|
description: "No shift requests available"
|
|
434
436
|
}) : /* @__PURE__ */ C("div", {
|
|
435
437
|
className: "space-y-3",
|
|
436
438
|
children: z.map((e) => /* @__PURE__ */ w("div", {
|
|
437
|
-
className: "rounded-lg border border-border p-4",
|
|
439
|
+
className: "rounded-lg border border-border-subtle p-4",
|
|
438
440
|
children: [
|
|
439
441
|
/* @__PURE__ */ w("div", {
|
|
440
442
|
className: "flex items-center justify-between mb-3",
|
|
441
443
|
children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("h4", {
|
|
442
|
-
className: "text-sm font-semibold text-
|
|
444
|
+
className: "text-sm font-semibold text-text-primary",
|
|
443
445
|
children: T(e.date)
|
|
444
446
|
}), /* @__PURE__ */ w("p", {
|
|
445
|
-
className: "text-xs text-
|
|
447
|
+
className: "text-xs text-text-secondary mt-0.5",
|
|
446
448
|
children: [
|
|
447
449
|
E(e.startTime),
|
|
448
450
|
" - ",
|
|
@@ -456,21 +458,21 @@ var A = () => {
|
|
|
456
458
|
/* @__PURE__ */ w("div", {
|
|
457
459
|
className: "grid grid-cols-1 md:grid-cols-2 gap-3 text-sm mb-3",
|
|
458
460
|
children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
|
|
459
|
-
className: "text-xs text-
|
|
461
|
+
className: "text-xs text-text-secondary",
|
|
460
462
|
children: "Cart"
|
|
461
463
|
}), /* @__PURE__ */ C("p", {
|
|
462
|
-
className: "text-xs font-medium text-
|
|
464
|
+
className: "text-xs font-medium text-text-primary",
|
|
463
465
|
children: e.cartName
|
|
464
466
|
})] }), /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("p", {
|
|
465
|
-
className: "text-xs text-
|
|
467
|
+
className: "text-xs text-text-secondary",
|
|
466
468
|
children: "Location"
|
|
467
469
|
}), /* @__PURE__ */ C("p", {
|
|
468
|
-
className: "text-xs font-medium text-
|
|
470
|
+
className: "text-xs font-medium text-text-primary",
|
|
469
471
|
children: e.location
|
|
470
472
|
})] })]
|
|
471
473
|
}),
|
|
472
474
|
/* @__PURE__ */ w("p", {
|
|
473
|
-
className: "text-[10px] text-
|
|
475
|
+
className: "text-[10px] text-text-secondary mb-3",
|
|
474
476
|
children: [
|
|
475
477
|
"Requested",
|
|
476
478
|
" ",
|
|
@@ -502,13 +504,13 @@ var A = () => {
|
|
|
502
504
|
}) }),
|
|
503
505
|
N === "availability" && /* @__PURE__ */ w("div", { children: [
|
|
504
506
|
/* @__PURE__ */ C("p", {
|
|
505
|
-
className: "text-xs text-
|
|
507
|
+
className: "text-xs text-text-secondary mb-5",
|
|
506
508
|
children: "Set your preferred working hours for each day of the week"
|
|
507
509
|
}),
|
|
508
510
|
/* @__PURE__ */ C("div", {
|
|
509
511
|
className: "space-y-3",
|
|
510
512
|
children: V.map((e) => /* @__PURE__ */ w("div", {
|
|
511
|
-
className: t("flex flex-col sm:flex-row sm:items-center gap-3 p-3 rounded-lg border", e.isAvailable ? "border-border bg-
|
|
513
|
+
className: t("flex flex-col sm:flex-row sm:items-center gap-3 p-3 rounded-lg border", e.isAvailable ? "border-border-subtle bg-bg-surface" : "border-border-subtle/50 bg-bg-sunken/30"),
|
|
512
514
|
children: [/* @__PURE__ */ C("div", {
|
|
513
515
|
className: "w-32 shrink-0",
|
|
514
516
|
children: /* @__PURE__ */ w("label", {
|
|
@@ -517,9 +519,9 @@ var A = () => {
|
|
|
517
519
|
type: "checkbox",
|
|
518
520
|
checked: e.isAvailable,
|
|
519
521
|
onChange: (t) => X(e.dayOfWeek, "isAvailable", t.target.checked),
|
|
520
|
-
className: "h-4 w-4 rounded border-border text-blue-600 focus:ring-blue-500/40"
|
|
522
|
+
className: "h-4 w-4 rounded border-border-subtle text-blue-600 focus:ring-blue-500/40"
|
|
521
523
|
}), /* @__PURE__ */ C("span", {
|
|
522
|
-
className: "text-sm font-medium text-
|
|
524
|
+
className: "text-sm font-medium text-text-primary",
|
|
523
525
|
children: e.dayOfWeek
|
|
524
526
|
})]
|
|
525
527
|
})
|
|
@@ -528,28 +530,28 @@ var A = () => {
|
|
|
528
530
|
children: [/* @__PURE__ */ w("div", {
|
|
529
531
|
className: "flex items-center gap-2",
|
|
530
532
|
children: [/* @__PURE__ */ C("span", {
|
|
531
|
-
className: "text-xs text-
|
|
533
|
+
className: "text-xs text-text-secondary w-10",
|
|
532
534
|
children: "From"
|
|
533
535
|
}), /* @__PURE__ */ C("input", {
|
|
534
536
|
type: "time",
|
|
535
537
|
value: e.preferredStartTime,
|
|
536
538
|
onChange: (t) => X(e.dayOfWeek, "preferredStartTime", t.target.value),
|
|
537
|
-
className: "rounded-md border border-border bg-
|
|
539
|
+
className: "rounded-md border border-border-subtle bg-bg-surface px-3 py-1.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-blue-500/40"
|
|
538
540
|
})]
|
|
539
541
|
}), /* @__PURE__ */ w("div", {
|
|
540
542
|
className: "flex items-center gap-2",
|
|
541
543
|
children: [/* @__PURE__ */ C("span", {
|
|
542
|
-
className: "text-xs text-
|
|
544
|
+
className: "text-xs text-text-secondary w-10",
|
|
543
545
|
children: "To"
|
|
544
546
|
}), /* @__PURE__ */ C("input", {
|
|
545
547
|
type: "time",
|
|
546
548
|
value: e.preferredEndTime,
|
|
547
549
|
onChange: (t) => X(e.dayOfWeek, "preferredEndTime", t.target.value),
|
|
548
|
-
className: "rounded-md border border-border bg-
|
|
550
|
+
className: "rounded-md border border-border-subtle bg-bg-surface px-3 py-1.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-blue-500/40"
|
|
549
551
|
})]
|
|
550
552
|
})]
|
|
551
553
|
}) : /* @__PURE__ */ C("span", {
|
|
552
|
-
className: "text-xs text-
|
|
554
|
+
className: "text-xs text-text-secondary",
|
|
553
555
|
children: "Not available"
|
|
554
556
|
})]
|
|
555
557
|
}, e.dayOfWeek))
|