@burdenoff/microfe-crewfoundry 2026.625.1 → 2026.626.1

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.
Files changed (131) hide show
  1. package/dist/crewfoundry/pages/AdminAdminPagePage.js +37 -29
  2. package/dist/crewfoundry/pages/AdminAdminPagePage.js.map +1 -1
  3. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +50 -42
  4. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  5. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +39 -31
  6. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  7. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +52 -44
  8. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  9. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +46 -38
  10. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  11. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +28 -15
  12. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  13. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js +30 -22
  14. package/dist/crewfoundry/pages/CommunicationsCallsPagePage.js.map +1 -1
  15. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js +87 -69
  16. package/dist/crewfoundry/pages/CommunicationsDirectoryPagePage.js.map +1 -1
  17. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js +99 -80
  18. package/dist/crewfoundry/pages/CommunicationsFilesPagePage.js.map +1 -1
  19. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +86 -67
  20. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  21. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js +31 -15
  22. package/dist/crewfoundry/pages/CommunicationsTeamsPagePage.js.map +1 -1
  23. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js +37 -29
  24. package/dist/crewfoundry/pages/CommunicationsVideoCallsPagePage.js.map +1 -1
  25. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +29 -21
  26. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  27. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js +25 -17
  28. package/dist/crewfoundry/pages/CompanyCompanyDashboardPagePage.js.map +1 -1
  29. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js +42 -35
  30. package/dist/crewfoundry/pages/CompanyCompanyProfilePagePage.js.map +1 -1
  31. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +80 -62
  32. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  33. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js +41 -33
  34. package/dist/crewfoundry/pages/DashboardAnalyticsPagePage.js.map +1 -1
  35. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +142 -108
  36. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  37. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js +177 -136
  38. package/dist/crewfoundry/pages/DashboardEnhancedDashboardPagePage.js.map +1 -1
  39. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js +44 -36
  40. package/dist/crewfoundry/pages/DashboardExecutiveDashboardPage.js.map +1 -1
  41. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js +49 -38
  42. package/dist/crewfoundry/pages/HelpApiDocumentationPagePage.js.map +1 -1
  43. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +26 -18
  44. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  45. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +112 -93
  46. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  47. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +53 -46
  48. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  49. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +31 -23
  50. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  51. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +129 -90
  52. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  53. package/dist/crewfoundry/pages/HiringJobsPagePage.js +96 -85
  54. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  55. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +26 -18
  56. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  57. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +47 -35
  58. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  59. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +33 -25
  60. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  61. package/dist/crewfoundry/pages/HrPayrollPagePage.js +36 -28
  62. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  63. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +27 -19
  64. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  65. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js +27 -19
  66. package/dist/crewfoundry/pages/LearningAssessmentsPagePage.js.map +1 -1
  67. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +93 -75
  68. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  69. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +111 -70
  70. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  71. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +65 -53
  72. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  73. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +35 -19
  74. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  75. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js +33 -25
  76. package/dist/crewfoundry/pages/LearningLearningAnalyticsPagePage.js.map +1 -1
  77. package/dist/crewfoundry/pages/LearningLearningPagePage.js +26 -18
  78. package/dist/crewfoundry/pages/LearningLearningPagePage.js.map +1 -1
  79. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +80 -55
  80. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  81. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +33 -17
  82. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  83. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +31 -23
  84. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  85. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js +29 -21
  86. package/dist/crewfoundry/pages/MarketplaceBookingManagementPagePage.js.map +1 -1
  87. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js +35 -27
  88. package/dist/crewfoundry/pages/MarketplaceEarningsPagePage.js.map +1 -1
  89. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js +147 -112
  90. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  91. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +31 -27
  92. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  93. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +31 -23
  94. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  95. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +104 -85
  96. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  97. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js +75 -56
  98. package/dist/crewfoundry/pages/MarketplaceMessagingPagePage.js.map +1 -1
  99. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js +78 -60
  100. package/dist/crewfoundry/pages/MarketplaceMyServicesPagePage.js.map +1 -1
  101. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +133 -92
  102. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  103. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +93 -52
  104. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  105. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js +28 -20
  106. package/dist/crewfoundry/pages/PaymentsEscrowPagePage.js.map +1 -1
  107. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +84 -65
  108. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  109. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js +25 -17
  110. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  111. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js +58 -40
  112. package/dist/crewfoundry/pages/PaymentsPaymentMethodsPagePage.js.map +1 -1
  113. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js +41 -33
  114. package/dist/crewfoundry/pages/PaymentsSecurityPagePage.js.map +1 -1
  115. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js +36 -29
  116. package/dist/crewfoundry/pages/ProjectsCreateProjectPagePage.js.map +1 -1
  117. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +103 -72
  118. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  119. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +43 -27
  120. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js +28 -20
  122. package/dist/crewfoundry/pages/TeamsTeamAnalyticsPagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +103 -62
  124. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +83 -64
  126. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js +185 -144
  128. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +40 -24
  130. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  131. package/package.json +2 -2
