@burdenoff/microfe-technospam 2026.828.1 → 2026.830.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.
Files changed (44) hide show
  1. package/dist/index.js +4 -3
  2. package/dist/technospam/TechnoSpamRoot.js +4 -4
  3. package/dist/technospam/components/PageLayout.d.ts.map +1 -1
  4. package/dist/technospam/components/PageLayout.js +24 -23
  5. package/dist/technospam/components/PageLayout.js.map +1 -1
  6. package/dist/technospam/components/StateViews.d.ts +1 -1
  7. package/dist/technospam/components/StateViews.d.ts.map +1 -1
  8. package/dist/technospam/components/StateViews.js +28 -26
  9. package/dist/technospam/components/StateViews.js.map +1 -1
  10. package/dist/technospam/components/TagInput.d.ts +1 -1
  11. package/dist/technospam/components/TagInput.d.ts.map +1 -1
  12. package/dist/technospam/components/TagInput.js +39 -34
  13. package/dist/technospam/components/TagInput.js.map +1 -1
  14. package/dist/technospam/hooks/useTr.d.ts +17 -0
  15. package/dist/technospam/hooks/useTr.d.ts.map +1 -0
  16. package/dist/technospam/hooks/useTr.js +12 -0
  17. package/dist/technospam/hooks/useTr.js.map +1 -0
  18. package/dist/technospam/index.d.ts +1 -0
  19. package/dist/technospam/index.d.ts.map +1 -1
  20. package/dist/technospam/index.js +1 -0
  21. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
  22. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +198 -189
  23. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  24. package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts.map +1 -1
  25. package/dist/technospam/pages/ApplicationsProblemsPagePage.js +165 -163
  26. package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -1
  27. package/dist/technospam/pages/CoursesCoursesPagePage.d.ts.map +1 -1
  28. package/dist/technospam/pages/CoursesCoursesPagePage.js +117 -113
  29. package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -1
  30. package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -1
  31. package/dist/technospam/pages/DashboardDashboardPagePage.js +211 -193
  32. package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -1
  33. package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts.map +1 -1
  34. package/dist/technospam/pages/HackathonsHackathonsPagePage.js +110 -110
  35. package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -1
  36. package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts.map +1 -1
  37. package/dist/technospam/pages/MentorshipMentorsPagePage.js +174 -160
  38. package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -1
  39. package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts.map +1 -1
  40. package/dist/technospam/pages/MentorshipSessionsPagePage.js +156 -151
  41. package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -1
  42. package/dist/technospam/utils/i18n.js +1 -1
  43. package/dist/technospam/utils/i18n.js.map +1 -1
  44. package/package.json +1 -1
@@ -1,24 +1,25 @@
1
1
  import { useTechnoSpam as e, useTechnoSpamNavigate as t } from "../providers/TechnoSpamProvider.js";
