@burdenoff/microfe-technospam 2026.801.1 → 2026.827.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 (41) hide show
  1. package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -1
  2. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -1
  3. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -1
  4. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -1
  5. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -1
  6. package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -1
  7. package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -1
  8. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -1
  9. package/dist/node_modules/sonner/dist/index.js.map +1 -1
  10. package/dist/technospam/api/technospamApi.d.ts +19 -0
  11. package/dist/technospam/api/technospamApi.d.ts.map +1 -1
  12. package/dist/technospam/api/technospamApi.js +171 -150
  13. package/dist/technospam/api/technospamApi.js.map +1 -1
  14. package/dist/technospam/components/SubmissionViews.d.ts +31 -0
  15. package/dist/technospam/components/SubmissionViews.d.ts.map +1 -0
  16. package/dist/technospam/components/SubmissionViews.js +149 -0
  17. package/dist/technospam/components/SubmissionViews.js.map +1 -0
  18. package/dist/technospam/components/index.d.ts +1 -0
  19. package/dist/technospam/components/index.d.ts.map +1 -1
  20. package/dist/technospam/components/index.js +1 -0
  21. package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -1
  22. package/dist/technospam/pages/AdminAdminDashboardPagePage.js +725 -500
  23. package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -1
  24. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
  25. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +343 -262
  26. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
  27. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts.map +1 -1
  28. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +97 -235
  29. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -1
  30. package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -1
  31. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +293 -202
  32. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -1
  33. package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts.map +1 -1
  34. package/dist/technospam/pages/CoursesMyLearningPagePage.js +2 -2
  35. package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -1
  36. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +1 -2
  37. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -1
  38. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.d.ts.map +1 -1
  39. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js +180 -121
  40. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js.map +1 -1
  41. package/package.json +2 -2
@@ -20,9 +20,9 @@ import { BarChart as fe } from "../../node_modules/recharts/es6/chart/BarChart.j
20
20
  import { PieChart as pe } from "../../node_modules/recharts/es6/chart/PieChart.js";
21
21
  import { AreaChart as me } from "../../node_modules/recharts/es6/chart/AreaChart.js";
22
22
  import { useMemo as h, useState as g } from "react";
23
- import { Activity as _, Award as he, BarChart3 as ge, BookOpen as v, CalendarRange as y, Code2 as b, GraduationCap as x, Library as _e, Percent as ve, TrendingUp as ye, Trophy as be, Users as xe, X as S } from "lucide-react";
24
- import { jsx as C, jsxs as w } from "react/jsx-runtime";
25
- import { Button as T, GlassCard as E, Input as D } from "@burdenoff/fe-libs/ui";
23
+ import { Activity as _, Award as he, BarChart3 as ge, BookOpen as v, CalendarRange as y, Code2 as b, GraduationCap as x, Library as _e, Percent as ve, Target as S, TrendingUp as ye, Trophy as be, Users as xe, X as C } from "lucide-react";
24
+ import { jsx as w, jsxs as T } from "react/jsx-runtime";
25
+ import { Button as E, GlassCard as D, Input as O } from "@burdenoff/fe-libs/ui";
26
26
  //#region src/technospam/pages/AnalyticsAnalyticsPagePage.tsx
27
27
  var Se = [
28
28
  "ENROLLED",
@@ -55,13 +55,13 @@ var Se = [
55
55
  RUNTIME_ERROR: "var(--color-status-error)",
56
56
  COMPILE_ERROR: "var(--color-status-error)",
57
57
  PENDING: "var(--color-text-muted)"
58
- }, O = {
58
+ }, k = {
59
59
  background: "var(--color-bg-surface)",
60
60
  border: "1px solid var(--color-border-seam)",
61
61
  borderRadius: 12,
62
62
  color: "var(--color-text-primary)",
63
63
  fontSize: 12
64
- }, k = { color: "var(--color-text-secondary)" }, A = {
64
+ }, A = { color: "var(--color-text-secondary)" }, j = {
65
65
  fill: "var(--color-text-muted)",
66
66
  fontSize: 12
67
67
  };
@@ -80,72 +80,135 @@ function De(e) {
80
80
  })
81
81
  };
82
82
  }
