@burdenoff/microfe-crewfoundry 2026.703.2 → 2026.704.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +117 -164
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +99 -82
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +160 -192
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +238 -231
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +196 -166
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +45 -147
  12. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +20 -11
  14. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +45 -152
  16. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +50 -138
  18. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +149 -67
  20. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +50 -201
  22. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +205 -136
  24. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +25 -31
  26. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +118 -104
  28. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +117 -58
  30. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +90 -94
  32. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +210 -191
  34. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +213 -180
  36. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +133 -264
  38. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  39. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +279 -212
  40. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +131 -105
  42. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +167 -148
  44. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +3 -3
  46. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +13 -5
  48. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +151 -152
  50. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobsPagePage.js +38 -21
  52. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +3 -3
  54. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +134 -127
  56. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +163 -132
  58. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrPayrollPagePage.js +202 -160
  60. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +104 -91
  62. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +29 -147
  64. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +22 -106
  66. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +74 -74
  68. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +101 -97
  70. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +64 -47
  72. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +111 -121
  74. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningPagePage.js +131 -110
  76. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +65 -64
  78. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +58 -43
  80. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +66 -82
  82. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +38 -88
  84. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +59 -65
  86. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +209 -323
  88. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +175 -220
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +74 -59
  92. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +96 -80
  94. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +28 -100
  96. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +27 -20
  98. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +73 -73
  100. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +62 -56
  102. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +40 -138
  104. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +126 -93
  106. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +99 -77
  108. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +73 -74
  110. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +1 -1
  112. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +122 -122
  114. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +130 -113
  116. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +68 -59
  118. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +73 -62
  120. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +82 -58
  122. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +153 -153
  124. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +63 -48
  126. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  127. package/package.json +1 -1
@@ -1,110 +1,38 @@
1
- import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { useMemo as t, useState as n } from "react";
3
- import { Search as r } from "lucide-react";
4
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
- import { CardContent as o, GlassCard as s, GradientText as c, IllustratedEmptyState as l, Input as u, PagePurpose as d } from "@burdenoff/fe-libs/ui";
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ import { CardContent as n, GlassCard as r, GradientText as i, IllustratedEmptyState as a, PagePurpose as o } from "@burdenoff/fe-libs/ui";
6
3
  //#region src/crewfoundry/pages/MarketplaceMessagingPagePage.tsx
