@burdenoff/microfe-technospam 2026.509.101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/technospam/TechnoSpamRoot.d.ts +5 -0
- package/dist/technospam/TechnoSpamRoot.d.ts.map +1 -0
- package/dist/technospam/TechnoSpamRoot.js +482 -0
- package/dist/technospam/TechnoSpamRoot.js.map +1 -0
- package/dist/technospam/TechnoSpamRoutes.d.ts +2 -0
- package/dist/technospam/TechnoSpamRoutes.d.ts.map +1 -0
- package/dist/technospam/TechnoSpamRoutes.js +191 -0
- package/dist/technospam/TechnoSpamRoutes.js.map +1 -0
- package/dist/technospam/index.d.ts +5 -0
- package/dist/technospam/index.d.ts.map +1 -0
- package/dist/technospam/index.js +3 -0
- package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts +2 -0
- package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/AdminAdminDashboardPagePage.js +269 -0
- package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -0
- package/dist/technospam/pages/AdminAuditReportsPagePage.d.ts +2 -0
- package/dist/technospam/pages/AdminAuditReportsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/AdminAuditReportsPagePage.js +179 -0
- package/dist/technospam/pages/AdminAuditReportsPagePage.js.map +1 -0
- package/dist/technospam/pages/AnalyticsAchievementsPagePage.d.ts +2 -0
- package/dist/technospam/pages/AnalyticsAchievementsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/AnalyticsAchievementsPagePage.js +149 -0
- package/dist/technospam/pages/AnalyticsAchievementsPagePage.js.map +1 -0
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts +2 -0
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +260 -0
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -0
- package/dist/technospam/pages/AnalyticsProgressPagePage.d.ts +2 -0
- package/dist/technospam/pages/AnalyticsProgressPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/AnalyticsProgressPagePage.js +215 -0
- package/dist/technospam/pages/AnalyticsProgressPagePage.js.map +1 -0
- package/dist/technospam/pages/AnalyticsReportsPagePage.d.ts +2 -0
- package/dist/technospam/pages/AnalyticsReportsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/AnalyticsReportsPagePage.js +145 -0
- package/dist/technospam/pages/AnalyticsReportsPagePage.js.map +1 -0
- package/dist/technospam/pages/ApplicationsPortfolioPagePage.d.ts +2 -0
- package/dist/technospam/pages/ApplicationsPortfolioPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/ApplicationsPortfolioPagePage.js +227 -0
- package/dist/technospam/pages/ApplicationsPortfolioPagePage.js.map +1 -0
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +194 -0
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -0
- package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts +2 -0
- package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js +203 -0
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -0
- package/dist/technospam/pages/ApplicationsSolutionsPagePage.d.ts +2 -0
- package/dist/technospam/pages/ApplicationsSolutionsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/ApplicationsSolutionsPagePage.js +182 -0
- package/dist/technospam/pages/ApplicationsSolutionsPagePage.js.map +1 -0
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +261 -0
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -0
- package/dist/technospam/pages/CoursesCoursesPagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesCoursesPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/CoursesCoursesPagePage.js +179 -0
- package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -0
- package/dist/technospam/pages/CoursesInstructorProfilePagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesInstructorProfilePagePage.d.ts.map +1 -0
- package/dist/technospam/pages/CoursesInstructorProfilePagePage.js +346 -0
- package/dist/technospam/pages/CoursesInstructorProfilePagePage.js.map +1 -0
- package/dist/technospam/pages/CoursesInstructorsPagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesInstructorsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/CoursesInstructorsPagePage.js +104 -0
- package/dist/technospam/pages/CoursesInstructorsPagePage.js.map +1 -0
- package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts +2 -0
- package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/CoursesMyLearningPagePage.js +187 -0
- package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -0
- package/dist/technospam/pages/DashboardDashboardPagePage.d.ts +2 -0
- package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/DashboardDashboardPagePage.js +344 -0
- package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -0
- package/dist/technospam/pages/HackathonsEventsPagePage.d.ts +2 -0
- package/dist/technospam/pages/HackathonsEventsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/HackathonsEventsPagePage.js +121 -0
- package/dist/technospam/pages/HackathonsEventsPagePage.js.map +1 -0
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js +250 -0
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js.map +1 -0
- package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts +2 -0
- package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js +162 -0
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -0
- package/dist/technospam/pages/HackathonsTeamsPagePage.d.ts +2 -0
- package/dist/technospam/pages/HackathonsTeamsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/HackathonsTeamsPagePage.js +185 -0
- package/dist/technospam/pages/HackathonsTeamsPagePage.js.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.js +181 -0
- package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.js.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.d.ts +2 -0
- package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.js +112 -0
- package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.js.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.d.ts +2 -0
- package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.js +105 -0
- package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.js.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.d.ts +2 -0
- package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.d.ts.map +1 -0
- package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.js +165 -0
- package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.js.map +1 -0
- package/dist/technospam/pages/MentorshipBookingsPagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipBookingsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipBookingsPagePage.js +188 -0
- package/dist/technospam/pages/MentorshipBookingsPagePage.js.map +1 -0
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +310 -0
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -0
- package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipMentorsPagePage.js +128 -0
- package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -0
- package/dist/technospam/pages/MentorshipMentorshipPagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipMentorshipPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipMentorshipPagePage.js +209 -0
- package/dist/technospam/pages/MentorshipMentorshipPagePage.js.map +1 -0
- package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts +2 -0
- package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/MentorshipSessionsPagePage.js +170 -0
- package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -0
- package/dist/technospam/pages/OpenSourceContributionsPagePage.d.ts +2 -0
- package/dist/technospam/pages/OpenSourceContributionsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/OpenSourceContributionsPagePage.js +191 -0
- package/dist/technospam/pages/OpenSourceContributionsPagePage.js.map +1 -0
- package/dist/technospam/pages/OpenSourceOpenSourcePagePage.d.ts +2 -0
- package/dist/technospam/pages/OpenSourceOpenSourcePagePage.d.ts.map +1 -0
- package/dist/technospam/pages/OpenSourceOpenSourcePagePage.js +216 -0
- package/dist/technospam/pages/OpenSourceOpenSourcePagePage.js.map +1 -0
- package/dist/technospam/pages/OpenSourceProjectsPagePage.d.ts +2 -0
- package/dist/technospam/pages/OpenSourceProjectsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/OpenSourceProjectsPagePage.js +150 -0
- package/dist/technospam/pages/OpenSourceProjectsPagePage.js.map +1 -0
- package/dist/technospam/pages/StudyPlannerGoalsPagePage.d.ts +2 -0
- package/dist/technospam/pages/StudyPlannerGoalsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/StudyPlannerGoalsPagePage.js +161 -0
- package/dist/technospam/pages/StudyPlannerGoalsPagePage.js.map +1 -0
- package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.js +198 -0
- package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.js.map +1 -0
- package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.d.ts +2 -0
- package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.js +105 -0
- package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.js.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.d.ts +2 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.js +161 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.js.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.d.ts +2 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.js +127 -0
- package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.js.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.d.ts +2 -0
- package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js +238 -0
- package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.d.ts +2 -0
- package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.d.ts.map +1 -0
- package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.js +113 -0
- package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.js.map +1 -0
- package/dist/technospam/providers/TechnoSpamProvider.d.ts +6 -0
- package/dist/technospam/providers/TechnoSpamProvider.d.ts.map +1 -0
- package/dist/technospam/providers/TechnoSpamProvider.js +27 -0
- package/dist/technospam/providers/TechnoSpamProvider.js.map +1 -0
- package/dist/technospam/store/technospamStore.d.ts +190 -0
- package/dist/technospam/store/technospamStore.d.ts.map +1 -0
- package/dist/technospam/store/technospamStore.js +912 -0
- package/dist/technospam/store/technospamStore.js.map +1 -0
- package/dist/technospam/types/index.d.ts +51 -0
- package/dist/technospam/types/index.d.ts.map +1 -0
- package/dist/technospam/utils/cn.d.ts +4 -0
- package/dist/technospam/utils/cn.d.ts.map +1 -0
- package/dist/technospam/utils/i18n.d.ts +6 -0
- package/dist/technospam/utils/i18n.d.ts.map +1 -0
- package/dist/technospam/utils/i18n.js +15 -0
- package/dist/technospam/utils/i18n.js.map +1 -0
- package/dist/technospam/utils/navigation.d.ts +2 -0
- package/dist/technospam/utils/navigation.d.ts.map +1 -0
- package/dist/technospam/utils/navigation.js +8 -0
- package/dist/technospam/utils/navigation.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticsAnalyticsPagePage.js","names":[],"sources":["../../../src/technospam/pages/AnalyticsAnalyticsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { BarChart3, TrendingUp, Clock, Code, BookOpen, Target } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\ntype TabView = 'personal' | 'platform';\n\nconst weeklyActivity = [\n { day: 'Mon', hours: 2.5 },\n { day: 'Tue', hours: 3.2 },\n { day: 'Wed', hours: 1.8 },\n { day: 'Thu', hours: 4.0 },\n { day: 'Fri', hours: 2.0 },\n { day: 'Sat', hours: 5.5 },\n { day: 'Sun', hours: 3.0 },\n];\n\nconst maxHours = Math.max(...weeklyActivity.map((d) => d.hours));\n\nexport function AnalyticsAnalyticsPagePage() {\n const { userStats, courses, problems } = useTechnoSpamStore();\n const [activeTab, setActiveTab] = useState<TabView>('personal');\n\n const solvedByDifficulty = {\n easy: problems.filter((p) => p.isSolved && p.difficulty === 'easy').length,\n medium: problems.filter((p) => p.isSolved && p.difficulty === 'medium').length,\n hard: problems.filter((p) => p.isSolved && p.difficulty === 'hard').length,\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">Analytics</h1>\n <p className=\"text-sm text-muted-foreground\">Insights into your learning performance</p>\n </div>\n\n <div className=\"flex gap-2 border-b border-border pb-2\">\n <Button\n variant={activeTab === 'personal' ? 'default' : 'ghost'}\n size=\"sm\"\n onClick={() => setActiveTab('personal')}\n >\n Personal Insights\n </Button>\n <Button\n variant={activeTab === 'platform' ? 'default' : 'ghost'}\n size=\"sm\"\n onClick={() => setActiveTab('platform')}\n >\n Platform Overview\n </Button>\n </div>\n\n {activeTab === 'personal' ? (\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\">Learning Hours</CardTitle>\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.totalLearningHours}</div>\n <p className=\"text-xs text-muted-foreground\">+22h this week</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\">Problems Solved</CardTitle>\n <Code className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.problemsSolved}</div>\n <p className=\"text-xs text-muted-foreground\">+12 this week</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\">Courses Progress</CardTitle>\n <BookOpen className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {userStats.coursesCompleted}/{userStats.coursesEnrolled}\n </div>\n <p className=\"text-xs text-muted-foreground\">Completed/Enrolled</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\">Total Points</CardTitle>\n <Target className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.totalPoints.toLocaleString()}</div>\n <p className=\"text-xs text-muted-foreground\">Rank #{userStats.rank}</p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <BarChart3 className=\"h-4 w-4\" />\n Weekly Activity\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n {weeklyActivity.map((day) => (\n <div key={day.day} className=\"flex items-center gap-3\">\n <span className=\"w-8 text-sm text-muted-foreground\">{day.day}</span>\n <div className=\"flex-1 h-4 bg-muted rounded overflow-hidden\">\n <div\n className=\"h-4 bg-primary rounded\"\n style={{ width: `${(day.hours / maxHours) * 100}%` }}\n />\n </div>\n <span className=\"w-10 text-sm font-medium text-right\">{day.hours}h</span>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Problems by Difficulty</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-green-600\">Easy</span>\n <span className=\"font-medium\">{solvedByDifficulty.easy}</span>\n </div>\n <div className=\"h-3 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-3 rounded-full bg-green-500\"\n style={{ width: `${(solvedByDifficulty.easy / problems.length) * 100}%` }}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-yellow-600\">Medium</span>\n <span className=\"font-medium\">{solvedByDifficulty.medium}</span>\n </div>\n <div className=\"h-3 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-3 rounded-full bg-yellow-500\"\n style={{ width: `${(solvedByDifficulty.medium / problems.length) * 100}%` }}\n />\n </div>\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-red-600\">Hard</span>\n <span className=\"font-medium\">{solvedByDifficulty.hard}</span>\n </div>\n <div className=\"h-3 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-3 rounded-full bg-red-500\"\n style={{ width: `${(solvedByDifficulty.hard / problems.length) * 100}%` }}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n </>\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n <Card>\n <CardContent className=\"flex items-center gap-4 pt-6\">\n <TrendingUp className=\"h-8 w-8 text-primary\" />\n <div>\n <div className=\"text-2xl font-bold\">{courses.length}</div>\n <p className=\"text-xs text-muted-foreground\">Total Courses</p>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"flex items-center gap-4 pt-6\">\n <Code className=\"h-8 w-8 text-primary\" />\n <div>\n <div className=\"text-2xl font-bold\">{problems.length}</div>\n <p className=\"text-xs text-muted-foreground\">Total Problems</p>\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"flex items-center gap-4 pt-6\">\n <BarChart3 className=\"h-8 w-8 text-primary\" />\n <div>\n <div className=\"text-2xl font-bold\">\n {(problems.reduce((s, p) => s + p.acceptanceRate, 0) / problems.length).toFixed(\n 1\n )}\n %\n </div>\n <p className=\"text-xs text-muted-foreground\">Avg Acceptance Rate</p>\n </div>\n </CardContent>\n </Card>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticsProgressPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/AnalyticsProgressPagePage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,yBAAyB,4CAoJxC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { useTechnoSpamStore as e } from "../store/technospamStore.js";
|
|
2
|
+
import { Award as t, BookOpen as n, Flame as r, Target as i, TrendingUp as a } from "lucide-react";
|
|
3
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/technospam/pages/AnalyticsProgressPagePage.tsx
|
|
6
|
+
var p = [
|
|
7
|
+
{
|
|
8
|
+
name: "Algorithms",
|
|
9
|
+
level: 72
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: "Data Structures",
|
|
13
|
+
level: 65
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "System Design",
|
|
17
|
+
level: 45
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "Frontend",
|
|
21
|
+
level: 85
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "Backend",
|
|
25
|
+
level: 60
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "DevOps",
|
|
29
|
+
level: 30
|
|
30
|
+
}
|
|
31
|
+
], m = [
|
|
32
|
+
{
|
|
33
|
+
name: "Solve 200 problems",
|
|
34
|
+
current: 156,
|
|
35
|
+
target: 200
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "Complete 10 courses",
|
|
39
|
+
current: 5,
|
|
40
|
+
target: 10
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "Earn 5 certificates",
|
|
44
|
+
current: 4,
|
|
45
|
+
target: 5
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "Reach 50-day streak",
|
|
49
|
+
current: 15,
|
|
50
|
+
target: 50
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
function h() {
|
|
54
|
+
let { userStats: h, learningPaths: g } = e();
|
|
55
|
+
return /* @__PURE__ */ s("div", {
|
|
56
|
+
className: "space-y-6 p-6",
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
59
|
+
className: "text-2xl font-semibold text-foreground",
|
|
60
|
+
children: "Learning Progress"
|
|
61
|
+
}), /* @__PURE__ */ o("p", {
|
|
62
|
+
className: "text-sm text-muted-foreground",
|
|
63
|
+
children: "Track your growth and skill development"
|
|
64
|
+
})] }),
|
|
65
|
+
/* @__PURE__ */ s("div", {
|
|
66
|
+
className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(d, {
|
|
69
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
70
|
+
children: [/* @__PURE__ */ o(f, {
|
|
71
|
+
className: "text-sm font-medium",
|
|
72
|
+
children: "Study Streak"
|
|
73
|
+
}), /* @__PURE__ */ o(r, { className: "h-4 w-4 text-orange-500" })]
|
|
74
|
+
}), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ s("div", {
|
|
75
|
+
className: "text-2xl font-bold",
|
|
76
|
+
children: [h.studyStreak, " days"]
|
|
77
|
+
}) })] }),
|
|
78
|
+
/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(d, {
|
|
79
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
80
|
+
children: [/* @__PURE__ */ o(f, {
|
|
81
|
+
className: "text-sm font-medium",
|
|
82
|
+
children: "Total Points"
|
|
83
|
+
}), /* @__PURE__ */ o(i, { className: "h-4 w-4 text-muted-foreground" })]
|
|
84
|
+
}), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o("div", {
|
|
85
|
+
className: "text-2xl font-bold",
|
|
86
|
+
children: h.totalPoints.toLocaleString()
|
|
87
|
+
}) })] }),
|
|
88
|
+
/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(d, {
|
|
89
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
90
|
+
children: [/* @__PURE__ */ o(f, {
|
|
91
|
+
className: "text-sm font-medium",
|
|
92
|
+
children: "Courses Done"
|
|
93
|
+
}), /* @__PURE__ */ o(n, { className: "h-4 w-4 text-muted-foreground" })]
|
|
94
|
+
}), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o("div", {
|
|
95
|
+
className: "text-2xl font-bold",
|
|
96
|
+
children: h.coursesCompleted
|
|
97
|
+
}) })] }),
|
|
98
|
+
/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ s(d, {
|
|
99
|
+
className: "flex flex-row items-center justify-between space-y-0 pb-2",
|
|
100
|
+
children: [/* @__PURE__ */ o(f, {
|
|
101
|
+
className: "text-sm font-medium",
|
|
102
|
+
children: "Certificates"
|
|
103
|
+
}), /* @__PURE__ */ o(t, { className: "h-4 w-4 text-muted-foreground" })]
|
|
104
|
+
}), /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o("div", {
|
|
105
|
+
className: "text-2xl font-bold",
|
|
106
|
+
children: h.certificatesEarned
|
|
107
|
+
}) })] })
|
|
108
|
+
]
|
|
109
|
+
}),
|
|
110
|
+
/* @__PURE__ */ s("div", {
|
|
111
|
+
className: "grid gap-6 lg:grid-cols-2",
|
|
112
|
+
children: [/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o(d, { children: /* @__PURE__ */ s(f, {
|
|
113
|
+
className: "flex items-center gap-2 text-base",
|
|
114
|
+
children: [/* @__PURE__ */ o(a, { className: "h-4 w-4" }), "Skill Levels"]
|
|
115
|
+
}) }), /* @__PURE__ */ o(u, {
|
|
116
|
+
className: "space-y-4",
|
|
117
|
+
children: p.map((e) => /* @__PURE__ */ s("div", {
|
|
118
|
+
className: "space-y-1",
|
|
119
|
+
children: [/* @__PURE__ */ s("div", {
|
|
120
|
+
className: "flex items-center justify-between text-sm",
|
|
121
|
+
children: [/* @__PURE__ */ o("span", { children: e.name }), /* @__PURE__ */ s("span", {
|
|
122
|
+
className: "font-medium",
|
|
123
|
+
children: [e.level, "%"]
|
|
124
|
+
})]
|
|
125
|
+
}), /* @__PURE__ */ o("div", {
|
|
126
|
+
className: "h-2 w-full overflow-hidden rounded-full bg-muted",
|
|
127
|
+
children: /* @__PURE__ */ o("div", {
|
|
128
|
+
className: "h-2 rounded-full bg-primary",
|
|
129
|
+
style: { width: `${e.level}%` }
|
|
130
|
+
})
|
|
131
|
+
})]
|
|
132
|
+
}, e.name))
|
|
133
|
+
})] }), /* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o(d, { children: /* @__PURE__ */ s(f, {
|
|
134
|
+
className: "flex items-center gap-2 text-base",
|
|
135
|
+
children: [/* @__PURE__ */ o(i, { className: "h-4 w-4" }), "Learning Goals"]
|
|
136
|
+
}) }), /* @__PURE__ */ o(u, {
|
|
137
|
+
className: "space-y-4",
|
|
138
|
+
children: m.map((e) => {
|
|
139
|
+
let t = Math.round(e.current / e.target * 100);
|
|
140
|
+
return /* @__PURE__ */ s("div", {
|
|
141
|
+
className: "space-y-1",
|
|
142
|
+
children: [/* @__PURE__ */ s("div", {
|
|
143
|
+
className: "flex items-center justify-between text-sm",
|
|
144
|
+
children: [/* @__PURE__ */ o("span", { children: e.name }), /* @__PURE__ */ s("span", {
|
|
145
|
+
className: "font-medium",
|
|
146
|
+
children: [
|
|
147
|
+
e.current,
|
|
148
|
+
"/",
|
|
149
|
+
e.target
|
|
150
|
+
]
|
|
151
|
+
})]
|
|
152
|
+
}), /* @__PURE__ */ o("div", {
|
|
153
|
+
className: "h-2 w-full overflow-hidden rounded-full bg-muted",
|
|
154
|
+
children: /* @__PURE__ */ o("div", {
|
|
155
|
+
className: `h-2 rounded-full ${t >= 100 ? "bg-green-500" : "bg-primary"}`,
|
|
156
|
+
style: { width: `${Math.min(t, 100)}%` }
|
|
157
|
+
})
|
|
158
|
+
})]
|
|
159
|
+
}, e.name);
|
|
160
|
+
})
|
|
161
|
+
})] })]
|
|
162
|
+
}),
|
|
163
|
+
/* @__PURE__ */ s(l, { children: [/* @__PURE__ */ o(d, { children: /* @__PURE__ */ o(f, {
|
|
164
|
+
className: "text-base",
|
|
165
|
+
children: "Learning Paths"
|
|
166
|
+
}) }), /* @__PURE__ */ o(u, {
|
|
167
|
+
className: "space-y-4",
|
|
168
|
+
children: g.map((e) => /* @__PURE__ */ s("div", {
|
|
169
|
+
className: "flex flex-col gap-2 rounded-lg border border-border p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
170
|
+
children: [/* @__PURE__ */ s("div", {
|
|
171
|
+
className: "space-y-1",
|
|
172
|
+
children: [/* @__PURE__ */ s("div", {
|
|
173
|
+
className: "flex items-center gap-2",
|
|
174
|
+
children: [/* @__PURE__ */ o("p", {
|
|
175
|
+
className: "text-sm font-medium",
|
|
176
|
+
children: e.title
|
|
177
|
+
}), /* @__PURE__ */ o(c, {
|
|
178
|
+
variant: "secondary",
|
|
179
|
+
className: "text-xs",
|
|
180
|
+
children: e.level
|
|
181
|
+
})]
|
|
182
|
+
}), /* @__PURE__ */ s("p", {
|
|
183
|
+
className: "text-xs text-muted-foreground",
|
|
184
|
+
children: [
|
|
185
|
+
e.coursesCount,
|
|
186
|
+
" courses · ",
|
|
187
|
+
e.estimatedHours,
|
|
188
|
+
"h estimated"
|
|
189
|
+
]
|
|
190
|
+
})]
|
|
191
|
+
}), /* @__PURE__ */ o("div", {
|
|
192
|
+
className: "flex items-center gap-3",
|
|
193
|
+
children: /* @__PURE__ */ s("div", {
|
|
194
|
+
className: "w-32 space-y-1",
|
|
195
|
+
children: [/* @__PURE__ */ o("div", {
|
|
196
|
+
className: "h-2 w-full overflow-hidden rounded-full bg-muted",
|
|
197
|
+
children: /* @__PURE__ */ o("div", {
|
|
198
|
+
className: "h-2 rounded-full bg-primary",
|
|
199
|
+
style: { width: `${e.progress}%` }
|
|
200
|
+
})
|
|
201
|
+
}), /* @__PURE__ */ s("p", {
|
|
202
|
+
className: "text-xs text-muted-foreground text-right",
|
|
203
|
+
children: [e.progress, "%"]
|
|
204
|
+
})]
|
|
205
|
+
})
|
|
206
|
+
})]
|
|
207
|
+
}, e.id))
|
|
208
|
+
})] })
|
|
209
|
+
]
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
//#endregion
|
|
213
|
+
export { h as AnalyticsProgressPagePage };
|
|
214
|
+
|
|
215
|
+
//# sourceMappingURL=AnalyticsProgressPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticsProgressPagePage.js","names":[],"sources":["../../../src/technospam/pages/AnalyticsProgressPagePage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { TrendingUp, BookOpen, Code, Flame, Target, Award } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\nconst skillLevels = [\n { name: 'Algorithms', level: 72 },\n { name: 'Data Structures', level: 65 },\n { name: 'System Design', level: 45 },\n { name: 'Frontend', level: 85 },\n { name: 'Backend', level: 60 },\n { name: 'DevOps', level: 30 },\n];\n\nconst learningGoals = [\n { name: 'Solve 200 problems', current: 156, target: 200 },\n { name: 'Complete 10 courses', current: 5, target: 10 },\n { name: 'Earn 5 certificates', current: 4, target: 5 },\n { name: 'Reach 50-day streak', current: 15, target: 50 },\n];\n\nexport function AnalyticsProgressPagePage() {\n const { userStats, learningPaths } = useTechnoSpamStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">Learning Progress</h1>\n <p className=\"text-sm text-muted-foreground\">Track your growth and skill development</p>\n </div>\n\n {/* Overview Stats */}\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\">Study Streak</CardTitle>\n <Flame className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.studyStreak} days</div>\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\">Total Points</CardTitle>\n <Target className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.totalPoints.toLocaleString()}</div>\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\">Courses Done</CardTitle>\n <BookOpen className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.coursesCompleted}</div>\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\">Certificates</CardTitle>\n <Award className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.certificatesEarned}</div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-2\">\n {/* Skill Radar */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <TrendingUp className=\"h-4 w-4\" />\n Skill Levels\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {skillLevels.map((skill) => (\n <div key={skill.name} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-sm\">\n <span>{skill.name}</span>\n <span className=\"font-medium\">{skill.level}%</span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary\"\n style={{ width: `${skill.level}%` }}\n />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n {/* Learning Goals */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Target className=\"h-4 w-4\" />\n Learning Goals\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {learningGoals.map((goal) => {\n const percentage = Math.round((goal.current / goal.target) * 100);\n return (\n <div key={goal.name} className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-sm\">\n <span>{goal.name}</span>\n <span className=\"font-medium\">\n {goal.current}/{goal.target}\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className={`h-2 rounded-full ${percentage >= 100 ? 'bg-green-500' : 'bg-primary'}`}\n style={{ width: `${Math.min(percentage, 100)}%` }}\n />\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n </div>\n\n {/* Learning Paths Progress */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Learning Paths</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {learningPaths.map((path) => (\n <div\n key={path.id}\n className=\"flex flex-col gap-2 rounded-lg border border-border p-4 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"space-y-1\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm font-medium\">{path.title}</p>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {path.level}\n </Badge>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n {path.coursesCount} courses · {path.estimatedHours}h estimated\n </p>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-32 space-y-1\">\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary\"\n style={{ width: `${path.progress}%` }}\n />\n </div>\n <p className=\"text-xs text-muted-foreground text-right\">{path.progress}%</p>\n </div>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticsReportsPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/AnalyticsReportsPagePage.tsx"],"names":[],"mappings":"AAgDA,wBAAgB,wBAAwB,4CAwFvC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Calendar as e, Download as t, FileBarChart as n } from "lucide-react";
|
|
2
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
3
|
+
import { Button as a, Card as o, CardContent as s, CardHeader as c, CardTitle as l } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
//#region src/technospam/pages/AnalyticsReportsPagePage.tsx
|
|
5
|
+
var u = [
|
|
6
|
+
{
|
|
7
|
+
id: 1,
|
|
8
|
+
name: "Monthly Learning Summary - January 2026",
|
|
9
|
+
type: "learning",
|
|
10
|
+
generatedAt: "2026-02-01T00:00:00Z",
|
|
11
|
+
size: "2.4 MB"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
id: 2,
|
|
15
|
+
name: "Problem Solving Analytics - Q4 2025",
|
|
16
|
+
type: "problems",
|
|
17
|
+
generatedAt: "2026-01-15T00:00:00Z",
|
|
18
|
+
size: "1.8 MB"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 3,
|
|
22
|
+
name: "Course Completion Report - 2025",
|
|
23
|
+
type: "courses",
|
|
24
|
+
generatedAt: "2026-01-02T00:00:00Z",
|
|
25
|
+
size: "3.1 MB"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 4,
|
|
29
|
+
name: "Hackathon Participation Report",
|
|
30
|
+
type: "hackathons",
|
|
31
|
+
generatedAt: "2025-12-20T00:00:00Z",
|
|
32
|
+
size: "1.2 MB"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: 5,
|
|
36
|
+
name: "Open Source Contribution Report",
|
|
37
|
+
type: "opensource",
|
|
38
|
+
generatedAt: "2025-12-15T00:00:00Z",
|
|
39
|
+
size: "0.9 MB"
|
|
40
|
+
}
|
|
41
|
+
], d = [
|
|
42
|
+
{
|
|
43
|
+
label: "Learning Summary",
|
|
44
|
+
description: "Monthly overview of learning activity and progress"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: "Problem Analytics",
|
|
48
|
+
description: "Detailed breakdown of problem-solving patterns"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
label: "Course Progress",
|
|
52
|
+
description: "Course completion rates and learning paths"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
label: "Contribution Report",
|
|
56
|
+
description: "Open source and community contributions"
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
function f() {
|
|
60
|
+
let f = (e) => {
|
|
61
|
+
switch (e) {
|
|
62
|
+
case "learning": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
|
|
63
|
+
case "problems": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
|
|
64
|
+
case "courses": return "bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400";
|
|
65
|
+
case "hackathons": return "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400";
|
|
66
|
+
default: return "bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400";
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
return /* @__PURE__ */ i("div", {
|
|
70
|
+
className: "space-y-6 p-6",
|
|
71
|
+
children: [
|
|
72
|
+
/* @__PURE__ */ r("div", {
|
|
73
|
+
className: "flex items-center justify-between",
|
|
74
|
+
children: /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("h1", {
|
|
75
|
+
className: "text-2xl font-semibold text-foreground",
|
|
76
|
+
children: "Reports"
|
|
77
|
+
}), /* @__PURE__ */ r("p", {
|
|
78
|
+
className: "text-sm text-muted-foreground",
|
|
79
|
+
children: "Generate and download detailed analytics reports"
|
|
80
|
+
})] })
|
|
81
|
+
}),
|
|
82
|
+
/* @__PURE__ */ i(o, { children: [/* @__PURE__ */ r(c, { children: /* @__PURE__ */ r(l, {
|
|
83
|
+
className: "text-base",
|
|
84
|
+
children: "Generate New Report"
|
|
85
|
+
}) }), /* @__PURE__ */ r(s, { children: /* @__PURE__ */ r("div", {
|
|
86
|
+
className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-4",
|
|
87
|
+
children: d.map((e) => /* @__PURE__ */ i(a, {
|
|
88
|
+
variant: "outline",
|
|
89
|
+
className: "flex h-auto flex-col items-start gap-1 p-4 text-left",
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ r(n, { className: "h-5 w-5" }),
|
|
92
|
+
/* @__PURE__ */ r("span", {
|
|
93
|
+
className: "text-sm font-medium",
|
|
94
|
+
children: e.label
|
|
95
|
+
}),
|
|
96
|
+
/* @__PURE__ */ r("span", {
|
|
97
|
+
className: "text-xs text-muted-foreground",
|
|
98
|
+
children: e.description
|
|
99
|
+
})
|
|
100
|
+
]
|
|
101
|
+
}, e.label))
|
|
102
|
+
}) })] }),
|
|
103
|
+
/* @__PURE__ */ i(o, { children: [/* @__PURE__ */ r(c, { children: /* @__PURE__ */ r(l, {
|
|
104
|
+
className: "text-base",
|
|
105
|
+
children: "Generated Reports"
|
|
106
|
+
}) }), /* @__PURE__ */ r(s, {
|
|
107
|
+
className: "space-y-3",
|
|
108
|
+
children: u.map((o) => /* @__PURE__ */ i("div", {
|
|
109
|
+
className: "flex flex-col gap-3 rounded-lg border border-border p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
110
|
+
children: [/* @__PURE__ */ i("div", {
|
|
111
|
+
className: "flex items-start gap-3",
|
|
112
|
+
children: [/* @__PURE__ */ r(n, { className: "mt-0.5 h-5 w-5 text-muted-foreground" }), /* @__PURE__ */ i("div", {
|
|
113
|
+
className: "space-y-1",
|
|
114
|
+
children: [/* @__PURE__ */ r("p", {
|
|
115
|
+
className: "text-sm font-medium",
|
|
116
|
+
children: o.name
|
|
117
|
+
}), /* @__PURE__ */ i("div", {
|
|
118
|
+
className: "flex items-center gap-3 text-xs text-muted-foreground",
|
|
119
|
+
children: [
|
|
120
|
+
/* @__PURE__ */ r("span", {
|
|
121
|
+
className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${f(o.type)}`,
|
|
122
|
+
children: o.type
|
|
123
|
+
}),
|
|
124
|
+
/* @__PURE__ */ i("span", {
|
|
125
|
+
className: "flex items-center gap-1",
|
|
126
|
+
children: [/* @__PURE__ */ r(e, { className: "h-3 w-3" }), new Date(o.generatedAt).toLocaleDateString()]
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ r("span", { children: o.size })
|
|
129
|
+
]
|
|
130
|
+
})]
|
|
131
|
+
})]
|
|
132
|
+
}), /* @__PURE__ */ i(a, {
|
|
133
|
+
variant: "outline",
|
|
134
|
+
size: "sm",
|
|
135
|
+
children: [/* @__PURE__ */ r(t, { className: "mr-2 h-4 w-4" }), "Download"]
|
|
136
|
+
})]
|
|
137
|
+
}, o.id))
|
|
138
|
+
})] })
|
|
139
|
+
]
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
//#endregion
|
|
143
|
+
export { f as AnalyticsReportsPagePage };
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=AnalyticsReportsPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticsReportsPagePage.js","names":[],"sources":["../../../src/technospam/pages/AnalyticsReportsPagePage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { FileBarChart, Download, Calendar, Clock } from 'lucide-react';\n\nconst mockReports = [\n {\n id: 1,\n name: 'Monthly Learning Summary - January 2026',\n type: 'learning',\n generatedAt: '2026-02-01T00:00:00Z',\n size: '2.4 MB',\n },\n {\n id: 2,\n name: 'Problem Solving Analytics - Q4 2025',\n type: 'problems',\n generatedAt: '2026-01-15T00:00:00Z',\n size: '1.8 MB',\n },\n {\n id: 3,\n name: 'Course Completion Report - 2025',\n type: 'courses',\n generatedAt: '2026-01-02T00:00:00Z',\n size: '3.1 MB',\n },\n {\n id: 4,\n name: 'Hackathon Participation Report',\n type: 'hackathons',\n generatedAt: '2025-12-20T00:00:00Z',\n size: '1.2 MB',\n },\n {\n id: 5,\n name: 'Open Source Contribution Report',\n type: 'opensource',\n generatedAt: '2025-12-15T00:00:00Z',\n size: '0.9 MB',\n },\n];\n\nconst reportTypes = [\n { label: 'Learning Summary', description: 'Monthly overview of learning activity and progress' },\n { label: 'Problem Analytics', description: 'Detailed breakdown of problem-solving patterns' },\n { label: 'Course Progress', description: 'Course completion rates and learning paths' },\n { label: 'Contribution Report', description: 'Open source and community contributions' },\n];\n\nexport function AnalyticsReportsPagePage() {\n const typeBadgeClass = (type: string) => {\n switch (type) {\n case 'learning':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400';\n case 'problems':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400';\n case 'courses':\n return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400';\n case 'hackathons':\n return 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400';\n default:\n return 'bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400';\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">Reports</h1>\n <p className=\"text-sm text-muted-foreground\">\n Generate and download detailed analytics reports\n </p>\n </div>\n </div>\n\n {/* Generate New Report */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Generate New Report</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {reportTypes.map((type) => (\n <Button\n key={type.label}\n variant=\"outline\"\n className=\"flex h-auto flex-col items-start gap-1 p-4 text-left\"\n >\n <FileBarChart className=\"h-5 w-5\" />\n <span className=\"text-sm font-medium\">{type.label}</span>\n <span className=\"text-xs text-muted-foreground\">{type.description}</span>\n </Button>\n ))}\n </div>\n </CardContent>\n </Card>\n\n {/* Generated Reports */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Generated Reports</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {mockReports.map((report) => (\n <div\n key={report.id}\n className=\"flex flex-col gap-3 rounded-lg border border-border p-4 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"flex items-start gap-3\">\n <FileBarChart className=\"mt-0.5 h-5 w-5 text-muted-foreground\" />\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium\">{report.name}</p>\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${typeBadgeClass(report.type)}`}\n >\n {report.type}\n </span>\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n {new Date(report.generatedAt).toLocaleDateString()}\n </span>\n <span>{report.size}</span>\n </div>\n </div>\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 </div>\n );\n}\n"],"mappings":";;;;AAGA,IAAM,IAAc;CAClB;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,aAAa;EACb,MAAM;EACP;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,aAAa;EACb,MAAM;EACP;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,aAAa;EACb,MAAM;EACP;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,aAAa;EACb,MAAM;EACP;CACD;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,aAAa;EACb,MAAM;EACP;CACF,EAEK,IAAc;CAClB;EAAE,OAAO;EAAoB,aAAa;EAAsD;CAChG;EAAE,OAAO;EAAqB,aAAa;EAAkD;CAC7F;EAAE,OAAO;EAAmB,aAAa;EAA8C;CACvF;EAAE,OAAO;EAAuB,aAAa;EAA2C;CACzF;AAED,SAAgB,IAA2B;CACzC,IAAM,KAAkB,MAAiB;AACvC,UAAQ,GAAR;GACE,KAAK,WACH,QAAO;GACT,KAAK,WACH,QAAO;GACT,KAAK,UACH,QAAO;GACT,KAAK,aACH,QAAO;GACT,QACE,QAAO;;;AAIb,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAyC;KAAY,CAAA,EACnE,kBAAC,KAAD;KAAG,WAAU;eAAgC;KAEzC,CAAA,CACA,EAAA,CAAA;IACF,CAAA;GAGN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAW,WAAU;cAAY;IAA+B,CAAA,EACrD,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAY,KAAK,MAChB,kBAAC,GAAD;KAEE,SAAQ;KACR,WAAU;eAHZ;MAKE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;MACpC,kBAAC,QAAD;OAAM,WAAU;iBAAuB,EAAK;OAAa,CAAA;MACzD,kBAAC,QAAD;OAAM,WAAU;iBAAiC,EAAK;OAAmB,CAAA;MAClE;OAPF,EAAK,MAOH,CACT;IACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA;GAGP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAW,WAAU;cAAY;IAA6B,CAAA,EACnD,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cACpB,EAAY,KAAK,MAChB,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAc,WAAU,wCAAyC,CAAA,EACjE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAuB,EAAO;QAAS,CAAA,EACpD,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,QAAD;UACE,WAAW,yEAAyE,EAAe,EAAO,KAAK;oBAE9G,EAAO;UACH,CAAA;SACP,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAC/B,IAAI,KAAK,EAAO,YAAY,CAAC,oBAAoB,CAC7C;;SACP,kBAAC,QAAD,EAAA,UAAO,EAAO,MAAY,CAAA;SACtB;UACF;SACF;SACN,kBAAC,GAAD;MAAQ,SAAQ;MAAU,MAAK;gBAA/B,CACE,kBAAC,GAAD,EAAU,WAAU,gBAAiB,CAAA,EAAA,WAE9B;QACL;OAzBC,EAAO,GAyBR,CACN;IACU,CAAA,CACT,EAAA,CAAA;GACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApplicationsPortfolioPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/ApplicationsPortfolioPagePage.tsx"],"names":[],"mappings":"AAmCA,wBAAgB,6BAA6B,4CAiK5C"}
|