@@ -1,25 +1,33 @@
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
3
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
- import { Badge as c, Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p, GlassCard as m, GradientText as h } from "@burdenoff/fe-libs/ui";
4
+ import { Badge as c, Card as l, CardContent as u, CardDescription as d, CardHeader as f, CardTitle as p, GlassCard as m, GradientText as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/LearningLearningPagePage.tsx
6
- function g() {
7
- let { courses: g, learningPaths: _ } = e(), v = g.reduce((e, t) => e + t.enrolled, 0), y = g.reduce((e, t) => e + t.completed, 0);
6
+ function _() {
7
+ let { courses: _, learningPaths: v } = e(), y = _.reduce((e, t) => e + t.enrolled, 0), b = _.reduce((e, t) => e + t.completed, 0);
8
8
  return /* @__PURE__ */ s("div", {
9
9
  className: "space-y-6 p-6",
10
10
  children: [
11
- /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
12
- className: "text-2xl font-semibold",
13
- children: /* @__PURE__ */ o(h, { children: "Learning & Development" })
14
- }), /* @__PURE__ */ o("p", {
15
- className: "text-sm text-text-secondary",
16
- children: "Explore courses, learning paths, and grow your skills"
17
- })] }),
11
+ /* @__PURE__ */ s("div", { children: [
12
+ /* @__PURE__ */ o("h1", {
13
+ className: "text-2xl font-semibold",
14
+ children: /* @__PURE__ */ o(h, { children: "Learning & Development" })
15
+ }),
16
+ /* @__PURE__ */ o("p", {
17
+ className: "text-sm text-text-secondary",
18
+ children: "Explore courses, learning paths, and grow your skills"
19
+ }),
20
+ /* @__PURE__ */ o(g, {
21
+ className: "mt-1",
22
+ children: "Your learning home — discover courses, continue where you left off, and keep developing the skills your role needs."
23
+ })
24
+ ] }),
18
25
  /* @__PURE__ */ s("div", {
19
26
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
20
27
  children: [
21
28
  /* @__PURE__ */ s(m, {
22
- treatment: "metric",
29
+ treatment: "glass",
30
+ glow: !0,
23
31
  className: "border-border-seam",
24
32
  children: [/* @__PURE__ */ s(f, {
25
33
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
@@ -29,7 +37,7 @@ function g() {
29
37
  }), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-text-secondary" })]
30
38
  }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o("div", {
31
39
  className: "text-2xl font-bold tabular-nums",
32
- children: g.length
40
+ children: _.length
33
41
  }), /* @__PURE__ */ o("p", {
34
42
  className: "text-xs text-text-secondary",
35
43
  children: "Active courses"
@@ -46,7 +54,7 @@ function g() {
46
54
  }), /* @__PURE__ */ o(a, { className: "h-4 w-4 text-text-secondary" })]
47
55
  }), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o("div", {
48
56
  className: "text-2xl font-bold tabular-nums",
49
- children: v
57
+ children: y
50
58
  }) })]
51
59
  }),
52
60
  /* @__PURE__ */ s(m, {
@@ -60,7 +68,7 @@ function g() {
60
68
  }), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-status-success-text" })]
61
69
  }), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o("div", {
62
70
  className: "text-2xl font-bold tabular-nums",
63
- children: y
71
+ children: b
64
72
  }) })]
65
73
  }),
66
74
  /* @__PURE__ */ s(m, {
@@ -74,7 +82,7 @@ function g() {
74
82
  }), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-text-secondary" })]
75
83
  }), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o("div", {
76
84
  className: "text-2xl font-bold tabular-nums",
77
- children: _.length
85
+ children: v.length
78
86
  }) })]
79
87
  })
80
88
  ]
