@burdenoff/microfe-technospam 2026.704.2 → 2026.705.2

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 (40) hide show
  1. package/dist/technospam/api/technospamApi.js +233 -150
  2. package/dist/technospam/api/technospamApi.js.map +1 -1
  3. package/dist/technospam/components/LoadMore.js +18 -2
  4. package/dist/technospam/components/LoadMore.js.map +1 -0
  5. package/dist/technospam/components/MediaCover.js +57 -0
  6. package/dist/technospam/components/MediaCover.js.map +1 -0
  7. package/dist/technospam/components/PageLayout.js +1 -1
  8. package/dist/technospam/components/PageLayout.js.map +1 -1
  9. package/dist/technospam/components/StatCard.js +19 -11
  10. package/dist/technospam/components/StatCard.js.map +1 -1
  11. package/dist/technospam/components/StatusBadge.js +1 -1
  12. package/dist/technospam/components/StatusBadge.js.map +1 -1
  13. package/dist/technospam/components/index.js +1 -0
  14. package/dist/technospam/pages/AdminAdminDashboardPagePage.js +748 -352
  15. package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -1
  16. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +167 -127
  17. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  18. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +178 -125
  19. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -1
  20. package/dist/technospam/pages/ApplicationsProblemsPagePage.js +89 -93
  21. package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -1
  22. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +295 -141
  23. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
  24. package/dist/technospam/pages/CoursesCoursesPagePage.js +86 -86
  25. package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -1
  26. package/dist/technospam/pages/CoursesMyLearningPagePage.js +122 -88
  27. package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -1
  28. package/dist/technospam/pages/DashboardDashboardPagePage.js +232 -199
  29. package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -1
  30. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js +128 -106
  31. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js.map +1 -1
  32. package/dist/technospam/pages/HackathonsHackathonsPagePage.js +89 -73
  33. package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -1
  34. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +171 -115
  35. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -1
  36. package/dist/technospam/pages/MentorshipMentorsPagePage.js +214 -151
  37. package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -1
  38. package/dist/technospam/pages/MentorshipSessionsPagePage.js +241 -116
  39. package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -1
  40. package/package.json +1 -1
@@ -1,23 +1,24 @@
1
1
  import { useTechnoSpam as e, useTechnoSpamNavigate as t } from "../providers/TechnoSpamProvider.js";
2
2
  import { PageLayout as n } from "../components/PageLayout.js";
3
3
  import { StatCard as r } from "../components/StatCard.js";
4
- import { formatDate as i, formatDateTime as a, formatMoney as o } from "../utils/format.js";
5
- import { StatusBadge as s } from "../components/StatusBadge.js";
6
- import { EmptyView as c, ErrorView as l, LoadingRows as u } from "../components/StateViews.js";
4
+ import { MediaCover as i, topicIcon as a } from "../components/MediaCover.js";
5
+ import { formatDate as o, formatDateTime as s, formatMoney as c } from "../utils/format.js";
6
+ import { StatusBadge as l } from "../components/StatusBadge.js";
7
+ import { EmptyView as u, ErrorView as d, LoadingRows as f } from "../components/StateViews.js";
7
8
  import "../components/index.js";
8
- import { useCertificatesQuery as d, useCoursesQuery as f, useEnrollmentsQuery as ee, useHackathonsQuery as p, useSessionsQuery as m, useSubmissionsQuery as h } from "../api/technospamApi.js";
9
- import { useMemo as g, useState as te } from "react";
10
- import { ArrowRight as _, Award as v, BookOpen as y, Calendar as b, CalendarClock as x, CheckCircle2 as S, Code2 as C, GraduationCap as w, PlayCircle as T, Trophy as E, Users as D } from "lucide-react";
11
- import { jsx as O, jsxs as k } from "react/jsx-runtime";
12
- import { Button as A, GlassCard as j } from "@burdenoff/fe-libs/ui";
9
+ import { useCertificatesQuery as p, useCoursesQuery as m, useEnrollmentsQuery as h, useHackathonsQuery as g, useSessionsQuery as _, useSubmissionsQuery as v } from "../api/technospamApi.js";
10
+ import { useMemo as y, useState as b } from "react";
11
+ import { ArrowRight as x, Award as S, BookOpen as C, Calendar as w, CalendarClock as T, CheckCircle2 as E, Clock as D, Code2 as O, GraduationCap as k, PlayCircle as A, Trophy as j, Users as M } from "lucide-react";
12
+ import { jsx as N, jsxs as P } from "react/jsx-runtime";
13
+ import { Button as F, GlassCard as I } from "@burdenoff/fe-libs/ui";
13
14
  //#region src/technospam/pages/DashboardDashboardPagePage.tsx
