@burdenoff/microfe-crewfoundry 2026.608.1 → 2026.624.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/crewfoundry/pages/AdminAdminPagePage.js +15 -15
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +15 -15
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +17 -17
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +19 -19
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +16 -16
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +5 -5
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +7 -7
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +7 -7
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +7 -7
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +7 -7
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +3 -3
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +8 -8
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +8 -8
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +14 -14
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +10 -10
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +4 -4
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +17 -17
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +19 -19
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +17 -17
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +12 -12
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +12 -12
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +11 -11
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +7 -7
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +7 -7
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +13 -13
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +7 -7
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +10 -10
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +9 -9
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +13 -13
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +10 -10
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +9 -9
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +3 -3
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +2 -2
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +11 -11
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +7 -7
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +4 -4
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +9 -9
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +10 -10
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +11 -11
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +5 -5
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +7 -7
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +3 -3
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +7 -7
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +11 -11
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +11 -11
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +6 -6
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +6 -6
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +7 -7
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +2 -2
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +15 -15
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +10 -10
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +5 -5
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +6 -6
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +6 -6
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +4 -4
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +4 -4
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +15 -15
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +4 -4
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +8 -8
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +14 -14
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +6 -6
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +20 -20
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +3 -3
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -34,7 +34,7 @@ function h() {
|
|
|
34
34
|
className: "text-2xl font-semibold",
|
|
35
35
|
children: "Earnings"
|
|
36
36
|
}), /* @__PURE__ */ o("p", {
|
|
37
|
-
className: "text-sm text-
|
|
37
|
+
className: "text-sm text-text-secondary",
|
|
38
38
|
children: "Revenue from marketplace services"
|
|
39
39
|
})] }),
|
|
40
40
|
/* @__PURE__ */ s("div", {
|
|
@@ -45,7 +45,7 @@ function h() {
|
|
|
45
45
|
children: [/* @__PURE__ */ o(f, {
|
|
46
46
|
className: "text-sm font-medium",
|
|
47
47
|
children: "Total Earnings"
|
|
48
|
-
}), /* @__PURE__ */ o(r, { className: "h-4 w-4 text-
|
|
48
|
+
}), /* @__PURE__ */ o(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
49
49
|
}), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s("div", {
|
|
50
50
|
className: "text-2xl font-bold",
|
|
51
51
|
children: ["$", b.toLocaleString()]
|
|
@@ -63,7 +63,7 @@ function h() {
|
|
|
63
63
|
children: [/* @__PURE__ */ o(f, {
|
|
64
64
|
className: "text-sm font-medium",
|
|
65
65
|
children: "Avg Order Value"
|
|
66
|
-
}), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-
|
|
66
|
+
}), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-text-secondary" })]
|
|
67
67
|
}), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s("div", {
|
|
68
68
|
className: "text-2xl font-bold",
|
|
69
69
|
children: ["$", Math.round(b / Math.max(S, 1)).toLocaleString()]
|
|
@@ -86,13 +86,13 @@ function h() {
|
|
|
86
86
|
className: "flex items-center gap-3",
|
|
87
87
|
children: [
|
|
88
88
|
/* @__PURE__ */ o("span", {
|
|
89
|
-
className: "w-10 text-sm text-
|
|
89
|
+
className: "w-10 text-sm text-text-secondary",
|
|
90
90
|
children: e.month
|
|
91
91
|
}),
|
|
92
92
|
/* @__PURE__ */ o("div", {
|
|
93
|
-
className: "h-4 flex-1 overflow-hidden rounded bg-
|
|
93
|
+
className: "h-4 flex-1 overflow-hidden rounded bg-bg-sunken",
|
|
94
94
|
children: /* @__PURE__ */ o("div", {
|
|
95
|
-
className: "h-4 rounded bg-primary",
|
|
95
|
+
className: "h-4 rounded bg-action-primary-bg",
|
|
96
96
|
style: { width: `${Math.round(e.amount / x * 100)}%` }
|
|
97
97
|
})
|
|
98
98
|
}),
|
|
@@ -120,7 +120,7 @@ function h() {
|
|
|
120
120
|
className: "text-sm font-medium",
|
|
121
121
|
children: e.client
|
|
122
122
|
}), /* @__PURE__ */ s("p", {
|
|
123
|
-
className: "text-xs text-
|
|
123
|
+
className: "text-xs text-text-secondary",
|
|
124
124
|
children: [
|
|
125
125
|
e.service,
|
|
126
126
|
" · ",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceEarningsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceEarningsPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { ArrowUp, DollarSign, TrendingUp, Wallet } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype EarningPoint = {\n month: string;\n amount: number;\n orders: number;\n};\n\ntype PaymentItem = {\n id: string;\n client: string;\n service: string;\n amount: number;\n date: string;\n status: 'completed' | 'pending';\n};\n\nconst monthLabel = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'N/A';\n }\n return parsed.toLocaleString('en-US', { month: 'short' });\n};\n\nconst isoDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function MarketplaceEarningsPagePage() {\n const { invoices, marketplaceServices, clients } = useCrewFoundryStore();\n\n const recentPayments = useMemo<PaymentItem[]>(() => {\n return invoices.slice(0, 12).map((invoice, index) => ({\n id: invoice.id,\n client: invoice.clientName,\n service:\n marketplaceServices[index % Math.max(marketplaceServices.length, 1)]?.title ||\n 'Marketplace Service',\n amount: invoice.amount,\n date: isoDate(invoice.issueDate),\n status: invoice.status === 'paid' ? 'completed' : 'pending',\n }));\n }, [invoices, marketplaceServices]);\n\n const earningsData = useMemo<EarningPoint[]>(() => {\n return recentPayments.slice(0, 6).map((payment, index) => {\n const sibling = recentPayments.filter(\n (item) => monthLabel(item.date) === monthLabel(payment.date)\n );\n const amount = sibling.reduce((sum, item) => sum + item.amount, 0);\n return {\n month: monthLabel(payment.date) || `M${index + 1}`,\n amount,\n orders: sibling.length,\n };\n });\n }, [recentPayments]);\n\n const totalEarnings = earningsData.reduce((sum, point) => sum + point.amount, 0);\n const maxEarning = Math.max(1, ...earningsData.map((point) => point.amount));\n const totalOrders = earningsData.reduce((sum, point) => sum + point.orders, 0);\n const pendingAmount = recentPayments\n .filter((payment) => payment.status === 'pending')\n .reduce((sum, payment) => sum + payment.amount, 0);\n const growthBase = clients.length > 0 ? Math.round((totalOrders / clients.length) * 100) : 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Earnings</h1>\n <p className=\"text-sm text-muted-foreground\">Revenue from marketplace services</p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Earnings</CardTitle>\n <DollarSign className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${totalEarnings.toLocaleString()}</div>\n <div className=\"flex items-center text-xs text-green-600\">\n <ArrowUp className=\"mr-1 h-3 w-3\" />+{growthBase}% from recent cycle\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Order Value</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n ${Math.round(totalEarnings / Math.max(totalOrders, 1)).toLocaleString()}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Pending</CardTitle>\n <Wallet className=\"h-4 w-4 text-yellow-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${pendingAmount.toLocaleString()}</div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Earnings Trend</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {earningsData.map((earning, index) => (\n <div key={`${earning.month}-${index}`} className=\"flex items-center gap-3\">\n <span className=\"w-10 text-sm text-muted-foreground\">{earning.month}</span>\n <div className=\"h-4 flex-1 overflow-hidden rounded bg-muted\">\n <div\n className=\"h-4 rounded bg-primary\"\n style={{ width: `${Math.round((earning.amount / maxEarning) * 100)}%` }}\n />\n </div>\n <span className=\"w-16 text-right text-sm font-medium\">\n ${(earning.amount / 1000).toFixed(1)}K\n </span>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {earning.orders} orders\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Recent Payments</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {recentPayments.map((payment) => (\n <div key={payment.id} className=\"flex items-center justify-between rounded border p-3\">\n <div>\n <p className=\"text-sm font-medium\">{payment.client}</p>\n <p className=\"text-xs text-muted-foreground\">\n {payment.service} · {payment.date}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-bold\">${payment.amount.toLocaleString()}</span>\n <Badge\n variant={payment.status === 'completed' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {payment.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarketplaceEarningsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceEarningsPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Badge, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { ArrowUp, DollarSign, TrendingUp, Wallet } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype EarningPoint = {\n month: string;\n amount: number;\n orders: number;\n};\n\ntype PaymentItem = {\n id: string;\n client: string;\n service: string;\n amount: number;\n date: string;\n status: 'completed' | 'pending';\n};\n\nconst monthLabel = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'N/A';\n }\n return parsed.toLocaleString('en-US', { month: 'short' });\n};\n\nconst isoDate = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'Unknown';\n }\n return parsed.toISOString().split('T')[0];\n};\n\nexport function MarketplaceEarningsPagePage() {\n const { invoices, marketplaceServices, clients } = useCrewFoundryStore();\n\n const recentPayments = useMemo<PaymentItem[]>(() => {\n return invoices.slice(0, 12).map((invoice, index) => ({\n id: invoice.id,\n client: invoice.clientName,\n service:\n marketplaceServices[index % Math.max(marketplaceServices.length, 1)]?.title ||\n 'Marketplace Service',\n amount: invoice.amount,\n date: isoDate(invoice.issueDate),\n status: invoice.status === 'paid' ? 'completed' : 'pending',\n }));\n }, [invoices, marketplaceServices]);\n\n const earningsData = useMemo<EarningPoint[]>(() => {\n return recentPayments.slice(0, 6).map((payment, index) => {\n const sibling = recentPayments.filter(\n (item) => monthLabel(item.date) === monthLabel(payment.date)\n );\n const amount = sibling.reduce((sum, item) => sum + item.amount, 0);\n return {\n month: monthLabel(payment.date) || `M${index + 1}`,\n amount,\n orders: sibling.length,\n };\n });\n }, [recentPayments]);\n\n const totalEarnings = earningsData.reduce((sum, point) => sum + point.amount, 0);\n const maxEarning = Math.max(1, ...earningsData.map((point) => point.amount));\n const totalOrders = earningsData.reduce((sum, point) => sum + point.orders, 0);\n const pendingAmount = recentPayments\n .filter((payment) => payment.status === 'pending')\n .reduce((sum, payment) => sum + payment.amount, 0);\n const growthBase = clients.length > 0 ? Math.round((totalOrders / clients.length) * 100) : 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Earnings</h1>\n <p className=\"text-sm text-text-secondary\">Revenue from marketplace services</p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total Earnings</CardTitle>\n <DollarSign className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${totalEarnings.toLocaleString()}</div>\n <div className=\"flex items-center text-xs text-green-600\">\n <ArrowUp className=\"mr-1 h-3 w-3\" />+{growthBase}% from recent cycle\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Avg Order Value</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n ${Math.round(totalEarnings / Math.max(totalOrders, 1)).toLocaleString()}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Pending</CardTitle>\n <Wallet className=\"h-4 w-4 text-yellow-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">${pendingAmount.toLocaleString()}</div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Earnings Trend</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {earningsData.map((earning, index) => (\n <div key={`${earning.month}-${index}`} className=\"flex items-center gap-3\">\n <span className=\"w-10 text-sm text-text-secondary\">{earning.month}</span>\n <div className=\"h-4 flex-1 overflow-hidden rounded bg-bg-sunken\">\n <div\n className=\"h-4 rounded bg-action-primary-bg\"\n style={{ width: `${Math.round((earning.amount / maxEarning) * 100)}%` }}\n />\n </div>\n <span className=\"w-16 text-right text-sm font-medium\">\n ${(earning.amount / 1000).toFixed(1)}K\n </span>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {earning.orders} orders\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Recent Payments</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {recentPayments.map((payment) => (\n <div key={payment.id} className=\"flex items-center justify-between rounded border p-3\">\n <div>\n <p className=\"text-sm font-medium\">{payment.client}</p>\n <p className=\"text-xs text-text-secondary\">\n {payment.service} · {payment.date}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-bold\">${payment.amount.toLocaleString()}</span>\n <Badge\n variant={payment.status === 'completed' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {payment.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -74,7 +74,7 @@ function A() {
|
|
|
74
74
|
children: /* @__PURE__ */ _("div", {
|
|
75
75
|
className: "flex items-start gap-6",
|
|
76
76
|
children: [/* @__PURE__ */ g("div", {
|
|
77
|
-
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-
|
|
77
|
+
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",
|
|
78
78
|
children: "MS"
|
|
79
79
|
}), /* @__PURE__ */ _("div", {
|
|
80
80
|
className: "flex-1 space-y-2",
|
|
@@ -103,11 +103,11 @@ function A() {
|
|
|
103
103
|
children: "Senior HR Consultant & Technical Recruiter"
|
|
104
104
|
}),
|
|
105
105
|
/* @__PURE__ */ g("p", {
|
|
106
|
-
className: "text-xs text-
|
|
106
|
+
className: "text-xs text-text-secondary",
|
|
107
107
|
children: "TalentPro Solutions"
|
|
108
108
|
}),
|
|
109
109
|
/* @__PURE__ */ _("div", {
|
|
110
|
-
className: "flex flex-wrap items-center gap-4 text-xs text-
|
|
110
|
+
className: "flex flex-wrap items-center gap-4 text-xs text-text-secondary",
|
|
111
111
|
children: [
|
|
112
112
|
/* @__PURE__ */ _("span", {
|
|
113
113
|
className: "flex items-center gap-1",
|
|
@@ -160,7 +160,7 @@ function A() {
|
|
|
160
160
|
className: "pt-6",
|
|
161
161
|
children: [
|
|
162
162
|
/* @__PURE__ */ g("p", {
|
|
163
|
-
className: "text-xs text-
|
|
163
|
+
className: "text-xs text-text-secondary",
|
|
164
164
|
children: e.label
|
|
165
165
|
}),
|
|
166
166
|
/* @__PURE__ */ g("p", {
|
|
@@ -207,7 +207,7 @@ function A() {
|
|
|
207
207
|
className: "text-base",
|
|
208
208
|
children: "Professional Summary"
|
|
209
209
|
}) }), /* @__PURE__ */ _(x, {
|
|
210
|
-
className: "text-sm text-
|
|
210
|
+
className: "text-sm text-text-secondary space-y-3",
|
|
211
211
|
children: [
|
|
212
212
|
/* @__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
213
|
/* @__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." }),
|
|
@@ -270,7 +270,7 @@ function A() {
|
|
|
270
270
|
children: "Usually responds within 2 hours"
|
|
271
271
|
})]
|
|
272
272
|
}), /* @__PURE__ */ g("p", {
|
|
273
|
-
className: "text-xs text-
|
|
273
|
+
className: "text-xs text-text-secondary",
|
|
274
274
|
children: "Available Mon-Fri, 9 AM - 6 PM PST"
|
|
275
275
|
})]
|
|
276
276
|
})] })]
|
|
@@ -305,7 +305,7 @@ function A() {
|
|
|
305
305
|
className: "text-sm font-semibold",
|
|
306
306
|
children: e.price
|
|
307
307
|
}), /* @__PURE__ */ _("p", {
|
|
308
|
-
className: "text-[10px] text-
|
|
308
|
+
className: "text-[10px] text-text-secondary",
|
|
309
309
|
children: ["Delivery: ", e.delivery]
|
|
310
310
|
})]
|
|
311
311
|
}), /* @__PURE__ */ g(y, {
|
|
@@ -381,7 +381,7 @@ function A() {
|
|
|
381
381
|
className: "flex items-center justify-between",
|
|
382
382
|
children: [/* @__PURE__ */ _("div", {
|
|
383
383
|
className: "flex items-center gap-2 text-sm",
|
|
384
|
-
children: [/* @__PURE__ */ g(e.icon, { className: "h-4 w-4 text-
|
|
384
|
+
children: [/* @__PURE__ */ g(e.icon, { className: "h-4 w-4 text-text-secondary" }), /* @__PURE__ */ g("span", { children: e.label })]
|
|
385
385
|
}), /* @__PURE__ */ g("span", {
|
|
386
386
|
className: "font-semibold text-sm",
|
|
387
387
|
children: e.value
|
|
@@ -418,13 +418,13 @@ function A() {
|
|
|
418
418
|
children: [/* @__PURE__ */ _("div", {
|
|
419
419
|
className: "flex items-center justify-between text-sm",
|
|
420
420
|
children: [/* @__PURE__ */ g("span", { children: e.industry }), /* @__PURE__ */ _("span", {
|
|
421
|
-
className: "text-xs text-
|
|
421
|
+
className: "text-xs text-text-secondary",
|
|
422
422
|
children: [e.percentage, "%"]
|
|
423
423
|
})]
|
|
424
424
|
}), /* @__PURE__ */ g("div", {
|
|
425
|
-
className: "h-1.5 rounded-full bg-
|
|
425
|
+
className: "h-1.5 rounded-full bg-bg-sunken overflow-hidden",
|
|
426
426
|
children: /* @__PURE__ */ g("div", {
|
|
427
|
-
className: "h-full rounded-full bg-primary",
|
|
427
|
+
className: "h-full rounded-full bg-action-primary-bg",
|
|
428
428
|
style: { width: `${e.percentage}%` }
|
|
429
429
|
})
|
|
430
430
|
})]
|
|
@@ -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 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\">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-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-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-text-secondary\">{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-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-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-text-secondary\">\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-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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"}
|
|
@@ -31,7 +31,7 @@ function w() {
|
|
|
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",
|
|
@@ -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",
|
|
@@ -126,7 +126,7 @@ function w() {
|
|
|
126
126
|
].map((e) => /* @__PURE__ */ m(v, { children: /* @__PURE__ */ h(y, {
|
|
127
127
|
className: "flex items-center gap-3 pt-6",
|
|
128
128
|
children: [/* @__PURE__ */ m(e.icon, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("p", {
|
|
129
|
-
className: "text-xs text-
|
|
129
|
+
className: "text-xs text-text-secondary",
|
|
130
130
|
children: e.label
|
|
131
131
|
}), /* @__PURE__ */ m("p", {
|
|
132
132
|
className: "text-lg font-bold",
|
|
@@ -143,7 +143,7 @@ function w() {
|
|
|
143
143
|
className: "text-base",
|
|
144
144
|
children: "About"
|
|
145
145
|
}) }), /* @__PURE__ */ h(y, {
|
|
146
|
-
className: "text-sm text-
|
|
146
|
+
className: "text-sm text-text-secondary space-y-3",
|
|
147
147
|
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
148
|
})] }),
|
|
149
149
|
/* @__PURE__ */ h(v, { children: [/* @__PURE__ */ h(x, { children: [/* @__PURE__ */ m(S, {
|
|
@@ -166,11 +166,11 @@ function w() {
|
|
|
166
166
|
})]
|
|
167
167
|
}),
|
|
168
168
|
/* @__PURE__ */ m("p", {
|
|
169
|
-
className: "text-xs text-
|
|
169
|
+
className: "text-xs text-text-secondary",
|
|
170
170
|
children: e.client
|
|
171
171
|
}),
|
|
172
172
|
/* @__PURE__ */ m("p", {
|
|
173
|
-
className: "text-xs text-
|
|
173
|
+
className: "text-xs text-text-secondary",
|
|
174
174
|
children: e.description
|
|
175
175
|
}),
|
|
176
176
|
/* @__PURE__ */ h("div", {
|
|
@@ -197,7 +197,7 @@ function w() {
|
|
|
197
197
|
className: "text-sm font-medium",
|
|
198
198
|
children: e.author
|
|
199
199
|
}), /* @__PURE__ */ h("p", {
|
|
200
|
-
className: "text-xs text-
|
|
200
|
+
className: "text-xs text-text-secondary",
|
|
201
201
|
children: [
|
|
202
202
|
e.company,
|
|
203
203
|
" - ",
|
|
@@ -209,7 +209,7 @@ function w() {
|
|
|
209
209
|
})]
|
|
210
210
|
}),
|
|
211
211
|
/* @__PURE__ */ m("p", {
|
|
212
|
-
className: "text-xs text-
|
|
212
|
+
className: "text-xs text-text-secondary",
|
|
213
213
|
children: e.text
|
|
214
214
|
}),
|
|
215
215
|
/* @__PURE__ */ m(C, {})
|
|
@@ -254,10 +254,10 @@ function w() {
|
|
|
254
254
|
className: "space-y-2",
|
|
255
255
|
children: [/* @__PURE__ */ h("div", {
|
|
256
256
|
className: "flex items-center gap-2 text-sm",
|
|
257
|
-
children: [/* @__PURE__ */ m(c, { className: "h-3 w-3 text-
|
|
257
|
+
children: [/* @__PURE__ */ m(c, { className: "h-3 w-3 text-text-secondary" }), /* @__PURE__ */ m("span", { children: "maria@talentpro.com" })]
|
|
258
258
|
}), /* @__PURE__ */ h("div", {
|
|
259
259
|
className: "flex items-center gap-2 text-sm",
|
|
260
|
-
children: [/* @__PURE__ */ m(d, { className: "h-3 w-3 text-
|
|
260
|
+
children: [/* @__PURE__ */ m(d, { className: "h-3 w-3 text-text-secondary" }), /* @__PURE__ */ m("span", { children: "+1-555-0301" })]
|
|
261
261
|
})]
|
|
262
262
|
})] })
|
|
263
263
|
]
|
|
@@ -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 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\">Maria Santos</h1>\n <Badge>Top Rated</Badge>\n <Badge variant=\"secondary\">Pro</Badge>\n </div>\n <p className=\"text-sm text-text-secondary\">\n Senior HR Consultant & Technical Recruiter\n </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-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-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-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-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 key={i} className=\"h-3 w-3 text-yellow-500 fill-yellow-500\" />\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-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-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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"}
|
|
@@ -16,7 +16,7 @@ function p() {
|
|
|
16
16
|
className: "text-2xl font-semibold",
|
|
17
17
|
children: h("crewfoundry.marketplace.title", "HR Services Marketplace")
|
|
18
18
|
}), /* @__PURE__ */ i("p", {
|
|
19
|
-
className: "text-sm text-
|
|
19
|
+
className: "text-sm text-text-secondary",
|
|
20
20
|
children: h("crewfoundry.marketplace.subtitle", "Find and hire professional HR service providers")
|
|
21
21
|
})] }),
|
|
22
22
|
/* @__PURE__ */ a("div", {
|
|
@@ -27,7 +27,7 @@ function p() {
|
|
|
27
27
|
children: [/* @__PURE__ */ i(d, {
|
|
28
28
|
className: "text-sm font-medium",
|
|
29
29
|
children: h("crewfoundry.marketplace.stats.services", "Services")
|
|
30
|
-
}), /* @__PURE__ */ i(t, { className: "h-4 w-4 text-
|
|
30
|
+
}), /* @__PURE__ */ i(t, { className: "h-4 w-4 text-text-secondary" })]
|
|
31
31
|
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
32
32
|
className: "text-2xl font-bold",
|
|
33
33
|
children: m.length
|
|
@@ -47,7 +47,7 @@ function p() {
|
|
|
47
47
|
children: [/* @__PURE__ */ i(d, {
|
|
48
48
|
className: "text-sm font-medium",
|
|
49
49
|
children: h("crewfoundry.marketplace.stats.totalReviews", "Total Reviews")
|
|
50
|
-
}), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-
|
|
50
|
+
}), /* @__PURE__ */ i(r, { className: "h-4 w-4 text-text-secondary" })]
|
|
51
51
|
}), /* @__PURE__ */ i(c, { children: /* @__PURE__ */ i("div", {
|
|
52
52
|
className: "text-2xl font-bold",
|
|
53
53
|
children: m.reduce((e, t) => e + t.reviews, 0)
|
|
@@ -82,7 +82,7 @@ function p() {
|
|
|
82
82
|
/* @__PURE__ */ i(l, { children: e.provider })
|
|
83
83
|
] }), /* @__PURE__ */ a(c, { children: [
|
|
84
84
|
/* @__PURE__ */ i("p", {
|
|
85
|
-
className: "text-sm text-
|
|
85
|
+
className: "text-sm text-text-secondary mb-3",
|
|
86
86
|
children: e.description
|
|
87
87
|
}),
|
|
88
88
|
/* @__PURE__ */ i("div", {
|
|
@@ -101,7 +101,7 @@ function p() {
|
|
|
101
101
|
"$",
|
|
102
102
|
e.price.toLocaleString(),
|
|
103
103
|
/* @__PURE__ */ a("span", {
|
|
104
|
-
className: "text-xs font-normal text-
|
|
104
|
+
className: "text-xs font-normal text-text-secondary",
|
|
105
105
|
children: ["/", e.priceType]
|
|
106
106
|
})
|
|
107
107
|
]
|
|
@@ -117,7 +117,7 @@ function p() {
|
|
|
117
117
|
})]
|
|
118
118
|
}),
|
|
119
119
|
/* @__PURE__ */ a("p", {
|
|
120
|
-
className: "text-xs text-
|
|
120
|
+
className: "text-xs text-text-secondary mt-1",
|
|
121
121
|
children: [
|
|
122
122
|
h("crewfoundry.marketplace.card.delivery", "Delivery"),
|
|
123
123
|
": ",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceMarketplacePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { DollarSign, ShoppingBag, Star, TrendingUp, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceMarketplacePagePage() {\n const { t: translate } = useI18n();\n const { marketplaceServices } = useCrewFoundryStore();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {t('crewfoundry.marketplace.title', 'HR Services Marketplace')}\n </h1>\n <p className=\"text-sm text-
|
|
1
|
+
{"version":3,"file":"MarketplaceMarketplacePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { DollarSign, ShoppingBag, Star, TrendingUp, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function MarketplaceMarketplacePagePage() {\n const { t: translate } = useI18n();\n const { marketplaceServices } = useCrewFoundryStore();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {t('crewfoundry.marketplace.title', 'HR Services Marketplace')}\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {t('crewfoundry.marketplace.subtitle', 'Find and hire professional HR service providers')}\n </p>\n </div>\n <div className=\"grid gap-4 md:grid-cols-3\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {t('crewfoundry.marketplace.stats.services', 'Services')}\n </CardTitle>\n <ShoppingBag className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{marketplaceServices.length}</div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {t('crewfoundry.marketplace.stats.avgRating', 'Avg Rating')}\n </CardTitle>\n <Star className=\"h-4 w-4 text-yellow-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {(\n marketplaceServices.reduce((s, m) => s + m.rating, 0) / marketplaceServices.length\n ).toFixed(1)}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {t('crewfoundry.marketplace.stats.totalReviews', 'Total Reviews')}\n </CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {marketplaceServices.reduce((s, m) => s + m.reviews, 0)}\n </div>\n </CardContent>\n </Card>\n </div>\n <h2 className=\"text-lg font-medium\">\n {t('crewfoundry.marketplace.featured.title', 'Featured Services')}\n </h2>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {marketplaceServices.map((svc) => (\n <Card key={svc.id} className=\"hover:shadow-md transition-shadow cursor-pointer\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {svc.category}\n </Badge>\n <Badge\n variant={svc.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {svc.status}\n </Badge>\n </div>\n <CardTitle className=\"text-base mt-2\">{svc.title}</CardTitle>\n <CardDescription>{svc.provider}</CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary mb-3\">{svc.description}</p>\n <div className=\"flex flex-wrap gap-1 mb-3\">\n {svc.skills.map((s) => (\n <Badge key={s} variant=\"outline\" className=\"text-[9px]\">\n {s}\n </Badge>\n ))}\n </div>\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"font-bold\">\n ${svc.price.toLocaleString()}\n <span className=\"text-xs font-normal text-text-secondary\">\n /{svc.priceType}\n </span>\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500\" />\n {svc.rating} ({svc.reviews})\n </span>\n </div>\n <p className=\"text-xs text-text-secondary mt-1\">\n {t('crewfoundry.marketplace.card.delivery', 'Delivery')}: {svc.deliveryTime}\n </p>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|