@burdenoff/microfe-technospam 2026.705.1 → 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 (36) hide show
  1. package/dist/technospam/components/MediaCover.js +57 -0
  2. package/dist/technospam/components/MediaCover.js.map +1 -0
  3. package/dist/technospam/components/PageLayout.js +1 -1
  4. package/dist/technospam/components/PageLayout.js.map +1 -1
  5. package/dist/technospam/components/StatCard.js +19 -11
  6. package/dist/technospam/components/StatCard.js.map +1 -1
  7. package/dist/technospam/components/StatusBadge.js +1 -1
  8. package/dist/technospam/components/StatusBadge.js.map +1 -1
  9. package/dist/technospam/components/index.js +1 -0
  10. package/dist/technospam/pages/AdminAdminDashboardPagePage.js +525 -459
  11. package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -1
  12. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +167 -127
  13. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  14. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +178 -125
  15. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -1
  16. package/dist/technospam/pages/ApplicationsProblemsPagePage.js +77 -88
  17. package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -1
  18. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +287 -186
  19. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
  20. package/dist/technospam/pages/CoursesCoursesPagePage.js +76 -83
  21. package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -1
  22. package/dist/technospam/pages/CoursesMyLearningPagePage.js +119 -88
  23. package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -1
  24. package/dist/technospam/pages/DashboardDashboardPagePage.js +232 -199
  25. package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -1
  26. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js +128 -106
  27. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js.map +1 -1
  28. package/dist/technospam/pages/HackathonsHackathonsPagePage.js +71 -78
  29. package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -1
  30. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +165 -110
  31. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -1
  32. package/dist/technospam/pages/MentorshipMentorsPagePage.js +210 -156
  33. package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -1
  34. package/dist/technospam/pages/MentorshipSessionsPagePage.js +59 -43
  35. package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -1
  36. package/package.json +1 -1
@@ -1,253 +1,354 @@
1
1
  import { useTechnoSpam as e } from "../providers/TechnoSpamProvider.js";
2
- import { PageLayout as t } from "../components/PageLayout.js";
3
- import { StatCard as n } from "../components/StatCard.js";
4
- import { formatDuration as r, humanizeEnum as i } from "../utils/format.js";
5
- import { StatusBadge as a } from "../components/StatusBadge.js";
6
- import { EmptyView as o, ErrorView as s } from "../components/StateViews.js";
2
+ import { cn as t } from "../utils/cn.js";
3
+ import { PageLayout as n } from "../components/PageLayout.js";
4
+ import { StatCard as r } from "../components/StatCard.js";
5
+ import { MediaCover as i, topicIcon as a } from "../components/MediaCover.js";
6
+ import { formatDuration as o, humanizeEnum as s } from "../utils/format.js";
7
+ import { EmptyView as c, ErrorView as l } from "../components/StateViews.js";
7
8
  import "../components/index.js";
8
- import { notify as c } from "../lib/toast.js";
9
- import { useCertificatesQuery as l, useCourseQuery as u, useEnroll as d, useIssueCertificate as f, useUpdateProgress as p } from "../api/technospamApi.js";
10
- import { Award as m, BookOpen as h, CheckCircle2 as g, Clock as _, FileText as v, Layers as y, Lock as b, PlayCircle as x, Sparkles as S } from "lucide-react";
11
- import { useSearchParams as C } from "react-router-dom";
12
- import { jsx as w, jsxs as T } from "react/jsx-runtime";
13
- import { Badge as E, Button as D, GlassCard as O, Skeleton as k } from "@burdenoff/fe-libs/ui";
9
+ import { notify as u } from "../lib/toast.js";
10
+ import { useCertificatesQuery as d, useCourseQuery as f, useEnroll as p, useIssueCertificate as m, useUpdateProgress as ee } from "../api/technospamApi.js";
11
+ import { Award as h, BookOpen as g, CheckCircle2 as _, Clock as v, Eye as y, FileText as b, Layers as x, Lock as S, PlayCircle as C, ShieldCheck as te, Sparkles as w, TrendingUp as T, Trophy as E, Users as D } from "lucide-react";
12
+ import { useSearchParams as O } from "react-router-dom";
13
+ import { jsx as k, jsxs as A } from "react/jsx-runtime";
14
+ import { Badge as j, Button as M, GlassCard as N, Skeleton as P } from "@burdenoff/fe-libs/ui";
14
15
  //#region src/technospam/pages/CoursesCourseDetailsPagePage.tsx
