@burdenoff/microfe-crewfoundry 2026.624.1 → 2026.625.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/pages/AdminAdminPagePage.js +100 -76
- package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +118 -94
- package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +105 -81
- package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +134 -110
- package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +121 -97
- package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +28 -15
- package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +74 -54
- package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +87 -69
- package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +99 -80
- package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +87 -68
- package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +31 -15
- package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +81 -61
- package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +71 -51
- package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +82 -58
- package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +46 -39
- package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +80 -62
- package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +104 -80
- package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +219 -151
- package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +183 -142
- package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +121 -97
- package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +57 -46
- package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +91 -67
- package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +112 -93
- package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +55 -48
- package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +70 -50
- package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +140 -97
- package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HiringJobsPagePage.js +101 -85
- package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +68 -48
- package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js +99 -71
- package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +97 -73
- package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrPayrollPagePage.js +100 -76
- package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +93 -69
- package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +65 -45
- package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +93 -75
- package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +117 -72
- package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +66 -54
- package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js +36 -20
- package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +90 -66
- package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPagePage.js +81 -57
- package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +90 -65
- package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +33 -17
- package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +83 -59
- package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +68 -48
- package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +80 -60
- package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +153 -118
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +42 -37
- package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +67 -47
- package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +104 -85
- package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +76 -57
- package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +78 -60
- package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +138 -93
- package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +98 -53
- package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +69 -49
- package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +84 -65
- package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +76 -52
- package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +58 -40
- package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +85 -65
- package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +36 -29
- package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +108 -73
- package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +43 -27
- package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +67 -47
- package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +108 -63
- package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +83 -64
- package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +185 -144
- package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +40 -24
- package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,93 +1,131 @@
|
|
|
1
1
|
import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
2
|
-
import { BookOpen as t, Clock as n,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { BookOpen as t, Clock as n, GraduationCap as r, Play as i, Star as a, Users as o } from "lucide-react";
|
|
3
|
+
import { useNavigate as s } from "react-router-dom";
|
|
4
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
5
|
+
import { Badge as u, Button as d, Card as f, CardContent as p, CardHeader as m, CardTitle as h, EmphasisPanel as g, GradientText as _, IllustratedEmptyState as v, NextSteps as y, PagePurpose as b } from "@burdenoff/fe-libs/ui";
|
|
5
6
|
//#region src/crewfoundry/pages/LearningCourseDetailsPagePage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { courses:
|
|
8
|
-
if (!
|
|
9
|
-
className: "p-6
|
|
10
|
-
children:
|
|
7
|
+
function x() {
|
|
8
|
+
let x = s(), { courses: S } = e(), C = S[0];
|
|
9
|
+
if (!C) return /* @__PURE__ */ c("div", {
|
|
10
|
+
className: "p-6",
|
|
11
|
+
children: /* @__PURE__ */ c(v, {
|
|
12
|
+
illustration: "empty-search",
|
|
13
|
+
title: "Course not found",
|
|
14
|
+
description: "This course is no longer available."
|
|
15
|
+
})
|
|
11
16
|
});
|
|
12
|
-
let
|
|
13
|
-
return /* @__PURE__ */
|
|
17
|
+
let w = Math.round(C.completed / C.enrolled * 100);
|
|
18
|
+
return /* @__PURE__ */ l("div", {
|
|
14
19
|
className: "space-y-6 p-6 max-w-4xl",
|
|
15
20
|
children: [
|
|
16
|
-
/* @__PURE__ */
|
|
21
|
+
/* @__PURE__ */ l("div", {
|
|
17
22
|
className: "flex items-center justify-between",
|
|
18
|
-
children: [/* @__PURE__ */
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
23
|
+
children: [/* @__PURE__ */ l("div", { children: [
|
|
24
|
+
/* @__PURE__ */ l("div", {
|
|
25
|
+
className: "flex items-center gap-2 mb-1",
|
|
26
|
+
children: [/* @__PURE__ */ c("h1", {
|
|
27
|
+
className: "text-2xl font-semibold",
|
|
28
|
+
children: /* @__PURE__ */ c(_, { children: C.title })
|
|
29
|
+
}), /* @__PURE__ */ c(u, {
|
|
30
|
+
variant: C.level === "beginner" ? "secondary" : C.level === "intermediate" ? "default" : "destructive",
|
|
31
|
+
children: C.level
|
|
32
|
+
})]
|
|
33
|
+
}),
|
|
34
|
+
/* @__PURE__ */ l("p", {
|
|
35
|
+
className: "text-sm text-text-secondary",
|
|
36
|
+
children: [
|
|
37
|
+
"by ",
|
|
38
|
+
C.instructor,
|
|
39
|
+
" · ",
|
|
40
|
+
C.category
|
|
41
|
+
]
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ c(b, {
|
|
44
|
+
className: "mt-2",
|
|
45
|
+
children: "Everything you need to decide on and start this course — what it covers, who it's for, and how others have done — so you can enroll with confidence and build the right skills."
|
|
46
|
+
})
|
|
47
|
+
] }), /* @__PURE__ */ l(d, { children: [/* @__PURE__ */ c(i, { className: "h-4 w-4 mr-1" }), "Start Course"] })]
|
|
48
|
+
}),
|
|
49
|
+
/* @__PURE__ */ c(y, {
|
|
50
|
+
storageKey: "crewfoundry-course-details",
|
|
51
|
+
steps: [
|
|
52
|
+
{
|
|
53
|
+
id: "start",
|
|
54
|
+
label: "Start the first module",
|
|
55
|
+
description: "Begin learning and track your progress as you go.",
|
|
56
|
+
icon: /* @__PURE__ */ c(i, { className: "h-4 w-4" }),
|
|
57
|
+
onClick: () => x("../../learning/course-learning-page")
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: "my-learning",
|
|
61
|
+
label: "See all your learning",
|
|
62
|
+
description: "Review everything you are currently enrolled in.",
|
|
63
|
+
icon: /* @__PURE__ */ c(r, { className: "h-4 w-4" }),
|
|
64
|
+
onClick: () => x("../../learning/my-learning-page")
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: "browse",
|
|
68
|
+
label: "Browse more courses",
|
|
69
|
+
description: "Find related training to round out your skills.",
|
|
70
|
+
icon: /* @__PURE__ */ c(t, { className: "h-4 w-4" }),
|
|
71
|
+
onClick: () => x("../../learning/courses-page")
|
|
72
|
+
}
|
|
73
|
+
]
|
|
36
74
|
}),
|
|
37
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ l("div", {
|
|
38
76
|
className: "grid gap-4 md:grid-cols-4",
|
|
39
77
|
children: [
|
|
40
|
-
/* @__PURE__ */
|
|
78
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
41
79
|
className: "p-4 text-center",
|
|
42
80
|
children: [
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
-
/* @__PURE__ */
|
|
81
|
+
/* @__PURE__ */ c(n, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
82
|
+
/* @__PURE__ */ c("p", {
|
|
45
83
|
className: "text-lg font-bold",
|
|
46
|
-
children:
|
|
84
|
+
children: C.duration
|
|
47
85
|
}),
|
|
48
|
-
/* @__PURE__ */
|
|
86
|
+
/* @__PURE__ */ c("p", {
|
|
49
87
|
className: "text-xs text-text-secondary",
|
|
50
88
|
children: "Duration"
|
|
51
89
|
})
|
|
52
90
|
]
|
|
53
91
|
}) }),
|
|
54
|
-
/* @__PURE__ */
|
|
92
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
55
93
|
className: "p-4 text-center",
|
|
56
94
|
children: [
|
|
57
|
-
/* @__PURE__ */
|
|
58
|
-
/* @__PURE__ */
|
|
95
|
+
/* @__PURE__ */ c(t, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
96
|
+
/* @__PURE__ */ c("p", {
|
|
59
97
|
className: "text-lg font-bold",
|
|
60
|
-
children:
|
|
98
|
+
children: C.modules
|
|
61
99
|
}),
|
|
62
|
-
/* @__PURE__ */
|
|
100
|
+
/* @__PURE__ */ c("p", {
|
|
63
101
|
className: "text-xs text-text-secondary",
|
|
64
102
|
children: "Modules"
|
|
65
103
|
})
|
|
66
104
|
]
|
|
67
105
|
}) }),
|
|
68
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
69
107
|
className: "p-4 text-center",
|
|
70
108
|
children: [
|
|
71
|
-
/* @__PURE__ */ o
|
|
72
|
-
/* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ c(o, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
|
|
110
|
+
/* @__PURE__ */ c("p", {
|
|
73
111
|
className: "text-lg font-bold",
|
|
74
|
-
children:
|
|
112
|
+
children: C.enrolled
|
|
75
113
|
}),
|
|
76
|
-
/* @__PURE__ */
|
|
114
|
+
/* @__PURE__ */ c("p", {
|
|
77
115
|
className: "text-xs text-text-secondary",
|
|
78
116
|
children: "Enrolled"
|
|
79
117
|
})
|
|
80
118
|
]
|
|
81
119
|
}) }),
|
|
82
|
-
/* @__PURE__ */
|
|
120
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
83
121
|
className: "p-4 text-center",
|
|
84
122
|
children: [
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
-
/* @__PURE__ */
|
|
123
|
+
/* @__PURE__ */ c(a, { className: "h-5 w-5 mx-auto text-status-warning-text mb-1" }),
|
|
124
|
+
/* @__PURE__ */ l("p", {
|
|
87
125
|
className: "text-lg font-bold",
|
|
88
|
-
children: [
|
|
126
|
+
children: [C.rating, "/5"]
|
|
89
127
|
}),
|
|
90
|
-
/* @__PURE__ */
|
|
128
|
+
/* @__PURE__ */ c("p", {
|
|
91
129
|
className: "text-xs text-text-secondary",
|
|
92
130
|
children: "Rating"
|
|
93
131
|
})
|
|
@@ -95,34 +133,41 @@ function m() {
|
|
|
95
133
|
}) })
|
|
96
134
|
]
|
|
97
135
|
}),
|
|
98
|
-
/* @__PURE__ */
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
children:
|
|
106
|
-
},
|
|
107
|
-
|
|
108
|
-
|
|
136
|
+
/* @__PURE__ */ l(g, { children: [
|
|
137
|
+
/* @__PURE__ */ c("div", {
|
|
138
|
+
className: "mb-2 text-lg font-semibold",
|
|
139
|
+
children: "About this Course"
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ c("p", {
|
|
142
|
+
className: "text-sm text-text-secondary",
|
|
143
|
+
children: C.description
|
|
144
|
+
}),
|
|
145
|
+
/* @__PURE__ */ c("div", {
|
|
146
|
+
className: "flex flex-wrap gap-1 mt-3",
|
|
147
|
+
children: C.skills.map((e) => /* @__PURE__ */ c(u, {
|
|
148
|
+
variant: "outline",
|
|
149
|
+
children: e
|
|
150
|
+
}, e))
|
|
151
|
+
})
|
|
152
|
+
] }),
|
|
153
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ c(h, { children: "Completion Statistics" }) }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ l("div", {
|
|
109
154
|
className: "space-y-2",
|
|
110
|
-
children: [/* @__PURE__ */
|
|
155
|
+
children: [/* @__PURE__ */ l("div", {
|
|
111
156
|
className: "flex justify-between text-sm",
|
|
112
|
-
children: [/* @__PURE__ */
|
|
113
|
-
|
|
157
|
+
children: [/* @__PURE__ */ l("span", { children: [
|
|
158
|
+
C.completed,
|
|
114
159
|
" of ",
|
|
115
|
-
|
|
160
|
+
C.enrolled,
|
|
116
161
|
" students completed"
|
|
117
|
-
] }), /* @__PURE__ */
|
|
162
|
+
] }), /* @__PURE__ */ l("span", {
|
|
118
163
|
className: "font-medium",
|
|
119
|
-
children: [
|
|
164
|
+
children: [w, "%"]
|
|
120
165
|
})]
|
|
121
|
-
}), /* @__PURE__ */
|
|
166
|
+
}), /* @__PURE__ */ c("div", {
|
|
122
167
|
className: "h-3 bg-bg-sunken rounded overflow-hidden",
|
|
123
|
-
children: /* @__PURE__ */
|
|
124
|
-
className: "h-3 bg-
|
|
125
|
-
style: { width: `${
|
|
168
|
+
children: /* @__PURE__ */ c("div", {
|
|
169
|
+
className: "h-3 bg-status-success-text rounded",
|
|
170
|
+
style: { width: `${w}%` }
|
|
126
171
|
})
|
|
127
172
|
})]
|
|
128
173
|
}) })] })
|
|
@@ -130,6 +175,6 @@ function m() {
|
|
|
130
175
|
});
|
|
131
176
|
}
|
|
132
177
|
//#endregion
|
|
133
|
-
export {
|
|
178
|
+
export { x as LearningCourseDetailsPagePage };
|
|
134
179
|
|
|
135
180
|
//# sourceMappingURL=LearningCourseDetailsPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LearningCourseDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n
|
|
1
|
+
{"version":3,"file":"LearningCourseDetailsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseDetailsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n NextSteps,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, Clock, GraduationCap, Play, Star, Users } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningCourseDetailsPagePage() {\n const navigate = useNavigate();\n const { courses } = useCrewFoundryStore();\n const course = courses[0];\n if (!course)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Course not found\"\n description=\"This course is no longer available.\"\n />\n </div>\n );\n const completionRate = Math.round((course.completed / course.enrolled) * 100);\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{course.title}</GradientText>\n </h1>\n <Badge\n variant={\n course.level === 'beginner'\n ? 'secondary'\n : course.level === 'intermediate'\n ? 'default'\n : 'destructive'\n }\n >\n {course.level}\n </Badge>\n </div>\n <p className=\"text-sm text-text-secondary\">\n by {course.instructor} · {course.category}\n </p>\n <PagePurpose className=\"mt-2\">\n Everything you need to decide on and start this course — what it covers, who it's\n for, and how others have done — so you can enroll with confidence and build the right\n skills.\n </PagePurpose>\n </div>\n <Button>\n <Play className=\"h-4 w-4 mr-1\" />\n Start Course\n </Button>\n </div>\n\n <NextSteps\n storageKey=\"crewfoundry-course-details\"\n steps={[\n {\n id: 'start',\n label: 'Start the first module',\n description: 'Begin learning and track your progress as you go.',\n icon: <Play className=\"h-4 w-4\" />,\n onClick: () => navigate('../../learning/course-learning-page'),\n },\n {\n id: 'my-learning',\n label: 'See all your learning',\n description: 'Review everything you are currently enrolled in.',\n icon: <GraduationCap className=\"h-4 w-4\" />,\n onClick: () => navigate('../../learning/my-learning-page'),\n },\n {\n id: 'browse',\n label: 'Browse more courses',\n description: 'Find related training to round out your skills.',\n icon: <BookOpen className=\"h-4 w-4\" />,\n onClick: () => navigate('../../learning/courses-page'),\n },\n ]}\n />\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Clock className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.duration}</p>\n <p className=\"text-xs text-text-secondary\">Duration</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <BookOpen className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.modules}</p>\n <p className=\"text-xs text-text-secondary\">Modules</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{course.enrolled}</p>\n <p className=\"text-xs text-text-secondary\">Enrolled</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"p-4 text-center\">\n <Star className=\"h-5 w-5 mx-auto text-status-warning-text mb-1\" />\n <p className=\"text-lg font-bold\">{course.rating}/5</p>\n <p className=\"text-xs text-text-secondary\">Rating</p>\n </CardContent>\n </Card>\n </div>\n <EmphasisPanel>\n <div className=\"mb-2 text-lg font-semibold\">About this Course</div>\n <p className=\"text-sm text-text-secondary\">{course.description}</p>\n <div className=\"flex flex-wrap gap-1 mt-3\">\n {course.skills.map((s) => (\n <Badge key={s} variant=\"outline\">\n {s}\n </Badge>\n ))}\n </div>\n </EmphasisPanel>\n <Card>\n <CardHeader>\n <CardTitle>Completion Statistics</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {course.completed} of {course.enrolled} students completed\n </span>\n <span className=\"font-medium\">{completionRate}%</span>\n </div>\n <div className=\"h-3 bg-bg-sunken rounded overflow-hidden\">\n <div\n className=\"h-3 bg-status-success-text rounded\"\n style={{ width: `${completionRate}%` }}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,78 +2,90 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useMemo as t } from "react";
|
|
3
3
|
import { CheckCircle as n, Clock as r, Play as i } from "lucide-react";
|
|
4
4
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as s, Button as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { Badge as s, Button as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f, GlassCard as p, GradientText as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/LearningCourseLearningPagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { courses:
|
|
9
|
-
let e = Math.max(
|
|
7
|
+
function g() {
|
|
8
|
+
let { courses: g } = e(), _ = g[0], v = t(() => {
|
|
9
|
+
let e = Math.max(_?.modules || 0, 6);
|
|
10
10
|
return Array.from({ length: e }, (e, t) => {
|
|
11
11
|
let n = t < 2 ? "completed" : t === 2 ? "in_progress" : "locked";
|
|
12
12
|
return {
|
|
13
13
|
id: `module-${t + 1}`,
|
|
14
|
-
title: `${
|
|
14
|
+
title: `${_?.title || "Learning"} Module ${t + 1}`,
|
|
15
15
|
duration: `${25 + t % 4 * 10} min`,
|
|
16
16
|
status: n
|
|
17
17
|
};
|
|
18
18
|
});
|
|
19
|
-
}, [
|
|
19
|
+
}, [_]), y = v.filter((e) => e.status === "completed").length, b = Math.round(y / Math.max(v.length, 1) * 100);
|
|
20
20
|
return /* @__PURE__ */ o("div", {
|
|
21
21
|
className: "max-w-3xl space-y-6 p-6",
|
|
22
22
|
children: [
|
|
23
|
-
/* @__PURE__ */ o("div", { children: [
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
23
|
+
/* @__PURE__ */ o("div", { children: [
|
|
24
|
+
/* @__PURE__ */ a("h1", {
|
|
25
|
+
className: "text-2xl font-semibold",
|
|
26
|
+
children: /* @__PURE__ */ a(m, { children: _?.title || "Leadership Fundamentals for Tech Managers" })
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ o("p", {
|
|
29
|
+
className: "text-sm text-text-secondary",
|
|
30
|
+
children: [
|
|
31
|
+
"by ",
|
|
32
|
+
_?.instructor || "CrewFoundry Academy",
|
|
33
|
+
" · Module ",
|
|
34
|
+
y + 1,
|
|
35
|
+
" of",
|
|
36
|
+
" ",
|
|
37
|
+
v.length
|
|
38
|
+
]
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ a(h, {
|
|
41
|
+
className: "mt-1",
|
|
42
|
+
children: "Work through a course lesson-by-lesson — track your progress and complete modules to build the skill at hand."
|
|
43
|
+
})
|
|
44
|
+
] }),
|
|
45
|
+
/* @__PURE__ */ a(p, {
|
|
46
|
+
treatment: "glass",
|
|
47
|
+
glow: !0,
|
|
48
|
+
className: "border-border-seam",
|
|
49
|
+
children: /* @__PURE__ */ o(u, {
|
|
50
|
+
className: "p-4",
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ o("div", {
|
|
53
|
+
className: "mb-2 flex items-center justify-between",
|
|
54
|
+
children: [/* @__PURE__ */ a("span", {
|
|
55
|
+
className: "text-sm font-medium",
|
|
56
|
+
children: "Progress"
|
|
57
|
+
}), /* @__PURE__ */ o("span", {
|
|
58
|
+
className: "text-sm",
|
|
59
|
+
children: [b, "%"]
|
|
60
|
+
})]
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ a("div", {
|
|
63
|
+
className: "h-3 overflow-hidden rounded bg-bg-sunken",
|
|
64
|
+
children: /* @__PURE__ */ a("div", {
|
|
65
|
+
className: "h-3 rounded bg-action-primary-bg",
|
|
66
|
+
style: { width: `${b}%` }
|
|
67
|
+
})
|
|
68
|
+
}),
|
|
69
|
+
/* @__PURE__ */ o("p", {
|
|
70
|
+
className: "mt-1 text-xs text-text-secondary",
|
|
71
|
+
children: [
|
|
72
|
+
y,
|
|
73
|
+
" of ",
|
|
74
|
+
v.length,
|
|
75
|
+
" modules completed"
|
|
76
|
+
]
|
|
56
77
|
})
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
children: [
|
|
61
|
-
g,
|
|
62
|
-
" of ",
|
|
63
|
-
h.length,
|
|
64
|
-
" modules completed"
|
|
65
|
-
]
|
|
66
|
-
})
|
|
67
|
-
]
|
|
68
|
-
}) }),
|
|
78
|
+
]
|
|
79
|
+
})
|
|
80
|
+
}),
|
|
69
81
|
/* @__PURE__ */ o(l, { children: [/* @__PURE__ */ a(d, { children: /* @__PURE__ */ a(f, { children: "Course Modules" }) }), /* @__PURE__ */ a(u, {
|
|
70
82
|
className: "space-y-2",
|
|
71
|
-
children:
|
|
83
|
+
children: v.map((e, t) => /* @__PURE__ */ o("div", {
|
|
72
84
|
className: `flex items-center gap-3 rounded border p-3 ${e.status === "locked" ? "opacity-50" : ""}`,
|
|
73
85
|
children: [
|
|
74
86
|
/* @__PURE__ */ a("div", {
|
|
75
87
|
className: "flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold",
|
|
76
|
-
children: e.status === "completed" ? /* @__PURE__ */ a(n, { className: "h-5 w-5 text-
|
|
88
|
+
children: e.status === "completed" ? /* @__PURE__ */ a(n, { className: "h-5 w-5 text-status-success-text" }) : t + 1
|
|
77
89
|
}),
|
|
78
90
|
/* @__PURE__ */ o("div", {
|
|
79
91
|
className: "flex-1",
|
|
@@ -106,6 +118,6 @@ function p() {
|
|
|
106
118
|
});
|
|
107
119
|
}
|
|
108
120
|
//#endregion
|
|
109
|
-
export {
|
|
121
|
+
export { g as LearningCourseLearningPagePage };
|
|
110
122
|
|
|
111
123
|
//# sourceMappingURL=LearningCourseLearningPagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LearningCourseLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseLearningPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"LearningCourseLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningCourseLearningPagePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { CheckCircle, Clock, Play } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\ntype CourseModule = {\n id: string;\n title: string;\n duration: string;\n status: 'completed' | 'in_progress' | 'locked';\n};\n\nexport function LearningCourseLearningPagePage() {\n const { courses } = useCrewFoundryStore();\n\n const currentCourse = courses[0];\n\n const courseModules = useMemo<CourseModule[]>(() => {\n const moduleCount = Math.max(currentCourse?.modules || 0, 6);\n return Array.from({ length: moduleCount }, (_, index) => {\n const status: CourseModule['status'] =\n index < 2 ? 'completed' : index === 2 ? 'in_progress' : 'locked';\n return {\n id: `module-${index + 1}`,\n title: `${currentCourse?.title || 'Learning'} Module ${index + 1}`,\n duration: `${25 + (index % 4) * 10} min`,\n status,\n };\n });\n }, [currentCourse]);\n\n const completedCount = courseModules.filter((module) => module.status === 'completed').length;\n const progress = Math.round((completedCount / Math.max(courseModules.length, 1)) * 100);\n\n return (\n <div className=\"max-w-3xl space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>\n {currentCourse?.title || 'Leadership Fundamentals for Tech Managers'}\n </GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">\n by {currentCourse?.instructor || 'CrewFoundry Academy'} · Module {completedCount + 1} of{' '}\n {courseModules.length}\n </p>\n <PagePurpose className=\"mt-1\">Work through a course lesson-by-lesson — track your progress and complete modules to build the skill at hand.</PagePurpose>\n </div>\n\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam\">\n <CardContent className=\"p-4\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm font-medium\">Progress</span>\n <span className=\"text-sm\">{progress}%</span>\n </div>\n <div className=\"h-3 overflow-hidden rounded bg-bg-sunken\">\n <div className=\"h-3 rounded bg-action-primary-bg\" style={{ width: `${progress}%` }} />\n </div>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {completedCount} of {courseModules.length} modules completed\n </p>\n </CardContent>\n </GlassCard>\n\n <Card>\n <CardHeader>\n <CardTitle>Course Modules</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {courseModules.map((module, index) => (\n <div\n key={module.id}\n className={`flex items-center gap-3 rounded border p-3 ${module.status === 'locked' ? 'opacity-50' : ''}`}\n >\n <div className=\"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-bg-sunken text-xs font-bold\">\n {module.status === 'completed' ? (\n <CheckCircle className=\"h-5 w-5 text-status-success-text\" />\n ) : (\n index + 1\n )}\n </div>\n <div className=\"flex-1\">\n <p\n className={`text-sm ${module.status === 'completed' ? 'text-text-secondary line-through' : 'font-medium'}`}\n >\n {module.title}\n </p>\n <p className=\"flex items-center gap-1 text-xs text-text-secondary\">\n <Clock className=\"h-3 w-3\" />\n {module.duration}\n </p>\n </div>\n {module.status === 'in_progress' ? (\n <Button size=\"sm\">\n <Play className=\"mr-1 h-3 w-3\" />\n Continue\n </Button>\n ) : null}\n {module.status === 'completed' ? (\n <Badge variant=\"default\" className=\"text-[10px]\">\n Completed\n </Badge>\n ) : null}\n {module.status === 'locked' ? (\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n Locked\n </Badge>\n ) : null}\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;AAsBA,SAAgB,IAAiC;CAC/C,IAAM,EAAE,eAAY,GAAqB,EAEnC,IAAgB,EAAQ,IAExB,IAAgB,QAA8B;EAClD,IAAM,IAAc,KAAK,IAAI,GAAe,WAAW,GAAG,EAAE;AAC5D,SAAO,MAAM,KAAK,EAAE,QAAQ,GAAa,GAAG,GAAG,MAAU;GACvD,IAAM,IACJ,IAAQ,IAAI,cAAc,MAAU,IAAI,gBAAgB;AAC1D,UAAO;IACL,IAAI,UAAU,IAAQ;IACtB,OAAO,GAAG,GAAe,SAAS,WAAW,UAAU,IAAQ;IAC/D,UAAU,GAAG,KAAM,IAAQ,IAAK,GAAG;IACnC;IACD;IACD;IACD,CAAC,EAAc,CAAC,EAEb,IAAiB,EAAc,QAAQ,MAAW,EAAO,WAAW,YAAY,CAAC,QACjF,IAAW,KAAK,MAAO,IAAiB,KAAK,IAAI,EAAc,QAAQ,EAAE,GAAI,IAAI;AAEvF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UACG,GAAe,SAAS,6CACZ,CAAA;KACZ,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eAAb;MAA2C;MACrC,GAAe,cAAc;MAAsB;MAAW,IAAiB;MAAE;MAAI;MACxF,EAAc;MACb;;IACJ,kBAAC,GAAD;KAAa,WAAU;eAAO;KAA2H,CAAA;IACrJ,EAAA,CAAA;GAEN,kBAAC,GAAD;IAAW,WAAU;IAAQ,MAAA;IAAK,WAAU;cAC1C,kBAAC,GAAD;KAAa,WAAU;eAAvB;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAsB;QAAe,CAAA,EACrD,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CAA2B,GAAS,IAAQ;UACxC;;MACN,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QAAK,WAAU;QAAmC,OAAO,EAAE,OAAO,GAAG,EAAS,IAAI;QAAI,CAAA;OAClF,CAAA;MACN,kBAAC,KAAD;OAAG,WAAU;iBAAb;QACG;QAAe;QAAK,EAAc;QAAO;QACxC;;MACQ;;IACJ,CAAA;GAEZ,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,kBAA0B,CAAA,EAC1B,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAc,KAAK,GAAQ,MAC1B,kBAAC,OAAD;KAEE,WAAW,8CAA8C,EAAO,WAAW,WAAW,eAAe;eAFvG;MAIE,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAO,WAAW,cACjB,kBAAC,GAAD,EAAa,WAAU,oCAAqC,CAAA,GAE5D,IAAQ;OAEN,CAAA;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QACE,WAAW,WAAW,EAAO,WAAW,cAAc,qCAAqC;kBAE1F,EAAO;QACN,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAAb,CACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA,EAC5B,EAAO,SACN;UACA;;MACL,EAAO,WAAW,gBACjB,kBAAC,GAAD;OAAQ,MAAK;iBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,WAE1B;WACP;MACH,EAAO,WAAW,cACjB,kBAAC,GAAD;OAAO,SAAQ;OAAU,WAAU;iBAAc;OAEzC,CAAA,GACN;MACH,EAAO,WAAW,WACjB,kBAAC,GAAD;OAAO,SAAQ;OAAY,WAAU;iBAAc;OAE3C,CAAA,GACN;MACA;OArCC,EAAO,GAqCR,CACN;IACU,CAAA,CACT,EAAA,CAAA;GACH"}
|
|
@@ -2,34 +2,50 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
|
|
|
2
2
|
import { useState as t } from "react";
|
|
3
3
|
import { Search as n, Star as r, Users as i } from "lucide-react";
|
|
4
4
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
5
|
-
import { Badge as s,
|
|
5
|
+
import { Badge as s, CardContent as c, CardDescription as l, CardHeader as u, CardTitle as d, GlassCard as f, GradientText as p, IllustratedEmptyState as m, Input as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
|
|
6
6
|
//#region src/crewfoundry/pages/LearningCoursesPagePage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { courses:
|
|
7
|
+
function _() {
|
|
8
|
+
let { courses: _ } = e(), [v, y] = t(""), b = _.filter((e) => `${e.title} ${e.category} ${e.instructor}`.toLowerCase().includes(v.toLowerCase()));
|
|
9
9
|
return /* @__PURE__ */ o("div", {
|
|
10
10
|
className: "space-y-6 p-6",
|
|
11
11
|
children: [
|
|
12
|
-
/* @__PURE__ */ o("div", { children: [
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
/* @__PURE__ */ o("div", { children: [
|
|
13
|
+
/* @__PURE__ */ a("h1", {
|
|
14
|
+
className: "text-2xl font-semibold",
|
|
15
|
+
children: /* @__PURE__ */ a(p, { children: "Course Catalog" })
|
|
16
|
+
}),
|
|
17
|
+
/* @__PURE__ */ o("p", {
|
|
18
|
+
className: "text-sm text-text-secondary",
|
|
19
|
+
children: [_.length, " courses available"]
|
|
20
|
+
}),
|
|
21
|
+
/* @__PURE__ */ a(g, {
|
|
22
|
+
className: "mt-1",
|
|
23
|
+
children: "Browse the course catalog — find training to grow your team's skills and enroll in the programs that fit your goals."
|
|
24
|
+
})
|
|
25
|
+
] }),
|
|
19
26
|
/* @__PURE__ */ o("div", {
|
|
20
27
|
className: "relative max-w-sm",
|
|
21
|
-
children: [/* @__PURE__ */ a(n, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ a(
|
|
28
|
+
children: [/* @__PURE__ */ a(n, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ a(h, {
|
|
22
29
|
placeholder: "Search courses...",
|
|
23
30
|
className: "pl-9",
|
|
24
|
-
value:
|
|
25
|
-
onChange: (e) =>
|
|
31
|
+
value: v,
|
|
32
|
+
onChange: (e) => y(e.target.value)
|
|
26
33
|
})]
|
|
27
34
|
}),
|
|
28
35
|
/* @__PURE__ */ a("div", {
|
|
29
36
|
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
|
|
30
|
-
children:
|
|
37
|
+
children: b.length === 0 ? /* @__PURE__ */ a("div", {
|
|
38
|
+
className: "col-span-full",
|
|
39
|
+
children: /* @__PURE__ */ a(m, {
|
|
40
|
+
illustration: "empty-search",
|
|
41
|
+
title: "No courses found",
|
|
42
|
+
description: "Try a different search term to find training."
|
|
43
|
+
})
|
|
44
|
+
}) : b.map((e, t) => /* @__PURE__ */ o(f, {
|
|
45
|
+
treatment: t === 0 ? "glass" : "plain",
|
|
46
|
+
glow: t === 0,
|
|
31
47
|
className: "hover:shadow-md transition-shadow cursor-pointer",
|
|
32
|
-
children: [/* @__PURE__ */ o(
|
|
48
|
+
children: [/* @__PURE__ */ o(u, { children: [
|
|
33
49
|
/* @__PURE__ */ o("div", {
|
|
34
50
|
className: "flex items-center justify-between",
|
|
35
51
|
children: [/* @__PURE__ */ a(s, {
|
|
@@ -42,11 +58,11 @@ function m() {
|
|
|
42
58
|
children: e.level
|
|
43
59
|
})]
|
|
44
60
|
}),
|
|
45
|
-
/* @__PURE__ */ a(
|
|
61
|
+
/* @__PURE__ */ a(d, {
|
|
46
62
|
className: "text-base mt-2",
|
|
47
63
|
children: e.title
|
|
48
64
|
}),
|
|
49
|
-
/* @__PURE__ */ o(
|
|
65
|
+
/* @__PURE__ */ o(l, { children: [
|
|
50
66
|
e.instructor,
|
|
51
67
|
" · ",
|
|
52
68
|
e.duration,
|
|
@@ -54,7 +70,7 @@ function m() {
|
|
|
54
70
|
e.modules,
|
|
55
71
|
" modules"
|
|
56
72
|
] })
|
|
57
|
-
] }), /* @__PURE__ */ o(
|
|
73
|
+
] }), /* @__PURE__ */ o(c, { children: [
|
|
58
74
|
/* @__PURE__ */ a("p", {
|
|
59
75
|
className: "text-sm text-text-secondary mb-3",
|
|
60
76
|
children: e.description
|
|
@@ -72,7 +88,7 @@ function m() {
|
|
|
72
88
|
children: [
|
|
73
89
|
/* @__PURE__ */ o("span", {
|
|
74
90
|
className: "flex items-center gap-1",
|
|
75
|
-
children: [/* @__PURE__ */ a(r, { className: "h-3 w-3 text-
|
|
91
|
+
children: [/* @__PURE__ */ a(r, { className: "h-3 w-3 text-status-warning-text" }), e.rating]
|
|
76
92
|
}),
|
|
77
93
|
/* @__PURE__ */ o("span", {
|
|
78
94
|
className: "flex items-center gap-1",
|
|
@@ -92,6 +108,6 @@ function m() {
|
|
|
92
108
|
});
|
|
93
109
|
}
|
|
94
110
|
//#endregion
|
|
95
|
-
export {
|
|
111
|
+
export { _ as LearningCoursesPagePage };
|
|
96
112
|
|
|
97
113
|
//# sourceMappingURL=LearningCoursesPagePage.js.map
|