@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 @@
|
|
|
1
|
+
{"version":3,"file":"CoursesIndexPage.js","names":[],"sources":["../../../src/buildmyiq/pages/CoursesIndexPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { BookOpen, Plus, Users, TrendingUp, Clock, Star, Filter } from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function CoursesIndexPage() {\n const { courses } = useBuildMyIQStore();\n const published = courses.filter((c) => c.status === 'published');\n\n const stats = [\n { title: 'Total Courses', value: String(courses.length), icon: BookOpen },\n { title: 'Published', value: String(published.length), icon: Star },\n {\n title: 'Total Students',\n value: String(published.reduce((s, c) => s + c.students, 0)),\n icon: Users,\n },\n ];\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\">Courses</h1>\n <p className=\"text-sm text-muted-foreground\">\n Manage your courses and track student progress\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Filter className=\"mr-2 h-4 w-4\" />\n Filter\n </Button>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Course\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n {stats.map((stat) => (\n <Card key={stat.title}>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">{stat.title}</CardTitle>\n <stat.icon className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{stat.value}</div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {courses.map((course) => (\n <Card key={course.id} className=\"hover:shadow-md transition-shadow\">\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <Badge variant={course.status === 'published' ? 'default' : 'secondary'}>\n {course.status}\n </Badge>\n <Badge variant=\"outline\">{course.level}</Badge>\n </div>\n <CardTitle className=\"text-lg mt-2\">{course.title}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground line-clamp-2\">{course.description}</p>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {course.students}\n </span>\n <span className=\"flex items-center gap-1\">\n <BookOpen className=\"h-3 w-3\" />\n {course.lessons} lessons\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {course.duration}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">{course.instructor}</span>\n <span className=\"flex items-center gap-1 text-sm\">\n <TrendingUp className=\"h-3 w-3\" />\n {course.rating}/5\n </span>\n </div>\n {course.progress !== undefined && (\n <div>\n <div className=\"flex justify-between text-xs mb-1\">\n <span>Progress</span>\n <span>{course.progress}%</span>\n </div>\n <div className=\"h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-2 bg-primary rounded-full\"\n style={{ width: `${course.progress}%` }}\n />\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/DashboardPage.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,aAAa,4CAiR5B"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { useBuildMyIQ as e } from "../providers/BuildMyIQProvider.js";
|
|
2
|
+
import { useBuildMyIQStore as t } from "../store/buildmyiqStore.js";
|
|
3
|
+
import { ArrowRight as n, Award as r, BarChart3 as i, BookOpen as a, Calendar as o, Clock as s, FileText as c, Plus as l, TrendingUp as u, Users as d } from "lucide-react";
|
|
4
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
5
|
+
import { Badge as m, Button as h, Card as g, CardContent as _, CardHeader as v, CardTitle as y } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { useI18n as b } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
7
|
+
//#region src/buildmyiq/pages/DashboardPage.tsx
|
|
8
|
+
function x() {
|
|
9
|
+
let { t: x } = b(), S = (e, t) => {
|
|
10
|
+
let n = x(e);
|
|
11
|
+
return n === e ? t : n;
|
|
12
|
+
}, { currentUser: C } = e(), { courses: w, students: T, assessments: E, grades: D, calendarEvents: O } = t(), k = D.filter((e) => e.status === "pending").length, A = Math.round(w.reduce((e, t) => e + (t.progress ?? 0), 0) / w.length), j = [
|
|
13
|
+
{
|
|
14
|
+
title: S("buildmyiq.dashboard.teacherStats.myCourses.title", "My Courses"),
|
|
15
|
+
value: String(w.filter((e) => e.status === "published").length),
|
|
16
|
+
change: S("buildmyiq.dashboard.teacherStats.myCourses.change", "+2 this month"),
|
|
17
|
+
icon: a
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
title: S("buildmyiq.dashboard.teacherStats.totalStudents.title", "Total Students"),
|
|
21
|
+
value: String(T.length * 31),
|
|
22
|
+
change: S("buildmyiq.dashboard.teacherStats.totalStudents.change", "+15 this week"),
|
|
23
|
+
icon: d
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: S("buildmyiq.dashboard.teacherStats.pendingGrading.title", "Pending Grading"),
|
|
27
|
+
value: String(k),
|
|
28
|
+
change: `${k} ${S("buildmyiq.dashboard.teacherStats.pendingGrading.urgent", "urgent")}`,
|
|
29
|
+
icon: c
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
title: S("buildmyiq.dashboard.teacherStats.avgCompletion.title", "Avg Completion"),
|
|
33
|
+
value: `${A}%`,
|
|
34
|
+
change: S("buildmyiq.dashboard.teacherStats.avgCompletion.change", "+3% this week"),
|
|
35
|
+
icon: u
|
|
36
|
+
}
|
|
37
|
+
], M = [
|
|
38
|
+
{
|
|
39
|
+
title: S("buildmyiq.dashboard.studentStats.activeCourses.title", "Active Courses"),
|
|
40
|
+
value: "6",
|
|
41
|
+
change: S("buildmyiq.dashboard.studentStats.activeCourses.change", "+2 this month"),
|
|
42
|
+
icon: a
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
title: S("buildmyiq.dashboard.studentStats.assignmentsDue.title", "Assignments Due"),
|
|
46
|
+
value: String(E.filter((e) => e.status === "published").length),
|
|
47
|
+
change: S("buildmyiq.dashboard.studentStats.assignmentsDue.change", "3 due this week"),
|
|
48
|
+
icon: c
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
title: S("buildmyiq.dashboard.studentStats.overallProgress.title", "Overall Progress"),
|
|
52
|
+
value: `${A}%`,
|
|
53
|
+
change: S("buildmyiq.dashboard.studentStats.overallProgress.change", "+5% this week"),
|
|
54
|
+
icon: u
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
title: S("buildmyiq.dashboard.studentStats.studyHours.title", "Study Hours"),
|
|
58
|
+
value: "24.5",
|
|
59
|
+
change: S("buildmyiq.dashboard.studentStats.studyHours.change", "This week"),
|
|
60
|
+
icon: s
|
|
61
|
+
}
|
|
62
|
+
], N = C?.role === "teacher" ? j : M, P = [
|
|
63
|
+
{
|
|
64
|
+
id: "1",
|
|
65
|
+
title: S("buildmyiq.dashboard.activity.quizSubmitted.title", "Mathematics Quiz 3 submitted"),
|
|
66
|
+
description: S("buildmyiq.dashboard.activity.quizSubmitted.description", "Advanced Calculus - Grade: A-"),
|
|
67
|
+
time: S("buildmyiq.dashboard.activity.quizSubmitted.time", "2 hours ago"),
|
|
68
|
+
icon: r
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: "2",
|
|
72
|
+
title: S("buildmyiq.dashboard.activity.newLesson.title", "New lesson available in Physics"),
|
|
73
|
+
description: S("buildmyiq.dashboard.activity.newLesson.description", "Quantum Mechanics Chapter 5"),
|
|
74
|
+
time: S("buildmyiq.dashboard.activity.newLesson.time", "1 day ago"),
|
|
75
|
+
icon: a
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "3",
|
|
79
|
+
title: S("buildmyiq.dashboard.activity.discussionReply.title", "Reply in Chemistry Discussion"),
|
|
80
|
+
description: S("buildmyiq.dashboard.activity.discussionReply.description", "Organic Compounds Study Group"),
|
|
81
|
+
time: S("buildmyiq.dashboard.activity.discussionReply.time", "2 days ago"),
|
|
82
|
+
icon: d
|
|
83
|
+
}
|
|
84
|
+
], F = O.slice(0, 3);
|
|
85
|
+
return /* @__PURE__ */ p("div", {
|
|
86
|
+
className: "space-y-6 p-6",
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ p("div", {
|
|
89
|
+
className: "flex items-center justify-between",
|
|
90
|
+
children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ p("h1", {
|
|
91
|
+
className: "text-2xl font-semibold",
|
|
92
|
+
children: [
|
|
93
|
+
S("buildmyiq.dashboard.welcomeBack", "Welcome back"),
|
|
94
|
+
",",
|
|
95
|
+
" ",
|
|
96
|
+
C?.name ?? C?.firstName ?? S("buildmyiq.dashboard.defaultLearnerName", "Student"),
|
|
97
|
+
"!"
|
|
98
|
+
]
|
|
99
|
+
}), /* @__PURE__ */ f("p", {
|
|
100
|
+
className: "text-sm text-muted-foreground",
|
|
101
|
+
children: S("buildmyiq.dashboard.subtitle", "Here's an overview of your learning progress and upcoming activities.")
|
|
102
|
+
})] }), /* @__PURE__ */ p("div", {
|
|
103
|
+
className: "flex gap-2",
|
|
104
|
+
children: [/* @__PURE__ */ p(h, {
|
|
105
|
+
variant: "outline",
|
|
106
|
+
size: "sm",
|
|
107
|
+
children: [/* @__PURE__ */ f(o, { className: "mr-2 h-4 w-4" }), S("buildmyiq.dashboard.actions.viewSchedule", "View Schedule")]
|
|
108
|
+
}), /* @__PURE__ */ p(h, {
|
|
109
|
+
size: "sm",
|
|
110
|
+
children: [/* @__PURE__ */ f(l, { className: "mr-2 h-4 w-4" }), S("buildmyiq.dashboard.actions.quickAdd", "Quick Add")]
|
|
111
|
+
})]
|
|
112
|
+
})]
|
|
113
|
+
}),
|
|
114
|
+
/* @__PURE__ */ f("div", {
|
|
115
|
+
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
|
|
116
|
+
children: N.map((e) => /* @__PURE__ */ p(g, { children: [/* @__PURE__ */ p(v, {
|
|
117
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
118
|
+
children: [/* @__PURE__ */ f(y, {
|
|
119
|
+
className: "text-sm font-medium",
|
|
120
|
+
children: e.title
|
|
121
|
+
}), /* @__PURE__ */ f(e.icon, { className: "h-4 w-4 text-muted-foreground" })]
|
|
122
|
+
}), /* @__PURE__ */ p(_, { children: [/* @__PURE__ */ f("div", {
|
|
123
|
+
className: "text-2xl font-bold",
|
|
124
|
+
children: e.value
|
|
125
|
+
}), /* @__PURE__ */ f("p", {
|
|
126
|
+
className: "text-xs text-muted-foreground",
|
|
127
|
+
children: e.change
|
|
128
|
+
})] })] }, e.title))
|
|
129
|
+
}),
|
|
130
|
+
/* @__PURE__ */ p("div", {
|
|
131
|
+
className: "grid gap-4 md:grid-cols-7",
|
|
132
|
+
children: [/* @__PURE__ */ p(g, {
|
|
133
|
+
className: "col-span-4",
|
|
134
|
+
children: [/* @__PURE__ */ p(v, {
|
|
135
|
+
className: "flex flex-row items-center justify-between",
|
|
136
|
+
children: [/* @__PURE__ */ f(y, { children: S("buildmyiq.dashboard.recentActivity.title", "Recent Activity") }), /* @__PURE__ */ p(h, {
|
|
137
|
+
variant: "ghost",
|
|
138
|
+
size: "sm",
|
|
139
|
+
children: [
|
|
140
|
+
S("buildmyiq.dashboard.common.viewAll", "View All"),
|
|
141
|
+
" ",
|
|
142
|
+
/* @__PURE__ */ f(n, { className: "ml-1 h-4 w-4" })
|
|
143
|
+
]
|
|
144
|
+
})]
|
|
145
|
+
}), /* @__PURE__ */ f(_, {
|
|
146
|
+
className: "space-y-4",
|
|
147
|
+
children: P.map((e) => /* @__PURE__ */ p("div", {
|
|
148
|
+
className: "flex items-start gap-3",
|
|
149
|
+
children: [/* @__PURE__ */ f("div", {
|
|
150
|
+
className: "rounded-lg bg-muted p-2",
|
|
151
|
+
children: /* @__PURE__ */ f(e.icon, { className: "h-4 w-4 text-primary" })
|
|
152
|
+
}), /* @__PURE__ */ p("div", {
|
|
153
|
+
className: "flex-1 min-w-0",
|
|
154
|
+
children: [
|
|
155
|
+
/* @__PURE__ */ f("p", {
|
|
156
|
+
className: "text-sm font-medium",
|
|
157
|
+
children: e.title
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ f("p", {
|
|
160
|
+
className: "text-xs text-muted-foreground",
|
|
161
|
+
children: e.description
|
|
162
|
+
}),
|
|
163
|
+
/* @__PURE__ */ f("p", {
|
|
164
|
+
className: "text-xs text-muted-foreground/70 mt-1",
|
|
165
|
+
children: e.time
|
|
166
|
+
})
|
|
167
|
+
]
|
|
168
|
+
})]
|
|
169
|
+
}, e.id))
|
|
170
|
+
})]
|
|
171
|
+
}), /* @__PURE__ */ p(g, {
|
|
172
|
+
className: "col-span-3",
|
|
173
|
+
children: [/* @__PURE__ */ p(v, {
|
|
174
|
+
className: "flex flex-row items-center justify-between",
|
|
175
|
+
children: [/* @__PURE__ */ f(y, { children: S("buildmyiq.dashboard.upcomingEvents.title", "Upcoming Events") }), /* @__PURE__ */ f(h, {
|
|
176
|
+
variant: "ghost",
|
|
177
|
+
size: "sm",
|
|
178
|
+
children: /* @__PURE__ */ f(o, { className: "h-4 w-4" })
|
|
179
|
+
})]
|
|
180
|
+
}), /* @__PURE__ */ f(_, {
|
|
181
|
+
className: "space-y-3",
|
|
182
|
+
children: F.map((e) => /* @__PURE__ */ f("div", {
|
|
183
|
+
className: "rounded-lg border p-3",
|
|
184
|
+
children: /* @__PURE__ */ p("div", {
|
|
185
|
+
className: "flex items-start justify-between",
|
|
186
|
+
children: [/* @__PURE__ */ p("div", {
|
|
187
|
+
className: "flex-1 min-w-0",
|
|
188
|
+
children: [
|
|
189
|
+
/* @__PURE__ */ f("p", {
|
|
190
|
+
className: "text-sm font-medium truncate",
|
|
191
|
+
children: e.title
|
|
192
|
+
}),
|
|
193
|
+
/* @__PURE__ */ p("p", {
|
|
194
|
+
className: "text-xs text-muted-foreground mt-1",
|
|
195
|
+
children: [
|
|
196
|
+
e.date,
|
|
197
|
+
" ",
|
|
198
|
+
S("buildmyiq.dashboard.upcomingEvents.at", "at"),
|
|
199
|
+
" ",
|
|
200
|
+
e.time
|
|
201
|
+
]
|
|
202
|
+
}),
|
|
203
|
+
/* @__PURE__ */ f("p", {
|
|
204
|
+
className: "text-xs text-muted-foreground/70",
|
|
205
|
+
children: e.location
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
}), /* @__PURE__ */ f(m, {
|
|
209
|
+
variant: e.type === "exam" ? "destructive" : e.type === "assignment" ? "default" : "secondary",
|
|
210
|
+
className: "ml-2 text-xs",
|
|
211
|
+
children: S(`buildmyiq.dashboard.eventType.${e.type}`, e.type)
|
|
212
|
+
})]
|
|
213
|
+
})
|
|
214
|
+
}, e.id))
|
|
215
|
+
})]
|
|
216
|
+
})]
|
|
217
|
+
}),
|
|
218
|
+
/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("h2", {
|
|
219
|
+
className: "text-lg font-semibold mb-4",
|
|
220
|
+
children: S("buildmyiq.dashboard.quickActions.title", "Quick Actions")
|
|
221
|
+
}), /* @__PURE__ */ p("div", {
|
|
222
|
+
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4",
|
|
223
|
+
children: [
|
|
224
|
+
/* @__PURE__ */ p(h, {
|
|
225
|
+
variant: "outline",
|
|
226
|
+
className: "h-auto p-4 flex flex-col items-center gap-2",
|
|
227
|
+
children: [/* @__PURE__ */ f(a, { className: "h-6 w-6" }), /* @__PURE__ */ f("span", {
|
|
228
|
+
className: "text-sm font-medium",
|
|
229
|
+
children: C?.role === "teacher" ? S("buildmyiq.dashboard.quickActions.teacher.createCourse", "Create Course") : S("buildmyiq.dashboard.quickActions.student.browseCourses", "Browse Courses")
|
|
230
|
+
})]
|
|
231
|
+
}),
|
|
232
|
+
/* @__PURE__ */ p(h, {
|
|
233
|
+
variant: "outline",
|
|
234
|
+
className: "h-auto p-4 flex flex-col items-center gap-2",
|
|
235
|
+
children: [/* @__PURE__ */ f(c, { className: "h-6 w-6" }), /* @__PURE__ */ f("span", {
|
|
236
|
+
className: "text-sm font-medium",
|
|
237
|
+
children: C?.role === "teacher" ? S("buildmyiq.dashboard.quickActions.teacher.createAssessment", "Create Assessment") : S("buildmyiq.dashboard.quickActions.student.viewAssignments", "View Assignments")
|
|
238
|
+
})]
|
|
239
|
+
}),
|
|
240
|
+
/* @__PURE__ */ p(h, {
|
|
241
|
+
variant: "outline",
|
|
242
|
+
className: "h-auto p-4 flex flex-col items-center gap-2",
|
|
243
|
+
children: [/* @__PURE__ */ f(i, { className: "h-6 w-6" }), /* @__PURE__ */ f("span", {
|
|
244
|
+
className: "text-sm font-medium",
|
|
245
|
+
children: C?.role === "teacher" ? S("buildmyiq.dashboard.quickActions.teacher.gradeSubmissions", "Grade Submissions") : S("buildmyiq.dashboard.quickActions.student.checkProgress", "Check Progress")
|
|
246
|
+
})]
|
|
247
|
+
}),
|
|
248
|
+
/* @__PURE__ */ p(h, {
|
|
249
|
+
variant: "outline",
|
|
250
|
+
className: "h-auto p-4 flex flex-col items-center gap-2",
|
|
251
|
+
children: [/* @__PURE__ */ f(d, { className: "h-6 w-6" }), /* @__PURE__ */ f("span", {
|
|
252
|
+
className: "text-sm font-medium",
|
|
253
|
+
children: C?.role === "teacher" ? S("buildmyiq.dashboard.quickActions.teacher.makeAnnouncement", "Make Announcement") : S("buildmyiq.dashboard.quickActions.student.aiTutoring", "AI Tutoring")
|
|
254
|
+
})]
|
|
255
|
+
})
|
|
256
|
+
]
|
|
257
|
+
})] })
|
|
258
|
+
]
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
//#endregion
|
|
262
|
+
export { x as DashboardPage };
|
|
263
|
+
|
|
264
|
+
//# sourceMappingURL=DashboardPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardPage.js","names":[],"sources":["../../../src/buildmyiq/pages/DashboardPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport {\n BookOpen,\n Users,\n Award,\n Clock,\n TrendingUp,\n Calendar,\n FileText,\n BarChart3,\n Plus,\n ArrowRight,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\nimport { useBuildMyIQ } from '../providers/BuildMyIQProvider';\n\nexport function DashboardPage() {\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 { currentUser } = useBuildMyIQ();\n const { courses, students, assessments, grades, calendarEvents } = useBuildMyIQStore();\n\n const pendingGrading = grades.filter((g) => g.status === 'pending').length;\n const avgCompletion = Math.round(\n courses.reduce((sum, c) => sum + (c.progress ?? 0), 0) / courses.length\n );\n\n const teacherStats = [\n {\n title: t('buildmyiq.dashboard.teacherStats.myCourses.title', 'My Courses'),\n value: String(courses.filter((c) => c.status === 'published').length),\n change: t('buildmyiq.dashboard.teacherStats.myCourses.change', '+2 this month'),\n icon: BookOpen,\n },\n {\n title: t('buildmyiq.dashboard.teacherStats.totalStudents.title', 'Total Students'),\n value: String(students.length * 31),\n change: t('buildmyiq.dashboard.teacherStats.totalStudents.change', '+15 this week'),\n icon: Users,\n },\n {\n title: t('buildmyiq.dashboard.teacherStats.pendingGrading.title', 'Pending Grading'),\n value: String(pendingGrading),\n change: `${pendingGrading} ${t('buildmyiq.dashboard.teacherStats.pendingGrading.urgent', 'urgent')}`,\n icon: FileText,\n },\n {\n title: t('buildmyiq.dashboard.teacherStats.avgCompletion.title', 'Avg Completion'),\n value: `${avgCompletion}%`,\n change: t('buildmyiq.dashboard.teacherStats.avgCompletion.change', '+3% this week'),\n icon: TrendingUp,\n },\n ];\n\n const studentStats = [\n {\n title: t('buildmyiq.dashboard.studentStats.activeCourses.title', 'Active Courses'),\n value: '6',\n change: t('buildmyiq.dashboard.studentStats.activeCourses.change', '+2 this month'),\n icon: BookOpen,\n },\n {\n title: t('buildmyiq.dashboard.studentStats.assignmentsDue.title', 'Assignments Due'),\n value: String(assessments.filter((a) => a.status === 'published').length),\n change: t('buildmyiq.dashboard.studentStats.assignmentsDue.change', '3 due this week'),\n icon: FileText,\n },\n {\n title: t('buildmyiq.dashboard.studentStats.overallProgress.title', 'Overall Progress'),\n value: `${avgCompletion}%`,\n change: t('buildmyiq.dashboard.studentStats.overallProgress.change', '+5% this week'),\n icon: TrendingUp,\n },\n {\n title: t('buildmyiq.dashboard.studentStats.studyHours.title', 'Study Hours'),\n value: '24.5',\n change: t('buildmyiq.dashboard.studentStats.studyHours.change', 'This week'),\n icon: Clock,\n },\n ];\n\n const stats = currentUser?.role === 'teacher' ? teacherStats : studentStats;\n\n const recentActivity = [\n {\n id: '1',\n title: t('buildmyiq.dashboard.activity.quizSubmitted.title', 'Mathematics Quiz 3 submitted'),\n description: t(\n 'buildmyiq.dashboard.activity.quizSubmitted.description',\n 'Advanced Calculus - Grade: A-'\n ),\n time: t('buildmyiq.dashboard.activity.quizSubmitted.time', '2 hours ago'),\n icon: Award,\n },\n {\n id: '2',\n title: t('buildmyiq.dashboard.activity.newLesson.title', 'New lesson available in Physics'),\n description: t(\n 'buildmyiq.dashboard.activity.newLesson.description',\n 'Quantum Mechanics Chapter 5'\n ),\n time: t('buildmyiq.dashboard.activity.newLesson.time', '1 day ago'),\n icon: BookOpen,\n },\n {\n id: '3',\n title: t(\n 'buildmyiq.dashboard.activity.discussionReply.title',\n 'Reply in Chemistry Discussion'\n ),\n description: t(\n 'buildmyiq.dashboard.activity.discussionReply.description',\n 'Organic Compounds Study Group'\n ),\n time: t('buildmyiq.dashboard.activity.discussionReply.time', '2 days ago'),\n icon: Users,\n },\n ];\n\n const upcomingEvents = calendarEvents.slice(0, 3);\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.dashboard.welcomeBack', 'Welcome back')},{' '}\n {currentUser?.name ??\n currentUser?.firstName ??\n t('buildmyiq.dashboard.defaultLearnerName', 'Student')}\n !\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {t(\n 'buildmyiq.dashboard.subtitle',\n \"Here's an overview of your learning progress and upcoming activities.\"\n )}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Calendar className=\"mr-2 h-4 w-4\" />\n {t('buildmyiq.dashboard.actions.viewSchedule', 'View Schedule')}\n </Button>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n {t('buildmyiq.dashboard.actions.quickAdd', 'Quick Add')}\n </Button>\n </div>\n </div>\n\n {/* Stats */}\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n {stats.map((stat) => (\n <Card key={stat.title}>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">{stat.title}</CardTitle>\n <stat.icon className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{stat.value}</div>\n <p className=\"text-xs text-muted-foreground\">{stat.change}</p>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-7\">\n {/* Recent Activity */}\n <Card className=\"col-span-4\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>\n {t('buildmyiq.dashboard.recentActivity.title', 'Recent Activity')}\n </CardTitle>\n <Button variant=\"ghost\" size=\"sm\">\n {t('buildmyiq.dashboard.common.viewAll', 'View All')}{' '}\n <ArrowRight className=\"ml-1 h-4 w-4\" />\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {recentActivity.map((activity) => (\n <div key={activity.id} className=\"flex items-start gap-3\">\n <div className=\"rounded-lg bg-muted p-2\">\n <activity.icon className=\"h-4 w-4 text-primary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium\">{activity.title}</p>\n <p className=\"text-xs text-muted-foreground\">{activity.description}</p>\n <p className=\"text-xs text-muted-foreground/70 mt-1\">{activity.time}</p>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n {/* Upcoming Events */}\n <Card className=\"col-span-3\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>\n {t('buildmyiq.dashboard.upcomingEvents.title', 'Upcoming Events')}\n </CardTitle>\n <Button variant=\"ghost\" size=\"sm\">\n <Calendar className=\"h-4 w-4\" />\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {upcomingEvents.map((event) => (\n <div key={event.id} className=\"rounded-lg border p-3\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{event.title}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n {event.date} {t('buildmyiq.dashboard.upcomingEvents.at', 'at')} {event.time}\n </p>\n <p className=\"text-xs text-muted-foreground/70\">{event.location}</p>\n </div>\n <Badge\n variant={\n event.type === 'exam'\n ? 'destructive'\n : event.type === 'assignment'\n ? 'default'\n : 'secondary'\n }\n className=\"ml-2 text-xs\"\n >\n {t(`buildmyiq.dashboard.eventType.${event.type}`, event.type)}\n </Badge>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n {/* Quick Actions */}\n <div>\n <h2 className=\"text-lg font-semibold mb-4\">\n {t('buildmyiq.dashboard.quickActions.title', 'Quick Actions')}\n </h2>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\n <Button variant=\"outline\" className=\"h-auto p-4 flex flex-col items-center gap-2\">\n <BookOpen className=\"h-6 w-6\" />\n <span className=\"text-sm font-medium\">\n {currentUser?.role === 'teacher'\n ? t('buildmyiq.dashboard.quickActions.teacher.createCourse', 'Create Course')\n : t('buildmyiq.dashboard.quickActions.student.browseCourses', 'Browse Courses')}\n </span>\n </Button>\n <Button variant=\"outline\" className=\"h-auto p-4 flex flex-col items-center gap-2\">\n <FileText className=\"h-6 w-6\" />\n <span className=\"text-sm font-medium\">\n {currentUser?.role === 'teacher'\n ? t(\n 'buildmyiq.dashboard.quickActions.teacher.createAssessment',\n 'Create Assessment'\n )\n : t('buildmyiq.dashboard.quickActions.student.viewAssignments', 'View Assignments')}\n </span>\n </Button>\n <Button variant=\"outline\" className=\"h-auto p-4 flex flex-col items-center gap-2\">\n <BarChart3 className=\"h-6 w-6\" />\n <span className=\"text-sm font-medium\">\n {currentUser?.role === 'teacher'\n ? t(\n 'buildmyiq.dashboard.quickActions.teacher.gradeSubmissions',\n 'Grade Submissions'\n )\n : t('buildmyiq.dashboard.quickActions.student.checkProgress', 'Check Progress')}\n </span>\n </Button>\n <Button variant=\"outline\" className=\"h-auto p-4 flex flex-col items-center gap-2\">\n <Users className=\"h-6 w-6\" />\n <span className=\"text-sm font-medium\">\n {currentUser?.role === 'teacher'\n ? t(\n 'buildmyiq.dashboard.quickActions.teacher.makeAnnouncement',\n 'Make Announcement'\n )\n : t('buildmyiq.dashboard.quickActions.student.aiTutoring', 'AI Tutoring')}\n </span>\n </Button>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessagesPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/MessagesPage.tsx"],"names":[],"mappings":"AAsFA,wBAAgB,YAAY,4CAmK3B"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { useState as e } from "react";
|
|
2
|
+
import { Circle as t, Clock as n, Mail as r, Plus as i, Search as a, Send as o, Star as s, StarOff as c } from "lucide-react";
|
|
3
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as d, Button as f, Card as p, CardContent as m, Input as h, Textarea as g } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/buildmyiq/pages/MessagesPage.tsx
|
|
6
|
+
var _ = [
|
|
7
|
+
{
|
|
8
|
+
id: "msg-1",
|
|
9
|
+
from: {
|
|
10
|
+
name: "Dr. Sarah Johnson",
|
|
11
|
+
avatar: "SJ",
|
|
12
|
+
role: "Instructor"
|
|
13
|
+
},
|
|
14
|
+
subject: "Calculus Office Hours Update",
|
|
15
|
+
preview: "My office hours this week will be moved to Thursday 4-6 PM...",
|
|
16
|
+
content: "Dear students,\n\nDue to a faculty meeting on Wednesday, my office hours this week will be moved to Thursday 4-6 PM in Office 415.\n\nPlease feel free to drop by with any questions about the upcoming midterm.\n\nBest,\nDr. Johnson",
|
|
17
|
+
timestamp: "1 hour ago",
|
|
18
|
+
read: !1,
|
|
19
|
+
starred: !1
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "msg-2",
|
|
23
|
+
from: {
|
|
24
|
+
name: "Prof. Michael Chen",
|
|
25
|
+
avatar: "MC",
|
|
26
|
+
role: "Instructor"
|
|
27
|
+
},
|
|
28
|
+
subject: "Physics Lab Equipment Notice",
|
|
29
|
+
preview: "New oscilloscopes have arrived for the lab...",
|
|
30
|
+
content: "Hello class,\n\nGreat news! The new digital oscilloscopes have arrived for Lab 203. We will be using them starting next week's session.\n\nPlease review the quick-start guide I posted in the course materials.\n\nProf. Chen",
|
|
31
|
+
timestamp: "3 hours ago",
|
|
32
|
+
read: !1,
|
|
33
|
+
starred: !0
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: "msg-3",
|
|
37
|
+
from: {
|
|
38
|
+
name: "Academic Advising",
|
|
39
|
+
avatar: "AD",
|
|
40
|
+
role: "Admin"
|
|
41
|
+
},
|
|
42
|
+
subject: "Course Load Advisory",
|
|
43
|
+
preview: "We noticed you are registered for 6 courses this semester...",
|
|
44
|
+
content: "Dear Student,\n\nWe noticed you are registered for 6 courses this semester. Our records show this exceeds the recommended course load.\n\nPlease schedule a meeting with your academic advisor to discuss your plan.\n\nAcademic Advising Office",
|
|
45
|
+
timestamp: "1 day ago",
|
|
46
|
+
read: !0,
|
|
47
|
+
starred: !1
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "msg-4",
|
|
51
|
+
from: {
|
|
52
|
+
name: "Alice Martinez",
|
|
53
|
+
avatar: "AM",
|
|
54
|
+
role: "Student"
|
|
55
|
+
},
|
|
56
|
+
subject: "Group Project Update",
|
|
57
|
+
preview: "I finished the introduction section of our research paper...",
|
|
58
|
+
content: "Hey!\n\nI finished the introduction section of our research paper. I've pushed it to the shared drive.\n\nCan you take a look and start on the methodology section?\n\nThanks!\nAlice",
|
|
59
|
+
timestamp: "1 day ago",
|
|
60
|
+
read: !0,
|
|
61
|
+
starred: !0
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: "msg-5",
|
|
65
|
+
from: {
|
|
66
|
+
name: "Dr. James Park",
|
|
67
|
+
avatar: "JP",
|
|
68
|
+
role: "Instructor"
|
|
69
|
+
},
|
|
70
|
+
subject: "Algorithm Assignment Extended",
|
|
71
|
+
preview: "The deadline for the binary tree assignment has been extended...",
|
|
72
|
+
content: "Hi everyone,\n\nDue to several students requesting more time, the deadline for the Binary Tree Implementation assignment has been extended to next Friday.\n\nPlease use the extra time wisely and make sure to include all test cases.\n\nDr. Park",
|
|
73
|
+
timestamp: "2 days ago",
|
|
74
|
+
read: !0,
|
|
75
|
+
starred: !1
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "msg-6",
|
|
79
|
+
from: {
|
|
80
|
+
name: "Library Services",
|
|
81
|
+
avatar: "LS",
|
|
82
|
+
role: "Admin"
|
|
83
|
+
},
|
|
84
|
+
subject: "Study Room Reservation Confirmed",
|
|
85
|
+
preview: "Your study room reservation for Saturday has been confirmed...",
|
|
86
|
+
content: "Dear Student,\n\nYour reservation has been confirmed:\n- Room: Study Room 12B\n- Date: Saturday, Feb 8\n- Time: 10:00 AM - 2:00 PM\n\nPlease arrive on time. Rooms not claimed within 15 minutes will be released.\n\nLibrary Services",
|
|
87
|
+
timestamp: "3 days ago",
|
|
88
|
+
read: !0,
|
|
89
|
+
starred: !1
|
|
90
|
+
}
|
|
91
|
+
];
|
|
92
|
+
function v() {
|
|
93
|
+
let [v, y] = e(_), [b, x] = e(_[0].id), [S, C] = e(""), [w, T] = e("all"), E = (e) => y((t) => t.map((t) => t.id === e ? {
|
|
94
|
+
...t,
|
|
95
|
+
starred: !t.starred
|
|
96
|
+
} : t)), D = v.filter((e) => {
|
|
97
|
+
let t = e.subject.toLowerCase().includes(S.toLowerCase()) || e.from.name.toLowerCase().includes(S.toLowerCase()), n = w === "all" || w === "unread" && !e.read || w === "starred" && e.starred;
|
|
98
|
+
return t && n;
|
|
99
|
+
}), O = v.find((e) => e.id === b), k = v.filter((e) => !e.read).length;
|
|
100
|
+
return /* @__PURE__ */ u("div", {
|
|
101
|
+
className: "space-y-6 p-6",
|
|
102
|
+
children: [/* @__PURE__ */ u("div", {
|
|
103
|
+
className: "flex items-center justify-between",
|
|
104
|
+
children: [/* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h1", {
|
|
105
|
+
className: "text-2xl font-semibold",
|
|
106
|
+
children: "Messages"
|
|
107
|
+
}), /* @__PURE__ */ l("p", {
|
|
108
|
+
className: "text-sm text-muted-foreground",
|
|
109
|
+
children: k > 0 ? `${k} unread` : "All caught up"
|
|
110
|
+
})] }), /* @__PURE__ */ u(f, {
|
|
111
|
+
size: "sm",
|
|
112
|
+
children: [/* @__PURE__ */ l(i, { className: "mr-2 h-4 w-4" }), "Compose"]
|
|
113
|
+
})]
|
|
114
|
+
}), /* @__PURE__ */ u("div", {
|
|
115
|
+
className: "grid grid-cols-1 lg:grid-cols-12 gap-4",
|
|
116
|
+
children: [/* @__PURE__ */ l("div", {
|
|
117
|
+
className: "lg:col-span-4",
|
|
118
|
+
children: /* @__PURE__ */ u(p, {
|
|
119
|
+
className: "overflow-hidden",
|
|
120
|
+
children: [/* @__PURE__ */ u("div", {
|
|
121
|
+
className: "p-3 border-b",
|
|
122
|
+
children: [/* @__PURE__ */ u("div", {
|
|
123
|
+
className: "relative mb-2",
|
|
124
|
+
children: [/* @__PURE__ */ l(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ l(h, {
|
|
125
|
+
placeholder: "Search...",
|
|
126
|
+
value: S,
|
|
127
|
+
onChange: (e) => C(e.target.value),
|
|
128
|
+
className: "pl-10 h-9"
|
|
129
|
+
})]
|
|
130
|
+
}), /* @__PURE__ */ l("div", {
|
|
131
|
+
className: "flex gap-1",
|
|
132
|
+
children: [
|
|
133
|
+
"all",
|
|
134
|
+
"unread",
|
|
135
|
+
"starred"
|
|
136
|
+
].map((e) => /* @__PURE__ */ l(f, {
|
|
137
|
+
variant: w === e ? "default" : "outline",
|
|
138
|
+
size: "sm",
|
|
139
|
+
className: "flex-1 text-xs capitalize",
|
|
140
|
+
onClick: () => T(e),
|
|
141
|
+
children: e
|
|
142
|
+
}, e))
|
|
143
|
+
})]
|
|
144
|
+
}), /* @__PURE__ */ l("div", {
|
|
145
|
+
className: "divide-y max-h-[500px] overflow-y-auto",
|
|
146
|
+
children: D.map((e) => /* @__PURE__ */ l("div", {
|
|
147
|
+
onClick: () => {
|
|
148
|
+
x(e.id), y((t) => t.map((t) => t.id === e.id ? {
|
|
149
|
+
...t,
|
|
150
|
+
read: !0
|
|
151
|
+
} : t));
|
|
152
|
+
},
|
|
153
|
+
className: `p-3 cursor-pointer hover:bg-muted/50 transition-colors ${b === e.id ? "bg-muted" : ""} ${e.read ? "" : "bg-blue-50/50 dark:bg-blue-950/20"}`,
|
|
154
|
+
children: /* @__PURE__ */ u("div", {
|
|
155
|
+
className: "flex items-start gap-2",
|
|
156
|
+
children: [
|
|
157
|
+
/* @__PURE__ */ l("div", {
|
|
158
|
+
className: "shrink-0 w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold",
|
|
159
|
+
children: e.from.avatar
|
|
160
|
+
}),
|
|
161
|
+
/* @__PURE__ */ u("div", {
|
|
162
|
+
className: "flex-1 min-w-0",
|
|
163
|
+
children: [
|
|
164
|
+
/* @__PURE__ */ u("div", {
|
|
165
|
+
className: "flex items-center gap-1",
|
|
166
|
+
children: [/* @__PURE__ */ l("span", {
|
|
167
|
+
className: `text-sm truncate ${e.read ? "font-medium" : "font-bold"}`,
|
|
168
|
+
children: e.from.name
|
|
169
|
+
}), !e.read && /* @__PURE__ */ l(t, { className: "h-2 w-2 fill-blue-500 text-blue-500 shrink-0" })]
|
|
170
|
+
}),
|
|
171
|
+
/* @__PURE__ */ l("p", {
|
|
172
|
+
className: "text-sm truncate text-muted-foreground",
|
|
173
|
+
children: e.subject
|
|
174
|
+
}),
|
|
175
|
+
/* @__PURE__ */ u("div", {
|
|
176
|
+
className: "flex items-center gap-1 mt-1",
|
|
177
|
+
children: [/* @__PURE__ */ l(n, { className: "h-3 w-3 text-muted-foreground" }), /* @__PURE__ */ l("span", {
|
|
178
|
+
className: "text-xs text-muted-foreground",
|
|
179
|
+
children: e.timestamp
|
|
180
|
+
})]
|
|
181
|
+
})
|
|
182
|
+
]
|
|
183
|
+
}),
|
|
184
|
+
/* @__PURE__ */ l("button", {
|
|
185
|
+
onClick: (t) => {
|
|
186
|
+
t.stopPropagation(), E(e.id);
|
|
187
|
+
},
|
|
188
|
+
className: "shrink-0",
|
|
189
|
+
children: e.starred ? /* @__PURE__ */ l(s, { className: "h-4 w-4 fill-yellow-400 text-yellow-400" }) : /* @__PURE__ */ l(c, { className: "h-4 w-4 text-muted-foreground" })
|
|
190
|
+
})
|
|
191
|
+
]
|
|
192
|
+
})
|
|
193
|
+
}, e.id))
|
|
194
|
+
})]
|
|
195
|
+
})
|
|
196
|
+
}), /* @__PURE__ */ l("div", {
|
|
197
|
+
className: "lg:col-span-8",
|
|
198
|
+
children: O ? /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
|
|
199
|
+
className: "pt-6",
|
|
200
|
+
children: [
|
|
201
|
+
/* @__PURE__ */ l("div", {
|
|
202
|
+
className: "border-b pb-4 mb-4",
|
|
203
|
+
children: /* @__PURE__ */ u("div", {
|
|
204
|
+
className: "flex items-start gap-3",
|
|
205
|
+
children: [/* @__PURE__ */ l("div", {
|
|
206
|
+
className: "w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center font-bold text-sm",
|
|
207
|
+
children: O.from.avatar
|
|
208
|
+
}), /* @__PURE__ */ u("div", {
|
|
209
|
+
className: "flex-1",
|
|
210
|
+
children: [/* @__PURE__ */ l("h2", {
|
|
211
|
+
className: "text-lg font-semibold",
|
|
212
|
+
children: O.subject
|
|
213
|
+
}), /* @__PURE__ */ u("div", {
|
|
214
|
+
className: "flex items-center gap-2 text-sm text-muted-foreground",
|
|
215
|
+
children: [
|
|
216
|
+
/* @__PURE__ */ l("span", { children: O.from.name }),
|
|
217
|
+
/* @__PURE__ */ l(d, {
|
|
218
|
+
variant: "outline",
|
|
219
|
+
className: "text-xs",
|
|
220
|
+
children: O.from.role
|
|
221
|
+
}),
|
|
222
|
+
/* @__PURE__ */ l("span", { children: O.timestamp })
|
|
223
|
+
]
|
|
224
|
+
})]
|
|
225
|
+
})]
|
|
226
|
+
})
|
|
227
|
+
}),
|
|
228
|
+
/* @__PURE__ */ l("div", {
|
|
229
|
+
className: "whitespace-pre-line text-sm text-muted-foreground mb-6",
|
|
230
|
+
children: O.content
|
|
231
|
+
}),
|
|
232
|
+
/* @__PURE__ */ u("div", {
|
|
233
|
+
className: "border-t pt-4",
|
|
234
|
+
children: [/* @__PURE__ */ l(g, {
|
|
235
|
+
placeholder: "Type your reply...",
|
|
236
|
+
rows: 3,
|
|
237
|
+
className: "mb-3"
|
|
238
|
+
}), /* @__PURE__ */ l("div", {
|
|
239
|
+
className: "flex justify-end",
|
|
240
|
+
children: /* @__PURE__ */ u(f, {
|
|
241
|
+
size: "sm",
|
|
242
|
+
children: [/* @__PURE__ */ l(o, { className: "mr-2 h-4 w-4" }), "Send Reply"]
|
|
243
|
+
})
|
|
244
|
+
})]
|
|
245
|
+
})
|
|
246
|
+
]
|
|
247
|
+
}) }) : /* @__PURE__ */ l(p, { children: /* @__PURE__ */ u(m, {
|
|
248
|
+
className: "py-16 text-center",
|
|
249
|
+
children: [/* @__PURE__ */ l(r, { className: "h-12 w-12 mx-auto mb-3 text-muted-foreground" }), /* @__PURE__ */ l("p", {
|
|
250
|
+
className: "text-muted-foreground",
|
|
251
|
+
children: "Select a message to view"
|
|
252
|
+
})]
|
|
253
|
+
}) })
|
|
254
|
+
})]
|
|
255
|
+
})]
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
//#endregion
|
|
259
|
+
export { v as MessagesPage };
|
|
260
|
+
|
|
261
|
+
//# sourceMappingURL=MessagesPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessagesPage.js","names":[],"sources":["../../../src/buildmyiq/pages/MessagesPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Button, Card, CardContent, Input, Textarea } from '@burdenoff/fe-libs/ui';\nimport { Mail, Search, Star, StarOff, Send, Plus, Clock, Circle } from 'lucide-react';\n\ninterface Msg {\n id: string;\n from: { name: string; avatar: string; role: string };\n subject: string;\n preview: string;\n content: string;\n timestamp: string;\n read: boolean;\n starred: boolean;\n}\n\nconst initialMessages: Msg[] = [\n {\n id: 'msg-1',\n from: { name: 'Dr. Sarah Johnson', avatar: 'SJ', role: 'Instructor' },\n subject: 'Calculus Office Hours Update',\n preview: 'My office hours this week will be moved to Thursday 4-6 PM...',\n content:\n 'Dear students,\\n\\nDue to a faculty meeting on Wednesday, my office hours this week will be moved to Thursday 4-6 PM in Office 415.\\n\\nPlease feel free to drop by with any questions about the upcoming midterm.\\n\\nBest,\\nDr. Johnson',\n timestamp: '1 hour ago',\n read: false,\n starred: false,\n },\n {\n id: 'msg-2',\n from: { name: 'Prof. Michael Chen', avatar: 'MC', role: 'Instructor' },\n subject: 'Physics Lab Equipment Notice',\n preview: 'New oscilloscopes have arrived for the lab...',\n content:\n \"Hello class,\\n\\nGreat news! The new digital oscilloscopes have arrived for Lab 203. We will be using them starting next week's session.\\n\\nPlease review the quick-start guide I posted in the course materials.\\n\\nProf. Chen\",\n timestamp: '3 hours ago',\n read: false,\n starred: true,\n },\n {\n id: 'msg-3',\n from: { name: 'Academic Advising', avatar: 'AD', role: 'Admin' },\n subject: 'Course Load Advisory',\n preview: 'We noticed you are registered for 6 courses this semester...',\n content:\n 'Dear Student,\\n\\nWe noticed you are registered for 6 courses this semester. Our records show this exceeds the recommended course load.\\n\\nPlease schedule a meeting with your academic advisor to discuss your plan.\\n\\nAcademic Advising Office',\n timestamp: '1 day ago',\n read: true,\n starred: false,\n },\n {\n id: 'msg-4',\n from: { name: 'Alice Martinez', avatar: 'AM', role: 'Student' },\n subject: 'Group Project Update',\n preview: 'I finished the introduction section of our research paper...',\n content:\n \"Hey!\\n\\nI finished the introduction section of our research paper. I've pushed it to the shared drive.\\n\\nCan you take a look and start on the methodology section?\\n\\nThanks!\\nAlice\",\n timestamp: '1 day ago',\n read: true,\n starred: true,\n },\n {\n id: 'msg-5',\n from: { name: 'Dr. James Park', avatar: 'JP', role: 'Instructor' },\n subject: 'Algorithm Assignment Extended',\n preview: 'The deadline for the binary tree assignment has been extended...',\n content:\n 'Hi everyone,\\n\\nDue to several students requesting more time, the deadline for the Binary Tree Implementation assignment has been extended to next Friday.\\n\\nPlease use the extra time wisely and make sure to include all test cases.\\n\\nDr. Park',\n timestamp: '2 days ago',\n read: true,\n starred: false,\n },\n {\n id: 'msg-6',\n from: { name: 'Library Services', avatar: 'LS', role: 'Admin' },\n subject: 'Study Room Reservation Confirmed',\n preview: 'Your study room reservation for Saturday has been confirmed...',\n content:\n 'Dear Student,\\n\\nYour reservation has been confirmed:\\n- Room: Study Room 12B\\n- Date: Saturday, Feb 8\\n- Time: 10:00 AM - 2:00 PM\\n\\nPlease arrive on time. Rooms not claimed within 15 minutes will be released.\\n\\nLibrary Services',\n timestamp: '3 days ago',\n read: true,\n starred: false,\n },\n];\n\ntype FilterType = 'all' | 'unread' | 'starred';\n\nexport function MessagesPage() {\n const [messages, setMessages] = useState(initialMessages);\n const [selectedId, setSelectedId] = useState<string>(initialMessages[0].id);\n const [search, setSearch] = useState('');\n const [filter, setFilter] = useState<FilterType>('all');\n\n const toggleStar = (id: string) =>\n setMessages((prev) => prev.map((m) => (m.id === id ? { ...m, starred: !m.starred } : m)));\n\n const filtered = messages.filter((m) => {\n const matchesSearch =\n m.subject.toLowerCase().includes(search.toLowerCase()) ||\n m.from.name.toLowerCase().includes(search.toLowerCase());\n const matchesFilter =\n filter === 'all' || (filter === 'unread' && !m.read) || (filter === 'starred' && m.starred);\n return matchesSearch && matchesFilter;\n });\n\n const selected = messages.find((m) => m.id === selectedId);\n const unreadCount = messages.filter((m) => !m.read).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\">Messages</h1>\n <p className=\"text-sm text-muted-foreground\">\n {unreadCount > 0 ? `${unreadCount} unread` : 'All caught up'}\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Compose\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-12 gap-4\">\n <div className=\"lg:col-span-4\">\n <Card className=\"overflow-hidden\">\n <div className=\"p-3 border-b\">\n <div className=\"relative mb-2\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-10 h-9\"\n />\n </div>\n <div className=\"flex gap-1\">\n {(['all', 'unread', 'starred'] as FilterType[]).map((f) => (\n <Button\n key={f}\n variant={filter === f ? 'default' : 'outline'}\n size=\"sm\"\n className=\"flex-1 text-xs capitalize\"\n onClick={() => setFilter(f)}\n >\n {f}\n </Button>\n ))}\n </div>\n </div>\n <div className=\"divide-y max-h-[500px] overflow-y-auto\">\n {filtered.map((msg) => (\n <div\n key={msg.id}\n onClick={() => {\n setSelectedId(msg.id);\n setMessages((prev) =>\n prev.map((m) => (m.id === msg.id ? { ...m, read: true } : m))\n );\n }}\n className={`p-3 cursor-pointer hover:bg-muted/50 transition-colors ${selectedId === msg.id ? 'bg-muted' : ''} ${!msg.read ? 'bg-blue-50/50 dark:bg-blue-950/20' : ''}`}\n >\n <div className=\"flex items-start gap-2\">\n <div className=\"shrink-0 w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold\">\n {msg.from.avatar}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-1\">\n <span\n className={`text-sm truncate ${!msg.read ? 'font-bold' : 'font-medium'}`}\n >\n {msg.from.name}\n </span>\n {!msg.read && (\n <Circle className=\"h-2 w-2 fill-blue-500 text-blue-500 shrink-0\" />\n )}\n </div>\n <p className=\"text-sm truncate text-muted-foreground\">{msg.subject}</p>\n <div className=\"flex items-center gap-1 mt-1\">\n <Clock className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">{msg.timestamp}</span>\n </div>\n </div>\n <button\n onClick={(e) => {\n e.stopPropagation();\n toggleStar(msg.id);\n }}\n className=\"shrink-0\"\n >\n {msg.starred ? (\n <Star className=\"h-4 w-4 fill-yellow-400 text-yellow-400\" />\n ) : (\n <StarOff className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n </div>\n </div>\n ))}\n </div>\n </Card>\n </div>\n\n <div className=\"lg:col-span-8\">\n {selected ? (\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"border-b pb-4 mb-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center font-bold text-sm\">\n {selected.from.avatar}\n </div>\n <div className=\"flex-1\">\n <h2 className=\"text-lg font-semibold\">{selected.subject}</h2>\n <div className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <span>{selected.from.name}</span>\n <Badge variant=\"outline\" className=\"text-xs\">\n {selected.from.role}\n </Badge>\n <span>{selected.timestamp}</span>\n </div>\n </div>\n </div>\n </div>\n <div className=\"whitespace-pre-line text-sm text-muted-foreground mb-6\">\n {selected.content}\n </div>\n <div className=\"border-t pt-4\">\n <Textarea placeholder=\"Type your reply...\" rows={3} className=\"mb-3\" />\n <div className=\"flex justify-end\">\n <Button size=\"sm\">\n <Send className=\"mr-2 h-4 w-4\" />\n Send Reply\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n ) : (\n <Card>\n <CardContent className=\"py-16 text-center\">\n <Mail className=\"h-12 w-12 mx-auto mb-3 text-muted-foreground\" />\n <p className=\"text-muted-foreground\">Select a message to view</p>\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfileProgressPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/ProfileProgressPage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,mBAAmB,4CAmKlC"}
|