83
- var j = {
83
+ var M = {
84
84
  blue: "bg-accent-primary/15 text-accent-primary ring-accent-primary/20",
85
85
  teal: "bg-accent-teal/15 text-accent-teal ring-accent-teal/20",
86
86
  purple: "bg-accent-purple/15 text-accent-purple ring-accent-purple/20",
87
87
  indigo: "bg-accent-indigo/15 text-accent-indigo ring-accent-indigo/20"
88
88
  };
89
- function M({ icon: e, title: t, subtitle: r, tone: i }) {
90
- return /* @__PURE__ */ w("div", {
89
+ function N({ icon: e, title: t, subtitle: r, tone: i }) {
90
+ return /* @__PURE__ */ T("div", {
91
91
  className: "mb-4 flex items-center gap-3",
92
- children: [/* @__PURE__ */ C("span", {
93
- className: n("flex h-9 w-9 shrink-0 items-center justify-center rounded-xl ring-1", j[i]),
94
- children: /* @__PURE__ */ C(e, { size: 17 })
95
- }), /* @__PURE__ */ w("div", {
92
+ children: [/* @__PURE__ */ w("span", {
93
+ className: n("flex h-9 w-9 shrink-0 items-center justify-center rounded-xl ring-1", M[i]),
94
+ children: /* @__PURE__ */ w(e, { size: 17 })
95
+ }), /* @__PURE__ */ T("div", {
96
96
  className: "min-w-0",
97
- children: [/* @__PURE__ */ C("h3", {
97
+ children: [/* @__PURE__ */ w("h3", {
98
98
  className: "truncate text-sm font-semibold text-text-primary",
99
99
  children: t
100
- }), r ? /* @__PURE__ */ C("p", {
100
+ }), r ? /* @__PURE__ */ w("p", {
101
101
  className: "truncate text-xs text-text-muted",
102
102
  children: r
103
103
  }) : null]
104
104
  })]
105
105
  });
106
106
  }
107
- function N({ title: e, subtitle: t, icon: n, tone: r = "teal", isEmpty: i, emptyLabel: a, children: o }) {
108
- return /* @__PURE__ */ w(E, {
107
+ function P({ title: e, subtitle: t, icon: n, tone: r = "teal", isEmpty: i, emptyLabel: a, children: o }) {
108
+ return /* @__PURE__ */ T(D, {
109
109
  className: "p-5 transition-shadow duration-200 hover:shadow-lg",
110
- children: [/* @__PURE__ */ C(M, {
110
+ children: [/* @__PURE__ */ w(N, {
111
111
  icon: n,
112
112
  title: e,
113
113
  subtitle: t,
114
114
  tone: r
115
- }), i ? /* @__PURE__ */ C("div", {
115
+ }), i ? /* @__PURE__ */ w("div", {
116
116
  className: "flex h-[240px] items-center justify-center text-center text-sm text-text-muted",
117
117
  children: a
118
- }) : /* @__PURE__ */ C(l, {
118
+ }) : /* @__PURE__ */ w(l, {
119
119
  width: "100%",
120
120
  height: 260,
121
121
  children: o
122
122
  })]
123
123
  });
124
124
  }
125
- function Oe(e) {
126
- return e ? `${e}T00:00:00.000Z` : void 0;
125
+ function Oe({ data: e }) {
126
+ let t = e.length > 1 ? e[e.length - 1] : void 0;
127
+ return /* @__PURE__ */ T(D, {
128
+ className: "p-5 transition-shadow duration-200 hover:shadow-lg",
129
+ children: [/* @__PURE__ */ w(N, {
130
+ icon: S,
131
+ title: "Accepted rate by topic",
132
+ subtitle: "Where your solutions land, and where they don't",
133
+ tone: "indigo"
134
+ }), e.length === 0 ? /* @__PURE__ */ w("div", {
135
+ className: "flex h-[240px] items-center justify-center text-center text-sm text-text-muted",
136
+ children: "Solve a practice problem and your per-topic rate builds here"
137
+ }) : /* @__PURE__ */ T("div", {
138
+ className: "space-y-3",
139
+ children: [e.map((e) => {
140
+ let r = t?.topic === e.topic;
141
+ return /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("div", {
142
+ className: "mb-1 flex flex-wrap items-baseline gap-x-2",
143
+ children: [
144
+ /* @__PURE__ */ w("span", {
145
+ className: "truncate text-sm font-medium text-text-primary",
146
+ children: e.topic
147
+ }),
148
+ /* @__PURE__ */ T("span", {
149
+ className: n("text-sm font-semibold tabular-nums", r ? "text-status-warning-text" : "text-text-secondary"),
150
+ children: [e.rate, "%"]
151
+ }),
152
+ /* @__PURE__ */ T("span", {
153
+ className: "ml-auto shrink-0 rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-muted",
154
+ children: [
155
+ e.accepted,
156
+ " of ",
157
+ e.attempted,
158
+ " accepted"
159
+ ]
160
+ })
161
+ ]
162
+ }), /* @__PURE__ */ w("div", {
163
+ className: "h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken",
164
+ children: /* @__PURE__ */ w("div", {
165
+ className: n("h-full rounded-full transition-all duration-500", r ? "bg-status-warning-text" : "bg-accent-primary"),
166
+ style: { width: `${e.rate}%` }
167
+ })
168
+ })] }, e.topic);
169
+ }), t ? /* @__PURE__ */ T("p", {
170
+ className: "pt-1 text-xs text-text-muted",
171
+ children: [
172
+ "Lowest measured rate: ",
173
+ /* @__PURE__ */ w("span", {
174
+ className: "text-text-secondary",
175
+ children: t.topic
176
+ }),
177
+ " —",
178
+ " ",
179
+ t.accepted,
180
+ " of ",
181
+ t.attempted,
182
+ " attempts accepted in the loaded range."
183
+ ]
184
+ }) : null]
185
+ })]
186
+ });
127
187
  }
128
188
  function ke(e) {
189
+ return e ? `${e}T00:00:00.000Z` : void 0;
190
+ }
191
+ function Ae(e) {
129
192
  return e ? `${e}T23:59:59.999Z` : void 0;
130
193
  }
131
- function Ae({ start: e, end: t, onStart: n, onEnd: r, onPreset: i, onClear: a }) {
132
- return /* @__PURE__ */ w(E, {
194
+ function je({ start: e, end: t, onStart: n, onEnd: r, onPreset: i, onClear: a }) {
195
+ return /* @__PURE__ */ T(D, {
133
196
  className: "mb-6 flex flex-col gap-3 p-4 lg:flex-row lg:items-end lg:justify-between",
134
- children: [/* @__PURE__ */ w("div", {
197
+ children: [/* @__PURE__ */ T("div", {
135
198
  className: "flex flex-wrap items-end gap-3",
136
199
  children: [
137
- /* @__PURE__ */ w("div", {
200
+ /* @__PURE__ */ T("div", {
138
201
  className: "flex items-center gap-2 self-center text-sm font-medium text-text-secondary",
139
- children: [/* @__PURE__ */ C(y, {
202
+ children: [/* @__PURE__ */ w(y, {
140
203
  size: 16,
141
204
  className: "text-accent-teal"
142
205
  }), "Date range"]
143
206
  }),
144
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("label", {
207
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("label", {
145
208
  className: "mb-1 block text-xs font-medium text-text-muted",
146
209
  htmlFor: "tec-range-from",
147
210
  children: "From"
148
- }), /* @__PURE__ */ C(D, {
211
+ }), /* @__PURE__ */ w(O, {
149
212
  id: "tec-range-from",
150
213
  type: "date",
151
214
  value: e,
@@ -153,11 +216,11 @@ function Ae({ start: e, end: t, onStart: n, onEnd: r, onPreset: i, onClear: a })
153
216
  onChange: (e) => n(e.target.value),
154
217
  className: "w-40"
155
218
  })] }),
156
- /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("label", {
219
+ /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("label", {
157
220
  className: "mb-1 block text-xs font-medium text-text-muted",
158
221
  htmlFor: "tec-range-to",
159
222
  children: "To"
160
- }), /* @__PURE__ */ C(D, {
223
+ }), /* @__PURE__ */ w(O, {
161
224
  id: "tec-range-to",
162
225
  type: "date",
163
226
  value: t,
@@ -165,29 +228,29 @@ function Ae({ start: e, end: t, onStart: n, onEnd: r, onPreset: i, onClear: a })
165
228
  onChange: (e) => r(e.target.value),
166
229
  className: "w-40"
167
230
  })] }),
168
- e || t ? /* @__PURE__ */ w(T, {
231
+ e || t ? /* @__PURE__ */ T(E, {
169
232
  variant: "ghost",
170
233
  size: "sm",
171
234
  onClick: a,
172
- children: [/* @__PURE__ */ C(S, { size: 14 }), " Clear"]
235
+ children: [/* @__PURE__ */ w(C, { size: 14 }), " Clear"]
173
236
  }) : null
174
237
  ]
175
- }), /* @__PURE__ */ w("div", {
238
+ }), /* @__PURE__ */ T("div", {
176
239
  className: "flex flex-wrap gap-2",
177
240
  children: [
178
- /* @__PURE__ */ C(T, {
241
+ /* @__PURE__ */ w(E, {
179
242
  variant: "outline",
180
243
  size: "sm",
181
244
  onClick: () => i(7),
182
245
  children: "Last 7 days"
183
246
  }),
184
- /* @__PURE__ */ C(T, {
247
+ /* @__PURE__ */ w(E, {
185
248
  variant: "outline",
186
249
  size: "sm",
187
250
  onClick: () => i(30),
188
251
  children: "Last 30 days"
189
252
  }),
190
- /* @__PURE__ */ C(T, {
253
+ /* @__PURE__ */ w(E, {
191
254
  variant: "outline",
192
255
  size: "sm",
193
256
  onClick: () => i(90),
@@ -197,12 +260,12 @@ function Ae({ start: e, end: t, onStart: n, onEnd: r, onPreset: i, onClear: a })
197
260
  })]
198
261
  });
199
262
  }
200
- function P() {
201
- let n = t(), { currentUser: y } = e(), S = y?.id, [D, j] = g(""), [P, F] = g(""), I = Oe(D), L = ke(P), je = (e) => {
263
+ function F() {
264
+ let n = t(), { currentUser: y } = e(), S = y?.id, [C, O] = g(""), [M, F] = g(""), I = ke(C), L = Ae(M), Me = (e) => {
202
265
  let t = /* @__PURE__ */ new Date(), n = /* @__PURE__ */ new Date();
203
- n.setDate(n.getDate() - e), j(n.toISOString().slice(0, 10)), F(t.toISOString().slice(0, 10));
204
- }, Me = () => {
205
- j(""), F("");
266
+ n.setDate(n.getDate() - e), O(n.toISOString().slice(0, 10)), F(t.toISOString().slice(0, 10));
267
+ }, Ne = () => {
268
+ O(""), F("");
206
269
  }, R = I || L ? {
207
270
  startDate: I,
208
271
  endDate: L
@@ -212,7 +275,7 @@ function P() {
212
275
  } : {}), B = le(S ? {
213
276
  learnerId: S,
214
277
  ...R
215
- } : {}), V = ce(S ? { menteeId: S } : {}), H = re(S ? { learnerId: S } : {}), Ne = ie({ status: "PUBLISHED" }), Pe = se({ status: "PUBLISHED" }), Fe = oe({}), U = h(() => z.data?.tecListEnrollments.items ?? [], [z.data]), W = h(() => B.data?.tecListSubmissions.items ?? [], [B.data]), G = V.data?.tecListSessions.items ?? [], K = H.data?.tecListCertificates ?? [], Ie = Ne.data?.tecListCourses.items.length ?? 0, Le = Pe.data?.tecListProblems.items.length ?? 0, Re = Fe.data?.tecListHackathons.items.length ?? 0, q = h(() => {
278
+ } : {}), V = ce(S ? { menteeId: S } : {}), H = re(S ? { learnerId: S } : {}), Pe = ie({ status: "PUBLISHED" }), Fe = se({ status: "PUBLISHED" }), Ie = oe({}), U = h(() => z.data?.tecListEnrollments.items ?? [], [z.data]), W = h(() => B.data?.tecListSubmissions.items ?? [], [B.data]), G = V.data?.tecListSessions.items ?? [], K = H.data?.tecListCertificates ?? [], Le = Pe.data?.tecListCourses.items.length ?? 0, Re = Fe.data?.tecListProblems.items.length ?? 0, ze = Ie.data?.tecListHackathons.items.length ?? 0, q = h(() => {
216
279
  let e = U.filter((e) => e.status === "COMPLETED").length, t = U.length ? Math.round(U.reduce((e, t) => e + t.progressPct, 0) / U.length) : 0, n = W.filter((e) => e.verdict === "ACCEPTED");
217
280
  return {
218
281
  coursesCompleted: e,
@@ -228,7 +291,21 @@ function P() {
228
291
  label: Te[e],
229
292
  count: W.filter((t) => t.verdict === e).length,
230
293
  color: Ee[e]
231
- })).filter((e) => e.count > 0), [W]), X = h(() => {
294
+ })).filter((e) => e.count > 0), [W]), Be = h(() => {
295
+ let e = /* @__PURE__ */ new Map();
296
+ return W.forEach((t) => {
297
+ let n = t.problem?.topic?.trim() || "Untagged", r = e.get(n) ?? {
298
+ accepted: 0,
299
+ attempted: 0
300
+ };
301
+ r.attempted += 1, t.verdict === "ACCEPTED" && (r.accepted += 1), e.set(n, r);
302
+ }), [...e.entries()].map(([e, t]) => ({
303
+ topic: e,
304
+ accepted: t.accepted,
305
+ attempted: t.attempted,
306
+ rate: Math.round(t.accepted / t.attempted * 100)
307
+ })).sort((e, t) => t.rate - e.rate || t.attempted - e.attempted);
308
+ }, [W]), X = h(() => {
232
309
  let e = /* @__PURE__ */ new Map(), t = (t, n) => {
233
310
  let { key: r, label: i } = De(t), a = e.get(r) ?? {
234
311
  label: i,
@@ -238,111 +315,111 @@ function P() {
238
315
  a[n] += 1, e.set(r, a);
239
316
  };
240
317
  return W.forEach((e) => t(e.createdAt, "submissions")), U.forEach((e) => t(e.createdAt, "enrollments")), [...e.entries()].sort((e, t) => e[0] - t[0]).slice(-8).map(([, e]) => e);
241
- }, [W, U]), Z = U.length > 0 || W.length > 0 || G.length > 0 || K.length > 0, ze = z.loading || B.loading || V.loading || H.loading, Q = z.error || B.error || V.error || H.error, Be = ze && !Z, $ = /* @__PURE__ */ w("div", { children: [
242
- /* @__PURE__ */ C("h2", {
318
+ }, [W, U]), Z = U.length > 0 || W.length > 0 || G.length > 0 || K.length > 0, Ve = z.loading || B.loading || V.loading || H.loading, Q = z.error || B.error || V.error || H.error, He = Ve && !Z, $ = /* @__PURE__ */ T("div", { children: [
319
+ /* @__PURE__ */ w("h2", {
243
320
  className: "mb-3 text-base font-semibold text-text-primary",
244
321
  children: "Workspace overview"
245
322
  }),
246
- /* @__PURE__ */ C("p", {
323
+ /* @__PURE__ */ w("p", {
247
324
  className: "mb-4 max-w-2xl text-sm text-text-secondary",
248
325
  children: "Live content available across the TechnoSpam learning workspace right now."
249
326
  }),
250
- /* @__PURE__ */ w("div", {
327
+ /* @__PURE__ */ T("div", {
251
328
  className: "grid grid-cols-1 gap-3 sm:grid-cols-3",
252
329
  children: [
253
- /* @__PURE__ */ C(i, {
330
+ /* @__PURE__ */ w(i, {
254
331
  label: "Published courses",
255
- value: Ie,
332
+ value: Le,
256
333
  icon: _e,
257
334
  tone: "blue"
258
335
  }),
259
- /* @__PURE__ */ C(i, {
336
+ /* @__PURE__ */ w(i, {
260
337
  label: "Published problems",
261
- value: Le,
338
+ value: Re,
262
339
  icon: b,
263
340
  tone: "indigo"
264
341
  }),
265
- /* @__PURE__ */ C(i, {
342
+ /* @__PURE__ */ w(i, {
266
343
  label: "Hackathons",
267
- value: Re,
344
+ value: ze,
268
345
  icon: be,
269
346
  tone: "purple"
270
347
  })
271
348
  ]
272
349
  })
273
350
  ] });
274
- return /* @__PURE__ */ C(r, {
351
+ return /* @__PURE__ */ w(r, {
275
352
  hero: !0,
276
353
  title: "Analytics",
277
354
  description: "Your real learning performance across courses, problems, mentoring and certificates.",
278
- actions: /* @__PURE__ */ w(T, {
355
+ actions: /* @__PURE__ */ T(E, {
279
356
  variant: "outline",
280
357
  onClick: () => n("/courses/my-learning-page"),
281
- children: [/* @__PURE__ */ C(x, { size: 16 }), " My Learning"]
358
+ children: [/* @__PURE__ */ w(x, { size: 16 }), " My Learning"]
282
359
  }),
283
- children: S ? Be ? /* @__PURE__ */ w("div", {
360
+ children: S ? He ? /* @__PURE__ */ T("div", {
284
361
  className: "space-y-6",
285
- children: [/* @__PURE__ */ C(te, {
362
+ children: [/* @__PURE__ */ w(te, {
286
363
  count: 4,
287
364
  height: "h-24"
288
- }), /* @__PURE__ */ C(ne, {
365
+ }), /* @__PURE__ */ w(ne, {
289
366
  count: 2,
290
367
  height: "h-72"
291
368
  })]
292
- }) : Q && !Z ? /* @__PURE__ */ C(ee, {
369
+ }) : Q && !Z ? /* @__PURE__ */ w(ee, {
293
370
  title: "Couldn't load your analytics",
294
371
  error: Q
295
- }) : /* @__PURE__ */ w("div", {
372
+ }) : /* @__PURE__ */ T("div", {
296
373
  className: "space-y-8",
297
374
  children: [
298
- /* @__PURE__ */ C(Ae, {
299
- start: D,
300
- end: P,
301
- onStart: j,
375
+ /* @__PURE__ */ w(je, {
376
+ start: C,
377
+ end: M,
378
+ onStart: O,
302
379
  onEnd: F,
303
- onPreset: je,
304
- onClear: Me
380
+ onPreset: Me,
381
+ onClear: Ne
305
382
  }),
306
- /* @__PURE__ */ w("div", {
383
+ /* @__PURE__ */ T("div", {
307
384
  className: "grid grid-cols-2 gap-3 sm:grid-cols-3 xl:grid-cols-4",
308
385
  children: [
309
- /* @__PURE__ */ C(i, {
386
+ /* @__PURE__ */ w(i, {
310
387
  label: "Courses enrolled",
311
388
  value: U.length,
312
389
  icon: v,
313
390
  tone: "blue"
314
391
  }),
315
- /* @__PURE__ */ C(i, {
392
+ /* @__PURE__ */ w(i, {
316
393
  label: "Courses completed",
317
394
  value: q.coursesCompleted,
318
395
  icon: x,
319
396
  tone: "green"
320
397
  }),
321
- /* @__PURE__ */ C(i, {
398
+ /* @__PURE__ */ w(i, {
322
399
  label: "Avg progress",
323
400
  value: `${q.avgProgress}%`,
324
401
  icon: ye,
325
402
  tone: "purple"
326
403
  }),
327
- /* @__PURE__ */ C(i, {
404
+ /* @__PURE__ */ w(i, {
328
405
  label: "Problems solved",
329
406
  value: q.problemsSolved,
330
407
  icon: b,
331
408
  tone: "indigo"
332
409
  }),
333
- /* @__PURE__ */ C(i, {
410
+ /* @__PURE__ */ w(i, {
334
411
  label: "Acceptance rate",
335
412
  value: `${q.acceptanceRate}%`,
336
413
  icon: ve,
337
414
  tone: "teal"
338
415
  }),
339
- /* @__PURE__ */ C(i, {
416
+ /* @__PURE__ */ w(i, {
340
417
  label: "Mentor sessions",
341
418
  value: G.length,
342
419
  icon: xe,
343
420
  tone: "blue"
344
421
  }),
345
- /* @__PURE__ */ C(i, {
422
+ /* @__PURE__ */ w(i, {
346
423
  label: "Certificates",
347
424
  value: K.length,
348
425
  icon: he,
@@ -350,207 +427,211 @@ function P() {
350
427
  })
351
428
  ]
352
429
  }),
353
- Z ? /* @__PURE__ */ w("div", {
430
+ Z ? /* @__PURE__ */ T("div", {
354
431
  className: "space-y-4",
355
- children: [/* @__PURE__ */ w("div", {
356
- className: "grid grid-cols-1 gap-4 lg:grid-cols-2",
357
- children: [/* @__PURE__ */ C(N, {
358
- title: "Enrollments by status",
359
- subtitle: "How your courses are progressing",
360
- icon: v,
361
- tone: "blue",
362
- isEmpty: J.length === 0,
363
- emptyLabel: "No enrollments yet",
364
- children: /* @__PURE__ */ w(pe, { children: [
365
- /* @__PURE__ */ C(ue, {
366
- data: J,
367
- dataKey: "value",
368
- nameKey: "name",
369
- innerRadius: 60,
370
- outerRadius: 92,
371
- paddingAngle: 2,
372
- stroke: "var(--color-bg-surface)",
373
- strokeWidth: 2,
374
- children: J.map((e) => /* @__PURE__ */ C(u, { fill: e.color }, e.name))
375
- }),
376
- /* @__PURE__ */ C(c, {
377
- contentStyle: O,
378
- labelStyle: k
379
- }),
380
- /* @__PURE__ */ C(s, {
381
- iconType: "circle",
382
- wrapperStyle: { fontSize: 12 }
383
- })
384
- ] })
385
- }), /* @__PURE__ */ C(N, {
386
- title: "Submissions by verdict",
387
- subtitle: "Outcomes across your attempts",
388
- icon: b,
389
- tone: "purple",
390
- isEmpty: Y.length === 0,
391
- emptyLabel: "No submissions yet",
392
- children: /* @__PURE__ */ w(fe, {
393
- data: Y,
394
- margin: {
395
- top: 8,
396
- right: 8,
397
- left: -18,
398
- bottom: 0
399
- },
400
- children: [
401
- /* @__PURE__ */ C(d, {
402
- strokeDasharray: "3 3",
403
- stroke: "var(--color-border-seam)",
404
- vertical: !1
405
- }),
406
- /* @__PURE__ */ C(p, {
407
- dataKey: "label",
408
- tick: A,
409
- axisLine: { stroke: "var(--color-border-seam)" },
410
- tickLine: !1
411
- }),
412
- /* @__PURE__ */ C(m, {
413
- allowDecimals: !1,
414
- tick: A,
415
- axisLine: !1,
416
- tickLine: !1
417
- }),
418
- /* @__PURE__ */ C(c, {
419
- contentStyle: O,
420
- labelStyle: k,
421
- cursor: {
422
- fill: "var(--color-accent-primary)",
423
- fillOpacity: .08
424
- }
425
- }),
426
- /* @__PURE__ */ C(de, {
427
- dataKey: "count",
428
- name: "Submissions",
429
- radius: [
430
- 6,
431
- 6,
432
- 0,
433
- 0
434
- ],
435
- maxBarSize: 56,
436
- children: Y.map((e) => /* @__PURE__ */ C(u, { fill: e.color }, e.label))
437
- })
438
- ]
439
- })
440
- })]
441
- }), /* @__PURE__ */ w(E, {
442
- className: "p-5 transition-shadow duration-200 hover:shadow-lg",
443
- children: [/* @__PURE__ */ C(M, {
444
- icon: _,
445
- title: "Learning activity over time",
446
- subtitle: "Submissions and enrollments per week",
447
- tone: "teal"
448
- }), X.length === 0 ? /* @__PURE__ */ C("div", {
449
- className: "flex h-[240px] items-center justify-center text-sm text-text-muted",
450
- children: "No dated activity yet"
451
- }) : /* @__PURE__ */ C(l, {
452
- width: "100%",
453
- height: 280,
454
- children: /* @__PURE__ */ w(me, {
455
- data: X,
456
- margin: {
457
- top: 8,
458
- right: 12,
459
- left: -18,
460
- bottom: 0
461
- },
462
- children: [
463
- /* @__PURE__ */ w("defs", { children: [/* @__PURE__ */ w("linearGradient", {
464
- id: "tec-grad-submissions",
465
- x1: "0",
466
- y1: "0",
467
- x2: "0",
468
- y2: "1",
469
- children: [/* @__PURE__ */ C("stop", {
470
- offset: "0%",
471
- stopColor: "var(--color-accent-primary)",
472
- stopOpacity: .35
473
- }), /* @__PURE__ */ C("stop", {
474
- offset: "100%",
475
- stopColor: "var(--color-accent-primary)",
476
- stopOpacity: 0
477
- })]
478
- }), /* @__PURE__ */ w("linearGradient", {
479
- id: "tec-grad-enrollments",
480
- x1: "0",
481
- y1: "0",
482
- x2: "0",
483
- y2: "1",
484
- children: [/* @__PURE__ */ C("stop", {
485
- offset: "0%",
486
- stopColor: "var(--color-accent-teal)",
487
- stopOpacity: .35
488
- }), /* @__PURE__ */ C("stop", {
489
- offset: "100%",
490
- stopColor: "var(--color-accent-teal)",
491
- stopOpacity: 0
492
- })]
493
- })] }),
494
- /* @__PURE__ */ C(d, {
495
- strokeDasharray: "3 3",
496
- stroke: "var(--color-border-seam)",
497
- vertical: !1
498
- }),
499
- /* @__PURE__ */ C(p, {
500
- dataKey: "label",
501
- tick: A,
502
- axisLine: { stroke: "var(--color-border-seam)" },
503
- tickLine: !1
504
- }),
505
- /* @__PURE__ */ C(m, {
506
- allowDecimals: !1,
507
- tick: A,
508
- axisLine: !1,
509
- tickLine: !1
432
+ children: [
433
+ /* @__PURE__ */ T("div", {
434
+ className: "grid grid-cols-1 gap-4 lg:grid-cols-2",
435
+ children: [/* @__PURE__ */ w(P, {
436
+ title: "Enrollments by status",
437
+ subtitle: "How your courses are progressing",
438
+ icon: v,
439
+ tone: "blue",
440
+ isEmpty: J.length === 0,
441
+ emptyLabel: "No enrollments yet",
442
+ children: /* @__PURE__ */ T(pe, { children: [
443
+ /* @__PURE__ */ w(ue, {
444
+ data: J,
445
+ dataKey: "value",
446
+ nameKey: "name",
447
+ innerRadius: 60,
448
+ outerRadius: 92,
449
+ paddingAngle: 2,
450
+ stroke: "var(--color-bg-surface)",
451
+ strokeWidth: 2,
452
+ children: J.map((e) => /* @__PURE__ */ w(u, { fill: e.color }, e.name))
510
453
  }),
511
- /* @__PURE__ */ C(c, {
512
- contentStyle: O,
513
- labelStyle: k
454
+ /* @__PURE__ */ w(c, {
455
+ contentStyle: k,
456
+ labelStyle: A
514
457
  }),
515
- /* @__PURE__ */ C(s, {
458
+ /* @__PURE__ */ w(s, {
516
459
  iconType: "circle",
517
460
  wrapperStyle: { fontSize: 12 }
518
- }),
519
- /* @__PURE__ */ C(f, {
520
- type: "monotone",
521
- dataKey: "submissions",
522
- name: "Submissions",
523
- stroke: "var(--color-accent-primary)",
524
- strokeWidth: 2,
525
- fill: "url(#tec-grad-submissions)"
526
- }),
527
- /* @__PURE__ */ C(f, {
528
- type: "monotone",
529
- dataKey: "enrollments",
530
- name: "Enrollments",
531
- stroke: "var(--color-accent-teal)",
532
- strokeWidth: 2,
533
- fill: "url(#tec-grad-enrollments)"
534
461
  })
535
- ]
536
- })
537
- })]
538
- })]
539
- }) : /* @__PURE__ */ C(o, {
540
- icon: /* @__PURE__ */ C(_, { size: 26 }),
462
+ ] })
463
+ }), /* @__PURE__ */ w(P, {
464
+ title: "Submissions by verdict",
465
+ subtitle: "Outcomes across your attempts",
466
+ icon: b,
467
+ tone: "purple",
468
+ isEmpty: Y.length === 0,
469
+ emptyLabel: "No submissions yet",
470
+ children: /* @__PURE__ */ T(fe, {
471
+ data: Y,
472
+ margin: {
473
+ top: 8,
474
+ right: 8,
475
+ left: -18,
476
+ bottom: 0
477
+ },
478
+ children: [
479
+ /* @__PURE__ */ w(d, {
480
+ strokeDasharray: "3 3",
481
+ stroke: "var(--color-border-seam)",
482
+ vertical: !1
483
+ }),
484
+ /* @__PURE__ */ w(p, {
485
+ dataKey: "label",
486
+ tick: j,
487
+ axisLine: { stroke: "var(--color-border-seam)" },
488
+ tickLine: !1
489
+ }),
490
+ /* @__PURE__ */ w(m, {
491
+ allowDecimals: !1,
492
+ tick: j,
493
+ axisLine: !1,
494
+ tickLine: !1
495
+ }),
496
+ /* @__PURE__ */ w(c, {
497
+ contentStyle: k,
498
+ labelStyle: A,
499
+ cursor: {
500
+ fill: "var(--color-accent-primary)",
501
+ fillOpacity: .08
502
+ }
503
+ }),
504
+ /* @__PURE__ */ w(de, {
505
+ dataKey: "count",
506
+ name: "Submissions",
507
+ radius: [
508
+ 6,
509
+ 6,
510
+ 0,
511
+ 0
512
+ ],
513
+ maxBarSize: 56,
514
+ children: Y.map((e) => /* @__PURE__ */ w(u, { fill: e.color }, e.label))
515
+ })
516
+ ]
517
+ })
518
+ })]
519
+ }),
520
+ /* @__PURE__ */ w(Oe, { data: Be }),
521
+ /* @__PURE__ */ T(D, {
522
+ className: "p-5 transition-shadow duration-200 hover:shadow-lg",
523
+ children: [/* @__PURE__ */ w(N, {
524
+ icon: _,
525
+ title: "Learning activity over time",
526
+ subtitle: "Submissions and enrollments per week",
527
+ tone: "teal"
528
+ }), X.length === 0 ? /* @__PURE__ */ w("div", {
529
+ className: "flex h-[240px] items-center justify-center text-sm text-text-muted",
530
+ children: "No dated activity yet"
531
+ }) : /* @__PURE__ */ w(l, {
532
+ width: "100%",
533
+ height: 280,
534
+ children: /* @__PURE__ */ T(me, {
535
+ data: X,
536
+ margin: {
537
+ top: 8,
538
+ right: 12,
539
+ left: -18,
540
+ bottom: 0
541
+ },
542
+ children: [
543
+ /* @__PURE__ */ T("defs", { children: [/* @__PURE__ */ T("linearGradient", {
544
+ id: "tec-grad-submissions",
545
+ x1: "0",
546
+ y1: "0",
547
+ x2: "0",
548
+ y2: "1",
549
+ children: [/* @__PURE__ */ w("stop", {
550
+ offset: "0%",
551
+ stopColor: "var(--color-accent-primary)",
552
+ stopOpacity: .35
553
+ }), /* @__PURE__ */ w("stop", {
554
+ offset: "100%",
555
+ stopColor: "var(--color-accent-primary)",
556
+ stopOpacity: 0
557
+ })]
558
+ }), /* @__PURE__ */ T("linearGradient", {
559
+ id: "tec-grad-enrollments",
560
+ x1: "0",
561
+ y1: "0",
562
+ x2: "0",
563
+ y2: "1",
564
+ children: [/* @__PURE__ */ w("stop", {
565
+ offset: "0%",
566
+ stopColor: "var(--color-accent-teal)",
567
+ stopOpacity: .35
568
+ }), /* @__PURE__ */ w("stop", {
569
+ offset: "100%",
570
+ stopColor: "var(--color-accent-teal)",
571
+ stopOpacity: 0
572
+ })]
573
+ })] }),
574
+ /* @__PURE__ */ w(d, {
575
+ strokeDasharray: "3 3",
576
+ stroke: "var(--color-border-seam)",
577
+ vertical: !1
578
+ }),
579
+ /* @__PURE__ */ w(p, {
580
+ dataKey: "label",
581
+ tick: j,
582
+ axisLine: { stroke: "var(--color-border-seam)" },
583
+ tickLine: !1
584
+ }),
585
+ /* @__PURE__ */ w(m, {
586
+ allowDecimals: !1,
587
+ tick: j,
588
+ axisLine: !1,
589
+ tickLine: !1
590
+ }),
591
+ /* @__PURE__ */ w(c, {
592
+ contentStyle: k,
593
+ labelStyle: A
594
+ }),
595
+ /* @__PURE__ */ w(s, {
596
+ iconType: "circle",
597
+ wrapperStyle: { fontSize: 12 }
598
+ }),
599
+ /* @__PURE__ */ w(f, {
600
+ type: "monotone",
601
+ dataKey: "submissions",
602
+ name: "Submissions",
603
+ stroke: "var(--color-accent-primary)",
604
+ strokeWidth: 2,
605
+ fill: "url(#tec-grad-submissions)"
606
+ }),
607
+ /* @__PURE__ */ w(f, {
608
+ type: "monotone",
609
+ dataKey: "enrollments",
610
+ name: "Enrollments",
611
+ stroke: "var(--color-accent-teal)",
612
+ strokeWidth: 2,
613
+ fill: "url(#tec-grad-enrollments)"
614
+ })
615
+ ]
616
+ })
617
+ })]
618
+ })
619
+ ]
620
+ }) : /* @__PURE__ */ w(o, {
621
+ icon: /* @__PURE__ */ w(_, { size: 26 }),
541
622
  title: "No learning activity yet",
542
623
  description: "Enroll in a course or solve a problem and your progress charts will build here. TechnoSpam is pre-launch — start learning to see your data.",
543
- action: /* @__PURE__ */ C(T, {
624
+ action: /* @__PURE__ */ w(E, {
544
625
  onClick: () => n("/courses/courses-page"),
545
626
  children: "Browse courses"
546
627
  })
547
628
  }),
548
629
  $
549
630
  ]
550
- }) : /* @__PURE__ */ w("div", {
631
+ }) : /* @__PURE__ */ T("div", {
551
632
  className: "space-y-8",
552
- children: [/* @__PURE__ */ C(o, {
553
- icon: /* @__PURE__ */ C(ge, { size: 26 }),
633
+ children: [/* @__PURE__ */ w(o, {
634
+ icon: /* @__PURE__ */ w(ge, { size: 26 }),
554
635
  title: "Sign in to view your analytics",
555
636
  description: "Your personal learning metrics appear here once you're signed in."
556
637
  }), $]
@@ -558,6 +639,6 @@ function P() {
558
639
  });
559
640
  }
560
641
  //#endregion
561
- export { P as AnalyticsAnalyticsPagePage };
642
+ export { F as AnalyticsAnalyticsPagePage };
562
643
 
563
644
  //# sourceMappingURL=AnalyticsAnalyticsPagePage.js.map