@burdenoff/microfe-adaptercloud 2026.614.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/README.md +12 -0
- package/dist/adaptercloud/AdapterCloudRoot.js +177 -0
- package/dist/adaptercloud/AdapterCloudRoot.js.map +1 -0
- package/dist/adaptercloud/AdapterCloudRoutes.js +215 -0
- package/dist/adaptercloud/AdapterCloudRoutes.js.map +1 -0
- package/dist/adaptercloud/components/EmptyState.js +28 -0
- package/dist/adaptercloud/components/EmptyState.js.map +1 -0
- package/dist/adaptercloud/components/InvestmentCard.js +96 -0
- package/dist/adaptercloud/components/InvestmentCard.js.map +1 -0
- package/dist/adaptercloud/components/MetricsCard.js +46 -0
- package/dist/adaptercloud/components/MetricsCard.js.map +1 -0
- package/dist/adaptercloud/components/PageLayout.js +26 -0
- package/dist/adaptercloud/components/PageLayout.js.map +1 -0
- package/dist/adaptercloud/components/RatingDisplay.js +35 -0
- package/dist/adaptercloud/components/RatingDisplay.js.map +1 -0
- package/dist/adaptercloud/components/StatusBadge.js +45 -0
- package/dist/adaptercloud/components/StatusBadge.js.map +1 -0
- package/dist/adaptercloud/context/AdapterCloudContext.js +93 -0
- package/dist/adaptercloud/context/AdapterCloudContext.js.map +1 -0
- package/dist/adaptercloud/context/index.js +1 -0
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js +223 -0
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -0
- package/dist/adaptercloud/index.js +7 -0
- package/dist/adaptercloud/mocks/data.js +1517 -0
- package/dist/adaptercloud/mocks/data.js.map +1 -0
- package/dist/adaptercloud/mocks/users.js +34 -0
- package/dist/adaptercloud/mocks/users.js.map +1 -0
- package/dist/adaptercloud/pages/HomePage.js +921 -0
- package/dist/adaptercloud/pages/HomePage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js +645 -0
- package/dist/adaptercloud/pages/admin/AdminAnalyticsPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminDashboard.js +639 -0
- package/dist/adaptercloud/pages/admin/AdminDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js +421 -0
- package/dist/adaptercloud/pages/admin/AdminFinancialPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js +660 -0
- package/dist/adaptercloud/pages/admin/AdminOrdersPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js +259 -0
- package/dist/adaptercloud/pages/admin/AdminProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js +649 -0
- package/dist/adaptercloud/pages/admin/AdminSettingsPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/CartManagementPage.js +869 -0
- package/dist/adaptercloud/pages/admin/CartManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/admin/UserManagementPage.js +893 -0
- package/dist/adaptercloud/pages/admin/UserManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js +834 -0
- package/dist/adaptercloud/pages/cart-owner/AnalyticsDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js +700 -0
- package/dist/adaptercloud/pages/cart-owner/BusinessSettingsPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js +760 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js +886 -0
- package/dist/adaptercloud/pages/cart-owner/CartOwnerProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js +631 -0
- package/dist/adaptercloud/pages/cart-owner/CartServiceConfigPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js +913 -0
- package/dist/adaptercloud/pages/cart-owner/InventoryManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js +881 -0
- package/dist/adaptercloud/pages/cart-owner/OrderManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js +833 -0
- package/dist/adaptercloud/pages/cart-owner/StaffManagementPage.js.map +1 -0
- package/dist/adaptercloud/pages/common/HelpSupportPage.js +1325 -0
- package/dist/adaptercloud/pages/common/HelpSupportPage.js.map +1 -0
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js +665 -0
- package/dist/adaptercloud/pages/common/NotificationCenterPage.js.map +1 -0
- package/dist/adaptercloud/pages/common/SettingsPage.js +964 -0
- package/dist/adaptercloud/pages/common/SettingsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js +593 -0
- package/dist/adaptercloud/pages/customer/BookingDetailsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CartDetailPage.js +620 -0
- package/dist/adaptercloud/pages/customer/CartDetailPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js +547 -0
- package/dist/adaptercloud/pages/customer/CartDiscoveryPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CheckoutPage.js +532 -0
- package/dist/adaptercloud/pages/customer/CheckoutPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js +496 -0
- package/dist/adaptercloud/pages/customer/CustomerDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js +621 -0
- package/dist/adaptercloud/pages/customer/CustomerProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js +623 -0
- package/dist/adaptercloud/pages/customer/DirectServiceBookingPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/FavoritesPage.js +477 -0
- package/dist/adaptercloud/pages/customer/FavoritesPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js +438 -0
- package/dist/adaptercloud/pages/customer/OrderHistoryPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js +388 -0
- package/dist/adaptercloud/pages/customer/OrderTrackingPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js +488 -0
- package/dist/adaptercloud/pages/customer/PaymentMethodsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/ReviewsPage.js +606 -0
- package/dist/adaptercloud/pages/customer/ReviewsPage.js.map +1 -0
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js +443 -0
- package/dist/adaptercloud/pages/customer/SavedAddressesPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js +849 -0
- package/dist/adaptercloud/pages/investor/InvestmentDetailsPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js +939 -0
- package/dist/adaptercloud/pages/investor/InvestmentOpportunitiesPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js +681 -0
- package/dist/adaptercloud/pages/investor/InvestorAnalyticsPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js +419 -0
- package/dist/adaptercloud/pages/investor/InvestorDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js +399 -0
- package/dist/adaptercloud/pages/investor/InvestorInvestmentsPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js +569 -0
- package/dist/adaptercloud/pages/investor/InvestorPortfolioPage.js.map +1 -0
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js +1065 -0
- package/dist/adaptercloud/pages/investor/InvestorProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js +496 -0
- package/dist/adaptercloud/pages/worker/TaskDetailsPage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js +634 -0
- package/dist/adaptercloud/pages/worker/WorkerDashboard.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js +675 -0
- package/dist/adaptercloud/pages/worker/WorkerOrdersPage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js +687 -0
- package/dist/adaptercloud/pages/worker/WorkerProfilePage.js.map +1 -0
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js +578 -0
- package/dist/adaptercloud/pages/worker/WorkerSchedulePage.js.map +1 -0
- package/dist/adaptercloud/store/adaptercloudStore.js +38 -0
- package/dist/adaptercloud/store/adaptercloudStore.js.map +1 -0
- package/dist/adaptercloud/store/index.js +1 -0
- package/dist/adaptercloud/utils/cn.js +10 -0
- package/dist/adaptercloud/utils/cn.js.map +1 -0
- package/dist/adaptercloud/utils/formatters.js +51 -0
- package/dist/adaptercloud/utils/formatters.js.map +1 -0
- package/dist/adaptercloud/utils/navigation.js +9 -0
- package/dist/adaptercloud/utils/navigation.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js +1674 -0
- package/dist/node_modules/.bun/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpSupportPage.js","names":[],"sources":["../../../../src/adaptercloud/pages/common/HelpSupportPage.tsx"],"sourcesContent":["/**\n * Help & Support Page\n * @module adaptercloud/pages/common\n *\n * Full-featured help center with FAQ accordion (8 categories, search, helpful votes, tags),\n * contact support channels (email, phone, live chat, WhatsApp with response times),\n * submit ticket form with validation, my tickets section with status/priority badges,\n * popular articles, support hours, and emergency contact info.\n */\n\nimport { useState, useMemo } from 'react';\nimport {\n HelpCircle,\n ChevronDown,\n ChevronUp,\n MessageSquare,\n Phone,\n Mail,\n ShoppingBag,\n TrendingUp,\n CreditCard,\n User,\n Shield,\n Send,\n Search,\n X,\n Clock,\n ThumbsUp,\n Tag,\n Ticket,\n AlertTriangle,\n BookOpen,\n Wrench,\n Truck,\n BarChart3,\n Lock,\n FileText,\n CheckCircle2,\n CircleDot,\n Circle,\n XCircle,\n MessageCircle,\n PhoneCall,\n AlertCircle,\n Info,\n Lightbulb,\n ExternalLink,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useAdapterCloud } from '../../context/AdapterCloudContext';\nimport { cn } from '../../utils/cn';\nimport { formatDate, formatRelativeTime } from '../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface FAQItem {\n id: string;\n category: string;\n question: string;\n answer: string;\n helpful: number;\n tags: string[];\n}\n\ninterface SupportTicket {\n id: string;\n subject: string;\n category: string;\n priority: 'low' | 'medium' | 'high' | 'urgent';\n status: 'open' | 'in-progress' | 'resolved' | 'closed';\n description: string;\n createdAt: string;\n updatedAt: string;\n responses: Array<{\n id: string;\n message: string;\n sender: 'user' | 'support';\n timestamp: string;\n }>;\n}\n\ninterface ContactMethod {\n type: 'email' | 'phone' | 'chat' | 'whatsapp';\n label: string;\n value: string;\n available: boolean;\n responseTime: string;\n icon: typeof Mail;\n}\n\ninterface PopularArticle {\n id: string;\n title: string;\n category: string;\n views: number;\n}\n\ntype ActiveSection = 'faq' | 'contact' | 'tickets';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst FAQ_CATEGORIES = [\n 'Account & Profile',\n 'Orders & Payments',\n 'Cart Owners',\n 'Delivery & Workers',\n 'Investors',\n 'Technical Issues',\n 'Billing & Refunds',\n 'Privacy & Security',\n] as const;\n\nconst HELP_CATEGORIES = [\n {\n label: 'Getting Started',\n icon: BookOpen,\n description: 'New to AdapterCloud? Start here',\n color: 'bg-blue-500/10 text-blue-600 dark:text-blue-400',\n },\n {\n label: 'Orders & Delivery',\n icon: ShoppingBag,\n description: 'Placing, tracking, and cancelling orders',\n color: 'bg-green-500/10 text-green-600 dark:text-green-400',\n },\n {\n label: 'Payments & Billing',\n icon: CreditCard,\n description: 'Payment methods, refunds, and invoices',\n color: 'bg-purple-500/10 text-purple-600 dark:text-purple-400',\n },\n {\n label: 'Account & Profile',\n icon: User,\n description: 'Manage your account and settings',\n color: 'bg-orange-500/10 text-orange-600 dark:text-orange-400',\n },\n {\n label: 'Cart Owners',\n icon: Wrench,\n description: 'Running your cart business',\n color: 'bg-teal-500/10 text-teal-600 dark:text-teal-400',\n },\n {\n label: 'Workers & Delivery',\n icon: Truck,\n description: 'Delivery partner information',\n color: 'bg-indigo-500/10 text-indigo-600 dark:text-indigo-400',\n },\n {\n label: 'Investments',\n icon: TrendingUp,\n description: 'Investment opportunities and returns',\n color: 'bg-emerald-500/10 text-emerald-600 dark:text-emerald-400',\n },\n {\n label: 'Security & Privacy',\n icon: Shield,\n description: 'Data protection and safety',\n color: 'bg-red-500/10 text-red-600 dark:text-red-400',\n },\n {\n label: 'Technical Issues',\n icon: AlertTriangle,\n description: 'App issues and troubleshooting',\n color: 'bg-amber-500/10 text-amber-600 dark:text-amber-400',\n },\n] as const;\n\nconst CONTACT_METHODS: ContactMethod[] = [\n {\n type: 'email',\n label: 'Email Support',\n value: 'support@adaptercloud.com',\n available: true,\n responseTime: 'Within 24 hours',\n icon: Mail,\n },\n {\n type: 'phone',\n label: 'Phone Support',\n value: '+91 80-4012-3456',\n available: true,\n responseTime: '9 AM - 9 PM IST',\n icon: PhoneCall,\n },\n {\n type: 'chat',\n label: 'Live Chat',\n value: 'Start a conversation',\n available: true,\n responseTime: 'Instant response',\n icon: MessageCircle,\n },\n {\n type: 'whatsapp',\n label: 'WhatsApp',\n value: '+91 98765-43210',\n available: true,\n responseTime: '2-4 hours',\n icon: MessageSquare,\n },\n];\n\nconst MOCK_FAQS: FAQItem[] = [\n {\n id: 'faq-001',\n category: 'Account & Profile',\n question: 'How do I create an account on AdapterCloud?',\n answer:\n 'You can create an account by clicking the \"Sign Up\" button on the homepage. You\\'ll need to provide your name, email address, phone number, and choose your role (Customer, Cart Owner, Worker, or Investor). After verification via OTP, your account will be activated immediately.',\n helpful: 142,\n tags: ['account', 'signup', 'registration'],\n },\n {\n id: 'faq-002',\n category: 'Account & Profile',\n question: 'How can I change my password?',\n answer:\n \"Go to Settings > Security > Change Password. You'll need to enter your current password and then your new password twice to confirm. Make sure your new password is at least 8 characters long and includes a mix of letters, numbers, and symbols for better security.\",\n helpful: 89,\n tags: ['password', 'security', 'account'],\n },\n {\n id: 'faq-003',\n category: 'Account & Profile',\n question: 'Can I switch my account role?',\n answer:\n 'Yes, you can request a role change from Settings > Profile > Account Role. Switching from Customer to Cart Owner or Worker requires additional verification. The process typically takes 2-3 business days. You can hold multiple roles simultaneously.',\n helpful: 56,\n tags: ['role', 'account', 'switch'],\n },\n {\n id: 'faq-004',\n category: 'Orders & Payments',\n question: 'What payment methods are accepted?',\n answer:\n 'We accept various payment methods including UPI (Google Pay, PhonePe, Paytm), credit/debit cards (Visa, Mastercard, RuPay), net banking from all major banks, and digital wallets. Some cart owners also accept cash on delivery for orders under a certain amount.',\n helpful: 203,\n tags: ['payment', 'upi', 'cards', 'wallet'],\n },\n {\n id: 'faq-005',\n category: 'Orders & Payments',\n question: 'How can I track my order in real-time?',\n answer:\n \"After placing an order, you'll receive a tracking link via SMS and email. You can also track your order in real-time through the app under \\\"My Orders\\\" section. The live map shows your delivery partner's location. You'll get push notifications at each stage: confirmed, preparing, picked up, and delivered.\",\n helpful: 156,\n tags: ['tracking', 'orders', 'delivery', 'real-time'],\n },\n {\n id: 'faq-006',\n category: 'Orders & Payments',\n question: 'How do I cancel or modify an order?',\n answer:\n \"You can cancel your order from the Order Details page if it hasn't been picked up yet. Go to My Orders > Select Order > Cancel Order. For modifications, contact the cart owner directly through the chat feature. Cancellation before preparation gets a full refund; after preparation, a partial refund may apply.\",\n helpful: 178,\n tags: ['cancel', 'modify', 'refund', 'orders'],\n },\n {\n id: 'faq-007',\n category: 'Cart Owners',\n question: 'How do I register my cart on AdapterCloud?',\n answer:\n \"To register your cart, sign up as a Cart Owner and complete the verification process. You'll need to provide business details, license documents (FSSAI for food carts, GST if applicable), photos of your cart, and your preferred operating location. Our team will review and approve your application within 2-3 business days.\",\n helpful: 67,\n tags: ['cart', 'registration', 'business', 'verification'],\n },\n {\n id: 'faq-008',\n category: 'Cart Owners',\n question: 'What commission does AdapterCloud charge?',\n answer:\n 'AdapterCloud charges a commission of 15-20% on each order, depending on your cart category and monthly order volume. Higher volume cart owners get reduced rates. This includes payment processing, marketing support, customer acquisition, and platform maintenance. You can view the detailed commission structure in your dashboard under \"Finances\".',\n helpful: 94,\n tags: ['commission', 'fees', 'business', 'pricing'],\n },\n {\n id: 'faq-009',\n category: 'Cart Owners',\n question: 'How do I manage my menu and pricing?',\n answer:\n 'Go to your Cart Dashboard > Menu Management to add, edit, or remove items. You can set prices, mark items as available/unavailable, add photos and descriptions, create categories, and set up combo offers. Changes are reflected instantly on the platform.',\n helpful: 72,\n tags: ['menu', 'pricing', 'cart', 'management'],\n },\n {\n id: 'faq-010',\n category: 'Delivery & Workers',\n question: 'How do I become a delivery worker?',\n answer:\n 'Apply through the \"Join as Worker\" section on the app. You\\'ll need a valid driving license, vehicle registration (bike/scooter), Aadhaar card, PAN card, and a smartphone with GPS. After document verification and background check (3-5 days), you\\'ll receive online training and can start accepting delivery requests.',\n helpful: 78,\n tags: ['worker', 'delivery', 'application', 'requirements'],\n },\n {\n id: 'faq-011',\n category: 'Delivery & Workers',\n question: 'How is delivery worker pay calculated?',\n answer:\n 'Delivery pay includes a base fee per delivery (varies by distance), surge pricing during peak hours, and tips from customers. You also earn bonuses for completing a certain number of deliveries per day/week. Payments are settled daily to your registered bank account.',\n helpful: 115,\n tags: ['pay', 'earnings', 'delivery', 'worker'],\n },\n {\n id: 'faq-012',\n category: 'Investors',\n question: 'What are the minimum investment requirements?',\n answer:\n \"The minimum investment amount varies by cart and investment type, typically starting from ₹50,000. You can invest in individual carts or diversified portfolios. Expected annual returns range from 12-18%, depending on the cart's performance. All investments are subject to market risk.\",\n helpful: 112,\n tags: ['investment', 'minimum', 'returns', 'portfolio'],\n },\n {\n id: 'faq-013',\n category: 'Investors',\n question: 'How are returns distributed?',\n answer:\n \"Returns are distributed monthly based on the cart's revenue performance. You can view detailed performance reports, revenue breakdowns, and ROI analytics in your Investor Dashboard. Funds can be withdrawn to your bank account with a 3-day processing time.\",\n helpful: 98,\n tags: ['returns', 'distribution', 'revenue', 'investor'],\n },\n {\n id: 'faq-014',\n category: 'Technical Issues',\n question: 'The app is not working properly. What should I do?',\n answer:\n 'Try these steps: 1) Close and restart the app, 2) Check your internet connection (try switching between WiFi and mobile data), 3) Update to the latest app version from the app store, 4) Clear app cache from your phone settings, 5) Restart your device. If the issue persists, create a support ticket with details about the problem, your device model, and app version.',\n helpful: 134,\n tags: ['technical', 'app', 'troubleshooting', 'bug'],\n },\n {\n id: 'faq-015',\n category: 'Technical Issues',\n question: 'Why am I not receiving notifications?',\n answer:\n 'Ensure notifications are enabled in both your phone settings and the app settings. Go to Phone Settings > Apps > AdapterCloud > Notifications and enable all categories. Also check the app: Settings > Preferences > Notification Settings. If using battery optimization, add AdapterCloud to the exception list.',\n helpful: 87,\n tags: ['notifications', 'technical', 'settings'],\n },\n {\n id: 'faq-016',\n category: 'Billing & Refunds',\n question: 'How do I request a refund?',\n answer:\n 'Refunds can be requested within 24 hours of order placement if the order hasn\\'t been prepared. Go to \"My Orders\" > Select the order > \"Request Refund\". You\\'ll need to select a reason. Refunds for quality issues can be raised within 2 hours of delivery. Refunds are processed within 3-5 business days to your original payment method.',\n helpful: 167,\n tags: ['refund', 'cancellation', 'billing', 'money'],\n },\n {\n id: 'faq-017',\n category: 'Billing & Refunds',\n question: 'Where can I find my payment receipts?',\n answer:\n 'All payment receipts are available under My Orders > Select Order > View Receipt. You can also find consolidated billing statements under Settings > Billing > Invoice History. Receipts can be downloaded as PDF or emailed to your registered address.',\n helpful: 65,\n tags: ['receipt', 'invoice', 'billing', 'download'],\n },\n {\n id: 'faq-018',\n category: 'Privacy & Security',\n question: 'How is my personal data protected?',\n answer:\n \"We follow industry-standard encryption (AES-256) for all personal data at rest and TLS 1.3 for data in transit. We are compliant with India's DPDP Act. You can control your data sharing preferences in Settings > Privacy. We never sell your personal information to third parties.\",\n helpful: 109,\n tags: ['privacy', 'data', 'encryption', 'security'],\n },\n {\n id: 'faq-019',\n category: 'Privacy & Security',\n question: 'How do I enable two-factor authentication?',\n answer:\n 'Go to Settings > Security > Two-Factor Authentication and toggle it on. You can choose between SMS OTP or an authenticator app (Google Authenticator, Authy). We strongly recommend enabling 2FA for enhanced account security, especially for Cart Owners and Investors.',\n helpful: 76,\n tags: ['2fa', 'authentication', 'security', 'account'],\n },\n {\n id: 'faq-020',\n category: 'Privacy & Security',\n question: 'How can I delete my account?',\n answer:\n 'You can request account deletion from Settings > Privacy > Delete Account. Please note: this action is irreversible. All your data, order history, and wallet balance will be permanently removed after a 30-day cooling period. Pending orders or investments must be settled before deletion.',\n helpful: 43,\n tags: ['delete', 'account', 'privacy', 'data'],\n },\n];\n\nconst MOCK_TICKETS: SupportTicket[] = [\n {\n id: 'ticket-001',\n subject: 'Payment failed but amount deducted',\n category: 'Billing & Refunds',\n priority: 'high',\n status: 'in-progress',\n description:\n 'I placed an order for ₹285 but the payment failed. However, the amount was deducted from my SBI account. Transaction ID: TXN123456789.',\n createdAt: '2024-06-23T14:30:00Z',\n updatedAt: '2024-06-24T09:15:00Z',\n responses: [\n {\n id: 'resp-001',\n message:\n \"Thank you for contacting us. We're investigating the payment issue. Could you please confirm the exact amount and your account details?\",\n sender: 'support',\n timestamp: '2024-06-23T16:45:00Z',\n },\n {\n id: 'resp-002',\n message:\n 'Transaction ID: TXN123456789. Amount: ₹285. Deducted from my SBI savings account ending in 4521.',\n sender: 'user',\n timestamp: '2024-06-23T17:20:00Z',\n },\n {\n id: 'resp-003',\n message:\n \"We've verified the transaction. The refund of ₹285 has been initiated and will reflect in your account within 3-5 business days. Reference: REF-2024-06-24-001.\",\n sender: 'support',\n timestamp: '2024-06-24T09:15:00Z',\n },\n ],\n },\n {\n id: 'ticket-002',\n subject: 'Unable to update cart location',\n category: 'Technical Issues',\n priority: 'medium',\n status: 'resolved',\n description:\n \"I'm unable to update my cart location in the app. The save button is not responding when I tap it. Tried clearing cache and reinstalling.\",\n createdAt: '2024-06-22T11:20:00Z',\n updatedAt: '2024-06-22T18:30:00Z',\n responses: [\n {\n id: 'resp-004',\n message:\n 'This was a known bug affecting Cart Owners on Android devices. It has been fixed in the latest app update (v2.1.3). Please update your app from the Play Store and try again.',\n sender: 'support',\n timestamp: '2024-06-22T18:30:00Z',\n },\n ],\n },\n {\n id: 'ticket-003',\n subject: 'Wrong items delivered in order #ORD-4521',\n category: 'Orders & Payments',\n priority: 'high',\n status: 'open',\n description:\n 'Received completely different items from what I ordered. Order #ORD-4521 was for 2 Masala Dosas and 1 Filter Coffee, but received Idli and Sambar instead.',\n createdAt: '2024-06-25T08:45:00Z',\n updatedAt: '2024-06-25T08:45:00Z',\n responses: [],\n },\n {\n id: 'ticket-004',\n subject: 'Investment returns not credited for May',\n category: 'Investors',\n priority: 'medium',\n status: 'closed',\n description:\n 'My investment returns for the month of May 2024 have not been credited to my wallet. Portfolio: Diversified South Indian Carts.',\n createdAt: '2024-06-10T09:00:00Z',\n updatedAt: '2024-06-12T14:20:00Z',\n responses: [\n {\n id: 'resp-005',\n message:\n 'We apologize for the delay. May returns have been processed and credited to your wallet. The delay was due to a system migration. You should see ₹4,250 credited.',\n sender: 'support',\n timestamp: '2024-06-12T14:20:00Z',\n },\n ],\n },\n];\n\nconst POPULAR_ARTICLES: PopularArticle[] = [\n {\n id: 'art-1',\n title: 'Getting Started with AdapterCloud',\n category: 'Getting Started',\n views: 12450,\n },\n { id: 'art-2', title: 'How to Place Your First Order', category: 'Orders', views: 9823 },\n { id: 'art-3', title: 'Understanding Investment Returns', category: 'Investors', views: 7654 },\n { id: 'art-4', title: 'Setting Up Your Cart Business', category: 'Cart Owners', views: 6543 },\n { id: 'art-5', title: 'Payment Troubleshooting Guide', category: 'Payments', views: 5890 },\n { id: 'art-6', title: 'Delivery Partner Onboarding Guide', category: 'Workers', views: 4321 },\n];\n\n// ============================================================================\n// Helper functions\n// ============================================================================\n\nfunction getStatusIcon(status: SupportTicket['status']) {\n switch (status) {\n case 'open':\n return Circle;\n case 'in-progress':\n return CircleDot;\n case 'resolved':\n return CheckCircle2;\n case 'closed':\n return XCircle;\n }\n}\n\nfunction getStatusColor(status: SupportTicket['status']): string {\n switch (status) {\n case 'open':\n return 'bg-blue-500/10 text-blue-600 dark:text-blue-400';\n case 'in-progress':\n return 'bg-amber-500/10 text-amber-600 dark:text-amber-400';\n case 'resolved':\n return 'bg-green-500/10 text-green-600 dark:text-green-400';\n case 'closed':\n return 'bg-muted text-muted-foreground';\n }\n}\n\nfunction getPriorityColor(priority: SupportTicket['priority']): string {\n switch (priority) {\n case 'urgent':\n return 'bg-red-500/10 text-red-600 dark:text-red-400';\n case 'high':\n return 'bg-orange-500/10 text-orange-600 dark:text-orange-400';\n case 'medium':\n return 'bg-blue-500/10 text-blue-600 dark:text-blue-400';\n case 'low':\n return 'bg-muted text-muted-foreground';\n }\n}\n\nfunction formatStatusLabel(status: string): string {\n return status.replace('-', ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function HelpSupportPage() {\n const { currentUser } = useAdapterCloud();\n\n // Section & navigation\n const [activeSection, setActiveSection] = useState<ActiveSection>('faq');\n\n // FAQ state\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState('');\n const [expandedFaq, setExpandedFaq] = useState<string | null>(null);\n const [faqs, setFaqs] = useState<FAQItem[]>(MOCK_FAQS);\n\n // Ticket state\n const [tickets, setTickets] = useState<SupportTicket[]>(MOCK_TICKETS);\n const [showTicketForm, setShowTicketForm] = useState(false);\n const [ticketSubmitting, setTicketSubmitting] = useState(false);\n const [ticketSuccess, setTicketSuccess] = useState('');\n const [ticketError, setTicketError] = useState('');\n const [ticketForm, setTicketForm] = useState({\n subject: '',\n category: '',\n priority: 'medium' as SupportTicket['priority'],\n description: '',\n });\n\n // FAQ filtering\n const filteredFaqs = useMemo(() => {\n return faqs.filter((faq) => {\n const matchesSearch =\n !searchQuery ||\n faq.question.toLowerCase().includes(searchQuery.toLowerCase()) ||\n faq.answer.toLowerCase().includes(searchQuery.toLowerCase()) ||\n faq.tags.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase()));\n const matchesCategory = !selectedCategory || faq.category === selectedCategory;\n return matchesSearch && matchesCategory;\n });\n }, [faqs, searchQuery, selectedCategory]);\n\n // Ticket stats\n const ticketStats = useMemo(() => {\n const open = tickets.filter((t) => t.status === 'open').length;\n const inProgress = tickets.filter((t) => t.status === 'in-progress').length;\n const resolved = tickets.filter((t) => t.status === 'resolved').length;\n const closed = tickets.filter((t) => t.status === 'closed').length;\n return { open, inProgress, resolved, closed, total: tickets.length };\n }, [tickets]);\n\n // Handlers\n const toggleFaq = (id: string) => {\n setExpandedFaq((prev) => (prev === id ? null : id));\n };\n\n const handleMarkHelpful = (faqId: string) => {\n setFaqs((prev) =>\n prev.map((faq) => (faq.id === faqId ? { ...faq, helpful: faq.helpful + 1 } : faq))\n );\n };\n\n const handleContactMethod = (method: ContactMethod) => {\n switch (method.type) {\n case 'email':\n window.location.href = `mailto:${method.value}`;\n break;\n case 'phone':\n window.location.href = `tel:${method.value.replace(/[^0-9+]/g, '')}`;\n break;\n case 'whatsapp':\n window.open(`https://wa.me/${method.value.replace(/[^0-9]/g, '')}`, '_blank');\n break;\n case 'chat':\n alert('Live chat will be available soon!');\n break;\n }\n };\n\n const handleSubmitTicket = () => {\n setTicketError('');\n setTicketSuccess('');\n\n if (!ticketForm.subject.trim()) {\n setTicketError('Please enter a subject for your ticket.');\n return;\n }\n if (!ticketForm.description.trim()) {\n setTicketError('Please describe your issue in the description field.');\n return;\n }\n if (!ticketForm.category) {\n setTicketError('Please select a category.');\n return;\n }\n\n setTicketSubmitting(true);\n\n // Simulate API call\n setTimeout(() => {\n const newTicket: SupportTicket = {\n id: `ticket-${Date.now()}`,\n subject: ticketForm.subject,\n category: ticketForm.category,\n priority: ticketForm.priority,\n status: 'open',\n description: ticketForm.description,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n responses: [],\n };\n\n setTickets((prev) => [newTicket, ...prev]);\n setTicketForm({ subject: '', category: '', priority: 'medium', description: '' });\n setTicketSubmitting(false);\n setShowTicketForm(false);\n setTicketSuccess(\n 'Support ticket created successfully! Our team will respond within 24 hours.'\n );\n setActiveSection('tickets');\n\n setTimeout(() => setTicketSuccess(''), 5000);\n }, 1000);\n };\n\n // Navigation tabs\n const sectionTabs: Array<{ id: ActiveSection; label: string; icon: typeof HelpCircle }> = [\n { id: 'faq', label: 'FAQ', icon: HelpCircle },\n { id: 'contact', label: 'Contact Us', icon: Phone },\n { id: 'tickets', label: 'My Tickets', icon: Ticket },\n ];\n\n return (\n <PageLayout\n title=\"Help & Support\"\n description=\"Find answers, contact support, or track your requests\"\n >\n {/* Success message */}\n {ticketSuccess && (\n <div className=\"mb-4 flex items-center gap-2 rounded-lg border border-green-500/30 bg-green-500/10 px-4 py-3 text-sm text-green-700 dark:text-green-300\">\n <CheckCircle2 className=\"h-4 w-4 shrink-0\" />\n {ticketSuccess}\n <button type=\"button\" onClick={() => setTicketSuccess('')} className=\"ml-auto\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n\n {/* Search Bar */}\n <section className=\"mb-6\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-5 w-5 -translate-y-1/2 text-muted-foreground\" />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n if (activeSection !== 'faq') setActiveSection('faq');\n }}\n placeholder=\"Search help articles, FAQs, and more...\"\n className=\"w-full rounded-lg border border-border bg-card py-3 pl-10 pr-10 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n {searchQuery && (\n <button\n type=\"button\"\n onClick={() => setSearchQuery('')}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </section>\n\n {/* Help Category Cards */}\n <section className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-foreground mb-3\">Browse Help Topics</h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {HELP_CATEGORIES.map((cat) => {\n const CatIcon = cat.icon;\n return (\n <button\n key={cat.label}\n type=\"button\"\n onClick={() => {\n setSelectedCategory(cat.label === selectedCategory ? '' : cat.label);\n setActiveSection('faq');\n }}\n className={cn(\n 'flex items-start gap-3 rounded-lg border bg-card p-4 text-left transition-all hover:shadow-sm',\n selectedCategory === cat.label\n ? 'border-primary ring-1 ring-primary'\n : 'border-border'\n )}\n >\n <div\n className={cn(\n 'flex h-10 w-10 shrink-0 items-center justify-center rounded-lg',\n cat.color\n )}\n >\n <CatIcon className=\"h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold text-foreground\">{cat.label}</p>\n <p className=\"text-xs text-muted-foreground\">{cat.description}</p>\n </div>\n </button>\n );\n })}\n </div>\n </section>\n\n {/* Navigation Tabs */}\n <section className=\"mb-6\">\n <div className=\"flex space-x-1 bg-muted p-1 rounded-lg w-full sm:w-fit\">\n {sectionTabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveSection(tab.id)}\n className={cn(\n 'flex flex-1 sm:flex-none items-center justify-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors',\n activeSection === tab.id\n ? 'bg-card text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span>{tab.label}</span>\n {tab.id === 'tickets' && ticketStats.open > 0 && (\n <span className=\"flex h-5 min-w-[20px] items-center justify-center rounded-full bg-primary px-1.5 text-xs font-medium text-primary-foreground\">\n {ticketStats.open}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </section>\n\n {/* ================================================================ */}\n {/* FAQ Section */}\n {/* ================================================================ */}\n {activeSection === 'faq' && (\n <div>\n {/* Category filter dropdown */}\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n {filteredFaqs.length} question{filteredFaqs.length !== 1 ? 's' : ''} found\n {selectedCategory && (\n <span>\n {' '}\n in <span className=\"font-medium text-foreground\">{selectedCategory}</span>\n <button\n type=\"button\"\n onClick={() => setSelectedCategory('')}\n className=\"ml-1 text-primary hover:underline\"\n >\n (clear)\n </button>\n </span>\n )}\n </p>\n <select\n value={selectedCategory}\n onChange={(e) => setSelectedCategory(e.target.value)}\n className=\"rounded-lg border border-border bg-card px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n >\n <option value=\"\">All Categories</option>\n {FAQ_CATEGORIES.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n\n {/* FAQ Accordion */}\n {filteredFaqs.length > 0 ? (\n <div className=\"space-y-3\">\n {filteredFaqs.map((faq) => {\n const isExpanded = expandedFaq === faq.id;\n return (\n <div\n key={faq.id}\n className=\"rounded-lg border border-border bg-card overflow-hidden\"\n >\n <button\n type=\"button\"\n onClick={() => toggleFaq(faq.id)}\n className=\"flex w-full items-start justify-between gap-3 px-4 py-4 text-left hover:bg-accent/50 transition-colors\"\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <span className=\"inline-flex items-center rounded-full bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground\">\n {faq.category}\n </span>\n <span className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\">\n <ThumbsUp className=\"h-3 w-3\" />\n {faq.helpful}\n </span>\n </div>\n <span\n className={cn(\n 'text-sm',\n isExpanded\n ? 'font-semibold text-foreground'\n : 'font-medium text-foreground'\n )}\n >\n {faq.question}\n </span>\n </div>\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground shrink-0 mt-1\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground shrink-0 mt-1\" />\n )}\n </button>\n {isExpanded && (\n <div className=\"border-t border-border px-4 pb-4 pt-3\">\n <p className=\"text-sm text-muted-foreground leading-relaxed mb-3\">\n {faq.answer}\n </p>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex flex-wrap gap-1.5\">\n {faq.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 rounded-full bg-muted px-2 py-0.5 text-xs text-muted-foreground\"\n >\n <Tag className=\"h-2.5 w-2.5\" />\n {tag}\n </span>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleMarkHelpful(faq.id);\n }}\n className=\"flex items-center gap-1.5 rounded-lg border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:bg-accent hover:text-foreground transition-colors\"\n >\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n Helpful ({faq.helpful})\n </button>\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n ) : (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-border bg-card py-12\">\n <Search className=\"h-12 w-12 text-muted-foreground/50 mb-3\" />\n <h3 className=\"text-base font-semibold text-foreground mb-1\">No FAQs found</h3>\n <p className=\"text-sm text-muted-foreground mb-3\">\n Try adjusting your search or browse different categories\n </p>\n <button\n type=\"button\"\n onClick={() => {\n setSearchQuery('');\n setSelectedCategory('');\n }}\n className=\"text-sm font-medium text-primary hover:underline\"\n >\n Clear all filters\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* ================================================================ */}\n {/* Contact Section */}\n {/* ================================================================ */}\n {activeSection === 'contact' && (\n <div className=\"space-y-6\">\n {/* Contact Methods Grid */}\n <div>\n <h2 className=\"text-base font-semibold text-foreground mb-3\">Get in Touch</h2>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {CONTACT_METHODS.map((method) => {\n const MethodIcon = method.icon;\n return (\n <div key={method.type} className=\"rounded-lg border border-border bg-card p-5\">\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-lg bg-muted\">\n <MethodIcon className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-foreground\">{method.label}</h3>\n <p className=\"text-sm text-foreground mt-0.5 break-words\">{method.value}</p>\n <div className=\"flex items-center gap-1 mt-1 text-xs text-muted-foreground\">\n <Clock className=\"h-3 w-3\" />\n {method.responseTime}\n </div>\n <button\n type=\"button\"\n onClick={() => handleContactMethod(method)}\n disabled={!method.available}\n className={cn(\n 'mt-3 flex items-center gap-1.5 rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n method.available\n ? 'bg-primary text-primary-foreground hover:bg-primary/90'\n : 'bg-muted text-muted-foreground cursor-not-allowed'\n )}\n >\n {method.type === 'chat'\n ? 'Start Chat'\n : method.type === 'email'\n ? 'Send Email'\n : 'Contact'}\n <ExternalLink className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Submit Ticket Section */}\n <div className=\"rounded-lg border border-border bg-card\">\n <div className=\"flex items-center justify-between border-b border-border px-5 py-4\">\n <div>\n <h2 className=\"text-base font-semibold text-foreground\">Submit a Support Ticket</h2>\n <p className=\"text-xs text-muted-foreground mt-0.5\">\n Can't find your answer? Create a ticket and our team will help.\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => setShowTicketForm(!showTicketForm)}\n className=\"flex items-center gap-1.5 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n {showTicketForm ? 'Close' : 'New Ticket'}\n </button>\n </div>\n\n {showTicketForm && (\n <div className=\"p-5 space-y-4\">\n {/* Error message */}\n {ticketError && (\n <div className=\"flex items-center gap-2 rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300\">\n <AlertCircle className=\"h-4 w-4 shrink-0\" />\n {ticketError}\n </div>\n )}\n\n {/* Subject */}\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1.5\">\n Subject <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n value={ticketForm.subject}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, subject: e.target.value }))\n }\n placeholder=\"Brief description of your issue\"\n className=\"w-full rounded-lg border border-border bg-card px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n\n {/* Category & Priority */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1.5\">\n Category <span className=\"text-red-500\">*</span>\n </label>\n <select\n value={ticketForm.category}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, category: e.target.value }))\n }\n className=\"w-full rounded-lg border border-border bg-card px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n >\n <option value=\"\">Select category</option>\n {FAQ_CATEGORIES.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1.5\">\n Priority\n </label>\n <select\n value={ticketForm.priority}\n onChange={(e) =>\n setTicketForm((prev) => ({\n ...prev,\n priority: e.target.value as SupportTicket['priority'],\n }))\n }\n className=\"w-full rounded-lg border border-border bg-card px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n >\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"urgent\">Urgent</option>\n </select>\n </div>\n </div>\n\n {/* Description */}\n <div>\n <label className=\"block text-sm font-medium text-foreground mb-1.5\">\n Description <span className=\"text-red-500\">*</span>\n </label>\n <textarea\n rows={5}\n value={ticketForm.description}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, description: e.target.value }))\n }\n placeholder=\"Please describe your issue in detail...\"\n className=\"w-full rounded-lg border border-border bg-card px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring resize-none\"\n />\n </div>\n\n {/* Tips */}\n <div className=\"rounded-lg bg-blue-500/5 border border-blue-500/20 p-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Lightbulb className=\"h-4 w-4 text-blue-600 dark:text-blue-400\" />\n <h4 className=\"text-sm font-medium text-blue-700 dark:text-blue-300\">\n Tips for faster resolution\n </h4>\n </div>\n <ul className=\"text-xs text-blue-600 dark:text-blue-400 space-y-1 ml-6 list-disc\">\n <li>Be specific about the issue and include steps to reproduce it</li>\n <li>Include relevant order IDs, transaction IDs, or error messages</li>\n <li>Mention your device type and app version for technical issues</li>\n <li>Attach screenshots if they help illustrate the problem</li>\n </ul>\n </div>\n\n {/* Submit buttons */}\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={handleSubmitTicket}\n disabled={ticketSubmitting}\n className={cn(\n 'flex items-center gap-2 rounded-lg px-5 py-2.5 text-sm font-medium text-primary-foreground transition-colors',\n ticketSubmitting\n ? 'bg-primary/70 cursor-not-allowed'\n : 'bg-primary hover:bg-primary/90'\n )}\n >\n {ticketSubmitting ? (\n <>\n <span className=\"h-4 w-4 animate-spin rounded-full border-2 border-primary-foreground/30 border-t-primary-foreground\" />\n Submitting...\n </>\n ) : (\n <>\n <Send className=\"h-4 w-4\" />\n Submit Ticket\n </>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(false);\n setTicketError('');\n }}\n className=\"rounded-lg border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Support Hours & Emergency */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {/* Support Hours */}\n <div className=\"rounded-lg border border-border bg-card p-5\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Clock className=\"h-5 w-5 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold text-foreground\">Support Hours</h3>\n </div>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Monday - Friday</span>\n <span className=\"font-medium text-foreground\">9:00 AM - 9:00 PM IST</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Saturday</span>\n <span className=\"font-medium text-foreground\">10:00 AM - 6:00 PM IST</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Sunday</span>\n <span className=\"font-medium text-foreground\">Closed</span>\n </div>\n <div className=\"flex justify-between pt-2 border-t border-border\">\n <span className=\"text-muted-foreground\">Email Support</span>\n <span className=\"font-medium text-foreground\">24/7</span>\n </div>\n </div>\n </div>\n\n {/* Emergency Contact */}\n <div className=\"rounded-lg border border-red-500/20 bg-red-500/5 p-5\">\n <div className=\"flex items-center gap-2 mb-3\">\n <AlertTriangle className=\"h-5 w-5 text-red-600 dark:text-red-400\" />\n <h3 className=\"text-sm font-semibold text-red-700 dark:text-red-300\">\n Emergency Contact\n </h3>\n </div>\n <p className=\"text-sm text-red-600 dark:text-red-400 mb-3\">\n For urgent issues like safety concerns, fraud, or account compromise:\n </p>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Phone className=\"h-4 w-4 text-red-600 dark:text-red-400\" />\n <span className=\"font-medium text-red-700 dark:text-red-300\">\n +91 80-4012-9999\n </span>\n <span className=\"text-xs text-red-500\">(24/7)</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <Mail className=\"h-4 w-4 text-red-600 dark:text-red-400\" />\n <span className=\"font-medium text-red-700 dark:text-red-300\">\n emergency@adaptercloud.com\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Popular Articles */}\n <div>\n <h2 className=\"text-base font-semibold text-foreground mb-3\">Popular Articles</h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {POPULAR_ARTICLES.map((article) => (\n <button\n key={article.id}\n type=\"button\"\n className=\"flex items-start gap-3 rounded-lg border border-border bg-card p-4 text-left hover:bg-accent/50 transition-colors\"\n >\n <FileText className=\"h-5 w-5 text-muted-foreground shrink-0 mt-0.5\" />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-foreground truncate\">{article.title}</p>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs text-muted-foreground\">{article.category}</span>\n <span className=\"text-xs text-muted-foreground\">\n {article.views.toLocaleString('en-IN')} views\n </span>\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* ================================================================ */}\n {/* My Tickets Section */}\n {/* ================================================================ */}\n {activeSection === 'tickets' && (\n <div className=\"space-y-4\">\n {/* Ticket Stats */}\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <div className=\"rounded-lg border border-border bg-card p-3 text-center\">\n <p className=\"text-2xl font-bold text-foreground\">{ticketStats.total}</p>\n <p className=\"text-xs text-muted-foreground\">Total</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-3 text-center\">\n <p className=\"text-2xl font-bold text-blue-600 dark:text-blue-400\">\n {ticketStats.open}\n </p>\n <p className=\"text-xs text-muted-foreground\">Open</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-3 text-center\">\n <p className=\"text-2xl font-bold text-amber-600 dark:text-amber-400\">\n {ticketStats.inProgress}\n </p>\n <p className=\"text-xs text-muted-foreground\">In Progress</p>\n </div>\n <div className=\"rounded-lg border border-border bg-card p-3 text-center\">\n <p className=\"text-2xl font-bold text-green-600 dark:text-green-400\">\n {ticketStats.resolved}\n </p>\n <p className=\"text-xs text-muted-foreground\">Resolved</p>\n </div>\n </div>\n\n {/* Header with New Ticket button */}\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-muted-foreground\">\n {tickets.length} ticket{tickets.length !== 1 ? 's' : ''}\n </p>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"flex items-center gap-1.5 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n New Ticket\n </button>\n </div>\n\n {/* Ticket List */}\n {tickets.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-lg border border-border bg-card py-12\">\n <Ticket className=\"h-12 w-12 text-muted-foreground/50 mb-3\" />\n <h3 className=\"text-base font-semibold text-foreground mb-1\">No support tickets</h3>\n <p className=\"text-sm text-muted-foreground mb-3\">\n You haven't created any support tickets yet\n </p>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"flex items-center gap-1.5 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n Create Your First Ticket\n </button>\n </div>\n ) : (\n <div className=\"space-y-4\">\n {tickets.map((ticket) => {\n const StatusIcon = getStatusIcon(ticket.status);\n const lastResponse =\n ticket.responses.length > 0\n ? ticket.responses[ticket.responses.length - 1]\n : null;\n\n return (\n <div\n key={ticket.id}\n className=\"rounded-lg border border-border bg-card overflow-hidden\"\n >\n {/* Ticket Header */}\n <div className=\"p-4 sm:p-5\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <StatusIcon\n className={cn(\n 'h-4 w-4',\n getStatusColor(ticket.status).split(' ').slice(1).join(' ')\n )}\n />\n <h3 className=\"text-sm font-semibold text-foreground truncate\">\n {ticket.subject}\n </h3>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {ticket.category} · {ticket.id}\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n getPriorityColor(ticket.priority)\n )}\n >\n {ticket.priority.toUpperCase()}\n </span>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n getStatusColor(ticket.status)\n )}\n >\n {formatStatusLabel(ticket.status)}\n </span>\n </div>\n </div>\n\n <p className=\"text-sm text-muted-foreground mt-2 leading-relaxed\">\n {ticket.description}\n </p>\n\n {/* Latest Response */}\n {lastResponse && (\n <div className=\"mt-3 rounded-lg bg-muted/50 border border-border p-3\">\n <div className=\"flex items-center gap-1.5 mb-1\">\n <MessageSquare className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <span className=\"text-xs font-medium text-foreground\">\n {lastResponse.sender === 'support' ? 'Support Team' : 'You'}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n · {formatDate(lastResponse.timestamp)}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground\">{lastResponse.message}</p>\n </div>\n )}\n\n {/* No responses yet */}\n {ticket.responses.length === 0 && ticket.status === 'open' && (\n <div className=\"mt-3 flex items-center gap-2 text-xs text-muted-foreground\">\n <Info className=\"h-3.5 w-3.5\" />\n Awaiting response from support team\n </div>\n )}\n </div>\n\n {/* Ticket Footer */}\n <div className=\"flex flex-col gap-1 border-t border-border bg-muted/30 px-4 py-2.5 sm:flex-row sm:items-center sm:justify-between text-xs text-muted-foreground\">\n <span>Created: {formatDate(ticket.createdAt)}</span>\n <span>Updated: {formatDate(ticket.updatedAt)}</span>\n <span>\n {ticket.responses.length} response{ticket.responses.length !== 1 ? 's' : ''}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n {/* ================================================================ */}\n {/* Footer Info */}\n {/* ================================================================ */}\n <section className=\"mt-8 rounded-lg border border-border bg-muted/30 p-5\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground mb-1\">Still need help?</h3>\n <p className=\"text-xs text-muted-foreground\">\n Our support team is available Monday to Saturday. Average response time is under 4\n hours.\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <button\n type=\"button\"\n onClick={() => handleContactMethod(CONTACT_METHODS[0])}\n className=\"flex items-center gap-1.5 rounded-lg border border-border bg-card px-3 py-2 text-xs font-medium text-foreground hover:bg-accent transition-colors\"\n >\n <Mail className=\"h-3.5 w-3.5\" />\n Email Us\n </button>\n <button\n type=\"button\"\n onClick={() => handleContactMethod(CONTACT_METHODS[1])}\n className=\"flex items-center gap-1.5 rounded-lg border border-border bg-card px-3 py-2 text-xs font-medium text-foreground hover:bg-accent transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call Us\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"flex items-center gap-1.5 rounded-lg bg-primary px-3 py-2 text-xs font-medium text-primary-foreground hover:bg-primary/90 transition-colors\"\n >\n <Ticket className=\"h-3.5 w-3.5\" />\n Submit Ticket\n </button>\n </div>\n </div>\n </section>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;AAyGA,IAAM,IAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEK,IAAkB;CACtB;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACF,EAEK,IAAmC;CACvC;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACF,EAEK,KAAuB;CAC3B;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAW;GAAU;GAAe;EAC5C;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAY;GAAY;GAAU;EAC1C;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAQ;GAAW;GAAS;EACpC;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAW;GAAO;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"}
|