2
- import { PageLayout as n } from "../components/PageLayout.js";
3
- import { StatCard as r } from "../components/StatCard.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";
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 p, useCoursesQuery as m, useEnrollmentsQuery as h, useHackathonsQuery as g, useSessionsQuery as _, useSubmissionsQuery as v } from "../api/technospamApi.js";
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 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";
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 L({ title: e, actionLabel: t, onAction: n }) {
16
- return /* @__PURE__ */ P("div", {
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__ */ N("h2", {
19
+ children: [/* @__PURE__ */ M("h2", {
19
20
  className: "text-base font-semibold text-text-primary",
20
21
  children: e
21
- }), t && n ? /* @__PURE__ */ P(F, {
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__ */ N(x, { size: 13 })
30
+ /* @__PURE__ */ M(x, { size: 13 })
30
31
  ]
31
32
  }) : null]
32
33
  });
33
34
  }
34
- function R({ pct: e }) {
35
- return /* @__PURE__ */ N("div", {
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__ */ N("div", {
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 z({ e, onOpen: t }) {
44
- let n = e.course?.title ?? "Course";
45
- return /* @__PURE__ */ P("button", {
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__ */ P(i, {
50
- seed: `${e.course?.topic ?? ""} ${n}`,
51
- icon: a(e.course?.topic ?? n),
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__ */ N(l, {
54
+ children: [e.course?.level ? /* @__PURE__ */ M(u, {
54
55
  status: e.course.level,
55
56
  kind: "level"
56
- }) : /* @__PURE__ */ N("span", {}), /* @__PURE__ */ N("span", {
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__ */ N(A, { size: 16 })
59
+ children: /* @__PURE__ */ M(A, { size: 16 })
59
60
  })]
60
- }), /* @__PURE__ */ P("div", {
61
+ }), /* @__PURE__ */ N("div", {
61
62
  className: "flex flex-1 flex-col gap-2.5 p-3.5",
62
- children: [/* @__PURE__ */ P("div", {
63
+ children: [/* @__PURE__ */ N("div", {
63
64
  className: "flex items-start gap-2",
64
- children: [/* @__PURE__ */ N("h3", {
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: n
67
- }), /* @__PURE__ */ N(l, { status: e.status })]
68
- }), /* @__PURE__ */ P("div", {
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__ */ N("div", {
71
+ children: [/* @__PURE__ */ M("div", {
71
72
  className: "flex-1",
72
- children: /* @__PURE__ */ N(R, { pct: e.progressPct })
73
- }), /* @__PURE__ */ P("span", {
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 B({ course: e, onOpen: t }) {
82
- return /* @__PURE__ */ P("button", {
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__ */ N(i, {
87
+ children: [/* @__PURE__ */ M(a, {
87
88
  seed: `${e.topic ?? ""} ${e.title}`,
88
- icon: a(e.topic ?? e.title),
89
+ icon: o(e.topic ?? e.title),
89
90
  height: "h-20",
90
- children: /* @__PURE__ */ N(l, {
91
+ children: /* @__PURE__ */ M(u, {
91
92
  status: e.level,
92
93
  kind: "level"
93
94
  })
94
- }), /* @__PURE__ */ P("div", {
95
+ }), /* @__PURE__ */ N("div", {
95
96
  className: "flex flex-1 flex-col gap-1.5 p-3.5",
96
97
  children: [
97
- /* @__PURE__ */ N("h3", {
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__ */ N("p", {
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__ */ N("span", {
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 V({ s: e }) {
114
- return /* @__PURE__ */ P("div", {
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__ */ N("span", {
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__ */ N(T, { size: 16 })
119
- }), /* @__PURE__ */ P("div", {
119
+ children: /* @__PURE__ */ M(T, { size: 16 })
120
+ }), /* @__PURE__ */ N("div", {
120
121
  className: "min-w-0 flex-1",
121
122
  children: [
122
- /* @__PURE__ */ P("div", {
123
+ /* @__PURE__ */ N("div", {
123
124
  className: "flex items-center gap-2",
124
- children: [/* @__PURE__ */ N("span", {
125
+ children: [/* @__PURE__ */ M("span", {
125
126
  className: "truncate text-sm font-medium text-text-primary",
126
127
  children: e.topic
127
- }), /* @__PURE__ */ N(l, { status: e.status })]
128
+ }), /* @__PURE__ */ M(u, { status: e.status })]
128
129
  }),
129
- e.mentor?.headline ? /* @__PURE__ */ N("div", {
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__ */ P("div", {
134
+ /* @__PURE__ */ N("div", {
134
135
  className: "mt-0.5 flex items-center gap-1.5 text-xs text-text-secondary",
135
- children: [/* @__PURE__ */ N(D, {
136
+ children: [/* @__PURE__ */ M(D, {
136
137
  size: 12,
137
138
  className: "text-text-muted"
138
- }), s(e.scheduledAt)]
139
+ }), c(e.scheduledAt)]
139
140
  })
140
141
  ]
141
142
  })]
142
143
  });
143
144
  }
144
- function H({ h: e, onOpen: t }) {
145
- return /* @__PURE__ */ P("button", {
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__ */ P(i, {
151
+ children: [/* @__PURE__ */ N(a, {
150
152
  seed: `${e.theme ?? ""} ${e.title}`,
151
153
  icon: j,
152
154
  height: "h-24",
153
- children: [/* @__PURE__ */ P("div", {
155
+ children: [/* @__PURE__ */ N("div", {
154
156
  className: "min-w-0",
155
- children: [/* @__PURE__ */ P("div", {
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: [/* @__PURE__ */ N(j, { size: 12 }), " Open hackathon"]
158
- }), /* @__PURE__ */ N("h3", {
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__ */ N("span", {
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: c(e.prizePool, e.currency)
170
+ children: l(e.prizePool, e.currency)
165
171
  }) : null]
166
- }), /* @__PURE__ */ P("div", {
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__ */ P("span", {
174
+ children: [/* @__PURE__ */ N("span", {
169
175
  className: "flex items-center gap-1.5 text-xs text-text-muted",
170
176
  children: [
171
- /* @__PURE__ */ N(w, { size: 12 }),
172
- o(e.startAt),
177
+ /* @__PURE__ */ M(w, { size: 12 }),
178
+ s(e.startAt),
173
179
  " – ",
174
- o(e.endAt)
180
+ s(e.endAt)
175
181
  ]
176
- }), /* @__PURE__ */ P("span", {
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: ["Register ", /* @__PURE__ */ N(x, { size: 12 })]
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 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?.items ?? [], 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));
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, R]), $ = q.slice(0, 4);
188
- return /* @__PURE__ */ P(n, {
197
+ }, [K, H]), $ = q.slice(0, 4);
198
+ return /* @__PURE__ */ N(r, {
189
199
  hero: !0,
190
- title: `Welcome back, ${ee}`,
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(F, {
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: () => i("/courses/my-learning-page"),
195
- children: [/* @__PURE__ */ N(k, { size: 16 }), " My Learning"]
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__ */ P("div", {
212
+ /* @__PURE__ */ N("div", {
199
213
  className: "mb-5 grid grid-cols-2 gap-3 lg:grid-cols-4",
200
214
  children: [
201
- /* @__PURE__ */ N(r, {
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__ */ N(r, {
208
- label: "Problems solved",
209
- value: te,
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__ */ N(r, {
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__ */ N(r, {
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__ */ P("div", {
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(F, {
244
+ /* @__PURE__ */ N(P, {
231
245
  variant: "outline",
232
246
  className: "h-auto flex-col gap-2 py-4",
233
- onClick: () => i("/courses/courses-page"),
234
- children: [/* @__PURE__ */ N(C, { size: 18 }), /* @__PURE__ */ N("span", {
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(F, {
253
+ /* @__PURE__ */ N(P, {
240
254
  variant: "outline",
241
255
  className: "h-auto flex-col gap-2 py-4",
242
- onClick: () => i("/applications/problems-page"),
243
- children: [/* @__PURE__ */ N(O, { size: 18 }), /* @__PURE__ */ N("span", {
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(F, {
262
+ /* @__PURE__ */ N(P, {
249
263
  variant: "outline",
250
264
  className: "h-auto flex-col gap-2 py-4",
251
- onClick: () => i("/mentorship/mentors-page"),
252
- children: [/* @__PURE__ */ N(M, { size: 18 }), /* @__PURE__ */ N("span", {
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(F, {
271
+ /* @__PURE__ */ N(P, {
258
272
  variant: "outline",
259
273
  className: "h-auto flex-col gap-2 py-4",
260
- onClick: () => i("/hackathons/hackathons-page"),
261
- children: [/* @__PURE__ */ N(j, { size: 18 }), /* @__PURE__ */ N("span", {
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__ */ P("div", {
282
+ /* @__PURE__ */ N("div", {
269
283
  className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
270
- children: [/* @__PURE__ */ P("div", {
284
+ children: [/* @__PURE__ */ N("div", {
271
285
  className: "space-y-6 lg:col-span-2",
272
- children: [/* @__PURE__ */ P(I, {
286
+ children: [/* @__PURE__ */ N(F, {
273
287
  className: "p-5",
274
- children: [/* @__PURE__ */ N(L, {
275
- title: "Continue learning",
276
- actionLabel: "My Learning",
277
- onAction: () => i("/courses/my-learning-page")
278
- }), c.loading && !R.length ? /* @__PURE__ */ N(f, {
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
- }) : c.error ? /* @__PURE__ */ N(d, {
282
- title: "Couldn't load your courses",
283
- error: c.error
284
- }) : Y.length === 0 ? /* @__PURE__ */ N(u, {
285
- icon: /* @__PURE__ */ N(C, { size: 24 }),
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__ */ N(F, {
289
- onClick: () => i("/courses/courses-page"),
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__ */ N("div", {
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__ */ N(z, {
308
+ children: Y.map((e) => /* @__PURE__ */ M(R, {
295
309
  e,
296
- onOpen: () => i(`/courses/course-details-page?id=${e.courseId}`)
310
+ onOpen: () => a(`/courses/course-details-page?id=${e.courseId}`)
297
311
  }, e.id))
298
312
  })]
299
- }), /* @__PURE__ */ P(I, {
313
+ }), /* @__PURE__ */ N(F, {
300
314
  className: "p-5",
301
- children: [/* @__PURE__ */ N(L, {
302
- title: "Recommended for you",
303
- actionLabel: "View all",
304
- onAction: () => i("/courses/courses-page")
305
- }), D.loading && !K.length ? /* @__PURE__ */ N(f, {
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
- }) : D.error ? /* @__PURE__ */ N(d, {
309
- title: "Couldn't load courses",
310
- error: D.error
311
- }) : Q.length === 0 ? /* @__PURE__ */ N(u, {
312
- icon: /* @__PURE__ */ N(k, { size: 24 }),
313
- title: "No courses to recommend yet",
314
- description: "New courses are on the way. TechnoSpam is pre-launch — check back soon."
315
- }) : /* @__PURE__ */ N("div", {
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__ */ N(B, {
331
+ children: Q.map((e) => /* @__PURE__ */ M(z, {
318
332
  course: e,
319
- onOpen: () => i(`/courses/course-details-page?id=${e.id}`)
333
+ onOpen: () => a(`/courses/course-details-page?id=${e.id}`)
320
334
  }, e.id))
321
335
  })]
322
336
  })]
323
- }), /* @__PURE__ */ P("div", {
337
+ }), /* @__PURE__ */ N("div", {
324
338
  className: "space-y-6",
325
339
  children: [
326
- /* @__PURE__ */ P(I, {
340
+ /* @__PURE__ */ N(F, {
327
341
  className: "p-5",
328
- children: [/* @__PURE__ */ N(L, {
329
- title: "Upcoming sessions",
330
- actionLabel: "All sessions",
331
- onAction: () => i("/mentorship/sessions-page")
332
- }), x.loading && !W.length ? /* @__PURE__ */ N(f, {
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
- }) : x.error ? /* @__PURE__ */ N(d, {
336
- title: "Couldn't load sessions",
337
- error: x.error
338
- }) : Z.length === 0 ? /* @__PURE__ */ N(u, {
339
- icon: /* @__PURE__ */ N(T, { size: 24 }),
340
- title: "No sessions booked",
341
- description: "Book time with a mentor to get unblocked — your upcoming sessions appear here.",
342
- action: /* @__PURE__ */ N(F, {
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: () => i("/mentorship/mentors-page"),
345
- children: "Find a mentor"
358
+ onClick: () => a("/mentorship/mentors-page"),
359
+ children: c("technospam.common.findMentor", "Find a mentor")
346
360
  })
347
- }) : /* @__PURE__ */ N("div", { children: Z.slice(0, 5).map((e) => /* @__PURE__ */ N(V, { s: e }, e.id)) })]
361
+ }) : /* @__PURE__ */ M("div", { children: Z.slice(0, 5).map((e) => /* @__PURE__ */ M(B, { s: e }, e.id)) })]
348
362
  }),
349
- /* @__PURE__ */ P(I, {
363
+ /* @__PURE__ */ N(F, {
350
364
  className: "p-5",
351
- children: [/* @__PURE__ */ N(L, {
352
- title: "Open hackathons",
353
- actionLabel: "View all",
354
- onAction: () => i("/hackathons/hackathons-page")
355
- }), A.loading && !q.length ? /* @__PURE__ */ N(f, {
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
- }) : A.error ? /* @__PURE__ */ N(d, {
359
- title: "Couldn't load hackathons",
360
- error: A.error
361
- }) : $.length === 0 ? /* @__PURE__ */ N(u, {
362
- icon: /* @__PURE__ */ N(j, { size: 24 }),
363
- title: "No open hackathons",
364
- description: "When registration opens for a hackathon, it will show up here to join."
365
- }) : /* @__PURE__ */ N("div", {
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__ */ N(H, {
381
+ children: $.map((e) => /* @__PURE__ */ M(V, {
368
382
  h: e,
369
- onOpen: () => i(`/hackathons/hackathon-details-page?id=${e.id}`)
383
+ onOpen: () => a(`/hackathons/hackathon-details-page?id=${e.id}`)
370
384
  }, e.id))
371
385
  })]
372
386
  }),
373
- G.length > 0 ? /* @__PURE__ */ P(I, {
387
+ G.length > 0 ? /* @__PURE__ */ N(F, {
374
388
  className: "p-5",
375
- children: [/* @__PURE__ */ N(L, { title: "Latest certificate" }), /* @__PURE__ */ P("div", {
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__ */ N("span", {
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__ */ N(E, { size: 20 })
380
- }), /* @__PURE__ */ P("div", {
393
+ children: /* @__PURE__ */ M(E, { size: 20 })
394
+ }), /* @__PURE__ */ N("div", {
381
395
  className: "min-w-0",
382
- children: [/* @__PURE__ */ N("div", {
396
+ children: [/* @__PURE__ */ M("div", {
383
397
  className: "truncate text-sm font-medium text-text-primary",
384
- children: G[0]?.course?.title ?? "Certificate"
385
- }), /* @__PURE__ */ P("div", {
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
- "Score ",
402
+ c("technospam.common.score", "Score"),
403
+ " ",
389
404
  G[0]?.score,
390
- " · Issued ",
391
- o(G[0]?.issuedAt)
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 { U as DashboardDashboardPagePage };
422
+ export { H as DashboardDashboardPagePage };
405
423
 
406
424
  //# sourceMappingURL=DashboardDashboardPagePage.js.map