@burdenoff/microfe-crewfoundry 2026.1030.3 → 2026.1030.4
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.
- package/dist/crewfoundry/CrewFoundryRoutes.d.ts.map +1 -1
- package/dist/crewfoundry/CrewFoundryRoutes.js +18 -14
- package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
- package/dist/crewfoundry/components/EmployeeSkillsPanel.d.ts +9 -0
- package/dist/crewfoundry/components/EmployeeSkillsPanel.d.ts.map +1 -1
- package/dist/crewfoundry/components/EmployeeSkillsPanel.js +111 -77
- package/dist/crewfoundry/components/EmployeeSkillsPanel.js.map +1 -1
- package/dist/crewfoundry/components/skills/FindPeopleBySkillCard.d.ts +13 -0
- package/dist/crewfoundry/components/skills/FindPeopleBySkillCard.d.ts.map +1 -0
- package/dist/crewfoundry/components/skills/FindPeopleBySkillCard.js +128 -0
- package/dist/crewfoundry/components/skills/FindPeopleBySkillCard.js.map +1 -0
- package/dist/crewfoundry/components/skills/MergeSkillDialog.d.ts +15 -0
- package/dist/crewfoundry/components/skills/MergeSkillDialog.d.ts.map +1 -0
- package/dist/crewfoundry/components/skills/MergeSkillDialog.js +58 -0
- package/dist/crewfoundry/components/skills/MergeSkillDialog.js.map +1 -0
- package/dist/crewfoundry/components/skills/RoleSkillMatchPanel.d.ts +15 -0
- package/dist/crewfoundry/components/skills/RoleSkillMatchPanel.d.ts.map +1 -0
- package/dist/crewfoundry/components/skills/RoleSkillMatchPanel.js +163 -0
- package/dist/crewfoundry/components/skills/RoleSkillMatchPanel.js.map +1 -0
- package/dist/crewfoundry/components/skills/SkillPicker.d.ts +20 -0
- package/dist/crewfoundry/components/skills/SkillPicker.d.ts.map +1 -0
- package/dist/crewfoundry/components/skills/SkillPicker.js +73 -0
- package/dist/crewfoundry/components/skills/SkillPicker.js.map +1 -0
- package/dist/crewfoundry/components/skills/SkillRelationsDialog.d.ts +13 -0
- package/dist/crewfoundry/components/skills/SkillRelationsDialog.d.ts.map +1 -0
- package/dist/crewfoundry/components/skills/SkillRelationsDialog.js +156 -0
- package/dist/crewfoundry/components/skills/SkillRelationsDialog.js.map +1 -0
- package/dist/crewfoundry/lib/analytics.d.ts +1 -29
- package/dist/crewfoundry/lib/analytics.d.ts.map +1 -1
- package/dist/crewfoundry/lib/analytics.js +3 -48
- package/dist/crewfoundry/lib/analytics.js.map +1 -1
- package/dist/crewfoundry/lib/skillMatching.d.ts +70 -0
- package/dist/crewfoundry/lib/skillMatching.d.ts.map +1 -0
- package/dist/crewfoundry/lib/skillMatching.js +73 -0
- package/dist/crewfoundry/lib/skillMatching.js.map +1 -0
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +210 -177
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js +6 -6
- package/dist/crewfoundry/pages/HrSkillsTaxonomyPagePage.d.ts +9 -0
- package/dist/crewfoundry/pages/HrSkillsTaxonomyPagePage.d.ts.map +1 -0
- package/dist/crewfoundry/pages/HrSkillsTaxonomyPagePage.js +456 -0
- package/dist/crewfoundry/pages/HrSkillsTaxonomyPagePage.js.map +1 -0
- package/dist/crewfoundry/pages/ProjectsResourcingPagePage.d.ts.map +1 -1
- package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js +50 -102
- package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.d.ts +101 -0
- package/dist/crewfoundry/store/crewfoundryStore.d.ts.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.js +161 -57
- package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,16 +6,17 @@ import { RatingStars as i } from "../components/viz/RatingStars.js";
|
|
|
6
6
|
import "../components/viz/index.js";
|
|
7
7
|
import { FormModal as a } from "../components/forms/FormModal.js";
|
|
8
8
|
import { useFocusedRecordParam as o } from "../lib/useFocusedRecordParam.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
9
|
+
import { CandidateSkillsPanel as s } from "../components/EmployeeSkillsPanel.js";
|
|
10
|
+
import { ConfirmDialog as c } from "../components/forms/ConfirmDialog.js";
|
|
11
|
+
import { getNumber as l, getTags as u, getText as d, newClientId as f } from "../components/forms/formValues.js";
|
|
12
|
+
import { useMemo as p, useState as m } from "react";
|
|
13
|
+
import { ArrowRightLeft as h, Gauge as g, LayoutGrid as ee, Pencil as _, Plus as te, Search as ne, Table2 as v, Trash2 as y } from "lucide-react";
|
|
14
|
+
import { jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
15
|
+
import { Badge as S, Button as C, CardContent as w, DropdownMenu as T, DropdownMenuContent as E, DropdownMenuItem as D, DropdownMenuLabel as O, DropdownMenuSeparator as k, DropdownMenuTrigger as A, GlassCard as j, GradientText as M, IllustratedEmptyState as N, Input as re, PagePurpose as ie, Pagination as ae, ResponsiveDialog as oe, ResponsiveDialogContent as se, ResponsiveDialogDescription as ce, ResponsiveDialogHeader as le, ResponsiveDialogTitle as ue, ResponsiveTable as P } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { usePagination as F } from "@burdenoff/fe-libs/shared/hooks";
|
|
17
|
+
import { useGlobalUi as I } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
17
18
|
//#region src/crewfoundry/pages/HiringCandidatesPagePage.tsx
|
|
18
|
-
var
|
|
19
|
+
var L = [
|
|
19
20
|
{
|
|
20
21
|
label: "New",
|
|
21
22
|
value: "new"
|
|
@@ -44,7 +45,7 @@ var I = [
|
|
|
44
45
|
label: "Rejected",
|
|
45
46
|
value: "rejected"
|
|
46
47
|
}
|
|
47
|
-
],
|
|
48
|
+
], R = [
|
|
48
49
|
{
|
|
49
50
|
key: "new",
|
|
50
51
|
label: "New",
|
|
@@ -80,7 +81,7 @@ var I = [
|
|
|
80
81
|
label: "Rejected",
|
|
81
82
|
accent: "var(--color-status-error-text)"
|
|
82
83
|
}
|
|
83
|
-
],
|
|
84
|
+
], z = [
|
|
84
85
|
{
|
|
85
86
|
name: "firstName",
|
|
86
87
|
label: "First Name",
|
|
@@ -116,7 +117,7 @@ var I = [
|
|
|
116
117
|
label: "Status",
|
|
117
118
|
type: "select",
|
|
118
119
|
required: !0,
|
|
119
|
-
options:
|
|
120
|
+
options: L
|
|
120
121
|
},
|
|
121
122
|
{
|
|
122
123
|
name: "source",
|
|
@@ -163,7 +164,7 @@ var I = [
|
|
|
163
164
|
type: "textarea",
|
|
164
165
|
colSpan: 2
|
|
165
166
|
}
|
|
166
|
-
],
|
|
167
|
+
], B = (e) => ({
|
|
167
168
|
firstName: e.firstName,
|
|
168
169
|
lastName: e.lastName,
|
|
169
170
|
email: e.email,
|
|
@@ -178,27 +179,27 @@ var I = [
|
|
|
178
179
|
resumeUrl: e.resumeUrl ?? "",
|
|
179
180
|
skills: e.skills,
|
|
180
181
|
notes: e.notes
|
|
181
|
-
}),
|
|
182
|
-
let t =
|
|
182
|
+
}), V = (e) => {
|
|
183
|
+
let t = d(e, "appliedDate");
|
|
183
184
|
return {
|
|
184
|
-
firstName:
|
|
185
|
-
lastName:
|
|
186
|
-
email:
|
|
187
|
-
phone:
|
|
188
|
-
position:
|
|
185
|
+
firstName: d(e, "firstName"),
|
|
186
|
+
lastName: d(e, "lastName"),
|
|
187
|
+
email: d(e, "email"),
|
|
188
|
+
phone: d(e, "phone"),
|
|
189
|
+
position: d(e, "position"),
|
|
189
190
|
status: e.status,
|
|
190
|
-
source:
|
|
191
|
-
experience:
|
|
192
|
-
currentCompany:
|
|
193
|
-
rating:
|
|
191
|
+
source: d(e, "source"),
|
|
192
|
+
experience: l(e, "experience"),
|
|
193
|
+
currentCompany: d(e, "currentCompany"),
|
|
194
|
+
rating: l(e, "rating"),
|
|
194
195
|
appliedDate: t.trim() === "" ? (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) : t,
|
|
195
|
-
resumeUrl:
|
|
196
|
-
skills:
|
|
197
|
-
notes:
|
|
196
|
+
resumeUrl: d(e, "resumeUrl"),
|
|
197
|
+
skills: u(e, "skills"),
|
|
198
|
+
notes: d(e, "notes")
|
|
198
199
|
};
|
|
199
200
|
};
|
|
200
|
-
function
|
|
201
|
-
return /* @__PURE__ */
|
|
201
|
+
function H({ name: e, size: t = 36 }) {
|
|
202
|
+
return /* @__PURE__ */ b("span", {
|
|
202
203
|
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",
|
|
203
204
|
style: {
|
|
204
205
|
width: t,
|
|
@@ -209,24 +210,24 @@ function V({ name: e, size: t = 36 }) {
|
|
|
209
210
|
children: n(e)
|
|
210
211
|
});
|
|
211
212
|
}
|
|
212
|
-
var
|
|
213
|
+
var de = [
|
|
213
214
|
{
|
|
214
215
|
key: "name",
|
|
215
216
|
header: "Name",
|
|
216
217
|
priority: "primary",
|
|
217
|
-
cell: (e) => /* @__PURE__ */
|
|
218
|
+
cell: (e) => /* @__PURE__ */ x("div", {
|
|
218
219
|
className: "flex items-center gap-2",
|
|
219
|
-
children: [/* @__PURE__ */
|
|
220
|
+
children: [/* @__PURE__ */ b(H, {
|
|
220
221
|
name: `${e.firstName} ${e.lastName}`,
|
|
221
222
|
size: 30
|
|
222
|
-
}), /* @__PURE__ */
|
|
223
|
+
}), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("p", {
|
|
223
224
|
className: "font-medium",
|
|
224
225
|
children: [
|
|
225
226
|
e.firstName,
|
|
226
227
|
" ",
|
|
227
228
|
e.lastName
|
|
228
229
|
]
|
|
229
|
-
}), /* @__PURE__ */
|
|
230
|
+
}), /* @__PURE__ */ b("p", {
|
|
230
231
|
className: "text-xs text-text-secondary",
|
|
231
232
|
children: e.email
|
|
232
233
|
})] })]
|
|
@@ -236,7 +237,7 @@ var H = [
|
|
|
236
237
|
key: "position",
|
|
237
238
|
header: "Position",
|
|
238
239
|
priority: "secondary",
|
|
239
|
-
cell: (e) => /* @__PURE__ */
|
|
240
|
+
cell: (e) => /* @__PURE__ */ b("span", {
|
|
240
241
|
className: "text-text-secondary",
|
|
241
242
|
children: e.position
|
|
242
243
|
})
|
|
@@ -245,7 +246,7 @@ var H = [
|
|
|
245
246
|
key: "source",
|
|
246
247
|
header: "Source",
|
|
247
248
|
priority: "secondary",
|
|
248
|
-
cell: (e) => /* @__PURE__ */
|
|
249
|
+
cell: (e) => /* @__PURE__ */ b(S, {
|
|
249
250
|
variant: "outline",
|
|
250
251
|
className: "w-fit h-fit text-[10px]",
|
|
251
252
|
children: e.source
|
|
@@ -255,13 +256,13 @@ var H = [
|
|
|
255
256
|
key: "experience",
|
|
256
257
|
header: "Experience",
|
|
257
258
|
priority: "secondary",
|
|
258
|
-
cell: (e) => /* @__PURE__ */
|
|
259
|
+
cell: (e) => /* @__PURE__ */ x("span", { children: [e.experience, " yrs"] })
|
|
259
260
|
},
|
|
260
261
|
{
|
|
261
262
|
key: "rating",
|
|
262
263
|
header: "Rating",
|
|
263
264
|
priority: "secondary",
|
|
264
|
-
cell: (e) => /* @__PURE__ */
|
|
265
|
+
cell: (e) => /* @__PURE__ */ b(i, {
|
|
265
266
|
value: e.rating,
|
|
266
267
|
size: 13
|
|
267
268
|
})
|
|
@@ -270,7 +271,7 @@ var H = [
|
|
|
270
271
|
key: "applied",
|
|
271
272
|
header: "Applied",
|
|
272
273
|
priority: "hidden-on-mobile",
|
|
273
|
-
cell: (e) => /* @__PURE__ */
|
|
274
|
+
cell: (e) => /* @__PURE__ */ b("span", {
|
|
274
275
|
className: "text-text-secondary text-xs",
|
|
275
276
|
children: e.appliedDate
|
|
276
277
|
})
|
|
@@ -279,7 +280,7 @@ var H = [
|
|
|
279
280
|
key: "status",
|
|
280
281
|
header: "Status",
|
|
281
282
|
priority: "secondary",
|
|
282
|
-
cell: (e) => /* @__PURE__ */
|
|
283
|
+
cell: (e) => /* @__PURE__ */ b(S, {
|
|
283
284
|
variant: e.status === "hired" || e.status === "offer" ? "default" : e.status === "rejected" ? "destructive" : "secondary",
|
|
284
285
|
className: "text-[10px]",
|
|
285
286
|
children: t(e.status)
|
|
@@ -287,287 +288,319 @@ var H = [
|
|
|
287
288
|
}
|
|
288
289
|
];
|
|
289
290
|
function U() {
|
|
290
|
-
let { showToast: n } =
|
|
291
|
+
let { showToast: n } = I(), { candidates: i, addCandidate: l, updateCandidate: u, removeCandidate: d } = e(), [h, S] = m(""), [T, E] = m("board"), [D, O] = m("all"), { page: k, pageSize: A, offset: L, setPage: H } = F({ initialPageSize: 25 }), [U, W] = m(!1), [G, K] = m(null), [q, J] = m(null), [Y, X] = m(null);
|
|
291
292
|
o({
|
|
292
293
|
records: i,
|
|
293
|
-
activeId:
|
|
294
|
-
onRestore:
|
|
294
|
+
activeId: G?.id ?? null,
|
|
295
|
+
onRestore: K
|
|
295
296
|
});
|
|
296
|
-
let
|
|
297
|
-
await
|
|
298
|
-
id:
|
|
299
|
-
...
|
|
297
|
+
let pe = async (e) => {
|
|
298
|
+
await l({
|
|
299
|
+
id: f(),
|
|
300
|
+
...V(e)
|
|
300
301
|
}), n("Candidate added", "success");
|
|
301
|
-
},
|
|
302
|
-
|
|
303
|
-
},
|
|
304
|
-
|
|
305
|
-
},
|
|
302
|
+
}, me = async (e) => {
|
|
303
|
+
G && (await u(G.id, V(e)), n("Candidate updated", "success"));
|
|
304
|
+
}, he = async () => {
|
|
305
|
+
q && (await d(q.id), n("Candidate removed", "success"));
|
|
306
|
+
}, ge = async (e, r) => {
|
|
306
307
|
if (e.status !== r) try {
|
|
307
|
-
await
|
|
308
|
+
await u(e.id, { status: r }), n(`${e.firstName} ${e.lastName} moved to ${t(r)}`, "success");
|
|
308
309
|
} catch {
|
|
309
310
|
n("Could not move candidate", "error");
|
|
310
311
|
}
|
|
311
|
-
},
|
|
312
|
-
let t =
|
|
312
|
+
}, Z = h.toLowerCase(), Q = p(() => i.filter((e) => `${e.firstName} ${e.lastName} ${e.position} ${e.email}`.toLowerCase().includes(Z)), [i, Z]), $ = Q.filter((e) => D === "all" || e.status === D), _e = $.slice(L, L + A), ve = R.map((e) => {
|
|
313
|
+
let t = Q.filter((t) => t.status === e.key).sort((e, t) => t.rating - e.rating);
|
|
313
314
|
return {
|
|
314
315
|
id: e.key,
|
|
315
316
|
title: e.label,
|
|
316
317
|
accent: e.accent,
|
|
317
|
-
items: t.map((e) => /* @__PURE__ */
|
|
318
|
+
items: t.map((e) => /* @__PURE__ */ b(fe, {
|
|
318
319
|
candidate: e,
|
|
319
|
-
onMove:
|
|
320
|
-
onEdit: () =>
|
|
321
|
-
|
|
320
|
+
onMove: ge,
|
|
321
|
+
onEdit: () => K(e),
|
|
322
|
+
onSkills: () => X(e),
|
|
323
|
+
onDelete: () => J(e)
|
|
322
324
|
}, e.id))
|
|
323
325
|
};
|
|
324
326
|
});
|
|
325
|
-
return /* @__PURE__ */
|
|
327
|
+
return /* @__PURE__ */ x("div", {
|
|
326
328
|
className: "space-y-6 p-6",
|
|
327
329
|
children: [
|
|
328
|
-
/* @__PURE__ */
|
|
330
|
+
/* @__PURE__ */ x("div", {
|
|
329
331
|
className: "flex flex-wrap items-start justify-between gap-3",
|
|
330
|
-
children: [/* @__PURE__ */
|
|
331
|
-
/* @__PURE__ */
|
|
332
|
+
children: [/* @__PURE__ */ x("div", { children: [
|
|
333
|
+
/* @__PURE__ */ b("h1", {
|
|
332
334
|
className: "text-2xl font-semibold",
|
|
333
|
-
children: /* @__PURE__ */
|
|
335
|
+
children: /* @__PURE__ */ b(M, { children: "Candidate Pipeline" })
|
|
334
336
|
}),
|
|
335
|
-
/* @__PURE__ */
|
|
337
|
+
/* @__PURE__ */ x("p", {
|
|
336
338
|
className: "text-sm text-text-secondary",
|
|
337
339
|
children: [i.length, " candidates in pipeline"]
|
|
338
340
|
}),
|
|
339
|
-
/* @__PURE__ */
|
|
341
|
+
/* @__PURE__ */ b(ie, {
|
|
340
342
|
className: "mt-1",
|
|
341
343
|
children: "Track every candidate as they move through your hiring stages — drag work through New, Screening, Interview, Assessment, Offer, and Hired to keep the pipeline flowing."
|
|
342
344
|
})
|
|
343
|
-
] }), /* @__PURE__ */
|
|
345
|
+
] }), /* @__PURE__ */ x(C, {
|
|
344
346
|
size: "sm",
|
|
345
|
-
onClick: () =>
|
|
346
|
-
children: [/* @__PURE__ */
|
|
347
|
+
onClick: () => W(!0),
|
|
348
|
+
children: [/* @__PURE__ */ b(te, { className: "h-4 w-4 mr-1" }), "Add Candidate"]
|
|
347
349
|
})]
|
|
348
350
|
}),
|
|
349
|
-
/* @__PURE__ */
|
|
351
|
+
/* @__PURE__ */ x("div", {
|
|
350
352
|
className: "flex flex-wrap items-center gap-3",
|
|
351
|
-
children: [/* @__PURE__ */
|
|
353
|
+
children: [/* @__PURE__ */ x("div", {
|
|
352
354
|
className: "relative flex-1 min-w-[12rem] max-w-sm",
|
|
353
|
-
children: [/* @__PURE__ */
|
|
355
|
+
children: [/* @__PURE__ */ b(ne, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ b(re, {
|
|
354
356
|
placeholder: "Search candidates...",
|
|
355
357
|
className: "pl-9",
|
|
356
|
-
value:
|
|
358
|
+
value: h,
|
|
357
359
|
onChange: (e) => {
|
|
358
|
-
|
|
360
|
+
S(e.target.value), H(1);
|
|
359
361
|
}
|
|
360
362
|
})]
|
|
361
|
-
}), /* @__PURE__ */
|
|
363
|
+
}), /* @__PURE__ */ x("div", {
|
|
362
364
|
className: "inline-flex items-center gap-1 rounded-full border border-border-subtle bg-bg-sunken p-1",
|
|
363
|
-
children: [/* @__PURE__ */
|
|
364
|
-
variant:
|
|
365
|
+
children: [/* @__PURE__ */ x(C, {
|
|
366
|
+
variant: T === "board" ? "default" : "ghost",
|
|
365
367
|
size: "sm",
|
|
366
368
|
className: "rounded-full",
|
|
367
|
-
onClick: () =>
|
|
368
|
-
children: [/* @__PURE__ */
|
|
369
|
-
}), /* @__PURE__ */
|
|
370
|
-
variant:
|
|
369
|
+
onClick: () => E("board"),
|
|
370
|
+
children: [/* @__PURE__ */ b(ee, { className: "h-4 w-4 mr-1" }), "Board"]
|
|
371
|
+
}), /* @__PURE__ */ x(C, {
|
|
372
|
+
variant: T === "table" ? "default" : "ghost",
|
|
371
373
|
size: "sm",
|
|
372
374
|
className: "rounded-full",
|
|
373
|
-
onClick: () =>
|
|
374
|
-
children: [/* @__PURE__ */
|
|
375
|
+
onClick: () => E("table"),
|
|
376
|
+
children: [/* @__PURE__ */ b(v, { className: "h-4 w-4 mr-1" }), "Table"]
|
|
375
377
|
})]
|
|
376
378
|
})]
|
|
377
379
|
}),
|
|
378
|
-
i.length === 0 ? /* @__PURE__ */
|
|
380
|
+
i.length === 0 ? /* @__PURE__ */ b(j, {
|
|
379
381
|
treatment: "glass",
|
|
380
382
|
className: "border-border-seam",
|
|
381
|
-
children: /* @__PURE__ */
|
|
383
|
+
children: /* @__PURE__ */ b(w, {
|
|
382
384
|
className: "p-4",
|
|
383
|
-
children: /* @__PURE__ */
|
|
385
|
+
children: /* @__PURE__ */ b(N, {
|
|
384
386
|
illustration: "empty-search",
|
|
385
387
|
title: "No candidates yet",
|
|
386
388
|
description: "Add your first candidate to start building the pipeline."
|
|
387
389
|
})
|
|
388
390
|
})
|
|
389
|
-
}) :
|
|
390
|
-
columns:
|
|
391
|
+
}) : T === "board" ? /* @__PURE__ */ b(r, {
|
|
392
|
+
columns: ve,
|
|
391
393
|
emptyColumnHint: "No candidates in this stage"
|
|
392
|
-
}) : /* @__PURE__ */
|
|
394
|
+
}) : /* @__PURE__ */ b(j, {
|
|
393
395
|
treatment: "glass",
|
|
394
396
|
glow: !0,
|
|
395
397
|
className: "border-border-seam",
|
|
396
|
-
children: /* @__PURE__ */
|
|
398
|
+
children: /* @__PURE__ */ x(w, {
|
|
397
399
|
className: "p-4",
|
|
398
400
|
children: [
|
|
399
|
-
/* @__PURE__ */
|
|
401
|
+
/* @__PURE__ */ x("div", {
|
|
400
402
|
className: "mb-3 flex flex-wrap gap-1",
|
|
401
|
-
children: [/* @__PURE__ */
|
|
402
|
-
variant:
|
|
403
|
+
children: [/* @__PURE__ */ b(C, {
|
|
404
|
+
variant: D === "all" ? "default" : "outline",
|
|
403
405
|
size: "sm",
|
|
404
406
|
onClick: () => {
|
|
405
|
-
|
|
407
|
+
O("all"), H(1);
|
|
406
408
|
},
|
|
407
409
|
children: "All"
|
|
408
|
-
}),
|
|
409
|
-
variant:
|
|
410
|
+
}), R.map((e) => /* @__PURE__ */ b(C, {
|
|
411
|
+
variant: D === e.key ? "default" : "outline",
|
|
410
412
|
size: "sm",
|
|
411
413
|
onClick: () => {
|
|
412
|
-
|
|
414
|
+
O(e.key), H(1);
|
|
413
415
|
},
|
|
414
416
|
children: e.label
|
|
415
417
|
}, e.key))]
|
|
416
418
|
}),
|
|
417
|
-
/* @__PURE__ */
|
|
418
|
-
data:
|
|
419
|
+
/* @__PURE__ */ b(P, {
|
|
420
|
+
data: _e,
|
|
419
421
|
rowKey: (e) => e.id,
|
|
420
|
-
columns:
|
|
421
|
-
emptyState: /* @__PURE__ */
|
|
422
|
+
columns: de,
|
|
423
|
+
emptyState: /* @__PURE__ */ b(N, {
|
|
422
424
|
illustration: "empty-search",
|
|
423
425
|
title: "No candidates match",
|
|
424
426
|
description: "Try a different search term or status filter."
|
|
425
427
|
}),
|
|
426
|
-
rowActions: (e) => /* @__PURE__ */
|
|
428
|
+
rowActions: (e) => /* @__PURE__ */ x("div", {
|
|
427
429
|
className: "flex items-center justify-end gap-1",
|
|
428
|
-
children: [
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
430
|
+
children: [
|
|
431
|
+
/* @__PURE__ */ b(C, {
|
|
432
|
+
variant: "ghost",
|
|
433
|
+
size: "sm",
|
|
434
|
+
"aria-label": `Skills of ${e.firstName} ${e.lastName}`,
|
|
435
|
+
onClick: () => X(e),
|
|
436
|
+
children: /* @__PURE__ */ b(g, { className: "h-3.5 w-3.5" })
|
|
437
|
+
}),
|
|
438
|
+
/* @__PURE__ */ b(C, {
|
|
439
|
+
variant: "ghost",
|
|
440
|
+
size: "sm",
|
|
441
|
+
"aria-label": `Edit ${e.firstName} ${e.lastName}`,
|
|
442
|
+
onClick: () => K(e),
|
|
443
|
+
children: /* @__PURE__ */ b(_, { className: "h-3.5 w-3.5" })
|
|
444
|
+
}),
|
|
445
|
+
/* @__PURE__ */ b(C, {
|
|
446
|
+
variant: "ghost",
|
|
447
|
+
size: "sm",
|
|
448
|
+
"aria-label": `Delete ${e.firstName} ${e.lastName}`,
|
|
449
|
+
onClick: () => J(e),
|
|
450
|
+
children: /* @__PURE__ */ b(y, { className: "h-3.5 w-3.5 text-status-error-fg" })
|
|
451
|
+
})
|
|
452
|
+
]
|
|
441
453
|
})
|
|
442
454
|
}),
|
|
443
|
-
|
|
455
|
+
$.length > A && /* @__PURE__ */ b("div", {
|
|
444
456
|
className: "mt-4",
|
|
445
|
-
children: /* @__PURE__ */
|
|
446
|
-
page:
|
|
447
|
-
pageSize:
|
|
448
|
-
totalItems:
|
|
449
|
-
onPageChange:
|
|
457
|
+
children: /* @__PURE__ */ b(ae, {
|
|
458
|
+
page: k,
|
|
459
|
+
pageSize: A,
|
|
460
|
+
totalItems: $.length,
|
|
461
|
+
onPageChange: H
|
|
450
462
|
})
|
|
451
463
|
})
|
|
452
464
|
]
|
|
453
465
|
})
|
|
454
466
|
}),
|
|
455
|
-
/* @__PURE__ */
|
|
467
|
+
/* @__PURE__ */ b(a, {
|
|
456
468
|
open: U,
|
|
457
|
-
onOpenChange:
|
|
469
|
+
onOpenChange: W,
|
|
458
470
|
title: "Add Candidate",
|
|
459
471
|
description: "Add someone to your hiring pipeline.",
|
|
460
|
-
fields:
|
|
472
|
+
fields: z,
|
|
461
473
|
submitLabel: "Add candidate",
|
|
462
|
-
onSubmit:
|
|
474
|
+
onSubmit: pe
|
|
463
475
|
}),
|
|
464
|
-
/* @__PURE__ */
|
|
465
|
-
open:
|
|
476
|
+
/* @__PURE__ */ b(a, {
|
|
477
|
+
open: G !== null,
|
|
466
478
|
onOpenChange: (e) => {
|
|
467
|
-
e ||
|
|
479
|
+
e || K(null);
|
|
468
480
|
},
|
|
469
481
|
title: "Edit Candidate",
|
|
470
|
-
description:
|
|
471
|
-
fields:
|
|
472
|
-
initialValues:
|
|
482
|
+
description: G ? `${G.firstName} ${G.lastName}` : void 0,
|
|
483
|
+
fields: z,
|
|
484
|
+
initialValues: G ? B(G) : void 0,
|
|
473
485
|
submitLabel: "Save changes",
|
|
474
|
-
onSubmit:
|
|
486
|
+
onSubmit: me
|
|
475
487
|
}),
|
|
476
|
-
/* @__PURE__ */
|
|
477
|
-
open:
|
|
488
|
+
/* @__PURE__ */ b(c, {
|
|
489
|
+
open: q !== null,
|
|
478
490
|
onOpenChange: (e) => {
|
|
479
|
-
e ||
|
|
491
|
+
e || J(null);
|
|
480
492
|
},
|
|
481
493
|
title: "Remove candidate",
|
|
482
|
-
description:
|
|
494
|
+
description: q ? `Remove ${q.firstName} ${q.lastName} from the pipeline?` : void 0,
|
|
483
495
|
confirmLabel: "Remove",
|
|
484
496
|
destructive: !0,
|
|
485
|
-
onConfirm:
|
|
497
|
+
onConfirm: he
|
|
498
|
+
}),
|
|
499
|
+
/* @__PURE__ */ b(oe, {
|
|
500
|
+
open: Y !== null,
|
|
501
|
+
onOpenChange: (e) => {
|
|
502
|
+
e || X(null);
|
|
503
|
+
},
|
|
504
|
+
children: /* @__PURE__ */ x(se, {
|
|
505
|
+
className: "sm:max-w-[560px]",
|
|
506
|
+
children: [/* @__PURE__ */ x(le, { children: [/* @__PURE__ */ b(ue, { children: Y ? `${Y.firstName} ${Y.lastName} · Skills` : "Skills" }), /* @__PURE__ */ b(ce, { children: "Canonical skills with proficiency. Matching for open roles uses these, including skills they imply or supersede." })] }), Y ? /* @__PURE__ */ b(s, { candidateId: Y.id }) : null]
|
|
507
|
+
})
|
|
486
508
|
})
|
|
487
509
|
]
|
|
488
510
|
});
|
|
489
511
|
}
|
|
490
|
-
function
|
|
491
|
-
let
|
|
492
|
-
return /* @__PURE__ */
|
|
512
|
+
function fe({ candidate: e, onMove: t, onEdit: n, onSkills: r, onDelete: a }) {
|
|
513
|
+
let o = `${e.firstName} ${e.lastName}`;
|
|
514
|
+
return /* @__PURE__ */ x("div", {
|
|
493
515
|
className: "group rounded-[var(--radius-input)] border border-border-subtle bg-bg-surface p-3 shadow-elevation-1 transition-shadow hover:shadow-elevation-2",
|
|
494
516
|
children: [
|
|
495
|
-
/* @__PURE__ */
|
|
517
|
+
/* @__PURE__ */ x("div", {
|
|
496
518
|
className: "flex items-start gap-2.5",
|
|
497
|
-
children: [/* @__PURE__ */
|
|
498
|
-
name:
|
|
519
|
+
children: [/* @__PURE__ */ b(H, {
|
|
520
|
+
name: o,
|
|
499
521
|
size: 36
|
|
500
|
-
}), /* @__PURE__ */
|
|
522
|
+
}), /* @__PURE__ */ x("div", {
|
|
501
523
|
className: "min-w-0 flex-1",
|
|
502
|
-
children: [/* @__PURE__ */
|
|
524
|
+
children: [/* @__PURE__ */ b("p", {
|
|
503
525
|
className: "truncate text-sm font-semibold text-text-primary",
|
|
504
|
-
children:
|
|
505
|
-
}), /* @__PURE__ */
|
|
526
|
+
children: o
|
|
527
|
+
}), /* @__PURE__ */ b("p", {
|
|
506
528
|
className: "truncate text-xs text-text-secondary",
|
|
507
529
|
children: e.position
|
|
508
530
|
})]
|
|
509
531
|
})]
|
|
510
532
|
}),
|
|
511
|
-
/* @__PURE__ */
|
|
533
|
+
/* @__PURE__ */ x("div", {
|
|
512
534
|
className: "mt-2 flex items-center justify-between gap-2",
|
|
513
|
-
children: [/* @__PURE__ */
|
|
535
|
+
children: [/* @__PURE__ */ b(i, {
|
|
514
536
|
value: e.rating,
|
|
515
537
|
size: 13
|
|
516
|
-
}), /* @__PURE__ */
|
|
538
|
+
}), /* @__PURE__ */ b(S, {
|
|
517
539
|
variant: "outline",
|
|
518
540
|
className: "shrink-0 text-[9px]",
|
|
519
541
|
children: e.source
|
|
520
542
|
})]
|
|
521
543
|
}),
|
|
522
|
-
e.skills.length > 0 && /* @__PURE__ */
|
|
544
|
+
e.skills.length > 0 && /* @__PURE__ */ b("div", {
|
|
523
545
|
className: "mt-2 flex flex-wrap gap-1",
|
|
524
|
-
children: e.skills.slice(0, 3).map((e) => /* @__PURE__ */
|
|
546
|
+
children: e.skills.slice(0, 3).map((e) => /* @__PURE__ */ b(S, {
|
|
525
547
|
variant: "secondary",
|
|
526
548
|
className: "text-[9px]",
|
|
527
549
|
children: e
|
|
528
550
|
}, e))
|
|
529
551
|
}),
|
|
530
|
-
/* @__PURE__ */
|
|
552
|
+
/* @__PURE__ */ x("div", {
|
|
531
553
|
className: "mt-2.5 flex items-center justify-between gap-1 border-t border-border-subtle pt-2",
|
|
532
|
-
children: [/* @__PURE__ */
|
|
554
|
+
children: [/* @__PURE__ */ x(T, { children: [/* @__PURE__ */ b(A, {
|
|
533
555
|
asChild: !0,
|
|
534
|
-
children: /* @__PURE__ */
|
|
556
|
+
children: /* @__PURE__ */ x(C, {
|
|
535
557
|
variant: "ghost",
|
|
536
558
|
size: "sm",
|
|
537
559
|
className: "h-7 px-2 text-xs",
|
|
538
|
-
children: [/* @__PURE__ */
|
|
560
|
+
children: [/* @__PURE__ */ b(h, { className: "mr-1 h-3.5 w-3.5" }), "Move"]
|
|
539
561
|
})
|
|
540
|
-
}), /* @__PURE__ */
|
|
562
|
+
}), /* @__PURE__ */ x(E, {
|
|
541
563
|
align: "start",
|
|
542
564
|
children: [
|
|
543
|
-
/* @__PURE__ */
|
|
544
|
-
/* @__PURE__ */
|
|
545
|
-
|
|
565
|
+
/* @__PURE__ */ b(O, { children: "Move to stage" }),
|
|
566
|
+
/* @__PURE__ */ b(k, {}),
|
|
567
|
+
R.filter((t) => t.key !== e.status).map((n) => /* @__PURE__ */ x(D, {
|
|
546
568
|
onSelect: () => t(e, n.key),
|
|
547
|
-
children: [/* @__PURE__ */
|
|
569
|
+
children: [/* @__PURE__ */ b("span", {
|
|
548
570
|
"aria-hidden": "true",
|
|
549
571
|
className: "mr-2 inline-block h-2 w-2 rounded-full",
|
|
550
572
|
style: { backgroundColor: n.accent }
|
|
551
573
|
}), n.label]
|
|
552
574
|
}, n.key))
|
|
553
575
|
]
|
|
554
|
-
})] }), /* @__PURE__ */
|
|
576
|
+
})] }), /* @__PURE__ */ x("div", {
|
|
555
577
|
className: "flex items-center gap-0.5",
|
|
556
|
-
children: [
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
578
|
+
children: [
|
|
579
|
+
/* @__PURE__ */ b(C, {
|
|
580
|
+
variant: "ghost",
|
|
581
|
+
size: "sm",
|
|
582
|
+
className: "h-7 w-7 p-0",
|
|
583
|
+
"aria-label": `Skills of ${o}`,
|
|
584
|
+
onClick: r,
|
|
585
|
+
children: /* @__PURE__ */ b(g, { className: "h-3.5 w-3.5" })
|
|
586
|
+
}),
|
|
587
|
+
/* @__PURE__ */ b(C, {
|
|
588
|
+
variant: "ghost",
|
|
589
|
+
size: "sm",
|
|
590
|
+
className: "h-7 w-7 p-0",
|
|
591
|
+
"aria-label": `Edit ${o}`,
|
|
592
|
+
onClick: n,
|
|
593
|
+
children: /* @__PURE__ */ b(_, { className: "h-3.5 w-3.5" })
|
|
594
|
+
}),
|
|
595
|
+
/* @__PURE__ */ b(C, {
|
|
596
|
+
variant: "ghost",
|
|
597
|
+
size: "sm",
|
|
598
|
+
className: "h-7 w-7 p-0",
|
|
599
|
+
"aria-label": `Delete ${o}`,
|
|
600
|
+
onClick: a,
|
|
601
|
+
children: /* @__PURE__ */ b(y, { className: "h-3.5 w-3.5 text-status-error-fg" })
|
|
602
|
+
})
|
|
603
|
+
]
|
|
571
604
|
})]
|
|
572
605
|
})
|
|
573
606
|
]
|