14
- function M({ title: e, actionLabel: t, onAction: n }) {
15
- return /* @__PURE__ */ k("div", {
15
+ function L({ title: e, actionLabel: t, onAction: n }) {
16
+ return /* @__PURE__ */ P("div", {
16
17
  className: "mb-3 flex items-center justify-between",
17
- children: [/* @__PURE__ */ O("h2", {
18
+ children: [/* @__PURE__ */ N("h2", {
18
19
  className: "text-base font-semibold text-text-primary",
19
20
  children: e
20
- }), t && n ? /* @__PURE__ */ k(A, {
21
+ }), t && n ? /* @__PURE__ */ P(F, {
21
22
  variant: "ghost",
22
23
  size: "sm",
23
24
  className: "text-xs",
@@ -25,337 +26,369 @@ function M({ title: e, actionLabel: t, onAction: n }) {
25
26
  children: [
26
27
  t,
27
28
  " ",
28
- /* @__PURE__ */ O(_, { size: 13 })
29
+ /* @__PURE__ */ N(x, { size: 13 })
29
30
  ]
30
31
  }) : null]
31
32
  });
32
33
  }
33
- function N({ pct: e }) {
34
- return /* @__PURE__ */ O("div", {
34
+ function R({ pct: e }) {
35
+ return /* @__PURE__ */ N("div", {
35
36
  className: "h-1.5 w-full overflow-hidden rounded-full bg-bg-sunken",
36
- children: /* @__PURE__ */ O("div", {
37
+ children: /* @__PURE__ */ N("div", {
37
38
  className: "h-full rounded-full bg-accent-primary transition-all",
38
39
  style: { width: `${Math.max(0, Math.min(100, e))}%` }
39
40
  })
40
41
  });
41
42
  }
42
- function P({ e, onOpen: t }) {
43
- return /* @__PURE__ */ k("button", {
43
+ function z({ e, onOpen: t }) {
44
+ let n = e.course?.title ?? "Course";
45
+ return /* @__PURE__ */ P("button", {
44
46
  type: "button",
45
47
  onClick: t,
46
- className: "group flex w-full items-center gap-4 rounded-xl border border-border-seam bg-bg-surface p-3.5 text-left transition-shadow hover:shadow-md focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
47
- children: [
48
- /* @__PURE__ */ O("span", {
49
- className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-accent-wash text-accent-primary",
50
- children: /* @__PURE__ */ O(y, { size: 18 })
51
- }),
52
- /* @__PURE__ */ k("div", {
53
- className: "min-w-0 flex-1",
54
- children: [/* @__PURE__ */ k("div", {
55
- className: "flex items-center gap-2",
56
- children: [/* @__PURE__ */ O("span", {
57
- className: "truncate text-sm font-medium text-text-primary group-hover:text-accent-primary",
58
- children: e.course?.title ?? "Course"
59
- }), /* @__PURE__ */ O(s, { status: e.status })]
60
- }), /* @__PURE__ */ k("div", {
61
- className: "mt-1.5 flex items-center gap-3",
62
- children: [/* @__PURE__ */ O("div", {
63
- className: "flex-1",
64
- children: /* @__PURE__ */ O(N, { pct: e.progressPct })
65
- }), /* @__PURE__ */ k("span", {
66
- className: "shrink-0 text-xs font-medium text-text-secondary",
67
- children: [e.progressPct, "%"]
68
- })]
48
+ className: "group flex flex-col overflow-hidden rounded-xl border border-border-seam bg-bg-surface text-left transition-all duration-200 hover:-translate-y-1 hover:shadow-lg focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
49
+ children: [/* @__PURE__ */ P(i, {
50
+ seed: `${e.course?.topic ?? ""} ${n}`,
51
+ icon: a(e.course?.topic ?? n),
52
+ height: "h-20",
53
+ children: [e.course?.level ? /* @__PURE__ */ N(l, {
54
+ status: e.course.level,
55
+ kind: "level"
56
+ }) : /* @__PURE__ */ N("span", {}), /* @__PURE__ */ N("span", {
57
+ className: "flex h-7 w-7 items-center justify-center rounded-full bg-white/15 text-white backdrop-blur transition-transform duration-200 group-hover:scale-110",
58
+ children: /* @__PURE__ */ N(A, { size: 16 })
59
+ })]
60
+ }), /* @__PURE__ */ P("div", {
61
+ className: "flex flex-1 flex-col gap-2.5 p-3.5",
62
+ children: [/* @__PURE__ */ P("div", {
63
+ className: "flex items-start gap-2",
64
+ children: [/* @__PURE__ */ N("h3", {
65
+ className: "line-clamp-2 flex-1 text-sm font-semibold text-text-primary group-hover:text-accent-primary",
66
+ children: n
67
+ }), /* @__PURE__ */ N(l, { status: e.status })]
68
+ }), /* @__PURE__ */ P("div", {
69
+ className: "mt-auto flex items-center gap-2.5",
70
+ children: [/* @__PURE__ */ N("div", {
71
+ className: "flex-1",
72
+ children: /* @__PURE__ */ N(R, { pct: e.progressPct })
73
+ }), /* @__PURE__ */ P("span", {
74
+ className: "shrink-0 text-xs font-semibold text-text-secondary",
75
+ children: [e.progressPct, "%"]
69
76
  })]
70
- }),
71
- /* @__PURE__ */ O(T, {
72
- size: 18,
73
- className: "shrink-0 text-text-muted transition-colors group-hover:text-accent-primary"
74
- })
75
- ]
77
+ })]
78
+ })]
76
79
  });
77
80
  }
78
- function F({ course: e, onOpen: t }) {
79
- return /* @__PURE__ */ k("button", {
81
+ function B({ course: e, onOpen: t }) {
82
+ return /* @__PURE__ */ P("button", {
80
83
  type: "button",
81
84
  onClick: t,
82
- className: "group flex w-full flex-col gap-2 rounded-xl border border-border-seam bg-bg-surface p-4 text-left transition-shadow hover:shadow-md focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
83
- children: [
84
- /* @__PURE__ */ k("div", {
85
- className: "flex items-center gap-2",
86
- children: [/* @__PURE__ */ O(s, {
87
- status: e.level,
88
- kind: "level"
89
- }), e.topic ? /* @__PURE__ */ O("span", {
90
- className: "truncate text-xs text-text-muted",
85
+ className: "group flex w-full flex-col overflow-hidden rounded-xl border border-border-seam bg-bg-surface text-left transition-all duration-200 hover:-translate-y-1 hover:shadow-lg focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
86
+ children: [/* @__PURE__ */ N(i, {
87
+ seed: `${e.topic ?? ""} ${e.title}`,
88
+ icon: a(e.topic ?? e.title),
89
+ height: "h-20",
90
+ children: /* @__PURE__ */ N(l, {
91
+ status: e.level,
92
+ kind: "level"
93
+ })
94
+ }), /* @__PURE__ */ P("div", {
95
+ className: "flex flex-1 flex-col gap-1.5 p-3.5",
96
+ children: [
97
+ /* @__PURE__ */ N("h3", {
98
+ className: "truncate text-sm font-semibold text-text-primary group-hover:text-accent-primary",
99
+ children: e.title
100
+ }),
101
+ e.summary ? /* @__PURE__ */ N("p", {
102
+ className: "line-clamp-2 text-xs text-text-secondary",
103
+ children: e.summary
104
+ }) : null,
105
+ e.topic ? /* @__PURE__ */ N("span", {
106
+ className: "mt-auto truncate pt-0.5 text-xs text-text-muted",
91
107
  children: e.topic
92
- }) : null]
93
- }),
94
- /* @__PURE__ */ O("h3", {
95
- className: "truncate text-sm font-semibold text-text-primary group-hover:text-accent-primary",
96
- children: e.title
97
- }),
98
- e.summary ? /* @__PURE__ */ O("p", {
99
- className: "line-clamp-2 text-xs text-text-secondary",
100
- children: e.summary
101
- }) : null
102
- ]
108
+ }) : null
109
+ ]
110
+ })]
103
111
  });
104
112
  }
105
- function I({ s: e }) {
106
- return /* @__PURE__ */ k("div", {
107
- className: "flex items-start gap-3 border-b border-border-seam py-3 last:border-0",
108
- children: [/* @__PURE__ */ O("span", {
109
- className: "mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-accent-wash text-accent-teal",
110
- children: /* @__PURE__ */ O(x, { size: 16 })
111
- }), /* @__PURE__ */ k("div", {
113
+ function V({ s: e }) {
114
+ return /* @__PURE__ */ P("div", {
115
+ className: "-mx-2 flex items-start gap-3 rounded-lg border-b border-border-seam px-2 py-3 transition-colors last:border-0 hover:bg-bg-sunken",
116
+ children: [/* @__PURE__ */ N("span", {
117
+ className: "mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-accent-teal/15 text-accent-teal ring-1 ring-accent-teal/20",
118
+ children: /* @__PURE__ */ N(T, { size: 16 })
119
+ }), /* @__PURE__ */ P("div", {
112
120
  className: "min-w-0 flex-1",
113
121
  children: [
114
- /* @__PURE__ */ k("div", {
122
+ /* @__PURE__ */ P("div", {
115
123
  className: "flex items-center gap-2",
116
- children: [/* @__PURE__ */ O("span", {
124
+ children: [/* @__PURE__ */ N("span", {
117
125
  className: "truncate text-sm font-medium text-text-primary",
118
126
  children: e.topic
119
- }), /* @__PURE__ */ O(s, { status: e.status })]
127
+ }), /* @__PURE__ */ N(l, { status: e.status })]
120
128
  }),
121
- e.mentor?.headline ? /* @__PURE__ */ O("div", {
129
+ e.mentor?.headline ? /* @__PURE__ */ N("div", {
122
130
  className: "truncate text-xs text-text-muted",
123
131
  children: e.mentor.headline
124
132
  }) : null,
125
- /* @__PURE__ */ O("div", {
126
- className: "mt-0.5 text-xs text-text-secondary",
127
- children: a(e.scheduledAt)
133
+ /* @__PURE__ */ P("div", {
134
+ className: "mt-0.5 flex items-center gap-1.5 text-xs text-text-secondary",
135
+ children: [/* @__PURE__ */ N(D, {
136
+ size: 12,
137
+ className: "text-text-muted"
138
+ }), s(e.scheduledAt)]
128
139
  })
129
140
  ]
130
141
  })]
131
142
  });
132
143
  }
133
- function L({ h: e, onOpen: t }) {
134
- return /* @__PURE__ */ k("button", {
144
+ function H({ h: e, onOpen: t }) {
145
+ return /* @__PURE__ */ P("button", {
135
146
  type: "button",
136
147
  onClick: t,
137
- className: "group flex w-full flex-col gap-1.5 border-b border-border-seam py-3 text-left last:border-0 focus-visible:outline-none",
138
- children: [/* @__PURE__ */ k("div", {
139
- className: "flex items-center justify-between gap-2",
140
- children: [/* @__PURE__ */ O("span", {
141
- className: "truncate text-sm font-medium text-text-primary group-hover:text-accent-primary",
142
- children: e.title
143
- }), e.prizePool > 0 ? /* @__PURE__ */ O("span", {
144
- className: "shrink-0 text-xs font-semibold text-accent-teal",
145
- children: o(e.prizePool, e.currency)
148
+ className: "group block w-full overflow-hidden rounded-xl border border-border-seam text-left transition-all duration-200 hover:-translate-y-1 hover:shadow-lg focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
149
+ children: [/* @__PURE__ */ P(i, {
150
+ seed: `${e.theme ?? ""} ${e.title}`,
151
+ icon: j,
152
+ height: "h-24",
153
+ children: [/* @__PURE__ */ P("div", {
154
+ className: "min-w-0",
155
+ children: [/* @__PURE__ */ P("div", {
156
+ className: "flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide text-white/80",
157
+ children: [/* @__PURE__ */ N(j, { size: 12 }), " Open hackathon"]
158
+ }), /* @__PURE__ */ N("h3", {
159
+ className: "mt-0.5 truncate text-sm font-semibold text-white drop-shadow-sm",
160
+ children: e.title
161
+ })]
162
+ }), e.prizePool > 0 ? /* @__PURE__ */ N("span", {
163
+ className: "shrink-0 rounded-full bg-white/20 px-2.5 py-1 text-xs font-semibold text-white backdrop-blur",
164
+ children: c(e.prizePool, e.currency)
146
165
  }) : null]
147
- }), /* @__PURE__ */ k("div", {
148
- className: "flex items-center gap-1.5 text-xs text-text-muted",
149
- children: [/* @__PURE__ */ O(b, { size: 12 }), /* @__PURE__ */ k("span", { children: [
150
- i(e.startAt),
151
- " – ",
152
- i(e.endAt)
153
- ] })]
166
+ }), /* @__PURE__ */ P("div", {
167
+ className: "flex items-center justify-between gap-2 bg-bg-surface px-3.5 py-2.5",
168
+ children: [/* @__PURE__ */ P("span", {
169
+ className: "flex items-center gap-1.5 text-xs text-text-muted",
170
+ children: [
171
+ /* @__PURE__ */ N(w, { size: 12 }),
172
+ o(e.startAt),
173
+ " – ",
174
+ o(e.endAt)
175
+ ]
176
+ }), /* @__PURE__ */ P("span", {
177
+ className: "flex items-center gap-1 text-xs font-medium text-accent-primary opacity-0 transition-opacity group-hover:opacity-100",
178
+ children: ["Register ", /* @__PURE__ */ N(x, { size: 12 })]
179
+ })]
154
180
  })]
155
181
  });
156
182
  }
157
- function R() {
158
- let a = t(), { currentUser: o } = e(), s = o?.id, _ = ee(s ? { learnerId: s } : {}), b = h(s ? { learnerId: s } : {}), T = m(s ? { menteeId: s } : {}), N = d(s ? { learnerId: s } : {}), R = f({ status: "PUBLISHED" }), z = p({ status: "REGISTRATION_OPEN" }), B = _.data?.tecListEnrollments.items ?? [], V = b.data?.tecListSubmissions.items ?? [], H = T.data?.tecListSessions ?? [], U = N.data?.tecListCertificates ?? [], W = R.data?.tecListCourses.items ?? [], G = z.data?.tecListHackathons.items ?? [], K = o?.firstName || o?.name || o?.email?.split("@")[0] || "there", q = g(() => B.filter((e) => e.status === "IN_PROGRESS" || e.status === "ENROLLED"), [B]), J = g(() => [...q].sort((e, t) => new Date(t.lastActiveAt ?? t.startedAt).getTime() - new Date(e.lastActiveAt ?? e.startedAt).getTime()).slice(0, 3), [q]), Y = g(() => new Set(V.filter((e) => e.verdict === "ACCEPTED").map((e) => e.problemId)).size, [V]), [X] = te(() => Date.now()), Z = g(() => [...H].filter((e) => (e.status === "CONFIRMED" || e.status === "REQUESTED") && new Date(e.scheduledAt).getTime() > X).sort((e, t) => new Date(e.scheduledAt).getTime() - new Date(t.scheduledAt).getTime()), [H, X]), Q = g(() => {
159
- let e = new Set(B.map((e) => e.courseId));
160
- return W.filter((t) => !e.has(t.id)).slice(0, 4);
161
- }, [W, B]), $ = G.slice(0, 4);
162
- return /* @__PURE__ */ k(n, {
183
+ function U() {
184
+ let i = t(), { currentUser: a } = e(), s = a?.id, c = h(s ? { learnerId: s } : {}), l = v(s ? { learnerId: s } : {}), x = _(s ? { menteeId: s } : {}), w = p(s ? { learnerId: s } : {}), D = m({ status: "PUBLISHED" }), A = g({ status: "REGISTRATION_OPEN" }), R = c.data?.tecListEnrollments.items ?? [], U = l.data?.tecListSubmissions.items ?? [], W = x.data?.tecListSessions ?? [], G = w.data?.tecListCertificates ?? [], K = D.data?.tecListCourses.items ?? [], q = A.data?.tecListHackathons.items ?? [], ee = a?.firstName || a?.name || a?.email?.split("@")[0] || "there", J = y(() => R.filter((e) => e.status === "IN_PROGRESS" || e.status === "ENROLLED"), [R]), Y = y(() => [...J].sort((e, t) => new Date(t.lastActiveAt ?? t.startedAt).getTime() - new Date(e.lastActiveAt ?? e.startedAt).getTime()).slice(0, 3), [J]), te = y(() => new Set(U.filter((e) => e.verdict === "ACCEPTED").map((e) => e.problemId)).size, [U]), [X] = b(() => Date.now()), Z = y(() => [...W].filter((e) => (e.status === "CONFIRMED" || e.status === "REQUESTED") && new Date(e.scheduledAt).getTime() > X).sort((e, t) => new Date(e.scheduledAt).getTime() - new Date(t.scheduledAt).getTime()), [W, X]), Q = y(() => {
185
+ let e = new Set(R.map((e) => e.courseId));
186
+ return K.filter((t) => !e.has(t.id)).slice(0, 4);
187
+ }, [K, R]), $ = q.slice(0, 4);
188
+ return /* @__PURE__ */ P(n, {
163
189
  hero: !0,
164
- title: `Welcome back, ${K}`,
190
+ title: `Welcome back, ${ee}`,
165
191
  description: "Your learning hub — pick up where you left off, keep your skills sharp, and jump into what's next.",
166
- actions: /* @__PURE__ */ k(A, {
192
+ actions: /* @__PURE__ */ P(F, {
167
193
  variant: "outline",
168
- onClick: () => a("/courses/my-learning-page"),
169
- children: [/* @__PURE__ */ O(w, { size: 16 }), " My Learning"]
194
+ onClick: () => i("/courses/my-learning-page"),
195
+ children: [/* @__PURE__ */ N(k, { size: 16 }), " My Learning"]
170
196
  }),
171
197
  children: [
172
- /* @__PURE__ */ k("div", {
198
+ /* @__PURE__ */ P("div", {
173
199
  className: "mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4",
174
200
  children: [
175
- /* @__PURE__ */ O(r, {
201
+ /* @__PURE__ */ N(r, {
176
202
  label: "Courses in progress",
177
- value: q.length,
178
- icon: y
203
+ value: J.length,
204
+ icon: C,
205
+ tone: "blue"
179
206
  }),
180
- /* @__PURE__ */ O(r, {
207
+ /* @__PURE__ */ N(r, {
181
208
  label: "Problems solved",
182
- value: Y,
183
- icon: C
209
+ value: te,
210
+ icon: O,
211
+ tone: "green"
184
212
  }),
185
- /* @__PURE__ */ O(r, {
213
+ /* @__PURE__ */ N(r, {
186
214
  label: "Upcoming sessions",
187
215
  value: Z.length,
188
- icon: x
216
+ icon: T,
217
+ tone: "amber"
189
218
  }),
190
- /* @__PURE__ */ O(r, {
219
+ /* @__PURE__ */ N(r, {
191
220
  label: "Certificates",
192
- value: U.length,
193
- icon: v
221
+ value: G.length,
222
+ icon: S,
223
+ tone: "purple"
194
224
  })
195
225
  ]
196
226
  }),
197
- /* @__PURE__ */ k("div", {
227
+ /* @__PURE__ */ P("div", {
198
228
  className: "mb-6 grid grid-cols-2 gap-3 sm:grid-cols-4",
199
229
  children: [
200
- /* @__PURE__ */ k(A, {
230
+ /* @__PURE__ */ P(F, {
201
231
  variant: "outline",
202
232
  className: "h-auto flex-col gap-2 py-4",
203
- onClick: () => a("/courses/courses-page"),
204
- children: [/* @__PURE__ */ O(y, { size: 18 }), /* @__PURE__ */ O("span", {
233
+ onClick: () => i("/courses/courses-page"),
234
+ children: [/* @__PURE__ */ N(C, { size: 18 }), /* @__PURE__ */ N("span", {
205
235
  className: "text-xs",
206
236
  children: "Browse courses"
207
237
  })]
208
238
  }),
209
- /* @__PURE__ */ k(A, {
239
+ /* @__PURE__ */ P(F, {
210
240
  variant: "outline",
211
241
  className: "h-auto flex-col gap-2 py-4",
212
- onClick: () => a("/applications/problems-page"),
213
- children: [/* @__PURE__ */ O(C, { size: 18 }), /* @__PURE__ */ O("span", {
242
+ onClick: () => i("/applications/problems-page"),
243
+ children: [/* @__PURE__ */ N(O, { size: 18 }), /* @__PURE__ */ N("span", {
214
244
  className: "text-xs",
215
245
  children: "Practice problems"
216
246
  })]
217
247
  }),
218
- /* @__PURE__ */ k(A, {
248
+ /* @__PURE__ */ P(F, {
219
249
  variant: "outline",
220
250
  className: "h-auto flex-col gap-2 py-4",
221
- onClick: () => a("/mentorship/mentors-page"),
222
- children: [/* @__PURE__ */ O(D, { size: 18 }), /* @__PURE__ */ O("span", {
251
+ onClick: () => i("/mentorship/mentors-page"),
252
+ children: [/* @__PURE__ */ N(M, { size: 18 }), /* @__PURE__ */ N("span", {
223
253
  className: "text-xs",
224
254
  children: "Find a mentor"
225
255
  })]
226
256
  }),
227
- /* @__PURE__ */ k(A, {
257
+ /* @__PURE__ */ P(F, {
228
258
  variant: "outline",
229
259
  className: "h-auto flex-col gap-2 py-4",
230
- onClick: () => a("/hackathons/hackathons-page"),
231
- children: [/* @__PURE__ */ O(E, { size: 18 }), /* @__PURE__ */ O("span", {
260
+ onClick: () => i("/hackathons/hackathons-page"),
261
+ children: [/* @__PURE__ */ N(j, { size: 18 }), /* @__PURE__ */ N("span", {
232
262
  className: "text-xs",
233
263
  children: "Hackathons"
234
264
  })]
235
265
  })
236
266
  ]
237
267
  }),
238
- /* @__PURE__ */ k("div", {
268
+ /* @__PURE__ */ P("div", {
239
269
  className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
240
- children: [/* @__PURE__ */ k("div", {
270
+ children: [/* @__PURE__ */ P("div", {
241
271
  className: "space-y-6 lg:col-span-2",
242
- children: [/* @__PURE__ */ k(j, {
272
+ children: [/* @__PURE__ */ P(I, {
243
273
  className: "p-5",
244
- children: [/* @__PURE__ */ O(M, {
274
+ children: [/* @__PURE__ */ N(L, {
245
275
  title: "Continue learning",
246
276
  actionLabel: "My Learning",
247
- onAction: () => a("/courses/my-learning-page")
248
- }), _.loading && !B.length ? /* @__PURE__ */ O(u, {
277
+ onAction: () => i("/courses/my-learning-page")
278
+ }), c.loading && !R.length ? /* @__PURE__ */ N(f, {
249
279
  count: 2,
250
280
  height: "h-16"
251
- }) : _.error ? /* @__PURE__ */ O(l, {
281
+ }) : c.error ? /* @__PURE__ */ N(d, {
252
282
  title: "Couldn't load your courses",
253
- error: _.error
254
- }) : J.length === 0 ? /* @__PURE__ */ O(c, {
255
- icon: /* @__PURE__ */ O(y, { size: 24 }),
283
+ error: c.error
284
+ }) : Y.length === 0 ? /* @__PURE__ */ N(u, {
285
+ icon: /* @__PURE__ */ N(C, { size: 24 }),
256
286
  title: "No courses in progress",
257
287
  description: "Enroll in a course to start building skill by doing — your active courses show up here.",
258
- action: /* @__PURE__ */ O(A, {
259
- onClick: () => a("/courses/courses-page"),
288
+ action: /* @__PURE__ */ N(F, {
289
+ onClick: () => i("/courses/courses-page"),
260
290
  children: "Browse courses"
261
291
  })
262
- }) : /* @__PURE__ */ O("div", {
263
- className: "space-y-3",
264
- children: J.map((e) => /* @__PURE__ */ O(P, {
292
+ }) : /* @__PURE__ */ N("div", {
293
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
294
+ children: Y.map((e) => /* @__PURE__ */ N(z, {
265
295
  e,
266
- onOpen: () => a(`/courses/course-details-page?id=${e.courseId}`)
296
+ onOpen: () => i(`/courses/course-details-page?id=${e.courseId}`)
267
297
  }, e.id))
268
298
  })]
269
- }), /* @__PURE__ */ k(j, {
299
+ }), /* @__PURE__ */ P(I, {
270
300
  className: "p-5",
271
- children: [/* @__PURE__ */ O(M, {
301
+ children: [/* @__PURE__ */ N(L, {
272
302
  title: "Recommended for you",
273
303
  actionLabel: "View all",
274
- onAction: () => a("/courses/courses-page")
275
- }), R.loading && !W.length ? /* @__PURE__ */ O(u, {
304
+ onAction: () => i("/courses/courses-page")
305
+ }), D.loading && !K.length ? /* @__PURE__ */ N(f, {
276
306
  count: 2,
277
307
  height: "h-20"
278
- }) : R.error ? /* @__PURE__ */ O(l, {
308
+ }) : D.error ? /* @__PURE__ */ N(d, {
279
309
  title: "Couldn't load courses",
280
- error: R.error
281
- }) : Q.length === 0 ? /* @__PURE__ */ O(c, {
282
- icon: /* @__PURE__ */ O(w, { size: 24 }),
310
+ error: D.error
311
+ }) : Q.length === 0 ? /* @__PURE__ */ N(u, {
312
+ icon: /* @__PURE__ */ N(k, { size: 24 }),
283
313
  title: "No courses to recommend yet",
284
314
  description: "New courses are on the way. TechnoSpam is pre-launch — check back soon."
285
- }) : /* @__PURE__ */ O("div", {
315
+ }) : /* @__PURE__ */ N("div", {
286
316
  className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
287
- children: Q.map((e) => /* @__PURE__ */ O(F, {
317
+ children: Q.map((e) => /* @__PURE__ */ N(B, {
288
318
  course: e,
289
- onOpen: () => a(`/courses/course-details-page?id=${e.id}`)
319
+ onOpen: () => i(`/courses/course-details-page?id=${e.id}`)
290
320
  }, e.id))
291
321
  })]
292
322
  })]
293
- }), /* @__PURE__ */ k("div", {
323
+ }), /* @__PURE__ */ P("div", {
294
324
  className: "space-y-6",
295
325
  children: [
296
- /* @__PURE__ */ k(j, {
326
+ /* @__PURE__ */ P(I, {
297
327
  className: "p-5",
298
- children: [/* @__PURE__ */ O(M, {
328
+ children: [/* @__PURE__ */ N(L, {
299
329
  title: "Upcoming sessions",
300
330
  actionLabel: "All sessions",
301
- onAction: () => a("/mentorship/sessions-page")
302
- }), T.loading && !H.length ? /* @__PURE__ */ O(u, {
331
+ onAction: () => i("/mentorship/sessions-page")
332
+ }), x.loading && !W.length ? /* @__PURE__ */ N(f, {
303
333
  count: 2,
304
334
  height: "h-14"
305
- }) : T.error ? /* @__PURE__ */ O(l, {
335
+ }) : x.error ? /* @__PURE__ */ N(d, {
306
336
  title: "Couldn't load sessions",
307
- error: T.error
308
- }) : Z.length === 0 ? /* @__PURE__ */ O(c, {
309
- icon: /* @__PURE__ */ O(x, { size: 24 }),
337
+ error: x.error
338
+ }) : Z.length === 0 ? /* @__PURE__ */ N(u, {
339
+ icon: /* @__PURE__ */ N(T, { size: 24 }),
310
340
  title: "No sessions booked",
311
341
  description: "Book time with a mentor to get unblocked — your upcoming sessions appear here.",
312
- action: /* @__PURE__ */ O(A, {
342
+ action: /* @__PURE__ */ N(F, {
313
343
  variant: "outline",
314
- onClick: () => a("/mentorship/mentors-page"),
344
+ onClick: () => i("/mentorship/mentors-page"),
315
345
  children: "Find a mentor"
316
346
  })
317
- }) : /* @__PURE__ */ O("div", { children: Z.slice(0, 5).map((e) => /* @__PURE__ */ O(I, { s: e }, e.id)) })]
347
+ }) : /* @__PURE__ */ N("div", { children: Z.slice(0, 5).map((e) => /* @__PURE__ */ N(V, { s: e }, e.id)) })]
318
348
  }),
319
- /* @__PURE__ */ k(j, {
349
+ /* @__PURE__ */ P(I, {
320
350
  className: "p-5",
321
- children: [/* @__PURE__ */ O(M, {
351
+ children: [/* @__PURE__ */ N(L, {
322
352
  title: "Open hackathons",
323
353
  actionLabel: "View all",
324
- onAction: () => a("/hackathons/hackathons-page")
325
- }), z.loading && !G.length ? /* @__PURE__ */ O(u, {
354
+ onAction: () => i("/hackathons/hackathons-page")
355
+ }), A.loading && !q.length ? /* @__PURE__ */ N(f, {
326
356
  count: 2,
327
357
  height: "h-14"
328
- }) : z.error ? /* @__PURE__ */ O(l, {
358
+ }) : A.error ? /* @__PURE__ */ N(d, {
329
359
  title: "Couldn't load hackathons",
330
- error: z.error
331
- }) : $.length === 0 ? /* @__PURE__ */ O(c, {
332
- icon: /* @__PURE__ */ O(E, { size: 24 }),
360
+ error: A.error
361
+ }) : $.length === 0 ? /* @__PURE__ */ N(u, {
362
+ icon: /* @__PURE__ */ N(j, { size: 24 }),
333
363
  title: "No open hackathons",
334
364
  description: "When registration opens for a hackathon, it will show up here to join."
335
- }) : /* @__PURE__ */ O("div", { children: $.map((e) => /* @__PURE__ */ O(L, {
336
- h: e,
337
- onOpen: () => a(`/hackathons/hackathon-details-page?id=${e.id}`)
338
- }, e.id)) })]
365
+ }) : /* @__PURE__ */ N("div", {
366
+ className: "space-y-3",
367
+ children: $.map((e) => /* @__PURE__ */ N(H, {
368
+ h: e,
369
+ onOpen: () => i(`/hackathons/hackathon-details-page?id=${e.id}`)
370
+ }, e.id))
371
+ })]
339
372
  }),
340
- U.length > 0 ? /* @__PURE__ */ k(j, {
373
+ G.length > 0 ? /* @__PURE__ */ P(I, {
341
374
  className: "p-5",
342
- children: [/* @__PURE__ */ O(M, { title: "Latest certificate" }), /* @__PURE__ */ k("div", {
375
+ children: [/* @__PURE__ */ N(L, { title: "Latest certificate" }), /* @__PURE__ */ P("div", {
343
376
  className: "flex items-center gap-3",
344
- children: [/* @__PURE__ */ O("span", {
345
- className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-accent-wash text-accent-teal",
346
- children: /* @__PURE__ */ O(S, { size: 20 })
347
- }), /* @__PURE__ */ k("div", {
377
+ children: [/* @__PURE__ */ N("span", {
378
+ className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-accent-primary/12 text-accent-teal",
379
+ children: /* @__PURE__ */ N(E, { size: 20 })
380
+ }), /* @__PURE__ */ P("div", {
348
381
  className: "min-w-0",
349
- children: [/* @__PURE__ */ O("div", {
382
+ children: [/* @__PURE__ */ N("div", {
350
383
  className: "truncate text-sm font-medium text-text-primary",
351
- children: U[0]?.course?.title ?? "Certificate"
352
- }), /* @__PURE__ */ k("div", {
384
+ children: G[0]?.course?.title ?? "Certificate"
385
+ }), /* @__PURE__ */ P("div", {
353
386
  className: "text-xs text-text-muted",
354
387
  children: [
355
388
  "Score ",
356
- U[0]?.score,
389
+ G[0]?.score,
357
390
  " · Issued ",
358
- i(U[0]?.issuedAt)
391
+ o(G[0]?.issuedAt)
359
392
  ]
360
393
  })]
361
394
  })]
@@ -368,6 +401,6 @@ function R() {
368
401
  });
369
402
  }
370
403
  //#endregion
371
- export { R as DashboardDashboardPagePage };
404
+ export { U as DashboardDashboardPagePage };
372
405
 
373
406
  //# sourceMappingURL=DashboardDashboardPagePage.js.map