@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.
- package/dist/technospam/components/MediaCover.js +57 -0
- package/dist/technospam/components/MediaCover.js.map +1 -0
- package/dist/technospam/components/PageLayout.js +1 -1
- package/dist/technospam/components/PageLayout.js.map +1 -1
- package/dist/technospam/components/StatCard.js +19 -11
- package/dist/technospam/components/StatCard.js.map +1 -1
- package/dist/technospam/components/StatusBadge.js +1 -1
- package/dist/technospam/components/StatusBadge.js.map +1 -1
- package/dist/technospam/components/index.js +1 -0
- package/dist/technospam/pages/AdminAdminDashboardPagePage.js +525 -459
- package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -1
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +167 -127
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +178 -125
- package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js +77 -88
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +287 -186
- package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesCoursesPagePage.js +76 -83
- package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesMyLearningPagePage.js +119 -88
- package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -1
- package/dist/technospam/pages/DashboardDashboardPagePage.js +232 -199
- package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js +128 -106
- package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js.map +1 -1
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js +71 -78
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +165 -110
- package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipMentorsPagePage.js +210 -156
- package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipSessionsPagePage.js +59 -43
- package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,253 +1,354 @@
|
|
|
1
1
|
import { useTechnoSpam as e } from "../providers/TechnoSpamProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
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
|
|
9
|
-
import { useCertificatesQuery as
|
|
10
|
-
import { Award as
|
|
11
|
-
import { useSearchParams as
|
|
12
|
-
import { jsx as
|
|
13
|
-
import { Badge as
|
|
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
|
|
16
|
-
VIDEO:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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__ */
|
|
28
|
-
className:
|
|
29
|
-
children:
|
|
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__ */
|
|
62
|
+
/* @__PURE__ */ A("div", {
|
|
32
63
|
className: "min-w-0 flex-1",
|
|
33
|
-
children: [/* @__PURE__ */
|
|
34
|
-
className: "
|
|
35
|
-
children:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
|
60
|
-
let [
|
|
61
|
-
learnerId:
|
|
62
|
-
courseId:
|
|
63
|
-
} : {}), [
|
|
64
|
-
!
|
|
65
|
-
courseId:
|
|
66
|
-
learnerId:
|
|
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 && (
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
},
|
|
72
|
-
if (!
|
|
73
|
-
let e = Math.min(
|
|
74
|
-
(await
|
|
75
|
-
enrollmentId:
|
|
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 && (
|
|
117
|
+
} } })).data?.tecUpdateProgress && (u.success("Progress saved", `${t}% complete`), await R());
|
|
79
118
|
};
|
|
80
|
-
if (
|
|
119
|
+
if (w && !q) return /* @__PURE__ */ A(n, {
|
|
81
120
|
title: "Course",
|
|
82
121
|
backPath: "/courses/courses-page",
|
|
83
|
-
children: [/* @__PURE__ */
|
|
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 (
|
|
124
|
+
if (F || !q) return /* @__PURE__ */ k(n, {
|
|
86
125
|
title: "Course",
|
|
87
126
|
backPath: "/courses/courses-page",
|
|
88
|
-
children:
|
|
127
|
+
children: F ? /* @__PURE__ */ k(l, {
|
|
89
128
|
title: "Couldn't load course",
|
|
90
|
-
error:
|
|
91
|
-
}) : /* @__PURE__ */
|
|
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
|
|
97
|
-
return /* @__PURE__ */
|
|
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:
|
|
101
|
-
description:
|
|
102
|
-
actions:
|
|
103
|
-
onClick:
|
|
104
|
-
disabled:
|
|
105
|
-
children: [/* @__PURE__ */
|
|
106
|
-
}) : /* @__PURE__ */
|
|
107
|
-
onClick:
|
|
108
|
-
disabled:
|
|
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__ */
|
|
148
|
+
/* @__PURE__ */ k(g, { size: 16 }),
|
|
111
149
|
" ",
|
|
112
|
-
|
|
150
|
+
B ? "Enrolling…" : "Enroll"
|
|
113
151
|
]
|
|
114
152
|
}),
|
|
115
153
|
children: [
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
" ",
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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__ */
|
|
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__ */
|
|
200
|
+
/* @__PURE__ */ k(r, {
|
|
143
201
|
label: "Lessons",
|
|
144
|
-
value:
|
|
145
|
-
icon:
|
|
202
|
+
value: J.length,
|
|
203
|
+
icon: b,
|
|
204
|
+
tone: "blue"
|
|
146
205
|
}),
|
|
147
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ k(r, {
|
|
148
207
|
label: "Duration",
|
|
149
|
-
value:
|
|
150
|
-
icon:
|
|
208
|
+
value: o(q.estimatedMinutes),
|
|
209
|
+
icon: v,
|
|
210
|
+
tone: "teal"
|
|
151
211
|
}),
|
|
152
|
-
/* @__PURE__ */
|
|
212
|
+
/* @__PURE__ */ k(r, {
|
|
153
213
|
label: "Enrolled",
|
|
154
|
-
value:
|
|
155
|
-
icon:
|
|
214
|
+
value: q.enrollments?.length ?? 0,
|
|
215
|
+
icon: D,
|
|
216
|
+
tone: "indigo"
|
|
156
217
|
}),
|
|
157
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ k(r, {
|
|
158
219
|
label: "Your progress",
|
|
159
|
-
value:
|
|
160
|
-
icon:
|
|
220
|
+
value: Y ? `${Y.progressPct}%` : "Not started",
|
|
221
|
+
icon: T,
|
|
222
|
+
tone: "purple"
|
|
161
223
|
})
|
|
162
224
|
]
|
|
163
225
|
}),
|
|
164
|
-
|
|
165
|
-
className: "mb-6 p-
|
|
166
|
-
children: [
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
|
|
191
|
-
className: "mb-6 flex flex-wrap items-center gap-3 border-status-success-border p-4",
|
|
192
|
-
children: [
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
className: "
|
|
199
|
-
children: "
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
"
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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__ */
|
|
221
|
-
className: "text-
|
|
303
|
+
}), /* @__PURE__ */ k("div", {
|
|
304
|
+
className: "text-sm text-text-muted",
|
|
222
305
|
children: "Claim your verifiable certificate of completion."
|
|
223
306
|
})] })]
|
|
224
|
-
}), /* @__PURE__ */
|
|
225
|
-
onClick:
|
|
226
|
-
disabled:
|
|
307
|
+
}), /* @__PURE__ */ A(M, {
|
|
308
|
+
onClick: ne,
|
|
309
|
+
disabled: K,
|
|
227
310
|
children: [
|
|
228
|
-
/* @__PURE__ */
|
|
311
|
+
/* @__PURE__ */ k(h, { size: 16 }),
|
|
229
312
|
" ",
|
|
230
|
-
|
|
313
|
+
K ? "Issuing…" : "Claim certificate"
|
|
231
314
|
]
|
|
232
315
|
})]
|
|
233
316
|
}) : null,
|
|
234
|
-
/* @__PURE__ */
|
|
317
|
+
/* @__PURE__ */ A(N, {
|
|
235
318
|
className: "p-5",
|
|
236
|
-
children: [/* @__PURE__ */
|
|
237
|
-
className: "mb-
|
|
238
|
-
children: "
|
|
239
|
-
|
|
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__ */
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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 {
|
|
352
|
+
export { R as CoursesCourseDetailsPagePage };
|
|
252
353
|
|
|
253
354
|
//# sourceMappingURL=CoursesCourseDetailsPagePage.js.map
|