@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,121 @@
|
|
|
1
|
+
import { useTechnoSpamStore as e } from "../store/technospamStore.js";
|
|
2
|
+
import { Calendar as t, MapPin as n, Trophy as r, Users as i } from "lucide-react";
|
|
3
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as s, Card as c, CardContent as l } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/technospam/pages/HackathonsEventsPagePage.tsx
|
|
6
|
+
function u() {
|
|
7
|
+
let { hackathons: u } = e(), d = [...u].sort((e, t) => new Date(e.startDate).getTime() - new Date(t.startDate).getTime()), f = (e) => {
|
|
8
|
+
switch (e) {
|
|
9
|
+
case "registration_open": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
|
|
10
|
+
case "ongoing": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
|
|
11
|
+
case "upcoming": return "bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400";
|
|
12
|
+
case "judging": return "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400";
|
|
13
|
+
case "completed": return "bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400";
|
|
14
|
+
default: return "";
|
|
15
|
+
}
|
|
16
|
+
}, p = [...new Set(d.map((e) => {
|
|
17
|
+
let t = new Date(e.startDate);
|
|
18
|
+
return `${t.toLocaleString("default", { month: "long" })} ${t.getFullYear()}`;
|
|
19
|
+
}))];
|
|
20
|
+
return /* @__PURE__ */ o("div", {
|
|
21
|
+
className: "space-y-6 p-6",
|
|
22
|
+
children: [/* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
23
|
+
className: "text-2xl font-semibold text-foreground",
|
|
24
|
+
children: "Events Calendar"
|
|
25
|
+
}), /* @__PURE__ */ a("p", {
|
|
26
|
+
className: "text-sm text-muted-foreground",
|
|
27
|
+
children: "Upcoming and past hackathon events in chronological order"
|
|
28
|
+
})] }), p.map((e) => {
|
|
29
|
+
let u = d.filter((t) => {
|
|
30
|
+
let n = new Date(t.startDate);
|
|
31
|
+
return `${n.toLocaleString("default", { month: "long" })} ${n.getFullYear()}` === e;
|
|
32
|
+
});
|
|
33
|
+
return /* @__PURE__ */ o("div", {
|
|
34
|
+
className: "space-y-4",
|
|
35
|
+
children: [/* @__PURE__ */ o("h2", {
|
|
36
|
+
className: "flex items-center gap-2 text-lg font-semibold text-foreground",
|
|
37
|
+
children: [/* @__PURE__ */ a(t, { className: "h-5 w-5 text-primary" }), e]
|
|
38
|
+
}), /* @__PURE__ */ a("div", {
|
|
39
|
+
className: "space-y-3 border-l-2 border-border pl-6",
|
|
40
|
+
children: u.map((e) => /* @__PURE__ */ a(c, { children: /* @__PURE__ */ a(l, {
|
|
41
|
+
className: "p-4",
|
|
42
|
+
children: /* @__PURE__ */ a("div", {
|
|
43
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",
|
|
44
|
+
children: /* @__PURE__ */ o("div", {
|
|
45
|
+
className: "space-y-2",
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ o("div", {
|
|
48
|
+
className: "flex items-center gap-2",
|
|
49
|
+
children: [/* @__PURE__ */ a("h3", {
|
|
50
|
+
className: "font-medium",
|
|
51
|
+
children: e.title
|
|
52
|
+
}), /* @__PURE__ */ a("span", {
|
|
53
|
+
className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${f(e.status)}`,
|
|
54
|
+
children: e.status.replace("_", " ")
|
|
55
|
+
})]
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ a("p", {
|
|
58
|
+
className: "text-sm text-muted-foreground",
|
|
59
|
+
children: e.description
|
|
60
|
+
}),
|
|
61
|
+
/* @__PURE__ */ o("div", {
|
|
62
|
+
className: "flex flex-wrap items-center gap-3 text-xs text-muted-foreground",
|
|
63
|
+
children: [
|
|
64
|
+
/* @__PURE__ */ o("span", {
|
|
65
|
+
className: "flex items-center gap-1",
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ a(t, { className: "h-3 w-3" }),
|
|
68
|
+
new Date(e.startDate).toLocaleDateString(),
|
|
69
|
+
" -",
|
|
70
|
+
" ",
|
|
71
|
+
new Date(e.endDate).toLocaleDateString()
|
|
72
|
+
]
|
|
73
|
+
}),
|
|
74
|
+
/* @__PURE__ */ o("span", {
|
|
75
|
+
className: "flex items-center gap-1",
|
|
76
|
+
children: [/* @__PURE__ */ a(n, { className: "h-3 w-3" }), e.mode]
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ o("span", {
|
|
79
|
+
className: "flex items-center gap-1",
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ a(i, { className: "h-3 w-3" }),
|
|
82
|
+
e.currentParticipants,
|
|
83
|
+
"/",
|
|
84
|
+
e.maxParticipants
|
|
85
|
+
]
|
|
86
|
+
}),
|
|
87
|
+
/* @__PURE__ */ o("span", {
|
|
88
|
+
className: "flex items-center gap-1",
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ a(r, { className: "h-3 w-3 text-yellow-500" }),
|
|
91
|
+
"$",
|
|
92
|
+
e.prizePool.toLocaleString()
|
|
93
|
+
]
|
|
94
|
+
})
|
|
95
|
+
]
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ o("div", {
|
|
98
|
+
className: "flex flex-wrap gap-1",
|
|
99
|
+
children: [e.themes.map((e) => /* @__PURE__ */ a(s, {
|
|
100
|
+
variant: "outline",
|
|
101
|
+
className: "text-xs",
|
|
102
|
+
children: e
|
|
103
|
+
}, e)), e.technologies.map((e) => /* @__PURE__ */ a(s, {
|
|
104
|
+
variant: "secondary",
|
|
105
|
+
className: "text-xs",
|
|
106
|
+
children: e
|
|
107
|
+
}, e))]
|
|
108
|
+
})
|
|
109
|
+
]
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
}) }, e.id))
|
|
113
|
+
})]
|
|
114
|
+
}, e);
|
|
115
|
+
})]
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
//#endregion
|
|
119
|
+
export { u as HackathonsEventsPagePage };
|
|
120
|
+
|
|
121
|
+
//# sourceMappingURL=HackathonsEventsPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HackathonsEventsPagePage.js","names":[],"sources":["../../../src/technospam/pages/HackathonsEventsPagePage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Calendar, Users, Trophy, MapPin } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\nexport function HackathonsEventsPagePage() {\n const { hackathons } = useTechnoSpamStore();\n\n const sortedHackathons = [...hackathons].sort(\n (a, b) => new Date(a.startDate).getTime() - new Date(b.startDate).getTime()\n );\n\n const statusColor = (status: string) => {\n switch (status) {\n case 'registration_open':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400';\n case 'ongoing':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400';\n case 'upcoming':\n return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400';\n case 'judging':\n return 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400';\n case 'completed':\n return 'bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400';\n default:\n return '';\n }\n };\n\n const months = [\n ...new Set(\n sortedHackathons.map((h) => {\n const d = new Date(h.startDate);\n return `${d.toLocaleString('default', { month: 'long' })} ${d.getFullYear()}`;\n })\n ),\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">Events Calendar</h1>\n <p className=\"text-sm text-muted-foreground\">\n Upcoming and past hackathon events in chronological order\n </p>\n </div>\n\n {/* Timeline */}\n {months.map((month) => {\n const monthHackathons = sortedHackathons.filter((h) => {\n const d = new Date(h.startDate);\n return `${d.toLocaleString('default', { month: 'long' })} ${d.getFullYear()}` === month;\n });\n\n return (\n <div key={month} className=\"space-y-4\">\n <h2 className=\"flex items-center gap-2 text-lg font-semibold text-foreground\">\n <Calendar className=\"h-5 w-5 text-primary\" />\n {month}\n </h2>\n <div className=\"space-y-3 border-l-2 border-border pl-6\">\n {monthHackathons.map((hack) => (\n <Card key={hack.id}>\n <CardContent className=\"p-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"font-medium\">{hack.title}</h3>\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${statusColor(hack.status)}`}\n >\n {hack.status.replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground\">{hack.description}</p>\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n {new Date(hack.startDate).toLocaleDateString()} -{' '}\n {new Date(hack.endDate).toLocaleDateString()}\n </span>\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {hack.mode}\n </span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {hack.currentParticipants}/{hack.maxParticipants}\n </span>\n <span className=\"flex items-center gap-1\">\n <Trophy className=\"h-3 w-3 text-yellow-500\" />$\n {hack.prizePool.toLocaleString()}\n </span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {hack.themes.map((theme) => (\n <Badge key={theme} variant=\"outline\" className=\"text-xs\">\n {theme}\n </Badge>\n ))}\n {hack.technologies.map((tech) => (\n <Badge key={tech} variant=\"secondary\" className=\"text-xs\">\n {tech}\n </Badge>\n ))}\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HackathonsHackathonDetailsPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/HackathonsHackathonDetailsPagePage.tsx"],"names":[],"mappings":"AAMA,wBAAgB,kCAAkC,4CA0MjD"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { useTechnoSpamStore as e } from "../store/technospamStore.js";
|
|
2
|
+
import { ArrowLeft as t, Calendar as n, Clock as r, Code as i, MapPin as a, Trophy 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/technospam/pages/HackathonsHackathonDetailsPagePage.tsx
|
|
6
|
+
var g = Date.now();
|
|
7
|
+
function _() {
|
|
8
|
+
let { hackathons: _ } = e(), v = _[0];
|
|
9
|
+
if (!v) return /* @__PURE__ */ c("div", {
|
|
10
|
+
className: "p-6 text-center text-muted-foreground",
|
|
11
|
+
children: "Hackathon not found"
|
|
12
|
+
});
|
|
13
|
+
let y = (e) => {
|
|
14
|
+
switch (e) {
|
|
15
|
+
case "registration_open": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
|
|
16
|
+
case "ongoing": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
|
|
17
|
+
case "upcoming": return "bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400";
|
|
18
|
+
default: return "bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400";
|
|
19
|
+
}
|
|
20
|
+
}, b = Math.max(0, Math.ceil((new Date(v.startDate).getTime() - g) / (1e3 * 60 * 60 * 24))), x = v.maxParticipants - v.currentParticipants;
|
|
21
|
+
return /* @__PURE__ */ l("div", {
|
|
22
|
+
className: "space-y-6 p-6",
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ l(d, {
|
|
25
|
+
variant: "ghost",
|
|
26
|
+
size: "sm",
|
|
27
|
+
className: "text-muted-foreground",
|
|
28
|
+
children: [/* @__PURE__ */ c(t, { className: "mr-2 h-4 w-4" }), "Back to Hackathons"]
|
|
29
|
+
}),
|
|
30
|
+
/* @__PURE__ */ l("div", {
|
|
31
|
+
className: "space-y-3",
|
|
32
|
+
children: [/* @__PURE__ */ l("div", {
|
|
33
|
+
className: "flex items-center gap-3",
|
|
34
|
+
children: [/* @__PURE__ */ c("h1", {
|
|
35
|
+
className: "text-3xl font-bold text-foreground",
|
|
36
|
+
children: v.title
|
|
37
|
+
}), /* @__PURE__ */ c("span", {
|
|
38
|
+
className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${y(v.status)}`,
|
|
39
|
+
children: v.status.replace("_", " ")
|
|
40
|
+
})]
|
|
41
|
+
}), /* @__PURE__ */ c("p", {
|
|
42
|
+
className: "text-lg text-muted-foreground",
|
|
43
|
+
children: v.description
|
|
44
|
+
})]
|
|
45
|
+
}),
|
|
46
|
+
/* @__PURE__ */ l("div", {
|
|
47
|
+
className: "grid gap-6 lg:grid-cols-3",
|
|
48
|
+
children: [/* @__PURE__ */ l("div", {
|
|
49
|
+
className: "space-y-6 lg:col-span-2",
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ l("div", {
|
|
52
|
+
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4",
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
55
|
+
className: "flex flex-col items-center pt-6 text-center",
|
|
56
|
+
children: [
|
|
57
|
+
/* @__PURE__ */ c(n, { className: "h-6 w-6 text-primary" }),
|
|
58
|
+
/* @__PURE__ */ c("p", {
|
|
59
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
60
|
+
children: "Starts In"
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ l("p", {
|
|
63
|
+
className: "text-lg font-bold",
|
|
64
|
+
children: [b, " days"]
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
}) }),
|
|
68
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
69
|
+
className: "flex flex-col items-center pt-6 text-center",
|
|
70
|
+
children: [
|
|
71
|
+
/* @__PURE__ */ c(o, { className: "h-6 w-6 text-yellow-500" }),
|
|
72
|
+
/* @__PURE__ */ c("p", {
|
|
73
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
74
|
+
children: "Prize Pool"
|
|
75
|
+
}),
|
|
76
|
+
/* @__PURE__ */ l("p", {
|
|
77
|
+
className: "text-lg font-bold",
|
|
78
|
+
children: ["$", v.prizePool.toLocaleString()]
|
|
79
|
+
})
|
|
80
|
+
]
|
|
81
|
+
}) }),
|
|
82
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
83
|
+
className: "flex flex-col items-center pt-6 text-center",
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ c(s, { className: "h-6 w-6 text-primary" }),
|
|
86
|
+
/* @__PURE__ */ c("p", {
|
|
87
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
88
|
+
children: "Participants"
|
|
89
|
+
}),
|
|
90
|
+
/* @__PURE__ */ c("p", {
|
|
91
|
+
className: "text-lg font-bold",
|
|
92
|
+
children: v.currentParticipants
|
|
93
|
+
})
|
|
94
|
+
]
|
|
95
|
+
}) }),
|
|
96
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
97
|
+
className: "flex flex-col items-center pt-6 text-center",
|
|
98
|
+
children: [
|
|
99
|
+
/* @__PURE__ */ c(a, { className: "h-6 w-6 text-primary" }),
|
|
100
|
+
/* @__PURE__ */ c("p", {
|
|
101
|
+
className: "mt-2 text-xs text-muted-foreground",
|
|
102
|
+
children: "Mode"
|
|
103
|
+
}),
|
|
104
|
+
/* @__PURE__ */ c("p", {
|
|
105
|
+
className: "text-lg font-bold capitalize",
|
|
106
|
+
children: v.mode
|
|
107
|
+
})
|
|
108
|
+
]
|
|
109
|
+
}) })
|
|
110
|
+
]
|
|
111
|
+
}),
|
|
112
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ l(h, {
|
|
113
|
+
className: "flex items-center gap-2 text-base",
|
|
114
|
+
children: [/* @__PURE__ */ c(r, { className: "h-4 w-4" }), "Schedule"]
|
|
115
|
+
}) }), /* @__PURE__ */ l(p, {
|
|
116
|
+
className: "space-y-3",
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ l("div", {
|
|
119
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
120
|
+
children: [/* @__PURE__ */ c("span", {
|
|
121
|
+
className: "text-sm font-medium",
|
|
122
|
+
children: "Registration Opens"
|
|
123
|
+
}), /* @__PURE__ */ c("span", {
|
|
124
|
+
className: "text-sm text-muted-foreground",
|
|
125
|
+
children: new Date(v.startDate).toLocaleDateString()
|
|
126
|
+
})]
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ l("div", {
|
|
129
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
130
|
+
children: [/* @__PURE__ */ c("span", {
|
|
131
|
+
className: "text-sm font-medium",
|
|
132
|
+
children: "Hacking Begins"
|
|
133
|
+
}), /* @__PURE__ */ c("span", {
|
|
134
|
+
className: "text-sm text-muted-foreground",
|
|
135
|
+
children: new Date(v.startDate).toLocaleDateString()
|
|
136
|
+
})]
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ l("div", {
|
|
139
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
140
|
+
children: [/* @__PURE__ */ c("span", {
|
|
141
|
+
className: "text-sm font-medium",
|
|
142
|
+
children: "Submissions Due"
|
|
143
|
+
}), /* @__PURE__ */ c("span", {
|
|
144
|
+
className: "text-sm text-muted-foreground",
|
|
145
|
+
children: new Date(v.endDate).toLocaleDateString()
|
|
146
|
+
})]
|
|
147
|
+
})
|
|
148
|
+
]
|
|
149
|
+
})] }),
|
|
150
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ c(h, {
|
|
151
|
+
className: "text-base",
|
|
152
|
+
children: "Themes"
|
|
153
|
+
}) }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("div", {
|
|
154
|
+
className: "grid gap-3 sm:grid-cols-3",
|
|
155
|
+
children: v.themes.map((e) => /* @__PURE__ */ c("div", {
|
|
156
|
+
className: "rounded-lg border border-border p-4 text-center",
|
|
157
|
+
children: /* @__PURE__ */ c("p", {
|
|
158
|
+
className: "font-medium",
|
|
159
|
+
children: e
|
|
160
|
+
})
|
|
161
|
+
}, e))
|
|
162
|
+
}) })] })
|
|
163
|
+
]
|
|
164
|
+
}), /* @__PURE__ */ l("div", {
|
|
165
|
+
className: "space-y-4",
|
|
166
|
+
children: [
|
|
167
|
+
/* @__PURE__ */ c(f, { children: /* @__PURE__ */ l(p, {
|
|
168
|
+
className: "space-y-4 pt-6",
|
|
169
|
+
children: [v.status === "registration_open" && /* @__PURE__ */ c(d, {
|
|
170
|
+
className: "w-full",
|
|
171
|
+
size: "lg",
|
|
172
|
+
children: "Register Now"
|
|
173
|
+
}), /* @__PURE__ */ l("div", {
|
|
174
|
+
className: "space-y-2 text-sm",
|
|
175
|
+
children: [/* @__PURE__ */ l("div", {
|
|
176
|
+
className: "flex justify-between",
|
|
177
|
+
children: [/* @__PURE__ */ c("span", {
|
|
178
|
+
className: "text-muted-foreground",
|
|
179
|
+
children: "Spots Left"
|
|
180
|
+
}), /* @__PURE__ */ c("span", {
|
|
181
|
+
className: "font-medium",
|
|
182
|
+
children: x
|
|
183
|
+
})]
|
|
184
|
+
}), /* @__PURE__ */ c("div", {
|
|
185
|
+
className: "h-2 w-full overflow-hidden rounded-full bg-muted",
|
|
186
|
+
children: /* @__PURE__ */ c("div", {
|
|
187
|
+
className: "h-2 rounded-full bg-primary",
|
|
188
|
+
style: { width: `${v.currentParticipants / v.maxParticipants * 100}%` }
|
|
189
|
+
})
|
|
190
|
+
})]
|
|
191
|
+
})]
|
|
192
|
+
}) }),
|
|
193
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ l(h, {
|
|
194
|
+
className: "flex items-center gap-2 text-base",
|
|
195
|
+
children: [/* @__PURE__ */ c(i, { className: "h-4 w-4" }), "Technologies"]
|
|
196
|
+
}) }), /* @__PURE__ */ c(p, { children: /* @__PURE__ */ c("div", {
|
|
197
|
+
className: "flex flex-wrap gap-1.5",
|
|
198
|
+
children: v.technologies.map((e) => /* @__PURE__ */ c(u, {
|
|
199
|
+
variant: "secondary",
|
|
200
|
+
children: e
|
|
201
|
+
}, e))
|
|
202
|
+
}) })] }),
|
|
203
|
+
/* @__PURE__ */ l(f, { children: [/* @__PURE__ */ c(m, { children: /* @__PURE__ */ c(h, {
|
|
204
|
+
className: "text-base",
|
|
205
|
+
children: "Prize Breakdown"
|
|
206
|
+
}) }), /* @__PURE__ */ l(p, {
|
|
207
|
+
className: "space-y-2",
|
|
208
|
+
children: [
|
|
209
|
+
/* @__PURE__ */ l("div", {
|
|
210
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
211
|
+
children: [/* @__PURE__ */ c("span", {
|
|
212
|
+
className: "text-sm font-medium",
|
|
213
|
+
children: "1st Place"
|
|
214
|
+
}), /* @__PURE__ */ l("span", {
|
|
215
|
+
className: "text-sm font-bold",
|
|
216
|
+
children: ["$", Math.round(v.prizePool * .5).toLocaleString()]
|
|
217
|
+
})]
|
|
218
|
+
}),
|
|
219
|
+
/* @__PURE__ */ l("div", {
|
|
220
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
221
|
+
children: [/* @__PURE__ */ c("span", {
|
|
222
|
+
className: "text-sm font-medium",
|
|
223
|
+
children: "2nd Place"
|
|
224
|
+
}), /* @__PURE__ */ l("span", {
|
|
225
|
+
className: "text-sm font-bold",
|
|
226
|
+
children: ["$", Math.round(v.prizePool * .3).toLocaleString()]
|
|
227
|
+
})]
|
|
228
|
+
}),
|
|
229
|
+
/* @__PURE__ */ l("div", {
|
|
230
|
+
className: "flex items-center justify-between rounded-lg border border-border p-3",
|
|
231
|
+
children: [/* @__PURE__ */ c("span", {
|
|
232
|
+
className: "text-sm font-medium",
|
|
233
|
+
children: "3rd Place"
|
|
234
|
+
}), /* @__PURE__ */ l("span", {
|
|
235
|
+
className: "text-sm font-bold",
|
|
236
|
+
children: ["$", Math.round(v.prizePool * .2).toLocaleString()]
|
|
237
|
+
})]
|
|
238
|
+
})
|
|
239
|
+
]
|
|
240
|
+
})] })
|
|
241
|
+
]
|
|
242
|
+
})]
|
|
243
|
+
})
|
|
244
|
+
]
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
//#endregion
|
|
248
|
+
export { _ as HackathonsHackathonDetailsPagePage };
|
|
249
|
+
|
|
250
|
+
//# sourceMappingURL=HackathonsHackathonDetailsPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HackathonsHackathonDetailsPagePage.js","names":[],"sources":["../../../src/technospam/pages/HackathonsHackathonDetailsPagePage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Calendar, Users, Trophy, MapPin, Code, Clock } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\nconst TODAY = Date.now();\n\nexport function HackathonsHackathonDetailsPagePage() {\n const { hackathons } = useTechnoSpamStore();\n const hackathon = hackathons[0];\n\n if (!hackathon) {\n return <div className=\"p-6 text-center text-muted-foreground\">Hackathon not found</div>;\n }\n\n const statusColor = (status: string) => {\n switch (status) {\n case 'registration_open':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400';\n case 'ongoing':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400';\n case 'upcoming':\n return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400';\n default:\n return 'bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400';\n }\n };\n\n const daysUntilStart = Math.max(\n 0,\n Math.ceil((new Date(hackathon.startDate).getTime() - TODAY) / (1000 * 60 * 60 * 24))\n );\n const spotsLeft = hackathon.maxParticipants - hackathon.currentParticipants;\n\n return (\n <div className=\"space-y-6 p-6\">\n <Button variant=\"ghost\" size=\"sm\" className=\"text-muted-foreground\">\n <ArrowLeft className=\"mr-2 h-4 w-4\" />\n Back to Hackathons\n </Button>\n\n {/* Hero */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-3xl font-bold text-foreground\">{hackathon.title}</h1>\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${statusColor(hackathon.status)}`}\n >\n {hackathon.status.replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-lg text-muted-foreground\">{hackathon.description}</p>\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n {/* Main Content */}\n <div className=\"space-y-6 lg:col-span-2\">\n {/* Key Info */}\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardContent className=\"flex flex-col items-center pt-6 text-center\">\n <Calendar className=\"h-6 w-6 text-primary\" />\n <p className=\"mt-2 text-xs text-muted-foreground\">Starts In</p>\n <p className=\"text-lg font-bold\">{daysUntilStart} days</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"flex flex-col items-center pt-6 text-center\">\n <Trophy className=\"h-6 w-6 text-yellow-500\" />\n <p className=\"mt-2 text-xs text-muted-foreground\">Prize Pool</p>\n <p className=\"text-lg font-bold\">${hackathon.prizePool.toLocaleString()}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"flex flex-col items-center pt-6 text-center\">\n <Users className=\"h-6 w-6 text-primary\" />\n <p className=\"mt-2 text-xs text-muted-foreground\">Participants</p>\n <p className=\"text-lg font-bold\">{hackathon.currentParticipants}</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"flex flex-col items-center pt-6 text-center\">\n <MapPin className=\"h-6 w-6 text-primary\" />\n <p className=\"mt-2 text-xs text-muted-foreground\">Mode</p>\n <p className=\"text-lg font-bold capitalize\">{hackathon.mode}</p>\n </CardContent>\n </Card>\n </div>\n\n {/* Schedule */}\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Clock className=\"h-4 w-4\" />\n Schedule\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <span className=\"text-sm font-medium\">Registration Opens</span>\n <span className=\"text-sm text-muted-foreground\">\n {new Date(hackathon.startDate).toLocaleDateString()}\n </span>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <span className=\"text-sm font-medium\">Hacking Begins</span>\n <span className=\"text-sm text-muted-foreground\">\n {new Date(hackathon.startDate).toLocaleDateString()}\n </span>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <span className=\"text-sm font-medium\">Submissions Due</span>\n <span className=\"text-sm text-muted-foreground\">\n {new Date(hackathon.endDate).toLocaleDateString()}\n </span>\n </div>\n </CardContent>\n </Card>\n\n {/* Themes */}\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Themes</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 sm:grid-cols-3\">\n {hackathon.themes.map((theme) => (\n <div key={theme} className=\"rounded-lg border border-border p-4 text-center\">\n <p className=\"font-medium\">{theme}</p>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-4\">\n <Card>\n <CardContent className=\"space-y-4 pt-6\">\n {hackathon.status === 'registration_open' && (\n <Button className=\"w-full\" size=\"lg\">\n Register Now\n </Button>\n )}\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Spots Left</span>\n <span className=\"font-medium\">{spotsLeft}</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={{\n width: `${(hackathon.currentParticipants / hackathon.maxParticipants) * 100}%`,\n }}\n />\n </div>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Code className=\"h-4 w-4\" />\n Technologies\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-wrap gap-1.5\">\n {hackathon.technologies.map((tech) => (\n <Badge key={tech} variant=\"secondary\">\n {tech}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Prize Breakdown</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <span className=\"text-sm font-medium\">1st Place</span>\n <span className=\"text-sm font-bold\">\n ${Math.round(hackathon.prizePool * 0.5).toLocaleString()}\n </span>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <span className=\"text-sm font-medium\">2nd Place</span>\n <span className=\"text-sm font-bold\">\n ${Math.round(hackathon.prizePool * 0.3).toLocaleString()}\n </span>\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <span className=\"text-sm font-medium\">3rd Place</span>\n <span className=\"text-sm font-bold\">\n ${Math.round(hackathon.prizePool * 0.2).toLocaleString()}\n </span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HackathonsHackathonsPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/HackathonsHackathonsPagePage.tsx"],"names":[],"mappings":"AAOA,wBAAgB,4BAA4B,4CAwI3C"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { useTechnoSpamStore as e } from "../store/technospamStore.js";
|
|
2
|
+
import { useMemo as t, useState as n } from "react";
|
|
3
|
+
import { Calendar as r, Clock as i, MapPin as a, Trophy 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 } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/technospam/pages/HackathonsHackathonsPagePage.tsx
|
|
7
|
+
function g() {
|
|
8
|
+
let { hackathons: g, userStats: _ } = e(), [v, y] = n("all"), b = t(() => v === "all" ? g : g.filter((e) => e.status === v), [g, v]), x = (e) => {
|
|
9
|
+
switch (e) {
|
|
10
|
+
case "registration_open": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
|
|
11
|
+
case "ongoing": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
|
|
12
|
+
case "upcoming": return "bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400";
|
|
13
|
+
case "judging": return "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400";
|
|
14
|
+
case "completed": return "bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400";
|
|
15
|
+
default: return "";
|
|
16
|
+
}
|
|
17
|
+
}, S = (e) => e.replace("_", " ");
|
|
18
|
+
return /* @__PURE__ */ l("div", {
|
|
19
|
+
className: "space-y-6 p-6",
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ l("div", {
|
|
22
|
+
className: "flex items-center justify-between",
|
|
23
|
+
children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h1", {
|
|
24
|
+
className: "text-2xl font-semibold text-foreground",
|
|
25
|
+
children: "Hackathons"
|
|
26
|
+
}), /* @__PURE__ */ c("p", {
|
|
27
|
+
className: "text-sm text-muted-foreground",
|
|
28
|
+
children: "Compete, collaborate, and build innovative projects"
|
|
29
|
+
})] }), /* @__PURE__ */ l(u, {
|
|
30
|
+
variant: "secondary",
|
|
31
|
+
children: [_.hackathonsJoined, " joined"]
|
|
32
|
+
})]
|
|
33
|
+
}),
|
|
34
|
+
/* @__PURE__ */ c("div", {
|
|
35
|
+
className: "flex flex-wrap gap-2",
|
|
36
|
+
children: [
|
|
37
|
+
{
|
|
38
|
+
label: "All",
|
|
39
|
+
value: "all"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
label: "Upcoming",
|
|
43
|
+
value: "upcoming"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: "Open",
|
|
47
|
+
value: "registration_open"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
label: "Ongoing",
|
|
51
|
+
value: "ongoing"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
label: "Completed",
|
|
55
|
+
value: "completed"
|
|
56
|
+
}
|
|
57
|
+
].map((e) => /* @__PURE__ */ c(d, {
|
|
58
|
+
variant: v === e.value ? "default" : "outline",
|
|
59
|
+
size: "sm",
|
|
60
|
+
onClick: () => y(e.value),
|
|
61
|
+
children: e.label
|
|
62
|
+
}, e.value))
|
|
63
|
+
}),
|
|
64
|
+
b.length === 0 ? /* @__PURE__ */ c("div", {
|
|
65
|
+
className: "py-12 text-center text-sm text-muted-foreground",
|
|
66
|
+
children: "No hackathons match your filter"
|
|
67
|
+
}) : /* @__PURE__ */ c("div", {
|
|
68
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
69
|
+
children: b.map((e) => /* @__PURE__ */ l(f, { children: [/* @__PURE__ */ l(m, {
|
|
70
|
+
className: "pb-3",
|
|
71
|
+
children: [/* @__PURE__ */ l("div", {
|
|
72
|
+
className: "flex items-start justify-between",
|
|
73
|
+
children: [/* @__PURE__ */ c(h, {
|
|
74
|
+
className: "text-base",
|
|
75
|
+
children: e.title
|
|
76
|
+
}), /* @__PURE__ */ c("span", {
|
|
77
|
+
className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${x(e.status)}`,
|
|
78
|
+
children: S(e.status)
|
|
79
|
+
})]
|
|
80
|
+
}), /* @__PURE__ */ c("p", {
|
|
81
|
+
className: "text-sm text-muted-foreground",
|
|
82
|
+
children: e.description
|
|
83
|
+
})]
|
|
84
|
+
}), /* @__PURE__ */ l(p, {
|
|
85
|
+
className: "space-y-3",
|
|
86
|
+
children: [
|
|
87
|
+
/* @__PURE__ */ l("div", {
|
|
88
|
+
className: "flex flex-wrap items-center gap-3 text-xs text-muted-foreground",
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ l("span", {
|
|
91
|
+
className: "flex items-center gap-1",
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ c(r, { className: "h-3 w-3" }),
|
|
94
|
+
new Date(e.startDate).toLocaleDateString(),
|
|
95
|
+
" -",
|
|
96
|
+
" ",
|
|
97
|
+
new Date(e.endDate).toLocaleDateString()
|
|
98
|
+
]
|
|
99
|
+
}),
|
|
100
|
+
/* @__PURE__ */ l("span", {
|
|
101
|
+
className: "flex items-center gap-1",
|
|
102
|
+
children: [/* @__PURE__ */ c(a, { className: "h-3 w-3" }), e.mode]
|
|
103
|
+
}),
|
|
104
|
+
/* @__PURE__ */ l("span", {
|
|
105
|
+
className: "flex items-center gap-1",
|
|
106
|
+
children: [
|
|
107
|
+
/* @__PURE__ */ c(s, { className: "h-3 w-3" }),
|
|
108
|
+
e.currentParticipants,
|
|
109
|
+
"/",
|
|
110
|
+
e.maxParticipants
|
|
111
|
+
]
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
}),
|
|
115
|
+
/* @__PURE__ */ l("div", {
|
|
116
|
+
className: "flex items-center gap-2",
|
|
117
|
+
children: [/* @__PURE__ */ c(o, { className: "h-4 w-4 text-yellow-500" }), /* @__PURE__ */ l("span", {
|
|
118
|
+
className: "text-sm font-medium",
|
|
119
|
+
children: [
|
|
120
|
+
"$",
|
|
121
|
+
e.prizePool.toLocaleString(),
|
|
122
|
+
" Prize Pool"
|
|
123
|
+
]
|
|
124
|
+
})]
|
|
125
|
+
}),
|
|
126
|
+
/* @__PURE__ */ c("div", {
|
|
127
|
+
className: "flex flex-wrap gap-1",
|
|
128
|
+
children: e.themes.map((e) => /* @__PURE__ */ c(u, {
|
|
129
|
+
variant: "outline",
|
|
130
|
+
className: "text-xs",
|
|
131
|
+
children: e
|
|
132
|
+
}, e))
|
|
133
|
+
}),
|
|
134
|
+
/* @__PURE__ */ c("div", {
|
|
135
|
+
className: "flex flex-wrap gap-1",
|
|
136
|
+
children: e.technologies.map((e) => /* @__PURE__ */ c(u, {
|
|
137
|
+
variant: "secondary",
|
|
138
|
+
className: "text-xs",
|
|
139
|
+
children: e
|
|
140
|
+
}, e))
|
|
141
|
+
}),
|
|
142
|
+
e.status === "registration_open" && /* @__PURE__ */ c(d, {
|
|
143
|
+
size: "sm",
|
|
144
|
+
className: "w-full",
|
|
145
|
+
children: "Register Now"
|
|
146
|
+
}),
|
|
147
|
+
e.status === "upcoming" && /* @__PURE__ */ l(d, {
|
|
148
|
+
variant: "outline",
|
|
149
|
+
size: "sm",
|
|
150
|
+
className: "w-full",
|
|
151
|
+
children: [/* @__PURE__ */ c(i, { className: "mr-2 h-4 w-4" }), "Notify Me"]
|
|
152
|
+
})
|
|
153
|
+
]
|
|
154
|
+
})] }, e.id))
|
|
155
|
+
})
|
|
156
|
+
]
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
//#endregion
|
|
160
|
+
export { g as HackathonsHackathonsPagePage };
|
|
161
|
+
|
|
162
|
+
//# sourceMappingURL=HackathonsHackathonsPagePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HackathonsHackathonsPagePage.js","names":[],"sources":["../../../src/technospam/pages/HackathonsHackathonsPagePage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { Calendar, Users, Trophy, MapPin, Clock } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\ntype StatusFilter = 'all' | 'upcoming' | 'registration_open' | 'ongoing' | 'completed';\n\nexport function HackathonsHackathonsPagePage() {\n const { hackathons, userStats } = useTechnoSpamStore();\n const [statusFilter, setStatusFilter] = useState<StatusFilter>('all');\n\n const filteredHackathons = useMemo(() => {\n if (statusFilter === 'all') return hackathons;\n return hackathons.filter((h) => h.status === statusFilter);\n }, [hackathons, statusFilter]);\n\n const statusColor = (status: string) => {\n switch (status) {\n case 'registration_open':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400';\n case 'ongoing':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400';\n case 'upcoming':\n return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400';\n case 'judging':\n return 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400';\n case 'completed':\n return 'bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-400';\n default:\n return '';\n }\n };\n\n const formatStatus = (s: string) => s.replace('_', ' ');\n\n const filters: { label: string; value: StatusFilter }[] = [\n { label: 'All', value: 'all' },\n { label: 'Upcoming', value: 'upcoming' },\n { label: 'Open', value: 'registration_open' },\n { label: 'Ongoing', value: 'ongoing' },\n { label: 'Completed', value: 'completed' },\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\">Hackathons</h1>\n <p className=\"text-sm text-muted-foreground\">\n Compete, collaborate, and build innovative projects\n </p>\n </div>\n <Badge variant=\"secondary\">{userStats.hackathonsJoined} joined</Badge>\n </div>\n\n {/* Filters */}\n <div className=\"flex flex-wrap gap-2\">\n {filters.map((f) => (\n <Button\n key={f.value}\n variant={statusFilter === f.value ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setStatusFilter(f.value)}\n >\n {f.label}\n </Button>\n ))}\n </div>\n\n {/* Hackathon Cards */}\n {filteredHackathons.length === 0 ? (\n <div className=\"py-12 text-center text-sm text-muted-foreground\">\n No hackathons match your filter\n </div>\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2\">\n {filteredHackathons.map((hack) => (\n <Card key={hack.id}>\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-start justify-between\">\n <CardTitle className=\"text-base\">{hack.title}</CardTitle>\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium capitalize ${statusColor(hack.status)}`}\n >\n {formatStatus(hack.status)}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground\">{hack.description}</p>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n {new Date(hack.startDate).toLocaleDateString()} -{' '}\n {new Date(hack.endDate).toLocaleDateString()}\n </span>\n <span className=\"flex items-center gap-1\">\n <MapPin className=\"h-3 w-3\" />\n {hack.mode}\n </span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {hack.currentParticipants}/{hack.maxParticipants}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Trophy className=\"h-4 w-4 text-yellow-500\" />\n <span className=\"text-sm font-medium\">\n ${hack.prizePool.toLocaleString()} Prize Pool\n </span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {hack.themes.map((theme) => (\n <Badge key={theme} variant=\"outline\" className=\"text-xs\">\n {theme}\n </Badge>\n ))}\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {hack.technologies.map((tech) => (\n <Badge key={tech} variant=\"secondary\" className=\"text-xs\">\n {tech}\n </Badge>\n ))}\n </div>\n {hack.status === 'registration_open' && (\n <Button size=\"sm\" className=\"w-full\">\n Register Now\n </Button>\n )}\n {hack.status === 'upcoming' && (\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\">\n <Clock className=\"mr-2 h-4 w-4\" />\n Notify Me\n </Button>\n )}\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HackathonsTeamsPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/HackathonsTeamsPagePage.tsx"],"names":[],"mappings":"AA0CA,wBAAgB,uBAAuB,4CAkGtC"}
|