@burdenoff/microfe-crewfoundry 2026.704.6 → 2026.704.7

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 (148) hide show
  1. package/dist/crewfoundry/CrewFoundryRoutes.js +51 -43
  2. package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
  3. package/dist/crewfoundry/components/forms/formValues.js +5 -2
  4. package/dist/crewfoundry/components/forms/formValues.js.map +1 -1
  5. package/dist/crewfoundry/components/viz/AllocationBar.js +68 -0
  6. package/dist/crewfoundry/components/viz/AllocationBar.js.map +1 -0
  7. package/dist/crewfoundry/components/viz/AreaChart.js +102 -0
  8. package/dist/crewfoundry/components/viz/AreaChart.js.map +1 -0
  9. package/dist/crewfoundry/components/viz/AvatarStack.js +36 -0
  10. package/dist/crewfoundry/components/viz/AvatarStack.js.map +1 -0
  11. package/dist/crewfoundry/components/viz/BarChart.js +83 -0
  12. package/dist/crewfoundry/components/viz/BarChart.js.map +1 -0
  13. package/dist/crewfoundry/components/viz/CertificateCard.js +118 -0
  14. package/dist/crewfoundry/components/viz/CertificateCard.js.map +1 -0
  15. package/dist/crewfoundry/components/viz/DonutChart.js +109 -0
  16. package/dist/crewfoundry/components/viz/DonutChart.js.map +1 -0
  17. package/dist/crewfoundry/components/viz/HBarFunnel.js +54 -0
  18. package/dist/crewfoundry/components/viz/HBarFunnel.js.map +1 -0
  19. package/dist/crewfoundry/components/viz/Heatmap.js +91 -0
  20. package/dist/crewfoundry/components/viz/Heatmap.js.map +1 -0
  21. package/dist/crewfoundry/components/viz/KanbanBoard.js +50 -0
  22. package/dist/crewfoundry/components/viz/KanbanBoard.js.map +1 -0
  23. package/dist/crewfoundry/components/viz/LineChart.js +123 -0
  24. package/dist/crewfoundry/components/viz/LineChart.js.map +1 -0
  25. package/dist/crewfoundry/components/viz/OrgTree.js +83 -0
  26. package/dist/crewfoundry/components/viz/OrgTree.js.map +1 -0
  27. package/dist/crewfoundry/components/viz/PathSteps.js +68 -0
  28. package/dist/crewfoundry/components/viz/PathSteps.js.map +1 -0
  29. package/dist/crewfoundry/components/viz/ProgressRing.js +68 -0
  30. package/dist/crewfoundry/components/viz/ProgressRing.js.map +1 -0
  31. package/dist/crewfoundry/components/viz/RatingStars.js +51 -0
  32. package/dist/crewfoundry/components/viz/RatingStars.js.map +1 -0
  33. package/dist/crewfoundry/components/viz/SegmentedTabs.js +69 -0
  34. package/dist/crewfoundry/components/viz/SegmentedTabs.js.map +1 -0
  35. package/dist/crewfoundry/components/viz/SkillBar.js +3 -0
  36. package/dist/crewfoundry/components/viz/Sparkline.js +74 -0
  37. package/dist/crewfoundry/components/viz/Sparkline.js.map +1 -0
  38. package/dist/crewfoundry/components/viz/StatCard.js +60 -0
  39. package/dist/crewfoundry/components/viz/StatCard.js.map +1 -0
  40. package/dist/crewfoundry/components/viz/StepProgress.js +3 -0
  41. package/dist/crewfoundry/components/viz/Timeline.js +66 -0
  42. package/dist/crewfoundry/components/viz/Timeline.js.map +1 -0
  43. package/dist/crewfoundry/components/viz/index.js +23 -0
  44. package/dist/crewfoundry/components/viz/lib/Avatar.js +30 -0
  45. package/dist/crewfoundry/components/viz/lib/Avatar.js.map +1 -0
  46. package/dist/crewfoundry/components/viz/lib/CartesianFrame.js +119 -0
  47. package/dist/crewfoundry/components/viz/lib/CartesianFrame.js.map +1 -0
  48. package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js +35 -0
  49. package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js.map +1 -0
  50. package/dist/crewfoundry/components/viz/lib/format.js +21 -0
  51. package/dist/crewfoundry/components/viz/lib/format.js.map +1 -0
  52. package/dist/crewfoundry/components/viz/lib/geometry.js +69 -0
  53. package/dist/crewfoundry/components/viz/lib/geometry.js.map +1 -0
  54. package/dist/crewfoundry/components/viz/lib/hooks.js +39 -0
  55. package/dist/crewfoundry/components/viz/lib/hooks.js.map +1 -0
  56. package/dist/crewfoundry/components/viz/lib/palette.js +27 -0
  57. package/dist/crewfoundry/components/viz/lib/palette.js.map +1 -0
  58. package/dist/crewfoundry/lib/analytics.js +323 -0
  59. package/dist/crewfoundry/lib/analytics.js.map +1 -0
  60. package/dist/crewfoundry/lib/companyFinance.js +16 -0
  61. package/dist/crewfoundry/lib/companyFinance.js.map +1 -0
  62. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +226 -283
  63. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  64. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +107 -120
  65. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  66. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +122 -162
  67. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  68. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +121 -158
  69. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  70. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +316 -211
  71. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  72. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +75 -27
  73. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  74. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +167 -165
  75. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  76. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +168 -109
  77. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  78. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +401 -290
  79. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  80. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +84 -75
  81. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  82. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +368 -174
  83. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  84. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +236 -201
  85. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  86. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +369 -196
  87. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  88. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +269 -270
  89. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  90. package/dist/crewfoundry/pages/HiringJobsPagePage.js +210 -110
  91. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  92. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +216 -178
  93. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  94. package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js +385 -0
  95. package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js.map +1 -0
  96. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +189 -130
  97. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  98. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +397 -241
  99. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  100. package/dist/crewfoundry/pages/HrPayrollPagePage.js +262 -147
  101. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  102. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +345 -167
  103. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  104. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +98 -24
  105. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  106. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +1 -1
  107. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  108. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +289 -108
  109. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  110. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +221 -114
  111. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  112. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +134 -135
  113. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  114. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +148 -97
  115. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  116. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +264 -157
  117. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  118. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +85 -93
  119. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  120. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +211 -122
  121. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  122. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +94 -54
  123. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  124. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +289 -140
  125. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  126. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +169 -79
  127. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  128. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +296 -125
  129. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  130. package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js +187 -0
  131. package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js.map +1 -0
  132. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +140 -78
  133. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  134. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +93 -43
  135. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  136. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +250 -98
  137. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  138. package/dist/crewfoundry/store/crewfoundryStore.js +1 -1
  139. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  140. package/dist/crewfoundry/utils/cn.js +10 -0
  141. package/dist/crewfoundry/utils/cn.js.map +1 -0
  142. package/dist/crewfoundry/utils/courseProgress.js +46 -0
  143. package/dist/crewfoundry/utils/courseProgress.js.map +1 -0
  144. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  145. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  146. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -0
  147. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  148. package/package.json +1 -1
