@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,154 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { useState as t } from "react";
3
+ import { Eye as n, MessageCircle as r, MessageSquare as i, Pin as a, Plus as o, Search as s } from "lucide-react";
4
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
+ import { Badge as u, Button as d, Card as f, CardContent as p, Input as m } from "@burdenoff/fe-libs/ui";
6
+ //#region src/buildmyiq/pages/CommunicationForumsPagePage.tsx
7
+ var h = [
8
+ "All",
9
+ "Questions",
10
+ "Study Groups",
11
+ "Resources",
12
+ "Study Tips",
13
+ "Discussion"
14
+ ];
15
+ function g() {
16
+ let { forumTopics: g } = e(), [_, v] = t(""), [y, b] = t("All"), x = g.filter((e) => {
17
+ let t = e.title.toLowerCase().includes(_.toLowerCase()) || e.author.toLowerCase().includes(_.toLowerCase()), n = y === "All" || e.category === y;
18
+ return t && n;
19
+ }).sort((e, t) => e.pinned === t.pinned ? 0 : e.pinned ? -1 : 1), S = g.reduce((e, t) => e + t.replies, 0), C = g.reduce((e, t) => e + t.views, 0);
20
+ return /* @__PURE__ */ l("div", {
21
+ className: "space-y-6 p-6",
22
+ children: [
23
+ /* @__PURE__ */ l("div", {
24
+ className: "flex items-center justify-between",
25
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
26
+ className: "text-2xl font-semibold",
27
+ children: "Discussion Forums"
28
+ }), /* @__PURE__ */ c("p", {
29
+ className: "text-sm text-muted-foreground",
30
+ children: "Engage in course discussions and study groups"
31
+ })] }), /* @__PURE__ */ l(d, {
32
+ size: "sm",
33
+ children: [/* @__PURE__ */ c(o, { className: "mr-2 h-4 w-4" }), "New Topic"]
34
+ })]
35
+ }),
36
+ /* @__PURE__ */ l("div", {
37
+ className: "grid grid-cols-1 md:grid-cols-3 gap-4",
38
+ children: [
39
+ /* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
40
+ className: "pt-6",
41
+ children: [/* @__PURE__ */ c("p", {
42
+ className: "text-sm text-muted-foreground",
43
+ children: "Total Topics"
44
+ }), /* @__PURE__ */ c("p", {
45
+ className: "text-2xl font-bold",
46
+ children: g.length
47
+ })]
48
+ }) }),
49
+ /* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
50
+ className: "pt-6",
51
+ children: [/* @__PURE__ */ c("p", {
52
+ className: "text-sm text-muted-foreground",
53
+ children: "Total Replies"
54
+ }), /* @__PURE__ */ c("p", {
55
+ className: "text-2xl font-bold",
56
+ children: S
57
+ })]
58
+ }) }),
59
+ /* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
60
+ className: "pt-6",
61
+ children: [/* @__PURE__ */ c("p", {
62
+ className: "text-sm text-muted-foreground",
63
+ children: "Total Views"
64
+ }), /* @__PURE__ */ c("p", {
65
+ className: "text-2xl font-bold",
66
+ children: C
67
+ })]
68
+ }) })
69
+ ]
70
+ }),
71
+ /* @__PURE__ */ l("div", {
72
+ className: "flex flex-col sm:flex-row gap-3",
73
+ children: [/* @__PURE__ */ l("div", {
74
+ className: "relative flex-1",
75
+ children: [/* @__PURE__ */ c(s, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ c(m, {
76
+ placeholder: "Search topics...",
77
+ value: _,
78
+ onChange: (e) => v(e.target.value),
79
+ className: "pl-10"
80
+ })]
81
+ }), /* @__PURE__ */ c("div", {
82
+ className: "flex gap-1 flex-wrap",
83
+ children: h.map((e) => /* @__PURE__ */ c(d, {
84
+ variant: y === e ? "default" : "outline",
85
+ size: "sm",
86
+ onClick: () => b(e),
87
+ children: e
88
+ }, e))
89
+ })]
90
+ }),
91
+ /* @__PURE__ */ c("div", {
92
+ className: "space-y-3",
93
+ children: x.length === 0 ? /* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
94
+ className: "py-12 text-center",
95
+ children: [/* @__PURE__ */ c(i, { className: "h-12 w-12 mx-auto mb-3 text-muted-foreground" }), /* @__PURE__ */ c("p", {
96
+ className: "text-muted-foreground",
97
+ children: "No topics found"
98
+ })]
99
+ }) }) : x.map((e) => /* @__PURE__ */ c(f, {
100
+ className: "hover:shadow-md transition-shadow cursor-pointer",
101
+ children: /* @__PURE__ */ c(p, {
102
+ className: "py-4",
103
+ children: /* @__PURE__ */ l("div", {
104
+ className: "flex items-start gap-4",
105
+ children: [/* @__PURE__ */ l("div", {
106
+ className: "flex-1 min-w-0",
107
+ children: [/* @__PURE__ */ l("div", {
108
+ className: "flex items-center gap-2 mb-1",
109
+ children: [e.pinned && /* @__PURE__ */ c(a, { className: "h-3.5 w-3.5 text-blue-500" }), /* @__PURE__ */ c("h3", {
110
+ className: "font-medium truncate",
111
+ children: e.title
112
+ })]
113
+ }), /* @__PURE__ */ l("div", {
114
+ className: "flex flex-wrap items-center gap-2 text-xs text-muted-foreground",
115
+ children: [
116
+ /* @__PURE__ */ l("span", { children: ["by ", e.author] }),
117
+ /* @__PURE__ */ l("span", { children: ["in ", e.course] }),
118
+ /* @__PURE__ */ c(u, {
119
+ variant: "outline",
120
+ className: "text-xs",
121
+ children: e.category
122
+ })
123
+ ]
124
+ })]
125
+ }), /* @__PURE__ */ l("div", {
126
+ className: "flex items-center gap-4 text-sm text-muted-foreground shrink-0",
127
+ children: [
128
+ /* @__PURE__ */ l("div", {
129
+ className: "flex items-center gap-1",
130
+ title: "Replies",
131
+ children: [/* @__PURE__ */ c(r, { className: "h-4 w-4" }), e.replies]
132
+ }),
133
+ /* @__PURE__ */ l("div", {
134
+ className: "flex items-center gap-1",
135
+ title: "Views",
136
+ children: [/* @__PURE__ */ c(n, { className: "h-4 w-4" }), e.views]
137
+ }),
138
+ /* @__PURE__ */ c("span", {
139
+ className: "text-xs",
140
+ children: e.lastReply
141
+ })
142
+ ]
143
+ })]
144
+ })
145
+ })
146
+ }, e.id))
147
+ })
148
+ ]
149
+ });
150
+ }
151
+ //#endregion
152
+ export { g as CommunicationForumsPagePage };
153
+
154
+ //# sourceMappingURL=CommunicationForumsPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommunicationForumsPagePage.js","names":[],"sources":["../../../src/buildmyiq/pages/CommunicationForumsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { MessageSquare, Search, Pin, Eye, MessageCircle, Plus, Filter } from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nconst categories = ['All', 'Questions', 'Study Groups', 'Resources', 'Study Tips', 'Discussion'];\n\nexport function CommunicationForumsPagePage() {\n const { forumTopics } = useBuildMyIQStore();\n const [search, setSearch] = useState('');\n const [selectedCategory, setSelectedCategory] = useState('All');\n\n const filtered = forumTopics\n .filter((t) => {\n const matchesSearch =\n t.title.toLowerCase().includes(search.toLowerCase()) ||\n t.author.toLowerCase().includes(search.toLowerCase());\n const matchesCategory = selectedCategory === 'All' || t.category === selectedCategory;\n return matchesSearch && matchesCategory;\n })\n .sort((a, b) => (a.pinned === b.pinned ? 0 : a.pinned ? -1 : 1));\n\n const totalReplies = forumTopics.reduce((sum, t) => sum + t.replies, 0);\n const totalViews = forumTopics.reduce((sum, t) => sum + t.views, 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\">Discussion Forums</h1>\n <p className=\"text-sm text-muted-foreground\">\n Engage in course discussions and study groups\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n New Topic\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Total Topics</p>\n <p className=\"text-2xl font-bold\">{forumTopics.length}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Total Replies</p>\n <p className=\"text-2xl font-bold\">{totalReplies}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground\">Total Views</p>\n <p className=\"text-2xl font-bold\">{totalViews}</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 topics...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n <div className=\"flex gap-1 flex-wrap\">\n {categories.map((cat) => (\n <Button\n key={cat}\n variant={selectedCategory === cat ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setSelectedCategory(cat)}\n >\n {cat}\n </Button>\n ))}\n </div>\n </div>\n\n <div className=\"space-y-3\">\n {filtered.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center\">\n <MessageSquare className=\"h-12 w-12 mx-auto mb-3 text-muted-foreground\" />\n <p className=\"text-muted-foreground\">No topics found</p>\n </CardContent>\n </Card>\n ) : (\n filtered.map((topic) => (\n <Card key={topic.id} className=\"hover:shadow-md transition-shadow cursor-pointer\">\n <CardContent className=\"py-4\">\n <div className=\"flex items-start gap-4\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n {topic.pinned && <Pin className=\"h-3.5 w-3.5 text-blue-500\" />}\n <h3 className=\"font-medium truncate\">{topic.title}</h3>\n </div>\n <div className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span>by {topic.author}</span>\n <span>in {topic.course}</span>\n <Badge variant=\"outline\" className=\"text-xs\">\n {topic.category}\n </Badge>\n </div>\n </div>\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground shrink-0\">\n <div className=\"flex items-center gap-1\" title=\"Replies\">\n <MessageCircle className=\"h-4 w-4\" />\n {topic.replies}\n </div>\n <div className=\"flex items-center gap-1\" title=\"Views\">\n <Eye className=\"h-4 w-4\" />\n {topic.views}\n </div>\n <span className=\"text-xs\">{topic.lastReply}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n ))\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CommunicationIndexPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CommunicationIndexPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommunicationIndexPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/CommunicationIndexPage.tsx"],"names":[],"mappings":"AAYA,wBAAgB,sBAAsB,4CAyKrC"}
@@ -0,0 +1,191 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { ArrowRight as t, Bell as n, Megaphone as r, MessageSquare as i, MessagesSquare as a, TrendingUp as o } from "lucide-react";
3
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
+ import { Badge as l, Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m } from "@burdenoff/fe-libs/ui";
5
+ //#region src/buildmyiq/pages/CommunicationIndexPage.tsx
6
+ function h() {
7
+ let { forumTopics: h, announcements: g } = e(), _ = g.filter((e) => e.unread).length, v = h.reduce((e, t) => e + t.replies, 0), y = [...h.map((e) => ({
8
+ id: e.id,
9
+ type: "forum",
10
+ title: e.title,
11
+ subtitle: `by ${e.author} in ${e.course}`,
12
+ time: e.lastReply
13
+ })), ...g.map((e) => ({
14
+ id: e.id,
15
+ type: "announcement",
16
+ title: e.title,
17
+ subtitle: `by ${e.author}`,
18
+ time: new Date(e.timestamp).toLocaleDateString()
19
+ }))].slice(0, 8);
20
+ return /* @__PURE__ */ c("div", {
21
+ className: "space-y-6 p-6",
22
+ children: [
23
+ /* @__PURE__ */ c("div", {
24
+ className: "flex items-center justify-between",
25
+ children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
26
+ className: "text-2xl font-semibold",
27
+ children: "Communication Hub"
28
+ }), /* @__PURE__ */ s("p", {
29
+ className: "text-sm text-muted-foreground",
30
+ children: "Stay connected with forums, messages, and announcements"
31
+ })] }), /* @__PURE__ */ c("div", {
32
+ className: "flex gap-2",
33
+ children: [/* @__PURE__ */ c(u, {
34
+ variant: "outline",
35
+ size: "sm",
36
+ children: [/* @__PURE__ */ s(a, { className: "mr-2 h-4 w-4" }), "New Message"]
37
+ }), /* @__PURE__ */ c(u, {
38
+ size: "sm",
39
+ children: [/* @__PURE__ */ s(r, { className: "mr-2 h-4 w-4" }), "New Announcement"]
40
+ })]
41
+ })]
42
+ }),
43
+ /* @__PURE__ */ c("div", {
44
+ className: "grid grid-cols-1 md:grid-cols-4 gap-4",
45
+ children: [
46
+ /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s(f, {
47
+ className: "pt-6",
48
+ children: /* @__PURE__ */ c("div", {
49
+ className: "flex items-center gap-3",
50
+ children: [/* @__PURE__ */ s("div", {
51
+ className: "rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30",
52
+ children: /* @__PURE__ */ s(i, { className: "h-5 w-5 text-blue-600 dark:text-blue-400" })
53
+ }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
54
+ className: "text-sm text-muted-foreground",
55
+ children: "Forum Topics"
56
+ }), /* @__PURE__ */ s("p", {
57
+ className: "text-2xl font-bold",
58
+ children: h.length
59
+ })] })]
60
+ })
61
+ }) }),
62
+ /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s(f, {
63
+ className: "pt-6",
64
+ children: /* @__PURE__ */ c("div", {
65
+ className: "flex items-center gap-3",
66
+ children: [/* @__PURE__ */ s("div", {
67
+ className: "rounded-lg bg-purple-100 p-2 dark:bg-purple-900/30",
68
+ children: /* @__PURE__ */ s(o, { className: "h-5 w-5 text-purple-600 dark:text-purple-400" })
69
+ }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
70
+ className: "text-sm text-muted-foreground",
71
+ children: "Total Replies"
72
+ }), /* @__PURE__ */ s("p", {
73
+ className: "text-2xl font-bold",
74
+ children: v
75
+ })] })]
76
+ })
77
+ }) }),
78
+ /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s(f, {
79
+ className: "pt-6",
80
+ children: /* @__PURE__ */ c("div", {
81
+ className: "flex items-center gap-3",
82
+ children: [/* @__PURE__ */ s("div", {
83
+ className: "rounded-lg bg-orange-100 p-2 dark:bg-orange-900/30",
84
+ children: /* @__PURE__ */ s(r, { className: "h-5 w-5 text-orange-600 dark:text-orange-400" })
85
+ }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
86
+ className: "text-sm text-muted-foreground",
87
+ children: "Announcements"
88
+ }), /* @__PURE__ */ s("p", {
89
+ className: "text-2xl font-bold",
90
+ children: g.length
91
+ })] })]
92
+ })
93
+ }) }),
94
+ /* @__PURE__ */ s(d, { children: /* @__PURE__ */ s(f, {
95
+ className: "pt-6",
96
+ children: /* @__PURE__ */ c("div", {
97
+ className: "flex items-center gap-3",
98
+ children: [/* @__PURE__ */ s("div", {
99
+ className: "rounded-lg bg-red-100 p-2 dark:bg-red-900/30",
100
+ children: /* @__PURE__ */ s(n, { className: "h-5 w-5 text-red-600 dark:text-red-400" })
101
+ }), /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("p", {
102
+ className: "text-sm text-muted-foreground",
103
+ children: "Unread"
104
+ }), /* @__PURE__ */ s("p", {
105
+ className: "text-2xl font-bold",
106
+ children: _
107
+ })] })]
108
+ })
109
+ }) })
110
+ ]
111
+ }),
112
+ /* @__PURE__ */ s("div", {
113
+ className: "grid grid-cols-1 md:grid-cols-3 gap-4",
114
+ children: [
115
+ {
116
+ title: "Discussion Forums",
117
+ desc: "Join course discussions and study groups",
118
+ icon: i,
119
+ count: `${h.length} active topics`,
120
+ color: "text-blue-600"
121
+ },
122
+ {
123
+ title: "Messages",
124
+ desc: "Direct messages with instructors and peers",
125
+ icon: a,
126
+ count: "3 unread",
127
+ color: "text-purple-600"
128
+ },
129
+ {
130
+ title: "Announcements",
131
+ desc: "Important updates from instructors and admin",
132
+ icon: r,
133
+ count: `${_} unread`,
134
+ color: "text-orange-600"
135
+ }
136
+ ].map((e) => /* @__PURE__ */ c(d, {
137
+ className: "hover:shadow-md transition-shadow cursor-pointer",
138
+ children: [/* @__PURE__ */ s(p, {
139
+ className: "pb-2",
140
+ children: /* @__PURE__ */ c("div", {
141
+ className: "flex items-center gap-3",
142
+ children: [/* @__PURE__ */ s(e.icon, { className: `h-6 w-6 ${e.color}` }), /* @__PURE__ */ s(m, {
143
+ className: "text-lg",
144
+ children: e.title
145
+ })]
146
+ })
147
+ }), /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ s("p", {
148
+ className: "text-sm text-muted-foreground mb-3",
149
+ children: e.desc
150
+ }), /* @__PURE__ */ c("div", {
151
+ className: "flex items-center justify-between",
152
+ children: [/* @__PURE__ */ s(l, {
153
+ variant: "secondary",
154
+ children: e.count
155
+ }), /* @__PURE__ */ s(t, { className: "h-4 w-4 text-muted-foreground" })]
156
+ })] })]
157
+ }, e.title))
158
+ }),
159
+ /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, { children: /* @__PURE__ */ s(m, {
160
+ className: "text-lg",
161
+ children: "Recent Activity"
162
+ }) }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("div", {
163
+ className: "space-y-3",
164
+ children: y.map((e) => /* @__PURE__ */ c("div", {
165
+ className: "flex items-center gap-3 rounded-lg border p-3 hover:bg-muted/50 transition-colors",
166
+ children: [
167
+ e.type === "forum" ? /* @__PURE__ */ s(i, { className: "h-4 w-4 text-blue-500 shrink-0" }) : /* @__PURE__ */ s(r, { className: "h-4 w-4 text-orange-500 shrink-0" }),
168
+ /* @__PURE__ */ c("div", {
169
+ className: "flex-1 min-w-0",
170
+ children: [/* @__PURE__ */ s("p", {
171
+ className: "text-sm font-medium truncate",
172
+ children: e.title
173
+ }), /* @__PURE__ */ s("p", {
174
+ className: "text-xs text-muted-foreground",
175
+ children: e.subtitle
176
+ })]
177
+ }),
178
+ /* @__PURE__ */ s("span", {
179
+ className: "text-xs text-muted-foreground shrink-0",
180
+ children: e.time
181
+ })
182
+ ]
183
+ }, `${e.type}-${e.id}`))
184
+ }) })] })
185
+ ]
186
+ });
187
+ }
188
+ //#endregion
189
+ export { h as CommunicationIndexPage };
190
+
191
+ //# sourceMappingURL=CommunicationIndexPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommunicationIndexPage.js","names":[],"sources":["../../../src/buildmyiq/pages/CommunicationIndexPage.tsx"],"sourcesContent":["import { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport {\n MessageSquare,\n Megaphone,\n MessagesSquare,\n Users,\n ArrowRight,\n Bell,\n TrendingUp,\n} from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function CommunicationIndexPage() {\n const { forumTopics, announcements } = useBuildMyIQStore();\n\n const unreadAnnouncements = announcements.filter((a) => a.unread).length;\n const totalReplies = forumTopics.reduce((sum, t) => sum + t.replies, 0);\n\n const recentActivity = [\n ...forumTopics.map((t) => ({\n id: t.id,\n type: 'forum' as const,\n title: t.title,\n subtitle: `by ${t.author} in ${t.course}`,\n time: t.lastReply,\n })),\n ...announcements.map((a) => ({\n id: a.id,\n type: 'announcement' as const,\n title: a.title,\n subtitle: `by ${a.author}`,\n time: new Date(a.timestamp).toLocaleDateString(),\n })),\n ].slice(0, 8);\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\">Communication Hub</h1>\n <p className=\"text-sm text-muted-foreground\">\n Stay connected with forums, messages, and announcements\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <MessagesSquare className=\"mr-2 h-4 w-4\" />\n New Message\n </Button>\n <Button size=\"sm\">\n <Megaphone className=\"mr-2 h-4 w-4\" />\n New Announcement\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30\">\n <MessageSquare className=\"h-5 w-5 text-blue-600 dark:text-blue-400\" />\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Forum Topics</p>\n <p className=\"text-2xl font-bold\">{forumTopics.length}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-purple-100 p-2 dark:bg-purple-900/30\">\n <TrendingUp className=\"h-5 w-5 text-purple-600 dark:text-purple-400\" />\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Total Replies</p>\n <p className=\"text-2xl font-bold\">{totalReplies}</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 <div className=\"rounded-lg bg-orange-100 p-2 dark:bg-orange-900/30\">\n <Megaphone className=\"h-5 w-5 text-orange-600 dark:text-orange-400\" />\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Announcements</p>\n <p className=\"text-2xl font-bold\">{announcements.length}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-lg bg-red-100 p-2 dark:bg-red-900/30\">\n <Bell className=\"h-5 w-5 text-red-600 dark:text-red-400\" />\n </div>\n <div>\n <p className=\"text-sm text-muted-foreground\">Unread</p>\n <p className=\"text-2xl font-bold\">{unreadAnnouncements}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n {[\n {\n title: 'Discussion Forums',\n desc: 'Join course discussions and study groups',\n icon: MessageSquare,\n count: `${forumTopics.length} active topics`,\n color: 'text-blue-600',\n },\n {\n title: 'Messages',\n desc: 'Direct messages with instructors and peers',\n icon: MessagesSquare,\n count: '3 unread',\n color: 'text-purple-600',\n },\n {\n title: 'Announcements',\n desc: 'Important updates from instructors and admin',\n icon: Megaphone,\n count: `${unreadAnnouncements} unread`,\n color: 'text-orange-600',\n },\n ].map((item) => (\n <Card key={item.title} className=\"hover:shadow-md transition-shadow cursor-pointer\">\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center gap-3\">\n <item.icon className={`h-6 w-6 ${item.color}`} />\n <CardTitle className=\"text-lg\">{item.title}</CardTitle>\n </div>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground mb-3\">{item.desc}</p>\n <div className=\"flex items-center justify-between\">\n <Badge variant=\"secondary\">{item.count}</Badge>\n <ArrowRight className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">Recent Activity</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {recentActivity.map((item) => (\n <div\n key={`${item.type}-${item.id}`}\n className=\"flex items-center gap-3 rounded-lg border p-3 hover:bg-muted/50 transition-colors\"\n >\n {item.type === 'forum' ? (\n <MessageSquare className=\"h-4 w-4 text-blue-500 shrink-0\" />\n ) : (\n <Megaphone className=\"h-4 w-4 text-orange-500 shrink-0\" />\n )}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{item.title}</p>\n <p className=\"text-xs text-muted-foreground\">{item.subtitle}</p>\n </div>\n <span className=\"text-xs text-muted-foreground shrink-0\">{item.time}</span>\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 CommunicationMessagesPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CommunicationMessagesPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommunicationMessagesPagePage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/CommunicationMessagesPagePage.tsx"],"names":[],"mappings":"AAsFA,wBAAgB,6BAA6B,4CAmK5C"}