@burdenoff/microfe-crewfoundry 2026.626.1 → 2026.703.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 (82) hide show
  1. package/dist/crewfoundry/components/forms/ConfirmDialog.js +43 -0
  2. package/dist/crewfoundry/components/forms/ConfirmDialog.js.map +1 -0
  3. package/dist/crewfoundry/components/forms/FormModal.js +220 -0
  4. package/dist/crewfoundry/components/forms/FormModal.js.map +1 -0
  5. package/dist/crewfoundry/components/forms/formValues.js +20 -0
  6. package/dist/crewfoundry/components/forms/formValues.js.map +1 -0
  7. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +255 -65
  8. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +28 -17
  10. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +57 -53
  12. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +32 -23
  14. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +44 -29
  16. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +183 -57
  18. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  20. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +214 -92
  21. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  22. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +165 -131
  23. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  24. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +163 -133
  25. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  26. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +269 -54
  27. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  28. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +225 -78
  29. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  30. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +213 -59
  31. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  32. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +287 -90
  33. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  34. package/dist/crewfoundry/pages/HiringJobsPagePage.js +49 -47
  35. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  36. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +166 -59
  37. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  38. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +274 -83
  39. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  40. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +198 -88
  41. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  42. package/dist/crewfoundry/pages/HrPayrollPagePage.js +216 -88
  43. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  44. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +216 -66
  45. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  46. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +6 -7
  47. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  48. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +83 -68
  49. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  50. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +167 -46
  51. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  52. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +75 -55
  54. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +152 -79
  56. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +75 -63
  58. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +3 -1
  60. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  62. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +235 -87
  63. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  64. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +199 -86
  65. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  66. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +21 -40
  68. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +117 -45
  70. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +249 -90
  72. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +47 -45
  74. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  76. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +262 -133
  77. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  78. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +144 -77
  79. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  80. package/dist/crewfoundry/store/crewfoundryStore.js +306 -51
  81. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  82. package/package.json +1 -1
@@ -1,164 +1,324 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
- import { Briefcase as t, Calendar as n, CheckCircle as r, DollarSign as i, MapPin as a, Share2 as o, Users as s } from "lucide-react";
3
- import { useNavigate as c } from "react-router-dom";
4
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
- import { Badge as d, Button as f, Card as p, CardContent as m, CardDescription as h, CardHeader as g, CardTitle as _, GlassCard as v, GradientText as y, IllustratedEmptyState as b, NextSteps as x, PagePurpose as S } from "@burdenoff/fe-libs/ui";
2
+ import { FormModal as t } from "../components/forms/FormModal.js";
3
+ import { ConfirmDialog as n } from "../components/forms/ConfirmDialog.js";
4
+ import { getNumber as r, getTags as i, getText as a } from "../components/forms/formValues.js";
5
+ import { useState as o } from "react";
6
+ import { Briefcase as s, Calendar as c, CheckCircle as l, DollarSign as u, MapPin as d, Pencil as f, Share2 as p, Trash2 as m, Users as h } from "lucide-react";
7
+ import { useNavigate as g } from "react-router-dom";
8
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
9
+ import { Badge as y, Button as b, Card as x, CardContent as S, CardDescription as C, CardHeader as w, CardTitle as T, GlassCard as E, GradientText as D, IllustratedEmptyState as O, NextSteps as k, PagePurpose as A } from "@burdenoff/fe-libs/ui";
10
+ import { useGlobalUi as j } from "@burdenoff/fe-libs/shared/providers/shell";
6
11
  //#region src/crewfoundry/pages/HiringJobDetailsPagePage.tsx