@@ -1,16 +1,20 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
- import { FormModal as n } from "../components/forms/FormModal.js";
4
- import { ConfirmDialog as r } from "../components/forms/ConfirmDialog.js";
5
- import { getNumber as i, getTags as a, getText as o } from "../components/forms/formValues.js";
6
- import { useState as s } from "react";
7
- import { Briefcase as c, Calendar as l, CheckCircle as u, DollarSign as d, MapPin as f, Pencil as p, Share2 as m, Trash2 as h, Users as g } from "lucide-react";
8
- import { useNavigate as _, useSearchParams as v } from "react-router-dom";
9
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
10
- import { Badge as x, Button as S, Card as C, CardContent as w, CardDescription as T, CardHeader as E, CardTitle as D, GlassCard as O, GradientText as k, IllustratedEmptyState as A, NextSteps as j, PagePurpose as M, ResponsiveTable as N, Spinner as P } from "@burdenoff/fe-libs/ui";
11
- import { useGlobalUi as F } from "@burdenoff/fe-libs/shared/providers/shell";
3
+ import { getInitials as n } from "../components/viz/lib/format.js";
4
+ import { HBarFunnel as r } from "../components/viz/HBarFunnel.js";
5
+ import { RatingStars as i } from "../components/viz/RatingStars.js";
6
+ import "../components/viz/index.js";
7
+ import { FormModal as a } from "../components/forms/FormModal.js";
8
+ import { ConfirmDialog as o } from "../components/forms/ConfirmDialog.js";
9
+ import { getNumber as s, getTags as c, getText as l } from "../components/forms/formValues.js";
10
+ import { useState as u } from "react";
11
+ import { Briefcase as d, Calendar as f, CheckCircle as p, MapPin as m, Pencil as h, Share2 as g, Trash2 as ee, Users as _ } from "lucide-react";
12
+ import { useNavigate as v, useSearchParams as y } from "react-router-dom";
13
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
14
+ import { Badge as S, Button as C, Card as w, CardContent as T, CardHeader as E, CardTitle as D, GlassCard as O, GradientText as k, IllustratedEmptyState as A, PagePurpose as j, Spinner as M } from "@burdenoff/fe-libs/ui";
15
+ import { useGlobalUi as N } from "@burdenoff/fe-libs/shared/providers/shell";
12
16
  //#region src/crewfoundry/pages/HiringJobDetailsPagePage.tsx