7
- var f = (e) => {
8
- let t = new Date(e);
9
- if (Number.isNaN(t.getTime())) return "recently";
10
- let n = Math.max(1, Math.floor((Date.now() - t.getTime()) / (1e3 * 60 * 60)));
11
- return n < 24 ? `${n} hours ago` : `${Math.floor(n / 24)} days ago`;
12
- };
13
- function p() {
14
- let [p, m] = n(""), { marketplaceServices: h, notifications: g, clients: _, vendors: v } = e(), y = t(() => g.slice(0, 20).map((e, t) => {
15
- let n = h[t % Math.max(h.length, 1)], r = _[t % Math.max(_.length, 1)]?.name || v[t % Math.max(v.length, 1)]?.name || "Marketplace Partner";
16
- return {
17
- id: e.id,
18
- from: n?.provider || r,
19
- company: r,
20
- message: e.message,
21
- time: f(e.createdAt),
22
- unread: !e.read
23
- };
24
- }), [
25
- _,
26
- h,
27
- g,
28
- v
29
- ]).filter((e) => `${e.from} ${e.company} ${e.message}`.toLowerCase().includes(p.toLowerCase()));
30
- return /* @__PURE__ */ a("div", {
4
+ function s() {
5
+ return /* @__PURE__ */ t("div", {
31
6
  className: "space-y-6 p-6",
32
- children: [
33
- /* @__PURE__ */ a("div", { children: [
34
- /* @__PURE__ */ i("h1", {
35
- className: "text-2xl font-semibold",
36
- children: /* @__PURE__ */ i(c, { children: "Service Messages" })
37
- }),
38
- /* @__PURE__ */ i("p", {
39
- className: "text-sm text-text-secondary",
40
- children: "Communication with service providers"
41
- }),
42
- /* @__PURE__ */ i(d, {
43
- className: "mt-1",
44
- children: "Message freelancers and clients about your engagements — keep all marketplace conversations in one organized inbox."
45
- })
46
- ] }),
47
- /* @__PURE__ */ a("div", {
48
- className: "relative max-w-sm",
49
- children: [/* @__PURE__ */ i(r, { className: "absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-text-secondary" }), /* @__PURE__ */ i(u, {
50
- placeholder: "Search messages...",
51
- className: "pl-9",
52
- value: p,
53
- onChange: (e) => m(e.target.value)
54
- })]
7
+ children: [/* @__PURE__ */ t("div", { children: [
8
+ /* @__PURE__ */ e("h1", {
9
+ className: "text-2xl font-semibold",
10
+ children: /* @__PURE__ */ e(i, { children: "Service Messages" })
11
+ }),
12
+ /* @__PURE__ */ e("p", {
13
+ className: "text-sm text-text-secondary",
14
+ children: "Communication with service providers"
55
15
  }),
56
- /* @__PURE__ */ i(s, {
57
- treatment: "glass",
58
- glow: !0,
59
- className: "border-border-seam",
60
- children: /* @__PURE__ */ i(o, {
61
- className: "p-0",
62
- children: y.length === 0 ? /* @__PURE__ */ i("div", {
63
- className: "p-6",
64
- children: /* @__PURE__ */ i(l, {
65
- illustration: "empty-notifications",
66
- title: "No messages",
67
- description: "Conversations with providers and clients will appear here."
68
- })
69
- }) : y.map((e) => /* @__PURE__ */ a("div", {
70
- className: `flex cursor-pointer items-center gap-3 border-b p-4 last:border-0 hover:bg-bg-sunken/50 ${e.unread ? "bg-status-info-bg/30" : ""}`,
71
- children: [
72
- /* @__PURE__ */ i("div", {
73
- className: "flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-action-primary-bg/10 text-sm font-bold",
74
- children: e.from.split(" ").map((e) => e[0]).join("")
75
- }),
76
- /* @__PURE__ */ a("div", {
77
- className: "min-w-0 flex-1",
78
- children: [
79
- /* @__PURE__ */ a("div", {
80
- className: "flex items-center justify-between",
81
- children: [/* @__PURE__ */ i("p", {
82
- className: `text-sm ${e.unread ? "font-bold" : "font-medium"}`,
83
- children: e.from
84
- }), /* @__PURE__ */ i("span", {
85
- className: "text-xs text-text-secondary",
86
- children: e.time
87
- })]
88
- }),
89
- /* @__PURE__ */ i("p", {
90
- className: "text-xs text-text-secondary",
91
- children: e.company
92
- }),
93
- /* @__PURE__ */ i("p", {
94
- className: "mt-0.5 truncate text-xs text-text-secondary",
95
- children: e.message
96
- })
97
- ]
98
- }),
99
- e.unread ? /* @__PURE__ */ i("div", { className: "h-2 w-2 flex-shrink-0 rounded-full bg-status-info-text" }) : null
100
- ]
101
- }, e.id))
16
+ /* @__PURE__ */ e(o, {
17
+ className: "mt-1",
18
+ children: "Message freelancers and clients about your engagements — keep all marketplace conversations in one organized inbox."
19
+ })
20
+ ] }), /* @__PURE__ */ e(r, {
21
+ treatment: "glass",
22
+ glow: !0,
23
+ className: "border-border-seam",
24
+ children: /* @__PURE__ */ e(n, {
25
+ className: "p-6",
26
+ children: /* @__PURE__ */ e(a, {
27
+ illustration: "empty-notifications",
28
+ title: "Direct messaging is coming soon",
29
+ description: "Conversations with providers and clients will appear here once marketplace messaging ships."
102
30
  })
103
31
  })
104
- ]
32
+ })]
105
33
  });
106
34
  }
107
35
  //#endregion
108
- export { p as MarketplaceMessagingPagePage };
36
+ export { s as MarketplaceMessagingPagePage };
109
37
 
110
38
  //# sourceMappingURL=MarketplaceMessagingPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceMessagingPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMessagingPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n CardContent,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { Search } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype ServiceMessage = {\n id: string;\n from: string;\n company: string;\n message: string;\n time: string;\n unread: boolean;\n};\n\nconst timeAgo = (value: string): string => {\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return 'recently';\n }\n const hours = Math.max(1, Math.floor((Date.now() - parsed.getTime()) / (1000 * 60 * 60)));\n return hours < 24 ? `${hours} hours ago` : `${Math.floor(hours / 24)} days ago`;\n};\n\nexport function MarketplaceMessagingPagePage() {\n const [search, setSearch] = useState('');\n const { marketplaceServices, notifications, clients, vendors } = useCrewFoundryStore();\n\n const serviceMessages = useMemo<ServiceMessage[]>(() => {\n return notifications.slice(0, 20).map((notification, index) => {\n const service = marketplaceServices[index % Math.max(marketplaceServices.length, 1)];\n const counterparty =\n clients[index % Math.max(clients.length, 1)]?.name ||\n vendors[index % Math.max(vendors.length, 1)]?.name ||\n 'Marketplace Partner';\n\n return {\n id: notification.id,\n from: service?.provider || counterparty,\n company: counterparty,\n message: notification.message,\n time: timeAgo(notification.createdAt),\n unread: !notification.read,\n };\n });\n }, [clients, marketplaceServices, notifications, vendors]);\n\n const filtered = serviceMessages.filter((message) =>\n `${message.from} ${message.company} ${message.message}`\n .toLowerCase()\n .includes(search.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Service Messages</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Communication with service providers</p>\n <PagePurpose className=\"mt-1\">Message freelancers and clients about your engagements — keep all marketplace conversations in one organized inbox.</PagePurpose>\n </div>\n\n <div className=\"relative max-w-sm\">\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 messages...\"\n className=\"pl-9\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </div>\n\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-0\">\n {filtered.length === 0 ? (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-notifications\"\n title=\"No messages\"\n description=\"Conversations with providers and clients will appear here.\"\n />\n </div>\n ) : (\n filtered.map((message) => (\n <div\n key={message.id}\n className={`flex cursor-pointer items-center gap-3 border-b p-4 last:border-0 hover:bg-bg-sunken/50 ${message.unread ? 'bg-status-info-bg/30' : ''}`}\n >\n <div className=\"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-action-primary-bg/10 text-sm font-bold\">\n {message.from\n .split(' ')\n .map((part) => part[0])\n .join('')}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between\">\n <p className={`text-sm ${message.unread ? 'font-bold' : 'font-medium'}`}>\n {message.from}\n </p>\n <span className=\"text-xs text-text-secondary\">{message.time}</span>\n </div>\n <p className=\"text-xs text-text-secondary\">{message.company}</p>\n <p className=\"mt-0.5 truncate text-xs text-text-secondary\">{message.message}</p>\n </div>\n {message.unread ? (\n <div className=\"h-2 w-2 flex-shrink-0 rounded-full bg-status-info-text\" />\n ) : null}\n </div>\n ))\n )}\n </CardContent>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":";;;;;;AAqBA,IAAM,KAAW,MAA0B;CACzC,IAAM,IAAS,IAAI,KAAK,EAAM;AAC9B,KAAI,OAAO,MAAM,EAAO,SAAS,CAAC,CAChC,QAAO;CAET,IAAM,IAAQ,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK,KAAK,GAAG,EAAO,SAAS,KAAK,MAAO,KAAK,IAAI,CAAC;AACzF,QAAO,IAAQ,KAAK,GAAG,EAAM,cAAc,GAAG,KAAK,MAAM,IAAQ,GAAG,CAAC;;AAGvE,SAAgB,IAA+B;CAC7C,IAAM,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,EAAE,wBAAqB,kBAAe,YAAS,eAAY,GAAqB,EAqBhF,IAnBkB,QACf,EAAc,MAAM,GAAG,GAAG,CAAC,KAAK,GAAc,MAAU;EAC7D,IAAM,IAAU,EAAoB,IAAQ,KAAK,IAAI,EAAoB,QAAQ,EAAE,GAC7E,IACJ,EAAQ,IAAQ,KAAK,IAAI,EAAQ,QAAQ,EAAE,GAAG,QAC9C,EAAQ,IAAQ,KAAK,IAAI,EAAQ,QAAQ,EAAE,GAAG,QAC9C;AAEF,SAAO;GACL,IAAI,EAAa;GACjB,MAAM,GAAS,YAAY;GAC3B,SAAS;GACT,SAAS,EAAa;GACtB,MAAM,EAAQ,EAAa,UAAU;GACrC,QAAQ,CAAC,EAAa;GACvB;GACD,EACD;EAAC;EAAS;EAAqB;EAAe;EAAQ,CAAC,CAEzB,QAAQ,MACvC,GAAG,EAAQ,KAAK,GAAG,EAAQ,QAAQ,GAAG,EAAQ,UAC3C,aAAa,CACb,SAAS,EAAO,aAAa,CAAC,CAClC;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAc,oBAA+B,CAAA;KAC1C,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eAA8B;KAAwC,CAAA;IACnF,kBAAC,GAAD;KAAa,WAAU;eAAO;KAAiI,CAAA;IAC3J,EAAA,CAAA;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,wEAAyE,CAAA,EAC3F,kBAAC,GAAD;KACE,aAAY;KACZ,WAAU;KACV,OAAO;KACP,WAAW,MAAU,EAAU,EAAM,OAAO,MAAM;KAClD,CAAA,CACE;;GAEN,kBAAC,GAAD;IAAW,WAAU;IAAQ,MAAA;IAAK,WAAU;cAC1C,kBAAC,GAAD;KAAa,WAAU;eACpB,EAAS,WAAW,IACnB,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACE,cAAa;OACb,OAAM;OACN,aAAY;OACZ,CAAA;MACE,CAAA,GAEN,EAAS,KAAK,MACd,kBAAC,OAAD;MAEE,WAAW,2FAA2F,EAAQ,SAAS,yBAAyB;gBAFlJ;OAIE,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAQ,KACN,MAAM,IAAI,CACV,KAAK,MAAS,EAAK,GAAG,CACtB,KAAK,GAAG;QACP,CAAA;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,KAAD;WAAG,WAAW,WAAW,EAAQ,SAAS,cAAc;qBACrD,EAAQ;WACP,CAAA,EACJ,kBAAC,QAAD;WAAM,WAAU;qBAA+B,EAAQ;WAAY,CAAA,CAC/D;;SACN,kBAAC,KAAD;UAAG,WAAU;oBAA+B,EAAQ;UAAY,CAAA;SAChE,kBAAC,KAAD;UAAG,WAAU;oBAA+C,EAAQ;UAAY,CAAA;SAC5E;;OACL,EAAQ,SACP,kBAAC,OAAD,EAAK,WAAU,0DAA2D,CAAA,GACxE;OACA;QAtBC,EAAQ,GAsBT,CACJ;KAEQ,CAAA;IACJ,CAAA;GACR"}
1
+ {"version":3,"file":"MarketplaceMessagingPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMessagingPagePage.tsx"],"sourcesContent":["import {\n CardContent,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\n\nexport function MarketplaceMessagingPagePage() {\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Service Messages</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Communication with service providers</p>\n <PagePurpose className=\"mt-1\">Message freelancers and clients about your engagements — keep all marketplace conversations in one organized inbox.</PagePurpose>\n </div>\n\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-6\">\n {/* Direct marketplace messaging has no backend yet. We show an honest\n coming-soon empty state rather than synthesizing message threads\n from unrelated notification data. */}\n <IllustratedEmptyState\n illustration=\"empty-notifications\"\n title=\"Direct messaging is coming soon\"\n description=\"Conversations with providers and clients will appear here once marketplace messaging ships.\"\n />\n </CardContent>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":";;;AAQA,SAAgB,IAA+B;AAC7C,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA;GACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,oBAA+B,CAAA;IAC1C,CAAA;GACL,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAwC,CAAA;GACnF,kBAAC,GAAD;IAAa,WAAU;cAAO;IAAiI,CAAA;GAC3J,EAAA,CAAA,EAEN,kBAAC,GAAD;GAAW,WAAU;GAAQ,MAAA;GAAK,WAAU;aAC1C,kBAAC,GAAD;IAAa,WAAU;cAIrB,kBAAC,GAAD;KACE,cAAa;KACb,OAAM;KACN,aAAY;KACZ,CAAA;IACU,CAAA;GACJ,CAAA,CACR"}
@@ -3,9 +3,10 @@ import { FormModal as t, useFormModal as n } from "../components/forms/FormModal
3
3
  import { Eye as r, Pencil as i, Plus as a, Star as o, Trash2 as s } from "lucide-react";
4
4
  import { useNavigate as c } from "react-router-dom";
5
5
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
- import { AlertDialog as d, AlertDialogAction as f, AlertDialogCancel as p, AlertDialogContent as m, AlertDialogDescription as h, AlertDialogFooter as g, AlertDialogHeader as _, AlertDialogTitle as v, AlertDialogTrigger as y, Badge as b, Button as x, CardContent as S, CardHeader as C, CardTitle as w, GlassCard as T, GradientText as E, IllustratedEmptyState as D, PagePurpose as O } from "@burdenoff/fe-libs/ui";
6
+ import { AlertDialog as d, AlertDialogAction as f, AlertDialogCancel as p, AlertDialogContent as m, AlertDialogDescription as h, AlertDialogFooter as g, AlertDialogHeader as _, AlertDialogTitle as v, AlertDialogTrigger as y, Badge as b, Button as x, CardContent as S, CardHeader as C, CardTitle as w, GlassCard as T, GradientText as E, IllustratedEmptyState as D, PagePurpose as O, Pagination as k } from "@burdenoff/fe-libs/ui";
7
+ import { usePagination as A } from "@burdenoff/fe-libs/shared/hooks";
7
8
  //#region src/crewfoundry/pages/MarketplaceMyServicesPagePage.tsx
8
- var k = [
9
+ var j = [
9
10
  {
10
11
  name: "title",
11
12
  label: "Service title",
@@ -90,7 +91,7 @@ var k = [
90
91
  type: "tags",
91
92
  colSpan: 2
92
93
  }
93
- ], A = (e) => ({
94
+ ], M = (e) => ({
94
95
  title: e.title,
95
96
  provider: e.provider,
96
97
  category: e.category,
@@ -100,7 +101,7 @@ var k = [
100
101
  status: e.status,
101
102
  description: e.description,
102
103
  skills: e.skills
103
- }), j = (e, t) => ({
104
+ }), N = (e, t) => ({
104
105
  id: t?.id ?? crypto.randomUUID(),
105
106
  title: String(e.title ?? ""),
106
107
  provider: String(e.provider ?? ""),
@@ -114,8 +115,8 @@ var k = [
114
115
  status: e.status || "active",
115
116
  skills: Array.isArray(e.skills) ? e.skills : []
116
117
  });
117
- function M() {
118
- let M = c(), { marketplaceServices: N, addMarketplaceService: P, updateMarketplaceService: F, removeMarketplaceService: I } = e(), L = n(), R = N.slice(0, 3);
118
+ function P() {
119
+ let P = c(), { marketplaceServices: F, addMarketplaceService: I, updateMarketplaceService: L, removeMarketplaceService: R } = e(), z = n(), { page: B, pageSize: V, offset: H, setPage: U } = A({ initialPageSize: 9 }), W = F.slice(H, H + V);
119
120
  return /* @__PURE__ */ u("div", {
120
121
  className: "space-y-6 p-6",
121
122
  children: [
@@ -136,20 +137,20 @@ function M() {
136
137
  })
137
138
  ] }), /* @__PURE__ */ u(x, {
138
139
  size: "sm",
139
- onClick: () => L.openModal(),
140
+ onClick: () => z.openModal(),
140
141
  children: [/* @__PURE__ */ l(a, { className: "h-4 w-4 mr-1" }), "Create Service"]
141
142
  })]
142
143
  }),
143
144
  /* @__PURE__ */ l("div", {
144
145
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
145
- children: R.length === 0 ? /* @__PURE__ */ l("div", {
146
+ children: F.length === 0 ? /* @__PURE__ */ l("div", {
146
147
  className: "col-span-full",
147
148
  children: /* @__PURE__ */ l(D, {
148
149
  illustration: "empty-generic",
149
150
  title: "No services listed",
150
151
  description: "List a service to start winning work on the marketplace."
151
152
  })
152
- }) : R.map((e, t) => /* @__PURE__ */ u(T, {
153
+ }) : W.map((e, t) => /* @__PURE__ */ u(T, {
153
154
  treatment: t === 0 ? "glass" : "plain",
154
155
  glow: t === 0,
155
156
  children: [/* @__PURE__ */ l(C, { children: /* @__PURE__ */ u("div", {
@@ -195,13 +196,13 @@ function M() {
195
196
  variant: "outline",
196
197
  size: "sm",
197
198
  className: "flex-1",
198
- onClick: () => L.openModal(e),
199
+ onClick: () => z.openModal(e),
199
200
  children: [/* @__PURE__ */ l(i, { className: "h-3.5 w-3.5 mr-1" }), "Edit"]
200
201
  }),
201
202
  /* @__PURE__ */ u(x, {
202
203
  size: "sm",
203
204
  className: "flex-1",
204
- onClick: () => M("../../marketplace/service-details-page"),
205
+ onClick: () => P(`../../marketplace/service-details-page?id=${e.id}`),
205
206
  children: [/* @__PURE__ */ l(r, { className: "h-3.5 w-3.5 mr-1" }), "View"]
206
207
  }),
207
208
  /* @__PURE__ */ u(d, { children: [/* @__PURE__ */ l(y, {
@@ -217,7 +218,7 @@ function M() {
217
218
  e.title,
218
219
  "” from your marketplace listings. This action cannot be undone."
219
220
  ] })] }), /* @__PURE__ */ u(g, { children: [/* @__PURE__ */ l(p, { children: "Cancel" }), /* @__PURE__ */ l(f, {
220
- onClick: () => void I(e.id),
221
+ onClick: () => void R(e.id),
221
222
  children: "Delete"
222
223
  })] })] })] })
223
224
  ]
@@ -225,22 +226,28 @@ function M() {
225
226
  ] })]
226
227
  }, e.id))
227
228
  }),
229
+ F.length > 0 ? /* @__PURE__ */ l(k, {
230
+ page: B,
231
+ pageSize: V,
232
+ totalItems: F.length,
233
+ onPageChange: U
234
+ }) : null,
228
235
  /* @__PURE__ */ l(t, {
229
- open: L.open,
230
- onOpenChange: L.onOpenChange,
231
- title: L.context ? "Edit service" : "Create service",
236
+ open: z.open,
237
+ onOpenChange: z.onOpenChange,
238
+ title: z.context ? "Edit service" : "Create service",
232
239
  description: "Describe the service you offer clients on the marketplace.",
233
- fields: k,
234
- initialValues: L.context ? A(L.context) : void 0,
235
- submitLabel: L.context ? "Save changes" : "Create service",
240
+ fields: j,
241
+ initialValues: z.context ? M(z.context) : void 0,
242
+ submitLabel: z.context ? "Save changes" : "Create service",
236
243
  onSubmit: async (e) => {
237
- L.context ? await F(L.context.id, j(e, L.context)) : await P(j(e));
244
+ z.context ? await L(z.context.id, N(e, z.context)) : await I(N(e));
238
245
  }
239
246
  })
240
247
  ]
241
248
  });
242
249
  }
243
250
  //#endregion
244
- export { M as MarketplaceMyServicesPagePage };
251
+ export { P as MarketplaceMyServicesPagePage };
245
252
 
246
253
  //# sourceMappingURL=MarketplaceMyServicesPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplaceMyServicesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMyServicesPagePage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Badge,\n Button,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { Eye, Pencil, Plus, Star, Trash2 } from 'lucide-react';\nimport {\n FormModal,\n useFormModal,\n type FieldConfig,\n type FormValues,\n} from '../components/forms/FormModal';\nimport { useCrewFoundryStore, type MarketplaceService } from '../store/crewfoundryStore';\n\nconst SERVICE_FIELDS: FieldConfig[] = [\n { name: 'title', label: 'Service title', type: 'text', required: true, colSpan: 2 },\n { name: 'provider', label: 'Provider', type: 'text', required: true },\n { name: 'category', label: 'Category', type: 'text', required: true },\n { name: 'price', label: 'Price', type: 'number', required: true },\n {\n name: 'priceType',\n label: 'Price type',\n type: 'select',\n required: true,\n options: [\n { label: 'Hourly', value: 'hourly' },\n { label: 'Fixed', value: 'fixed' },\n { label: 'Monthly', value: 'monthly' },\n ],\n },\n { name: 'deliveryTime', label: 'Delivery time', type: 'text', required: true, placeholder: 'e.g. 3 days' },\n {\n name: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { label: 'Active', value: 'active' },\n { label: 'Paused', value: 'paused' },\n { label: 'Pending', value: 'pending' },\n ],\n },\n { name: 'description', label: 'Description', type: 'textarea', required: true, colSpan: 2 },\n { name: 'skills', label: 'Skills', type: 'tags', colSpan: 2 },\n];\n\nconst toInitialValues = (service: MarketplaceService): FormValues => ({\n title: service.title,\n provider: service.provider,\n category: service.category,\n price: service.price,\n priceType: service.priceType,\n deliveryTime: service.deliveryTime,\n status: service.status,\n description: service.description,\n skills: service.skills,\n});\n\nconst valuesToService = (\n values: FormValues,\n base?: MarketplaceService\n): MarketplaceService => ({\n id: base?.id ?? crypto.randomUUID(),\n title: String(values.title ?? ''),\n provider: String(values.provider ?? ''),\n category: String(values.category ?? ''),\n price: typeof values.price === 'number' ? values.price : Number(values.price) || 0,\n priceType: (values.priceType as MarketplaceService['priceType']) || 'hourly',\n rating: base?.rating ?? 0,\n reviews: base?.reviews ?? 0,\n description: String(values.description ?? ''),\n deliveryTime: String(values.deliveryTime ?? ''),\n status: (values.status as MarketplaceService['status']) || 'active',\n skills: Array.isArray(values.skills) ? values.skills : [],\n});\n\nexport function MarketplaceMyServicesPagePage() {\n const navigate = useNavigate();\n const { marketplaceServices, addMarketplaceService, updateMarketplaceService, removeMarketplaceService } =\n useCrewFoundryStore();\n const modal = useFormModal<MarketplaceService>();\n // Show a subset as \"my services\"\n const myServices = marketplaceServices.slice(0, 3);\n\n const handleSubmit = async (values: FormValues) => {\n if (modal.context) {\n await updateMarketplaceService(modal.context.id, valuesToService(values, modal.context));\n } else {\n await addMarketplaceService(valuesToService(values));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>My Services</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Manage your listed services</p>\n <PagePurpose className=\"mt-1\">Manage the services you offer to clients — list, edit, and showcase your offerings to win more work on the marketplace.</PagePurpose>\n </div>\n <Button size=\"sm\" onClick={() => modal.openModal()}>\n <Plus className=\"h-4 w-4 mr-1\" />\n Create Service\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {myServices.length === 0 ? (\n <div className=\"col-span-full\">\n <IllustratedEmptyState illustration=\"empty-generic\" title=\"No services listed\" description=\"List a service to start winning work on the marketplace.\" />\n </div>\n ) : (\n myServices.map((svc, _idx) => (\n <GlassCard key={svc.id} treatment={_idx === 0 ? 'glass' : 'plain'} glow={_idx === 0}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{svc.title}</CardTitle>\n <Badge\n variant={svc.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {svc.status}\n </Badge>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary mb-3\">{svc.description}</p>\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"font-bold\">\n ${svc.price}/{svc.priceType}\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {svc.rating} ({svc.reviews})\n </span>\n </div>\n <div className=\"flex gap-2 mt-3\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"flex-1\"\n onClick={() => modal.openModal(svc)}\n >\n <Pencil className=\"h-3.5 w-3.5 mr-1\" />\n Edit\n </Button>\n <Button\n size=\"sm\"\n className=\"flex-1\"\n onClick={() => navigate('../../marketplace/service-details-page')}\n >\n <Eye className=\"h-3.5 w-3.5 mr-1\" />\n View\n </Button>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label={`Delete ${svc.title}`}>\n <Trash2 className=\"h-4 w-4 text-status-error-text\" />\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete service?</AlertDialogTitle>\n <AlertDialogDescription>\n This removes “{svc.title}” from your marketplace listings. This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction onClick={() => void removeMarketplaceService(svc.id)}>\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </CardContent>\n </GlassCard>\n )))}\n </div>\n\n <FormModal\n open={modal.open}\n onOpenChange={modal.onOpenChange}\n title={modal.context ? 'Edit service' : 'Create service'}\n description=\"Describe the service you offer clients on the marketplace.\"\n fields={SERVICE_FIELDS}\n initialValues={modal.context ? toInitialValues(modal.context) : undefined}\n submitLabel={modal.context ? 'Save changes' : 'Create service'}\n onSubmit={handleSubmit}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarketplaceMyServicesPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/MarketplaceMyServicesPagePage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Badge,\n Button,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n Pagination,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { Eye, Pencil, Plus, Star, Trash2 } from 'lucide-react';\nimport {\n FormModal,\n useFormModal,\n type FieldConfig,\n type FormValues,\n} from '../components/forms/FormModal';\nimport { useCrewFoundryStore, type MarketplaceService } from '../store/crewfoundryStore';\n\nconst SERVICE_FIELDS: FieldConfig[] = [\n { name: 'title', label: 'Service title', type: 'text', required: true, colSpan: 2 },\n { name: 'provider', label: 'Provider', type: 'text', required: true },\n { name: 'category', label: 'Category', type: 'text', required: true },\n { name: 'price', label: 'Price', type: 'number', required: true },\n {\n name: 'priceType',\n label: 'Price type',\n type: 'select',\n required: true,\n options: [\n { label: 'Hourly', value: 'hourly' },\n { label: 'Fixed', value: 'fixed' },\n { label: 'Monthly', value: 'monthly' },\n ],\n },\n { name: 'deliveryTime', label: 'Delivery time', type: 'text', required: true, placeholder: 'e.g. 3 days' },\n {\n name: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { label: 'Active', value: 'active' },\n { label: 'Paused', value: 'paused' },\n { label: 'Pending', value: 'pending' },\n ],\n },\n { name: 'description', label: 'Description', type: 'textarea', required: true, colSpan: 2 },\n { name: 'skills', label: 'Skills', type: 'tags', colSpan: 2 },\n];\n\nconst toInitialValues = (service: MarketplaceService): FormValues => ({\n title: service.title,\n provider: service.provider,\n category: service.category,\n price: service.price,\n priceType: service.priceType,\n deliveryTime: service.deliveryTime,\n status: service.status,\n description: service.description,\n skills: service.skills,\n});\n\nconst valuesToService = (\n values: FormValues,\n base?: MarketplaceService\n): MarketplaceService => ({\n id: base?.id ?? crypto.randomUUID(),\n title: String(values.title ?? ''),\n provider: String(values.provider ?? ''),\n category: String(values.category ?? ''),\n price: typeof values.price === 'number' ? values.price : Number(values.price) || 0,\n priceType: (values.priceType as MarketplaceService['priceType']) || 'hourly',\n rating: base?.rating ?? 0,\n reviews: base?.reviews ?? 0,\n description: String(values.description ?? ''),\n deliveryTime: String(values.deliveryTime ?? ''),\n status: (values.status as MarketplaceService['status']) || 'active',\n skills: Array.isArray(values.skills) ? values.skills : [],\n});\n\nexport function MarketplaceMyServicesPagePage() {\n const navigate = useNavigate();\n const { marketplaceServices, addMarketplaceService, updateMarketplaceService, removeMarketplaceService } =\n useCrewFoundryStore();\n const modal = useFormModal<MarketplaceService>();\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 9 });\n // Every marketplace service in this workspace is managed here as an owned listing.\n const myServices = marketplaceServices.slice(offset, offset + pageSize);\n\n const handleSubmit = async (values: FormValues) => {\n if (modal.context) {\n await updateMarketplaceService(modal.context.id, valuesToService(values, modal.context));\n } else {\n await addMarketplaceService(valuesToService(values));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>My Services</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Manage your listed services</p>\n <PagePurpose className=\"mt-1\">Manage the services you offer to clients — list, edit, and showcase your offerings to win more work on the marketplace.</PagePurpose>\n </div>\n <Button size=\"sm\" onClick={() => modal.openModal()}>\n <Plus className=\"h-4 w-4 mr-1\" />\n Create Service\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {marketplaceServices.length === 0 ? (\n <div className=\"col-span-full\">\n <IllustratedEmptyState illustration=\"empty-generic\" title=\"No services listed\" description=\"List a service to start winning work on the marketplace.\" />\n </div>\n ) : (\n myServices.map((svc, _idx) => (\n <GlassCard key={svc.id} treatment={_idx === 0 ? 'glass' : 'plain'} glow={_idx === 0}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{svc.title}</CardTitle>\n <Badge\n variant={svc.status === 'active' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {svc.status}\n </Badge>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary mb-3\">{svc.description}</p>\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"font-bold\">\n ${svc.price}/{svc.priceType}\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n {svc.rating} ({svc.reviews})\n </span>\n </div>\n <div className=\"flex gap-2 mt-3\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"flex-1\"\n onClick={() => modal.openModal(svc)}\n >\n <Pencil className=\"h-3.5 w-3.5 mr-1\" />\n Edit\n </Button>\n <Button\n size=\"sm\"\n className=\"flex-1\"\n onClick={() =>\n navigate(`../../marketplace/service-details-page?id=${svc.id}`)\n }\n >\n <Eye className=\"h-3.5 w-3.5 mr-1\" />\n View\n </Button>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label={`Delete ${svc.title}`}>\n <Trash2 className=\"h-4 w-4 text-status-error-text\" />\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete service?</AlertDialogTitle>\n <AlertDialogDescription>\n This removes “{svc.title}” from your marketplace listings. This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction onClick={() => void removeMarketplaceService(svc.id)}>\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </CardContent>\n </GlassCard>\n )))}\n </div>\n {marketplaceServices.length > 0 ? (\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={marketplaceServices.length}\n onPageChange={setPage}\n />\n ) : null}\n\n <FormModal\n open={modal.open}\n onOpenChange={modal.onOpenChange}\n title={modal.context ? 'Edit service' : 'Create service'}\n description=\"Describe the service you offer clients on the marketplace.\"\n fields={SERVICE_FIELDS}\n initialValues={modal.context ? toInitialValues(modal.context) : undefined}\n submitLabel={modal.context ? 'Save changes' : 'Create service'}\n onSubmit={handleSubmit}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,122 +1,122 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { Calendar as t, DollarSign as n, MessageSquare as r, Users as i } from "lucide-react";
3
- import { useNavigate as a } from "react-router-dom";
4
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
- import { Badge as c, Card as l, CardContent as u, EmphasisPanel as d, GradientText as f, IllustratedEmptyState as p, NextSteps as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
3
+ import { useLocation as a, useNavigate as o } from "react-router-dom";
4
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
+ import { Badge as l, Card as u, CardContent as d, EmphasisPanel as f, GradientText as p, IllustratedEmptyState as m, NextSteps as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/crewfoundry/pages/MarketplaceProjectDetailsPagePage.tsx
7
- function g() {
8
- let g = a(), { projects: _ } = e(), v = _[0];
9
- return v ? /* @__PURE__ */ s("div", {
7
+ function _() {
8
+ let _ = o(), v = a(), { projects: y } = e(), b = new URLSearchParams(v.search).get("id"), x = y.find((e) => e.id === b) ?? y[0];
9
+ return x ? /* @__PURE__ */ c("div", {
10
10
  className: "space-y-6 p-6 max-w-4xl",
11
11
  children: [
12
- /* @__PURE__ */ s("div", {
12
+ /* @__PURE__ */ c("div", {
13
13
  className: "flex items-center justify-between",
14
- children: [/* @__PURE__ */ s("div", { children: [
15
- /* @__PURE__ */ o("h1", {
14
+ children: [/* @__PURE__ */ c("div", { children: [
15
+ /* @__PURE__ */ s("h1", {
16
16
  className: "text-2xl font-semibold",
17
- children: /* @__PURE__ */ o(f, { children: v.name })
17
+ children: /* @__PURE__ */ s(p, { children: x.name })
18
18
  }),
19
- /* @__PURE__ */ o("p", {
19
+ /* @__PURE__ */ s("p", {
20
20
  className: "text-sm text-text-secondary",
21
- children: v.description
21
+ children: x.description
22
22
  }),
23
- /* @__PURE__ */ o(h, {
23
+ /* @__PURE__ */ s(g, {
24
24
  className: "mt-2",
25
25
  children: "The full picture of a marketplace project — scope, budget, timeline, and progress — so you can track delivery and stay aligned with the team doing the work."
26
26
  })
27
- ] }), /* @__PURE__ */ o(c, {
28
- variant: v.status === "active" ? "default" : "secondary",
29
- children: v.status
27
+ ] }), /* @__PURE__ */ s(l, {
28
+ variant: x.status === "active" ? "default" : "secondary",
29
+ children: x.status
30
30
  })]
31
31
  }),
32
- /* @__PURE__ */ o(m, {
32
+ /* @__PURE__ */ s(h, {
33
33
  storageKey: "crewfoundry-marketplace-project-details",
34
34
  steps: [
35
35
  {
36
36
  id: "message",
37
37
  label: "Message the team",
38
38
  description: "Coordinate on scope, blockers, and next milestones.",
39
- icon: /* @__PURE__ */ o(r, { className: "h-4 w-4" }),
40
- onClick: () => g("../../marketplace/messaging-page")
39
+ icon: /* @__PURE__ */ s(r, { className: "h-4 w-4" }),
40
+ onClick: () => _("../../marketplace/messaging-page")
41
41
  },
42
42
  {
43
43
  id: "bookings",
44
44
  label: "Review bookings",
45
45
  description: "Check the engagements tied to this project.",
46
- icon: /* @__PURE__ */ o(t, { className: "h-4 w-4" }),
47
- onClick: () => g("../../marketplace/booking-management-page")
46
+ icon: /* @__PURE__ */ s(t, { className: "h-4 w-4" }),
47
+ onClick: () => _("../../marketplace/booking-management-page")
48
48
  },
49
49
  {
50
50
  id: "earnings",
51
51
  label: "Track earnings",
52
52
  description: "See payouts and balances connected to your work.",
53
- icon: /* @__PURE__ */ o(n, { className: "h-4 w-4" }),
54
- onClick: () => g("../../marketplace/earnings-page")
53
+ icon: /* @__PURE__ */ s(n, { className: "h-4 w-4" }),
54
+ onClick: () => _("../../marketplace/earnings-page")
55
55
  }
56
56
  ]
57
57
  }),
58
- /* @__PURE__ */ s("div", {
58
+ /* @__PURE__ */ c("div", {
59
59
  className: "grid gap-4 md:grid-cols-4",
60
60
  children: [
61
- /* @__PURE__ */ o(l, { children: /* @__PURE__ */ s(u, {
61
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
62
62
  className: "p-4 text-center",
63
63
  children: [
64
- /* @__PURE__ */ o(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
65
- /* @__PURE__ */ s("p", {
64
+ /* @__PURE__ */ s(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
65
+ /* @__PURE__ */ c("p", {
66
66
  className: "text-lg font-bold",
67
67
  children: [
68
68
  "$",
69
- (v.budget / 1e3).toFixed(0),
69
+ (x.budget / 1e3).toFixed(0),
70
70
  "K"
71
71
  ]
72
72
  }),
73
- /* @__PURE__ */ o("p", {
73
+ /* @__PURE__ */ s("p", {
74
74
  className: "text-xs text-text-secondary",
75
75
  children: "Budget"
76
76
  })
77
77
  ]
78
78
  }) }),
79
- /* @__PURE__ */ o(l, { children: /* @__PURE__ */ s(u, {
79
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
80
80
  className: "p-4 text-center",
81
81
  children: [
82
- /* @__PURE__ */ o(n, { className: "h-5 w-5 mx-auto text-status-success-text mb-1" }),
83
- /* @__PURE__ */ s("p", {
82
+ /* @__PURE__ */ s(n, { className: "h-5 w-5 mx-auto text-status-success-text mb-1" }),
83
+ /* @__PURE__ */ c("p", {
84
84
  className: "text-lg font-bold",
85
85
  children: [
86
86
  "$",
87
- (v.spent / 1e3).toFixed(0),
87
+ (x.spent / 1e3).toFixed(0),
88
88
  "K"
89
89
  ]
90
90
  }),
91
- /* @__PURE__ */ o("p", {
91
+ /* @__PURE__ */ s("p", {
92
92
  className: "text-xs text-text-secondary",
93
93
  children: "Spent"
94
94
  })
95
95
  ]
96
96
  }) }),
97
- /* @__PURE__ */ o(l, { children: /* @__PURE__ */ s(u, {
97
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
98
98
  className: "p-4 text-center",
99
99
  children: [
100
- /* @__PURE__ */ o(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
101
- /* @__PURE__ */ o("p", {
100
+ /* @__PURE__ */ s(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
101
+ /* @__PURE__ */ s("p", {
102
102
  className: "text-lg font-bold",
103
- children: v.teamName
103
+ children: x.teamName
104
104
  }),
105
- /* @__PURE__ */ o("p", {
105
+ /* @__PURE__ */ s("p", {
106
106
  className: "text-xs text-text-secondary",
107
107
  children: "Team"
108
108
  })
109
109
  ]
110
110
  }) }),
111
- /* @__PURE__ */ o(l, { children: /* @__PURE__ */ s(u, {
111
+ /* @__PURE__ */ s(u, { children: /* @__PURE__ */ c(d, {
112
112
  className: "p-4 text-center",
113
113
  children: [
114
- /* @__PURE__ */ o(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
115
- /* @__PURE__ */ o("p", {
114
+ /* @__PURE__ */ s(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
115
+ /* @__PURE__ */ s("p", {
116
116
  className: "text-lg font-bold",
117
- children: v.endDate
117
+ children: x.endDate
118
118
  }),
119
- /* @__PURE__ */ o("p", {
119
+ /* @__PURE__ */ s("p", {
120
120
  className: "text-xs text-text-secondary",
121
121
  children: "Deadline"
122
122
  })
@@ -124,70 +124,70 @@ function g() {
124
124
  }) })
125
125
  ]
126
126
  }),
127
- /* @__PURE__ */ s(d, { children: [
128
- /* @__PURE__ */ o("div", {
127
+ /* @__PURE__ */ c(f, { children: [
128
+ /* @__PURE__ */ s("div", {
129
129
  className: "mb-2 text-lg font-semibold",
130
130
  children: "Progress"
131
131
  }),
132
- /* @__PURE__ */ s("div", {
132
+ /* @__PURE__ */ c("div", {
133
133
  className: "space-y-2",
134
- children: [/* @__PURE__ */ s("div", {
134
+ children: [/* @__PURE__ */ c("div", {
135
135
  className: "flex justify-between text-sm",
136
- children: [/* @__PURE__ */ s("span", { children: [
137
- v.completedTasks,
136
+ children: [/* @__PURE__ */ c("span", { children: [
137
+ x.completedTasks,
138
138
  " of ",
139
- v.tasks,
139
+ x.tasks,
140
140
  " tasks"
141
- ] }), /* @__PURE__ */ s("span", {
141
+ ] }), /* @__PURE__ */ c("span", {
142
142
  className: "font-medium",
143
- children: [v.progress, "%"]
143
+ children: [x.progress, "%"]
144
144
  })]
145
- }), /* @__PURE__ */ o("div", {
145
+ }), /* @__PURE__ */ s("div", {
146
146
  className: "h-3 bg-bg-sunken rounded overflow-hidden",
147
- children: /* @__PURE__ */ o("div", {
147
+ children: /* @__PURE__ */ s("div", {
148
148
  className: "h-3 bg-action-primary-bg rounded",
149
- style: { width: `${v.progress}%` }
149
+ style: { width: `${x.progress}%` }
150
150
  })
151
151
  })]
152
152
  }),
153
- /* @__PURE__ */ s("div", {
153
+ /* @__PURE__ */ c("div", {
154
154
  className: "grid grid-cols-2 gap-4 mt-4",
155
155
  children: [
156
- /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
156
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
157
157
  className: "text-xs text-text-secondary",
158
158
  children: "Manager"
159
- }), /* @__PURE__ */ o("p", {
159
+ }), /* @__PURE__ */ s("p", {
160
160
  className: "text-sm font-medium",
161
- children: v.managerName
161
+ children: x.managerName
162
162
  })] }),
163
- /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
163
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
164
164
  className: "text-xs text-text-secondary",
165
165
  children: "Priority"
166
- }), /* @__PURE__ */ o(c, {
167
- variant: v.priority === "critical" ? "destructive" : v.priority === "high" ? "default" : "secondary",
168
- children: v.priority
166
+ }), /* @__PURE__ */ s(l, {
167
+ variant: x.priority === "critical" ? "destructive" : x.priority === "high" ? "default" : "secondary",
168
+ children: x.priority
169
169
  })] }),
170
- /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
170
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
171
171
  className: "text-xs text-text-secondary",
172
172
  children: "Start Date"
173
- }), /* @__PURE__ */ o("p", {
173
+ }), /* @__PURE__ */ s("p", {
174
174
  className: "text-sm",
175
- children: v.startDate
175
+ children: x.startDate
176
176
  })] }),
177
- /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
177
+ /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
178
178
  className: "text-xs text-text-secondary",
179
179
  children: "End Date"
180
- }), /* @__PURE__ */ o("p", {
180
+ }), /* @__PURE__ */ s("p", {
181
181
  className: "text-sm",
182
- children: v.endDate
182
+ children: x.endDate
183
183
  })] })
184
184
  ]
185
185
  })
186
186
  ] })
187
187
  ]
188
- }) : /* @__PURE__ */ o("div", {
188
+ }) : /* @__PURE__ */ s("div", {
189
189
  className: "p-6",
190
- children: /* @__PURE__ */ o(p, {
190
+ children: /* @__PURE__ */ s(m, {
191
191
  illustration: "empty-search",
192
192
  title: "Project not found",
193
193
  description: "This project is no longer available."
@@ -195,6 +195,6 @@ function g() {
195
195
  });
196
196
  }
197
197
  //#endregion
198
- export { g as MarketplaceProjectDetailsPagePage };
198
+ export { _ as MarketplaceProjectDetailsPagePage };
199
199
 
200
200
  //# sourceMappingURL=MarketplaceProjectDetailsPagePage.js.map