@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,258 +1,217 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useTr as t } from "../../shared/hooks/useTr.js";
3
- import { getInitials as n } from "../components/viz/lib/format.js";
4
- import { RatingStars as r } from "../components/viz/RatingStars.js";
5
- import { SegmentedTabs as i } from "../components/viz/SegmentedTabs.js";
3
+ import { StatCard as n } from "../components/viz/StatCard.js";
4
+ import { AvatarStack as r } from "../components/viz/AvatarStack.js";
6
5
  import "../components/viz/index.js";
7
- import { useEffect as a, useMemo as o, useState as s } from "react";
8
- import { CheckCircle2 as c, Clock3 as l, PauseCircle as u, Search as d, ShoppingBag as f, Star as p, Users as m } from "lucide-react";
9
- import { useNavigate as h } from "react-router";
10
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
11
- import { Button as v, CardContent as y, CardHeader as b, CardTitle as x, GlassCard as S, GradientText as C, IllustratedEmptyState as w, Input as T, PagePurpose as E, Pagination as D } from "@burdenoff/fe-libs/ui";
12
- import { usePagination as O } from "@burdenoff/fe-libs/shared/hooks";
6
+ import { InlineError as i } from "../components/InlineError.js";
7
+ import { useEnsureLoaded as a } from "../lib/useEnsureLoaded.js";
8
+ import { MarketplaceTabs as o } from "../components/marketplace/MarketplaceTabs.js";
9
+ import { formatRate as s } from "../lib/marketplace.js";
10
+ import { BookServiceModal as c } from "../components/marketplace/BookServiceModal.js";
11
+ import { ServiceListingModal as ee } from "../components/marketplace/ServiceListingModal.js";
12
+ import { useMemo as l, useState as u } from "react";
13
+ import { Plus as d, Search as f } from "lucide-react";
14
+ import { useNavigate as p } from "react-router";
15
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
16
+ import { Badge as g, Button as _, CardContent as v, CardHeader as y, CardTitle as b, GlassCard as te, GradientText as ne, IllustratedEmptyState as x, Input as re, PagePurpose as ie, Pagination as ae, Select as oe, SelectContent as se, SelectItem as S, SelectTrigger as C, SelectValue as w, Spinner as T } from "@burdenoff/fe-libs/ui";
17
+ import { usePagination as E } from "@burdenoff/fe-libs/shared/hooks";
13
18
  //#region src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx
