@burdenoff/microfe-adaptercloud 2026.624.1 → 2026.625.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/adaptercloud/components/EmptyState.js +17 -21
  2. package/dist/adaptercloud/components/EmptyState.js.map +1 -1
  3. package/dist/adaptercloud/components/InvestmentCard.js +25 -23
  4. package/dist/adaptercloud/components/InvestmentCard.js.map +1 -1
  5. package/dist/adaptercloud/components/MetricsCard.js +18 -12
  6. package/dist/adaptercloud/components/MetricsCard.js.map +1 -1
  7. package/dist/adaptercloud/components/PageLayout.js +38 -19
  8. package/dist/adaptercloud/components/PageLayout.js.map +1 -1
  9. package/dist/adaptercloud/components/RatingDisplay.js +3 -3
  10. package/dist/adaptercloud/components/RatingDisplay.js.map +1 -1
  11. package/dist/adaptercloud/components/StatusBadge.js +36 -16
  12. package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
  13. package/dist/adaptercloud/pages/HomePage.js +242 -231
  14. package/dist/adaptercloud/pages/HomePage.js.map +1 -1
  15. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +33 -33
  16. package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -1
  17. package/dist/adaptercloud/pages/admin/AdminDashboard.js +32 -32
  18. package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -1
  19. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +11 -11
  20. package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -1
  21. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +11 -11
  22. package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -1
  23. package/dist/adaptercloud/pages/admin/AdminProfilePage.js +3 -3
  24. package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -1
  25. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +1 -1
  26. package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -1
  27. package/dist/adaptercloud/pages/admin/CartManagementPage.js +28 -28
  28. package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -1
  29. package/dist/adaptercloud/pages/admin/UserManagementPage.js +25 -25
  30. package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -1
  31. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +19 -19
  32. package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
  33. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +7 -7
  34. package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
  35. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +40 -37
  36. package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
  37. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +21 -21
  38. package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
  39. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +24 -24
  40. package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
  41. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +20 -20
  42. package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -1
  43. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +36 -36
  44. package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -1
  45. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +25 -25
  46. package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -1
  47. package/dist/adaptercloud/pages/common/HelpSupportPage.js +43 -43
  48. package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -1
  49. package/dist/adaptercloud/pages/common/NotificationCenterPage.js +32 -31
  50. package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -1
  51. package/dist/adaptercloud/pages/common/SettingsPage.js +8 -8
  52. package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -1
  53. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +22 -21
  54. package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -1
  55. package/dist/adaptercloud/pages/customer/CartDetailPage.js +18 -17
  56. package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -1
  57. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +12 -11
  58. package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -1
  59. package/dist/adaptercloud/pages/customer/CheckoutPage.js +9 -9
  60. package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -1
  61. package/dist/adaptercloud/pages/customer/CustomerDashboard.js +30 -30
  62. package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -1
  63. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +19 -19
  64. package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -1
  65. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +24 -23
  66. package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -1
  67. package/dist/adaptercloud/pages/customer/FavoritesPage.js +9 -8
  68. package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -1
  69. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +4 -3
  70. package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -1
  71. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +15 -14
  72. package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -1
  73. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +10 -9
  74. package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -1
  75. package/dist/adaptercloud/pages/customer/ReviewsPage.js +18 -17
  76. package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -1
  77. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +14 -13
  78. package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -1
  79. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +32 -32
  80. package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -1
  81. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +14 -13
  82. package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
  83. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +27 -27
  84. package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -1
  85. package/dist/adaptercloud/pages/investor/InvestorDashboard.js +16 -16
  86. package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -1
  87. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +9 -8
  88. package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -1
  89. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +12 -12
  90. package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -1
  91. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +19 -19
  92. package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -1
  93. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +26 -25
  94. package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -1
  95. package/dist/adaptercloud/pages/worker/WorkerDashboard.js +43 -43
  96. package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -1
  97. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +37 -36
  98. package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -1
  99. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +34 -34
  100. package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -1
  101. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +27 -25
  102. package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -1
  103. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"CustomerProfilePage.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/CustomerProfilePage.tsx"],"sourcesContent":["/**\n * Customer Profile Page\n * @module adaptercloud/pages/customer\n *\n * Full profile management with 3-tab interface (Profile Info, Preferences, My Stats),\n * edit mode toggle, inline editable fields, emergency contact, dietary preferences,\n * food allergies, and stats/loyalty display.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n User,\n Mail,\n Phone,\n Shield,\n MapPin,\n Bell,\n Globe,\n CheckCircle2,\n Camera,\n ChevronRight,\n Edit3,\n Save,\n X,\n Heart,\n AlertTriangle,\n Award,\n ShoppingBag,\n IndianRupee,\n Star,\n BarChart3,\n Settings,\n UserCircle,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { useOrders } from '../../hooks/useAdapterCloudApi';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency, formatDate } from '../../utils/formatters';\n\ntype ProfileTab = 'profile' | 'preferences' | 'stats';\n\ninterface EmergencyContact {\n name: string;\n phone: string;\n relationship: string;\n}\n\ninterface ProfileData {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n emergencyContact: EmergencyContact;\n dietary: string[];\n allergies: string[];\n notifications: {\n orderUpdates: boolean;\n promotions: boolean;\n newsletter: boolean;\n sms: boolean;\n };\n}\n\nconst dietaryOptions = ['vegetarian', 'vegan', 'jain', 'keto', 'gluten-free', 'low-carb'];\nconst allergyOptions = ['nuts', 'dairy', 'eggs', 'soy', 'shellfish', 'gluten'];\n\nconst mockAddresses = [\n {\n id: 'addr-1',\n label: 'Home',\n street: '123, MG Road',\n area: 'Near Central Mall',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560001',\n isDefault: true,\n },\n {\n id: 'addr-2',\n label: 'Office',\n street: '456 Tech Park Road',\n area: 'Whitefield',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560066',\n isDefault: false,\n },\n];\n\nexport function CustomerProfilePage() {\n const { navigateTo, currentUser } = useAdapterCloud();\n const { data: orders = [], isLoading: isLoadingOrders } = useOrders({\n customerId: currentUser?.id,\n });\n const [activeTab, setActiveTab] = useState<ProfileTab>('profile');\n const [isEditing, setIsEditing] = useState(false);\n\n // Use currentUser from context, fallback to defaults\n const profile = {\n firstName: currentUser?.firstName || currentUser?.name?.split(' ')[0] || 'Customer',\n lastName: currentUser?.lastName || currentUser?.name?.split(' ').slice(1).join(' ') || '',\n email: currentUser?.email || '',\n phone: '+91 98765 43210',\n profilePicture: currentUser?.avatar,\n isEmailVerified: true,\n isPhoneVerified: true,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n\n // Editable profile data\n const [profileData, setProfileData] = useState<ProfileData>({\n firstName: profile.firstName,\n lastName: profile.lastName,\n email: profile.email,\n phone: profile.phone,\n emergencyContact: {\n name: 'Priya Sharma',\n phone: '+91 98765 43211',\n relationship: 'Spouse',\n },\n dietary: ['vegetarian'],\n allergies: ['nuts', 'dairy'],\n notifications: {\n orderUpdates: true,\n promotions: true,\n newsletter: false,\n sms: true,\n },\n });\n\n const [editedData, setEditedData] = useState<ProfileData>({ ...profileData });\n\n // Calculate stats from real orders\n const stats = {\n totalOrders: orders.length,\n totalSpent: orders.reduce((acc, o) => acc + o.total, 0),\n loyaltyPoints: Math.floor(orders.reduce((acc, o) => acc + o.total, 0) / 10),\n avgOrderValue:\n orders.length > 0\n ? Math.floor(orders.reduce((acc, o) => acc + o.total, 0) / orders.length)\n : 0,\n favoriteCategory: 'South Indian',\n memberSince: profile.createdAt,\n };\n\n const isLoading = isLoadingOrders;\n\n const handleStartEdit = () => {\n setEditedData({ ...profileData });\n setIsEditing(true);\n };\n\n const handleCancelEdit = () => {\n setEditedData({ ...profileData });\n setIsEditing(false);\n };\n\n const handleSaveProfile = () => {\n setProfileData({ ...editedData });\n setIsEditing(false);\n alert('Profile updated successfully');\n };\n\n const handleSavePreferences = () => {\n setProfileData({ ...editedData });\n alert('Preferences saved successfully');\n };\n\n const handleFieldChange = (field: keyof ProfileData, value: string) => {\n setEditedData((prev) => ({ ...prev, [field]: value }));\n };\n\n const handleEmergencyContactChange = (field: keyof EmergencyContact, value: string) => {\n setEditedData((prev) => ({\n ...prev,\n emergencyContact: { ...prev.emergencyContact, [field]: value },\n }));\n };\n\n const handleNotificationChange = (field: string, value: boolean) => {\n setEditedData((prev) => ({\n ...prev,\n notifications: { ...prev.notifications, [field]: value },\n }));\n };\n\n const handleArrayToggle = (field: 'dietary' | 'allergies', value: string, checked: boolean) => {\n setEditedData((prev) => {\n const currentArray = prev[field];\n const newArray = checked\n ? [...currentArray, value]\n : currentArray.filter((item) => item !== value);\n return { ...prev, [field]: newArray };\n });\n };\n\n const tabs: Array<{ key: ProfileTab; label: string; icon: typeof UserCircle }> = [\n { key: 'profile', label: 'Profile Info', icon: UserCircle },\n { key: 'preferences', label: 'Preferences', icon: Settings },\n { key: 'stats', label: 'My Stats', icon: BarChart3 },\n ];\n\n if (isLoading) {\n return (\n <PageLayout title=\"My Profile\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-foreground mx-auto mb-4\" />\n <p className=\"text-sm text-text-secondary\">Loading profile...</p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout title=\"My Profile\" description=\"Manage your personal information and preferences\">\n {/* Profile Header */}\n <div className=\"flex flex-col items-center sm:flex-row sm:items-start gap-6 rounded-lg border border-border-subtle bg-bg-surface p-6\">\n <div className=\"relative\">\n <div className=\"h-24 w-24 rounded-full bg-bg-sunken overflow-hidden\">\n {profile.profilePicture ? (\n <img\n src={profile.profilePicture}\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 <button\n type=\"button\"\n className=\"absolute bottom-0 right-0 flex h-8 w-8 items-center justify-center rounded-full bg-foreground text-background shadow-sm hover:opacity-90 transition-opacity\"\n >\n <Camera className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"flex-1 text-center sm:text-left\">\n <h2 className=\"text-xl font-semibold text-text-primary\">\n {profileData.firstName} {profileData.lastName}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">{profileData.email}</p>\n <p className=\"mt-0.5 text-sm text-text-secondary\">{profileData.phone}</p>\n <div className=\"flex flex-wrap items-center justify-center sm:justify-start gap-2 mt-2\">\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium',\n profile.isEmailVerified\n ? 'bg-green-500/20 text-green-600 dark:text-green-400'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n <CheckCircle2 className=\"h-3 w-3\" />\n {profile.isEmailVerified ? 'Email Verified' : 'Email Not Verified'}\n </span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium',\n profile.isPhoneVerified\n ? 'bg-green-500/20 text-green-600 dark:text-green-400'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n <CheckCircle2 className=\"h-3 w-3\" />\n {profile.isPhoneVerified ? 'Phone Verified' : 'Phone Not Verified'}\n </span>\n </div>\n </div>\n\n <div className=\"text-center sm:text-right\">\n <p className=\"text-2xl font-bold text-text-primary\">{stats.loyaltyPoints}</p>\n <p className=\"text-xs text-text-secondary\">Loyalty Points</p>\n </div>\n </div>\n\n {/* Tabs */}\n <div className=\"mt-6 rounded-lg border border-border-subtle bg-bg-surface\">\n <div className=\"border-b border-border-subtle\">\n <nav className=\"flex -mb-px overflow-x-auto\">\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <button\n key={tab.key}\n type=\"button\"\n className={cn(\n 'flex items-center gap-2 py-3.5 px-5 text-sm font-medium whitespace-nowrap transition-colors',\n activeTab === tab.key\n ? 'border-b-2 border-foreground text-text-primary'\n : 'text-text-secondary hover:text-text-primary'\n )}\n onClick={() => setActiveTab(tab.key)}\n >\n <Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n );\n })}\n </nav>\n </div>\n\n <div className=\"p-5 md:p-6\">\n {/* Profile Tab */}\n {activeTab === 'profile' && (\n <div className=\"space-y-6\">\n {/* Header with Edit/Save/Cancel */}\n <div className=\"flex justify-between items-center\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Personal Information</h3>\n {isEditing ? (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={handleSaveProfile}\n className=\"flex items-center gap-1.5 rounded-lg bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Save className=\"h-3 w-3\" />\n Save\n </button>\n <button\n type=\"button\"\n onClick={handleCancelEdit}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <X className=\"h-3 w-3\" />\n Cancel\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={handleStartEdit}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Edit3 className=\"h-3 w-3\" />\n Edit Profile\n </button>\n )}\n </div>\n\n {/* Editable Fields */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n First Name\n </label>\n <input\n type=\"text\"\n value={isEditing ? editedData.firstName : profileData.firstName}\n onChange={(e) => handleFieldChange('firstName', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={isEditing ? editedData.lastName : profileData.lastName}\n onChange={(e) => handleFieldChange('lastName', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Email</label>\n <input\n type=\"email\"\n value={isEditing ? editedData.email : profileData.email}\n onChange={(e) => handleFieldChange('email', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Phone</label>\n <input\n type=\"tel\"\n value={isEditing ? editedData.phone : profileData.phone}\n onChange={(e) => handleFieldChange('phone', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n </div>\n\n {/* Primary Address */}\n <div>\n <h4 className=\"text-base font-semibold text-text-primary mb-3\">Primary Address</h4>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <p className=\"text-sm font-medium text-text-primary\">{mockAddresses[0].street}</p>\n <p className=\"text-sm text-text-secondary\">{mockAddresses[0].area}</p>\n <p className=\"text-sm text-text-secondary\">\n {mockAddresses[0].city}, {mockAddresses[0].state} - {mockAddresses[0].pincode}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/addresses')}\n className=\"mt-2 flex items-center gap-1 text-xs font-medium text-text-secondary hover:text-text-primary transition-colors\"\n >\n <MapPin className=\"h-3 w-3\" />\n Manage Addresses\n <ChevronRight className=\"h-3 w-3\" />\n </button>\n </div>\n </div>\n\n {/* Emergency Contact */}\n <div>\n <h4 className=\"text-base font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <AlertTriangle className=\"h-4 w-4 text-text-secondary\" />\n Emergency Contact\n </h4>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Name</label>\n <input\n type=\"text\"\n value={\n isEditing\n ? editedData.emergencyContact.name\n : profileData.emergencyContact.name\n }\n onChange={(e) => handleEmergencyContactChange('name', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Phone\n </label>\n <input\n type=\"tel\"\n value={\n isEditing\n ? editedData.emergencyContact.phone\n : profileData.emergencyContact.phone\n }\n onChange={(e) => handleEmergencyContactChange('phone', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Relationship\n </label>\n <input\n type=\"text\"\n value={\n isEditing\n ? editedData.emergencyContact.relationship\n : profileData.emergencyContact.relationship\n }\n onChange={(e) => handleEmergencyContactChange('relationship', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n </div>\n </div>\n\n {/* Save/Cancel at bottom when editing */}\n {isEditing && (\n <div className=\"flex gap-3 pt-4 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleSaveProfile}\n className=\"flex items-center gap-2 rounded-lg bg-foreground px-4 py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Save className=\"h-4 w-4\" />\n Save Changes\n </button>\n <button\n type=\"button\"\n onClick={handleCancelEdit}\n className=\"flex items-center gap-2 rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Preferences Tab */}\n {activeTab === 'preferences' && (\n <div className=\"space-y-8\">\n {/* Notification Preferences */}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <Bell className=\"h-4 w-4 text-text-secondary\" />\n Notification Preferences\n </h3>\n <div className=\"space-y-3\">\n {[\n { key: 'orderUpdates', label: 'Order status updates' },\n { key: 'promotions', label: 'Promotional offers and discounts' },\n { key: 'newsletter', label: 'Newsletter and food recommendations' },\n { key: 'sms', label: 'SMS notifications' },\n ].map((item) => (\n <label key={item.key} className=\"flex items-center gap-3 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={\n editedData.notifications[\n item.key as keyof typeof editedData.notifications\n ]\n }\n onChange={(e) => handleNotificationChange(item.key, e.target.checked)}\n className=\"h-4 w-4 rounded border-border-subtle text-text-primary focus:ring-[var(--color-focus-ring)]\"\n />\n <span className=\"text-sm text-text-primary\">{item.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Dietary Preferences */}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <Heart className=\"h-4 w-4 text-text-secondary\" />\n Dietary Preferences\n </h3>\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3\">\n {dietaryOptions.map((diet) => (\n <label key={diet} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={editedData.dietary.includes(diet)}\n onChange={(e) => handleArrayToggle('dietary', diet, e.target.checked)}\n className=\"h-4 w-4 rounded border-border-subtle text-text-primary focus:ring-[var(--color-focus-ring)]\"\n />\n <span className=\"text-sm text-text-primary capitalize\">{diet}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Food Allergies */}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <AlertTriangle className=\"h-4 w-4 text-status-error-text\" />\n Food Allergies\n </h3>\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3\">\n {allergyOptions.map((allergy) => (\n <label key={allergy} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={editedData.allergies.includes(allergy)}\n onChange={(e) => handleArrayToggle('allergies', allergy, e.target.checked)}\n className=\"h-4 w-4 rounded border-border-subtle text-status-error-text focus:ring-destructive\"\n />\n <span className=\"text-sm text-text-primary capitalize\">{allergy}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Save Preferences */}\n <div className=\"pt-4 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleSavePreferences}\n className=\"flex items-center gap-2 rounded-lg bg-foreground px-4 py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Save className=\"h-4 w-4\" />\n Save Preferences\n </button>\n </div>\n </div>\n )}\n\n {/* Stats Tab */}\n {activeTab === 'stats' && (\n <div className=\"space-y-8\">\n {/* Top Stats Cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div className=\"rounded-lg bg-blue-500/10 p-5 border border-blue-500/20\">\n <div className=\"flex items-center gap-2 mb-2\">\n <ShoppingBag className=\"h-4 w-4 text-blue-600 dark:text-blue-400\" />\n <h4 className=\"text-sm font-medium text-blue-600 dark:text-blue-400\">\n Total Orders\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-blue-600 dark:text-blue-400\">\n {stats.totalOrders}\n </p>\n </div>\n <div className=\"rounded-lg bg-green-500/10 p-5 border border-green-500/20\">\n <div className=\"flex items-center gap-2 mb-2\">\n <IndianRupee className=\"h-4 w-4 text-green-600 dark:text-green-400\" />\n <h4 className=\"text-sm font-medium text-green-600 dark:text-green-400\">\n Total Spent\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-green-600 dark:text-green-400\">\n {formatCurrency(stats.totalSpent, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg bg-purple-500/10 p-5 border border-purple-500/20\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Award className=\"h-4 w-4 text-purple-600 dark:text-purple-400\" />\n <h4 className=\"text-sm font-medium text-purple-600 dark:text-purple-400\">\n Loyalty Points\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-purple-600 dark:text-purple-400\">\n {stats.loyaltyPoints}\n </p>\n </div>\n </div>\n\n {/* Details Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Order Statistics */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h4 className=\"text-base font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4 text-text-secondary\" />\n Order Statistics\n </h4>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Average Order Value</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatCurrency(stats.avgOrderValue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Favorite Category</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {stats.favoriteCategory}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Member Since</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatDate(stats.memberSince, {\n hour: undefined,\n minute: undefined,\n hour12: undefined,\n })}\n </span>\n </div>\n </div>\n </div>\n\n {/* Account Status */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <h4 className=\"text-base font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <Shield className=\"h-4 w-4 text-text-secondary\" />\n Account Status\n </h4>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-text-secondary\">Email Verification</span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n profile.isEmailVerified\n ? 'bg-green-500/20 text-green-600 dark:text-green-400'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n {profile.isEmailVerified ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-text-secondary\">Phone Verification</span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n profile.isPhoneVerified\n ? 'bg-green-500/20 text-green-600 dark:text-green-400'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n {profile.isPhoneVerified ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Last Updated</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatDate(profile.updatedAt, {\n hour: undefined,\n minute: undefined,\n hour12: undefined,\n })}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomerProfilePage.js","names":[],"sources":["../../../../src/adaptercloud/pages/customer/CustomerProfilePage.tsx"],"sourcesContent":["/**\n * Customer Profile Page\n * @module adaptercloud/pages/customer\n *\n * Full profile management with 3-tab interface (Profile Info, Preferences, My Stats),\n * edit mode toggle, inline editable fields, emergency contact, dietary preferences,\n * food allergies, and stats/loyalty display.\n */\n\nimport { useState, useEffect, useCallback } from'react';\nimport {\n User,\n Mail,\n Phone,\n Shield,\n MapPin,\n Bell,\n Globe,\n CheckCircle2,\n Camera,\n ChevronRight,\n Edit3,\n Save,\n X,\n Heart,\n AlertTriangle,\n Award,\n ShoppingBag,\n IndianRupee,\n Star,\n BarChart3,\n Settings,\n UserCircle,\n} from'lucide-react';\nimport { PageLayout } from'../../components/PageLayout';\nimport { useAdapterCloud } from'../../context/AdapterCloudContext';\nimport { useOrders } from'../../hooks/useAdapterCloudApi';\nimport { cn } from'../../utils/cn';\nimport { formatCurrency, formatDate } from'../../utils/formatters';\n\ntype ProfileTab = 'profile' | 'preferences' | 'stats';\n\ninterface EmergencyContact {\n name: string;\n phone: string;\n relationship: string;\n}\n\ninterface ProfileData {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n emergencyContact: EmergencyContact;\n dietary: string[];\n allergies: string[];\n notifications: {\n orderUpdates: boolean;\n promotions: boolean;\n newsletter: boolean;\n sms: boolean;\n };\n}\n\nconst dietaryOptions = ['vegetarian', 'vegan', 'jain', 'keto', 'gluten-free', 'low-carb'];\nconst allergyOptions = ['nuts', 'dairy', 'eggs', 'soy', 'shellfish', 'gluten'];\n\nconst mockAddresses = [\n {\n id: 'addr-1',\n label: 'Home',\n street: '123, MG Road',\n area: 'Near Central Mall',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560001',\n isDefault: true,\n },\n {\n id: 'addr-2',\n label: 'Office',\n street: '456 Tech Park Road',\n area: 'Whitefield',\n city: 'Bangalore',\n state: 'Karnataka',\n pincode: '560066',\n isDefault: false,\n },\n];\n\nexport function CustomerProfilePage() {\n const { navigateTo, currentUser } = useAdapterCloud();\n const { data: orders = [], isLoading: isLoadingOrders } = useOrders({\n customerId: currentUser?.id,\n });\n const [activeTab, setActiveTab] = useState<ProfileTab>('profile');\n const [isEditing, setIsEditing] = useState(false);\n\n // Use currentUser from context, fallback to defaults\n const profile = {\n firstName: currentUser?.firstName || currentUser?.name?.split(' ')[0] || 'Customer',\n lastName: currentUser?.lastName || currentUser?.name?.split(' ').slice(1).join(' ') || '',\n email: currentUser?.email || '',\n phone: '+91 98765 43210',\n profilePicture: currentUser?.avatar,\n isEmailVerified: true,\n isPhoneVerified: true,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n\n // Editable profile data\n const [profileData, setProfileData] = useState<ProfileData>({\n firstName: profile.firstName,\n lastName: profile.lastName,\n email: profile.email,\n phone: profile.phone,\n emergencyContact: {\n name: 'Priya Sharma',\n phone: '+91 98765 43211',\n relationship: 'Spouse',\n },\n dietary: ['vegetarian'],\n allergies: ['nuts', 'dairy'],\n notifications: {\n orderUpdates: true,\n promotions: true,\n newsletter: false,\n sms: true,\n },\n });\n\n const [editedData, setEditedData] = useState<ProfileData>({ ...profileData });\n\n // Calculate stats from real orders\n const stats = {\n totalOrders: orders.length,\n totalSpent: orders.reduce((acc, o) => acc + o.total, 0),\n loyaltyPoints: Math.floor(orders.reduce((acc, o) => acc + o.total, 0) / 10),\n avgOrderValue:\n orders.length > 0\n ? Math.floor(orders.reduce((acc, o) => acc + o.total, 0) / orders.length)\n : 0,\n favoriteCategory: 'South Indian',\n memberSince: profile.createdAt,\n };\n\n const isLoading = isLoadingOrders;\n\n const handleStartEdit = () => {\n setEditedData({ ...profileData });\n setIsEditing(true);\n };\n\n const handleCancelEdit = () => {\n setEditedData({ ...profileData });\n setIsEditing(false);\n };\n\n const handleSaveProfile = () => {\n setProfileData({ ...editedData });\n setIsEditing(false);\n alert('Profile updated successfully');\n };\n\n const handleSavePreferences = () => {\n setProfileData({ ...editedData });\n alert('Preferences saved successfully');\n };\n\n const handleFieldChange = (field: keyof ProfileData, value: string) => {\n setEditedData((prev) => ({ ...prev, [field]: value }));\n };\n\n const handleEmergencyContactChange = (field: keyof EmergencyContact, value: string) => {\n setEditedData((prev) => ({\n ...prev,\n emergencyContact: { ...prev.emergencyContact, [field]: value },\n }));\n };\n\n const handleNotificationChange = (field: string, value: boolean) => {\n setEditedData((prev) => ({\n ...prev,\n notifications: { ...prev.notifications, [field]: value },\n }));\n };\n\n const handleArrayToggle = (field: 'dietary' | 'allergies', value: string, checked: boolean) => {\n setEditedData((prev) => {\n const currentArray = prev[field];\n const newArray = checked\n ? [...currentArray, value]\n : currentArray.filter((item) => item !== value);\n return { ...prev, [field]: newArray };\n });\n };\n\n const tabs: Array<{ key: ProfileTab; label: string; icon: typeof UserCircle }> = [\n { key: 'profile', label: 'Profile Info', icon: UserCircle },\n { key: 'preferences', label: 'Preferences', icon: Settings },\n { key: 'stats', label: 'My Stats', icon: BarChart3 },\n ];\n\n if (isLoading) {\n return (\n <PageLayout title=\"My Profile\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-b-2 border-foreground mx-auto mb-4\" />\n <p className=\"text-sm text-text-secondary\">Loading profile...</p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout title=\"My Profile\" description=\"Manage your personal information and preferences\">\n {/* Profile Header */}\n <div className=\"flex flex-col items-center sm:flex-row sm:items-start gap-6 rounded-lg border border-border-seam bg-bg-surface p-6 bg-gloss-card shadow-pop\">\n <div className=\"relative\">\n <div className=\"h-24 w-24 rounded-full bg-bg-sunken overflow-hidden\">\n {profile.profilePicture ? (\n <img\n src={profile.profilePicture}\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 <button\n type=\"button\"\n className=\"absolute bottom-0 right-0 flex h-8 w-8 items-center justify-center rounded-full bg-foreground text-background shadow-sm hover:opacity-90 transition-opacity\"\n >\n <Camera className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"flex-1 text-center sm:text-left\">\n <h2 className=\"text-xl font-semibold text-text-primary\">\n {profileData.firstName} {profileData.lastName}\n </h2>\n <p className=\"mt-1 text-sm text-text-secondary\">{profileData.email}</p>\n <p className=\"mt-0.5 text-sm text-text-secondary\">{profileData.phone}</p>\n <div className=\"flex flex-wrap items-center justify-center sm:justify-start gap-2 mt-2\">\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium',\n profile.isEmailVerified\n ? 'bg-status-success-bg-subtle/20 text-status-success-text'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n <CheckCircle2 className=\"h-3 w-3\" />\n {profile.isEmailVerified ? 'Email Verified' : 'Email Not Verified'}\n </span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium',\n profile.isPhoneVerified\n ? 'bg-status-success-bg-subtle/20 text-status-success-text'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n <CheckCircle2 className=\"h-3 w-3\" />\n {profile.isPhoneVerified ? 'Phone Verified' : 'Phone Not Verified'}\n </span>\n </div>\n </div>\n\n <div className=\"text-center sm:text-right\">\n <p className=\"text-2xl font-bold text-text-primary\">{stats.loyaltyPoints}</p>\n <p className=\"text-xs text-text-secondary\">Loyalty Points</p>\n </div>\n </div>\n\n {/* Tabs */}\n <div className=\"mt-6 rounded-lg border border-border-subtle bg-bg-surface\">\n <div className=\"border-b border-border-subtle\">\n <nav className=\"flex -mb-px overflow-x-auto\">\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n <button\n key={tab.key}\n type=\"button\"\n className={cn(\n 'flex items-center gap-2 py-3.5 px-5 text-sm font-medium whitespace-nowrap transition-colors',\n activeTab === tab.key\n ? 'border-b-2 border-foreground text-text-primary'\n : 'text-text-secondary hover:text-text-primary'\n )}\n onClick={() => setActiveTab(tab.key)}\n >\n <Icon className=\"h-4 w-4\" />\n {tab.label}\n </button>\n );\n })}\n </nav>\n </div>\n\n <div className=\"p-5 md:p-6\">\n {/* Profile Tab */}\n {activeTab === 'profile' && (\n <div className=\"space-y-6\">\n {/* Header with Edit/Save/Cancel */}\n <div className=\"flex justify-between items-center\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Personal Information</h3>\n {isEditing ? (\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={handleSaveProfile}\n className=\"flex items-center gap-1.5 rounded-lg bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Save className=\"h-3 w-3\" />\n Save\n </button>\n <button\n type=\"button\"\n onClick={handleCancelEdit}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <X className=\"h-3 w-3\" />\n Cancel\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={handleStartEdit}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Edit3 className=\"h-3 w-3\" />\n Edit Profile\n </button>\n )}\n </div>\n\n {/* Editable Fields */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-5\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n First Name\n </label>\n <input\n type=\"text\"\n value={isEditing ? editedData.firstName : profileData.firstName}\n onChange={(e) => handleFieldChange('firstName', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={isEditing ? editedData.lastName : profileData.lastName}\n onChange={(e) => handleFieldChange('lastName', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Email</label>\n <input\n type=\"email\"\n value={isEditing ? editedData.email : profileData.email}\n onChange={(e) => handleFieldChange('email', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Phone</label>\n <input\n type=\"tel\"\n value={isEditing ? editedData.phone : profileData.phone}\n onChange={(e) => handleFieldChange('phone', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n </div>\n\n {/* Primary Address */}\n <div>\n <h4 className=\"text-base font-semibold text-text-primary mb-3\">Primary Address</h4>\n <div className=\"rounded-lg bg-bg-sunken/50 p-4\">\n <p className=\"text-sm font-medium text-text-primary\">{mockAddresses[0].street}</p>\n <p className=\"text-sm text-text-secondary\">{mockAddresses[0].area}</p>\n <p className=\"text-sm text-text-secondary\">\n {mockAddresses[0].city}, {mockAddresses[0].state} - {mockAddresses[0].pincode}\n </p>\n <button\n type=\"button\"\n onClick={() => navigateTo('/customer/addresses')}\n className=\"mt-2 flex items-center gap-1 text-xs font-medium text-text-secondary hover:text-text-primary transition-colors\"\n >\n <MapPin className=\"h-3 w-3\" />\n Manage Addresses\n <ChevronRight className=\"h-3 w-3\" />\n </button>\n </div>\n </div>\n\n {/* Emergency Contact */}\n <div>\n <h4 className=\"text-base font-semibold text-text-primary mb-3 flex items-center gap-2\">\n <AlertTriangle className=\"h-4 w-4 text-text-secondary\" />\n Emergency Contact\n </h4>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">Name</label>\n <input\n type=\"text\"\n value={\n isEditing\n ? editedData.emergencyContact.name\n : profileData.emergencyContact.name\n }\n onChange={(e) => handleEmergencyContactChange('name', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Phone\n </label>\n <input\n type=\"tel\"\n value={\n isEditing\n ? editedData.emergencyContact.phone\n : profileData.emergencyContact.phone\n }\n onChange={(e) => handleEmergencyContactChange('phone', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Relationship\n </label>\n <input\n type=\"text\"\n value={\n isEditing\n ? editedData.emergencyContact.relationship\n : profileData.emergencyContact.relationship\n }\n onChange={(e) => handleEmergencyContactChange('relationship', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border-subtle px-3 py-2.5 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]',\n !isEditing && 'bg-bg-sunken cursor-not-allowed',\n isEditing && 'bg-bg-surface'\n )}\n />\n </div>\n </div>\n </div>\n\n {/* Save/Cancel at bottom when editing */}\n {isEditing && (\n <div className=\"flex gap-3 pt-4 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleSaveProfile}\n className=\"flex items-center gap-2 rounded-lg bg-foreground px-4 py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Save className=\"h-4 w-4\" />\n Save Changes\n </button>\n <button\n type=\"button\"\n onClick={handleCancelEdit}\n className=\"flex items-center gap-2 rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Preferences Tab */}\n {activeTab === 'preferences' && (\n <div className=\"space-y-8\">\n {/* Notification Preferences */}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <Bell className=\"h-4 w-4 text-text-secondary\" />\n Notification Preferences\n </h3>\n <div className=\"space-y-3\">\n {[\n { key: 'orderUpdates', label: 'Order status updates' },\n { key: 'promotions', label: 'Promotional offers and discounts' },\n { key: 'newsletter', label: 'Newsletter and food recommendations' },\n { key: 'sms', label: 'SMS notifications' },\n ].map((item) => (\n <label key={item.key} className=\"flex items-center gap-3 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={\n editedData.notifications[\n item.key as keyof typeof editedData.notifications\n ]\n }\n onChange={(e) => handleNotificationChange(item.key, e.target.checked)}\n className=\"h-4 w-4 rounded border-border-subtle text-text-primary focus:ring-[var(--color-focus-ring)]\"\n />\n <span className=\"text-sm text-text-primary\">{item.label}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Dietary Preferences */}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <Heart className=\"h-4 w-4 text-text-secondary\" />\n Dietary Preferences\n </h3>\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3\">\n {dietaryOptions.map((diet) => (\n <label key={diet} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={editedData.dietary.includes(diet)}\n onChange={(e) => handleArrayToggle('dietary', diet, e.target.checked)}\n className=\"h-4 w-4 rounded border-border-subtle text-text-primary focus:ring-[var(--color-focus-ring)]\"\n />\n <span className=\"text-sm text-text-primary capitalize\">{diet}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Food Allergies */}\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <AlertTriangle className=\"h-4 w-4 text-status-error-text\" />\n Food Allergies\n </h3>\n <div className=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3\">\n {allergyOptions.map((allergy) => (\n <label key={allergy} className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={editedData.allergies.includes(allergy)}\n onChange={(e) => handleArrayToggle('allergies', allergy, e.target.checked)}\n className=\"h-4 w-4 rounded border-border-subtle text-status-error-text focus:ring-destructive\"\n />\n <span className=\"text-sm text-text-primary capitalize\">{allergy}</span>\n </label>\n ))}\n </div>\n </div>\n\n {/* Save Preferences */}\n <div className=\"pt-4 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleSavePreferences}\n className=\"flex items-center gap-2 rounded-lg bg-foreground px-4 py-2.5 text-sm font-medium text-background hover:opacity-90 transition-opacity\"\n >\n <Save className=\"h-4 w-4\" />\n Save Preferences\n </button>\n </div>\n </div>\n )}\n\n {/* Stats Tab */}\n {activeTab === 'stats' && (\n <div className=\"space-y-8\">\n {/* Top Stats Cards */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <div className=\"rounded-lg bg-accent-blue-subtle/10 p-5 border border-accent-blue-subtle/20\">\n <div className=\"flex items-center gap-2 mb-2\">\n <ShoppingBag className=\"h-4 w-4 text-accent-blue\" />\n <h4 className=\"text-sm font-medium text-accent-blue\">\n Total Orders\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-accent-blue\">\n {stats.totalOrders}\n </p>\n </div>\n <div className=\"rounded-lg bg-status-success-bg-subtle/10 p-5 border border-status-success-border/20\">\n <div className=\"flex items-center gap-2 mb-2\">\n <IndianRupee className=\"h-4 w-4 text-status-success-text\" />\n <h4 className=\"text-sm font-medium text-status-success-text\">\n Total Spent\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-status-success-text\">\n {formatCurrency(stats.totalSpent, { minimumFractionDigits: 0 })}\n </p>\n </div>\n <div className=\"rounded-lg bg-accent-purple-subtle/10 p-5 border border-accent-purple-subtle/20\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Award className=\"h-4 w-4 text-accent-purple\" />\n <h4 className=\"text-sm font-medium text-accent-purple\">\n Loyalty Points\n </h4>\n </div>\n <p className=\"text-3xl font-bold text-accent-purple\">\n {stats.loyaltyPoints}\n </p>\n </div>\n </div>\n\n {/* Details Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n {/* Order Statistics */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h4 className=\"text-base font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4 text-text-secondary\" />\n Order Statistics\n </h4>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Average Order Value</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatCurrency(stats.avgOrderValue, { minimumFractionDigits: 0 })}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Favorite Category</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {stats.favoriteCategory}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Member Since</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatDate(stats.memberSince, {\n hour: undefined,\n minute: undefined,\n hour12: undefined,\n })}\n </span>\n </div>\n </div>\n </div>\n\n {/* Account Status */}\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop\">\n <h4 className=\"text-base font-semibold text-text-primary mb-4 flex items-center gap-2\">\n <Shield className=\"h-4 w-4 text-text-secondary\" />\n Account Status\n </h4>\n <div className=\"space-y-3\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-text-secondary\">Email Verification</span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n profile.isEmailVerified\n ? 'bg-status-success-bg-subtle/20 text-status-success-text'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n {profile.isEmailVerified ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-text-secondary\">Phone Verification</span>\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n profile.isPhoneVerified\n ? 'bg-status-success-bg-subtle/20 text-status-success-text'\n : 'bg-status-error-bg/20 text-status-error-text'\n )}\n >\n {profile.isPhoneVerified ? 'Verified' : 'Not Verified'}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-sm text-text-secondary\">Last Updated</span>\n <span className=\"text-sm font-medium text-text-primary\">\n {formatDate(profile.updatedAt, {\n hour: undefined,\n minute: undefined,\n hour12: undefined,\n })}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -48,6 +48,7 @@ function k() {
48
48
  if (!j) return /* @__PURE__ */ w(n, {
49
49
  title: "Cart Not Found",
50
50
  children: /* @__PURE__ */ w(r, {
51
+ illustration: "empty-search",
51
52
  icon: /* @__PURE__ */ w(h, { className: "h-12 w-12" }),
52
53
  title: "Service not available",
53
54
  description: "Direct service is not available for this cart.",
@@ -107,13 +108,13 @@ function k() {
107
108
  children: [/* @__PURE__ */ T("div", {
108
109
  className: "flex flex-col items-center",
109
110
  children: [/* @__PURE__ */ w("div", {
110
- className: t("flex h-8 w-8 items-center justify-center rounded-full text-xs font-medium", r ? "bg-green-500/20 text-green-600 dark:text-green-400" : i ? "bg-foreground text-background" : "bg-bg-sunken text-text-secondary"),
111
+ className: t("flex h-8 w-8 items-center justify-center rounded-full text-xs font-medium", r ? "bg-status-success-bg-subtle/20 text-status-success-text" : i ? "bg-foreground text-background" : "bg-bg-sunken text-text-secondary"),
111
112
  children: r ? /* @__PURE__ */ w(f, { className: "h-4 w-4" }) : n + 1
112
113
  }), /* @__PURE__ */ w("span", {
113
114
  className: t("mt-1 text-[10px]", i ? "font-medium text-text-primary" : "text-text-secondary"),
114
115
  children: D[e]
115
116
  })]
116
- }), n < E.length - 1 && /* @__PURE__ */ w("div", { className: t("mx-2 h-0.5 w-8 sm:w-16", r ? "bg-green-500/30" : "bg-border") })]
117
+ }), n < E.length - 1 && /* @__PURE__ */ w("div", { className: t("mx-2 h-0.5 w-8 sm:w-16", r ? "bg-status-success-bg-subtle/30" : "bg-border") })]
117
118
  }, e);
118
119
  })
