@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,235 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { useState as t } from "react";
3
+ import { Download as n, MoreHorizontal as r, Plus as i, Search as a } from "lucide-react";
4
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
+ import { Badge as c, Button as l, Card as u, CardContent as d, Input as f } from "@burdenoff/fe-libs/ui";
6
+ //#region src/buildmyiq/pages/AdminAdminUsersPagePage.tsx
7
+ var p = {
8
+ active: "bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400",
9
+ inactive: "bg-gray-100 text-gray-700 dark:bg-gray-900/30 dark:text-gray-400",
10
+ at_risk: "bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"
11
+ };
12
+ function m() {
13
+ let { students: m, instructors: h } = e(), [g, _] = t(""), [v, y] = t("all"), b = [...m.map((e) => ({
14
+ id: e.id,
15
+ name: e.name,
16
+ email: e.email,
17
+ role: "student",
18
+ status: e.status,
19
+ courses: e.enrolledCourses,
20
+ lastActive: e.lastActive,
21
+ avatar: e.avatar
22
+ })), ...h.map((e) => ({
23
+ id: e.id,
24
+ name: e.name,
25
+ email: e.email,
26
+ role: "instructor",
27
+ status: "active",
28
+ courses: e.courses,
29
+ lastActive: "Recently",
30
+ avatar: e.name.split(" ").map((e) => e[0]).join("")
31
+ }))], x = b.filter((e) => {
32
+ let t = e.name.toLowerCase().includes(g.toLowerCase()) || e.email.toLowerCase().includes(g.toLowerCase()), n = v === "all" || e.role === v;
33
+ return t && n;
34
+ }), S = b.filter((e) => e.status === "active").length, C = b.filter((e) => e.status === "at_risk").length;
35
+ return /* @__PURE__ */ s("div", {
36
+ className: "space-y-6 p-6",
37
+ children: [
38
+ /* @__PURE__ */ s("div", {
39
+ className: "flex items-center justify-between",
40
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
41
+ className: "text-2xl font-semibold",
42
+ children: "User Management"
43
+ }), /* @__PURE__ */ o("p", {
44
+ className: "text-sm text-muted-foreground",
45
+ children: "Manage students and instructors on the platform"
46
+ })] }), /* @__PURE__ */ s("div", {
47
+ className: "flex gap-2",
48
+ children: [/* @__PURE__ */ s(l, {
49
+ variant: "outline",
50
+ size: "sm",
51
+ children: [/* @__PURE__ */ o(n, { className: "mr-2 h-4 w-4" }), "Export"]
52
+ }), /* @__PURE__ */ s(l, {
53
+ size: "sm",
54
+ children: [/* @__PURE__ */ o(i, { className: "mr-2 h-4 w-4" }), "Add User"]
55
+ })]
56
+ })]
57
+ }),
58
+ /* @__PURE__ */ s("div", {
59
+ className: "grid grid-cols-1 md:grid-cols-5 gap-4",
60
+ children: [
61
+ /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
62
+ className: "pt-6",
63
+ children: [/* @__PURE__ */ o("p", {
64
+ className: "text-sm text-muted-foreground",
65
+ children: "Total Users"
66
+ }), /* @__PURE__ */ o("p", {
67
+ className: "text-2xl font-bold",
68
+ children: b.length
69
+ })]
70
+ }) }),
71
+ /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
72
+ className: "pt-6",
73
+ children: [/* @__PURE__ */ o("p", {
74
+ className: "text-sm text-muted-foreground",
75
+ children: "Students"
76
+ }), /* @__PURE__ */ o("p", {
77
+ className: "text-2xl font-bold text-blue-600",
78
+ children: m.length
79
+ })]
80
+ }) }),
81
+ /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
82
+ className: "pt-6",
83
+ children: [/* @__PURE__ */ o("p", {
84
+ className: "text-sm text-muted-foreground",
85
+ children: "Instructors"
86
+ }), /* @__PURE__ */ o("p", {
87
+ className: "text-2xl font-bold text-purple-600",
88
+ children: h.length
89
+ })]
90
+ }) }),
91
+ /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
92
+ className: "pt-6",
93
+ children: [/* @__PURE__ */ o("p", {
94
+ className: "text-sm text-muted-foreground",
95
+ children: "Active"
96
+ }), /* @__PURE__ */ o("p", {
97
+ className: "text-2xl font-bold text-green-600",
98
+ children: S
99
+ })]
100
+ }) }),
101
+ /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s(d, {
102
+ className: "pt-6",
103
+ children: [/* @__PURE__ */ o("p", {
104
+ className: "text-sm text-muted-foreground",
105
+ children: "At Risk"
106
+ }), /* @__PURE__ */ o("p", {
107
+ className: "text-2xl font-bold text-yellow-600",
108
+ children: C
109
+ })]
110
+ }) })
111
+ ]
112
+ }),
113
+ /* @__PURE__ */ s("div", {
114
+ className: "flex flex-col sm:flex-row gap-3",
115
+ children: [/* @__PURE__ */ s("div", {
116
+ className: "relative flex-1",
117
+ children: [/* @__PURE__ */ o(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ o(f, {
118
+ placeholder: "Search users by name or email...",
119
+ value: g,
120
+ onChange: (e) => _(e.target.value),
121
+ className: "pl-10"
122
+ })]
123
+ }), /* @__PURE__ */ o("div", {
124
+ className: "flex gap-1",
125
+ children: [
126
+ "all",
127
+ "student",
128
+ "instructor"
129
+ ].map((e) => /* @__PURE__ */ o(l, {
130
+ variant: v === e ? "default" : "outline",
131
+ size: "sm",
132
+ className: "capitalize",
133
+ onClick: () => y(e),
134
+ children: e === "all" ? "All Roles" : `${e}s`
135
+ }, e))
136
+ })]
137
+ }),
138
+ /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o(d, {
139
+ className: "p-0",
140
+ children: /* @__PURE__ */ o("div", {
141
+ className: "overflow-x-auto",
142
+ children: /* @__PURE__ */ s("table", {
143
+ className: "w-full",
144
+ children: [/* @__PURE__ */ o("thead", { children: /* @__PURE__ */ s("tr", {
145
+ className: "border-b bg-muted/50",
146
+ children: [
147
+ /* @__PURE__ */ o("th", {
148
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
149
+ children: "User"
150
+ }),
151
+ /* @__PURE__ */ o("th", {
152
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
153
+ children: "Email"
154
+ }),
155
+ /* @__PURE__ */ o("th", {
156
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
157
+ children: "Role"
158
+ }),
159
+ /* @__PURE__ */ o("th", {
160
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
161
+ children: "Status"
162
+ }),
163
+ /* @__PURE__ */ o("th", {
164
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
165
+ children: "Courses"
166
+ }),
167
+ /* @__PURE__ */ o("th", {
168
+ className: "text-left text-xs font-medium text-muted-foreground p-3",
169
+ children: "Last Active"
170
+ }),
171
+ /* @__PURE__ */ o("th", { className: "text-left text-xs font-medium text-muted-foreground p-3" })
172
+ ]
173
+ }) }), /* @__PURE__ */ o("tbody", { children: x.map((e) => /* @__PURE__ */ s("tr", {
174
+ className: "border-b hover:bg-muted/30 transition-colors",
175
+ children: [
176
+ /* @__PURE__ */ o("td", {
177
+ className: "p-3",
178
+ children: /* @__PURE__ */ s("div", {
179
+ className: "flex items-center gap-2",
180
+ children: [/* @__PURE__ */ o("div", {
181
+ className: "w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold",
182
+ children: e.avatar
183
+ }), /* @__PURE__ */ o("span", {
184
+ className: "text-sm font-medium",
185
+ children: e.name
186
+ })]
187
+ })
188
+ }),
189
+ /* @__PURE__ */ o("td", {
190
+ className: "p-3 text-sm text-muted-foreground",
191
+ children: e.email
192
+ }),
193
+ /* @__PURE__ */ o("td", {
194
+ className: "p-3",
195
+ children: /* @__PURE__ */ o(c, {
196
+ variant: e.role === "instructor" ? "default" : "secondary",
197
+ className: "text-xs capitalize",
198
+ children: e.role
199
+ })
200
+ }),
201
+ /* @__PURE__ */ o("td", {
202
+ className: "p-3",
203
+ children: /* @__PURE__ */ o(c, {
204
+ className: `text-xs ${p[e.status]}`,
205
+ children: e.status.replace("_", " ")
206
+ })
207
+ }),
208
+ /* @__PURE__ */ o("td", {
209
+ className: "p-3 text-sm",
210
+ children: e.courses
211
+ }),
212
+ /* @__PURE__ */ o("td", {
213
+ className: "p-3 text-sm text-muted-foreground",
214
+ children: e.lastActive
215
+ }),
216
+ /* @__PURE__ */ o("td", {
217
+ className: "p-3",
218
+ children: /* @__PURE__ */ o(l, {
219
+ variant: "ghost",
220
+ size: "sm",
221
+ children: /* @__PURE__ */ o(r, { className: "h-4 w-4" })
222
+ })
223
+ })
224
+ ]
225
+ }, e.id)) })]
226
+ })
227
+ })
228
+ }) })
229
+ ]
230
+ });
231
+ }
232
+ //#endregion
233
+ export { m as AdminAdminUsersPagePage };
234
+
235
+ //# sourceMappingURL=AdminAdminUsersPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminAdminUsersPagePage.js","names":[],"sources":["../../../src/buildmyiq/pages/AdminAdminUsersPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Button, Card, CardContent, Input } from '@burdenoff/fe-libs/ui';\nimport { Users, Search, Plus, Download, MoreHorizontal } from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nconst statusColors: Record<string, string> = {\n active: 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400',\n inactive: 'bg-gray-100 text-gray-700 dark:bg-gray-900/30 dark:text-gray-400',\n at_risk: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400',\n};\n\nexport function AdminAdminUsersPagePage() {\n const { students, instructors } = useBuildMyIQStore();\n const [search, setSearch] = useState('');\n const [roleFilter, setRoleFilter] = useState('all');\n\n const allUsers = [\n ...students.map((s) => ({\n id: s.id,\n name: s.name,\n email: s.email,\n role: 'student' as const,\n status: s.status,\n courses: s.enrolledCourses,\n lastActive: s.lastActive,\n avatar: s.avatar,\n })),\n ...instructors.map((i) => ({\n id: i.id,\n name: i.name,\n email: i.email,\n role: 'instructor' as const,\n status: 'active' as const,\n courses: i.courses,\n lastActive: 'Recently',\n avatar: i.name\n .split(' ')\n .map((n) => n[0])\n .join(''),\n })),\n ];\n\n const filtered = allUsers.filter((u) => {\n const matchesSearch =\n u.name.toLowerCase().includes(search.toLowerCase()) ||\n u.email.toLowerCase().includes(search.toLowerCase());\n const matchesRole = roleFilter === 'all' || u.role === roleFilter;\n return matchesSearch && matchesRole;\n });\n\n const activeCount = allUsers.filter((u) => u.status === 'active').length;\n const atRiskCount = allUsers.filter((u) => u.status === 'at_risk').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\">User Management</h1>\n <p className=\"text-sm text-muted-foreground\">\n Manage students and instructors on the platform\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"mr-2 h-4 w-4\" />\n Export\n </Button>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Add User\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-5 gap-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Total Users</p>\n <p className=\"text-2xl font-bold\">{allUsers.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Students</p>\n <p className=\"text-2xl font-bold text-blue-600\">{students.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Instructors</p>\n <p className=\"text-2xl font-bold text-purple-600\">{instructors.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Active</p>\n <p className=\"text-2xl font-bold text-green-600\">{activeCount}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">At Risk</p>\n <p className=\"text-2xl font-bold text-yellow-600\">{atRiskCount}</p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <div className=\"relative flex-1\">\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 users by name or email...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n <div className=\"flex gap-1\">\n {['all', 'student', 'instructor'].map((r) => (\n <Button\n key={r}\n variant={roleFilter === r ? 'default' : 'outline'}\n size=\"sm\"\n className=\"capitalize\"\n onClick={() => setRoleFilter(r)}\n >\n {r === 'all' ? 'All Roles' : `${r}s`}\n </Button>\n ))}\n </div>\n </div>\n\n <Card>\n <CardContent className=\"p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b bg-muted/50\">\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">User</th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">Email</th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">Role</th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">\n Status\n </th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">\n Courses\n </th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\">\n Last Active\n </th>\n <th className=\"text-left text-xs font-medium text-muted-foreground p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {filtered.map((user) => (\n <tr key={user.id} className=\"border-b hover:bg-muted/30 transition-colors\">\n <td className=\"p-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center text-xs font-bold\">\n {user.avatar}\n </div>\n <span className=\"text-sm font-medium\">{user.name}</span>\n </div>\n </td>\n <td className=\"p-3 text-sm text-muted-foreground\">{user.email}</td>\n <td className=\"p-3\">\n <Badge\n variant={user.role === 'instructor' ? 'default' : 'secondary'}\n className=\"text-xs capitalize\"\n >\n {user.role}\n </Badge>\n </td>\n <td className=\"p-3\">\n <Badge className={`text-xs ${statusColors[user.status]}`}>\n {user.status.replace('_', ' ')}\n </Badge>\n </td>\n <td className=\"p-3 text-sm\">{user.courses}</td>\n <td className=\"p-3 text-sm text-muted-foreground\">{user.lastActive}</td>\n <td className=\"p-3\">\n <Button variant=\"ghost\" size=\"sm\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,IAAM,IAAuC;CAC3C,QAAQ;CACR,UAAU;CACV,SAAS;CACV;AAED,SAAgB,IAA0B;CACxC,IAAM,EAAE,aAAU,mBAAgB,GAAmB,EAC/C,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,CAAC,GAAY,KAAiB,EAAS,MAAM,EAE7C,IAAW,CACf,GAAG,EAAS,KAAK,OAAO;EACtB,IAAI,EAAE;EACN,MAAM,EAAE;EACR,OAAO,EAAE;EACT,MAAM;EACN,QAAQ,EAAE;EACV,SAAS,EAAE;EACX,YAAY,EAAE;EACd,QAAQ,EAAE;EACX,EAAE,EACH,GAAG,EAAY,KAAK,OAAO;EACzB,IAAI,EAAE;EACN,MAAM,EAAE;EACR,OAAO,EAAE;EACT,MAAM;EACN,QAAQ;EACR,SAAS,EAAE;EACX,YAAY;EACZ,QAAQ,EAAE,KACP,MAAM,IAAI,CACV,KAAK,MAAM,EAAE,GAAG,CAChB,KAAK,GAAG;EACZ,EAAE,CACJ,EAEK,IAAW,EAAS,QAAQ,MAAM;EACtC,IAAM,IACJ,EAAE,KAAK,aAAa,CAAC,SAAS,EAAO,aAAa,CAAC,IACnD,EAAE,MAAM,aAAa,CAAC,SAAS,EAAO,aAAa,CAAC,EAChD,IAAc,MAAe,SAAS,EAAE,SAAS;AACvD,SAAO,KAAiB;GACxB,EAEI,IAAc,EAAS,QAAQ,MAAM,EAAE,WAAW,SAAS,CAAC,QAC5D,IAAc,EAAS,QAAQ,MAAM,EAAE,WAAW,UAAU,CAAC;AAEnE,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAyB;KAAoB,CAAA,EAC3D,kBAAC,KAAD;KAAG,WAAU;eAAgC;KAEzC,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAQ,SAAQ;MAAU,MAAK;gBAA/B,CACE,kBAAC,GAAD,EAAU,WAAU,gBAAiB,CAAA,EAAA,SAE9B;SACT,kBAAC,GAAD;MAAQ,MAAK;gBAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,WAE1B;QACL;OACF;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAgC;OAAe,CAAA,EAC5D,kBAAC,KAAD;OAAG,WAAU;iBAAsB,EAAS;OAAW,CAAA,CAC3C;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAgC;OAAY,CAAA,EACzD,kBAAC,KAAD;OAAG,WAAU;iBAAoC,EAAS;OAAW,CAAA,CACzD;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAgC;OAAe,CAAA,EAC5D,kBAAC,KAAD;OAAG,WAAU;iBAAsC,EAAY;OAAW,CAAA,CAC9D;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAgC;OAAU,CAAA,EACvD,kBAAC,KAAD;OAAG,WAAU;iBAAqC;OAAgB,CAAA,CACtD;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAgC;OAAW,CAAA,EACxD,kBAAC,KAAD;OAAG,WAAU;iBAAsC;OAAgB,CAAA,CACvD;SACT,CAAA;KACH;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,0EAA2E,CAAA,EAC7F,kBAAC,GAAD;MACE,aAAY;MACZ,OAAO;MACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;MAC1C,WAAU;MACV,CAAA,CACE;QACN,kBAAC,OAAD;KAAK,WAAU;eACZ;MAAC;MAAO;MAAW;MAAa,CAAC,KAAK,MACrC,kBAAC,GAAD;MAEE,SAAS,MAAe,IAAI,YAAY;MACxC,MAAK;MACL,WAAU;MACV,eAAe,EAAc,EAAE;gBAE9B,MAAM,QAAQ,cAAc,GAAG,EAAE;MAC3B,EAPF,EAOE,CACT;KACE,CAAA,CACF;;GAEN,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAa,WAAU;cACrB,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,SAAD;MAAO,WAAU;gBAAjB,CACE,kBAAC,SAAD,EAAA,UACE,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,MAAD;SAAI,WAAU;mBAA0D;SAAS,CAAA;QACjF,kBAAC,MAAD;SAAI,WAAU;mBAA0D;SAAU,CAAA;QAClF,kBAAC,MAAD;SAAI,WAAU;mBAA0D;SAAS,CAAA;QACjF,kBAAC,MAAD;SAAI,WAAU;mBAA0D;SAEnE,CAAA;QACL,kBAAC,MAAD;SAAI,WAAU;mBAA0D;SAEnE,CAAA;QACL,kBAAC,MAAD;SAAI,WAAU;mBAA0D;SAEnE,CAAA;QACL,kBAAC,MAAD,EAAI,WAAU,2DAA+D,CAAA;QAC1E;UACC,CAAA,EACR,kBAAC,SAAD,EAAA,UACG,EAAS,KAAK,MACb,kBAAC,MAAD;OAAkB,WAAU;iBAA5B;QACE,kBAAC,MAAD;SAAI,WAAU;mBACZ,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,OAAD;WAAK,WAAU;qBACZ,EAAK;WACF,CAAA,EACN,kBAAC,QAAD;WAAM,WAAU;qBAAuB,EAAK;WAAY,CAAA,CACpD;;SACH,CAAA;QACL,kBAAC,MAAD;SAAI,WAAU;mBAAqC,EAAK;SAAW,CAAA;QACnE,kBAAC,MAAD;SAAI,WAAU;mBACZ,kBAAC,GAAD;UACE,SAAS,EAAK,SAAS,eAAe,YAAY;UAClD,WAAU;oBAET,EAAK;UACA,CAAA;SACL,CAAA;QACL,kBAAC,MAAD;SAAI,WAAU;mBACZ,kBAAC,GAAD;UAAO,WAAW,WAAW,EAAa,EAAK;oBAC5C,EAAK,OAAO,QAAQ,KAAK,IAAI;UACxB,CAAA;SACL,CAAA;QACL,kBAAC,MAAD;SAAI,WAAU;mBAAe,EAAK;SAAa,CAAA;QAC/C,kBAAC,MAAD;SAAI,WAAU;mBAAqC,EAAK;SAAgB,CAAA;QACxE,kBAAC,MAAD;SAAI,WAAU;mBACZ,kBAAC,GAAD;UAAQ,SAAQ;UAAQ,MAAK;oBAC3B,kBAAC,GAAD,EAAgB,WAAU,WAAY,CAAA;UAC/B,CAAA;SACN,CAAA;QACF;SA9BI,EAAK,GA8BT,CACL,EACI,CAAA,CACF;;KACJ,CAAA;IACM,CAAA,EACT,CAAA;GACH"}
@@ -0,0 +1,2 @@
1
+ export declare function AdminIndexPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AdminIndexPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminIndexPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/AdminIndexPage.tsx"],"names":[],"mappings":"AAqDA,wBAAgB,cAAc,4CAyJ7B"}
@@ -0,0 +1,274 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { Activity as t, ArrowRight as n, BarChart3 as r, BookOpen as i, Clock as a, DollarSign as o, Settings as s, Shield as c, Users as l } from "lucide-react";
3
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
4
+ import { Badge as f, Button as p, Card as m, CardContent as h, CardHeader as g, CardTitle as _ } from "@burdenoff/fe-libs/ui";
5
+ //#region src/buildmyiq/pages/AdminIndexPage.tsx
6
+ var v = [
7
+ {
8
+ id: 1,
9
+ action: "Course published",
10
+ detail: "Data Structures & Algorithms by Dr. James Park",
11
+ time: "2 hours ago",
12
+ type: "course"
13
+ },
14
+ {
15
+ id: 2,
16
+ action: "User registered",
17
+ detail: "New student: Henry Patel (henry.p@university.edu)",
18
+ time: "5 hours ago",
19
+ type: "user"
20
+ },
21
+ {
22
+ id: 3,
23
+ action: "Assessment graded",
24
+ detail: "Calculus I Midterm - 42 submissions graded",
25
+ time: "1 day ago",
26
+ type: "assessment"
27
+ },
28
+ {
29
+ id: 4,
30
+ action: "System backup completed",
31
+ detail: "Full database backup successful",
32
+ time: "1 day ago",
33
+ type: "system"
34
+ },
35
+ {
36
+ id: 5,
37
+ action: "User role updated",
38
+ detail: "Prof. Amara Osei promoted to Department Head",
39
+ time: "2 days ago",
40
+ type: "user"
41
+ }
42
+ ];
43
+ function y() {
44
+ let { courses: y, students: b, instructors: x } = e(), S = b.length + x.length, C = y.filter((e) => e.status === "published").length, w = y.reduce((e, t) => e + t.price * t.students, 0);
45
+ return /* @__PURE__ */ d("div", {
46
+ className: "space-y-6 p-6",
47
+ children: [
48
+ /* @__PURE__ */ d("div", {
49
+ className: "flex items-center justify-between",
50
+ children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
51
+ className: "text-2xl font-semibold",
52
+ children: "Admin Dashboard"
53
+ }), /* @__PURE__ */ u("p", {
54
+ className: "text-sm text-muted-foreground",
55
+ children: "Platform administration and management"
56
+ })] }), /* @__PURE__ */ d(p, {
57
+ size: "sm",
58
+ variant: "outline",
59
+ children: [/* @__PURE__ */ u(s, { className: "mr-2 h-4 w-4" }), "System Settings"]
60
+ })]
61
+ }),
62
+ /* @__PURE__ */ d("div", {
63
+ className: "grid grid-cols-1 md:grid-cols-4 gap-4",
64
+ children: [
65
+ /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u(h, {
66
+ className: "pt-6",
67
+ children: /* @__PURE__ */ d("div", {
68
+ className: "flex items-center gap-3",
69
+ children: [/* @__PURE__ */ u(l, { className: "h-5 w-5 text-blue-600" }), /* @__PURE__ */ d("div", { children: [
70
+ /* @__PURE__ */ u("p", {
71
+ className: "text-sm text-muted-foreground",
72
+ children: "Total Users"
73
+ }),
74
+ /* @__PURE__ */ u("p", {
75
+ className: "text-2xl font-bold",
76
+ children: S
77
+ }),
78
+ /* @__PURE__ */ u("p", {
79
+ className: "text-xs text-green-600",
80
+ children: "+12 this week"
81
+ })
82
+ ] })]
83
+ })
84
+ }) }),
85
+ /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u(h, {
86
+ className: "pt-6",
87
+ children: /* @__PURE__ */ d("div", {
88
+ className: "flex items-center gap-3",
89
+ children: [/* @__PURE__ */ u(i, { className: "h-5 w-5 text-purple-600" }), /* @__PURE__ */ d("div", { children: [
90
+ /* @__PURE__ */ u("p", {
91
+ className: "text-sm text-muted-foreground",
92
+ children: "Active Courses"
93
+ }),
94
+ /* @__PURE__ */ u("p", {
95
+ className: "text-2xl font-bold",
96
+ children: C
97
+ }),
98
+ /* @__PURE__ */ u("p", {
99
+ className: "text-xs text-green-600",
100
+ children: "+2 this month"
101
+ })
102
+ ] })]
103
+ })
104
+ }) }),
105
+ /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u(h, {
106
+ className: "pt-6",
107
+ children: /* @__PURE__ */ d("div", {
108
+ className: "flex items-center gap-3",
109
+ children: [/* @__PURE__ */ u(o, { className: "h-5 w-5 text-green-600" }), /* @__PURE__ */ d("div", { children: [
110
+ /* @__PURE__ */ u("p", {
111
+ className: "text-sm text-muted-foreground",
112
+ children: "Total Revenue"
113
+ }),
114
+ /* @__PURE__ */ d("p", {
115
+ className: "text-2xl font-bold",
116
+ children: ["$", w.toLocaleString()]
117
+ }),
118
+ /* @__PURE__ */ u("p", {
119
+ className: "text-xs text-green-600",
120
+ children: "+8.3% vs last month"
121
+ })
122
+ ] })]
123
+ })
124
+ }) }),
125
+ /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u(h, {
126
+ className: "pt-6",
127
+ children: /* @__PURE__ */ d("div", {
128
+ className: "flex items-center gap-3",
129
+ children: [/* @__PURE__ */ u(t, { className: "h-5 w-5 text-orange-600" }), /* @__PURE__ */ d("div", { children: [
130
+ /* @__PURE__ */ u("p", {
131
+ className: "text-sm text-muted-foreground",
132
+ children: "Active Sessions"
133
+ }),
134
+ /* @__PURE__ */ u("p", {
135
+ className: "text-2xl font-bold",
136
+ children: "234"
137
+ }),
138
+ /* @__PURE__ */ u("p", {
139
+ className: "text-xs text-muted-foreground",
140
+ children: "Currently online"
141
+ })
142
+ ] })]
143
+ })
144
+ }) })
145
+ ]
146
+ }),
147
+ /* @__PURE__ */ d("div", {
148
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
149
+ children: [/* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, {
150
+ className: "text-lg",
151
+ children: "System Health"
152
+ }) }), /* @__PURE__ */ u(h, {
153
+ className: "space-y-3",
154
+ children: [
155
+ {
156
+ name: "API Server",
157
+ status: "Operational",
158
+ color: "bg-green-500"
159
+ },
160
+ {
161
+ name: "Database",
162
+ status: "Operational",
163
+ color: "bg-green-500"
164
+ },
165
+ {
166
+ name: "File Storage",
167
+ status: "Operational",
168
+ color: "bg-green-500"
169
+ },
170
+ {
171
+ name: "AI Services",
172
+ status: "Degraded",
173
+ color: "bg-yellow-500"
174
+ },
175
+ {
176
+ name: "Email Service",
177
+ status: "Operational",
178
+ color: "bg-green-500"
179
+ }
180
+ ].map((e) => /* @__PURE__ */ d("div", {
181
+ className: "flex items-center justify-between",
182
+ children: [/* @__PURE__ */ d("div", {
183
+ className: "flex items-center gap-2",
184
+ children: [/* @__PURE__ */ u("div", { className: `h-2 w-2 rounded-full ${e.color}` }), /* @__PURE__ */ u("span", {
185
+ className: "text-sm",
186
+ children: e.name
187
+ })]
188
+ }), /* @__PURE__ */ u(f, {
189
+ variant: "outline",
190
+ className: "text-xs",
191
+ children: e.status
192
+ })]
193
+ }, e.name))
194
+ })] }), /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, {
195
+ className: "text-lg",
196
+ children: "Quick Actions"
197
+ }) }), /* @__PURE__ */ u(h, {
198
+ className: "space-y-2",
199
+ children: [
200
+ {
201
+ label: "Manage Users",
202
+ desc: "View and manage all platform users",
203
+ icon: l
204
+ },
205
+ {
206
+ label: "Manage Courses",
207
+ desc: "Course approval and administration",
208
+ icon: i
209
+ },
210
+ {
211
+ label: "View Reports",
212
+ desc: "Platform analytics and reports",
213
+ icon: r
214
+ },
215
+ {
216
+ label: "Security Settings",
217
+ desc: "Access controls and policies",
218
+ icon: c
219
+ }
220
+ ].map((e) => /* @__PURE__ */ d("button", {
221
+ className: "w-full flex items-center gap-3 rounded-lg border p-3 hover:bg-muted/50 transition-colors text-left",
222
+ children: [
223
+ /* @__PURE__ */ u(e.icon, { className: "h-5 w-5 text-muted-foreground shrink-0" }),
224
+ /* @__PURE__ */ d("div", {
225
+ className: "flex-1",
226
+ children: [/* @__PURE__ */ u("p", {
227
+ className: "text-sm font-medium",
228
+ children: e.label
229
+ }), /* @__PURE__ */ u("p", {
230
+ className: "text-xs text-muted-foreground",
231
+ children: e.desc
232
+ })]
233
+ }),
234
+ /* @__PURE__ */ u(n, { className: "h-4 w-4 text-muted-foreground" })
235
+ ]
236
+ }, e.label))
237
+ })] })]
238
+ }),
239
+ /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, {
240
+ className: "text-lg",
241
+ children: "Recent Admin Activity"
242
+ }) }), /* @__PURE__ */ u(h, { children: /* @__PURE__ */ u("div", {
243
+ className: "space-y-3",
244
+ children: v.map((e) => /* @__PURE__ */ d("div", {
245
+ className: "flex items-center gap-3 rounded-lg border p-3",
246
+ children: [
247
+ /* @__PURE__ */ u("div", {
248
+ className: "rounded-lg bg-muted p-2",
249
+ children: /* @__PURE__ */ u(t, { className: "h-4 w-4 text-muted-foreground" })
250
+ }),
251
+ /* @__PURE__ */ d("div", {
252
+ className: "flex-1",
253
+ children: [/* @__PURE__ */ u("p", {
254
+ className: "text-sm font-medium",
255
+ children: e.action
256
+ }), /* @__PURE__ */ u("p", {
257
+ className: "text-xs text-muted-foreground",
258
+ children: e.detail
259
+ })]
260
+ }),
261
+ /* @__PURE__ */ d("div", {
262
+ className: "flex items-center gap-1 text-xs text-muted-foreground",
263
+ children: [/* @__PURE__ */ u(a, { className: "h-3 w-3" }), e.time]
264
+ })
265
+ ]
266
+ }, e.id))
267
+ }) })] })
268
+ ]
269
+ });
270
+ }
271
+ //#endregion
272
+ export { y as AdminIndexPage };
273
+
274
+ //# sourceMappingURL=AdminIndexPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminIndexPage.js","names":[],"sources":["../../../src/buildmyiq/pages/AdminIndexPage.tsx"],"sourcesContent":["import { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport {\n Settings,\n Users,\n BookOpen,\n BarChart3,\n Shield,\n Activity,\n DollarSign,\n Server,\n ArrowRight,\n Clock,\n} from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nconst recentAdminActivity = [\n {\n id: 1,\n action: 'Course published',\n detail: 'Data Structures & Algorithms by Dr. James Park',\n time: '2 hours ago',\n type: 'course',\n },\n {\n id: 2,\n action: 'User registered',\n detail: 'New student: Henry Patel (henry.p@university.edu)',\n time: '5 hours ago',\n type: 'user',\n },\n {\n id: 3,\n action: 'Assessment graded',\n detail: 'Calculus I Midterm - 42 submissions graded',\n time: '1 day ago',\n type: 'assessment',\n },\n {\n id: 4,\n action: 'System backup completed',\n detail: 'Full database backup successful',\n time: '1 day ago',\n type: 'system',\n },\n {\n id: 5,\n action: 'User role updated',\n detail: 'Prof. Amara Osei promoted to Department Head',\n time: '2 days ago',\n type: 'user',\n },\n];\n\nexport function AdminIndexPage() {\n const { courses, students, instructors } = useBuildMyIQStore();\n const totalUsers = students.length + instructors.length;\n const publishedCourses = courses.filter((c) => c.status === 'published').length;\n const totalRevenue = courses.reduce((sum, c) => sum + c.price * c.students, 0);\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\">Admin Dashboard</h1>\n <p className=\"text-sm text-muted-foreground\">Platform administration and management</p>\n </div>\n <Button size=\"sm\" variant=\"outline\">\n <Settings className=\"mr-2 h-4 w-4\" />\n System Settings\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <Users className=\"h-5 w-5 text-blue-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Total Users</p>\n <p className=\"text-2xl font-bold\">{totalUsers}</p>\n <p className=\"text-xs text-green-600\">+12 this week</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <BookOpen className=\"h-5 w-5 text-purple-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Active Courses</p>\n <p className=\"text-2xl font-bold\">{publishedCourses}</p>\n <p className=\"text-xs text-green-600\">+2 this month</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <DollarSign className=\"h-5 w-5 text-green-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Total Revenue</p>\n <p className=\"text-2xl font-bold\">${totalRevenue.toLocaleString()}</p>\n <p className=\"text-xs text-green-600\">+8.3% vs last month</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <Activity className=\"h-5 w-5 text-orange-600\" />\n <div>\n <p className=\"text-sm text-muted-foreground\">Active Sessions</p>\n <p className=\"text-2xl font-bold\">234</p>\n <p className=\"text-xs text-muted-foreground\">Currently online</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">System Health</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n { name: 'API Server', status: 'Operational', color: 'bg-green-500' },\n { name: 'Database', status: 'Operational', color: 'bg-green-500' },\n { name: 'File Storage', status: 'Operational', color: 'bg-green-500' },\n { name: 'AI Services', status: 'Degraded', color: 'bg-yellow-500' },\n { name: 'Email Service', status: 'Operational', color: 'bg-green-500' },\n ].map((s) => (\n <div key={s.name} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div className={`h-2 w-2 rounded-full ${s.color}`} />\n <span className=\"text-sm\">{s.name}</span>\n </div>\n <Badge variant=\"outline\" className=\"text-xs\">\n {s.status}\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Quick Actions</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {[\n { label: 'Manage Users', desc: 'View and manage all platform users', icon: Users },\n {\n label: 'Manage Courses',\n desc: 'Course approval and administration',\n icon: BookOpen,\n },\n { label: 'View Reports', desc: 'Platform analytics and reports', icon: BarChart3 },\n { label: 'Security Settings', desc: 'Access controls and policies', icon: Shield },\n ].map((action) => (\n <button\n key={action.label}\n className=\"w-full flex items-center gap-3 rounded-lg border p-3 hover:bg-muted/50 transition-colors text-left\"\n >\n <action.icon className=\"h-5 w-5 text-muted-foreground shrink-0\" />\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{action.label}</p>\n <p className=\"text-xs text-muted-foreground\">{action.desc}</p>\n </div>\n <ArrowRight className=\"h-4 w-4 text-muted-foreground\" />\n </button>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Recent Admin Activity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {recentAdminActivity.map((item) => (\n <div key={item.id} className=\"flex items-center gap-3 rounded-lg border p-3\">\n <div className=\"rounded-lg bg-muted p-2\">\n <Activity className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-medium\">{item.action}</p>\n <p className=\"text-xs text-muted-foreground\">{item.detail}</p>\n </div>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Clock className=\"h-3 w-3\" />\n {item.time}\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function AiAichatPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AiAichatPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiAichatPagePage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/AiAichatPagePage.tsx"],"names":[],"mappings":"AAgEA,wBAAgB,gBAAgB,4CAkJ/B"}