@burdenoff/microfe-crewfoundry 2026.608.1 → 2026.625.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/crewfoundry/pages/AdminAdminPagePage.js +94 -78
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +112 -96
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +101 -85
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +131 -115
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +116 -100
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +15 -15
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +63 -51
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +16 -16
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +26 -26
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +28 -28
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +10 -10
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +71 -59
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +59 -47
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +77 -61
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +40 -40
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +13 -13
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +102 -86
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +173 -139
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +59 -59
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +113 -97
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +45 -45
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +85 -69
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +23 -23
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +40 -40
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +59 -47
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +52 -48
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +31 -26
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +61 -49
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +90 -74
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +83 -67
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +54 -42
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +16 -16
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +39 -35
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +24 -24
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +14 -14
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +81 -65
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +73 -57
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +28 -28
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +12 -12
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -59
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +57 -45
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +71 -59
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +48 -48
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +44 -43
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +58 -46
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +16 -16
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +23 -23
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +9 -9
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +43 -39
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +31 -27
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +59 -47
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +13 -13
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +66 -50
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +18 -18
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +74 -62
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +21 -21
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +47 -43
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +20 -20
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +58 -46
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +38 -34
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +14 -14
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +67 -67
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +16 -16
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceFreelancerProfilePageEnhancedPage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Separator,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n BarChart3,\n Briefcase,\n Calendar,\n CheckCircle,\n Clock,\n DollarSign,\n Globe,\n MapPin,\n MessageSquare,\n Star,\n TrendingUp,\n Users,\n Video,\n} from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceFreelancerProfilePageEnhancedPage() {\n const [selectedTab, setSelectedTab] = useState('overview');\n const { marketplaceServices, clients, candidates } = useCrewFoundryStore();\n\n const availability = useMemo(\n () => [\n { day: 'Monday', slots: ['9:00 AM', '11:00 AM', '2:00 PM'] },\n { day: 'Tuesday', slots: ['10:00 AM', '1:00 PM', '3:00 PM'] },\n { day: 'Wednesday', slots: ['9:00 AM', '2:00 PM'] },\n { day: 'Thursday', slots: ['11:00 AM', '1:00 PM', '4:00 PM'] },\n { day: 'Friday', slots: ['9:00 AM', '10:00 AM'] },\n ],\n []\n );\n\n const services = useMemo(\n () =>\n marketplaceServices.slice(0, 6).map((service) => ({\n title: service.title,\n price:\n service.priceType === 'hourly'\n ? `$${service.price}/hr`\n : service.priceType === 'monthly'\n ? `$${service.price}/mo`\n : `$${service.price}`,\n type: service.priceType,\n description: service.description,\n delivery: service.deliveryTime,\n })),\n [marketplaceServices]\n );\n\n const analytics = useMemo(\n () => [\n {\n label: 'Avg. Placement Time',\n value: `${Math.max(15, 45 - candidates.filter((candidate) => candidate.status === 'hired').length)} days`,\n trend: '-3 days vs avg',\n },\n {\n label: 'Offer Acceptance Rate',\n value: `${Math.round((candidates.filter((candidate) => candidate.status === 'hired').length / Math.max(candidates.filter((candidate) => candidate.status === 'offer').length, 1)) * 100)}%`,\n trend: '+8% vs avg',\n },\n {\n label: 'Client Retention',\n value: `${Math.min(99, Math.max(70, Math.round((clients.filter((client) => client.status === 'active').length / Math.max(clients.length, 1)) * 100)))}%`,\n trend: 'repeat clients',\n },\n {\n label: 'Candidates Placed (YTD)',\n value: `${candidates.filter((candidate) => candidate.status === 'hired').length}`,\n trend: '+12% YoY',\n },\n ],\n [candidates, clients]\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-start gap-6\">\n <div className=\"flex h-24 w-24 shrink-0 items-center justify-center rounded-2xl bg-gradient-to-br from-primary to-primary/60 text-primary-foreground text-3xl font-semibold\">\n MS\n </div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-3 flex-wrap\">\n <h1 className=\"text-2xl font-semibold\">Maria Santos</h1>\n <Badge>Top Rated Plus</Badge>\n <Badge variant=\"secondary\">Expert-Vetted</Badge>\n <Badge variant=\"outline\" className=\"text-green-600 border-green-300\">\n Available Now\n </Badge>\n </div>\n <p className=\"text-sm font-medium\">Senior HR Consultant & Technical Recruiter</p>\n <p className=\"text-xs text-muted-foreground\">TalentPro Solutions</p>\n <div className=\"flex flex-wrap items-center gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" /> San Francisco, CA\n </span>\n <span className=\"flex items-center gap-1\">\n <Globe className=\"h-3 w-3\" /> UTC-8 (PST)\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" /> 4.9 (47 reviews)\n </span>\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" /> 47 completed projects\n </span>\n <span className=\"flex items-center gap-1\">\n <DollarSign className=\"h-3 w-3\" /> $150/hr\n </span>\n </div>\n <div className=\"flex gap-2 pt-2\">\n <Button size=\"sm\">\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Send Proposal\n </Button>\n <Button size=\"sm\" variant=\"outline\">\n <Video className=\"h-3 w-3 mr-1\" /> Video Intro\n </Button>\n <Button size=\"sm\" variant=\"outline\">\n <Calendar className=\"h-3 w-3 mr-1\" /> Schedule Call\n </Button>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {analytics.map((stat) => (\n <Card key={stat.label}>\n <CardContent className=\"pt-6\">\n <p className=\"text-xs text-muted-foreground\">{stat.label}</p>\n <p className=\"text-lg font-bold\">{stat.value}</p>\n <p className=\"text-[10px] text-green-600\">{stat.trend}</p>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <Tabs value={selectedTab} onValueChange={setSelectedTab}>\n <TabsList>\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"services\">Services</TabsTrigger>\n <TabsTrigger value=\"availability\">Availability</TabsTrigger>\n <TabsTrigger value=\"analytics\">Performance</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"overview\" className=\"space-y-6 mt-4\">\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Professional Summary</CardTitle>\n </CardHeader>\n <CardContent className=\"text-sm text-muted-foreground space-y-3\">\n <p>\n Award-winning HR consultant with 12+ years specializing in technical recruitment\n and talent strategy for high-growth technology companies. Deep expertise in\n building engineering teams, executive search, and implementing scalable hiring\n processes.\n </p>\n <p>\n Named one of the "Top 50 HR Influencers" by HR Tech Magazine in 2025.\n Regular speaker at HR technology conferences and contributor to industry\n publications.\n </p>\n <Separator />\n <div className=\"grid grid-cols-2 gap-3 text-xs\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-green-500\" /> Background verified\n </div>\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-green-500\" /> Identity confirmed\n </div>\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-green-500\" /> References checked\n </div>\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-green-500\" /> Skills assessed\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Expertise Areas</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1.5\">\n {[\n 'Technical Recruitment',\n 'Executive Search',\n 'HR Consulting',\n 'Talent Strategy',\n 'Employer Branding',\n 'Comp Analysis',\n 'ATS Implementation',\n 'Interview Training',\n 'DEI Programs',\n 'Workforce Planning',\n ].map((s) => (\n <Badge key={s} variant=\"secondary\" className=\"text-xs\">\n {s}\n </Badge>\n ))}\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Response Time</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Clock className=\"h-4 w-4 text-green-500\" />\n <span className=\"font-medium\">Usually responds within 2 hours</span>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Available Mon-Fri, 9 AM - 6 PM PST\n </p>\n </CardContent>\n </Card>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"services\" className=\"mt-4\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {services.map((svc) => (\n <Card key={svc.title}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-sm\">{svc.title}</CardTitle>\n <Badge variant=\"outline\" className=\"text-xs\">\n {svc.type}\n </Badge>\n </div>\n <CardDescription className=\"text-xs\">{svc.description}</CardDescription>\n </CardHeader>\n <CardContent className=\"pt-0\">\n <Separator className=\"mb-3\" />\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-semibold\">{svc.price}</p>\n <p className=\"text-[10px] text-muted-foreground\">Delivery: {svc.delivery}</p>\n </div>\n <Button size=\"sm\">Book Now</Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </TabsContent>\n\n <TabsContent value=\"availability\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">This Week's Availability</CardTitle>\n <CardDescription>Select a time slot to schedule a consultation</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {availability.map((day) => (\n <div key={day.day} className=\"flex items-center gap-4\">\n <span className=\"w-24 text-sm font-medium\">{day.day}</span>\n <div className=\"flex flex-wrap gap-2\">\n {day.slots.map((slot) => (\n <Button key={slot} variant=\"outline\" size=\"sm\" className=\"text-xs h-7\">\n {slot}\n </Button>\n ))}\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"analytics\" className=\"mt-4\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Performance Metrics</CardTitle>\n <CardDescription>Historical performance data</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n { label: 'Total Placements', value: '312', icon: Users },\n { label: 'Client Satisfaction', value: '4.9/5.0', icon: Star },\n { label: 'On-Time Delivery', value: '97%', icon: Clock },\n { label: 'Revenue Generated', value: '$2.1M', icon: TrendingUp },\n { label: 'Repeat Client Rate', value: '92%', icon: BarChart3 },\n ].map((metric) => (\n <div key={metric.label} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 text-sm\">\n <metric.icon className=\"h-4 w-4 text-muted-foreground\" />\n <span>{metric.label}</span>\n </div>\n <span className=\"font-semibold text-sm\">{metric.value}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Industry Specialization</CardTitle>\n <CardDescription>Experience by industry sector</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n { industry: 'Technology', percentage: 45 },\n { industry: 'Healthcare', percentage: 20 },\n { industry: 'Finance', percentage: 15 },\n { industry: 'E-commerce', percentage: 12 },\n { industry: 'Education', percentage: 8 },\n ].map((item) => (\n <div key={item.industry} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-sm\">\n <span>{item.industry}</span>\n <span className=\"text-xs text-muted-foreground\">{item.percentage}%</span>\n </div>\n <div className=\"h-1.5 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-primary\"\n style={{ width: `${item.percentage}%` }}\n />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarketplaceFreelancerProfilePageEnhancedPage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n Separator,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n BarChart3,\n Briefcase,\n Calendar,\n CheckCircle,\n Clock,\n DollarSign,\n Globe,\n MapPin,\n MessageSquare,\n Star,\n TrendingUp,\n Users,\n Video,\n} from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceFreelancerProfilePageEnhancedPage() {\n const [selectedTab, setSelectedTab] = useState('overview');\n const { marketplaceServices, clients, candidates } = useCrewFoundryStore();\n\n const availability = useMemo(\n () => [\n { day: 'Monday', slots: ['9:00 AM', '11:00 AM', '2:00 PM'] },\n { day: 'Tuesday', slots: ['10:00 AM', '1:00 PM', '3:00 PM'] },\n { day: 'Wednesday', slots: ['9:00 AM', '2:00 PM'] },\n { day: 'Thursday', slots: ['11:00 AM', '1:00 PM', '4:00 PM'] },\n { day: 'Friday', slots: ['9:00 AM', '10:00 AM'] },\n ],\n []\n );\n\n const services = useMemo(\n () =>\n marketplaceServices.slice(0, 6).map((service) => ({\n title: service.title,\n price:\n service.priceType === 'hourly'\n ? `$${service.price}/hr`\n : service.priceType === 'monthly'\n ? `$${service.price}/mo`\n : `$${service.price}`,\n type: service.priceType,\n description: service.description,\n delivery: service.deliveryTime,\n })),\n [marketplaceServices]\n );\n\n const analytics = useMemo(\n () => [\n {\n label: 'Avg. Placement Time',\n value: `${Math.max(15, 45 - candidates.filter((candidate) => candidate.status === 'hired').length)} days`,\n trend: '-3 days vs avg',\n },\n {\n label: 'Offer Acceptance Rate',\n value: `${Math.round((candidates.filter((candidate) => candidate.status === 'hired').length / Math.max(candidates.filter((candidate) => candidate.status === 'offer').length, 1)) * 100)}%`,\n trend: '+8% vs avg',\n },\n {\n label: 'Client Retention',\n value: `${Math.min(99, Math.max(70, Math.round((clients.filter((client) => client.status === 'active').length / Math.max(clients.length, 1)) * 100)))}%`,\n trend: 'repeat clients',\n },\n {\n label: 'Candidates Placed (YTD)',\n value: `${candidates.filter((candidate) => candidate.status === 'hired').length}`,\n trend: '+12% YoY',\n },\n ],\n [candidates, clients]\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-start gap-6\">\n <div className=\"flex h-24 w-24 shrink-0 items-center justify-center rounded-2xl bg-gradient-to-br from-primary to-primary/60 text-action-primary-text text-3xl font-semibold\">\n MS\n </div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-3 flex-wrap\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Maria Santos</GradientText>\n </h1>\n <Badge>Top Rated Plus</Badge>\n <Badge variant=\"secondary\">Expert-Vetted</Badge>\n <Badge\n variant=\"outline\"\n className=\"text-status-success-text border-status-success-text/30\"\n >\n Available Now\n </Badge>\n </div>\n <p className=\"text-sm font-medium\">Senior HR Consultant & Technical Recruiter</p>\n <p className=\"text-xs text-text-secondary\">TalentPro Solutions</p>\n <div className=\"flex flex-wrap items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" /> San Francisco, CA\n </span>\n <span className=\"flex items-center gap-1\">\n <Globe className=\"h-3 w-3\" /> UTC-8 (PST)\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text fill-yellow-500\" /> 4.9 (47\n reviews)\n </span>\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" /> 47 completed projects\n </span>\n <span className=\"flex items-center gap-1\">\n <DollarSign className=\"h-3 w-3\" /> $150/hr\n </span>\n </div>\n <div className=\"flex gap-2 pt-2\">\n <Button size=\"sm\">\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Send Proposal\n </Button>\n <Button size=\"sm\" variant=\"outline\">\n <Video className=\"h-3 w-3 mr-1\" /> Video Intro\n </Button>\n <Button size=\"sm\" variant=\"outline\">\n <Calendar className=\"h-3 w-3 mr-1\" /> Schedule Call\n </Button>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {analytics.map((stat) => (\n <Card key={stat.label}>\n <CardContent className=\"pt-6\">\n <p className=\"text-xs text-text-secondary\">{stat.label}</p>\n <p className=\"text-lg font-bold\">{stat.value}</p>\n <p className=\"text-[10px] text-status-success-text\">{stat.trend}</p>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <Tabs value={selectedTab} onValueChange={setSelectedTab}>\n <TabsList>\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"services\">Services</TabsTrigger>\n <TabsTrigger value=\"availability\">Availability</TabsTrigger>\n <TabsTrigger value=\"analytics\">Performance</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"overview\" className=\"space-y-6 mt-4\">\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Professional Summary</CardTitle>\n </CardHeader>\n <CardContent className=\"text-sm text-text-secondary space-y-3\">\n <p>\n Award-winning HR consultant with 12+ years specializing in technical recruitment\n and talent strategy for high-growth technology companies. Deep expertise in\n building engineering teams, executive search, and implementing scalable hiring\n processes.\n </p>\n <p>\n Named one of the "Top 50 HR Influencers" by HR Tech Magazine in 2025.\n Regular speaker at HR technology conferences and contributor to industry\n publications.\n </p>\n <Separator />\n <div className=\"grid grid-cols-2 gap-3 text-xs\">\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-status-success-text\" /> Background\n verified\n </div>\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-status-success-text\" /> Identity\n confirmed\n </div>\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-status-success-text\" /> References\n checked\n </div>\n <div className=\"flex items-center gap-2\">\n <CheckCircle className=\"h-3 w-3 text-status-success-text\" /> Skills assessed\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Expertise Areas</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1.5\">\n {[\n 'Technical Recruitment',\n 'Executive Search',\n 'HR Consulting',\n 'Talent Strategy',\n 'Employer Branding',\n 'Comp Analysis',\n 'ATS Implementation',\n 'Interview Training',\n 'DEI Programs',\n 'Workforce Planning',\n ].map((s) => (\n <Badge key={s} variant=\"secondary\" className=\"text-xs\">\n {s}\n </Badge>\n ))}\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Response Time</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Clock className=\"h-4 w-4 text-status-success-text\" />\n <span className=\"font-medium\">Usually responds within 2 hours</span>\n </div>\n <p className=\"text-xs text-text-secondary\">Available Mon-Fri, 9 AM - 6 PM PST</p>\n </CardContent>\n </Card>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"services\" className=\"mt-4\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n {services.map((svc) => (\n <Card key={svc.title}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-sm\">{svc.title}</CardTitle>\n <Badge variant=\"outline\" className=\"text-xs\">\n {svc.type}\n </Badge>\n </div>\n <CardDescription className=\"text-xs\">{svc.description}</CardDescription>\n </CardHeader>\n <CardContent className=\"pt-0\">\n <Separator className=\"mb-3\" />\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-semibold\">{svc.price}</p>\n <p className=\"text-[10px] text-text-secondary\">Delivery: {svc.delivery}</p>\n </div>\n <Button size=\"sm\">Book Now</Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </TabsContent>\n\n <TabsContent value=\"availability\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">This Week's Availability</CardTitle>\n <CardDescription>Select a time slot to schedule a consultation</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {availability.map((day) => (\n <div key={day.day} className=\"flex items-center gap-4\">\n <span className=\"w-24 text-sm font-medium\">{day.day}</span>\n <div className=\"flex flex-wrap gap-2\">\n {day.slots.map((slot) => (\n <Button key={slot} variant=\"outline\" size=\"sm\" className=\"text-xs h-7\">\n {slot}\n </Button>\n ))}\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"analytics\" className=\"mt-4\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Performance Metrics</CardTitle>\n <CardDescription>Historical performance data</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n { label: 'Total Placements', value: '312', icon: Users },\n { label: 'Client Satisfaction', value: '4.9/5.0', icon: Star },\n { label: 'On-Time Delivery', value: '97%', icon: Clock },\n { label: 'Revenue Generated', value: '$2.1M', icon: TrendingUp },\n { label: 'Repeat Client Rate', value: '92%', icon: BarChart3 },\n ].map((metric) => (\n <div key={metric.label} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 text-sm\">\n <metric.icon className=\"h-4 w-4 text-text-secondary\" />\n <span>{metric.label}</span>\n </div>\n <span className=\"font-semibold text-sm\">{metric.value}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Industry Specialization</CardTitle>\n <CardDescription>Experience by industry sector</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n { industry: 'Technology', percentage: 45 },\n { industry: 'Healthcare', percentage: 20 },\n { industry: 'Finance', percentage: 15 },\n { industry: 'E-commerce', percentage: 12 },\n { industry: 'Education', percentage: 8 },\n ].map((item) => (\n <div key={item.industry} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-sm\">\n <span>{item.industry}</span>\n <span className=\"text-xs text-text-secondary\">{item.percentage}%</span>\n </div>\n <div className=\"h-1.5 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-action-primary-bg\"\n style={{ width: `${item.percentage}%` }}\n />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,36 +2,36 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
3
|
import { Award as n, Briefcase as r, Calendar as i, Clock as a, DollarSign as o, Globe as s, Mail as c, MapPin as l, MessageSquare as u, Phone as d, Star as f, ThumbsUp as p } from "lucide-react";
|
|
4
4
|
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as g, Button as _, Card as v, CardContent as y, CardDescription as b, CardHeader as x, CardTitle as S,
|
|
5
|
+
import { Badge as g, Button as _, Card as v, CardContent as y, CardDescription as b, CardHeader as x, CardTitle as S, GradientText as C, Separator as w } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { marketplaceServices:
|
|
7
|
+
function T() {
|
|
8
|
+
let { marketplaceServices: T, clients: E, announcements: D } = e(), O = t(() => Array.from(new Set(T.flatMap((e) => e.skills))).slice(0, 12), [T]), k = t(() => T.slice(0, 3).map((e, t) => ({
|
|
9
9
|
title: e.title,
|
|
10
|
-
client:
|
|
10
|
+
client: E[t % Math.max(E.length, 1)]?.name || e.provider,
|
|
11
11
|
duration: e.deliveryTime,
|
|
12
12
|
description: e.description,
|
|
13
13
|
outcome: `${Math.round(e.rating * 20)}% satisfaction`
|
|
14
|
-
})), [
|
|
14
|
+
})), [E, T]), A = t(() => D.slice(0, 3).map((e, t) => ({
|
|
15
15
|
author: e.author,
|
|
16
|
-
company:
|
|
17
|
-
rating: Math.min(5, Math.max(4, Math.round(
|
|
16
|
+
company: E[t % Math.max(E.length, 1)]?.name || "CrewFoundry Client",
|
|
17
|
+
rating: Math.min(5, Math.max(4, Math.round(T[t % Math.max(T.length, 1)]?.rating || 4.5))),
|
|
18
18
|
date: new Date(e.createdAt).toLocaleString("en-US", {
|
|
19
19
|
month: "short",
|
|
20
20
|
year: "numeric"
|
|
21
21
|
}),
|
|
22
22
|
text: e.content
|
|
23
23
|
})), [
|
|
24
|
+
D,
|
|
24
25
|
E,
|
|
25
|
-
T
|
|
26
|
-
|
|
27
|
-
]), A = w.length > 0 ? (w.reduce((e, t) => e + t.rating, 0) / w.length).toFixed(1) : "4.8", j = w.reduce((e, t) => e + t.reviews, 0);
|
|
26
|
+
T
|
|
27
|
+
]), j = T.length > 0 ? (T.reduce((e, t) => e + t.rating, 0) / T.length).toFixed(1) : "4.8", M = T.reduce((e, t) => e + t.reviews, 0);
|
|
28
28
|
return /* @__PURE__ */ h("div", {
|
|
29
29
|
className: "space-y-6 p-6",
|
|
30
30
|
children: [
|
|
31
31
|
/* @__PURE__ */ h("div", {
|
|
32
32
|
className: "flex items-start gap-6",
|
|
33
33
|
children: [/* @__PURE__ */ m("div", {
|
|
34
|
-
className: "flex h-20 w-20 shrink-0 items-center justify-center rounded-full bg-primary text-primary-
|
|
34
|
+
className: "flex h-20 w-20 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text text-2xl font-semibold",
|
|
35
35
|
children: "MS"
|
|
36
36
|
}), /* @__PURE__ */ h("div", {
|
|
37
37
|
className: "flex-1 space-y-2",
|
|
@@ -41,7 +41,7 @@ function w() {
|
|
|
41
41
|
children: [
|
|
42
42
|
/* @__PURE__ */ m("h1", {
|
|
43
43
|
className: "text-2xl font-semibold",
|
|
44
|
-
children: "Maria Santos"
|
|
44
|
+
children: /* @__PURE__ */ m(C, { children: "Maria Santos" })
|
|
45
45
|
}),
|
|
46
46
|
/* @__PURE__ */ m(g, { children: "Top Rated" }),
|
|
47
47
|
/* @__PURE__ */ m(g, {
|
|
@@ -51,11 +51,11 @@ function w() {
|
|
|
51
51
|
]
|
|
52
52
|
}),
|
|
53
53
|
/* @__PURE__ */ m("p", {
|
|
54
|
-
className: "text-sm text-
|
|
54
|
+
className: "text-sm text-text-secondary",
|
|
55
55
|
children: "Senior HR Consultant & Technical Recruiter"
|
|
56
56
|
}),
|
|
57
57
|
/* @__PURE__ */ h("div", {
|
|
58
|
-
className: "flex flex-wrap items-center gap-4 text-xs text-
|
|
58
|
+
className: "flex flex-wrap items-center gap-4 text-xs text-text-secondary",
|
|
59
59
|
children: [
|
|
60
60
|
/* @__PURE__ */ h("span", {
|
|
61
61
|
className: "flex items-center gap-1",
|
|
@@ -72,12 +72,13 @@ function w() {
|
|
|
72
72
|
/* @__PURE__ */ h("span", {
|
|
73
73
|
className: "flex items-center gap-1",
|
|
74
74
|
children: [
|
|
75
|
-
/* @__PURE__ */ m(f, { className: "h-3 w-3 text-
|
|
75
|
+
/* @__PURE__ */ m(f, { className: "h-3 w-3 text-status-warning-text" }),
|
|
76
76
|
" ",
|
|
77
|
-
A,
|
|
78
|
-
" (",
|
|
79
77
|
j,
|
|
80
|
-
"
|
|
78
|
+
" (",
|
|
79
|
+
M,
|
|
80
|
+
" ",
|
|
81
|
+
"reviews)"
|
|
81
82
|
]
|
|
82
83
|
})
|
|
83
84
|
]
|
|
@@ -102,31 +103,31 @@ function w() {
|
|
|
102
103
|
{
|
|
103
104
|
icon: r,
|
|
104
105
|
label: "Projects",
|
|
105
|
-
value: `${
|
|
106
|
-
color: "text-
|
|
106
|
+
value: `${M}`,
|
|
107
|
+
color: "text-status-info-text"
|
|
107
108
|
},
|
|
108
109
|
{
|
|
109
110
|
icon: p,
|
|
110
111
|
label: "Success Rate",
|
|
111
|
-
value: `${Math.min(99, Math.max(80, Math.round(Number(
|
|
112
|
-
color: "text-
|
|
112
|
+
value: `${Math.min(99, Math.max(80, Math.round(Number(j) * 20)))}%`,
|
|
113
|
+
color: "text-status-success-text"
|
|
113
114
|
},
|
|
114
115
|
{
|
|
115
116
|
icon: o,
|
|
116
117
|
label: "Hourly Rate",
|
|
117
|
-
value: `$${Math.round((
|
|
118
|
-
color: "text-
|
|
118
|
+
value: `$${Math.round((T[0]?.price || 150) / 10)}`,
|
|
119
|
+
color: "text-action-primary-bg"
|
|
119
120
|
},
|
|
120
121
|
{
|
|
121
122
|
icon: n,
|
|
122
123
|
label: "Certifications",
|
|
123
|
-
value: `${Math.max(3, Math.round(
|
|
124
|
-
color: "text-
|
|
124
|
+
value: `${Math.max(3, Math.round(O.length / 2))}`,
|
|
125
|
+
color: "text-status-warning-text"
|
|
125
126
|
}
|
|
126
127
|
].map((e) => /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
|
|
127
128
|
className: "flex items-center gap-3 pt-6",
|
|
128
129
|
children: [/* @__PURE__ */ m(e.icon, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
129
|
-
className: "text-xs text-
|
|
130
|
+
className: "text-xs text-text-secondary",
|
|
130
131
|
children: e.label
|
|
131
132
|
}), /* @__PURE__ */ m("p", {
|
|
132
133
|
className: "text-lg font-bold",
|
|
@@ -143,7 +144,7 @@ function w() {
|
|
|
143
144
|
className: "text-base",
|
|
144
145
|
children: "About"
|
|
145
146
|
}) }), /* @__PURE__ */ h(y, {
|
|
146
|
-
className: "text-sm text-
|
|
147
|
+
className: "text-sm text-text-secondary space-y-3",
|
|
147
148
|
children: [/* @__PURE__ */ m("p", { children: "With 12+ years of experience in HR consulting and technical recruitment, I specialize in helping companies build world-class teams. My focus areas include executive search, engineering team buildouts, and designing scalable hiring processes for high-growth companies." }), /* @__PURE__ */ m("p", { children: "I've placed 300+ candidates across startups and Fortune 500 companies, with a 98% client satisfaction rate and 95% offer acceptance rate." })]
|
|
148
149
|
})] }),
|
|
149
150
|
/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ h(x, { children: [/* @__PURE__ */ m(S, {
|
|
@@ -151,7 +152,7 @@ function w() {
|
|
|
151
152
|
children: "Portfolio"
|
|
152
153
|
}), /* @__PURE__ */ m(b, { children: "Selected projects and outcomes" })] }), /* @__PURE__ */ m(y, {
|
|
153
154
|
className: "space-y-4",
|
|
154
|
-
children:
|
|
155
|
+
children: k.map((e) => /* @__PURE__ */ h("div", {
|
|
155
156
|
className: "rounded-lg border p-4 space-y-2",
|
|
156
157
|
children: [
|
|
157
158
|
/* @__PURE__ */ h("div", {
|
|
@@ -166,17 +167,17 @@ function w() {
|
|
|
166
167
|
})]
|
|
167
168
|
}),
|
|
168
169
|
/* @__PURE__ */ m("p", {
|
|
169
|
-
className: "text-xs text-
|
|
170
|
+
className: "text-xs text-text-secondary",
|
|
170
171
|
children: e.client
|
|
171
172
|
}),
|
|
172
173
|
/* @__PURE__ */ m("p", {
|
|
173
|
-
className: "text-xs text-
|
|
174
|
+
className: "text-xs text-text-secondary",
|
|
174
175
|
children: e.description
|
|
175
176
|
}),
|
|
176
177
|
/* @__PURE__ */ h("div", {
|
|
177
178
|
className: "flex items-center gap-2 text-xs",
|
|
178
|
-
children: [/* @__PURE__ */ m(p, { className: "h-3 w-3 text-
|
|
179
|
-
className: "text-
|
|
179
|
+
children: [/* @__PURE__ */ m(p, { className: "h-3 w-3 text-status-success-text" }), /* @__PURE__ */ m("span", {
|
|
180
|
+
className: "text-status-success-text font-medium",
|
|
180
181
|
children: e.outcome
|
|
181
182
|
})]
|
|
182
183
|
})
|
|
@@ -188,7 +189,7 @@ function w() {
|
|
|
188
189
|
children: "Client Reviews"
|
|
189
190
|
}), /* @__PURE__ */ m(b, { children: "What clients say about working with Maria" })] }), /* @__PURE__ */ m(y, {
|
|
190
191
|
className: "space-y-4",
|
|
191
|
-
children:
|
|
192
|
+
children: A.map((e) => /* @__PURE__ */ h("div", {
|
|
192
193
|
className: "space-y-2",
|
|
193
194
|
children: [
|
|
194
195
|
/* @__PURE__ */ h("div", {
|
|
@@ -197,7 +198,7 @@ function w() {
|
|
|
197
198
|
className: "text-sm font-medium",
|
|
198
199
|
children: e.author
|
|
199
200
|
}), /* @__PURE__ */ h("p", {
|
|
200
|
-
className: "text-xs text-
|
|
201
|
+
className: "text-xs text-text-secondary",
|
|
201
202
|
children: [
|
|
202
203
|
e.company,
|
|
203
204
|
" - ",
|
|
@@ -205,14 +206,14 @@ function w() {
|
|
|
205
206
|
]
|
|
206
207
|
})] }), /* @__PURE__ */ m("div", {
|
|
207
208
|
className: "flex items-center gap-0.5",
|
|
208
|
-
children: Array.from({ length: e.rating }).map((e, t) => /* @__PURE__ */ m(f, { className: "h-3 w-3 text-
|
|
209
|
+
children: Array.from({ length: e.rating }).map((e, t) => /* @__PURE__ */ m(f, { className: "h-3 w-3 text-status-warning-text fill-yellow-500" }, t))
|
|
209
210
|
})]
|
|
210
211
|
}),
|
|
211
212
|
/* @__PURE__ */ m("p", {
|
|
212
|
-
className: "text-xs text-
|
|
213
|
+
className: "text-xs text-text-secondary",
|
|
213
214
|
children: e.text
|
|
214
215
|
}),
|
|
215
|
-
/* @__PURE__ */ m(
|
|
216
|
+
/* @__PURE__ */ m(w, {})
|
|
216
217
|
]
|
|
217
218
|
}, e.author))
|
|
218
219
|
})] })
|
|
@@ -225,7 +226,7 @@ function w() {
|
|
|
225
226
|
children: "Skills & Expertise"
|
|
226
227
|
}) }), /* @__PURE__ */ m(y, {
|
|
227
228
|
className: "flex flex-wrap gap-1.5",
|
|
228
|
-
children:
|
|
229
|
+
children: O.map((e) => /* @__PURE__ */ m(g, {
|
|
229
230
|
variant: "secondary",
|
|
230
231
|
className: "text-xs",
|
|
231
232
|
children: e
|
|
@@ -244,7 +245,7 @@ function w() {
|
|
|
244
245
|
"DEI in the Workplace - Cornell"
|
|
245
246
|
].map((e) => /* @__PURE__ */ h("div", {
|
|
246
247
|
className: "flex items-center gap-2 text-xs",
|
|
247
|
-
children: [/* @__PURE__ */ m(n, { className: "h-3 w-3 text-
|
|
248
|
+
children: [/* @__PURE__ */ m(n, { className: "h-3 w-3 text-status-warning-text shrink-0" }), /* @__PURE__ */ m("span", { children: e })]
|
|
248
249
|
}, e))
|
|
249
250
|
})] }),
|
|
250
251
|
/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ m(x, { children: /* @__PURE__ */ m(S, {
|
|
@@ -254,10 +255,10 @@ function w() {
|
|
|
254
255
|
className: "space-y-2",
|
|
255
256
|
children: [/* @__PURE__ */ h("div", {
|
|
256
257
|
className: "flex items-center gap-2 text-sm",
|
|
257
|
-
children: [/* @__PURE__ */ m(c, { className: "h-3 w-3 text-
|
|
258
|
+
children: [/* @__PURE__ */ m(c, { className: "h-3 w-3 text-text-secondary" }), /* @__PURE__ */ m("span", { children: "maria@talentpro.com" })]
|
|
258
259
|
}), /* @__PURE__ */ h("div", {
|
|
259
260
|
className: "flex items-center gap-2 text-sm",
|
|
260
|
-
children: [/* @__PURE__ */ m(d, { className: "h-3 w-3 text-
|
|
261
|
+
children: [/* @__PURE__ */ m(d, { className: "h-3 w-3 text-text-secondary" }), /* @__PURE__ */ m("span", { children: "+1-555-0301" })]
|
|
261
262
|
})]
|
|
262
263
|
})] })
|
|
263
264
|
]
|
|
@@ -267,6 +268,6 @@ function w() {
|
|
|
267
268
|
});
|
|
268
269
|
}
|
|
269
270
|
//#endregion
|
|
270
|
-
export {
|
|
271
|
+
export { T as MarketplaceFreelancerProfilePagePage };
|
|
271
272
|
|
|
272
273
|
//# sourceMappingURL=MarketplaceFreelancerProfilePagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceFreelancerProfilePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Award,\n Briefcase,\n Calendar,\n Clock,\n DollarSign,\n Globe,\n Mail,\n MapPin,\n MessageSquare,\n Phone,\n Star,\n ThumbsUp,\n} from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceFreelancerProfilePagePage() {\n const { marketplaceServices, clients, announcements } = useCrewFoundryStore();\n\n const skills = useMemo(\n () =>\n Array.from(new Set(marketplaceServices.flatMap((service) => service.skills))).slice(0, 12),\n [marketplaceServices]\n );\n\n const portfolio = useMemo(\n () =>\n marketplaceServices.slice(0, 3).map((service, index) => ({\n title: service.title,\n client: clients[index % Math.max(clients.length, 1)]?.name || service.provider,\n duration: service.deliveryTime,\n description: service.description,\n outcome: `${Math.round(service.rating * 20)}% satisfaction`,\n })),\n [clients, marketplaceServices]\n );\n\n const reviews = useMemo(\n () =>\n announcements.slice(0, 3).map((announcement, index) => ({\n author: announcement.author,\n company: clients[index % Math.max(clients.length, 1)]?.name || 'CrewFoundry Client',\n rating: Math.min(\n 5,\n Math.max(\n 4,\n Math.round(\n marketplaceServices[index % Math.max(marketplaceServices.length, 1)]?.rating || 4.5\n )\n )\n ),\n date: new Date(announcement.createdAt).toLocaleString('en-US', {\n month: 'short',\n year: 'numeric',\n }),\n text: announcement.content,\n })),\n [announcements, clients, marketplaceServices]\n );\n\n const avgRating =\n marketplaceServices.length > 0\n ? (\n marketplaceServices.reduce((sum, service) => sum + service.rating, 0) /\n marketplaceServices.length\n ).toFixed(1)\n : '4.8';\n\n const totalProjects = marketplaceServices.reduce((sum, service) => sum + service.reviews, 0);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-start gap-6\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground text-2xl font-semibold\">\n MS\n </div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-semibold\">Maria Santos</h1>\n <Badge>Top Rated</Badge>\n <Badge variant=\"secondary\">Pro</Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n Senior HR Consultant & Technical Recruiter\n </p>\n <div className=\"flex flex-wrap items-center gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" /> San Francisco, CA\n </span>\n <span className=\"flex items-center gap-1\">\n <Globe className=\"h-3 w-3\" /> crewfoundry.com\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" /> Member since 2022\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500\" /> {avgRating} ({totalProjects} reviews)\n </span>\n </div>\n <div className=\"flex gap-2 pt-1\">\n <Button size=\"sm\">\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Message\n </Button>\n <Button size=\"sm\" variant=\"outline\">\n <Calendar className=\"h-3 w-3 mr-1\" /> Book Consultation\n </Button>\n </div>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {[\n {\n icon: Briefcase,\n label: 'Projects',\n value: `${totalProjects}`,\n color: 'text-blue-500',\n },\n {\n icon: ThumbsUp,\n label: 'Success Rate',\n value: `${Math.min(99, Math.max(80, Math.round(Number(avgRating) * 20)))}%`,\n color: 'text-green-500',\n },\n {\n icon: DollarSign,\n label: 'Hourly Rate',\n value: `$${Math.round((marketplaceServices[0]?.price || 150) / 10)}`,\n color: 'text-purple-500',\n },\n {\n icon: Award,\n label: 'Certifications',\n value: `${Math.max(3, Math.round(skills.length / 2))}`,\n color: 'text-yellow-500',\n },\n ].map((stat) => (\n <Card key={stat.label}>\n <CardContent className=\"flex items-center gap-3 pt-6\">\n <stat.icon className={`h-5 w-5 ${stat.color}`} />\n <div>\n <p className=\"text-xs text-muted-foreground\">{stat.label}</p>\n <p className=\"text-lg font-bold\">{stat.value}</p>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">About</CardTitle>\n </CardHeader>\n <CardContent className=\"text-sm text-muted-foreground space-y-3\">\n <p>\n With 12+ years of experience in HR consulting and technical recruitment, I\n specialize in helping companies build world-class teams. My focus areas include\n executive search, engineering team buildouts, and designing scalable hiring\n processes for high-growth companies.\n </p>\n <p>\n I've placed 300+ candidates across startups and Fortune 500 companies, with a\n 98% client satisfaction rate and 95% offer acceptance rate.\n </p>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Portfolio</CardTitle>\n <CardDescription>Selected projects and outcomes</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {portfolio.map((item) => (\n <div key={item.title} className=\"rounded-lg border p-4 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <p className=\"font-medium text-sm\">{item.title}</p>\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {item.duration}\n </Badge>\n </div>\n <p className=\"text-xs text-muted-foreground\">{item.client}</p>\n <p className=\"text-xs text-muted-foreground\">{item.description}</p>\n <div className=\"flex items-center gap-2 text-xs\">\n <ThumbsUp className=\"h-3 w-3 text-green-500\" />\n <span className=\"text-green-600 font-medium\">{item.outcome}</span>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Client Reviews</CardTitle>\n <CardDescription>What clients say about working with Maria</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {reviews.map((review) => (\n <div key={review.author} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{review.author}</p>\n <p className=\"text-xs text-muted-foreground\">\n {review.company} - {review.date}\n </p>\n </div>\n <div className=\"flex items-center gap-0.5\">\n {Array.from({ length: review.rating }).map((_, i) => (\n <Star key={i} className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" />\n ))}\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground\">{review.text}</p>\n <Separator />\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Skills & Expertise</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1.5\">\n {skills.map((skill) => (\n <Badge key={skill} variant=\"secondary\" className=\"text-xs\">\n {skill}\n </Badge>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Certifications</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {[\n 'SHRM-SCP (Senior Certified Professional)',\n 'PHR (Professional in Human Resources)',\n 'LinkedIn Certified Recruiter',\n 'Google Project Management',\n 'DEI in the Workplace - Cornell',\n ].map((cert) => (\n <div key={cert} className=\"flex items-center gap-2 text-xs\">\n <Award className=\"h-3 w-3 text-yellow-500 shrink-0\" />\n <span>{cert}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Contact</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Mail className=\"h-3 w-3 text-muted-foreground\" />\n <span>maria@talentpro.com</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <Phone className=\"h-3 w-3 text-muted-foreground\" />\n <span>+1-555-0301</span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarketplaceFreelancerProfilePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n Separator,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Award,\n Briefcase,\n Calendar,\n Clock,\n DollarSign,\n Globe,\n Mail,\n MapPin,\n MessageSquare,\n Phone,\n Star,\n ThumbsUp,\n} from 'lucide-react';\nimport { useMemo } from 'react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceFreelancerProfilePagePage() {\n const { marketplaceServices, clients, announcements } = useCrewFoundryStore();\n\n const skills = useMemo(\n () =>\n Array.from(new Set(marketplaceServices.flatMap((service) => service.skills))).slice(0, 12),\n [marketplaceServices]\n );\n\n const portfolio = useMemo(\n () =>\n marketplaceServices.slice(0, 3).map((service, index) => ({\n title: service.title,\n client: clients[index % Math.max(clients.length, 1)]?.name || service.provider,\n duration: service.deliveryTime,\n description: service.description,\n outcome: `${Math.round(service.rating * 20)}% satisfaction`,\n })),\n [clients, marketplaceServices]\n );\n\n const reviews = useMemo(\n () =>\n announcements.slice(0, 3).map((announcement, index) => ({\n author: announcement.author,\n company: clients[index % Math.max(clients.length, 1)]?.name || 'CrewFoundry Client',\n rating: Math.min(\n 5,\n Math.max(\n 4,\n Math.round(\n marketplaceServices[index % Math.max(marketplaceServices.length, 1)]?.rating || 4.5\n )\n )\n ),\n date: new Date(announcement.createdAt).toLocaleString('en-US', {\n month: 'short',\n year: 'numeric',\n }),\n text: announcement.content,\n })),\n [announcements, clients, marketplaceServices]\n );\n\n const avgRating =\n marketplaceServices.length > 0\n ? (\n marketplaceServices.reduce((sum, service) => sum + service.rating, 0) /\n marketplaceServices.length\n ).toFixed(1)\n : '4.8';\n\n const totalProjects = marketplaceServices.reduce((sum, service) => sum + service.reviews, 0);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-start gap-6\">\n <div className=\"flex h-20 w-20 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text text-2xl font-semibold\">\n MS\n </div>\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Maria Santos</GradientText>\n </h1>\n <Badge>Top Rated</Badge>\n <Badge variant=\"secondary\">Pro</Badge>\n </div>\n <p className=\"text-sm text-text-secondary\">Senior HR Consultant & Technical Recruiter</p>\n <div className=\"flex flex-wrap items-center gap-4 text-xs text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" /> San Francisco, CA\n </span>\n <span className=\"flex items-center gap-1\">\n <Globe className=\"h-3 w-3\" /> crewfoundry.com\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" /> Member since 2022\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" /> {avgRating} ({totalProjects}{' '}\n reviews)\n </span>\n </div>\n <div className=\"flex gap-2 pt-1\">\n <Button size=\"sm\">\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Message\n </Button>\n <Button size=\"sm\" variant=\"outline\">\n <Calendar className=\"h-3 w-3 mr-1\" /> Book Consultation\n </Button>\n </div>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n {[\n {\n icon: Briefcase,\n label: 'Projects',\n value: `${totalProjects}`,\n color: 'text-status-info-text',\n },\n {\n icon: ThumbsUp,\n label: 'Success Rate',\n value: `${Math.min(99, Math.max(80, Math.round(Number(avgRating) * 20)))}%`,\n color: 'text-status-success-text',\n },\n {\n icon: DollarSign,\n label: 'Hourly Rate',\n value: `$${Math.round((marketplaceServices[0]?.price || 150) / 10)}`,\n color: 'text-action-primary-bg',\n },\n {\n icon: Award,\n label: 'Certifications',\n value: `${Math.max(3, Math.round(skills.length / 2))}`,\n color: 'text-status-warning-text',\n },\n ].map((stat) => (\n <Card key={stat.label}>\n <CardContent className=\"flex items-center gap-3 pt-6\">\n <stat.icon className={`h-5 w-5 ${stat.color}`} />\n <div>\n <p className=\"text-xs text-text-secondary\">{stat.label}</p>\n <p className=\"text-lg font-bold\">{stat.value}</p>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">About</CardTitle>\n </CardHeader>\n <CardContent className=\"text-sm text-text-secondary space-y-3\">\n <p>\n With 12+ years of experience in HR consulting and technical recruitment, I\n specialize in helping companies build world-class teams. My focus areas include\n executive search, engineering team buildouts, and designing scalable hiring\n processes for high-growth companies.\n </p>\n <p>\n I've placed 300+ candidates across startups and Fortune 500 companies, with a\n 98% client satisfaction rate and 95% offer acceptance rate.\n </p>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Portfolio</CardTitle>\n <CardDescription>Selected projects and outcomes</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {portfolio.map((item) => (\n <div key={item.title} className=\"rounded-lg border p-4 space-y-2\">\n <div className=\"flex items-center justify-between\">\n <p className=\"font-medium text-sm\">{item.title}</p>\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {item.duration}\n </Badge>\n </div>\n <p className=\"text-xs text-text-secondary\">{item.client}</p>\n <p className=\"text-xs text-text-secondary\">{item.description}</p>\n <div className=\"flex items-center gap-2 text-xs\">\n <ThumbsUp className=\"h-3 w-3 text-status-success-text\" />\n <span className=\"text-status-success-text font-medium\">{item.outcome}</span>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Client Reviews</CardTitle>\n <CardDescription>What clients say about working with Maria</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {reviews.map((review) => (\n <div key={review.author} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{review.author}</p>\n <p className=\"text-xs text-text-secondary\">\n {review.company} - {review.date}\n </p>\n </div>\n <div className=\"flex items-center gap-0.5\">\n {Array.from({ length: review.rating }).map((_, i) => (\n <Star\n key={i}\n className=\"h-3 w-3 text-status-warning-text fill-yellow-500\"\n />\n ))}\n </div>\n </div>\n <p className=\"text-xs text-text-secondary\">{review.text}</p>\n <Separator />\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Skills & Expertise</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1.5\">\n {skills.map((skill) => (\n <Badge key={skill} variant=\"secondary\" className=\"text-xs\">\n {skill}\n </Badge>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Certifications</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {[\n 'SHRM-SCP (Senior Certified Professional)',\n 'PHR (Professional in Human Resources)',\n 'LinkedIn Certified Recruiter',\n 'Google Project Management',\n 'DEI in the Workplace - Cornell',\n ].map((cert) => (\n <div key={cert} className=\"flex items-center gap-2 text-xs\">\n <Award className=\"h-3 w-3 text-status-warning-text shrink-0\" />\n <span>{cert}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-sm\">Contact</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Mail className=\"h-3 w-3 text-text-secondary\" />\n <span>maria@talentpro.com</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <Phone className=\"h-3 w-3 text-text-secondary\" />\n <span>+1-555-0301</span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { ShoppingBag as t, Star as n, Users as r } from "lucide-react";
|
|
3
3
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
|
-
import { Badge as o, Card as s, CardContent as c, CardDescription as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
|
|
5
|
-
import { useI18n as
|
|
4
|
+
import { Badge as o, Card as s, CardContent as c, CardDescription as l, CardHeader as u, CardTitle as d, GlassCard as f, GradientText as p } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
6
6
|
//#region src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { t:
|
|
9
|
-
let n =
|
|
7
|
+
function h() {
|
|
8
|
+
let { t: h } = m(), { marketplaceServices: g } = e(), _ = (e, t) => {
|
|
9
|
+
let n = h(e);
|
|
10
10
|
return n === e ? t : n;
|
|
11
11
|
};
|
|
12
12
|
return /* @__PURE__ */ a("div", {
|
|
@@ -14,53 +14,65 @@ function p() {
|
|
|
14
14
|
children: [
|
|
15
15
|
/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
|
|
16
16
|
className: "text-2xl font-semibold",
|
|
17
|
-
children:
|
|
17
|
+
children: /* @__PURE__ */ i(p, { children: _("crewfoundry.marketplace.title", "HR Services Marketplace") })
|
|
18
18
|
}), /* @__PURE__ */ i("p", {
|
|
19
|
-
className: "text-sm text-
|
|
20
|
-
children:
|
|
19
|
+
className: "text-sm text-text-secondary",
|
|
20
|
+
children: _("crewfoundry.marketplace.subtitle", "Find and hire professional HR service providers")
|
|
21
21
|
})] }),
|
|
22
22
|
/* @__PURE__ */ a("div", {
|
|
23
23
|
className: "grid gap-4 md:grid-cols-3",
|
|
24
24
|
children: [
|
|
25
|
-
/* @__PURE__ */ a(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
25
|
+
/* @__PURE__ */ a(f, {
|
|
26
|
+
treatment: "metric",
|
|
27
|
+
className: "border-border-seam",
|
|
28
|
+
children: [/* @__PURE__ */ a(u, {
|
|
29
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
30
|
+
children: [/* @__PURE__ */ i(d, {
|
|
31
|
+
className: "text-sm font-medium",
|
|
32
|
+
children: _("crewfoundry.marketplace.stats.services", "Services")
|
|
33
|
+
}), /* @__PURE__ */ i(t, { className: "h-4 w-4 text-text-secondary" })]
|
|
34
|
+
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
35
|
+
className: "text-2xl font-bold tabular-nums",
|
|
36
|
+
children: g.length
|
|
37
|
+
}) })]
|
|
38
|
+
}),
|
|
39
|
+
/* @__PURE__ */ a(f, {
|
|
40
|
+
treatment: "metric",
|
|
41
|
+
className: "border-border-seam",
|
|
42
|
+
children: [/* @__PURE__ */ a(u, {
|
|
43
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
44
|
+
children: [/* @__PURE__ */ i(d, {
|
|
45
|
+
className: "text-sm font-medium",
|
|
46
|
+
children: _("crewfoundry.marketplace.stats.avgRating", "Avg Rating")
|
|
47
|
+
}), /* @__PURE__ */ i(n, { className: "h-4 w-4 text-status-warning-text" })]
|
|
48
|
+
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
49
|
+
className: "text-2xl font-bold tabular-nums",
|
|
50
|
+
children: (g.reduce((e, t) => e + t.rating, 0) / g.length).toFixed(1)
|
|
51
|
+
}) })]
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ a(f, {
|
|
54
|
+
treatment: "metric",
|
|
55
|
+
className: "border-border-seam",
|
|
56
|
+
children: [/* @__PURE__ */ a(u, {
|
|
57
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
58
|
+
children: [/* @__PURE__ */ i(d, {
|
|
59
|
+
className: "text-sm font-medium",
|
|
60
|
+
children: _("crewfoundry.marketplace.stats.totalReviews", "Total Reviews")
|
|
61
|
+
}), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
62
|
+
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
63
|
+
className: "text-2xl font-bold tabular-nums",
|
|
64
|
+
children: g.reduce((e, t) => e + t.reviews, 0)
|
|
65
|
+
}) })]
|
|
66
|
+
})
|
|
55
67
|
]
|
|
56
68
|
}),
|
|
57
69
|
/* @__PURE__ */ i("h2", {
|
|
58
70
|
className: "text-lg font-medium",
|
|
59
|
-
children:
|
|
71
|
+
children: _("crewfoundry.marketplace.featured.title", "Featured Services")
|
|
60
72
|
}),
|
|
61
73
|
/* @__PURE__ */ i("div", {
|
|
62
74
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
63
|
-
children:
|
|
75
|
+
children: g.map((e) => /* @__PURE__ */ a(s, {
|
|
64
76
|
className: "hover:shadow-md transition-shadow cursor-pointer",
|
|
65
77
|
children: [/* @__PURE__ */ a(u, { children: [
|
|
66
78
|
/* @__PURE__ */ a("div", {
|
|
@@ -82,7 +94,7 @@ function p() {
|
|
|
82
94
|
/* @__PURE__ */ i(l, { children: e.provider })
|
|
83
95
|
] }), /* @__PURE__ */ a(c, { children: [
|
|
84
96
|
/* @__PURE__ */ i("p", {
|
|
85
|
-
className: "text-sm text-
|
|
97
|
+
className: "text-sm text-text-secondary mb-3",
|
|
86
98
|
children: e.description
|
|
87
99
|
}),
|
|
88
100
|
/* @__PURE__ */ i("div", {
|
|
@@ -101,14 +113,14 @@ function p() {
|
|
|
101
113
|
"$",
|
|
102
114
|
e.price.toLocaleString(),
|
|
103
115
|
/* @__PURE__ */ a("span", {
|
|
104
|
-
className: "text-xs font-normal text-
|
|
116
|
+
className: "text-xs font-normal text-text-secondary",
|
|
105
117
|
children: ["/", e.priceType]
|
|
106
118
|
})
|
|
107
119
|
]
|
|
108
120
|
}), /* @__PURE__ */ a("span", {
|
|
109
121
|
className: "flex items-center gap-1",
|
|
110
122
|
children: [
|
|
111
|
-
/* @__PURE__ */ i(n, { className: "h-3 w-3 text-
|
|
123
|
+
/* @__PURE__ */ i(n, { className: "h-3 w-3 text-status-warning-text" }),
|
|
112
124
|
e.rating,
|
|
113
125
|
" (",
|
|
114
126
|
e.reviews,
|
|
@@ -117,9 +129,9 @@ function p() {
|
|
|
117
129
|
})]
|
|
118
130
|
}),
|
|
119
131
|
/* @__PURE__ */ a("p", {
|
|
120
|
-
className: "text-xs text-
|
|
132
|
+
className: "text-xs text-text-secondary mt-1",
|
|
121
133
|
children: [
|
|
122
|
-
|
|
134
|
+
_("crewfoundry.marketplace.card.delivery", "Delivery"),
|
|
123
135
|
": ",
|
|
124
136
|
e.deliveryTime
|
|
125
137
|
]
|
|
@@ -131,6 +143,6 @@ function p() {
|
|
|
131
143
|
});
|
|
132
144
|
}
|
|
133
145
|
//#endregion
|
|
134
|
-
export {
|
|
146
|
+
export { h as MarketplaceMarketplacePagePage };
|
|
135
147
|
|
|
136
148
|
//# sourceMappingURL=MarketplaceMarketplacePagePage.js.map
|