@burdenoff/microfe-buildmyiq 2026.509.101

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 (182) hide show
  1. package/README.md +12 -0
  2. package/dist/buildmyiq/BuildMyIQRoot.d.ts +5 -0
  3. package/dist/buildmyiq/BuildMyIQRoot.d.ts.map +1 -0
  4. package/dist/buildmyiq/BuildMyIQRoot.js +329 -0
  5. package/dist/buildmyiq/BuildMyIQRoot.js.map +1 -0
  6. package/dist/buildmyiq/BuildMyIQRoutes.d.ts +2 -0
  7. package/dist/buildmyiq/BuildMyIQRoutes.d.ts.map +1 -0
  8. package/dist/buildmyiq/BuildMyIQRoutes.js +171 -0
  9. package/dist/buildmyiq/BuildMyIQRoutes.js.map +1 -0
  10. package/dist/buildmyiq/index.d.ts +5 -0
  11. package/dist/buildmyiq/index.d.ts.map +1 -0
  12. package/dist/buildmyiq/index.js +3 -0
  13. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.d.ts +2 -0
  14. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.d.ts.map +1 -0
  15. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.js +271 -0
  16. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.js.map +1 -0
  17. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.d.ts +2 -0
  18. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.d.ts.map +1 -0
  19. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.js +212 -0
  20. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.js.map +1 -0
  21. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.d.ts +2 -0
  22. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.d.ts.map +1 -0
  23. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.js +235 -0
  24. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.js.map +1 -0
  25. package/dist/buildmyiq/pages/AdminIndexPage.d.ts +2 -0
  26. package/dist/buildmyiq/pages/AdminIndexPage.d.ts.map +1 -0
  27. package/dist/buildmyiq/pages/AdminIndexPage.js +274 -0
  28. package/dist/buildmyiq/pages/AdminIndexPage.js.map +1 -0
  29. package/dist/buildmyiq/pages/AiAichatPagePage.d.ts +2 -0
  30. package/dist/buildmyiq/pages/AiAichatPagePage.d.ts.map +1 -0
  31. package/dist/buildmyiq/pages/AiAichatPagePage.js +209 -0
  32. package/dist/buildmyiq/pages/AiAichatPagePage.js.map +1 -0
  33. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.d.ts +2 -0
  34. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.d.ts.map +1 -0
  35. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.js +318 -0
  36. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.js.map +1 -0
  37. package/dist/buildmyiq/pages/AiAitutoringPagePage.d.ts +2 -0
  38. package/dist/buildmyiq/pages/AiAitutoringPagePage.d.ts.map +1 -0
  39. package/dist/buildmyiq/pages/AiAitutoringPagePage.js +290 -0
  40. package/dist/buildmyiq/pages/AiAitutoringPagePage.js.map +1 -0
  41. package/dist/buildmyiq/pages/AiIndexPage.d.ts +2 -0
  42. package/dist/buildmyiq/pages/AiIndexPage.d.ts.map +1 -0
  43. package/dist/buildmyiq/pages/AiIndexPage.js +191 -0
  44. package/dist/buildmyiq/pages/AiIndexPage.js.map +1 -0
  45. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.d.ts +2 -0
  46. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.d.ts.map +1 -0
  47. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.js +290 -0
  48. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.js.map +1 -0
  49. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.d.ts +2 -0
  50. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.d.ts.map +1 -0
  51. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.js +215 -0
  52. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.js.map +1 -0
  53. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.d.ts +2 -0
  54. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.d.ts.map +1 -0
  55. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.js +224 -0
  56. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.js.map +1 -0
  57. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.d.ts +2 -0
  58. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.d.ts.map +1 -0
  59. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.js +174 -0
  60. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.js.map +1 -0
  61. package/dist/buildmyiq/pages/AssessmentsIndexPage.d.ts +2 -0
  62. package/dist/buildmyiq/pages/AssessmentsIndexPage.d.ts.map +1 -0
  63. package/dist/buildmyiq/pages/AssessmentsIndexPage.js +174 -0
  64. package/dist/buildmyiq/pages/AssessmentsIndexPage.js.map +1 -0
  65. package/dist/buildmyiq/pages/CalendarPage.d.ts +2 -0
  66. package/dist/buildmyiq/pages/CalendarPage.d.ts.map +1 -0
  67. package/dist/buildmyiq/pages/CalendarPage.js +242 -0
  68. package/dist/buildmyiq/pages/CalendarPage.js.map +1 -0
  69. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.d.ts +2 -0
  70. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.d.ts.map +1 -0
  71. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.js +180 -0
  72. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.js.map +1 -0
  73. package/dist/buildmyiq/pages/CommunicationForumsPagePage.d.ts +2 -0
  74. package/dist/buildmyiq/pages/CommunicationForumsPagePage.d.ts.map +1 -0
  75. package/dist/buildmyiq/pages/CommunicationForumsPagePage.js +154 -0
  76. package/dist/buildmyiq/pages/CommunicationForumsPagePage.js.map +1 -0
  77. package/dist/buildmyiq/pages/CommunicationIndexPage.d.ts +2 -0
  78. package/dist/buildmyiq/pages/CommunicationIndexPage.d.ts.map +1 -0
  79. package/dist/buildmyiq/pages/CommunicationIndexPage.js +191 -0
  80. package/dist/buildmyiq/pages/CommunicationIndexPage.js.map +1 -0
  81. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.d.ts +2 -0
  82. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.d.ts.map +1 -0
  83. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.js +261 -0
  84. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.js.map +1 -0
  85. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.d.ts +2 -0
  86. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.d.ts.map +1 -0
  87. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.js +164 -0
  88. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.js.map +1 -0
  89. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.d.ts +2 -0
  90. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.d.ts.map +1 -0
  91. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.js +239 -0
  92. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.js.map +1 -0
  93. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.d.ts +2 -0
  94. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.d.ts.map +1 -0
  95. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.js +368 -0
  96. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.js.map +1 -0
  97. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.d.ts +2 -0
  98. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.d.ts.map +1 -0
  99. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.js +219 -0
  100. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.js.map +1 -0
  101. package/dist/buildmyiq/pages/CoursesCourseListPagePage.d.ts +2 -0
  102. package/dist/buildmyiq/pages/CoursesCourseListPagePage.d.ts.map +1 -0
  103. package/dist/buildmyiq/pages/CoursesCourseListPagePage.js +153 -0
  104. package/dist/buildmyiq/pages/CoursesCourseListPagePage.js.map +1 -0
  105. package/dist/buildmyiq/pages/CoursesIndexPage.d.ts +2 -0
  106. package/dist/buildmyiq/pages/CoursesIndexPage.d.ts.map +1 -0
  107. package/dist/buildmyiq/pages/CoursesIndexPage.js +138 -0
  108. package/dist/buildmyiq/pages/CoursesIndexPage.js.map +1 -0
  109. package/dist/buildmyiq/pages/DashboardPage.d.ts +2 -0
  110. package/dist/buildmyiq/pages/DashboardPage.d.ts.map +1 -0
  111. package/dist/buildmyiq/pages/DashboardPage.js +264 -0
  112. package/dist/buildmyiq/pages/DashboardPage.js.map +1 -0
  113. package/dist/buildmyiq/pages/MessagesPage.d.ts +2 -0
  114. package/dist/buildmyiq/pages/MessagesPage.d.ts.map +1 -0
  115. package/dist/buildmyiq/pages/MessagesPage.js +261 -0
  116. package/dist/buildmyiq/pages/MessagesPage.js.map +1 -0
  117. package/dist/buildmyiq/pages/ProfileProgressPage.d.ts +2 -0
  118. package/dist/buildmyiq/pages/ProfileProgressPage.d.ts.map +1 -0
  119. package/dist/buildmyiq/pages/ProfileProgressPage.js +194 -0
  120. package/dist/buildmyiq/pages/ProfileProgressPage.js.map +1 -0
  121. package/dist/buildmyiq/pages/TeachingAnalyticsPage.d.ts +2 -0
  122. package/dist/buildmyiq/pages/TeachingAnalyticsPage.d.ts.map +1 -0
  123. package/dist/buildmyiq/pages/TeachingAnalyticsPage.js +243 -0
  124. package/dist/buildmyiq/pages/TeachingAnalyticsPage.js.map +1 -0
  125. package/dist/buildmyiq/pages/TeachingContentPage.d.ts +2 -0
  126. package/dist/buildmyiq/pages/TeachingContentPage.d.ts.map +1 -0
  127. package/dist/buildmyiq/pages/TeachingContentPage.js +165 -0
  128. package/dist/buildmyiq/pages/TeachingContentPage.js.map +1 -0
  129. package/dist/buildmyiq/pages/TeachingCoursesPage.d.ts +2 -0
  130. package/dist/buildmyiq/pages/TeachingCoursesPage.d.ts.map +1 -0
  131. package/dist/buildmyiq/pages/TeachingCoursesPage.js +151 -0
  132. package/dist/buildmyiq/pages/TeachingCoursesPage.js.map +1 -0
  133. package/dist/buildmyiq/pages/TeachingGradingPage.d.ts +2 -0
  134. package/dist/buildmyiq/pages/TeachingGradingPage.d.ts.map +1 -0
  135. package/dist/buildmyiq/pages/TeachingGradingPage.js +204 -0
  136. package/dist/buildmyiq/pages/TeachingGradingPage.js.map +1 -0
  137. package/dist/buildmyiq/pages/TeachingIndexPage.d.ts +2 -0
  138. package/dist/buildmyiq/pages/TeachingIndexPage.d.ts.map +1 -0
  139. package/dist/buildmyiq/pages/TeachingIndexPage.js +220 -0
  140. package/dist/buildmyiq/pages/TeachingIndexPage.js.map +1 -0
  141. package/dist/buildmyiq/pages/TeachingLessonPlansPage.d.ts +2 -0
  142. package/dist/buildmyiq/pages/TeachingLessonPlansPage.d.ts.map +1 -0
  143. package/dist/buildmyiq/pages/TeachingLessonPlansPage.js +157 -0
  144. package/dist/buildmyiq/pages/TeachingLessonPlansPage.js.map +1 -0
  145. package/dist/buildmyiq/pages/TeachingQuestionsPage.d.ts +2 -0
  146. package/dist/buildmyiq/pages/TeachingQuestionsPage.d.ts.map +1 -0
  147. package/dist/buildmyiq/pages/TeachingQuestionsPage.js +184 -0
  148. package/dist/buildmyiq/pages/TeachingQuestionsPage.js.map +1 -0
  149. package/dist/buildmyiq/pages/TeachingStudentsPage.d.ts +2 -0
  150. package/dist/buildmyiq/pages/TeachingStudentsPage.d.ts.map +1 -0
  151. package/dist/buildmyiq/pages/TeachingStudentsPage.js +204 -0
  152. package/dist/buildmyiq/pages/TeachingStudentsPage.js.map +1 -0
  153. package/dist/buildmyiq/providers/BuildMyIQProvider.d.ts +6 -0
  154. package/dist/buildmyiq/providers/BuildMyIQProvider.d.ts.map +1 -0
  155. package/dist/buildmyiq/providers/BuildMyIQProvider.js +27 -0
  156. package/dist/buildmyiq/providers/BuildMyIQProvider.js.map +1 -0
  157. package/dist/buildmyiq/store/buildmyiqStore.d.ts +189 -0
  158. package/dist/buildmyiq/store/buildmyiqStore.d.ts.map +1 -0
  159. package/dist/buildmyiq/store/buildmyiqStore.js +1160 -0
  160. package/dist/buildmyiq/store/buildmyiqStore.js.map +1 -0
  161. package/dist/buildmyiq/types/index.d.ts +51 -0
  162. package/dist/buildmyiq/types/index.d.ts.map +1 -0
  163. package/dist/buildmyiq/utils/cn.d.ts +4 -0
  164. package/dist/buildmyiq/utils/cn.d.ts.map +1 -0
  165. package/dist/buildmyiq/utils/navigation.d.ts +2 -0
  166. package/dist/buildmyiq/utils/navigation.d.ts.map +1 -0
  167. package/dist/buildmyiq/utils/navigation.js +8 -0
  168. package/dist/buildmyiq/utils/navigation.js.map +1 -0
  169. package/dist/dev/main.d.ts +2 -0
  170. package/dist/dev/main.d.ts.map +1 -0
  171. package/dist/generated/global-operations.d.ts +2 -0
  172. package/dist/generated/global-operations.d.ts.map +1 -0
  173. package/dist/generated/global-types.d.ts +18199 -0
  174. package/dist/generated/global-types.d.ts.map +1 -0
  175. package/dist/generated/wspace-operations.d.ts +2 -0
  176. package/dist/generated/wspace-operations.d.ts.map +1 -0
  177. package/dist/generated/wspace-types.d.ts +43046 -0
  178. package/dist/generated/wspace-types.d.ts.map +1 -0
  179. package/dist/index.d.ts +2 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +5 -0
  182. package/package.json +107 -0
