@burdenoff/microfe-proserviceworld 2026.525.1 → 2026.624.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/proserviceworld/pages/AdminReportsPage.js +28 -28
  2. package/dist/proserviceworld/pages/AdminReportsPage.js.map +1 -1
  3. package/dist/proserviceworld/pages/AdminUsersPage.js +19 -19
  4. package/dist/proserviceworld/pages/AdminUsersPage.js.map +1 -1
  5. package/dist/proserviceworld/pages/AnalyticsPage.js +27 -27
  6. package/dist/proserviceworld/pages/AnalyticsPage.js.map +1 -1
  7. package/dist/proserviceworld/pages/BookingsPage.js +24 -24
  8. package/dist/proserviceworld/pages/BookingsPage.js.map +1 -1
  9. package/dist/proserviceworld/pages/DashboardPage.js +33 -33
  10. package/dist/proserviceworld/pages/DashboardPage.js.map +1 -1
  11. package/dist/proserviceworld/pages/DocumentsPage.js +29 -29
  12. package/dist/proserviceworld/pages/DocumentsPage.js.map +1 -1
  13. package/dist/proserviceworld/pages/MessagesPage.js +15 -15
  14. package/dist/proserviceworld/pages/MessagesPage.js.map +1 -1
  15. package/dist/proserviceworld/pages/PaymentsPage.js +19 -19
  16. package/dist/proserviceworld/pages/PaymentsPage.js.map +1 -1
  17. package/dist/proserviceworld/pages/ProjectsPage.js +36 -36
  18. package/dist/proserviceworld/pages/ProjectsPage.js.map +1 -1
  19. package/dist/proserviceworld/pages/ProviderDetailPage.js +36 -36
  20. package/dist/proserviceworld/pages/ProviderDetailPage.js.map +1 -1
  21. package/dist/proserviceworld/pages/ProvidersPage.js +19 -19
  22. package/dist/proserviceworld/pages/ProvidersPage.js.map +1 -1
  23. package/dist/proserviceworld/pages/ReviewsPage.js +22 -22
  24. package/dist/proserviceworld/pages/ReviewsPage.js.map +1 -1
  25. package/dist/proserviceworld/pages/ServiceDetailsPage.js +35 -35
  26. package/dist/proserviceworld/pages/ServiceDetailsPage.js.map +1 -1
  27. package/dist/proserviceworld/pages/ServicesPage.js +14 -14
  28. package/dist/proserviceworld/pages/ServicesPage.js.map +1 -1
  29. package/dist/proserviceworld/pages/VerificationPage.js +23 -23
  30. package/dist/proserviceworld/pages/VerificationPage.js.map +1 -1
  31. package/package.json +1 -1
@@ -1 +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":"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"}
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-text-secondary\">\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-bg-sunken 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-bg-surface text-text-primary shadow-sm'\n : 'text-text-secondary hover:text-text-primary'\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-text-secondary 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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-action-primary-bg/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-text-secondary\">\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-text-secondary 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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-text-secondary 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-text-secondary 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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-action-primary-bg/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-text-secondary\">{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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-text-secondary 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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-text-secondary\">\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-text-secondary mb-4\" />\n <p className=\"text-text-secondary\">\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":"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"}
@@ -62,7 +62,7 @@ function P() {
62
62
  className: "text-2xl font-semibold",
63
63
  children: "Documents"
64
64
  }), /* @__PURE__ */ S("p", {
65
- className: "text-sm text-muted-foreground",
65
+ className: "text-sm text-text-secondary",
66
66
  children: "Manage files, folders, and shared documents."
67
67
  })] }), /* @__PURE__ */ C("div", {
68
68
  className: "flex gap-2",
@@ -92,7 +92,7 @@ function P() {
92
92
  className: "text-2xl font-bold",
93
93
  children: p.length
94
94
  }), /* @__PURE__ */ S("p", {
95
- className: "text-xs text-muted-foreground",
95
+ className: "text-xs text-text-secondary",
96
96
  children: "Total Files"
97
97
  })] })]
98
98
  })
@@ -108,7 +108,7 @@ function P() {
108
108
  className: "text-2xl font-bold",
109
109
  children: P.length
110
110
  }), /* @__PURE__ */ S("p", {
111
- className: "text-xs text-muted-foreground",
111
+ className: "text-xs text-text-secondary",
112
112
  children: "Folders"
113
113
  })] })]
114
114
  })
@@ -124,7 +124,7 @@ function P() {
124
124
  className: "text-2xl font-bold",
125
125
  children: ee
126
126
  }), /* @__PURE__ */ S("p", {
127
- className: "text-xs text-muted-foreground",
127
+ className: "text-xs text-text-secondary",
128
128
  children: "Starred"
129
129
  })] })]
130
130
  })
@@ -140,7 +140,7 @@ function P() {
140
140
  className: "text-2xl font-bold",
141
141
  children: N(Q)
142
142
  }), /* @__PURE__ */ S("p", {
143
- className: "text-xs text-muted-foreground",
143
+ className: "text-xs text-text-secondary",
144
144
  children: "Total Size"
145
145
  })] })]
146
146
  })