@@ -84,7 +92,7 @@ function g() {
84
92
  children: "Featured Courses"
85
93
  }), /* @__PURE__ */ o("div", {
86
94
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
87
- children: g.slice(0, 3).map((e) => /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, {
95
+ children: _.slice(0, 3).map((e) => /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, {
88
96
  className: "text-base",
89
97
  children: e.title
90
98
  }), /* @__PURE__ */ s(d, { children: [
@@ -133,7 +141,7 @@ function g() {
133
141
  children: "Learning Paths"
134
142
  }), /* @__PURE__ */ o("div", {
135
143
  className: "grid gap-4 md:grid-cols-3",
136
- children: _.map((e) => /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, {
144
+ children: v.map((e) => /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o(p, {
137
145
  className: "text-base",
138
146
  children: e.title
139
147
  }), /* @__PURE__ */ o(d, { children: e.description })] }), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s("div", {
@@ -165,6 +173,6 @@ function g() {
165
173
  });
166
174
  }
167
175
  //#endregion
168
- export { g as LearningLearningPagePage };
176
+ export { _ as LearningLearningPagePage };
169
177
 
170
178
  //# sourceMappingURL=LearningLearningPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LearningLearningPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { Award, 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 </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\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\">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 { Award, 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,13 +1,17 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { BookOpen as t, CheckCircle as n, Clock as r, Star as i, Users as a } from "lucide-react";
3
3
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
- import { Badge as c, Button as l, Card as u, CardContent as d, CardDescription as f, CardHeader as p, CardTitle as m, GradientText as h } from "@burdenoff/fe-libs/ui";
4
+ import { Badge as c, Button as l, Card as u, CardContent as d, EmphasisPanel as f, GradientText as p, IllustratedEmptyState as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/LearningLearningPathDetailPagePage.tsx
6
6
  function g() {
7
7
  let { learningPaths: g, courses: _ } = e(), v = g[0];
8
8
  if (!v) return /* @__PURE__ */ o("div", {
9
- className: "p-6 text-text-secondary",
10
- children: "No learning path found."
9
+ className: "p-6",
10
+ children: /* @__PURE__ */ o(m, {
11
+ illustration: "empty-search",
12
+ title: "No learning path found",
13
+ description: "This learning path is no longer available."
14
+ })
11
15
  });
12
16
  let y = _.filter((e) => v.courses.includes(e.id));
13
17
  return /* @__PURE__ */ s("div", {
@@ -15,13 +19,20 @@ function g() {
15
19
  children: [
16
20
  /* @__PURE__ */ s("div", {
17
21
  className: "flex items-center justify-between",
18
- children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
19
- className: "text-2xl font-semibold",
20
- children: /* @__PURE__ */ o(h, { children: v.title })
21
- }), /* @__PURE__ */ o("p", {
22
- className: "text-sm text-text-secondary",
23
- children: v.description
24
- })] }), /* @__PURE__ */ o(l, { children: "Enroll Now" })]
22
+ children: [/* @__PURE__ */ s("div", { children: [
23
+ /* @__PURE__ */ o("h1", {
24
+ className: "text-2xl font-semibold",
25
+ children: /* @__PURE__ */ o(p, { children: v.title })
26
+ }),
27
+ /* @__PURE__ */ o("p", {
28
+ className: "text-sm text-text-secondary",
29
+ children: v.description
30
+ }),
31
+ /* @__PURE__ */ o(h, {
32
+ className: "mt-1",
33
+ children: "Follow a single learning path end-to-end — see its courses, your progress, and what to complete next to finish the journey."
34
+ })
35
+ ] }), /* @__PURE__ */ o(l, { children: "Enroll Now" })]
25
36
  }),
26
37
  /* @__PURE__ */ s("div", {
27
38
  className: "grid gap-4 md:grid-cols-4",
@@ -84,53 +95,67 @@ function g() {
84
95
  }) })
85
96
  ]
86
97
  }),
87
- /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ s(p, { children: [/* @__PURE__ */ o(m, { children: "Courses in this Path" }), /* @__PURE__ */ s(f, { children: [
88
- y.length,
89
- " courses · ",
90
- v.level
91
- ] })] }), /* @__PURE__ */ o(d, {
92
- className: "space-y-3",
93
- children: y.map((e, t) => /* @__PURE__ */ s("div", {
94
- className: "flex items-center gap-3 rounded border p-4",
98
+ /* @__PURE__ */ s(f, { children: [
99
+ /* @__PURE__ */ o("div", {
100
+ className: "text-lg font-semibold",
101
+ children: "Courses in this Path"
102
+ }),
103
+ /* @__PURE__ */ s("p", {
104
+ className: "mb-4 text-sm text-text-secondary",
95
105
  children: [
96
- /* @__PURE__ */ o("div", {
97
- className: "flex-shrink-0 w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold",
98
- children: t + 1
99
- }),
100
- /* @__PURE__ */ s("div", {
101
- className: "flex-1",
102
- children: [/* @__PURE__ */ o("p", {
103
- className: "text-sm font-medium",
104
- children: e.title
105
- }), /* @__PURE__ */ s("p", {
106
- className: "text-xs text-text-secondary",
107
- children: [
108
- e.instructor,
109
- " · ",
110
- e.duration,
111
- " · ",
112
- e.modules,
113
- " modules"
114
- ]
115
- })]
116
- }),
117
- /* @__PURE__ */ s("div", {
118
- className: "flex items-center gap-2",
119
- children: [/* @__PURE__ */ s("div", {
120
- className: "flex items-center gap-1",
121
- children: [/* @__PURE__ */ o(i, { className: "h-3 w-3 text-status-warning-text" }), /* @__PURE__ */ o("span", {
122
- className: "text-sm",
123
- children: e.rating
124
- })]
125
- }), /* @__PURE__ */ o(c, {
126
- variant: e.level === "beginner" ? "secondary" : e.level === "intermediate" ? "default" : "destructive",
127
- className: "text-[10px]",
128
- children: e.level
129
- })]
130
- })
106
+ y.length,
107
+ " courses · ",
108
+ v.level
131
109
  ]
132
- }, e.id))
133
- })] })
110
+ }),
111
+ /* @__PURE__ */ o("div", {
112
+ className: "space-y-3",
113
+ children: y.length === 0 ? /* @__PURE__ */ o(m, {
114
+ illustration: "empty-generic",
115
+ title: "No courses in this path yet",
116
+ description: "Courses added to this path will appear here in order."
117
+ }) : y.map((e, t) => /* @__PURE__ */ s("div", {
118
+ className: "flex items-center gap-3 rounded border p-4",
119
+ children: [
120
+ /* @__PURE__ */ o("div", {
121
+ className: "flex-shrink-0 w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold",
122
+ children: t + 1
123
+ }),
124
+ /* @__PURE__ */ s("div", {
125
+ className: "flex-1",
126
+ children: [/* @__PURE__ */ o("p", {
127
+ className: "text-sm font-medium",
128
+ children: e.title
129
+ }), /* @__PURE__ */ s("p", {
130
+ className: "text-xs text-text-secondary",
131
+ children: [
132
+ e.instructor,
133
+ " · ",
134
+ e.duration,
135
+ " · ",
136
+ e.modules,
137
+ " modules"
138
+ ]
139
+ })]
140
+ }),
141
+ /* @__PURE__ */ s("div", {
142
+ className: "flex items-center gap-2",
143
+ children: [/* @__PURE__ */ s("div", {
144
+ className: "flex items-center gap-1",
145
+ children: [/* @__PURE__ */ o(i, { className: "h-3 w-3 text-status-warning-text" }), /* @__PURE__ */ o("span", {
146
+ className: "text-sm",
147
+ children: e.rating
148
+ })]
149
+ }), /* @__PURE__ */ o(c, {
150
+ variant: e.level === "beginner" ? "secondary" : e.level === "intermediate" ? "default" : "destructive",
151
+ className: "text-[10px]",
152
+ children: e.level
153
+ })]
154
+ })
155
+ ]
156
+ }, e.id))
157
+ })
158
+ ] })
134
159
  ]
