@burdenoff/microfe-technospam 2026.509.101

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 (202) hide show
  1. package/README.md +12 -0
  2. package/dist/dev/main.d.ts +2 -0
  3. package/dist/dev/main.d.ts.map +1 -0
  4. package/dist/generated/global-operations.d.ts +2 -0
  5. package/dist/generated/global-operations.d.ts.map +1 -0
  6. package/dist/generated/global-types.d.ts +18199 -0
  7. package/dist/generated/global-types.d.ts.map +1 -0
  8. package/dist/generated/wspace-operations.d.ts +2 -0
  9. package/dist/generated/wspace-operations.d.ts.map +1 -0
  10. package/dist/generated/wspace-types.d.ts +43046 -0
  11. package/dist/generated/wspace-types.d.ts.map +1 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +5 -0
  15. package/dist/technospam/TechnoSpamRoot.d.ts +5 -0
  16. package/dist/technospam/TechnoSpamRoot.d.ts.map +1 -0
  17. package/dist/technospam/TechnoSpamRoot.js +482 -0
  18. package/dist/technospam/TechnoSpamRoot.js.map +1 -0
  19. package/dist/technospam/TechnoSpamRoutes.d.ts +2 -0
  20. package/dist/technospam/TechnoSpamRoutes.d.ts.map +1 -0
  21. package/dist/technospam/TechnoSpamRoutes.js +191 -0
  22. package/dist/technospam/TechnoSpamRoutes.js.map +1 -0
  23. package/dist/technospam/index.d.ts +5 -0
  24. package/dist/technospam/index.d.ts.map +1 -0
  25. package/dist/technospam/index.js +3 -0
  26. package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts +2 -0
  27. package/dist/technospam/pages/AdminAdminDashboardPagePage.d.ts.map +1 -0
  28. package/dist/technospam/pages/AdminAdminDashboardPagePage.js +269 -0
  29. package/dist/technospam/pages/AdminAdminDashboardPagePage.js.map +1 -0
  30. package/dist/technospam/pages/AdminAuditReportsPagePage.d.ts +2 -0
  31. package/dist/technospam/pages/AdminAuditReportsPagePage.d.ts.map +1 -0
  32. package/dist/technospam/pages/AdminAuditReportsPagePage.js +179 -0
  33. package/dist/technospam/pages/AdminAuditReportsPagePage.js.map +1 -0
  34. package/dist/technospam/pages/AnalyticsAchievementsPagePage.d.ts +2 -0
  35. package/dist/technospam/pages/AnalyticsAchievementsPagePage.d.ts.map +1 -0
  36. package/dist/technospam/pages/AnalyticsAchievementsPagePage.js +149 -0
  37. package/dist/technospam/pages/AnalyticsAchievementsPagePage.js.map +1 -0
  38. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts +2 -0
  39. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -0
  40. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js +260 -0
  41. package/dist/technospam/pages/AnalyticsAnalyticsPagePage.js.map +1 -0
  42. package/dist/technospam/pages/AnalyticsProgressPagePage.d.ts +2 -0
  43. package/dist/technospam/pages/AnalyticsProgressPagePage.d.ts.map +1 -0
  44. package/dist/technospam/pages/AnalyticsProgressPagePage.js +215 -0
  45. package/dist/technospam/pages/AnalyticsProgressPagePage.js.map +1 -0
  46. package/dist/technospam/pages/AnalyticsReportsPagePage.d.ts +2 -0
  47. package/dist/technospam/pages/AnalyticsReportsPagePage.d.ts.map +1 -0
  48. package/dist/technospam/pages/AnalyticsReportsPagePage.js +145 -0
  49. package/dist/technospam/pages/AnalyticsReportsPagePage.js.map +1 -0
  50. package/dist/technospam/pages/ApplicationsPortfolioPagePage.d.ts +2 -0
  51. package/dist/technospam/pages/ApplicationsPortfolioPagePage.d.ts.map +1 -0
  52. package/dist/technospam/pages/ApplicationsPortfolioPagePage.js +227 -0
  53. package/dist/technospam/pages/ApplicationsPortfolioPagePage.js.map +1 -0
  54. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts +2 -0
  55. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.d.ts.map +1 -0
  56. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js +194 -0
  57. package/dist/technospam/pages/ApplicationsProblemDetailsPagePage.js.map +1 -0
  58. package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts +2 -0
  59. package/dist/technospam/pages/ApplicationsProblemsPagePage.d.ts.map +1 -0
  60. package/dist/technospam/pages/ApplicationsProblemsPagePage.js +203 -0
  61. package/dist/technospam/pages/ApplicationsProblemsPagePage.js.map +1 -0
  62. package/dist/technospam/pages/ApplicationsSolutionsPagePage.d.ts +2 -0
  63. package/dist/technospam/pages/ApplicationsSolutionsPagePage.d.ts.map +1 -0
  64. package/dist/technospam/pages/ApplicationsSolutionsPagePage.js +182 -0
  65. package/dist/technospam/pages/ApplicationsSolutionsPagePage.js.map +1 -0
  66. package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts +2 -0
  67. package/dist/technospam/pages/CoursesCourseDetailsPagePage.d.ts.map +1 -0
  68. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js +261 -0
  69. package/dist/technospam/pages/CoursesCourseDetailsPagePage.js.map +1 -0
  70. package/dist/technospam/pages/CoursesCoursesPagePage.d.ts +2 -0
  71. package/dist/technospam/pages/CoursesCoursesPagePage.d.ts.map +1 -0
  72. package/dist/technospam/pages/CoursesCoursesPagePage.js +179 -0
  73. package/dist/technospam/pages/CoursesCoursesPagePage.js.map +1 -0
  74. package/dist/technospam/pages/CoursesInstructorProfilePagePage.d.ts +2 -0
  75. package/dist/technospam/pages/CoursesInstructorProfilePagePage.d.ts.map +1 -0
  76. package/dist/technospam/pages/CoursesInstructorProfilePagePage.js +346 -0
  77. package/dist/technospam/pages/CoursesInstructorProfilePagePage.js.map +1 -0
  78. package/dist/technospam/pages/CoursesInstructorsPagePage.d.ts +2 -0
  79. package/dist/technospam/pages/CoursesInstructorsPagePage.d.ts.map +1 -0
  80. package/dist/technospam/pages/CoursesInstructorsPagePage.js +104 -0
  81. package/dist/technospam/pages/CoursesInstructorsPagePage.js.map +1 -0
  82. package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts +2 -0
  83. package/dist/technospam/pages/CoursesMyLearningPagePage.d.ts.map +1 -0
  84. package/dist/technospam/pages/CoursesMyLearningPagePage.js +187 -0
  85. package/dist/technospam/pages/CoursesMyLearningPagePage.js.map +1 -0
  86. package/dist/technospam/pages/DashboardDashboardPagePage.d.ts +2 -0
  87. package/dist/technospam/pages/DashboardDashboardPagePage.d.ts.map +1 -0
  88. package/dist/technospam/pages/DashboardDashboardPagePage.js +344 -0
  89. package/dist/technospam/pages/DashboardDashboardPagePage.js.map +1 -0
  90. package/dist/technospam/pages/HackathonsEventsPagePage.d.ts +2 -0
  91. package/dist/technospam/pages/HackathonsEventsPagePage.d.ts.map +1 -0
  92. package/dist/technospam/pages/HackathonsEventsPagePage.js +121 -0
  93. package/dist/technospam/pages/HackathonsEventsPagePage.js.map +1 -0
  94. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts +2 -0
  95. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.d.ts.map +1 -0
  96. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js +250 -0
  97. package/dist/technospam/pages/HackathonsHackathonDetailsPagePage.js.map +1 -0
  98. package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts +2 -0
  99. package/dist/technospam/pages/HackathonsHackathonsPagePage.d.ts.map +1 -0
  100. package/dist/technospam/pages/HackathonsHackathonsPagePage.js +162 -0
  101. package/dist/technospam/pages/HackathonsHackathonsPagePage.js.map +1 -0
  102. package/dist/technospam/pages/HackathonsTeamsPagePage.d.ts +2 -0
  103. package/dist/technospam/pages/HackathonsTeamsPagePage.d.ts.map +1 -0
  104. package/dist/technospam/pages/HackathonsTeamsPagePage.js +185 -0
  105. package/dist/technospam/pages/HackathonsTeamsPagePage.js.map +1 -0
  106. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.d.ts +2 -0
  107. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.d.ts.map +1 -0
  108. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.js +181 -0
  109. package/dist/technospam/pages/KnowledgeBaseArticleDetailsPagePage.js.map +1 -0
  110. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.d.ts +2 -0
  111. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.d.ts.map +1 -0
  112. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.js +112 -0
  113. package/dist/technospam/pages/KnowledgeBaseArticlesPagePage.js.map +1 -0
  114. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.d.ts +2 -0
  115. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.d.ts.map +1 -0
  116. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.js +105 -0
  117. package/dist/technospam/pages/KnowledgeBaseCategoriesPagePage.js.map +1 -0
  118. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.d.ts +2 -0
  119. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.d.ts.map +1 -0
  120. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.js +165 -0
  121. package/dist/technospam/pages/KnowledgeBaseKnowledgeBasePagePage.js.map +1 -0
  122. package/dist/technospam/pages/MentorshipBookingsPagePage.d.ts +2 -0
  123. package/dist/technospam/pages/MentorshipBookingsPagePage.d.ts.map +1 -0
  124. package/dist/technospam/pages/MentorshipBookingsPagePage.js +188 -0
  125. package/dist/technospam/pages/MentorshipBookingsPagePage.js.map +1 -0
  126. package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts +2 -0
  127. package/dist/technospam/pages/MentorshipMentorProfilePagePage.d.ts.map +1 -0
  128. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js +310 -0
  129. package/dist/technospam/pages/MentorshipMentorProfilePagePage.js.map +1 -0
  130. package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts +2 -0
  131. package/dist/technospam/pages/MentorshipMentorsPagePage.d.ts.map +1 -0
  132. package/dist/technospam/pages/MentorshipMentorsPagePage.js +128 -0
  133. package/dist/technospam/pages/MentorshipMentorsPagePage.js.map +1 -0
  134. package/dist/technospam/pages/MentorshipMentorshipPagePage.d.ts +2 -0
  135. package/dist/technospam/pages/MentorshipMentorshipPagePage.d.ts.map +1 -0
  136. package/dist/technospam/pages/MentorshipMentorshipPagePage.js +209 -0
  137. package/dist/technospam/pages/MentorshipMentorshipPagePage.js.map +1 -0
  138. package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts +2 -0
  139. package/dist/technospam/pages/MentorshipSessionsPagePage.d.ts.map +1 -0
  140. package/dist/technospam/pages/MentorshipSessionsPagePage.js +170 -0
  141. package/dist/technospam/pages/MentorshipSessionsPagePage.js.map +1 -0
  142. package/dist/technospam/pages/OpenSourceContributionsPagePage.d.ts +2 -0
  143. package/dist/technospam/pages/OpenSourceContributionsPagePage.d.ts.map +1 -0
  144. package/dist/technospam/pages/OpenSourceContributionsPagePage.js +191 -0
  145. package/dist/technospam/pages/OpenSourceContributionsPagePage.js.map +1 -0
  146. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.d.ts +2 -0
  147. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.d.ts.map +1 -0
  148. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.js +216 -0
  149. package/dist/technospam/pages/OpenSourceOpenSourcePagePage.js.map +1 -0
  150. package/dist/technospam/pages/OpenSourceProjectsPagePage.d.ts +2 -0
  151. package/dist/technospam/pages/OpenSourceProjectsPagePage.d.ts.map +1 -0
  152. package/dist/technospam/pages/OpenSourceProjectsPagePage.js +150 -0
  153. package/dist/technospam/pages/OpenSourceProjectsPagePage.js.map +1 -0
  154. package/dist/technospam/pages/StudyPlannerGoalsPagePage.d.ts +2 -0
  155. package/dist/technospam/pages/StudyPlannerGoalsPagePage.d.ts.map +1 -0
  156. package/dist/technospam/pages/StudyPlannerGoalsPagePage.js +161 -0
  157. package/dist/technospam/pages/StudyPlannerGoalsPagePage.js.map +1 -0
  158. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.d.ts +2 -0
  159. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.d.ts.map +1 -0
  160. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.js +198 -0
  161. package/dist/technospam/pages/StudyPlannerLearningPathDetailsPagePage.js.map +1 -0
  162. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.d.ts +2 -0
  163. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.d.ts.map +1 -0
  164. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.js +105 -0
  165. package/dist/technospam/pages/StudyPlannerLearningPathsPagePage.js.map +1 -0
  166. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.d.ts +2 -0
  167. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.d.ts.map +1 -0
  168. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.js +161 -0
  169. package/dist/technospam/pages/StudyPlannerStudyPlanDetailsPagePage.js.map +1 -0
  170. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.d.ts +2 -0
  171. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.d.ts.map +1 -0
  172. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.js +127 -0
  173. package/dist/technospam/pages/StudyPlannerStudyPlanEditPagePage.js.map +1 -0
  174. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.d.ts +2 -0
  175. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.d.ts.map +1 -0
  176. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js +238 -0
  177. package/dist/technospam/pages/StudyPlannerStudyPlannerPagePage.js.map +1 -0
  178. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.d.ts +2 -0
  179. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.d.ts.map +1 -0
  180. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.js +113 -0
  181. package/dist/technospam/pages/StudyPlannerStudyPlansPagePage.js.map +1 -0
  182. package/dist/technospam/providers/TechnoSpamProvider.d.ts +6 -0
  183. package/dist/technospam/providers/TechnoSpamProvider.d.ts.map +1 -0
  184. package/dist/technospam/providers/TechnoSpamProvider.js +27 -0
  185. package/dist/technospam/providers/TechnoSpamProvider.js.map +1 -0
  186. package/dist/technospam/store/technospamStore.d.ts +190 -0
  187. package/dist/technospam/store/technospamStore.d.ts.map +1 -0
  188. package/dist/technospam/store/technospamStore.js +912 -0
  189. package/dist/technospam/store/technospamStore.js.map +1 -0
  190. package/dist/technospam/types/index.d.ts +51 -0
  191. package/dist/technospam/types/index.d.ts.map +1 -0
  192. package/dist/technospam/utils/cn.d.ts +4 -0
  193. package/dist/technospam/utils/cn.d.ts.map +1 -0
  194. package/dist/technospam/utils/i18n.d.ts +6 -0
  195. package/dist/technospam/utils/i18n.d.ts.map +1 -0
  196. package/dist/technospam/utils/i18n.js +15 -0
  197. package/dist/technospam/utils/i18n.js.map +1 -0
  198. package/dist/technospam/utils/navigation.d.ts +2 -0
  199. package/dist/technospam/utils/navigation.d.ts.map +1 -0
  200. package/dist/technospam/utils/navigation.js +8 -0
  201. package/dist/technospam/utils/navigation.js.map +1 -0
  202. package/package.json +107 -0
