@burdenoff/microfe-crewfoundry 2026.1030.1 → 2026.1030.3

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.
@@ -0,0 +1,12 @@
1
+ export interface EmployeeSkillsPanelProps {
2
+ employeeId: string;
3
+ }
4
+ /**
5
+ * Employee profile Skills tab (BOFF-3717, mock cf-03). Shows the employee's
6
+ * canonical skills from the skills taxonomy with real proficiency bars.
7
+ * Skills without an assessed proficiency (for example ones backfilled from
8
+ * the old free-text tags) say so instead of showing an invented level.
9
+ * Typed names resolve through taxonomy aliases, so "ReactJS" lands on React.
10
+ */
11
+ export declare function EmployeeSkillsPanel({ employeeId }: EmployeeSkillsPanelProps): import("react").JSX.Element;
12
+ //# sourceMappingURL=EmployeeSkillsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmployeeSkillsPanel.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/components/EmployeeSkillsPanel.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,UAAU,EAAE,EAAE,wBAAwB,+BAiL3E"}
@@ -0,0 +1,168 @@
1
+ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
+ import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
+ import { SkillBar as n } from "./viz/SkillBar.js";
4
+ import "./viz/index.js";
5
+ import { useEffect as r, useRef as i, useState as a } from "react";
6
+ import { Plus as o, X as s } from "lucide-react";
7
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
+ import { Badge as u, Button as d, IllustratedEmptyState as f, Input as p, Label as m, Spinner as h } from "@burdenoff/fe-libs/ui";
9
+ import { useGlobalUi as g } from "@burdenoff/fe-libs/shared/providers/shell";
10
+ //#region src/crewfoundry/components/EmployeeSkillsPanel.tsx
11
+ var _ = [];
12
+ function v({ employeeId: v }) {
13
+ let { showToast: y } = g(), b = e((e) => e.employeeSkillProfiles[v]), x = e((e) => e.fetchEmployeeSkillProfile), S = e((e) => e.attachEmployeeSkill), C = e((e) => e.detachEmployeeSkill), [w, T] = a(""), [E, D] = a(""), [O, k] = a(!1), [A, j] = a(null), [M, N] = a(!1), P = i(null);
14
+ r(() => {
15
+ P.current !== v && (P.current = v, x(v).catch((e) => {
16
+ N(!0), y(e instanceof Error ? e.message : "Unable to load skills", "error");
17
+ }));
18
+ }, [
19
+ v,
20
+ x,
21
+ y
22
+ ]);
23
+ let F = b ?? _, I = F.filter((e) => e.proficiency !== null), L = F.filter((e) => e.proficiency === null), R = async (e) => {
24
+ e.preventDefault();
25
+ let t = w.trim();
26
+ if (!t) {
27
+ y("Enter a skill name", "error");
28
+ return;
29
+ }
30
+ let n = null;
31
+ if (E.trim() !== "") {
32
+ let e = Number(E);
33
+ if (!Number.isInteger(e) || e < 0 || e > 100) {
34
+ y("Proficiency must be a whole number from 0 to 100", "error");
35
+ return;
36
+ }
37
+ n = e;
38
+ }
39
+ k(!0);
40
+ try {
41
+ await S({
42
+ employeeId: v,
43
+ skillName: t,
44
+ proficiency: n
45
+ }), T(""), D(""), y("Skill saved", "success");
46
+ } catch (e) {
47
+ y(e instanceof Error ? e.message : "Unable to add this skill", "error");
48
+ } finally {
49
+ k(!1);
50
+ }
51
+ }, z = async (e, t) => {
52
+ j(e);
53
+ try {
54
+ await C(v, e), y(`${t} removed`, "success");
55
+ } catch (e) {
56
+ y(e instanceof Error ? e.message : "Unable to remove this skill", "error");
57
+ } finally {
58
+ j(null);
59
+ }
60
+ };
61
+ return /* @__PURE__ */ l("div", {
62
+ className: "space-y-6",
63
+ "data-testid": "employee-skills-panel",
64
+ children: [b === void 0 && !M ? /* @__PURE__ */ c("div", {
65
+ className: "flex justify-center py-8",
66
+ children: /* @__PURE__ */ c(h, {})
67
+ }) : F.length === 0 ? /* @__PURE__ */ c(f, {
68
+ illustration: "empty-data",
69
+ title: "No skills recorded",
70
+ description: "Add this team member's skills below. Names are matched to the CrewFoundry skills taxonomy, so spellings like ReactJS resolve to React."
71
+ }) : /* @__PURE__ */ l("div", {
72
+ className: "space-y-5",
73
+ children: [I.length > 0 ? /* @__PURE__ */ c("ul", {
74
+ className: "space-y-4",
75
+ "aria-label": "Assessed skills",
76
+ children: I.map((e) => /* @__PURE__ */ l("li", {
77
+ className: "flex items-end gap-3",
78
+ children: [
79
+ /* @__PURE__ */ c(n, {
80
+ className: "flex-1",
81
+ label: e.skill.name,
82
+ value: e.proficiency ?? 0
83
+ }),
84
+ /* @__PURE__ */ c(u, {
85
+ variant: "secondary",
86
+ className: "shrink-0 text-xs",
87
+ children: t(e.verifiedFrom)
88
+ }),
89
+ /* @__PURE__ */ c(d, {
90
+ size: "sm",
91
+ variant: "ghost",
92
+ "aria-label": `Remove ${e.skill.name}`,
93
+ disabled: A === e.skillId,
94
+ onClick: () => void z(e.skillId, e.skill.name),
95
+ children: /* @__PURE__ */ c(s, { className: "h-3.5 w-3.5" })
96
+ })
97
+ ]
98
+ }, e.id))
99
+ }) : null, L.length > 0 ? /* @__PURE__ */ l("div", {
100
+ className: "space-y-2",
101
+ children: [/* @__PURE__ */ c("p", {
102
+ className: "text-xs font-medium uppercase tracking-wide text-text-muted",
103
+ children: "Proficiency not assessed yet"
104
+ }), /* @__PURE__ */ c("ul", {
105
+ className: "flex flex-wrap gap-2",
106
+ "aria-label": "Skills without an assessed proficiency",
107
+ children: L.map((e) => /* @__PURE__ */ l("li", {
108
+ className: "inline-flex items-center gap-1 rounded-full border border-border-subtle bg-bg-surface py-1 pl-3 pr-1 text-xs text-text-primary",
109
+ children: [/* @__PURE__ */ c("span", { children: e.skill.name }), /* @__PURE__ */ c("button", {
110
+ type: "button",
111
+ className: "rounded-full p-1 text-text-muted hover:bg-bg-sunken hover:text-text-primary disabled:opacity-50",
112
+ "aria-label": `Remove ${e.skill.name}`,
113
+ disabled: A === e.skillId,
114
+ onClick: () => void z(e.skillId, e.skill.name),
115
+ children: /* @__PURE__ */ c(s, { className: "h-3 w-3" })
116
+ })]
117
+ }, e.id))
118
+ })]
119
+ }) : null]
120
+ }), /* @__PURE__ */ l("form", {
121
+ className: "flex flex-col gap-3 border-t border-border-subtle pt-4 sm:flex-row sm:items-end",
122
+ onSubmit: (e) => void R(e),
123
+ "aria-label": "Add or update a skill",
124
+ children: [
125
+ /* @__PURE__ */ l("div", {
126
+ className: "flex flex-1 flex-col gap-1.5",
127
+ children: [/* @__PURE__ */ c(m, {
128
+ htmlFor: `skill-name-${v}`,
129
+ children: "Skill"
130
+ }), /* @__PURE__ */ c(p, {
131
+ id: `skill-name-${v}`,
132
+ value: w,
133
+ disabled: O,
134
+ onChange: (e) => T(e.target.value),
135
+ placeholder: "e.g. Forklift Certification, Kubernetes, Site Safety"
136
+ })]
137
+ }),
138
+ /* @__PURE__ */ l("div", {
139
+ className: "flex flex-col gap-1.5 sm:w-36",
140
+ children: [/* @__PURE__ */ c(m, {
141
+ htmlFor: `skill-proficiency-${v}`,
142
+ children: "Proficiency %"
143
+ }), /* @__PURE__ */ c(p, {
144
+ id: `skill-proficiency-${v}`,
145
+ type: "number",
146
+ inputMode: "numeric",
147
+ min: 0,
148
+ max: 100,
149
+ step: 1,
150
+ value: E,
151
+ disabled: O,
152
+ onChange: (e) => D(e.target.value),
153
+ placeholder: "0-100"
154
+ })]
155
+ }),
156
+ /* @__PURE__ */ l(d, {
157
+ type: "submit",
158
+ disabled: O,
159
+ children: [/* @__PURE__ */ c(o, { className: "mr-1.5 h-3.5 w-3.5" }), O ? "Saving…" : "Save skill"]
160
+ })
161
+ ]
162
+ })]
163
+ });
164
+ }
165
+ //#endregion
166
+ export { v as EmployeeSkillsPanel };
167
+
168
+ //# sourceMappingURL=EmployeeSkillsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmployeeSkillsPanel.js","names":[],"sources":["../../../src/crewfoundry/components/EmployeeSkillsPanel.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type FormEvent } from 'react';\nimport { Badge, Button, IllustratedEmptyState, Input, Label, Spinner } from '@burdenoff/fe-libs/ui';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { Plus, X } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\nimport { SkillBar } from './viz';\n\nexport interface EmployeeSkillsPanelProps {\n employeeId: string;\n}\n\n/** Stable empty profile so the selector never hands React a fresh array. */\nconst NO_PROFILE: never[] = [];\n\n/**\n * Employee profile Skills tab (BOFF-3717, mock cf-03). Shows the employee's\n * canonical skills from the skills taxonomy with real proficiency bars.\n * Skills without an assessed proficiency (for example ones backfilled from\n * the old free-text tags) say so instead of showing an invented level.\n * Typed names resolve through taxonomy aliases, so \"ReactJS\" lands on React.\n */\nexport function EmployeeSkillsPanel({ employeeId }: EmployeeSkillsPanelProps) {\n const { showToast } = useGlobalUi();\n const profile = useCrewFoundryStore((state) => state.employeeSkillProfiles[employeeId]);\n const fetchEmployeeSkillProfile = useCrewFoundryStore((state) => state.fetchEmployeeSkillProfile);\n const attachEmployeeSkill = useCrewFoundryStore((state) => state.attachEmployeeSkill);\n const detachEmployeeSkill = useCrewFoundryStore((state) => state.detachEmployeeSkill);\n const [skillName, setSkillName] = useState('');\n const [proficiency, setProficiency] = useState('');\n const [submitting, setSubmitting] = useState(false);\n const [removingSkillId, setRemovingSkillId] = useState<string | null>(null);\n const [loadFailed, setLoadFailed] = useState(false);\n // Gates the one-time fetch per employee without triggering a re-render.\n const loadedForRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (loadedForRef.current === employeeId) return;\n loadedForRef.current = employeeId;\n fetchEmployeeSkillProfile(employeeId).catch((error: unknown) => {\n setLoadFailed(true);\n showToast(error instanceof Error ? error.message : 'Unable to load skills', 'error');\n });\n }, [employeeId, fetchEmployeeSkillProfile, showToast]);\n\n const skills = profile ?? NO_PROFILE;\n const assessed = skills.filter((item) => item.proficiency !== null);\n const unassessed = skills.filter((item) => item.proficiency === null);\n\n const handleAdd = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const name = skillName.trim();\n if (!name) {\n showToast('Enter a skill name', 'error');\n return;\n }\n let level: number | null = null;\n if (proficiency.trim() !== '') {\n const parsed = Number(proficiency);\n if (!Number.isInteger(parsed) || parsed < 0 || parsed > 100) {\n showToast('Proficiency must be a whole number from 0 to 100', 'error');\n return;\n }\n level = parsed;\n }\n setSubmitting(true);\n try {\n await attachEmployeeSkill({ employeeId, skillName: name, proficiency: level });\n setSkillName('');\n setProficiency('');\n showToast('Skill saved', 'success');\n } catch (error: unknown) {\n showToast(error instanceof Error ? error.message : 'Unable to add this skill', 'error');\n } finally {\n setSubmitting(false);\n }\n };\n\n const handleRemove = async (skillId: string, name: string) => {\n setRemovingSkillId(skillId);\n try {\n await detachEmployeeSkill(employeeId, skillId);\n showToast(`${name} removed`, 'success');\n } catch (error: unknown) {\n showToast(error instanceof Error ? error.message : 'Unable to remove this skill', 'error');\n } finally {\n setRemovingSkillId(null);\n }\n };\n\n return (\n <div className=\"space-y-6\" data-testid=\"employee-skills-panel\">\n {profile === undefined && !loadFailed ? (\n <div className=\"flex justify-center py-8\">\n <Spinner />\n </div>\n ) : skills.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No skills recorded\"\n description=\"Add this team member's skills below. Names are matched to the CrewFoundry skills taxonomy, so spellings like ReactJS resolve to React.\"\n />\n ) : (\n <div className=\"space-y-5\">\n {assessed.length > 0 ? (\n <ul className=\"space-y-4\" aria-label=\"Assessed skills\">\n {assessed.map((item) => (\n <li key={item.id} className=\"flex items-end gap-3\">\n <SkillBar\n className=\"flex-1\"\n label={item.skill.name}\n value={item.proficiency ?? 0}\n />\n <Badge variant=\"secondary\" className=\"shrink-0 text-xs\">\n {formatEnumLabel(item.verifiedFrom)}\n </Badge>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={`Remove ${item.skill.name}`}\n disabled={removingSkillId === item.skillId}\n onClick={() => void handleRemove(item.skillId, item.skill.name)}\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </li>\n ))}\n </ul>\n ) : null}\n\n {unassessed.length > 0 ? (\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-muted\">\n Proficiency not assessed yet\n </p>\n <ul\n className=\"flex flex-wrap gap-2\"\n aria-label=\"Skills without an assessed proficiency\"\n >\n {unassessed.map((item) => (\n <li\n key={item.id}\n className=\"inline-flex items-center gap-1 rounded-full border border-border-subtle bg-bg-surface py-1 pl-3 pr-1 text-xs text-text-primary\"\n >\n <span>{item.skill.name}</span>\n <button\n type=\"button\"\n className=\"rounded-full p-1 text-text-muted hover:bg-bg-sunken hover:text-text-primary disabled:opacity-50\"\n aria-label={`Remove ${item.skill.name}`}\n disabled={removingSkillId === item.skillId}\n onClick={() => void handleRemove(item.skillId, item.skill.name)}\n >\n <X className=\"h-3 w-3\" />\n </button>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n )}\n\n <form\n className=\"flex flex-col gap-3 border-t border-border-subtle pt-4 sm:flex-row sm:items-end\"\n onSubmit={(event) => void handleAdd(event)}\n aria-label=\"Add or update a skill\"\n >\n <div className=\"flex flex-1 flex-col gap-1.5\">\n <Label htmlFor={`skill-name-${employeeId}`}>Skill</Label>\n <Input\n id={`skill-name-${employeeId}`}\n value={skillName}\n disabled={submitting}\n onChange={(event) => setSkillName(event.target.value)}\n placeholder=\"e.g. Forklift Certification, Kubernetes, Site Safety\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5 sm:w-36\">\n <Label htmlFor={`skill-proficiency-${employeeId}`}>Proficiency %</Label>\n <Input\n id={`skill-proficiency-${employeeId}`}\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n max={100}\n step={1}\n value={proficiency}\n disabled={submitting}\n onChange={(event) => setProficiency(event.target.value)}\n placeholder=\"0-100\"\n />\n </div>\n <Button type=\"submit\" disabled={submitting}>\n <Plus className=\"mr-1.5 h-3.5 w-3.5\" />\n {submitting ? 'Saving…' : 'Save skill'}\n </Button>\n </form>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HrEmployeeProfilePagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/HrEmployeeProfilePagePage.tsx"],"names":[],"mappings":"AA+MA,wBAAgB,yBAAyB,gCAqVxC"}
1
+ {"version":3,"file":"HrEmployeeProfilePagePage.d.ts","sourceRoot":"","sources":["../../../src/crewfoundry/pages/HrEmployeeProfilePagePage.tsx"],"names":[],"mappings":"AAgNA,wBAAgB,yBAAyB,gCAqUxC"}