135
160
  });
136
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LearningLearningPathDetailPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPathDetailPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, CheckCircle, Clock, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningLearningPathDetailPagePage() {\n const { learningPaths, courses } = useCrewFoundryStore();\n const path = learningPaths[0];\n if (!path) return <div className=\"p-6 text-text-secondary\">No learning path found.</div>;\n const pathCourses = courses.filter((c) => path.courses.includes(c.id));\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 <h1 className=\"text-2xl font-semibold\">\n <GradientText>{path.title}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{path.description}</p>\n </div>\n <Button>Enroll Now</Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\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\">{path.courses.length}</p>\n <p className=\"text-xs text-text-secondary\">Courses</p>\n </CardContent>\n </Card>\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\">{path.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 <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{path.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 <CheckCircle className=\"h-5 w-5 mx-auto text-status-success-text mb-1\" />\n <p className=\"text-lg font-bold\">{path.completionRate}%</p>\n <p className=\"text-xs text-text-secondary\">Completion</p>\n </CardContent>\n </Card>\n </div>\n <Card>\n <CardHeader>\n <CardTitle>Courses in this Path</CardTitle>\n <CardDescription>\n {pathCourses.length} courses · {path.level}\n </CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {pathCourses.map((course, idx) => (\n <div key={course.id} className=\"flex items-center gap-3 rounded border p-4\">\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold\">\n {idx + 1}\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{course.title}</p>\n <p className=\"text-xs text-text-secondary\">\n {course.instructor} · {course.duration} · {course.modules} modules\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\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 <Badge\n variant={\n course.level === 'beginner'\n ? 'secondary'\n : course.level === 'intermediate'\n ? 'default'\n : 'destructive'\n }\n className=\"text-[10px]\"\n >\n {course.level}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;AAaA,SAAgB,IAAqC;CACnD,IAAM,EAAE,kBAAe,eAAY,GAAqB,EAClD,IAAO,EAAc;AAC3B,KAAI,CAAC,EAAM,QAAO,kBAAC,OAAD;EAAK,WAAU;YAA0B;EAA6B,CAAA;CACxF,IAAM,IAAc,EAAQ,QAAQ,MAAM,EAAK,QAAQ,SAAS,EAAE,GAAG,CAAC;AAEtE,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAe,EAAK,OAAqB,CAAA;KACtC,CAAA,EACL,kBAAC,KAAD;KAAG,WAAU;eAA+B,EAAK;KAAgB,CAAA,CAC7D,EAAA,CAAA,EACN,kBAAC,GAAD,EAAA,UAAQ,cAAmB,CAAA,CACvB;;GACN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAU,WAAU,4CAA6C,CAAA;OACjE,kBAAC,KAAD;QAAG,WAAU;kBAAqB,EAAK,QAAQ;QAAW,CAAA;OAC1D,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAW,CAAA;OAC1C;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAO,WAAU,4CAA6C,CAAA;OAC9D,kBAAC,KAAD;QAAG,WAAU;kBAAqB,EAAK;QAAa,CAAA;OACpD,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAY,CAAA;OAC3C;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAO,WAAU,4CAA6C,CAAA;OAC9D,kBAAC,KAAD;QAAG,WAAU;kBAAqB,EAAK;QAAa,CAAA;OACpD,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAY,CAAA;OAC3C;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,GAAD,EAAa,WAAU,iDAAkD,CAAA;OACzE,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAAkC,EAAK,gBAAe,IAAK;;OAC3D,kBAAC,KAAD;QAAG,WAAU;kBAA8B;QAAc,CAAA;OAC7C;SACT,CAAA;KACH;;GACN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAW,wBAAgC,CAAA,EAC3C,kBAAC,GAAD,EAAA,UAAA;IACG,EAAY;IAAO;IAAY,EAAK;IACrB,EAAA,CAAA,CACP,EAAA,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAY,KAAK,GAAQ,MACxB,kBAAC,OAAD;KAAqB,WAAU;eAA/B;MACE,kBAAC,OAAD;OAAK,WAAU;iBACZ,IAAM;OACH,CAAA;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAuB,EAAO;QAAU,CAAA,EACrD,kBAAC,KAAD;QAAG,WAAU;kBAAb;SACG,EAAO;SAAW;SAAI,EAAO;SAAS;SAAI,EAAO;SAAQ;SACxD;UACA;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,oCAAqC,CAAA,EACrD,kBAAC,QAAD;SAAM,WAAU;mBAAW,EAAO;SAAc,CAAA,CAC5C;WACN,kBAAC,GAAD;QACE,SACE,EAAO,UAAU,aACb,cACA,EAAO,UAAU,iBACf,YACA;QAER,WAAU;kBAET,EAAO;QACF,CAAA,CACJ;;MACF;OA5BI,EAAO,GA4BX,CACN;IACU,CAAA,CACT,EAAA,CAAA;GACH"}
1
+ {"version":3,"file":"LearningLearningPathDetailPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPathDetailPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, CheckCircle, Clock, Star, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningLearningPathDetailPagePage() {\n const { learningPaths, courses } = useCrewFoundryStore();\n const path = learningPaths[0];\n if (!path)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No learning path found\"\n description=\"This learning path is no longer available.\"\n />\n </div>\n );\n const pathCourses = courses.filter((c) => path.courses.includes(c.id));\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 <h1 className=\"text-2xl font-semibold\">\n <GradientText>{path.title}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{path.description}</p>\n <PagePurpose className=\"mt-1\">Follow a single learning path end-to-end — see its courses, your progress, and what to complete next to finish the journey.</PagePurpose>\n </div>\n <Button>Enroll Now</Button>\n </div>\n <div className=\"grid gap-4 md:grid-cols-4\">\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\">{path.courses.length}</p>\n <p className=\"text-xs text-text-secondary\">Courses</p>\n </CardContent>\n </Card>\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\">{path.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 <Users className=\"h-5 w-5 mx-auto text-text-secondary mb-1\" />\n <p className=\"text-lg font-bold\">{path.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 <CheckCircle className=\"h-5 w-5 mx-auto text-status-success-text mb-1\" />\n <p className=\"text-lg font-bold\">{path.completionRate}%</p>\n <p className=\"text-xs text-text-secondary\">Completion</p>\n </CardContent>\n </Card>\n </div>\n <EmphasisPanel>\n <div className=\"text-lg font-semibold\">Courses in this Path</div>\n <p className=\"mb-4 text-sm text-text-secondary\">\n {pathCourses.length} courses · {path.level}\n </p>\n <div className=\"space-y-3\">\n {pathCourses.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title=\"No courses in this path yet\"\n description=\"Courses added to this path will appear here in order.\"\n />\n ) : (\n pathCourses.map((course, idx) => (\n <div key={course.id} className=\"flex items-center gap-3 rounded border p-4\">\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold\">\n {idx + 1}\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{course.title}</p>\n <p className=\"text-xs text-text-secondary\">\n {course.instructor} · {course.duration} · {course.modules} modules\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\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 <Badge\n variant={\n course.level === 'beginner'\n ? 'secondary'\n : course.level === 'intermediate'\n ? 'default'\n : 'destructive'\n }\n className=\"text-[10px]\"\n >\n {course.level}\n </Badge>\n </div>\n </div>\n ))\n )}\n </div>\n </EmphasisPanel>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,28 +1,44 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { BookOpen as t, GraduationCap as n } from "lucide-react";
3
3
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
- import { Badge as a, Card as o, CardContent as s, CardDescription as c, CardHeader as l, CardTitle as u, GradientText as d } from "@burdenoff/fe-libs/ui";
4
+ import { Badge as a, CardContent as o, CardDescription as s, CardHeader as c, CardTitle as l, GlassCard as u, GradientText as d, IllustratedEmptyState as f, PagePurpose as p } from "@burdenoff/fe-libs/ui";
5
5
  //#region src/crewfoundry/pages/LearningLearningPathsPagePage.tsx
6
- function f() {
7
- let { learningPaths: f, courses: p } = e();
6
+ function m() {
7
+ let { learningPaths: m, courses: h } = e();
8
8
  return /* @__PURE__ */ i("div", {
9
9
  className: "space-y-6 p-6",
10
- children: [/* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("h1", {
11
- className: "text-2xl font-semibold",
12
- children: /* @__PURE__ */ r(d, { children: "Learning Paths" })
13
- }), /* @__PURE__ */ r("p", {
14
- className: "text-sm text-text-secondary",
15
- children: "Structured learning journeys for career growth"
16
- })] }), /* @__PURE__ */ r("div", {
10
+ children: [/* @__PURE__ */ i("div", { children: [
11
+ /* @__PURE__ */ r("h1", {
12
+ className: "text-2xl font-semibold",
13
+ children: /* @__PURE__ */ r(d, { children: "Learning Paths" })
14
+ }),
15
+ /* @__PURE__ */ r("p", {
16
+ className: "text-sm text-text-secondary",
17
+ children: "Structured learning journeys for career growth"
18
+ }),
19
+ /* @__PURE__ */ r(p, {
20
+ className: "mt-1",
21
+ children: "Structured learning journeys that string courses together — follow a path to build toward a role or skill set step by step."
22
+ })
23
+ ] }), /* @__PURE__ */ r("div", {
17
24
  className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
18
- children: f.map((e) => {
19
- let d = p.filter((t) => e.courses.includes(t.id));
20
- return /* @__PURE__ */ i(o, {
25
+ children: m.length === 0 ? /* @__PURE__ */ r("div", {
26
+ className: "col-span-full",
27
+ children: /* @__PURE__ */ r(f, {
28
+ illustration: "empty-generic",
29
+ title: "No learning paths yet",
30
+ description: "Learning paths will appear here once they are created."
31
+ })
32
+ }) : m.map((e, d) => {
33
+ let f = h.filter((t) => e.courses.includes(t.id));
34
+ return /* @__PURE__ */ i(u, {
35
+ treatment: d === 0 ? "glass" : "plain",
36
+ glow: d === 0,
21
37
  className: "hover:shadow-md transition-shadow cursor-pointer",
22
- children: [/* @__PURE__ */ i(l, { children: [/* @__PURE__ */ r(u, {
38
+ children: [/* @__PURE__ */ i(c, { children: [/* @__PURE__ */ r(l, {
23
39
  className: "text-lg",
24
40
  children: e.title
25
- }), /* @__PURE__ */ r(c, { children: e.description })] }), /* @__PURE__ */ r(s, { children: /* @__PURE__ */ i("div", {
41
+ }), /* @__PURE__ */ r(s, { children: e.description })] }), /* @__PURE__ */ r(o, { children: /* @__PURE__ */ i("div", {
26
42
  className: "space-y-3",
27
43
  children: [
28
44
  /* @__PURE__ */ i("div", {
@@ -43,7 +59,7 @@ function f() {
43
59
  }),
44
60
  /* @__PURE__ */ r("div", {
45
61
  className: "space-y-1 mt-2",
46
- children: d.map((e) => /* @__PURE__ */ i("div", {
62
+ children: f.map((e) => /* @__PURE__ */ i("div", {
47
63
  className: "flex items-center gap-2 text-xs text-text-secondary",
48
64
  children: [/* @__PURE__ */ r(n, { className: "h-3 w-3" }), e.title]
49
65
  }, e.id))
@@ -69,6 +85,6 @@ function f() {
69
85
  });
70
86
  }
71
87
  //#endregion
72
- export { f as LearningLearningPathsPagePage };
88
+ export { m as LearningLearningPathsPagePage };
73
89
 
74
90
  //# sourceMappingURL=LearningLearningPathsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LearningLearningPathsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPathsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GradientText,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, GraduationCap, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningLearningPathsPagePage() {\n const { learningPaths, courses } = useCrewFoundryStore();\n\n return (\n <div className=\"space-y-6 p-6\">\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 </div>\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {learningPaths.map((path) => {\n const pathCourses = courses.filter((c) => path.courses.includes(c.id));\n return (\n <Card key={path.id} className=\"hover:shadow-md transition-shadow cursor-pointer\">\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 {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 </Card>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAgB,IAAgC;CAC9C,IAAM,EAAE,kBAAe,eAAY,GAAqB;AAExD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aACZ,kBAAC,GAAD,EAAA,UAAc,kBAA6B,CAAA;GACxC,CAAA,EACL,kBAAC,KAAD;GAAG,WAAU;aAA8B;GAEvC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAc,KAAK,MAAS;IAC3B,IAAM,IAAc,EAAQ,QAAQ,MAAM,EAAK,QAAQ,SAAS,EAAE,GAAG,CAAC;AACtE,WACE,kBAAC,GAAD;KAAoB,WAAU;eAA9B,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAW,WAAU;gBAAW,EAAK;MAAkB,CAAA,EACvD,kBAAC,GAAD,EAAA,UAAkB,EAAK,aAA8B,CAAA,CAC1C,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;UAC/B,EAAK,QAAQ;UAAO;UAChB;YACP,kBAAC,QAAD,EAAA,UAAO,EAAK,UAAgB,CAAA,CACxB;;OACN,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAK;QACA,CAAA;OACR,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAY,KAAK,MAChB,kBAAC,OAAD;SAEE,WAAU;mBAFZ,CAIE,kBAAC,GAAD,EAAe,WAAU,WAAY,CAAA,EACpC,EAAE,MACC;WALC,EAAE,GAKH,CACN;QACE,CAAA;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAK,UAAS,YAAgB,EAAA,CAAA,EACrC,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAK,gBAAe,IAAQ,EAAA,CAAA,CAC/B;YACN,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UACE,WAAU;UACV,OAAO,EAAE,OAAO,GAAG,EAAK,eAAe,IAAI;UAC3C,CAAA;SACE,CAAA,CACF;;OACF;SACM,CAAA,CACT;OA1CI,EAAK,GA0CT;KAET;GACE,CAAA,CACF"}
1
+ {"version":3,"file":"LearningLearningPathsPagePage.js","names":[],"sources":["../../../src/crewfoundry/pages/LearningLearningPathsPagePage.tsx"],"sourcesContent":["import {\n Badge,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, GraduationCap, Users } from 'lucide-react';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\n\nexport function LearningLearningPathsPagePage() {\n const { learningPaths, courses } = useCrewFoundryStore();\n\n return (\n <div className=\"space-y-6 p-6\">\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\">Structured learning journeys that string courses together — follow a path to build toward a role or skill set step by step.</PagePurpose>\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 learningPaths.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 className=\"hover:shadow-md transition-shadow cursor-pointer\"\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 {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 </div>\n );\n}\n"],"mappings":";;;;;AAcA,SAAgB,IAAgC;CAC9C,IAAM,EAAE,kBAAe,eAAY,GAAqB;AAExD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD,EAAA,UAAA;GACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,kBAA6B,CAAA;IACxC,CAAA;GACL,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAEvC,CAAA;GACJ,kBAAC,GAAD;IAAa,WAAU;cAAO;IAAyI,CAAA;GACnK,EAAA,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAc,WAAW,IACxB,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KACE,cAAa;KACb,OAAM;KACN,aAAY;KACZ,CAAA;IACE,CAAA,GAEN,EAAc,KAAK,GAAM,MAAS;IAChC,IAAM,IAAc,EAAQ,QAAQ,MAAM,EAAK,QAAQ,SAAS,EAAE,GAAG,CAAC;AACtE,WACE,kBAAC,GAAD;KAEE,WAAW,MAAS,IAAI,UAAU;KAClC,MAAM,MAAS;KACf,WAAU;eAJZ,CAMA,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MAAW,WAAU;gBAAW,EAAK;MAAkB,CAAA,EACvD,kBAAC,GAAD,EAAA,UAAkB,EAAK,aAA8B,CAAA,CAC1C,EAAA,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;UAC/B,EAAK,QAAQ;UAAO;UAChB;YACP,kBAAC,QAAD,EAAA,UAAO,EAAK,UAAgB,CAAA,CACxB;;OACN,kBAAC,GAAD;QAAO,SAAQ;QAAU,WAAU;kBAChC,EAAK;QACA,CAAA;OACR,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAY,KAAK,MAChB,kBAAC,OAAD;SAEE,WAAU;mBAFZ,CAIE,kBAAC,GAAD,EAAe,WAAU,WAAY,CAAA,EACpC,EAAE,MACC;WALC,EAAE,GAKH,CACN;QACE,CAAA;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAK,UAAS,YAAgB,EAAA,CAAA,EACrC,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAK,gBAAe,IAAQ,EAAA,CAAA,CAC/B;YACN,kBAAC,OAAD;SAAK,WAAU;mBACb,kBAAC,OAAD;UACE,WAAU;UACV,OAAO,EAAE,OAAO,GAAG,EAAK,eAAe,IAAI;UAC3C,CAAA;SACE,CAAA,CACF;;OACF;SACM,CAAA,CACJ;OA9CH,EAAK,GA8CF;KAEZ;GAEA,CAAA,CACF"}
@@ -2,14 +2,14 @@ import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { useMemo as t } from "react";
3
3
  import { Award as n, BookOpen as r, Clock as i, Play as a, Star as o } from "lucide-react";
4
4
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
- import { Badge as l, Button as u, Card as d, CardContent as f, CardDescription as p, CardHeader as m, CardTitle as h, GlassCard as g, GradientText as _ } from "@burdenoff/fe-libs/ui";
5
+ import { Badge as l, Button as u, Card as d, CardContent as f, CardDescription as p, CardHeader as m, CardTitle as h, GlassCard as g, GradientText as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/crewfoundry/pages/LearningMyLearningPagePage.tsx
7
- var v = (/* @__PURE__ */ new Date("2026-03-01T00:00:00Z")).getTime(), y = (e) => {
7
+ var y = (/* @__PURE__ */ new Date("2026-03-01T00:00:00Z")).getTime(), b = (e) => {
8
8
  let t = new Date(e);
9
9
  return Number.isNaN(t.getTime()) ? "Unknown" : t.toISOString().split("T")[0];
10
10
  };
11
- function b() {
12
- let { courses: b } = e(), x = t(() => b.filter((e) => e.status === "active").slice(0, 8).map((e, t) => {
11
+ function x() {
12
+ let { courses: x } = e(), S = t(() => x.filter((e) => e.status === "active").slice(0, 8).map((e, t) => {
13
13
  let n = Math.min(e.modules, Math.round(e.completed / Math.max(e.enrolled, 1) * e.modules)), r = Math.round(n / Math.max(e.modules, 1) * 100);
14
14
  return {
15
15
  id: e.id,
@@ -18,30 +18,38 @@ function b() {
18
18
  modules: e.modules,
19
19
  completedModules: n,
20
20
  instructor: e.instructor,
21
- dueDate: y(new Date(v + (t + 1) * 864e5 * 12).toISOString())
21
+ dueDate: b(new Date(y + (t + 1) * 864e5 * 12).toISOString())
22
22
  };
23
- }), [b]), S = t(() => b.filter((e) => e.completed > 0).slice(0, 8).map((e, t) => ({
23
+ }), [x]), C = t(() => x.filter((e) => e.completed > 0).slice(0, 8).map((e, t) => ({
24
24
  id: `completed-${e.id}`,
25
25
  title: e.title,
26
- completedDate: y((/* @__PURE__ */ new Date(v - (t + 1) * 864e5 * 15)).toISOString()),
26
+ completedDate: b((/* @__PURE__ */ new Date(y - (t + 1) * 864e5 * 15)).toISOString()),
27
27
  rating: Number(e.rating.toFixed(1)),
28
28
  certificate: e.completed / Math.max(e.enrolled, 1) > .35
29
- })), [b]), C = x.reduce((e, t) => e + t.completedModules * 1.25, 0);
29
+ })), [x]), w = S.reduce((e, t) => e + t.completedModules * 1.25, 0);
30
30
  return /* @__PURE__ */ c("div", {
31
31
  className: "space-y-6 p-6",
32
32
  children: [
33
- /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
34
- className: "text-2xl font-semibold",
35
- children: /* @__PURE__ */ s(_, { children: "My Learning" })
36
- }), /* @__PURE__ */ s("p", {
37
- className: "text-sm text-text-secondary",
38
- children: "Track your learning progress and achievements"
39
- })] }),
33
+ /* @__PURE__ */ c("div", { children: [
34
+ /* @__PURE__ */ s("h1", {
35
+ className: "text-2xl font-semibold",
36
+ children: /* @__PURE__ */ s(_, { children: "My Learning" })
37
+ }),
38
+ /* @__PURE__ */ s("p", {
39
+ className: "text-sm text-text-secondary",
40
+ children: "Track your learning progress and achievements"
41
+ }),
42
+ /* @__PURE__ */ s(v, {
43
+ className: "mt-1",
44
+ children: "Everything you're currently learning — track your enrolled courses, progress, and certificates earned all in one place."
45
+ })
46
+ ] }),
40
47
  /* @__PURE__ */ c("div", {
41
48
  className: "grid gap-4 md:grid-cols-4",
42
49
  children: [
43
50
  /* @__PURE__ */ c(g, {
44
- treatment: "metric",
51
+ treatment: "glass",
52
+ glow: !0,
45
53
  className: "border-border-seam",
46
54
  children: [/* @__PURE__ */ c(m, {
47
55
  className: "flex flex-row items-center justify-between space-y-0 pb-2",
@@ -51,7 +59,7 @@ function b() {
51
59
  }), /* @__PURE__ */ s(r, { className: "h-4 w-4 text-status-info-text" })]
52
60
  }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
53
61
  className: "text-2xl font-bold tabular-nums",
54
- children: x.length
62
+ children: S.length
55
63
  }) })]
56
64
  }),
57
65
  /* @__PURE__ */ c(g, {
@@ -65,7 +73,7 @@ function b() {
65
73
  }), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-status-success-text" })]
66
74
  }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
67
75
  className: "text-2xl font-bold tabular-nums",
68
- children: S.length
76
+ children: C.length
69
77
  }) })]
70
78
  }),
71
79
  /* @__PURE__ */ c(g, {
@@ -79,7 +87,7 @@ function b() {
79
87
  }), /* @__PURE__ */ s(i, { className: "h-4 w-4 text-text-secondary" })]
80
88
  }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
81
89
  className: "text-2xl font-bold tabular-nums",
82
- children: C.toFixed(1)
90
+ children: w.toFixed(1)
83
91
  }) })]
84
92
  }),
85
93
  /* @__PURE__ */ c(g, {
@@ -93,14 +101,14 @@ function b() {
93
101
  }), /* @__PURE__ */ s(n, { className: "h-4 w-4 text-status-warning-text" })]
94
102
  }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
95
103
  className: "text-2xl font-bold tabular-nums",
96
- children: S.filter((e) => e.certificate).length
104
+ children: C.filter((e) => e.certificate).length
97
105
  }) })]
98
106
  })
99
107
  ]
100
108
  }),
101
109
  /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ c(m, { children: [/* @__PURE__ */ s(h, { children: "In Progress" }), /* @__PURE__ */ s(p, { children: "Continue where you left off" })] }), /* @__PURE__ */ s(f, {
102
110
  className: "space-y-4",
103
- children: x.map((e) => /* @__PURE__ */ c("div", {
111
+ children: S.map((e) => /* @__PURE__ */ c("div", {
104
112
  className: "flex items-center gap-4 rounded border p-4",
105
113
  children: [/* @__PURE__ */ c("div", {
106
114
  className: "flex-1",
@@ -148,7 +156,7 @@ function b() {
148
156
  })] }),
149
157
  /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(m, { children: /* @__PURE__ */ s(h, { children: "Completed" }) }), /* @__PURE__ */ s(f, {
150
158
  className: "space-y-3",
151
- children: S.map((e) => /* @__PURE__ */ c("div", {
159
+ children: C.map((e) => /* @__PURE__ */ c("div", {
152
160
  className: "flex items-center justify-between rounded border p-3",
153
161
  children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
154
162
  className: "text-sm font-medium",
@@ -177,6 +185,6 @@ function b() {
177
185
  });
178
186
  }
179
187
  //#endregion
180
- export { b as LearningMyLearningPagePage };
188
+ export { x as LearningMyLearningPagePage };
181
189
 
182
190
  //# sourceMappingURL=LearningMyLearningPagePage.js.map