@burdenoff/microfe-crewfoundry 2026.704.5 → 2026.704.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/dist/crewfoundry/CrewFoundryRoutes.js +51 -43
  2. package/dist/crewfoundry/CrewFoundryRoutes.js.map +1 -1
  3. package/dist/crewfoundry/components/forms/formValues.js +5 -2
  4. package/dist/crewfoundry/components/forms/formValues.js.map +1 -1
  5. package/dist/crewfoundry/components/viz/AllocationBar.js +68 -0
  6. package/dist/crewfoundry/components/viz/AllocationBar.js.map +1 -0
  7. package/dist/crewfoundry/components/viz/AreaChart.js +102 -0
  8. package/dist/crewfoundry/components/viz/AreaChart.js.map +1 -0
  9. package/dist/crewfoundry/components/viz/AvatarStack.js +36 -0
  10. package/dist/crewfoundry/components/viz/AvatarStack.js.map +1 -0
  11. package/dist/crewfoundry/components/viz/BarChart.js +83 -0
  12. package/dist/crewfoundry/components/viz/BarChart.js.map +1 -0
  13. package/dist/crewfoundry/components/viz/CertificateCard.js +118 -0
  14. package/dist/crewfoundry/components/viz/CertificateCard.js.map +1 -0
  15. package/dist/crewfoundry/components/viz/DonutChart.js +109 -0
  16. package/dist/crewfoundry/components/viz/DonutChart.js.map +1 -0
  17. package/dist/crewfoundry/components/viz/HBarFunnel.js +54 -0
  18. package/dist/crewfoundry/components/viz/HBarFunnel.js.map +1 -0
  19. package/dist/crewfoundry/components/viz/Heatmap.js +91 -0
  20. package/dist/crewfoundry/components/viz/Heatmap.js.map +1 -0
  21. package/dist/crewfoundry/components/viz/KanbanBoard.js +50 -0
  22. package/dist/crewfoundry/components/viz/KanbanBoard.js.map +1 -0
  23. package/dist/crewfoundry/components/viz/LineChart.js +123 -0
  24. package/dist/crewfoundry/components/viz/LineChart.js.map +1 -0
  25. package/dist/crewfoundry/components/viz/OrgTree.js +83 -0
  26. package/dist/crewfoundry/components/viz/OrgTree.js.map +1 -0
  27. package/dist/crewfoundry/components/viz/PathSteps.js +68 -0
  28. package/dist/crewfoundry/components/viz/PathSteps.js.map +1 -0
  29. package/dist/crewfoundry/components/viz/ProgressRing.js +68 -0
  30. package/dist/crewfoundry/components/viz/ProgressRing.js.map +1 -0
  31. package/dist/crewfoundry/components/viz/RatingStars.js +51 -0
  32. package/dist/crewfoundry/components/viz/RatingStars.js.map +1 -0
  33. package/dist/crewfoundry/components/viz/SegmentedTabs.js +69 -0
  34. package/dist/crewfoundry/components/viz/SegmentedTabs.js.map +1 -0
  35. package/dist/crewfoundry/components/viz/SkillBar.js +3 -0
  36. package/dist/crewfoundry/components/viz/Sparkline.js +74 -0
  37. package/dist/crewfoundry/components/viz/Sparkline.js.map +1 -0
  38. package/dist/crewfoundry/components/viz/StatCard.js +60 -0
  39. package/dist/crewfoundry/components/viz/StatCard.js.map +1 -0
  40. package/dist/crewfoundry/components/viz/StepProgress.js +3 -0
  41. package/dist/crewfoundry/components/viz/Timeline.js +66 -0
  42. package/dist/crewfoundry/components/viz/Timeline.js.map +1 -0
  43. package/dist/crewfoundry/components/viz/index.js +23 -0
  44. package/dist/crewfoundry/components/viz/lib/Avatar.js +30 -0
  45. package/dist/crewfoundry/components/viz/lib/Avatar.js.map +1 -0
  46. package/dist/crewfoundry/components/viz/lib/CartesianFrame.js +119 -0
  47. package/dist/crewfoundry/components/viz/lib/CartesianFrame.js.map +1 -0
  48. package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js +35 -0
  49. package/dist/crewfoundry/components/viz/lib/ResponsiveSvg.js.map +1 -0
  50. package/dist/crewfoundry/components/viz/lib/format.js +21 -0
  51. package/dist/crewfoundry/components/viz/lib/format.js.map +1 -0
  52. package/dist/crewfoundry/components/viz/lib/geometry.js +69 -0
  53. package/dist/crewfoundry/components/viz/lib/geometry.js.map +1 -0
  54. package/dist/crewfoundry/components/viz/lib/hooks.js +39 -0
  55. package/dist/crewfoundry/components/viz/lib/hooks.js.map +1 -0
  56. package/dist/crewfoundry/components/viz/lib/palette.js +27 -0
  57. package/dist/crewfoundry/components/viz/lib/palette.js.map +1 -0
  58. package/dist/crewfoundry/lib/analytics.js +323 -0
  59. package/dist/crewfoundry/lib/analytics.js.map +1 -0
  60. package/dist/crewfoundry/lib/companyFinance.js +16 -0
  61. package/dist/crewfoundry/lib/companyFinance.js.map +1 -0
  62. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js +226 -283
  63. package/dist/crewfoundry/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  64. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js +107 -120
  65. package/dist/crewfoundry/pages/AnalyticsEmployeeAnalyticsPagePage.js.map +1 -1
  66. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js +122 -162
  67. package/dist/crewfoundry/pages/AnalyticsFinancialAnalyticsPagePage.js.map +1 -1
  68. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js +121 -158
  69. package/dist/crewfoundry/pages/AnalyticsHiringAnalyticsPagePage.js.map +1 -1
  70. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js +316 -211
  71. package/dist/crewfoundry/pages/CommunicationsAnnouncementsPagePage.js.map +1 -1
  72. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js +75 -27
  73. package/dist/crewfoundry/pages/CommunicationsMessagesPagePage.js.map +1 -1
  74. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js +167 -165
  75. package/dist/crewfoundry/pages/CompanyClientManagementPagePage.js.map +1 -1
  76. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js +168 -109
  77. package/dist/crewfoundry/pages/CompanyVendorManagementPagePage.js.map +1 -1
  78. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js +401 -290
  79. package/dist/crewfoundry/pages/DashboardDashboardPagePage.js.map +1 -1
  80. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js +84 -75
  81. package/dist/crewfoundry/pages/HiringApplicationsPagePage.js.map +1 -1
  82. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js +368 -174
  83. package/dist/crewfoundry/pages/HiringCandidatesPagePage.js.map +1 -1
  84. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js +236 -201
  85. package/dist/crewfoundry/pages/HiringCreateJobPagePage.js.map +1 -1
  86. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js +369 -196
  87. package/dist/crewfoundry/pages/HiringInterviewsPagePage.js.map +1 -1
  88. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js +252 -249
  89. package/dist/crewfoundry/pages/HiringJobDetailsPagePage.js.map +1 -1
  90. package/dist/crewfoundry/pages/HiringJobsPagePage.js +210 -110
  91. package/dist/crewfoundry/pages/HiringJobsPagePage.js.map +1 -1
  92. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js +216 -178
  93. package/dist/crewfoundry/pages/HrDepartmentsPagePage.js.map +1 -1
  94. package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js +385 -0
  95. package/dist/crewfoundry/pages/HrEmployeeProfilePagePage.js.map +1 -0
  96. package/dist/crewfoundry/pages/HrEmployeesPagePage.js +189 -130
  97. package/dist/crewfoundry/pages/HrEmployeesPagePage.js.map +1 -1
  98. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js +397 -241
  99. package/dist/crewfoundry/pages/HrLeaveManagementPagePage.js.map +1 -1
  100. package/dist/crewfoundry/pages/HrPayrollPagePage.js +262 -147
  101. package/dist/crewfoundry/pages/HrPayrollPagePage.js.map +1 -1
  102. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js +345 -167
  103. package/dist/crewfoundry/pages/HrTimeTrackingPagePage.js.map +1 -1
  104. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js +98 -24
  105. package/dist/crewfoundry/pages/LearningCertificatesPagePage.js.map +1 -1
  106. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js +35 -31
  107. package/dist/crewfoundry/pages/LearningCourseDetailsPagePage.js.map +1 -1
  108. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js +289 -108
  109. package/dist/crewfoundry/pages/LearningCourseLearningPagePage.js.map +1 -1
  110. package/dist/crewfoundry/pages/LearningCoursesPagePage.js +221 -114
  111. package/dist/crewfoundry/pages/LearningCoursesPagePage.js.map +1 -1
  112. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js +136 -133
  113. package/dist/crewfoundry/pages/LearningLearningPathDetailPagePage.js.map +1 -1
  114. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js +148 -97
  115. package/dist/crewfoundry/pages/LearningLearningPathsPagePage.js.map +1 -1
  116. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js +264 -157
  117. package/dist/crewfoundry/pages/LearningMyLearningPagePage.js.map +1 -1
  118. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePageEnhancedPage.js.map +1 -1
  119. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js +85 -93
  120. package/dist/crewfoundry/pages/MarketplaceFreelancerProfilePagePage.js.map +1 -1
  121. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js +211 -122
  122. package/dist/crewfoundry/pages/MarketplaceMarketplacePagePage.js.map +1 -1
  123. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js +94 -54
  124. package/dist/crewfoundry/pages/MarketplaceMarketplaceServicesPagePage.js.map +1 -1
  125. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js +28 -25
  126. package/dist/crewfoundry/pages/MarketplaceProjectDetailsPagePage.js.map +1 -1
  127. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js +290 -138
  128. package/dist/crewfoundry/pages/MarketplaceServiceDetailsPagePage.js.map +1 -1
  129. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js +169 -79
  130. package/dist/crewfoundry/pages/PaymentsInvoicesPagePage.js.map +1 -1
  131. package/dist/crewfoundry/pages/PaymentsPaymentDashboardPagePage.js.map +1 -1
  132. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js +65 -61
  133. package/dist/crewfoundry/pages/ProjectsProjectDetailsPagePage.js.map +1 -1
  134. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js +296 -125
  135. package/dist/crewfoundry/pages/ProjectsProjectsPagePage.js.map +1 -1
  136. package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js +187 -0
  137. package/dist/crewfoundry/pages/ProjectsResourcingPagePage.js.map +1 -0
  138. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js +142 -76
  139. package/dist/crewfoundry/pages/TeamsTeamDetailPagePage.js.map +1 -1
  140. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js +93 -43
  141. package/dist/crewfoundry/pages/TeamsTeamDirectoryPagePage.js.map +1 -1
  142. package/dist/crewfoundry/pages/TeamsTeamSettingsPagePage.js.map +1 -1
  143. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js +250 -98
  144. package/dist/crewfoundry/pages/TeamsTeamsPagePage.js.map +1 -1
  145. package/dist/crewfoundry/store/crewfoundryStore.js +1 -1
  146. package/dist/crewfoundry/store/crewfoundryStore.js.map +1 -1
  147. package/dist/crewfoundry/utils/cn.js +10 -0
  148. package/dist/crewfoundry/utils/cn.js.map +1 -0
  149. package/dist/crewfoundry/utils/courseProgress.js +46 -0
  150. package/dist/crewfoundry/utils/courseProgress.js.map +1 -0
  151. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  152. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  153. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -0
  154. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  155. package/package.json +1 -1
