@burdenoff/microfe-coolandlovely 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/coolandlovely/CoolAndLovelyRoot.d.ts +5 -0
- package/dist/coolandlovely/CoolAndLovelyRoot.d.ts.map +1 -0
- package/dist/coolandlovely/CoolAndLovelyRoot.js +177 -0
- package/dist/coolandlovely/CoolAndLovelyRoot.js.map +1 -0
- package/dist/coolandlovely/CoolAndLovelyRoutes.d.ts +4 -0
- package/dist/coolandlovely/CoolAndLovelyRoutes.d.ts.map +1 -0
- package/dist/coolandlovely/CoolAndLovelyRoutes.js +215 -0
- package/dist/coolandlovely/CoolAndLovelyRoutes.js.map +1 -0
- package/dist/coolandlovely/components/CartCard.d.ts +18 -0
- package/dist/coolandlovely/components/CartCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/EmptyState.d.ts +12 -0
- package/dist/coolandlovely/components/EmptyState.d.ts.map +1 -0
- package/dist/coolandlovely/components/EmptyState.js +28 -0
- package/dist/coolandlovely/components/EmptyState.js.map +1 -0
- package/dist/coolandlovely/components/InvestmentCard.d.ts +18 -0
- package/dist/coolandlovely/components/InvestmentCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/InvestmentCard.js +96 -0
- package/dist/coolandlovely/components/InvestmentCard.js.map +1 -0
- package/dist/coolandlovely/components/MetricsCard.d.ts +14 -0
- package/dist/coolandlovely/components/MetricsCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/MetricsCard.js +46 -0
- package/dist/coolandlovely/components/MetricsCard.js.map +1 -0
- package/dist/coolandlovely/components/OrderCard.d.ts +18 -0
- package/dist/coolandlovely/components/OrderCard.d.ts.map +1 -0
- package/dist/coolandlovely/components/PageLayout.d.ts +12 -0
- package/dist/coolandlovely/components/PageLayout.d.ts.map +1 -0
- package/dist/coolandlovely/components/PageLayout.js +26 -0
- package/dist/coolandlovely/components/PageLayout.js.map +1 -0
- package/dist/coolandlovely/components/RatingDisplay.d.ts +12 -0
- package/dist/coolandlovely/components/RatingDisplay.d.ts.map +1 -0
- package/dist/coolandlovely/components/RatingDisplay.js +35 -0
- package/dist/coolandlovely/components/RatingDisplay.js.map +1 -0
- package/dist/coolandlovely/components/StatusBadge.d.ts +9 -0
- package/dist/coolandlovely/components/StatusBadge.d.ts.map +1 -0
- package/dist/coolandlovely/components/StatusBadge.js +45 -0
- package/dist/coolandlovely/components/StatusBadge.js.map +1 -0
- package/dist/coolandlovely/components/index.d.ts +13 -0
- package/dist/coolandlovely/components/index.d.ts.map +1 -0
- package/dist/coolandlovely/context/CoolAndLovelyContext.d.ts +16 -0
- package/dist/coolandlovely/context/CoolAndLovelyContext.d.ts.map +1 -0
- package/dist/coolandlovely/context/CoolAndLovelyContext.js +93 -0
- package/dist/coolandlovely/context/CoolAndLovelyContext.js.map +1 -0
- package/dist/coolandlovely/context/index.d.ts +6 -0
- package/dist/coolandlovely/context/index.d.ts.map +1 -0
- package/dist/coolandlovely/context/index.js +1 -0
- package/dist/coolandlovely/hooks/index.d.ts +2 -0
- package/dist/coolandlovely/hooks/index.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.d.ts +44 -0
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.d.ts.map +1 -0
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.js +223 -0
- package/dist/coolandlovely/hooks/useCoolAndLovelyApi.js.map +1 -0
- package/dist/coolandlovely/index.d.ts +11 -0
- package/dist/coolandlovely/index.d.ts.map +1 -0
- package/dist/coolandlovely/index.js +7 -0
- package/dist/coolandlovely/mocks/data.d.ts +61 -0
- package/dist/coolandlovely/mocks/data.d.ts.map +1 -0
- package/dist/coolandlovely/mocks/data.js +1517 -0
- package/dist/coolandlovely/mocks/data.js.map +1 -0
- package/dist/coolandlovely/mocks/index.d.ts +7 -0
- package/dist/coolandlovely/mocks/index.d.ts.map +1 -0
- package/dist/coolandlovely/mocks/users.d.ts +18 -0
- package/dist/coolandlovely/mocks/users.d.ts.map +1 -0
- package/dist/coolandlovely/mocks/users.js +34 -0
- package/dist/coolandlovely/mocks/users.js.map +1 -0
- package/dist/coolandlovely/pages/HomePage.d.ts +10 -0
- package/dist/coolandlovely/pages/HomePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/HomePage.js +921 -0
- package/dist/coolandlovely/pages/HomePage.js.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminAnalyticsPage.d.ts +11 -0
- package/dist/coolandlovely/pages/admin/AdminAnalyticsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminAnalyticsPage.js +645 -0
- package/dist/coolandlovely/pages/admin/AdminAnalyticsPage.js.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminDashboard.d.ts +10 -0
- package/dist/coolandlovely/pages/admin/AdminDashboard.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminDashboard.js +639 -0
- package/dist/coolandlovely/pages/admin/AdminDashboard.js.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminFinancialPage.d.ts +11 -0
- package/dist/coolandlovely/pages/admin/AdminFinancialPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminFinancialPage.js +421 -0
- package/dist/coolandlovely/pages/admin/AdminFinancialPage.js.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminOrdersPage.d.ts +10 -0
- package/dist/coolandlovely/pages/admin/AdminOrdersPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminOrdersPage.js +660 -0
- package/dist/coolandlovely/pages/admin/AdminOrdersPage.js.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminProfilePage.d.ts +10 -0
- package/dist/coolandlovely/pages/admin/AdminProfilePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminProfilePage.js +259 -0
- package/dist/coolandlovely/pages/admin/AdminProfilePage.js.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminSettingsPage.d.ts +10 -0
- package/dist/coolandlovely/pages/admin/AdminSettingsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/AdminSettingsPage.js +649 -0
- package/dist/coolandlovely/pages/admin/AdminSettingsPage.js.map +1 -0
- package/dist/coolandlovely/pages/admin/CartManagementPage.d.ts +10 -0
- package/dist/coolandlovely/pages/admin/CartManagementPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/CartManagementPage.js +869 -0
- package/dist/coolandlovely/pages/admin/CartManagementPage.js.map +1 -0
- package/dist/coolandlovely/pages/admin/UserManagementPage.d.ts +10 -0
- package/dist/coolandlovely/pages/admin/UserManagementPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/admin/UserManagementPage.js +893 -0
- package/dist/coolandlovely/pages/admin/UserManagementPage.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/AnalyticsDashboard.d.ts +12 -0
- package/dist/coolandlovely/pages/cart-owner/AnalyticsDashboard.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/AnalyticsDashboard.js +834 -0
- package/dist/coolandlovely/pages/cart-owner/AnalyticsDashboard.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/BusinessSettingsPage.d.ts +11 -0
- package/dist/coolandlovely/pages/cart-owner/BusinessSettingsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/BusinessSettingsPage.js +700 -0
- package/dist/coolandlovely/pages/cart-owner/BusinessSettingsPage.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerDashboard.d.ts +11 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerDashboard.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerDashboard.js +760 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerDashboard.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerProfilePage.d.ts +12 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerProfilePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerProfilePage.js +886 -0
- package/dist/coolandlovely/pages/cart-owner/CartOwnerProfilePage.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/CartServiceConfigPage.d.ts +11 -0
- package/dist/coolandlovely/pages/cart-owner/CartServiceConfigPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/CartServiceConfigPage.js +631 -0
- package/dist/coolandlovely/pages/cart-owner/CartServiceConfigPage.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/InventoryManagementPage.d.ts +11 -0
- package/dist/coolandlovely/pages/cart-owner/InventoryManagementPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/InventoryManagementPage.js +913 -0
- package/dist/coolandlovely/pages/cart-owner/InventoryManagementPage.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/OrderManagementPage.d.ts +10 -0
- package/dist/coolandlovely/pages/cart-owner/OrderManagementPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/OrderManagementPage.js +881 -0
- package/dist/coolandlovely/pages/cart-owner/OrderManagementPage.js.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/StaffManagementPage.d.ts +11 -0
- package/dist/coolandlovely/pages/cart-owner/StaffManagementPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/cart-owner/StaffManagementPage.js +833 -0
- package/dist/coolandlovely/pages/cart-owner/StaffManagementPage.js.map +1 -0
- package/dist/coolandlovely/pages/common/HelpSupportPage.d.ts +11 -0
- package/dist/coolandlovely/pages/common/HelpSupportPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/common/HelpSupportPage.js +1325 -0
- package/dist/coolandlovely/pages/common/HelpSupportPage.js.map +1 -0
- package/dist/coolandlovely/pages/common/NotificationCenterPage.d.ts +11 -0
- package/dist/coolandlovely/pages/common/NotificationCenterPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/common/NotificationCenterPage.js +665 -0
- package/dist/coolandlovely/pages/common/NotificationCenterPage.js.map +1 -0
- package/dist/coolandlovely/pages/common/SettingsPage.d.ts +9 -0
- package/dist/coolandlovely/pages/common/SettingsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/common/SettingsPage.js +964 -0
- package/dist/coolandlovely/pages/common/SettingsPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/BookingDetailsPage.d.ts +12 -0
- package/dist/coolandlovely/pages/customer/BookingDetailsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/BookingDetailsPage.js +593 -0
- package/dist/coolandlovely/pages/customer/BookingDetailsPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/CartDetailPage.d.ts +13 -0
- package/dist/coolandlovely/pages/customer/CartDetailPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/CartDetailPage.js +620 -0
- package/dist/coolandlovely/pages/customer/CartDetailPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/CartDiscoveryPage.d.ts +11 -0
- package/dist/coolandlovely/pages/customer/CartDiscoveryPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/CartDiscoveryPage.js +547 -0
- package/dist/coolandlovely/pages/customer/CartDiscoveryPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/CheckoutPage.d.ts +9 -0
- package/dist/coolandlovely/pages/customer/CheckoutPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/CheckoutPage.js +532 -0
- package/dist/coolandlovely/pages/customer/CheckoutPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/CustomerDashboard.d.ts +10 -0
- package/dist/coolandlovely/pages/customer/CustomerDashboard.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/CustomerDashboard.js +496 -0
- package/dist/coolandlovely/pages/customer/CustomerDashboard.js.map +1 -0
- package/dist/coolandlovely/pages/customer/CustomerProfilePage.d.ts +10 -0
- package/dist/coolandlovely/pages/customer/CustomerProfilePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/CustomerProfilePage.js +621 -0
- package/dist/coolandlovely/pages/customer/CustomerProfilePage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/DirectServiceBookingPage.d.ts +12 -0
- package/dist/coolandlovely/pages/customer/DirectServiceBookingPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/DirectServiceBookingPage.js +623 -0
- package/dist/coolandlovely/pages/customer/DirectServiceBookingPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/FavoritesPage.d.ts +11 -0
- package/dist/coolandlovely/pages/customer/FavoritesPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/FavoritesPage.js +477 -0
- package/dist/coolandlovely/pages/customer/FavoritesPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/OrderHistoryPage.d.ts +9 -0
- package/dist/coolandlovely/pages/customer/OrderHistoryPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/OrderHistoryPage.js +438 -0
- package/dist/coolandlovely/pages/customer/OrderHistoryPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/OrderTrackingPage.d.ts +9 -0
- package/dist/coolandlovely/pages/customer/OrderTrackingPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/OrderTrackingPage.js +388 -0
- package/dist/coolandlovely/pages/customer/OrderTrackingPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/PaymentMethodsPage.d.ts +11 -0
- package/dist/coolandlovely/pages/customer/PaymentMethodsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/PaymentMethodsPage.js +488 -0
- package/dist/coolandlovely/pages/customer/PaymentMethodsPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/ReviewsPage.d.ts +11 -0
- package/dist/coolandlovely/pages/customer/ReviewsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/ReviewsPage.js +606 -0
- package/dist/coolandlovely/pages/customer/ReviewsPage.js.map +1 -0
- package/dist/coolandlovely/pages/customer/SavedAddressesPage.d.ts +10 -0
- package/dist/coolandlovely/pages/customer/SavedAddressesPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/customer/SavedAddressesPage.js +443 -0
- package/dist/coolandlovely/pages/customer/SavedAddressesPage.js.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestmentDetailsPage.d.ts +10 -0
- package/dist/coolandlovely/pages/investor/InvestmentDetailsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestmentDetailsPage.js +849 -0
- package/dist/coolandlovely/pages/investor/InvestmentDetailsPage.js.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestmentOpportunitiesPage.d.ts +10 -0
- package/dist/coolandlovely/pages/investor/InvestmentOpportunitiesPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestmentOpportunitiesPage.js +939 -0
- package/dist/coolandlovely/pages/investor/InvestmentOpportunitiesPage.js.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorAnalyticsPage.d.ts +11 -0
- package/dist/coolandlovely/pages/investor/InvestorAnalyticsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorAnalyticsPage.js +681 -0
- package/dist/coolandlovely/pages/investor/InvestorAnalyticsPage.js.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorDashboard.d.ts +9 -0
- package/dist/coolandlovely/pages/investor/InvestorDashboard.d.ts.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorDashboard.js +419 -0
- package/dist/coolandlovely/pages/investor/InvestorDashboard.js.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorInvestmentsPage.d.ts +10 -0
- package/dist/coolandlovely/pages/investor/InvestorInvestmentsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorInvestmentsPage.js +399 -0
- package/dist/coolandlovely/pages/investor/InvestorInvestmentsPage.js.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorPortfolioPage.d.ts +10 -0
- package/dist/coolandlovely/pages/investor/InvestorPortfolioPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorPortfolioPage.js +569 -0
- package/dist/coolandlovely/pages/investor/InvestorPortfolioPage.js.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorProfilePage.d.ts +12 -0
- package/dist/coolandlovely/pages/investor/InvestorProfilePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/investor/InvestorProfilePage.js +1065 -0
- package/dist/coolandlovely/pages/investor/InvestorProfilePage.js.map +1 -0
- package/dist/coolandlovely/pages/worker/TaskDetailsPage.d.ts +22 -0
- package/dist/coolandlovely/pages/worker/TaskDetailsPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/worker/TaskDetailsPage.js +496 -0
- package/dist/coolandlovely/pages/worker/TaskDetailsPage.js.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerDashboard.d.ts +18 -0
- package/dist/coolandlovely/pages/worker/WorkerDashboard.d.ts.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerDashboard.js +634 -0
- package/dist/coolandlovely/pages/worker/WorkerDashboard.js.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerOrdersPage.d.ts +18 -0
- package/dist/coolandlovely/pages/worker/WorkerOrdersPage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerOrdersPage.js +675 -0
- package/dist/coolandlovely/pages/worker/WorkerOrdersPage.js.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerProfilePage.d.ts +18 -0
- package/dist/coolandlovely/pages/worker/WorkerProfilePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerProfilePage.js +687 -0
- package/dist/coolandlovely/pages/worker/WorkerProfilePage.js.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerSchedulePage.d.ts +17 -0
- package/dist/coolandlovely/pages/worker/WorkerSchedulePage.d.ts.map +1 -0
- package/dist/coolandlovely/pages/worker/WorkerSchedulePage.js +578 -0
- package/dist/coolandlovely/pages/worker/WorkerSchedulePage.js.map +1 -0
- package/dist/coolandlovely/store/coolandlovelyStore.d.ts +60 -0
- package/dist/coolandlovely/store/coolandlovelyStore.d.ts.map +1 -0
- package/dist/coolandlovely/store/coolandlovelyStore.js +38 -0
- package/dist/coolandlovely/store/coolandlovelyStore.js.map +1 -0
- package/dist/coolandlovely/store/index.d.ts +6 -0
- package/dist/coolandlovely/store/index.d.ts.map +1 -0
- package/dist/coolandlovely/store/index.js +1 -0
- package/dist/coolandlovely/types/index.d.ts +458 -0
- package/dist/coolandlovely/types/index.d.ts.map +1 -0
- package/dist/coolandlovely/utils/cn.d.ts +4 -0
- package/dist/coolandlovely/utils/cn.d.ts.map +1 -0
- package/dist/coolandlovely/utils/cn.js +10 -0
- package/dist/coolandlovely/utils/cn.js.map +1 -0
- package/dist/coolandlovely/utils/formatters.d.ts +78 -0
- package/dist/coolandlovely/utils/formatters.d.ts.map +1 -0
- package/dist/coolandlovely/utils/formatters.js +51 -0
- package/dist/coolandlovely/utils/formatters.js.map +1 -0
- package/dist/coolandlovely/utils/index.d.ts +8 -0
- package/dist/coolandlovely/utils/index.d.ts.map +1 -0
- package/dist/coolandlovely/utils/navigation.d.ts +20 -0
- package/dist/coolandlovely/utils/navigation.d.ts.map +1 -0
- package/dist/coolandlovely/utils/navigation.js +9 -0
- package/dist/coolandlovely/utils/navigation.js.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +23527 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +57851 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.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":"AdminOrdersPage.js","names":[],"sources":["../../../../src/coolandlovely/pages/admin/AdminOrdersPage.tsx"],"sourcesContent":["/**\n * Admin Orders Page\n * @module coolandlovely/pages/admin\n *\n * Full-featured order management with 4 MetricsGrid stats, 3 filters,\n * dual layout (mobile cards + desktop table with 8 columns),\n * Order Details Modal with all sections and update status dropdown.\n */\n\nimport { useState, useEffect, useMemo } from 'react';\nimport {\n Search,\n ShoppingBag,\n IndianRupee,\n TrendingUp,\n Clock,\n Eye,\n CheckCircle2,\n XCircle,\n RefreshCw,\n AlertCircle,\n Loader2,\n X,\n Truck,\n MapPin,\n Phone,\n User,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { MetricsCard } from '../../components/MetricsCard';\nimport { useCoolAndLovely } from '../../context/CoolAndLovelyContext';\nimport { cn } from '../../utils/cn';\nimport { formatCurrency } from '../../utils/formatters';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ntype OrderStatus =\n | 'pending'\n | 'confirmed'\n | 'preparing'\n | 'ready'\n | 'out_for_delivery'\n | 'delivered'\n | 'cancelled';\n\ninterface Order {\n id: string;\n customerName: string;\n customerPhone: string;\n cartName: string;\n cartOwner: string;\n items: string[];\n total: number;\n status: OrderStatus;\n paymentMethod: string;\n paymentStatus: 'pending' | 'completed' | 'failed' | 'refunded';\n orderDate: string;\n deliveryTime: string;\n deliveryAddress: string;\n workerAssigned?: string;\n notes?: string;\n}\n\ninterface OrderStats {\n totalOrders: number;\n pendingOrders: number;\n totalRevenue: number;\n averageOrderValue: number;\n}\n\n/* ------------------------------------------------------------------ */\n/* Mock data */\n/* ------------------------------------------------------------------ */\n\nconst mockOrders: Order[] = [\n {\n id: 'ORD-2024-001',\n customerName: 'Rajesh Kumar',\n customerPhone: '+91 98765 43210',\n cartName: 'Dosa Express',\n cartOwner: 'Suresh Rao',\n items: ['Masala Dosa x2', 'Filter Coffee x2', 'Vada x1'],\n total: 280,\n status: 'delivered',\n paymentMethod: 'UPI',\n paymentStatus: 'completed',\n orderDate: '2024-01-15T10:30:00',\n deliveryTime: '2024-01-15T11:15:00',\n deliveryAddress: '123, 4th Cross, Koramangala',\n workerAssigned: 'Ravi Kumar',\n },\n {\n id: 'ORD-2024-002',\n customerName: 'Priya Sharma',\n customerPhone: '+91 87654 32109',\n cartName: 'Juice Junction',\n cartOwner: 'Amit Patel',\n items: ['Fresh Orange Juice x1', 'Watermelon Juice x1'],\n total: 120,\n status: 'preparing',\n paymentMethod: 'Cash',\n paymentStatus: 'pending',\n orderDate: '2024-01-15T11:45:00',\n deliveryTime: '2024-01-15T12:15:00',\n deliveryAddress: '456, BTM Layout',\n notes: 'Extra ice please',\n },\n {\n id: 'ORD-2024-003',\n customerName: 'Amit Singh',\n customerPhone: '+91 76543 21098',\n cartName: 'Chaat Corner',\n cartOwner: 'Ramesh Verma',\n items: ['Pani Puri x1', 'Bhel Puri x1', 'Dahi Puri x1'],\n total: 150,\n status: 'pending',\n paymentMethod: 'Card',\n paymentStatus: 'completed',\n orderDate: '2024-01-15T12:00:00',\n deliveryTime: '2024-01-15T12:30:00',\n deliveryAddress: '789, HSR Layout',\n },\n];\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminOrdersPage() {\n const { navigateTo } = useCoolAndLovely();\n\n const [orders, setOrders] = useState<Order[]>([]);\n const [stats, setStats] = useState<OrderStats | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [searchQuery, setSearchQuery] = useState('');\n const [statusFilter, setStatusFilter] = useState('all');\n const [dateFilter, setDateFilter] = useState('today');\n const [selectedOrder, setSelectedOrder] = useState<Order | null>(null);\n const [showOrderModal, setShowOrderModal] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setStats({\n totalOrders: 156,\n pendingOrders: 12,\n totalRevenue: 125600,\n averageOrderValue: 805,\n });\n setOrders(mockOrders);\n setIsLoading(false);\n }, 1000);\n return () => clearTimeout(timer);\n }, []);\n\n const fmtCur = (amount: number) => formatCurrency(amount, { minimumFractionDigits: 0 });\n\n const formatDate = (d: string) =>\n new Date(d).toLocaleString('en-IN', {\n day: '2-digit',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n });\n\n const getStatusColor = (status: string) => {\n const map: Record<string, string> = {\n delivered: 'bg-green-500/20 text-green-600 dark:text-green-400',\n preparing: 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400',\n ready: 'bg-yellow-500/20 text-yellow-600 dark:text-yellow-400',\n out_for_delivery: 'bg-blue-500/20 text-blue-600 dark:text-blue-400',\n cancelled: 'bg-red-500/20 text-red-600 dark:text-red-400',\n confirmed: 'bg-blue-500/20 text-blue-600 dark:text-blue-400',\n };\n return map[status] ?? 'bg-secondary text-secondary-foreground';\n };\n\n const getPaymentIcon = (status: string) => {\n switch (status) {\n case 'completed':\n return <CheckCircle2 className=\"h-4 w-4 text-green-600 dark:text-green-400\" />;\n case 'failed':\n return <XCircle className=\"h-4 w-4 text-red-600 dark:text-red-400\" />;\n case 'refunded':\n return <RefreshCw className=\"h-4 w-4 text-blue-600 dark:text-blue-400\" />;\n default:\n return <AlertCircle className=\"h-4 w-4 text-yellow-600 dark:text-yellow-400\" />;\n }\n };\n\n const filteredOrders = useMemo(() => {\n return orders.filter((order) => {\n const matchesSearch =\n !searchQuery ||\n order.id.toLowerCase().includes(searchQuery.toLowerCase()) ||\n order.customerName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n order.cartName.toLowerCase().includes(searchQuery.toLowerCase());\n const matchesStatus = statusFilter === 'all' || order.status === statusFilter;\n return matchesSearch && matchesStatus;\n });\n }, [orders, searchQuery, statusFilter]);\n\n const handleUpdateStatus = (orderId: string, newStatus: OrderStatus) => {\n setOrders((prev) => prev.map((o) => (o.id === orderId ? { ...o, status: newStatus } : o)));\n setShowOrderModal(false);\n alert(`Order ${orderId} updated to ${newStatus.replace('_', ' ')}`);\n };\n\n if (isLoading) {\n return (\n <PageLayout title=\"Order Management\" description=\"Loading orders...\">\n <div className=\"flex flex-col items-center justify-center py-20\">\n <Loader2 className=\"h-10 w-10 animate-spin text-muted-foreground mb-4\" />\n <p className=\"text-muted-foreground\">Loading orders...</p>\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Order Management\"\n description={`${stats?.totalOrders ?? 0} total orders on the platform`}\n >\n {/* 4 Metrics Grid */}\n {stats && (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-6\">\n <MetricsCard\n icon={<ShoppingBag className=\"h-5 w-5\" />}\n value={stats.totalOrders}\n label=\"Total Orders\"\n trendValue=\"Orders today\"\n />\n <MetricsCard\n icon={<IndianRupee className=\"h-5 w-5\" />}\n value={fmtCur(stats.totalRevenue)}\n label=\"Revenue\"\n trend=\"up\"\n trendValue=\"+15.2% vs yesterday\"\n />\n <MetricsCard\n icon={<TrendingUp className=\"h-5 w-5\" />}\n value={fmtCur(stats.averageOrderValue)}\n label=\"Avg Order Value\"\n trendValue=\"Average order value\"\n />\n <MetricsCard\n icon={<Clock className=\"h-5 w-5\" />}\n value={stats.pendingOrders}\n label=\"Pending Orders\"\n trendValue=\"Awaiting action\"\n />\n </div>\n )}\n\n {/* 3 Filters */}\n <div className=\"rounded-lg border border-border bg-card p-4 mb-6\">\n <div className=\"flex flex-col gap-4\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <input\n type=\"text\"\n placeholder=\"Search by order ID, customer, or cart name...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full rounded-lg border border-border bg-card py-2 pl-10 pr-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <select\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value)}\n className=\"rounded-lg border border-border bg-card py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n >\n <option value=\"all\">All Status</option>\n <option value=\"pending\">Pending</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"out_for_delivery\">Out for Delivery</option>\n <option value=\"delivered\">Delivered</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n <select\n value={dateFilter}\n onChange={(e) => setDateFilter(e.target.value)}\n className=\"rounded-lg border border-border bg-card py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n >\n <option value=\"today\">Today</option>\n <option value=\"yesterday\">Yesterday</option>\n <option value=\"week\">This Week</option>\n <option value=\"month\">This Month</option>\n </select>\n </div>\n </div>\n </div>\n\n {/* Dual Layout */}\n <div className=\"rounded-lg border border-border bg-card overflow-hidden\">\n {/* Mobile Card View */}\n <div className=\"block md:hidden space-y-4 p-4\">\n {filteredOrders.map((order) => (\n <div key={order.id} className=\"rounded-lg border border-border bg-muted/30 p-4\">\n <div className=\"flex justify-between items-start mb-3\">\n <div>\n <h3 className=\"font-medium text-foreground text-lg\">{order.id}</h3>\n <p className=\"text-sm text-muted-foreground\">{formatDate(order.orderDate)}</p>\n </div>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace('_', ' ')}\n </span>\n </div>\n <div className=\"grid grid-cols-2 gap-4 mb-3 text-sm\">\n <div>\n <p className=\"text-muted-foreground font-medium\">Customer</p>\n <p className=\"text-foreground\">{order.customerName}</p>\n <p className=\"text-muted-foreground text-xs\">{order.customerPhone}</p>\n </div>\n <div>\n <p className=\"text-muted-foreground font-medium\">Cart</p>\n <p className=\"text-foreground\">{order.cartName}</p>\n <p className=\"text-muted-foreground text-xs\">{order.cartOwner}</p>\n </div>\n </div>\n <div className=\"flex justify-between items-center mb-3\">\n <div>\n <p className=\"text-muted-foreground font-medium text-sm\">Amount</p>\n <p className=\"text-foreground font-semibold text-lg\">{fmtCur(order.total)}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(order.paymentStatus)}\n <div className=\"text-right\">\n <p className=\"text-sm text-foreground\">{order.paymentMethod}</p>\n <p className=\"text-xs text-muted-foreground capitalize\">\n {order.paymentStatus}\n </p>\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderModal(true);\n }}\n className=\"w-full rounded-lg border border-border py-2 text-sm font-medium text-foreground hover:bg-accent transition-colors flex items-center justify-center gap-2\"\n >\n <Eye className=\"h-4 w-4\" /> View Details\n </button>\n </div>\n ))}\n </div>\n\n {/* Desktop Table View */}\n <div className=\"hidden md:block overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border bg-muted/50\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Order ID\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Customer\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Cart\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Amount\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Status\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Payment\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Time\n </th>\n <th className=\"px-4 py-3 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {filteredOrders.map((order) => (\n <tr key={order.id} className=\"hover:bg-accent/50 transition-colors\">\n <td className=\"px-4 py-3 text-sm font-mono font-medium text-foreground\">\n {order.id}\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"text-sm font-medium text-foreground\">{order.customerName}</div>\n <div className=\"text-xs text-muted-foreground\">{order.customerPhone}</div>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"text-sm font-medium text-foreground\">{order.cartName}</div>\n <div className=\"text-xs text-muted-foreground\">{order.cartOwner}</div>\n </td>\n <td className=\"px-4 py-3 text-sm font-semibold text-foreground\">\n {fmtCur(order.total)}\n </td>\n <td className=\"px-4 py-3\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(order.status)\n )}\n >\n {order.status.replace('_', ' ')}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(order.paymentStatus)}\n <div>\n <div className=\"text-sm text-foreground\">{order.paymentMethod}</div>\n <div className=\"text-xs text-muted-foreground capitalize\">\n {order.paymentStatus}\n </div>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3 text-sm text-muted-foreground\">\n {formatDate(order.orderDate)}\n </td>\n <td className=\"px-4 py-3\">\n <button\n type=\"button\"\n onClick={() => {\n setSelectedOrder(order);\n setShowOrderModal(true);\n }}\n className=\"rounded p-1.5 text-muted-foreground hover:text-foreground hover:bg-accent transition-colors\"\n >\n <Eye className=\"h-4 w-4\" />\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n\n {filteredOrders.length === 0 && (\n <div className=\"flex flex-col items-center justify-center py-12 px-4\">\n <ShoppingBag className=\"h-10 w-10 text-muted-foreground/50 mb-3\" />\n <p className=\"text-sm text-muted-foreground\">No orders found matching your criteria</p>\n </div>\n )}\n </div>\n\n {/* Order Details Modal */}\n {showOrderModal && selectedOrder && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\">\n <div className=\"w-full max-w-2xl rounded-lg border border-border bg-card shadow-lg max-h-[90vh] overflow-y-auto\">\n <div className=\"flex items-center justify-between p-4 border-b border-border\">\n <h2 className=\"text-lg font-semibold text-foreground\">Order Details</h2>\n <button\n type=\"button\"\n onClick={() => setShowOrderModal(false)}\n className=\"rounded p-1.5 text-muted-foreground hover:text-foreground hover:bg-accent transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n </div>\n <div className=\"p-4 space-y-6\">\n {/* Order Info */}\n <div>\n <h3 className=\"font-semibold text-foreground mb-3\">Order Information</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-muted-foreground\">Order ID</p>\n <p className=\"font-medium text-foreground\">{selectedOrder.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Status</p>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium capitalize',\n getStatusColor(selectedOrder.status)\n )}\n >\n {selectedOrder.status.replace('_', ' ')}\n </span>\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Order Date</p>\n <p className=\"font-medium text-foreground\">\n {formatDate(selectedOrder.orderDate)}\n </p>\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Delivery Time</p>\n <p className=\"font-medium text-foreground\">\n {formatDate(selectedOrder.deliveryTime)}\n </p>\n </div>\n </div>\n </div>\n\n {/* Customer Details */}\n <div>\n <h3 className=\"font-semibold text-foreground mb-3 flex items-center gap-2\">\n <User className=\"h-4 w-4\" /> Customer Details\n </h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-muted-foreground\">Name</p>\n <p className=\"font-medium text-foreground\">{selectedOrder.customerName}</p>\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Phone</p>\n <p className=\"font-medium text-foreground flex items-center gap-1\">\n <Phone className=\"h-3 w-3\" />\n {selectedOrder.customerPhone}\n </p>\n </div>\n <div className=\"sm:col-span-2\">\n <p className=\"text-sm text-muted-foreground\">Delivery Address</p>\n <p className=\"font-medium text-foreground flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {selectedOrder.deliveryAddress}\n </p>\n </div>\n </div>\n </div>\n\n {/* Cart Details */}\n <div>\n <h3 className=\"font-semibold text-foreground mb-3\">Cart Details</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-muted-foreground\">Cart Name</p>\n <p className=\"font-medium text-foreground\">{selectedOrder.cartName}</p>\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Cart Owner</p>\n <p className=\"font-medium text-foreground\">{selectedOrder.cartOwner}</p>\n </div>\n </div>\n </div>\n\n {/* Order Items */}\n <div>\n <h3 className=\"font-semibold text-foreground mb-3\">Order Items</h3>\n <div className=\"rounded-lg bg-muted/50 p-4\">\n <ul className=\"space-y-2\">\n {selectedOrder.items.map((item, i) => (\n <li key={i} className=\"text-sm text-foreground\">\n {item}\n </li>\n ))}\n </ul>\n <div className=\"mt-4 pt-4 border-t border-border flex justify-between items-center\">\n <span className=\"font-semibold text-foreground\">Total Amount</span>\n <span className=\"font-semibold text-lg text-foreground\">\n {fmtCur(selectedOrder.total)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Payment Details */}\n <div>\n <h3 className=\"font-semibold text-foreground mb-3\">Payment Details</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm text-muted-foreground\">Method</p>\n <p className=\"font-medium text-foreground\">{selectedOrder.paymentMethod}</p>\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Status</p>\n <div className=\"flex items-center gap-2\">\n {getPaymentIcon(selectedOrder.paymentStatus)}\n <span className=\"font-medium text-foreground capitalize\">\n {selectedOrder.paymentStatus}\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Worker Assignment */}\n {selectedOrder.workerAssigned && (\n <div>\n <h3 className=\"font-semibold text-foreground mb-3 flex items-center gap-2\">\n <Truck className=\"h-4 w-4\" /> Delivery Assignment\n </h3>\n <div>\n <p className=\"text-sm text-muted-foreground\">Assigned Worker</p>\n <p className=\"font-medium text-foreground\">{selectedOrder.workerAssigned}</p>\n </div>\n </div>\n )}\n\n {/* Notes */}\n {selectedOrder.notes && (\n <div>\n <h3 className=\"font-semibold text-foreground mb-3\">Special Instructions</h3>\n <p className=\"text-sm rounded-lg bg-muted/50 p-3 text-foreground\">\n {selectedOrder.notes}\n </p>\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex flex-col sm:flex-row sm:justify-end gap-3 pt-2\">\n <button\n type=\"button\"\n onClick={() => setShowOrderModal(false)}\n className=\"rounded-lg border border-border py-2 px-4 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n Close\n </button>\n {selectedOrder.status !== 'delivered' && selectedOrder.status !== 'cancelled' && (\n <select\n className=\"rounded-lg border border-border bg-card py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring\"\n value={selectedOrder.status}\n onChange={(e) =>\n handleUpdateStatus(selectedOrder.id, e.target.value as OrderStatus)\n }\n >\n <option value=\"pending\">Pending</option>\n <option value=\"confirmed\">Confirmed</option>\n <option value=\"preparing\">Preparing</option>\n <option value=\"ready\">Ready</option>\n <option value=\"out_for_delivery\">Out for Delivery</option>\n <option value=\"delivered\">Delivered</option>\n <option value=\"cancelled\">Cancelled</option>\n </select>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Profile Page
|
|
3
|
+
* @module coolandlovely/pages/admin
|
|
4
|
+
*
|
|
5
|
+
* Full-featured admin profile with edit mode toggle, save/cancel buttons,
|
|
6
|
+
* editable form fields, account information, permissions as icon badges,
|
|
7
|
+
* admin note, and back navigation.
|
|
8
|
+
*/
|
|
9
|
+
export declare function AdminProfilePage(): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=AdminProfilePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminProfilePage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/admin/AdminProfilePage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0CH,wBAAgB,gBAAgB,4CAmS/B"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { useCoolAndLovely as e } from "../../context/CoolAndLovelyContext.js";
|
|
2
|
+
import { cn as t } from "../../utils/cn.js";
|
|
3
|
+
import { PageLayout as n } from "../../components/PageLayout.js";
|
|
4
|
+
import { useCallback as r, useEffect as i, useState as a } from "react";
|
|
5
|
+
import { ArrowLeft as o, BarChart3 as s, Clock as c, Edit3 as l, Save as u, Settings as d, Shield as f, ShoppingBag as p, Users as m } from "lucide-react";
|
|
6
|
+
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
7
|
+
//#region src/coolandlovely/pages/admin/AdminProfilePage.tsx
|
|
8
|
+
function v() {
|
|
9
|
+
let { currentUser: v, navigateTo: y } = e(), [b, x] = a(!1), [S, C] = a(!1), [w, T] = a({
|
|
10
|
+
firstName: "",
|
|
11
|
+
lastName: "",
|
|
12
|
+
email: "",
|
|
13
|
+
phone: "",
|
|
14
|
+
role: "admin",
|
|
15
|
+
department: "Administration",
|
|
16
|
+
permissions: [
|
|
17
|
+
"user_management",
|
|
18
|
+
"cart_management",
|
|
19
|
+
"order_management",
|
|
20
|
+
"analytics",
|
|
21
|
+
"system_settings"
|
|
22
|
+
],
|
|
23
|
+
lastLogin: "",
|
|
24
|
+
accountCreated: ""
|
|
25
|
+
}), E = r(() => {
|
|
26
|
+
T({
|
|
27
|
+
firstName: v?.firstName ?? "Admin",
|
|
28
|
+
lastName: v?.lastName ?? "User",
|
|
29
|
+
email: v?.email ?? "admin@coolandlovely.com",
|
|
30
|
+
phone: "+91 98765 43210",
|
|
31
|
+
role: "admin",
|
|
32
|
+
department: "Administration",
|
|
33
|
+
permissions: [
|
|
34
|
+
"user_management",
|
|
35
|
+
"cart_management",
|
|
36
|
+
"order_management",
|
|
37
|
+
"analytics",
|
|
38
|
+
"system_settings"
|
|
39
|
+
],
|
|
40
|
+
lastLogin: (/* @__PURE__ */ new Date(Date.now() - 1440 * 60 * 1e3)).toISOString(),
|
|
41
|
+
accountCreated: (/* @__PURE__ */ new Date(Date.now() - 2160 * 60 * 60 * 1e3)).toISOString()
|
|
42
|
+
});
|
|
43
|
+
}, [v]);
|
|
44
|
+
i(() => {
|
|
45
|
+
E();
|
|
46
|
+
}, [E]);
|
|
47
|
+
let D = async () => {
|
|
48
|
+
C(!0), await new Promise((e) => setTimeout(e, 1e3)), alert("Profile updated successfully"), C(!1), x(!1);
|
|
49
|
+
}, O = (e, t) => {
|
|
50
|
+
T((n) => ({
|
|
51
|
+
...n,
|
|
52
|
+
[e]: t
|
|
53
|
+
}));
|
|
54
|
+
}, k = (e) => e ? new Date(e).toLocaleDateString("en-IN", {
|
|
55
|
+
year: "numeric",
|
|
56
|
+
month: "long",
|
|
57
|
+
day: "numeric",
|
|
58
|
+
hour: "2-digit",
|
|
59
|
+
minute: "2-digit"
|
|
60
|
+
}) : "N/A", A = {
|
|
61
|
+
user_management: m,
|
|
62
|
+
cart_management: p,
|
|
63
|
+
order_management: p,
|
|
64
|
+
analytics: s,
|
|
65
|
+
system_settings: d
|
|
66
|
+
};
|
|
67
|
+
return /* @__PURE__ */ g(n, {
|
|
68
|
+
title: "Admin Profile",
|
|
69
|
+
description: "Your admin account information and permissions",
|
|
70
|
+
actions: /* @__PURE__ */ _("div", {
|
|
71
|
+
className: "flex items-center gap-2",
|
|
72
|
+
children: [/* @__PURE__ */ _("button", {
|
|
73
|
+
type: "button",
|
|
74
|
+
onClick: () => y("/admin"),
|
|
75
|
+
className: "flex items-center gap-1.5 rounded-lg border border-border px-3 py-2 text-sm font-medium text-foreground hover:bg-accent transition-colors",
|
|
76
|
+
children: [/* @__PURE__ */ g(o, { className: "h-4 w-4" }), "Back"]
|
|
77
|
+
}), b ? /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("button", {
|
|
78
|
+
type: "button",
|
|
79
|
+
onClick: () => {
|
|
80
|
+
x(!1), E();
|
|
81
|
+
},
|
|
82
|
+
className: "flex items-center gap-1.5 rounded-lg border border-border px-3 py-2 text-sm font-medium text-foreground hover:bg-accent transition-colors",
|
|
83
|
+
children: "Cancel"
|
|
84
|
+
}), /* @__PURE__ */ _("button", {
|
|
85
|
+
type: "button",
|
|
86
|
+
onClick: D,
|
|
87
|
+
disabled: S,
|
|
88
|
+
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 disabled:opacity-50",
|
|
89
|
+
children: [/* @__PURE__ */ g(u, { className: "h-4 w-4" }), S ? "Saving..." : "Save Changes"]
|
|
90
|
+
})] }) : /* @__PURE__ */ _("button", {
|
|
91
|
+
type: "button",
|
|
92
|
+
onClick: () => x(!0),
|
|
93
|
+
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",
|
|
94
|
+
children: [/* @__PURE__ */ g(l, { className: "h-4 w-4" }), "Edit Profile"]
|
|
95
|
+
})]
|
|
96
|
+
}),
|
|
97
|
+
children: /* @__PURE__ */ _("div", {
|
|
98
|
+
className: "space-y-6 max-w-4xl",
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ _("div", {
|
|
101
|
+
className: "rounded-lg border border-border bg-card p-6",
|
|
102
|
+
children: [/* @__PURE__ */ _("div", {
|
|
103
|
+
className: "flex items-center mb-6",
|
|
104
|
+
children: [/* @__PURE__ */ _("div", {
|
|
105
|
+
className: "w-16 h-16 bg-primary text-primary-foreground rounded-full flex items-center justify-center text-2xl font-bold mr-4",
|
|
106
|
+
children: [w.firstName.charAt(0), w.lastName.charAt(0)]
|
|
107
|
+
}), /* @__PURE__ */ _("div", { children: [
|
|
108
|
+
/* @__PURE__ */ _("h2", {
|
|
109
|
+
className: "text-xl font-semibold text-foreground",
|
|
110
|
+
children: [
|
|
111
|
+
w.firstName,
|
|
112
|
+
" ",
|
|
113
|
+
w.lastName
|
|
114
|
+
]
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ g("p", {
|
|
117
|
+
className: "text-muted-foreground",
|
|
118
|
+
children: w.email
|
|
119
|
+
}),
|
|
120
|
+
/* @__PURE__ */ _("p", {
|
|
121
|
+
className: "text-sm text-muted-foreground capitalize",
|
|
122
|
+
children: [
|
|
123
|
+
w.role,
|
|
124
|
+
" • ",
|
|
125
|
+
w.department
|
|
126
|
+
]
|
|
127
|
+
})
|
|
128
|
+
] })]
|
|
129
|
+
}), /* @__PURE__ */ _("div", {
|
|
130
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("label", {
|
|
133
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
134
|
+
children: "First Name"
|
|
135
|
+
}), /* @__PURE__ */ g("input", {
|
|
136
|
+
type: "text",
|
|
137
|
+
value: w.firstName,
|
|
138
|
+
onChange: (e) => O("firstName", e.target.value),
|
|
139
|
+
disabled: !b,
|
|
140
|
+
className: t("w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring", !b && "bg-muted cursor-not-allowed")
|
|
141
|
+
})] }),
|
|
142
|
+
/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("label", {
|
|
143
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
144
|
+
children: "Last Name"
|
|
145
|
+
}), /* @__PURE__ */ g("input", {
|
|
146
|
+
type: "text",
|
|
147
|
+
value: w.lastName,
|
|
148
|
+
onChange: (e) => O("lastName", e.target.value),
|
|
149
|
+
disabled: !b,
|
|
150
|
+
className: t("w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring", !b && "bg-muted cursor-not-allowed")
|
|
151
|
+
})] }),
|
|
152
|
+
/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("label", {
|
|
153
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
154
|
+
children: "Email Address"
|
|
155
|
+
}), /* @__PURE__ */ g("input", {
|
|
156
|
+
type: "email",
|
|
157
|
+
value: w.email,
|
|
158
|
+
onChange: (e) => O("email", e.target.value),
|
|
159
|
+
disabled: !b,
|
|
160
|
+
className: t("w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring", !b && "bg-muted cursor-not-allowed")
|
|
161
|
+
})] }),
|
|
162
|
+
/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("label", {
|
|
163
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
164
|
+
children: "Phone Number"
|
|
165
|
+
}), /* @__PURE__ */ g("input", {
|
|
166
|
+
type: "tel",
|
|
167
|
+
value: w.phone,
|
|
168
|
+
onChange: (e) => O("phone", e.target.value),
|
|
169
|
+
disabled: !b,
|
|
170
|
+
className: t("w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring", !b && "bg-muted cursor-not-allowed")
|
|
171
|
+
})] }),
|
|
172
|
+
/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("label", {
|
|
173
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
174
|
+
children: "Department"
|
|
175
|
+
}), /* @__PURE__ */ g("input", {
|
|
176
|
+
type: "text",
|
|
177
|
+
value: w.department,
|
|
178
|
+
onChange: (e) => O("department", e.target.value),
|
|
179
|
+
disabled: !b,
|
|
180
|
+
className: t("w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring", !b && "bg-muted cursor-not-allowed")
|
|
181
|
+
})] }),
|
|
182
|
+
/* @__PURE__ */ _("div", { children: [
|
|
183
|
+
/* @__PURE__ */ g("label", {
|
|
184
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
185
|
+
children: "Role"
|
|
186
|
+
}),
|
|
187
|
+
/* @__PURE__ */ g("input", {
|
|
188
|
+
type: "text",
|
|
189
|
+
value: w.role,
|
|
190
|
+
disabled: !0,
|
|
191
|
+
className: "w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground bg-muted cursor-not-allowed"
|
|
192
|
+
}),
|
|
193
|
+
/* @__PURE__ */ g("p", {
|
|
194
|
+
className: "text-xs text-muted-foreground mt-1",
|
|
195
|
+
children: "Role cannot be changed from profile page"
|
|
196
|
+
})
|
|
197
|
+
] })
|
|
198
|
+
]
|
|
199
|
+
})]
|
|
200
|
+
}),
|
|
201
|
+
/* @__PURE__ */ _("div", {
|
|
202
|
+
className: "rounded-lg border border-border bg-card p-6",
|
|
203
|
+
children: [/* @__PURE__ */ _("div", {
|
|
204
|
+
className: "flex items-center gap-2 mb-4",
|
|
205
|
+
children: [/* @__PURE__ */ g(c, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ g("h3", {
|
|
206
|
+
className: "text-lg font-semibold text-foreground",
|
|
207
|
+
children: "Account Information"
|
|
208
|
+
})]
|
|
209
|
+
}), /* @__PURE__ */ _("div", {
|
|
210
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-6",
|
|
211
|
+
children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("label", {
|
|
212
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
213
|
+
children: "Last Login"
|
|
214
|
+
}), /* @__PURE__ */ g("p", {
|
|
215
|
+
className: "rounded-lg bg-muted p-3 text-sm text-foreground",
|
|
216
|
+
children: k(w.lastLogin)
|
|
217
|
+
})] }), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("label", {
|
|
218
|
+
className: "block text-sm font-medium text-muted-foreground mb-2",
|
|
219
|
+
children: "Account Created"
|
|
220
|
+
}), /* @__PURE__ */ g("p", {
|
|
221
|
+
className: "rounded-lg bg-muted p-3 text-sm text-foreground",
|
|
222
|
+
children: k(w.accountCreated)
|
|
223
|
+
})] })]
|
|
224
|
+
})]
|
|
225
|
+
}),
|
|
226
|
+
/* @__PURE__ */ _("div", {
|
|
227
|
+
className: "rounded-lg border border-border bg-card p-6",
|
|
228
|
+
children: [
|
|
229
|
+
/* @__PURE__ */ _("div", {
|
|
230
|
+
className: "flex items-center gap-2 mb-4",
|
|
231
|
+
children: [/* @__PURE__ */ g(f, { className: "h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ g("h3", {
|
|
232
|
+
className: "text-lg font-semibold text-foreground",
|
|
233
|
+
children: "Permissions"
|
|
234
|
+
})]
|
|
235
|
+
}),
|
|
236
|
+
/* @__PURE__ */ g("div", {
|
|
237
|
+
className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-3",
|
|
238
|
+
children: w.permissions.map((e) => /* @__PURE__ */ _("div", {
|
|
239
|
+
className: "flex items-center gap-2 rounded-lg bg-primary/10 text-primary p-3 text-sm font-medium",
|
|
240
|
+
children: [/* @__PURE__ */ g(A[e] ?? f, { className: "h-4 w-4 shrink-0" }), /* @__PURE__ */ g("span", {
|
|
241
|
+
className: "uppercase text-xs",
|
|
242
|
+
children: e.replace(/_/g, " ")
|
|
243
|
+
})]
|
|
244
|
+
}, e))
|
|
245
|
+
}),
|
|
246
|
+
/* @__PURE__ */ g("p", {
|
|
247
|
+
className: "text-xs text-muted-foreground mt-4",
|
|
248
|
+
children: "Permissions are managed by super administrators. Contact your system administrator to modify permissions."
|
|
249
|
+
})
|
|
250
|
+
]
|
|
251
|
+
})
|
|
252
|
+
]
|
|
253
|
+
})
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
//#endregion
|
|
257
|
+
export { v as AdminProfilePage };
|
|
258
|
+
|
|
259
|
+
//# sourceMappingURL=AdminProfilePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminProfilePage.js","names":[],"sources":["../../../../src/coolandlovely/pages/admin/AdminProfilePage.tsx"],"sourcesContent":["/**\n * Admin Profile Page\n * @module coolandlovely/pages/admin\n *\n * Full-featured admin profile with edit mode toggle, save/cancel buttons,\n * editable form fields, account information, permissions as icon badges,\n * admin note, and back navigation.\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n User,\n Mail,\n Phone,\n Shield,\n ArrowLeft,\n Save,\n Edit3,\n Building2,\n Clock,\n ShoppingBag,\n BarChart3,\n Settings,\n Users,\n} from 'lucide-react';\nimport { PageLayout } from '../../components/PageLayout';\nimport { useCoolAndLovely } from '../../context/CoolAndLovelyContext';\nimport { cn } from '../../utils/cn';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\ninterface AdminProfile {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n role: string;\n department: string;\n permissions: string[];\n lastLogin: string;\n accountCreated: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport function AdminProfilePage() {\n const { currentUser, navigateTo } = useCoolAndLovely();\n const [isEditing, setIsEditing] = useState(false);\n const [saving, setSaving] = useState(false);\n const [profile, setProfile] = useState<AdminProfile>({\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n role: 'admin',\n department: 'Administration',\n permissions: [\n 'user_management',\n 'cart_management',\n 'order_management',\n 'analytics',\n 'system_settings',\n ],\n lastLogin: '',\n accountCreated: '',\n });\n\n const loadProfile = useCallback(() => {\n const mockProfile: AdminProfile = {\n firstName: currentUser?.firstName ?? 'Admin',\n lastName: currentUser?.lastName ?? 'User',\n email: currentUser?.email ?? 'admin@coolandlovely.com',\n phone: '+91 98765 43210',\n role: 'admin',\n department: 'Administration',\n permissions: [\n 'user_management',\n 'cart_management',\n 'order_management',\n 'analytics',\n 'system_settings',\n ],\n lastLogin: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),\n accountCreated: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString(),\n };\n setProfile(mockProfile);\n }, [currentUser]);\n\n useEffect(() => {\n loadProfile();\n }, [loadProfile]);\n\n const handleSave = async () => {\n setSaving(true);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n alert('Profile updated successfully');\n setSaving(false);\n setIsEditing(false);\n };\n\n const handleInputChange = (field: keyof AdminProfile, value: string) => {\n setProfile((prev) => ({ ...prev, [field]: value }));\n };\n\n const formatDate = (d: string) => {\n if (!d) return 'N/A';\n return new Date(d).toLocaleDateString('en-IN', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n };\n\n const permissionIcons: Record<string, typeof Users> = {\n user_management: Users,\n cart_management: ShoppingBag,\n order_management: ShoppingBag,\n analytics: BarChart3,\n system_settings: Settings,\n };\n\n return (\n <PageLayout\n title=\"Admin Profile\"\n description=\"Your admin account information and permissions\"\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 px-3 py-2 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back\n </button>\n {!isEditing ? (\n <button\n type=\"button\"\n onClick={() => setIsEditing(true)}\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 <Edit3 className=\"h-4 w-4\" />\n Edit Profile\n </button>\n ) : (\n <>\n <button\n type=\"button\"\n onClick={() => {\n setIsEditing(false);\n loadProfile();\n }}\n className=\"flex items-center gap-1.5 rounded-lg border border-border px-3 py-2 text-sm font-medium text-foreground hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleSave}\n disabled={saving}\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 disabled:opacity-50\"\n >\n <Save className=\"h-4 w-4\" />\n {saving ? 'Saving...' : 'Save Changes'}\n </button>\n </>\n )}\n </div>\n }\n >\n <div className=\"space-y-6 max-w-4xl\">\n {/* Profile Information */}\n <div className=\"rounded-lg border border-border bg-card p-6\">\n <div className=\"flex items-center mb-6\">\n <div className=\"w-16 h-16 bg-primary text-primary-foreground rounded-full flex items-center justify-center text-2xl font-bold mr-4\">\n {profile.firstName.charAt(0)}\n {profile.lastName.charAt(0)}\n </div>\n <div>\n <h2 className=\"text-xl font-semibold text-foreground\">\n {profile.firstName} {profile.lastName}\n </h2>\n <p className=\"text-muted-foreground\">{profile.email}</p>\n <p className=\"text-sm text-muted-foreground capitalize\">\n {profile.role} • {profile.department}\n </p>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">\n First Name\n </label>\n <input\n type=\"text\"\n value={profile.firstName}\n onChange={(e) => handleInputChange('firstName', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring',\n !isEditing && 'bg-muted cursor-not-allowed'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">\n Last Name\n </label>\n <input\n type=\"text\"\n value={profile.lastName}\n onChange={(e) => handleInputChange('lastName', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring',\n !isEditing && 'bg-muted cursor-not-allowed'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">\n Email Address\n </label>\n <input\n type=\"email\"\n value={profile.email}\n onChange={(e) => handleInputChange('email', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring',\n !isEditing && 'bg-muted cursor-not-allowed'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={profile.phone}\n onChange={(e) => handleInputChange('phone', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring',\n !isEditing && 'bg-muted cursor-not-allowed'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">\n Department\n </label>\n <input\n type=\"text\"\n value={profile.department}\n onChange={(e) => handleInputChange('department', e.target.value)}\n disabled={!isEditing}\n className={cn(\n 'w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring',\n !isEditing && 'bg-muted cursor-not-allowed'\n )}\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">Role</label>\n <input\n type=\"text\"\n value={profile.role}\n disabled\n className=\"w-full rounded-lg border border-border py-2 px-3 text-sm text-foreground bg-muted cursor-not-allowed\"\n />\n <p className=\"text-xs text-muted-foreground mt-1\">\n Role cannot be changed from profile page\n </p>\n </div>\n </div>\n </div>\n\n {/* Account Information */}\n <div className=\"rounded-lg border border-border bg-card p-6\">\n <div className=\"flex items-center gap-2 mb-4\">\n <Clock className=\"h-5 w-5 text-muted-foreground\" />\n <h3 className=\"text-lg font-semibold text-foreground\">Account Information</h3>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">\n Last Login\n </label>\n <p className=\"rounded-lg bg-muted p-3 text-sm text-foreground\">\n {formatDate(profile.lastLogin)}\n </p>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-muted-foreground mb-2\">\n Account Created\n </label>\n <p className=\"rounded-lg bg-muted p-3 text-sm text-foreground\">\n {formatDate(profile.accountCreated)}\n </p>\n </div>\n </div>\n </div>\n\n {/* Permissions */}\n <div className=\"rounded-lg border border-border bg-card p-6\">\n <div className=\"flex items-center gap-2 mb-4\">\n <Shield className=\"h-5 w-5 text-muted-foreground\" />\n <h3 className=\"text-lg font-semibold text-foreground\">Permissions</h3>\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-5 gap-3\">\n {profile.permissions.map((permission) => {\n const PermIcon = permissionIcons[permission] ?? Shield;\n return (\n <div\n key={permission}\n className=\"flex items-center gap-2 rounded-lg bg-primary/10 text-primary p-3 text-sm font-medium\"\n >\n <PermIcon className=\"h-4 w-4 shrink-0\" />\n <span className=\"uppercase text-xs\">{permission.replace(/_/g, ' ')}</span>\n </div>\n );\n })}\n </div>\n <p className=\"text-xs text-muted-foreground mt-4\">\n Permissions are managed by super administrators. Contact your system administrator to\n modify permissions.\n </p>\n </div>\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin Settings Page
|
|
3
|
+
* @module coolandlovely/pages/admin
|
|
4
|
+
*
|
|
5
|
+
* Full-featured settings with 5-tab sidebar navigation (General/Security/
|
|
6
|
+
* Notifications/Database/Integrations), dual mobile/desktop tab layout,
|
|
7
|
+
* all form controls, saving state, and save handler.
|
|
8
|
+
*/
|
|
9
|
+
export declare function AdminSettingsPage(): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=AdminSettingsPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminSettingsPage.d.ts","sourceRoot":"","sources":["../../../../src/coolandlovely/pages/admin/AdminSettingsPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyEH,wBAAgB,iBAAiB,4CA0iBhC"}
|