@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.
- package/README.md +12 -0
- package/dist/buildmyiq/BuildMyIQRoot.d.ts +5 -0
- package/dist/buildmyiq/BuildMyIQRoot.d.ts.map +1 -0
- package/dist/buildmyiq/BuildMyIQRoot.js +329 -0
- package/dist/buildmyiq/BuildMyIQRoot.js.map +1 -0
- package/dist/buildmyiq/BuildMyIQRoutes.d.ts +2 -0
- package/dist/buildmyiq/BuildMyIQRoutes.d.ts.map +1 -0
- package/dist/buildmyiq/BuildMyIQRoutes.js +171 -0
- package/dist/buildmyiq/BuildMyIQRoutes.js.map +1 -0
- package/dist/buildmyiq/index.d.ts +5 -0
- package/dist/buildmyiq/index.d.ts.map +1 -0
- package/dist/buildmyiq/index.js +3 -0
- package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.js +271 -0
- package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.js +212 -0
- package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AdminAdminUsersPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AdminAdminUsersPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AdminAdminUsersPagePage.js +235 -0
- package/dist/buildmyiq/pages/AdminAdminUsersPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AdminIndexPage.d.ts +2 -0
- package/dist/buildmyiq/pages/AdminIndexPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AdminIndexPage.js +274 -0
- package/dist/buildmyiq/pages/AdminIndexPage.js.map +1 -0
- package/dist/buildmyiq/pages/AiAichatPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AiAichatPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AiAichatPagePage.js +209 -0
- package/dist/buildmyiq/pages/AiAichatPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.js +318 -0
- package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AiAitutoringPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AiAitutoringPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AiAitutoringPagePage.js +290 -0
- package/dist/buildmyiq/pages/AiAitutoringPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AiIndexPage.d.ts +2 -0
- package/dist/buildmyiq/pages/AiIndexPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AiIndexPage.js +191 -0
- package/dist/buildmyiq/pages/AiIndexPage.js.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.js +290 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.js +215 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.js +224 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.js +174 -0
- package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.js.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsIndexPage.d.ts +2 -0
- package/dist/buildmyiq/pages/AssessmentsIndexPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/AssessmentsIndexPage.js +174 -0
- package/dist/buildmyiq/pages/AssessmentsIndexPage.js.map +1 -0
- package/dist/buildmyiq/pages/CalendarPage.d.ts +2 -0
- package/dist/buildmyiq/pages/CalendarPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CalendarPage.js +242 -0
- package/dist/buildmyiq/pages/CalendarPage.js.map +1 -0
- package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.js +180 -0
- package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CommunicationForumsPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CommunicationForumsPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CommunicationForumsPagePage.js +154 -0
- package/dist/buildmyiq/pages/CommunicationForumsPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CommunicationIndexPage.d.ts +2 -0
- package/dist/buildmyiq/pages/CommunicationIndexPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CommunicationIndexPage.js +191 -0
- package/dist/buildmyiq/pages/CommunicationIndexPage.js.map +1 -0
- package/dist/buildmyiq/pages/CommunicationMessagesPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CommunicationMessagesPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CommunicationMessagesPagePage.js +261 -0
- package/dist/buildmyiq/pages/CommunicationMessagesPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseContentPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CoursesCourseContentPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseContentPagePage.js +164 -0
- package/dist/buildmyiq/pages/CoursesCourseContentPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.js +239 -0
- package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.js +368 -0
- package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.js +219 -0
- package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseListPagePage.d.ts +2 -0
- package/dist/buildmyiq/pages/CoursesCourseListPagePage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CoursesCourseListPagePage.js +153 -0
- package/dist/buildmyiq/pages/CoursesCourseListPagePage.js.map +1 -0
- package/dist/buildmyiq/pages/CoursesIndexPage.d.ts +2 -0
- package/dist/buildmyiq/pages/CoursesIndexPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/CoursesIndexPage.js +138 -0
- package/dist/buildmyiq/pages/CoursesIndexPage.js.map +1 -0
- package/dist/buildmyiq/pages/DashboardPage.d.ts +2 -0
- package/dist/buildmyiq/pages/DashboardPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/DashboardPage.js +264 -0
- package/dist/buildmyiq/pages/DashboardPage.js.map +1 -0
- package/dist/buildmyiq/pages/MessagesPage.d.ts +2 -0
- package/dist/buildmyiq/pages/MessagesPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/MessagesPage.js +261 -0
- package/dist/buildmyiq/pages/MessagesPage.js.map +1 -0
- package/dist/buildmyiq/pages/ProfileProgressPage.d.ts +2 -0
- package/dist/buildmyiq/pages/ProfileProgressPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/ProfileProgressPage.js +194 -0
- package/dist/buildmyiq/pages/ProfileProgressPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingAnalyticsPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingAnalyticsPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingAnalyticsPage.js +243 -0
- package/dist/buildmyiq/pages/TeachingAnalyticsPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingContentPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingContentPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingContentPage.js +165 -0
- package/dist/buildmyiq/pages/TeachingContentPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingCoursesPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingCoursesPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingCoursesPage.js +151 -0
- package/dist/buildmyiq/pages/TeachingCoursesPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingGradingPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingGradingPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingGradingPage.js +204 -0
- package/dist/buildmyiq/pages/TeachingGradingPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingIndexPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingIndexPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingIndexPage.js +220 -0
- package/dist/buildmyiq/pages/TeachingIndexPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingLessonPlansPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingLessonPlansPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingLessonPlansPage.js +157 -0
- package/dist/buildmyiq/pages/TeachingLessonPlansPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingQuestionsPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingQuestionsPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingQuestionsPage.js +184 -0
- package/dist/buildmyiq/pages/TeachingQuestionsPage.js.map +1 -0
- package/dist/buildmyiq/pages/TeachingStudentsPage.d.ts +2 -0
- package/dist/buildmyiq/pages/TeachingStudentsPage.d.ts.map +1 -0
- package/dist/buildmyiq/pages/TeachingStudentsPage.js +204 -0
- package/dist/buildmyiq/pages/TeachingStudentsPage.js.map +1 -0
- package/dist/buildmyiq/providers/BuildMyIQProvider.d.ts +6 -0
- package/dist/buildmyiq/providers/BuildMyIQProvider.d.ts.map +1 -0
- package/dist/buildmyiq/providers/BuildMyIQProvider.js +27 -0
- package/dist/buildmyiq/providers/BuildMyIQProvider.js.map +1 -0
- package/dist/buildmyiq/store/buildmyiqStore.d.ts +189 -0
- package/dist/buildmyiq/store/buildmyiqStore.d.ts.map +1 -0
- package/dist/buildmyiq/store/buildmyiqStore.js +1160 -0
- package/dist/buildmyiq/store/buildmyiqStore.js.map +1 -0
- package/dist/buildmyiq/types/index.d.ts +51 -0
- package/dist/buildmyiq/types/index.d.ts.map +1 -0
- package/dist/buildmyiq/utils/cn.d.ts +4 -0
- package/dist/buildmyiq/utils/cn.d.ts.map +1 -0
- package/dist/buildmyiq/utils/navigation.d.ts +2 -0
- package/dist/buildmyiq/utils/navigation.d.ts.map +1 -0
- package/dist/buildmyiq/utils/navigation.js +8 -0
- package/dist/buildmyiq/utils/navigation.js.map +1 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/package.json +107 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
|
|
2
|
+
import { BookOpen as t, ClipboardList as n, FileText as r, GraduationCap as i, Plus as a, Star as o, Users as s } from "lucide-react";
|
|
3
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as u, Button as d, Card as f, CardContent as p, CardHeader as m, CardTitle as h } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { useI18n as g } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
6
|
+
//#region src/buildmyiq/pages/TeachingIndexPage.tsx
|
|
7
|
+
function _() {
|
|
8
|
+
let { t: _ } = g(), v = (e, t) => {
|
|
9
|
+
let n = _(e);
|
|
10
|
+
return n === e ? t : n;
|
|
11
|
+
}, { courses: y, students: b, gradingQueue: x, assessments: S } = e(), C = y.reduce((e, t) => e + t.students, 0), w = (y.reduce((e, t) => e + t.rating, 0) / y.length).toFixed(1), T = x.filter((e) => e.status === "pending").length, E = S.filter((e) => e.status === "published").slice(0, 4);
|
|
12
|
+
return /* @__PURE__ */ l("div", {
|
|
13
|
+
className: "space-y-6 p-6",
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ l("div", {
|
|
16
|
+
className: "flex items-center justify-between",
|
|
17
|
+
children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
|
|
18
|
+
className: "text-2xl font-semibold",
|
|
19
|
+
children: v("buildmyiq.teachingIndex.title", "Teaching Dashboard")
|
|
20
|
+
}), /* @__PURE__ */ c("p", {
|
|
21
|
+
className: "text-sm text-muted-foreground",
|
|
22
|
+
children: v("buildmyiq.teachingIndex.subtitle", "Manage your courses, students, and assessments")
|
|
23
|
+
})] }), /* @__PURE__ */ l("div", {
|
|
24
|
+
className: "flex gap-2",
|
|
25
|
+
children: [/* @__PURE__ */ l(d, {
|
|
26
|
+
variant: "outline",
|
|
27
|
+
size: "sm",
|
|
28
|
+
children: [/* @__PURE__ */ c(r, { className: "mr-2 h-4 w-4" }), v("buildmyiq.teachingIndex.actions.createLessonPlan", "Create Lesson Plan")]
|
|
29
|
+
}), /* @__PURE__ */ l(d, {
|
|
30
|
+
size: "sm",
|
|
31
|
+
children: [/* @__PURE__ */ c(a, { className: "mr-2 h-4 w-4" }), v("buildmyiq.teachingIndex.actions.createCourse", "Create Course")]
|
|
32
|
+
})]
|
|
33
|
+
})]
|
|
34
|
+
}),
|
|
35
|
+
/* @__PURE__ */ l("div", {
|
|
36
|
+
className: "grid grid-cols-1 md:grid-cols-4 gap-4",
|
|
37
|
+
children: [
|
|
38
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ c(p, {
|
|
39
|
+
className: "pt-6",
|
|
40
|
+
children: /* @__PURE__ */ l("div", {
|
|
41
|
+
className: "flex items-center gap-3",
|
|
42
|
+
children: [/* @__PURE__ */ c(t, { className: "h-5 w-5 text-blue-600" }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
43
|
+
className: "text-sm text-muted-foreground",
|
|
44
|
+
children: v("buildmyiq.teachingIndex.stats.myCourses", "My Courses")
|
|
45
|
+
}), /* @__PURE__ */ c("p", {
|
|
46
|
+
className: "text-2xl font-bold",
|
|
47
|
+
children: y.length
|
|
48
|
+
})] })]
|
|
49
|
+
})
|
|
50
|
+
}) }),
|
|
51
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ c(p, {
|
|
52
|
+
className: "pt-6",
|
|
53
|
+
children: /* @__PURE__ */ l("div", {
|
|
54
|
+
className: "flex items-center gap-3",
|
|
55
|
+
children: [/* @__PURE__ */ c(s, { className: "h-5 w-5 text-purple-600" }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
56
|
+
className: "text-sm text-muted-foreground",
|
|
57
|
+
children: v("buildmyiq.teachingIndex.stats.totalStudents", "Total Students")
|
|
58
|
+
}), /* @__PURE__ */ c("p", {
|
|
59
|
+
className: "text-2xl font-bold",
|
|
60
|
+
children: C
|
|
61
|
+
})] })]
|
|
62
|
+
})
|
|
63
|
+
}) }),
|
|
64
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ c(p, {
|
|
65
|
+
className: "pt-6",
|
|
66
|
+
children: /* @__PURE__ */ l("div", {
|
|
67
|
+
className: "flex items-center gap-3",
|
|
68
|
+
children: [/* @__PURE__ */ c(o, { className: "h-5 w-5 text-yellow-600" }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
69
|
+
className: "text-sm text-muted-foreground",
|
|
70
|
+
children: v("buildmyiq.teachingIndex.stats.avgRating", "Avg. Rating")
|
|
71
|
+
}), /* @__PURE__ */ c("p", {
|
|
72
|
+
className: "text-2xl font-bold",
|
|
73
|
+
children: w
|
|
74
|
+
})] })]
|
|
75
|
+
})
|
|
76
|
+
}) }),
|
|
77
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ c(p, {
|
|
78
|
+
className: "pt-6",
|
|
79
|
+
children: /* @__PURE__ */ l("div", {
|
|
80
|
+
className: "flex items-center gap-3",
|
|
81
|
+
children: [/* @__PURE__ */ c(n, { className: "h-5 w-5 text-red-600" }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
82
|
+
className: "text-sm text-muted-foreground",
|
|
83
|
+
children: v("buildmyiq.teachingIndex.stats.pendingGrading", "Pending Grading")
|
|
84
|
+
}), /* @__PURE__ */ c("p", {
|
|
85
|
+
className: "text-2xl font-bold",
|
|
86
|
+
children: T
|
|
87
|
+
})] })]
|
|
88
|
+
})
|
|
89
|
+
}) })
|
|
90
|
+
]
|
|
91
|
+
}),
|
|
92
|
+
/* @__PURE__ */ l("div", {
|
|
93
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
|
94
|
+
children: [/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ c(h, {
|
|
95
|
+
className: "text-lg",
|
|
96
|
+
children: v("buildmyiq.teachingIndex.recentSubmissions.title", "Recent Submissions")
|
|
97
|
+
}) }), /* @__PURE__ */ c(p, {
|
|
98
|
+
className: "space-y-3",
|
|
99
|
+
children: x.slice(0, 5).map((e) => /* @__PURE__ */ l("div", {
|
|
100
|
+
className: "flex items-center gap-3 rounded-lg border p-3",
|
|
101
|
+
children: [
|
|
102
|
+
/* @__PURE__ */ c("div", {
|
|
103
|
+
className: "w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold",
|
|
104
|
+
children: e.studentAvatar
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ l("div", {
|
|
107
|
+
className: "flex-1 min-w-0",
|
|
108
|
+
children: [/* @__PURE__ */ c("p", {
|
|
109
|
+
className: "text-sm font-medium",
|
|
110
|
+
children: e.studentName
|
|
111
|
+
}), /* @__PURE__ */ l("p", {
|
|
112
|
+
className: "text-xs text-muted-foreground",
|
|
113
|
+
children: [
|
|
114
|
+
e.assignment,
|
|
115
|
+
" - ",
|
|
116
|
+
e.course
|
|
117
|
+
]
|
|
118
|
+
})]
|
|
119
|
+
}),
|
|
120
|
+
/* @__PURE__ */ l("div", {
|
|
121
|
+
className: "flex items-center gap-2",
|
|
122
|
+
children: [/* @__PURE__ */ c(u, {
|
|
123
|
+
variant: e.priority === "high" ? "destructive" : "secondary",
|
|
124
|
+
className: "text-xs",
|
|
125
|
+
children: v(`buildmyiq.teachingIndex.priority.${e.priority}`, e.priority)
|
|
126
|
+
}), /* @__PURE__ */ c(d, {
|
|
127
|
+
size: "sm",
|
|
128
|
+
variant: "outline",
|
|
129
|
+
children: v("buildmyiq.teachingIndex.recentSubmissions.grade", "Grade")
|
|
130
|
+
})]
|
|
131
|
+
})
|
|
132
|
+
]
|
|
133
|
+
}, e.id))
|
|
134
|
+
})] }), /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ c(h, {
|
|
135
|
+
className: "text-lg",
|
|
136
|
+
children: v("buildmyiq.teachingIndex.upcomingDeadlines.title", "Upcoming Deadlines")
|
|
137
|
+
}) }), /* @__PURE__ */ c(p, {
|
|
138
|
+
className: "space-y-3",
|
|
139
|
+
children: E.map((e) => /* @__PURE__ */ l("div", {
|
|
140
|
+
className: "flex items-center gap-3 rounded-lg border p-3",
|
|
141
|
+
children: [
|
|
142
|
+
/* @__PURE__ */ c(i, { className: "h-5 w-5 text-muted-foreground shrink-0" }),
|
|
143
|
+
/* @__PURE__ */ l("div", {
|
|
144
|
+
className: "flex-1 min-w-0",
|
|
145
|
+
children: [/* @__PURE__ */ c("p", {
|
|
146
|
+
className: "text-sm font-medium",
|
|
147
|
+
children: e.title
|
|
148
|
+
}), /* @__PURE__ */ c("p", {
|
|
149
|
+
className: "text-xs text-muted-foreground",
|
|
150
|
+
children: e.course
|
|
151
|
+
})]
|
|
152
|
+
}),
|
|
153
|
+
/* @__PURE__ */ l("div", {
|
|
154
|
+
className: "text-right shrink-0",
|
|
155
|
+
children: [/* @__PURE__ */ c("p", {
|
|
156
|
+
className: "text-sm font-medium",
|
|
157
|
+
children: e.dueDate
|
|
158
|
+
}), /* @__PURE__ */ l("p", {
|
|
159
|
+
className: "text-xs text-muted-foreground",
|
|
160
|
+
children: [
|
|
161
|
+
e.submissions,
|
|
162
|
+
"/",
|
|
163
|
+
e.totalStudents,
|
|
164
|
+
" ",
|
|
165
|
+
v("buildmyiq.teachingIndex.upcomingDeadlines.submitted", "submitted")
|
|
166
|
+
]
|
|
167
|
+
})]
|
|
168
|
+
})
|
|
169
|
+
]
|
|
170
|
+
}, e.id))
|
|
171
|
+
})] })]
|
|
172
|
+
}),
|
|
173
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ c(h, {
|
|
174
|
+
className: "text-lg",
|
|
175
|
+
children: v("buildmyiq.teachingIndex.quickActions.title", "Quick Actions")
|
|
176
|
+
}) }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("div", {
|
|
177
|
+
className: "grid grid-cols-2 md:grid-cols-4 gap-3",
|
|
178
|
+
children: [
|
|
179
|
+
{
|
|
180
|
+
label: v("buildmyiq.teachingIndex.quickActions.gradeSubmissions.label", "Grade Submissions"),
|
|
181
|
+
icon: n,
|
|
182
|
+
count: `${T} ${v("buildmyiq.teachingIndex.quickActions.gradeSubmissions.count", "pending")}`
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
label: v("buildmyiq.teachingIndex.quickActions.myCourses.label", "My Courses"),
|
|
186
|
+
icon: t,
|
|
187
|
+
count: `${y.length} ${v("buildmyiq.teachingIndex.quickActions.myCourses.count", "courses")}`
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
label: v("buildmyiq.teachingIndex.quickActions.studentList.label", "Student List"),
|
|
191
|
+
icon: s,
|
|
192
|
+
count: `${b.length} ${v("buildmyiq.teachingIndex.quickActions.studentList.count", "students")}`
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
label: v("buildmyiq.teachingIndex.quickActions.createAssessment.label", "Create Assessment"),
|
|
196
|
+
icon: r,
|
|
197
|
+
count: v("buildmyiq.teachingIndex.quickActions.createAssessment.count", "New")
|
|
198
|
+
}
|
|
199
|
+
].map((e) => /* @__PURE__ */ l("button", {
|
|
200
|
+
className: "rounded-lg border p-4 hover:bg-muted/50 transition-colors text-left",
|
|
201
|
+
children: [
|
|
202
|
+
/* @__PURE__ */ c(e.icon, { className: "h-5 w-5 text-muted-foreground mb-2" }),
|
|
203
|
+
/* @__PURE__ */ c("p", {
|
|
204
|
+
className: "text-sm font-medium",
|
|
205
|
+
children: e.label
|
|
206
|
+
}),
|
|
207
|
+
/* @__PURE__ */ c("p", {
|
|
208
|
+
className: "text-xs text-muted-foreground",
|
|
209
|
+
children: e.count
|
|
210
|
+
})
|
|
211
|
+
]
|
|
212
|
+
}, e.label))
|
|
213
|
+
}) })] })
|
|
214
|
+
]
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
//#endregion
|
|
218
|
+
export { _ as TeachingIndexPage };
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=TeachingIndexPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeachingIndexPage.js","names":[],"sources":["../../../src/buildmyiq/pages/TeachingIndexPage.tsx"],"sourcesContent":["import { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { BookOpen, Users, Star, ClipboardList, Plus, FileText, GraduationCap } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function TeachingIndexPage() {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { courses, students, gradingQueue, assessments } = useBuildMyIQStore();\n\n const totalStudents = courses.reduce((sum, c) => sum + c.students, 0);\n const avgRating = (courses.reduce((sum, c) => sum + c.rating, 0) / courses.length).toFixed(1);\n const pendingGrading = gradingQueue.filter((g) => g.status === 'pending').length;\n const upcomingDeadlines = assessments.filter((a) => a.status === 'published').slice(0, 4);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {t('buildmyiq.teachingIndex.title', 'Teaching Dashboard')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {t(\n 'buildmyiq.teachingIndex.subtitle',\n 'Manage your courses, students, and assessments'\n )}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <FileText className=\"mr-2 h-4 w-4\" />\n {t('buildmyiq.teachingIndex.actions.createLessonPlan', 'Create Lesson Plan')}\n </Button>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n {t('buildmyiq.teachingIndex.actions.createCourse', 'Create Course')}\n </Button>\n </div>\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 <BookOpen className=\"h-5 w-5 text-blue-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.teachingIndex.stats.myCourses', 'My Courses')}\n </p>\n <p className=\"text-2xl font-bold\">{courses.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 <Users className=\"h-5 w-5 text-purple-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.teachingIndex.stats.totalStudents', 'Total Students')}\n </p>\n <p className=\"text-2xl font-bold\">{totalStudents}</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 <Star className=\"h-5 w-5 text-yellow-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.teachingIndex.stats.avgRating', 'Avg. Rating')}\n </p>\n <p className=\"text-2xl font-bold\">{avgRating}</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 <ClipboardList className=\"h-5 w-5 text-red-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.teachingIndex.stats.pendingGrading', 'Pending Grading')}\n </p>\n <p className=\"text-2xl font-bold\">{pendingGrading}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">\n {t('buildmyiq.teachingIndex.recentSubmissions.title', 'Recent Submissions')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {gradingQueue.slice(0, 5).map((item) => (\n <div key={item.id} className=\"flex items-center gap-3 rounded-lg border p-3\">\n <div className=\"w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold\">\n {item.studentAvatar}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium\">{item.studentName}</p>\n <p className=\"text-xs text-muted-foreground\">\n {item.assignment} - {item.course}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Badge\n variant={item.priority === 'high' ? 'destructive' : 'secondary'}\n className=\"text-xs\"\n >\n {t(`buildmyiq.teachingIndex.priority.${item.priority}`, item.priority)}\n </Badge>\n <Button size=\"sm\" variant=\"outline\">\n {t('buildmyiq.teachingIndex.recentSubmissions.grade', 'Grade')}\n </Button>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">\n {t('buildmyiq.teachingIndex.upcomingDeadlines.title', 'Upcoming Deadlines')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {upcomingDeadlines.map((a) => (\n <div key={a.id} className=\"flex items-center gap-3 rounded-lg border p-3\">\n <GraduationCap className=\"h-5 w-5 text-muted-foreground shrink-0\" />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium\">{a.title}</p>\n <p className=\"text-xs text-muted-foreground\">{a.course}</p>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-sm font-medium\">{a.dueDate}</p>\n <p className=\"text-xs text-muted-foreground\">\n {a.submissions}/{a.totalStudents}{' '}\n {t('buildmyiq.teachingIndex.upcomingDeadlines.submitted', 'submitted')}\n </p>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">\n {t('buildmyiq.teachingIndex.quickActions.title', 'Quick Actions')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-3\">\n {[\n {\n label: t(\n 'buildmyiq.teachingIndex.quickActions.gradeSubmissions.label',\n 'Grade Submissions'\n ),\n icon: ClipboardList,\n count: `${pendingGrading} ${t('buildmyiq.teachingIndex.quickActions.gradeSubmissions.count', 'pending')}`,\n },\n {\n label: t('buildmyiq.teachingIndex.quickActions.myCourses.label', 'My Courses'),\n icon: BookOpen,\n count: `${courses.length} ${t('buildmyiq.teachingIndex.quickActions.myCourses.count', 'courses')}`,\n },\n {\n label: t('buildmyiq.teachingIndex.quickActions.studentList.label', 'Student List'),\n icon: Users,\n count: `${students.length} ${t('buildmyiq.teachingIndex.quickActions.studentList.count', 'students')}`,\n },\n {\n label: t(\n 'buildmyiq.teachingIndex.quickActions.createAssessment.label',\n 'Create Assessment'\n ),\n icon: FileText,\n count: t('buildmyiq.teachingIndex.quickActions.createAssessment.count', 'New'),\n },\n ].map((action) => (\n <button\n key={action.label}\n className=\"rounded-lg border p-4 hover:bg-muted/50 transition-colors text-left\"\n >\n <action.icon className=\"h-5 w-5 text-muted-foreground mb-2\" />\n <p className=\"text-sm font-medium\">{action.label}</p>\n <p className=\"text-xs text-muted-foreground\">{action.count}</p>\n </button>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeachingLessonPlansPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/TeachingLessonPlansPage.tsx"],"names":[],"mappings":"AAKA,wBAAgB,uBAAuB,4CAwItC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
|
|
2
|
+
import { useState as t } from "react";
|
|
3
|
+
import { CheckCircle as n, Clock as r, Package as i, Plus as a, Target as o } from "lucide-react";
|
|
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, CardHeader as p, CardTitle as m } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/buildmyiq/pages/TeachingLessonPlansPage.tsx
|
|
7
|
+
function h() {
|
|
8
|
+
let { lessonPlans: h, courses: g } = e(), [_, v] = t("all"), [y, b] = t("all"), x = ["all", ...Array.from(new Set(h.map((e) => e.course)))], S = h.filter((e) => {
|
|
9
|
+
let t = _ === "all" || e.course === _, n = y === "all" || e.status === y;
|
|
10
|
+
return t && n;
|
|
11
|
+
}), C = h.filter((e) => e.status === "published").length, w = h.filter((e) => e.status === "draft").length;
|
|
12
|
+
return /* @__PURE__ */ c("div", {
|
|
13
|
+
className: "space-y-6 p-6",
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ c("div", {
|
|
16
|
+
className: "flex items-center justify-between",
|
|
17
|
+
children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
|
|
18
|
+
className: "text-2xl font-semibold",
|
|
19
|
+
children: "Lesson Plans"
|
|
20
|
+
}), /* @__PURE__ */ s("p", {
|
|
21
|
+
className: "text-sm text-muted-foreground",
|
|
22
|
+
children: "Create and manage your lesson plans"
|
|
23
|
+
})] }), /* @__PURE__ */ c(u, {
|
|
24
|
+
size: "sm",
|
|
25
|
+
children: [/* @__PURE__ */ s(a, { className: "mr-2 h-4 w-4" }), "Create Lesson Plan"]
|
|
26
|
+
})]
|
|
27
|
+
}),
|
|
28
|
+
/* @__PURE__ */ c("div", {
|
|
29
|
+
className: "grid grid-cols-1 md:grid-cols-3 gap-4",
|
|
30
|
+
children: [
|
|
31
|
+
/* @__PURE__ */ s(d, { children: /* @__PURE__ */ c(f, {
|
|
32
|
+
className: "pt-6",
|
|
33
|
+
children: [/* @__PURE__ */ s("p", {
|
|
34
|
+
className: "text-sm text-muted-foreground",
|
|
35
|
+
children: "Total Plans"
|
|
36
|
+
}), /* @__PURE__ */ s("p", {
|
|
37
|
+
className: "text-2xl font-bold",
|
|
38
|
+
children: h.length
|
|
39
|
+
})]
|
|
40
|
+
}) }),
|
|
41
|
+
/* @__PURE__ */ s(d, { children: /* @__PURE__ */ c(f, {
|
|
42
|
+
className: "pt-6",
|
|
43
|
+
children: [/* @__PURE__ */ s("p", {
|
|
44
|
+
className: "text-sm text-muted-foreground",
|
|
45
|
+
children: "Published"
|
|
46
|
+
}), /* @__PURE__ */ s("p", {
|
|
47
|
+
className: "text-2xl font-bold text-green-600",
|
|
48
|
+
children: C
|
|
49
|
+
})]
|
|
50
|
+
}) }),
|
|
51
|
+
/* @__PURE__ */ s(d, { children: /* @__PURE__ */ c(f, {
|
|
52
|
+
className: "pt-6",
|
|
53
|
+
children: [/* @__PURE__ */ s("p", {
|
|
54
|
+
className: "text-sm text-muted-foreground",
|
|
55
|
+
children: "Drafts"
|
|
56
|
+
}), /* @__PURE__ */ s("p", {
|
|
57
|
+
className: "text-2xl font-bold text-yellow-600",
|
|
58
|
+
children: w
|
|
59
|
+
})]
|
|
60
|
+
}) })
|
|
61
|
+
]
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ c("div", {
|
|
64
|
+
className: "flex flex-col sm:flex-row gap-3",
|
|
65
|
+
children: [/* @__PURE__ */ s("select", {
|
|
66
|
+
value: _,
|
|
67
|
+
onChange: (e) => v(e.target.value),
|
|
68
|
+
className: "h-9 rounded-md border border-input bg-background px-3 text-sm",
|
|
69
|
+
children: x.map((e) => /* @__PURE__ */ s("option", {
|
|
70
|
+
value: e,
|
|
71
|
+
children: e === "all" ? "All Courses" : e
|
|
72
|
+
}, e))
|
|
73
|
+
}), /* @__PURE__ */ s("div", {
|
|
74
|
+
className: "flex gap-1",
|
|
75
|
+
children: [
|
|
76
|
+
"all",
|
|
77
|
+
"published",
|
|
78
|
+
"draft"
|
|
79
|
+
].map((e) => /* @__PURE__ */ s(u, {
|
|
80
|
+
variant: y === e ? "default" : "outline",
|
|
81
|
+
size: "sm",
|
|
82
|
+
className: "capitalize",
|
|
83
|
+
onClick: () => b(e),
|
|
84
|
+
children: e
|
|
85
|
+
}, e))
|
|
86
|
+
})]
|
|
87
|
+
}),
|
|
88
|
+
/* @__PURE__ */ s("div", {
|
|
89
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-4",
|
|
90
|
+
children: S.map((e) => /* @__PURE__ */ c(d, {
|
|
91
|
+
className: "hover:shadow-md transition-shadow",
|
|
92
|
+
children: [/* @__PURE__ */ c(p, {
|
|
93
|
+
className: "pb-2",
|
|
94
|
+
children: [
|
|
95
|
+
/* @__PURE__ */ c("div", {
|
|
96
|
+
className: "flex items-center justify-between",
|
|
97
|
+
children: [/* @__PURE__ */ s(l, {
|
|
98
|
+
variant: e.status === "published" ? "default" : "secondary",
|
|
99
|
+
className: "text-xs",
|
|
100
|
+
children: e.status
|
|
101
|
+
}), /* @__PURE__ */ c("div", {
|
|
102
|
+
className: "flex items-center gap-1 text-xs text-muted-foreground",
|
|
103
|
+
children: [/* @__PURE__ */ s(r, { className: "h-3 w-3" }), e.duration]
|
|
104
|
+
})]
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ s(m, {
|
|
107
|
+
className: "text-lg mt-2",
|
|
108
|
+
children: e.title
|
|
109
|
+
}),
|
|
110
|
+
/* @__PURE__ */ s("p", {
|
|
111
|
+
className: "text-sm text-muted-foreground",
|
|
112
|
+
children: e.course
|
|
113
|
+
})
|
|
114
|
+
]
|
|
115
|
+
}), /* @__PURE__ */ c(f, {
|
|
116
|
+
className: "space-y-3",
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("div", {
|
|
119
|
+
className: "flex items-center gap-1 text-sm font-medium mb-1",
|
|
120
|
+
children: [/* @__PURE__ */ s(o, { className: "h-4 w-4 text-muted-foreground" }), "Objectives"]
|
|
121
|
+
}), /* @__PURE__ */ s("ul", {
|
|
122
|
+
className: "text-sm text-muted-foreground space-y-1",
|
|
123
|
+
children: e.objectives.map((e, t) => /* @__PURE__ */ c("li", {
|
|
124
|
+
className: "flex items-start gap-1",
|
|
125
|
+
children: [/* @__PURE__ */ s(n, { className: "h-3 w-3 mt-1 text-green-500 shrink-0" }), e]
|
|
126
|
+
}, t))
|
|
127
|
+
})] }),
|
|
128
|
+
/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ c("div", {
|
|
129
|
+
className: "flex items-center gap-1 text-sm font-medium mb-1",
|
|
130
|
+
children: [/* @__PURE__ */ s(i, { className: "h-4 w-4 text-muted-foreground" }), "Materials"]
|
|
131
|
+
}), /* @__PURE__ */ s("div", {
|
|
132
|
+
className: "flex flex-wrap gap-1",
|
|
133
|
+
children: e.materials.map((e, t) => /* @__PURE__ */ s(l, {
|
|
134
|
+
variant: "outline",
|
|
135
|
+
className: "text-xs",
|
|
136
|
+
children: e
|
|
137
|
+
}, t))
|
|
138
|
+
})] }),
|
|
139
|
+
/* @__PURE__ */ c("div", {
|
|
140
|
+
className: "flex items-center justify-between text-xs text-muted-foreground pt-2 border-t",
|
|
141
|
+
children: [/* @__PURE__ */ c("span", { children: ["Updated: ", e.lastUpdated] }), /* @__PURE__ */ s(u, {
|
|
142
|
+
size: "sm",
|
|
143
|
+
variant: "outline",
|
|
144
|
+
children: "Edit"
|
|
145
|
+
})]
|
|
146
|
+
})
|
|
147
|
+
]
|
|
148
|
+
})]
|
|
149
|
+
}, e.id))
|
|
150
|
+
})
|
|
151
|
+
]
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//#endregion
|
|
155
|
+
export { h as TeachingLessonPlansPage };
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=TeachingLessonPlansPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeachingLessonPlansPage.js","names":[],"sources":["../../../src/buildmyiq/pages/TeachingLessonPlansPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { FileText, Plus, Clock, CheckCircle, BookOpen, Target, Package } from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function TeachingLessonPlansPage() {\n const { lessonPlans, courses } = useBuildMyIQStore();\n const [courseFilter, setCourseFilter] = useState('all');\n const [statusFilter, setStatusFilter] = useState('all');\n\n const courseNames = ['all', ...Array.from(new Set(lessonPlans.map((lp) => lp.course)))];\n\n const filtered = lessonPlans.filter((lp) => {\n const matchesCourse = courseFilter === 'all' || lp.course === courseFilter;\n const matchesStatus = statusFilter === 'all' || lp.status === statusFilter;\n return matchesCourse && matchesStatus;\n });\n\n const published = lessonPlans.filter((lp) => lp.status === 'published').length;\n const drafts = lessonPlans.filter((lp) => lp.status === 'draft').length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Lesson Plans</h1>\n <p className=\"text-sm text-muted-foreground\">Create and manage your lesson plans</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Lesson Plan\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Total Plans</p>\n <p className=\"text-2xl font-bold\">{lessonPlans.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Published</p>\n <p className=\"text-2xl font-bold text-green-600\">{published}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Drafts</p>\n <p className=\"text-2xl font-bold text-yellow-600\">{drafts}</p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <select\n value={courseFilter}\n onChange={(e) => setCourseFilter(e.target.value)}\n className=\"h-9 rounded-md border border-input bg-background px-3 text-sm\"\n >\n {courseNames.map((c) => (\n <option key={c} value={c}>\n {c === 'all' ? 'All Courses' : c}\n </option>\n ))}\n </select>\n <div className=\"flex gap-1\">\n {['all', 'published', 'draft'].map((s) => (\n <Button\n key={s}\n variant={statusFilter === s ? 'default' : 'outline'}\n size=\"sm\"\n className=\"capitalize\"\n onClick={() => setStatusFilter(s)}\n >\n {s}\n </Button>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {filtered.map((plan) => (\n <Card key={plan.id} className=\"hover:shadow-md transition-shadow\">\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <Badge\n variant={plan.status === 'published' ? 'default' : 'secondary'}\n className=\"text-xs\"\n >\n {plan.status}\n </Badge>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Clock className=\"h-3 w-3\" />\n {plan.duration}\n </div>\n </div>\n <CardTitle className=\"text-lg mt-2\">{plan.title}</CardTitle>\n <p className=\"text-sm text-muted-foreground\">{plan.course}</p>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <div>\n <div className=\"flex items-center gap-1 text-sm font-medium mb-1\">\n <Target className=\"h-4 w-4 text-muted-foreground\" />\n Objectives\n </div>\n <ul className=\"text-sm text-muted-foreground space-y-1\">\n {plan.objectives.map((obj, i) => (\n <li key={i} className=\"flex items-start gap-1\">\n <CheckCircle className=\"h-3 w-3 mt-1 text-green-500 shrink-0\" />\n {obj}\n </li>\n ))}\n </ul>\n </div>\n <div>\n <div className=\"flex items-center gap-1 text-sm font-medium mb-1\">\n <Package className=\"h-4 w-4 text-muted-foreground\" />\n Materials\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {plan.materials.map((mat, i) => (\n <Badge key={i} variant=\"outline\" className=\"text-xs\">\n {mat}\n </Badge>\n ))}\n </div>\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground pt-2 border-t\">\n <span>Updated: {plan.lastUpdated}</span>\n <Button size=\"sm\" variant=\"outline\">\n Edit\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TeachingQuestionsPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/TeachingQuestionsPage.tsx"],"names":[],"mappings":"AAoCA,wBAAgB,qBAAqB,4CAuJpC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
|
|
2
|
+
import { useState as t } from "react";
|
|
3
|
+
import { CheckSquare as n, FileText as r, Plus as i, Search as a, ToggleLeft as o, Type as s } from "lucide-react";
|
|
4
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
5
|
+
import { Badge as u, Button as d, Card as f, CardContent as p, Input as m } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/buildmyiq/pages/TeachingQuestionsPage.tsx
|
|
7
|
+
var h = {
|
|
8
|
+
multiple_choice: {
|
|
9
|
+
label: "Multiple Choice",
|
|
10
|
+
icon: n,
|
|
11
|
+
color: "bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"
|
|
12
|
+
},
|
|
13
|
+
short_answer: {
|
|
14
|
+
label: "Short Answer",
|
|
15
|
+
icon: s,
|
|
16
|
+
color: "bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"
|
|
17
|
+
},
|
|
18
|
+
essay: {
|
|
19
|
+
label: "Essay",
|
|
20
|
+
icon: r,
|
|
21
|
+
color: "bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400"
|
|
22
|
+
},
|
|
23
|
+
true_false: {
|
|
24
|
+
label: "True/False",
|
|
25
|
+
icon: o,
|
|
26
|
+
color: "bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400"
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
function g() {
|
|
30
|
+
let { quizQuestions: n } = e(), [r, o] = t(""), [s, g] = t("all"), [_, v] = t("all"), y = ["all", ...Array.from(new Set(n.map((e) => e.course)))], b = n.filter((e) => {
|
|
31
|
+
let t = e.question.toLowerCase().includes(r.toLowerCase()) || e.topic.toLowerCase().includes(r.toLowerCase()), n = s === "all" || e.type === s, i = _ === "all" || e.course === _;
|
|
32
|
+
return t && n && i;
|
|
33
|
+
}), x = {
|
|
34
|
+
multiple_choice: n.filter((e) => e.type === "multiple_choice").length,
|
|
35
|
+
short_answer: n.filter((e) => e.type === "short_answer").length,
|
|
36
|
+
essay: n.filter((e) => e.type === "essay").length,
|
|
37
|
+
true_false: n.filter((e) => e.type === "true_false").length
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ l("div", {
|
|
40
|
+
className: "space-y-6 p-6",
|
|
41
|
+
children: [
|
|
42
|
+
/* @__PURE__ */ l("div", {
|
|
43
|
+
className: "flex items-center justify-between",
|
|
44
|
+
children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
|
|
45
|
+
className: "text-2xl font-semibold",
|
|
46
|
+
children: "Question Bank"
|
|
47
|
+
}), /* @__PURE__ */ c("p", {
|
|
48
|
+
className: "text-sm text-muted-foreground",
|
|
49
|
+
children: "Manage and organize your assessment questions"
|
|
50
|
+
})] }), /* @__PURE__ */ l(d, {
|
|
51
|
+
size: "sm",
|
|
52
|
+
children: [/* @__PURE__ */ c(i, { className: "mr-2 h-4 w-4" }), "Create Question"]
|
|
53
|
+
})]
|
|
54
|
+
}),
|
|
55
|
+
/* @__PURE__ */ l("div", {
|
|
56
|
+
className: "grid grid-cols-1 md:grid-cols-5 gap-4",
|
|
57
|
+
children: [/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
58
|
+
className: "pt-6",
|
|
59
|
+
children: [/* @__PURE__ */ c("p", {
|
|
60
|
+
className: "text-sm text-muted-foreground",
|
|
61
|
+
children: "Total Questions"
|
|
62
|
+
}), /* @__PURE__ */ c("p", {
|
|
63
|
+
className: "text-2xl font-bold",
|
|
64
|
+
children: n.length
|
|
65
|
+
})]
|
|
66
|
+
}) }), Object.entries(h).map(([e, t]) => /* @__PURE__ */ c(f, { children: /* @__PURE__ */ c(p, {
|
|
67
|
+
className: "pt-6",
|
|
68
|
+
children: /* @__PURE__ */ l("div", {
|
|
69
|
+
className: "flex items-center gap-2",
|
|
70
|
+
children: [/* @__PURE__ */ c(t.icon, { className: `h-4 w-4 ${t.color.split(" ")[1]}` }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
|
|
71
|
+
className: "text-sm text-muted-foreground",
|
|
72
|
+
children: t.label
|
|
73
|
+
}), /* @__PURE__ */ c("p", {
|
|
74
|
+
className: "text-2xl font-bold",
|
|
75
|
+
children: x[e]
|
|
76
|
+
})] })]
|
|
77
|
+
})
|
|
78
|
+
}) }, e))]
|
|
79
|
+
}),
|
|
80
|
+
/* @__PURE__ */ l("div", {
|
|
81
|
+
className: "flex flex-col sm:flex-row gap-3",
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ l("div", {
|
|
84
|
+
className: "relative flex-1",
|
|
85
|
+
children: [/* @__PURE__ */ c(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ c(m, {
|
|
86
|
+
placeholder: "Search questions...",
|
|
87
|
+
value: r,
|
|
88
|
+
onChange: (e) => o(e.target.value),
|
|
89
|
+
className: "pl-10"
|
|
90
|
+
})]
|
|
91
|
+
}),
|
|
92
|
+
/* @__PURE__ */ l("div", {
|
|
93
|
+
className: "flex gap-1",
|
|
94
|
+
children: [/* @__PURE__ */ c(d, {
|
|
95
|
+
variant: s === "all" ? "default" : "outline",
|
|
96
|
+
size: "sm",
|
|
97
|
+
onClick: () => g("all"),
|
|
98
|
+
children: "All Types"
|
|
99
|
+
}), Object.entries(h).map(([e, t]) => /* @__PURE__ */ c(d, {
|
|
100
|
+
variant: s === e ? "default" : "outline",
|
|
101
|
+
size: "sm",
|
|
102
|
+
onClick: () => g(e),
|
|
103
|
+
children: t.label
|
|
104
|
+
}, e))]
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ c("select", {
|
|
107
|
+
value: _,
|
|
108
|
+
onChange: (e) => v(e.target.value),
|
|
109
|
+
className: "h-9 rounded-md border border-input bg-background px-3 text-sm",
|
|
110
|
+
children: y.map((e) => /* @__PURE__ */ c("option", {
|
|
111
|
+
value: e,
|
|
112
|
+
children: e === "all" ? "All Courses" : e
|
|
113
|
+
}, e))
|
|
114
|
+
})
|
|
115
|
+
]
|
|
116
|
+
}),
|
|
117
|
+
/* @__PURE__ */ c("div", {
|
|
118
|
+
className: "space-y-3",
|
|
119
|
+
children: b.map((e) => {
|
|
120
|
+
let t = h[e.type];
|
|
121
|
+
return /* @__PURE__ */ c(f, {
|
|
122
|
+
className: "hover:shadow-md transition-shadow",
|
|
123
|
+
children: /* @__PURE__ */ c(p, {
|
|
124
|
+
className: "py-4",
|
|
125
|
+
children: /* @__PURE__ */ l("div", {
|
|
126
|
+
className: "flex items-start gap-3",
|
|
127
|
+
children: [
|
|
128
|
+
/* @__PURE__ */ c("div", {
|
|
129
|
+
className: `rounded-lg p-2 ${t.color.split(" ").slice(0, 1).join(" ")} shrink-0 mt-0.5`,
|
|
130
|
+
children: /* @__PURE__ */ c(t.icon, { className: `h-4 w-4 ${t.color.split(" ")[1]}` })
|
|
131
|
+
}),
|
|
132
|
+
/* @__PURE__ */ l("div", {
|
|
133
|
+
className: "flex-1 min-w-0",
|
|
134
|
+
children: [
|
|
135
|
+
/* @__PURE__ */ c("p", {
|
|
136
|
+
className: "text-sm font-medium mb-1",
|
|
137
|
+
children: e.question
|
|
138
|
+
}),
|
|
139
|
+
e.options && /* @__PURE__ */ c("div", {
|
|
140
|
+
className: "flex flex-wrap gap-1 mb-2",
|
|
141
|
+
children: e.options.map((t, n) => /* @__PURE__ */ c(u, {
|
|
142
|
+
variant: t === e.correctAnswer ? "default" : "outline",
|
|
143
|
+
className: "text-xs",
|
|
144
|
+
children: t
|
|
145
|
+
}, n))
|
|
146
|
+
}),
|
|
147
|
+
/* @__PURE__ */ l("div", {
|
|
148
|
+
className: "flex flex-wrap items-center gap-2 text-xs text-muted-foreground",
|
|
149
|
+
children: [
|
|
150
|
+
/* @__PURE__ */ c(u, {
|
|
151
|
+
className: t.color,
|
|
152
|
+
children: t.label
|
|
153
|
+
}),
|
|
154
|
+
/* @__PURE__ */ c("span", { children: e.course }),
|
|
155
|
+
/* @__PURE__ */ c("span", { children: "-" }),
|
|
156
|
+
/* @__PURE__ */ c("span", { children: e.topic }),
|
|
157
|
+
/* @__PURE__ */ l(u, {
|
|
158
|
+
variant: "outline",
|
|
159
|
+
className: "text-xs",
|
|
160
|
+
children: [e.points, " pts"]
|
|
161
|
+
})
|
|
162
|
+
]
|
|
163
|
+
})
|
|
164
|
+
]
|
|
165
|
+
}),
|
|
166
|
+
/* @__PURE__ */ c(d, {
|
|
167
|
+
size: "sm",
|
|
168
|
+
variant: "outline",
|
|
169
|
+
className: "shrink-0",
|
|
170
|
+
children: "Edit"
|
|
171
|
+
})
|
|
172
|
+
]
|
|
173
|
+
})
|
|
174
|
+
})
|
|
175
|
+
}, e.id);
|
|
176
|
+
})
|
|
177
|
+
})
|
|
178
|
+
]
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
//#endregion
|
|
182
|
+
export { g as TeachingQuestionsPage };
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=TeachingQuestionsPage.js.map
|