@@ -1,187 +1,190 @@
1
1
  import { useCrewFoundryStore as e } from "../store/crewfoundryStore.js";
2
2
  import { formatEnumLabel as t } from "../utils/formatEnumLabel.js";
3
- import { useState as n } from "react";
4
- import { BookOpen as r, CheckCircle as i, Clock as a, Star as o, Users as s } from "lucide-react";
5
- import { useSearchParams as c } from "react-router-dom";
6
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
7
- import { Badge as d, Button as f, Card as p, CardContent as m, EmphasisPanel as h, GradientText as g, IllustratedEmptyState as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
8
- import { useGlobalUi as y } from "@burdenoff/fe-libs/shared/providers/shell";
3
+ import { ProgressRing as n } from "../components/viz/ProgressRing.js";
4
+ import { PathSteps as r } from "../components/viz/PathSteps.js";
5
+ import { RatingStars as i } from "../components/viz/RatingStars.js";
6
+ import "../components/viz/index.js";
7
+ import { useState as a } from "react";
8
+ import { BookOpen as o, Check as s, ChevronRight as c, Clock as l, Users as u } from "lucide-react";
9
+ import { useNavigate as d, useSearchParams as f } from "react-router-dom";
10
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
11
+ import { Badge as h, Button as g, Card as _, CardContent as v, EmphasisPanel as y, GradientText as b, IllustratedEmptyState as x, PagePurpose as S, Spinner as C } from "@burdenoff/fe-libs/ui";
12
+ import { useGlobalUi as w } from "@burdenoff/fe-libs/shared/providers/shell";
9
13
  //#region src/crewfoundry/pages/LearningLearningPathDetailPagePage.tsx
10
- function b() {
11
- let [b] = c(), { learningPaths: x, courses: S, enrollCourse: C } = e(), { showToast: w } = y(), [T, E] = n(!1), D = b.get("id"), O = D ? x.find((e) => e.id === D) : x[0];
12
- if (!O) return /* @__PURE__ */ l("div", {
14
+ function T() {
15
+ let [T] = f(), E = d(), { learningPaths: D, courses: O, enrollCourse: k, initialized: A } = e(), { showToast: j } = w(), [M, N] = a(!1), P = T.get("id"), F = P ? D.find((e) => e.id === P) : D[0];
16
+ if (!A && !F) return /* @__PURE__ */ p("div", {
17
+ className: "flex min-h-[60vh] items-center justify-center p-6",
18
+ children: /* @__PURE__ */ p(C, { size: "lg" })
19
+ });
20
+ if (!F) return /* @__PURE__ */ p("div", {
13
21
  className: "p-6",
14
- children: /* @__PURE__ */ l(_, {
22
+ children: /* @__PURE__ */ p(x, {
15
23
  illustration: "empty-search",
16
24
  title: "No learning path found",
17
25
  description: "This learning path is no longer available."
18
26
  })
19
27
  });
20
- let k = S.filter((e) => O.courses.includes(e.id));
21
- return /* @__PURE__ */ u("div", {
22
- className: "space-y-6 p-6 max-w-4xl",
28
+ let I = O.filter((e) => F.courses.includes(e.id)), L = Math.round(F.completionRate / 100 * I.length), R = I.map((e, t) => ({
29
+ label: e.title,
30
+ state: t < L ? "done" : t === L ? "active" : "todo"
31
+ })), z = (e) => E(`../learning/course-learning-page?id=${encodeURIComponent(e)}`);
32
+ return /* @__PURE__ */ m("div", {
33
+ className: "max-w-5xl space-y-6 p-6",
23
34
  children: [
24
- /* @__PURE__ */ u("div", {
25
- className: "flex items-center justify-between",
26
- children: [/* @__PURE__ */ u("div", { children: [
27
- /* @__PURE__ */ l("h1", {
35
+ /* @__PURE__ */ m("div", {
36
+ className: "flex flex-wrap items-start justify-between gap-3",
37
+ children: [/* @__PURE__ */ m("div", { children: [
38
+ /* @__PURE__ */ p("h1", {
28
39
  className: "text-2xl font-semibold",
29
- children: /* @__PURE__ */ l(g, { children: O.title })
40
+ children: /* @__PURE__ */ p(b, { children: F.title })
30
41
  }),
31
- /* @__PURE__ */ l("p", {
42
+ /* @__PURE__ */ p("p", {
32
43
  className: "text-sm text-text-secondary",
33
- children: O.description
44
+ children: F.description
34
45
  }),
35
- /* @__PURE__ */ l(v, {
46
+ /* @__PURE__ */ p(S, {
36
47
  className: "mt-1",
37
48
  children: "Follow a single learning path end-to-end — see its courses, your progress, and what to complete next to finish the journey."
38
49
  })
39
- ] }), /* @__PURE__ */ l(f, {
50
+ ] }), /* @__PURE__ */ p(g, {
40
51
  onClick: async () => {
41
- if (k.length === 0) {
42
- w("No courses in this path yet", "warning");
52
+ if (I.length === 0) {
53
+ j("No courses in this path yet", "warning");
43
54
  return;
44
55
  }
45
- E(!0);
56
+ N(!0);
46
57
  try {
47
- for (let e of k) await C(e.id);
48
- w(`Enrolled in ${k.length} course${k.length > 1 ? "s" : ""}`, "success");
58
+ for (let e of I) await k(e.id);
59
+ j(`Enrolled in ${I.length} course${I.length > 1 ? "s" : ""}`, "success");
49
60
  } catch (e) {
50
- w(e instanceof Error ? e.message : "Unable to enroll in path", "error");
61
+ j(e instanceof Error ? e.message : "Unable to enroll in path", "error");
51
62
  } finally {
52
- E(!1);
63
+ N(!1);
53
64
  }
54
65
  },
55
- disabled: T,
56
- children: T ? "Enrolling…" : "Enroll Now"
66
+ disabled: M,
67
+ children: M ? "Enrolling…" : "Enroll Now"
57
68
  })]
58
69
  }),
59
- /* @__PURE__ */ u("div", {
60
- className: "grid gap-4 md:grid-cols-4",
61
- children: [
62
- /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
63
- className: "p-4 text-center",
70
+ /* @__PURE__ */ p(_, { children: /* @__PURE__ */ m(v, {
71
+ className: "grid gap-6 p-5 md:grid-cols-[auto_minmax(0,1fr)] md:items-center",
72
+ children: [/* @__PURE__ */ p("div", {
73
+ className: "flex items-center justify-center",
74
+ children: /* @__PURE__ */ p(n, {
75
+ value: F.completionRate,
76
+ caption: "complete",
77
+ label: `${F.completionRate}%`
78
+ })
79
+ }), /* @__PURE__ */ m("div", {
80
+ className: "space-y-4",
81
+ children: [/* @__PURE__ */ m("div", {
82
+ className: "flex flex-wrap gap-2",
64
83
  children: [
65
- /* @__PURE__ */ l(r, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
66
- /* @__PURE__ */ l("p", {
67
- className: "text-lg font-bold",
68
- children: O.courses.length
84
+ /* @__PURE__ */ p(h, {
85
+ variant: "secondary",
86
+ className: "text-[10px]",
87
+ children: t(F.level)
69
88
  }),
70
- /* @__PURE__ */ l("p", {
71
- className: "text-xs text-text-secondary",
72
- children: "Courses"
73
- })
74
- ]
75
- }) }),
76
- /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
77
- className: "p-4 text-center",
78
- children: [
79
- /* @__PURE__ */ l(a, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
80
- /* @__PURE__ */ l("p", {
81
- className: "text-lg font-bold",
82
- children: O.duration
89
+ /* @__PURE__ */ m(h, {
90
+ variant: "outline",
91
+ className: "inline-flex items-center gap-1 text-[10px]",
92
+ children: [/* @__PURE__ */ p(l, { className: "h-3 w-3" }), F.duration]
83
93
  }),
84
- /* @__PURE__ */ l("p", {
85
- className: "text-xs text-text-secondary",
86
- children: "Duration"
87
- })
88
- ]
89
- }) }),
90
- /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
91
- className: "p-4 text-center",
92
- children: [
93
- /* @__PURE__ */ l(s, { className: "h-5 w-5 mx-auto text-text-secondary mb-1" }),
94
- /* @__PURE__ */ l("p", {
95
- className: "text-lg font-bold",
96
- children: O.enrolled
97
- }),
98
- /* @__PURE__ */ l("p", {
99
- className: "text-xs text-text-secondary",
100
- children: "Enrolled"
101
- })
102
- ]
103
- }) }),
104
- /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
105
- className: "p-4 text-center",
106
- children: [
107
- /* @__PURE__ */ l(i, { className: "h-5 w-5 mx-auto text-status-success-text mb-1" }),
108
- /* @__PURE__ */ u("p", {
109
- className: "text-lg font-bold",
110
- children: [O.completionRate, "%"]
94
+ /* @__PURE__ */ m(h, {
95
+ variant: "outline",
96
+ className: "inline-flex items-center gap-1 text-[10px]",
97
+ children: [
98
+ /* @__PURE__ */ p(o, { className: "h-3 w-3" }),
99
+ I.length,
100
+ " courses"
101
+ ]
111
102
  }),
112
- /* @__PURE__ */ l("p", {
113
- className: "text-xs text-text-secondary",
114
- children: "Completion"
103
+ /* @__PURE__ */ m(h, {
104
+ variant: "outline",
105
+ className: "inline-flex items-center gap-1 text-[10px]",
106
+ children: [
107
+ /* @__PURE__ */ p(u, { className: "h-3 w-3" }),
108
+ F.enrolled,
109
+ " enrolled"
110
+ ]
115
111
  })
116
112
  ]
117
- }) })
118
- ]
119
- }),
120
- /* @__PURE__ */ u(h, { children: [
121
- /* @__PURE__ */ l("div", {
113
+ }), R.length > 0 ? /* @__PURE__ */ p(r, { steps: R }) : /* @__PURE__ */ p("p", {
114
+ className: "text-sm text-text-secondary",
115
+ children: "No courses have been added to this path yet."
116
+ })]
117
+ })]
118
+ }) }),
119
+ /* @__PURE__ */ m(y, { children: [
120
+ /* @__PURE__ */ p("div", {
122
121
  className: "text-lg font-semibold",
123
122
  children: "Courses in this Path"
124
123
  }),
125
- /* @__PURE__ */ u("p", {
124
+ /* @__PURE__ */ m("p", {
126
125
  className: "mb-4 text-sm text-text-secondary",
127
126
  children: [
128
- k.length,
127
+ I.length,
129
128
  " courses · ",
130
- O.level
129
+ t(F.level)
131
130
  ]
132
131
  }),
133
- /* @__PURE__ */ l("div", {
132
+ /* @__PURE__ */ p("div", {
134
133
  className: "space-y-3",
135
- children: k.length === 0 ? /* @__PURE__ */ l(_, {
134
+ children: I.length === 0 ? /* @__PURE__ */ p(x, {
136
135
  illustration: "empty-generic",
137
136
  title: "No courses in this path yet",
138
137
  description: "Courses added to this path will appear here in order."
139
- }) : k.map((e, n) => /* @__PURE__ */ u("div", {
140
- className: "flex items-center gap-3 rounded border p-4",
141
- children: [
142
- /* @__PURE__ */ l("div", {
143
- className: "flex-shrink-0 w-8 h-8 rounded-full bg-action-primary-bg/10 flex items-center justify-center text-sm font-bold",
144
- children: n + 1
145
- }),
146
- /* @__PURE__ */ u("div", {
147
- className: "flex-1",
148
- children: [/* @__PURE__ */ l("p", {
149
- className: "text-sm font-medium",
150
- children: e.title
151
- }), /* @__PURE__ */ u("p", {
152
- className: "text-xs text-text-secondary",
153
- children: [
154
- e.instructor,
155
- " · ",
156
- e.duration,
157
- " · ",
158
- e.modules,
159
- " modules"
160
- ]
161
- })]
162
- }),
163
- /* @__PURE__ */ u("div", {
164
- className: "flex items-center gap-2",
165
- children: [/* @__PURE__ */ u("div", {
166
- className: "flex items-center gap-1",
167
- children: [/* @__PURE__ */ l(o, { className: "h-3 w-3 text-status-warning-text" }), /* @__PURE__ */ l("span", {
168
- className: "text-sm",
169
- children: e.rating
138
+ }) : I.map((e, n) => {
139
+ let r = n < L;
140
+ return /* @__PURE__ */ m("button", {
141
+ type: "button",
142
+ onClick: () => z(e.id),
143
+ className: "flex w-full items-center gap-3 rounded-lg border border-border-subtle p-4 text-left transition-colors hover:border-border-strong hover:bg-bg-sunken",
144
+ children: [
145
+ /* @__PURE__ */ p("span", {
146
+ className: `flex h-8 w-8 shrink-0 items-center justify-center rounded-full border text-sm font-semibold ${r ? "border-transparent bg-status-success-bg text-status-success-text" : n === L ? "border-action-primary-bg text-action-primary-bg" : "border-border-default text-text-secondary"}`,
147
+ children: r ? /* @__PURE__ */ p(s, { className: "h-4 w-4" }) : n + 1
148
+ }),
149
+ /* @__PURE__ */ m("div", {
150
+ className: "min-w-0 flex-1",
151
+ children: [/* @__PURE__ */ p("p", {
152
+ className: "truncate text-sm font-medium",
153
+ children: e.title
154
+ }), /* @__PURE__ */ m("p", {
155
+ className: "truncate text-xs text-text-secondary",
156
+ children: [
157
+ e.instructor,
158
+ " · ",
159
+ e.duration,
160
+ " · ",
161
+ e.modules,
162
+ " modules"
163
+ ]
170
164
  })]
171
- }), /* @__PURE__ */ l(d, {
172
- variant: e.level === "beginner" ? "secondary" : e.level === "intermediate" ? "default" : "destructive",
173
- className: "text-[10px]",
174
- children: t(e.level)
175
- })]
176
- })
177
- ]
178
- }, e.id))
165
+ }),
166
+ /* @__PURE__ */ m("div", {
167
+ className: "hidden items-center gap-3 sm:flex",
168
+ children: [/* @__PURE__ */ p(i, {
169
+ value: e.rating,
170
+ size: 13,
171
+ showValue: !0
172
+ }), /* @__PURE__ */ p(h, {
173
+ variant: e.level === "beginner" ? "secondary" : e.level === "intermediate" ? "default" : "destructive",
174
+ className: "text-[10px]",
175
+ children: t(e.level)
176
+ })]
177
+ }),
178
+ /* @__PURE__ */ p(c, { className: "h-4 w-4 shrink-0 text-text-muted" })
179
+ ]
180
+ }, e.id);
181
+ })
179
182
  })
180
183
  ] })
181
184
  ]
182
185
  });
183
186
  }
184
187
  //#endregion
185
- export { b as LearningLearningPathDetailPagePage };
188
+ export { T as LearningLearningPathDetailPagePage };
186
189
 
187
190
  //# sourceMappingURL=LearningLearningPathDetailPagePage.js.map
@@ -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 EmphasisPanel,\n GradientText,\n IllustratedEmptyState,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, CheckCircle, Clock, Star, Users } from 'lucide-react';\nimport { useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nexport function LearningLearningPathDetailPagePage() {\n const [searchParams] = useSearchParams();\n const { learningPaths, courses, enrollCourse } = useCrewFoundryStore();\n const { showToast } = useGlobalUi();\n const [enrolling, setEnrolling] = useState(false);\n const pathId = searchParams.get('id');\n const path = pathId ? learningPaths.find((p) => p.id === pathId) : 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 const handleEnroll = async () => {\n if (pathCourses.length === 0) {\n showToast('No courses in this path yet', 'warning');\n return;\n }\n setEnrolling(true);\n try {\n for (const course of pathCourses) {\n await enrollCourse(course.id);\n }\n showToast(\n `Enrolled in ${pathCourses.length} course${pathCourses.length > 1 ? 's' : ''}`,\n 'success'\n );\n } catch (error) {\n showToast(error instanceof Error ? error.message : 'Unable to enroll in path', 'error');\n } finally {\n setEnrolling(false);\n }\n };\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\">\n Follow a single learning path end-to-end — see its courses, your progress, and what to\n complete next to finish the journey.\n </PagePurpose>\n </div>\n <Button onClick={handleEnroll} disabled={enrolling}>\n {enrolling ? 'Enrolling…' : 'Enroll Now'}\n </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 {formatEnumLabel(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
+ {"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 Spinner,\n} from '@burdenoff/fe-libs/ui';\nimport { BookOpen, Check, ChevronRight, Clock, Users } from 'lucide-react';\nimport { useState } from 'react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport { useGlobalUi } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useCrewFoundryStore } from '../store/crewfoundryStore';\nimport { PathSteps, ProgressRing, RatingStars, type PathStep } from '../components/viz';\nimport { formatEnumLabel } from '../utils/formatEnumLabel';\n\nexport function LearningLearningPathDetailPagePage() {\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n const { learningPaths, courses, enrollCourse, initialized } = useCrewFoundryStore();\n const { showToast } = useGlobalUi();\n const [enrolling, setEnrolling] = useState(false);\n const pathId = searchParams.get('id');\n const path = pathId ? learningPaths.find((p) => p.id === pathId) : learningPaths[0];\n if (!initialized && !path) {\n return (\n <div className=\"flex min-h-[60vh] items-center justify-center p-6\">\n <Spinner size=\"lg\" />\n </div>\n );\n }\n\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 const completedCount = Math.round((path.completionRate / 100) * pathCourses.length);\n const steps: PathStep[] = pathCourses.map((c, i) => ({\n label: c.title,\n state: i < completedCount ? 'done' : i === completedCount ? 'active' : 'todo',\n }));\n\n const openPlayer = (id: string) =>\n navigate(`../learning/course-learning-page?id=${encodeURIComponent(id)}`);\n\n const handleEnroll = async () => {\n if (pathCourses.length === 0) {\n showToast('No courses in this path yet', 'warning');\n return;\n }\n setEnrolling(true);\n try {\n for (const course of pathCourses) {\n await enrollCourse(course.id);\n }\n showToast(\n `Enrolled in ${pathCourses.length} course${pathCourses.length > 1 ? 's' : ''}`,\n 'success'\n );\n } catch (error) {\n showToast(error instanceof Error ? error.message : 'Unable to enroll in path', 'error');\n } finally {\n setEnrolling(false);\n }\n };\n\n return (\n <div className=\"max-w-5xl space-y-6 p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n <GradientText>{path.title}</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{path.description}</p>\n <PagePurpose className=\"mt-1\">\n Follow a single learning path end-to-end — see its courses, your progress, and what to\n complete next to finish the journey.\n </PagePurpose>\n </div>\n <Button onClick={handleEnroll} disabled={enrolling}>\n {enrolling ? 'Enrolling…' : 'Enroll Now'}\n </Button>\n </div>\n\n {/* Overview: progress ring + timeline */}\n <Card>\n <CardContent className=\"grid gap-6 p-5 md:grid-cols-[auto_minmax(0,1fr)] md:items-center\">\n <div className=\"flex items-center justify-center\">\n <ProgressRing\n value={path.completionRate}\n caption=\"complete\"\n label={`${path.completionRate}%`}\n />\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap gap-2\">\n <Badge variant=\"secondary\" className=\"text-[10px]\">\n {formatEnumLabel(path.level)}\n </Badge>\n <Badge variant=\"outline\" className=\"inline-flex items-center gap-1 text-[10px]\">\n <Clock className=\"h-3 w-3\" />\n {path.duration}\n </Badge>\n <Badge variant=\"outline\" className=\"inline-flex items-center gap-1 text-[10px]\">\n <BookOpen className=\"h-3 w-3\" />\n {pathCourses.length} courses\n </Badge>\n <Badge variant=\"outline\" className=\"inline-flex items-center gap-1 text-[10px]\">\n <Users className=\"h-3 w-3\" />\n {path.enrolled} enrolled\n </Badge>\n </div>\n {steps.length > 0 ? (\n <PathSteps steps={steps} />\n ) : (\n <p className=\"text-sm text-text-secondary\">\n No courses have been added to this path yet.\n </p>\n )}\n </div>\n </CardContent>\n </Card>\n\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 · {formatEnumLabel(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 const done = idx < completedCount;\n const isCurrent = idx === completedCount;\n return (\n <button\n key={course.id}\n type=\"button\"\n onClick={() => openPlayer(course.id)}\n className=\"flex w-full items-center gap-3 rounded-lg border border-border-subtle p-4 text-left transition-colors hover:border-border-strong hover:bg-bg-sunken\"\n >\n <span\n className={`flex h-8 w-8 shrink-0 items-center justify-center rounded-full border text-sm font-semibold ${\n done\n ? 'border-transparent bg-status-success-bg text-status-success-text'\n : isCurrent\n ? 'border-action-primary-bg text-action-primary-bg'\n : 'border-border-default text-text-secondary'\n }`}\n >\n {done ? <Check className=\"h-4 w-4\" /> : idx + 1}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{course.title}</p>\n <p className=\"truncate text-xs text-text-secondary\">\n {course.instructor} · {course.duration} · {course.modules} modules\n </p>\n </div>\n <div className=\"hidden items-center gap-3 sm:flex\">\n <RatingStars value={course.rating} size={13} showValue />\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 {formatEnumLabel(course.level)}\n </Badge>\n </div>\n <ChevronRight className=\"h-4 w-4 shrink-0 text-text-muted\" />\n </button>\n );\n })\n )}\n </div>\n </EmphasisPanel>\n </div>\n );\n}\n"],"mappings":"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"}