13
- var I = [
17
+ var P = [
14
18
  {
15
19
  name: "title",
16
20
  label: "Job Title",
@@ -138,310 +142,305 @@ var I = [
138
142
  label: "Benefits",
139
143
  type: "tags"
140
144
  }
141
- ], L = [
142
- {
143
- key: "name",
144
- header: "Name",
145
- priority: "primary",
146
- cell: (e) => /* @__PURE__ */ b("span", {
147
- className: "font-medium",
148
- children: [
149
- e.firstName,
150
- " ",
151
- e.lastName
152
- ]
153
- })
154
- },
155
- {
156
- key: "source",
157
- header: "Source",
158
- priority: "secondary",
159
- cell: (e) => /* @__PURE__ */ y("span", {
160
- className: "text-text-secondary",
161
- children: e.source
162
- })
163
- },
164
- {
165
- key: "experience",
166
- header: "Experience",
167
- priority: "secondary",
168
- cell: (e) => /* @__PURE__ */ b("span", { children: [e.experience, " yrs"] })
169
- },
170
- {
171
- key: "rating",
172
- header: "Rating",
173
- priority: "secondary",
174
- cell: (e) => /* @__PURE__ */ b("span", { children: [e.rating, "/5"] })
175
- },
176
- {
177
- key: "status",
178
- header: "Status",
179
- priority: "secondary",
180
- cell: (e) => /* @__PURE__ */ y(x, {
181
- variant: e.status === "hired" ? "default" : "secondary",
182
- className: "text-[10px]",
183
- children: t(e.status)
184
- })
185
- }
186
- ];
187
- function R() {
188
- let R = _(), [z] = v(), { showToast: B } = F(), { jobPostings: V, candidates: H, updateJobPosting: U, removeJobPosting: W, initialized: G } = e(), K = z.get("id"), q = K ? V.find((e) => e.id === K) : V[0], [J, Y] = s(!1), [X, Z] = s(!1);
189
- if (!G && !q) return /* @__PURE__ */ y("div", {
145
+ ], F = {
146
+ new: "outline",
147
+ screening: "secondary",
148
+ interview: "secondary",
149
+ assessment: "secondary",
150
+ offer: "default",
151
+ hired: "default",
152
+ rejected: "destructive"
153
+ };
154
+ function I({ name: e, size: t = 32 }) {
155
+ return /* @__PURE__ */ b("span", {
156
+ className: "inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full border border-border-subtle bg-bg-sunken font-medium text-text-secondary",
157
+ style: {
158
+ width: t,
159
+ height: t,
160
+ fontSize: Math.round(t * .36)
161
+ },
162
+ "aria-hidden": "true",
163
+ children: n(e)
164
+ });
165
+ }
166
+ function L() {
167
+ let n = v(), [L] = y(), { showToast: R } = N(), { jobPostings: z, candidates: B, updateJobPosting: V, removeJobPosting: H, initialized: U } = e(), W = L.get("id"), G = W ? z.find((e) => e.id === W) : z[0], [K, q] = u(!1), [J, Y] = u(!1);
168
+ if (!U && !G) return /* @__PURE__ */ b("div", {
190
169
  className: "flex min-h-[60vh] items-center justify-center p-6",
191
- children: /* @__PURE__ */ y(P, { size: "lg" })
170
+ children: /* @__PURE__ */ b(M, { size: "lg" })
192
171
  });
193
- if (!q) return /* @__PURE__ */ y("div", {
172
+ if (!G) return /* @__PURE__ */ b("div", {
194
173
  className: "p-6",
195
- children: /* @__PURE__ */ y(A, {
174
+ children: /* @__PURE__ */ b(A, {
196
175
  illustration: "empty-search",
197
176
  title: "No job posting found",
198
177
  description: "This job posting is no longer available."
199
178
  })
200
179
  });
201
- let Q = H.filter((e) => e.position === q.title), $ = {
202
- title: q.title,
203
- department: q.department,
204
- location: q.location,
205
- type: q.type,
206
- experienceLevel: q.experienceLevel,
207
- status: q.status,
208
- salaryMin: q.salaryMin,
209
- salaryMax: q.salaryMax,
210
- deadline: q.deadline,
211
- description: q.description,
212
- requirements: q.requirements,
213
- benefits: q.benefits
180
+ let X = G.title.trim().toLowerCase(), Z = B.filter((e) => e.position.trim().toLowerCase() === X), Q = (e) => Z.filter((t) => t.status === e).length, $ = Q("interview"), te = [
181
+ {
182
+ label: "Applied",
183
+ value: Z.length
184
+ },
185
+ {
186
+ label: "Screening",
187
+ value: Q("screening")
188
+ },
189
+ {
190
+ label: "Interview",
191
+ value: $
192
+ },
193
+ {
194
+ label: "Assessment",
195
+ value: Q("assessment")
196
+ },
197
+ {
198
+ label: "Offer",
199
+ value: Q("offer") + Q("hired")
200
+ }
201
+ ], ne = {
202
+ title: G.title,
203
+ department: G.department,
204
+ location: G.location,
205
+ type: G.type,
206
+ experienceLevel: G.experienceLevel,
207
+ status: G.status,
208
+ salaryMin: G.salaryMin,
209
+ salaryMax: G.salaryMax,
210
+ deadline: G.deadline,
211
+ description: G.description,
212
+ requirements: G.requirements,
213
+ benefits: G.benefits
214
214
  };
215
- return /* @__PURE__ */ b("div", {
216
- className: "space-y-6 p-6 max-w-4xl",
215
+ return /* @__PURE__ */ x("div", {
216
+ className: "space-y-6 p-6",
217
217
  children: [
218
- /* @__PURE__ */ b("div", {
219
- className: "flex items-center justify-between",
220
- children: [/* @__PURE__ */ b("div", { children: [
221
- /* @__PURE__ */ b("div", {
222
- className: "flex items-center gap-2 mb-1",
223
- children: [/* @__PURE__ */ y("h1", {
224
- className: "text-2xl font-semibold",
225
- children: /* @__PURE__ */ y(k, { children: q.title })
226
- }), /* @__PURE__ */ y(x, {
227
- variant: q.status === "active" ? "default" : "secondary",
228
- children: t(q.status)
229
- })]
230
- }),
231
- /* @__PURE__ */ b("div", {
232
- className: "flex items-center gap-4 text-sm text-text-secondary",
218
+ /* @__PURE__ */ b(O, {
219
+ treatment: "glass",
220
+ glow: !0,
221
+ className: "border-border-seam",
222
+ children: /* @__PURE__ */ x(T, {
223
+ className: "flex flex-col gap-4 p-6 lg:flex-row lg:items-start lg:justify-between",
224
+ children: [/* @__PURE__ */ x("div", {
225
+ className: "min-w-0",
233
226
  children: [
234
- /* @__PURE__ */ b("span", {
235
- className: "flex items-center gap-1",
236
- children: [/* @__PURE__ */ y(c, { className: "h-3 w-3" }), q.department]
227
+ /* @__PURE__ */ x("div", {
228
+ className: "mb-1 flex flex-wrap items-center gap-2",
229
+ children: [/* @__PURE__ */ b("h1", {
230
+ className: "text-2xl font-semibold",
231
+ children: /* @__PURE__ */ b(k, { children: G.title })
232
+ }), /* @__PURE__ */ b(S, {
233
+ variant: G.status === "active" ? "default" : "secondary",
234
+ children: t(G.status)
235
+ })]
237
236
  }),
238
- /* @__PURE__ */ b("span", {
239
- className: "flex items-center gap-1",
240
- children: [/* @__PURE__ */ y(f, { className: "h-3 w-3" }), q.location]
237
+ /* @__PURE__ */ x("div", {
238
+ className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-text-secondary",
239
+ children: [
240
+ /* @__PURE__ */ x("span", {
241
+ className: "flex items-center gap-1",
242
+ children: [/* @__PURE__ */ b(d, { className: "h-3.5 w-3.5" }), G.department]
243
+ }),
244
+ /* @__PURE__ */ x("span", {
245
+ className: "flex items-center gap-1",
246
+ children: [/* @__PURE__ */ b(m, { className: "h-3.5 w-3.5" }), G.location]
247
+ }),
248
+ /* @__PURE__ */ b("span", { children: t(G.type) })
249
+ ]
241
250
  }),
242
- /* @__PURE__ */ b("span", {
243
- className: "flex items-center gap-1",
251
+ /* @__PURE__ */ x("div", {
252
+ className: "mt-2 flex flex-wrap items-center gap-2 text-xs text-text-secondary",
244
253
  children: [
245
- /* @__PURE__ */ y(l, { className: "h-3 w-3" }),
246
- "Posted ",
247
- q.postedDate
254
+ /* @__PURE__ */ x(S, {
255
+ variant: "secondary",
256
+ className: "text-[10px]",
257
+ children: [Z.length, " applicants"]
258
+ }),
259
+ $ > 0 && /* @__PURE__ */ x(S, {
260
+ variant: "secondary",
261
+ className: "text-[10px]",
262
+ children: [$, " in interview"]
263
+ }),
264
+ /* @__PURE__ */ x("span", {
265
+ className: "flex items-center gap-1",
266
+ children: [
267
+ /* @__PURE__ */ b(f, { className: "h-3 w-3" }),
268
+ "Posted ",
269
+ G.postedDate
270
+ ]
271
+ })
248
272
  ]
273
+ }),
274
+ /* @__PURE__ */ b(j, {
275
+ className: "mt-3",
276
+ children: "Everything about this role in one place — review applicants, requirements, and compensation to decide who to interview and keep the posting current."
249
277
  })
250
278
  ]
251
- }),
252
- /* @__PURE__ */ y(M, {
253
- className: "mt-2",
254
- children: "Everything about this role in one place — review applicants, requirements, and compensation here to decide who to interview and keep the posting current."
255
- })
256
- ] }), /* @__PURE__ */ b("div", {
257
- className: "flex gap-2",
279
+ }), /* @__PURE__ */ x("div", {
280
+ className: "flex shrink-0 flex-col items-start gap-3 lg:items-end",
281
+ children: [/* @__PURE__ */ x("div", {
282
+ className: "text-2xl font-bold tabular-nums text-text-primary",
283
+ children: [
284
+ "$",
285
+ (G.salaryMin / 1e3).toFixed(0),
286
+ "k – $",
287
+ (G.salaryMax / 1e3).toFixed(0),
288
+ "k"
289
+ ]
290
+ }), /* @__PURE__ */ x("div", {
291
+ className: "flex flex-wrap gap-2",
292
+ children: [
293
+ /* @__PURE__ */ x(C, {
294
+ variant: "outline",
295
+ size: "sm",
296
+ onClick: async () => {
297
+ try {
298
+ await navigator.clipboard.writeText(window.location.href), R("Job link copied to clipboard", "success");
299
+ } catch {
300
+ R("Could not copy the job link", "error");
301
+ }
302
+ },
303
+ children: [/* @__PURE__ */ b(g, { className: "mr-1 h-4 w-4" }), "Share"]
304
+ }),
305
+ /* @__PURE__ */ x(C, {
306
+ variant: "outline",
307
+ size: "sm",
308
+ onClick: () => q(!0),
309
+ children: [/* @__PURE__ */ b(h, { className: "mr-1 h-4 w-4" }), "Edit"]
310
+ }),
311
+ /* @__PURE__ */ b(C, {
312
+ variant: "destructive",
313
+ size: "sm",
314
+ "aria-label": "Delete job posting",
315
+ onClick: () => Y(!0),
316
+ children: /* @__PURE__ */ b(ee, { className: "h-4 w-4" })
317
+ }),
318
+ /* @__PURE__ */ x(C, {
319
+ size: "sm",
320
+ onClick: () => n(`../hiring/applications-page?position=${encodeURIComponent(G.title)}`),
321
+ children: [/* @__PURE__ */ b(_, { className: "mr-1 h-4 w-4" }), "View Applications"]
322
+ })
323
+ ]
324
+ })]
325
+ })]
326
+ })
327
+ }),
328
+ /* @__PURE__ */ x("div", {
329
+ className: "grid gap-6 lg:grid-cols-3",
330
+ children: [/* @__PURE__ */ x("div", {
331
+ className: "space-y-6 lg:col-span-2",
258
332
  children: [
259
- /* @__PURE__ */ b(S, {
260
- variant: "outline",
261
- size: "sm",
262
- onClick: () => B("Sharing job postings is coming soon", "info"),
263
- children: [/* @__PURE__ */ y(m, { className: "h-4 w-4 mr-1" }), "Share"]
264
- }),
265
- /* @__PURE__ */ b(S, {
266
- variant: "outline",
267
- size: "sm",
268
- onClick: () => Y(!0),
269
- children: [/* @__PURE__ */ y(p, { className: "h-4 w-4 mr-1" }), "Edit Posting"]
270
- }),
271
- /* @__PURE__ */ y(S, {
272
- variant: "destructive",
273
- size: "sm",
274
- "aria-label": "Delete job posting",
275
- onClick: () => Z(!0),
276
- children: /* @__PURE__ */ y(h, { className: "h-4 w-4" })
277
- })
333
+ /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, { children: /* @__PURE__ */ b(D, { children: "Description" }) }), /* @__PURE__ */ b(T, { children: /* @__PURE__ */ b("p", {
334
+ className: "text-sm leading-relaxed text-text-secondary",
335
+ children: G.description
336
+ }) })] }),
337
+ /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, { children: /* @__PURE__ */ b(D, { children: "Requirements" }) }), /* @__PURE__ */ b(T, { children: G.requirements.length === 0 ? /* @__PURE__ */ b("p", {
338
+ className: "text-sm text-text-muted",
339
+ children: "No requirements listed."
340
+ }) : /* @__PURE__ */ b("ul", {
341
+ className: "space-y-2",
342
+ children: G.requirements.map((e, t) => /* @__PURE__ */ x("li", {
343
+ className: "flex items-start gap-2 text-sm",
344
+ children: [/* @__PURE__ */ b(p, { className: "mt-0.5 h-4 w-4 flex-shrink-0 text-status-success-text" }), e]
345
+ }, t))
346
+ }) })] }),
347
+ /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, { children: /* @__PURE__ */ b(D, { children: "Benefits" }) }), /* @__PURE__ */ b(T, { children: G.benefits.length === 0 ? /* @__PURE__ */ b("p", {
348
+ className: "text-sm text-text-muted",
349
+ children: "No benefits listed."
350
+ }) : /* @__PURE__ */ b("div", {
351
+ className: "flex flex-wrap gap-2",
352
+ children: G.benefits.map((e, t) => /* @__PURE__ */ b(S, {
353
+ variant: "outline",
354
+ className: "rounded-full px-3 py-1 text-xs",
355
+ children: e
356
+ }, t))
357
+ }) })] })
278
358
  ]
279
- })]
280
- }),
281
- /* @__PURE__ */ y(j, {
282
- storageKey: "crewfoundry-job-details",
283
- steps: [
284
- {
285
- id: "applicants",
286
- label: "Review applicants",
287
- description: "Screen the candidates who applied for this role.",
288
- icon: /* @__PURE__ */ y(g, { className: "h-4 w-4" }),
289
- onClick: () => R("../hiring/applications-page")
290
- },
291
- {
292
- id: "interviews",
293
- label: "Schedule interviews",
294
- description: "Set up conversations with promising candidates.",
295
- icon: /* @__PURE__ */ y(l, { className: "h-4 w-4" }),
296
- onClick: () => R("../hiring/interviews-page")
297
- },
298
- {
299
- id: "candidates",
300
- label: "Browse your talent pool",
301
- description: "Source more candidates that fit this position.",
302
- icon: /* @__PURE__ */ y(c, { className: "h-4 w-4" }),
303
- onClick: () => R("../hiring/candidates-page")
304
- }
305
- ]
306
- }),
307
- /* @__PURE__ */ b("div", {
308
- className: "grid gap-4 md:grid-cols-4",
309
- children: [
310
- /* @__PURE__ */ y(O, {
311
- treatment: "glass",
312
- glow: !0,
313
- className: "border-border-seam",
314
- children: /* @__PURE__ */ b(w, {
315
- className: "p-4 text-center",
359
+ }), /* @__PURE__ */ x("div", {
360
+ className: "space-y-6",
361
+ children: [/* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, { children: /* @__PURE__ */ b(D, { children: "Candidates" }) }), /* @__PURE__ */ b(T, { children: Z.length === 0 ? /* @__PURE__ */ b("p", {
362
+ className: "text-sm text-text-muted",
363
+ children: "No applicants matched to this role yet."
364
+ }) : /* @__PURE__ */ b("ul", {
365
+ className: "max-h-96 space-y-1 overflow-y-auto pr-1",
366
+ children: Z.map((e) => /* @__PURE__ */ x("li", {
367
+ className: "flex items-center gap-2 rounded-[var(--radius-input)] px-2 py-2 hover:bg-bg-sunken",
316
368
  children: [
317
- /* @__PURE__ */ y(g, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
318
- /* @__PURE__ */ y("p", {
319
- className: "text-2xl font-bold tabular-nums",
320
- children: q.applicants
369
+ /* @__PURE__ */ b(I, {
370
+ name: `${e.firstName} ${e.lastName}`,
371
+ size: 30
372
+ }),
373
+ /* @__PURE__ */ x("span", {
374
+ className: "min-w-0 flex-1 truncate text-sm font-medium text-text-primary",
375
+ children: [
376
+ e.firstName,
377
+ " ",
378
+ e.lastName
379
+ ]
380
+ }),
381
+ /* @__PURE__ */ b(S, {
382
+ variant: F[e.status],
383
+ className: "shrink-0 text-[9px]",
384
+ children: t(e.status)
321
385
  }),
322
- /* @__PURE__ */ y("p", {
323
- className: "text-xs text-text-secondary",
324
- children: "Applicants"
386
+ /* @__PURE__ */ b(i, {
387
+ value: e.rating,
388
+ size: 12,
389
+ className: "shrink-0"
325
390
  })
326
391
  ]
327
- })
328
- }),
329
- /* @__PURE__ */ y(C, { children: /* @__PURE__ */ b(w, {
330
- className: "p-4 text-center",
331
- children: [
332
- /* @__PURE__ */ y(d, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
333
- /* @__PURE__ */ b("p", {
334
- className: "text-lg font-bold",
335
- children: [
336
- "$",
337
- (q.salaryMin / 1e3).toFixed(0),
338
- "K-$",
339
- (q.salaryMax / 1e3).toFixed(0),
340
- "K"
341
- ]
342
- }),
343
- /* @__PURE__ */ y("p", {
344
- className: "text-xs text-text-secondary",
345
- children: "Salary Range"
346
- })
347
- ]
348
- }) }),
349
- /* @__PURE__ */ y(C, { children: /* @__PURE__ */ b(w, {
350
- className: "p-4 text-center",
351
- children: [
352
- /* @__PURE__ */ y(l, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
353
- /* @__PURE__ */ y("p", {
354
- className: "text-lg font-bold",
355
- children: q.deadline
356
- }),
357
- /* @__PURE__ */ y("p", {
358
- className: "text-xs text-text-secondary",
359
- children: "Deadline"
360
- })
361
- ]
362
- }) }),
363
- /* @__PURE__ */ y(C, { children: /* @__PURE__ */ b(w, {
364
- className: "p-4 text-center",
365
- children: [
366
- /* @__PURE__ */ y(u, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
367
- /* @__PURE__ */ y("p", {
368
- className: "text-lg font-bold",
369
- children: t(q.experienceLevel)
370
- }),
371
- /* @__PURE__ */ y("p", {
372
- className: "text-xs text-text-secondary",
373
- children: "Level"
374
- })
375
- ]
376
- }) })
377
- ]
378
- }),
379
- /* @__PURE__ */ b(C, { children: [/* @__PURE__ */ y(E, { children: /* @__PURE__ */ y(D, { children: "Description" }) }), /* @__PURE__ */ y(w, { children: /* @__PURE__ */ y("p", {
380
- className: "text-sm text-text-secondary",
381
- children: q.description
382
- }) })] }),
383
- /* @__PURE__ */ b("div", {
384
- className: "grid gap-4 md:grid-cols-2",
385
- children: [/* @__PURE__ */ b(C, { children: [/* @__PURE__ */ y(E, { children: /* @__PURE__ */ y(D, { children: "Requirements" }) }), /* @__PURE__ */ y(w, { children: /* @__PURE__ */ y("ul", {
386
- className: "space-y-2",
387
- children: q.requirements.map((e, t) => /* @__PURE__ */ b("li", {
388
- className: "flex items-start gap-2 text-sm",
389
- children: [/* @__PURE__ */ y(u, { className: "h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0" }), e]
390
- }, t))
391
- }) })] }), /* @__PURE__ */ b(C, { children: [/* @__PURE__ */ y(E, { children: /* @__PURE__ */ y(D, { children: "Benefits" }) }), /* @__PURE__ */ y(w, { children: /* @__PURE__ */ y("ul", {
392
- className: "space-y-2",
393
- children: q.benefits.map((e, t) => /* @__PURE__ */ b("li", {
394
- className: "flex items-start gap-2 text-sm",
395
- children: [/* @__PURE__ */ y(u, { className: "h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0" }), e]
396
- }, t))
397
- }) })] })]
392
+ }, e.id))
393
+ }) })] }), /* @__PURE__ */ x(w, { children: [/* @__PURE__ */ b(E, { children: /* @__PURE__ */ b(D, { children: "Hiring funnel" }) }), /* @__PURE__ */ b(T, { children: Z.length === 0 ? /* @__PURE__ */ b("p", {
394
+ className: "text-sm text-text-muted",
395
+ children: "The funnel appears once candidates apply to this role."
396
+ }) : /* @__PURE__ */ b(r, {
397
+ stages: te,
398
+ valueFormatter: (e) => String(e),
399
+ showConversion: !0
400
+ }) })] })]
401
+ })]
398
402
  }),
399
- Q.length > 0 && /* @__PURE__ */ b(C, { children: [/* @__PURE__ */ b(E, { children: [/* @__PURE__ */ y(D, { children: "Applicants for this Role" }), /* @__PURE__ */ b(T, { children: [Q.length, " candidates"] })] }), /* @__PURE__ */ y(w, { children: /* @__PURE__ */ y(N, {
400
- data: Q,
401
- rowKey: (e) => e.id,
402
- columns: L
403
- }) })] }),
404
- /* @__PURE__ */ y(n, {
405
- open: J,
406
- onOpenChange: Y,
403
+ /* @__PURE__ */ b(a, {
404
+ open: K,
405
+ onOpenChange: q,
407
406
  title: "Edit Job Posting",
408
407
  description: "Update the role details, compensation, and status.",
409
- fields: I,
410
- initialValues: $,
408
+ fields: P,
409
+ initialValues: ne,
411
410
  submitLabel: "Save changes",
412
411
  onSubmit: async (e) => {
413
412
  let t = {
414
- title: o(e, "title"),
415
- department: o(e, "department"),
416
- location: o(e, "location"),
413
+ title: l(e, "title"),
414
+ department: l(e, "department"),
415
+ location: l(e, "location"),
417
416
  type: e.type,
418
417
  experienceLevel: e.experienceLevel,
419
418
  status: e.status,
420
- salaryMin: i(e, "salaryMin"),
421
- salaryMax: i(e, "salaryMax"),
422
- deadline: o(e, "deadline"),
423
- description: o(e, "description"),
424
- requirements: a(e, "requirements"),
425
- benefits: a(e, "benefits")
419
+ salaryMin: s(e, "salaryMin"),
420
+ salaryMax: s(e, "salaryMax"),
421
+ deadline: l(e, "deadline"),
422
+ description: l(e, "description"),
423
+ requirements: c(e, "requirements"),
424
+ benefits: c(e, "benefits")
426
425
  };
427
- await U(q.id, t), B("Job posting updated", "success");
426
+ await V(G.id, t), R("Job posting updated", "success");
428
427
  }
429
428
  }),
430
- /* @__PURE__ */ y(r, {
431
- open: X,
432
- onOpenChange: Z,
429
+ /* @__PURE__ */ b(o, {
430
+ open: J,
431
+ onOpenChange: Y,
433
432
  title: "Delete job posting",
434
- description: `Permanently remove “${q.title}”? This cannot be undone.`,
433
+ description: `Permanently remove “${G.title}”? This cannot be undone.`,
435
434
  confirmLabel: "Delete",
436
435
  destructive: !0,
437
436
  onConfirm: async () => {
438
- await W(q.id), B("Job posting deleted", "success"), R("../hiring/jobs-page");
437
+ await H(G.id), R("Job posting deleted", "success"), n("../hiring/jobs-page");
439
438
  }
440
439
  })
441
440
  ]
442
441
  });
443
442
  }
444
443
  //#endregion
445
- export { R as HiringJobDetailsPagePage };
444
+ export { L as HiringJobDetailsPagePage };
446
445
 
447
446
  //# sourceMappingURL=HiringJobDetailsPagePage.js.map