@burdenoff/microfe-crewfoundry 2026.1013.2 → 2026.1029.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.
Files changed (198) hide show
  1. package/dist/crewfoundry/CrewFoundryRoot.d.ts.map +1 -1
  2. package/dist/crewfoundry/CrewFoundryRoot.js +160 -256
  3. package/dist/crewfoundry/CrewFoundryRoot.js.map +1 -1
  4. package/dist/crewfoundry/CrewFoundryRoutes.d.ts.map +1 -1
  5. package/dist/crewfoundry/CrewFoundryRoutes.js +152 -192
  6. package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
  7. package/dist/crewfoundry/components/InlineError.d.ts +5 -0
  8. package/dist/crewfoundry/components/InlineError.d.ts.map +1 -0
  9. package/dist/crewfoundry/components/InlineError.js +17 -0
  10. package/dist/crewfoundry/components/InlineError.js.map +1 -0
  11. package/dist/crewfoundry/components/marketplace/BookServiceModal.d.ts +14 -0
  12. package/dist/crewfoundry/components/marketplace/BookServiceModal.d.ts.map +1 -0
  13. package/dist/crewfoundry/components/marketplace/BookServiceModal.js +75 -0
  14. package/dist/crewfoundry/components/marketplace/BookServiceModal.js.map +1 -0
  15. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.d.ts +24 -0
  16. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.d.ts.map +1 -0
  17. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.js +47 -0
  18. package/dist/crewfoundry/components/marketplace/MarketplaceTabs.js.map +1 -0
  19. package/dist/crewfoundry/components/marketplace/ServiceListingModal.d.ts +12 -0
  20. package/dist/crewfoundry/components/marketplace/ServiceListingModal.d.ts.map +1 -0
  21. package/dist/crewfoundry/components/marketplace/ServiceListingModal.js +123 -0
  22. package/dist/crewfoundry/components/marketplace/ServiceListingModal.js.map +1 -0
  23. package/dist/crewfoundry/components/viz/CertificateCard.js +4 -118
  24. package/dist/crewfoundry/components/viz/PathSteps.js +3 -68
  25. package/dist/crewfoundry/components/viz/lib/geometry.js +5 -13
  26. package/dist/crewfoundry/components/viz/lib/geometry.js.map +1 -1
  27. package/dist/crewfoundry/lib/analytics.d.ts +1 -6
  28. package/dist/crewfoundry/lib/analytics.d.ts.map +1 -1
  29. package/dist/crewfoundry/lib/analytics.js +3 -18
  30. package/dist/crewfoundry/lib/analytics.js.map +1 -1
  31. package/dist/crewfoundry/lib/companyFinance.d.ts +3 -7
  32. package/dist/crewfoundry/lib/companyFinance.d.ts.map +1 -1
  33. package/dist/crewfoundry/lib/companyFinance.js +3 -8
  34. package/dist/crewfoundry/lib/companyFinance.js.map +1 -1
  35. package/dist/crewfoundry/lib/learning.d.ts +12 -0
  36. package/dist/crewfoundry/lib/learning.d.ts.map +1 -0
  37. package/dist/crewfoundry/lib/learning.js +26 -0
  38. package/dist/crewfoundry/lib/learning.js.map +1 -0
  39. package/dist/crewfoundry/lib/marketplace.d.ts +30 -0
  40. package/dist/crewfoundry/lib/marketplace.d.ts.map +1 -0
  41. package/dist/crewfoundry/lib/marketplace.js +91 -0
  42. package/dist/crewfoundry/lib/marketplace.js.map +1 -0
  43. package/dist/crewfoundry/lib/useEnsureLoaded.d.ts +7 -0
  44. package/dist/crewfoundry/lib/useEnsureLoaded.d.ts.map +1 -0
  45. package/dist/crewfoundry/lib/useEnsureLoaded.js +25 -0
  46. package/dist/crewfoundry/lib/useEnsureLoaded.js.map +1 -0
  47. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.d.ts.map +1 -1
  48. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +12 -25
  49. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  50. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.d.ts.map +1 -1
  51. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +145 -157
  52. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.d.ts.map +1 -1
  54. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +14 -14
  55. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  56. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.d.ts.map +1 -1
  57. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +14 -14
  58. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.d.ts.map +1 -1
  60. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +71 -33
  61. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  62. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.d.ts.map +1 -1
  63. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +247 -173
  64. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningCoursesPagePage.d.ts +12 -0
  66. package/dist/crewfoundry/pages/LearningCoursesPagePage.d.ts.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +307 -293
  68. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.d.ts +2 -0
  70. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.d.ts.map +1 -0
  71. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.js +223 -0
  72. package/dist/crewfoundry/pages/LearningEnrollmentsPagePage.js.map +1 -0
  73. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.d.ts +4 -0
  74. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.d.ts.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +115 -160
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.d.ts.map +1 -1
  78. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +165 -75
  79. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  80. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.d.ts +7 -0
  81. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.d.ts.map +1 -0
  82. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.js +175 -0
  83. package/dist/crewfoundry/pages/MarketplaceEscrowPagePage.js.map +1 -0
  84. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.d.ts.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +182 -223
  86. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.d.ts.map +1 -1
  88. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +168 -227
  89. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  90. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.d.ts.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +127 -290
  92. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  93. package/dist/crewfoundry/store/crewfoundryStore.d.ts +138 -78
  94. package/dist/crewfoundry/store/crewfoundryStore.d.ts.map +1 -1
  95. package/dist/crewfoundry/store/crewfoundryStore.js +338 -244
  96. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  97. package/dist/crewfoundry/utils/dateUtils.d.ts +5 -0
  98. package/dist/crewfoundry/utils/dateUtils.d.ts.map +1 -1
  99. package/dist/crewfoundry/utils/dateUtils.js +10 -1
  100. package/dist/crewfoundry/utils/dateUtils.js.map +1 -1
  101. package/dist/generated/global-types.d.ts +5145 -1627
  102. package/dist/generated/global-types.d.ts.map +1 -1
  103. package/dist/generated/wspace-types.d.ts +100373 -34602
  104. package/dist/generated/wspace-types.d.ts.map +1 -1
  105. package/dist/utils/pageContext.d.ts.map +1 -1
  106. package/dist/utils/pageContext.js +0 -1
  107. package/dist/utils/pageContext.js.map +1 -1
  108. package/package.json +1 -1
  109. package/dist/crewfoundry/components/viz/CertificateCard.js.map +0 -1
  110. package/dist/crewfoundry/components/viz/PathSteps.js.map +0 -1
  111. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.d.ts +0 -2
  112. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.d.ts.map +0 -1
  113. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +0 -53
  114. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +0 -1
  115. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.d.ts +0 -2
  116. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.d.ts.map +0 -1
  117. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +0 -107
  118. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +0 -1
  119. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.d.ts +0 -2
  120. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.d.ts.map +0 -1
  121. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +0 -62
  122. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +0 -1
  123. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.d.ts +0 -2
  124. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.d.ts.map +0 -1
  125. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +0 -37
  126. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +0 -1
  127. package/dist/crewfoundry/pages/LearningCertificatesPagePage.d.ts +0 -2
  128. package/dist/crewfoundry/pages/LearningCertificatesPagePage.d.ts.map +0 -1
  129. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +0 -111
  130. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +0 -1
  131. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.d.ts +0 -2
  132. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.d.ts.map +0 -1
  133. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +0 -309
  134. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +0 -1
  135. package/dist/crewfoundry/pages/LearningLearningPagePage.d.ts +0 -2
  136. package/dist/crewfoundry/pages/LearningLearningPagePage.d.ts.map +0 -1
  137. package/dist/crewfoundry/pages/LearningLearningPagePage.js +0 -200
  138. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +0 -1
  139. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.d.ts +0 -2
  140. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.d.ts.map +0 -1
  141. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +0 -190
  142. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +0 -1
  143. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.d.ts +0 -2
  144. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.d.ts.map +0 -1
  145. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +0 -230
  146. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +0 -1
  147. package/dist/crewfoundry/pages/LearningMyLearningPagePage.d.ts +0 -2
  148. package/dist/crewfoundry/pages/LearningMyLearningPagePage.d.ts.map +0 -1
  149. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +0 -293
  150. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +0 -1
  151. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.d.ts +0 -2
  152. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.d.ts.map +0 -1
  153. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +0 -163
  154. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +0 -1
  155. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.d.ts +0 -2
  156. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.d.ts.map +0 -1
  157. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +0 -365
  158. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +0 -1
  159. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.d.ts +0 -2
  160. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.d.ts.map +0 -1
  161. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +0 -224
  162. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +0 -1
  163. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.d.ts +0 -2
  164. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.d.ts.map +0 -1
  165. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +0 -180
  166. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +0 -1
  167. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.d.ts +0 -2
  168. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.d.ts.map +0 -1
  169. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +0 -38
  170. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +0 -1
  171. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.d.ts +0 -2
  172. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.d.ts.map +0 -1
  173. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +0 -204
  174. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +0 -1
  175. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.d.ts +0 -2
  176. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.d.ts.map +0 -1
  177. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +0 -55
  178. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +0 -1
  179. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.d.ts +0 -2
  180. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.d.ts.map +0 -1
  181. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +0 -335
  182. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +0 -1
  183. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.d.ts +0 -2
  184. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.d.ts.map +0 -1
  185. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +0 -160
  186. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +0 -1
  187. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.d.ts +0 -2
  188. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.d.ts.map +0 -1
  189. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +0 -80
  190. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +0 -1
  191. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.d.ts +0 -2
  192. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.d.ts.map +0 -1
  193. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +0 -191
  194. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +0 -1
  195. package/dist/crewfoundry/utils/courseProgress.d.ts +0 -33
  196. package/dist/crewfoundry/utils/courseProgress.d.ts.map +0 -1
  197. package/dist/crewfoundry/utils/courseProgress.js +0 -46
  198. package/dist/crewfoundry/utils/courseProgress.js.map +0 -1
