@burdenoff/microfe-crewfoundry 2026.704.5 → 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.
- package/dist/crewfoundry/CrewFoundryRoutes.js +51 -43
- package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
- package/dist/crewfoundry/components/forms/formValues.js +5 -2
- package/dist/crewfoundry/components/forms/formValues.js.map +1 -1
- package/dist/crewfoundry/components/viz/AllocationBar.js +68 -0
- package/dist/crewfoundry/components/viz/AllocationBar.js.map +1 -0
- package/dist/crewfoundry/components/viz/AreaChart.js +102 -0
- package/dist/crewfoundry/components/viz/AreaChart.js.map +1 -0
- package/dist/crewfoundry/components/viz/AvatarStack.js +36 -0
- package/dist/crewfoundry/components/viz/AvatarStack.js.map +1 -0
- package/dist/crewfoundry/components/viz/BarChart.js +83 -0
- package/dist/crewfoundry/components/viz/BarChart.js.map +1 -0
- package/dist/crewfoundry/components/viz/CertificateCard.js +118 -0
- package/dist/crewfoundry/components/viz/CertificateCard.js.map +1 -0
- package/dist/crewfoundry/components/viz/DonutChart.js +109 -0
- package/dist/crewfoundry/components/viz/DonutChart.js.map +1 -0
- package/dist/crewfoundry/components/viz/HBarFunnel.js +54 -0
- package/dist/crewfoundry/components/viz/HBarFunnel.js.map +1 -0
- package/dist/crewfoundry/components/viz/Heatmap.js +91 -0
- package/dist/crewfoundry/components/viz/Heatmap.js.map +1 -0
- package/dist/crewfoundry/components/viz/KanbanBoard.js +50 -0
- package/dist/crewfoundry/components/viz/KanbanBoard.js.map +1 -0
- package/dist/crewfoundry/components/viz/LineChart.js +123 -0
- package/dist/crewfoundry/components/viz/LineChart.js.map +1 -0
- package/dist/crewfoundry/components/viz/OrgTree.js +83 -0
- package/dist/crewfoundry/components/viz/OrgTree.js.map +1 -0
- package/dist/crewfoundry/components/viz/PathSteps.js +68 -0
- package/dist/crewfoundry/components/viz/PathSteps.js.map +1 -0
- package/dist/crewfoundry/components/viz/ProgressRing.js +68 -0
- package/dist/crewfoundry/components/viz/ProgressRing.js.map +1 -0
- package/dist/crewfoundry/components/viz/RatingStars.js +51 -0
- package/dist/crewfoundry/components/viz/RatingStars.js.map +1 -0
- package/dist/crewfoundry/components/viz/SegmentedTabs.js +69 -0
- package/dist/crewfoundry/components/viz/SegmentedTabs.js.map +1 -0
- package/dist/crewfoundry/components/viz/SkillBar.js +3 -0
- package/dist/crewfoundry/components/viz/Sparkline.js +74 -0
- package/dist/crewfoundry/components/viz/Sparkline.js.map +1 -0
- package/dist/crewfoundry/components/viz/StatCard.js +60 -0
- package/dist/crewfoundry/components/viz/StatCard.js.map +1 -0
- package/dist/crewfoundry/components/viz/StepProgress.js +3 -0
- package/dist/crewfoundry/components/viz/Timeline.js +66 -0
- package/dist/crewfoundry/components/viz/Timeline.js.map +1 -0
- package/dist/crewfoundry/components/viz/index.js +23 -0
- package/dist/crewfoundry/components/viz/lib/Avatar.js +30 -0
- package/dist/crewfoundry/components/viz/lib/Avatar.js.map +1 -0
- package/dist/crewfoundry/components/viz/lib/CartesianFrame.js +119 -0
- package/dist/crewfoundry/components/viz/lib/CartesianFrame.js.map +1 -0
- package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js +35 -0
- package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js.map +1 -0
- package/dist/crewfoundry/components/viz/lib/format.js +21 -0
- package/dist/crewfoundry/components/viz/lib/format.js.map +1 -0
- package/dist/crewfoundry/components/viz/lib/geometry.js +69 -0
- package/dist/crewfoundry/components/viz/lib/geometry.js.map +1 -0
- package/dist/crewfoundry/components/viz/lib/hooks.js +39 -0
- package/dist/crewfoundry/components/viz/lib/hooks.js.map +1 -0
- package/dist/crewfoundry/components/viz/lib/palette.js +27 -0
- package/dist/crewfoundry/components/viz/lib/palette.js.map +1 -0
- package/dist/crewfoundry/lib/analytics.js +323 -0
- package/dist/crewfoundry/lib/analytics.js.map +1 -0
- package/dist/crewfoundry/lib/companyFinance.js +16 -0
- package/dist/crewfoundry/lib/companyFinance.js.map +1 -0
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +226 -283
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +107 -120
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +122 -162
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +121 -158
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +316 -211
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +75 -27
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +167 -165
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +168 -109
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +401 -290
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +84 -75
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +368 -174
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +236 -201
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +369 -196
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +252 -249
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +210 -110
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +216 -178
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js +385 -0
- package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js.map +1 -0
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +189 -130
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +397 -241
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +262 -147
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +345 -167
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +98 -24
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +35 -31
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +289 -108
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +221 -114
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +136 -133
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +148 -97
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +264 -157
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +85 -93
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +211 -122
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +94 -54
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +28 -25
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +290 -138
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +169 -79
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +65 -61
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +296 -125
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js +187 -0
- package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js.map +1 -0
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +142 -76
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +93 -43
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +250 -98
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.js +1 -1
- package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
- package/dist/crewfoundry/utils/cn.js +10 -0
- package/dist/crewfoundry/utils/cn.js.map +1 -0
- package/dist/crewfoundry/utils/courseProgress.js +46 -0
- package/dist/crewfoundry/utils/courseProgress.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
3
|
+
import { PathSteps as n } from "../components/viz/PathSteps.js";
|
|
4
|
+
import { AvatarStack as r } from "../components/viz/AvatarStack.js";
|
|
5
|
+
import "../components/viz/index.js";
|
|
6
|
+
import { FormModal as i, useFormModal as a } from "../components/forms/FormModal.js";
|
|
7
|
+
import { useMemo as o } from "react";
|
|
8
|
+
import { BookOpen as s, Clock as c, Layers as l, Plus as u } from "lucide-react";
|
|
9
|
+
import { useNavigate as d } from "react-router-dom";
|
|
10
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
11
|
+
import { Badge as m, Button as h, Card as g, CardContent as _, GradientText as v, IllustratedEmptyState as y, PagePurpose as b, Pagination as x } from "@burdenoff/fe-libs/ui";
|
|
12
|
+
import { usePagination as S } from "@burdenoff/fe-libs/shared/hooks";
|
|
9
13
|
//#region src/crewfoundry/pages/LearningLearningPathsPagePage.tsx
|
|
10
|
-
var
|
|
14
|
+
var C = [
|
|
11
15
|
{
|
|
12
16
|
name: "title",
|
|
13
17
|
label: "Path Title",
|
|
@@ -50,115 +54,162 @@ var S = [
|
|
|
50
54
|
]
|
|
51
55
|
}
|
|
52
56
|
];
|
|
53
|
-
function
|
|
54
|
-
let { learningPaths:
|
|
55
|
-
|
|
57
|
+
function w() {
|
|
58
|
+
let { learningPaths: w, courses: T, employees: E, addLearningPath: D } = e(), O = d(), k = a(), { page: A, pageSize: j, offset: M, setPage: N } = S({ initialPageSize: 6 }), P = w.slice(M, M + j), F = o(() => {
|
|
59
|
+
let e = /* @__PURE__ */ new Map();
|
|
60
|
+
for (let t of T) e.set(t.id, t.title);
|
|
61
|
+
return e;
|
|
62
|
+
}, [T]), I = o(() => E.slice(0, 5).map((e) => ({
|
|
63
|
+
name: `${e.firstName} ${e.lastName}`.trim(),
|
|
64
|
+
avatarUrl: e.avatar
|
|
65
|
+
})), [E]), L = (e) => O(`../learning/learning-path-detail-page?id=${encodeURIComponent(e)}`);
|
|
66
|
+
return /* @__PURE__ */ p("div", {
|
|
56
67
|
className: "space-y-6 p-6",
|
|
57
68
|
children: [
|
|
58
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ p("div", {
|
|
59
70
|
className: "flex flex-wrap items-start justify-between gap-3",
|
|
60
|
-
children: [/* @__PURE__ */
|
|
61
|
-
/* @__PURE__ */
|
|
71
|
+
children: [/* @__PURE__ */ p("div", { children: [
|
|
72
|
+
/* @__PURE__ */ f("h1", {
|
|
62
73
|
className: "text-2xl font-semibold",
|
|
63
|
-
children: /* @__PURE__ */
|
|
74
|
+
children: /* @__PURE__ */ f(v, { children: "Learning Paths" })
|
|
64
75
|
}),
|
|
65
|
-
/* @__PURE__ */
|
|
76
|
+
/* @__PURE__ */ f("p", {
|
|
66
77
|
className: "text-sm text-text-secondary",
|
|
67
|
-
children: "Structured
|
|
78
|
+
children: "Structured skill journeys for career growth"
|
|
68
79
|
}),
|
|
69
|
-
/* @__PURE__ */
|
|
80
|
+
/* @__PURE__ */ f(b, {
|
|
70
81
|
className: "mt-1",
|
|
71
82
|
children: "Structured learning journeys that string courses together — follow a path to build toward a role or skill set step by step."
|
|
72
83
|
})
|
|
73
|
-
] }), /* @__PURE__ */
|
|
74
|
-
onClick: () =>
|
|
75
|
-
children: [/* @__PURE__ */
|
|
84
|
+
] }), /* @__PURE__ */ p(h, {
|
|
85
|
+
onClick: () => k.openModal(),
|
|
86
|
+
children: [/* @__PURE__ */ f(u, { className: "mr-1 h-4 w-4" }), "New Path"]
|
|
76
87
|
})]
|
|
77
88
|
}),
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
"
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
children: /* @__PURE__ */
|
|
137
|
-
className: "
|
|
138
|
-
|
|
139
|
-
})
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
89
|
+
w.length === 0 ? /* @__PURE__ */ f(y, {
|
|
90
|
+
illustration: "empty-generic",
|
|
91
|
+
title: "No learning paths yet",
|
|
92
|
+
description: "Learning paths will appear here once they are created.",
|
|
93
|
+
action: /* @__PURE__ */ p(h, {
|
|
94
|
+
onClick: () => k.openModal(),
|
|
95
|
+
children: [/* @__PURE__ */ f(u, { className: "mr-1 h-4 w-4" }), "Create your first path"]
|
|
96
|
+
})
|
|
97
|
+
}) : /* @__PURE__ */ f("div", {
|
|
98
|
+
className: "space-y-4",
|
|
99
|
+
children: P.map((e) => {
|
|
100
|
+
let i = e.courses, a = i.length, o = Math.round(e.completionRate / 100 * a), u = i.map((e, t) => ({
|
|
101
|
+
label: F.get(e) ?? "Course",
|
|
102
|
+
state: t < o ? "done" : t === o ? "active" : "todo"
|
|
103
|
+
}));
|
|
104
|
+
return /* @__PURE__ */ f(g, {
|
|
105
|
+
className: "overflow-hidden",
|
|
106
|
+
children: /* @__PURE__ */ f(_, {
|
|
107
|
+
className: "p-5",
|
|
108
|
+
children: /* @__PURE__ */ p("div", {
|
|
109
|
+
className: "grid gap-5 lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]",
|
|
110
|
+
children: [/* @__PURE__ */ p("div", {
|
|
111
|
+
className: "space-y-3",
|
|
112
|
+
children: [
|
|
113
|
+
/* @__PURE__ */ f("button", {
|
|
114
|
+
type: "button",
|
|
115
|
+
onClick: () => L(e.id),
|
|
116
|
+
className: "text-left text-lg font-semibold outline-none hover:text-action-primary-bg focus-visible:text-action-primary-bg",
|
|
117
|
+
children: e.title
|
|
118
|
+
}),
|
|
119
|
+
/* @__PURE__ */ f("p", {
|
|
120
|
+
className: "line-clamp-2 text-sm text-text-secondary",
|
|
121
|
+
children: e.description
|
|
122
|
+
}),
|
|
123
|
+
/* @__PURE__ */ p("div", {
|
|
124
|
+
className: "flex flex-wrap gap-2",
|
|
125
|
+
children: [
|
|
126
|
+
/* @__PURE__ */ f(m, {
|
|
127
|
+
variant: "secondary",
|
|
128
|
+
className: "text-[10px]",
|
|
129
|
+
children: t(e.level)
|
|
130
|
+
}),
|
|
131
|
+
/* @__PURE__ */ p(m, {
|
|
132
|
+
variant: "outline",
|
|
133
|
+
className: "inline-flex items-center gap-1 text-[10px]",
|
|
134
|
+
children: [/* @__PURE__ */ f(c, { className: "h-3 w-3" }), e.duration]
|
|
135
|
+
}),
|
|
136
|
+
/* @__PURE__ */ p(m, {
|
|
137
|
+
variant: "outline",
|
|
138
|
+
className: "inline-flex items-center gap-1 text-[10px]",
|
|
139
|
+
children: [
|
|
140
|
+
/* @__PURE__ */ f(s, { className: "h-3 w-3" }),
|
|
141
|
+
a,
|
|
142
|
+
" courses"
|
|
143
|
+
]
|
|
144
|
+
})
|
|
145
|
+
]
|
|
146
|
+
}),
|
|
147
|
+
I.length > 0 && e.enrolled > 0 && /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("p", {
|
|
148
|
+
className: "mb-1 text-xs text-text-secondary",
|
|
149
|
+
children: "Enrolled learners"
|
|
150
|
+
}), /* @__PURE__ */ p("div", {
|
|
151
|
+
className: "flex items-center gap-2",
|
|
152
|
+
children: [/* @__PURE__ */ f(r, {
|
|
153
|
+
people: I,
|
|
154
|
+
size: 28,
|
|
155
|
+
max: 5
|
|
156
|
+
}), /* @__PURE__ */ p("span", {
|
|
157
|
+
className: "text-xs text-text-secondary tabular-nums",
|
|
158
|
+
children: [e.enrolled, " enrolled"]
|
|
159
|
+
})]
|
|
160
|
+
})] })
|
|
161
|
+
]
|
|
162
|
+
}), /* @__PURE__ */ p("div", {
|
|
163
|
+
className: "space-y-4",
|
|
164
|
+
children: [
|
|
165
|
+
/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ p("div", {
|
|
166
|
+
className: "mb-1 flex items-center justify-between text-sm",
|
|
167
|
+
children: [/* @__PURE__ */ f("span", {
|
|
168
|
+
className: "text-text-secondary",
|
|
169
|
+
children: "Overall progress"
|
|
170
|
+
}), /* @__PURE__ */ p("span", {
|
|
171
|
+
className: "font-semibold tabular-nums",
|
|
172
|
+
children: [e.completionRate, "% Complete"]
|
|
173
|
+
})]
|
|
174
|
+
}), /* @__PURE__ */ f("div", {
|
|
175
|
+
className: "h-2.5 overflow-hidden rounded-full bg-bg-sunken",
|
|
176
|
+
children: /* @__PURE__ */ f("div", {
|
|
177
|
+
className: "h-full rounded-full bg-action-primary-bg transition-[width] duration-500",
|
|
178
|
+
style: { width: `${e.completionRate}%` }
|
|
179
|
+
})
|
|
180
|
+
})] }),
|
|
181
|
+
u.length > 0 ? /* @__PURE__ */ f(n, { steps: u }) : /* @__PURE__ */ p("div", {
|
|
182
|
+
className: "flex items-center gap-2 rounded-md border border-dashed border-border-default px-3 py-4 text-sm text-text-secondary",
|
|
183
|
+
children: [/* @__PURE__ */ f(l, { className: "h-4 w-4" }), "No courses in this path yet — open the path to add them."]
|
|
184
|
+
}),
|
|
185
|
+
/* @__PURE__ */ f("div", { children: /* @__PURE__ */ f(h, {
|
|
186
|
+
variant: "outline",
|
|
187
|
+
size: "sm",
|
|
188
|
+
onClick: () => L(e.id),
|
|
189
|
+
children: "View path"
|
|
190
|
+
}) })
|
|
191
|
+
]
|
|
192
|
+
})]
|
|
193
|
+
})
|
|
194
|
+
})
|
|
144
195
|
}, e.id);
|
|
145
196
|
})
|
|
146
197
|
}),
|
|
147
|
-
|
|
148
|
-
page:
|
|
149
|
-
pageSize:
|
|
150
|
-
totalItems:
|
|
151
|
-
onPageChange:
|
|
198
|
+
w.length > j && /* @__PURE__ */ f(x, {
|
|
199
|
+
page: A,
|
|
200
|
+
pageSize: j,
|
|
201
|
+
totalItems: w.length,
|
|
202
|
+
onPageChange: N
|
|
152
203
|
}),
|
|
153
|
-
/* @__PURE__ */
|
|
154
|
-
open:
|
|
155
|
-
onOpenChange:
|
|
204
|
+
/* @__PURE__ */ f(i, {
|
|
205
|
+
open: k.open,
|
|
206
|
+
onOpenChange: k.onOpenChange,
|
|
156
207
|
title: "Create Learning Path",
|
|
157
208
|
description: "Group courses into a structured journey. You can add courses after creating the path.",
|
|
158
|
-
fields:
|
|
209
|
+
fields: C,
|
|
159
210
|
submitLabel: "Create Path",
|
|
160
211
|
onSubmit: async (e) => {
|
|
161
|
-
await
|
|
212
|
+
await D({
|
|
162
213
|
id: `path-${Date.now()}`,
|
|
163
214
|
title: String(e.title ?? ""),
|
|
164
215
|
description: String(e.description ?? ""),
|
|
@@ -174,6 +225,6 @@ function C() {
|
|
|
174
225
|
});
|
|
175
226
|
}
|
|
176
227
|
//#endregion
|
|
177
|
-
export {
|
|
228
|
+
export { w as LearningLearningPathsPagePage };
|
|
178
229
|
|
|
179
230
|
//# sourceMappingURL=LearningLearningPathsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LearningLearningPathsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPathsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n Pagination,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { BookOpen, GraduationCap, Plus } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore, type LearningPath } from '../store/crewfoundryStore';\nimport {\n FormModal,\n useFormModal,\n type FieldConfig,\n type FormValues,\n} from '../components/forms/FormModal';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nconst PATH_FIELDS: FieldConfig[] = [\n { name: 'title', label: 'Path Title', type: 'text', required: true, colSpan: 2 },\n { name: 'description', label: 'Description', type: 'textarea', required: true, colSpan: 2 },\n {\n name: 'duration',\n label: 'Duration',\n type: 'text',\n required: true,\n placeholder: 'e.g. 3 months',\n },\n {\n name: 'level',\n label: 'Level',\n type: 'select',\n required: true,\n options: [\n { label: 'Beginner', value: 'beginner' },\n { label: 'Intermediate', value: 'intermediate' },\n { label: 'Advanced', value: 'advanced' },\n ],\n },\n];\n\nexport function LearningLearningPathsPagePage() {\n const { learningPaths, courses, addLearningPath } = useCrewFoundryStore();\n const navigate = useNavigate();\n const createModal = useFormModal();\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 9 });\n const pagedPaths = learningPaths.slice(offset, offset + pageSize);\n const openPath = (id: string) =>\n navigate(`../learning/learning-path-detail-page?id=${encodeURIComponent(id)}`);\n\n const handleCreate = async (values: FormValues) => {\n const path: LearningPath = {\n id: `path-${Date.now()}`,\n title: String(values.title ?? ''),\n description: String(values.description ?? ''),\n courses: [],\n duration: String(values.duration ?? ''),\n level: String(values.level ?? 'beginner'),\n enrolled: 0,\n completionRate: 0,\n };\n await addLearningPath(path);\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Learning Paths</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Structured learning journeys for career growth\n </p>\n <PagePurpose className=\"mt-1\">\n Structured learning journeys that string courses together — follow a path to build\n toward a role or skill set step by step.\n </PagePurpose>\n </div>\n <Button onClick={() => createModal.openModal()}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Create Path\n </Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {learningPaths.length === 0 ? (\n <div className=\"col-span-full\">\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"No learning paths yet\"\n description=\"Learning paths will appear here once they are created.\"\n />\n </div>\n ) : (\n pagedPaths.map((path, _idx) => {\n const pathCourses = courses.filter((c) => path.courses.includes(c.id));\n return (\n <GlassCard\n key={path.id}\n treatment={_idx === 0 ? 'glass' : 'plain'}\n glow={_idx === 0}\n role=\"button\"\n tabIndex={0}\n aria-label={`View ${path.title}`}\n onClick={() => openPath(path.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n openPath(path.id);\n }\n }}\n className=\"hover:shadow-md transition-shadow cursor-pointer focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]\"\n >\n <CardHeader>\n <CardTitle className=\"text-lg\">{path.title}</CardTitle>\n <CardDescription>{path.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1\">\n <BookOpen className=\"h-3 w-3\" />\n {path.courses.length} courses\n </span>\n <span>{path.duration}</span>\n </div>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {formatEnumLabel(path.level)}\n </Badge>\n <div className=\"space-y-1 mt-2\">\n {pathCourses.map((c) => (\n <div\n key={c.id}\n className=\"flex items-center gap-2 text-xs text-text-secondary\"\n >\n <GraduationCap className=\"h-3 w-3\" />\n {c.title}\n </div>\n ))}\n </div>\n <div className=\"pt-2 border-t\">\n <div className=\"flex justify-between text-xs mb-1\">\n <span>{path.enrolled} enrolled</span>\n <span>{path.completionRate}%</span>\n </div>\n <div className=\"h-2 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-2 bg-action-primary-bg rounded\"\n style={{ width: `${path.completionRate}%` }}\n />\n </div>\n </div>\n </div>\n </CardContent>\n </GlassCard>\n );\n })\n )}\n </div>\n\n {learningPaths.length > pageSize && (\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={learningPaths.length}\n onPageChange={setPage}\n />\n )}\n\n <FormModal\n open={createModal.open}\n onOpenChange={createModal.onOpenChange}\n title=\"Create Learning Path\"\n description=\"Group courses into a structured journey. You can add courses after creating the path.\"\n fields={PATH_FIELDS}\n submitLabel=\"Create Path\"\n onSubmit={handleCreate}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LearningLearningPathsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPathsPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n Pagination,\n} from '@burdenoff/fe-libs/ui';\nimport { usePagination } from '@burdenoff/fe-libs/shared/hooks';\nimport { BookOpen, Clock, Layers, Plus } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore, type LearningPath } from '../store/crewfoundryStore';\nimport {\n FormModal,\n useFormModal,\n type FieldConfig,\n type FormValues,\n} from '../components/forms/FormModal';\nimport { AvatarStack, PathSteps, type PathStep, type Person } from '../components/viz';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nconst PATH_FIELDS: FieldConfig[] = [\n { name: 'title', label: 'Path Title', type: 'text', required: true, colSpan: 2 },\n { name: 'description', label: 'Description', type: 'textarea', required: true, colSpan: 2 },\n {\n name: 'duration',\n label: 'Duration',\n type: 'text',\n required: true,\n placeholder: 'e.g. 3 months',\n },\n {\n name: 'level',\n label: 'Level',\n type: 'select',\n required: true,\n options: [\n { label: 'Beginner', value: 'beginner' },\n { label: 'Intermediate', value: 'intermediate' },\n { label: 'Advanced', value: 'advanced' },\n ],\n },\n];\n\nexport function LearningLearningPathsPagePage() {\n const { learningPaths, courses, employees, addLearningPath } = useCrewFoundryStore();\n const navigate = useNavigate();\n const createModal = useFormModal();\n const { page, pageSize, offset, setPage } = usePagination({ initialPageSize: 6 });\n const pagedPaths = learningPaths.slice(offset, offset + pageSize);\n\n const courseTitleById = useMemo(() => {\n const map = new Map<string, string>();\n for (const c of courses) {\n map.set(c.id, c.title);\n }\n return map;\n }, [courses]);\n\n const learnerPeople = useMemo<Person[]>(\n () =>\n employees.slice(0, 5).map((e) => ({\n name: `${e.firstName} ${e.lastName}`.trim(),\n avatarUrl: e.avatar,\n })),\n [employees]\n );\n\n const openPath = (id: string) =>\n navigate(`../learning/learning-path-detail-page?id=${encodeURIComponent(id)}`);\n\n const handleCreate = async (values: FormValues) => {\n const path: LearningPath = {\n id: `path-${Date.now()}`,\n title: String(values.title ?? ''),\n description: String(values.description ?? ''),\n courses: [],\n duration: String(values.duration ?? ''),\n level: String(values.level ?? 'beginner'),\n enrolled: 0,\n completionRate: 0,\n };\n await addLearningPath(path);\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Learning Paths</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">Structured skill journeys for career growth</p>\n <PagePurpose className=\"mt-1\">\n Structured learning journeys that string courses together — follow a path to build\n toward a role or skill set step by step.\n </PagePurpose>\n </div>\n <Button onClick={() => createModal.openModal()}>\n <Plus className=\"mr-1 h-4 w-4\" />\n New Path\n </Button>\n </div>\n\n {learningPaths.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"No learning paths yet\"\n description=\"Learning paths will appear here once they are created.\"\n action={\n <Button onClick={() => createModal.openModal()}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Create your first path\n </Button>\n }\n />\n ) : (\n <div className=\"space-y-4\">\n {pagedPaths.map((path) => {\n const courseIds = path.courses;\n const numCourses = courseIds.length;\n const completedCount = Math.round((path.completionRate / 100) * numCourses);\n const steps: PathStep[] = courseIds.map((id, i) => ({\n label: courseTitleById.get(id) ?? 'Course',\n state: i < completedCount ? 'done' : i === completedCount ? 'active' : 'todo',\n }));\n\n return (\n <Card key={path.id} className=\"overflow-hidden\">\n <CardContent className=\"p-5\">\n <div className=\"grid gap-5 lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]\">\n {/* Left: identity */}\n <div className=\"space-y-3\">\n <button\n type=\"button\"\n onClick={() => openPath(path.id)}\n className=\"text-left text-lg font-semibold outline-none hover:text-action-primary-bg focus-visible:text-action-primary-bg\"\n >\n {path.title}\n </button>\n <p className=\"line-clamp-2 text-sm text-text-secondary\">{path.description}</p>\n <div className=\"flex flex-wrap gap-2\">\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {formatEnumLabel(path.level)}\n </Badge>\n <Badge variant=\"outline\" className=\"inline-flex items-center gap-1 text-[10px]\">\n <Clock className=\"h-3 w-3\" />\n {path.duration}\n </Badge>\n <Badge variant=\"outline\" className=\"inline-flex items-center gap-1 text-[10px]\">\n <BookOpen className=\"h-3 w-3\" />\n {numCourses} courses\n </Badge>\n </div>\n {learnerPeople.length > 0 && path.enrolled > 0 && (\n <div>\n <p className=\"mb-1 text-xs text-text-secondary\">Enrolled learners</p>\n <div className=\"flex items-center gap-2\">\n <AvatarStack people={learnerPeople} size={28} max={5} />\n <span className=\"text-xs text-text-secondary tabular-nums\">\n {path.enrolled} enrolled\n </span>\n </div>\n </div>\n )}\n </div>\n\n {/* Right: progress + timeline */}\n <div className=\"space-y-4\">\n <div>\n <div className=\"mb-1 flex items-center justify-between text-sm\">\n <span className=\"text-text-secondary\">Overall progress</span>\n <span className=\"font-semibold tabular-nums\">\n {path.completionRate}% Complete\n </span>\n </div>\n <div className=\"h-2.5 overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-action-primary-bg transition-[width] duration-500\"\n style={{ width: `${path.completionRate}%` }}\n />\n </div>\n </div>\n {steps.length > 0 ? (\n <PathSteps steps={steps} />\n ) : (\n <div className=\"flex items-center gap-2 rounded-md border border-dashed border-border-default px-3 py-4 text-sm text-text-secondary\">\n <Layers className=\"h-4 w-4\" />\n No courses in this path yet — open the path to add them.\n </div>\n )}\n <div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => openPath(path.id)}>\n View path\n </Button>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n )}\n\n {learningPaths.length > pageSize && (\n <Pagination\n page={page}\n pageSize={pageSize}\n totalItems={learningPaths.length}\n onPageChange={setPage}\n />\n )}\n\n <FormModal\n open={createModal.open}\n onOpenChange={createModal.onOpenChange}\n title=\"Create Learning Path\"\n description=\"Group courses into a structured journey. You can add courses after creating the path.\"\n fields={PATH_FIELDS}\n submitLabel=\"Create Path\"\n onSubmit={handleCreate}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|