@burdenoff/microfe-crewfoundry 2026.625.1 → 2026.625.2
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 +37 -29
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +50 -42
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +39 -31
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +52 -44
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +46 -38
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +28 -15
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +30 -22
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +87 -69
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +99 -80
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +86 -67
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +31 -15
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +37 -29
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +29 -21
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +25 -17
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +42 -35
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +80 -62
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +41 -33
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +142 -108
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +177 -136
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +44 -36
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +49 -38
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +26 -18
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +112 -93
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +53 -46
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +31 -23
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +129 -90
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +96 -85
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +26 -18
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +47 -35
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +33 -25
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +36 -28
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +27 -19
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +27 -19
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +93 -75
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +111 -70
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +65 -53
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +35 -19
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +33 -25
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +26 -18
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +80 -55
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +33 -17
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +31 -23
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +29 -21
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +35 -27
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +147 -112
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +31 -27
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +31 -23
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +104 -85
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +75 -56
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +78 -60
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +133 -92
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +93 -52
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +28 -20
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +84 -65
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +25 -17
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +58 -40
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +41 -33
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +36 -29
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +103 -72
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +43 -27
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +28 -20
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +103 -62
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +83 -64
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +185 -144
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +40 -24
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,10 +2,10 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t, useState as n } from "react";
|
|
3
3
|
import { BarChart3 as r, Briefcase as i, Calendar as a, CheckCircle as o, Clock as s, DollarSign as c, Globe as l, MapPin as u, MessageSquare as d, Star as f, TrendingUp as p, Users as m, Video as h } from "lucide-react";
|
|
4
4
|
import { jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as v, Button as y, Card as b, CardContent as x, CardDescription as S, CardHeader as C, CardTitle as w,
|
|
5
|
+
import { Badge as v, Button as y, Card as b, CardContent as x, CardDescription as S, CardHeader as C, CardTitle as w, GlassCard as T, GradientText as E, NextSteps as D, PagePurpose as O, Separator as k, Tabs as A, TabsContent as j, TabsList as M, TabsTrigger as N } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.tsx
|
|
7
|
-
function
|
|
8
|
-
let [
|
|
7
|
+
function P() {
|
|
8
|
+
let [P, F] = n("overview"), { marketplaceServices: I, clients: L, candidates: R } = e(), z = t(() => [
|
|
9
9
|
{
|
|
10
10
|
day: "Monday",
|
|
11
11
|
slots: [
|
|
@@ -38,125 +38,160 @@ function j() {
|
|
|
38
38
|
day: "Friday",
|
|
39
39
|
slots: ["9:00 AM", "10:00 AM"]
|
|
40
40
|
}
|
|
41
|
-
], []),
|
|
41
|
+
], []), B = t(() => I.slice(0, 6).map((e) => ({
|
|
42
42
|
title: e.title,
|
|
43
43
|
price: e.priceType === "hourly" ? `$${e.price}/hr` : e.priceType === "monthly" ? `$${e.price}/mo` : `$${e.price}`,
|
|
44
44
|
type: e.priceType,
|
|
45
45
|
description: e.description,
|
|
46
46
|
delivery: e.deliveryTime
|
|
47
|
-
})), [
|
|
47
|
+
})), [I]), V = t(() => [
|
|
48
48
|
{
|
|
49
49
|
label: "Avg. Placement Time",
|
|
50
|
-
value: `${Math.max(15, 45 -
|
|
50
|
+
value: `${Math.max(15, 45 - R.filter((e) => e.status === "hired").length)} days`,
|
|
51
51
|
trend: "-3 days vs avg"
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
label: "Offer Acceptance Rate",
|
|
55
|
-
value: `${Math.round(
|
|
55
|
+
value: `${Math.round(R.filter((e) => e.status === "hired").length / Math.max(R.filter((e) => e.status === "offer").length, 1) * 100)}%`,
|
|
56
56
|
trend: "+8% vs avg"
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
label: "Client Retention",
|
|
60
|
-
value: `${Math.min(99, Math.max(70, Math.round(
|
|
60
|
+
value: `${Math.min(99, Math.max(70, Math.round(L.filter((e) => e.status === "active").length / Math.max(L.length, 1) * 100)))}%`,
|
|
61
61
|
trend: "repeat clients"
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
label: "Candidates Placed (YTD)",
|
|
65
|
-
value: `${
|
|
65
|
+
value: `${R.filter((e) => e.status === "hired").length}`,
|
|
66
66
|
trend: "+12% YoY"
|
|
67
67
|
}
|
|
68
|
-
], [
|
|
68
|
+
], [R, L]);
|
|
69
69
|
return /* @__PURE__ */ _("div", {
|
|
70
70
|
className: "space-y-6 p-6",
|
|
71
71
|
children: [
|
|
72
|
-
/* @__PURE__ */ g(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
72
|
+
/* @__PURE__ */ g(T, {
|
|
73
|
+
treatment: "glass",
|
|
74
|
+
glow: !0,
|
|
75
|
+
className: "border-border-seam",
|
|
76
|
+
children: /* @__PURE__ */ g(x, {
|
|
77
|
+
className: "pt-6",
|
|
78
|
+
children: /* @__PURE__ */ _("div", {
|
|
79
|
+
className: "flex items-start gap-6",
|
|
80
|
+
children: [/* @__PURE__ */ g("div", {
|
|
81
|
+
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",
|
|
82
|
+
children: "MS"
|
|
83
|
+
}), /* @__PURE__ */ _("div", {
|
|
84
|
+
className: "flex-1 space-y-2",
|
|
85
|
+
children: [
|
|
86
|
+
/* @__PURE__ */ _("div", {
|
|
87
|
+
className: "flex items-center gap-3 flex-wrap",
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ g("h1", {
|
|
90
|
+
className: "text-2xl font-semibold",
|
|
91
|
+
children: /* @__PURE__ */ g(E, { children: "Maria Santos" })
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ g(v, { children: "Top Rated Plus" }),
|
|
94
|
+
/* @__PURE__ */ g(v, {
|
|
95
|
+
variant: "secondary",
|
|
96
|
+
children: "Expert-Vetted"
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ g(v, {
|
|
99
|
+
variant: "outline",
|
|
100
|
+
className: "text-status-success-text border-status-success-text/30",
|
|
101
|
+
children: "Available Now"
|
|
102
|
+
})
|
|
103
|
+
]
|
|
104
|
+
}),
|
|
105
|
+
/* @__PURE__ */ g("p", {
|
|
106
|
+
className: "text-sm font-medium",
|
|
107
|
+
children: "Senior HR Consultant & Technical Recruiter"
|
|
108
|
+
}),
|
|
109
|
+
/* @__PURE__ */ g("p", {
|
|
110
|
+
className: "text-xs text-text-secondary",
|
|
111
|
+
children: "TalentPro Solutions"
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ _("div", {
|
|
114
|
+
className: "flex flex-wrap items-center gap-4 text-xs text-text-secondary",
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ _("span", {
|
|
117
|
+
className: "flex items-center gap-1",
|
|
118
|
+
children: [/* @__PURE__ */ g(u, { className: "h-3 w-3" }), " San Francisco, CA"]
|
|
119
|
+
}),
|
|
120
|
+
/* @__PURE__ */ _("span", {
|
|
121
|
+
className: "flex items-center gap-1",
|
|
122
|
+
children: [/* @__PURE__ */ g(l, { className: "h-3 w-3" }), " UTC-8 (PST)"]
|
|
123
|
+
}),
|
|
124
|
+
/* @__PURE__ */ _("span", {
|
|
125
|
+
className: "flex items-center gap-1",
|
|
126
|
+
children: [/* @__PURE__ */ g(f, { className: "h-3 w-3 text-status-warning-text fill-yellow-500" }), " 4.9 (47 reviews)"]
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ _("span", {
|
|
129
|
+
className: "flex items-center gap-1",
|
|
130
|
+
children: [/* @__PURE__ */ g(i, { className: "h-3 w-3" }), " 47 completed projects"]
|
|
131
|
+
}),
|
|
132
|
+
/* @__PURE__ */ _("span", {
|
|
133
|
+
className: "flex items-center gap-1",
|
|
134
|
+
children: [/* @__PURE__ */ g(c, { className: "h-3 w-3" }), " $150/hr"]
|
|
135
|
+
})
|
|
136
|
+
]
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ _("div", {
|
|
139
|
+
className: "flex gap-2 pt-2",
|
|
140
|
+
children: [
|
|
141
|
+
/* @__PURE__ */ _(y, {
|
|
142
|
+
size: "sm",
|
|
143
|
+
children: [/* @__PURE__ */ g(d, { className: "h-3 w-3 mr-1" }), " Send Proposal"]
|
|
144
|
+
}),
|
|
145
|
+
/* @__PURE__ */ _(y, {
|
|
146
|
+
size: "sm",
|
|
147
|
+
variant: "outline",
|
|
148
|
+
children: [/* @__PURE__ */ g(h, { className: "h-3 w-3 mr-1" }), " Video Intro"]
|
|
149
|
+
}),
|
|
150
|
+
/* @__PURE__ */ _(y, {
|
|
151
|
+
size: "sm",
|
|
152
|
+
variant: "outline",
|
|
153
|
+
children: [/* @__PURE__ */ g(a, { className: "h-3 w-3 mr-1" }), " Schedule Call"]
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
}),
|
|
157
|
+
/* @__PURE__ */ g(O, {
|
|
158
|
+
className: "pt-2",
|
|
159
|
+
children: "A freelancer's full profile — skills, track record, services, availability, and performance — so you can vet them thoroughly and decide whether to hire before you reach out."
|
|
160
|
+
})
|
|
161
|
+
]
|
|
162
|
+
})]
|
|
163
|
+
})
|
|
155
164
|
})
|
|
156
|
-
})
|
|
165
|
+
}),
|
|
166
|
+
/* @__PURE__ */ g(D, {
|
|
167
|
+
storageKey: "crewfoundry-freelancer-profile-enhanced",
|
|
168
|
+
steps: [
|
|
169
|
+
{
|
|
170
|
+
id: "services",
|
|
171
|
+
label: "Review their services",
|
|
172
|
+
description: "See exactly what this freelancer offers and at what price.",
|
|
173
|
+
icon: /* @__PURE__ */ g(i, { className: "h-4 w-4" }),
|
|
174
|
+
onClick: () => F("services")
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: "availability",
|
|
178
|
+
label: "Check availability",
|
|
179
|
+
description: "Find open slots before you schedule a call.",
|
|
180
|
+
icon: /* @__PURE__ */ g(a, { className: "h-4 w-4" }),
|
|
181
|
+
onClick: () => F("availability")
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
id: "performance",
|
|
185
|
+
label: "Inspect performance",
|
|
186
|
+
description: "Look at ratings and delivery history to reduce risk.",
|
|
187
|
+
icon: /* @__PURE__ */ g(p, { className: "h-4 w-4" }),
|
|
188
|
+
onClick: () => F("analytics")
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
}),
|
|
157
192
|
/* @__PURE__ */ g("div", {
|
|
158
193
|
className: "grid gap-4 md:grid-cols-4",
|
|
159
|
-
children:
|
|
194
|
+
children: V.map((e) => /* @__PURE__ */ g(b, { children: /* @__PURE__ */ _(x, {
|
|
160
195
|
className: "pt-6",
|
|
161
196
|
children: [
|
|
162
197
|
/* @__PURE__ */ g("p", {
|
|
@@ -174,29 +209,29 @@ function j() {
|
|
|
174
209
|
]
|
|
175
210
|
}) }, e.label))
|
|
176
211
|
}),
|
|
177
|
-
/* @__PURE__ */ _(
|
|
178
|
-
value:
|
|
179
|
-
onValueChange:
|
|
212
|
+
/* @__PURE__ */ _(A, {
|
|
213
|
+
value: P,
|
|
214
|
+
onValueChange: F,
|
|
180
215
|
children: [
|
|
181
|
-
/* @__PURE__ */ _(
|
|
182
|
-
/* @__PURE__ */ g(
|
|
216
|
+
/* @__PURE__ */ _(M, { children: [
|
|
217
|
+
/* @__PURE__ */ g(N, {
|
|
183
218
|
value: "overview",
|
|
184
219
|
children: "Overview"
|
|
185
220
|
}),
|
|
186
|
-
/* @__PURE__ */ g(
|
|
221
|
+
/* @__PURE__ */ g(N, {
|
|
187
222
|
value: "services",
|
|
188
223
|
children: "Services"
|
|
189
224
|
}),
|
|
190
|
-
/* @__PURE__ */ g(
|
|
225
|
+
/* @__PURE__ */ g(N, {
|
|
191
226
|
value: "availability",
|
|
192
227
|
children: "Availability"
|
|
193
228
|
}),
|
|
194
|
-
/* @__PURE__ */ g(
|
|
229
|
+
/* @__PURE__ */ g(N, {
|
|
195
230
|
value: "analytics",
|
|
196
231
|
children: "Performance"
|
|
197
232
|
})
|
|
198
233
|
] }),
|
|
199
|
-
/* @__PURE__ */ g(
|
|
234
|
+
/* @__PURE__ */ g(j, {
|
|
200
235
|
value: "overview",
|
|
201
236
|
className: "space-y-6 mt-4",
|
|
202
237
|
children: /* @__PURE__ */ _("div", {
|
|
@@ -211,7 +246,7 @@ function j() {
|
|
|
211
246
|
children: [
|
|
212
247
|
/* @__PURE__ */ g("p", { children: "Award-winning HR consultant with 12+ years specializing in technical recruitment and talent strategy for high-growth technology companies. Deep expertise in building engineering teams, executive search, and implementing scalable hiring processes." }),
|
|
213
248
|
/* @__PURE__ */ g("p", { children: "Named one of the \"Top 50 HR Influencers\" by HR Tech Magazine in 2025. Regular speaker at HR technology conferences and contributor to industry publications." }),
|
|
214
|
-
/* @__PURE__ */ g(
|
|
249
|
+
/* @__PURE__ */ g(k, {}),
|
|
215
250
|
/* @__PURE__ */ _("div", {
|
|
216
251
|
className: "grid grid-cols-2 gap-3 text-xs",
|
|
217
252
|
children: [
|
|
@@ -277,12 +312,12 @@ function j() {
|
|
|
277
312
|
})]
|
|
278
313
|
})
|
|
279
314
|
}),
|
|
280
|
-
/* @__PURE__ */ g(
|
|
315
|
+
/* @__PURE__ */ g(j, {
|
|
281
316
|
value: "services",
|
|
282
317
|
className: "mt-4",
|
|
283
318
|
children: /* @__PURE__ */ g("div", {
|
|
284
319
|
className: "grid gap-4 md:grid-cols-2",
|
|
285
|
-
children:
|
|
320
|
+
children: B.map((e) => /* @__PURE__ */ _(b, { children: [/* @__PURE__ */ _(C, { children: [/* @__PURE__ */ _("div", {
|
|
286
321
|
className: "flex items-center justify-between",
|
|
287
322
|
children: [/* @__PURE__ */ g(w, {
|
|
288
323
|
className: "text-sm",
|
|
@@ -297,7 +332,7 @@ function j() {
|
|
|
297
332
|
children: e.description
|
|
298
333
|
})] }), /* @__PURE__ */ _(x, {
|
|
299
334
|
className: "pt-0",
|
|
300
|
-
children: [/* @__PURE__ */ g(
|
|
335
|
+
children: [/* @__PURE__ */ g(k, { className: "mb-3" }), /* @__PURE__ */ _("div", {
|
|
301
336
|
className: "flex items-center justify-between",
|
|
302
337
|
children: [/* @__PURE__ */ _("div", {
|
|
303
338
|
className: "space-y-0.5",
|
|
@@ -316,7 +351,7 @@ function j() {
|
|
|
316
351
|
})] }, e.title))
|
|
317
352
|
})
|
|
318
353
|
}),
|
|
319
|
-
/* @__PURE__ */ g(
|
|
354
|
+
/* @__PURE__ */ g(j, {
|
|
320
355
|
value: "availability",
|
|
321
356
|
className: "mt-4",
|
|
322
357
|
children: /* @__PURE__ */ _(b, { children: [/* @__PURE__ */ _(C, { children: [/* @__PURE__ */ g(w, {
|
|
@@ -324,7 +359,7 @@ function j() {
|
|
|
324
359
|
children: "This Week's Availability"
|
|
325
360
|
}), /* @__PURE__ */ g(S, { children: "Select a time slot to schedule a consultation" })] }), /* @__PURE__ */ g(x, {
|
|
326
361
|
className: "space-y-4",
|
|
327
|
-
children:
|
|
362
|
+
children: z.map((e) => /* @__PURE__ */ _("div", {
|
|
328
363
|
className: "flex items-center gap-4",
|
|
329
364
|
children: [/* @__PURE__ */ g("span", {
|
|
330
365
|
className: "w-24 text-sm font-medium",
|
|
@@ -341,7 +376,7 @@ function j() {
|
|
|
341
376
|
}, e.day))
|
|
342
377
|
})] })
|
|
343
378
|
}),
|
|
344
|
-
/* @__PURE__ */ g(
|
|
379
|
+
/* @__PURE__ */ g(j, {
|
|
345
380
|
value: "analytics",
|
|
346
381
|
className: "mt-4",
|
|
347
382
|
children: /* @__PURE__ */ _("div", {
|
|
@@ -438,6 +473,6 @@ function j() {
|
|
|
438
473
|
});
|
|
439
474
|
}
|
|
440
475
|
//#endregion
|
|
441
|
-
export {
|
|
476
|
+
export { P as MarketplaceFreelancerProfilePageEnhancedPage };
|
|
442
477
|
|
|
443
478
|
//# sourceMappingURL=MarketplaceFreelancerProfilePageEnhancedPage.js.map
|
|
@@ -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 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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"}
|
|
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 GlassCard,\n GradientText,\n NextSteps,\n PagePurpose,\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 <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\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 <PagePurpose className=\"pt-2\">\n A freelancer's full profile — skills, track record, services, availability, and\n performance — so you can vet them thoroughly and decide whether to hire before you\n reach out.\n </PagePurpose>\n </div>\n </div>\n </CardContent>\n </GlassCard>\n\n <NextSteps\n storageKey=\"crewfoundry-freelancer-profile-enhanced\"\n steps={[\n {\n id: 'services',\n label: 'Review their services',\n description: 'See exactly what this freelancer offers and at what price.',\n icon: <Briefcase className=\"h-4 w-4\" />,\n onClick: () => setSelectedTab('services'),\n },\n {\n id: 'availability',\n label: 'Check availability',\n description: 'Find open slots before you schedule a call.',\n icon: <Calendar className=\"h-4 w-4\" />,\n onClick: () => setSelectedTab('availability'),\n },\n {\n id: 'performance',\n label: 'Inspect performance',\n description: 'Look at ratings and delivery history to reduce risk.',\n icon: <TrendingUp className=\"h-4 w-4\" />,\n onClick: () => setSelectedTab('analytics'),\n },\n ]}\n />\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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"}
|