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