@@ -0,0 +1,194 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { BookOpen as t, CheckCircle as n, Clock as r, Target as i } from "lucide-react";
3
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
+ import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
5
+ //#region src/buildmyiq/pages/ProfileProgressPage.tsx
6
+ function f() {
7
+ let { courses: f, grades: p } = e(), m = f.filter((e) => e.progress !== void 0), h = f.reduce((e, t) => e + t.modules.reduce((e, t) => e + t.lessons.length, 0), 0), g = f.reduce((e, t) => e + t.modules.reduce((e, t) => e + t.lessons.filter((e) => e.completed).length, 0), 0), _ = h > 0 ? Math.round(g / h * 100) : 0;
8
+ return /* @__PURE__ */ o("div", {
9
+ className: "max-w-4xl mx-auto p-6 space-y-6",
10
+ children: [
11
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
12
+ className: "text-2xl font-semibold",
13
+ children: "Learning Progress"
14
+ }), /* @__PURE__ */ a("p", {
15
+ className: "text-sm text-muted-foreground",
16
+ children: "Track your learning journey and achievements"
17
+ })] }),
18
+ /* @__PURE__ */ o("div", {
19
+ className: "grid grid-cols-1 md:grid-cols-4 gap-4",
20
+ children: [
21
+ /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a(l, {
22
+ className: "pt-6",
23
+ children: /* @__PURE__ */ o("div", {
24
+ className: "flex items-center gap-3",
25
+ children: [/* @__PURE__ */ a(i, { className: "h-5 w-5 text-blue-600" }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
26
+ className: "text-sm text-muted-foreground",
27
+ children: "Overall Progress"
28
+ }), /* @__PURE__ */ o("p", {
29
+ className: "text-2xl font-bold",
30
+ children: [_, "%"]
31
+ })] })]
32
+ })
33
+ }) }),
34
+ /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a(l, {
35
+ className: "pt-6",
36
+ children: /* @__PURE__ */ o("div", {
37
+ className: "flex items-center gap-3",
38
+ children: [/* @__PURE__ */ a(n, { className: "h-5 w-5 text-green-600" }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
39
+ className: "text-sm text-muted-foreground",
40
+ children: "Lessons Done"
41
+ }), /* @__PURE__ */ o("p", {
42
+ className: "text-2xl font-bold",
43
+ children: [
44
+ g,
45
+ "/",
46
+ h
47
+ ]
48
+ })] })]
49
+ })
50
+ }) }),
51
+ /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a(l, {
52
+ className: "pt-6",
53
+ children: /* @__PURE__ */ o("div", {
54
+ className: "flex items-center gap-3",
55
+ children: [/* @__PURE__ */ a(t, { className: "h-5 w-5 text-purple-600" }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
56
+ className: "text-sm text-muted-foreground",
57
+ children: "Active Courses"
58
+ }), /* @__PURE__ */ a("p", {
59
+ className: "text-2xl font-bold",
60
+ children: m.length
61
+ })] })]
62
+ })
63
+ }) }),
64
+ /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a(l, {
65
+ className: "pt-6",
66
+ children: /* @__PURE__ */ o("div", {
67
+ className: "flex items-center gap-3",
68
+ children: [/* @__PURE__ */ a(r, { className: "h-5 w-5 text-orange-600" }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
69
+ className: "text-sm text-muted-foreground",
70
+ children: "Study Time"
71
+ }), /* @__PURE__ */ a("p", {
72
+ className: "text-2xl font-bold",
73
+ children: "42.5h"
74
+ })] })]
75
+ })
76
+ }) })
77
+ ]
78
+ }),
79
+ /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, {
80
+ className: "text-lg",
81
+ children: "Course Progress"
82
+ }) }), /* @__PURE__ */ a(l, {
83
+ className: "space-y-4",
84
+ children: m.map((e) => {
85
+ let t = e.modules.reduce((e, t) => e + t.lessons.length, 0), n = e.modules.reduce((e, t) => e + t.lessons.filter((e) => e.completed).length, 0);
86
+ return /* @__PURE__ */ o("div", {
87
+ className: "rounded-lg border p-4",
88
+ children: [
89
+ /* @__PURE__ */ o("div", {
90
+ className: "flex items-center justify-between mb-2",
91
+ children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h3", {
92
+ className: "text-sm font-medium",
93
+ children: e.title
94
+ }), /* @__PURE__ */ o("p", {
95
+ className: "text-xs text-muted-foreground",
96
+ children: [
97
+ e.instructor,
98
+ " - ",
99
+ e.duration
100
+ ]
101
+ })] }), /* @__PURE__ */ o(s, {
102
+ variant: e.progress && e.progress >= 80 ? "default" : "secondary",
103
+ children: [e.progress, "%"]
104
+ })]
105
+ }),
106
+ /* @__PURE__ */ a("div", {
107
+ className: "h-2 rounded-full bg-muted mb-2",
108
+ children: /* @__PURE__ */ a("div", {
109
+ className: "h-2 rounded-full bg-primary transition-all",
110
+ style: { width: `${e.progress}%` }
111
+ })
112
+ }),
113
+ /* @__PURE__ */ o("div", {
114
+ className: "flex justify-between text-xs text-muted-foreground",
115
+ children: [/* @__PURE__ */ o("span", { children: [
116
+ n,
117
+ "/",
118
+ t,
119
+ " lessons completed"
120
+ ] }), /* @__PURE__ */ a("span", { children: e.category })]
121
+ }),
122
+ /* @__PURE__ */ a("div", {
123
+ className: "mt-3 space-y-1",
124
+ children: e.modules.map((e) => /* @__PURE__ */ o("div", {
125
+ className: "flex items-center gap-2 text-xs",
126
+ children: [/* @__PURE__ */ a("div", {
127
+ className: "flex-1 min-w-0",
128
+ children: /* @__PURE__ */ a("span", {
129
+ className: "truncate",
130
+ children: e.title
131
+ })
132
+ }), /* @__PURE__ */ o("span", {
133
+ className: "text-muted-foreground",
134
+ children: [
135
+ e.lessons.filter((e) => e.completed).length,
136
+ "/",
137
+ e.lessons.length
138
+ ]
139
+ })]
140
+ }, e.id))
141
+ })
142
+ ]
143
+ }, e.id);
144
+ })
145
+ })] }),
146
+ /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, {
147
+ className: "text-lg",
148
+ children: "Recent Assessment Scores"
149
+ }) }), /* @__PURE__ */ a(l, {
150
+ className: "space-y-2",
151
+ children: p.filter((e) => e.status === "graded").map((e) => /* @__PURE__ */ o("div", {
152
+ className: "flex items-center justify-between rounded-lg border p-3",
153
+ children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
154
+ className: "text-sm font-medium",
155
+ children: e.assessmentTitle
156
+ }), /* @__PURE__ */ a("p", {
157
+ className: "text-xs text-muted-foreground",
158
+ children: e.courseName
159
+ })] }), /* @__PURE__ */ o("div", {
160
+ className: "flex items-center gap-3",
161
+ children: [
162
+ /* @__PURE__ */ a("div", {
163
+ className: "w-16",
164
+ children: /* @__PURE__ */ a("div", {
165
+ className: "h-2 rounded-full bg-muted",
166
+ children: /* @__PURE__ */ a("div", {
167
+ className: "h-2 rounded-full bg-primary",
168
+ style: { width: `${e.score / e.maxScore * 100}%` }
169
+ })
170
+ })
171
+ }),
172
+ /* @__PURE__ */ o("span", {
173
+ className: "text-sm font-bold",
174
+ children: [
175
+ e.score,
176
+ "/",
177
+ e.maxScore
178
+ ]
179
+ }),
180
+ /* @__PURE__ */ a(s, {
181
+ variant: "outline",
182
+ children: e.grade
183
+ })
184
+ ]
185
+ })]
186
+ }, e.id))
187
+ })] })
188
+ ]
189
+ });
190
+ }
191
+ //#endregion
192
+ export { f as ProfileProgressPage };
193
+
194
+ //# sourceMappingURL=ProfileProgressPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileProgressPage.js","names":[],"sources":["../../../src/buildmyiq/pages/ProfileProgressPage.tsx"],"sourcesContent":["import { Badge, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { TrendingUp, BookOpen, Clock, CheckCircle, Target } from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function ProfileProgressPage() {\n const { courses, grades } = useBuildMyIQStore();\n\n const coursesWithProgress = courses.filter((c) => c.progress !== undefined);\n const totalLessons = courses.reduce(\n (sum, c) => sum + c.modules.reduce((s, m) => s + m.lessons.length, 0),\n 0\n );\n const completedLessons = courses.reduce(\n (sum, c) =>\n sum + c.modules.reduce((s, m) => s + m.lessons.filter((l) => l.completed).length, 0),\n 0\n );\n const overallProgress =\n totalLessons > 0 ? Math.round((completedLessons / totalLessons) * 100) : 0;\n\n return (\n <div className=\"max-w-4xl mx-auto p-6 space-y-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Learning Progress</h1>\n <p className=\"text-sm text-muted-foreground\">\n Track your learning journey and achievements\n </p>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <Target className=\"h-5 w-5 text-blue-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Overall Progress</p>\n <p className=\"text-2xl font-bold\">{overallProgress}%</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <CheckCircle className=\"h-5 w-5 text-green-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Lessons Done</p>\n <p className=\"text-2xl font-bold\">\n {completedLessons}/{totalLessons}\n </p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <BookOpen className=\"h-5 w-5 text-purple-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Active Courses</p>\n <p className=\"text-2xl font-bold\">{coursesWithProgress.length}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <Clock className=\"h-5 w-5 text-orange-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Study Time</p>\n <p className=\"text-2xl font-bold\">42.5h</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Course Progress</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {coursesWithProgress.map((course) => {\n const lessons = course.modules.reduce((sum, m) => sum + m.lessons.length, 0);\n const done = course.modules.reduce(\n (sum, m) => sum + m.lessons.filter((l) => l.completed).length,\n 0\n );\n return (\n <div key={course.id} className=\"rounded-lg border p-4\">\n <div className=\"flex items-center justify-between mb-2\">\n <div>\n <h3 className=\"text-sm font-medium\">{course.title}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {course.instructor} - {course.duration}\n </p>\n </div>\n <Badge\n variant={course.progress && course.progress >= 80 ? 'default' : 'secondary'}\n >\n {course.progress}%\n </Badge>\n </div>\n <div className=\"h-2 rounded-full bg-muted mb-2\">\n <div\n className=\"h-2 rounded-full bg-primary transition-all\"\n style={{ width: `${course.progress}%` }}\n />\n </div>\n <div className=\"flex justify-between text-xs text-muted-foreground\">\n <span>\n {done}/{lessons} lessons completed\n </span>\n <span>{course.category}</span>\n </div>\n <div className=\"mt-3 space-y-1\">\n {course.modules.map((mod) => (\n <div key={mod.id} className=\"flex items-center gap-2 text-xs\">\n <div className=\"flex-1 min-w-0\">\n <span className=\"truncate\">{mod.title}</span>\n </div>\n <span className=\"text-muted-foreground\">\n {mod.lessons.filter((l) => l.completed).length}/{mod.lessons.length}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Recent Assessment Scores</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {grades\n .filter((g) => g.status === 'graded')\n .map((g) => (\n <div key={g.id} className=\"flex items-center justify-between rounded-lg border p-3\">\n <div>\n <p className=\"text-sm font-medium\">{g.assessmentTitle}</p>\n <p className=\"text-xs text-muted-foreground\">{g.courseName}</p>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-16\">\n <div className=\"h-2 rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary\"\n style={{ width: `${(g.score / g.maxScore) * 100}%` }}\n />\n </div>\n </div>\n <span className=\"text-sm font-bold\">\n {g.score}/{g.maxScore}\n </span>\n <Badge variant=\"outline\">{g.grade}</Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function TeachingAnalyticsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=TeachingAnalyticsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeachingAnalyticsPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/TeachingAnalyticsPage.tsx"],"names":[],"mappings":"AAKA,wBAAgB,qBAAqB,4CAiNpC"}
@@ -0,0 +1,243 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { GraduationCap as t, Star as n, TrendingUp as r, Users as i } from "lucide-react";
3
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
+ import { Badge as s, Card as c, CardContent as l, CardHeader as u, CardTitle as d } from "@burdenoff/fe-libs/ui";
5
+ //#region src/buildmyiq/pages/TeachingAnalyticsPage.tsx
6
+ function f() {
7
+ let { courses: f, students: p, grades: m } = e(), h = m.filter((e) => e.status === "graded"), g = h.length > 0 ? Math.round(h.reduce((e, t) => e + t.score / t.maxScore * 100, 0) / h.length) : 0, _ = f.reduce((e, t) => e + t.students, 0), v = f.length > 0 ? (f.reduce((e, t) => e + t.rating, 0) / f.length).toFixed(1) : "0", y = [
8
+ {
9
+ grade: "A",
10
+ count: m.filter((e) => e.grade.startsWith("A")).length,
11
+ color: "bg-green-500"
12
+ },
13
+ {
14
+ grade: "B",
15
+ count: m.filter((e) => e.grade.startsWith("B")).length,
16
+ color: "bg-blue-500"
17
+ },
18
+ {
19
+ grade: "C",
20
+ count: m.filter((e) => e.grade.startsWith("C")).length,
21
+ color: "bg-yellow-500"
22
+ },
23
+ {
24
+ grade: "D",
25
+ count: m.filter((e) => e.grade.startsWith("D")).length,
26
+ color: "bg-orange-500"
27
+ },
28
+ {
29
+ grade: "F",
30
+ count: m.filter((e) => e.grade.startsWith("F")).length,
31
+ color: "bg-red-500"
32
+ }
33
+ ], b = Math.max(...y.map((e) => e.count), 1);
34
+ return /* @__PURE__ */ o("div", {
35
+ className: "space-y-6 p-6",
36
+ children: [
37
+ /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
38
+ className: "text-2xl font-semibold",
39
+ children: "Teaching Analytics"
40
+ }), /* @__PURE__ */ a("p", {
41
+ className: "text-sm text-muted-foreground",
42
+ children: "Insights into your teaching performance and student outcomes"
43
+ })] }),
44
+ /* @__PURE__ */ a("div", {
45
+ className: "grid grid-cols-1 md:grid-cols-4 gap-4",
46
+ children: [
47
+ {
48
+ label: "Avg. Score",
49
+ value: `${g}%`,
50
+ icon: r,
51
+ color: "text-green-600"
52
+ },
53
+ {
54
+ label: "Total Students",
55
+ value: _.toString(),
56
+ icon: i,
57
+ color: "text-blue-600"
58
+ },
59
+ {
60
+ label: "Avg. Rating",
61
+ value: `${v}/5`,
62
+ icon: n,
63
+ color: "text-yellow-600"
64
+ },
65
+ {
66
+ label: "Submissions Graded",
67
+ value: h.length.toString(),
68
+ icon: t,
69
+ color: "text-purple-600"
70
+ }
71
+ ].map((e) => /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a(l, {
72
+ className: "pt-6",
73
+ children: /* @__PURE__ */ o("div", {
74
+ className: "flex items-center gap-3",
75
+ children: [/* @__PURE__ */ a(e.icon, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("p", {
76
+ className: "text-sm text-muted-foreground",
77
+ children: e.label
78
+ }), /* @__PURE__ */ a("p", {
79
+ className: "text-2xl font-bold",
80
+ children: e.value
81
+ })] })]
82
+ })
83
+ }) }, e.label))
84
+ }),
85
+ /* @__PURE__ */ o("div", {
86
+ className: "grid grid-cols-1 lg:grid-cols-2 gap-4",
87
+ children: [/* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, {
88
+ className: "text-lg",
89
+ children: "Course Performance"
90
+ }) }), /* @__PURE__ */ a(l, {
91
+ className: "p-0",
92
+ children: /* @__PURE__ */ a("div", {
93
+ className: "overflow-x-auto",
94
+ children: /* @__PURE__ */ o("table", {
95
+ className: "w-full",
96
+ children: [/* @__PURE__ */ a("thead", { children: /* @__PURE__ */ o("tr", {
97
+ className: "border-b bg-muted/50",
98
+ children: [
99
+ /* @__PURE__ */ a("th", {
100
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
101
+ children: "Course"
102
+ }),
103
+ /* @__PURE__ */ a("th", {
104
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
105
+ children: "Students"
106
+ }),
107
+ /* @__PURE__ */ a("th", {
108
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
109
+ children: "Rating"
110
+ }),
111
+ /* @__PURE__ */ a("th", {
112
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
113
+ children: "Completion"
114
+ })
115
+ ]
116
+ }) }), /* @__PURE__ */ a("tbody", { children: f.map((e) => /* @__PURE__ */ o("tr", {
117
+ className: "border-b",
118
+ children: [
119
+ /* @__PURE__ */ a("td", {
120
+ className: "p-3 text-sm font-medium",
121
+ children: e.title
122
+ }),
123
+ /* @__PURE__ */ a("td", {
124
+ className: "p-3 text-sm",
125
+ children: e.students
126
+ }),
127
+ /* @__PURE__ */ a("td", {
128
+ className: "p-3",
129
+ children: /* @__PURE__ */ o("div", {
130
+ className: "flex items-center gap-1",
131
+ children: [/* @__PURE__ */ a(n, { className: "h-3.5 w-3.5 text-yellow-500 fill-yellow-500" }), /* @__PURE__ */ a("span", {
132
+ className: "text-sm",
133
+ children: e.rating
134
+ })]
135
+ })
136
+ }),
137
+ /* @__PURE__ */ a("td", {
138
+ className: "p-3",
139
+ children: /* @__PURE__ */ o("div", {
140
+ className: "flex items-center gap-2",
141
+ children: [/* @__PURE__ */ a("div", {
142
+ className: "h-2 w-16 rounded-full bg-muted",
143
+ children: /* @__PURE__ */ a("div", {
144
+ className: "h-2 rounded-full bg-primary",
145
+ style: { width: `${e.progress || 0}%` }
146
+ })
147
+ }), /* @__PURE__ */ o("span", {
148
+ className: "text-xs",
149
+ children: [e.progress || 0, "%"]
150
+ })]
151
+ })
152
+ })
153
+ ]
154
+ }, e.id)) })]
155
+ })
156
+ })
157
+ })] }), /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, {
158
+ className: "text-lg",
159
+ children: "Grade Distribution"
160
+ }) }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ a("div", {
161
+ className: "flex items-end gap-6 h-40 px-4",
162
+ children: y.map((e) => /* @__PURE__ */ o("div", {
163
+ className: "flex-1 flex flex-col items-center gap-1",
164
+ children: [
165
+ /* @__PURE__ */ a("span", {
166
+ className: "text-sm font-bold",
167
+ children: e.count
168
+ }),
169
+ /* @__PURE__ */ a("div", {
170
+ className: `w-full rounded-t ${e.color} transition-all`,
171
+ style: {
172
+ height: `${e.count / b * 100}%`,
173
+ minHeight: e.count > 0 ? "8px" : "0"
174
+ }
175
+ }),
176
+ /* @__PURE__ */ a("span", {
177
+ className: "text-sm font-medium",
178
+ children: e.grade
179
+ })
180
+ ]
181
+ }, e.grade))
182
+ }) })] })]
183
+ }),
184
+ /* @__PURE__ */ o(c, { children: [/* @__PURE__ */ a(u, { children: /* @__PURE__ */ a(d, {
185
+ className: "text-lg",
186
+ children: "Student Performance Overview"
187
+ }) }), /* @__PURE__ */ a(l, { children: /* @__PURE__ */ a("div", {
188
+ className: "space-y-3",
189
+ children: p.slice(0, 8).map((e) => /* @__PURE__ */ o("div", {
190
+ className: "flex items-center gap-3",
191
+ children: [
192
+ /* @__PURE__ */ a("div", {
193
+ className: "w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold shrink-0",
194
+ children: e.avatar
195
+ }),
196
+ /* @__PURE__ */ a("div", {
197
+ className: "flex-1 min-w-0",
198
+ children: /* @__PURE__ */ o("div", {
199
+ className: "flex items-center gap-2",
200
+ children: [/* @__PURE__ */ a("span", {
201
+ className: "text-sm font-medium",
202
+ children: e.name
203
+ }), /* @__PURE__ */ a(s, {
204
+ className: `text-xs ${e.status === "active" ? "bg-green-100 text-green-700" : e.status === "at_risk" ? "bg-yellow-100 text-yellow-700" : "bg-gray-100 text-gray-700"}`,
205
+ children: e.status.replace("_", " ")
206
+ })]
207
+ })
208
+ }),
209
+ /* @__PURE__ */ o("div", {
210
+ className: "flex items-center gap-4 shrink-0",
211
+ children: [/* @__PURE__ */ o("div", {
212
+ className: "text-right",
213
+ children: [/* @__PURE__ */ a("p", {
214
+ className: "text-sm font-medium",
215
+ children: e.averageGrade
216
+ }), /* @__PURE__ */ a("p", {
217
+ className: "text-xs text-muted-foreground",
218
+ children: "Grade"
219
+ })]
220
+ }), /* @__PURE__ */ o("div", {
221
+ className: "w-24",
222
+ children: [/* @__PURE__ */ a("div", {
223
+ className: "h-2 rounded-full bg-muted",
224
+ children: /* @__PURE__ */ a("div", {
225
+ className: "h-2 rounded-full bg-primary",
226
+ style: { width: `${e.overallProgress}%` }
227
+ })
228
+ }), /* @__PURE__ */ o("p", {
229
+ className: "text-xs text-muted-foreground text-right",
230
+ children: [e.overallProgress, "%"]
231
+ })]
232
+ })]
233
+ })
234
+ ]
235
+ }, e.id))
236
+ }) })] })
237
+ ]
238
+ });
239
+ }
240
+ //#endregion
241
+ export { f as TeachingAnalyticsPage };
242
+
243
+ //# sourceMappingURL=TeachingAnalyticsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeachingAnalyticsPage.js","names":[],"sources":["../../../src/buildmyiq/pages/TeachingAnalyticsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { Badge } from '@burdenoff/fe-libs/ui';\nimport { BarChart3, TrendingUp, Users, GraduationCap, Star } from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function TeachingAnalyticsPage() {\n const { courses, students, grades } = useBuildMyIQStore();\n\n const gradedEntries = grades.filter((g) => g.status === 'graded');\n const avgScore =\n gradedEntries.length > 0\n ? Math.round(\n gradedEntries.reduce((sum, g) => sum + (g.score / g.maxScore) * 100, 0) /\n gradedEntries.length\n )\n : 0;\n const totalStudents = courses.reduce((sum, c) => sum + c.students, 0);\n const avgRating =\n courses.length > 0\n ? (courses.reduce((sum, c) => sum + c.rating, 0) / courses.length).toFixed(1)\n : '0';\n\n const gradeDistribution = [\n {\n grade: 'A',\n count: grades.filter((g) => g.grade.startsWith('A')).length,\n color: 'bg-green-500',\n },\n {\n grade: 'B',\n count: grades.filter((g) => g.grade.startsWith('B')).length,\n color: 'bg-blue-500',\n },\n {\n grade: 'C',\n count: grades.filter((g) => g.grade.startsWith('C')).length,\n color: 'bg-yellow-500',\n },\n {\n grade: 'D',\n count: grades.filter((g) => g.grade.startsWith('D')).length,\n color: 'bg-orange-500',\n },\n {\n grade: 'F',\n count: grades.filter((g) => g.grade.startsWith('F')).length,\n color: 'bg-red-500',\n },\n ];\n const maxGrade = Math.max(...gradeDistribution.map((g) => g.count), 1);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Teaching Analytics</h1>\n <p className=\"text-sm text-muted-foreground\">\n Insights into your teaching performance and student outcomes\n </p>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n {[\n { label: 'Avg. Score', value: `${avgScore}%`, icon: TrendingUp, color: 'text-green-600' },\n {\n label: 'Total Students',\n value: totalStudents.toString(),\n icon: Users,\n color: 'text-blue-600',\n },\n { label: 'Avg. Rating', value: `${avgRating}/5`, icon: Star, color: 'text-yellow-600' },\n {\n label: 'Submissions Graded',\n value: gradedEntries.length.toString(),\n icon: GraduationCap,\n color: 'text-purple-600',\n },\n ].map((kpi) => (\n <Card key={kpi.label}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <kpi.icon className={`h-5 w-5 ${kpi.color}`} />\n <div>\n <p className=\"text-sm text-muted-foreground\">{kpi.label}</p>\n <p className=\"text-2xl font-bold\">{kpi.value}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Course Performance</CardTitle>\n </CardHeader>\n <CardContent className=\"p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">\n Course\n </th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">\n Students\n </th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">\n Rating\n </th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">\n Completion\n </th>\n </tr>\n </thead>\n <tbody>\n {courses.map((c) => (\n <tr key={c.id} className=\"border-b\">\n <td className=\"p-3 text-sm font-medium\">{c.title}</td>\n <td className=\"p-3 text-sm\">{c.students}</td>\n <td className=\"p-3\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3.5 w-3.5 text-yellow-500 fill-yellow-500\" />\n <span className=\"text-sm\">{c.rating}</span>\n </div>\n </td>\n <td className=\"p-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-2 w-16 rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary\"\n style={{ width: `${c.progress || 0}%` }}\n />\n </div>\n <span className=\"text-xs\">{c.progress || 0}%</span>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Grade Distribution</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-end gap-6 h-40 px-4\">\n {gradeDistribution.map((g) => (\n <div key={g.grade} className=\"flex-1 flex flex-col items-center gap-1\">\n <span className=\"text-sm font-bold\">{g.count}</span>\n <div\n className={`w-full rounded-t ${g.color} transition-all`}\n style={{\n height: `${(g.count / maxGrade) * 100}%`,\n minHeight: g.count > 0 ? '8px' : '0',\n }}\n />\n <span className=\"text-sm font-medium\">{g.grade}</span>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Student Performance Overview</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {students.slice(0, 8).map((student) => (\n <div key={student.id} className=\"flex items-center gap-3\">\n <div className=\"w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold shrink-0\">\n {student.avatar}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium\">{student.name}</span>\n <Badge\n className={`text-xs ${student.status === 'active' ? 'bg-green-100 text-green-700' : student.status === 'at_risk' ? 'bg-yellow-100 text-yellow-700' : 'bg-gray-100 text-gray-700'}`}\n >\n {student.status.replace('_', ' ')}\n </Badge>\n </div>\n </div>\n <div className=\"flex items-center gap-4 shrink-0\">\n <div className=\"text-right\">\n <p className=\"text-sm font-medium\">{student.averageGrade}</p>\n <p className=\"text-xs text-muted-foreground\">Grade</p>\n </div>\n <div className=\"w-24\">\n <div className=\"h-2 rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary\"\n style={{ width: `${student.overallProgress}%` }}\n />\n </div>\n <p className=\"text-xs text-muted-foreground text-right\">\n {student.overallProgress}%\n </p>\n </div>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function TeachingContentPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=TeachingContentPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeachingContentPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/TeachingContentPage.tsx"],"names":[],"mappings":"AAgCA,wBAAgB,mBAAmB,4CAqIlC"}