@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,127 @@
1
+ import { useTechnoSpamStore as e } from "../store/technospamStore.js";
2
+ import { ArrowLeft as t, Save as n } from "lucide-react";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ import { Badge as a, Button as o, Card as s, CardContent as c, CardHeader as l, CardTitle as u, Input as d } from "@burdenoff/fe-libs/ui";
5
+ //#region src/technospam/pages/StudyPlannerStudyPlanEditPagePage.tsx
6
+ function f() {
7
+ let { studyPlans: f } = e(), p = f[0];
8
+ return p ? /* @__PURE__ */ i("div", {
9
+ className: "space-y-6 p-6 max-w-3xl",
10
+ children: [
11
+ /* @__PURE__ */ i("div", {
12
+ className: "flex items-center justify-between",
13
+ children: [/* @__PURE__ */ i(o, {
14
+ variant: "ghost",
15
+ size: "sm",
16
+ className: "text-muted-foreground",
17
+ children: [/* @__PURE__ */ r(t, { className: "mr-2 h-4 w-4" }), "Back to Plan"]
18
+ }), /* @__PURE__ */ i(o, {
19
+ size: "sm",
20
+ children: [/* @__PURE__ */ r(n, { className: "mr-2 h-4 w-4" }), "Save Changes"]
21
+ })]
22
+ }),
23
+ /* @__PURE__ */ r("h1", {
24
+ className: "text-2xl font-semibold text-foreground",
25
+ children: "Edit Study Plan"
26
+ }),
27
+ /* @__PURE__ */ i(s, { children: [/* @__PURE__ */ r(l, { children: /* @__PURE__ */ r(u, {
28
+ className: "text-base",
29
+ children: "Plan Details"
30
+ }) }), /* @__PURE__ */ i(c, {
31
+ className: "space-y-4",
32
+ children: [
33
+ /* @__PURE__ */ i("div", {
34
+ className: "space-y-2",
35
+ children: [/* @__PURE__ */ r("label", {
36
+ className: "text-sm font-medium",
37
+ children: "Title"
38
+ }), /* @__PURE__ */ r(d, { defaultValue: p.title })]
39
+ }),
40
+ /* @__PURE__ */ i("div", {
41
+ className: "space-y-2",
42
+ children: [/* @__PURE__ */ r("label", {
43
+ className: "text-sm font-medium",
44
+ children: "Description"
45
+ }), /* @__PURE__ */ r(d, { defaultValue: p.description })]
46
+ }),
47
+ /* @__PURE__ */ i("div", {
48
+ className: "grid gap-4 sm:grid-cols-2",
49
+ children: [/* @__PURE__ */ i("div", {
50
+ className: "space-y-2",
51
+ children: [/* @__PURE__ */ r("label", {
52
+ className: "text-sm font-medium",
53
+ children: "Start Date"
54
+ }), /* @__PURE__ */ r(d, {
55
+ type: "date",
56
+ defaultValue: p.startDate
57
+ })]
58
+ }), /* @__PURE__ */ i("div", {
59
+ className: "space-y-2",
60
+ children: [/* @__PURE__ */ r("label", {
61
+ className: "text-sm font-medium",
62
+ children: "End Date"
63
+ }), /* @__PURE__ */ r(d, {
64
+ type: "date",
65
+ defaultValue: p.endDate
66
+ })]
67
+ })]
68
+ }),
69
+ /* @__PURE__ */ i("div", {
70
+ className: "space-y-2",
71
+ children: [/* @__PURE__ */ r("label", {
72
+ className: "text-sm font-medium",
73
+ children: "Daily Goal (minutes)"
74
+ }), /* @__PURE__ */ r(d, {
75
+ type: "number",
76
+ defaultValue: p.dailyGoalMinutes
77
+ })]
78
+ })
79
+ ]
80
+ })] }),
81
+ /* @__PURE__ */ i(s, { children: [/* @__PURE__ */ r(l, { children: /* @__PURE__ */ r(u, {
82
+ className: "text-base",
83
+ children: "Topics"
84
+ }) }), /* @__PURE__ */ i(c, {
85
+ className: "space-y-3",
86
+ children: [/* @__PURE__ */ r("div", {
87
+ className: "flex flex-wrap gap-2",
88
+ children: p.topics.map((e) => /* @__PURE__ */ i(a, {
89
+ variant: "secondary",
90
+ className: "text-sm",
91
+ children: [e, " ×"]
92
+ }, e))
93
+ }), /* @__PURE__ */ i("div", {
94
+ className: "flex gap-2",
95
+ children: [/* @__PURE__ */ r(d, { placeholder: "Add a new topic..." }), /* @__PURE__ */ r(o, {
96
+ variant: "outline",
97
+ size: "sm",
98
+ children: "Add"
99
+ })]
100
+ })]
101
+ })] }),
102
+ /* @__PURE__ */ i(s, { children: [/* @__PURE__ */ r(l, { children: /* @__PURE__ */ r(u, {
103
+ className: "text-base",
104
+ children: "Status"
105
+ }) }), /* @__PURE__ */ r(c, { children: /* @__PURE__ */ r("div", {
106
+ className: "flex gap-2",
107
+ children: [
108
+ "active",
109
+ "paused",
110
+ "completed"
111
+ ].map((e) => /* @__PURE__ */ r(o, {
112
+ variant: p.status === e ? "default" : "outline",
113
+ size: "sm",
114
+ className: "capitalize",
115
+ children: e
116
+ }, e))
117
+ }) })] })
118
+ ]
119
+ }) : /* @__PURE__ */ r("div", {
120
+ className: "p-6 text-center text-muted-foreground",
121
+ children: "Study plan not found"
122
+ });
123
+ }
124
+ //#endregion
125
+ export { f as StudyPlannerStudyPlanEditPagePage };
126
+
127
+ //# sourceMappingURL=StudyPlannerStudyPlanEditPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudyPlannerStudyPlanEditPagePage.js","names":[],"sources":["../../../src/technospam/pages/StudyPlannerStudyPlanEditPagePage.tsx"],"sourcesContent":["import {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Save } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\nexport function StudyPlannerStudyPlanEditPagePage() {\n const { studyPlans } = useTechnoSpamStore();\n const plan = studyPlans[0];\n\n if (!plan) {\n return <div className=\"p-6 text-center text-muted-foreground\">Study plan not found</div>;\n }\n\n return (\n <div className=\"space-y-6 p-6 max-w-3xl\">\n <div className=\"flex items-center justify-between\">\n <Button variant=\"ghost\" size=\"sm\" className=\"text-muted-foreground\">\n <ArrowLeft className=\"mr-2 h-4 w-4\" />\n Back to Plan\n </Button>\n <Button size=\"sm\">\n <Save className=\"mr-2 h-4 w-4\" />\n Save Changes\n </Button>\n </div>\n\n <h1 className=\"text-2xl font-semibold text-foreground\">Edit Study Plan</h1>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Plan Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Title</label>\n <Input defaultValue={plan.title} />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Description</label>\n <Input defaultValue={plan.description} />\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Start Date</label>\n <Input type=\"date\" defaultValue={plan.startDate} />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">End Date</label>\n <Input type=\"date\" defaultValue={plan.endDate} />\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium\">Daily Goal (minutes)</label>\n <Input type=\"number\" defaultValue={plan.dailyGoalMinutes} />\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Topics</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <div className=\"flex flex-wrap gap-2\">\n {plan.topics.map((topic) => (\n <Badge key={topic} variant=\"secondary\" className=\"text-sm\">\n {topic} &times;\n </Badge>\n ))}\n </div>\n <div className=\"flex gap-2\">\n <Input placeholder=\"Add a new topic...\" />\n <Button variant=\"outline\" size=\"sm\">\n Add\n </Button>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Status</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex gap-2\">\n {(['active', 'paused', 'completed'] as const).map((status) => (\n <Button\n key={status}\n variant={plan.status === status ? 'default' : 'outline'}\n size=\"sm\"\n className=\"capitalize\"\n >\n {status}\n </Button>\n ))}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAgB,IAAoC;CAClD,IAAM,EAAE,kBAAe,GAAoB,EACrC,IAAO,EAAW;AAMxB,QAJK,IAKH,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAQ,SAAQ;KAAQ,MAAK;KAAK,WAAU;eAA5C,CACE,kBAAC,GAAD,EAAW,WAAU,gBAAiB,CAAA,EAAA,eAE/B;QACT,kBAAC,GAAD;KAAQ,MAAK;eAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,eAE1B;OACL;;GAEN,kBAAC,MAAD;IAAI,WAAU;cAAyC;IAAoB,CAAA;GAE3E,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAW,WAAU;cAAY;IAAwB,CAAA,EAC9C,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cAAvB;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAa,CAAA,EACpD,kBAAC,GAAD,EAAO,cAAc,EAAK,OAAS,CAAA,CAC/B;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAAmB,CAAA,EAC1D,kBAAC,GAAD,EAAO,cAAc,EAAK,aAAe,CAAA,CACrC;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,SAAD;QAAO,WAAU;kBAAsB;QAAkB,CAAA,EACzD,kBAAC,GAAD;QAAO,MAAK;QAAO,cAAc,EAAK;QAAa,CAAA,CAC/C;UACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,SAAD;QAAO,WAAU;kBAAsB;QAAgB,CAAA,EACvD,kBAAC,GAAD;QAAO,MAAK;QAAO,cAAc,EAAK;QAAW,CAAA,CAC7C;SACF;;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAsB;OAA4B,CAAA,EACnE,kBAAC,GAAD;OAAO,MAAK;OAAS,cAAc,EAAK;OAAoB,CAAA,CACxD;;KACM;MACT,EAAA,CAAA;GAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAW,WAAU;cAAY;IAAkB,CAAA,EACxC,CAAA,EACb,kBAAC,GAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAK,OAAO,KAAK,MAChB,kBAAC,GAAD;MAAmB,SAAQ;MAAY,WAAU;gBAAjD,CACG,GAAM,KACD;QAFI,EAEJ,CACR;KACE,CAAA,EACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAO,aAAY,sBAAuB,CAAA,EAC1C,kBAAC,GAAD;MAAQ,SAAQ;MAAU,MAAK;gBAAK;MAE3B,CAAA,CACL;OACM;MACT,EAAA,CAAA;GAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;IAAW,WAAU;cAAY;IAAkB,CAAA,EACxC,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;IAAK,WAAU;cACX;KAAC;KAAU;KAAU;KAAY,CAAW,KAAK,MACjD,kBAAC,GAAD;KAEE,SAAS,EAAK,WAAW,IAAS,YAAY;KAC9C,MAAK;KACL,WAAU;eAET;KACM,EANF,EAME,CACT;IACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA;GACH;MAxFC,kBAAC,OAAD;EAAK,WAAU;YAAwC;EAA0B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function StudyPlannerStudyPlannerPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=StudyPlannerStudyPlannerPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudyPlannerStudyPlannerPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/StudyPlannerStudyPlannerPagePage.tsx"],"names":[],"mappings":"AAMA,wBAAgB,gCAAgC,4CA0N/C"}
@@ -0,0 +1,238 @@
1
+ import { useTechnoSpamStore as e } from "../store/technospamStore.js";
2
+ import { tWithFallback as t } from "../utils/i18n.js";
3
+ import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
+ import { ArrowRight as r, BookOpen as i, Calendar as a, Clock as o, Flame as s, Target as c } from "lucide-react";
5
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
+ import { Badge as d, Button as f, Card as p, CardContent as m, CardHeader as h, CardTitle as g } from "@burdenoff/fe-libs/ui";
7
+ //#region src/technospam/pages/StudyPlannerStudyPlannerPagePage.tsx
8
+ function _() {
9
+ let { t: _ } = n(), v = (e, n, r) => t(_, e, n, r), { studyPlans: y, learningPaths: b, userStats: x } = e(), S = y.filter((e) => e.status === "active"), C = b.filter((e) => e.progress > 0 && e.progress < 100);
10
+ return /* @__PURE__ */ u("div", {
11
+ className: "space-y-6 p-6",
12
+ children: [
13
+ /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h1", {
14
+ className: "text-2xl font-semibold text-foreground",
15
+ children: v("technospam.studyPlanner.title", "Study Planner")
16
+ }), /* @__PURE__ */ l("p", {
17
+ className: "text-sm text-muted-foreground",
18
+ children: v("technospam.studyPlanner.subtitle", "Plan, track, and optimize your learning journey")
19
+ })] }),
20
+ /* @__PURE__ */ u("div", {
21
+ className: "grid gap-4 md:grid-cols-2 lg:grid-cols-4",
22
+ children: [
23
+ /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(h, {
24
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
25
+ children: [/* @__PURE__ */ l(g, {
26
+ className: "text-sm font-medium",
27
+ children: v("technospam.studyPlanner.metrics.activePlans.title", "Active Plans")
28
+ }), /* @__PURE__ */ l(a, { className: "h-4 w-4 text-muted-foreground" })]
29
+ }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("div", {
30
+ className: "text-2xl font-bold",
31
+ children: S.length
32
+ }) })] }),
33
+ /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(h, {
34
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
35
+ children: [/* @__PURE__ */ l(g, {
36
+ className: "text-sm font-medium",
37
+ children: v("technospam.studyPlanner.metrics.studyStreak.title", "Study Streak")
38
+ }), /* @__PURE__ */ l(s, { className: "h-4 w-4 text-orange-500" })]
39
+ }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("div", {
40
+ className: "text-2xl font-bold",
41
+ children: v("technospam.studyPlanner.metrics.studyStreak.value", "{{count}} days", { count: x.studyStreak })
42
+ }) })] }),
43
+ /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(h, {
44
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
45
+ children: [/* @__PURE__ */ l(g, {
46
+ className: "text-sm font-medium",
47
+ children: v("technospam.studyPlanner.metrics.learningPaths.title", "Learning Paths")
48
+ }), /* @__PURE__ */ l(c, { className: "h-4 w-4 text-muted-foreground" })]
49
+ }), /* @__PURE__ */ u(m, { children: [/* @__PURE__ */ l("div", {
50
+ className: "text-2xl font-bold",
51
+ children: C.length
52
+ }), /* @__PURE__ */ l("p", {
53
+ className: "text-xs text-muted-foreground",
54
+ children: v("technospam.studyPlanner.metrics.learningPaths.subtitle", "In progress")
55
+ })] })] }),
56
+ /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(h, {
57
+ className: "flex flex-row items-center justify-between space-y-0 pb-2",
58
+ children: [/* @__PURE__ */ l(g, {
59
+ className: "text-sm font-medium",
60
+ children: v("technospam.studyPlanner.metrics.learningHours.title", "Learning Hours")
61
+ }), /* @__PURE__ */ l(o, { className: "h-4 w-4 text-muted-foreground" })]
62
+ }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ l("div", {
63
+ className: "text-2xl font-bold",
64
+ children: x.totalLearningHours
65
+ }) })] })
66
+ ]
67
+ }),
68
+ /* @__PURE__ */ u("div", {
69
+ className: "grid gap-6 lg:grid-cols-2",
70
+ children: [/* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(h, {
71
+ className: "flex flex-row items-center justify-between",
72
+ children: [/* @__PURE__ */ l(g, {
73
+ className: "text-base",
74
+ children: v("technospam.studyPlanner.activePlans.title", "Active Study Plans")
75
+ }), /* @__PURE__ */ u(f, {
76
+ variant: "ghost",
77
+ size: "sm",
78
+ className: "text-xs",
79
+ children: [
80
+ v("technospam.shared.actions.viewAll", "View All"),
81
+ " ",
82
+ /* @__PURE__ */ l(r, { className: "ml-1 h-3 w-3" })
83
+ ]
84
+ })]
85
+ }), /* @__PURE__ */ l(m, {
86
+ className: "space-y-4",
87
+ children: S.map((e) => {
88
+ let t = Math.round(e.completedDays / e.totalDays * 100);
89
+ return /* @__PURE__ */ u("div", {
90
+ className: "space-y-2 rounded-lg border border-border p-4",
91
+ children: [
92
+ /* @__PURE__ */ u("div", {
93
+ className: "flex items-center justify-between",
94
+ children: [/* @__PURE__ */ l("p", {
95
+ className: "font-medium",
96
+ children: e.title
97
+ }), /* @__PURE__ */ l(d, {
98
+ variant: "secondary",
99
+ className: "text-xs",
100
+ children: e.status
101
+ })]
102
+ }),
103
+ /* @__PURE__ */ l("p", {
104
+ className: "text-sm text-muted-foreground",
105
+ children: e.description
106
+ }),
107
+ /* @__PURE__ */ u("div", {
108
+ className: "flex items-center gap-2 text-xs text-muted-foreground",
109
+ children: [
110
+ /* @__PURE__ */ l(o, { className: "h-3 w-3" }),
111
+ /* @__PURE__ */ l("span", { children: v("technospam.studyPlanner.activePlans.dailyGoal", "{{minutes}}min/day goal", { minutes: e.dailyGoalMinutes }) }),
112
+ /* @__PURE__ */ l("span", { children: "·" }),
113
+ /* @__PURE__ */ l("span", { children: v("technospam.studyPlanner.activePlans.dayProgress", "{{completed}}/{{total}} days", {
114
+ completed: e.completedDays,
115
+ total: e.totalDays
116
+ }) })
117
+ ]
118
+ }),
119
+ /* @__PURE__ */ l("div", {
120
+ className: "h-2 w-full overflow-hidden rounded-full bg-muted",
121
+ children: /* @__PURE__ */ l("div", {
122
+ className: "h-2 rounded-full bg-primary",
123
+ style: { width: `${t}%` }
124
+ })
125
+ }),
126
+ /* @__PURE__ */ l("div", {
127
+ className: "flex flex-wrap gap-1",
128
+ children: e.topics.map((e) => /* @__PURE__ */ l(d, {
129
+ variant: "outline",
130
+ className: "text-xs",
131
+ children: e
132
+ }, e))
133
+ })
134
+ ]
135
+ }, e.id);
136
+ })
137
+ })] }), /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ u(h, {
138
+ className: "flex flex-row items-center justify-between",
139
+ children: [/* @__PURE__ */ l(g, {
140
+ className: "text-base",
141
+ children: v("technospam.studyPlanner.learningPaths.title", "Learning Paths In Progress")
142
+ }), /* @__PURE__ */ u(f, {
143
+ variant: "ghost",
144
+ size: "sm",
145
+ className: "text-xs",
146
+ children: [
147
+ v("technospam.shared.actions.viewAll", "View All"),
148
+ " ",
149
+ /* @__PURE__ */ l(r, { className: "ml-1 h-3 w-3" })
150
+ ]
151
+ })]
152
+ }), /* @__PURE__ */ l(m, {
153
+ className: "space-y-4",
154
+ children: C.map((e) => /* @__PURE__ */ u("div", {
155
+ className: "space-y-2 rounded-lg border border-border p-4",
156
+ children: [
157
+ /* @__PURE__ */ u("div", {
158
+ className: "flex items-center justify-between",
159
+ children: [/* @__PURE__ */ l("p", {
160
+ className: "font-medium",
161
+ children: e.title
162
+ }), /* @__PURE__ */ l(d, {
163
+ variant: "secondary",
164
+ className: "text-xs",
165
+ children: e.level
166
+ })]
167
+ }),
168
+ /* @__PURE__ */ l("p", {
169
+ className: "text-sm text-muted-foreground",
170
+ children: e.description
171
+ }),
172
+ /* @__PURE__ */ l("div", {
173
+ className: "text-xs text-muted-foreground",
174
+ children: v("technospam.studyPlanner.learningPaths.meta", "{{courses}} courses · {{hours}}h estimated", {
175
+ courses: e.coursesCount,
176
+ hours: e.estimatedHours
177
+ })
178
+ }),
179
+ /* @__PURE__ */ u("div", {
180
+ className: "flex items-center justify-between text-xs",
181
+ children: [/* @__PURE__ */ l("span", {
182
+ className: "text-muted-foreground",
183
+ children: v("technospam.studyPlanner.learningPaths.progressLabel", "Progress")
184
+ }), /* @__PURE__ */ u("span", {
185
+ className: "font-medium",
186
+ children: [e.progress, "%"]
187
+ })]
188
+ }),
189
+ /* @__PURE__ */ l("div", {
190
+ className: "h-2 w-full overflow-hidden rounded-full bg-muted",
191
+ children: /* @__PURE__ */ l("div", {
192
+ className: "h-2 rounded-full bg-primary",
193
+ style: { width: `${e.progress}%` }
194
+ })
195
+ })
196
+ ]
197
+ }, e.id))
198
+ })] })]
199
+ }),
200
+ /* @__PURE__ */ u(p, { children: [/* @__PURE__ */ l(h, { children: /* @__PURE__ */ l(g, {
201
+ className: "text-base",
202
+ children: v("technospam.studyPlanner.quickActions.title", "Quick Actions")
203
+ }) }), /* @__PURE__ */ l(m, { children: /* @__PURE__ */ u("div", {
204
+ className: "grid gap-3 sm:grid-cols-3",
205
+ children: [
206
+ /* @__PURE__ */ u(f, {
207
+ variant: "outline",
208
+ className: "flex h-auto flex-col items-center gap-2 p-4",
209
+ children: [/* @__PURE__ */ l(a, { className: "h-5 w-5" }), /* @__PURE__ */ l("span", {
210
+ className: "text-xs",
211
+ children: v("technospam.studyPlanner.quickActions.createPlan", "Create Study Plan")
212
+ })]
213
+ }),
214
+ /* @__PURE__ */ u(f, {
215
+ variant: "outline",
216
+ className: "flex h-auto flex-col items-center gap-2 p-4",
217
+ children: [/* @__PURE__ */ l(i, { className: "h-5 w-5" }), /* @__PURE__ */ l("span", {
218
+ className: "text-xs",
219
+ children: v("technospam.studyPlanner.quickActions.browsePaths", "Browse Learning Paths")
220
+ })]
221
+ }),
222
+ /* @__PURE__ */ u(f, {
223
+ variant: "outline",
224
+ className: "flex h-auto flex-col items-center gap-2 p-4",
225
+ children: [/* @__PURE__ */ l(c, { className: "h-5 w-5" }), /* @__PURE__ */ l("span", {
226
+ className: "text-xs",
227
+ children: v("technospam.studyPlanner.quickActions.setGoals", "Set Goals")
228
+ })]
229
+ })
230
+ ]
231
+ }) })] })
232
+ ]
233
+ });
234
+ }
235
+ //#endregion
236
+ export { _ as StudyPlannerStudyPlannerPagePage };
237
+
238
+ //# sourceMappingURL=StudyPlannerStudyPlannerPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudyPlannerStudyPlannerPagePage.js","names":[],"sources":["../../../src/technospam/pages/StudyPlannerStudyPlannerPagePage.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { Calendar, Target, BookOpen, Clock, ArrowRight, Flame } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\nimport { tWithFallback } from '../utils/i18n';\n\nexport function StudyPlannerStudyPlannerPagePage() {\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 { studyPlans, learningPaths, userStats } = useTechnoSpamStore();\n\n const activePlans = studyPlans.filter((plan) => plan.status === 'active');\n const inProgressPaths = learningPaths.filter((path) => path.progress > 0 && path.progress < 100);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold text-foreground\">\n {tr('technospam.studyPlanner.title', 'Study Planner')}\n </h1>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'technospam.studyPlanner.subtitle',\n 'Plan, track, and optimize your learning journey'\n )}\n </p>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {tr('technospam.studyPlanner.metrics.activePlans.title', 'Active Plans')}\n </CardTitle>\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{activePlans.length}</div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {tr('technospam.studyPlanner.metrics.studyStreak.title', 'Study Streak')}\n </CardTitle>\n <Flame className=\"h-4 w-4 text-orange-500\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">\n {tr('technospam.studyPlanner.metrics.studyStreak.value', '{{count}} days', {\n count: userStats.studyStreak,\n })}\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {tr('technospam.studyPlanner.metrics.learningPaths.title', 'Learning Paths')}\n </CardTitle>\n <Target className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{inProgressPaths.length}</div>\n <p className=\"text-xs text-muted-foreground\">\n {tr('technospam.studyPlanner.metrics.learningPaths.subtitle', 'In progress')}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">\n {tr('technospam.studyPlanner.metrics.learningHours.title', 'Learning Hours')}\n </CardTitle>\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>\n <div className=\"text-2xl font-bold\">{userStats.totalLearningHours}</div>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid gap-6 lg:grid-cols-2\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle className=\"text-base\">\n {tr('technospam.studyPlanner.activePlans.title', 'Active Study Plans')}\n </CardTitle>\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n {tr('technospam.shared.actions.viewAll', 'View All')}{' '}\n <ArrowRight className=\"ml-1 h-3 w-3\" />\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {activePlans.map((plan) => {\n const progressPercent = Math.round((plan.completedDays / plan.totalDays) * 100);\n return (\n <div key={plan.id} className=\"space-y-2 rounded-lg border border-border p-4\">\n <div className=\"flex items-center justify-between\">\n <p className=\"font-medium\">{plan.title}</p>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {plan.status}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">{plan.description}</p>\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <Clock className=\"h-3 w-3\" />\n <span>\n {tr(\n 'technospam.studyPlanner.activePlans.dailyGoal',\n '{{minutes}}min/day goal',\n {\n minutes: plan.dailyGoalMinutes,\n }\n )}\n </span>\n <span>&middot;</span>\n <span>\n {tr(\n 'technospam.studyPlanner.activePlans.dayProgress',\n '{{completed}}/{{total}} days',\n {\n completed: plan.completedDays,\n total: plan.totalDays,\n }\n )}\n </span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary\"\n style={{ width: `${progressPercent}%` }}\n />\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {plan.topics.map((topic) => (\n <Badge key={topic} variant=\"outline\" className=\"text-xs\">\n {topic}\n </Badge>\n ))}\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle className=\"text-base\">\n {tr('technospam.studyPlanner.learningPaths.title', 'Learning Paths In Progress')}\n </CardTitle>\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n {tr('technospam.shared.actions.viewAll', 'View All')}{' '}\n <ArrowRight className=\"ml-1 h-3 w-3\" />\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {inProgressPaths.map((path) => (\n <div key={path.id} className=\"space-y-2 rounded-lg border border-border p-4\">\n <div className=\"flex items-center justify-between\">\n <p className=\"font-medium\">{path.title}</p>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {path.level}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">{path.description}</p>\n <div className=\"text-xs text-muted-foreground\">\n {tr(\n 'technospam.studyPlanner.learningPaths.meta',\n '{{courses}} courses · {{hours}}h estimated',\n { courses: path.coursesCount, hours: path.estimatedHours }\n )}\n </div>\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">\n {tr('technospam.studyPlanner.learningPaths.progressLabel', 'Progress')}\n </span>\n <span className=\"font-medium\">{path.progress}%</span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary\"\n style={{ width: `${path.progress}%` }}\n />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">\n {tr('technospam.studyPlanner.quickActions.title', 'Quick Actions')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-3 sm:grid-cols-3\">\n <Button variant=\"outline\" className=\"flex h-auto flex-col items-center gap-2 p-4\">\n <Calendar className=\"h-5 w-5\" />\n <span className=\"text-xs\">\n {tr('technospam.studyPlanner.quickActions.createPlan', 'Create Study Plan')}\n </span>\n </Button>\n <Button variant=\"outline\" className=\"flex h-auto flex-col items-center gap-2 p-4\">\n <BookOpen className=\"h-5 w-5\" />\n <span className=\"text-xs\">\n {tr('technospam.studyPlanner.quickActions.browsePaths', 'Browse Learning Paths')}\n </span>\n </Button>\n <Button variant=\"outline\" className=\"flex h-auto flex-col items-center gap-2 p-4\">\n <Target className=\"h-5 w-5\" />\n <span className=\"text-xs\">\n {tr('technospam.studyPlanner.quickActions.setGoals', 'Set Goals')}\n </span>\n </Button>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function StudyPlannerStudyPlansPagePage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=StudyPlannerStudyPlansPagePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudyPlannerStudyPlansPagePage.d.ts","sourceRoot":"","sources":["../../../src/technospam/pages/StudyPlannerStudyPlansPagePage.tsx"],"names":[],"mappings":"AAIA,wBAAgB,8BAA8B,4CAqF7C"}
@@ -0,0 +1,113 @@
1
+ import { useTechnoSpamStore as e } from "../store/technospamStore.js";
2
+ import { Calendar as t, Clock as n, Plus as r } from "lucide-react";
3
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ import { Badge as o, Button as s, Card as c, CardContent as l } from "@burdenoff/fe-libs/ui";
5
+ //#region src/technospam/pages/StudyPlannerStudyPlansPagePage.tsx
6
+ function u() {
7
+ let { studyPlans: u } = e(), d = (e) => {
8
+ switch (e) {
9
+ case "active": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
10
+ case "paused": return "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400";
11
+ case "completed": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
12
+ default: return "";
13
+ }
14
+ };
15
+ return /* @__PURE__ */ a("div", {
16
+ className: "space-y-6 p-6",
17
+ children: [/* @__PURE__ */ a("div", {
18
+ className: "flex items-center justify-between",
19
+ children: [/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("h1", {
20
+ className: "text-2xl font-semibold text-foreground",
21
+ children: "Study Plans"
22
+ }), /* @__PURE__ */ i("p", {
23
+ className: "text-sm text-muted-foreground",
24
+ children: "Manage your study plans and schedules"
25
+ })] }), /* @__PURE__ */ a(s, {
26
+ size: "sm",
27
+ children: [/* @__PURE__ */ i(r, { className: "mr-2 h-4 w-4" }), "New Plan"]
28
+ })]
29
+ }), /* @__PURE__ */ i("div", {
30
+ className: "space-y-4",
31
+ children: u.map((e) => {
32
+ let r = Math.round(e.completedDays / e.totalDays * 100);
33
+ return /* @__PURE__ */ i(c, { children: /* @__PURE__ */ a(l, {
34
+ className: "p-4 space-y-3",
35
+ children: [
36
+ /* @__PURE__ */ a("div", {
37
+ className: "flex items-start justify-between",
38
+ children: [/* @__PURE__ */ a("div", {
39
+ className: "space-y-1",
40
+ children: [/* @__PURE__ */ i("h3", {
41
+ className: "font-medium",
42
+ children: e.title
43
+ }), /* @__PURE__ */ i("p", {
44
+ className: "text-sm text-muted-foreground",
45
+ children: e.description
46
+ })]
47
+ }), /* @__PURE__ */ i("span", {
48
+ className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${d(e.status)}`,
49
+ children: e.status
50
+ })]
51
+ }),
52
+ /* @__PURE__ */ a("div", {
53
+ className: "flex items-center gap-4 text-xs text-muted-foreground",
54
+ children: [/* @__PURE__ */ a("span", {
55
+ className: "flex items-center gap-1",
56
+ children: [
57
+ /* @__PURE__ */ i(t, { className: "h-3 w-3" }),
58
+ new Date(e.startDate).toLocaleDateString(),
59
+ " -",
60
+ " ",
61
+ new Date(e.endDate).toLocaleDateString()
62
+ ]
63
+ }), /* @__PURE__ */ a("span", {
64
+ className: "flex items-center gap-1",
65
+ children: [
66
+ /* @__PURE__ */ i(n, { className: "h-3 w-3" }),
67
+ e.dailyGoalMinutes,
68
+ "min/day"
69
+ ]
70
+ })]
71
+ }),
72
+ /* @__PURE__ */ a("div", {
73
+ className: "space-y-1",
74
+ children: [/* @__PURE__ */ a("div", {
75
+ className: "flex items-center justify-between text-xs",
76
+ children: [/* @__PURE__ */ a("span", {
77
+ className: "text-muted-foreground",
78
+ children: [
79
+ e.completedDays,
80
+ "/",
81
+ e.totalDays,
82
+ " days"
83
+ ]
84
+ }), /* @__PURE__ */ a("span", {
85
+ className: "font-medium",
86
+ children: [r, "%"]
87
+ })]
88
+ }), /* @__PURE__ */ i("div", {
89
+ className: "h-2 w-full overflow-hidden rounded-full bg-muted",
90
+ children: /* @__PURE__ */ i("div", {
91
+ className: `h-2 rounded-full ${e.status === "completed" ? "bg-green-500" : "bg-primary"}`,
92
+ style: { width: `${r}%` }
93
+ })
94
+ })]
95
+ }),
96
+ /* @__PURE__ */ i("div", {
97
+ className: "flex flex-wrap gap-1",
98
+ children: e.topics.map((e) => /* @__PURE__ */ i(o, {
99
+ variant: "outline",
100
+ className: "text-xs",
101
+ children: e
102
+ }, e))
103
+ })
104
+ ]
105
+ }) }, e.id);
106
+ })
107
+ })]
108
+ });
109
+ }
110
+ //#endregion
111
+ export { u as StudyPlannerStudyPlansPagePage };
112
+
113
+ //# sourceMappingURL=StudyPlannerStudyPlansPagePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StudyPlannerStudyPlansPagePage.js","names":[],"sources":["../../../src/technospam/pages/StudyPlannerStudyPlansPagePage.tsx"],"sourcesContent":["import { Card, CardContent, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { Calendar, Clock, Plus } from 'lucide-react';\nimport { useTechnoSpamStore } from '../store/technospamStore';\n\nexport function StudyPlannerStudyPlansPagePage() {\n const { studyPlans } = useTechnoSpamStore();\n\n const statusColor = (status: string) => {\n switch (status) {\n case 'active':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400';\n case 'paused':\n return 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400';\n case 'completed':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400';\n default:\n return '';\n }\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\">Study Plans</h1>\n <p className=\"text-sm text-muted-foreground\">Manage your study plans and schedules</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n New Plan\n </Button>\n </div>\n\n <div className=\"space-y-4\">\n {studyPlans.map((plan) => {\n const progressPercent = Math.round((plan.completedDays / plan.totalDays) * 100);\n return (\n <Card key={plan.id}>\n <CardContent className=\"p-4 space-y-3\">\n <div className=\"flex items-start justify-between\">\n <div className=\"space-y-1\">\n <h3 className=\"font-medium\">{plan.title}</h3>\n <p className=\"text-sm text-muted-foreground\">{plan.description}</p>\n </div>\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${statusColor(plan.status)}`}\n >\n {plan.status}\n </span>\n </div>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n {new Date(plan.startDate).toLocaleDateString()} -{' '}\n {new Date(plan.endDate).toLocaleDateString()}\n </span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {plan.dailyGoalMinutes}min/day\n </span>\n </div>\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">\n {plan.completedDays}/{plan.totalDays} days\n </span>\n <span className=\"font-medium\">{progressPercent}%</span>\n </div>\n <div className=\"h-2 w-full overflow-hidden rounded-full bg-muted\">\n <div\n className={`h-2 rounded-full ${plan.status === 'completed' ? 'bg-green-500' : 'bg-primary'}`}\n style={{ width: `${progressPercent}%` }}\n />\n </div>\n </div>\n <div className=\"flex flex-wrap gap-1\">\n {plan.topics.map((topic) => (\n <Badge key={topic} variant=\"outline\" className=\"text-xs\">\n {topic}\n </Badge>\n ))}\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAIA,SAAgB,IAAiC;CAC/C,IAAM,EAAE,kBAAe,GAAoB,EAErC,KAAe,MAAmB;AACtC,UAAQ,GAAR;GACE,KAAK,SACH,QAAO;GACT,KAAK,SACH,QAAO;GACT,KAAK,YACH,QAAO;GACT,QACE,QAAO;;;AAIb,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAyC;IAAgB,CAAA,EACvE,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAAyC,CAAA,CAClF,EAAA,CAAA,EACN,kBAAC,GAAD;IAAQ,MAAK;cAAb,CACE,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAAA,WAE1B;MACL;MAEN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAW,KAAK,MAAS;IACxB,IAAM,IAAkB,KAAK,MAAO,EAAK,gBAAgB,EAAK,YAAa,IAAI;AAC/E,WACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;KAAa,WAAU;eAAvB;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,MAAD;SAAI,WAAU;mBAAe,EAAK;SAAW,CAAA,EAC7C,kBAAC,KAAD;SAAG,WAAU;mBAAiC,EAAK;SAAgB,CAAA,CAC/D;WACN,kBAAC,QAAD;QACE,WAAW,yEAAyE,EAAY,EAAK,OAAO;kBAE3G,EAAK;QACD,CAAA,CACH;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAhB;SACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;SAC/B,IAAI,KAAK,EAAK,UAAU,CAAC,oBAAoB;SAAC;SAAG;SACjD,IAAI,KAAK,EAAK,QAAQ,CAAC,oBAAoB;SACvC;WACP,kBAAC,QAAD;QAAM,WAAU;kBAAhB;SACE,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;SAC5B,EAAK;SAAiB;SAClB;UACH;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACG,EAAK;UAAc;UAAE,EAAK;UAAU;UAChC;YACP,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CAA+B,GAAgB,IAAQ;WACnD;WACN,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,OAAD;SACE,WAAW,oBAAoB,EAAK,WAAW,cAAc,iBAAiB;SAC9E,OAAO,EAAE,OAAO,GAAG,EAAgB,IAAI;SACvC,CAAA;QACE,CAAA,CACF;;MACN,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAK,OAAO,KAAK,MAChB,kBAAC,GAAD;QAAmB,SAAQ;QAAU,WAAU;kBAC5C;QACK,EAFI,EAEJ,CACR;OACE,CAAA;MACM;QACT,EA9CI,EAAK,GA8CT;KAET;GACE,CAAA,CACF"}
@@ -0,0 +1,6 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { TechnoSpamRootProps } from '../types';
3
+
4
+ export declare const useTechnoSpam: () => TechnoSpamRootProps;
5
+ export declare const TechnoSpamProvider: FC<PropsWithChildren<TechnoSpamRootProps>>;
6
+ //# sourceMappingURL=TechnoSpamProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TechnoSpamProvider.d.ts","sourceRoot":"","sources":["../../../src/technospam/providers/TechnoSpamProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAMpD,eAAO,MAAM,aAAa,2BAIzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAsBzE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { createContext as e, useContext as t, useMemo as n } from "react";
2
+ import { MemoryRouter as r } from "react-router-dom";
3
+ import { QueryClient as i, QueryClientProvider as a } from "@tanstack/react-query";
4
+ import { jsx as o } from "react/jsx-runtime";
5
+ //#region src/technospam/providers/TechnoSpamProvider.tsx
6
+ var s = e(null), c = () => {
7
+ let e = t(s);
8
+ if (!e) throw Error("useTechnoSpam must be used within TechnoSpamProvider");
9
+ return e;
10
+ }, l = ({ children: e, ...t }) => {
11
+ let c = /* @__PURE__ */ o(a, {
12
+ client: n(() => new i({ defaultOptions: { queries: {
13
+ retry: 1,
14
+ refetchOnWindowFocus: !1,
15
+ staleTime: 300 * 1e3
16
+ } } }), []),
17
+ children: /* @__PURE__ */ o(s.Provider, {
18
+ value: t,
19
+ children: e
20
+ })
21
+ });
22
+ return t.basePath ? c : /* @__PURE__ */ o(r, { children: c });
23
+ };
24
+ //#endregion
25
+ export { l as TechnoSpamProvider, c as useTechnoSpam };
26
+
27
+ //# sourceMappingURL=TechnoSpamProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TechnoSpamProvider.js","names":[],"sources":["../../../src/technospam/providers/TechnoSpamProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { TechnoSpamRootProps } from '../types';\n\ntype TechnoSpamContextValue = TechnoSpamRootProps;\n\nconst TechnoSpamContext = createContext<TechnoSpamContextValue | null>(null);\n\nexport const useTechnoSpam = () => {\n const context = useContext(TechnoSpamContext);\n if (!context) throw new Error('useTechnoSpam must be used within TechnoSpamProvider');\n return context;\n};\n\nexport const TechnoSpamProvider: FC<PropsWithChildren<TechnoSpamRootProps>> = ({\n children,\n ...props\n}) => {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false, staleTime: 5 * 60 * 1000 },\n },\n }),\n []\n );\n\n const content = (\n <QueryClientProvider client={queryClient}>\n <TechnoSpamContext.Provider value={props}>{children}</TechnoSpamContext.Provider>\n </QueryClientProvider>\n );\n\n if (props.basePath) return content;\n return <MemoryRouter>{content}</MemoryRouter>;\n};\n"],"mappings":";;;;;AAQA,IAAM,IAAoB,EAA6C,KAAK,EAE/D,UAAsB;CACjC,IAAM,IAAU,EAAW,EAAkB;AAC7C,KAAI,CAAC,EAAS,OAAU,MAAM,uDAAuD;AACrF,QAAO;GAGI,KAAkE,EAC7E,aACA,GAAG,QACC;CAWJ,IAAM,IACJ,kBAAC,GAAD;EAAqB,QAXH,QAEhB,IAAI,EAAY,EACd,gBAAgB,EACd,SAAS;GAAE,OAAO;GAAG,sBAAsB;GAAO,WAAW,MAAS;GAAM,EAC7E,EACF,CAAC,EACJ,EAAE,CACH;YAIG,kBAAC,EAAkB,UAAnB;GAA4B,OAAO;GAAQ;GAAsC,CAAA;EAC7D,CAAA;AAIxB,QADI,EAAM,WAAiB,IACpB,kBAAC,GAAD,EAAA,UAAe,GAAuB,CAAA"}