@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,103 +1,41 @@
1
1
  import { useTechnoSpam as e, useTechnoSpamNavigate as t } from "../providers/TechnoSpamProvider.js";
2
2
  import { useTechnoSpamAnalytics as n } from "../hooks/useTechnoSpamAnalytics.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 { StatusBadge as s } from "../components/StatusBadge.js";
7
- import { LoadMore as c } from "../components/LoadMore.js";
8
- import { EmptyView as l, ErrorView as ee, LoadingGrid as u } from "../components/StateViews.js";
9
- import { PremiumBadge as d } from "../components/UpgradeGate.js";
3
+ import { useTr as r } from "../hooks/useTr.js";
4
+ import { PageLayout as i } from "../components/PageLayout.js";
5
+ import { StatCard as a } from "../components/StatCard.js";
6
+ import { MediaCover as o, topicIcon as s } from "../components/MediaCover.js";
7
+ import { StatusBadge as c } from "../components/StatusBadge.js";
8
+ import { LoadMore as l } from "../components/LoadMore.js";
9
+ import { EmptyView as ee, ErrorView as u, LoadingGrid as d } from "../components/StateViews.js";
10
+ import { PremiumBadge as f } from "../components/UpgradeGate.js";
10
11
  import "../components/index.js";
11
- import { pageArg as te, usePageLimit as f, useProblemsQuery as p, useSubmissionsQuery as ne } from "../api/technospamApi.js";
12
- import { useMemo as m, useState as h } from "react";
13
- import { Building2 as g, CheckCircle2 as _, Code2 as v, Flame as y, Gauge as b, Layers as x, Search as S, Tag as C, Trophy as w } from "lucide-react";
12
+ import { pageArg as p, usePageLimit as m, useProblemsQuery as te, useSubmissionsQuery as h } from "../api/technospamApi.js";
13
+ import { useMemo as g, useState as _ } from "react";
14
+ import { Building2 as v, CheckCircle2 as y, Code2 as b, Flame as x, Gauge as ne, Layers as S, Search as re, Tag as C, Trophy as w } from "lucide-react";
14
15
  import { jsx as T, jsxs as E } from "react/jsx-runtime";
15
- import { Badge as D, GlassCard as O, Input as k, Select as A, SelectContent as j, SelectItem as M, SelectTrigger as N, SelectValue as P, Tabs as F, TabsList as I, TabsTrigger as L } from "@burdenoff/fe-libs/ui";
16
+ import { Badge as D, GlassCard as O, Input as ie, Select as k, SelectContent as A, SelectItem as j, SelectTrigger as M, SelectValue as N, Tabs as P, TabsList as F, TabsTrigger as I } from "@burdenoff/fe-libs/ui";
16
17
  //#region src/technospam/pages/ApplicationsProblemsPagePage.tsx