14
- function k(e) {
15
- switch (e) {
16
- case "active": return {
17
- label: "Available",
18
- icon: c,
19
- className: "bg-status-success-bg text-status-success-text"
20
- };
21
- case "pending": return {
22
- label: "Pending",
23
- icon: l,
24
- className: "bg-status-warning-bg text-status-warning-text"
25
- };
26
- default: return {
27
- label: "Unavailable",
28
- icon: u,
29
- className: "bg-bg-sunken text-text-secondary"
30
- };
31
- }
32
- }
33
- function A() {
34
- let c = t(), u = h(), { marketplaceServices: A } = e(), { page: j, pageSize: M, offset: N, setPage: P } = O({ initialPageSize: 9 }), [F, I] = s(""), [L, R] = s("all"), z = o(() => {
35
- let e = /* @__PURE__ */ new Map();
36
- for (let t of A) e.set(t.category, (e.get(t.category) ?? 0) + 1);
37
- let t = [{
38
- id: "all",
39
- label: "All",
40
- count: A.length
41
- }];
42
- for (let [n, r] of [...e.entries()].sort((e, t) => e[0].localeCompare(t[0]))) t.push({
43
- id: n,
44
- label: n,
45
- count: r
46
- });
47
- return t;
48
- }, [A]), B = o(() => {
49
- let e = F.trim().toLowerCase();
50
- return A.filter((t) => L !== "all" && t.category !== L ? !1 : e ? `${t.title} ${t.provider} ${t.category} ${t.skills.join(" ")}`.toLowerCase().includes(e) : !0);
51
- }, [
52
- A,
53
- F,
54
- L
55
- ]);
56
- a(() => {
57
- P(1);
58
- }, [
59
- F,
60
- L,
61
- P
62
- ]);
63
- let V = A.length > 0 ? (A.reduce((e, t) => e + t.rating, 0) / A.length).toFixed(1) : "0.0", H = A.reduce((e, t) => e + t.reviews, 0), U = B.slice(N, N + M), W = (e) => u(`../marketplace/service-details-page?id=${e}`);
64
- return /* @__PURE__ */ _("div", {
19
+ function D() {
20
+ let D = p(), O = t(), { serviceListings: k, bookings: A, marketplaceLoaded: j, fetchMarketplace: M, initParams: N } = e(), P = a(j, M), [F, I] = u(""), [L, ce] = u("all"), [R, z] = u(null), [B, V] = u(!1), [H, U] = u(null), { page: W, pageSize: G, offset: K, setPage: q } = E({ initialPageSize: 12 }), J = k.filter((e) => e.status === "active"), le = l(() => [...new Set(J.map((e) => e.category).filter((e) => !!e))].sort(), [J]), Y = new Set(J.map((e) => e.providerActorId)).size, ue = A.filter((e) => e.status === "requested" || e.status === "confirmed").length, X = F.trim().toLowerCase(), Z = J.filter((e) => (L === "all" || e.category === L) && (X === "" || `${e.title} ${e.description} ${e.providerName} ${e.category ?? ""}`.toLowerCase().includes(X))), Q = Z.slice(K, K + G), $ = (e) => D(`../marketplace/service-details-page?id=${encodeURIComponent(e.id)}`);
21
+ return /* @__PURE__ */ h("div", {
65
22
  className: "space-y-6 p-6",
66
23
  children: [
67
- /* @__PURE__ */ _("div", { children: [
68
- /* @__PURE__ */ g("h1", {
69
- className: "text-2xl font-semibold",
70
- children: /* @__PURE__ */ g(C, { children: c("crewfoundry.marketplace.title", "Talent Marketplace") })
71
- }),
72
- /* @__PURE__ */ g("p", {
73
- className: "text-sm text-text-secondary",
74
- children: c("crewfoundry.marketplace.subtitle", "Book vetted specialists and services")
75
- }),
76
- /* @__PURE__ */ g(E, {
77
- className: "mt-1",
78
- children: "Discover freelancers and services for your projects — search, filter by category, and hire the right talent on demand."
79
- })
80
- ] }),
81
- /* @__PURE__ */ _("div", {
82
- className: "grid gap-4 md:grid-cols-3",
24
+ /* @__PURE__ */ h("div", {
25
+ className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
26
+ children: [/* @__PURE__ */ h("div", { children: [
27
+ /* @__PURE__ */ m("h1", {
28
+ className: "text-2xl font-semibold",
29
+ children: /* @__PURE__ */ m(ne, { children: O("crewfoundry.marketplace.title", "Talent Marketplace") })
30
+ }),
31
+ /* @__PURE__ */ h("p", {
32
+ className: "text-sm text-text-secondary",
33
+ children: [
34
+ J.length,
35
+ " services from ",
36
+ Y,
37
+ " providers"
38
+ ]
39
+ }),
40
+ /* @__PURE__ */ m(ie, {
41
+ className: "mt-1",
42
+ children: "Find in-house experts and contractors offering services to your workspace, book them for a piece of work, and track each booking through to completion."
43
+ })
44
+ ] }), /* @__PURE__ */ h(_, {
45
+ size: "sm",
46
+ onClick: () => V(!0),
47
+ children: [/* @__PURE__ */ m(d, { className: "mr-1 h-4 w-4" }), "Publish a service"]
48
+ })]
49
+ }),
50
+ /* @__PURE__ */ m(o, { value: "browse" }),
51
+ /* @__PURE__ */ m(i, { message: P }),
52
+ H && /* @__PURE__ */ m("div", {
53
+ role: "status",
54
+ className: "rounded-[var(--radius-card)] border border-border-default bg-status-info-bg p-3 text-sm text-status-info-text",
55
+ children: H
56
+ }),
57
+ /* @__PURE__ */ h("div", {
58
+ className: "grid gap-4 sm:grid-cols-3",
83
59
  children: [
84
- /* @__PURE__ */ _(S, {
85
- treatment: "glass",
86
- glow: !0,
87
- className: "border-border-seam",
88
- children: [/* @__PURE__ */ _(b, {
89
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
90
- children: [/* @__PURE__ */ g(x, {
91
- className: "text-sm font-medium",
92
- children: c("crewfoundry.marketplace.stats.services", "Services")
93
- }), /* @__PURE__ */ g(f, { className: "h-4 w-4 text-text-secondary" })]
94
- }), /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g("div", {
95
- className: "text-2xl font-bold tabular-nums",
96
- children: A.length
97
- }) })]
60
+ /* @__PURE__ */ m(n, {
61
+ label: O("crewfoundry.marketplace.stats.services", "Services"),
62
+ value: J.length
98
63
  }),
99
- /* @__PURE__ */ _(S, {
100
- treatment: "metric",
101
- className: "border-border-seam",
102
- children: [/* @__PURE__ */ _(b, {
103
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
104
- children: [/* @__PURE__ */ g(x, {
105
- className: "text-sm font-medium",
106
- children: c("crewfoundry.marketplace.stats.avgRating", "Avg Rating")
107
- }), /* @__PURE__ */ g(p, { className: "h-4 w-4 text-status-warning-text" })]
108
- }), /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g("div", {
109
- className: "text-2xl font-bold tabular-nums",
110
- children: V
111
- }) })]
64
+ /* @__PURE__ */ m(n, {
65
+ label: "Providers",
66
+ value: Y
112
67
  }),
113
- /* @__PURE__ */ _(S, {
114
- treatment: "metric",
115
- className: "border-border-seam",
116
- children: [/* @__PURE__ */ _(b, {
117
- className: "flex flex-row items-center justify-between space-y-0 pb-2",
118
- children: [/* @__PURE__ */ g(x, {
119
- className: "text-sm font-medium",
120
- children: c("crewfoundry.marketplace.stats.totalReviews", "Total Reviews")
121
- }), /* @__PURE__ */ g(m, { className: "h-4 w-4 text-text-secondary" })]
122
- }), /* @__PURE__ */ g(y, { children: /* @__PURE__ */ g("div", {
123
- className: "text-2xl font-bold tabular-nums",
124
- children: H
125
- }) })]
68
+ /* @__PURE__ */ m(n, {
69
+ label: "Open Bookings",
70
+ value: ue
126
71
  })
127
72
  ]
128
73
  }),
129
- /* @__PURE__ */ _("div", {
130
- className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
131
- children: [/* @__PURE__ */ _("div", {
132
- className: "relative w-full max-w-sm",
133
- children: [/* @__PURE__ */ g(d, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ g(T, {
134
- placeholder: "Search services, providers, skills…",
74
+ /* @__PURE__ */ h("div", {
75
+ className: "flex flex-col gap-2 sm:flex-row sm:items-center",
76
+ children: [/* @__PURE__ */ h("div", {
77
+ className: "relative flex-1",
78
+ children: [/* @__PURE__ */ m(f, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ m(re, {
79
+ placeholder: "Search services or providers...",
135
80
  className: "pl-9",
136
81
  value: F,
137
- onChange: (e) => I(e.target.value),
138
- "aria-label": "Search marketplace services"
82
+ onChange: (e) => {
83
+ I(e.target.value), q(1);
84
+ }
139
85
  })]
140
- }), /* @__PURE__ */ g("div", {
141
- className: "-mx-1 overflow-x-auto px-1 pb-1",
142
- children: /* @__PURE__ */ g(i, {
143
- tabs: z,
144
- value: L,
145
- onChange: R,
146
- "aria-label": "Filter services by category"
147
- })
86
+ }), /* @__PURE__ */ h(oe, {
87
+ value: L,
88
+ onValueChange: (e) => {
89
+ ce(e), q(1);
90
+ },
91
+ children: [/* @__PURE__ */ m(C, {
92
+ className: "w-full sm:w-48",
93
+ "aria-label": "Filter by category",
94
+ children: /* @__PURE__ */ m(w, {})
95
+ }), /* @__PURE__ */ h(se, { children: [/* @__PURE__ */ m(S, {
96
+ value: "all",
97
+ children: "All categories"
98
+ }), le.map((e) => /* @__PURE__ */ m(S, {
99
+ value: e,
100
+ children: e
101
+ }, e))] })]
148
102
  })]
149
103
  }),
150
- U.length === 0 ? /* @__PURE__ */ g(w, {
104
+ !j && !P ? /* @__PURE__ */ m("div", {
105
+ className: "flex min-h-[240px] items-center justify-center",
106
+ children: /* @__PURE__ */ m(T, { size: "lg" })
107
+ }) : J.length === 0 ? /* @__PURE__ */ m(x, {
108
+ illustration: "empty-data",
109
+ title: "No services yet",
110
+ description: "Publish a service so colleagues in this workspace can book you.",
111
+ action: /* @__PURE__ */ h(_, {
112
+ size: "sm",
113
+ onClick: () => V(!0),
114
+ children: [/* @__PURE__ */ m(d, { className: "mr-1 h-4 w-4" }), "Publish a service"]
115
+ })
116
+ }) : Z.length === 0 ? /* @__PURE__ */ m(x, {
151
117
  illustration: "empty-search",
152
- title: "No services found",
153
- description: "Try a different search term or category to find the help you need."
154
- }) : /* @__PURE__ */ g("div", {
118
+ title: "No services match",
119
+ description: "Try a different search term or category."
120
+ }) : /* @__PURE__ */ m("div", {
155
121
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
156
- children: U.map((e) => {
157
- let t = k(e.status), i = t.icon;
158
- return /* @__PURE__ */ g(S, {
122
+ children: Q.map((e) => {
123
+ let t = e.providerActorId === N.actorId;
124
+ return /* @__PURE__ */ h(te, {
159
125
  treatment: "glass",
160
- role: "button",
161
- tabIndex: 0,
162
- "aria-label": `View and book ${e.title} by ${e.provider}`,
163
- onClick: () => W(e.id),
164
- onKeyDown: (t) => {
165
- (t.key === "Enter" || t.key === " ") && (t.preventDefault(), W(e.id));
166
- },
167
- className: "cursor-pointer border-border-seam transition-shadow hover:shadow-elevation-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
168
- children: /* @__PURE__ */ _(y, {
169
- className: "flex h-full flex-col gap-3 p-4",
170
- children: [
171
- /* @__PURE__ */ _("div", {
172
- className: "flex items-start justify-between gap-2",
173
- children: [/* @__PURE__ */ _("div", {
174
- className: "flex items-center gap-2.5",
175
- children: [/* @__PURE__ */ g("span", {
176
- className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-sm font-semibold text-action-primary-text",
177
- "aria-hidden": "true",
178
- children: n(e.provider)
179
- }), /* @__PURE__ */ _("div", {
180
- className: "min-w-0",
181
- children: [/* @__PURE__ */ g("p", {
182
- className: "truncate text-sm font-semibold",
183
- children: e.provider
184
- }), /* @__PURE__ */ g("span", {
185
- className: "inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-[10px] text-text-secondary",
186
- children: e.category
187
- })]
188
- })]
189
- }), /* @__PURE__ */ _("div", {
190
- className: "shrink-0 text-right",
191
- children: [/* @__PURE__ */ _("p", {
192
- className: "text-base font-bold tabular-nums",
193
- children: ["$", e.price.toLocaleString()]
194
- }), /* @__PURE__ */ _("p", {
195
- className: "text-[10px] text-text-secondary",
196
- children: ["/", e.priceType]
197
- })]
198
- })]
199
- }),
200
- /* @__PURE__ */ g("p", {
201
- className: "text-sm font-medium",
126
+ className: "flex flex-col",
127
+ children: [/* @__PURE__ */ m(y, { children: /* @__PURE__ */ h("div", {
128
+ className: "flex items-start justify-between gap-2",
129
+ children: [/* @__PURE__ */ m("button", {
130
+ type: "button",
131
+ className: "min-w-0 text-left",
132
+ onClick: () => $(e),
133
+ children: /* @__PURE__ */ m(b, {
134
+ className: "line-clamp-2 text-base hover:underline",
202
135
  children: e.title
136
+ })
137
+ }), e.category && /* @__PURE__ */ m(g, {
138
+ variant: "outline",
139
+ className: "shrink-0 text-[10px]",
140
+ children: e.category
141
+ })]
142
+ }) }), /* @__PURE__ */ h(v, {
143
+ className: "flex flex-1 flex-col gap-3",
144
+ children: [
145
+ /* @__PURE__ */ h("div", {
146
+ className: "flex items-center gap-2",
147
+ children: [
148
+ /* @__PURE__ */ m(r, {
149
+ people: [{ name: e.providerName }],
150
+ size: 28
151
+ }),
152
+ /* @__PURE__ */ m("span", {
153
+ className: "text-sm",
154
+ children: e.providerName
155
+ }),
156
+ t && /* @__PURE__ */ m(g, {
157
+ variant: "secondary",
158
+ className: "text-[10px]",
159
+ children: "You"
160
+ })
161
+ ]
203
162
  }),
204
- /* @__PURE__ */ _("div", {
205
- className: "flex flex-wrap items-center gap-2",
206
- children: [/* @__PURE__ */ g(r, {
207
- value: e.rating,
208
- count: e.reviews,
209
- showValue: !0,
210
- size: 14
211
- }), /* @__PURE__ */ _("span", {
212
- className: `inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${t.className}`,
213
- children: [/* @__PURE__ */ g(i, { className: "h-3 w-3" }), t.label]
214
- })]
215
- }),
216
- /* @__PURE__ */ g("p", {
217
- className: "line-clamp-2 text-xs text-text-secondary",
163
+ /* @__PURE__ */ m("p", {
164
+ className: "line-clamp-3 text-sm text-text-secondary",
218
165
  children: e.description
219
166
  }),
220
- /* @__PURE__ */ g("div", {
221
- className: "flex flex-wrap gap-1",
222
- children: e.skills.slice(0, 4).map((e) => /* @__PURE__ */ g("span", {
223
- className: "rounded-full bg-bg-sunken px-2 py-0.5 text-[10px] text-text-secondary",
224
- children: e
225
- }, e))
226
- }),
227
- /* @__PURE__ */ g("div", {
228
- className: "mt-auto flex items-center justify-between pt-1 text-[11px] text-text-secondary",
229
- children: /* @__PURE__ */ _("span", {
230
- className: "flex items-center gap-1",
231
- children: [/* @__PURE__ */ g(l, { className: "h-3 w-3" }), e.deliveryTime]
232
- })
233
- }),
234
- /* @__PURE__ */ g(v, {
235
- className: "w-full",
236
- onClick: (t) => {
237
- t.stopPropagation(), W(e.id);
238
- },
239
- children: c("crewfoundry.marketplace.card.book", "View & Book")
167
+ /* @__PURE__ */ h("div", {
168
+ className: "mt-auto flex items-center justify-between border-t border-border-default pt-3",
169
+ children: [/* @__PURE__ */ m("span", {
170
+ className: "text-sm font-semibold tabular-nums",
171
+ children: s(e)
172
+ }), /* @__PURE__ */ h("div", {
173
+ className: "flex gap-2",
174
+ children: [/* @__PURE__ */ m(_, {
175
+ size: "sm",
176
+ variant: "ghost",
177
+ onClick: () => $(e),
178
+ children: "Details"
179
+ }), /* @__PURE__ */ m(_, {
180
+ size: "sm",
181
+ onClick: () => {
182
+ U(null), z(e);
183
+ },
184
+ children: O("crewfoundry.marketplace.card.book", "Book")
185
+ })]
186
+ })]
240
187
  })
241
188
  ]
242
- })
189
+ })]
243
190
  }, e.id);
244
191
  })
245
192
  }),
246
- B.length > M ? /* @__PURE__ */ g(D, {
247
- page: j,
248
- pageSize: M,
249
- totalItems: B.length,
250
- onPageChange: P
251
- }) : null
193
+ Z.length > G && /* @__PURE__ */ m(ae, {
194
+ page: W,
195
+ pageSize: G,
196
+ totalItems: Z.length,
197
+ onPageChange: q
198
+ }),
199
+ /* @__PURE__ */ m(c, {
200
+ listing: R,
201
+ onOpenChange: (e) => {
202
+ e || z(null);
203
+ },
204
+ onBooked: () => U("Booking requested. Track it under Bookings; the provider confirms it there.")
205
+ }),
206
+ /* @__PURE__ */ m(ee, {
207
+ open: B,
208
+ onOpenChange: V,
209
+ listing: null
210
+ })
252
211
  ]
253
212
  });
254
213
  }
255
214
  //#endregion
256
- export { A as MarketplaceMarketplacePagePage };
215
+ export { D as MarketplaceMarketplacePagePage };
257
216
 
258
217
  //# sourceMappingURL=MarketplaceMarketplacePagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceMarketplacePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport {\n Button,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Pagination,\n} from '@burdenoff/fe-libs/ui';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { CheckCircle2, Clock3, PauseCircle, Search, ShoppingBag, Star, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router';\nimport { useCrewFoundryStore, type MarketplaceService } from '../store/crewfoundryStore';\nimport { RatingStars, SegmentedTabs, getInitials, type SegmentedTab } from '../components/viz';\n\n/** Honest availability derived from the real service `status` enum (never \"Booked\"). */\nfunction availabilityOf(status: MarketplaceService['status']): {\n label: string;\n icon: typeof CheckCircle2;\n className: string;\n} {\n switch (status) {\n case 'active':\n return {\n label: 'Available',\n icon: CheckCircle2,\n className: 'bg-status-success-bg text-status-success-text',\n };\n case 'pending':\n return {\n label: 'Pending',\n icon: Clock3,\n className: 'bg-status-warning-bg text-status-warning-text',\n };\n default:\n return {\n label: 'Unavailable',\n icon: PauseCircle,\n className: 'bg-bg-sunken text-text-secondary',\n };\n }\n}\n\nexport function MarketplaceMarketplacePagePage() {\n const tr = useTr();\n const navigate = useNavigate();\n const { marketplaceServices } = useCrewFoundryStore();\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 9 });\n const [search, setSearch] = useState('');\n const [category, setCategory] = useState('all');\n\n const categoryTabs = useMemo<SegmentedTab[]>(() => {\n const counts = new Map<string, number>();\n for (const svc of marketplaceServices) {\n counts.set(svc.category, (counts.get(svc.category) ?? 0) + 1);\n }\n const tabs: SegmentedTab[] = [{ id: 'all', label: 'All', count: marketplaceServices.length }];\n for (const [name, count] of [...counts.entries()].sort((a, b) => a[0].localeCompare(b[0]))) {\n tabs.push({ id: name, label: name, count });\n }\n return tabs;\n }, [marketplaceServices]);\n\n const filtered = useMemo(() => {\n const query = search.trim().toLowerCase();\n return marketplaceServices.filter((svc) => {\n if (category !== 'all' && svc.category !== category) {\n return false;\n }\n if (!query) {\n return true;\n }\n return `${svc.title} ${svc.provider} ${svc.category} ${svc.skills.join(' ')}`\n .toLowerCase()\n .includes(query);\n });\n }, [marketplaceServices, search, category]);\n\n useEffect(() => {\n setPage(1);\n }, [search, category, setPage]);\n\n const avgRating =\n marketplaceServices.length > 0\n ? (\n marketplaceServices.reduce((s, m) => s + m.rating, 0) / marketplaceServices.length\n ).toFixed(1)\n : '0.0';\n const totalReviews = marketplaceServices.reduce((s, m) => s + m.reviews, 0);\n const pagedServices = filtered.slice(offset, offset + pageSize);\n const openService = (id: string) => navigate(`../marketplace/service-details-page?id=${id}`);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{tr('crewfoundry.marketplace.title', 'Talent Marketplace')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {tr('crewfoundry.marketplace.subtitle', 'Book vetted specialists and services')}\n </p>\n <PagePurpose className=\"mt-1\">\n Discover freelancers and services for your projects — search, filter by category, and hire\n the right talent on demand.\n </PagePurpose>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {tr('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 tabular-nums\">{marketplaceServices.length}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {tr('crewfoundry.marketplace.stats.avgRating', 'Avg Rating')}\n </CardTitle>\n <Star className=\"h-4 w-4 text-status-warning-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{avgRating}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {tr('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 tabular-nums\">{totalReviews}</div>\n </CardContent>\n </GlassCard>\n </div>\n\n <div className=\"flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"relative w-full max-w-sm\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search services, providers, skills…\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n aria-label=\"Search marketplace services\"\n />\n </div>\n <div className=\"-mx-1 overflow-x-auto px-1 pb-1\">\n <SegmentedTabs\n tabs={categoryTabs}\n value={category}\n onChange={setCategory}\n aria-label=\"Filter services by category\"\n />\n </div>\n </div>\n\n {pagedServices.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No services found\"\n description=\"Try a different search term or category to find the help you need.\"\n />\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {pagedServices.map((svc) => {\n const availability = availabilityOf(svc.status);\n const AvailabilityIcon = availability.icon;\n return (\n <GlassCard\n key={svc.id}\n treatment=\"glass\"\n role=\"button\"\n tabIndex={0}\n aria-label={`View and book ${svc.title} by ${svc.provider}`}\n onClick={() => openService(svc.id)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openService(svc.id);\n }\n }}\n className=\"cursor-pointer border-border-seam transition-shadow hover:shadow-elevation-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <CardContent className=\"flex h-full flex-col gap-3 p-4\">\n <div className=\"flex items-start justify-between gap-2\">\n <div className=\"flex items-center gap-2.5\">\n <span\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-sm font-semibold text-action-primary-text\"\n aria-hidden=\"true\"\n >\n {getInitials(svc.provider)}\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">{svc.provider}</p>\n <span className=\"inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-[10px] text-text-secondary\">\n {svc.category}\n </span>\n </div>\n </div>\n <div className=\"shrink-0 text-right\">\n <p className=\"text-base font-bold tabular-nums\">\n ${svc.price.toLocaleString()}\n </p>\n <p className=\"text-[10px] text-text-secondary\">/{svc.priceType}</p>\n </div>\n </div>\n\n <p className=\"text-sm font-medium\">{svc.title}</p>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <RatingStars value={svc.rating} count={svc.reviews} showValue size={14} />\n <span\n className={`inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-medium ${availability.className}`}\n >\n <AvailabilityIcon className=\"h-3 w-3\" />\n {availability.label}\n </span>\n </div>\n\n <p className=\"line-clamp-2 text-xs text-text-secondary\">{svc.description}</p>\n\n <div className=\"flex flex-wrap gap-1\">\n {svc.skills.slice(0, 4).map((skill) => (\n <span\n key={skill}\n className=\"rounded-full bg-bg-sunken px-2 py-0.5 text-[10px] text-text-secondary\"\n >\n {skill}\n </span>\n ))}\n </div>\n\n <div className=\"mt-auto flex items-center justify-between pt-1 text-[11px] text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Clock3 className=\"h-3 w-3\" />\n {svc.deliveryTime}\n </span>\n </div>\n\n <Button\n className=\"w-full\"\n onClick={(event) => {\n event.stopPropagation();\n openService(svc.id);\n }}\n >\n {tr('crewfoundry.marketplace.card.book', 'View & Book')}\n </Button>\n </CardContent>\n </GlassCard>\n );\n })}\n </div>\n )}\n\n {filtered.length > pageSize ? (\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={filtered.length}\n onPageChange={setPage}\n />\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarketplaceMarketplacePagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMarketplacePagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Badge,\n Button,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Pagination,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Spinner,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { Plus, Search } from 'lucide-react';\nimport { useNavigate } from 'react-router';\nimport { InlineError } from '../components/InlineError';\nimport { BookServiceModal } from '../components/marketplace/BookServiceModal';\nimport { MarketplaceTabs } from '../components/marketplace/MarketplaceTabs';\nimport { ServiceListingModal } from '../components/marketplace/ServiceListingModal';\nimport { AvatarStack, StatCard } from '../components/viz';\nimport { useCrewFoundryStore, type CrewServiceListing } from '../store/crewfoundryStore';\nimport { formatRate } from '../lib/marketplace';\nimport { useEnsureLoaded } from '../lib/useEnsureLoaded';\nimport { useTr } from '../../shared/hooks/useTr';\n\nexport function MarketplaceMarketplacePagePage() {\n const navigate = useNavigate();\n const tr = useTr();\n const { serviceListings, bookings, marketplaceLoaded, fetchMarketplace, initParams } =\n useCrewFoundryStore();\n const loadError = useEnsureLoaded(marketplaceLoaded, fetchMarketplace);\n const [search, setSearch] = useState('');\n const [category, setCategory] = useState('all');\n const [bookTarget, setBookTarget] = useState<CrewServiceListing | null>(null);\n const [publishOpen, setPublishOpen] = useState(false);\n const [notice, setNotice] = useState<string | null>(null);\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 12 });\n\n const active = serviceListings.filter((listing) => listing.status === 'active');\n const categories = useMemo(\n () =>\n [\n ...new Set(active.map((listing) => listing.category).filter((c): c is string => !!c)),\n ].sort(),\n [active]\n );\n const providers = new Set(active.map((listing) => listing.providerActorId)).size;\n const openBookings = bookings.filter(\n (booking) => booking.status === 'requested' || booking.status === 'confirmed'\n ).length;\n\n const query = search.trim().toLowerCase();\n const filtered = active.filter(\n (listing) =>\n (category === 'all' || listing.category === category) &&\n (query === '' ||\n `${listing.title} ${listing.description} ${listing.providerName} ${listing.category ?? ''}`\n .toLowerCase()\n .includes(query))\n );\n const paged = filtered.slice(offset, offset + pageSize);\n\n const openDetails = (listing: CrewServiceListing) =>\n navigate(`../marketplace/service-details-page?id=${encodeURIComponent(listing.id)}`);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{tr('crewfoundry.marketplace.title', 'Talent Marketplace')}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n {active.length} services from {providers} providers\n </p>\n <PagePurpose className=\"mt-1\">\n Find in-house experts and contractors offering services to your workspace, book them for\n a piece of work, and track each booking through to completion.\n </PagePurpose>\n </div>\n <Button size=\"sm\" onClick={() => setPublishOpen(true)}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Publish a service\n </Button>\n </div>\n\n <MarketplaceTabs value=\"browse\" />\n\n <InlineError message={loadError} />\n {notice && (\n <div\n role=\"status\"\n className=\"rounded-[var(--radius-card)] border border-border-default bg-status-info-bg p-3 text-sm text-status-info-text\"\n >\n {notice}\n </div>\n )}\n\n <div className=\"grid gap-4 sm:grid-cols-3\">\n <StatCard\n label={tr('crewfoundry.marketplace.stats.services', 'Services')}\n value={active.length}\n />\n <StatCard label=\"Providers\" value={providers} />\n <StatCard label=\"Open Bookings\" value={openBookings} />\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary\" />\n <Input\n placeholder=\"Search services or providers...\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => {\n setSearch(event.target.value);\n setPage(1);\n }}\n />\n </div>\n <Select\n value={category}\n onValueChange={(value) => {\n setCategory(value);\n setPage(1);\n }}\n >\n <SelectTrigger className=\"w-full sm:w-48\" aria-label=\"Filter by category\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All categories</SelectItem>\n {categories.map((item) => (\n <SelectItem key={item} value={item}>\n {item}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {!marketplaceLoaded && !loadError ? (\n <div className=\"flex min-h-[240px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n ) : active.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No services yet\"\n description=\"Publish a service so colleagues in this workspace can book you.\"\n action={\n <Button size=\"sm\" onClick={() => setPublishOpen(true)}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Publish a service\n </Button>\n }\n />\n ) : filtered.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No services match\"\n description=\"Try a different search term or category.\"\n />\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {paged.map((listing) => {\n const own = listing.providerActorId === initParams.actorId;\n return (\n <GlassCard key={listing.id} treatment=\"glass\" className=\"flex flex-col\">\n <CardHeader>\n <div className=\"flex items-start justify-between gap-2\">\n <button\n type=\"button\"\n className=\"min-w-0 text-left\"\n onClick={() => openDetails(listing)}\n >\n <CardTitle className=\"line-clamp-2 text-base hover:underline\">\n {listing.title}\n </CardTitle>\n </button>\n {listing.category && (\n <Badge variant=\"outline\" className=\"shrink-0 text-[10px]\">\n {listing.category}\n </Badge>\n )}\n </div>\n </CardHeader>\n <CardContent className=\"flex flex-1 flex-col gap-3\">\n <div className=\"flex items-center gap-2\">\n <AvatarStack people={[{ name: listing.providerName }]} size={28} />\n <span className=\"text-sm\">{listing.providerName}</span>\n {own && (\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n You\n </Badge>\n )}\n </div>\n <p className=\"line-clamp-3 text-sm text-text-secondary\">{listing.description}</p>\n <div className=\"mt-auto flex items-center justify-between border-t border-border-default pt-3\">\n <span className=\"text-sm font-semibold tabular-nums\">\n {formatRate(listing)}\n </span>\n <div className=\"flex gap-2\">\n <Button size=\"sm\" variant=\"ghost\" onClick={() => openDetails(listing)}>\n Details\n </Button>\n <Button\n size=\"sm\"\n onClick={() => {\n setNotice(null);\n setBookTarget(listing);\n }}\n >\n {tr('crewfoundry.marketplace.card.book', 'Book')}\n </Button>\n </div>\n </div>\n </CardContent>\n </GlassCard>\n );\n })}\n </div>\n )}\n {filtered.length > pageSize && (\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={filtered.length}\n onPageChange={setPage}\n />\n )}\n\n <BookServiceModal\n listing={bookTarget}\n onOpenChange={(open) => {\n if (!open) setBookTarget(null);\n }}\n onBooked={() =>\n setNotice('Booking requested. Track it under Bookings; the provider confirms it there.')\n }\n />\n <ServiceListingModal open={publishOpen} onOpenChange={setPublishOpen} listing={null} />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceMyServicesPagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/MarketplaceMyServicesPagePage.tsx"],"names":[],"mappings":"AAiGA,wBAAgB,6BAA6B,gCA4I5C"}
1
+ {"version":3,"file":"MarketplaceMyServicesPagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/MarketplaceMyServicesPagePage.tsx"],"names":[],"mappings":"AA+BA,wBAAgB,6BAA6B,gCAgO5C"}