7
- function C() {
8
- let C = c(), { jobPostings: w, candidates: T } = e(), E = w[0];
9
- if (!E) return /* @__PURE__ */ l("div", {
12
+ var M = [
13
+ {
14
+ name: "title",
15
+ label: "Job Title",
16
+ type: "text",
17
+ required: !0,
18
+ colSpan: 2
19
+ },
20
+ {
21
+ name: "department",
22
+ label: "Department",
23
+ type: "text",
24
+ required: !0
25
+ },
26
+ {
27
+ name: "location",
28
+ label: "Location",
29
+ type: "text",
30
+ required: !0
31
+ },
32
+ {
33
+ name: "type",
34
+ label: "Employment Type",
35
+ type: "select",
36
+ options: [
37
+ {
38
+ label: "Full time",
39
+ value: "full_time"
40
+ },
41
+ {
42
+ label: "Part time",
43
+ value: "part_time"
44
+ },
45
+ {
46
+ label: "Contract",
47
+ value: "contract"
48
+ },
49
+ {
50
+ label: "Remote",
51
+ value: "remote"
52
+ }
53
+ ]
54
+ },
55
+ {
56
+ name: "experienceLevel",
57
+ label: "Experience Level",
58
+ type: "select",
59
+ options: [
60
+ {
61
+ label: "Entry",
62
+ value: "entry"
63
+ },
64
+ {
65
+ label: "Mid",
66
+ value: "mid"
67
+ },
68
+ {
69
+ label: "Senior",
70
+ value: "senior"
71
+ },
72
+ {
73
+ label: "Lead",
74
+ value: "lead"
75
+ },
76
+ {
77
+ label: "Executive",
78
+ value: "executive"
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ name: "status",
84
+ label: "Status",
85
+ type: "select",
86
+ options: [
87
+ {
88
+ label: "Draft",
89
+ value: "draft"
90
+ },
91
+ {
92
+ label: "Active",
93
+ value: "active"
94
+ },
95
+ {
96
+ label: "Paused",
97
+ value: "paused"
98
+ },
99
+ {
100
+ label: "Closed",
101
+ value: "closed"
102
+ },
103
+ {
104
+ label: "Filled",
105
+ value: "filled"
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ name: "salaryMin",
111
+ label: "Salary Min ($)",
112
+ type: "number"
113
+ },
114
+ {
115
+ name: "salaryMax",
116
+ label: "Salary Max ($)",
117
+ type: "number"
118
+ },
119
+ {
120
+ name: "deadline",
121
+ label: "Application Deadline",
122
+ type: "date"
123
+ },
124
+ {
125
+ name: "description",
126
+ label: "Description",
127
+ type: "textarea",
128
+ colSpan: 2
129
+ },
130
+ {
131
+ name: "requirements",
132
+ label: "Requirements",
133
+ type: "tags"
134
+ },
135
+ {
136
+ name: "benefits",
137
+ label: "Benefits",
138
+ type: "tags"
139
+ }
140
+ ];
141
+ function N() {
142
+ let N = g(), { showToast: P } = j(), { jobPostings: F, candidates: I, updateJobPosting: L, removeJobPosting: R } = e(), z = F[0], [B, V] = o(!1), [H, U] = o(!1);
143
+ if (!z) return /* @__PURE__ */ _("div", {
10
144
  className: "p-6",
11
- children: /* @__PURE__ */ l(b, {
145
+ children: /* @__PURE__ */ _(O, {
12
146
  illustration: "empty-search",
13
147
  title: "No job posting found",
14
148
  description: "This job posting is no longer available."
15
149
  })
16
150
  });
17
- let D = T.filter((e) => e.position === E.title);
18
- return /* @__PURE__ */ u("div", {
151
+ let W = I.filter((e) => e.position === z.title), G = {
152
+ title: z.title,
153
+ department: z.department,
154
+ location: z.location,
155
+ type: z.type,
156
+ experienceLevel: z.experienceLevel,
157
+ status: z.status,
158
+ salaryMin: z.salaryMin,
159
+ salaryMax: z.salaryMax,
160
+ deadline: z.deadline,
161
+ description: z.description,
162
+ requirements: z.requirements,
163
+ benefits: z.benefits
164
+ };
165
+ return /* @__PURE__ */ v("div", {
19
166
  className: "space-y-6 p-6 max-w-4xl",
20
167
  children: [
21
- /* @__PURE__ */ u("div", {
168
+ /* @__PURE__ */ v("div", {
22
169
  className: "flex items-center justify-between",
23
- children: [/* @__PURE__ */ u("div", { children: [
24
- /* @__PURE__ */ u("div", {
170
+ children: [/* @__PURE__ */ v("div", { children: [
171
+ /* @__PURE__ */ v("div", {
25
172
  className: "flex items-center gap-2 mb-1",
26
- children: [/* @__PURE__ */ l("h1", {
173
+ children: [/* @__PURE__ */ _("h1", {
27
174
  className: "text-2xl font-semibold",
28
- children: /* @__PURE__ */ l(y, { children: E.title })
29
- }), /* @__PURE__ */ l(d, {
30
- variant: E.status === "active" ? "default" : "secondary",
31
- children: E.status
175
+ children: /* @__PURE__ */ _(D, { children: z.title })
176
+ }), /* @__PURE__ */ _(y, {
177
+ variant: z.status === "active" ? "default" : "secondary",
178
+ children: z.status
32
179
  })]
33
180
  }),
34
- /* @__PURE__ */ u("div", {
181
+ /* @__PURE__ */ v("div", {
35
182
  className: "flex items-center gap-4 text-sm text-text-secondary",
36
183
  children: [
37
- /* @__PURE__ */ u("span", {
184
+ /* @__PURE__ */ v("span", {
38
185
  className: "flex items-center gap-1",
39
- children: [/* @__PURE__ */ l(t, { className: "h-3 w-3" }), E.department]
186
+ children: [/* @__PURE__ */ _(s, { className: "h-3 w-3" }), z.department]
40
187
  }),
41
- /* @__PURE__ */ u("span", {
188
+ /* @__PURE__ */ v("span", {
42
189
  className: "flex items-center gap-1",
43
- children: [/* @__PURE__ */ l(a, { className: "h-3 w-3" }), E.location]
190
+ children: [/* @__PURE__ */ _(d, { className: "h-3 w-3" }), z.location]
44
191
  }),
45
- /* @__PURE__ */ u("span", {
192
+ /* @__PURE__ */ v("span", {
46
193
  className: "flex items-center gap-1",
47
194
  children: [
48
- /* @__PURE__ */ l(n, { className: "h-3 w-3" }),
195
+ /* @__PURE__ */ _(c, { className: "h-3 w-3" }),
49
196
  "Posted ",
50
- E.postedDate
197
+ z.postedDate
51
198
  ]
52
199
  })
53
200
  ]
54
201
  }),
55
- /* @__PURE__ */ l(S, {
202
+ /* @__PURE__ */ _(A, {
56
203
  className: "mt-2",
57
204
  children: "Everything about this role in one place — review applicants, requirements, and compensation here to decide who to interview and keep the posting current."
58
205
  })
59
- ] }), /* @__PURE__ */ u("div", {
206
+ ] }), /* @__PURE__ */ v("div", {
60
207
  className: "flex gap-2",
61
- children: [/* @__PURE__ */ u(f, {
62
- variant: "outline",
63
- size: "sm",
64
- children: [/* @__PURE__ */ l(o, { className: "h-4 w-4 mr-1" }), "Share"]
65
- }), /* @__PURE__ */ l(f, {
66
- size: "sm",
67
- children: "Edit Posting"
68
- })]
208
+ children: [
209
+ /* @__PURE__ */ v(b, {
210
+ variant: "outline",
211
+ size: "sm",
212
+ onClick: () => P("Sharing job postings is coming soon", "info"),
213
+ children: [/* @__PURE__ */ _(p, { className: "h-4 w-4 mr-1" }), "Share"]
214
+ }),
215
+ /* @__PURE__ */ v(b, {
216
+ variant: "outline",
217
+ size: "sm",
218
+ onClick: () => V(!0),
219
+ children: [/* @__PURE__ */ _(f, { className: "h-4 w-4 mr-1" }), "Edit Posting"]
220
+ }),
221
+ /* @__PURE__ */ _(b, {
222
+ variant: "destructive",
223
+ size: "sm",
224
+ "aria-label": "Delete job posting",
225
+ onClick: () => U(!0),
226
+ children: /* @__PURE__ */ _(m, { className: "h-4 w-4" })
227
+ })
228
+ ]
69
229
  })]
70
230
  }),
71
- /* @__PURE__ */ l(x, {
231
+ /* @__PURE__ */ _(k, {
72
232
  storageKey: "crewfoundry-job-details",
73
233
  steps: [
74
234
  {
75
235
  id: "applicants",
76
236
  label: "Review applicants",
77
237
  description: "Screen the candidates who applied for this role.",
78
- icon: /* @__PURE__ */ l(s, { className: "h-4 w-4" }),
79
- onClick: () => C("../../hiring/applications-page")
238
+ icon: /* @__PURE__ */ _(h, { className: "h-4 w-4" }),
239
+ onClick: () => N("../../hiring/applications-page")
80
240
  },
81
241
  {
82
242
  id: "interviews",
83
243
  label: "Schedule interviews",
84
244
  description: "Set up conversations with promising candidates.",
85
- icon: /* @__PURE__ */ l(n, { className: "h-4 w-4" }),
86
- onClick: () => C("../../hiring/interviews-page")
245
+ icon: /* @__PURE__ */ _(c, { className: "h-4 w-4" }),
246
+ onClick: () => N("../../hiring/interviews-page")
87
247
  },
88
248
  {
89
249
  id: "candidates",
90
250
  label: "Browse your talent pool",
91
251
  description: "Source more candidates that fit this position.",
92
- icon: /* @__PURE__ */ l(t, { className: "h-4 w-4" }),
93
- onClick: () => C("../../hiring/candidates-page")
252
+ icon: /* @__PURE__ */ _(s, { className: "h-4 w-4" }),
253
+ onClick: () => N("../../hiring/candidates-page")
94
254
  }
95
255
  ]
96
256
  }),
97
- /* @__PURE__ */ u("div", {
257
+ /* @__PURE__ */ v("div", {
98
258
  className: "grid gap-4 md:grid-cols-4",
99
259
  children: [
100
- /* @__PURE__ */ l(v, {
260
+ /* @__PURE__ */ _(E, {
101
261
  treatment: "glass",
102
262
  glow: !0,
103
263
  className: "border-border-seam",
104
- children: /* @__PURE__ */ u(m, {
264
+ children: /* @__PURE__ */ v(S, {
105
265
  className: "p-4 text-center",
106
266
  children: [
107
- /* @__PURE__ */ l(s, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
108
- /* @__PURE__ */ l("p", {
267
+ /* @__PURE__ */ _(h, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
268
+ /* @__PURE__ */ _("p", {
109
269
  className: "text-2xl font-bold tabular-nums",
110
- children: E.applicants
270
+ children: z.applicants
111
271
  }),
112
- /* @__PURE__ */ l("p", {
272
+ /* @__PURE__ */ _("p", {
113
273
  className: "text-xs text-text-secondary",
114
274
  children: "Applicants"
115
275
  })
116
276
  ]
117
277
  })
118
278
  }),
119
- /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
279
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
120
280
  className: "p-4 text-center",
121
281
  children: [
122
- /* @__PURE__ */ l(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
123
- /* @__PURE__ */ u("p", {
282
+ /* @__PURE__ */ _(u, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
283
+ /* @__PURE__ */ v("p", {
124
284
  className: "text-lg font-bold",
125
285
  children: [
126
286
  "$",
127
- (E.salaryMin / 1e3).toFixed(0),
287
+ (z.salaryMin / 1e3).toFixed(0),
128
288
  "K-$",
129
- (E.salaryMax / 1e3).toFixed(0),
289
+ (z.salaryMax / 1e3).toFixed(0),
130
290
  "K"
131
291
  ]
132
292
  }),
133
- /* @__PURE__ */ l("p", {
293
+ /* @__PURE__ */ _("p", {
134
294
  className: "text-xs text-text-secondary",
135
295
  children: "Salary Range"
136
296
  })
137
297
  ]
138
298
  }) }),
139
- /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
299
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
140
300
  className: "p-4 text-center",
141
301
  children: [
142
- /* @__PURE__ */ l(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
143
- /* @__PURE__ */ l("p", {
302
+ /* @__PURE__ */ _(c, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
303
+ /* @__PURE__ */ _("p", {
144
304
  className: "text-lg font-bold",
145
- children: E.deadline
305
+ children: z.deadline
146
306
  }),
147
- /* @__PURE__ */ l("p", {
307
+ /* @__PURE__ */ _("p", {
148
308
  className: "text-xs text-text-secondary",
149
309
  children: "Deadline"
150
310
  })
151
311
  ]
152
312
  }) }),
153
- /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
313
+ /* @__PURE__ */ _(x, { children: /* @__PURE__ */ v(S, {
154
314
  className: "p-4 text-center",
155
315
  children: [
156
- /* @__PURE__ */ l(r, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
157
- /* @__PURE__ */ l("p", {
316
+ /* @__PURE__ */ _(l, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
317
+ /* @__PURE__ */ _("p", {
158
318
  className: "text-lg font-bold",
159
- children: E.experienceLevel
319
+ children: z.experienceLevel
160
320
  }),
161
- /* @__PURE__ */ l("p", {
321
+ /* @__PURE__ */ _("p", {
162
322
  className: "text-xs text-text-secondary",
163
323
  children: "Level"
164
324
  })
@@ -166,48 +326,48 @@ function C() {
166
326
  }) })
167
327
  ]
168
328
  }),
169
- /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(g, { children: /* @__PURE__ */ l(_, { children: "Description" }) }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("p", {
329
+ /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ _(T, { children: "Description" }) }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("p", {
170
330
  className: "text-sm text-text-secondary",
171
- children: E.description
331
+ children: z.description
172
332
  }) })] }),
173
- /* @__PURE__ */ u("div", {
333
+ /* @__PURE__ */ v("div", {
174
334
  className: "grid gap-4 md:grid-cols-2",
175
- children: [/* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(g, { children: /* @__PURE__ */ l(_, { children: "Requirements" }) }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("ul", {
335
+ children: [/* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ _(T, { children: "Requirements" }) }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("ul", {
176
336
  className: "space-y-2",
177
- children: E.requirements.map((e, t) => /* @__PURE__ */ u("li", {
337
+ children: z.requirements.map((e, t) => /* @__PURE__ */ v("li", {
178
338
  className: "flex items-start gap-2 text-sm",
179
- children: [/* @__PURE__ */ l(r, { className: "h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0" }), e]
339
+ children: [/* @__PURE__ */ _(l, { className: "h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0" }), e]
180
340
  }, t))
181
- }) })] }), /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(g, { children: /* @__PURE__ */ l(_, { children: "Benefits" }) }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("ul", {
341
+ }) })] }), /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ _(w, { children: /* @__PURE__ */ _(T, { children: "Benefits" }) }), /* @__PURE__ */ _(S, { children: /* @__PURE__ */ _("ul", {
182
342
  className: "space-y-2",
183
- children: E.benefits.map((e, t) => /* @__PURE__ */ u("li", {
343
+ children: z.benefits.map((e, t) => /* @__PURE__ */ v("li", {
184
344
  className: "flex items-start gap-2 text-sm",
185
- children: [/* @__PURE__ */ l(r, { className: "h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0" }), e]
345
+ children: [/* @__PURE__ */ _(l, { className: "h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0" }), e]
186
346
  }, t))
187
347
  }) })] })]
188
348
  }),
189
- D.length > 0 && /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(g, { children: [/* @__PURE__ */ l(_, { children: "Applicants for this Role" }), /* @__PURE__ */ u(h, { children: [D.length, " candidates"] })] }), /* @__PURE__ */ u(m, { children: [/* @__PURE__ */ u("div", {
349
+ W.length > 0 && /* @__PURE__ */ v(x, { children: [/* @__PURE__ */ v(w, { children: [/* @__PURE__ */ _(T, { children: "Applicants for this Role" }), /* @__PURE__ */ v(C, { children: [W.length, " candidates"] })] }), /* @__PURE__ */ v(S, { children: [/* @__PURE__ */ v("div", {
190
350
  className: "grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2",
191
351
  children: [
192
- /* @__PURE__ */ l("span", { children: "Name" }),
193
- /* @__PURE__ */ l("span", { children: "Source" }),
194
- /* @__PURE__ */ l("span", {
352
+ /* @__PURE__ */ _("span", { children: "Name" }),
353
+ /* @__PURE__ */ _("span", { children: "Source" }),
354
+ /* @__PURE__ */ _("span", {
195
355
  className: "text-right",
196
356
  children: "Experience"
197
357
  }),
198
- /* @__PURE__ */ l("span", {
358
+ /* @__PURE__ */ _("span", {
199
359
  className: "text-center",
200
360
  children: "Rating"
201
361
  }),
202
- /* @__PURE__ */ l("span", {
362
+ /* @__PURE__ */ _("span", {
203
363
  className: "text-center",
204
364
  children: "Status"
205
365
  })
206
366
  ]
207
- }), D.map((e) => /* @__PURE__ */ u("div", {
367
+ }), W.map((e) => /* @__PURE__ */ v("div", {
208
368
  className: "grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm",
209
369
  children: [
210
- /* @__PURE__ */ u("span", {
370
+ /* @__PURE__ */ v("span", {
211
371
  className: "font-medium",
212
372
  children: [
213
373
  e.firstName,
@@ -215,32 +375,69 @@ function C() {
215
375
  e.lastName
216
376
  ]
217
377
  }),
218
- /* @__PURE__ */ l("span", {
378
+ /* @__PURE__ */ _("span", {
219
379
  className: "text-text-secondary",
220
380
  children: e.source
221
381
  }),
222
- /* @__PURE__ */ u("span", {
382
+ /* @__PURE__ */ v("span", {
223
383
  className: "text-right",
224
384
  children: [e.experience, " yrs"]
225
385
  }),
226
- /* @__PURE__ */ u("div", {
386
+ /* @__PURE__ */ v("div", {
227
387
  className: "text-center",
228
388
  children: [e.rating, "/5"]
229
389
  }),
230
- /* @__PURE__ */ l("div", {
390
+ /* @__PURE__ */ _("div", {
231
391
  className: "text-center",
232
- children: /* @__PURE__ */ l(d, {
392
+ children: /* @__PURE__ */ _(y, {
233
393
  variant: e.status === "hired" ? "default" : "secondary",
234
394
  className: "text-[10px]",
235
395
  children: e.status
236
396
  })
237
397
  })
238
398
  ]
239
- }, e.id))] })] })
399
+ }, e.id))] })] }),
400
+ /* @__PURE__ */ _(t, {
401
+ open: B,
402
+ onOpenChange: V,
403
+ title: "Edit Job Posting",
404
+ description: "Update the role details, compensation, and status.",
405
+ fields: M,
406
+ initialValues: G,
407
+ submitLabel: "Save changes",
408
+ onSubmit: async (e) => {
409
+ let t = {
410
+ title: a(e, "title"),
411
+ department: a(e, "department"),
412
+ location: a(e, "location"),
413
+ type: e.type,
414
+ experienceLevel: e.experienceLevel,
415
+ status: e.status,
416
+ salaryMin: r(e, "salaryMin"),
417
+ salaryMax: r(e, "salaryMax"),
418
+ deadline: a(e, "deadline"),
419
+ description: a(e, "description"),
420
+ requirements: i(e, "requirements"),
421
+ benefits: i(e, "benefits")
422
+ };
423
+ await L(z.id, t), P("Job posting updated", "success");
424
+ }
425
+ }),
426
+ /* @__PURE__ */ _(n, {
427
+ open: H,
428
+ onOpenChange: U,
429
+ title: "Delete job posting",
430
+ description: `Permanently remove “${z.title}”? This cannot be undone.`,
431
+ confirmLabel: "Delete",
432
+ destructive: !0,
433
+ onConfirm: async () => {
434
+ await R(z.id), P("Job posting deleted", "success"), N("../jobs-page");
435
+ }
436
+ })
240
437
  ]
241
438
  });
242
439
  }
243
440
  //#endregion
244
- export { C as HiringJobDetailsPagePage };
441
+ export { N as HiringJobDetailsPagePage };
245
442
 
246
443
  //# sourceMappingURL=HiringJobDetailsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HiringJobDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringJobDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { Briefcase, Calendar, CheckCircle, DollarSign, MapPin, Share2, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function HiringJobDetailsPagePage() {\n const navigate = useNavigate();\n const { jobPostings, candidates } = useCrewFoundryStore();\n const job = jobPostings[0]; // Show first job as detail view\n\n if (!job) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No job posting found\"\n description=\"This job posting is no longer available.\"\n />\n </div>\n );\n }\n\n const jobCandidates = candidates.filter((c) => c.position === job.title);\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{job.title}</GradientText>\n </h1>\n <Badge variant={job.status === 'active' ? 'default' : 'secondary'}>{job.status}</Badge>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" />\n {job.department}\n </span>\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {job.location}\n </span>\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n Posted {job.postedDate}\n </span>\n </div>\n <PagePurpose className=\"mt-2\">\n Everything about this role in one place — review applicants, requirements, and\n compensation here to decide who to interview and keep the posting current.\n </PagePurpose>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Share2 className=\"h-4 w-4 mr-1\" />\n Share\n </Button>\n <Button size=\"sm\">Edit Posting</Button>\n </div>\n </div>\n\n <NextSteps\n storageKey=\"crewfoundry-job-details\"\n steps={[\n {\n id: 'applicants',\n label: 'Review applicants',\n description: 'Screen the candidates who applied for this role.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/applications-page'),\n },\n {\n id: 'interviews',\n label: 'Schedule interviews',\n description: 'Set up conversations with promising candidates.',\n icon: <Calendar className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/interviews-page'),\n },\n {\n id: 'candidates',\n label: 'Browse your talent pool',\n description: 'Source more candidates that fit this position.',\n icon: <Briefcase className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/candidates-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-2xl font-bold tabular-nums\">{job.applicants}</p>\n <p className=\"text-xs text-text-secondary\">Applicants</p>\n </CardContent>\n </GlassCard>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">\n ${(job.salaryMin / 1000).toFixed(0)}K-${(job.salaryMax / 1000).toFixed(0)}K\n </p>\n <p className=\"text-xs text-text-secondary\">Salary Range</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{job.deadline}</p>\n <p className=\"text-xs text-text-secondary\">Deadline</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <CheckCircle className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{job.experienceLevel}</p>\n <p className=\"text-xs text-text-secondary\">Level</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{job.description}</p>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Requirements</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.requirements.map((req, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0\" />\n {req}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Benefits</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.benefits.map((ben, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0\" />\n {ben}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n </div>\n\n {jobCandidates.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Applicants for this Role</CardTitle>\n <CardDescription>{jobCandidates.length} candidates</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Name</span>\n <span>Source</span>\n <span className=\"text-right\">Experience</span>\n <span className=\"text-center\">Rating</span>\n <span className=\"text-center\">Status</span>\n </div>\n {jobCandidates.map((c) => (\n <div\n key={c.id}\n className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">\n {c.firstName} {c.lastName}\n </span>\n <span className=\"text-text-secondary\">{c.source}</span>\n <span className=\"text-right\">{c.experience} yrs</span>\n <div className=\"text-center\">{c.rating}/5</div>\n <div className=\"text-center\">\n <Badge\n variant={c.status === 'hired' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {c.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"HiringJobDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/HiringJobDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useState } from 'react';\nimport {\n Briefcase,\n Calendar,\n CheckCircle,\n DollarSign,\n MapPin,\n Pencil,\n Share2,\n Trash2,\n Users,\n} from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useCrewFoundryStore, type JobPosting } from '../store/crewfoundryStore';\nimport { FormModal, type FieldConfig, type FormValues } from '../components/forms/FormModal';\nimport { ConfirmDialog } from '../components/forms/ConfirmDialog';\nimport { getNumber, getTags, getText } from '../components/forms/formValues';\n\nconst JOB_FIELDS: FieldConfig[] = [\n { name: 'title', label: 'Job Title', type: 'text', required: true, colSpan: 2 },\n { name: 'department', label: 'Department', type: 'text', required: true },\n { name: 'location', label: 'Location', type: 'text', required: true },\n {\n name: 'type',\n label: 'Employment Type',\n type: 'select',\n options: [\n { label: 'Full time', value: 'full_time' },\n { label: 'Part time', value: 'part_time' },\n { label: 'Contract', value: 'contract' },\n { label: 'Remote', value: 'remote' },\n ],\n },\n {\n name: 'experienceLevel',\n label: 'Experience Level',\n type: 'select',\n options: [\n { label: 'Entry', value: 'entry' },\n { label: 'Mid', value: 'mid' },\n { label: 'Senior', value: 'senior' },\n { label: 'Lead', value: 'lead' },\n { label: 'Executive', value: 'executive' },\n ],\n },\n {\n name: 'status',\n label: 'Status',\n type: 'select',\n options: [\n { label: 'Draft', value: 'draft' },\n { label: 'Active', value: 'active' },\n { label: 'Paused', value: 'paused' },\n { label: 'Closed', value: 'closed' },\n { label: 'Filled', value: 'filled' },\n ],\n },\n { name: 'salaryMin', label: 'Salary Min ($)', type: 'number' },\n { name: 'salaryMax', label: 'Salary Max ($)', type: 'number' },\n { name: 'deadline', label: 'Application Deadline', type: 'date' },\n { name: 'description', label: 'Description', type: 'textarea', colSpan: 2 },\n { name: 'requirements', label: 'Requirements', type: 'tags' },\n { name: 'benefits', label: 'Benefits', type: 'tags' },\n];\n\nexport function HiringJobDetailsPagePage() {\n const navigate = useNavigate();\n const { showToast } = useGlobalUi();\n const { jobPostings, candidates, updateJobPosting, removeJobPosting } = useCrewFoundryStore();\n const job = jobPostings[0]; // Show first job as detail view\n const [editOpen, setEditOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n if (!job) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No job posting found\"\n description=\"This job posting is no longer available.\"\n />\n </div>\n );\n }\n\n const jobCandidates = candidates.filter((c) => c.position === job.title);\n\n const editInitial: FormValues = {\n title: job.title,\n department: job.department,\n location: job.location,\n type: job.type,\n experienceLevel: job.experienceLevel,\n status: job.status,\n salaryMin: job.salaryMin,\n salaryMax: job.salaryMax,\n deadline: job.deadline,\n description: job.description,\n requirements: job.requirements,\n benefits: job.benefits,\n };\n\n const handleEditSubmit = async (values: FormValues) => {\n const updates: Partial<JobPosting> = {\n title: getText(values, 'title'),\n department: getText(values, 'department'),\n location: getText(values, 'location'),\n type: values.type as JobPosting['type'],\n experienceLevel: values.experienceLevel as JobPosting['experienceLevel'],\n status: values.status as JobPosting['status'],\n salaryMin: getNumber(values, 'salaryMin'),\n salaryMax: getNumber(values, 'salaryMax'),\n deadline: getText(values, 'deadline'),\n description: getText(values, 'description'),\n requirements: getTags(values, 'requirements'),\n benefits: getTags(values, 'benefits'),\n };\n await updateJobPosting(job.id, updates);\n showToast('Job posting updated', 'success');\n };\n\n const handleDelete = async () => {\n await removeJobPosting(job.id);\n showToast('Job posting deleted', 'success');\n navigate('../jobs-page');\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{job.title}</GradientText>\n </h1>\n <Badge variant={job.status === 'active' ? 'default' : 'secondary'}>{job.status}</Badge>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <Briefcase className=\"h-3 w-3\" />\n {job.department}\n </span>\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {job.location}\n </span>\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n Posted {job.postedDate}\n </span>\n </div>\n <PagePurpose className=\"mt-2\">\n Everything about this role in one place — review applicants, requirements, and\n compensation here to decide who to interview and keep the posting current.\n </PagePurpose>\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => showToast('Sharing job postings is coming soon', 'info')}\n >\n <Share2 className=\"h-4 w-4 mr-1\" />\n Share\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setEditOpen(true)}>\n <Pencil className=\"h-4 w-4 mr-1\" />\n Edit Posting\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n aria-label=\"Delete job posting\"\n onClick={() => setDeleteOpen(true)}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n <NextSteps\n storageKey=\"crewfoundry-job-details\"\n steps={[\n {\n id: 'applicants',\n label: 'Review applicants',\n description: 'Screen the candidates who applied for this role.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/applications-page'),\n },\n {\n id: 'interviews',\n label: 'Schedule interviews',\n description: 'Set up conversations with promising candidates.',\n icon: <Calendar className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/interviews-page'),\n },\n {\n id: 'candidates',\n label: 'Browse your talent pool',\n description: 'Source more candidates that fit this position.',\n icon: <Briefcase className=\"h-4 w-4\" />,\n onClick: () => navigate('../../hiring/candidates-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-2xl font-bold tabular-nums\">{job.applicants}</p>\n <p className=\"text-xs text-text-secondary\">Applicants</p>\n </CardContent>\n </GlassCard>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <DollarSign className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">\n ${(job.salaryMin / 1000).toFixed(0)}K-${(job.salaryMax / 1000).toFixed(0)}K\n </p>\n <p className=\"text-xs text-text-secondary\">Salary Range</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Calendar className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{job.deadline}</p>\n <p className=\"text-xs text-text-secondary\">Deadline</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <CheckCircle className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{job.experienceLevel}</p>\n <p className=\"text-xs text-text-secondary\">Level</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Description</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary\">{job.description}</p>\n </CardContent>\n </Card>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle>Requirements</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.requirements.map((req, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-status-success-text mt-0.5 flex-shrink-0\" />\n {req}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle>Benefits</CardTitle>\n </CardHeader>\n <CardContent>\n <ul className=\"space-y-2\">\n {job.benefits.map((ben, idx) => (\n <li key={idx} className=\"flex items-start gap-2 text-sm\">\n <CheckCircle className=\"h-4 w-4 text-status-info-text mt-0.5 flex-shrink-0\" />\n {ben}\n </li>\n ))}\n </ul>\n </CardContent>\n </Card>\n </div>\n\n {jobCandidates.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Applicants for this Role</CardTitle>\n <CardDescription>{jobCandidates.length} candidates</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-5 gap-2 text-xs font-medium text-text-secondary border-b pb-2 mb-2\">\n <span>Name</span>\n <span>Source</span>\n <span className=\"text-right\">Experience</span>\n <span className=\"text-center\">Rating</span>\n <span className=\"text-center\">Status</span>\n </div>\n {jobCandidates.map((c) => (\n <div\n key={c.id}\n className=\"grid grid-cols-5 gap-2 py-2 border-b last:border-0 text-sm\"\n >\n <span className=\"font-medium\">\n {c.firstName} {c.lastName}\n </span>\n <span className=\"text-text-secondary\">{c.source}</span>\n <span className=\"text-right\">{c.experience} yrs</span>\n <div className=\"text-center\">{c.rating}/5</div>\n <div className=\"text-center\">\n <Badge\n variant={c.status === 'hired' ? 'default' : 'secondary'}\n className=\"text-[10px]\"\n >\n {c.status}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n )}\n\n <FormModal\n open={editOpen}\n onOpenChange={setEditOpen}\n title=\"Edit Job Posting\"\n description=\"Update the role details, compensation, and status.\"\n fields={JOB_FIELDS}\n initialValues={editInitial}\n submitLabel=\"Save changes\"\n onSubmit={handleEditSubmit}\n />\n <ConfirmDialog\n open={deleteOpen}\n onOpenChange={setDeleteOpen}\n title=\"Delete job posting\"\n description={`Permanently remove “${job.title}”? This cannot be undone.`}\n confirmLabel=\"Delete\"\n destructive\n onConfirm={handleDelete}\n />\n </div>\n );\n}\n"],"mappings":"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"}