@burdenoff/microfe-subscriberbot 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.
- package/dist/subscriberbot/components/EmptyState.js +17 -10
- package/dist/subscriberbot/components/EmptyState.js.map +1 -1
- package/dist/subscriberbot/components/InvestmentCard.js +23 -22
- package/dist/subscriberbot/components/InvestmentCard.js.map +1 -1
- package/dist/subscriberbot/components/MetricsCard.js +15 -12
- package/dist/subscriberbot/components/MetricsCard.js.map +1 -1
- package/dist/subscriberbot/components/PageLayout.js +27 -15
- package/dist/subscriberbot/components/PageLayout.js.map +1 -1
- package/dist/subscriberbot/components/RatingDisplay.js +3 -3
- package/dist/subscriberbot/components/RatingDisplay.js.map +1 -1
- package/dist/subscriberbot/components/StatusBadge.js +25 -13
- package/dist/subscriberbot/components/StatusBadge.js.map +1 -1
- package/dist/subscriberbot/context/SubscriberBotContext.js.map +1 -1
- package/dist/subscriberbot/pages/HomePage.js +67 -63
- package/dist/subscriberbot/pages/HomePage.js.map +1 -1
- package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js +42 -42
- package/dist/subscriberbot/pages/admin/AdminAnalyticsPage.js.map +1 -1
- package/dist/subscriberbot/pages/admin/AdminDashboard.js +42 -41
- package/dist/subscriberbot/pages/admin/AdminDashboard.js.map +1 -1
- package/dist/subscriberbot/pages/admin/AdminFinancialPage.js +14 -14
- package/dist/subscriberbot/pages/admin/AdminFinancialPage.js.map +1 -1
- package/dist/subscriberbot/pages/admin/AdminOrdersPage.js +24 -24
- package/dist/subscriberbot/pages/admin/AdminOrdersPage.js.map +1 -1
- package/dist/subscriberbot/pages/admin/AdminProfilePage.js +11 -11
- package/dist/subscriberbot/pages/admin/AdminProfilePage.js.map +1 -1
- package/dist/subscriberbot/pages/admin/AdminSettingsPage.js +14 -14
- package/dist/subscriberbot/pages/admin/AdminSettingsPage.js.map +1 -1
- package/dist/subscriberbot/pages/admin/CartManagementPage.js +41 -41
- package/dist/subscriberbot/pages/admin/CartManagementPage.js.map +1 -1
- package/dist/subscriberbot/pages/admin/UserManagementPage.js +47 -47
- package/dist/subscriberbot/pages/admin/UserManagementPage.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js +44 -44
- package/dist/subscriberbot/pages/cart-owner/AnalyticsDashboard.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js +17 -17
- package/dist/subscriberbot/pages/cart-owner/BusinessSettingsPage.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js +94 -89
- package/dist/subscriberbot/pages/cart-owner/CartOwnerDashboard.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js +58 -58
- package/dist/subscriberbot/pages/cart-owner/CartOwnerProfilePage.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js +51 -51
- package/dist/subscriberbot/pages/cart-owner/CartServiceConfigPage.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js +54 -54
- package/dist/subscriberbot/pages/cart-owner/InventoryManagementPage.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js +54 -53
- package/dist/subscriberbot/pages/cart-owner/OrderManagementPage.js.map +1 -1
- package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js +51 -51
- package/dist/subscriberbot/pages/cart-owner/StaffManagementPage.js.map +1 -1
- package/dist/subscriberbot/pages/common/HelpSupportPage.js +65 -65
- package/dist/subscriberbot/pages/common/HelpSupportPage.js.map +1 -1
- package/dist/subscriberbot/pages/common/NotificationCenterPage.js +46 -45
- package/dist/subscriberbot/pages/common/NotificationCenterPage.js.map +1 -1
- package/dist/subscriberbot/pages/common/SettingsPage.js +46 -46
- package/dist/subscriberbot/pages/common/SettingsPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/BookingDetailsPage.js +24 -23
- package/dist/subscriberbot/pages/customer/BookingDetailsPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/CartDetailPage.js +31 -30
- package/dist/subscriberbot/pages/customer/CartDetailPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js +25 -23
- package/dist/subscriberbot/pages/customer/CartDiscoveryPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/CheckoutPage.js +26 -26
- package/dist/subscriberbot/pages/customer/CheckoutPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/CustomerDashboard.js +39 -38
- package/dist/subscriberbot/pages/customer/CustomerDashboard.js.map +1 -1
- package/dist/subscriberbot/pages/customer/CustomerProfilePage.js +36 -36
- package/dist/subscriberbot/pages/customer/CustomerProfilePage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js +37 -36
- package/dist/subscriberbot/pages/customer/DirectServiceBookingPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/FavoritesPage.js +16 -15
- package/dist/subscriberbot/pages/customer/FavoritesPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/OrderHistoryPage.js +19 -17
- package/dist/subscriberbot/pages/customer/OrderHistoryPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/OrderTrackingPage.js +21 -20
- package/dist/subscriberbot/pages/customer/OrderTrackingPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js +22 -21
- package/dist/subscriberbot/pages/customer/PaymentMethodsPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/ReviewsPage.js +29 -28
- package/dist/subscriberbot/pages/customer/ReviewsPage.js.map +1 -1
- package/dist/subscriberbot/pages/customer/SavedAddressesPage.js +26 -25
- package/dist/subscriberbot/pages/customer/SavedAddressesPage.js.map +1 -1
- package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js +46 -46
- package/dist/subscriberbot/pages/investor/InvestmentDetailsPage.js.map +1 -1
- package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js +34 -32
- package/dist/subscriberbot/pages/investor/InvestmentOpportunitiesPage.js.map +1 -1
- package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js +38 -38
- package/dist/subscriberbot/pages/investor/InvestorAnalyticsPage.js.map +1 -1
- package/dist/subscriberbot/pages/investor/InvestorDashboard.js +26 -25
- package/dist/subscriberbot/pages/investor/InvestorDashboard.js.map +1 -1
- package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js +12 -11
- package/dist/subscriberbot/pages/investor/InvestorInvestmentsPage.js.map +1 -1
- package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js +25 -25
- package/dist/subscriberbot/pages/investor/InvestorPortfolioPage.js.map +1 -1
- package/dist/subscriberbot/pages/investor/InvestorProfilePage.js +58 -58
- package/dist/subscriberbot/pages/investor/InvestorProfilePage.js.map +1 -1
- package/dist/subscriberbot/pages/worker/TaskDetailsPage.js +26 -25
- package/dist/subscriberbot/pages/worker/TaskDetailsPage.js.map +1 -1
- package/dist/subscriberbot/pages/worker/WorkerDashboard.js +48 -47
- package/dist/subscriberbot/pages/worker/WorkerDashboard.js.map +1 -1
- package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js +41 -40
- package/dist/subscriberbot/pages/worker/WorkerOrdersPage.js.map +1 -1
- package/dist/subscriberbot/pages/worker/WorkerProfilePage.js +44 -44
- package/dist/subscriberbot/pages/worker/WorkerProfilePage.js.map +1 -1
- package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js +32 -30
- package/dist/subscriberbot/pages/worker/WorkerSchedulePage.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminSettingsPage.js","names":[],"sources":["../../../../src/subscriberbot/pages/admin/AdminSettingsPage.tsx"],"sourcesContent":["/**\n * Admin Settings Page\n * @module subscriberbot/pages/admin\n *\n * Full-featured settings with 5-tab sidebar navigation (General/Security/\n * Notifications/Database/Integrations), dual mobile/desktop tab layout,\n * all form controls, saving state, and save handler.\n */\n\nimport { useState } from 'react';\nimport {\n Settings,\n Shield,\n Bell,\n Database,\n Mail,\n Smartphone,\n Server,\n Save,\n ArrowLeft,\n Globe,\n Lock,\n Clock,\n Key,\n HardDrive,\n Plug,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useSubscriberBot } from '../../context/SubscriberBotContext';\nimport { cn } from '../../utils/cn';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface SystemSettings {\n general: {\n siteName: string;\n siteUrl: string;\n timezone: string;\n language: string;\n currency: string;\n dateFormat: string;\n maintenanceMode: boolean;\n };\n security: {\n passwordPolicy: {\n minLength: number;\n requireUppercase: boolean;\n requireNumbers: boolean;\n requireSymbols: boolean;\n };\n sessionTimeout: number;\n twoFactorAuth: boolean;\n maxLoginAttempts: number;\n };\n notifications: {\n emailNotifications: boolean;\n smsNotifications: boolean;\n adminAlerts: boolean;\n systemAlerts: boolean;\n };\n database: {\n backupFrequency: string;\n retentionPeriod: number;\n autoBackup: boolean;\n lastBackup: string;\n };\n integrations: {\n emailService: string;\n smsService: string;\n paymentGateway: string;\n analyticsService: string;\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminSettingsPage() {\n const { navigateTo } = useSubscriberBot();\n const [saving, setSaving] = useState(false);\n const [activeTab, setActiveTab] = useState('general');\n const [settings, setSettings] = useState<SystemSettings>({\n general: {\n siteName: 'SubscriberBot',\n siteUrl: 'https://subscriberbot.com',\n timezone: 'Asia/Kolkata',\n language: 'en',\n currency: 'INR',\n dateFormat: 'DD/MM/YYYY',\n maintenanceMode: false,\n },\n security: {\n passwordPolicy: {\n minLength: 8,\n requireUppercase: true,\n requireNumbers: true,\n requireSymbols: false,\n },\n sessionTimeout: 60,\n twoFactorAuth: false,\n maxLoginAttempts: 5,\n },\n notifications: {\n emailNotifications: true,\n smsNotifications: true,\n adminAlerts: true,\n systemAlerts: true,\n },\n database: {\n backupFrequency: 'daily',\n retentionPeriod: 30,\n autoBackup: true,\n lastBackup: new Date().toISOString(),\n },\n integrations: {\n emailService: 'sendgrid',\n smsService: 'twilio',\n paymentGateway: 'razorpay',\n analyticsService: 'google',\n },\n });\n\n const handleSave = async () => {\n setSaving(true);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n alert('Settings saved successfully');\n setSaving(false);\n };\n\n const updateSettings = (\n section: keyof SystemSettings,\n field: string,\n value: string | number | boolean\n ) => {\n setSettings((prev) => ({ ...prev, [section]: { ...prev[section], [field]: value } }));\n };\n\n const updateNested = (\n section: keyof SystemSettings,\n nested: string,\n field: string,\n value: string | number | boolean\n ) => {\n setSettings((prev) => ({\n ...prev,\n [section]: {\n ...prev[section],\n [nested]: {\n ...((prev[section] as Record<string, unknown>)[nested] as Record<string, unknown>),\n [field]: value,\n },\n },\n }));\n };\n\n const tabs = [\n { id: 'general', label: 'General', icon: Server },\n { id: 'security', label: 'Security', icon: Shield },\n { id: 'notifications', label: 'Notifications', icon: Bell },\n { id: 'database', label: 'Database', icon: Database },\n { id: 'integrations', label: 'Integrations', icon: Plug },\n ];\n\n const inputCls =\n 'w-full rounded-lg border border-border-subtle bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]';\n const labelCls = 'block text-sm font-medium text-text-secondary mb-2';\n\n return (\n <PageLayout\n title=\"System Settings\"\n description=\"Configure platform-wide settings and policies\"\n actions={\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50\"\n >\n <Save className=\"h-4 w-4\" /> {saving ? 'Saving...' : 'Save Settings'}\n </button>\n </div>\n }\n >\n <div className=\"flex flex-col lg:flex-row gap-6\">\n {/* Mobile Tab Navigation */}\n <div className=\"lg:hidden\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 mb-4\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-2\">\n {tabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex items-center justify-center gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-primary hover:bg-bg-sunken/80'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span>{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Desktop Sidebar */}\n <div className=\"hidden lg:block lg:w-64 lg:shrink-0\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface sticky top-24\">\n <div className=\"p-4 border-b border-border-subtle\">\n <h2 className=\"font-semibold text-text-primary\">Settings</h2>\n </div>\n <nav className=\"p-2\">\n {tabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'w-full text-left px-3 py-2 rounded-lg mb-1 flex items-center gap-3 transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg/10 text-primary font-medium'\n : 'text-text-primary hover:bg-bg-sunken'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span className=\"text-sm\">{tab.label}</span>\n </button>\n );\n })}\n </nav>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n {/* General Tab */}\n {activeTab === 'general' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Globe className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">General Settings</h3>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Site Name</label>\n <input\n type=\"text\"\n value={settings.general.siteName}\n onChange={(e) => updateSettings('general', 'siteName', e.target.value)}\n className={inputCls}\n />\n </div>\n <div>\n <label className={labelCls}>Site URL</label>\n <input\n type=\"text\"\n value={settings.general.siteUrl}\n onChange={(e) => updateSettings('general', 'siteUrl', e.target.value)}\n className={inputCls}\n />\n </div>\n <div>\n <label className={labelCls}>Timezone</label>\n <select\n value={settings.general.timezone}\n onChange={(e) => updateSettings('general', 'timezone', e.target.value)}\n className={inputCls}\n >\n <option value=\"Asia/Kolkata\">Asia/Kolkata (IST)</option>\n <option value=\"UTC\">UTC</option>\n <option value=\"America/New_York\">America/New_York (EST)</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Currency</label>\n <select\n value={settings.general.currency}\n onChange={(e) => updateSettings('general', 'currency', e.target.value)}\n className={inputCls}\n >\n <option value=\"INR\">Indian Rupee (INR)</option>\n <option value=\"USD\">US Dollar (USD)</option>\n <option value=\"EUR\">Euro (EUR)</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Language</label>\n <select\n value={settings.general.language}\n onChange={(e) => updateSettings('general', 'language', e.target.value)}\n className={inputCls}\n >\n <option value=\"en\">English</option>\n <option value=\"hi\">Hindi</option>\n <option value=\"ta\">Tamil</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Date Format</label>\n <select\n value={settings.general.dateFormat}\n onChange={(e) => updateSettings('general', 'dateFormat', e.target.value)}\n className={inputCls}\n >\n <option value=\"DD/MM/YYYY\">DD/MM/YYYY</option>\n <option value=\"MM/DD/YYYY\">MM/DD/YYYY</option>\n <option value=\"YYYY-MM-DD\">YYYY-MM-DD</option>\n </select>\n </div>\n </div>\n <label className=\"flex items-center gap-2 mt-4\">\n <input\n type=\"checkbox\"\n checked={settings.general.maintenanceMode}\n onChange={(e) => updateSettings('general', 'maintenanceMode', e.target.checked)}\n className=\"rounded border-border-subtle text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Enable Maintenance Mode</span>\n </label>\n </div>\n )}\n\n {/* Security Tab */}\n {activeTab === 'security' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Lock className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Security Settings</h3>\n </div>\n <div>\n <h4 className=\"font-medium text-text-primary mb-4\">Password Policy</h4>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Minimum Length</label>\n <input\n type=\"number\"\n value={settings.security.passwordPolicy.minLength}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'minLength',\n parseInt(e.target.value)\n )\n }\n min={6}\n max={50}\n className={inputCls}\n />\n </div>\n <div>\n <label className={labelCls}>Session Timeout (minutes)</label>\n <input\n type=\"number\"\n value={settings.security.sessionTimeout}\n onChange={(e) =>\n updateSettings('security', 'sessionTimeout', parseInt(e.target.value))\n }\n min={15}\n max={480}\n className={inputCls}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mt-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.passwordPolicy.requireUppercase}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'requireUppercase',\n e.target.checked\n )\n }\n className=\"rounded border-border-subtle text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Require Uppercase</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.passwordPolicy.requireNumbers}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'requireNumbers',\n e.target.checked\n )\n }\n className=\"rounded border-border-subtle text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Require Numbers</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.passwordPolicy.requireSymbols}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'requireSymbols',\n e.target.checked\n )\n }\n className=\"rounded border-border-subtle text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Require Symbols</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.twoFactorAuth}\n onChange={(e) =>\n updateSettings('security', 'twoFactorAuth', e.target.checked)\n }\n className=\"rounded border-border-subtle text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Two-Factor Auth</span>\n </label>\n </div>\n </div>\n <div>\n <label className={labelCls}>Max Login Attempts</label>\n <input\n type=\"number\"\n value={settings.security.maxLoginAttempts}\n onChange={(e) =>\n updateSettings('security', 'maxLoginAttempts', parseInt(e.target.value))\n }\n min={1}\n max={20}\n className={cn(inputCls, 'max-w-xs')}\n />\n </div>\n </div>\n )}\n\n {/* Notifications Tab */}\n {activeTab === 'notifications' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Bell className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Notification Settings</h3>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {(\n [\n {\n key: 'emailNotifications' as const,\n label: 'Email Notifications',\n icon: Mail,\n },\n {\n key: 'smsNotifications' as const,\n label: 'SMS Notifications',\n icon: Smartphone,\n },\n { key: 'adminAlerts' as const, label: 'Admin Alerts', icon: Shield },\n { key: 'systemAlerts' as const, label: 'System Alerts', icon: Bell },\n ] as const\n ).map((item) => {\n const ItemIcon = item.icon;\n return (\n <label\n key={item.key}\n className=\"flex items-center gap-3 rounded-lg border border-border-subtle p-4 cursor-pointer hover:bg-accent/50 transition-colors\"\n >\n <input\n type=\"checkbox\"\n checked={settings.notifications[item.key]}\n onChange={(e) =>\n updateSettings('notifications', item.key, e.target.checked)\n }\n className=\"rounded border-border-subtle text-primary focus:ring-primary\"\n />\n <ItemIcon className=\"h-5 w-5 text-text-secondary\" />\n <span className=\"text-sm font-medium text-text-primary\">{item.label}</span>\n </label>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Database Tab */}\n {activeTab === 'database' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <HardDrive className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Database Settings</h3>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Backup Frequency</label>\n <select\n value={settings.database.backupFrequency}\n onChange={(e) =>\n updateSettings('database', 'backupFrequency', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"hourly\">Hourly</option>\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n <option value=\"monthly\">Monthly</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Retention Period (days)</label>\n <input\n type=\"number\"\n value={settings.database.retentionPeriod}\n onChange={(e) =>\n updateSettings('database', 'retentionPeriod', parseInt(e.target.value))\n }\n min={7}\n max={365}\n className={inputCls}\n />\n </div>\n </div>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.database.autoBackup}\n onChange={(e) => updateSettings('database', 'autoBackup', e.target.checked)}\n className=\"rounded border-border-subtle text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Enable Auto Backup</span>\n </label>\n <div className=\"rounded-lg bg-bg-sunken p-4\">\n <p className=\"text-sm text-text-secondary\">Last Backup</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {new Date(settings.database.lastBackup).toLocaleString('en-IN')}\n </p>\n </div>\n </div>\n )}\n\n {/* Integrations Tab */}\n {activeTab === 'integrations' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Plug className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Integrations</h3>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Email Service</label>\n <select\n value={settings.integrations.emailService}\n onChange={(e) =>\n updateSettings('integrations', 'emailService', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"sendgrid\">SendGrid</option>\n <option value=\"ses\">AWS SES</option>\n <option value=\"mailgun\">Mailgun</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>SMS Service</label>\n <select\n value={settings.integrations.smsService}\n onChange={(e) => updateSettings('integrations', 'smsService', e.target.value)}\n className={inputCls}\n >\n <option value=\"twilio\">Twilio</option>\n <option value=\"msg91\">MSG91</option>\n <option value=\"sns\">AWS SNS</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Payment Gateway</label>\n <select\n value={settings.integrations.paymentGateway}\n onChange={(e) =>\n updateSettings('integrations', 'paymentGateway', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"razorpay\">Razorpay</option>\n <option value=\"stripe\">Stripe</option>\n <option value=\"paytm\">Paytm</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Analytics Service</label>\n <select\n value={settings.integrations.analyticsService}\n onChange={(e) =>\n updateSettings('integrations', 'analyticsService', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"google\">Google Analytics</option>\n <option value=\"mixpanel\">Mixpanel</option>\n <option value=\"amplitude\">Amplitude</option>\n </select>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdminSettingsPage.js","names":[],"sources":["../../../../src/subscriberbot/pages/admin/AdminSettingsPage.tsx"],"sourcesContent":["/**\n * Admin Settings Page\n * @module subscriberbot/pages/admin\n *\n * Full-featured settings with 5-tab sidebar navigation (General/Security/\n * Notifications/Database/Integrations), dual mobile/desktop tab layout,\n * all form controls, saving state, and save handler.\n */\n\nimport { useState } from 'react';\nimport {\n Settings,\n Shield,\n Bell,\n Database,\n Mail,\n Smartphone,\n Server,\n Save,\n ArrowLeft,\n Globe,\n Lock,\n Clock,\n Key,\n HardDrive,\n Plug,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useSubscriberBot } from '../../context/SubscriberBotContext';\nimport { cn } from '../../utils/cn';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface SystemSettings {\n general: {\n siteName: string;\n siteUrl: string;\n timezone: string;\n language: string;\n currency: string;\n dateFormat: string;\n maintenanceMode: boolean;\n };\n security: {\n passwordPolicy: {\n minLength: number;\n requireUppercase: boolean;\n requireNumbers: boolean;\n requireSymbols: boolean;\n };\n sessionTimeout: number;\n twoFactorAuth: boolean;\n maxLoginAttempts: number;\n };\n notifications: {\n emailNotifications: boolean;\n smsNotifications: boolean;\n adminAlerts: boolean;\n systemAlerts: boolean;\n };\n database: {\n backupFrequency: string;\n retentionPeriod: number;\n autoBackup: boolean;\n lastBackup: string;\n };\n integrations: {\n emailService: string;\n smsService: string;\n paymentGateway: string;\n analyticsService: string;\n };\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminSettingsPage() {\n const { navigateTo } = useSubscriberBot();\n const [saving, setSaving] = useState(false);\n const [activeTab, setActiveTab] = useState('general');\n const [settings, setSettings] = useState<SystemSettings>({\n general: {\n siteName: 'SubscriberBot',\n siteUrl: 'https://subscriberbot.com',\n timezone: 'Asia/Kolkata',\n language: 'en',\n currency: 'INR',\n dateFormat: 'DD/MM/YYYY',\n maintenanceMode: false,\n },\n security: {\n passwordPolicy: {\n minLength: 8,\n requireUppercase: true,\n requireNumbers: true,\n requireSymbols: false,\n },\n sessionTimeout: 60,\n twoFactorAuth: false,\n maxLoginAttempts: 5,\n },\n notifications: {\n emailNotifications: true,\n smsNotifications: true,\n adminAlerts: true,\n systemAlerts: true,\n },\n database: {\n backupFrequency: 'daily',\n retentionPeriod: 30,\n autoBackup: true,\n lastBackup: new Date().toISOString(),\n },\n integrations: {\n emailService: 'sendgrid',\n smsService: 'twilio',\n paymentGateway: 'razorpay',\n analyticsService: 'google',\n },\n });\n\n const handleSave = async () => {\n setSaving(true);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n alert('Settings saved successfully');\n setSaving(false);\n };\n\n const updateSettings = (\n section: keyof SystemSettings,\n field: string,\n value: string | number | boolean\n ) => {\n setSettings((prev) => ({ ...prev, [section]: { ...prev[section], [field]: value } }));\n };\n\n const updateNested = (\n section: keyof SystemSettings,\n nested: string,\n field: string,\n value: string | number | boolean\n ) => {\n setSettings((prev) => ({\n ...prev,\n [section]: {\n ...prev[section],\n [nested]: {\n ...((prev[section] as Record<string, unknown>)[nested] as Record<string, unknown>),\n [field]: value,\n },\n },\n }));\n };\n\n const tabs = [\n { id: 'general', label: 'General', icon: Server },\n { id: 'security', label: 'Security', icon: Shield },\n { id: 'notifications', label: 'Notifications', icon: Bell },\n { id: 'database', label: 'Database', icon: Database },\n { id: 'integrations', label: 'Integrations', icon: Plug },\n ];\n\n const inputCls =\n 'w-full rounded-lg border border-border-seam bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]';\n const labelCls = 'block text-sm font-medium text-text-secondary mb-2';\n\n return (\n <PageLayout\n title=\"System Settings\"\n description=\"Configure platform-wide settings and policies\"\n actions={\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => navigateTo('/admin')}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-seam px-3 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" /> Back\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50\"\n >\n <Save className=\"h-4 w-4\" /> {saving ? 'Saving...' : 'Save Settings'}\n </button>\n </div>\n }\n >\n <div className=\"flex flex-col lg:flex-row gap-6\">\n {/* Mobile Tab Navigation */}\n <div className=\"lg:hidden\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-3 mb-4\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-2\">\n {tabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'flex items-center justify-center gap-2 rounded-lg px-3 py-2 text-sm font-medium transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-primary hover:bg-bg-sunken/80'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span>{tab.label}</span>\n </button>\n );\n })}\n </div>\n </div>\n </div>\n\n {/* Desktop Sidebar */}\n <div className=\"hidden lg:block lg:w-64 lg:shrink-0\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface sticky top-24\">\n <div className=\"p-4 border-b border-border-seam\">\n <h2 className=\"font-semibold text-text-primary\">Settings</h2>\n </div>\n <nav className=\"p-2\">\n {tabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveTab(tab.id)}\n className={cn(\n 'w-full text-left px-3 py-2 rounded-lg mb-1 flex items-center gap-3 transition-colors',\n activeTab === tab.id\n ? 'bg-action-primary-bg/10 text-primary font-medium'\n : 'text-text-primary hover:bg-bg-sunken'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span className=\"text-sm\">{tab.label}</span>\n </button>\n );\n })}\n </nav>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"rounded-lg border border-border-seam bg-bg-surface p-6\">\n {/* General Tab */}\n {activeTab === 'general' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Globe className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">General Settings</h3>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Site Name</label>\n <input\n type=\"text\"\n value={settings.general.siteName}\n onChange={(e) => updateSettings('general', 'siteName', e.target.value)}\n className={inputCls}\n />\n </div>\n <div>\n <label className={labelCls}>Site URL</label>\n <input\n type=\"text\"\n value={settings.general.siteUrl}\n onChange={(e) => updateSettings('general', 'siteUrl', e.target.value)}\n className={inputCls}\n />\n </div>\n <div>\n <label className={labelCls}>Timezone</label>\n <select\n value={settings.general.timezone}\n onChange={(e) => updateSettings('general', 'timezone', e.target.value)}\n className={inputCls}\n >\n <option value=\"Asia/Kolkata\">Asia/Kolkata (IST)</option>\n <option value=\"UTC\">UTC</option>\n <option value=\"America/New_York\">America/New_York (EST)</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Currency</label>\n <select\n value={settings.general.currency}\n onChange={(e) => updateSettings('general', 'currency', e.target.value)}\n className={inputCls}\n >\n <option value=\"INR\">Indian Rupee (INR)</option>\n <option value=\"USD\">US Dollar (USD)</option>\n <option value=\"EUR\">Euro (EUR)</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Language</label>\n <select\n value={settings.general.language}\n onChange={(e) => updateSettings('general', 'language', e.target.value)}\n className={inputCls}\n >\n <option value=\"en\">English</option>\n <option value=\"hi\">Hindi</option>\n <option value=\"ta\">Tamil</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Date Format</label>\n <select\n value={settings.general.dateFormat}\n onChange={(e) => updateSettings('general', 'dateFormat', e.target.value)}\n className={inputCls}\n >\n <option value=\"DD/MM/YYYY\">DD/MM/YYYY</option>\n <option value=\"MM/DD/YYYY\">MM/DD/YYYY</option>\n <option value=\"YYYY-MM-DD\">YYYY-MM-DD</option>\n </select>\n </div>\n </div>\n <label className=\"flex items-center gap-2 mt-4\">\n <input\n type=\"checkbox\"\n checked={settings.general.maintenanceMode}\n onChange={(e) => updateSettings('general', 'maintenanceMode', e.target.checked)}\n className=\"rounded border-border-seam text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Enable Maintenance Mode</span>\n </label>\n </div>\n )}\n\n {/* Security Tab */}\n {activeTab === 'security' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Lock className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Security Settings</h3>\n </div>\n <div>\n <h4 className=\"font-medium text-text-primary mb-4\">Password Policy</h4>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Minimum Length</label>\n <input\n type=\"number\"\n value={settings.security.passwordPolicy.minLength}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'minLength',\n parseInt(e.target.value)\n )\n }\n min={6}\n max={50}\n className={inputCls}\n />\n </div>\n <div>\n <label className={labelCls}>Session Timeout (minutes)</label>\n <input\n type=\"number\"\n value={settings.security.sessionTimeout}\n onChange={(e) =>\n updateSettings('security', 'sessionTimeout', parseInt(e.target.value))\n }\n min={15}\n max={480}\n className={inputCls}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mt-4\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.passwordPolicy.requireUppercase}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'requireUppercase',\n e.target.checked\n )\n }\n className=\"rounded border-border-seam text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Require Uppercase</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.passwordPolicy.requireNumbers}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'requireNumbers',\n e.target.checked\n )\n }\n className=\"rounded border-border-seam text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Require Numbers</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.passwordPolicy.requireSymbols}\n onChange={(e) =>\n updateNested(\n 'security',\n 'passwordPolicy',\n 'requireSymbols',\n e.target.checked\n )\n }\n className=\"rounded border-border-seam text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Require Symbols</span>\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.security.twoFactorAuth}\n onChange={(e) =>\n updateSettings('security', 'twoFactorAuth', e.target.checked)\n }\n className=\"rounded border-border-seam text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Two-Factor Auth</span>\n </label>\n </div>\n </div>\n <div>\n <label className={labelCls}>Max Login Attempts</label>\n <input\n type=\"number\"\n value={settings.security.maxLoginAttempts}\n onChange={(e) =>\n updateSettings('security', 'maxLoginAttempts', parseInt(e.target.value))\n }\n min={1}\n max={20}\n className={cn(inputCls, 'max-w-xs')}\n />\n </div>\n </div>\n )}\n\n {/* Notifications Tab */}\n {activeTab === 'notifications' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Bell className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Notification Settings</h3>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {(\n [\n {\n key: 'emailNotifications' as const,\n label: 'Email Notifications',\n icon: Mail,\n },\n {\n key: 'smsNotifications' as const,\n label: 'SMS Notifications',\n icon: Smartphone,\n },\n { key: 'adminAlerts' as const, label: 'Admin Alerts', icon: Shield },\n { key: 'systemAlerts' as const, label: 'System Alerts', icon: Bell },\n ] as const\n ).map((item) => {\n const ItemIcon = item.icon;\n return (\n <label\n key={item.key}\n className=\"flex items-center gap-3 rounded-lg border border-border-seam p-4 cursor-pointer hover:bg-accent/50 transition-colors\"\n >\n <input\n type=\"checkbox\"\n checked={settings.notifications[item.key]}\n onChange={(e) =>\n updateSettings('notifications', item.key, e.target.checked)\n }\n className=\"rounded border-border-seam text-primary focus:ring-primary\"\n />\n <ItemIcon className=\"h-5 w-5 text-text-secondary\" />\n <span className=\"text-sm font-medium text-text-primary\">{item.label}</span>\n </label>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Database Tab */}\n {activeTab === 'database' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <HardDrive className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Database Settings</h3>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Backup Frequency</label>\n <select\n value={settings.database.backupFrequency}\n onChange={(e) =>\n updateSettings('database', 'backupFrequency', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"hourly\">Hourly</option>\n <option value=\"daily\">Daily</option>\n <option value=\"weekly\">Weekly</option>\n <option value=\"monthly\">Monthly</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Retention Period (days)</label>\n <input\n type=\"number\"\n value={settings.database.retentionPeriod}\n onChange={(e) =>\n updateSettings('database', 'retentionPeriod', parseInt(e.target.value))\n }\n min={7}\n max={365}\n className={inputCls}\n />\n </div>\n </div>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={settings.database.autoBackup}\n onChange={(e) => updateSettings('database', 'autoBackup', e.target.checked)}\n className=\"rounded border-border-seam text-primary focus:ring-primary\"\n />\n <span className=\"text-sm text-text-primary\">Enable Auto Backup</span>\n </label>\n <div className=\"rounded-lg bg-bg-sunken p-4\">\n <p className=\"text-sm text-text-secondary\">Last Backup</p>\n <p className=\"text-sm font-medium text-text-primary\">\n {new Date(settings.database.lastBackup).toLocaleString('en-IN')}\n </p>\n </div>\n </div>\n )}\n\n {/* Integrations Tab */}\n {activeTab === 'integrations' && (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Plug className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-lg font-semibold text-text-primary\">Integrations</h3>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className={labelCls}>Email Service</label>\n <select\n value={settings.integrations.emailService}\n onChange={(e) =>\n updateSettings('integrations', 'emailService', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"sendgrid\">SendGrid</option>\n <option value=\"ses\">AWS SES</option>\n <option value=\"mailgun\">Mailgun</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>SMS Service</label>\n <select\n value={settings.integrations.smsService}\n onChange={(e) => updateSettings('integrations', 'smsService', e.target.value)}\n className={inputCls}\n >\n <option value=\"twilio\">Twilio</option>\n <option value=\"msg91\">MSG91</option>\n <option value=\"sns\">AWS SNS</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Payment Gateway</label>\n <select\n value={settings.integrations.paymentGateway}\n onChange={(e) =>\n updateSettings('integrations', 'paymentGateway', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"razorpay\">Razorpay</option>\n <option value=\"stripe\">Stripe</option>\n <option value=\"paytm\">Paytm</option>\n </select>\n </div>\n <div>\n <label className={labelCls}>Analytics Service</label>\n <select\n value={settings.integrations.analyticsService}\n onChange={(e) =>\n updateSettings('integrations', 'analyticsService', e.target.value)\n }\n className={inputCls}\n >\n <option value=\"google\">Google Analytics</option>\n <option value=\"mixpanel\">Mixpanel</option>\n <option value=\"amplitude\">Amplitude</option>\n </select>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -160,22 +160,22 @@ function x() {
|
|
|
160
160
|
month: "short",
|
|
161
161
|
day: "numeric"
|
|
162
162
|
}), H = (e) => e.isVerified ? /* @__PURE__ */ v("span", {
|
|
163
|
-
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-
|
|
163
|
+
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-status-success-bg/20 text-status-success-text",
|
|
164
164
|
children: "Verified"
|
|
165
165
|
}) : e.inspectionStatus === "pending" ? /* @__PURE__ */ v("span", {
|
|
166
|
-
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-
|
|
166
|
+
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-status-warning-bg/20 text-status-warning-text",
|
|
167
167
|
children: "Pending Review"
|
|
168
168
|
}) : e.inspectionStatus === "scheduled" ? /* @__PURE__ */ v("span", {
|
|
169
|
-
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-
|
|
169
|
+
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-status-info-bg/20 text-status-info-text",
|
|
170
170
|
children: "Inspection Scheduled"
|
|
171
171
|
}) : e.inspectionStatus === "failed" ? /* @__PURE__ */ v("span", {
|
|
172
|
-
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-
|
|
172
|
+
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-status-error-bg/20 text-status-error-text",
|
|
173
173
|
children: "Rejected"
|
|
174
174
|
}) : /* @__PURE__ */ v("span", {
|
|
175
175
|
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-secondary text-secondary-foreground",
|
|
176
176
|
children: "Under Review"
|
|
177
177
|
}), U = (e) => e ? /* @__PURE__ */ v("span", {
|
|
178
|
-
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-
|
|
178
|
+
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-status-success-bg/20 text-status-success-text",
|
|
179
179
|
children: "Active"
|
|
180
180
|
}) : /* @__PURE__ */ v("span", {
|
|
181
181
|
className: "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium bg-secondary text-secondary-foreground",
|
|
@@ -183,7 +183,7 @@ function x() {
|
|
|
183
183
|
}), W = (e) => /* @__PURE__ */ v("div", {
|
|
184
184
|
className: "w-full bg-bg-sunken rounded-full h-2",
|
|
185
185
|
children: /* @__PURE__ */ v("div", {
|
|
186
|
-
className: t("h-2 rounded-full", e >= 80 ? "bg-
|
|
186
|
+
className: t("h-2 rounded-full", e >= 80 ? "bg-status-success-text" : e >= 60 ? "bg-status-warning-text" : "bg-status-error-text"),
|
|
187
187
|
style: { width: `${e}%` }
|
|
188
188
|
})
|
|
189
189
|
});
|
|
@@ -216,17 +216,17 @@ function x() {
|
|
|
216
216
|
{
|
|
217
217
|
label: "Active",
|
|
218
218
|
value: I.activeCarts,
|
|
219
|
-
cls: "bg-
|
|
219
|
+
cls: "bg-status-success-bg/10 border-status-success-border/30"
|
|
220
220
|
},
|
|
221
221
|
{
|
|
222
222
|
label: "Pending",
|
|
223
223
|
value: I.pendingApproval,
|
|
224
|
-
cls: "bg-
|
|
224
|
+
cls: "bg-status-warning-bg/10 border-status-warning-border/30"
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
label: "Rejected",
|
|
228
228
|
value: I.rejectedCarts,
|
|
229
|
-
cls: "bg-
|
|
229
|
+
cls: "bg-status-error-bg/10 border-status-error-border/30"
|
|
230
230
|
},
|
|
231
231
|
{
|
|
232
232
|
label: "Total Revenue",
|
|
@@ -241,10 +241,10 @@ function x() {
|
|
|
241
241
|
{
|
|
242
242
|
label: "New Apps",
|
|
243
243
|
value: I.newApplications,
|
|
244
|
-
cls: "bg-
|
|
244
|
+
cls: "bg-status-info-bg/10 border-status-info-border/30"
|
|
245
245
|
}
|
|
246
246
|
].map((e) => /* @__PURE__ */ y("div", {
|
|
247
|
-
className: t("rounded-lg border border-border-
|
|
247
|
+
className: t("rounded-lg border border-border-seam bg-bg-surface p-3", e.cls),
|
|
248
248
|
children: [/* @__PURE__ */ v("p", {
|
|
249
249
|
className: "text-xs text-text-secondary",
|
|
250
250
|
children: e.label
|
|
@@ -255,7 +255,7 @@ function x() {
|
|
|
255
255
|
}, e.label))
|
|
256
256
|
}),
|
|
257
257
|
/* @__PURE__ */ v("div", {
|
|
258
|
-
className: "rounded-lg border border-border-
|
|
258
|
+
className: "rounded-lg border border-border-seam bg-bg-surface p-4 mb-6",
|
|
259
259
|
children: /* @__PURE__ */ y("div", {
|
|
260
260
|
className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-3",
|
|
261
261
|
children: [
|
|
@@ -266,13 +266,13 @@ function x() {
|
|
|
266
266
|
placeholder: "Search carts...",
|
|
267
267
|
value: P.searchQuery,
|
|
268
268
|
onChange: (e) => R("searchQuery", e.target.value),
|
|
269
|
-
className: "w-full rounded-lg border border-border-
|
|
269
|
+
className: "w-full rounded-lg border border-border-seam bg-bg-surface py-2 pl-10 pr-4 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
|
|
270
270
|
})]
|
|
271
271
|
}),
|
|
272
272
|
/* @__PURE__ */ y("select", {
|
|
273
273
|
value: P.status,
|
|
274
274
|
onChange: (e) => R("status", e.target.value),
|
|
275
|
-
className: "rounded-lg border border-border-
|
|
275
|
+
className: "rounded-lg border border-border-seam bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
276
276
|
children: [
|
|
277
277
|
/* @__PURE__ */ v("option", {
|
|
278
278
|
value: "",
|
|
@@ -291,7 +291,7 @@ function x() {
|
|
|
291
291
|
/* @__PURE__ */ y("select", {
|
|
292
292
|
value: P.verificationStatus,
|
|
293
293
|
onChange: (e) => R("verificationStatus", e.target.value),
|
|
294
|
-
className: "rounded-lg border border-border-
|
|
294
|
+
className: "rounded-lg border border-border-seam bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
295
295
|
children: [
|
|
296
296
|
/* @__PURE__ */ v("option", {
|
|
297
297
|
value: "",
|
|
@@ -314,7 +314,7 @@ function x() {
|
|
|
314
314
|
/* @__PURE__ */ y("select", {
|
|
315
315
|
value: P.category,
|
|
316
316
|
onChange: (e) => R("category", e.target.value),
|
|
317
|
-
className: "rounded-lg border border-border-
|
|
317
|
+
className: "rounded-lg border border-border-seam bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
318
318
|
children: [
|
|
319
319
|
/* @__PURE__ */ v("option", {
|
|
320
320
|
value: "",
|
|
@@ -343,12 +343,12 @@ function x() {
|
|
|
343
343
|
placeholder: "Location...",
|
|
344
344
|
value: P.location,
|
|
345
345
|
onChange: (e) => R("location", e.target.value),
|
|
346
|
-
className: "rounded-lg border border-border-
|
|
346
|
+
className: "rounded-lg border border-border-seam bg-bg-surface py-2 px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
|
|
347
347
|
}),
|
|
348
348
|
/* @__PURE__ */ y("select", {
|
|
349
349
|
value: P.sortBy,
|
|
350
350
|
onChange: (e) => R("sortBy", e.target.value),
|
|
351
|
-
className: "rounded-lg border border-border-
|
|
351
|
+
className: "rounded-lg border border-border-seam bg-bg-surface py-2 px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
|
|
352
352
|
children: [
|
|
353
353
|
/* @__PURE__ */ v("option", {
|
|
354
354
|
value: "recent",
|
|
@@ -376,12 +376,12 @@ function x() {
|
|
|
376
376
|
})
|
|
377
377
|
}),
|
|
378
378
|
/* @__PURE__ */ y("div", {
|
|
379
|
-
className: "rounded-lg border border-border-
|
|
379
|
+
className: "rounded-lg border border-border-seam bg-bg-surface overflow-hidden",
|
|
380
380
|
children: [
|
|
381
381
|
/* @__PURE__ */ v("div", {
|
|
382
382
|
className: "block md:hidden space-y-4 p-4",
|
|
383
383
|
children: S.map((e) => /* @__PURE__ */ y("div", {
|
|
384
|
-
className: "rounded-lg border border-border-
|
|
384
|
+
className: "rounded-lg border border-border-seam bg-bg-sunken/30 p-4",
|
|
385
385
|
children: [
|
|
386
386
|
/* @__PURE__ */ y("div", {
|
|
387
387
|
className: "flex items-center mb-3",
|
|
@@ -443,7 +443,7 @@ function x() {
|
|
|
443
443
|
U(e.isActive),
|
|
444
444
|
H(e),
|
|
445
445
|
e.rating > 0 && /* @__PURE__ */ y("span", {
|
|
446
|
-
className: "inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium bg-
|
|
446
|
+
className: "inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium bg-status-warning-bg/20 text-status-warning-text",
|
|
447
447
|
children: [
|
|
448
448
|
/* @__PURE__ */ v(p, { className: "h-3 w-3 fill-current" }),
|
|
449
449
|
e.rating,
|
|
@@ -488,7 +488,7 @@ function x() {
|
|
|
488
488
|
/* @__PURE__ */ v("button", {
|
|
489
489
|
type: "button",
|
|
490
490
|
onClick: () => z(e, "view"),
|
|
491
|
-
className: "flex-1 rounded-lg border border-border-
|
|
491
|
+
className: "flex-1 rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
492
492
|
children: "View Details"
|
|
493
493
|
}),
|
|
494
494
|
!e.isVerified && e.inspectionStatus !== "failed" && /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("button", {
|
|
@@ -499,19 +499,19 @@ function x() {
|
|
|
499
499
|
}), /* @__PURE__ */ v("button", {
|
|
500
500
|
type: "button",
|
|
501
501
|
onClick: () => z(e, "reject"),
|
|
502
|
-
className: "rounded-lg border border-border-
|
|
502
|
+
className: "rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-status-error-text hover:bg-status-error-bg/10 transition-colors",
|
|
503
503
|
children: "Reject"
|
|
504
504
|
})] }),
|
|
505
505
|
e.inspectionStatus === "pending" && /* @__PURE__ */ v("button", {
|
|
506
506
|
type: "button",
|
|
507
507
|
onClick: () => z(e, "inspect"),
|
|
508
|
-
className: "rounded-lg border border-border-
|
|
508
|
+
className: "rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
509
509
|
children: "Inspect"
|
|
510
510
|
}),
|
|
511
511
|
e.isActive && /* @__PURE__ */ v("button", {
|
|
512
512
|
type: "button",
|
|
513
513
|
onClick: () => z(e, "suspend"),
|
|
514
|
-
className: "rounded-lg border border-border-
|
|
514
|
+
className: "rounded-lg border border-border-seam px-3 py-1.5 text-sm font-medium text-status-error-text hover:bg-status-error-bg/10 transition-colors",
|
|
515
515
|
children: "Suspend"
|
|
516
516
|
})
|
|
517
517
|
]
|
|
@@ -524,7 +524,7 @@ function x() {
|
|
|
524
524
|
children: /* @__PURE__ */ y("table", {
|
|
525
525
|
className: "w-full",
|
|
526
526
|
children: [/* @__PURE__ */ v("thead", { children: /* @__PURE__ */ y("tr", {
|
|
527
|
-
className: "border-b border-border-
|
|
527
|
+
className: "border-b border-border-seam bg-bg-sunken/50",
|
|
528
528
|
children: [
|
|
529
529
|
/* @__PURE__ */ v("th", {
|
|
530
530
|
className: "px-4 py-3 text-left text-xs font-medium text-text-secondary uppercase tracking-wider",
|
|
@@ -611,7 +611,7 @@ function x() {
|
|
|
611
611
|
e.rating > 0 && /* @__PURE__ */ y("div", {
|
|
612
612
|
className: "text-sm flex items-center gap-1 mt-1",
|
|
613
613
|
children: [
|
|
614
|
-
/* @__PURE__ */ v(p, { className: "h-3 w-3 fill-
|
|
614
|
+
/* @__PURE__ */ v(p, { className: "h-3 w-3 fill-status-warning-text text-status-warning-text" }),
|
|
615
615
|
e.rating,
|
|
616
616
|
" ",
|
|
617
617
|
/* @__PURE__ */ y("span", {
|
|
@@ -681,25 +681,25 @@ function x() {
|
|
|
681
681
|
children: [/* @__PURE__ */ v("button", {
|
|
682
682
|
type: "button",
|
|
683
683
|
onClick: () => z(e, "approve"),
|
|
684
|
-
className: "rounded p-1.5 text-text-secondary hover:text-
|
|
684
|
+
className: "rounded p-1.5 text-text-secondary hover:text-status-success-text hover:bg-status-success-bg/10 transition-colors",
|
|
685
685
|
children: /* @__PURE__ */ v(s, { className: "h-4 w-4" })
|
|
686
686
|
}), /* @__PURE__ */ v("button", {
|
|
687
687
|
type: "button",
|
|
688
688
|
onClick: () => z(e, "reject"),
|
|
689
|
-
className: "rounded p-1.5 text-text-secondary hover:text-
|
|
689
|
+
className: "rounded p-1.5 text-text-secondary hover:text-status-error-text hover:bg-status-error-bg/10 transition-colors",
|
|
690
690
|
children: /* @__PURE__ */ v(g, { className: "h-4 w-4" })
|
|
691
691
|
})]
|
|
692
692
|
}),
|
|
693
693
|
e.inspectionStatus === "pending" && /* @__PURE__ */ y("button", {
|
|
694
694
|
type: "button",
|
|
695
695
|
onClick: () => z(e, "inspect"),
|
|
696
|
-
className: "rounded p-1.5 text-text-secondary hover:text-
|
|
696
|
+
className: "rounded p-1.5 text-text-secondary hover:text-status-info-text hover:bg-status-info-bg/10 transition-colors inline-flex items-center gap-1 text-xs",
|
|
697
697
|
children: [/* @__PURE__ */ v(c, { className: "h-4 w-4" }), " Inspect"]
|
|
698
698
|
}),
|
|
699
699
|
e.isActive && /* @__PURE__ */ v("button", {
|
|
700
700
|
type: "button",
|
|
701
701
|
onClick: () => z(e, "suspend"),
|
|
702
|
-
className: "rounded p-1.5 text-text-secondary hover:text-
|
|
702
|
+
className: "rounded p-1.5 text-text-secondary hover:text-status-error-text hover:bg-status-error-bg/10 transition-colors",
|
|
703
703
|
children: /* @__PURE__ */ v(d, { className: "h-4 w-4" })
|
|
704
704
|
})
|
|
705
705
|
]
|
|
@@ -720,11 +720,11 @@ function x() {
|
|
|
720
720
|
]
|
|
721
721
|
}),
|
|
722
722
|
O && E && /* @__PURE__ */ v("div", {
|
|
723
|
-
className: "fixed inset-0 z-50 flex items-center justify-center bg-
|
|
723
|
+
className: "fixed inset-0 z-50 flex items-center justify-center bg-bg-canvas/50 p-4",
|
|
724
724
|
children: /* @__PURE__ */ y("div", {
|
|
725
|
-
className: "w-full max-w-2xl rounded-lg border border-border-
|
|
725
|
+
className: "w-full max-w-2xl rounded-lg border border-border-seam bg-bg-surface shadow-lg max-h-[90vh] overflow-y-auto",
|
|
726
726
|
children: [/* @__PURE__ */ y("div", {
|
|
727
|
-
className: "flex items-center justify-between p-4 border-b border-border-
|
|
727
|
+
className: "flex items-center justify-between p-4 border-b border-border-seam",
|
|
728
728
|
children: [/* @__PURE__ */ v("h3", {
|
|
729
729
|
className: "text-lg font-semibold text-text-primary",
|
|
730
730
|
children: A === "view" ? "Cart Details" : A === "approve" ? "Approve Cart" : A === "reject" ? "Reject Cart" : A === "suspend" ? "Suspend Cart" : "Schedule Inspection"
|
|
@@ -815,12 +815,12 @@ function x() {
|
|
|
815
815
|
]
|
|
816
816
|
}),
|
|
817
817
|
E.rejectionReason && /* @__PURE__ */ y("div", {
|
|
818
|
-
className: "rounded-lg border border-
|
|
818
|
+
className: "rounded-lg border border-status-error-border/30 bg-status-error-bg/10 p-4",
|
|
819
819
|
children: [/* @__PURE__ */ v("p", {
|
|
820
|
-
className: "text-sm font-medium text-
|
|
820
|
+
className: "text-sm font-medium text-status-error-text",
|
|
821
821
|
children: "Previous Rejection Reason:"
|
|
822
822
|
}), /* @__PURE__ */ v("p", {
|
|
823
|
-
className: "text-sm text-
|
|
823
|
+
className: "text-sm text-status-error-text/80",
|
|
824
824
|
children: E.rejectionReason
|
|
825
825
|
})]
|
|
826
826
|
}),
|
|
@@ -828,16 +828,16 @@ function x() {
|
|
|
828
828
|
className: "block text-sm font-medium text-text-primary mb-2",
|
|
829
829
|
children: "Rejection Reason *"
|
|
830
830
|
}), /* @__PURE__ */ v("textarea", {
|
|
831
|
-
className: "w-full rounded-lg border border-border-
|
|
831
|
+
className: "w-full rounded-lg border border-border-seam bg-bg-surface p-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] min-h-[100px]",
|
|
832
832
|
rows: 4,
|
|
833
833
|
value: M,
|
|
834
834
|
onChange: (e) => N(e.target.value),
|
|
835
835
|
placeholder: "Please provide a detailed reason for rejection..."
|
|
836
836
|
})] }),
|
|
837
837
|
A === "approve" && /* @__PURE__ */ v("div", {
|
|
838
|
-
className: "rounded-lg border border-
|
|
838
|
+
className: "rounded-lg border border-status-success-border/30 bg-status-success-bg/10 p-4",
|
|
839
839
|
children: /* @__PURE__ */ v("p", {
|
|
840
|
-
className: "text-sm text-
|
|
840
|
+
className: "text-sm text-status-success-text",
|
|
841
841
|
children: "This will approve the cart for operation on the platform. The cart owner will be notified and the cart will become active."
|
|
842
842
|
})
|
|
843
843
|
}),
|
|
@@ -846,7 +846,7 @@ function x() {
|
|
|
846
846
|
children: [/* @__PURE__ */ v("button", {
|
|
847
847
|
type: "button",
|
|
848
848
|
onClick: () => k(!1),
|
|
849
|
-
className: "flex-1 rounded-lg border border-border-
|
|
849
|
+
className: "flex-1 rounded-lg border border-border-seam py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors",
|
|
850
850
|
children: "Cancel"
|
|
851
851
|
}), A !== "view" && /* @__PURE__ */ v("button", {
|
|
852
852
|
type: "button",
|