@burdenoff/microfe-buildmyiq 2026.509.101

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +12 -0
  2. package/dist/buildmyiq/BuildMyIQRoot.d.ts +5 -0
  3. package/dist/buildmyiq/BuildMyIQRoot.d.ts.map +1 -0
  4. package/dist/buildmyiq/BuildMyIQRoot.js +329 -0
  5. package/dist/buildmyiq/BuildMyIQRoot.js.map +1 -0
  6. package/dist/buildmyiq/BuildMyIQRoutes.d.ts +2 -0
  7. package/dist/buildmyiq/BuildMyIQRoutes.d.ts.map +1 -0
  8. package/dist/buildmyiq/BuildMyIQRoutes.js +171 -0
  9. package/dist/buildmyiq/BuildMyIQRoutes.js.map +1 -0
  10. package/dist/buildmyiq/index.d.ts +5 -0
  11. package/dist/buildmyiq/index.d.ts.map +1 -0
  12. package/dist/buildmyiq/index.js +3 -0
  13. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.d.ts +2 -0
  14. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.d.ts.map +1 -0
  15. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.js +271 -0
  16. package/dist/buildmyiq/pages/AdminAdminAnalyticsPagePage.js.map +1 -0
  17. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.d.ts +2 -0
  18. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.d.ts.map +1 -0
  19. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.js +212 -0
  20. package/dist/buildmyiq/pages/AdminAdminCoursesPagePage.js.map +1 -0
  21. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.d.ts +2 -0
  22. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.d.ts.map +1 -0
  23. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.js +235 -0
  24. package/dist/buildmyiq/pages/AdminAdminUsersPagePage.js.map +1 -0
  25. package/dist/buildmyiq/pages/AdminIndexPage.d.ts +2 -0
  26. package/dist/buildmyiq/pages/AdminIndexPage.d.ts.map +1 -0
  27. package/dist/buildmyiq/pages/AdminIndexPage.js +274 -0
  28. package/dist/buildmyiq/pages/AdminIndexPage.js.map +1 -0
  29. package/dist/buildmyiq/pages/AiAichatPagePage.d.ts +2 -0
  30. package/dist/buildmyiq/pages/AiAichatPagePage.d.ts.map +1 -0
  31. package/dist/buildmyiq/pages/AiAichatPagePage.js +209 -0
  32. package/dist/buildmyiq/pages/AiAichatPagePage.js.map +1 -0
  33. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.d.ts +2 -0
  34. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.d.ts.map +1 -0
  35. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.js +318 -0
  36. package/dist/buildmyiq/pages/AiAicontentGenerationPagePage.js.map +1 -0
  37. package/dist/buildmyiq/pages/AiAitutoringPagePage.d.ts +2 -0
  38. package/dist/buildmyiq/pages/AiAitutoringPagePage.d.ts.map +1 -0
  39. package/dist/buildmyiq/pages/AiAitutoringPagePage.js +290 -0
  40. package/dist/buildmyiq/pages/AiAitutoringPagePage.js.map +1 -0
  41. package/dist/buildmyiq/pages/AiIndexPage.d.ts +2 -0
  42. package/dist/buildmyiq/pages/AiIndexPage.d.ts.map +1 -0
  43. package/dist/buildmyiq/pages/AiIndexPage.js +191 -0
  44. package/dist/buildmyiq/pages/AiIndexPage.js.map +1 -0
  45. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.d.ts +2 -0
  46. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.d.ts.map +1 -0
  47. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.js +290 -0
  48. package/dist/buildmyiq/pages/AssessmentsAssessmentBuilderPagePage.js.map +1 -0
  49. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.d.ts +2 -0
  50. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.d.ts.map +1 -0
  51. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.js +215 -0
  52. package/dist/buildmyiq/pages/AssessmentsAssessmentGradingPagePage.js.map +1 -0
  53. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.d.ts +2 -0
  54. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.d.ts.map +1 -0
  55. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.js +224 -0
  56. package/dist/buildmyiq/pages/AssessmentsAssessmentResultsPagePage.js.map +1 -0
  57. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.d.ts +2 -0
  58. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.d.ts.map +1 -0
  59. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.js +174 -0
  60. package/dist/buildmyiq/pages/AssessmentsAssessmentTakePagePage.js.map +1 -0
  61. package/dist/buildmyiq/pages/AssessmentsIndexPage.d.ts +2 -0
  62. package/dist/buildmyiq/pages/AssessmentsIndexPage.d.ts.map +1 -0
  63. package/dist/buildmyiq/pages/AssessmentsIndexPage.js +174 -0
  64. package/dist/buildmyiq/pages/AssessmentsIndexPage.js.map +1 -0
  65. package/dist/buildmyiq/pages/CalendarPage.d.ts +2 -0
  66. package/dist/buildmyiq/pages/CalendarPage.d.ts.map +1 -0
  67. package/dist/buildmyiq/pages/CalendarPage.js +242 -0
  68. package/dist/buildmyiq/pages/CalendarPage.js.map +1 -0
  69. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.d.ts +2 -0
  70. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.d.ts.map +1 -0
  71. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.js +180 -0
  72. package/dist/buildmyiq/pages/CommunicationAnnouncementsPagePage.js.map +1 -0
  73. package/dist/buildmyiq/pages/CommunicationForumsPagePage.d.ts +2 -0
  74. package/dist/buildmyiq/pages/CommunicationForumsPagePage.d.ts.map +1 -0
  75. package/dist/buildmyiq/pages/CommunicationForumsPagePage.js +154 -0
  76. package/dist/buildmyiq/pages/CommunicationForumsPagePage.js.map +1 -0
  77. package/dist/buildmyiq/pages/CommunicationIndexPage.d.ts +2 -0
  78. package/dist/buildmyiq/pages/CommunicationIndexPage.d.ts.map +1 -0
  79. package/dist/buildmyiq/pages/CommunicationIndexPage.js +191 -0
  80. package/dist/buildmyiq/pages/CommunicationIndexPage.js.map +1 -0
  81. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.d.ts +2 -0
  82. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.d.ts.map +1 -0
  83. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.js +261 -0
  84. package/dist/buildmyiq/pages/CommunicationMessagesPagePage.js.map +1 -0
  85. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.d.ts +2 -0
  86. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.d.ts.map +1 -0
  87. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.js +164 -0
  88. package/dist/buildmyiq/pages/CoursesCourseContentPagePage.js.map +1 -0
  89. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.d.ts +2 -0
  90. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.d.ts.map +1 -0
  91. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.js +239 -0
  92. package/dist/buildmyiq/pages/CoursesCourseCreatePagePage.js.map +1 -0
  93. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.d.ts +2 -0
  94. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.d.ts.map +1 -0
  95. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.js +368 -0
  96. package/dist/buildmyiq/pages/CoursesCourseDashboardPagePage.js.map +1 -0
  97. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.d.ts +2 -0
  98. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.d.ts.map +1 -0
  99. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.js +219 -0
  100. package/dist/buildmyiq/pages/CoursesCourseDetailPagePage.js.map +1 -0
  101. package/dist/buildmyiq/pages/CoursesCourseListPagePage.d.ts +2 -0
  102. package/dist/buildmyiq/pages/CoursesCourseListPagePage.d.ts.map +1 -0
  103. package/dist/buildmyiq/pages/CoursesCourseListPagePage.js +153 -0
  104. package/dist/buildmyiq/pages/CoursesCourseListPagePage.js.map +1 -0
  105. package/dist/buildmyiq/pages/CoursesIndexPage.d.ts +2 -0
  106. package/dist/buildmyiq/pages/CoursesIndexPage.d.ts.map +1 -0
  107. package/dist/buildmyiq/pages/CoursesIndexPage.js +138 -0
  108. package/dist/buildmyiq/pages/CoursesIndexPage.js.map +1 -0
  109. package/dist/buildmyiq/pages/DashboardPage.d.ts +2 -0
  110. package/dist/buildmyiq/pages/DashboardPage.d.ts.map +1 -0
  111. package/dist/buildmyiq/pages/DashboardPage.js +264 -0
  112. package/dist/buildmyiq/pages/DashboardPage.js.map +1 -0
  113. package/dist/buildmyiq/pages/MessagesPage.d.ts +2 -0
  114. package/dist/buildmyiq/pages/MessagesPage.d.ts.map +1 -0
  115. package/dist/buildmyiq/pages/MessagesPage.js +261 -0
  116. package/dist/buildmyiq/pages/MessagesPage.js.map +1 -0
  117. package/dist/buildmyiq/pages/ProfileProgressPage.d.ts +2 -0
  118. package/dist/buildmyiq/pages/ProfileProgressPage.d.ts.map +1 -0
  119. package/dist/buildmyiq/pages/ProfileProgressPage.js +194 -0
  120. package/dist/buildmyiq/pages/ProfileProgressPage.js.map +1 -0
  121. package/dist/buildmyiq/pages/TeachingAnalyticsPage.d.ts +2 -0
  122. package/dist/buildmyiq/pages/TeachingAnalyticsPage.d.ts.map +1 -0
  123. package/dist/buildmyiq/pages/TeachingAnalyticsPage.js +243 -0
  124. package/dist/buildmyiq/pages/TeachingAnalyticsPage.js.map +1 -0
  125. package/dist/buildmyiq/pages/TeachingContentPage.d.ts +2 -0
  126. package/dist/buildmyiq/pages/TeachingContentPage.d.ts.map +1 -0
  127. package/dist/buildmyiq/pages/TeachingContentPage.js +165 -0
  128. package/dist/buildmyiq/pages/TeachingContentPage.js.map +1 -0
  129. package/dist/buildmyiq/pages/TeachingCoursesPage.d.ts +2 -0
  130. package/dist/buildmyiq/pages/TeachingCoursesPage.d.ts.map +1 -0
  131. package/dist/buildmyiq/pages/TeachingCoursesPage.js +151 -0
  132. package/dist/buildmyiq/pages/TeachingCoursesPage.js.map +1 -0
  133. package/dist/buildmyiq/pages/TeachingGradingPage.d.ts +2 -0
  134. package/dist/buildmyiq/pages/TeachingGradingPage.d.ts.map +1 -0
  135. package/dist/buildmyiq/pages/TeachingGradingPage.js +204 -0
  136. package/dist/buildmyiq/pages/TeachingGradingPage.js.map +1 -0
  137. package/dist/buildmyiq/pages/TeachingIndexPage.d.ts +2 -0
  138. package/dist/buildmyiq/pages/TeachingIndexPage.d.ts.map +1 -0
  139. package/dist/buildmyiq/pages/TeachingIndexPage.js +220 -0
  140. package/dist/buildmyiq/pages/TeachingIndexPage.js.map +1 -0
  141. package/dist/buildmyiq/pages/TeachingLessonPlansPage.d.ts +2 -0
  142. package/dist/buildmyiq/pages/TeachingLessonPlansPage.d.ts.map +1 -0
  143. package/dist/buildmyiq/pages/TeachingLessonPlansPage.js +157 -0
  144. package/dist/buildmyiq/pages/TeachingLessonPlansPage.js.map +1 -0
  145. package/dist/buildmyiq/pages/TeachingQuestionsPage.d.ts +2 -0
  146. package/dist/buildmyiq/pages/TeachingQuestionsPage.d.ts.map +1 -0
  147. package/dist/buildmyiq/pages/TeachingQuestionsPage.js +184 -0
  148. package/dist/buildmyiq/pages/TeachingQuestionsPage.js.map +1 -0
  149. package/dist/buildmyiq/pages/TeachingStudentsPage.d.ts +2 -0
  150. package/dist/buildmyiq/pages/TeachingStudentsPage.d.ts.map +1 -0
  151. package/dist/buildmyiq/pages/TeachingStudentsPage.js +204 -0
  152. package/dist/buildmyiq/pages/TeachingStudentsPage.js.map +1 -0
  153. package/dist/buildmyiq/providers/BuildMyIQProvider.d.ts +6 -0
  154. package/dist/buildmyiq/providers/BuildMyIQProvider.d.ts.map +1 -0
  155. package/dist/buildmyiq/providers/BuildMyIQProvider.js +27 -0
  156. package/dist/buildmyiq/providers/BuildMyIQProvider.js.map +1 -0
  157. package/dist/buildmyiq/store/buildmyiqStore.d.ts +189 -0
  158. package/dist/buildmyiq/store/buildmyiqStore.d.ts.map +1 -0
  159. package/dist/buildmyiq/store/buildmyiqStore.js +1160 -0
  160. package/dist/buildmyiq/store/buildmyiqStore.js.map +1 -0
  161. package/dist/buildmyiq/types/index.d.ts +51 -0
  162. package/dist/buildmyiq/types/index.d.ts.map +1 -0
  163. package/dist/buildmyiq/utils/cn.d.ts +4 -0
  164. package/dist/buildmyiq/utils/cn.d.ts.map +1 -0
  165. package/dist/buildmyiq/utils/navigation.d.ts +2 -0
  166. package/dist/buildmyiq/utils/navigation.d.ts.map +1 -0
  167. package/dist/buildmyiq/utils/navigation.js +8 -0
  168. package/dist/buildmyiq/utils/navigation.js.map +1 -0
  169. package/dist/dev/main.d.ts +2 -0
  170. package/dist/dev/main.d.ts.map +1 -0
  171. package/dist/generated/global-operations.d.ts +2 -0
  172. package/dist/generated/global-operations.d.ts.map +1 -0
  173. package/dist/generated/global-types.d.ts +18199 -0
  174. package/dist/generated/global-types.d.ts.map +1 -0
  175. package/dist/generated/wspace-operations.d.ts +2 -0
  176. package/dist/generated/wspace-operations.d.ts.map +1 -0
  177. package/dist/generated/wspace-types.d.ts +43046 -0
  178. package/dist/generated/wspace-types.d.ts.map +1 -0
  179. package/dist/index.d.ts +2 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +5 -0
  182. package/package.json +107 -0
