@burdenoff/microfe-proserviceworld 2026.509.101
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/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.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 +18199 -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 +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts +5 -0
- package/dist/proserviceworld/ProServiceWorldRoot.d.ts.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoot.js +151 -0
- package/dist/proserviceworld/ProServiceWorldRoot.js.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts +2 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.d.ts.map +1 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.js +91 -0
- package/dist/proserviceworld/ProServiceWorldRoutes.js.map +1 -0
- package/dist/proserviceworld/index.d.ts +5 -0
- package/dist/proserviceworld/index.d.ts.map +1 -0
- package/dist/proserviceworld/index.js +3 -0
- package/dist/proserviceworld/pages/AdminReportsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/AdminReportsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/AdminReportsPage.js +512 -0
- package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -0
- package/dist/proserviceworld/pages/AdminUsersPage.d.ts +2 -0
- package/dist/proserviceworld/pages/AdminUsersPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/AdminUsersPage.js +444 -0
- package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -0
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/AnalyticsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/AnalyticsPage.js +433 -0
- package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -0
- package/dist/proserviceworld/pages/BookingsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/BookingsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/BookingsPage.js +425 -0
- package/dist/proserviceworld/pages/BookingsPage.js.map +1 -0
- package/dist/proserviceworld/pages/DashboardPage.d.ts +2 -0
- package/dist/proserviceworld/pages/DashboardPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/DashboardPage.js +583 -0
- package/dist/proserviceworld/pages/DashboardPage.js.map +1 -0
- package/dist/proserviceworld/pages/DocumentsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/DocumentsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/DocumentsPage.js +494 -0
- package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -0
- package/dist/proserviceworld/pages/MessagesPage.d.ts +2 -0
- package/dist/proserviceworld/pages/MessagesPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/MessagesPage.js +229 -0
- package/dist/proserviceworld/pages/MessagesPage.js.map +1 -0
- package/dist/proserviceworld/pages/PaymentsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/PaymentsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/PaymentsPage.js +479 -0
- package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ProjectsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ProjectsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ProjectsPage.js +547 -0
- package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.js +464 -0
- package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -0
- package/dist/proserviceworld/pages/ProvidersPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ProvidersPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ProvidersPage.js +342 -0
- package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -0
- package/dist/proserviceworld/pages/ReviewsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ReviewsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ReviewsPage.js +339 -0
- package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.js +563 -0
- package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -0
- package/dist/proserviceworld/pages/ServicesPage.d.ts +2 -0
- package/dist/proserviceworld/pages/ServicesPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/ServicesPage.js +337 -0
- package/dist/proserviceworld/pages/ServicesPage.js.map +1 -0
- package/dist/proserviceworld/pages/VerificationPage.d.ts +2 -0
- package/dist/proserviceworld/pages/VerificationPage.d.ts.map +1 -0
- package/dist/proserviceworld/pages/VerificationPage.js +357 -0
- package/dist/proserviceworld/pages/VerificationPage.js.map +1 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts +6 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.d.ts.map +1 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.js +27 -0
- package/dist/proserviceworld/providers/ProServiceWorldProvider.js.map +1 -0
- package/dist/proserviceworld/store/proserviceworldStore.d.ts +32 -0
- package/dist/proserviceworld/store/proserviceworldStore.d.ts.map +1 -0
- package/dist/proserviceworld/store/proserviceworldStore.js +2490 -0
- package/dist/proserviceworld/store/proserviceworldStore.js.map +1 -0
- package/dist/proserviceworld/types/index.d.ts +338 -0
- package/dist/proserviceworld/types/index.d.ts.map +1 -0
- package/dist/proserviceworld/utils/cn.d.ts +4 -0
- package/dist/proserviceworld/utils/cn.d.ts.map +1 -0
- package/dist/proserviceworld/utils/i18n.d.ts +6 -0
- package/dist/proserviceworld/utils/i18n.d.ts.map +1 -0
- package/dist/proserviceworld/utils/i18n.js +15 -0
- package/dist/proserviceworld/utils/i18n.js.map +1 -0
- package/dist/proserviceworld/utils/navigation.d.ts +2 -0
- package/dist/proserviceworld/utils/navigation.d.ts.map +1 -0
- package/dist/proserviceworld/utils/navigation.js +8 -0
- package/dist/proserviceworld/utils/navigation.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardPage.js","names":[],"sources":["../../../src/proserviceworld/pages/DashboardPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Badge } from '@burdenoff/fe-libs/ui';\nimport {\n Calendar,\n Star,\n DollarSign,\n TrendingUp,\n Users,\n CheckCircle,\n AlertCircle,\n Clock,\n BookOpen,\n BarChart3,\n Bell,\n Plus,\n Eye,\n MessageSquare,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\nimport { tWithFallback } from '../utils/i18n';\n\ntype DashboardView = 'client' | 'provider' | 'admin' | 'team';\n\nexport function DashboardPage() {\n const { t } = useI18n();\n const tr = (key: string, fallback: string, params?: Record<string, string | number>): string =>\n tWithFallback(t, key, fallback, params);\n const { bookings, providers, services, reviews, notifications } = useProServiceWorldStore();\n const [activeView, setActiveView] = useState<DashboardView>('client');\n\n const activeBookings = bookings.filter((b) => b.status === 'in_progress');\n const completedBookings = bookings.filter((b) => b.status === 'completed');\n const pendingBookings = bookings.filter((b) => b.status === 'pending');\n const totalSpent = bookings\n .filter((b) => b.paymentStatus === 'completed')\n .reduce((sum, b) => sum + b.budget, 0);\n const unreadNotifications = notifications.filter((n) => !n.read).length;\n\n const viewTabs: { id: DashboardView; label: string }[] = [\n { id: 'client', label: tr('proserviceworld.dashboard.views.client', 'Client') },\n { id: 'provider', label: tr('proserviceworld.dashboard.views.provider', 'Provider') },\n { id: 'admin', label: tr('proserviceworld.dashboard.views.admin', 'Admin') },\n { id: 'team', label: tr('proserviceworld.dashboard.views.team', 'Team') },\n ];\n const bookingStatusLabel = (status: string): string => {\n if (status === 'completed')\n return tr('proserviceworld.shared.bookingStatus.completed', 'completed');\n if (status === 'in_progress')\n return tr('proserviceworld.shared.bookingStatus.inProgress', 'in progress');\n if (status === 'pending') return tr('proserviceworld.shared.bookingStatus.pending', 'pending');\n return tr('proserviceworld.shared.bookingStatus.cancelled', 'cancelled');\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* View Selector */}\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {tr('proserviceworld.dashboard.title', 'Dashboard')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.subtitle',\n 'Welcome back! Here is your activity overview.'\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex bg-muted rounded-lg p-1\">\n {viewTabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => setActiveView(tab.id)}\n className={`px-3 py-1.5 rounded text-sm font-medium transition-colors ${\n activeView === tab.id\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n {unreadNotifications > 0 && (\n <Button variant=\"outline\" size=\"sm\">\n <Bell className=\"h-4 w-4 mr-1\" />\n {unreadNotifications}\n </Button>\n )}\n </div>\n </div>\n\n {/* Client Dashboard */}\n {activeView === 'client' && (\n <div className=\"space-y-6\">\n {/* Welcome Card */}\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-xl font-bold\">\n {tr('proserviceworld.dashboard.client.welcomeTitle', 'Welcome back, Alex!')}\n </h2>\n <p className=\"text-muted-foreground mt-1\">\n {tr(\n 'proserviceworld.dashboard.client.welcomeSubtitle',\n 'Manage your services, bookings, and find new providers'\n )}\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.dashboard.client.actions.findServices', 'Find Services')}\n </Button>\n </div>\n </CardContent>\n </Card>\n\n {/* Quick Stats */}\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Calendar className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{activeBookings.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.client.metrics.activeBookings',\n 'Active Bookings'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Star className=\"h-8 w-8 text-yellow-500\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">4.8</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.client.metrics.avgRatingGiven',\n 'Avg. Rating Given'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <CheckCircle className=\"h-8 w-8 text-green-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{completedBookings.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.client.metrics.completedProjects',\n 'Completed Projects'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <DollarSign className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">${totalSpent.toLocaleString()}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr('proserviceworld.dashboard.client.metrics.totalSpent', 'Total Spent')}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Recent Bookings */}\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>\n {tr(\n 'proserviceworld.dashboard.client.sections.recentBookings',\n 'Recent Bookings'\n )}\n </CardTitle>\n <Button variant=\"outline\" size=\"sm\">\n {tr('proserviceworld.shared.actions.viewAll', 'View All')}\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {bookings.slice(0, 5).map((booking) => (\n <div\n key={booking.id}\n className=\"flex items-center justify-between p-4 border rounded-lg\"\n >\n <div className=\"flex items-center space-x-4\">\n <div className=\"h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center\">\n <BookOpen className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <p className=\"font-medium\">{booking.title}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.client.booking.provider',\n 'Provider: {{name}}',\n {\n name: booking.providerName,\n }\n )}\n </p>\n </div>\n </div>\n <div className=\"text-right\">\n <p className=\"font-medium text-sm\">${booking.budget.toLocaleString()}</p>\n <Badge\n variant={\n booking.status === 'completed'\n ? 'default'\n : booking.status === 'in_progress'\n ? 'secondary'\n : 'outline'\n }\n >\n {bookingStatusLabel(booking.status)}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Provider Dashboard */}\n {activeView === 'provider' && (\n <div className=\"space-y-6\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-xl font-bold\">\n {tr(\n 'proserviceworld.dashboard.provider.welcomeTitle',\n 'Welcome back, Provider!'\n )}\n </h2>\n <p className=\"text-muted-foreground mt-1\">\n {tr(\n 'proserviceworld.dashboard.provider.welcomeSubtitle',\n 'Manage your services, bookings, and grow your business'\n )}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Plus className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.dashboard.provider.actions.addService', 'Add Service')}\n </Button>\n <Button size=\"sm\">\n <Eye className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.dashboard.provider.actions.editProfile', 'Edit Profile')}\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Star className=\"h-8 w-8 text-yellow-500\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">4.9</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.provider.metrics.rating',\n 'Rating ({{count}} reviews)',\n {\n count: reviews.length,\n }\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Calendar className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{activeBookings.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.provider.metrics.activeProjects',\n 'Active Projects'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <TrendingUp className=\"h-8 w-8 text-green-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">98%</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.provider.metrics.completionRate',\n 'Completion Rate'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <DollarSign className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">$12,850</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr('proserviceworld.dashboard.provider.metrics.thisMonth', 'This Month')}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>\n {tr('proserviceworld.dashboard.provider.sections.yourServices', 'Your Services')}\n </CardTitle>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Eye className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.shared.actions.viewAll', 'View All')}\n </Button>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.dashboard.provider.actions.addService', 'Add Service')}\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-4 md:grid-cols-3\">\n {services.slice(0, 3).map((service) => (\n <div key={service.id} className=\"border rounded-lg p-4\">\n <h4 className=\"font-medium mb-1\">{service.title}</h4>\n <p className=\"text-sm text-muted-foreground mb-2 line-clamp-2\">\n {service.description}\n </p>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">\n {tr('proserviceworld.services.card.pricing.from', 'From ${{amount}}', {\n amount: service.pricing.basePrice.toLocaleString(),\n })}\n </span>\n <Badge variant=\"secondary\">\n {tr(\n 'proserviceworld.dashboard.provider.service.bookings',\n '{{count}} bookings',\n {\n count: service.totalBookings,\n }\n )}\n </Badge>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Admin Dashboard */}\n {activeView === 'admin' && (\n <div className=\"space-y-6\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-xl font-bold\">\n {tr('proserviceworld.dashboard.admin.title', 'Admin Dashboard')}\n </h2>\n <p className=\"text-muted-foreground mt-1\">\n {tr(\n 'proserviceworld.dashboard.admin.subtitle',\n 'Monitor platform activity and manage users'\n )}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Users className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.dashboard.admin.actions.manageUsers', 'Manage Users')}\n </Button>\n <Button size=\"sm\">\n <BarChart3 className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.dashboard.admin.actions.viewReports', 'View Reports')}\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Users className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{providers.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.admin.metrics.totalProviders',\n 'Total Providers'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <BookOpen className=\"h-8 w-8 text-green-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{services.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.admin.metrics.totalServices',\n 'Total Services'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Calendar className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{bookings.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.admin.metrics.totalBookings',\n 'Total Bookings'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <DollarSign className=\"h-8 w-8 text-yellow-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">$45,670</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr('proserviceworld.dashboard.admin.metrics.totalRevenue', 'Total Revenue')}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>\n {tr(\n 'proserviceworld.dashboard.admin.sections.recentProviders',\n 'Recent Providers'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {providers.slice(0, 3).map((provider) => (\n <div key={provider.id} className=\"flex items-center space-x-4\">\n <div className=\"h-10 w-10 rounded-full bg-primary/10 flex items-center justify-center\">\n <span className=\"text-primary font-medium\">{provider.name.charAt(0)}</span>\n </div>\n <div className=\"flex-1\">\n <p className=\"font-medium\">{provider.businessName}</p>\n <p className=\"text-sm text-muted-foreground\">{provider.specializations[0]}</p>\n </div>\n <div className=\"flex items-center text-sm\">\n <Star className=\"h-4 w-4 text-yellow-400 mr-1\" />\n {provider.rating.toFixed(1)}\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>\n {tr('proserviceworld.dashboard.admin.sections.platformAlerts', 'Platform Alerts')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex items-start space-x-3\">\n <AlertCircle className=\"h-5 w-5 text-yellow-500 mt-0.5\" />\n <div>\n <p className=\"font-medium text-sm\">\n {tr(\n 'proserviceworld.dashboard.admin.alerts.pendingVerifications.title',\n 'Pending Verifications'\n )}\n </p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.admin.alerts.pendingVerifications.description',\n '3 providers awaiting verification'\n )}\n </p>\n </div>\n </div>\n <div className=\"flex items-start space-x-3\">\n <CheckCircle className=\"h-5 w-5 text-green-500 mt-0.5\" />\n <div>\n <p className=\"font-medium text-sm\">\n {tr(\n 'proserviceworld.dashboard.admin.alerts.systemStatus.title',\n 'System Status'\n )}\n </p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.admin.alerts.systemStatus.description',\n 'All systems operational'\n )}\n </p>\n </div>\n </div>\n <div className=\"flex items-start space-x-3\">\n <Bell className=\"h-5 w-5 text-blue-500 mt-0.5\" />\n <div>\n <p className=\"font-medium text-sm\">\n {tr('proserviceworld.dashboard.admin.alerts.newReviews.title', 'New Reviews')}\n </p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.admin.alerts.newReviews.description',\n '12 new reviews this week'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n )}\n\n {/* Team Member Dashboard */}\n {activeView === 'team' && (\n <div className=\"space-y-6\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-xl font-bold\">\n {tr('proserviceworld.dashboard.team.title', 'Welcome, Team Member!')}\n </h2>\n <p className=\"text-muted-foreground mt-1\">\n {tr(\n 'proserviceworld.dashboard.team.subtitle',\n 'Manage assigned tasks and projects'\n )}\n </p>\n </div>\n <Button variant=\"outline\" size=\"sm\">\n <Calendar className=\"h-4 w-4 mr-2\" />\n {tr('proserviceworld.dashboard.team.actions.myTasks', 'My Tasks')}\n </Button>\n </div>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <CheckCircle className=\"h-8 w-8 text-green-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">8</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.team.metrics.tasksCompleted',\n 'Tasks Completed'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Clock className=\"h-8 w-8 text-yellow-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{pendingBookings.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr('proserviceworld.dashboard.team.metrics.pendingTasks', 'Pending Tasks')}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Star className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">4.9</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.team.metrics.performanceScore',\n 'Performance Score'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-6\">\n <div className=\"flex items-center\">\n <Users className=\"h-8 w-8 text-blue-600\" />\n <div className=\"ml-4\">\n <p className=\"text-2xl font-bold\">{activeBookings.length}</p>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.team.metrics.activeProjects',\n 'Active Projects'\n )}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>\n {tr('proserviceworld.dashboard.team.sections.recentActivity', 'Recent Activity')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"text-center py-8\">\n <MessageSquare className=\"h-12 w-12 mx-auto text-muted-foreground mb-4\" />\n <p className=\"text-muted-foreground\">\n {tr(\n 'proserviceworld.dashboard.team.sections.comingSoon',\n 'Team member features coming soon'\n )}\n </p>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAwBA,SAAgB,IAAgB;CAC9B,IAAM,EAAE,SAAM,GAAS,EACjB,KAAM,GAAa,GAAkB,MACzC,EAAc,GAAG,GAAK,GAAU,EAAO,EACnC,EAAE,aAAU,cAAW,aAAU,YAAS,qBAAkB,GAAyB,EACrF,CAAC,GAAY,KAAiB,EAAwB,SAAS,EAE/D,IAAiB,EAAS,QAAQ,MAAM,EAAE,WAAW,cAAc,EACnE,IAAoB,EAAS,QAAQ,MAAM,EAAE,WAAW,YAAY,EACpE,IAAkB,EAAS,QAAQ,MAAM,EAAE,WAAW,UAAU,EAChE,IAAa,EAChB,QAAQ,MAAM,EAAE,kBAAkB,YAAY,CAC9C,QAAQ,GAAK,MAAM,IAAM,EAAE,QAAQ,EAAE,EAClC,IAAsB,EAAc,QAAQ,MAAM,CAAC,EAAE,KAAK,CAAC,QAE3D,IAAmD;EACvD;GAAE,IAAI;GAAU,OAAO,EAAG,0CAA0C,SAAS;GAAE;EAC/E;GAAE,IAAI;GAAY,OAAO,EAAG,4CAA4C,WAAW;GAAE;EACrF;GAAE,IAAI;GAAS,OAAO,EAAG,yCAAyC,QAAQ;GAAE;EAC5E;GAAE,IAAI;GAAQ,OAAO,EAAG,wCAAwC,OAAO;GAAE;EAC1E,EACK,KAAsB,MACtB,MAAW,cACN,EAAG,kDAAkD,YAAY,GACtE,MAAW,gBACN,EAAG,mDAAmD,cAAc,GACzE,MAAW,YAAkB,EAAG,gDAAgD,UAAU,GACvF,EAAG,kDAAkD,YAAY;AAG1E,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GAEE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eACX,EAAG,mCAAmC,YAAY;KAChD,CAAA,EACL,kBAAC,KAAD;KAAG,WAAU;eACV,EACC,sCACA,gDACD;KACC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAS,KAAK,MACb,kBAAC,UAAD;OAEE,eAAe,EAAc,EAAI,GAAG;OACpC,WAAW,6DACT,MAAe,EAAI,KACf,4CACA;iBAGL,EAAI;OACE,EATF,EAAI,GASF,CACT;MACE,CAAA,EACL,IAAsB,KACrB,kBAAC,GAAD;MAAQ,SAAQ;MAAU,MAAK;gBAA/B,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EACM;QAEP;OACF;;GAGL,MAAe,YACd,kBAAC,OAAD;IAAK,WAAU;cAAf;KAEE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBACrB,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAG,iDAAiD,sBAAsB;QACxE,CAAA,EACL,kBAAC,KAAD;QAAG,WAAU;kBACV,EACC,oDACA,yDACD;QACC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,GAAD;QAAQ,MAAK;kBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EAAG,yDAAyD,gBAAgB,CACtE;UACL;;MACM,CAAA,EACT,CAAA;KAGP,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA,EAC9C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAe;WAAW,CAAA,EAC7D,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,2DACA,kBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,2BAA4B,CAAA,EAC5C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB;WAAO,CAAA,EACzC,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,2DACA,oBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,0BAA2B,CAAA,EAClD,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAkB;WAAW,CAAA,EAChE,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,8DACA,qBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,yBAA0B,CAAA,EAChD,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAb,CAAkC,KAAE,EAAW,gBAAgB,CAAK;cACpE,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAG,uDAAuD,cAAc;WACvE,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACH;;KAGN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAA,UACG,EACC,4DACA,kBACD,EACS,CAAA,EACZ,kBAAC,GAAD;OAAQ,SAAQ;OAAU,MAAK;iBAC5B,EAAG,0CAA0C,WAAW;OAClD,CAAA,CACL;SACK,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBACpB,EAAS,MAAM,GAAG,EAAE,CAAC,KAAK,MACzB,kBAAC,OAAD;OAEE,WAAU;iBAFZ,CAIE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,GAAD,EAAU,WAAU,wBAAyB,CAAA;SACzC,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAe,EAAQ;SAAU,CAAA,EAC9C,kBAAC,KAAD;SAAG,WAAU;mBACV,EACC,qDACA,sBACA,EACE,MAAM,EAAQ,cACf,CACF;SACC,CAAA,CACA,EAAA,CAAA,CACF;WACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAb,CAAmC,KAAE,EAAQ,OAAO,gBAAgB,CAAK;YACzE,kBAAC,GAAD;SACE,SACE,EAAQ,WAAW,cACf,YACA,EAAQ,WAAW,gBACjB,cACA;mBAGP,EAAmB,EAAQ,OAAO;SAC7B,CAAA,CACJ;UACF;SAlCC,EAAQ,GAkCT,CACN;MACU,CAAA,CACT,EAAA,CAAA;KACH;;GAIP,MAAe,cACd,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBACrB,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EACC,mDACA,0BACD;QACE,CAAA,EACL,kBAAC,KAAD;QAAG,WAAU;kBACV,EACC,sDACA,yDACD;QACC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD;SAAQ,SAAQ;SAAU,MAAK;mBAA/B,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EAAG,yDAAyD,cAAc,CACpE;YACT,kBAAC,GAAD;SAAQ,MAAK;mBAAb,CACE,kBAAC,GAAD,EAAK,WAAU,gBAAiB,CAAA,EAC/B,EAAG,0DAA0D,eAAe,CACtE;WACL;UACF;;MACM,CAAA,EACT,CAAA;KAEP,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,2BAA4B,CAAA,EAC5C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB;WAAO,CAAA,EACzC,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,qDACA,8BACA,EACE,OAAO,EAAQ,QAChB,CACF;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA,EAC9C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAe;WAAW,CAAA,EAC7D,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,6DACA,kBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,0BAA2B,CAAA,EACjD,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB;WAAO,CAAA,EACzC,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,6DACA,kBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,yBAA0B,CAAA,EAChD,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB;WAAW,CAAA,EAC7C,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAG,wDAAwD,aAAa;WACvE,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACH;;KAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAA,UACG,EAAG,4DAA4D,gBAAgB,EACtE,CAAA,EACZ,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAQ,SAAQ;QAAU,MAAK;kBAA/B,CACE,kBAAC,GAAD,EAAK,WAAU,gBAAiB,CAAA,EAC/B,EAAG,0CAA0C,WAAW,CAClD;WACT,kBAAC,GAAD;QAAQ,MAAK;kBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,EAAG,yDAAyD,cAAc,CACpE;UACL;SACF;SACK,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAS,MAAM,GAAG,EAAE,CAAC,KAAK,MACzB,kBAAC,OAAD;OAAsB,WAAU;iBAAhC;QACE,kBAAC,MAAD;SAAI,WAAU;mBAAoB,EAAQ;SAAW,CAAA;QACrD,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAQ;SACP,CAAA;QACJ,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBACb,EAAG,8CAA8C,oBAAoB,EACpE,QAAQ,EAAQ,QAAQ,UAAU,gBAAgB,EACnD,CAAC;UACG,CAAA,EACP,kBAAC,GAAD;UAAO,SAAQ;oBACZ,EACC,uDACA,sBACA,EACE,OAAO,EAAQ,eAChB,CACF;UACK,CAAA,CACJ;;QACF;SArBI,EAAQ,GAqBZ,CACN;MACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA;KACH;;GAIP,MAAe,WACd,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBACrB,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAG,yCAAyC,kBAAkB;QAC5D,CAAA,EACL,kBAAC,KAAD;QAAG,WAAU;kBACV,EACC,4CACA,6CACD;QACC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD;SAAQ,SAAQ;SAAU,MAAK;mBAA/B,CACE,kBAAC,GAAD,EAAO,WAAU,gBAAiB,CAAA,EACjC,EAAG,uDAAuD,eAAe,CACnE;YACT,kBAAC,GAAD;SAAQ,MAAK;mBAAb,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EACrC,EAAG,uDAAuD,eAAe,CACnE;WACL;UACF;;MACM,CAAA,EACT,CAAA;KAEP,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,yBAA0B,CAAA,EAC3C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAU;WAAW,CAAA,EACxD,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,0DACA,kBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,0BAA2B,CAAA,EAC/C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAS;WAAW,CAAA,EACvD,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,yDACA,iBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,yBAA0B,CAAA,EAC9C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAS;WAAW,CAAA,EACvD,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,yDACA,iBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,2BAA4B,CAAA,EAClD,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB;WAAW,CAAA,EAC7C,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAG,wDAAwD,gBAAgB;WAC1E,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACH;;KAEN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UACG,EACC,4DACA,mBACD,EACS,CAAA,EACD,CAAA,EACb,kBAAC,GAAD;OAAa,WAAU;iBACpB,EAAU,MAAM,GAAG,EAAE,CAAC,KAAK,MAC1B,kBAAC,OAAD;QAAuB,WAAU;kBAAjC;SACE,kBAAC,OAAD;UAAK,WAAU;oBACb,kBAAC,QAAD;WAAM,WAAU;qBAA4B,EAAS,KAAK,OAAO,EAAE;WAAQ,CAAA;UACvE,CAAA;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAe,EAAS;WAAiB,CAAA,EACtD,kBAAC,KAAD;WAAG,WAAU;qBAAiC,EAAS,gBAAgB;WAAO,CAAA,CAC1E;;SACN,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,gCAAiC,CAAA,EAChD,EAAS,OAAO,QAAQ,EAAE,CACvB;;SACF;UAZI,EAAS,GAYb,CACN;OACU,CAAA,CACT,EAAA,CAAA,EAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UACG,EAAG,2DAA2D,kBAAkB,EACvE,CAAA,EACD,CAAA,EACb,kBAAC,GAAD;OAAa,WAAU;iBAAvB;QACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,kCAAmC,CAAA,EAC1D,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBACV,EACC,qEACA,wBACD;UACC,CAAA,EACJ,kBAAC,KAAD;UAAG,WAAU;oBACV,EACC,2EACA,oCACD;UACC,CAAA,CACA,EAAA,CAAA,CACF;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,iCAAkC,CAAA,EACzD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBACV,EACC,6DACA,gBACD;UACC,CAAA,EACJ,kBAAC,KAAD;UAAG,WAAU;oBACV,EACC,mEACA,0BACD;UACC,CAAA,CACA,EAAA,CAAA,CACF;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,gCAAiC,CAAA,EACjD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBACV,EAAG,2DAA2D,cAAc;UAC3E,CAAA,EACJ,kBAAC,KAAD;UAAG,WAAU;oBACV,EACC,iEACA,2BACD;UACC,CAAA,CACA,EAAA,CAAA,CACF;;QACM;SACT,EAAA,CAAA,CACH;;KACF;;GAIP,MAAe,UACd,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBACrB,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAG,wCAAwC,wBAAwB;QACjE,CAAA,EACL,kBAAC,KAAD;QAAG,WAAU;kBACV,EACC,2CACA,qCACD;QACC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,GAAD;QAAQ,SAAQ;QAAU,MAAK;kBAA/B,CACE,kBAAC,GAAD,EAAU,WAAU,gBAAiB,CAAA,EACpC,EAAG,kDAAkD,WAAW,CAC1D;UACL;;MACM,CAAA,EACT,CAAA;KAEP,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,0BAA2B,CAAA,EAClD,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB;WAAK,CAAA,EACvC,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,yDACA,kBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,2BAA4B,CAAA,EAC7C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAgB;WAAW,CAAA,EAC9D,kBAAC,KAAD;WAAG,WAAU;qBACV,EAAG,uDAAuD,gBAAgB;WACzE,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,yBAA0B,CAAA,EAC1C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAqB;WAAO,CAAA,EACzC,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,2DACA,oBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;QAAa,WAAU;kBACrB,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,GAAD,EAAO,WAAU,yBAA0B,CAAA,EAC3C,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAsB,EAAe;WAAW,CAAA,EAC7D,kBAAC,KAAD;WAAG,WAAU;qBACV,EACC,yDACA,kBACD;WACC,CAAA,CACA;YACF;;QACM,CAAA,EACT,CAAA;OACH;;KAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UACG,EAAG,0DAA0D,kBAAkB,EACtE,CAAA,EACD,CAAA,EACb,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,GAAD,EAAe,WAAU,gDAAiD,CAAA,EAC1E,kBAAC,KAAD;OAAG,WAAU;iBACV,EACC,sDACA,mCACD;OACC,CAAA,CACQ;QACT,EAAA,CAAA;KACH;;GAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentsPage.d.ts","sourceRoot":"","sources":["../../../src/proserviceworld/pages/DocumentsPage.tsx"],"names":[],"mappings":"AAyEA,wBAAgB,aAAa,4CAkb5B"}
|
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import { useProServiceWorldStore as e } from "../store/proserviceworldStore.js";
|
|
2
|
+
import { useMemo as t, useState as n } from "react";
|
|
3
|
+
import { ArrowUpDown as r, ChevronRight as i, Clock as a, Download as o, File as s, FileText as c, FolderOpen as l, FolderPlus as u, Grid3x3 as d, HardDrive as f, Image as p, List as m, MoreHorizontal as h, Search as g, Share2 as _, Star as v, Upload as y, Users as b } from "lucide-react";
|
|
4
|
+
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
5
|
+
import { Button as w, Card as T, CardContent as E, CardHeader as D, CardTitle as O, Input as k } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/proserviceworld/pages/DocumentsPage.tsx
|
|
7
|
+
var A = {
|
|
8
|
+
pdf: c,
|
|
9
|
+
docx: s,
|
|
10
|
+
doc: s,
|
|
11
|
+
txt: c,
|
|
12
|
+
image: p,
|
|
13
|
+
video: s,
|
|
14
|
+
audio: s,
|
|
15
|
+
other: s
|
|
16
|
+
}, j = {
|
|
17
|
+
pdf: "text-red-500",
|
|
18
|
+
docx: "text-blue-500",
|
|
19
|
+
doc: "text-blue-500",
|
|
20
|
+
txt: "text-gray-500",
|
|
21
|
+
image: "text-green-500",
|
|
22
|
+
video: "text-purple-500",
|
|
23
|
+
audio: "text-orange-500",
|
|
24
|
+
other: "text-gray-400"
|
|
25
|
+
}, M = {
|
|
26
|
+
blue: "text-blue-500",
|
|
27
|
+
green: "text-green-500",
|
|
28
|
+
purple: "text-purple-500",
|
|
29
|
+
yellow: "text-yellow-500",
|
|
30
|
+
red: "text-red-500"
|
|
31
|
+
};
|
|
32
|
+
function N(e) {
|
|
33
|
+
return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;
|
|
34
|
+
}
|
|
35
|
+
function P() {
|
|
36
|
+
let { documents: p, folders: P } = e(), [F, I] = n("grid"), [L, R] = n(""), [z, B] = n("all"), [V, H] = n("date"), [U, W] = n(!1), [G, K] = n(null), [q, J] = n(!1), [Y, X] = n(!1), Z = t(() => {
|
|
37
|
+
let e = [...p];
|
|
38
|
+
if (G && (e = e.filter((e) => e.folderId === G)), z === "starred" ? e = e.filter((e) => e.isStarred) : z !== "all" && (e = e.filter((e) => e.type === z)), L.trim()) {
|
|
39
|
+
let t = L.toLowerCase();
|
|
40
|
+
e = e.filter((e) => e.name.toLowerCase().includes(t) || e.tags.some((e) => e.toLowerCase().includes(t)));
|
|
41
|
+
}
|
|
42
|
+
return e.sort((e, t) => {
|
|
43
|
+
let n = V === "name" ? e.name.localeCompare(t.name) : V === "date" ? new Date(t.modifiedAt).getTime() - new Date(e.modifiedAt).getTime() : t.size - e.size;
|
|
44
|
+
return U ? -n : n;
|
|
45
|
+
}), e;
|
|
46
|
+
}, [
|
|
47
|
+
p,
|
|
48
|
+
G,
|
|
49
|
+
z,
|
|
50
|
+
L,
|
|
51
|
+
V,
|
|
52
|
+
U
|
|
53
|
+
]), Q = p.reduce((e, t) => e + t.size, 0), ee = p.filter((e) => e.isStarred).length, $ = G ? P.find((e) => e.id === G) : null, te = (e) => {
|
|
54
|
+
V === e ? W(!U) : (H(e), W(!1));
|
|
55
|
+
};
|
|
56
|
+
return /* @__PURE__ */ C("div", {
|
|
57
|
+
className: "space-y-6 p-6",
|
|
58
|
+
children: [
|
|
59
|
+
/* @__PURE__ */ C("div", {
|
|
60
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
61
|
+
children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h1", {
|
|
62
|
+
className: "text-2xl font-semibold",
|
|
63
|
+
children: "Documents"
|
|
64
|
+
}), /* @__PURE__ */ S("p", {
|
|
65
|
+
className: "text-sm text-muted-foreground",
|
|
66
|
+
children: "Manage files, folders, and shared documents."
|
|
67
|
+
})] }), /* @__PURE__ */ C("div", {
|
|
68
|
+
className: "flex gap-2",
|
|
69
|
+
children: [/* @__PURE__ */ C(w, {
|
|
70
|
+
variant: "outline",
|
|
71
|
+
size: "sm",
|
|
72
|
+
onClick: () => X(!0),
|
|
73
|
+
children: [/* @__PURE__ */ S(u, { className: "mr-2 h-4 w-4" }), " New Folder"]
|
|
74
|
+
}), /* @__PURE__ */ C(w, {
|
|
75
|
+
size: "sm",
|
|
76
|
+
onClick: () => J(!0),
|
|
77
|
+
children: [/* @__PURE__ */ S(y, { className: "mr-2 h-4 w-4" }), " Upload"]
|
|
78
|
+
})]
|
|
79
|
+
})]
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ C("div", {
|
|
82
|
+
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
83
|
+
children: [
|
|
84
|
+
/* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(E, {
|
|
85
|
+
className: "pt-4",
|
|
86
|
+
children: /* @__PURE__ */ C("div", {
|
|
87
|
+
className: "flex items-center gap-3",
|
|
88
|
+
children: [/* @__PURE__ */ S("div", {
|
|
89
|
+
className: "rounded-lg bg-blue-100 p-2 dark:bg-blue-950",
|
|
90
|
+
children: /* @__PURE__ */ S(c, { className: "h-5 w-5 text-blue-600" })
|
|
91
|
+
}), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
|
|
92
|
+
className: "text-2xl font-bold",
|
|
93
|
+
children: p.length
|
|
94
|
+
}), /* @__PURE__ */ S("p", {
|
|
95
|
+
className: "text-xs text-muted-foreground",
|
|
96
|
+
children: "Total Files"
|
|
97
|
+
})] })]
|
|
98
|
+
})
|
|
99
|
+
}) }),
|
|
100
|
+
/* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(E, {
|
|
101
|
+
className: "pt-4",
|
|
102
|
+
children: /* @__PURE__ */ C("div", {
|
|
103
|
+
className: "flex items-center gap-3",
|
|
104
|
+
children: [/* @__PURE__ */ S("div", {
|
|
105
|
+
className: "rounded-lg bg-purple-100 p-2 dark:bg-purple-950",
|
|
106
|
+
children: /* @__PURE__ */ S(l, { className: "h-5 w-5 text-purple-600" })
|
|
107
|
+
}), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
|
|
108
|
+
className: "text-2xl font-bold",
|
|
109
|
+
children: P.length
|
|
110
|
+
}), /* @__PURE__ */ S("p", {
|
|
111
|
+
className: "text-xs text-muted-foreground",
|
|
112
|
+
children: "Folders"
|
|
113
|
+
})] })]
|
|
114
|
+
})
|
|
115
|
+
}) }),
|
|
116
|
+
/* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(E, {
|
|
117
|
+
className: "pt-4",
|
|
118
|
+
children: /* @__PURE__ */ C("div", {
|
|
119
|
+
className: "flex items-center gap-3",
|
|
120
|
+
children: [/* @__PURE__ */ S("div", {
|
|
121
|
+
className: "rounded-lg bg-yellow-100 p-2 dark:bg-yellow-950",
|
|
122
|
+
children: /* @__PURE__ */ S(v, { className: "h-5 w-5 text-yellow-600" })
|
|
123
|
+
}), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
|
|
124
|
+
className: "text-2xl font-bold",
|
|
125
|
+
children: ee
|
|
126
|
+
}), /* @__PURE__ */ S("p", {
|
|
127
|
+
className: "text-xs text-muted-foreground",
|
|
128
|
+
children: "Starred"
|
|
129
|
+
})] })]
|
|
130
|
+
})
|
|
131
|
+
}) }),
|
|
132
|
+
/* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(E, {
|
|
133
|
+
className: "pt-4",
|
|
134
|
+
children: /* @__PURE__ */ C("div", {
|
|
135
|
+
className: "flex items-center gap-3",
|
|
136
|
+
children: [/* @__PURE__ */ S("div", {
|
|
137
|
+
className: "rounded-lg bg-green-100 p-2 dark:bg-green-950",
|
|
138
|
+
children: /* @__PURE__ */ S(f, { className: "h-5 w-5 text-green-600" })
|
|
139
|
+
}), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
|
|
140
|
+
className: "text-2xl font-bold",
|
|
141
|
+
children: N(Q)
|
|
142
|
+
}), /* @__PURE__ */ S("p", {
|
|
143
|
+
className: "text-xs text-muted-foreground",
|
|
144
|
+
children: "Total Size"
|
|
145
|
+
})] })]
|
|
146
|
+
})
|
|
147
|
+
}) })
|
|
148
|
+
]
|
|
149
|
+
}),
|
|
150
|
+
/* @__PURE__ */ C("div", {
|
|
151
|
+
className: "flex items-center gap-2 text-sm",
|
|
152
|
+
children: [/* @__PURE__ */ S("button", {
|
|
153
|
+
onClick: () => K(null),
|
|
154
|
+
className: `font-medium ${G ? "text-muted-foreground hover:text-foreground" : "text-primary"}`,
|
|
155
|
+
children: "All Files"
|
|
156
|
+
}), $ && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(i, { className: "h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ S("span", {
|
|
157
|
+
className: "font-medium text-primary",
|
|
158
|
+
children: $.name
|
|
159
|
+
})] })]
|
|
160
|
+
}),
|
|
161
|
+
/* @__PURE__ */ C("div", {
|
|
162
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-center",
|
|
163
|
+
children: [/* @__PURE__ */ C("div", {
|
|
164
|
+
className: "relative flex-1",
|
|
165
|
+
children: [/* @__PURE__ */ S(g, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), /* @__PURE__ */ S(k, {
|
|
166
|
+
placeholder: "Search documents...",
|
|
167
|
+
value: L,
|
|
168
|
+
onChange: (e) => R(e.target.value),
|
|
169
|
+
className: "pl-10"
|
|
170
|
+
})]
|
|
171
|
+
}), /* @__PURE__ */ C("div", {
|
|
172
|
+
className: "flex items-center gap-2",
|
|
173
|
+
children: [/* @__PURE__ */ S("div", {
|
|
174
|
+
className: "flex flex-wrap gap-1",
|
|
175
|
+
children: [
|
|
176
|
+
"all",
|
|
177
|
+
"pdf",
|
|
178
|
+
"docx",
|
|
179
|
+
"txt",
|
|
180
|
+
"starred"
|
|
181
|
+
].map((e) => /* @__PURE__ */ S("button", {
|
|
182
|
+
onClick: () => B(e),
|
|
183
|
+
className: `rounded px-2 py-1 text-xs font-medium transition-colors ${z === e ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground hover:bg-muted/80"}`,
|
|
184
|
+
children: e === "all" ? "All" : e === "starred" ? "Starred" : e.toUpperCase()
|
|
185
|
+
}, e))
|
|
186
|
+
}), /* @__PURE__ */ C("div", {
|
|
187
|
+
className: "flex rounded border",
|
|
188
|
+
children: [/* @__PURE__ */ S("button", {
|
|
189
|
+
onClick: () => I("grid"),
|
|
190
|
+
className: `p-1.5 ${F === "grid" ? "bg-primary text-primary-foreground" : "text-muted-foreground"}`,
|
|
191
|
+
children: /* @__PURE__ */ S(d, { className: "h-4 w-4" })
|
|
192
|
+
}), /* @__PURE__ */ S("button", {
|
|
193
|
+
onClick: () => I("list"),
|
|
194
|
+
className: `p-1.5 ${F === "list" ? "bg-primary text-primary-foreground" : "text-muted-foreground"}`,
|
|
195
|
+
children: /* @__PURE__ */ S(m, { className: "h-4 w-4" })
|
|
196
|
+
})]
|
|
197
|
+
})]
|
|
198
|
+
})]
|
|
199
|
+
}),
|
|
200
|
+
/* @__PURE__ */ S("div", {
|
|
201
|
+
className: "flex gap-2",
|
|
202
|
+
children: [
|
|
203
|
+
{
|
|
204
|
+
field: "name",
|
|
205
|
+
label: "Name"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
field: "date",
|
|
209
|
+
label: "Date"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
field: "size",
|
|
213
|
+
label: "Size"
|
|
214
|
+
}
|
|
215
|
+
].map(({ field: e, label: t }) => /* @__PURE__ */ C("button", {
|
|
216
|
+
onClick: () => te(e),
|
|
217
|
+
className: `flex items-center gap-1 rounded border px-3 py-1 text-xs ${V === e ? "border-primary bg-primary/5 text-primary" : "text-muted-foreground hover:bg-muted/50"}`,
|
|
218
|
+
children: [/* @__PURE__ */ S(r, { className: "h-3 w-3" }), t]
|
|
219
|
+
}, e))
|
|
220
|
+
}),
|
|
221
|
+
!G && /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h3", {
|
|
222
|
+
className: "mb-3 text-sm font-medium text-muted-foreground",
|
|
223
|
+
children: "Folders"
|
|
224
|
+
}), /* @__PURE__ */ S("div", {
|
|
225
|
+
className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-4",
|
|
226
|
+
children: P.map((e) => /* @__PURE__ */ C("button", {
|
|
227
|
+
onClick: () => K(e.id),
|
|
228
|
+
className: "flex items-center gap-3 rounded-lg border p-3 text-left transition-colors hover:bg-muted/50",
|
|
229
|
+
children: [/* @__PURE__ */ S(l, { className: `h-8 w-8 ${M[e.color] ?? "text-gray-500"}` }), /* @__PURE__ */ C("div", {
|
|
230
|
+
className: "min-w-0 flex-1",
|
|
231
|
+
children: [/* @__PURE__ */ S("p", {
|
|
232
|
+
className: "truncate font-medium text-sm",
|
|
233
|
+
children: e.name
|
|
234
|
+
}), /* @__PURE__ */ C("p", {
|
|
235
|
+
className: "text-xs text-muted-foreground",
|
|
236
|
+
children: [
|
|
237
|
+
e.documentsCount,
|
|
238
|
+
" files",
|
|
239
|
+
e.isPublic && " - Public"
|
|
240
|
+
]
|
|
241
|
+
})]
|
|
242
|
+
})]
|
|
243
|
+
}, e.id))
|
|
244
|
+
})] }),
|
|
245
|
+
/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("h3", {
|
|
246
|
+
className: "mb-3 text-sm font-medium text-muted-foreground",
|
|
247
|
+
children: ["Files ", Z.length > 0 && `(${Z.length})`]
|
|
248
|
+
}), Z.length === 0 ? /* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(E, {
|
|
249
|
+
className: "py-12 text-center text-muted-foreground",
|
|
250
|
+
children: "No files found. Try adjusting your filters."
|
|
251
|
+
}) }) : F === "grid" ? /* @__PURE__ */ S("div", {
|
|
252
|
+
className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",
|
|
253
|
+
children: Z.map((e) => /* @__PURE__ */ S(T, {
|
|
254
|
+
className: "hover:bg-muted/30 transition-colors",
|
|
255
|
+
children: /* @__PURE__ */ C(E, {
|
|
256
|
+
className: "pt-4",
|
|
257
|
+
children: [
|
|
258
|
+
/* @__PURE__ */ C("div", {
|
|
259
|
+
className: "flex items-start justify-between",
|
|
260
|
+
children: [/* @__PURE__ */ S(A[e.type] ?? s, { className: `h-10 w-10 ${j[e.type] ?? "text-gray-400"}` }), /* @__PURE__ */ C("div", {
|
|
261
|
+
className: "flex items-center gap-1",
|
|
262
|
+
children: [e.isStarred && /* @__PURE__ */ S(v, { className: "h-4 w-4 fill-yellow-400 text-yellow-400" }), e.sharedWith > 0 && /* @__PURE__ */ S(_, { className: "h-4 w-4 text-muted-foreground" })]
|
|
263
|
+
})]
|
|
264
|
+
}),
|
|
265
|
+
/* @__PURE__ */ S("h4", {
|
|
266
|
+
className: "mt-3 truncate font-medium text-sm",
|
|
267
|
+
children: e.name
|
|
268
|
+
}),
|
|
269
|
+
/* @__PURE__ */ C("div", {
|
|
270
|
+
className: "mt-1 flex items-center gap-2 text-xs text-muted-foreground",
|
|
271
|
+
children: [/* @__PURE__ */ S("span", { children: N(e.size) }), /* @__PURE__ */ C("span", { children: ["v", e.version] })]
|
|
272
|
+
}),
|
|
273
|
+
/* @__PURE__ */ C("div", {
|
|
274
|
+
className: "mt-2 flex items-center gap-1 text-xs text-muted-foreground",
|
|
275
|
+
children: [
|
|
276
|
+
/* @__PURE__ */ S(a, { className: "h-3 w-3" }),
|
|
277
|
+
" ",
|
|
278
|
+
e.modifiedAt
|
|
279
|
+
]
|
|
280
|
+
}),
|
|
281
|
+
/* @__PURE__ */ C("div", {
|
|
282
|
+
className: "mt-3 flex gap-1",
|
|
283
|
+
children: [/* @__PURE__ */ C(w, {
|
|
284
|
+
variant: "outline",
|
|
285
|
+
size: "sm",
|
|
286
|
+
className: "flex-1 text-xs",
|
|
287
|
+
children: [/* @__PURE__ */ S(o, { className: "mr-1 h-3 w-3" }), " Download"]
|
|
288
|
+
}), /* @__PURE__ */ S(w, {
|
|
289
|
+
variant: "outline",
|
|
290
|
+
size: "sm",
|
|
291
|
+
children: /* @__PURE__ */ S(h, { className: "h-3 w-3" })
|
|
292
|
+
})]
|
|
293
|
+
})
|
|
294
|
+
]
|
|
295
|
+
})
|
|
296
|
+
}, e.id))
|
|
297
|
+
}) : /* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(E, {
|
|
298
|
+
className: "pt-4",
|
|
299
|
+
children: /* @__PURE__ */ S("div", {
|
|
300
|
+
className: "overflow-x-auto",
|
|
301
|
+
children: /* @__PURE__ */ C("table", {
|
|
302
|
+
className: "w-full text-sm",
|
|
303
|
+
children: [/* @__PURE__ */ S("thead", { children: /* @__PURE__ */ C("tr", {
|
|
304
|
+
className: "border-b text-left text-muted-foreground",
|
|
305
|
+
children: [
|
|
306
|
+
/* @__PURE__ */ S("th", {
|
|
307
|
+
className: "p-3",
|
|
308
|
+
children: "Name"
|
|
309
|
+
}),
|
|
310
|
+
/* @__PURE__ */ S("th", {
|
|
311
|
+
className: "p-3",
|
|
312
|
+
children: "Type"
|
|
313
|
+
}),
|
|
314
|
+
/* @__PURE__ */ S("th", {
|
|
315
|
+
className: "p-3",
|
|
316
|
+
children: "Size"
|
|
317
|
+
}),
|
|
318
|
+
/* @__PURE__ */ S("th", {
|
|
319
|
+
className: "p-3",
|
|
320
|
+
children: "Modified"
|
|
321
|
+
}),
|
|
322
|
+
/* @__PURE__ */ S("th", {
|
|
323
|
+
className: "p-3",
|
|
324
|
+
children: "Uploaded By"
|
|
325
|
+
}),
|
|
326
|
+
/* @__PURE__ */ S("th", {
|
|
327
|
+
className: "p-3 text-right",
|
|
328
|
+
children: "Actions"
|
|
329
|
+
})
|
|
330
|
+
]
|
|
331
|
+
}) }), /* @__PURE__ */ S("tbody", { children: Z.map((e) => /* @__PURE__ */ C("tr", {
|
|
332
|
+
className: "border-b hover:bg-muted/50",
|
|
333
|
+
children: [
|
|
334
|
+
/* @__PURE__ */ S("td", {
|
|
335
|
+
className: "p-3",
|
|
336
|
+
children: /* @__PURE__ */ C("div", {
|
|
337
|
+
className: "flex items-center gap-2",
|
|
338
|
+
children: [
|
|
339
|
+
/* @__PURE__ */ S(A[e.type] ?? s, { className: `h-5 w-5 ${j[e.type] ?? "text-gray-400"}` }),
|
|
340
|
+
/* @__PURE__ */ S("span", {
|
|
341
|
+
className: "font-medium",
|
|
342
|
+
children: e.name
|
|
343
|
+
}),
|
|
344
|
+
e.isStarred && /* @__PURE__ */ S(v, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }),
|
|
345
|
+
e.sharedWith > 0 && /* @__PURE__ */ C("span", {
|
|
346
|
+
className: "flex items-center gap-0.5 text-xs text-muted-foreground",
|
|
347
|
+
children: [
|
|
348
|
+
/* @__PURE__ */ S(b, { className: "h-3 w-3" }),
|
|
349
|
+
" ",
|
|
350
|
+
e.sharedWith
|
|
351
|
+
]
|
|
352
|
+
})
|
|
353
|
+
]
|
|
354
|
+
})
|
|
355
|
+
}),
|
|
356
|
+
/* @__PURE__ */ S("td", {
|
|
357
|
+
className: "p-3 uppercase text-xs",
|
|
358
|
+
children: e.type
|
|
359
|
+
}),
|
|
360
|
+
/* @__PURE__ */ S("td", {
|
|
361
|
+
className: "p-3",
|
|
362
|
+
children: N(e.size)
|
|
363
|
+
}),
|
|
364
|
+
/* @__PURE__ */ S("td", {
|
|
365
|
+
className: "p-3 text-muted-foreground",
|
|
366
|
+
children: e.modifiedAt
|
|
367
|
+
}),
|
|
368
|
+
/* @__PURE__ */ S("td", {
|
|
369
|
+
className: "p-3 text-muted-foreground",
|
|
370
|
+
children: e.uploadedBy
|
|
371
|
+
}),
|
|
372
|
+
/* @__PURE__ */ S("td", {
|
|
373
|
+
className: "p-3",
|
|
374
|
+
children: /* @__PURE__ */ C("div", {
|
|
375
|
+
className: "flex justify-end gap-1",
|
|
376
|
+
children: [/* @__PURE__ */ S(w, {
|
|
377
|
+
variant: "outline",
|
|
378
|
+
size: "sm",
|
|
379
|
+
children: /* @__PURE__ */ S(o, { className: "h-3 w-3" })
|
|
380
|
+
}), /* @__PURE__ */ S(w, {
|
|
381
|
+
variant: "outline",
|
|
382
|
+
size: "sm",
|
|
383
|
+
children: /* @__PURE__ */ S(_, { className: "h-3 w-3" })
|
|
384
|
+
})]
|
|
385
|
+
})
|
|
386
|
+
})
|
|
387
|
+
]
|
|
388
|
+
}, e.id)) })]
|
|
389
|
+
})
|
|
390
|
+
})
|
|
391
|
+
}) })] }),
|
|
392
|
+
q && /* @__PURE__ */ S("div", {
|
|
393
|
+
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
|
|
394
|
+
children: /* @__PURE__ */ C(T, {
|
|
395
|
+
className: "mx-4 w-full max-w-md",
|
|
396
|
+
children: [/* @__PURE__ */ S(D, { children: /* @__PURE__ */ C("div", {
|
|
397
|
+
className: "flex items-center justify-between",
|
|
398
|
+
children: [/* @__PURE__ */ S(O, { children: "Upload Files" }), /* @__PURE__ */ S(w, {
|
|
399
|
+
variant: "outline",
|
|
400
|
+
size: "sm",
|
|
401
|
+
onClick: () => J(!1),
|
|
402
|
+
children: "Close"
|
|
403
|
+
})]
|
|
404
|
+
}) }), /* @__PURE__ */ C(E, {
|
|
405
|
+
className: "space-y-4",
|
|
406
|
+
children: [
|
|
407
|
+
/* @__PURE__ */ C("div", {
|
|
408
|
+
className: "flex flex-col items-center justify-center rounded-lg border-2 border-dashed p-8",
|
|
409
|
+
children: [
|
|
410
|
+
/* @__PURE__ */ S(y, { className: "h-10 w-10 text-muted-foreground" }),
|
|
411
|
+
/* @__PURE__ */ S("p", {
|
|
412
|
+
className: "mt-2 text-sm font-medium",
|
|
413
|
+
children: "Drag & drop files here"
|
|
414
|
+
}),
|
|
415
|
+
/* @__PURE__ */ S("p", {
|
|
416
|
+
className: "text-xs text-muted-foreground",
|
|
417
|
+
children: "or click to browse"
|
|
418
|
+
})
|
|
419
|
+
]
|
|
420
|
+
}),
|
|
421
|
+
/* @__PURE__ */ C("div", {
|
|
422
|
+
className: "space-y-2",
|
|
423
|
+
children: [/* @__PURE__ */ S("label", {
|
|
424
|
+
className: "text-sm font-medium",
|
|
425
|
+
children: "Destination Folder"
|
|
426
|
+
}), /* @__PURE__ */ C("select", {
|
|
427
|
+
className: "w-full rounded border bg-background px-3 py-2 text-sm",
|
|
428
|
+
children: [/* @__PURE__ */ S("option", {
|
|
429
|
+
value: "",
|
|
430
|
+
children: "Root"
|
|
431
|
+
}), P.map((e) => /* @__PURE__ */ S("option", {
|
|
432
|
+
value: e.id,
|
|
433
|
+
children: e.name
|
|
434
|
+
}, e.id))]
|
|
435
|
+
})]
|
|
436
|
+
}),
|
|
437
|
+
/* @__PURE__ */ C("div", {
|
|
438
|
+
className: "flex gap-2",
|
|
439
|
+
children: [/* @__PURE__ */ S(w, {
|
|
440
|
+
variant: "outline",
|
|
441
|
+
className: "flex-1",
|
|
442
|
+
onClick: () => J(!1),
|
|
443
|
+
children: "Cancel"
|
|
444
|
+
}), /* @__PURE__ */ S(w, {
|
|
445
|
+
className: "flex-1",
|
|
446
|
+
children: "Upload"
|
|
447
|
+
})]
|
|
448
|
+
})
|
|
449
|
+
]
|
|
450
|
+
})]
|
|
451
|
+
})
|
|
452
|
+
}),
|
|
453
|
+
Y && /* @__PURE__ */ S("div", {
|
|
454
|
+
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
|
|
455
|
+
children: /* @__PURE__ */ C(T, {
|
|
456
|
+
className: "mx-4 w-full max-w-md",
|
|
457
|
+
children: [/* @__PURE__ */ S(D, { children: /* @__PURE__ */ C("div", {
|
|
458
|
+
className: "flex items-center justify-between",
|
|
459
|
+
children: [/* @__PURE__ */ S(O, { children: "Create Folder" }), /* @__PURE__ */ S(w, {
|
|
460
|
+
variant: "outline",
|
|
461
|
+
size: "sm",
|
|
462
|
+
onClick: () => X(!1),
|
|
463
|
+
children: "Close"
|
|
464
|
+
})]
|
|
465
|
+
}) }), /* @__PURE__ */ C(E, {
|
|
466
|
+
className: "space-y-4",
|
|
467
|
+
children: [/* @__PURE__ */ C("div", {
|
|
468
|
+
className: "space-y-2",
|
|
469
|
+
children: [/* @__PURE__ */ S("label", {
|
|
470
|
+
className: "text-sm font-medium",
|
|
471
|
+
children: "Folder Name"
|
|
472
|
+
}), /* @__PURE__ */ S(k, { placeholder: "Enter folder name..." })]
|
|
473
|
+
}), /* @__PURE__ */ C("div", {
|
|
474
|
+
className: "flex gap-2",
|
|
475
|
+
children: [/* @__PURE__ */ S(w, {
|
|
476
|
+
variant: "outline",
|
|
477
|
+
className: "flex-1",
|
|
478
|
+
onClick: () => X(!1),
|
|
479
|
+
children: "Cancel"
|
|
480
|
+
}), /* @__PURE__ */ S(w, {
|
|
481
|
+
className: "flex-1",
|
|
482
|
+
children: "Create"
|
|
483
|
+
})]
|
|
484
|
+
})]
|
|
485
|
+
})]
|
|
486
|
+
})
|
|
487
|
+
})
|
|
488
|
+
]
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
//#endregion
|
|
492
|
+
export { P as DocumentsPage };
|
|
493
|
+
|
|
494
|
+
//# sourceMappingURL=DocumentsPage.js.map
|