@@ -1,365 +0,0 @@
1
- import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
- import { useMemo as n, useState as r } from "react";
4
- import { Briefcase as i, Calendar as a, DollarSign as o, MessageSquare as s, Star as c, TrendingUp as l, Video as u } from "lucide-react";
5
- import { useLocation as d, useNavigate as f } from "react-router";
6
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
7
- import { Badge as h, Button as g, Card as _, CardContent as v, CardDescription as y, CardHeader as b, CardTitle as x, GlassCard as S, GradientText as C, IllustratedEmptyState as w, NextSteps as T, PagePurpose as E, Separator as D, Tabs as O, TabsContent as k, TabsList as A, TabsTrigger as j } from "@burdenoff/fe-libs/ui";
8
- //#region src/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.tsx
9
- var M = (e) => e.split(" ").map((e) => e[0] ?? "").join("").slice(0, 2).toUpperCase() || "—";
10
- function N() {
11
- let [N, P] = r("overview"), F = f(), I = d(), { marketplaceServices: L } = e(), R = new URLSearchParams(I.search).get("id"), z = L.find((e) => e.id === R) ?? L[0], B = z?.provider ?? "", V = n(() => L.filter((e) => e.provider === B), [L, B]), H = n(() => Array.from(new Set(V.flatMap((e) => e.skills))).slice(0, 20), [V]), U = n(() => Array.from(new Set(V.map((e) => e.category))), [V]), W = n(() => V.map((e) => ({
12
- id: e.id,
13
- title: e.title,
14
- price: e.priceType === "hourly" ? `$${e.price}/hr` : e.priceType === "monthly" ? `$${e.price}/mo` : `$${e.price}`,
15
- type: e.priceType,
16
- description: e.description,
17
- delivery: e.deliveryTime,
18
- rating: e.rating,
19
- reviews: e.reviews
20
- })), [V]), G = V.length > 0 ? (V.reduce((e, t) => e + t.rating, 0) / V.length).toFixed(1) : "0.0", K = V.reduce((e, t) => e + t.reviews, 0), q = V.length > 0 ? Math.min(...V.map((e) => e.price)) : 0, J = Number(G) >= 4.5 && K > 0, Y = [
21
- {
22
- label: "Services",
23
- value: `${V.length}`
24
- },
25
- {
26
- label: "Avg Rating",
27
- value: G
28
- },
29
- {
30
- label: "Total Reviews",
31
- value: `${K}`
32
- },
33
- {
34
- label: "Starting Rate",
35
- value: `$${q.toLocaleString()}`
36
- }
37
- ];
38
- return z ? /* @__PURE__ */ m("div", {
39
- className: "space-y-6 p-6",
40
- children: [
41
- /* @__PURE__ */ p(S, {
42
- treatment: "glass",
43
- glow: !0,
44
- className: "border-border-seam",
45
- children: /* @__PURE__ */ p(v, {
46
- className: "pt-6",
47
- children: /* @__PURE__ */ m("div", {
48
- className: "flex items-start gap-6",
49
- children: [/* @__PURE__ */ p("div", {
50
- 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",
51
- children: M(B)
52
- }), /* @__PURE__ */ m("div", {
53
- className: "flex-1 space-y-2",
54
- children: [
55
- /* @__PURE__ */ m("div", {
56
- className: "flex items-center gap-3 flex-wrap",
57
- children: [/* @__PURE__ */ p("h1", {
58
- className: "text-2xl font-semibold",
59
- children: /* @__PURE__ */ p(C, { children: B })
60
- }), J ? /* @__PURE__ */ p(h, { children: "Top Rated" }) : null]
61
- }),
62
- /* @__PURE__ */ p("p", {
63
- className: "text-sm font-medium",
64
- children: U.length > 0 ? U.join(" · ") : "Marketplace provider"
65
- }),
66
- /* @__PURE__ */ m("div", {
67
- className: "flex flex-wrap items-center gap-4 text-xs text-text-secondary",
68
- children: [
69
- /* @__PURE__ */ m("span", {
70
- className: "flex items-center gap-1",
71
- children: [
72
- /* @__PURE__ */ p(c, { className: "h-3 w-3 text-status-warning-text" }),
73
- " ",
74
- G,
75
- " (",
76
- K,
77
- " ",
78
- "reviews)"
79
- ]
80
- }),
81
- /* @__PURE__ */ m("span", {
82
- className: "flex items-center gap-1",
83
- children: [
84
- /* @__PURE__ */ p(i, { className: "h-3 w-3" }),
85
- " ",
86
- V.length,
87
- " services"
88
- ]
89
- }),
90
- /* @__PURE__ */ m("span", {
91
- className: "flex items-center gap-1",
92
- children: [
93
- /* @__PURE__ */ p(o, { className: "h-3 w-3" }),
94
- " from $",
95
- q.toLocaleString()
96
- ]
97
- })
98
- ]
99
- }),
100
- /* @__PURE__ */ m("div", {
101
- className: "flex gap-2 pt-2 flex-wrap",
102
- children: [
103
- /* @__PURE__ */ m(g, {
104
- size: "sm",
105
- onClick: () => F("../marketplace/messaging-page"),
106
- children: [/* @__PURE__ */ p(s, { className: "h-3 w-3 mr-1" }), " Send Proposal"]
107
- }),
108
- /* @__PURE__ */ m(g, {
109
- size: "sm",
110
- variant: "outline",
111
- disabled: !0,
112
- title: "Video intro is coming soon",
113
- "aria-label": "Video intro — coming soon",
114
- children: [/* @__PURE__ */ p(u, { className: "h-3 w-3 mr-1" }), " Video Intro · Coming soon"]
115
- }),
116
- /* @__PURE__ */ m(g, {
117
- size: "sm",
118
- variant: "outline",
119
- onClick: () => P("availability"),
120
- children: [/* @__PURE__ */ p(a, { className: "h-3 w-3 mr-1" }), " Schedule Call"]
121
- })
122
- ]
123
- }),
124
- /* @__PURE__ */ p(E, {
125
- className: "pt-2",
126
- children: "A freelancer's full profile — skills, listed services, and performance — so you can vet them thoroughly and decide whether to hire before you reach out."
127
- })
128
- ]
129
- })]
130
- })
131
- })
132
- }),
133
- /* @__PURE__ */ p(T, {
134
- storageKey: "crewfoundry-freelancer-profile-enhanced",
135
- steps: [
136
- {
137
- id: "services",
138
- label: "Review their services",
139
- description: "See exactly what this freelancer offers and at what price.",
140
- icon: /* @__PURE__ */ p(i, { className: "h-4 w-4" }),
141
- onClick: () => P("services")
142
- },
143
- {
144
- id: "availability",
145
- label: "Check availability",
146
- description: "Find open slots before you schedule a call.",
147
- icon: /* @__PURE__ */ p(a, { className: "h-4 w-4" }),
148
- onClick: () => P("availability")
149
- },
150
- {
151
- id: "performance",
152
- label: "Inspect performance",
153
- description: "Look at ratings and delivery history to reduce risk.",
154
- icon: /* @__PURE__ */ p(l, { className: "h-4 w-4" }),
155
- onClick: () => P("analytics")
156
- }
157
- ]
158
- }),
159
- /* @__PURE__ */ p("div", {
160
- className: "grid gap-4 md:grid-cols-4",
161
- children: Y.map((e) => /* @__PURE__ */ p(_, { children: /* @__PURE__ */ m(v, {
162
- className: "pt-6",
163
- children: [/* @__PURE__ */ p("p", {
164
- className: "text-xs text-text-secondary",
165
- children: e.label
166
- }), /* @__PURE__ */ p("p", {
167
- className: "text-lg font-bold",
168
- children: e.value
169
- })]
170
- }) }, e.label))
171
- }),
172
- /* @__PURE__ */ m(O, {
173
- value: N,
174
- onValueChange: P,
175
- children: [
176
- /* @__PURE__ */ m(A, { children: [
177
- /* @__PURE__ */ p(j, {
178
- value: "overview",
179
- children: "Overview"
180
- }),
181
- /* @__PURE__ */ p(j, {
182
- value: "services",
183
- children: "Services"
184
- }),
185
- /* @__PURE__ */ p(j, {
186
- value: "availability",
187
- children: "Availability"
188
- }),
189
- /* @__PURE__ */ p(j, {
190
- value: "analytics",
191
- children: "Performance"
192
- })
193
- ] }),
194
- /* @__PURE__ */ p(k, {
195
- value: "overview",
196
- className: "space-y-6 mt-4",
197
- children: /* @__PURE__ */ m("div", {
198
- className: "grid gap-6 lg:grid-cols-3",
199
- children: [/* @__PURE__ */ p("div", {
200
- className: "lg:col-span-2 space-y-4",
201
- children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(b, { children: /* @__PURE__ */ p(x, {
202
- className: "text-base",
203
- children: "Summary"
204
- }) }), /* @__PURE__ */ m(v, {
205
- className: "text-sm text-text-secondary space-y-3",
206
- children: [/* @__PURE__ */ m("p", { children: [
207
- B,
208
- " offers ",
209
- V.length,
210
- " ",
211
- V.length === 1 ? "service" : "services",
212
- " on the marketplace",
213
- U.length > 0 ? ` across ${U.join(", ")}` : "",
214
- "."
215
- ] }), /* @__PURE__ */ m("p", { children: [
216
- "Across all listings the provider holds an average rating of ",
217
- G,
218
- " from",
219
- " ",
220
- K,
221
- " reviews, with rates starting at $",
222
- q.toLocaleString(),
223
- "."
224
- ] })]
225
- })] })
226
- }), /* @__PURE__ */ p("div", {
227
- className: "space-y-4",
228
- children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ p(b, { children: /* @__PURE__ */ p(x, {
229
- className: "text-sm",
230
- children: "Expertise Areas"
231
- }) }), /* @__PURE__ */ p(v, {
232
- className: "flex flex-wrap gap-1.5",
233
- children: H.length > 0 ? H.map((e) => /* @__PURE__ */ p(h, {
234
- variant: "secondary",
235
- className: "text-xs",
236
- children: e
237
- }, e)) : /* @__PURE__ */ p("p", {
238
- className: "text-xs text-text-secondary",
239
- children: "No skills listed yet."
240
- })
241
- })] })
242
- })]
243
- })
244
- }),
245
- /* @__PURE__ */ p(k, {
246
- value: "services",
247
- className: "mt-4",
248
- children: W.length > 0 ? /* @__PURE__ */ p("div", {
249
- className: "grid gap-4 md:grid-cols-2",
250
- children: W.map((e) => /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(b, { children: [/* @__PURE__ */ m("div", {
251
- className: "flex items-center justify-between",
252
- children: [/* @__PURE__ */ p(x, {
253
- className: "text-sm",
254
- children: e.title
255
- }), /* @__PURE__ */ p(h, {
256
- variant: "outline",
257
- className: "text-xs",
258
- children: t(e.type)
259
- })]
260
- }), /* @__PURE__ */ p(y, {
261
- className: "text-xs",
262
- children: e.description
263
- })] }), /* @__PURE__ */ m(v, {
264
- className: "pt-0",
265
- children: [/* @__PURE__ */ p(D, { className: "mb-3" }), /* @__PURE__ */ m("div", {
266
- className: "flex items-center justify-between",
267
- children: [/* @__PURE__ */ m("div", {
268
- className: "space-y-0.5",
269
- children: [/* @__PURE__ */ p("p", {
270
- className: "text-sm font-semibold",
271
- children: e.price
272
- }), /* @__PURE__ */ m("p", {
273
- className: "text-[10px] text-text-secondary",
274
- children: ["Delivery: ", e.delivery]
275
- })]
276
- }), /* @__PURE__ */ p(g, {
277
- size: "sm",
278
- variant: "outline",
279
- onClick: () => F(`../marketplace/service-details-page?id=${e.id}`),
280
- children: "View"
281
- })]
282
- })]
283
- })] }, e.id))
284
- }) : /* @__PURE__ */ p(w, {
285
- illustration: "empty-generic",
286
- title: "No services listed",
287
- description: "This provider has not published any services yet."
288
- })
289
- }),
290
- /* @__PURE__ */ p(k, {
291
- value: "availability",
292
- className: "mt-4",
293
- children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(b, { children: [/* @__PURE__ */ p(x, {
294
- className: "text-base",
295
- children: "Availability"
296
- }), /* @__PURE__ */ p(y, { children: "Real-time scheduling with this provider" })] }), /* @__PURE__ */ p(v, { children: /* @__PURE__ */ p(w, {
297
- illustration: "empty-generic",
298
- title: "Scheduling is coming soon",
299
- description: "Live availability and consultation booking will appear here once the scheduling backend ships. In the meantime, send a message to arrange a time.",
300
- action: /* @__PURE__ */ m(g, {
301
- size: "sm",
302
- onClick: () => F("../marketplace/messaging-page"),
303
- children: [/* @__PURE__ */ p(s, { className: "h-3 w-3 mr-1" }), " Message provider"]
304
- })
305
- }) })] })
306
- }),
307
- /* @__PURE__ */ p(k, {
308
- value: "analytics",
309
- className: "mt-4",
310
- children: /* @__PURE__ */ m(_, { children: [/* @__PURE__ */ m(b, { children: [/* @__PURE__ */ p(x, {
311
- className: "text-base",
312
- children: "Service Performance"
313
- }), /* @__PURE__ */ p(y, { children: "Ratings and reviews per listed service" })] }), /* @__PURE__ */ p(v, {
314
- className: "space-y-3",
315
- children: V.length > 0 ? V.map((e) => /* @__PURE__ */ m("div", {
316
- className: "flex items-center justify-between",
317
- children: [/* @__PURE__ */ m("div", {
318
- className: "min-w-0",
319
- children: [/* @__PURE__ */ p("p", {
320
- className: "text-sm font-medium truncate",
321
- children: e.title
322
- }), /* @__PURE__ */ p("p", {
323
- className: "text-xs text-text-secondary",
324
- children: e.category
325
- })]
326
- }), /* @__PURE__ */ m("div", {
327
- className: "flex items-center gap-2 text-sm shrink-0",
328
- children: [
329
- /* @__PURE__ */ p(c, { className: "h-3.5 w-3.5 text-status-warning-text" }),
330
- /* @__PURE__ */ p("span", {
331
- className: "font-semibold",
332
- children: e.rating
333
- }),
334
- /* @__PURE__ */ m("span", {
335
- className: "text-xs text-text-secondary",
336
- children: [
337
- "(",
338
- e.reviews,
339
- ")"
340
- ]
341
- })
342
- ]
343
- })]
344
- }, e.id)) : /* @__PURE__ */ p("p", {
345
- className: "text-sm text-text-secondary",
346
- children: "No performance data yet."
347
- })
348
- })] })
349
- })
350
- ]
351
- })
352
- ]
353
- }) : /* @__PURE__ */ p("div", {
354
- className: "p-6",
355
- children: /* @__PURE__ */ p(w, {
356
- illustration: "empty-search",
357
- title: "Provider not found",
358
- description: "This freelancer is no longer available on the marketplace."
359
- })
360
- });
361
- }
362
- //#endregion
363
- export { N as MarketplaceFreelancerProfilePageEnhancedPage };
364
-
365
- //# sourceMappingURL=MarketplaceFreelancerProfilePageEnhancedPage.js.map
@@ -1 +0,0 @@
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 IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n Separator,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Briefcase,\n Calendar,\n DollarSign,\n MessageSquare,\n Star,\n TrendingUp,\n Video,\n} from 'lucide-react';\nimport { useLocation, useNavigate } from 'react-router';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nconst initialsOf = (name: string): string =>\n name\n .split(' ')\n .map((part) => part[0] ?? '')\n .join('')\n .slice(0, 2)\n .toUpperCase() || '—';\n\nexport function MarketplaceFreelancerProfilePageEnhancedPage() {\n const [selectedTab, setSelectedTab] = useState('overview');\n const navigate = useNavigate();\n const location = useLocation();\n const { marketplaceServices } = useCrewFoundryStore();\n const selectedId = new URLSearchParams(location.search).get('id');\n\n const baseService =\n marketplaceServices.find((service) => service.id === selectedId) ?? marketplaceServices[0];\n const providerName = baseService?.provider ?? '';\n\n const providerServices = useMemo(\n () => marketplaceServices.filter((service) => service.provider === providerName),\n [marketplaceServices, providerName]\n );\n\n const skills = useMemo(\n () => Array.from(new Set(providerServices.flatMap((service) => service.skills))).slice(0, 20),\n [providerServices]\n );\n\n const categories = useMemo(\n () => Array.from(new Set(providerServices.map((service) => service.category))),\n [providerServices]\n );\n\n const services = useMemo(\n () =>\n providerServices.map((service) => ({\n id: service.id,\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 rating: service.rating,\n reviews: service.reviews,\n })),\n [providerServices]\n );\n\n const avgRating =\n providerServices.length > 0\n ? (\n providerServices.reduce((sum, service) => sum + service.rating, 0) /\n providerServices.length\n ).toFixed(1)\n : '0.0';\n const totalReviews = providerServices.reduce((sum, service) => sum + service.reviews, 0);\n const startingRate =\n providerServices.length > 0 ? Math.min(...providerServices.map((service) => service.price)) : 0;\n const isTopRated = Number(avgRating) >= 4.5 && totalReviews > 0;\n\n const stats = [\n { label: 'Services', value: `${providerServices.length}` },\n { label: 'Avg Rating', value: avgRating },\n { label: 'Total Reviews', value: `${totalReviews}` },\n { label: 'Starting Rate', value: `$${startingRate.toLocaleString()}` },\n ];\n\n if (!baseService) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Provider not found\"\n description=\"This freelancer is no longer available on the marketplace.\"\n />\n </div>\n );\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 {initialsOf(providerName)}\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>{providerName}</GradientText>\n </h1>\n {isTopRated ? <Badge>Top Rated</Badge> : null}\n </div>\n <p className=\"text-sm font-medium\">\n {categories.length > 0 ? categories.join(' · ') : 'Marketplace provider'}\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 <Star className=\"h-3 w-3 text-status-warning-text\" /> {avgRating} ({totalReviews}{' '}\n reviews)\n </span>\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" /> {providerServices.length} services\n </span>\n <span className=\"flex items-center gap-1\">\n <DollarSign className=\"h-3 w-3\" /> from ${startingRate.toLocaleString()}\n </span>\n </div>\n <div className=\"flex gap-2 pt-2 flex-wrap\">\n <Button size=\"sm\" onClick={() => navigate('../marketplace/messaging-page')}>\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Send Proposal\n </Button>\n {/* No video-intro/call surface exists yet — honest disabled control. */}\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled\n title=\"Video intro is coming soon\"\n aria-label=\"Video intro — coming soon\"\n >\n <Video className=\"h-3 w-3 mr-1\" /> Video Intro · Coming soon\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setSelectedTab('availability')}>\n <Calendar className=\"h-3 w-3 mr-1\" /> Schedule Call\n </Button>\n </div>\n <PagePurpose className=\"pt-2\">\n A freelancer&apos;s full profile — skills, listed services, and performance — so you\n can vet them thoroughly and decide whether to hire before you 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 {stats.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 </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\">Summary</CardTitle>\n </CardHeader>\n <CardContent className=\"text-sm text-text-secondary space-y-3\">\n <p>\n {providerName} offers {providerServices.length}{' '}\n {providerServices.length === 1 ? 'service' : 'services'} on the marketplace\n {categories.length > 0 ? ` across ${categories.join(', ')}` : ''}.\n </p>\n <p>\n Across all listings the provider holds an average rating of {avgRating} from{' '}\n {totalReviews} reviews, with rates starting at ${startingRate.toLocaleString()}.\n </p>\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 {skills.length > 0 ? (\n skills.map((s) => (\n <Badge key={s} variant=\"secondary\" className=\"text-xs\">\n {s}\n </Badge>\n ))\n ) : (\n <p className=\"text-xs text-text-secondary\">No skills listed yet.</p>\n )}\n </CardContent>\n </Card>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"services\" className=\"mt-4\">\n {services.length > 0 ? (\n <div className=\"grid gap-4 md:grid-cols-2\">\n {services.map((svc) => (\n <Card key={svc.id}>\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 {formatEnumLabel(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\n size=\"sm\"\n variant=\"outline\"\n onClick={() => navigate(`../marketplace/service-details-page?id=${svc.id}`)}\n >\n View\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"No services listed\"\n description=\"This provider has not published any services yet.\"\n />\n )}\n </TabsContent>\n\n <TabsContent value=\"availability\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Availability</CardTitle>\n <CardDescription>Real-time scheduling with this provider</CardDescription>\n </CardHeader>\n <CardContent>\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"Scheduling is coming soon\"\n description=\"Live availability and consultation booking will appear here once the scheduling backend ships. In the meantime, send a message to arrange a time.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('../marketplace/messaging-page')}>\n <MessageSquare className=\"h-3 w-3 mr-1\" /> Message provider\n </Button>\n }\n />\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"analytics\" className=\"mt-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Service Performance</CardTitle>\n <CardDescription>Ratings and reviews per listed service</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {providerServices.length > 0 ? (\n providerServices.map((service) => (\n <div key={service.id} className=\"flex items-center justify-between\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium truncate\">{service.title}</p>\n <p className=\"text-xs text-text-secondary\">{service.category}</p>\n </div>\n <div className=\"flex items-center gap-2 text-sm shrink-0\">\n <Star className=\"h-3.5 w-3.5 text-status-warning-text\" />\n <span className=\"font-semibold\">{service.rating}</span>\n <span className=\"text-xs text-text-secondary\">({service.reviews})</span>\n </div>\n </div>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No performance data yet.</p>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function MarketplaceFreelancerProfilePagePage(): import("react").JSX.Element;
2
- //# sourceMappingURL=MarketplaceFreelancerProfilePagePage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketplaceFreelancerProfilePagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,oCAAoC,gCAqNnD"}
@@ -1,224 +0,0 @@
1
- import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { getInitials as t } from "../components/viz/lib/format.js";
3
- import { RatingStars as n } from "../components/viz/RatingStars.js";
4
- import "../components/viz/index.js";
5
- import { useMemo as r } from "react";
6
- import { Award as i, Briefcase as a, DollarSign as o, MessageSquare as s, Star as c } from "lucide-react";
7
- import { useLocation as l, useNavigate as u } from "react-router";
8
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
9
- import { Badge as p, Button as m, Card as h, CardContent as g, CardHeader as _, CardTitle as v, EmphasisPanel as y, GradientText as b, IllustratedEmptyState as x, PagePurpose as S } from "@burdenoff/fe-libs/ui";
10
- //#region src/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.tsx
11
- var C = (e) => t(e);
12
- function w() {
13
- let t = u(), w = l(), { marketplaceServices: T } = e(), E = new URLSearchParams(w.search).get("id"), D = T.find((e) => e.id === E) ?? T[0], O = D?.provider ?? "", k = r(() => T.filter((e) => e.provider === O), [T, O]), A = r(() => Array.from(new Set(k.flatMap((e) => e.skills))).slice(0, 20), [k]), j = r(() => Array.from(new Set(k.map((e) => e.category))), [k]), M = k.length > 0 ? (k.reduce((e, t) => e + t.rating, 0) / k.length).toFixed(1) : "0.0", N = k.reduce((e, t) => e + t.reviews, 0), P = k.length > 0 ? Math.min(...k.map((e) => e.price)) : 0, F = Number(M) >= 4.5 && N > 0;
14
- return D ? /* @__PURE__ */ f("div", {
15
- className: "space-y-6 p-6",
16
- children: [
17
- /* @__PURE__ */ f("div", {
18
- className: "flex items-start gap-6",
19
- children: [/* @__PURE__ */ d("div", {
20
- 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",
21
- children: C(O)
22
- }), /* @__PURE__ */ f("div", {
23
- className: "flex-1 space-y-2",
24
- children: [
25
- /* @__PURE__ */ f("div", {
26
- className: "flex items-center gap-3",
27
- children: [/* @__PURE__ */ d("h1", {
28
- className: "text-2xl font-semibold",
29
- children: /* @__PURE__ */ d(b, { children: O })
30
- }), F ? /* @__PURE__ */ d(p, { children: "Top Rated" }) : null]
31
- }),
32
- /* @__PURE__ */ d("p", {
33
- className: "text-sm text-text-secondary",
34
- children: j.length > 0 ? `Provider · ${j.join(", ")}` : "Marketplace provider"
35
- }),
36
- /* @__PURE__ */ d(S, {
37
- className: "mt-1",
38
- children: "Review a freelancer's full profile — skills, listed services, and ratings — to decide if they're the right fit before you hire."
39
- }),
40
- /* @__PURE__ */ f("div", {
41
- className: "flex flex-wrap items-center gap-4 text-xs text-text-secondary",
42
- children: [/* @__PURE__ */ d(n, {
43
- value: Number(M),
44
- count: N,
45
- showValue: !0,
46
- size: 14
47
- }), /* @__PURE__ */ f("span", {
48
- className: "flex items-center gap-1",
49
- children: [
50
- /* @__PURE__ */ d(a, { className: "h-3 w-3" }),
51
- " ",
52
- k.length,
53
- " services"
54
- ]
55
- })]
56
- }),
57
- /* @__PURE__ */ f("div", {
58
- className: "flex gap-2 pt-1",
59
- children: [/* @__PURE__ */ f(m, {
60
- size: "sm",
61
- onClick: () => t("../marketplace/messaging-page"),
62
- children: [/* @__PURE__ */ d(s, { className: "h-3 w-3 mr-1" }), " Message"]
63
- }), /* @__PURE__ */ d(m, {
64
- size: "sm",
65
- variant: "outline",
66
- disabled: !0,
67
- title: "Consultation booking is coming soon",
68
- "aria-label": "Book consultation — coming soon",
69
- children: "Book Consultation · Coming soon"
70
- })]
71
- })
72
- ]
73
- })]
74
- }),
75
- /* @__PURE__ */ d("div", {
76
- className: "grid gap-4 md:grid-cols-4",
77
- children: [
78
- {
79
- icon: a,
80
- label: "Services",
81
- value: `${k.length}`,
82
- color: "text-status-info-text"
83
- },
84
- {
85
- icon: c,
86
- label: "Avg Rating",
87
- value: `${M}`,
88
- color: "text-status-warning-text"
89
- },
90
- {
91
- icon: i,
92
- label: "Total Reviews",
93
- value: `${N}`,
94
- color: "text-status-success-text"
95
- },
96
- {
97
- icon: o,
98
- label: "Starting Rate",
99
- value: `$${P.toLocaleString()}`,
100
- color: "text-action-primary-bg"
101
- }
102
- ].map((e) => /* @__PURE__ */ d(h, { children: /* @__PURE__ */ f(g, {
103
- className: "flex items-center gap-3 pt-6",
104
- children: [/* @__PURE__ */ d(e.icon, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("p", {
105
- className: "text-xs text-text-secondary",
106
- children: e.label
107
- }), /* @__PURE__ */ d("p", {
108
- className: "text-lg font-bold",
109
- children: e.value
110
- })] })]
111
- }) }, e.label))
112
- }),
113
- /* @__PURE__ */ f("div", {
114
- className: "grid gap-6 lg:grid-cols-3",
115
- children: [/* @__PURE__ */ f("div", {
116
- className: "lg:col-span-2 space-y-6",
117
- children: [/* @__PURE__ */ f(y, { children: [/* @__PURE__ */ d("div", {
118
- className: "mb-2 text-base font-semibold",
119
- children: "Overview"
120
- }), /* @__PURE__ */ f("p", {
121
- className: "text-sm text-text-secondary",
122
- children: [
123
- O,
124
- " offers ",
125
- k.length,
126
- " ",
127
- k.length === 1 ? "service" : "services",
128
- " on the marketplace",
129
- j.length > 0 ? ` across ${j.join(", ")}` : "",
130
- ", with an average rating of ",
131
- M,
132
- " from ",
133
- N,
134
- " reviews."
135
- ]
136
- })] }), /* @__PURE__ */ f(h, { children: [/* @__PURE__ */ d(_, { children: /* @__PURE__ */ d(v, {
137
- className: "text-base",
138
- children: "Listed Services"
139
- }) }), /* @__PURE__ */ d(g, {
140
- className: "space-y-4",
141
- children: k.map((e) => /* @__PURE__ */ f("button", {
142
- type: "button",
143
- onClick: () => t(`../marketplace/service-details-page?id=${e.id}`),
144
- className: "w-full rounded-lg border p-4 space-y-2 text-left hover:bg-bg-sunken/50 focus:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-bg",
145
- children: [
146
- /* @__PURE__ */ f("div", {
147
- className: "flex items-center justify-between",
148
- children: [/* @__PURE__ */ d("p", {
149
- className: "font-medium text-sm",
150
- children: e.title
151
- }), /* @__PURE__ */ d(p, {
152
- variant: "secondary",
153
- className: "text-[10px]",
154
- children: e.deliveryTime
155
- })]
156
- }),
157
- /* @__PURE__ */ d("p", {
158
- className: "text-xs text-text-secondary",
159
- children: e.description
160
- }),
161
- /* @__PURE__ */ f("div", {
162
- className: "flex items-center gap-3 text-xs",
163
- children: [/* @__PURE__ */ f("span", {
164
- className: "font-medium",
165
- children: [
166
- "$",
167
- e.price.toLocaleString(),
168
- "/",
169
- e.priceType
170
- ]
171
- }), /* @__PURE__ */ d(n, {
172
- value: e.rating,
173
- count: e.reviews,
174
- size: 12
175
- })]
176
- })
177
- ]
178
- }, e.id))
179
- })] })]
180
- }), /* @__PURE__ */ f("div", {
181
- className: "space-y-4",
182
- children: [/* @__PURE__ */ f(h, { children: [/* @__PURE__ */ d(_, { children: /* @__PURE__ */ d(v, {
183
- className: "text-sm",
184
- children: "Skills & Expertise"
185
- }) }), /* @__PURE__ */ d(g, {
186
- className: "flex flex-wrap gap-1.5",
187
- children: A.length > 0 ? A.map((e) => /* @__PURE__ */ d(p, {
188
- variant: "secondary",
189
- className: "text-xs",
190
- children: e
191
- }, e)) : /* @__PURE__ */ d("p", {
192
- className: "text-xs text-text-secondary",
193
- children: "No skills listed yet."
194
- })
195
- })] }), /* @__PURE__ */ f(h, { children: [/* @__PURE__ */ d(_, { children: /* @__PURE__ */ d(v, {
196
- className: "text-sm",
197
- children: "Service Categories"
198
- }) }), /* @__PURE__ */ d(g, {
199
- className: "flex flex-wrap gap-1.5",
200
- children: j.length > 0 ? j.map((e) => /* @__PURE__ */ d(p, {
201
- variant: "outline",
202
- className: "text-xs",
203
- children: e
204
- }, e)) : /* @__PURE__ */ d("p", {
205
- className: "text-xs text-text-secondary",
206
- children: "No categories listed yet."
207
- })
208
- })] })]
209
- })]
210
- })
211
- ]
212
- }) : /* @__PURE__ */ d("div", {
213
- className: "p-6",
214
- children: /* @__PURE__ */ d(x, {
215
- illustration: "empty-search",
216
- title: "Provider not found",
217
- description: "This freelancer is no longer available on the marketplace."
218
- })
219
- });
220
- }
221
- //#endregion
222
- export { w as MarketplaceFreelancerProfilePagePage };
223
-
224
- //# sourceMappingURL=MarketplaceFreelancerProfilePagePage.js.map