@burdenoff/microfe-crewfoundry 2026.703.2 → 2026.704.2
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/components/forms/FormModal.js.map +1 -1
- package/dist/crewfoundry/pages/AdminAdminPagePage.js +117 -164
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +99 -82
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +160 -192
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +238 -231
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +196 -166
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +45 -147
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +20 -11
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +45 -152
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +50 -138
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +149 -67
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +50 -201
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +205 -136
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +25 -31
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +118 -104
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +117 -58
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +90 -94
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +210 -191
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +213 -180
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +133 -264
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +279 -212
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +131 -105
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +167 -148
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +3 -3
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +13 -5
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +151 -152
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +38 -21
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +3 -3
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +134 -127
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +163 -132
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +202 -160
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +104 -91
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +29 -147
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +22 -106
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +74 -74
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +101 -97
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +64 -47
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +111 -121
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +131 -110
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +65 -64
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +58 -43
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +66 -82
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +38 -88
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +59 -65
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +209 -323
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +175 -220
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +74 -59
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +96 -80
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +28 -100
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +27 -20
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +73 -73
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +62 -56
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +40 -138
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +126 -93
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +99 -77
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +73 -74
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +122 -122
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +130 -113
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +68 -59
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +73 -62
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +82 -58
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +153 -153
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +63 -48
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,178 +1,199 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { BookOpen as t, GraduationCap as n, Star as r, TrendingUp as i, Users as a } from "lucide-react";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { useNavigate as o } from "react-router-dom";
|
|
4
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
|
+
import { Badge as l, Card as u, CardContent as d, CardDescription as f, CardHeader as p, CardTitle as m, GlassCard as h, GradientText as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
|
|
5
6
|
//#region src/crewfoundry/pages/LearningLearningPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { courses:
|
|
8
|
-
return /* @__PURE__ */
|
|
7
|
+
function v() {
|
|
8
|
+
let v = o(), { courses: y, learningPaths: b } = e(), x = y.reduce((e, t) => e + t.enrolled, 0), S = y.reduce((e, t) => e + t.completed, 0), C = [...y].sort((e, t) => t.rating - e.rating).slice(0, 3), w = (e) => v(`../../learning/course-details-page?id=${encodeURIComponent(e)}`), T = (e) => v(`../../learning/learning-path-detail-page?id=${encodeURIComponent(e)}`);
|
|
9
|
+
return /* @__PURE__ */ c("div", {
|
|
9
10
|
className: "space-y-6 p-6",
|
|
10
11
|
children: [
|
|
11
|
-
/* @__PURE__ */
|
|
12
|
-
/* @__PURE__ */
|
|
12
|
+
/* @__PURE__ */ c("div", { children: [
|
|
13
|
+
/* @__PURE__ */ s("h1", {
|
|
13
14
|
className: "text-2xl font-semibold",
|
|
14
|
-
children: /* @__PURE__ */
|
|
15
|
+
children: /* @__PURE__ */ s(g, { children: "Learning & Development" })
|
|
15
16
|
}),
|
|
16
|
-
/* @__PURE__ */
|
|
17
|
+
/* @__PURE__ */ s("p", {
|
|
17
18
|
className: "text-sm text-text-secondary",
|
|
18
19
|
children: "Explore courses, learning paths, and grow your skills"
|
|
19
20
|
}),
|
|
20
|
-
/* @__PURE__ */
|
|
21
|
+
/* @__PURE__ */ s(_, {
|
|
21
22
|
className: "mt-1",
|
|
22
23
|
children: "Your learning home — discover courses, continue where you left off, and keep developing the skills your role needs."
|
|
23
24
|
})
|
|
24
25
|
] }),
|
|
25
|
-
/* @__PURE__ */
|
|
26
|
+
/* @__PURE__ */ c("div", {
|
|
26
27
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
|
|
27
28
|
children: [
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
+
/* @__PURE__ */ c(h, {
|
|
29
30
|
treatment: "glass",
|
|
30
31
|
glow: !0,
|
|
31
32
|
className: "border-border-seam",
|
|
32
|
-
children: [/* @__PURE__ */
|
|
33
|
+
children: [/* @__PURE__ */ c(p, {
|
|
33
34
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
34
|
-
children: [/* @__PURE__ */
|
|
35
|
+
children: [/* @__PURE__ */ s(m, {
|
|
35
36
|
className: "text-sm font-medium",
|
|
36
37
|
children: "Courses"
|
|
37
|
-
}), /* @__PURE__ */
|
|
38
|
-
}), /* @__PURE__ */
|
|
38
|
+
}), /* @__PURE__ */ s(t, { className: "h-4 w-4 text-text-secondary" })]
|
|
39
|
+
}), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s("div", {
|
|
39
40
|
className: "text-2xl font-bold tabular-nums",
|
|
40
|
-
children:
|
|
41
|
-
}), /* @__PURE__ */
|
|
41
|
+
children: y.length
|
|
42
|
+
}), /* @__PURE__ */ s("p", {
|
|
42
43
|
className: "text-xs text-text-secondary",
|
|
43
44
|
children: "Active courses"
|
|
44
45
|
})] })]
|
|
45
46
|
}),
|
|
46
|
-
/* @__PURE__ */
|
|
47
|
+
/* @__PURE__ */ c(h, {
|
|
47
48
|
treatment: "metric",
|
|
48
49
|
className: "border-border-seam",
|
|
49
|
-
children: [/* @__PURE__ */
|
|
50
|
+
children: [/* @__PURE__ */ c(p, {
|
|
50
51
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
51
|
-
children: [/* @__PURE__ */
|
|
52
|
+
children: [/* @__PURE__ */ s(m, {
|
|
52
53
|
className: "text-sm font-medium",
|
|
53
54
|
children: "Enrolled"
|
|
54
|
-
}), /* @__PURE__ */
|
|
55
|
-
}), /* @__PURE__ */
|
|
55
|
+
}), /* @__PURE__ */ s(a, { className: "h-4 w-4 text-text-secondary" })]
|
|
56
|
+
}), /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s("div", {
|
|
56
57
|
className: "text-2xl font-bold tabular-nums",
|
|
57
|
-
children:
|
|
58
|
+
children: x
|
|
58
59
|
}) })]
|
|
59
60
|
}),
|
|
60
|
-
/* @__PURE__ */
|
|
61
|
+
/* @__PURE__ */ c(h, {
|
|
61
62
|
treatment: "metric",
|
|
62
63
|
className: "border-border-seam",
|
|
63
|
-
children: [/* @__PURE__ */
|
|
64
|
+
children: [/* @__PURE__ */ c(p, {
|
|
64
65
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
65
|
-
children: [/* @__PURE__ */
|
|
66
|
+
children: [/* @__PURE__ */ s(m, {
|
|
66
67
|
className: "text-sm font-medium",
|
|
67
68
|
children: "Completed"
|
|
68
|
-
}), /* @__PURE__ */
|
|
69
|
-
}), /* @__PURE__ */
|
|
69
|
+
}), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-status-success-text" })]
|
|
70
|
+
}), /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s("div", {
|
|
70
71
|
className: "text-2xl font-bold tabular-nums",
|
|
71
|
-
children:
|
|
72
|
+
children: S
|
|
72
73
|
}) })]
|
|
73
74
|
}),
|
|
74
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ c(h, {
|
|
75
76
|
treatment: "metric",
|
|
76
77
|
className: "border-border-seam",
|
|
77
|
-
children: [/* @__PURE__ */
|
|
78
|
+
children: [/* @__PURE__ */ c(p, {
|
|
78
79
|
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
79
|
-
children: [/* @__PURE__ */
|
|
80
|
+
children: [/* @__PURE__ */ s(m, {
|
|
80
81
|
className: "text-sm font-medium",
|
|
81
82
|
children: "Paths"
|
|
82
|
-
}), /* @__PURE__ */
|
|
83
|
-
}), /* @__PURE__ */
|
|
83
|
+
}), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-text-secondary" })]
|
|
84
|
+
}), /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s("div", {
|
|
84
85
|
className: "text-2xl font-bold tabular-nums",
|
|
85
|
-
children:
|
|
86
|
+
children: b.length
|
|
86
87
|
}) })]
|
|
87
88
|
})
|
|
88
89
|
]
|
|
89
90
|
}),
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h2", {
|
|
91
92
|
className: "text-lg font-medium mb-3",
|
|
92
93
|
children: "Featured Courses"
|
|
93
|
-
}), /* @__PURE__ */
|
|
94
|
+
}), /* @__PURE__ */ s("div", {
|
|
94
95
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
95
|
-
children:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
e.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
/* @__PURE__ */
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}),
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
className: "
|
|
120
|
-
children:
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
96
|
+
children: C.map((e) => /* @__PURE__ */ c(u, {
|
|
97
|
+
role: "button",
|
|
98
|
+
tabIndex: 0,
|
|
99
|
+
"aria-label": `View ${e.title}`,
|
|
100
|
+
onClick: () => w(e.id),
|
|
101
|
+
onKeyDown: (t) => {
|
|
102
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), w(e.id));
|
|
103
|
+
},
|
|
104
|
+
className: "cursor-pointer transition-shadow hover:shadow-md focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]",
|
|
105
|
+
children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, {
|
|
106
|
+
className: "text-base",
|
|
107
|
+
children: e.title
|
|
108
|
+
}), /* @__PURE__ */ c(f, { children: [
|
|
109
|
+
e.instructor,
|
|
110
|
+
" · ",
|
|
111
|
+
e.duration
|
|
112
|
+
] })] }), /* @__PURE__ */ c(d, { children: [
|
|
113
|
+
/* @__PURE__ */ s("p", {
|
|
114
|
+
className: "text-sm text-text-secondary mb-3",
|
|
115
|
+
children: e.description
|
|
116
|
+
}),
|
|
117
|
+
/* @__PURE__ */ c("div", {
|
|
118
|
+
className: "flex items-center justify-between",
|
|
119
|
+
children: [/* @__PURE__ */ c("div", {
|
|
120
|
+
className: "flex items-center gap-1",
|
|
121
|
+
children: [/* @__PURE__ */ s(r, { className: "h-3 w-3 text-status-warning-text" }), /* @__PURE__ */ s("span", {
|
|
122
|
+
className: "text-sm",
|
|
123
|
+
children: e.rating
|
|
124
|
+
})]
|
|
125
|
+
}), /* @__PURE__ */ c("div", {
|
|
126
|
+
className: "flex gap-1",
|
|
127
|
+
children: [/* @__PURE__ */ s(l, {
|
|
128
|
+
variant: "outline",
|
|
129
|
+
className: "text-[10px]",
|
|
130
|
+
children: e.level
|
|
131
|
+
}), /* @__PURE__ */ s(l, {
|
|
132
|
+
variant: "outline",
|
|
133
|
+
className: "text-[10px]",
|
|
134
|
+
children: e.category
|
|
135
|
+
})]
|
|
125
136
|
})]
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
})
|
|
137
|
-
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ c("div", {
|
|
139
|
+
className: "mt-2 text-xs text-text-secondary",
|
|
140
|
+
children: [
|
|
141
|
+
e.enrolled,
|
|
142
|
+
" enrolled · ",
|
|
143
|
+
e.completed,
|
|
144
|
+
" completed"
|
|
145
|
+
]
|
|
146
|
+
})
|
|
147
|
+
] })]
|
|
148
|
+
}, e.id))
|
|
138
149
|
})] }),
|
|
139
|
-
/* @__PURE__ */
|
|
150
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h2", {
|
|
140
151
|
className: "text-lg font-medium mb-3",
|
|
141
152
|
children: "Learning Paths"
|
|
142
|
-
}), /* @__PURE__ */
|
|
153
|
+
}), /* @__PURE__ */ s("div", {
|
|
143
154
|
className: "grid gap-4 md:grid-cols-3",
|
|
144
|
-
children:
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
155
|
+
children: b.map((e) => /* @__PURE__ */ c(u, {
|
|
156
|
+
role: "button",
|
|
157
|
+
tabIndex: 0,
|
|
158
|
+
"aria-label": `View ${e.title}`,
|
|
159
|
+
onClick: () => T(e.id),
|
|
160
|
+
onKeyDown: (t) => {
|
|
161
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), T(e.id));
|
|
162
|
+
},
|
|
163
|
+
className: "cursor-pointer transition-shadow hover:shadow-md focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]",
|
|
164
|
+
children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ s(m, {
|
|
165
|
+
className: "text-base",
|
|
166
|
+
children: e.title
|
|
167
|
+
}), /* @__PURE__ */ s(f, { children: e.description })] }), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c("div", {
|
|
168
|
+
className: "flex items-center justify-between text-sm text-text-secondary",
|
|
169
|
+
children: [/* @__PURE__ */ c("span", { children: [
|
|
170
|
+
e.courses.length,
|
|
171
|
+
" courses · ",
|
|
172
|
+
e.duration
|
|
173
|
+
] }), /* @__PURE__ */ s(l, {
|
|
174
|
+
variant: "outline",
|
|
175
|
+
className: "text-[10px]",
|
|
176
|
+
children: e.level
|
|
177
|
+
})]
|
|
178
|
+
}), /* @__PURE__ */ c("div", {
|
|
179
|
+
className: "mt-2 space-y-1",
|
|
180
|
+
children: [/* @__PURE__ */ c("div", {
|
|
181
|
+
className: "flex justify-between text-xs",
|
|
182
|
+
children: [/* @__PURE__ */ c("span", { children: [e.enrolled, " enrolled"] }), /* @__PURE__ */ c("span", { children: [e.completionRate, "%"] })]
|
|
183
|
+
}), /* @__PURE__ */ s("div", {
|
|
184
|
+
className: "h-2 bg-bg-sunken rounded overflow-hidden",
|
|
185
|
+
children: /* @__PURE__ */ s("div", {
|
|
186
|
+
className: "h-2 bg-action-primary-bg rounded",
|
|
187
|
+
style: { width: `${e.completionRate}%` }
|
|
188
|
+
})
|
|
189
|
+
})]
|
|
190
|
+
})] })]
|
|
191
|
+
}, e.id))
|
|
171
192
|
})] })
|
|
172
193
|
]
|
|
173
194
|
});
|
|
174
195
|
}
|
|
175
196
|
//#endregion
|
|
176
|
-
export {
|
|
197
|
+
export { v as LearningLearningPagePage };
|
|
177
198
|
|
|
178
199
|
//# sourceMappingURL=LearningLearningPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LearningLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, GraduationCap, Star, TrendingUp, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningLearningPagePage() {\n const { courses, learningPaths } = useCrewFoundryStore();\n const totalEnrolled = courses.reduce((s, c) => s + c.enrolled, 0);\n const totalCompleted = courses.reduce((s, c) => s + c.completed, 0);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Learning & Development</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Explore courses, learning paths, and grow your skills\n </p>\n <PagePurpose className=\"mt-1\">Your learning home — discover courses, continue where you left off, and keep developing the skills your role needs.</PagePurpose>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Courses</CardTitle>\n <BookOpen className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{courses.length}</div>\n <p className=\"text-xs text-text-secondary\">Active courses</p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Enrolled</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{totalEnrolled}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Completed</CardTitle>\n <GraduationCap className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{totalCompleted}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Paths</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{learningPaths.length}</div>\n </CardContent>\n </GlassCard>\n </div>\n <div>\n <h2 className=\"text-lg font-medium mb-3\">Featured Courses</h2>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {courses.slice(0, 3).map((course) => (\n <Card key={course.id}>\n <CardHeader>\n <CardTitle className=\"text-base\">{course.title}</CardTitle>\n <CardDescription>\n {course.instructor} · {course.duration}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary mb-3\">{course.description}</p>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n <span className=\"text-sm\">{course.rating}</span>\n </div>\n <div className=\"flex gap-1\">\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {course.level}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {course.category}\n </Badge>\n </div>\n </div>\n <div className=\"mt-2 text-xs text-text-secondary\">\n {course.enrolled} enrolled · {course.completed} completed\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n <div>\n <h2 className=\"text-lg font-medium mb-3\">Learning Paths</h2>\n <div className=\"grid gap-4 md:grid-cols-3\">\n {learningPaths.map((path) => (\n <Card key={path.id}>\n <CardHeader>\n <CardTitle className=\"text-base\">{path.title}</CardTitle>\n <CardDescription>{path.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-between text-sm text-text-secondary\">\n <span>\n {path.courses.length} courses · {path.duration}\n </span>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {path.level}\n </Badge>\n </div>\n <div className=\"mt-2 space-y-1\">\n <div className=\"flex justify-between text-xs\">\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 </CardContent>\n </Card>\n ))}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LearningLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, GraduationCap, Star, TrendingUp, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningLearningPagePage() {\n const navigate = useNavigate();\n const { courses, learningPaths } = useCrewFoundryStore();\n const totalEnrolled = courses.reduce((s, c) => s + c.enrolled, 0);\n const totalCompleted = courses.reduce((s, c) => s + c.completed, 0);\n const featuredCourses = [...courses].sort((a, b) => b.rating - a.rating).slice(0, 3);\n const openCourse = (id: string) =>\n navigate(`../../learning/course-details-page?id=${encodeURIComponent(id)}`);\n const openPath = (id: string) =>\n navigate(`../../learning/learning-path-detail-page?id=${encodeURIComponent(id)}`);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>Learning & Development</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n Explore courses, learning paths, and grow your skills\n </p>\n <PagePurpose className=\"mt-1\">\n Your learning home — discover courses, continue where you left off, and keep developing\n the skills your role needs.\n </PagePurpose>\n </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Courses</CardTitle>\n <BookOpen className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{courses.length}</div>\n <p className=\"text-xs text-text-secondary\">Active courses</p>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Enrolled</CardTitle>\n <Users className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{totalEnrolled}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Completed</CardTitle>\n <GraduationCap className=\"h-4 w-4 text-status-success-text\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{totalCompleted}</div>\n </CardContent>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"border-border-seam\">\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">Paths</CardTitle>\n <TrendingUp className=\"h-4 w-4 text-text-secondary\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold tabular-nums\">{learningPaths.length}</div>\n </CardContent>\n </GlassCard>\n </div>\n <div>\n <h2 className=\"text-lg font-medium mb-3\">Featured Courses</h2>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {featuredCourses.map((course) => (\n <Card\n key={course.id}\n role=\"button\"\n tabIndex={0}\n aria-label={`View ${course.title}`}\n onClick={() => openCourse(course.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n openCourse(course.id);\n }\n }}\n className=\"cursor-pointer transition-shadow hover:shadow-md focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]\"\n >\n <CardHeader>\n <CardTitle className=\"text-base\">{course.title}</CardTitle>\n <CardDescription>\n {course.instructor} · {course.duration}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-text-secondary mb-3\">{course.description}</p>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-status-warning-text\" />\n <span className=\"text-sm\">{course.rating}</span>\n </div>\n <div className=\"flex gap-1\">\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {course.level}\n </Badge>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {course.category}\n </Badge>\n </div>\n </div>\n <div className=\"mt-2 text-xs text-text-secondary\">\n {course.enrolled} enrolled · {course.completed} completed\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n <div>\n <h2 className=\"text-lg font-medium mb-3\">Learning Paths</h2>\n <div className=\"grid gap-4 md:grid-cols-3\">\n {learningPaths.map((path) => (\n <Card\n key={path.id}\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=\"cursor-pointer transition-shadow hover:shadow-md focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)]\"\n >\n <CardHeader>\n <CardTitle className=\"text-base\">{path.title}</CardTitle>\n <CardDescription>{path.description}</CardDescription>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-between text-sm text-text-secondary\">\n <span>\n {path.courses.length} courses · {path.duration}\n </span>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {path.level}\n </Badge>\n </div>\n <div className=\"mt-2 space-y-1\">\n <div className=\"flex justify-between text-xs\">\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 </CardContent>\n </Card>\n ))}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,113 +1,114 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { BookOpen as n, CheckCircle as r, Clock as i, Star as a, Users as o } from "lucide-react";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { useSearchParams as s } from "react-router-dom";
|
|
5
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
6
|
+
import { Badge as u, Button as d, Card as f, CardContent as p, EmphasisPanel as m, GradientText as h, IllustratedEmptyState as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
|
|
7
|
+
import { useGlobalUi as v } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
7
8
|
//#region src/crewfoundry/pages/LearningLearningPathDetailPagePage.tsx
|
|
8
|
-
function
|
|
9
|
-
let { learningPaths:
|
|
10
|
-
if (!
|
|
9
|
+
function y() {
|
|
10
|
+
let [y] = s(), { learningPaths: b, courses: x, enrollCourse: S } = e(), { showToast: C } = v(), [w, T] = t(!1), E = y.get("id"), D = E ? b.find((e) => e.id === E) : b[0];
|
|
11
|
+
if (!D) return /* @__PURE__ */ c("div", {
|
|
11
12
|
className: "p-6",
|
|
12
|
-
children: /* @__PURE__ */
|
|
13
|
+
children: /* @__PURE__ */ c(g, {
|
|
13
14
|
illustration: "empty-search",
|
|
14
15
|
title: "No learning path found",
|
|
15
16
|
description: "This learning path is no longer available."
|
|
16
17
|
})
|
|
17
18
|
});
|
|
18
|
-
let
|
|
19
|
-
return /* @__PURE__ */
|
|
19
|
+
let O = x.filter((e) => D.courses.includes(e.id));
|
|
20
|
+
return /* @__PURE__ */ l("div", {
|
|
20
21
|
className: "space-y-6 p-6 max-w-4xl",
|
|
21
22
|
children: [
|
|
22
|
-
/* @__PURE__ */
|
|
23
|
+
/* @__PURE__ */ l("div", {
|
|
23
24
|
className: "flex items-center justify-between",
|
|
24
|
-
children: [/* @__PURE__ */
|
|
25
|
-
/* @__PURE__ */
|
|
25
|
+
children: [/* @__PURE__ */ l("div", { children: [
|
|
26
|
+
/* @__PURE__ */ c("h1", {
|
|
26
27
|
className: "text-2xl font-semibold",
|
|
27
|
-
children: /* @__PURE__ */
|
|
28
|
+
children: /* @__PURE__ */ c(h, { children: D.title })
|
|
28
29
|
}),
|
|
29
|
-
/* @__PURE__ */
|
|
30
|
+
/* @__PURE__ */ c("p", {
|
|
30
31
|
className: "text-sm text-text-secondary",
|
|
31
|
-
children:
|
|
32
|
+
children: D.description
|
|
32
33
|
}),
|
|
33
|
-
/* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ c(_, {
|
|
34
35
|
className: "mt-1",
|
|
35
36
|
children: "Follow a single learning path end-to-end — see its courses, your progress, and what to complete next to finish the journey."
|
|
36
37
|
})
|
|
37
|
-
] }), /* @__PURE__ */
|
|
38
|
+
] }), /* @__PURE__ */ c(d, {
|
|
38
39
|
onClick: async () => {
|
|
39
|
-
if (
|
|
40
|
-
|
|
40
|
+
if (O.length === 0) {
|
|
41
|
+
C("No courses in this path yet", "warning");
|
|
41
42
|
return;
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
+
T(!0);
|
|
44
45
|
try {
|
|
45
|
-
for (let e of
|
|
46
|
-
|
|
46
|
+
for (let e of O) await S(e.id);
|
|
47
|
+
C(`Enrolled in ${O.length} course${O.length > 1 ? "s" : ""}`, "success");
|
|
47
48
|
} catch (e) {
|
|
48
|
-
|
|
49
|
+
C(e instanceof Error ? e.message : "Unable to enroll in path", "error");
|
|
49
50
|
} finally {
|
|
50
|
-
|
|
51
|
+
T(!1);
|
|
51
52
|
}
|
|
52
53
|
},
|
|
53
|
-
disabled:
|
|
54
|
-
children:
|
|
54
|
+
disabled: w,
|
|
55
|
+
children: w ? "Enrolling…" : "Enroll Now"
|
|
55
56
|
})]
|
|
56
57
|
}),
|
|
57
|
-
/* @__PURE__ */
|
|
58
|
+
/* @__PURE__ */ l("div", {
|
|
58
59
|
className: "grid gap-4 md:grid-cols-4",
|
|
59
60
|
children: [
|
|
60
|
-
/* @__PURE__ */
|
|
61
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
61
62
|
className: "p-4 text-center",
|
|
62
63
|
children: [
|
|
63
|
-
/* @__PURE__ */
|
|
64
|
-
/* @__PURE__ */
|
|
64
|
+
/* @__PURE__ */ c(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
65
|
+
/* @__PURE__ */ c("p", {
|
|
65
66
|
className: "text-lg font-bold",
|
|
66
|
-
children:
|
|
67
|
+
children: D.courses.length
|
|
67
68
|
}),
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ c("p", {
|
|
69
70
|
className: "text-xs text-text-secondary",
|
|
70
71
|
children: "Courses"
|
|
71
72
|
})
|
|
72
73
|
]
|
|
73
74
|
}) }),
|
|
74
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
75
76
|
className: "p-4 text-center",
|
|
76
77
|
children: [
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
-
/* @__PURE__ */
|
|
78
|
+
/* @__PURE__ */ c(i, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
79
|
+
/* @__PURE__ */ c("p", {
|
|
79
80
|
className: "text-lg font-bold",
|
|
80
|
-
children:
|
|
81
|
+
children: D.duration
|
|
81
82
|
}),
|
|
82
|
-
/* @__PURE__ */
|
|
83
|
+
/* @__PURE__ */ c("p", {
|
|
83
84
|
className: "text-xs text-text-secondary",
|
|
84
85
|
children: "Duration"
|
|
85
86
|
})
|
|
86
87
|
]
|
|
87
88
|
}) }),
|
|
88
|
-
/* @__PURE__ */
|
|
89
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
89
90
|
className: "p-4 text-center",
|
|
90
91
|
children: [
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
-
/* @__PURE__ */
|
|
92
|
+
/* @__PURE__ */ c(o, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
93
|
+
/* @__PURE__ */ c("p", {
|
|
93
94
|
className: "text-lg font-bold",
|
|
94
|
-
children:
|
|
95
|
+
children: D.enrolled
|
|
95
96
|
}),
|
|
96
|
-
/* @__PURE__ */
|
|
97
|
+
/* @__PURE__ */ c("p", {
|
|
97
98
|
className: "text-xs text-text-secondary",
|
|
98
99
|
children: "Enrolled"
|
|
99
100
|
})
|
|
100
101
|
]
|
|
101
102
|
}) }),
|
|
102
|
-
/* @__PURE__ */
|
|
103
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
103
104
|
className: "p-4 text-center",
|
|
104
105
|
children: [
|
|
105
|
-
/* @__PURE__ */
|
|
106
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ c(r, { className: "h-5 w-5 mx-auto text-status-success-text mb-1" }),
|
|
107
|
+
/* @__PURE__ */ l("p", {
|
|
107
108
|
className: "text-lg font-bold",
|
|
108
|
-
children: [
|
|
109
|
+
children: [D.completionRate, "%"]
|
|
109
110
|
}),
|
|
110
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ c("p", {
|
|
111
112
|
className: "text-xs text-text-secondary",
|
|
112
113
|
children: "Completion"
|
|
113
114
|
})
|
|
@@ -115,38 +116,38 @@ function v() {
|
|
|
115
116
|
}) })
|
|
116
117
|
]
|
|
117
118
|
}),
|
|
118
|
-
/* @__PURE__ */
|
|
119
|
-
/* @__PURE__ */
|
|
119
|
+
/* @__PURE__ */ l(m, { children: [
|
|
120
|
+
/* @__PURE__ */ c("div", {
|
|
120
121
|
className: "text-lg font-semibold",
|
|
121
122
|
children: "Courses in this Path"
|
|
122
123
|
}),
|
|
123
|
-
/* @__PURE__ */
|
|
124
|
+
/* @__PURE__ */ l("p", {
|
|
124
125
|
className: "mb-4 text-sm text-text-secondary",
|
|
125
126
|
children: [
|
|
126
|
-
|
|
127
|
+
O.length,
|
|
127
128
|
" courses · ",
|
|
128
|
-
|
|
129
|
+
D.level
|
|
129
130
|
]
|
|
130
131
|
}),
|
|
131
|
-
/* @__PURE__ */
|
|
132
|
+
/* @__PURE__ */ c("div", {
|
|
132
133
|
className: "space-y-3",
|
|
133
|
-
children:
|
|
134
|
+
children: O.length === 0 ? /* @__PURE__ */ c(g, {
|
|
134
135
|
illustration: "empty-generic",
|
|
135
136
|
title: "No courses in this path yet",
|
|
136
137
|
description: "Courses added to this path will appear here in order."
|
|
137
|
-
}) :
|
|
138
|
+
}) : O.map((e, t) => /* @__PURE__ */ l("div", {
|
|
138
139
|
className: "flex items-center gap-3 rounded border p-4",
|
|
139
140
|
children: [
|
|
140
|
-
/* @__PURE__ */
|
|
141
|
+
/* @__PURE__ */ c("div", {
|
|
141
142
|
className: "flex-shrink-0 w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold",
|
|
142
143
|
children: t + 1
|
|
143
144
|
}),
|
|
144
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ l("div", {
|
|
145
146
|
className: "flex-1",
|
|
146
|
-
children: [/* @__PURE__ */
|
|
147
|
+
children: [/* @__PURE__ */ c("p", {
|
|
147
148
|
className: "text-sm font-medium",
|
|
148
149
|
children: e.title
|
|
149
|
-
}), /* @__PURE__ */
|
|
150
|
+
}), /* @__PURE__ */ l("p", {
|
|
150
151
|
className: "text-xs text-text-secondary",
|
|
151
152
|
children: [
|
|
152
153
|
e.instructor,
|
|
@@ -158,15 +159,15 @@ function v() {
|
|
|
158
159
|
]
|
|
159
160
|
})]
|
|
160
161
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
162
|
+
/* @__PURE__ */ l("div", {
|
|
162
163
|
className: "flex items-center gap-2",
|
|
163
|
-
children: [/* @__PURE__ */
|
|
164
|
+
children: [/* @__PURE__ */ l("div", {
|
|
164
165
|
className: "flex items-center gap-1",
|
|
165
|
-
children: [/* @__PURE__ */
|
|
166
|
+
children: [/* @__PURE__ */ c(a, { className: "h-3 w-3 text-status-warning-text" }), /* @__PURE__ */ c("span", {
|
|
166
167
|
className: "text-sm",
|
|
167
168
|
children: e.rating
|
|
168
169
|
})]
|
|
169
|
-
}), /* @__PURE__ */
|
|
170
|
+
}), /* @__PURE__ */ c(u, {
|
|
170
171
|
variant: e.level === "beginner" ? "secondary" : e.level === "intermediate" ? "default" : "destructive",
|
|
171
172
|
className: "text-[10px]",
|
|
172
173
|
children: e.level
|
|
@@ -180,6 +181,6 @@ function v() {
|
|
|
180
181
|
});
|
|
181
182
|
}
|
|
182
183
|
//#endregion
|
|
183
|
-
export {
|
|
184
|
+
export { y as LearningLearningPathDetailPagePage };
|
|
184
185
|
|
|
185
186
|
//# sourceMappingURL=LearningLearningPathDetailPagePage.js.map
|