119
120
  }), /* @__PURE__ */ T("div", {
@@ -122,7 +123,7 @@ function k() {
122
123
  className: "lg:col-span-2",
123
124
  children: [
124
125
  M === "location" && /* @__PURE__ */ T("div", {
125
- className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
126
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
126
127
  children: [
127
128
  /* @__PURE__ */ T("h2", {
128
129
  className: "text-base font-semibold text-text-primary mb-1 flex items-center gap-2",
@@ -138,7 +139,7 @@ function k() {
138
139
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("label", {
139
140
  className: "block text-sm font-medium text-text-primary mb-1.5",
140
141
  children: ["Your Address ", /* @__PURE__ */ w("span", {
141
- className: "text-red-500",
142
+ className: "text-status-error-text",
142
143
  children: "*"
143
144
  })]
144
145
  }), /* @__PURE__ */ T("div", {
@@ -188,7 +189,7 @@ function k() {
188
189
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("label", {
189
190
  className: "block text-sm font-medium text-text-primary mb-1.5",
190
191
  children: ["Phone Number ", /* @__PURE__ */ w("span", {
191
- className: "text-red-500",
192
+ className: "text-status-error-text",
192
193
  children: "*"
193
194
  })]
194
195
  }), /* @__PURE__ */ T("div", {
@@ -209,7 +210,7 @@ function k() {
209
210
  ]
210
211
  }),
211
212
  M === "details" && /* @__PURE__ */ T("div", {
212
- className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
213
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
213
214
  children: [
214
215
  /* @__PURE__ */ T("h2", {
215
216
  className: "text-base font-semibold text-text-primary mb-1 flex items-center gap-2",
@@ -225,7 +226,7 @@ function k() {
225
226
  /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("label", {
226
227
  className: "block text-sm font-medium text-text-primary mb-1.5",
227
228
  children: ["Preferred Time Slot ", /* @__PURE__ */ w("span", {
228
- className: "text-red-500",
229
+ className: "text-status-error-text",
229
230
  children: "*"
230
231
  })]
231
232
  }), /* @__PURE__ */ w("div", {
@@ -273,7 +274,7 @@ function k() {
273
274
  ]
274
275
  }),
275
276
  M === "payment" && /* @__PURE__ */ T("div", {
276
- className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
277
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
277
278
  children: [
278
279
  /* @__PURE__ */ T("h2", {
279
280
  className: "text-base font-semibold text-text-primary mb-1 flex items-center gap-2",
@@ -287,9 +288,9 @@ function k() {
287
288
  className: "space-y-4",
288
289
  children: [
289
290
  /* @__PURE__ */ T("div", {
290
- className: "flex items-start gap-2 rounded-lg border border-blue-500/20 bg-blue-500/5 p-3",
291
- children: [/* @__PURE__ */ w(c, { className: "h-4 w-4 text-blue-600 dark:text-blue-400 shrink-0 mt-0.5" }), /* @__PURE__ */ T("p", {
292
- className: "text-xs text-blue-700 dark:text-blue-300",
291
+ className: "flex items-start gap-2 rounded-lg border border-accent-blue-subtle/20 bg-accent-blue-subtle/5 p-3",
292
+ children: [/* @__PURE__ */ w(c, { className: "h-4 w-4 text-accent-blue shrink-0 mt-0.5" }), /* @__PURE__ */ T("p", {
293
+ className: "text-xs text-accent-blue",
293
294
  children: [
294
295
  "You need to pay ",
295
296
  i(100, { minimumFractionDigits: 0 }),
@@ -386,14 +387,14 @@ function k() {
386
387
  ]
387
388
  }),
388
389
  M === "confirmation" && H && /* @__PURE__ */ T("div", {
389
- className: "rounded-lg border border-border-subtle bg-bg-surface p-5",
390
+ className: "rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
390
391
  children: [
391
392
  /* @__PURE__ */ T("div", {
392
393
  className: "text-center mb-6",
393
394
  children: [
394
395
  /* @__PURE__ */ w("div", {
395
- className: "mx-auto mb-3 flex h-14 w-14 items-center justify-center rounded-full bg-green-500/10",
396
- children: /* @__PURE__ */ w(f, { className: "h-7 w-7 text-green-600 dark:text-green-400" })
396
+ className: "mx-auto mb-3 flex h-14 w-14 items-center justify-center rounded-full bg-status-success-bg-subtle/10",
397
+ children: /* @__PURE__ */ w(f, { className: "h-7 w-7 text-status-success-text" })
397
398
  }),
398
399
  /* @__PURE__ */ w("h2", {
399
400
  className: "text-lg font-semibold text-text-primary mb-1",
@@ -448,9 +449,9 @@ function k() {
448
449
  })]
449
450
  }),
450
451
  /* @__PURE__ */ T("div", {
451
- className: "rounded-lg border border-green-500/20 bg-green-500/5 p-4 mb-4",
452
+ className: "rounded-lg border border-status-success-border/20 bg-status-success-bg-subtle/5 p-4 mb-4",
452
453
  children: [/* @__PURE__ */ T("h3", {
453
- className: "text-sm font-medium text-green-600 dark:text-green-400 mb-2 flex items-center gap-2",
454
+ className: "text-sm font-medium text-status-success-text mb-2 flex items-center gap-2",
454
455
  children: [/* @__PURE__ */ w(f, { className: "h-4 w-4" }), "Payment Processed"]
455
456
  }), /* @__PURE__ */ T("div", {
456
457
  className: "grid grid-cols-2 gap-3 text-sm",
@@ -480,23 +481,23 @@ function k() {
480
481
  className: "text-xs text-text-secondary",
481
482
  children: "Status"
482
483
  }), /* @__PURE__ */ w("p", {
483
- className: "font-medium text-green-600 dark:text-green-400",
484
+ className: "font-medium text-status-success-text",
484
485
  children: "Paid"
485
486
  })] })
486
487
  ]
487
488
  })]
488
489
  }),
489
490
  /* @__PURE__ */ T("div", {
490
- className: "rounded-lg border border-blue-500/20 bg-blue-500/5 p-4 mb-6",
491
+ className: "rounded-lg border border-accent-blue-subtle/20 bg-accent-blue-subtle/5 p-4 mb-6",
491
492
  children: [/* @__PURE__ */ w("h3", {
492
- className: "text-sm font-medium text-blue-600 dark:text-blue-400 mb-2",
493
+ className: "text-sm font-medium text-accent-blue mb-2",
493
494
  children: "Next Steps"
494
495
  }), /* @__PURE__ */ T("div", {
495
- className: "space-y-2 text-xs text-blue-700 dark:text-blue-300",
496
+ className: "space-y-2 text-xs text-accent-blue",
496
497
  children: [
497
498
  /* @__PURE__ */ T("div", {
498
499
  className: "flex items-start gap-2",
499
- children: [/* @__PURE__ */ w(f, { className: "h-3.5 w-3.5 text-green-600 mt-0.5 shrink-0" }), /* @__PURE__ */ T("span", { children: [
500
+ children: [/* @__PURE__ */ w(f, { className: "h-3.5 w-3.5 text-status-success-text mt-0.5 shrink-0" }), /* @__PURE__ */ T("span", { children: [
500
501
  "Payment confirmed -",
501
502
  " ",
502
503
  i(100, { minimumFractionDigits: 0 }),
@@ -562,7 +563,7 @@ function k() {
562
563
  }), /* @__PURE__ */ w("div", {
563
564
  className: "lg:col-span-1",
564
565
  children: /* @__PURE__ */ T("div", {
565
- className: "sticky top-6 rounded-lg border border-border-subtle bg-bg-surface p-5",
566
+ className: "sticky top-6 rounded-lg border border-border-seam bg-bg-surface p-5 bg-gloss-card shadow-pop",
566
567
  children: [
567
568
  /* @__PURE__ */ w("h3", {
568
569
  className: "text-base font-semibold text-text-primary mb-4",
@@ -605,7 +606,7 @@ function k() {
605
606
  })]
606
607
  }),
607
608
  /* @__PURE__ */ T("div", {
608
- className: "flex items-center gap-2 mt-3 pt-3 border-t border-border-subtle text-green-600 dark:text-green-400",
609
+ className: "flex items-center gap-2 mt-3 pt-3 border-t border-border-subtle text-status-success-text",
609
610
  children: [/* @__PURE__ */ w(f, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ w("span", {
610
611
  className: "text-xs",
611
612
  children: "Pay remaining amount at cart"