17
- var R = [
18
- {
19
- value: "ALL",
20
- label: "All"
21
- },
22
- {
23
- value: "EASY",
24
- label: "Easy"
25
- },
26
- {
27
- value: "MEDIUM",
28
- label: "Medium"
29
- },
30
- {
31
- value: "HARD",
32
- label: "Hard"
33
- }
34
- ], z = [
35
- {
36
- value: "google",
37
- label: "Google"
38
- },
39
- {
40
- value: "amazon",
41
- label: "Amazon"
42
- },
43
- {
44
- value: "meta",
45
- label: "Meta"
46
- },
47
- {
48
- value: "microsoft",
49
- label: "Microsoft"
50
- },
51
- {
52
- value: "apple",
53
- label: "Apple"
54
- },
55
- {
56
- value: "netflix",
57
- label: "Netflix"
58
- }
59
- ], B = [
60
- {
61
- value: "frontend",
62
- label: "Frontend"
63
- },
64
- {
65
- value: "backend",
66
- label: "Backend"
67
- },
68
- {
69
- value: "fullstack",
70
- label: "Full-Stack"
71
- },
72
- {
73
- value: "data-science",
74
- label: "Data Science"
75
- },
76
- {
77
- value: "mobile",
78
- label: "Mobile"
79
- },
80
- {
81
- value: "sre",
82
- label: "SRE / Infra"
83
- }
84
- ];
85
- function V({ problem: e, solved: t, onOpen: n }) {
18
+ function L({ problem: e, solved: t, onOpen: n }) {
19
+ let i = r();
86
20
  return /* @__PURE__ */ E(O, {
87
21
  className: "group flex cursor-pointer flex-col overflow-hidden transition-all duration-200 hover:-translate-y-1 hover:shadow-lg",
88
22
  onClick: n,
89
- children: [/* @__PURE__ */ E(a, {
23
+ children: [/* @__PURE__ */ E(o, {
90
24
  seed: `${e.topic ?? ""} ${e.difficulty} ${e.title}`,
91
- icon: o(e.topic ?? e.title),
25
+ icon: s(e.topic ?? e.title),
92
26
  children: [t ? /* @__PURE__ */ E("span", {
93
27
  className: "inline-flex items-center gap-1 rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-[11px] font-medium text-status-success-text ring-1 ring-status-success-border/30",
94
- children: [/* @__PURE__ */ T(_, { size: 12 }), " Solved"]
28
+ children: [
29
+ /* @__PURE__ */ T(y, { size: 12 }),
30
+ " ",
31
+ i("technospam.problems.solved", "Solved")
32
+ ]
95
33
  }) : /* @__PURE__ */ T("span", {}), /* @__PURE__ */ E("div", {
96
34
  className: "flex flex-wrap items-center gap-1.5",
97
- children: [/* @__PURE__ */ T(s, {
35
+ children: [/* @__PURE__ */ T(c, {
98
36
  status: e.difficulty,
99
37
  kind: "level"
100
- }), e.isPremiumOnly ? /* @__PURE__ */ T(d, { locked: e.isLocked }) : null]
38
+ }), e.isPremiumOnly ? /* @__PURE__ */ T(f, { locked: e.isLocked }) : null]
101
39
  })]
102
40
  }), /* @__PURE__ */ E("div", {
103
41
  className: "flex flex-1 flex-col gap-3 p-4",
@@ -118,7 +56,7 @@ function V({ problem: e, solved: t, onOpen: n }) {
118
56
  e.topic ? /* @__PURE__ */ E("span", {
119
57
  className: "inline-flex items-center gap-1",
120
58
  children: [
121
- /* @__PURE__ */ T(x, { size: 13 }),
59
+ /* @__PURE__ */ T(S, { size: 13 }),
122
60
  " ",
123
61
  e.topic
124
62
  ]
@@ -128,18 +66,15 @@ function V({ problem: e, solved: t, onOpen: n }) {
128
66
  children: [
129
67
  /* @__PURE__ */ T(w, { size: 13 }),
130
68
  " ",
131
- e.points,
132
- " pts"
69
+ i("technospam.problems.points", "{{count}} pts", { count: e.points })
133
70
  ]
134
71
  }),
135
72
  e.languages.length ? /* @__PURE__ */ E("span", {
136
73
  className: "inline-flex items-center gap-1",
137
74
  children: [
138
- /* @__PURE__ */ T(v, { size: 13 }),
75
+ /* @__PURE__ */ T(b, { size: 13 }),
139
76
  " ",
140
- e.languages.length,
141
- " lang",
142
- e.languages.length === 1 ? "" : "s"
77
+ e.languages.length === 1 ? i("technospam.problems.languages", "{{count}} lang", { count: e.languages.length }) : i("technospam.problems.languagesPlural", "{{count}} langs", { count: e.languages.length })
143
78
  ]
144
79
  }) : null
145
80
  ]
@@ -149,17 +84,17 @@ function V({ problem: e, solved: t, onOpen: n }) {
149
84
  children: [e.companies.slice(0, 3).map((e) => /* @__PURE__ */ E(D, {
150
85
  variant: "outline",
151
86
  className: "text-[11px] capitalize",
152
- children: [/* @__PURE__ */ T(g, {
87
+ children: [/* @__PURE__ */ T(v, {
153
88
  size: 10,
154
89
  className: "mr-1"
155
90
  }), e.replace(/-/g, " ")]
156
91
  }, e)), e.interviewFrequency === "HIGH" ? /* @__PURE__ */ E(D, {
157
92
  variant: "secondary",
158
93
  className: "text-[11px] text-status-warning-text",
159
- children: [/* @__PURE__ */ T(y, {
94
+ children: [/* @__PURE__ */ T(x, {
160
95
  size: 10,
161
96
  className: "mr-1"
162
- }), "Frequently asked"]
97
+ }), i("technospam.problems.frequentlyAsked", "Frequently asked")]
163
98
  }) : null]
164
99
  }) : null,
165
100
  e.tags.length ? /* @__PURE__ */ T("div", {
@@ -177,74 +112,141 @@ function V({ problem: e, solved: t, onOpen: n }) {
177
112
  })]
178
113
  });
179
114
  }
180
- function H() {
181
- let a = t(), { currentUser: o, workspaceId: s } = e(), { emit: d } = n(), g = o?.id, [x, C] = h("ALL"), [w, D] = h("ALL"), [O, H] = h("ALL"), [U, W] = h(""), { limit: G, more: K } = f(), { data: q, loading: J, error: Y } = p({
115
+ function R() {
116
+ let o = t(), { currentUser: s, workspaceId: c } = e(), { emit: f } = n(), v = r(), S = s?.id, [C, w] = _("ALL"), [D, O] = _("ALL"), [R, z] = _("ALL"), [B, V] = _(""), H = g(() => [
117
+ {
118
+ value: "ALL",
119
+ label: v("technospam.problems.filterAll", "All")
120
+ },
121
+ {
122
+ value: "EASY",
123
+ label: v("technospam.problems.filterEasy", "Easy")
124
+ },
125
+ {
126
+ value: "MEDIUM",
127
+ label: v("technospam.problems.filterMedium", "Medium")
128
+ },
129
+ {
130
+ value: "HARD",
131
+ label: v("technospam.problems.filterHard", "Hard")
132
+ }
133
+ ], [v]), U = g(() => [
134
+ {
135
+ value: "google",
136
+ label: "Google"
137
+ },
138
+ {
139
+ value: "amazon",
140
+ label: "Amazon"
141
+ },
142
+ {
143
+ value: "meta",
144
+ label: "Meta"
145
+ },
146
+ {
147
+ value: "microsoft",
148
+ label: "Microsoft"
149
+ },
150
+ {
151
+ value: "apple",
152
+ label: "Apple"
153
+ },
154
+ {
155
+ value: "netflix",
156
+ label: "Netflix"
157
+ }
158
+ ], []), W = g(() => [
159
+ {
160
+ value: "frontend",
161
+ label: "Frontend"
162
+ },
163
+ {
164
+ value: "backend",
165
+ label: "Backend"
166
+ },
167
+ {
168
+ value: "fullstack",
169
+ label: "Full-Stack"
170
+ },
171
+ {
172
+ value: "data-science",
173
+ label: "Data Science"
174
+ },
175
+ {
176
+ value: "mobile",
177
+ label: "Mobile"
178
+ },
179
+ {
180
+ value: "sre",
181
+ label: "SRE / Infra"
182
+ }
183
+ ], []), { limit: G, more: K } = m(), { data: q, loading: J, error: Y } = te({
182
184
  status: "PUBLISHED",
183
- pagination: te(G),
184
- ...x === "ALL" ? {} : { difficulty: x },
185
- ...w === "ALL" ? {} : { company: w },
186
- ...O === "ALL" ? {} : { role: O }
187
- }), { data: X } = ne(g ? { learnerId: g } : {}), Z = q?.tecListProblems?.items ?? [], re = q?.tecListProblems?.pageInfo?.hasMore ?? !1, Q = m(() => new Set((X?.tecListSubmissions?.items ?? []).filter((e) => e.verdict === "ACCEPTED").map((e) => e.problemId)), [X]), ie = Z.filter((e) => Q.has(e.id)).length, ae = Z.filter((e) => e.difficulty === "EASY").length, oe = Z.filter((e) => e.difficulty === "HARD").length, $ = m(() => {
188
- let e = U.trim().toLowerCase();
185
+ pagination: p(G),
186
+ ...C === "ALL" ? {} : { difficulty: C },
187
+ ...D === "ALL" ? {} : { company: D },
188
+ ...R === "ALL" ? {} : { role: R }
189
+ }), { data: X } = h(S ? { learnerId: S } : {}), Z = q?.tecListProblems?.items ?? [], ae = q?.tecListProblems?.pageInfo?.hasMore ?? !1, Q = g(() => new Set((X?.tecListSubmissions?.items ?? []).filter((e) => e.verdict === "ACCEPTED").map((e) => e.problemId)), [X]), oe = Z.filter((e) => Q.has(e.id)).length, se = Z.filter((e) => e.difficulty === "EASY").length, ce = Z.filter((e) => e.difficulty === "HARD").length, $ = g(() => {
190
+ let e = B.trim().toLowerCase();
189
191
  return e ? Z.filter((t) => t.title.toLowerCase().includes(e) || (t.topic ?? "").toLowerCase().includes(e) || t.tags.some((t) => t.toLowerCase().includes(e))) : Z;
190
- }, [Z, U]);
191
- return /* @__PURE__ */ E(r, {
192
+ }, [Z, B]);
193
+ return /* @__PURE__ */ E(i, {
192
194
  hero: !0,
193
- title: "Coding Problems",
194
- description: "Sharpen your problem-solving with hands-on, mentor-judged challenges across topics and difficulty.",
195
+ title: v("technospam.problems.title", "Coding Problems"),
196
+ description: v("technospam.problems.description", "Sharpen your problem-solving with hands-on, mentor-judged challenges across topics and difficulty."),
195
197
  children: [
196
198
  /* @__PURE__ */ E("div", {
197
199
  className: "mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4",
198
200
  children: [
199
- /* @__PURE__ */ T(i, {
200
- label: "Problems",
201
+ /* @__PURE__ */ T(a, {
202
+ label: v("technospam.problems.statProblems", "Problems"),
201
203
  value: Z.length,
202
- icon: v,
204
+ icon: b,
203
205
  tone: "blue"
204
206
  }),
205
- /* @__PURE__ */ T(i, {
206
- label: "Solved",
207
- value: ie,
208
- icon: _,
207
+ /* @__PURE__ */ T(a, {
208
+ label: v("technospam.problems.statSolved", "Solved"),
209
+ value: oe,
210
+ icon: y,
209
211
  tone: "green"
210
212
  }),
211
- /* @__PURE__ */ T(i, {
212
- label: "Easy",
213
- value: ae,
214
- icon: b,
213
+ /* @__PURE__ */ T(a, {
214
+ label: v("technospam.problems.statEasy", "Easy"),
215
+ value: se,
216
+ icon: ne,
215
217
  tone: "teal"
216
218
  }),
217
- /* @__PURE__ */ T(i, {
218
- label: "Hard",
219
- value: oe,
220
- icon: y,
219
+ /* @__PURE__ */ T(a, {
220
+ label: v("technospam.problems.statHard", "Hard"),
221
+ value: ce,
222
+ icon: x,
221
223
  tone: "amber"
222
224
  })
223
225
  ]
224
226
  }),
225
227
  /* @__PURE__ */ E("div", {
226
228
  className: "mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
227
- children: [/* @__PURE__ */ T(F, {
228
- value: x,
229
- onValueChange: (e) => C(e),
230
- children: /* @__PURE__ */ T(I, { children: R.map((e) => /* @__PURE__ */ T(L, {
229
+ children: [/* @__PURE__ */ T(P, {
230
+ value: C,
231
+ onValueChange: (e) => w(e),
232
+ children: /* @__PURE__ */ T(F, { children: H.map((e) => /* @__PURE__ */ T(I, {
231
233
  value: e.value,
232
234
  children: e.label
233
235
  }, e.value)) })
234
236
  }), /* @__PURE__ */ E("div", {
235
237
  className: "relative w-full sm:w-72",
236
- children: [/* @__PURE__ */ T(S, {
238
+ children: [/* @__PURE__ */ T(re, {
237
239
  className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-muted",
238
240
  size: 16
239
- }), /* @__PURE__ */ T(k, {
241
+ }), /* @__PURE__ */ T(ie, {
240
242
  className: "pl-9",
241
- placeholder: "Search problems…",
242
- value: U,
243
- onChange: (e) => W(e.target.value),
243
+ placeholder: v("technospam.problems.searchPlaceholder", "Search problems…"),
244
+ value: B,
245
+ onChange: (e) => V(e.target.value),
244
246
  onBlur: () => {
245
- let e = U.trim();
246
- e && d("technospam.search.performed", {
247
- workspaceId: s,
247
+ let e = B.trim();
248
+ e && f("technospam.search.performed", {
249
+ workspaceId: c,
248
250
  entityType: "problem",
249
251
  queryLength: e.length
250
252
  });
@@ -254,57 +256,57 @@ function H() {
254
256
  }),
255
257
  /* @__PURE__ */ E("div", {
256
258
  className: "mb-4 flex flex-col gap-3 sm:flex-row sm:items-center",
257
- children: [/* @__PURE__ */ E(A, {
258
- value: w,
259
- onValueChange: D,
260
- children: [/* @__PURE__ */ T(N, {
259
+ children: [/* @__PURE__ */ E(k, {
260
+ value: D,
261
+ onValueChange: O,
262
+ children: [/* @__PURE__ */ T(M, {
261
263
  className: "w-full sm:w-48",
262
- children: /* @__PURE__ */ T(P, { placeholder: "Company" })
263
- }), /* @__PURE__ */ E(j, { children: [/* @__PURE__ */ T(M, {
264
+ children: /* @__PURE__ */ T(N, { placeholder: v("technospam.problems.companyPlaceholder", "Company") })
265
+ }), /* @__PURE__ */ E(A, { children: [/* @__PURE__ */ T(j, {
264
266
  value: "ALL",
265
- children: "All companies"
266
- }), z.map((e) => /* @__PURE__ */ T(M, {
267
+ children: v("technospam.problems.companyAll", "All companies")
268
+ }), U.map((e) => /* @__PURE__ */ T(j, {
267
269
  value: e.value,
268
270
  children: e.label
269
271
  }, e.value))] })]
270
- }), /* @__PURE__ */ E(A, {
271
- value: O,
272
- onValueChange: H,
273
- children: [/* @__PURE__ */ T(N, {
272
+ }), /* @__PURE__ */ E(k, {
273
+ value: R,
274
+ onValueChange: z,
275
+ children: [/* @__PURE__ */ T(M, {
274
276
  className: "w-full sm:w-48",
275
- children: /* @__PURE__ */ T(P, { placeholder: "Role" })
276
- }), /* @__PURE__ */ E(j, { children: [/* @__PURE__ */ T(M, {
277
+ children: /* @__PURE__ */ T(N, { placeholder: v("technospam.problems.rolePlaceholder", "Role") })
278
+ }), /* @__PURE__ */ E(A, { children: [/* @__PURE__ */ T(j, {
277
279
  value: "ALL",
278
- children: "All roles"
279
- }), B.map((e) => /* @__PURE__ */ T(M, {
280
+ children: v("technospam.problems.roleAll", "All roles")
281
+ }), W.map((e) => /* @__PURE__ */ T(j, {
280
282
  value: e.value,
281
283
  children: e.label
282
284
  }, e.value))] })]
283
285
  })]
284
286
  }),
285
- J && !Z.length ? /* @__PURE__ */ T(u, {}) : Y ? /* @__PURE__ */ T(ee, {
286
- title: "Couldn't load problems",
287
+ J && !Z.length ? /* @__PURE__ */ T(d, {}) : Y ? /* @__PURE__ */ T(u, {
288
+ title: v("technospam.common.errorLoadProblems", "Couldn't load problems"),
287
289
  error: Y
288
- }) : $.length === 0 ? /* @__PURE__ */ T(l, {
289
- icon: /* @__PURE__ */ T(v, { size: 26 }),
290
- title: U || x !== "ALL" || w !== "ALL" || O !== "ALL" ? "No matching problems" : "No problems published yet",
291
- description: U || x !== "ALL" || w !== "ALL" || O !== "ALL" ? "Try a different search, difficulty, company, or role filter." : "Published problems will appear here. Check back soon — TechnoSpam is pre-launch."
290
+ }) : $.length === 0 ? /* @__PURE__ */ T(ee, {
291
+ icon: /* @__PURE__ */ T(b, { size: 26 }),
292
+ title: B || C !== "ALL" || D !== "ALL" || R !== "ALL" ? v("technospam.problems.emptySearchTitle", "No matching problems") : v("technospam.problems.emptyDefaultTitle", "No problems published yet"),
293
+ description: B || C !== "ALL" || D !== "ALL" || R !== "ALL" ? v("technospam.problems.emptySearchDesc", "Try a different search, difficulty, company, or role filter.") : v("technospam.problems.emptyDefaultDesc", "Published problems will appear here. Check back soon — TechnoSpam is pre-launch.")
292
294
  }) : /* @__PURE__ */ T("div", {
293
295
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
294
- children: $.map((e) => /* @__PURE__ */ T(V, {
296
+ children: $.map((e) => /* @__PURE__ */ T(L, {
295
297
  problem: e,
296
298
  solved: Q.has(e.id),
297
299
  onOpen: () => {
298
- d("technospam.problem.viewed", {
299
- workspaceId: s,
300
+ f("technospam.problem.viewed", {
301
+ workspaceId: c,
300
302
  entityId: e.id,
301
303
  entityType: "TEC_PROBLEM"
302
- }), a(`/applications/problem-details-page?id=${e.id}`);
304
+ }), o(`/applications/problem-details-page?id=${e.id}`);
303
305
  }
304
306
  }, e.id))
305
307
  }),
306
- /* @__PURE__ */ T(c, {
307
- hasMore: re,
308
+ /* @__PURE__ */ T(l, {
309
+ hasMore: ae,
308
310
  loading: J,
309
311
  onClick: K
310
312
  })
@@ -312,6 +314,6 @@ function H() {
312
314
  });
313
315
  }
314
316
  //#endregion
315
- export { H as ApplicationsProblemsPagePage };
317
+ export { R as ApplicationsProblemsPagePage };
316
318
 
317
319
  //# sourceMappingURL=ApplicationsProblemsPagePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationsProblemsPagePage.js","names":[],"sources":["../../../src/technospam/pages/ApplicationsProblemsPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Building2,\n CheckCircle2,\n Code2,\n Flame,\n Gauge,\n Layers,\n Search,\n Tag,\n Trophy,\n} from 'lucide-react';\nimport {\n Badge,\n GlassCard,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Tabs,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n EmptyView,\n ErrorView,\n LoadMore,\n LoadingGrid,\n MediaCover,\n PageLayout,\n PremiumBadge,\n StatCard,\n StatusBadge,\n topicIcon,\n} from '../components';\nimport { useTechnoSpam, useTechnoSpamNavigate } from '../providers/TechnoSpamProvider';\nimport {\n pageArg,\n usePageLimit,\n useProblemsQuery,\n useSubmissionsQuery,\n type TecProblem,\n type TecProblemDifficulty,\n} from '../api/technospamApi';\nimport { useTechnoSpamAnalytics } from '../hooks/useTechnoSpamAnalytics';\n\nconst DIFFICULTIES: Array<{ value: 'ALL' | TecProblemDifficulty; label: string }> = [\n { value: 'ALL', label: 'All' },\n { value: 'EASY', label: 'Easy' },\n { value: 'MEDIUM', label: 'Medium' },\n { value: 'HARD', label: 'Hard' },\n];\n\n// Curated interview-target lists for the catalog filters. Values follow the\n// backend's lowercase-slug convention (see practice.service.ts normalizeSlug).\nconst COMPANIES: Array<{ value: string; label: string }> = [\n { value: 'google', label: 'Google' },\n { value: 'amazon', label: 'Amazon' },\n { value: 'meta', label: 'Meta' },\n { value: 'microsoft', label: 'Microsoft' },\n { value: 'apple', label: 'Apple' },\n { value: 'netflix', label: 'Netflix' },\n];\n\nconst ROLES: Array<{ value: string; label: string }> = [\n { value: 'frontend', label: 'Frontend' },\n { value: 'backend', label: 'Backend' },\n { value: 'fullstack', label: 'Full-Stack' },\n { value: 'data-science', label: 'Data Science' },\n { value: 'mobile', label: 'Mobile' },\n { value: 'sre', label: 'SRE / Infra' },\n];\n\nfunction ProblemCard({\n problem,\n solved,\n onOpen,\n}: {\n problem: TecProblem;\n solved: boolean;\n onOpen: () => void;\n}) {\n return (\n <GlassCard\n className=\"group flex cursor-pointer flex-col overflow-hidden transition-all duration-200 hover:-translate-y-1 hover:shadow-lg\"\n onClick={onOpen}\n >\n <MediaCover\n seed={`${problem.topic ?? ''} ${problem.difficulty} ${problem.title}`}\n icon={topicIcon(problem.topic ?? problem.title)}\n >\n {solved ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-[11px] font-medium text-status-success-text ring-1 ring-status-success-border/30\">\n <CheckCircle2 size={12} /> Solved\n </span>\n ) : (\n <span />\n )}\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <StatusBadge status={problem.difficulty} kind=\"level\" />\n {problem.isPremiumOnly ? <PremiumBadge locked={problem.isLocked} /> : null}\n </div>\n </MediaCover>\n <div className=\"flex flex-1 flex-col gap-3 p-4\">\n <div className=\"min-w-0\">\n <h3 className=\"truncate text-base font-semibold text-text-primary group-hover:text-accent-primary\">\n {problem.title}\n </h3>\n {problem.statement ? (\n <p className=\"mt-1 line-clamp-2 text-sm text-text-secondary\">{problem.statement}</p>\n ) : null}\n </div>\n <div className=\"mt-auto flex flex-wrap items-center gap-3 text-xs text-text-muted\">\n {problem.topic ? (\n <span className=\"inline-flex items-center gap-1\">\n <Layers size={13} /> {problem.topic}\n </span>\n ) : null}\n <span className=\"inline-flex items-center gap-1\">\n <Trophy size={13} /> {problem.points} pts\n </span>\n {problem.languages.length ? (\n <span className=\"inline-flex items-center gap-1\">\n <Code2 size={13} /> {problem.languages.length} lang\n {problem.languages.length === 1 ? '' : 's'}\n </span>\n ) : null}\n </div>\n {problem.companies.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {problem.companies.slice(0, 3).map((c) => (\n <Badge key={c} variant=\"outline\" className=\"text-[11px] capitalize\">\n <Building2 size={10} className=\"mr-1\" />\n {c.replace(/-/g, ' ')}\n </Badge>\n ))}\n {problem.interviewFrequency === 'HIGH' ? (\n <Badge variant=\"secondary\" className=\"text-[11px] text-status-warning-text\">\n <Flame size={10} className=\"mr-1\" />\n Frequently asked\n </Badge>\n ) : null}\n </div>\n ) : null}\n {problem.tags.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {problem.tags.slice(0, 3).map((t) => (\n <Badge key={t} variant=\"secondary\" className=\"text-[11px]\">\n <Tag size={10} className=\"mr-1\" />\n {t}\n </Badge>\n ))}\n </div>\n ) : null}\n </div>\n </GlassCard>\n );\n}\n\nexport function ApplicationsProblemsPagePage() {\n const navigate = useTechnoSpamNavigate();\n const { currentUser, workspaceId } = useTechnoSpam();\n const { emit } = useTechnoSpamAnalytics();\n const learnerId = currentUser?.id;\n const [difficulty, setDifficulty] = useState<'ALL' | TecProblemDifficulty>('ALL');\n const [company, setCompany] = useState<string>('ALL');\n const [role, setRole] = useState<string>('ALL');\n const [search, setSearch] = useState('');\n\n const { limit, more } = usePageLimit();\n const { data, loading, error } = useProblemsQuery({\n status: 'PUBLISHED',\n pagination: pageArg(limit),\n ...(difficulty !== 'ALL' ? { difficulty } : {}),\n ...(company !== 'ALL' ? { company } : {}),\n ...(role !== 'ALL' ? { role } : {}),\n });\n const { data: subsData } = useSubmissionsQuery(learnerId ? { learnerId } : {});\n\n const problems = data?.tecListProblems?.items ?? [];\n const hasMore = data?.tecListProblems?.pageInfo?.hasMore ?? false;\n\n const solvedSet = useMemo(\n () =>\n new Set(\n (subsData?.tecListSubmissions?.items ?? [])\n .filter((s) => s.verdict === 'ACCEPTED')\n .map((s) => s.problemId)\n ),\n [subsData]\n );\n\n const solvedCount = problems.filter((p) => solvedSet.has(p.id)).length;\n const easyCount = problems.filter((p) => p.difficulty === 'EASY').length;\n const hardCount = problems.filter((p) => p.difficulty === 'HARD').length;\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return problems;\n return problems.filter(\n (p) =>\n p.title.toLowerCase().includes(q) ||\n (p.topic ?? '').toLowerCase().includes(q) ||\n p.tags.some((t) => t.toLowerCase().includes(q))\n );\n }, [problems, search]);\n\n return (\n <PageLayout\n hero\n title=\"Coding Problems\"\n description=\"Sharpen your problem-solving with hands-on, mentor-judged challenges across topics and difficulty.\"\n >\n <div className=\"mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <StatCard label=\"Problems\" value={problems.length} icon={Code2} tone=\"blue\" />\n <StatCard label=\"Solved\" value={solvedCount} icon={CheckCircle2} tone=\"green\" />\n <StatCard label=\"Easy\" value={easyCount} icon={Gauge} tone=\"teal\" />\n <StatCard label=\"Hard\" value={hardCount} icon={Flame} tone=\"amber\" />\n </div>\n\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <Tabs\n value={difficulty}\n onValueChange={(v) => setDifficulty(v as 'ALL' | TecProblemDifficulty)}\n >\n <TabsList>\n {DIFFICULTIES.map((d) => (\n <TabsTrigger key={d.value} value={d.value}>\n {d.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n <div className=\"relative w-full sm:w-72\">\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-muted\"\n size={16}\n />\n <Input\n className=\"pl-9\"\n placeholder=\"Search problems…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onBlur={() => {\n const value = search.trim();\n if (value) {\n emit('technospam.search.performed', {\n workspaceId,\n entityType: 'problem',\n queryLength: value.length,\n });\n }\n }}\n />\n </div>\n </div>\n\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center\">\n <Select value={company} onValueChange={setCompany}>\n <SelectTrigger className=\"w-full sm:w-48\">\n <SelectValue placeholder=\"Company\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">All companies</SelectItem>\n {COMPANIES.map((c) => (\n <SelectItem key={c.value} value={c.value}>\n {c.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Select value={role} onValueChange={setRole}>\n <SelectTrigger className=\"w-full sm:w-48\">\n <SelectValue placeholder=\"Role\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">All roles</SelectItem>\n {ROLES.map((r) => (\n <SelectItem key={r.value} value={r.value}>\n {r.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {loading && !problems.length ? (\n <LoadingGrid />\n ) : error ? (\n <ErrorView title=\"Couldn't load problems\" error={error} />\n ) : filtered.length === 0 ? (\n <EmptyView\n icon={<Code2 size={26} />}\n title={\n search || difficulty !== 'ALL' || company !== 'ALL' || role !== 'ALL'\n ? 'No matching problems'\n : 'No problems published yet'\n }\n description={\n search || difficulty !== 'ALL' || company !== 'ALL' || role !== 'ALL'\n ? 'Try a different search, difficulty, company, or role filter.'\n : 'Published problems will appear here. Check back soon — TechnoSpam is pre-launch.'\n }\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((problem) => (\n <ProblemCard\n key={problem.id}\n problem={problem}\n solved={solvedSet.has(problem.id)}\n onOpen={() => {\n emit('technospam.problem.viewed', {\n workspaceId,\n entityId: problem.id,\n entityType: 'TEC_PROBLEM',\n });\n navigate(`/applications/problem-details-page?id=${problem.id}`);\n }}\n />\n ))}\n </div>\n )}\n <LoadMore hasMore={hasMore} loading={loading} onClick={more} />\n </PageLayout>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ApplicationsProblemsPagePage.js","names":[],"sources":["../../../src/technospam/pages/ApplicationsProblemsPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n Building2,\n CheckCircle2,\n Code2,\n Flame,\n Gauge,\n Layers,\n Search,\n Tag,\n Trophy,\n} from 'lucide-react';\nimport {\n Badge,\n GlassCard,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Tabs,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n EmptyView,\n ErrorView,\n LoadMore,\n LoadingGrid,\n MediaCover,\n PageLayout,\n PremiumBadge,\n StatCard,\n StatusBadge,\n topicIcon,\n} from '../components';\nimport { useTechnoSpam, useTechnoSpamNavigate } from '../providers/TechnoSpamProvider';\nimport {\n pageArg,\n usePageLimit,\n useProblemsQuery,\n useSubmissionsQuery,\n type TecProblem,\n type TecProblemDifficulty,\n} from '../api/technospamApi';\nimport { useTechnoSpamAnalytics } from '../hooks/useTechnoSpamAnalytics';\nimport { useTr } from '../hooks/useTr';\n\nfunction ProblemCard({\n problem,\n solved,\n onOpen,\n}: {\n problem: TecProblem;\n solved: boolean;\n onOpen: () => void;\n}) {\n const tr = useTr();\n return (\n <GlassCard\n className=\"group flex cursor-pointer flex-col overflow-hidden transition-all duration-200 hover:-translate-y-1 hover:shadow-lg\"\n onClick={onOpen}\n >\n <MediaCover\n seed={`${problem.topic ?? ''} ${problem.difficulty} ${problem.title}`}\n icon={topicIcon(problem.topic ?? problem.title)}\n >\n {solved ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-[11px] font-medium text-status-success-text ring-1 ring-status-success-border/30\">\n <CheckCircle2 size={12} /> {tr('technospam.problems.solved', 'Solved')}\n </span>\n ) : (\n <span />\n )}\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <StatusBadge status={problem.difficulty} kind=\"level\" />\n {problem.isPremiumOnly ? <PremiumBadge locked={problem.isLocked} /> : null}\n </div>\n </MediaCover>\n <div className=\"flex flex-1 flex-col gap-3 p-4\">\n <div className=\"min-w-0\">\n <h3 className=\"truncate text-base font-semibold text-text-primary group-hover:text-accent-primary\">\n {problem.title}\n </h3>\n {problem.statement ? (\n <p className=\"mt-1 line-clamp-2 text-sm text-text-secondary\">{problem.statement}</p>\n ) : null}\n </div>\n <div className=\"mt-auto flex flex-wrap items-center gap-3 text-xs text-text-muted\">\n {problem.topic ? (\n <span className=\"inline-flex items-center gap-1\">\n <Layers size={13} /> {problem.topic}\n </span>\n ) : null}\n <span className=\"inline-flex items-center gap-1\">\n <Trophy size={13} />{' '}\n {tr('technospam.problems.points', '{{count}} pts', { count: problem.points })}\n </span>\n {problem.languages.length ? (\n <span className=\"inline-flex items-center gap-1\">\n <Code2 size={13} />{' '}\n {problem.languages.length === 1\n ? tr('technospam.problems.languages', '{{count}} lang', {\n count: problem.languages.length,\n })\n : tr('technospam.problems.languagesPlural', '{{count}} langs', {\n count: problem.languages.length,\n })}\n </span>\n ) : null}\n </div>\n {problem.companies.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {problem.companies.slice(0, 3).map((c) => (\n <Badge key={c} variant=\"outline\" className=\"text-[11px] capitalize\">\n <Building2 size={10} className=\"mr-1\" />\n {c.replace(/-/g, ' ')}\n </Badge>\n ))}\n {problem.interviewFrequency === 'HIGH' ? (\n <Badge variant=\"secondary\" className=\"text-[11px] text-status-warning-text\">\n <Flame size={10} className=\"mr-1\" />\n {tr('technospam.problems.frequentlyAsked', 'Frequently asked')}\n </Badge>\n ) : null}\n </div>\n ) : null}\n {problem.tags.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {problem.tags.slice(0, 3).map((t) => (\n <Badge key={t} variant=\"secondary\" className=\"text-[11px]\">\n <Tag size={10} className=\"mr-1\" />\n {t}\n </Badge>\n ))}\n </div>\n ) : null}\n </div>\n </GlassCard>\n );\n}\n\nexport function ApplicationsProblemsPagePage() {\n const navigate = useTechnoSpamNavigate();\n const { currentUser, workspaceId } = useTechnoSpam();\n const { emit } = useTechnoSpamAnalytics();\n const tr = useTr();\n const learnerId = currentUser?.id;\n const [difficulty, setDifficulty] = useState<'ALL' | TecProblemDifficulty>('ALL');\n const [company, setCompany] = useState<string>('ALL');\n const [role, setRole] = useState<string>('ALL');\n const [search, setSearch] = useState('');\n\n const difficulties = useMemo(\n () => [\n { value: 'ALL' as const, label: tr('technospam.problems.filterAll', 'All') },\n {\n value: 'EASY' as TecProblemDifficulty,\n label: tr('technospam.problems.filterEasy', 'Easy'),\n },\n {\n value: 'MEDIUM' as TecProblemDifficulty,\n label: tr('technospam.problems.filterMedium', 'Medium'),\n },\n {\n value: 'HARD' as TecProblemDifficulty,\n label: tr('technospam.problems.filterHard', 'Hard'),\n },\n ],\n [tr]\n );\n\n // Curated interview-target lists for the catalog filters. Values follow the\n // backend's lowercase-slug convention (see practice.service.ts normalizeSlug).\n const companies = useMemo(\n () => [\n { value: 'google', label: 'Google' },\n { value: 'amazon', label: 'Amazon' },\n { value: 'meta', label: 'Meta' },\n { value: 'microsoft', label: 'Microsoft' },\n { value: 'apple', label: 'Apple' },\n { value: 'netflix', label: 'Netflix' },\n ],\n []\n );\n\n const roles = useMemo(\n () => [\n { value: 'frontend', label: 'Frontend' },\n { value: 'backend', label: 'Backend' },\n { value: 'fullstack', label: 'Full-Stack' },\n { value: 'data-science', label: 'Data Science' },\n { value: 'mobile', label: 'Mobile' },\n { value: 'sre', label: 'SRE / Infra' },\n ],\n []\n );\n\n const { limit, more } = usePageLimit();\n const { data, loading, error } = useProblemsQuery({\n status: 'PUBLISHED',\n pagination: pageArg(limit),\n ...(difficulty !== 'ALL' ? { difficulty } : {}),\n ...(company !== 'ALL' ? { company } : {}),\n ...(role !== 'ALL' ? { role } : {}),\n });\n const { data: subsData } = useSubmissionsQuery(learnerId ? { learnerId } : {});\n\n const problems = data?.tecListProblems?.items ?? [];\n const hasMore = data?.tecListProblems?.pageInfo?.hasMore ?? false;\n\n const solvedSet = useMemo(\n () =>\n new Set(\n (subsData?.tecListSubmissions?.items ?? [])\n .filter((s) => s.verdict === 'ACCEPTED')\n .map((s) => s.problemId)\n ),\n [subsData]\n );\n\n const solvedCount = problems.filter((p) => solvedSet.has(p.id)).length;\n const easyCount = problems.filter((p) => p.difficulty === 'EASY').length;\n const hardCount = problems.filter((p) => p.difficulty === 'HARD').length;\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return problems;\n return problems.filter(\n (p) =>\n p.title.toLowerCase().includes(q) ||\n (p.topic ?? '').toLowerCase().includes(q) ||\n p.tags.some((t) => t.toLowerCase().includes(q))\n );\n }, [problems, search]);\n\n return (\n <PageLayout\n hero\n title={tr('technospam.problems.title', 'Coding Problems')}\n description={tr(\n 'technospam.problems.description',\n 'Sharpen your problem-solving with hands-on, mentor-judged challenges across topics and difficulty.'\n )}\n >\n <div className=\"mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <StatCard\n label={tr('technospam.problems.statProblems', 'Problems')}\n value={problems.length}\n icon={Code2}\n tone=\"blue\"\n />\n <StatCard\n label={tr('technospam.problems.statSolved', 'Solved')}\n value={solvedCount}\n icon={CheckCircle2}\n tone=\"green\"\n />\n <StatCard\n label={tr('technospam.problems.statEasy', 'Easy')}\n value={easyCount}\n icon={Gauge}\n tone=\"teal\"\n />\n <StatCard\n label={tr('technospam.problems.statHard', 'Hard')}\n value={hardCount}\n icon={Flame}\n tone=\"amber\"\n />\n </div>\n\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <Tabs\n value={difficulty}\n onValueChange={(v) => setDifficulty(v as 'ALL' | TecProblemDifficulty)}\n >\n <TabsList>\n {difficulties.map((d) => (\n <TabsTrigger key={d.value} value={d.value}>\n {d.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n <div className=\"relative w-full sm:w-72\">\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-muted\"\n size={16}\n />\n <Input\n className=\"pl-9\"\n placeholder={tr('technospam.problems.searchPlaceholder', 'Search problems…')}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onBlur={() => {\n const value = search.trim();\n if (value) {\n emit('technospam.search.performed', {\n workspaceId,\n entityType: 'problem',\n queryLength: value.length,\n });\n }\n }}\n />\n </div>\n </div>\n\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center\">\n <Select value={company} onValueChange={setCompany}>\n <SelectTrigger className=\"w-full sm:w-48\">\n <SelectValue placeholder={tr('technospam.problems.companyPlaceholder', 'Company')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">\n {tr('technospam.problems.companyAll', 'All companies')}\n </SelectItem>\n {companies.map((c) => (\n <SelectItem key={c.value} value={c.value}>\n {c.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Select value={role} onValueChange={setRole}>\n <SelectTrigger className=\"w-full sm:w-48\">\n <SelectValue placeholder={tr('technospam.problems.rolePlaceholder', 'Role')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ALL\">{tr('technospam.problems.roleAll', 'All roles')}</SelectItem>\n {roles.map((r) => (\n <SelectItem key={r.value} value={r.value}>\n {r.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {loading && !problems.length ? (\n <LoadingGrid />\n ) : error ? (\n <ErrorView\n title={tr('technospam.common.errorLoadProblems', \"Couldn't load problems\")}\n error={error}\n />\n ) : filtered.length === 0 ? (\n <EmptyView\n icon={<Code2 size={26} />}\n title={\n search || difficulty !== 'ALL' || company !== 'ALL' || role !== 'ALL'\n ? tr('technospam.problems.emptySearchTitle', 'No matching problems')\n : tr('technospam.problems.emptyDefaultTitle', 'No problems published yet')\n }\n description={\n search || difficulty !== 'ALL' || company !== 'ALL' || role !== 'ALL'\n ? tr(\n 'technospam.problems.emptySearchDesc',\n 'Try a different search, difficulty, company, or role filter.'\n )\n : tr(\n 'technospam.problems.emptyDefaultDesc',\n 'Published problems will appear here. Check back soon — TechnoSpam is pre-launch.'\n )\n }\n />\n ) : (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filtered.map((problem) => (\n <ProblemCard\n key={problem.id}\n problem={problem}\n solved={solvedSet.has(problem.id)}\n onOpen={() => {\n emit('technospam.problem.viewed', {\n workspaceId,\n entityId: problem.id,\n entityType: 'TEC_PROBLEM',\n });\n navigate(`/applications/problem-details-page?id=${problem.id}`);\n }}\n />\n ))}\n </div>\n )}\n <LoadMore hasMore={hasMore} loading={loading} onClick={more} />\n </PageLayout>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CoursesCoursesPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/CoursesCoursesPagePage.tsx"],"names":[],"mappings":"AA0FA,wBAAgB,sBAAsB,gCAiIrC"}
1
+ {"version":3,"file":"CoursesCoursesPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/CoursesCoursesPagePage.tsx"],"names":[],"mappings":"AAmFA,wBAAgB,sBAAsB,gCAwKrC"}