@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.
- package/dist/index.js +4 -3
- package/dist/technospam/TechnoSpamRoot.js +4 -4
- package/dist/technospam/components/PageLayout.d.ts.map +1 -1
- package/dist/technospam/components/PageLayout.js +24 -23
- package/dist/technospam/components/PageLayout.js.map +1 -1
- package/dist/technospam/components/StateViews.d.ts +1 -1
- package/dist/technospam/components/StateViews.d.ts.map +1 -1
- package/dist/technospam/components/StateViews.js +28 -26
- package/dist/technospam/components/StateViews.js.map +1 -1
- package/dist/technospam/components/TagInput.d.ts +1 -1
- package/dist/technospam/components/TagInput.d.ts.map +1 -1
- package/dist/technospam/components/TagInput.js +39 -34
- package/dist/technospam/components/TagInput.js.map +1 -1
- package/dist/technospam/hooks/useTr.d.ts +17 -0
- package/dist/technospam/hooks/useTr.d.ts.map +1 -0
- package/dist/technospam/hooks/useTr.js +12 -0
- package/dist/technospam/hooks/useTr.js.map +1 -0
- package/dist/technospam/index.d.ts +1 -0
- package/dist/technospam/index.d.ts.map +1 -1
- package/dist/technospam/index.js +1 -0
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +198 -189
- package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js +165 -163
- package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -1
- package/dist/technospam/pages/CoursesCoursesPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/CoursesCoursesPagePage.js +117 -113
- package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -1
- package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/DashboardDashboardPagePage.js +211 -193
- package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -1
- package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js +110 -110
- package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/MentorshipMentorsPagePage.js +174 -160
- package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -1
- package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts.map +1 -1
- package/dist/technospam/pages/MentorshipSessionsPagePage.js +156 -151
- package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -1
- package/dist/technospam/utils/i18n.js +1 -1
- package/dist/technospam/utils/i18n.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,90 +1,69 @@
|
|
|
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 {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
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 { formatDuration as c } from "../utils/format.js";
|
|
8
|
+
import { StatusBadge as l } from "../components/StatusBadge.js";
|
|
9
|
+
import { LoadMore as u } from "../components/LoadMore.js";
|
|
10
|
+
import { EmptyView as d, ErrorView as f, LoadingGrid as p } from "../components/StateViews.js";
|
|
11
|
+
import { PremiumBadge as m } from "../components/UpgradeGate.js";
|
|
11
12
|
import "../components/index.js";
|
|
12
|
-
import { pageArg as
|
|
13
|
-
import { useMemo as
|
|
14
|
-
import { BookOpen as
|
|
15
|
-
import { jsx as
|
|
16
|
-
import { Badge as
|
|
13
|
+
import { pageArg as h, useCoursesQuery as g, usePageLimit as _ } from "../api/technospamApi.js";
|
|
14
|
+
import { useMemo as v, useState as y } from "react";
|
|
15
|
+
import { BookOpen as b, Clock as x, GraduationCap as S, Layers as C, Search as w, Sparkles as T } from "lucide-react";
|
|
16
|
+
import { jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
17
|
+
import { Badge as O, Button as k, GlassCard as A, Input as j, Tabs as M, TabsList as N, TabsTrigger as P } from "@burdenoff/fe-libs/ui";
|
|
17
18
|
//#region src/technospam/pages/CoursesCoursesPagePage.tsx
|
|
18
|
-
var P = [
|
|
19
|
-
{
|
|
20
|
-
value: "ALL",
|
|
21
|
-
label: "All levels"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
value: "BEGINNER",
|
|
25
|
-
label: "Beginner"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
value: "INTERMEDIATE",
|
|
29
|
-
label: "Intermediate"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
value: "ADVANCED",
|
|
33
|
-
label: "Advanced"
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
value: "EXPERT",
|
|
37
|
-
label: "Expert"
|
|
38
|
-
}
|
|
39
|
-
];
|
|
40
19
|
function F({ course: e, onOpen: t }) {
|
|
41
|
-
return /* @__PURE__ */
|
|
20
|
+
return /* @__PURE__ */ D(A, {
|
|
42
21
|
className: "group flex cursor-pointer flex-col overflow-hidden transition-all duration-200 hover:-translate-y-1 hover:shadow-lg",
|
|
43
22
|
onClick: t,
|
|
44
|
-
children: [/* @__PURE__ */
|
|
23
|
+
children: [/* @__PURE__ */ E(o, {
|
|
45
24
|
seed: `${e.topic ?? ""} ${e.title}`,
|
|
46
|
-
icon:
|
|
47
|
-
children: /* @__PURE__ */
|
|
25
|
+
icon: s(e.topic ?? e.title),
|
|
26
|
+
children: /* @__PURE__ */ D("div", {
|
|
48
27
|
className: "flex flex-wrap items-center gap-1.5",
|
|
49
|
-
children: [/* @__PURE__ */
|
|
28
|
+
children: [/* @__PURE__ */ E(l, {
|
|
50
29
|
status: e.level,
|
|
51
30
|
kind: "level"
|
|
52
|
-
}), e.isPremiumOnly ? /* @__PURE__ */
|
|
31
|
+
}), e.isPremiumOnly ? /* @__PURE__ */ E(m, { locked: e.isLocked }) : null]
|
|
53
32
|
})
|
|
54
|
-
}), /* @__PURE__ */
|
|
33
|
+
}), /* @__PURE__ */ D("div", {
|
|
55
34
|
className: "flex flex-1 flex-col gap-3 p-4",
|
|
56
35
|
children: [
|
|
57
|
-
/* @__PURE__ */
|
|
36
|
+
/* @__PURE__ */ D("div", {
|
|
58
37
|
className: "min-w-0",
|
|
59
|
-
children: [/* @__PURE__ */
|
|
38
|
+
children: [/* @__PURE__ */ E("h3", {
|
|
60
39
|
className: "truncate text-base font-semibold text-text-primary group-hover:text-accent-primary",
|
|
61
40
|
children: e.title
|
|
62
|
-
}), e.summary ? /* @__PURE__ */
|
|
41
|
+
}), e.summary ? /* @__PURE__ */ E("p", {
|
|
63
42
|
className: "mt-1 line-clamp-2 text-sm text-text-secondary",
|
|
64
43
|
children: e.summary
|
|
65
44
|
}) : null]
|
|
66
45
|
}),
|
|
67
|
-
/* @__PURE__ */
|
|
46
|
+
/* @__PURE__ */ D("div", {
|
|
68
47
|
className: "mt-auto flex flex-wrap items-center gap-3 text-xs text-text-muted",
|
|
69
|
-
children: [e.topic ? /* @__PURE__ */
|
|
48
|
+
children: [e.topic ? /* @__PURE__ */ D("span", {
|
|
70
49
|
className: "inline-flex items-center gap-1",
|
|
71
50
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
51
|
+
/* @__PURE__ */ E(C, { size: 13 }),
|
|
73
52
|
" ",
|
|
74
53
|
e.topic
|
|
75
54
|
]
|
|
76
|
-
}) : null, /* @__PURE__ */
|
|
55
|
+
}) : null, /* @__PURE__ */ D("span", {
|
|
77
56
|
className: "inline-flex items-center gap-1",
|
|
78
57
|
children: [
|
|
79
|
-
/* @__PURE__ */
|
|
58
|
+
/* @__PURE__ */ E(x, { size: 13 }),
|
|
80
59
|
" ",
|
|
81
|
-
|
|
60
|
+
c(e.estimatedMinutes)
|
|
82
61
|
]
|
|
83
62
|
})]
|
|
84
63
|
}),
|
|
85
|
-
e.tags.length ? /* @__PURE__ */
|
|
64
|
+
e.tags.length ? /* @__PURE__ */ E("div", {
|
|
86
65
|
className: "flex flex-wrap gap-1.5",
|
|
87
|
-
children: e.tags.slice(0, 3).map((e) => /* @__PURE__ */
|
|
66
|
+
children: e.tags.slice(0, 3).map((e) => /* @__PURE__ */ E(O, {
|
|
88
67
|
variant: "secondary",
|
|
89
68
|
className: "text-[11px]",
|
|
90
69
|
children: e
|
|
@@ -95,76 +74,101 @@ function F({ course: e, onOpen: t }) {
|
|
|
95
74
|
});
|
|
96
75
|
}
|
|
97
76
|
function I() {
|
|
98
|
-
let
|
|
77
|
+
let o = t(), { workspaceId: s } = e(), { emit: l } = n(), m = r(), [C, O] = y("ALL"), [A, I] = y(""), L = v(() => [
|
|
78
|
+
{
|
|
79
|
+
value: "ALL",
|
|
80
|
+
label: m("technospam.courses.filterAllLevels", "All levels")
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
value: "BEGINNER",
|
|
84
|
+
label: m("technospam.courses.filterBeginner", "Beginner")
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
value: "INTERMEDIATE",
|
|
88
|
+
label: m("technospam.courses.filterIntermediate", "Intermediate")
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
value: "ADVANCED",
|
|
92
|
+
label: m("technospam.courses.filterAdvanced", "Advanced")
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
value: "EXPERT",
|
|
96
|
+
label: m("technospam.courses.filterExpert", "Expert")
|
|
97
|
+
}
|
|
98
|
+
], [m]), { limit: R, more: z } = _(), { data: B, loading: V, error: H } = g({
|
|
99
99
|
status: "PUBLISHED",
|
|
100
|
-
pagination:
|
|
101
|
-
...
|
|
102
|
-
}),
|
|
103
|
-
let e =
|
|
104
|
-
return e ?
|
|
105
|
-
}, [
|
|
106
|
-
return /* @__PURE__ */
|
|
100
|
+
pagination: h(R),
|
|
101
|
+
...C === "ALL" ? {} : { level: C }
|
|
102
|
+
}), U = B?.tecListCourses?.items ?? [], W = B?.tecListCourses?.pageInfo?.hasMore ?? !1, G = v(() => {
|
|
103
|
+
let e = A.trim().toLowerCase();
|
|
104
|
+
return e ? U.filter((t) => t.title.toLowerCase().includes(e) || (t.topic ?? "").toLowerCase().includes(e) || t.tags.some((t) => t.toLowerCase().includes(e))) : U;
|
|
105
|
+
}, [U, A]);
|
|
106
|
+
return /* @__PURE__ */ D(i, {
|
|
107
107
|
hero: !0,
|
|
108
|
-
title: "Course Catalog",
|
|
109
|
-
description: "Learn technology by doing — practical, project-based courses across the stack.",
|
|
110
|
-
actions: /* @__PURE__ */
|
|
108
|
+
title: m("technospam.courses.title", "Course Catalog"),
|
|
109
|
+
description: m("technospam.courses.description", "Learn technology by doing — practical, project-based courses across the stack."),
|
|
110
|
+
actions: /* @__PURE__ */ D(k, {
|
|
111
111
|
variant: "outline",
|
|
112
|
-
onClick: () =>
|
|
113
|
-
children: [
|
|
112
|
+
onClick: () => o("/courses/my-learning-page"),
|
|
113
|
+
children: [
|
|
114
|
+
/* @__PURE__ */ E(S, { size: 16 }),
|
|
115
|
+
" ",
|
|
116
|
+
m("technospam.common.myLearning", "My Learning")
|
|
117
|
+
]
|
|
114
118
|
}),
|
|
115
119
|
children: [
|
|
116
|
-
/* @__PURE__ */
|
|
120
|
+
/* @__PURE__ */ D("div", {
|
|
117
121
|
className: "mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4",
|
|
118
122
|
children: [
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
label: "Courses",
|
|
121
|
-
value:
|
|
122
|
-
icon:
|
|
123
|
+
/* @__PURE__ */ E(a, {
|
|
124
|
+
label: m("technospam.courses.statCourses", "Courses"),
|
|
125
|
+
value: U.length,
|
|
126
|
+
icon: b,
|
|
123
127
|
tone: "blue"
|
|
124
128
|
}),
|
|
125
|
-
/* @__PURE__ */
|
|
126
|
-
label: "Beginner-friendly",
|
|
127
|
-
value:
|
|
128
|
-
icon:
|
|
129
|
+
/* @__PURE__ */ E(a, {
|
|
130
|
+
label: m("technospam.courses.statBeginnerFriendly", "Beginner-friendly"),
|
|
131
|
+
value: U.filter((e) => e.level === "BEGINNER").length,
|
|
132
|
+
icon: T,
|
|
129
133
|
tone: "green"
|
|
130
134
|
}),
|
|
131
|
-
/* @__PURE__ */
|
|
132
|
-
label: "Advanced+",
|
|
133
|
-
value:
|
|
134
|
-
icon:
|
|
135
|
+
/* @__PURE__ */ E(a, {
|
|
136
|
+
label: m("technospam.courses.statAdvancedPlus", "Advanced+"),
|
|
137
|
+
value: U.filter((e) => e.level === "ADVANCED" || e.level === "EXPERT").length,
|
|
138
|
+
icon: S,
|
|
135
139
|
tone: "purple"
|
|
136
140
|
}),
|
|
137
|
-
/* @__PURE__ */
|
|
138
|
-
label: "Total content",
|
|
139
|
-
value:
|
|
140
|
-
icon:
|
|
141
|
+
/* @__PURE__ */ E(a, {
|
|
142
|
+
label: m("technospam.courses.statTotalContent", "Total content"),
|
|
143
|
+
value: c(U.reduce((e, t) => e + t.estimatedMinutes, 0)),
|
|
144
|
+
icon: x,
|
|
141
145
|
tone: "teal"
|
|
142
146
|
})
|
|
143
147
|
]
|
|
144
148
|
}),
|
|
145
|
-
/* @__PURE__ */
|
|
149
|
+
/* @__PURE__ */ D("div", {
|
|
146
150
|
className: "mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
|
|
147
|
-
children: [/* @__PURE__ */
|
|
148
|
-
value:
|
|
149
|
-
onValueChange: (e) =>
|
|
150
|
-
children: /* @__PURE__ */
|
|
151
|
+
children: [/* @__PURE__ */ E(M, {
|
|
152
|
+
value: C,
|
|
153
|
+
onValueChange: (e) => O(e),
|
|
154
|
+
children: /* @__PURE__ */ E(N, { children: L.map((e) => /* @__PURE__ */ E(P, {
|
|
151
155
|
value: e.value,
|
|
152
156
|
children: e.label
|
|
153
157
|
}, e.value)) })
|
|
154
|
-
}), /* @__PURE__ */
|
|
158
|
+
}), /* @__PURE__ */ D("div", {
|
|
155
159
|
className: "relative w-full sm:w-72",
|
|
156
|
-
children: [/* @__PURE__ */
|
|
160
|
+
children: [/* @__PURE__ */ E(w, {
|
|
157
161
|
className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-muted",
|
|
158
162
|
size: 16
|
|
159
|
-
}), /* @__PURE__ */
|
|
163
|
+
}), /* @__PURE__ */ E(j, {
|
|
160
164
|
className: "pl-9",
|
|
161
|
-
placeholder: "Search courses…",
|
|
162
|
-
value:
|
|
163
|
-
onChange: (e) =>
|
|
165
|
+
placeholder: m("technospam.courses.searchPlaceholder", "Search courses…"),
|
|
166
|
+
value: A,
|
|
167
|
+
onChange: (e) => I(e.target.value),
|
|
164
168
|
onBlur: () => {
|
|
165
|
-
let e =
|
|
166
|
-
e &&
|
|
167
|
-
workspaceId:
|
|
169
|
+
let e = A.trim();
|
|
170
|
+
e && l("technospam.search.performed", {
|
|
171
|
+
workspaceId: s,
|
|
168
172
|
entityType: "course",
|
|
169
173
|
queryLength: e.length
|
|
170
174
|
});
|
|
@@ -172,30 +176,30 @@ function I() {
|
|
|
172
176
|
})]
|
|
173
177
|
})]
|
|
174
178
|
}),
|
|
175
|
-
|
|
176
|
-
title: "Couldn't load courses",
|
|
177
|
-
error:
|
|
178
|
-
}) :
|
|
179
|
-
icon: /* @__PURE__ */
|
|
180
|
-
title:
|
|
181
|
-
description:
|
|
182
|
-
}) : /* @__PURE__ */
|
|
179
|
+
V && !U.length ? /* @__PURE__ */ E(p, {}) : H ? /* @__PURE__ */ E(f, {
|
|
180
|
+
title: m("technospam.common.errorLoadCourses", "Couldn't load courses"),
|
|
181
|
+
error: H
|
|
182
|
+
}) : G.length === 0 ? /* @__PURE__ */ E(d, {
|
|
183
|
+
icon: /* @__PURE__ */ E(b, { size: 26 }),
|
|
184
|
+
title: A || C !== "ALL" ? m("technospam.courses.emptySearchTitle", "No matching courses") : m("technospam.courses.emptyDefaultTitle", "No courses published yet"),
|
|
185
|
+
description: A || C !== "ALL" ? m("technospam.courses.emptySearchDesc", "Try a different search or level filter.") : m("technospam.courses.emptyDefaultDesc", "Published courses will appear here. Check back soon — TechnoSpam is pre-launch.")
|
|
186
|
+
}) : /* @__PURE__ */ E("div", {
|
|
183
187
|
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
184
|
-
children:
|
|
188
|
+
children: G.map((e) => /* @__PURE__ */ E(F, {
|
|
185
189
|
course: e,
|
|
186
190
|
onOpen: () => {
|
|
187
|
-
|
|
188
|
-
workspaceId:
|
|
191
|
+
l("technospam.course.viewed", {
|
|
192
|
+
workspaceId: s,
|
|
189
193
|
entityId: e.id,
|
|
190
194
|
entityType: "TEC_COURSE"
|
|
191
|
-
}),
|
|
195
|
+
}), o(`/courses/course-details-page?id=${e.id}`);
|
|
192
196
|
}
|
|
193
197
|
}, e.id))
|
|
194
198
|
}),
|
|
195
|
-
/* @__PURE__ */
|
|
196
|
-
hasMore:
|
|
197
|
-
loading:
|
|
198
|
-
onClick:
|
|
199
|
+
/* @__PURE__ */ E(u, {
|
|
200
|
+
hasMore: W,
|
|
201
|
+
loading: V,
|
|
202
|
+
onClick: z
|
|
199
203
|
})
|
|
200
204
|
]
|
|
201
205
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoursesCoursesPagePage.js","names":[],"sources":["../../../src/technospam/pages/CoursesCoursesPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { BookOpen, Clock, GraduationCap, Layers, Search, Sparkles } from 'lucide-react';\nimport {\n Badge,\n Button,\n GlassCard,\n Input,\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 useCoursesQuery,\n usePageLimit,\n type TecCourse,\n type TecCourseLevel,\n} from '../api/technospamApi';\nimport { formatDuration } from '../utils/format';\nimport { useTechnoSpamAnalytics } from '../hooks/useTechnoSpamAnalytics';\n\nconst LEVELS: Array<{ value: 'ALL' | TecCourseLevel; label: string }> = [\n { value: 'ALL', label: 'All levels' },\n { value: 'BEGINNER', label: 'Beginner' },\n { value: 'INTERMEDIATE', label: 'Intermediate' },\n { value: 'ADVANCED', label: 'Advanced' },\n { value: 'EXPERT', label: 'Expert' },\n];\n\nfunction CourseCard({ course, onOpen }: { course: TecCourse; onOpen: () => void }) {\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={`${course.topic ?? ''} ${course.title}`}\n icon={topicIcon(course.topic ?? course.title)}\n >\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <StatusBadge status={course.level} kind=\"level\" />\n {course.isPremiumOnly ? <PremiumBadge locked={course.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 {course.title}\n </h3>\n {course.summary ? (\n <p className=\"mt-1 line-clamp-2 text-sm text-text-secondary\">{course.summary}</p>\n ) : null}\n </div>\n <div className=\"mt-auto flex flex-wrap items-center gap-3 text-xs text-text-muted\">\n {course.topic ? (\n <span className=\"inline-flex items-center gap-1\">\n <Layers size={13} /> {course.topic}\n </span>\n ) : null}\n <span className=\"inline-flex items-center gap-1\">\n <Clock size={13} /> {formatDuration(course.estimatedMinutes)}\n </span>\n </div>\n {course.tags.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {course.tags.slice(0, 3).map((t) => (\n <Badge key={t} variant=\"secondary\" className=\"text-[11px]\">\n {t}\n </Badge>\n ))}\n </div>\n ) : null}\n </div>\n </GlassCard>\n );\n}\n\nexport function CoursesCoursesPagePage() {\n const navigate = useTechnoSpamNavigate();\n const { workspaceId } = useTechnoSpam();\n const { emit } = useTechnoSpamAnalytics();\n const [level, setLevel] = useState<'ALL' | TecCourseLevel>('ALL');\n const [search, setSearch] = useState('');\n\n const { limit, more } = usePageLimit();\n const { data, loading, error } = useCoursesQuery({\n status: 'PUBLISHED',\n pagination: pageArg(limit),\n ...(level !== 'ALL' ? { level } : {}),\n });\n\n const courses = data?.tecListCourses?.items ?? [];\n const hasMore = data?.tecListCourses?.pageInfo?.hasMore ?? false;\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return courses;\n return courses.filter(\n (c) =>\n c.title.toLowerCase().includes(q) ||\n (c.topic ?? '').toLowerCase().includes(q) ||\n c.tags.some((t) => t.toLowerCase().includes(q))\n );\n }, [courses, search]);\n\n return (\n <PageLayout\n hero\n title=\"Course Catalog\"\n description=\"Learn technology by doing — practical, project-based courses across the stack.\"\n actions={\n <Button variant=\"outline\" onClick={() => navigate('/courses/my-learning-page')}>\n <GraduationCap size={16} /> My Learning\n </Button>\n }\n >\n <div className=\"mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <StatCard label=\"Courses\" value={courses.length} icon={BookOpen} tone=\"blue\" />\n <StatCard\n label=\"Beginner-friendly\"\n value={courses.filter((c) => c.level === 'BEGINNER').length}\n icon={Sparkles}\n tone=\"green\"\n />\n <StatCard\n label=\"Advanced+\"\n value={courses.filter((c) => c.level === 'ADVANCED' || c.level === 'EXPERT').length}\n icon={GraduationCap}\n tone=\"purple\"\n />\n <StatCard\n label=\"Total content\"\n value={formatDuration(courses.reduce((s, c) => s + c.estimatedMinutes, 0))}\n icon={Clock}\n tone=\"teal\"\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 value={level} onValueChange={(v) => setLevel(v as 'ALL' | TecCourseLevel)}>\n <TabsList>\n {LEVELS.map((l) => (\n <TabsTrigger key={l.value} value={l.value}>\n {l.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 courses…\"\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: 'course',\n queryLength: value.length,\n });\n }\n }}\n />\n </div>\n </div>\n\n {loading && !courses.length ? (\n <LoadingGrid />\n ) : error ? (\n <ErrorView title=\"Couldn't load courses\" error={error} />\n ) : filtered.length === 0 ? (\n <EmptyView\n icon={<BookOpen size={26} />}\n title={search || level !== 'ALL' ? 'No matching courses' : 'No courses published yet'}\n description={\n search || level !== 'ALL'\n ? 'Try a different search or level filter.'\n : 'Published courses 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((course) => (\n <CourseCard\n key={course.id}\n course={course}\n onOpen={() => {\n emit('technospam.course.viewed', {\n workspaceId,\n entityId: course.id,\n entityType: 'TEC_COURSE',\n });\n navigate(`/courses/course-details-page?id=${course.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":"CoursesCoursesPagePage.js","names":[],"sources":["../../../src/technospam/pages/CoursesCoursesPagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { BookOpen, Clock, GraduationCap, Layers, Search, Sparkles } from 'lucide-react';\nimport {\n Badge,\n Button,\n GlassCard,\n Input,\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 useCoursesQuery,\n usePageLimit,\n type TecCourse,\n type TecCourseLevel,\n} from '../api/technospamApi';\nimport { formatDuration } from '../utils/format';\nimport { useTechnoSpamAnalytics } from '../hooks/useTechnoSpamAnalytics';\nimport { useTr } from '../hooks/useTr';\n\nfunction CourseCard({ course, onOpen }: { course: TecCourse; onOpen: () => void }) {\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={`${course.topic ?? ''} ${course.title}`}\n icon={topicIcon(course.topic ?? course.title)}\n >\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <StatusBadge status={course.level} kind=\"level\" />\n {course.isPremiumOnly ? <PremiumBadge locked={course.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 {course.title}\n </h3>\n {course.summary ? (\n <p className=\"mt-1 line-clamp-2 text-sm text-text-secondary\">{course.summary}</p>\n ) : null}\n </div>\n <div className=\"mt-auto flex flex-wrap items-center gap-3 text-xs text-text-muted\">\n {course.topic ? (\n <span className=\"inline-flex items-center gap-1\">\n <Layers size={13} /> {course.topic}\n </span>\n ) : null}\n <span className=\"inline-flex items-center gap-1\">\n <Clock size={13} /> {formatDuration(course.estimatedMinutes)}\n </span>\n </div>\n {course.tags.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {course.tags.slice(0, 3).map((t) => (\n <Badge key={t} variant=\"secondary\" className=\"text-[11px]\">\n {t}\n </Badge>\n ))}\n </div>\n ) : null}\n </div>\n </GlassCard>\n );\n}\n\nexport function CoursesCoursesPagePage() {\n const navigate = useTechnoSpamNavigate();\n const { workspaceId } = useTechnoSpam();\n const { emit } = useTechnoSpamAnalytics();\n const tr = useTr();\n const [level, setLevel] = useState<'ALL' | TecCourseLevel>('ALL');\n const [search, setSearch] = useState('');\n\n const levels = useMemo(\n () => [\n { value: 'ALL' as const, label: tr('technospam.courses.filterAllLevels', 'All levels') },\n {\n value: 'BEGINNER' as TecCourseLevel,\n label: tr('technospam.courses.filterBeginner', 'Beginner'),\n },\n {\n value: 'INTERMEDIATE' as TecCourseLevel,\n label: tr('technospam.courses.filterIntermediate', 'Intermediate'),\n },\n {\n value: 'ADVANCED' as TecCourseLevel,\n label: tr('technospam.courses.filterAdvanced', 'Advanced'),\n },\n { value: 'EXPERT' as TecCourseLevel, label: tr('technospam.courses.filterExpert', 'Expert') },\n ],\n [tr]\n );\n\n const { limit, more } = usePageLimit();\n const { data, loading, error } = useCoursesQuery({\n status: 'PUBLISHED',\n pagination: pageArg(limit),\n ...(level !== 'ALL' ? { level } : {}),\n });\n\n const courses = data?.tecListCourses?.items ?? [];\n const hasMore = data?.tecListCourses?.pageInfo?.hasMore ?? false;\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n if (!q) return courses;\n return courses.filter(\n (c) =>\n c.title.toLowerCase().includes(q) ||\n (c.topic ?? '').toLowerCase().includes(q) ||\n c.tags.some((t) => t.toLowerCase().includes(q))\n );\n }, [courses, search]);\n\n return (\n <PageLayout\n hero\n title={tr('technospam.courses.title', 'Course Catalog')}\n description={tr(\n 'technospam.courses.description',\n 'Learn technology by doing — practical, project-based courses across the stack.'\n )}\n actions={\n <Button variant=\"outline\" onClick={() => navigate('/courses/my-learning-page')}>\n <GraduationCap size={16} /> {tr('technospam.common.myLearning', 'My Learning')}\n </Button>\n }\n >\n <div className=\"mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <StatCard\n label={tr('technospam.courses.statCourses', 'Courses')}\n value={courses.length}\n icon={BookOpen}\n tone=\"blue\"\n />\n <StatCard\n label={tr('technospam.courses.statBeginnerFriendly', 'Beginner-friendly')}\n value={courses.filter((c) => c.level === 'BEGINNER').length}\n icon={Sparkles}\n tone=\"green\"\n />\n <StatCard\n label={tr('technospam.courses.statAdvancedPlus', 'Advanced+')}\n value={courses.filter((c) => c.level === 'ADVANCED' || c.level === 'EXPERT').length}\n icon={GraduationCap}\n tone=\"purple\"\n />\n <StatCard\n label={tr('technospam.courses.statTotalContent', 'Total content')}\n value={formatDuration(courses.reduce((s, c) => s + c.estimatedMinutes, 0))}\n icon={Clock}\n tone=\"teal\"\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 value={level} onValueChange={(v) => setLevel(v as 'ALL' | TecCourseLevel)}>\n <TabsList>\n {levels.map((l) => (\n <TabsTrigger key={l.value} value={l.value}>\n {l.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.courses.searchPlaceholder', 'Search courses…')}\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: 'course',\n queryLength: value.length,\n });\n }\n }}\n />\n </div>\n </div>\n\n {loading && !courses.length ? (\n <LoadingGrid />\n ) : error ? (\n <ErrorView\n title={tr('technospam.common.errorLoadCourses', \"Couldn't load courses\")}\n error={error}\n />\n ) : filtered.length === 0 ? (\n <EmptyView\n icon={<BookOpen size={26} />}\n title={\n search || level !== 'ALL'\n ? tr('technospam.courses.emptySearchTitle', 'No matching courses')\n : tr('technospam.courses.emptyDefaultTitle', 'No courses published yet')\n }\n description={\n search || level !== 'ALL'\n ? tr('technospam.courses.emptySearchDesc', 'Try a different search or level filter.')\n : tr(\n 'technospam.courses.emptyDefaultDesc',\n 'Published courses 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((course) => (\n <CourseCard\n key={course.id}\n course={course}\n onOpen={() => {\n emit('technospam.course.viewed', {\n workspaceId,\n entityId: course.id,\n entityType: 'TEC_COURSE',\n });\n navigate(`/courses/course-details-page?id=${course.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":"DashboardDashboardPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/DashboardDashboardPagePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DashboardDashboardPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/DashboardDashboardPagePage.tsx"],"names":[],"mappings":"AA0MA,wBAAgB,0BAA0B,gCA8UzC"}
|