15
- var A = {
16
- VIDEO: x,
17
- ARTICLE: v,
18
- INTERACTIVE: S,
19
- QUIZ: g,
20
- PROJECT: y
16
+ var F = {
17
+ VIDEO: {
18
+ icon: C,
19
+ chip: "bg-accent-primary/15 text-accent-primary",
20
+ badge: "border-accent-primary/25 bg-accent-primary/10 text-accent-primary"
21
+ },
22
+ ARTICLE: {
23
+ icon: b,
24
+ chip: "bg-accent-indigo/15 text-accent-indigo",
25
+ badge: "border-accent-indigo/25 bg-accent-indigo/10 text-accent-indigo"
26
+ },
27
+ INTERACTIVE: {
28
+ icon: w,
29
+ chip: "bg-accent-teal/15 text-accent-teal",
30
+ badge: "border-accent-teal/25 bg-accent-teal/10 text-accent-teal"
31
+ },
32
+ QUIZ: {
33
+ icon: _,
34
+ chip: "bg-accent-purple/15 text-accent-purple",
35
+ badge: "border-accent-purple/25 bg-accent-purple/10 text-accent-purple"
36
+ },
37
+ PROJECT: {
38
+ icon: x,
39
+ chip: "bg-status-warning-bg-subtle text-status-warning-text",
40
+ badge: "border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text"
41
+ }
21
42
  };
22
- function j({ lesson: e, done: t }) {
23
- let n = A[e.kind] ?? v;
24
- return /* @__PURE__ */ T("div", {
25
- className: "flex items-center gap-3 border-b border-border-seam py-3 last:border-0",
43
+ function I({ icon: e, children: t }) {
44
+ return /* @__PURE__ */ A("span", {
45
+ className: "inline-flex items-center gap-1 rounded-full bg-white/15 px-2.5 py-1 text-xs font-medium text-white ring-1 ring-white/25 backdrop-blur-sm",
46
+ children: [e ? /* @__PURE__ */ k(e, { size: 12 }) : null, t]
47
+ });
48
+ }
49
+ function L({ lesson: e, index: n, done: r }) {
50
+ let i = F[e.kind] ?? F.ARTICLE, a = i.icon;
51
+ return /* @__PURE__ */ A("div", {
52
+ className: "group flex items-center gap-3 rounded-xl px-2 py-3 transition-colors hover:bg-bg-sunken/60",
26
53
  children: [
27
- /* @__PURE__ */ w("span", {
28
- className: `flex h-8 w-8 shrink-0 items-center justify-center rounded-lg ${t ? "bg-status-success-bg-subtle text-status-success-text" : "bg-bg-sunken text-text-secondary"}`,
29
- children: w(t ? g : n, { size: 16 })
54
+ /* @__PURE__ */ k("span", {
55
+ className: "hidden w-6 shrink-0 text-center text-sm font-medium tabular-nums text-text-muted sm:block",
56
+ children: n + 1
57
+ }),
58
+ /* @__PURE__ */ k("span", {
59
+ className: t("flex h-9 w-9 shrink-0 items-center justify-center rounded-lg", r ? "bg-status-success-bg-subtle text-status-success-text" : i.chip),
60
+ children: k(r ? _ : a, { size: 17 })
30
61
  }),
31
- /* @__PURE__ */ T("div", {
62
+ /* @__PURE__ */ A("div", {
32
63
  className: "min-w-0 flex-1",
33
- children: [/* @__PURE__ */ T("div", {
34
- className: "flex items-center gap-2",
35
- children: [/* @__PURE__ */ w("span", {
36
- className: "truncate text-sm font-medium text-text-primary",
37
- children: e.title
38
- }), e.isPreview ? /* @__PURE__ */ w(E, {
39
- variant: "secondary",
40
- className: "text-[11px]",
41
- children: "Preview"
42
- }) : null]
43
- }), /* @__PURE__ */ T("div", {
44
- className: "text-xs text-text-muted",
45
- children: [
46
- i(e.kind),
47
- " · ",
48
- r(e.estimatedMinutes)
49
- ]
64
+ children: [/* @__PURE__ */ k("span", {
65
+ className: "block truncate text-sm font-medium text-text-primary",
66
+ children: e.title
67
+ }), /* @__PURE__ */ A("div", {
68
+ className: "mt-1 flex flex-wrap items-center gap-2",
69
+ children: [/* @__PURE__ */ k("span", {
70
+ className: t("inline-flex items-center rounded-full border px-2 py-0.5 text-[11px] font-medium", i.badge),
71
+ children: s(e.kind)
72
+ }), /* @__PURE__ */ A("span", {
73
+ className: "inline-flex items-center gap-1 text-xs text-text-muted",
74
+ children: [
75
+ /* @__PURE__ */ k(v, { size: 12 }),
76
+ " ",
77
+ o(e.estimatedMinutes)
78
+ ]
79
+ })]
50
80
  })]
51
81
  }),
52
- !e.isPreview && !t ? /* @__PURE__ */ w(b, {
53
- size: 14,
54
- className: "text-text-muted"
55
- }) : null
82
+ /* @__PURE__ */ k("div", {
83
+ className: "shrink-0",
84
+ children: r ? /* @__PURE__ */ k(_, {
85
+ size: 18,
86
+ className: "text-status-success-text"
87
+ }) : e.isPreview ? /* @__PURE__ */ A("span", {
88
+ className: "inline-flex items-center gap-1 rounded-full border border-accent-primary/30 bg-accent-primary/10 px-2 py-0.5 text-[11px] font-medium text-accent-primary",
89
+ children: [/* @__PURE__ */ k(y, { size: 12 }), " Preview"]
90
+ }) : /* @__PURE__ */ k(S, {
91
+ size: 15,
92
+ className: "text-text-muted"
93
+ })
94
+ })
56
95
  ]
57
96
  });
58
97
  }
59
- function M() {
60
- let [i] = C(), b = i.get("id") ?? "", { currentUser: x } = e(), { data: S, loading: A, error: M, refetch: N } = u(b), [P, { loading: F }] = d(), [I, { loading: L }] = p(), { data: R, refetch: z } = l(x?.id && b ? {
61
- learnerId: x.id,
62
- courseId: b
63
- } : {}), [B, { loading: V }] = f(), H = S?.tecCourse ?? null, U = [...H?.lessons ?? []].sort((e, t) => e.position - t.position), W = (H?.enrollments ?? []).find((e) => e.learnerId === x?.id), G = (R?.tecListCertificates ?? []).find((e) => e.status === "ISSUED"), K = !!W && W.progressPct >= 100, q = async () => {
64
- !b || !x?.id || (await B({ variables: {
65
- courseId: b,
66
- learnerId: x.id,
98
+ function R() {
99
+ let [t] = O(), y = t.get("id") ?? "", { currentUser: S } = e(), { data: C, loading: w, error: F, refetch: R } = f(y), [z, { loading: B }] = p(), [V, { loading: H }] = ee(), { data: U, refetch: W } = d(S?.id && y ? {
100
+ learnerId: S.id,
101
+ courseId: y
102
+ } : {}), [G, { loading: K }] = m(), q = C?.tecCourse ?? null, J = [...q?.lessons ?? []].sort((e, t) => e.position - t.position), Y = (q?.enrollments ?? []).find((e) => e.learnerId === S?.id), X = (U?.tecListCertificates ?? []).find((e) => e.status === "ISSUED"), Z = !!Y && Y.progressPct >= 100, ne = async () => {
103
+ !y || !S?.id || (await G({ variables: {
104
+ courseId: y,
105
+ learnerId: S.id,
67
106
  score: 100
68
- } })).data?.tecIssueCertificate && (c.success("Certificate issued", "Your verifiable certificate is ready in My Learning."), await z());
69
- }, J = async () => {
70
- b && (await P({ variables: { input: { courseId: b } } })).data?.tecEnroll && (c.success("Enrolled", `You're enrolled in "${H?.title}".`), await N());
71
- }, Y = async () => {
72
- if (!W) return;
73
- let e = Math.min(U.length, W.lessonsCompleted + 1), t = U.length ? Math.round(e / U.length * 100) : 100;
74
- (await I({ variables: { input: {
75
- enrollmentId: W.id,
107
+ } })).data?.tecIssueCertificate && (u.success("Certificate issued", "Your verifiable certificate is ready in My Learning."), await W());
108
+ }, re = async () => {
109
+ y && (await z({ variables: { input: { courseId: y } } })).data?.tecEnroll && (u.success("Enrolled", `You're enrolled in "${q?.title}".`), await R());
110
+ }, ie = async () => {
111
+ if (!Y) return;
112
+ let e = Math.min(J.length, Y.lessonsCompleted + 1), t = J.length ? Math.round(e / J.length * 100) : 100;
113
+ (await V({ variables: { input: {
114
+ enrollmentId: Y.id,
76
115
  lessonsCompleted: e,
77
116
  progressPct: t
78
- } } })).data?.tecUpdateProgress && (c.success("Progress saved", `${t}% complete`), await N());
117
+ } } })).data?.tecUpdateProgress && (u.success("Progress saved", `${t}% complete`), await R());
79
118
  };
80
- if (A && !H) return /* @__PURE__ */ T(t, {
119
+ if (w && !q) return /* @__PURE__ */ A(n, {
81
120
  title: "Course",
82
121
  backPath: "/courses/courses-page",
83
- children: [/* @__PURE__ */ w(k, { className: "mb-4 h-40 w-full rounded-xl" }), /* @__PURE__ */ w(k, { className: "h-64 w-full rounded-xl" })]
122
+ children: [/* @__PURE__ */ k(P, { className: "mb-4 h-40 w-full rounded-2xl" }), /* @__PURE__ */ k(P, { className: "h-64 w-full rounded-xl" })]
84
123
  });
85
- if (M || !H) return /* @__PURE__ */ w(t, {
124
+ if (F || !q) return /* @__PURE__ */ k(n, {
86
125
  title: "Course",
87
126
  backPath: "/courses/courses-page",
88
- children: M ? /* @__PURE__ */ w(s, {
127
+ children: F ? /* @__PURE__ */ k(l, {
89
128
  title: "Couldn't load course",
90
- error: M
91
- }) : /* @__PURE__ */ w(o, {
129
+ error: F
130
+ }) : /* @__PURE__ */ k(c, {
92
131
  title: "Course not found",
93
132
  description: "This course may have been unpublished."
94
133
  })
95
134
  });
96
- let X = W?.lessonsCompleted ?? 0;
97
- return /* @__PURE__ */ T(t, {
98
- hero: !0,
135
+ let Q = Y?.lessonsCompleted ?? 0, $ = Math.max(0, J.length - Q), ae = Y && Y.progressPct >= 100 ? "Course complete — claim your certificate below." : $ === 1 ? "1 lesson to go — almost there!" : `${$} lessons to go — keep it up!`, oe = `${q.topic ?? ""} ${q.title}`;
136
+ return /* @__PURE__ */ A(n, {
99
137
  backPath: "/courses/courses-page",
100
- title: H.title,
101
- description: H.summary ?? void 0,
102
- actions: W ? /* @__PURE__ */ T(D, {
103
- onClick: Y,
104
- disabled: L || X >= U.length,
105
- children: [/* @__PURE__ */ w(g, { size: 16 }), X >= U.length ? "Completed" : "Complete next lesson"]
106
- }) : /* @__PURE__ */ T(D, {
107
- onClick: J,
108
- disabled: F,
138
+ title: q.title,
139
+ description: q.summary ?? void 0,
140
+ actions: Y ? /* @__PURE__ */ A(M, {
141
+ onClick: ie,
142
+ disabled: H || Q >= J.length,
143
+ children: [/* @__PURE__ */ k(_, { size: 16 }), Q >= J.length ? "Completed" : "Complete next lesson"]
144
+ }) : /* @__PURE__ */ A(M, {
145
+ onClick: re,
146
+ disabled: B,
109
147
  children: [
110
- /* @__PURE__ */ w(h, { size: 16 }),
148
+ /* @__PURE__ */ k(g, { size: 16 }),
111
149
  " ",
112
- F ? "Enrolling…" : "Enroll"
150
+ B ? "Enrolling…" : "Enroll"
113
151
  ]
114
152
  }),
115
153
  children: [
116
- /* @__PURE__ */ T("div", {
117
- className: "mb-5 flex flex-wrap items-center gap-2",
118
- children: [
119
- /* @__PURE__ */ w(a, {
120
- status: H.level,
121
- kind: "level"
122
- }),
123
- /* @__PURE__ */ w(a, { status: H.status }),
124
- H.topic ? /* @__PURE__ */ T(E, {
125
- variant: "outline",
126
- className: "gap-1",
127
- children: [
128
- /* @__PURE__ */ w(y, { size: 12 }),
129
- " ",
130
- H.topic
131
- ]
132
- }) : null,
133
- H.tags.map((e) => /* @__PURE__ */ w(E, {
134
- variant: "secondary",
135
- children: e
136
- }, e))
137
- ]
154
+ /* @__PURE__ */ k(i, {
155
+ height: "h-40",
156
+ seed: oe,
157
+ icon: a(q.topic ?? q.title),
158
+ className: "mb-5 rounded-2xl",
159
+ children: /* @__PURE__ */ A("div", {
160
+ className: "flex w-full flex-col gap-2",
161
+ children: [
162
+ /* @__PURE__ */ k("span", {
163
+ className: "text-xs font-medium uppercase tracking-wide text-white/80",
164
+ children: q.topic ?? "Course"
165
+ }),
166
+ /* @__PURE__ */ k("h2", {
167
+ className: "text-2xl font-bold leading-tight text-white drop-shadow-sm sm:text-3xl",
168
+ children: q.title
169
+ }),
170
+ /* @__PURE__ */ A("div", {
171
+ className: "flex flex-wrap items-center gap-2",
172
+ children: [
173
+ /* @__PURE__ */ k(I, {
174
+ icon: T,
175
+ children: s(q.level)
176
+ }),
177
+ /* @__PURE__ */ k(I, {
178
+ icon: _,
179
+ children: s(q.status)
180
+ }),
181
+ q.topic ? /* @__PURE__ */ k(I, {
182
+ icon: x,
183
+ children: q.topic
184
+ }) : null
185
+ ]
186
+ })
187
+ ]
188
+ })
138
189
  }),
139
- /* @__PURE__ */ T("div", {
190
+ q.tags.length ? /* @__PURE__ */ k("div", {
191
+ className: "mb-5 flex flex-wrap items-center gap-2",
192
+ children: q.tags.map((e) => /* @__PURE__ */ k(j, {
193
+ variant: "secondary",
194
+ children: e
195
+ }, e))
196
+ }) : null,
197
+ /* @__PURE__ */ A("div", {
140
198
  className: "mb-6 grid grid-cols-2 gap-3 sm:grid-cols-4",
141
199
  children: [
142
- /* @__PURE__ */ w(n, {
200
+ /* @__PURE__ */ k(r, {
143
201
  label: "Lessons",
144
- value: U.length,
145
- icon: v
202
+ value: J.length,
203
+ icon: b,
204
+ tone: "blue"
146
205
  }),
147
- /* @__PURE__ */ w(n, {
206
+ /* @__PURE__ */ k(r, {
148
207
  label: "Duration",
149
- value: r(H.estimatedMinutes),
150
- icon: _
208
+ value: o(q.estimatedMinutes),
209
+ icon: v,
210
+ tone: "teal"
151
211
  }),
152
- /* @__PURE__ */ w(n, {
212
+ /* @__PURE__ */ k(r, {
153
213
  label: "Enrolled",
154
- value: H.enrollments?.length ?? 0,
155
- icon: h
214
+ value: q.enrollments?.length ?? 0,
215
+ icon: D,
216
+ tone: "indigo"
156
217
  }),
157
- /* @__PURE__ */ w(n, {
218
+ /* @__PURE__ */ k(r, {
158
219
  label: "Your progress",
159
- value: W ? `${W.progressPct}%` : "Not started",
160
- icon: g
220
+ value: Y ? `${Y.progressPct}%` : "Not started",
221
+ icon: T,
222
+ tone: "purple"
161
223
  })
162
224
  ]
163
225
  }),
164
- W ? /* @__PURE__ */ T(O, {
165
- className: "mb-6 p-4",
166
- children: [/* @__PURE__ */ T("div", {
167
- className: "mb-2 flex items-center justify-between text-sm",
168
- children: [/* @__PURE__ */ w("span", {
169
- className: "font-medium text-text-primary",
170
- children: "Your progress"
171
- }), /* @__PURE__ */ T("span", {
172
- className: "text-text-secondary",
226
+ Y ? /* @__PURE__ */ A(N, {
227
+ className: "mb-6 p-5",
228
+ children: [
229
+ /* @__PURE__ */ A("div", {
230
+ className: "mb-3 flex items-center gap-2",
173
231
  children: [
174
- X,
175
- "/",
176
- U.length,
177
- " lessons · ",
178
- W.progressPct,
179
- "%"
232
+ /* @__PURE__ */ k("span", {
233
+ className: "flex h-8 w-8 items-center justify-center rounded-lg bg-accent-primary/15 text-accent-primary",
234
+ children: /* @__PURE__ */ k(T, { size: 16 })
235
+ }),
236
+ /* @__PURE__ */ k("span", {
237
+ className: "text-sm font-semibold text-text-primary",
238
+ children: "Your progress"
239
+ }),
240
+ /* @__PURE__ */ A("span", {
241
+ className: "ml-auto text-sm text-text-secondary",
242
+ children: [
243
+ Q,
244
+ "/",
245
+ J.length,
246
+ " lessons · ",
247
+ Y.progressPct,
248
+ "%"
249
+ ]
250
+ })
180
251
  ]
181
- })]
182
- }), /* @__PURE__ */ w("div", {
183
- className: "h-2 w-full overflow-hidden rounded-full bg-bg-sunken",
184
- children: /* @__PURE__ */ w("div", {
185
- className: "h-full rounded-full bg-accent-primary transition-all",
186
- style: { width: `${W.progressPct}%` }
252
+ }),
253
+ /* @__PURE__ */ k("div", {
254
+ className: "h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken",
255
+ children: /* @__PURE__ */ k("div", {
256
+ className: "h-full rounded-full bg-gradient-to-r from-accent-primary via-accent-indigo to-accent-purple transition-all duration-500",
257
+ style: { width: `${Y.progressPct}%` }
258
+ })
259
+ }),
260
+ /* @__PURE__ */ k("p", {
261
+ className: "mt-2 text-xs text-text-muted",
262
+ children: ae
187
263
  })
188
- })]
264
+ ]
189
265
  }) : null,
190
- G ? /* @__PURE__ */ T(O, {
191
- className: "mb-6 flex flex-wrap items-center gap-3 border-status-success-border p-4",
192
- children: [/* @__PURE__ */ w(m, {
193
- className: "text-accent-teal",
194
- size: 22
195
- }), /* @__PURE__ */ T("div", {
196
- className: "min-w-0",
197
- children: [/* @__PURE__ */ w("div", {
198
- className: "text-sm font-semibold text-text-primary",
199
- children: "Certificate earned"
200
- }), /* @__PURE__ */ T("div", {
201
- className: "text-xs text-text-muted",
202
- children: [
203
- "Serial ",
204
- G.serial,
205
- " · Score ",
206
- G.score
207
- ]
208
- })]
209
- })]
210
- }) : K ? /* @__PURE__ */ T(O, {
211
- className: "mb-6 flex flex-wrap items-center justify-between gap-3 p-4",
212
- children: [/* @__PURE__ */ T("div", {
213
- className: "flex items-center gap-3",
214
- children: [/* @__PURE__ */ w(m, {
215
- className: "text-accent-teal",
216
- size: 22
217
- }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("div", {
218
- className: "text-sm font-semibold text-text-primary",
266
+ X ? /* @__PURE__ */ A(N, {
267
+ className: "mb-6 flex flex-wrap items-center gap-3 border border-status-success-border/60 bg-status-success-bg-subtle/30 p-4",
268
+ children: [
269
+ /* @__PURE__ */ k("span", {
270
+ className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-status-warning-bg-subtle text-status-warning-text ring-1 ring-status-warning-border/30",
271
+ children: /* @__PURE__ */ k(h, { size: 22 })
272
+ }),
273
+ /* @__PURE__ */ A("div", {
274
+ className: "min-w-0 flex-1",
275
+ children: [/* @__PURE__ */ k("div", {
276
+ className: "text-sm font-semibold text-text-primary",
277
+ children: "Certificate earned"
278
+ }), /* @__PURE__ */ A("div", {
279
+ className: "text-xs text-text-muted",
280
+ children: [
281
+ "Serial ",
282
+ X.serial,
283
+ " · Score ",
284
+ X.score
285
+ ]
286
+ })]
287
+ }),
288
+ /* @__PURE__ */ A("span", {
289
+ className: "inline-flex items-center gap-1 rounded-full border border-status-success-border bg-status-success-bg-subtle px-2.5 py-1 text-xs font-medium text-status-success-text",
290
+ children: [/* @__PURE__ */ k(te, { size: 13 }), " Verified"]
291
+ })
292
+ ]
293
+ }) : Z ? /* @__PURE__ */ A(N, {
294
+ className: "mb-6 flex flex-col items-start gap-4 border border-status-success-border/60 bg-status-success-bg-subtle/40 p-5 sm:flex-row sm:items-center sm:justify-between",
295
+ children: [/* @__PURE__ */ A("div", {
296
+ className: "flex items-center gap-4",
297
+ children: [/* @__PURE__ */ k("span", {
298
+ className: "flex h-14 w-14 shrink-0 items-center justify-center rounded-2xl bg-status-warning-bg-subtle text-status-warning-text ring-1 ring-status-warning-border/40",
299
+ children: /* @__PURE__ */ k(E, { size: 26 })
300
+ }), /* @__PURE__ */ A("div", { children: [/* @__PURE__ */ k("div", {
301
+ className: "text-base font-semibold text-text-primary",
219
302
  children: "You finished this course"
220
- }), /* @__PURE__ */ w("div", {
221
- className: "text-xs text-text-muted",
303
+ }), /* @__PURE__ */ k("div", {
304
+ className: "text-sm text-text-muted",
222
305
  children: "Claim your verifiable certificate of completion."
223
306
  })] })]
224
- }), /* @__PURE__ */ T(D, {
225
- onClick: q,
226
- disabled: V,
307
+ }), /* @__PURE__ */ A(M, {
308
+ onClick: ne,
309
+ disabled: K,
227
310
  children: [
228
- /* @__PURE__ */ w(m, { size: 16 }),
311
+ /* @__PURE__ */ k(h, { size: 16 }),
229
312
  " ",
230
- V ? "Issuing…" : "Claim certificate"
313
+ K ? "Issuing…" : "Claim certificate"
231
314
  ]
232
315
  })]
233
316
  }) : null,
234
- /* @__PURE__ */ T(O, {
317
+ /* @__PURE__ */ A(N, {
235
318
  className: "p-5",
236
- children: [/* @__PURE__ */ w("h2", {
237
- className: "mb-2 text-base font-semibold text-text-primary",
238
- children: "Curriculum"
239
- }), U.length === 0 ? /* @__PURE__ */ w("p", {
319
+ children: [/* @__PURE__ */ A("div", {
320
+ className: "mb-3 flex items-center justify-between gap-2",
321
+ children: [/* @__PURE__ */ A("h2", {
322
+ className: "flex items-center gap-2 text-base font-semibold text-text-primary",
323
+ children: [/* @__PURE__ */ k(g, {
324
+ size: 18,
325
+ className: "text-accent-primary"
326
+ }), " Curriculum"]
327
+ }), J.length ? /* @__PURE__ */ A("span", {
328
+ className: "rounded-full bg-status-success-bg-subtle px-2.5 py-1 text-xs font-medium text-status-success-text",
329
+ children: [
330
+ Q,
331
+ "/",
332
+ J.length,
333
+ " completed"
334
+ ]
335
+ }) : null]
336
+ }), J.length === 0 ? /* @__PURE__ */ k("p", {
240
337
  className: "py-6 text-center text-sm text-text-muted",
241
338
  children: "Lessons for this course are being prepared."
242
- }) : /* @__PURE__ */ w("div", { children: U.map((e, t) => /* @__PURE__ */ w(j, {
243
- lesson: e,
244
- done: t < X
245
- }, e.id)) })]
339
+ }) : /* @__PURE__ */ k("div", {
340
+ className: "flex flex-col",
341
+ children: J.map((e, t) => /* @__PURE__ */ k(L, {
342
+ lesson: e,
343
+ index: t,
344
+ done: t < Q
345
+ }, e.id))
346
+ })]
246
347
  })
247
348
  ]
248
349
  });
249
350
  }
250
351
  //#endregion
251
- export { M as CoursesCourseDetailsPagePage };
352
+ export { R as CoursesCourseDetailsPagePage };
252
353
 
253
354
  //# sourceMappingURL=CoursesCourseDetailsPagePage.js.map