@@ -0,0 +1,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/CommunicationMessagesPagePage.tsx
6
+ var _ = [
7
+ {
8
+ id: "m1",
9
+ from: {
10
+ name: "Dr. Sarah Johnson",
11
+ avatar: "SJ",
12
+ role: "Instructor"
13
+ },
14
+ subject: "Re: Midterm Study Guide Available",
15
+ preview: "I have uploaded the study guide for the upcoming calculus midterm...",
16
+ content: "Dear students,\n\nI have uploaded the comprehensive study guide for the upcoming Calculus I midterm examination. The guide covers Chapters 1-5 including limits, derivatives, and applications.\n\nPlease review it carefully and bring any questions to office hours this Thursday.\n\nBest regards,\nDr. Johnson",
17
+ timestamp: "2 hours ago",
18
+ read: !1,
19
+ starred: !0
20
+ },
21
+ {
22
+ id: "m2",
23
+ from: {
24
+ name: "Prof. Michael Chen",
25
+ avatar: "MC",
26
+ role: "Instructor"
27
+ },
28
+ subject: "Lab Session Rescheduled",
29
+ preview: "Due to equipment maintenance, the Thursday lab session...",
30
+ content: "Hi class,\n\nDue to equipment maintenance in Lab 203, the Thursday physics lab session has been rescheduled to Friday at 2:00 PM in Lab 205.\n\nPlease update your calendars accordingly.\n\nProf. Chen",
31
+ timestamp: "5 hours ago",
32
+ read: !1,
33
+ starred: !1
34
+ },
35
+ {
36
+ id: "m3",
37
+ from: {
38
+ name: "Academic Admin",
39
+ avatar: "AA",
40
+ role: "Admin"
41
+ },
42
+ subject: "Registration for Spring Semester",
43
+ preview: "Course registration for the Spring 2025 semester opens...",
44
+ content: "Dear students,\n\nCourse registration for the Spring 2025 semester opens on February 1st. Please consult with your academic advisor before registering.\n\nImportant dates:\n- Registration opens: Feb 1\n- Add/Drop deadline: Feb 15\n- Payment deadline: Feb 28\n\nAcademic Administration",
45
+ timestamp: "1 day ago",
46
+ read: !0,
47
+ starred: !1
48
+ },
49
+ {
50
+ id: "m4",
51
+ from: {
52
+ name: "Brian Kim",
53
+ avatar: "BK",
54
+ role: "Student"
55
+ },
56
+ subject: "Study Group - Saturday",
57
+ preview: "Hey! We are meeting at the library Saturday at 10 AM...",
58
+ content: "Hey!\n\nWe are meeting at the library Saturday at 10 AM for the calculus study group. We will be going over derivative rules and optimization problems.\n\nBring your textbook and calculator!\n\n- Brian",
59
+ timestamp: "1 day ago",
60
+ read: !0,
61
+ starred: !0
62
+ },
63
+ {
64
+ id: "m5",
65
+ from: {
66
+ name: "Dr. Emily Rodriguez",
67
+ avatar: "ER",
68
+ role: "Instructor"
69
+ },
70
+ subject: "Lab Safety Certification Required",
71
+ preview: "All students must complete the online safety module before...",
72
+ content: "Dear Chemistry students,\n\nA reminder that all students must complete the online lab safety certification module before attending any lab sessions this semester.\n\nThe module is available in the course portal under \"Safety Training\". It takes approximately 30 minutes to complete.\n\nDr. Rodriguez",
73
+ timestamp: "2 days ago",
74
+ read: !0,
75
+ starred: !1
76
+ },
77
+ {
78
+ id: "m6",
79
+ from: {
80
+ name: "Grace Lee",
81
+ avatar: "GL",
82
+ role: "Student"
83
+ },
84
+ subject: "Notes from Monday Lecture",
85
+ preview: "I shared my notes from the integration lecture. Check the...",
86
+ content: "Hi everyone,\n\nI shared my notes from Monday's integration lecture on the study group drive. Check the \"Week 6\" folder.\n\nLet me know if you spot any errors!\n\n- Grace",
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 messages` : "All messages read"
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 messages...",
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 CommunicationMessagesPagePage };
260
+
261
+ //# sourceMappingURL=CommunicationMessagesPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommunicationMessagesPagePage.js","names":[],"sources":["../../../src/buildmyiq/pages/CommunicationMessagesPagePage.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 Message {\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 mockMessages: Message[] = [\n {\n id: 'm1',\n from: { name: 'Dr. Sarah Johnson', avatar: 'SJ', role: 'Instructor' },\n subject: 'Re: Midterm Study Guide Available',\n preview: 'I have uploaded the study guide for the upcoming calculus midterm...',\n content:\n 'Dear students,\\n\\nI have uploaded the comprehensive study guide for the upcoming Calculus I midterm examination. The guide covers Chapters 1-5 including limits, derivatives, and applications.\\n\\nPlease review it carefully and bring any questions to office hours this Thursday.\\n\\nBest regards,\\nDr. Johnson',\n timestamp: '2 hours ago',\n read: false,\n starred: true,\n },\n {\n id: 'm2',\n from: { name: 'Prof. Michael Chen', avatar: 'MC', role: 'Instructor' },\n subject: 'Lab Session Rescheduled',\n preview: 'Due to equipment maintenance, the Thursday lab session...',\n content:\n 'Hi class,\\n\\nDue to equipment maintenance in Lab 203, the Thursday physics lab session has been rescheduled to Friday at 2:00 PM in Lab 205.\\n\\nPlease update your calendars accordingly.\\n\\nProf. Chen',\n timestamp: '5 hours ago',\n read: false,\n starred: false,\n },\n {\n id: 'm3',\n from: { name: 'Academic Admin', avatar: 'AA', role: 'Admin' },\n subject: 'Registration for Spring Semester',\n preview: 'Course registration for the Spring 2025 semester opens...',\n content:\n 'Dear students,\\n\\nCourse registration for the Spring 2025 semester opens on February 1st. Please consult with your academic advisor before registering.\\n\\nImportant dates:\\n- Registration opens: Feb 1\\n- Add/Drop deadline: Feb 15\\n- Payment deadline: Feb 28\\n\\nAcademic Administration',\n timestamp: '1 day ago',\n read: true,\n starred: false,\n },\n {\n id: 'm4',\n from: { name: 'Brian Kim', avatar: 'BK', role: 'Student' },\n subject: 'Study Group - Saturday',\n preview: 'Hey! We are meeting at the library Saturday at 10 AM...',\n content:\n 'Hey!\\n\\nWe are meeting at the library Saturday at 10 AM for the calculus study group. We will be going over derivative rules and optimization problems.\\n\\nBring your textbook and calculator!\\n\\n- Brian',\n timestamp: '1 day ago',\n read: true,\n starred: true,\n },\n {\n id: 'm5',\n from: { name: 'Dr. Emily Rodriguez', avatar: 'ER', role: 'Instructor' },\n subject: 'Lab Safety Certification Required',\n preview: 'All students must complete the online safety module before...',\n content:\n 'Dear Chemistry students,\\n\\nA reminder that all students must complete the online lab safety certification module before attending any lab sessions this semester.\\n\\nThe module is available in the course portal under \"Safety Training\". It takes approximately 30 minutes to complete.\\n\\nDr. Rodriguez',\n timestamp: '2 days ago',\n read: true,\n starred: false,\n },\n {\n id: 'm6',\n from: { name: 'Grace Lee', avatar: 'GL', role: 'Student' },\n subject: 'Notes from Monday Lecture',\n preview: 'I shared my notes from the integration lecture. Check the...',\n content:\n 'Hi everyone,\\n\\nI shared my notes from Monday\\'s integration lecture on the study group drive. Check the \"Week 6\" folder.\\n\\nLet me know if you spot any errors!\\n\\n- Grace',\n timestamp: '3 days ago',\n read: true,\n starred: false,\n },\n];\n\ntype FilterType = 'all' | 'unread' | 'starred';\n\nexport function CommunicationMessagesPagePage() {\n const [messages, setMessages] = useState(mockMessages);\n const [selectedId, setSelectedId] = useState<string>(mockMessages[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 messages` : 'All messages read'}\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 messages...\"\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,2 @@
1
+ export declare function CoursesCourseContentPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CoursesCourseContentPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseContentPagePage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/CoursesCourseContentPagePage.tsx"],"names":[],"mappings":"AAaA,wBAAgB,4BAA4B,4CA8I3C"}
@@ -0,0 +1,164 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { useState as t } from "react";
3
+ import { BookOpen as n, CheckCircle as r, ChevronLeft as i, ChevronRight as a, Circle as o, Clock as s, Play as c } from "lucide-react";
4
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
+ import { Badge as d, Button as f, Card as p, CardContent as m } from "@burdenoff/fe-libs/ui";
6
+ //#region src/buildmyiq/pages/CoursesCourseContentPagePage.tsx
7
+ function h() {
8
+ let { courses: h } = e(), g = h[0], _ = g.modules.flatMap((e) => e.lessons), [v, y] = t(0), [b, x] = t(new Set(_.filter((e) => e.completed).map((e) => e.id))), S = _[v], C = Math.round(b.size / _.length * 100);
9
+ return /* @__PURE__ */ u("div", {
10
+ className: "flex h-[calc(100vh-4rem)]",
11
+ children: [/* @__PURE__ */ u("div", {
12
+ className: "flex-1 flex flex-col",
13
+ children: [
14
+ /* @__PURE__ */ u("div", {
15
+ className: "border-b p-4",
16
+ children: [/* @__PURE__ */ u("div", {
17
+ className: "flex items-center justify-between",
18
+ children: [/* @__PURE__ */ u("div", {
19
+ className: "flex items-center gap-4",
20
+ children: [/* @__PURE__ */ u(f, {
21
+ variant: "ghost",
22
+ size: "sm",
23
+ children: [/* @__PURE__ */ l(i, { className: "mr-2 h-4 w-4" }), "Back to Course"]
24
+ }), /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h1", {
25
+ className: "font-semibold",
26
+ children: S.title
27
+ }), /* @__PURE__ */ l("p", {
28
+ className: "text-sm text-muted-foreground",
29
+ children: g.title
30
+ })] })]
31
+ }), /* @__PURE__ */ u("div", {
32
+ className: "flex gap-2",
33
+ children: [/* @__PURE__ */ u(f, {
34
+ variant: "outline",
35
+ size: "sm",
36
+ children: [/* @__PURE__ */ l(n, { className: "mr-2 h-4 w-4" }), "Content"]
37
+ }), /* @__PURE__ */ u(f, {
38
+ variant: "outline",
39
+ size: "sm",
40
+ onClick: () => {
41
+ x((e) => new Set([...e, S.id]));
42
+ },
43
+ disabled: b.has(S.id),
44
+ children: [/* @__PURE__ */ l(r, { className: "mr-2 h-4 w-4" }), b.has(S.id) ? "Completed" : "Mark Complete"]
45
+ })]
46
+ })]
47
+ }), /* @__PURE__ */ u("div", {
48
+ className: "mt-3",
49
+ children: [/* @__PURE__ */ u("div", {
50
+ className: "flex justify-between text-sm text-muted-foreground mb-1",
51
+ children: [/* @__PURE__ */ l("span", { children: "Course Progress" }), /* @__PURE__ */ u("span", { children: [C, "%"] })]
52
+ }), /* @__PURE__ */ l("div", {
53
+ className: "h-2 bg-muted rounded-full overflow-hidden",
54
+ children: /* @__PURE__ */ l("div", {
55
+ className: "h-2 bg-primary rounded-full transition-all",
56
+ style: { width: `${C}%` }
57
+ })
58
+ })]
59
+ })]
60
+ }),
61
+ /* @__PURE__ */ l("div", {
62
+ className: "flex-1 flex items-center justify-center bg-muted/30 p-8",
63
+ children: /* @__PURE__ */ l(p, {
64
+ className: "w-full max-w-2xl",
65
+ children: /* @__PURE__ */ u(m, {
66
+ className: "pt-6 text-center space-y-4",
67
+ children: [
68
+ /* @__PURE__ */ l("div", {
69
+ className: "w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center mx-auto",
70
+ children: /* @__PURE__ */ l(c, { className: "h-8 w-8 text-primary" })
71
+ }),
72
+ /* @__PURE__ */ l("h2", {
73
+ className: "text-xl font-semibold",
74
+ children: S.title
75
+ }),
76
+ /* @__PURE__ */ u("p", {
77
+ className: "text-muted-foreground",
78
+ children: [
79
+ "Lesson type: ",
80
+ S.type,
81
+ " · Duration: ",
82
+ S.duration
83
+ ]
84
+ }),
85
+ /* @__PURE__ */ l(d, {
86
+ variant: b.has(S.id) ? "default" : "secondary",
87
+ children: b.has(S.id) ? "Completed" : "In Progress"
88
+ })
89
+ ]
90
+ })
91
+ })
92
+ }),
93
+ /* @__PURE__ */ u("div", {
94
+ className: "border-t p-4 flex items-center justify-between",
95
+ children: [
96
+ /* @__PURE__ */ u(f, {
97
+ variant: "outline",
98
+ disabled: v === 0,
99
+ onClick: () => y((e) => e - 1),
100
+ children: [/* @__PURE__ */ l(i, { className: "mr-2 h-4 w-4" }), "Previous"]
101
+ }),
102
+ /* @__PURE__ */ u("div", {
103
+ className: "flex items-center gap-2",
104
+ children: [/* @__PURE__ */ l(d, {
105
+ variant: b.has(S.id) ? "default" : "secondary",
106
+ children: b.has(S.id) ? "Completed" : "In Progress"
107
+ }), /* @__PURE__ */ l("span", {
108
+ className: "text-sm text-muted-foreground",
109
+ children: S.duration
110
+ })]
111
+ }),
112
+ /* @__PURE__ */ u(f, {
113
+ disabled: v === _.length - 1,
114
+ onClick: () => y((e) => e + 1),
115
+ children: ["Next", /* @__PURE__ */ l(a, { className: "ml-2 h-4 w-4" })]
116
+ })
117
+ ]
118
+ })
119
+ ]
120
+ }), /* @__PURE__ */ u("div", {
121
+ className: "w-72 border-l overflow-y-auto p-4",
122
+ children: [/* @__PURE__ */ l("h2", {
123
+ className: "font-semibold mb-4",
124
+ children: "Course Content"
125
+ }), g.modules.map((e) => /* @__PURE__ */ u("div", {
126
+ className: "mb-4",
127
+ children: [/* @__PURE__ */ l("h3", {
128
+ className: "text-sm font-medium text-muted-foreground mb-2",
129
+ children: e.title
130
+ }), /* @__PURE__ */ l("div", {
131
+ className: "space-y-1",
132
+ children: e.lessons.map((e) => {
133
+ let t = _.findIndex((t) => t.id === e.id);
134
+ return /* @__PURE__ */ u("button", {
135
+ onClick: () => y(t),
136
+ className: `w-full text-left p-2 rounded border text-sm transition-colors ${t === v ? "border-primary bg-primary/5" : "hover:bg-muted/50"}`,
137
+ children: [/* @__PURE__ */ u("div", {
138
+ className: "flex items-center gap-2",
139
+ children: [b.has(e.id) ? /* @__PURE__ */ l(r, { className: "h-3 w-3 text-green-500 shrink-0" }) : /* @__PURE__ */ l(o, { className: "h-3 w-3 text-muted-foreground shrink-0" }), /* @__PURE__ */ l("span", {
140
+ className: "truncate",
141
+ children: e.title
142
+ })]
143
+ }), /* @__PURE__ */ u("div", {
144
+ className: "flex items-center gap-2 mt-1 ml-5 text-xs text-muted-foreground",
145
+ children: [/* @__PURE__ */ l(d, {
146
+ variant: "outline",
147
+ className: "text-xs",
148
+ children: e.type
149
+ }), /* @__PURE__ */ u("span", {
150
+ className: "flex items-center gap-1",
151
+ children: [/* @__PURE__ */ l(s, { className: "h-3 w-3" }), e.duration]
152
+ })]
153
+ })]
154
+ }, e.id);
155
+ })
156
+ })]
157
+ }, e.id))]
158
+ })]
159
+ });
160
+ }
161
+ //#endregion
162
+ export { h as CoursesCourseContentPagePage };
163
+
164
+ //# sourceMappingURL=CoursesCourseContentPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseContentPagePage.js","names":[],"sources":["../../../src/buildmyiq/pages/CoursesCourseContentPagePage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport {\n ChevronLeft,\n ChevronRight,\n BookOpen,\n CheckCircle,\n Circle,\n Clock,\n Play,\n} from 'lucide-react';\nimport { useState } from 'react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function CoursesCourseContentPagePage() {\n const { courses } = useBuildMyIQStore();\n const course = courses[0];\n const allLessons = course.modules.flatMap((m) => m.lessons);\n const [currentIndex, setCurrentIndex] = useState(0);\n const [completed, setCompleted] = useState<Set<string>>(\n new Set(allLessons.filter((l) => l.completed).map((l) => l.id))\n );\n const currentLesson = allLessons[currentIndex];\n const progress = Math.round((completed.size / allLessons.length) * 100);\n\n const markComplete = () => {\n setCompleted((prev) => new Set([...prev, currentLesson.id]));\n };\n\n return (\n <div className=\"flex h-[calc(100vh-4rem)]\">\n <div className=\"flex-1 flex flex-col\">\n <div className=\"border-b p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"sm\">\n <ChevronLeft className=\"mr-2 h-4 w-4\" />\n Back to Course\n </Button>\n <div>\n <h1 className=\"font-semibold\">{currentLesson.title}</h1>\n <p className=\"text-sm text-muted-foreground\">{course.title}</p>\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <BookOpen className=\"mr-2 h-4 w-4\" />\n Content\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={markComplete}\n disabled={completed.has(currentLesson.id)}\n >\n <CheckCircle className=\"mr-2 h-4 w-4\" />\n {completed.has(currentLesson.id) ? 'Completed' : 'Mark Complete'}\n </Button>\n </div>\n </div>\n <div className=\"mt-3\">\n <div className=\"flex justify-between text-sm text-muted-foreground mb-1\">\n <span>Course Progress</span>\n <span>{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 transition-all\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n </div>\n\n <div className=\"flex-1 flex items-center justify-center bg-muted/30 p-8\">\n <Card className=\"w-full max-w-2xl\">\n <CardContent className=\"pt-6 text-center space-y-4\">\n <div className=\"w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center mx-auto\">\n <Play className=\"h-8 w-8 text-primary\" />\n </div>\n <h2 className=\"text-xl font-semibold\">{currentLesson.title}</h2>\n <p className=\"text-muted-foreground\">\n Lesson type: {currentLesson.type} &middot; Duration: {currentLesson.duration}\n </p>\n <Badge variant={completed.has(currentLesson.id) ? 'default' : 'secondary'}>\n {completed.has(currentLesson.id) ? 'Completed' : 'In Progress'}\n </Badge>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"border-t p-4 flex items-center justify-between\">\n <Button\n variant=\"outline\"\n disabled={currentIndex === 0}\n onClick={() => setCurrentIndex((i) => i - 1)}\n >\n <ChevronLeft className=\"mr-2 h-4 w-4\" />\n Previous\n </Button>\n <div className=\"flex items-center gap-2\">\n <Badge variant={completed.has(currentLesson.id) ? 'default' : 'secondary'}>\n {completed.has(currentLesson.id) ? 'Completed' : 'In Progress'}\n </Badge>\n <span className=\"text-sm text-muted-foreground\">{currentLesson.duration}</span>\n </div>\n <Button\n disabled={currentIndex === allLessons.length - 1}\n onClick={() => setCurrentIndex((i) => i + 1)}\n >\n Next\n <ChevronRight className=\"ml-2 h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n <div className=\"w-72 border-l overflow-y-auto p-4\">\n <h2 className=\"font-semibold mb-4\">Course Content</h2>\n {course.modules.map((mod) => (\n <div key={mod.id} className=\"mb-4\">\n <h3 className=\"text-sm font-medium text-muted-foreground mb-2\">{mod.title}</h3>\n <div className=\"space-y-1\">\n {mod.lessons.map((lesson) => {\n const idx = allLessons.findIndex((l) => l.id === lesson.id);\n return (\n <button\n key={lesson.id}\n onClick={() => setCurrentIndex(idx)}\n className={`w-full text-left p-2 rounded border text-sm transition-colors ${idx === currentIndex ? 'border-primary bg-primary/5' : 'hover:bg-muted/50'}`}\n >\n <div className=\"flex items-center gap-2\">\n {completed.has(lesson.id) ? (\n <CheckCircle className=\"h-3 w-3 text-green-500 shrink-0\" />\n ) : (\n <Circle className=\"h-3 w-3 text-muted-foreground shrink-0\" />\n )}\n <span className=\"truncate\">{lesson.title}</span>\n </div>\n <div className=\"flex items-center gap-2 mt-1 ml-5 text-xs text-muted-foreground\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {lesson.type}\n </Badge>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {lesson.duration}\n </span>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CoursesCourseCreatePagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CoursesCourseCreatePagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseCreatePagePage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/CoursesCourseCreatePagePage.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,2BAA2B,4CA6L1C"}