@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.
Files changed (202) hide show
  1. package/README.md +12 -0
  2. package/dist/dev/main.d.ts +2 -0
  3. package/dist/dev/main.d.ts.map +1 -0
  4. package/dist/generated/global-operations.d.ts +2 -0
  5. package/dist/generated/global-operations.d.ts.map +1 -0
  6. package/dist/generated/global-types.d.ts +18199 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/wspace-operations.d.ts +2 -0
  9. package/dist/generated/wspace-operations.d.ts.map +1 -0
  10. package/dist/generated/wspace-types.d.ts +43046 -0
  11. package/dist/generated/wspace-types.d.ts.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +5 -0
  15. package/dist/technospam/TechnoSpamRoot.d.ts +5 -0
  16. package/dist/technospam/TechnoSpamRoot.d.ts.map +1 -0
  17. package/dist/technospam/TechnoSpamRoot.js +482 -0
  18. package/dist/technospam/TechnoSpamRoot.js.map +1 -0
  19. package/dist/technospam/TechnoSpamRoutes.d.ts +2 -0
  20. package/dist/technospam/TechnoSpamRoutes.d.ts.map +1 -0
  21. package/dist/technospam/TechnoSpamRoutes.js +191 -0
  22. package/dist/technospam/TechnoSpamRoutes.js.map +1 -0
  23. package/dist/technospam/index.d.ts +5 -0
  24. package/dist/technospam/index.d.ts.map +1 -0
  25. package/dist/technospam/index.js +3 -0
  26. package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts +2 -0
  27. package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -0
  28. package/dist/technospam/pages/AdminAdminDashboardPagePage.js +269 -0
  29. package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -0
  30. package/dist/technospam/pages/AdminAuditReportsPagePage.d.ts +2 -0
  31. package/dist/technospam/pages/AdminAuditReportsPagePage.d.ts.map +1 -0
  32. package/dist/technospam/pages/AdminAuditReportsPagePage.js +179 -0
  33. package/dist/technospam/pages/AdminAuditReportsPagePage.js.map +1 -0
  34. package/dist/technospam/pages/AnalyticsAchievementsPagePage.d.ts +2 -0
  35. package/dist/technospam/pages/AnalyticsAchievementsPagePage.d.ts.map +1 -0
  36. package/dist/technospam/pages/AnalyticsAchievementsPagePage.js +149 -0
  37. package/dist/technospam/pages/AnalyticsAchievementsPagePage.js.map +1 -0
  38. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts +2 -0
  39. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -0
  40. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +260 -0
  41. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -0
  42. package/dist/technospam/pages/AnalyticsProgressPagePage.d.ts +2 -0
  43. package/dist/technospam/pages/AnalyticsProgressPagePage.d.ts.map +1 -0
  44. package/dist/technospam/pages/AnalyticsProgressPagePage.js +215 -0
  45. package/dist/technospam/pages/AnalyticsProgressPagePage.js.map +1 -0
  46. package/dist/technospam/pages/AnalyticsReportsPagePage.d.ts +2 -0
  47. package/dist/technospam/pages/AnalyticsReportsPagePage.d.ts.map +1 -0
  48. package/dist/technospam/pages/AnalyticsReportsPagePage.js +145 -0
  49. package/dist/technospam/pages/AnalyticsReportsPagePage.js.map +1 -0
  50. package/dist/technospam/pages/ApplicationsPortfolioPagePage.d.ts +2 -0
  51. package/dist/technospam/pages/ApplicationsPortfolioPagePage.d.ts.map +1 -0
  52. package/dist/technospam/pages/ApplicationsPortfolioPagePage.js +227 -0
  53. package/dist/technospam/pages/ApplicationsPortfolioPagePage.js.map +1 -0
  54. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts +2 -0
  55. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts.map +1 -0
  56. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +194 -0
  57. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -0
  58. package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts +2 -0
  59. package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts.map +1 -0
  60. package/dist/technospam/pages/ApplicationsProblemsPagePage.js +203 -0
  61. package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -0
  62. package/dist/technospam/pages/ApplicationsSolutionsPagePage.d.ts +2 -0
  63. package/dist/technospam/pages/ApplicationsSolutionsPagePage.d.ts.map +1 -0
  64. package/dist/technospam/pages/ApplicationsSolutionsPagePage.js +182 -0
  65. package/dist/technospam/pages/ApplicationsSolutionsPagePage.js.map +1 -0
  66. package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts +2 -0
  67. package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -0
  68. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +261 -0
  69. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -0
  70. package/dist/technospam/pages/CoursesCoursesPagePage.d.ts +2 -0
  71. package/dist/technospam/pages/CoursesCoursesPagePage.d.ts.map +1 -0
  72. package/dist/technospam/pages/CoursesCoursesPagePage.js +179 -0
  73. package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -0
  74. package/dist/technospam/pages/CoursesInstructorProfilePagePage.d.ts +2 -0
  75. package/dist/technospam/pages/CoursesInstructorProfilePagePage.d.ts.map +1 -0
  76. package/dist/technospam/pages/CoursesInstructorProfilePagePage.js +346 -0
  77. package/dist/technospam/pages/CoursesInstructorProfilePagePage.js.map +1 -0
  78. package/dist/technospam/pages/CoursesInstructorsPagePage.d.ts +2 -0
  79. package/dist/technospam/pages/CoursesInstructorsPagePage.d.ts.map +1 -0
  80. package/dist/technospam/pages/CoursesInstructorsPagePage.js +104 -0
  81. package/dist/technospam/pages/CoursesInstructorsPagePage.js.map +1 -0
  82. package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts +2 -0
  83. package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts.map +1 -0
  84. package/dist/technospam/pages/CoursesMyLearningPagePage.js +187 -0
  85. package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -0
  86. package/dist/technospam/pages/DashboardDashboardPagePage.d.ts +2 -0
  87. package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -0
  88. package/dist/technospam/pages/DashboardDashboardPagePage.js +344 -0
  89. package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -0
  90. package/dist/technospam/pages/HackathonsEventsPagePage.d.ts +2 -0
  91. package/dist/technospam/pages/HackathonsEventsPagePage.d.ts.map +1 -0
  92. package/dist/technospam/pages/HackathonsEventsPagePage.js +121 -0
  93. package/dist/technospam/pages/HackathonsEventsPagePage.js.map +1 -0
  94. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts +2 -0
  95. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts.map +1 -0
  96. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js +250 -0
  97. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js.map +1 -0
  98. package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts +2 -0
  99. package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts.map +1 -0
  100. package/dist/technospam/pages/HackathonsHackathonsPagePage.js +162 -0
  101. package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -0
  102. package/dist/technospam/pages/HackathonsTeamsPagePage.d.ts +2 -0
  103. package/dist/technospam/pages/HackathonsTeamsPagePage.d.ts.map +1 -0
  104. package/dist/technospam/pages/HackathonsTeamsPagePage.js +185 -0
  105. package/dist/technospam/pages/HackathonsTeamsPagePage.js.map +1 -0
  106. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.d.ts +2 -0
  107. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.d.ts.map +1 -0
  108. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.js +181 -0
  109. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.js.map +1 -0
  110. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.d.ts +2 -0
  111. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.d.ts.map +1 -0
  112. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.js +112 -0
  113. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.js.map +1 -0
  114. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.d.ts +2 -0
  115. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.d.ts.map +1 -0
  116. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.js +105 -0
  117. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.js.map +1 -0
  118. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.d.ts +2 -0
  119. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.d.ts.map +1 -0
  120. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.js +165 -0
  121. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.js.map +1 -0
  122. package/dist/technospam/pages/MentorshipBookingsPagePage.d.ts +2 -0
  123. package/dist/technospam/pages/MentorshipBookingsPagePage.d.ts.map +1 -0
  124. package/dist/technospam/pages/MentorshipBookingsPagePage.js +188 -0
  125. package/dist/technospam/pages/MentorshipBookingsPagePage.js.map +1 -0
  126. package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts +2 -0
  127. package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts.map +1 -0
  128. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +310 -0
  129. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -0
  130. package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts +2 -0
  131. package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts.map +1 -0
  132. package/dist/technospam/pages/MentorshipMentorsPagePage.js +128 -0
  133. package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -0
  134. package/dist/technospam/pages/MentorshipMentorshipPagePage.d.ts +2 -0
  135. package/dist/technospam/pages/MentorshipMentorshipPagePage.d.ts.map +1 -0
  136. package/dist/technospam/pages/MentorshipMentorshipPagePage.js +209 -0
  137. package/dist/technospam/pages/MentorshipMentorshipPagePage.js.map +1 -0
  138. package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts +2 -0
  139. package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts.map +1 -0
  140. package/dist/technospam/pages/MentorshipSessionsPagePage.js +170 -0
  141. package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -0
  142. package/dist/technospam/pages/OpenSourceContributionsPagePage.d.ts +2 -0
  143. package/dist/technospam/pages/OpenSourceContributionsPagePage.d.ts.map +1 -0
  144. package/dist/technospam/pages/OpenSourceContributionsPagePage.js +191 -0
  145. package/dist/technospam/pages/OpenSourceContributionsPagePage.js.map +1 -0
  146. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.d.ts +2 -0
  147. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.d.ts.map +1 -0
  148. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.js +216 -0
  149. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.js.map +1 -0
  150. package/dist/technospam/pages/OpenSourceProjectsPagePage.d.ts +2 -0
  151. package/dist/technospam/pages/OpenSourceProjectsPagePage.d.ts.map +1 -0
  152. package/dist/technospam/pages/OpenSourceProjectsPagePage.js +150 -0
  153. package/dist/technospam/pages/OpenSourceProjectsPagePage.js.map +1 -0
  154. package/dist/technospam/pages/StudyPlannerGoalsPagePage.d.ts +2 -0
  155. package/dist/technospam/pages/StudyPlannerGoalsPagePage.d.ts.map +1 -0
  156. package/dist/technospam/pages/StudyPlannerGoalsPagePage.js +161 -0
  157. package/dist/technospam/pages/StudyPlannerGoalsPagePage.js.map +1 -0
  158. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.d.ts +2 -0
  159. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.d.ts.map +1 -0
  160. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.js +198 -0
  161. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.js.map +1 -0
  162. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.d.ts +2 -0
  163. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.d.ts.map +1 -0
  164. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.js +105 -0
  165. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.js.map +1 -0
  166. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.d.ts +2 -0
  167. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.d.ts.map +1 -0
  168. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.js +161 -0
  169. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.js.map +1 -0
  170. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.d.ts +2 -0
  171. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.d.ts.map +1 -0
  172. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.js +127 -0
  173. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.js.map +1 -0
  174. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.d.ts +2 -0
  175. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.d.ts.map +1 -0
  176. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js +238 -0
  177. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js.map +1 -0
  178. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.d.ts +2 -0
  179. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.d.ts.map +1 -0
  180. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.js +113 -0
  181. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.js.map +1 -0
  182. package/dist/technospam/providers/TechnoSpamProvider.d.ts +6 -0
  183. package/dist/technospam/providers/TechnoSpamProvider.d.ts.map +1 -0
  184. package/dist/technospam/providers/TechnoSpamProvider.js +27 -0
  185. package/dist/technospam/providers/TechnoSpamProvider.js.map +1 -0
  186. package/dist/technospam/store/technospamStore.d.ts +190 -0
  187. package/dist/technospam/store/technospamStore.d.ts.map +1 -0
  188. package/dist/technospam/store/technospamStore.js +912 -0
  189. package/dist/technospam/store/technospamStore.js.map +1 -0
  190. package/dist/technospam/types/index.d.ts +51 -0
  191. package/dist/technospam/types/index.d.ts.map +1 -0
  192. package/dist/technospam/utils/cn.d.ts +4 -0
  193. package/dist/technospam/utils/cn.d.ts.map +1 -0
  194. package/dist/technospam/utils/i18n.d.ts +6 -0
  195. package/dist/technospam/utils/i18n.d.ts.map +1 -0
  196. package/dist/technospam/utils/i18n.js +15 -0
  197. package/dist/technospam/utils/i18n.js.map +1 -0
  198. package/dist/technospam/utils/navigation.d.ts +2 -0
  199. package/dist/technospam/utils/navigation.d.ts.map +1 -0
  200. package/dist/technospam/utils/navigation.js +8 -0
  201. package/dist/technospam/utils/navigation.js.map +1 -0
  202. 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,2 @@
1
+ export declare function HackathonsHackathonDetailsPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=HackathonsHackathonDetailsPagePage.d.ts.map
@@ -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,2 @@
1
+ export declare function HackathonsHackathonsPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=HackathonsHackathonsPagePage.d.ts.map
@@ -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,2 @@
1
+ export declare function HackathonsTeamsPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=HackathonsTeamsPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HackathonsTeamsPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/HackathonsTeamsPagePage.tsx"],"names":[],"mappings":"AA0CA,wBAAgB,uBAAuB,4CAkGtC"}