@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 @@
1
+ {"version":3,"file":"CoursesCourseDashboardPagePage.js","names":[],"sources":["../../../src/buildmyiq/pages/CoursesCourseDashboardPagePage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Users,\n BookOpen,\n BarChart3,\n Award,\n TrendingUp,\n Download,\n Eye,\n Edit,\n Plus,\n MessageSquare,\n AlertCircle,\n Calendar,\n FileText,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function CoursesCourseDashboardPagePage() {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { courses, grades } = useBuildMyIQStore();\n const course = courses[0];\n const pendingReviews = grades.filter((g) => g.status === 'pending').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\">\n {t('buildmyiq.courseDashboard.title', 'Course Dashboard')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.courseDashboard.subtitlePrefix', 'Managing')} {course.title}\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 {t('buildmyiq.courseDashboard.actions.export', 'Export')}\n </Button>\n <Button variant=\"outline\" size=\"sm\">\n <Eye className=\"mr-2 h-4 w-4\" />\n {t('buildmyiq.courseDashboard.actions.viewCourse', 'View Course')}\n </Button>\n <Button size=\"sm\">\n <Edit className=\"mr-2 h-4 w-4\" />\n {t('buildmyiq.courseDashboard.actions.editCourse', 'Edit Course')}\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {t('buildmyiq.courseDashboard.stats.totalStudents.title', 'Total Students')}\n </CardTitle>\n <Users className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{course.students}</div>\n <p className=\"text-xs text-muted-foreground\">\n {t('buildmyiq.courseDashboard.stats.totalStudents.change', '+12 this month')}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {t('buildmyiq.courseDashboard.stats.completionRate.title', 'Completion Rate')}\n </CardTitle>\n <Award className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">73%</div>\n <p className=\"text-xs text-muted-foreground\">\n {t('buildmyiq.courseDashboard.stats.completionRate.change', '+5% vs last month')}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {t('buildmyiq.courseDashboard.stats.totalRevenue.title', 'Total Revenue')}\n </CardTitle>\n <TrendingUp className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n ${(course.students * course.price).toLocaleString()}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {t('buildmyiq.courseDashboard.stats.totalRevenue.change', '+$5,940 this month')}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {t('buildmyiq.courseDashboard.stats.courseRating.title', 'Course Rating')}\n </CardTitle>\n <BarChart3 className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{course.rating}/5</div>\n <p className=\"text-xs text-muted-foreground\">\n {t('buildmyiq.courseDashboard.stats.courseRating.reviews', '89 reviews')}\n </p>\n </CardContent>\n </Card>\n </div>\n\n <Tabs defaultValue=\"overview\" className=\"w-full\">\n <TabsList className=\"grid w-full grid-cols-4\">\n <TabsTrigger value=\"overview\">\n {t('buildmyiq.courseDashboard.tabs.overview', 'Overview')}\n </TabsTrigger>\n <TabsTrigger value=\"students\">\n {t('buildmyiq.courseDashboard.tabs.students', 'Students')}\n </TabsTrigger>\n <TabsTrigger value=\"content\">\n {t('buildmyiq.courseDashboard.tabs.content', 'Content')}\n </TabsTrigger>\n <TabsTrigger value=\"analytics\">\n {t('buildmyiq.courseDashboard.tabs.analytics', 'Analytics')}\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\" className=\"mt-4\">\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2\">\n <Card>\n <CardHeader>\n <CardTitle>\n {t('buildmyiq.courseDashboard.recentActivity.title', 'Recent Activity')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n t(\n 'buildmyiq.courseDashboard.recentActivity.item1',\n 'Alice Martinez completed Module 2'\n ),\n t(\n 'buildmyiq.courseDashboard.recentActivity.item2',\n 'Brian Kim submitted midterm exam'\n ),\n t(\n 'buildmyiq.courseDashboard.recentActivity.item3',\n 'New forum post: Help with derivatives'\n ),\n ].map((a, i) => (\n <div key={i} className=\"flex items-center justify-between rounded border p-3\">\n <span className=\"text-sm\">{a}</span>\n <Badge variant=\"secondary\">\n {t('buildmyiq.courseDashboard.recentActivity.new', 'New')}\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">\n {t('buildmyiq.courseDashboard.quickActions.title', 'Quick Actions')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <Button variant=\"outline\" className=\"w-full justify-start\" size=\"sm\">\n <MessageSquare className=\"mr-2 h-4 w-4\" />\n {t(\n 'buildmyiq.courseDashboard.quickActions.makeAnnouncement',\n 'Make Announcement'\n )}\n </Button>\n <Button variant=\"outline\" className=\"w-full justify-start\" size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n {t(\n 'buildmyiq.courseDashboard.quickActions.createAssessment',\n 'Create Assessment'\n )}\n </Button>\n <Button variant=\"outline\" className=\"w-full justify-start\" size=\"sm\">\n <BookOpen className=\"mr-2 h-4 w-4\" />\n {t('buildmyiq.courseDashboard.quickActions.addContent', 'Add Content')}\n </Button>\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">\n {t('buildmyiq.courseDashboard.pendingTasks.title', 'Pending Tasks')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex items-center justify-between rounded border border-orange-200 bg-orange-50 p-2 dark:border-orange-900 dark:bg-orange-950/30\">\n <div className=\"flex items-center gap-2\">\n <AlertCircle className=\"h-4 w-4 text-orange-500\" />\n <span className=\"text-sm\">\n {t(\n 'buildmyiq.courseDashboard.pendingTasks.gradingRequired',\n 'Grading Required'\n )}\n </span>\n </div>\n <Badge variant=\"secondary\">{pendingReviews}</Badge>\n </div>\n <div className=\"flex items-center justify-between rounded border p-2\">\n <div className=\"flex items-center gap-2\">\n <MessageSquare className=\"h-4 w-4 text-primary\" />\n <span className=\"text-sm\">\n {t('buildmyiq.courseDashboard.pendingTasks.forumPosts', 'Forum Posts')}\n </span>\n </div>\n <Badge variant=\"secondary\">5</Badge>\n </div>\n <div className=\"flex items-center justify-between rounded border p-2\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-green-500\" />\n <span className=\"text-sm\">\n {t(\n 'buildmyiq.courseDashboard.pendingTasks.scheduledContent',\n 'Scheduled Content'\n )}\n </span>\n </div>\n <Badge variant=\"secondary\">2</Badge>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </TabsContent>\n <TabsContent value=\"students\" className=\"mt-4\">\n <Card>\n <CardContent className=\"pt-6 text-center text-muted-foreground\">\n {t(\n 'buildmyiq.courseDashboard.students.emptyState',\n 'Student management interface - view enrolled students, progress, and engagement.'\n )}\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"content\" className=\"mt-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"grid grid-cols-3 gap-4 text-center\">\n <div className=\"rounded border p-4\">\n <BookOpen className=\"h-8 w-8 text-primary mx-auto mb-2\" />\n <div className=\"text-2xl font-bold\">{course.lessons}</div>\n <div className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.courseDashboard.content.lessons', 'Lessons')}\n </div>\n </div>\n <div className=\"rounded border p-4\">\n <FileText className=\"h-8 w-8 text-green-500 mx-auto mb-2\" />\n <div className=\"text-2xl font-bold\">{course.assessments}</div>\n <div className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.courseDashboard.content.assessments', 'Assessments')}\n </div>\n </div>\n <div className=\"rounded border p-4\">\n <MessageSquare className=\"h-8 w-8 text-primary mx-auto mb-2\" />\n <div className=\"text-2xl font-bold\">45</div>\n <div className=\"text-sm text-muted-foreground\">\n {t('buildmyiq.courseDashboard.content.discussions', 'Discussions')}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"analytics\" className=\"mt-4\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">\n {t(\n 'buildmyiq.courseDashboard.analytics.studentProgressDistribution',\n 'Student Progress Distribution'\n )}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {[\n { range: '0-25%', count: 23, pct: 15 },\n { range: '26-50%', count: 45, pct: 29 },\n { range: '51-75%', count: 52, pct: 33 },\n { range: '76-100%', count: 36, pct: 23 },\n ].map((d) => (\n <div key={d.range}>\n <div className=\"flex justify-between text-sm mb-1\">\n <span>{d.range}</span>\n <span>\n {d.count} {t('buildmyiq.courseDashboard.analytics.students', 'students')}\n </span>\n </div>\n <div className=\"h-2 bg-muted rounded-full overflow-hidden\">\n <div className=\"h-2 bg-primary rounded-full\" style={{ width: `${d.pct}%` }} />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">\n {t('buildmyiq.courseDashboard.analytics.engagementMetrics', 'Engagement Metrics')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {[\n [\n t(\n 'buildmyiq.courseDashboard.analytics.avgSessionDuration',\n 'Avg Session Duration'\n ),\n '24 min',\n ],\n [\n t(\n 'buildmyiq.courseDashboard.analytics.forumParticipation',\n 'Forum Participation'\n ),\n '68%',\n ],\n [\n t('buildmyiq.courseDashboard.analytics.submissionRate', 'Submission Rate'),\n '89%',\n ],\n [t('buildmyiq.courseDashboard.analytics.averageScore', 'Average Score'), '85%'],\n ].map(([k, v]) => (\n <div key={k} className=\"flex justify-between items-center\">\n <span className=\"text-sm\">{k}</span>\n <span className=\"font-medium\">{v}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CoursesCourseDetailPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CoursesCourseDetailPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/CoursesCourseDetailPagePage.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,2BAA2B,4CAwK1C"}
@@ -0,0 +1,219 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { Award as t, BarChart3 as n, BookOpen as r, Clock as i, Download as a, FileText as o, Play as s, Share2 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 _, Tabs as v, TabsContent as y, TabsList as b, TabsTrigger as x } from "@burdenoff/fe-libs/ui";
5
+ //#region src/buildmyiq/pages/CoursesCourseDetailPagePage.tsx
6
+ function S() {
7
+ let { courses: S } = e(), C = S[0];
8
+ return /* @__PURE__ */ d("div", {
9
+ className: "space-y-6 p-6",
10
+ children: [/* @__PURE__ */ d("div", {
11
+ className: "flex items-center justify-between",
12
+ children: [/* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("h1", {
13
+ className: "text-2xl font-semibold",
14
+ children: C.title
15
+ }), /* @__PURE__ */ d("p", {
16
+ className: "text-sm text-muted-foreground",
17
+ children: ["Taught by ", C.instructor]
18
+ })] }), /* @__PURE__ */ d("div", {
19
+ className: "flex gap-2",
20
+ children: [/* @__PURE__ */ d(p, {
21
+ variant: "outline",
22
+ size: "sm",
23
+ children: [/* @__PURE__ */ u(c, { className: "mr-2 h-4 w-4" }), "Share"]
24
+ }), /* @__PURE__ */ d(p, {
25
+ size: "sm",
26
+ children: [/* @__PURE__ */ u(s, { className: "mr-2 h-4 w-4" }), "Continue Learning"]
27
+ })]
28
+ })]
29
+ }), /* @__PURE__ */ d("div", {
30
+ className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
31
+ children: [/* @__PURE__ */ u("div", {
32
+ className: "lg:col-span-2",
33
+ children: /* @__PURE__ */ d(v, {
34
+ defaultValue: "overview",
35
+ className: "w-full",
36
+ children: [
37
+ /* @__PURE__ */ d(b, {
38
+ className: "grid w-full grid-cols-4",
39
+ children: [
40
+ /* @__PURE__ */ u(x, {
41
+ value: "overview",
42
+ children: "Overview"
43
+ }),
44
+ /* @__PURE__ */ u(x, {
45
+ value: "curriculum",
46
+ children: "Curriculum"
47
+ }),
48
+ /* @__PURE__ */ u(x, {
49
+ value: "discussions",
50
+ children: "Discussions"
51
+ }),
52
+ /* @__PURE__ */ u(x, {
53
+ value: "resources",
54
+ children: "Resources"
55
+ })
56
+ ]
57
+ }),
58
+ /* @__PURE__ */ u(y, {
59
+ value: "overview",
60
+ className: "mt-4",
61
+ children: /* @__PURE__ */ u(m, { children: /* @__PURE__ */ d(h, {
62
+ className: "pt-6",
63
+ children: [/* @__PURE__ */ u("p", {
64
+ className: "text-muted-foreground",
65
+ children: C.description
66
+ }), /* @__PURE__ */ u("div", {
67
+ className: "flex flex-wrap gap-2 mt-4",
68
+ children: C.tags.map((e) => /* @__PURE__ */ u(f, {
69
+ variant: "secondary",
70
+ children: e
71
+ }, e))
72
+ })]
73
+ }) })
74
+ }),
75
+ /* @__PURE__ */ u(y, {
76
+ value: "curriculum",
77
+ className: "mt-4 space-y-4",
78
+ children: C.modules.map((e) => /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ d("div", {
79
+ className: "flex items-center justify-between",
80
+ children: [/* @__PURE__ */ u(_, {
81
+ className: "text-base",
82
+ children: e.title
83
+ }), /* @__PURE__ */ d(f, {
84
+ variant: "outline",
85
+ children: [e.lessons.length, " lessons"]
86
+ })]
87
+ }) }), /* @__PURE__ */ u(h, {
88
+ className: "space-y-2",
89
+ children: e.lessons.map((e) => /* @__PURE__ */ d("div", {
90
+ className: "flex items-center justify-between rounded border p-3",
91
+ children: [/* @__PURE__ */ d("div", {
92
+ className: "flex items-center gap-3",
93
+ children: [e.completed ? /* @__PURE__ */ u(t, { className: "h-4 w-4 text-green-500" }) : /* @__PURE__ */ u(s, { className: "h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
94
+ className: "text-sm font-medium",
95
+ children: e.title
96
+ }), /* @__PURE__ */ d("div", {
97
+ className: "flex gap-2 text-xs text-muted-foreground",
98
+ children: [/* @__PURE__ */ u(f, {
99
+ variant: "outline",
100
+ className: "text-xs",
101
+ children: e.type
102
+ }), /* @__PURE__ */ d("span", {
103
+ className: "flex items-center gap-1",
104
+ children: [/* @__PURE__ */ u(i, { className: "h-3 w-3" }), e.duration]
105
+ })]
106
+ })] })]
107
+ }), /* @__PURE__ */ u(f, {
108
+ variant: e.completed ? "default" : "secondary",
109
+ children: e.completed ? "Done" : "Pending"
110
+ })]
111
+ }, e.id))
112
+ })] }, e.id))
113
+ }),
114
+ /* @__PURE__ */ u(y, {
115
+ value: "discussions",
116
+ className: "mt-4",
117
+ children: /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u(h, {
118
+ className: "py-8 text-center text-muted-foreground",
119
+ children: "Join the course discussion forum."
120
+ }) })
121
+ }),
122
+ /* @__PURE__ */ u(y, {
123
+ value: "resources",
124
+ className: "mt-4",
125
+ children: /* @__PURE__ */ u(m, { children: /* @__PURE__ */ u(h, {
126
+ className: "pt-6 space-y-3",
127
+ children: [
128
+ "Calculus Textbook (PDF)",
129
+ "Practice Problem Sets",
130
+ "Formula Reference Sheet"
131
+ ].map((e) => /* @__PURE__ */ d("div", {
132
+ className: "flex items-center justify-between rounded border p-3",
133
+ children: [/* @__PURE__ */ d("div", {
134
+ className: "flex items-center gap-3",
135
+ children: [/* @__PURE__ */ u(o, { className: "h-4 w-4 text-primary" }), /* @__PURE__ */ u("span", {
136
+ className: "text-sm",
137
+ children: e
138
+ })]
139
+ }), /* @__PURE__ */ d(p, {
140
+ variant: "outline",
141
+ size: "sm",
142
+ children: [/* @__PURE__ */ u(a, { className: "mr-2 h-4 w-4" }), "Download"]
143
+ })]
144
+ }, e))
145
+ }) })
146
+ })
147
+ ]
148
+ })
149
+ }), /* @__PURE__ */ d("div", {
150
+ className: "space-y-4",
151
+ children: [/* @__PURE__ */ u(m, { children: /* @__PURE__ */ d(h, {
152
+ className: "pt-6 space-y-4",
153
+ children: [/* @__PURE__ */ d("div", {
154
+ className: "flex items-center justify-between",
155
+ children: [/* @__PURE__ */ d("span", {
156
+ className: "text-2xl font-bold text-primary",
157
+ children: ["$", C.price]
158
+ }), /* @__PURE__ */ u(f, { children: C.level })]
159
+ }), /* @__PURE__ */ d("div", {
160
+ className: "space-y-2 text-sm",
161
+ children: [
162
+ /* @__PURE__ */ d("div", {
163
+ className: "flex items-center gap-2",
164
+ children: [/* @__PURE__ */ u(i, { className: "h-4 w-4 text-muted-foreground" }), C.duration]
165
+ }),
166
+ /* @__PURE__ */ d("div", {
167
+ className: "flex items-center gap-2",
168
+ children: [
169
+ /* @__PURE__ */ u(r, { className: "h-4 w-4 text-muted-foreground" }),
170
+ C.lessons,
171
+ " lessons"
172
+ ]
173
+ }),
174
+ /* @__PURE__ */ d("div", {
175
+ className: "flex items-center gap-2",
176
+ children: [
177
+ /* @__PURE__ */ u(l, { className: "h-4 w-4 text-muted-foreground" }),
178
+ C.students,
179
+ " students"
180
+ ]
181
+ }),
182
+ /* @__PURE__ */ d("div", {
183
+ className: "flex items-center gap-2",
184
+ children: [
185
+ /* @__PURE__ */ u(n, { className: "h-4 w-4 text-muted-foreground" }),
186
+ C.rating,
187
+ "/5 rating"
188
+ ]
189
+ })
190
+ ]
191
+ })]
192
+ }) }), C.progress !== void 0 && /* @__PURE__ */ u(m, { children: /* @__PURE__ */ d(h, {
193
+ className: "pt-6",
194
+ children: [
195
+ /* @__PURE__ */ u("h3", {
196
+ className: "font-medium mb-3",
197
+ children: "Your Progress"
198
+ }),
199
+ /* @__PURE__ */ d("div", {
200
+ className: "flex justify-between text-sm mb-1",
201
+ children: [/* @__PURE__ */ u("span", { children: "Completion" }), /* @__PURE__ */ d("span", { children: [C.progress, "%"] })]
202
+ }),
203
+ /* @__PURE__ */ u("div", {
204
+ className: "h-2 bg-muted rounded-full overflow-hidden",
205
+ children: /* @__PURE__ */ u("div", {
206
+ className: "h-2 bg-primary rounded-full",
207
+ style: { width: `${C.progress}%` }
208
+ })
209
+ })
210
+ ]
211
+ }) })]
212
+ })]
213
+ })]
214
+ });
215
+ }
216
+ //#endregion
217
+ export { S as CoursesCourseDetailPagePage };
218
+
219
+ //# sourceMappingURL=CoursesCourseDetailPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseDetailPagePage.js","names":[],"sources":["../../../src/buildmyiq/pages/CoursesCourseDetailPagePage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n Play,\n BookOpen,\n Users,\n Clock,\n Award,\n Share2,\n FileText,\n BarChart3,\n Download,\n} from 'lucide-react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function CoursesCourseDetailPagePage() {\n const { courses } = useBuildMyIQStore();\n const course = courses[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\">{course.title}</h1>\n <p className=\"text-sm text-muted-foreground\">Taught by {course.instructor}</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Share2 className=\"mr-2 h-4 w-4\" />\n Share\n </Button>\n <Button size=\"sm\">\n <Play className=\"mr-2 h-4 w-4\" />\n Continue Learning\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2\">\n <Tabs defaultValue=\"overview\" className=\"w-full\">\n <TabsList className=\"grid w-full grid-cols-4\">\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"curriculum\">Curriculum</TabsTrigger>\n <TabsTrigger value=\"discussions\">Discussions</TabsTrigger>\n <TabsTrigger value=\"resources\">Resources</TabsTrigger>\n </TabsList>\n <TabsContent value=\"overview\" className=\"mt-4\">\n <Card>\n <CardContent className=\"pt-6\">\n <p className=\"text-muted-foreground\">{course.description}</p>\n <div className=\"flex flex-wrap gap-2 mt-4\">\n {course.tags.map((t) => (\n <Badge key={t} variant=\"secondary\">\n {t}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"curriculum\" className=\"mt-4 space-y-4\">\n {course.modules.map((mod) => (\n <Card key={mod.id}>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{mod.title}</CardTitle>\n <Badge variant=\"outline\">{mod.lessons.length} lessons</Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {mod.lessons.map((l) => (\n <div\n key={l.id}\n className=\"flex items-center justify-between rounded border p-3\"\n >\n <div className=\"flex items-center gap-3\">\n {l.completed ? (\n <Award className=\"h-4 w-4 text-green-500\" />\n ) : (\n <Play className=\"h-4 w-4 text-muted-foreground\" />\n )}\n <div>\n <p className=\"text-sm font-medium\">{l.title}</p>\n <div className=\"flex gap-2 text-xs text-muted-foreground\">\n <Badge variant=\"outline\" className=\"text-xs\">\n {l.type}\n </Badge>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {l.duration}\n </span>\n </div>\n </div>\n </div>\n <Badge variant={l.completed ? 'default' : 'secondary'}>\n {l.completed ? 'Done' : 'Pending'}\n </Badge>\n </div>\n ))}\n </CardContent>\n </Card>\n ))}\n </TabsContent>\n <TabsContent value=\"discussions\" className=\"mt-4\">\n <Card>\n <CardContent className=\"py-8 text-center text-muted-foreground\">\n Join the course discussion forum.\n </CardContent>\n </Card>\n </TabsContent>\n <TabsContent value=\"resources\" className=\"mt-4\">\n <Card>\n <CardContent className=\"pt-6 space-y-3\">\n {[\n 'Calculus Textbook (PDF)',\n 'Practice Problem Sets',\n 'Formula Reference Sheet',\n ].map((r) => (\n <div key={r} className=\"flex items-center justify-between rounded border p-3\">\n <div className=\"flex items-center gap-3\">\n <FileText className=\"h-4 w-4 text-primary\" />\n <span className=\"text-sm\">{r}</span>\n </div>\n <Button variant=\"outline\" size=\"sm\">\n <Download className=\"mr-2 h-4 w-4\" />\n Download\n </Button>\n </div>\n ))}\n </CardContent>\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n <div className=\"space-y-4\">\n <Card>\n <CardContent className=\"pt-6 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-2xl font-bold text-primary\">${course.price}</span>\n <Badge>{course.level}</Badge>\n </div>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n {course.duration}\n </div>\n <div className=\"flex items-center gap-2\">\n <BookOpen className=\"h-4 w-4 text-muted-foreground\" />\n {course.lessons} lessons\n </div>\n <div className=\"flex items-center gap-2\">\n <Users className=\"h-4 w-4 text-muted-foreground\" />\n {course.students} students\n </div>\n <div className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4 text-muted-foreground\" />\n {course.rating}/5 rating\n </div>\n </div>\n </CardContent>\n </Card>\n {course.progress !== undefined && (\n <Card>\n <CardContent className=\"pt-6\">\n <h3 className=\"font-medium mb-3\">Your Progress</h3>\n <div className=\"flex justify-between text-sm mb-1\">\n <span>Completion</span>\n <span>{course.progress}%</span>\n </div>\n <div className=\"h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-2 bg-primary rounded-full\"\n style={{ width: `${course.progress}%` }}\n />\n </div>\n </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 CoursesCourseListPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CoursesCourseListPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseListPagePage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/CoursesCourseListPagePage.tsx"],"names":[],"mappings":"AAaA,wBAAgB,yBAAyB,4CAyGxC"}
@@ -0,0 +1,153 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { useState as t } from "react";
3
+ import { BookOpen as n, Filter as r, Plus as i, Search as a, TrendingUp as o, Users 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, CardHeader as m, CardTitle as h, Input as g } from "@burdenoff/fe-libs/ui";
6
+ //#region src/buildmyiq/pages/CoursesCourseListPagePage.tsx
7
+ function _() {
8
+ let { courses: _ } = e(), [v, y] = t(""), b = _.filter((e) => v === "" || e.title.toLowerCase().includes(v.toLowerCase()) || e.category.toLowerCase().includes(v.toLowerCase()));
9
+ return /* @__PURE__ */ l("div", {
10
+ className: "space-y-6 p-6",
11
+ children: [
12
+ /* @__PURE__ */ l("div", {
13
+ className: "flex items-center justify-between",
14
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
15
+ className: "text-2xl font-semibold",
16
+ children: "All Courses"
17
+ }), /* @__PURE__ */ c("p", {
18
+ className: "text-sm text-muted-foreground",
19
+ children: "Browse and manage available courses"
20
+ })] }), /* @__PURE__ */ l("div", {
21
+ className: "flex gap-2",
22
+ children: [/* @__PURE__ */ l(d, {
23
+ variant: "outline",
24
+ size: "sm",
25
+ children: [/* @__PURE__ */ c(r, { className: "mr-2 h-4 w-4" }), "Filter"]
26
+ }), /* @__PURE__ */ l(d, {
27
+ size: "sm",
28
+ children: [/* @__PURE__ */ c(i, { className: "mr-2 h-4 w-4" }), "Create Course"]
29
+ })]
30
+ })]
31
+ }),
32
+ /* @__PURE__ */ l("div", {
33
+ className: "relative max-w-md",
34
+ children: [/* @__PURE__ */ c(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ c(g, {
35
+ placeholder: "Search courses...",
36
+ value: v,
37
+ onChange: (e) => y(e.target.value),
38
+ className: "pl-10"
39
+ })]
40
+ }),
41
+ /* @__PURE__ */ l("p", {
42
+ className: "text-sm text-muted-foreground",
43
+ children: [b.length, " courses found"]
44
+ }),
45
+ /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, {
46
+ className: "pb-3",
47
+ children: /* @__PURE__ */ c(h, {
48
+ className: "text-base",
49
+ children: "Course Catalog"
50
+ })
51
+ }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("div", {
52
+ className: "overflow-x-auto",
53
+ children: /* @__PURE__ */ l("table", {
54
+ className: "w-full text-sm",
55
+ children: [/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ l("tr", {
56
+ className: "border-b text-left text-muted-foreground",
57
+ children: [
58
+ /* @__PURE__ */ c("th", {
59
+ className: "p-3",
60
+ children: "Course"
61
+ }),
62
+ /* @__PURE__ */ c("th", {
63
+ className: "p-3",
64
+ children: "Instructor"
65
+ }),
66
+ /* @__PURE__ */ c("th", {
67
+ className: "p-3",
68
+ children: "Category"
69
+ }),
70
+ /* @__PURE__ */ c("th", {
71
+ className: "p-3",
72
+ children: "Students"
73
+ }),
74
+ /* @__PURE__ */ c("th", {
75
+ className: "p-3",
76
+ children: "Level"
77
+ }),
78
+ /* @__PURE__ */ c("th", {
79
+ className: "p-3",
80
+ children: "Rating"
81
+ }),
82
+ /* @__PURE__ */ c("th", {
83
+ className: "p-3 text-right",
84
+ children: "Status"
85
+ })
86
+ ]
87
+ }) }), /* @__PURE__ */ c("tbody", { children: b.map((e) => /* @__PURE__ */ l("tr", {
88
+ className: "border-b hover:bg-muted/50",
89
+ children: [
90
+ /* @__PURE__ */ c("td", {
91
+ className: "p-3",
92
+ children: /* @__PURE__ */ l("div", {
93
+ className: "flex items-center gap-2",
94
+ children: [/* @__PURE__ */ c(n, { className: "h-4 w-4 text-primary" }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
95
+ className: "font-medium",
96
+ children: e.title
97
+ }), /* @__PURE__ */ l("p", {
98
+ className: "text-xs text-muted-foreground",
99
+ children: [
100
+ e.lessons,
101
+ " lessons · ",
102
+ e.duration
103
+ ]
104
+ })] })]
105
+ })
106
+ }),
107
+ /* @__PURE__ */ c("td", {
108
+ className: "p-3",
109
+ children: e.instructor
110
+ }),
111
+ /* @__PURE__ */ c("td", {
112
+ className: "p-3",
113
+ children: e.category
114
+ }),
115
+ /* @__PURE__ */ c("td", {
116
+ className: "p-3",
117
+ children: /* @__PURE__ */ l("span", {
118
+ className: "flex items-center gap-1",
119
+ children: [/* @__PURE__ */ c(s, { className: "h-3 w-3" }), e.students]
120
+ })
121
+ }),
122
+ /* @__PURE__ */ c("td", {
123
+ className: "p-3",
124
+ children: /* @__PURE__ */ c(u, {
125
+ variant: "outline",
126
+ children: e.level
127
+ })
128
+ }),
129
+ /* @__PURE__ */ c("td", {
130
+ className: "p-3",
131
+ children: /* @__PURE__ */ l("span", {
132
+ className: "flex items-center gap-1",
133
+ children: [/* @__PURE__ */ c(o, { className: "h-3 w-3" }), e.rating]
134
+ })
135
+ }),
136
+ /* @__PURE__ */ c("td", {
137
+ className: "p-3 text-right",
138
+ children: /* @__PURE__ */ c(u, {
139
+ variant: e.status === "published" ? "default" : "secondary",
140
+ children: e.status
141
+ })
142
+ })
143
+ ]
144
+ }, e.id)) })]
145
+ })
146
+ }) })] })
147
+ ]
148
+ });
149
+ }
150
+ //#endregion
151
+ export { _ as CoursesCourseListPagePage };
152
+
153
+ //# sourceMappingURL=CoursesCourseListPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseListPagePage.js","names":[],"sources":["../../../src/buildmyiq/pages/CoursesCourseListPagePage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { Plus, Search, Filter, BookOpen, Users, Clock, TrendingUp } from 'lucide-react';\nimport { useState } from 'react';\nimport { useBuildMyIQStore } from '../store/buildmyiqStore';\n\nexport function CoursesCourseListPagePage() {\n const { courses } = useBuildMyIQStore();\n const [searchTerm, setSearchTerm] = useState('');\n\n const filtered = courses.filter(\n (c) =>\n searchTerm === '' ||\n c.title.toLowerCase().includes(searchTerm.toLowerCase()) ||\n c.category.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">All Courses</h1>\n <p className=\"text-sm text-muted-foreground\">Browse and manage available courses</p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\">\n <Filter className=\"mr-2 h-4 w-4\" />\n Filter\n </Button>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Course\n </Button>\n </div>\n </div>\n\n <div className=\"relative max-w-md\">\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 courses...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n\n <p className=\"text-sm text-muted-foreground\">{filtered.length} courses found</p>\n\n <Card>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base\">Course Catalog</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b text-left text-muted-foreground\">\n <th className=\"p-3\">Course</th>\n <th className=\"p-3\">Instructor</th>\n <th className=\"p-3\">Category</th>\n <th className=\"p-3\">Students</th>\n <th className=\"p-3\">Level</th>\n <th className=\"p-3\">Rating</th>\n <th className=\"p-3 text-right\">Status</th>\n </tr>\n </thead>\n <tbody>\n {filtered.map((course) => (\n <tr key={course.id} className=\"border-b hover:bg-muted/50\">\n <td className=\"p-3\">\n <div className=\"flex items-center gap-2\">\n <BookOpen className=\"h-4 w-4 text-primary\" />\n <div>\n <p className=\"font-medium\">{course.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n {course.lessons} lessons &middot; {course.duration}\n </p>\n </div>\n </div>\n </td>\n <td className=\"p-3\">{course.instructor}</td>\n <td className=\"p-3\">{course.category}</td>\n <td className=\"p-3\">\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {course.students}\n </span>\n </td>\n <td className=\"p-3\">\n <Badge variant=\"outline\">{course.level}</Badge>\n </td>\n <td className=\"p-3\">\n <span className=\"flex items-center gap-1\">\n <TrendingUp className=\"h-3 w-3\" />\n {course.rating}\n </span>\n </td>\n <td className=\"p-3 text-right\">\n <Badge variant={course.status === 'published' ? 'default' : 'secondary'}>\n {course.status}\n </Badge>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CoursesIndexPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CoursesIndexPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesIndexPage.d.ts","sourceRoot":"","sources":["../../../src/buildmyiq/pages/CoursesIndexPage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,4CAwG/B"}
@@ -0,0 +1,138 @@
1
+ import { useBuildMyIQStore as e } from "../store/buildmyiqStore.js";
2
+ import { BookOpen as t, Clock as n, Filter as r, Plus as i, Star as a, TrendingUp as o, Users as s } from "lucide-react";
3
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
4
+ import { Badge as u, Button as d, Card as f, CardContent as p, CardHeader as m, CardTitle as h } from "@burdenoff/fe-libs/ui";
5
+ //#region src/buildmyiq/pages/CoursesIndexPage.tsx
6
+ function g() {
7
+ let { courses: g } = e(), _ = g.filter((e) => e.status === "published"), v = [
8
+ {
9
+ title: "Total Courses",
10
+ value: String(g.length),
11
+ icon: t
12
+ },
13
+ {
14
+ title: "Published",
15
+ value: String(_.length),
16
+ icon: a
17
+ },
18
+ {
19
+ title: "Total Students",
20
+ value: String(_.reduce((e, t) => e + t.students, 0)),
21
+ icon: s
22
+ }
23
+ ];
24
+ return /* @__PURE__ */ l("div", {
25
+ className: "space-y-6 p-6",
26
+ children: [
27
+ /* @__PURE__ */ l("div", {
28
+ className: "flex items-center justify-between",
29
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
30
+ className: "text-2xl font-semibold",
31
+ children: "Courses"
32
+ }), /* @__PURE__ */ c("p", {
33
+ className: "text-sm text-muted-foreground",
34
+ children: "Manage your courses and track student progress"
35
+ })] }), /* @__PURE__ */ l("div", {
36
+ className: "flex gap-2",
37
+ children: [/* @__PURE__ */ l(d, {
38
+ variant: "outline",
39
+ size: "sm",
40
+ children: [/* @__PURE__ */ c(r, { className: "mr-2 h-4 w-4" }), "Filter"]
41
+ }), /* @__PURE__ */ l(d, {
42
+ size: "sm",
43
+ children: [/* @__PURE__ */ c(i, { className: "mr-2 h-4 w-4" }), "Create Course"]
44
+ })]
45
+ })]
46
+ }),
47
+ /* @__PURE__ */ c("div", {
48
+ className: "grid gap-4 md:grid-cols-3",
49
+ children: v.map((e) => /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l(m, {
50
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
51
+ children: [/* @__PURE__ */ c(h, {
52
+ className: "text-sm font-medium",
53
+ children: e.title
54
+ }), /* @__PURE__ */ c(e.icon, { className: "h-4 w-4 text-muted-foreground" })]
55
+ }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("div", {
56
+ className: "text-2xl font-bold",
57
+ children: e.value
58
+ }) })] }, e.title))
59
+ }),
60
+ /* @__PURE__ */ c("div", {
61
+ className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
62
+ children: g.map((e) => /* @__PURE__ */ l(f, {
63
+ className: "hover:shadow-md transition-shadow",
64
+ children: [/* @__PURE__ */ l(m, { children: [/* @__PURE__ */ l("div", {
65
+ className: "flex items-center justify-between",
66
+ children: [/* @__PURE__ */ c(u, {
67
+ variant: e.status === "published" ? "default" : "secondary",
68
+ children: e.status
69
+ }), /* @__PURE__ */ c(u, {
70
+ variant: "outline",
71
+ children: e.level
72
+ })]
73
+ }), /* @__PURE__ */ c(h, {
74
+ className: "text-lg mt-2",
75
+ children: e.title
76
+ })] }), /* @__PURE__ */ l(p, {
77
+ className: "space-y-3",
78
+ children: [
79
+ /* @__PURE__ */ c("p", {
80
+ className: "text-sm text-muted-foreground line-clamp-2",
81
+ children: e.description
82
+ }),
83
+ /* @__PURE__ */ l("div", {
84
+ className: "flex items-center gap-4 text-xs text-muted-foreground",
85
+ children: [
86
+ /* @__PURE__ */ l("span", {
87
+ className: "flex items-center gap-1",
88
+ children: [/* @__PURE__ */ c(s, { className: "h-3 w-3" }), e.students]
89
+ }),
90
+ /* @__PURE__ */ l("span", {
91
+ className: "flex items-center gap-1",
92
+ children: [
93
+ /* @__PURE__ */ c(t, { className: "h-3 w-3" }),
94
+ e.lessons,
95
+ " lessons"
96
+ ]
97
+ }),
98
+ /* @__PURE__ */ l("span", {
99
+ className: "flex items-center gap-1",
100
+ children: [/* @__PURE__ */ c(n, { className: "h-3 w-3" }), e.duration]
101
+ })
102
+ ]
103
+ }),
104
+ /* @__PURE__ */ l("div", {
105
+ className: "flex items-center justify-between",
106
+ children: [/* @__PURE__ */ c("span", {
107
+ className: "text-sm font-medium",
108
+ children: e.instructor
109
+ }), /* @__PURE__ */ l("span", {
110
+ className: "flex items-center gap-1 text-sm",
111
+ children: [
112
+ /* @__PURE__ */ c(o, { className: "h-3 w-3" }),
113
+ e.rating,
114
+ "/5"
115
+ ]
116
+ })]
117
+ }),
118
+ e.progress !== void 0 && /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ l("div", {
119
+ className: "flex justify-between text-xs mb-1",
120
+ children: [/* @__PURE__ */ c("span", { children: "Progress" }), /* @__PURE__ */ l("span", { children: [e.progress, "%"] })]
121
+ }), /* @__PURE__ */ c("div", {
122
+ className: "h-2 bg-muted rounded-full overflow-hidden",
123
+ children: /* @__PURE__ */ c("div", {
124
+ className: "h-2 bg-primary rounded-full",
125
+ style: { width: `${e.progress}%` }
126
+ })
127
+ })] })
128
+ ]
129
+ })]
130
+ }, e.id))
131
+ })
132
+ ]
133
+ });
134
+ }
135
+ //#endregion
136
+ export { g as CoursesIndexPage };
137
+
138
+ //# sourceMappingURL=CoursesIndexPage.js.map