@@ -151,9 +151,9 @@ function P() {
151
151
  className: "flex items-center gap-2 text-sm",
152
152
  children: [/* @__PURE__ */ S("button", {
153
153
  onClick: () => K(null),
154
- className: `font-medium ${G ? "text-muted-foreground hover:text-foreground" : "text-primary"}`,
154
+ className: `font-medium ${G ? "text-text-secondary hover:text-text-primary" : "text-primary"}`,
155
155
  children: "All Files"
156
- }), $ && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(i, { className: "h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ S("span", {
156
+ }), $ && /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(i, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ S("span", {
157
157
  className: "font-medium text-primary",
158
158
  children: $.name
159
159
  })] })]
@@ -162,7 +162,7 @@ function P() {
162
162
  className: "flex flex-col gap-4 sm:flex-row sm:items-center",
163
163
  children: [/* @__PURE__ */ C("div", {
164
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, {
165
+ children: [/* @__PURE__ */ S(g, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ S(k, {
166
166
  placeholder: "Search documents...",
167
167
  value: L,
168
168
  onChange: (e) => R(e.target.value),
@@ -180,18 +180,18 @@ function P() {
180
180
  "starred"
181
181
  ].map((e) => /* @__PURE__ */ S("button", {
182
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"}`,
183
+ className: `rounded px-2 py-1 text-xs font-medium transition-colors ${z === e ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-sunken text-text-secondary hover:bg-bg-sunken/80"}`,
184
184
  children: e === "all" ? "All" : e === "starred" ? "Starred" : e.toUpperCase()
185
185
  }, e))
186
186
  }), /* @__PURE__ */ C("div", {
187
187
  className: "flex rounded border",
188
188
  children: [/* @__PURE__ */ S("button", {
189
189
  onClick: () => I("grid"),
190
- className: `p-1.5 ${F === "grid" ? "bg-primary text-primary-foreground" : "text-muted-foreground"}`,
190
+ className: `p-1.5 ${F === "grid" ? "bg-action-primary-bg text-action-primary-text" : "text-text-secondary"}`,
191
191
  children: /* @__PURE__ */ S(d, { className: "h-4 w-4" })
192
192
  }), /* @__PURE__ */ S("button", {
193
193
  onClick: () => I("list"),
194
- className: `p-1.5 ${F === "list" ? "bg-primary text-primary-foreground" : "text-muted-foreground"}`,
194
+ className: `p-1.5 ${F === "list" ? "bg-action-primary-bg text-action-primary-text" : "text-text-secondary"}`,
195
195
  children: /* @__PURE__ */ S(m, { className: "h-4 w-4" })
196
196
  })]
197
197
  })]
@@ -214,25 +214,25 @@ function P() {
214
214
  }
215
215
  ].map(({ field: e, label: t }) => /* @__PURE__ */ C("button", {
216
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"}`,
217
+ className: `flex items-center gap-1 rounded border px-3 py-1 text-xs ${V === e ? "border-primary bg-action-primary-bg/5 text-primary" : "text-text-secondary hover:bg-bg-sunken/50"}`,
218
218
  children: [/* @__PURE__ */ S(r, { className: "h-3 w-3" }), t]
219
219
  }, e))
220
220
  }),
221
221
  !G && /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("h3", {
222
- className: "mb-3 text-sm font-medium text-muted-foreground",
222
+ className: "mb-3 text-sm font-medium text-text-secondary",
223
223
  children: "Folders"
224
224
  }), /* @__PURE__ */ S("div", {
225
225
  className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-4",
226
226
  children: P.map((e) => /* @__PURE__ */ C("button", {
227
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",
228
+ className: "flex items-center gap-3 rounded-lg border p-3 text-left transition-colors hover:bg-bg-sunken/50",
229
229
  children: [/* @__PURE__ */ S(l, { className: `h-8 w-8 ${M[e.color] ?? "text-gray-500"}` }), /* @__PURE__ */ C("div", {
230
230
  className: "min-w-0 flex-1",
231
231
  children: [/* @__PURE__ */ S("p", {
232
232
  className: "truncate font-medium text-sm",
233
233
  children: e.name
234
234
  }), /* @__PURE__ */ C("p", {
235
- className: "text-xs text-muted-foreground",
235
+ className: "text-xs text-text-secondary",
236
236
  children: [
237
237
  e.documentsCount,
238
238
  " files",
@@ -243,15 +243,15 @@ function P() {
243
243
  }, e.id))
244
244
  })] }),
245
245
  /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("h3", {
246
- className: "mb-3 text-sm font-medium text-muted-foreground",
246
+ className: "mb-3 text-sm font-medium text-text-secondary",
247
247
  children: ["Files ", Z.length > 0 && `(${Z.length})`]
248
248
  }), Z.length === 0 ? /* @__PURE__ */ S(T, { children: /* @__PURE__ */ S(E, {
249
- className: "py-12 text-center text-muted-foreground",
249
+ className: "py-12 text-center text-text-secondary",
250
250
  children: "No files found. Try adjusting your filters."
251
251
  }) }) : F === "grid" ? /* @__PURE__ */ S("div", {
252
252
  className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",
253
253
  children: Z.map((e) => /* @__PURE__ */ S(T, {
254
- className: "hover:bg-muted/30 transition-colors",
254
+ className: "hover:bg-bg-sunken/30 transition-colors",
255
255
  children: /* @__PURE__ */ C(E, {
256
256
  className: "pt-4",
257
257
  children: [
@@ -259,7 +259,7 @@ function P() {
259
259
  className: "flex items-start justify-between",
260
260
  children: [/* @__PURE__ */ S(A[e.type] ?? s, { className: `h-10 w-10 ${j[e.type] ?? "text-gray-400"}` }), /* @__PURE__ */ C("div", {
261
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" })]
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-text-secondary" })]
263
263
  })]
264
264
  }),
265
265
  /* @__PURE__ */ S("h4", {
@@ -267,11 +267,11 @@ function P() {
267
267
  children: e.name
268
268
  }),
269
269
  /* @__PURE__ */ C("div", {
270
- className: "mt-1 flex items-center gap-2 text-xs text-muted-foreground",
270
+ className: "mt-1 flex items-center gap-2 text-xs text-text-secondary",
271
271
  children: [/* @__PURE__ */ S("span", { children: N(e.size) }), /* @__PURE__ */ C("span", { children: ["v", e.version] })]
272
272
  }),
273
273
  /* @__PURE__ */ C("div", {
274
- className: "mt-2 flex items-center gap-1 text-xs text-muted-foreground",
274
+ className: "mt-2 flex items-center gap-1 text-xs text-text-secondary",
275
275
  children: [
276
276
  /* @__PURE__ */ S(a, { className: "h-3 w-3" }),
277
277
  " ",
@@ -301,7 +301,7 @@ function P() {
301
301
  children: /* @__PURE__ */ C("table", {
302
302
  className: "w-full text-sm",
303
303
  children: [/* @__PURE__ */ S("thead", { children: /* @__PURE__ */ C("tr", {
304
- className: "border-b text-left text-muted-foreground",
304
+ className: "border-b text-left text-text-secondary",
305
305
  children: [
306
306
  /* @__PURE__ */ S("th", {
307
307
  className: "p-3",
@@ -329,7 +329,7 @@ function P() {
329
329
  })
330
330
  ]
331
331
  }) }), /* @__PURE__ */ S("tbody", { children: Z.map((e) => /* @__PURE__ */ C("tr", {
332
- className: "border-b hover:bg-muted/50",
332
+ className: "border-b hover:bg-bg-sunken/50",
333
333
  children: [
334
334
  /* @__PURE__ */ S("td", {
335
335
  className: "p-3",
@@ -343,7 +343,7 @@ function P() {
343
343
  }),
344
344
  e.isStarred && /* @__PURE__ */ S(v, { className: "h-3 w-3 fill-yellow-400 text-yellow-400" }),
345
345
  e.sharedWith > 0 && /* @__PURE__ */ C("span", {
346
- className: "flex items-center gap-0.5 text-xs text-muted-foreground",
346
+ className: "flex items-center gap-0.5 text-xs text-text-secondary",
347
347
  children: [
348
348
  /* @__PURE__ */ S(b, { className: "h-3 w-3" }),
349
349
  " ",
@@ -362,11 +362,11 @@ function P() {
362
362
  children: N(e.size)
363
363
  }),
364
364
  /* @__PURE__ */ S("td", {
365
- className: "p-3 text-muted-foreground",
365
+ className: "p-3 text-text-secondary",
366
366
  children: e.modifiedAt
367
367
  }),
368
368
  /* @__PURE__ */ S("td", {
369
- className: "p-3 text-muted-foreground",
369
+ className: "p-3 text-text-secondary",
370
370
  children: e.uploadedBy
371
371
  }),
372
372
  /* @__PURE__ */ S("td", {
@@ -407,13 +407,13 @@ function P() {
407
407
  /* @__PURE__ */ C("div", {
408
408
  className: "flex flex-col items-center justify-center rounded-lg border-2 border-dashed p-8",
409
409
  children: [
410
- /* @__PURE__ */ S(y, { className: "h-10 w-10 text-muted-foreground" }),
410
+ /* @__PURE__ */ S(y, { className: "h-10 w-10 text-text-secondary" }),
411
411
  /* @__PURE__ */ S("p", {
412
412
  className: "mt-2 text-sm font-medium",
413
413
  children: "Drag & drop files here"
414
414
  }),
415
415
  /* @__PURE__ */ S("p", {
416
- className: "text-xs text-muted-foreground",
416
+ className: "text-xs text-text-secondary",
417
417
  children: "or click to browse"
418
418
  })
419
419
  ]
@@ -424,7 +424,7 @@ function P() {
424
424
  className: "text-sm font-medium",
425
425
  children: "Destination Folder"
426
426
  }), /* @__PURE__ */ C("select", {
427
- className: "w-full rounded border bg-background px-3 py-2 text-sm",
427
+ className: "w-full rounded border bg-bg-surface px-3 py-2 text-sm",
428
428
  children: [/* @__PURE__ */ S("option", {
429
429
  value: "",
430
430
  children: "Root"
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentsPage.js","names":[],"sources":["../../../src/proserviceworld/pages/DocumentsPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Search,\n FolderOpen,\n FileText,\n File,\n Image,\n Upload,\n Plus,\n Grid3x3,\n List,\n Star,\n Download,\n Share2,\n MoreHorizontal,\n ArrowUpDown,\n ChevronRight,\n FolderPlus,\n Users,\n Clock,\n HardDrive,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\n\ntype ViewMode = 'grid' | 'list';\ntype SortBy = 'name' | 'date' | 'size';\ntype FileFilter = 'all' | 'pdf' | 'docx' | 'txt' | 'image' | 'starred';\n\nconst fileTypeIcons: Record<string, typeof FileText> = {\n pdf: FileText,\n docx: File,\n doc: File,\n txt: FileText,\n image: Image,\n video: File,\n audio: File,\n other: File,\n};\n\nconst fileTypeColors: Record<string, string> = {\n pdf: 'text-red-500',\n docx: 'text-blue-500',\n doc: 'text-blue-500',\n txt: 'text-gray-500',\n image: 'text-green-500',\n video: 'text-purple-500',\n audio: 'text-orange-500',\n other: 'text-gray-400',\n};\n\nconst folderColors: Record<string, string> = {\n blue: 'text-blue-500',\n green: 'text-green-500',\n purple: 'text-purple-500',\n yellow: 'text-yellow-500',\n red: 'text-red-500',\n};\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function DocumentsPage() {\n const { documents, folders } = useProServiceWorldStore();\n const [viewMode, setViewMode] = useState<ViewMode>('grid');\n const [searchQuery, setSearchQuery] = useState('');\n const [fileFilter, setFileFilter] = useState<FileFilter>('all');\n const [sortBy, setSortBy] = useState<SortBy>('date');\n const [sortAsc, setSortAsc] = useState(false);\n const [selectedFolderId, setSelectedFolderId] = useState<string | null>(null);\n const [showUploadModal, setShowUploadModal] = useState(false);\n const [showCreateFolderModal, setShowCreateFolderModal] = useState(false);\n\n const filteredDocs = useMemo(() => {\n let result = [...documents];\n\n // Folder filter\n if (selectedFolderId) {\n result = result.filter((d) => d.folderId === selectedFolderId);\n }\n\n // Type filter\n if (fileFilter === 'starred') {\n result = result.filter((d) => d.isStarred);\n } else if (fileFilter !== 'all') {\n result = result.filter((d) => d.type === fileFilter);\n }\n\n // Search\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase();\n result = result.filter(\n (d) => d.name.toLowerCase().includes(q) || d.tags.some((t) => t.toLowerCase().includes(q))\n );\n }\n\n // Sort\n result.sort((a, b) => {\n const cmp =\n sortBy === 'name'\n ? a.name.localeCompare(b.name)\n : sortBy === 'date'\n ? new Date(b.modifiedAt).getTime() - new Date(a.modifiedAt).getTime()\n : b.size - a.size;\n return sortAsc ? -cmp : cmp;\n });\n\n return result;\n }, [documents, selectedFolderId, fileFilter, searchQuery, sortBy, sortAsc]);\n\n const totalSize = documents.reduce((s, d) => s + d.size, 0);\n const starredCount = documents.filter((d) => d.isStarred).length;\n const currentFolder = selectedFolderId ? folders.find((f) => f.id === selectedFolderId) : null;\n\n const handleSort = (field: SortBy) => {\n if (sortBy === field) setSortAsc(!sortAsc);\n else {\n setSortBy(field);\n setSortAsc(false);\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* Header */}\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Documents</h1>\n <p className=\"text-sm text-muted-foreground\">\n Manage files, folders, and shared documents.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowCreateFolderModal(true)}>\n <FolderPlus className=\"mr-2 h-4 w-4\" /> New Folder\n </Button>\n <Button size=\"sm\" onClick={() => setShowUploadModal(true)}>\n <Upload className=\"mr-2 h-4 w-4\" /> Upload\n </Button>\n </div>\n </div>\n\n {/* Stats */}\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-blue-100 p-2 dark:bg-blue-950\">\n <FileText className=\"h-5 w-5 text-blue-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{documents.length}</p>\n <p className=\"text-xs text-muted-foreground\">Total Files</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-purple-100 p-2 dark:bg-purple-950\">\n <FolderOpen className=\"h-5 w-5 text-purple-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{folders.length}</p>\n <p className=\"text-xs text-muted-foreground\">Folders</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-yellow-100 p-2 dark:bg-yellow-950\">\n <Star className=\"h-5 w-5 text-yellow-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{starredCount}</p>\n <p className=\"text-xs text-muted-foreground\">Starred</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-green-100 p-2 dark:bg-green-950\">\n <HardDrive className=\"h-5 w-5 text-green-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{formatFileSize(totalSize)}</p>\n <p className=\"text-xs text-muted-foreground\">Total Size</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Breadcrumb */}\n <div className=\"flex items-center gap-2 text-sm\">\n <button\n onClick={() => setSelectedFolderId(null)}\n className={`font-medium ${!selectedFolderId ? 'text-primary' : 'text-muted-foreground hover:text-foreground'}`}\n >\n All Files\n </button>\n {currentFolder && (\n <>\n <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"font-medium text-primary\">{currentFolder.name}</span>\n </>\n )}\n </div>\n\n {/* Search, Filters, View Toggle */}\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center\">\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 placeholder=\"Search documents...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-wrap gap-1\">\n {(['all', 'pdf', 'docx', 'txt', 'starred'] as FileFilter[]).map((filter) => (\n <button\n key={filter}\n onClick={() => setFileFilter(filter)}\n className={`rounded px-2 py-1 text-xs font-medium transition-colors ${\n fileFilter === filter\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {filter === 'all' ? 'All' : filter === 'starred' ? 'Starred' : filter.toUpperCase()}\n </button>\n ))}\n </div>\n <div className=\"flex rounded border\">\n <button\n onClick={() => setViewMode('grid')}\n className={`p-1.5 ${viewMode === 'grid' ? 'bg-primary text-primary-foreground' : 'text-muted-foreground'}`}\n >\n <Grid3x3 className=\"h-4 w-4\" />\n </button>\n <button\n onClick={() => setViewMode('list')}\n className={`p-1.5 ${viewMode === 'list' ? 'bg-primary text-primary-foreground' : 'text-muted-foreground'}`}\n >\n <List className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n </div>\n\n {/* Sort */}\n <div className=\"flex gap-2\">\n {[\n { field: 'name' as SortBy, label: 'Name' },\n { field: 'date' as SortBy, label: 'Date' },\n { field: 'size' as SortBy, label: 'Size' },\n ].map(({ field, label }) => (\n <button\n key={field}\n onClick={() => handleSort(field)}\n className={`flex items-center gap-1 rounded border px-3 py-1 text-xs ${\n sortBy === field\n ? 'border-primary bg-primary/5 text-primary'\n : 'text-muted-foreground hover:bg-muted/50'\n }`}\n >\n <ArrowUpDown className=\"h-3 w-3\" />\n {label}\n </button>\n ))}\n </div>\n\n {/* Folders section (only on root) */}\n {!selectedFolderId && (\n <div>\n <h3 className=\"mb-3 text-sm font-medium text-muted-foreground\">Folders</h3>\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {folders.map((folder) => (\n <button\n key={folder.id}\n onClick={() => setSelectedFolderId(folder.id)}\n className=\"flex items-center gap-3 rounded-lg border p-3 text-left transition-colors hover:bg-muted/50\"\n >\n <FolderOpen\n className={`h-8 w-8 ${folderColors[folder.color] ?? 'text-gray-500'}`}\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium text-sm\">{folder.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n {folder.documentsCount} files\n {folder.isPublic && ' - Public'}\n </p>\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Files */}\n <div>\n <h3 className=\"mb-3 text-sm font-medium text-muted-foreground\">\n Files {filteredDocs.length > 0 && `(${filteredDocs.length})`}\n </h3>\n\n {filteredDocs.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center text-muted-foreground\">\n No files found. Try adjusting your filters.\n </CardContent>\n </Card>\n ) : viewMode === 'grid' ? (\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {filteredDocs.map((doc) => {\n const TypeIcon = fileTypeIcons[doc.type] ?? File;\n return (\n <Card key={doc.id} className=\"hover:bg-muted/30 transition-colors\">\n <CardContent className=\"pt-4\">\n <div className=\"flex items-start justify-between\">\n <TypeIcon\n className={`h-10 w-10 ${fileTypeColors[doc.type] ?? 'text-gray-400'}`}\n />\n <div className=\"flex items-center gap-1\">\n {doc.isStarred && (\n <Star className=\"h-4 w-4 fill-yellow-400 text-yellow-400\" />\n )}\n {doc.sharedWith > 0 && <Share2 className=\"h-4 w-4 text-muted-foreground\" />}\n </div>\n </div>\n <h4 className=\"mt-3 truncate font-medium text-sm\">{doc.name}</h4>\n <div className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n <span>{formatFileSize(doc.size)}</span>\n <span>v{doc.version}</span>\n </div>\n <div className=\"mt-2 flex items-center gap-1 text-xs text-muted-foreground\">\n <Clock className=\"h-3 w-3\" /> {doc.modifiedAt}\n </div>\n <div className=\"mt-3 flex gap-1\">\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1 text-xs\">\n <Download className=\"mr-1 h-3 w-3\" /> Download\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <MoreHorizontal className=\"h-3 w-3\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n ) : (\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-muted-foreground\">\n <th className=\"p-3\">Name</th>\n <th className=\"p-3\">Type</th>\n <th className=\"p-3\">Size</th>\n <th className=\"p-3\">Modified</th>\n <th className=\"p-3\">Uploaded By</th>\n <th className=\"p-3 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {filteredDocs.map((doc) => {\n const TypeIcon = fileTypeIcons[doc.type] ?? File;\n return (\n <tr key={doc.id} className=\"border-b hover:bg-muted/50\">\n <td className=\"p-3\">\n <div className=\"flex items-center gap-2\">\n <TypeIcon\n className={`h-5 w-5 ${fileTypeColors[doc.type] ?? 'text-gray-400'}`}\n />\n <span className=\"font-medium\">{doc.name}</span>\n {doc.isStarred && (\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n )}\n {doc.sharedWith > 0 && (\n <span className=\"flex items-center gap-0.5 text-xs text-muted-foreground\">\n <Users className=\"h-3 w-3\" /> {doc.sharedWith}\n </span>\n )}\n </div>\n </td>\n <td className=\"p-3 uppercase text-xs\">{doc.type}</td>\n <td className=\"p-3\">{formatFileSize(doc.size)}</td>\n <td className=\"p-3 text-muted-foreground\">{doc.modifiedAt}</td>\n <td className=\"p-3 text-muted-foreground\">{doc.uploadedBy}</td>\n <td className=\"p-3\">\n <div className=\"flex justify-end gap-1\">\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"h-3 w-3\" />\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <Share2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n\n {/* Upload Modal */}\n {showUploadModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n <Card className=\"mx-4 w-full max-w-md\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>Upload Files</CardTitle>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowUploadModal(false)}>\n Close\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex flex-col items-center justify-center rounded-lg border-2 border-dashed p-8\">\n <Upload className=\"h-10 w-10 text-muted-foreground\" />\n <p className=\"mt-2 text-sm font-medium\">Drag & drop files here</p>\n <p className=\"text-xs text-muted-foreground\">or click to browse</p>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Destination Folder</label>\n <select className=\"w-full rounded border bg-background px-3 py-2 text-sm\">\n <option value=\"\">Root</option>\n {folders.map((f) => (\n <option key={f.id} value={f.id}>\n {f.name}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n className=\"flex-1\"\n onClick={() => setShowUploadModal(false)}\n >\n Cancel\n </Button>\n <Button className=\"flex-1\">Upload</Button>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Create Folder Modal */}\n {showCreateFolderModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n <Card className=\"mx-4 w-full max-w-md\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>Create Folder</CardTitle>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowCreateFolderModal(false)}>\n Close\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Folder Name</label>\n <Input placeholder=\"Enter folder name...\" />\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n className=\"flex-1\"\n onClick={() => setShowCreateFolderModal(false)}\n >\n Cancel\n </Button>\n <Button className=\"flex-1\">Create</Button>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentsPage.js","names":[],"sources":["../../../src/proserviceworld/pages/DocumentsPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Search,\n FolderOpen,\n FileText,\n File,\n Image,\n Upload,\n Plus,\n Grid3x3,\n List,\n Star,\n Download,\n Share2,\n MoreHorizontal,\n ArrowUpDown,\n ChevronRight,\n FolderPlus,\n Users,\n Clock,\n HardDrive,\n} from 'lucide-react';\nimport { useProServiceWorldStore } from '../store/proserviceworldStore';\n\ntype ViewMode = 'grid' | 'list';\ntype SortBy = 'name' | 'date' | 'size';\ntype FileFilter = 'all' | 'pdf' | 'docx' | 'txt' | 'image' | 'starred';\n\nconst fileTypeIcons: Record<string, typeof FileText> = {\n pdf: FileText,\n docx: File,\n doc: File,\n txt: FileText,\n image: Image,\n video: File,\n audio: File,\n other: File,\n};\n\nconst fileTypeColors: Record<string, string> = {\n pdf: 'text-red-500',\n docx: 'text-blue-500',\n doc: 'text-blue-500',\n txt: 'text-gray-500',\n image: 'text-green-500',\n video: 'text-purple-500',\n audio: 'text-orange-500',\n other: 'text-gray-400',\n};\n\nconst folderColors: Record<string, string> = {\n blue: 'text-blue-500',\n green: 'text-green-500',\n purple: 'text-purple-500',\n yellow: 'text-yellow-500',\n red: 'text-red-500',\n};\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function DocumentsPage() {\n const { documents, folders } = useProServiceWorldStore();\n const [viewMode, setViewMode] = useState<ViewMode>('grid');\n const [searchQuery, setSearchQuery] = useState('');\n const [fileFilter, setFileFilter] = useState<FileFilter>('all');\n const [sortBy, setSortBy] = useState<SortBy>('date');\n const [sortAsc, setSortAsc] = useState(false);\n const [selectedFolderId, setSelectedFolderId] = useState<string | null>(null);\n const [showUploadModal, setShowUploadModal] = useState(false);\n const [showCreateFolderModal, setShowCreateFolderModal] = useState(false);\n\n const filteredDocs = useMemo(() => {\n let result = [...documents];\n\n // Folder filter\n if (selectedFolderId) {\n result = result.filter((d) => d.folderId === selectedFolderId);\n }\n\n // Type filter\n if (fileFilter === 'starred') {\n result = result.filter((d) => d.isStarred);\n } else if (fileFilter !== 'all') {\n result = result.filter((d) => d.type === fileFilter);\n }\n\n // Search\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase();\n result = result.filter(\n (d) => d.name.toLowerCase().includes(q) || d.tags.some((t) => t.toLowerCase().includes(q))\n );\n }\n\n // Sort\n result.sort((a, b) => {\n const cmp =\n sortBy === 'name'\n ? a.name.localeCompare(b.name)\n : sortBy === 'date'\n ? new Date(b.modifiedAt).getTime() - new Date(a.modifiedAt).getTime()\n : b.size - a.size;\n return sortAsc ? -cmp : cmp;\n });\n\n return result;\n }, [documents, selectedFolderId, fileFilter, searchQuery, sortBy, sortAsc]);\n\n const totalSize = documents.reduce((s, d) => s + d.size, 0);\n const starredCount = documents.filter((d) => d.isStarred).length;\n const currentFolder = selectedFolderId ? folders.find((f) => f.id === selectedFolderId) : null;\n\n const handleSort = (field: SortBy) => {\n if (sortBy === field) setSortAsc(!sortAsc);\n else {\n setSortBy(field);\n setSortAsc(false);\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* Header */}\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Documents</h1>\n <p className=\"text-sm text-text-secondary\">\n Manage files, folders, and shared documents.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowCreateFolderModal(true)}>\n <FolderPlus className=\"mr-2 h-4 w-4\" /> New Folder\n </Button>\n <Button size=\"sm\" onClick={() => setShowUploadModal(true)}>\n <Upload className=\"mr-2 h-4 w-4\" /> Upload\n </Button>\n </div>\n </div>\n\n {/* Stats */}\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-blue-100 p-2 dark:bg-blue-950\">\n <FileText className=\"h-5 w-5 text-blue-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{documents.length}</p>\n <p className=\"text-xs text-text-secondary\">Total Files</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-purple-100 p-2 dark:bg-purple-950\">\n <FolderOpen className=\"h-5 w-5 text-purple-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{folders.length}</p>\n <p className=\"text-xs text-text-secondary\">Folders</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-yellow-100 p-2 dark:bg-yellow-950\">\n <Star className=\"h-5 w-5 text-yellow-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{starredCount}</p>\n <p className=\"text-xs text-text-secondary\">Starred</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-green-100 p-2 dark:bg-green-950\">\n <HardDrive className=\"h-5 w-5 text-green-600\" />\n </div>\n <div>\n <p className=\"text-2xl font-bold\">{formatFileSize(totalSize)}</p>\n <p className=\"text-xs text-text-secondary\">Total Size</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Breadcrumb */}\n <div className=\"flex items-center gap-2 text-sm\">\n <button\n onClick={() => setSelectedFolderId(null)}\n className={`font-medium ${!selectedFolderId ? 'text-primary' : 'text-text-secondary hover:text-text-primary'}`}\n >\n All Files\n </button>\n {currentFolder && (\n <>\n <ChevronRight className=\"h-4 w-4 text-text-secondary\" />\n <span className=\"font-medium text-primary\">{currentFolder.name}</span>\n </>\n )}\n </div>\n\n {/* Search, Filters, View Toggle */}\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search documents...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-wrap gap-1\">\n {(['all', 'pdf', 'docx', 'txt', 'starred'] as FileFilter[]).map((filter) => (\n <button\n key={filter}\n onClick={() => setFileFilter(filter)}\n className={`rounded px-2 py-1 text-xs font-medium transition-colors ${\n fileFilter === filter\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-secondary hover:bg-bg-sunken/80'\n }`}\n >\n {filter === 'all' ? 'All' : filter === 'starred' ? 'Starred' : filter.toUpperCase()}\n </button>\n ))}\n </div>\n <div className=\"flex rounded border\">\n <button\n onClick={() => setViewMode('grid')}\n className={`p-1.5 ${viewMode === 'grid' ? 'bg-action-primary-bg text-action-primary-text' : 'text-text-secondary'}`}\n >\n <Grid3x3 className=\"h-4 w-4\" />\n </button>\n <button\n onClick={() => setViewMode('list')}\n className={`p-1.5 ${viewMode === 'list' ? 'bg-action-primary-bg text-action-primary-text' : 'text-text-secondary'}`}\n >\n <List className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n </div>\n\n {/* Sort */}\n <div className=\"flex gap-2\">\n {[\n { field: 'name' as SortBy, label: 'Name' },\n { field: 'date' as SortBy, label: 'Date' },\n { field: 'size' as SortBy, label: 'Size' },\n ].map(({ field, label }) => (\n <button\n key={field}\n onClick={() => handleSort(field)}\n className={`flex items-center gap-1 rounded border px-3 py-1 text-xs ${\n sortBy === field\n ? 'border-primary bg-action-primary-bg/5 text-primary'\n : 'text-text-secondary hover:bg-bg-sunken/50'\n }`}\n >\n <ArrowUpDown className=\"h-3 w-3\" />\n {label}\n </button>\n ))}\n </div>\n\n {/* Folders section (only on root) */}\n {!selectedFolderId && (\n <div>\n <h3 className=\"mb-3 text-sm font-medium text-text-secondary\">Folders</h3>\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {folders.map((folder) => (\n <button\n key={folder.id}\n onClick={() => setSelectedFolderId(folder.id)}\n className=\"flex items-center gap-3 rounded-lg border p-3 text-left transition-colors hover:bg-bg-sunken/50\"\n >\n <FolderOpen\n className={`h-8 w-8 ${folderColors[folder.color] ?? 'text-gray-500'}`}\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium text-sm\">{folder.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {folder.documentsCount} files\n {folder.isPublic && ' - Public'}\n </p>\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Files */}\n <div>\n <h3 className=\"mb-3 text-sm font-medium text-text-secondary\">\n Files {filteredDocs.length > 0 && `(${filteredDocs.length})`}\n </h3>\n\n {filteredDocs.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center text-text-secondary\">\n No files found. Try adjusting your filters.\n </CardContent>\n </Card>\n ) : viewMode === 'grid' ? (\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {filteredDocs.map((doc) => {\n const TypeIcon = fileTypeIcons[doc.type] ?? File;\n return (\n <Card key={doc.id} className=\"hover:bg-bg-sunken/30 transition-colors\">\n <CardContent className=\"pt-4\">\n <div className=\"flex items-start justify-between\">\n <TypeIcon\n className={`h-10 w-10 ${fileTypeColors[doc.type] ?? 'text-gray-400'}`}\n />\n <div className=\"flex items-center gap-1\">\n {doc.isStarred && (\n <Star className=\"h-4 w-4 fill-yellow-400 text-yellow-400\" />\n )}\n {doc.sharedWith > 0 && <Share2 className=\"h-4 w-4 text-text-secondary\" />}\n </div>\n </div>\n <h4 className=\"mt-3 truncate font-medium text-sm\">{doc.name}</h4>\n <div className=\"mt-1 flex items-center gap-2 text-xs text-text-secondary\">\n <span>{formatFileSize(doc.size)}</span>\n <span>v{doc.version}</span>\n </div>\n <div className=\"mt-2 flex items-center gap-1 text-xs text-text-secondary\">\n <Clock className=\"h-3 w-3\" /> {doc.modifiedAt}\n </div>\n <div className=\"mt-3 flex gap-1\">\n <Button variant=\"outline\" size=\"sm\" className=\"flex-1 text-xs\">\n <Download className=\"mr-1 h-3 w-3\" /> Download\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <MoreHorizontal className=\"h-3 w-3\" />\n </Button>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n ) : (\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-text-secondary\">\n <th className=\"p-3\">Name</th>\n <th className=\"p-3\">Type</th>\n <th className=\"p-3\">Size</th>\n <th className=\"p-3\">Modified</th>\n <th className=\"p-3\">Uploaded By</th>\n <th className=\"p-3 text-right\">Actions</th>\n </tr>\n </thead>\n <tbody>\n {filteredDocs.map((doc) => {\n const TypeIcon = fileTypeIcons[doc.type] ?? File;\n return (\n <tr key={doc.id} className=\"border-b hover:bg-bg-sunken/50\">\n <td className=\"p-3\">\n <div className=\"flex items-center gap-2\">\n <TypeIcon\n className={`h-5 w-5 ${fileTypeColors[doc.type] ?? 'text-gray-400'}`}\n />\n <span className=\"font-medium\">{doc.name}</span>\n {doc.isStarred && (\n <Star className=\"h-3 w-3 fill-yellow-400 text-yellow-400\" />\n )}\n {doc.sharedWith > 0 && (\n <span className=\"flex items-center gap-0.5 text-xs text-text-secondary\">\n <Users className=\"h-3 w-3\" /> {doc.sharedWith}\n </span>\n )}\n </div>\n </td>\n <td className=\"p-3 uppercase text-xs\">{doc.type}</td>\n <td className=\"p-3\">{formatFileSize(doc.size)}</td>\n <td className=\"p-3 text-text-secondary\">{doc.modifiedAt}</td>\n <td className=\"p-3 text-text-secondary\">{doc.uploadedBy}</td>\n <td className=\"p-3\">\n <div className=\"flex justify-end gap-1\">\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"h-3 w-3\" />\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <Share2 className=\"h-3 w-3\" />\n </Button>\n </div>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n\n {/* Upload Modal */}\n {showUploadModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n <Card className=\"mx-4 w-full max-w-md\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>Upload Files</CardTitle>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowUploadModal(false)}>\n Close\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"flex flex-col items-center justify-center rounded-lg border-2 border-dashed p-8\">\n <Upload className=\"h-10 w-10 text-text-secondary\" />\n <p className=\"mt-2 text-sm font-medium\">Drag & drop files here</p>\n <p className=\"text-xs text-text-secondary\">or click to browse</p>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Destination Folder</label>\n <select className=\"w-full rounded border bg-bg-surface px-3 py-2 text-sm\">\n <option value=\"\">Root</option>\n {folders.map((f) => (\n <option key={f.id} value={f.id}>\n {f.name}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n className=\"flex-1\"\n onClick={() => setShowUploadModal(false)}\n >\n Cancel\n </Button>\n <Button className=\"flex-1\">Upload</Button>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n\n {/* Create Folder Modal */}\n {showCreateFolderModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\">\n <Card className=\"mx-4 w-full max-w-md\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>Create Folder</CardTitle>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowCreateFolderModal(false)}>\n Close\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Folder Name</label>\n <Input placeholder=\"Enter folder name...\" />\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n className=\"flex-1\"\n onClick={() => setShowCreateFolderModal(false)}\n >\n Cancel\n </Button>\n <Button className=\"flex-1\">Create</Button>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}