@@ -0,0 +1,261 @@
1
+ import { useTechnoSpamStore as e } from "../store/technospamStore.js";
2
+ import { ArrowLeft as t, Award as n, BookOpen as r, CheckCircle as i, Clock as a, Sparkles as o, Star as s, User as c, Users as l } from "lucide-react";
3
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
4
+ import { Badge as f, Button as p, Card as m, CardContent as h, CardHeader as g, CardTitle as _ } from "@burdenoff/fe-libs/ui";
5
+ //#region src/technospam/pages/CoursesCourseDetailsPagePage.tsx
6
+ var v = [
7
+ {
8
+ title: "Introduction & Setup",
9
+ duration: "2h",
10
+ lessons: 8
11
+ },
12
+ {
13
+ title: "Core Concepts & Fundamentals",
14
+ duration: "6h",
15
+ lessons: 15
16
+ },
17
+ {
18
+ title: "Advanced Patterns & Techniques",
19
+ duration: "8h",
20
+ lessons: 12
21
+ },
22
+ {
23
+ title: "Real-World Projects",
24
+ duration: "10h",
25
+ lessons: 6
26
+ },
27
+ {
28
+ title: "Testing & Best Practices",
29
+ duration: "4h",
30
+ lessons: 10
31
+ },
32
+ {
33
+ title: "Deployment & Performance",
34
+ duration: "3h",
35
+ lessons: 7
36
+ }
37
+ ], y = [
38
+ "Build production-ready applications with best practices",
39
+ "Understand and implement advanced design patterns",
40
+ "Write comprehensive tests and maintain high code quality",
41
+ "Deploy and optimize applications for performance",
42
+ "Collaborate effectively in team environments"
43
+ ];
44
+ function b() {
45
+ let { courses: b } = e(), x = b[0];
46
+ return x ? /* @__PURE__ */ d("div", {
47
+ className: "space-y-6 p-6",
48
+ children: [
49
+ /* @__PURE__ */ d(p, {
50
+ variant: "ghost",
51
+ size: "sm",
52
+ className: "text-muted-foreground",
53
+ children: [/* @__PURE__ */ u(t, { className: "mr-2 h-4 w-4" }), "Back to Courses"]
54
+ }),
55
+ /* @__PURE__ */ d("div", {
56
+ className: "grid gap-6 lg:grid-cols-3",
57
+ children: [/* @__PURE__ */ d("div", {
58
+ className: "space-y-4 lg:col-span-2",
59
+ children: [
60
+ /* @__PURE__ */ d("div", {
61
+ className: "flex flex-wrap items-center gap-2",
62
+ children: [
63
+ /* @__PURE__ */ u("span", {
64
+ className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${((e) => {
65
+ switch (e) {
66
+ case "beginner": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
67
+ case "intermediate": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
68
+ case "advanced": return "bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400";
69
+ case "expert": return "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400";
70
+ default: return "";
71
+ }
72
+ })(x.level)}`,
73
+ children: x.level
74
+ }),
75
+ /* @__PURE__ */ u(f, {
76
+ variant: "secondary",
77
+ children: x.category
78
+ }),
79
+ x.isFeatured && /* @__PURE__ */ d(f, {
80
+ variant: "secondary",
81
+ className: "flex items-center gap-1",
82
+ children: [/* @__PURE__ */ u(o, { className: "h-3 w-3" }), "Featured"]
83
+ })
84
+ ]
85
+ }),
86
+ /* @__PURE__ */ u("h1", {
87
+ className: "text-3xl font-bold text-foreground",
88
+ children: x.title
89
+ }),
90
+ /* @__PURE__ */ u("p", {
91
+ className: "text-muted-foreground",
92
+ children: "Master the concepts and techniques needed to build professional-grade applications. This comprehensive course covers everything from fundamentals to advanced topics."
93
+ }),
94
+ /* @__PURE__ */ d("div", {
95
+ className: "flex flex-wrap items-center gap-4 text-sm text-muted-foreground",
96
+ children: [
97
+ /* @__PURE__ */ d("span", {
98
+ className: "flex items-center gap-1",
99
+ children: [/* @__PURE__ */ u(c, { className: "h-4 w-4" }), x.instructor]
100
+ }),
101
+ /* @__PURE__ */ d("span", {
102
+ className: "flex items-center gap-1",
103
+ children: [
104
+ /* @__PURE__ */ u(s, { className: "h-4 w-4 text-yellow-500" }),
105
+ x.rating,
106
+ " rating"
107
+ ]
108
+ }),
109
+ /* @__PURE__ */ d("span", {
110
+ className: "flex items-center gap-1",
111
+ children: [
112
+ /* @__PURE__ */ u(l, { className: "h-4 w-4" }),
113
+ x.enrollmentCount.toLocaleString(),
114
+ " students"
115
+ ]
116
+ }),
117
+ /* @__PURE__ */ d("span", {
118
+ className: "flex items-center gap-1",
119
+ children: [
120
+ /* @__PURE__ */ u(a, { className: "h-4 w-4" }),
121
+ x.duration,
122
+ " hours"
123
+ ]
124
+ })
125
+ ]
126
+ }),
127
+ /* @__PURE__ */ u("div", {
128
+ className: "flex flex-wrap gap-1.5",
129
+ children: x.tags.map((e) => /* @__PURE__ */ u(f, {
130
+ variant: "outline",
131
+ children: e
132
+ }, e))
133
+ })
134
+ ]
135
+ }), /* @__PURE__ */ u(m, { children: /* @__PURE__ */ d(h, {
136
+ className: "space-y-4 pt-6",
137
+ children: [
138
+ /* @__PURE__ */ u("div", {
139
+ className: "text-center",
140
+ children: /* @__PURE__ */ u("span", {
141
+ className: "text-3xl font-bold",
142
+ children: x.price === 0 ? "Free" : `$${x.price}`
143
+ })
144
+ }),
145
+ /* @__PURE__ */ u(p, {
146
+ className: "w-full",
147
+ size: "lg",
148
+ children: "Enroll Now"
149
+ }),
150
+ x.certificateAvailable && /* @__PURE__ */ d("div", {
151
+ className: "flex items-center justify-center gap-2 text-sm text-muted-foreground",
152
+ children: [/* @__PURE__ */ u(n, { className: "h-4 w-4 text-primary" }), "Certificate of Completion"]
153
+ }),
154
+ /* @__PURE__ */ d("div", {
155
+ className: "space-y-2 border-t border-border pt-4 text-sm text-muted-foreground",
156
+ children: [
157
+ /* @__PURE__ */ d("div", {
158
+ className: "flex justify-between",
159
+ children: [/* @__PURE__ */ u("span", { children: "Duration" }), /* @__PURE__ */ d("span", {
160
+ className: "font-medium text-foreground",
161
+ children: [x.duration, " hours"]
162
+ })]
163
+ }),
164
+ /* @__PURE__ */ d("div", {
165
+ className: "flex justify-between",
166
+ children: [/* @__PURE__ */ u("span", { children: "Level" }), /* @__PURE__ */ u("span", {
167
+ className: "font-medium text-foreground capitalize",
168
+ children: x.level
169
+ })]
170
+ }),
171
+ /* @__PURE__ */ d("div", {
172
+ className: "flex justify-between",
173
+ children: [/* @__PURE__ */ u("span", { children: "Students" }), /* @__PURE__ */ u("span", {
174
+ className: "font-medium text-foreground",
175
+ children: x.enrollmentCount.toLocaleString()
176
+ })]
177
+ })
178
+ ]
179
+ })
180
+ ]
181
+ }) })]
182
+ }),
183
+ /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, {
184
+ className: "text-base",
185
+ children: "What You'll Learn"
186
+ }) }), /* @__PURE__ */ u(h, { children: /* @__PURE__ */ u("div", {
187
+ className: "grid gap-3 sm:grid-cols-2",
188
+ children: y.map((e) => /* @__PURE__ */ d("div", {
189
+ className: "flex items-start gap-2",
190
+ children: [/* @__PURE__ */ u(i, { className: "mt-0.5 h-4 w-4 shrink-0 text-green-500" }), /* @__PURE__ */ u("span", {
191
+ className: "text-sm",
192
+ children: e
193
+ })]
194
+ }, e))
195
+ }) })] }),
196
+ /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ d(_, {
197
+ className: "flex items-center gap-2 text-base",
198
+ children: [/* @__PURE__ */ u(r, { className: "h-4 w-4" }), "Course Curriculum"]
199
+ }) }), /* @__PURE__ */ u(h, {
200
+ className: "space-y-3",
201
+ children: v.map((e, t) => /* @__PURE__ */ d("div", {
202
+ className: "flex items-center justify-between rounded-lg border border-border p-4",
203
+ children: [/* @__PURE__ */ d("div", {
204
+ className: "flex items-center gap-3",
205
+ children: [/* @__PURE__ */ u("span", {
206
+ className: "flex h-8 w-8 items-center justify-center rounded-full bg-muted text-sm font-medium",
207
+ children: t + 1
208
+ }), /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("p", {
209
+ className: "text-sm font-medium",
210
+ children: e.title
211
+ }), /* @__PURE__ */ d("p", {
212
+ className: "text-xs text-muted-foreground",
213
+ children: [e.lessons, " lessons"]
214
+ })] })]
215
+ }), /* @__PURE__ */ u("span", {
216
+ className: "text-sm text-muted-foreground",
217
+ children: e.duration
218
+ })]
219
+ }, e.title))
220
+ })] }),
221
+ /* @__PURE__ */ d(m, { children: [/* @__PURE__ */ u(g, { children: /* @__PURE__ */ u(_, {
222
+ className: "text-base",
223
+ children: "About the Instructor"
224
+ }) }), /* @__PURE__ */ u(h, { children: /* @__PURE__ */ d("div", {
225
+ className: "flex items-start gap-4",
226
+ children: [/* @__PURE__ */ u("div", {
227
+ className: "flex h-12 w-12 items-center justify-center rounded-full bg-muted",
228
+ children: /* @__PURE__ */ u(c, { className: "h-6 w-6 text-muted-foreground" })
229
+ }), /* @__PURE__ */ d("div", {
230
+ className: "space-y-1",
231
+ children: [
232
+ /* @__PURE__ */ u("p", {
233
+ className: "font-medium",
234
+ children: x.instructor
235
+ }),
236
+ /* @__PURE__ */ u("p", {
237
+ className: "text-sm text-muted-foreground",
238
+ children: "Expert instructor with years of industry experience. Passionate about helping students master complex topics through practical, hands-on learning."
239
+ }),
240
+ /* @__PURE__ */ d("div", {
241
+ className: "flex items-center gap-2 text-xs text-muted-foreground",
242
+ children: [
243
+ /* @__PURE__ */ u(s, { className: "h-3 w-3 text-yellow-500" }),
244
+ /* @__PURE__ */ d("span", { children: [x.rating, " instructor rating"] }),
245
+ /* @__PURE__ */ u("span", { children: "·" }),
246
+ /* @__PURE__ */ d("span", { children: [x.enrollmentCount.toLocaleString(), " students"] })
247
+ ]
248
+ })
249
+ ]
250
+ })]
251
+ }) })] })
252
+ ]
253
+ }) : /* @__PURE__ */ u("div", {
254
+ className: "p-6 text-center text-muted-foreground",
255
+ children: "Course not found"
256
+ });
257
+ }
258
+ //#endregion
259
+ export { b as CoursesCourseDetailsPagePage };
260
+
261
+ //# sourceMappingURL=CoursesCourseDetailsPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCourseDetailsPagePage.js","names":[],"sources":["../../../src/technospam/pages/CoursesCourseDetailsPagePage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport {\n Star,\n Users,\n Clock,\n Award,\n ArrowLeft,\n CheckCircle,\n User,\n Sparkles,\n BookOpen,\n} from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\nconst mockCurriculum = [\n { title: 'Introduction & Setup', duration: '2h', lessons: 8 },\n { title: 'Core Concepts & Fundamentals', duration: '6h', lessons: 15 },\n { title: 'Advanced Patterns & Techniques', duration: '8h', lessons: 12 },\n { title: 'Real-World Projects', duration: '10h', lessons: 6 },\n { title: 'Testing & Best Practices', duration: '4h', lessons: 10 },\n { title: 'Deployment & Performance', duration: '3h', lessons: 7 },\n];\n\nconst mockLearningOutcomes = [\n 'Build production-ready applications with best practices',\n 'Understand and implement advanced design patterns',\n 'Write comprehensive tests and maintain high code quality',\n 'Deploy and optimize applications for performance',\n 'Collaborate effectively in team environments',\n];\n\nexport function CoursesCourseDetailsPagePage() {\n const { courses } = useTechnoSpamStore();\n const course = courses[0];\n\n if (!course) {\n return <div className=\"p-6 text-center text-muted-foreground\">Course not found</div>;\n }\n\n const levelColor = (level: string) => {\n switch (level) {\n case 'beginner':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400';\n case 'intermediate':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400';\n case 'advanced':\n return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400';\n case 'expert':\n return 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400';\n default:\n return '';\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <Button variant=\"ghost\" size=\"sm\" className=\"text-muted-foreground\">\n <ArrowLeft className=\"mr-2 h-4 w-4\" />\n Back to Courses\n </Button>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <div className=\"space-y-4 lg:col-span-2\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${levelColor(course.level)}`}\n >\n {course.level}\n </span>\n <Badge variant=\"secondary\">{course.category}</Badge>\n {course.isFeatured && (\n <Badge variant=\"secondary\" className=\"flex items-center gap-1\">\n <Sparkles className=\"h-3 w-3\" />\n Featured\n </Badge>\n )}\n </div>\n <h1 className=\"text-3xl font-bold text-foreground\">{course.title}</h1>\n <p className=\"text-muted-foreground\">\n Master the concepts and techniques needed to build professional-grade applications. This\n comprehensive course covers everything from fundamentals to advanced topics.\n </p>\n <div className=\"flex flex-wrap items-center gap-4 text-sm text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <User className=\"h-4 w-4\" />\n {course.instructor}\n </span>\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-4 w-4 text-yellow-500\" />\n {course.rating} rating\n </span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-4 w-4\" />\n {course.enrollmentCount.toLocaleString()} students\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-4 w-4\" />\n {course.duration} hours\n </span>\n </div>\n <div className=\"flex flex-wrap gap-1.5\">\n {course.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\">\n {tag}\n </Badge>\n ))}\n </div>\n </div>\n\n <Card>\n <CardContent className=\"space-y-4 pt-6\">\n <div className=\"text-center\">\n <span className=\"text-3xl font-bold\">\n {course.price === 0 ? 'Free' : `$${course.price}`}\n </span>\n </div>\n <Button className=\"w-full\" size=\"lg\">\n Enroll Now\n </Button>\n {course.certificateAvailable && (\n <div className=\"flex items-center justify-center gap-2 text-sm text-muted-foreground\">\n <Award className=\"h-4 w-4 text-primary\" />\n Certificate of Completion\n </div>\n )}\n <div className=\"space-y-2 border-t border-border pt-4 text-sm text-muted-foreground\">\n <div className=\"flex justify-between\">\n <span>Duration</span>\n <span className=\"font-medium text-foreground\">{course.duration} hours</span>\n </div>\n <div className=\"flex justify-between\">\n <span>Level</span>\n <span className=\"font-medium text-foreground capitalize\">{course.level}</span>\n </div>\n <div className=\"flex justify-between\">\n <span>Students</span>\n <span className=\"font-medium text-foreground\">\n {course.enrollmentCount.toLocaleString()}\n </span>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">What You&apos;ll Learn</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {mockLearningOutcomes.map((outcome) => (\n <div key={outcome} className=\"flex items-start gap-2\">\n <CheckCircle className=\"mt-0.5 h-4 w-4 shrink-0 text-green-500\" />\n <span className=\"text-sm\">{outcome}</span>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <BookOpen className=\"h-4 w-4\" />\n Course Curriculum\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {mockCurriculum.map((section, index) => (\n <div\n key={section.title}\n className=\"flex items-center justify-between rounded-lg border border-border p-4\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-8 w-8 items-center justify-center rounded-full bg-muted text-sm font-medium\">\n {index + 1}\n </span>\n <div>\n <p className=\"text-sm font-medium\">{section.title}</p>\n <p className=\"text-xs text-muted-foreground\">{section.lessons} lessons</p>\n </div>\n </div>\n <span className=\"text-sm text-muted-foreground\">{section.duration}</span>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">About the Instructor</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-muted\">\n <User className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <div className=\"space-y-1\">\n <p className=\"font-medium\">{course.instructor}</p>\n <p className=\"text-sm text-muted-foreground\">\n Expert instructor with years of industry experience. Passionate about helping\n students master complex topics through practical, hands-on learning.\n </p>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Star className=\"h-3 w-3 text-yellow-500\" />\n <span>{course.rating} instructor rating</span>\n <span>&middot;</span>\n <span>{course.enrollmentCount.toLocaleString()} students</span>\n </div>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CoursesCoursesPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CoursesCoursesPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCoursesPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/CoursesCoursesPagePage.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,sBAAsB,4CAsLrC"}
@@ -0,0 +1,179 @@
1
+ import { useTechnoSpamStore as e } from "../store/technospamStore.js";
2
+ import { tWithFallback as t } from "../utils/i18n.js";
3
+ import { useMemo as n, useState as r } from "react";
4
+ import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
5
+ import { Award as a, Clock as o, Search as s, Sparkles as c, Star as l, Users as u } from "lucide-react";
6
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
7
+ import { Badge as p, Button as m, Card as h, CardContent as g, CardHeader as _, CardTitle as v, Input as y } from "@burdenoff/fe-libs/ui";
8
+ //#region src/technospam/pages/CoursesCoursesPagePage.tsx
9
+ function b() {
10
+ let { t: b } = i(), x = (e, n, r) => t(b, e, n, r), { courses: S } = e(), [C, w] = r(""), [T, E] = r("all"), D = n(() => S.filter((e) => {
11
+ let t = C === "" || e.title.toLowerCase().includes(C.toLowerCase()) || e.instructor.toLowerCase().includes(C.toLowerCase()) || e.category.toLowerCase().includes(C.toLowerCase()) || e.tags.some((e) => e.toLowerCase().includes(C.toLowerCase())), n = T === "all" || e.level === T;
12
+ return t && n;
13
+ }), [
14
+ S,
15
+ C,
16
+ T
17
+ ]), O = S.filter((e) => e.isFeatured).length, k = S.filter((e) => e.price === 0).length, A = (e) => {
18
+ switch (e) {
19
+ case "beginner": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
20
+ case "intermediate": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
21
+ case "advanced": return "bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400";
22
+ case "expert": return "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400";
23
+ default: return "";
24
+ }
25
+ }, j = [
26
+ {
27
+ label: x("technospam.courses.filters.allLevels", "All Levels"),
28
+ value: "all"
29
+ },
30
+ {
31
+ label: x("technospam.courses.filters.beginner", "Beginner"),
32
+ value: "beginner"
33
+ },
34
+ {
35
+ label: x("technospam.courses.filters.intermediate", "Intermediate"),
36
+ value: "intermediate"
37
+ },
38
+ {
39
+ label: x("technospam.courses.filters.advanced", "Advanced"),
40
+ value: "advanced"
41
+ },
42
+ {
43
+ label: x("technospam.courses.filters.expert", "Expert"),
44
+ value: "expert"
45
+ }
46
+ ];
47
+ return /* @__PURE__ */ f("div", {
48
+ className: "space-y-6 p-6",
49
+ children: [
50
+ /* @__PURE__ */ f("div", {
51
+ className: "flex items-center justify-between",
52
+ children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
53
+ className: "text-2xl font-semibold text-foreground",
54
+ children: x("technospam.courses.title", "Course Catalog")
55
+ }), /* @__PURE__ */ d("p", {
56
+ className: "text-sm text-muted-foreground",
57
+ children: x("technospam.courses.subtitle", "{{count}} courses available", { count: S.length })
58
+ })] }), /* @__PURE__ */ f("div", {
59
+ className: "flex gap-2",
60
+ children: [/* @__PURE__ */ d(p, {
61
+ variant: "secondary",
62
+ children: x("technospam.courses.badges.featured", "{{count}} Featured", { count: O })
63
+ }), /* @__PURE__ */ d(p, {
64
+ variant: "secondary",
65
+ children: x("technospam.courses.badges.free", "{{count}} Free", { count: k })
66
+ })]
67
+ })]
68
+ }),
69
+ /* @__PURE__ */ d(h, { children: /* @__PURE__ */ d(g, {
70
+ className: "pt-6",
71
+ children: /* @__PURE__ */ f("div", {
72
+ className: "flex flex-col gap-4 sm:flex-row sm:items-center",
73
+ children: [/* @__PURE__ */ f("div", {
74
+ className: "relative flex-1",
75
+ children: [/* @__PURE__ */ d(s, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }), /* @__PURE__ */ d(y, {
76
+ placeholder: x("technospam.courses.search.placeholder", "Search courses, instructors, topics..."),
77
+ value: C,
78
+ onChange: (e) => w(e.target.value),
79
+ className: "pl-9"
80
+ })]
81
+ }), /* @__PURE__ */ d("div", {
82
+ className: "flex flex-wrap gap-2",
83
+ children: j.map((e) => /* @__PURE__ */ d(m, {
84
+ variant: T === e.value ? "default" : "outline",
85
+ size: "sm",
86
+ onClick: () => E(e.value),
87
+ children: e.label
88
+ }, e.value))
89
+ })]
90
+ })
91
+ }) }),
92
+ D.length === 0 ? /* @__PURE__ */ d("div", {
93
+ className: "py-12 text-center text-sm text-muted-foreground",
94
+ children: x("technospam.courses.empty", "No courses match your filters")
95
+ }) : /* @__PURE__ */ d("div", {
96
+ className: "grid gap-4 md:grid-cols-2 lg:grid-cols-3",
97
+ children: D.map((e) => /* @__PURE__ */ f(h, {
98
+ className: "flex flex-col",
99
+ children: [/* @__PURE__ */ d(_, {
100
+ className: "pb-3",
101
+ children: /* @__PURE__ */ f("div", {
102
+ className: "flex items-start justify-between",
103
+ children: [/* @__PURE__ */ f("div", {
104
+ className: "space-y-1",
105
+ children: [/* @__PURE__ */ d(v, {
106
+ className: "text-base leading-tight",
107
+ children: e.title
108
+ }), /* @__PURE__ */ d("p", {
109
+ className: "text-xs text-muted-foreground",
110
+ children: e.instructor
111
+ })]
112
+ }), e.isFeatured && /* @__PURE__ */ d(c, { className: "h-4 w-4 shrink-0 text-yellow-500" })]
113
+ })
114
+ }), /* @__PURE__ */ f(g, {
115
+ className: "flex flex-1 flex-col justify-between space-y-3",
116
+ children: [/* @__PURE__ */ f("div", {
117
+ className: "space-y-3",
118
+ children: [
119
+ /* @__PURE__ */ f("div", {
120
+ className: "flex flex-wrap gap-1.5",
121
+ children: [/* @__PURE__ */ d("span", {
122
+ className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${A(e.level)}`,
123
+ children: e.level
124
+ }), /* @__PURE__ */ d(p, {
125
+ variant: "secondary",
126
+ className: "text-xs",
127
+ children: e.category
128
+ })]
129
+ }),
130
+ /* @__PURE__ */ f("div", {
131
+ className: "flex items-center gap-3 text-xs text-muted-foreground",
132
+ children: [
133
+ /* @__PURE__ */ f("span", {
134
+ className: "flex items-center gap-1",
135
+ children: [/* @__PURE__ */ d(l, { className: "h-3 w-3 text-yellow-500" }), e.rating]
136
+ }),
137
+ /* @__PURE__ */ f("span", {
138
+ className: "flex items-center gap-1",
139
+ children: [/* @__PURE__ */ d(u, { className: "h-3 w-3" }), e.enrollmentCount.toLocaleString()]
140
+ }),
141
+ /* @__PURE__ */ f("span", {
142
+ className: "flex items-center gap-1",
143
+ children: [/* @__PURE__ */ d(o, { className: "h-3 w-3" }), x("technospam.courses.course.duration", "{{hours}}h", { hours: e.duration })]
144
+ })
145
+ ]
146
+ }),
147
+ /* @__PURE__ */ d("div", {
148
+ className: "flex flex-wrap gap-1",
149
+ children: e.tags.map((e) => /* @__PURE__ */ d(p, {
150
+ variant: "outline",
151
+ className: "text-xs",
152
+ children: e
153
+ }, e))
154
+ }),
155
+ e.certificateAvailable && /* @__PURE__ */ f("div", {
156
+ className: "flex items-center gap-1 text-xs text-muted-foreground",
157
+ children: [/* @__PURE__ */ d(a, { className: "h-3 w-3" }), x("technospam.courses.course.certificate", "Certificate available")]
158
+ })
159
+ ]
160
+ }), /* @__PURE__ */ f("div", {
161
+ className: "flex items-center justify-between pt-2",
162
+ children: [/* @__PURE__ */ d("span", {
163
+ className: "text-lg font-bold",
164
+ children: e.price === 0 ? x("technospam.courses.course.free", "Free") : x("technospam.courses.course.price", "${{price}}", { price: e.price })
165
+ }), /* @__PURE__ */ d(m, {
166
+ size: "sm",
167
+ children: x("technospam.courses.actions.enroll", "Enroll Now")
168
+ })]
169
+ })]
170
+ })]
171
+ }, e.id))
172
+ })
173
+ ]
174
+ });
175
+ }
176
+ //#endregion
177
+ export { b as CoursesCoursesPagePage };
178
+
179
+ //# sourceMappingURL=CoursesCoursesPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesCoursesPagePage.js","names":[],"sources":["../../../src/technospam/pages/CoursesCoursesPagePage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { Search, Star, Users, Clock, Award, Sparkles } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\nimport { tWithFallback } from '../utils/i18n';\n\ntype LevelFilter = 'all' | 'beginner' | 'intermediate' | 'advanced' | 'expert';\n\nexport function CoursesCoursesPagePage() {\n const { t } = useI18n();\n const tr = (key: string, fallback: string, params?: Record<string, string | number>): string =>\n tWithFallback(t, key, fallback, params);\n const { courses } = useTechnoSpamStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [levelFilter, setLevelFilter] = useState<LevelFilter>('all');\n\n const filteredCourses = useMemo(() => {\n return courses.filter((course) => {\n const matchesSearch =\n searchTerm === '' ||\n course.title.toLowerCase().includes(searchTerm.toLowerCase()) ||\n course.instructor.toLowerCase().includes(searchTerm.toLowerCase()) ||\n course.category.toLowerCase().includes(searchTerm.toLowerCase()) ||\n course.tags.some((tag) => tag.toLowerCase().includes(searchTerm.toLowerCase()));\n const matchesLevel = levelFilter === 'all' || course.level === levelFilter;\n return matchesSearch && matchesLevel;\n });\n }, [courses, searchTerm, levelFilter]);\n\n const featuredCount = courses.filter((course) => course.isFeatured).length;\n const freeCount = courses.filter((course) => course.price === 0).length;\n\n const levelColor = (level: string) => {\n switch (level) {\n case 'beginner':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400';\n case 'intermediate':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400';\n case 'advanced':\n return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-400';\n case 'expert':\n return 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400';\n default:\n return '';\n }\n };\n\n const levels: { label: string; value: LevelFilter }[] = [\n { label: tr('technospam.courses.filters.allLevels', 'All Levels'), value: 'all' },\n { label: tr('technospam.courses.filters.beginner', 'Beginner'), value: 'beginner' },\n {\n label: tr('technospam.courses.filters.intermediate', 'Intermediate'),\n value: 'intermediate',\n },\n { label: tr('technospam.courses.filters.advanced', 'Advanced'), value: 'advanced' },\n { label: tr('technospam.courses.filters.expert', 'Expert'), value: 'expert' },\n ];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">\n {tr('technospam.courses.title', 'Course Catalog')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {tr('technospam.courses.subtitle', '{{count}} courses available', {\n count: courses.length,\n })}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge variant=\"secondary\">\n {tr('technospam.courses.badges.featured', '{{count}} Featured', {\n count: featuredCount,\n })}\n </Badge>\n <Badge variant=\"secondary\">\n {tr('technospam.courses.badges.free', '{{count}} Free', { count: freeCount })}\n </Badge>\n </div>\n </div>\n\n <Card>\n <CardContent className=\"pt-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n placeholder={tr(\n 'technospam.courses.search.placeholder',\n 'Search courses, instructors, topics...'\n )}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {levels.map((level) => (\n <Button\n key={level.value}\n variant={levelFilter === level.value ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setLevelFilter(level.value)}\n >\n {level.label}\n </Button>\n ))}\n </div>\n </div>\n </CardContent>\n </Card>\n\n {filteredCourses.length === 0 ? (\n <div className=\"py-12 text-center text-sm text-muted-foreground\">\n {tr('technospam.courses.empty', 'No courses match your filters')}\n </div>\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {filteredCourses.map((course) => (\n <Card key={course.id} className=\"flex flex-col\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-start justify-between\">\n <div className=\"space-y-1\">\n <CardTitle className=\"text-base leading-tight\">{course.title}</CardTitle>\n <p className=\"text-xs text-muted-foreground\">{course.instructor}</p>\n </div>\n {course.isFeatured && <Sparkles className=\"h-4 w-4 shrink-0 text-yellow-500\" />}\n </div>\n </CardHeader>\n <CardContent className=\"flex flex-1 flex-col justify-between space-y-3\">\n <div className=\"space-y-3\">\n <div className=\"flex flex-wrap gap-1.5\">\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${levelColor(course.level)}`}\n >\n {course.level}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {course.category}\n </Badge>\n </div>\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 text-yellow-500\" />\n {course.rating}\n </span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n {course.enrollmentCount.toLocaleString()}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {tr('technospam.courses.course.duration', '{{hours}}h', {\n hours: course.duration,\n })}\n </span>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {course.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n {course.certificateAvailable && (\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Award className=\"h-3 w-3\" />\n {tr('technospam.courses.course.certificate', 'Certificate available')}\n </div>\n )}\n </div>\n <div className=\"flex items-center justify-between pt-2\">\n <span className=\"text-lg font-bold\">\n {course.price === 0\n ? tr('technospam.courses.course.free', 'Free')\n : tr('technospam.courses.course.price', '${{price}}', {\n price: course.price,\n })}\n </span>\n <Button size=\"sm\">{tr('technospam.courses.actions.enroll', 'Enroll Now')}</Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CoursesInstructorProfilePagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=CoursesInstructorProfilePagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoursesInstructorProfilePagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/CoursesInstructorProfilePagePage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,gCAAgC,4CA6R/C"}