@hed-hog/lms 0.0.347 → 0.0.350

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 (414) hide show
  1. package/dist/achievement/achievement.controller.d.ts +62 -0
  2. package/dist/achievement/achievement.controller.d.ts.map +1 -0
  3. package/dist/achievement/achievement.controller.js +90 -0
  4. package/dist/achievement/achievement.controller.js.map +1 -0
  5. package/dist/achievement/achievement.mcp-tools.d.ts +19 -0
  6. package/dist/achievement/achievement.mcp-tools.d.ts.map +1 -0
  7. package/dist/achievement/achievement.mcp-tools.js +157 -0
  8. package/dist/achievement/achievement.mcp-tools.js.map +1 -0
  9. package/dist/achievement/achievement.module.d.ts +3 -0
  10. package/dist/achievement/achievement.module.d.ts.map +1 -0
  11. package/dist/achievement/achievement.module.js +26 -0
  12. package/dist/achievement/achievement.module.js.map +1 -0
  13. package/dist/achievement/achievement.service.d.ts +72 -0
  14. package/dist/achievement/achievement.service.d.ts.map +1 -0
  15. package/dist/achievement/achievement.service.js +200 -0
  16. package/dist/achievement/achievement.service.js.map +1 -0
  17. package/dist/achievement/dto/create-achievement.dto.d.ts +12 -0
  18. package/dist/achievement/dto/create-achievement.dto.d.ts.map +1 -0
  19. package/dist/achievement/dto/create-achievement.dto.js +60 -0
  20. package/dist/achievement/dto/create-achievement.dto.js.map +1 -0
  21. package/dist/achievement/dto/update-achievement.dto.d.ts +11 -0
  22. package/dist/achievement/dto/update-achievement.dto.d.ts.map +1 -0
  23. package/dist/achievement/dto/update-achievement.dto.js +57 -0
  24. package/dist/achievement/dto/update-achievement.dto.js.map +1 -0
  25. package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts +114 -0
  26. package/dist/bitcode-wallet/bitcode-wallet.controller.d.ts.map +1 -0
  27. package/dist/bitcode-wallet/bitcode-wallet.controller.js +102 -0
  28. package/dist/bitcode-wallet/bitcode-wallet.controller.js.map +1 -0
  29. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts +25 -0
  30. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.d.ts.map +1 -0
  31. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js +160 -0
  32. package/dist/bitcode-wallet/bitcode-wallet.mcp-tools.js.map +1 -0
  33. package/dist/bitcode-wallet/bitcode-wallet.module.d.ts +3 -0
  34. package/dist/bitcode-wallet/bitcode-wallet.module.d.ts.map +1 -0
  35. package/dist/bitcode-wallet/bitcode-wallet.module.js +26 -0
  36. package/dist/bitcode-wallet/bitcode-wallet.module.js.map +1 -0
  37. package/dist/bitcode-wallet/bitcode-wallet.service.d.ts +127 -0
  38. package/dist/bitcode-wallet/bitcode-wallet.service.d.ts.map +1 -0
  39. package/dist/bitcode-wallet/bitcode-wallet.service.js +264 -0
  40. package/dist/bitcode-wallet/bitcode-wallet.service.js.map +1 -0
  41. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts +8 -0
  42. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.d.ts.map +1 -0
  43. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js +33 -0
  44. package/dist/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.js.map +1 -0
  45. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts +4 -0
  46. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.d.ts.map +1 -0
  47. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js +22 -0
  48. package/dist/bitcode-wallet/dto/create-bitcode-wallet.dto.js.map +1 -0
  49. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts +7 -0
  50. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.d.ts.map +1 -0
  51. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js +35 -0
  52. package/dist/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.js.map +1 -0
  53. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts +4 -0
  54. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.d.ts.map +1 -0
  55. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js +23 -0
  56. package/dist/bitcode-wallet/dto/update-bitcode-wallet.dto.js.map +1 -0
  57. package/dist/certificate/certificate.controller.d.ts +22 -0
  58. package/dist/certificate/certificate.controller.d.ts.map +1 -1
  59. package/dist/certificate/certificate.controller.js +12 -0
  60. package/dist/certificate/certificate.controller.js.map +1 -1
  61. package/dist/certificate/certificate.mcp-tools.d.ts +24 -0
  62. package/dist/certificate/certificate.mcp-tools.d.ts.map +1 -0
  63. package/dist/certificate/certificate.mcp-tools.js +188 -0
  64. package/dist/certificate/certificate.mcp-tools.js.map +1 -0
  65. package/dist/certificate/certificate.module.d.ts.map +1 -1
  66. package/dist/certificate/certificate.module.js +2 -1
  67. package/dist/certificate/certificate.module.js.map +1 -1
  68. package/dist/certificate/certificate.service.d.ts +25 -2
  69. package/dist/certificate/certificate.service.d.ts.map +1 -1
  70. package/dist/certificate/certificate.service.js +87 -2
  71. package/dist/certificate/certificate.service.js.map +1 -1
  72. package/dist/certificate/dto/update-certificate-public-access.dto.d.ts +4 -0
  73. package/dist/certificate/dto/update-certificate-public-access.dto.d.ts.map +1 -0
  74. package/dist/certificate/dto/update-certificate-public-access.dto.js +21 -0
  75. package/dist/certificate/dto/update-certificate-public-access.dto.js.map +1 -0
  76. package/dist/class-group/class-group.controller.d.ts +3 -3
  77. package/dist/class-group/class-group.mcp-tools.d.ts +87 -0
  78. package/dist/class-group/class-group.mcp-tools.d.ts.map +1 -0
  79. package/dist/class-group/class-group.mcp-tools.js +553 -0
  80. package/dist/class-group/class-group.mcp-tools.js.map +1 -0
  81. package/dist/class-group/class-group.module.d.ts.map +1 -1
  82. package/dist/class-group/class-group.module.js +2 -1
  83. package/dist/class-group/class-group.module.js.map +1 -1
  84. package/dist/class-group/class-group.service.d.ts +6 -4
  85. package/dist/class-group/class-group.service.d.ts.map +1 -1
  86. package/dist/class-group/class-group.service.js +45 -2
  87. package/dist/class-group/class-group.service.js.map +1 -1
  88. package/dist/course/course-operations-integration.service.d.ts +40 -0
  89. package/dist/course/course-operations-integration.service.d.ts.map +1 -0
  90. package/dist/course/course-operations-integration.service.js +372 -0
  91. package/dist/course/course-operations-integration.service.js.map +1 -0
  92. package/dist/course/course-structure.controller.d.ts +43 -4
  93. package/dist/course/course-structure.controller.d.ts.map +1 -1
  94. package/dist/course/course-structure.controller.js +22 -0
  95. package/dist/course/course-structure.controller.js.map +1 -1
  96. package/dist/course/course-structure.service.d.ts +42 -1
  97. package/dist/course/course-structure.service.d.ts.map +1 -1
  98. package/dist/course/course-structure.service.js +199 -32
  99. package/dist/course/course-structure.service.js.map +1 -1
  100. package/dist/course/course.controller.d.ts +12 -0
  101. package/dist/course/course.controller.d.ts.map +1 -1
  102. package/dist/course/course.mcp-tools.d.ts +90 -0
  103. package/dist/course/course.mcp-tools.d.ts.map +1 -0
  104. package/dist/course/course.mcp-tools.js +520 -0
  105. package/dist/course/course.mcp-tools.js.map +1 -0
  106. package/dist/course/course.module.d.ts.map +1 -1
  107. package/dist/course/course.module.js +8 -1
  108. package/dist/course/course.module.js.map +1 -1
  109. package/dist/course/course.service.d.ts +15 -1
  110. package/dist/course/course.service.d.ts.map +1 -1
  111. package/dist/course/course.service.js +70 -35
  112. package/dist/course/course.service.js.map +1 -1
  113. package/dist/course/dto/create-course.dto.d.ts +1 -0
  114. package/dist/course/dto/create-course.dto.d.ts.map +1 -1
  115. package/dist/course/dto/create-course.dto.js +7 -0
  116. package/dist/course/dto/create-course.dto.js.map +1 -1
  117. package/dist/course/dto/update-course-resources.dto.d.ts +11 -0
  118. package/dist/course/dto/update-course-resources.dto.d.ts.map +1 -0
  119. package/dist/course/dto/update-course-resources.dto.js +51 -0
  120. package/dist/course/dto/update-course-resources.dto.js.map +1 -0
  121. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts +23 -0
  122. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts.map +1 -0
  123. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js +78 -0
  124. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js.map +1 -0
  125. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts +22 -0
  126. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts.map +1 -0
  127. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js +120 -0
  128. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js.map +1 -0
  129. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts +3 -0
  130. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts.map +1 -0
  131. package/dist/course-lesson-discussion/course-lesson-discussion.module.js +26 -0
  132. package/dist/course-lesson-discussion/course-lesson-discussion.module.js.map +1 -0
  133. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts +49 -0
  134. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts.map +1 -0
  135. package/dist/course-lesson-discussion/course-lesson-discussion.service.js +272 -0
  136. package/dist/course-lesson-discussion/course-lesson-discussion.service.js.map +1 -0
  137. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts +6 -0
  138. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts.map +1 -0
  139. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js +33 -0
  140. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js.map +1 -0
  141. package/dist/course-lesson-note/course-lesson-note.controller.d.ts +53 -0
  142. package/dist/course-lesson-note/course-lesson-note.controller.d.ts.map +1 -0
  143. package/dist/course-lesson-note/course-lesson-note.controller.js +93 -0
  144. package/dist/course-lesson-note/course-lesson-note.controller.js.map +1 -0
  145. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts +27 -0
  146. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts.map +1 -0
  147. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js +145 -0
  148. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js.map +1 -0
  149. package/dist/course-lesson-note/course-lesson-note.module.d.ts +3 -0
  150. package/dist/course-lesson-note/course-lesson-note.module.d.ts.map +1 -0
  151. package/dist/course-lesson-note/course-lesson-note.module.js +26 -0
  152. package/dist/course-lesson-note/course-lesson-note.module.js.map +1 -0
  153. package/dist/course-lesson-note/course-lesson-note.service.d.ts +59 -0
  154. package/dist/course-lesson-note/course-lesson-note.service.d.ts.map +1 -0
  155. package/dist/course-lesson-note/course-lesson-note.service.js +195 -0
  156. package/dist/course-lesson-note/course-lesson-note.service.js.map +1 -0
  157. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts +6 -0
  158. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts.map +1 -0
  159. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js +33 -0
  160. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js.map +1 -0
  161. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts +6 -0
  162. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts.map +1 -0
  163. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js +35 -0
  164. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js.map +1 -0
  165. package/dist/dashboard/dashboard.mcp-tools.d.ts +10 -0
  166. package/dist/dashboard/dashboard.mcp-tools.d.ts.map +1 -0
  167. package/dist/dashboard/dashboard.mcp-tools.js +46 -0
  168. package/dist/dashboard/dashboard.mcp-tools.js.map +1 -0
  169. package/dist/dashboard/dashboard.module.d.ts.map +1 -1
  170. package/dist/dashboard/dashboard.module.js +2 -1
  171. package/dist/dashboard/dashboard.module.js.map +1 -1
  172. package/dist/enterprise/enterprise.mcp-tools.d.ts +82 -0
  173. package/dist/enterprise/enterprise.mcp-tools.d.ts.map +1 -0
  174. package/dist/enterprise/enterprise.mcp-tools.js +516 -0
  175. package/dist/enterprise/enterprise.mcp-tools.js.map +1 -0
  176. package/dist/enterprise/enterprise.module.d.ts.map +1 -1
  177. package/dist/enterprise/enterprise.module.js +2 -1
  178. package/dist/enterprise/enterprise.module.js.map +1 -1
  179. package/dist/enterprise/training/enterprise-training.module.d.ts.map +1 -1
  180. package/dist/enterprise/training/enterprise-training.module.js +11 -1
  181. package/dist/enterprise/training/enterprise-training.module.js.map +1 -1
  182. package/dist/enterprise/training/training-admin.controller.d.ts +2 -2
  183. package/dist/enterprise/training/training-admin.mcp-tools.d.ts +79 -0
  184. package/dist/enterprise/training/training-admin.mcp-tools.d.ts.map +1 -0
  185. package/dist/enterprise/training/training-admin.mcp-tools.js +620 -0
  186. package/dist/enterprise/training/training-admin.mcp-tools.js.map +1 -0
  187. package/dist/enterprise/training/training-admin.service.d.ts +2 -2
  188. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts +47 -0
  189. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts.map +1 -0
  190. package/dist/enterprise/training/training-instructor.mcp-tools.js +275 -0
  191. package/dist/enterprise/training/training-instructor.mcp-tools.js.map +1 -0
  192. package/dist/enterprise/training/training-student.controller.d.ts +24 -0
  193. package/dist/enterprise/training/training-student.controller.d.ts.map +1 -1
  194. package/dist/enterprise/training/training-student.controller.js +22 -0
  195. package/dist/enterprise/training/training-student.controller.js.map +1 -1
  196. package/dist/enterprise/training/training-student.mcp-tools.d.ts +27 -0
  197. package/dist/enterprise/training/training-student.mcp-tools.d.ts.map +1 -0
  198. package/dist/enterprise/training/training-student.mcp-tools.js +186 -0
  199. package/dist/enterprise/training/training-student.mcp-tools.js.map +1 -0
  200. package/dist/enterprise/training/training-student.service.d.ts +32 -0
  201. package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
  202. package/dist/enterprise/training/training-student.service.js +138 -0
  203. package/dist/enterprise/training/training-student.service.js.map +1 -1
  204. package/dist/evaluation/evaluation.controller.d.ts +4 -4
  205. package/dist/evaluation/evaluation.mcp-tools.d.ts +25 -0
  206. package/dist/evaluation/evaluation.mcp-tools.d.ts.map +1 -0
  207. package/dist/evaluation/evaluation.mcp-tools.js +220 -0
  208. package/dist/evaluation/evaluation.mcp-tools.js.map +1 -0
  209. package/dist/evaluation/evaluation.module.d.ts.map +1 -1
  210. package/dist/evaluation/evaluation.module.js +2 -1
  211. package/dist/evaluation/evaluation.module.js.map +1 -1
  212. package/dist/evaluation/evaluation.service.d.ts +4 -4
  213. package/dist/exam/dto/create-exam-question.dto.d.ts +2 -0
  214. package/dist/exam/dto/create-exam-question.dto.d.ts.map +1 -1
  215. package/dist/exam/dto/create-exam-question.dto.js +10 -0
  216. package/dist/exam/dto/create-exam-question.dto.js.map +1 -1
  217. package/dist/exam/dto/create-exam.dto.d.ts +2 -0
  218. package/dist/exam/dto/create-exam.dto.d.ts.map +1 -1
  219. package/dist/exam/dto/create-exam.dto.js +10 -0
  220. package/dist/exam/dto/create-exam.dto.js.map +1 -1
  221. package/dist/exam/dto/create-question-subject.dto.d.ts +5 -0
  222. package/dist/exam/dto/create-question-subject.dto.d.ts.map +1 -0
  223. package/dist/exam/dto/create-question-subject.dto.js +28 -0
  224. package/dist/exam/dto/create-question-subject.dto.js.map +1 -0
  225. package/dist/exam/exam-attempt.controller.d.ts +4 -0
  226. package/dist/exam/exam-attempt.controller.d.ts.map +1 -1
  227. package/dist/exam/exam-attempt.service.d.ts +7 -1
  228. package/dist/exam/exam-attempt.service.d.ts.map +1 -1
  229. package/dist/exam/exam-attempt.service.js +47 -17
  230. package/dist/exam/exam-attempt.service.js.map +1 -1
  231. package/dist/exam/exam.controller.d.ts +34 -0
  232. package/dist/exam/exam.controller.d.ts.map +1 -1
  233. package/dist/exam/exam.controller.js +27 -0
  234. package/dist/exam/exam.controller.js.map +1 -1
  235. package/dist/exam/exam.mcp-tools.d.ts +62 -0
  236. package/dist/exam/exam.mcp-tools.d.ts.map +1 -0
  237. package/dist/exam/exam.mcp-tools.js +430 -0
  238. package/dist/exam/exam.mcp-tools.js.map +1 -0
  239. package/dist/exam/exam.module.d.ts.map +1 -1
  240. package/dist/exam/exam.module.js +2 -1
  241. package/dist/exam/exam.module.js.map +1 -1
  242. package/dist/exam/exam.service.d.ts +38 -0
  243. package/dist/exam/exam.service.d.ts.map +1 -1
  244. package/dist/exam/exam.service.js +114 -17
  245. package/dist/exam/exam.service.js.map +1 -1
  246. package/dist/index.d.ts +9 -0
  247. package/dist/index.d.ts.map +1 -1
  248. package/dist/index.js +9 -0
  249. package/dist/index.js.map +1 -1
  250. package/dist/instructor/instructor.mcp-tools.d.ts +41 -0
  251. package/dist/instructor/instructor.mcp-tools.d.ts.map +1 -0
  252. package/dist/instructor/instructor.mcp-tools.js +326 -0
  253. package/dist/instructor/instructor.mcp-tools.js.map +1 -0
  254. package/dist/instructor/instructor.module.d.ts.map +1 -1
  255. package/dist/instructor/instructor.module.js +2 -1
  256. package/dist/instructor/instructor.module.js.map +1 -1
  257. package/dist/lms.module.d.ts.map +1 -1
  258. package/dist/lms.module.js +15 -0
  259. package/dist/lms.module.js.map +1 -1
  260. package/dist/realtime/lms-realtime.controller.d.ts +7 -0
  261. package/dist/realtime/lms-realtime.controller.d.ts.map +1 -0
  262. package/dist/realtime/lms-realtime.controller.js +34 -0
  263. package/dist/realtime/lms-realtime.controller.js.map +1 -0
  264. package/dist/realtime/lms-realtime.module.d.ts +3 -0
  265. package/dist/realtime/lms-realtime.module.d.ts.map +1 -0
  266. package/dist/realtime/lms-realtime.module.js +25 -0
  267. package/dist/realtime/lms-realtime.module.js.map +1 -0
  268. package/dist/realtime/lms-realtime.service.d.ts +36 -0
  269. package/dist/realtime/lms-realtime.service.d.ts.map +1 -0
  270. package/dist/realtime/lms-realtime.service.js +59 -0
  271. package/dist/realtime/lms-realtime.service.js.map +1 -0
  272. package/dist/realtime/lms-realtime.subscriber.d.ts +10 -0
  273. package/dist/realtime/lms-realtime.subscriber.d.ts.map +1 -0
  274. package/dist/realtime/lms-realtime.subscriber.js +70 -0
  275. package/dist/realtime/lms-realtime.subscriber.js.map +1 -0
  276. package/dist/reports/reports.mcp-tools.d.ts +10 -0
  277. package/dist/reports/reports.mcp-tools.d.ts.map +1 -0
  278. package/dist/reports/reports.mcp-tools.js +50 -0
  279. package/dist/reports/reports.mcp-tools.js.map +1 -0
  280. package/dist/reports/reports.module.d.ts.map +1 -1
  281. package/dist/reports/reports.module.js +2 -1
  282. package/dist/reports/reports.module.js.map +1 -1
  283. package/dist/training/training.mcp-tools.d.ts +20 -0
  284. package/dist/training/training.mcp-tools.d.ts.map +1 -0
  285. package/dist/training/training.mcp-tools.js +181 -0
  286. package/dist/training/training.mcp-tools.js.map +1 -0
  287. package/dist/training/training.module.d.ts.map +1 -1
  288. package/dist/training/training.module.js +2 -1
  289. package/dist/training/training.module.js.map +1 -1
  290. package/hedhog/data/integration_event_catalog.yaml +69 -0
  291. package/hedhog/data/menu.yaml +34 -0
  292. package/hedhog/data/route.yaml +2351 -0
  293. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +168 -103
  294. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +80 -1
  295. package/hedhog/frontend/app/_components/course-picker.tsx.ejs +228 -0
  296. package/hedhog/frontend/app/_lib/hooks/use-lms-realtime-refresh.ts.ejs +58 -0
  297. package/hedhog/frontend/app/achievements/page.tsx.ejs +844 -0
  298. package/hedhog/frontend/app/bitcodes/page.tsx.ejs +1010 -0
  299. package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +61 -2
  300. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +7 -0
  301. package/hedhog/frontend/app/classes/page.tsx.ejs +55 -2060
  302. package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +28 -0
  303. package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +1 -0
  304. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +0 -9
  305. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +80 -66
  306. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +583 -8
  307. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +527 -57
  308. package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +1 -1
  309. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +106 -4
  310. package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +2 -1
  311. package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +11 -1
  312. package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +53 -6
  313. package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +13 -2
  314. package/hedhog/frontend/app/courses/page.tsx.ejs +175 -29
  315. package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +3 -0
  316. package/hedhog/frontend/app/enterprise/_components/enterprise-course-edit-sheet.tsx.ejs +7 -0
  317. package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +169 -2
  318. package/hedhog/frontend/app/exams/page.tsx.ejs +77 -22
  319. package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +1 -0
  320. package/hedhog/frontend/app/instructors/page.tsx.ejs +1 -0
  321. package/hedhog/frontend/app/paths/page.tsx.ejs +6 -24
  322. package/hedhog/frontend/app/training/page.tsx.ejs +6 -24
  323. package/hedhog/frontend/messages/en.json +314 -12
  324. package/hedhog/frontend/messages/pt.json +314 -12
  325. package/hedhog/query/triggers.sql +53 -0
  326. package/hedhog/table/achievement.yaml +46 -0
  327. package/hedhog/table/bitcode_wallet.yaml +18 -0
  328. package/hedhog/table/bitcode_wallet_transaction.yaml +22 -0
  329. package/hedhog/table/certificate.yaml +3 -0
  330. package/hedhog/table/course.yaml +4 -0
  331. package/hedhog/table/course_file.yaml +23 -0
  332. package/hedhog/table/course_lesson.yaml +5 -0
  333. package/hedhog/table/course_lesson_discussion_like.yaml +21 -0
  334. package/hedhog/table/course_lesson_discussion_topic.yaml +35 -0
  335. package/hedhog/table/course_lesson_note.yaml +34 -0
  336. package/hedhog/table/exam.yaml +5 -0
  337. package/hedhog/table/learning_path_enrollment.yaml +6 -0
  338. package/hedhog/table/question.yaml +10 -0
  339. package/hedhog/table/question_subject.yaml +17 -0
  340. package/hedhog/table/student_activity_streak.yaml +25 -0
  341. package/package.json +7 -7
  342. package/src/achievement/achievement.controller.ts +60 -0
  343. package/src/achievement/achievement.mcp-tools.ts +108 -0
  344. package/src/achievement/achievement.module.ts +13 -0
  345. package/src/achievement/achievement.service.ts +252 -0
  346. package/src/achievement/dto/create-achievement.dto.ts +50 -0
  347. package/src/achievement/dto/update-achievement.dto.ts +47 -0
  348. package/src/bitcode-wallet/bitcode-wallet.controller.ts +69 -0
  349. package/src/bitcode-wallet/bitcode-wallet.mcp-tools.ts +107 -0
  350. package/src/bitcode-wallet/bitcode-wallet.module.ts +13 -0
  351. package/src/bitcode-wallet/bitcode-wallet.service.ts +361 -0
  352. package/src/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.ts +27 -0
  353. package/src/bitcode-wallet/dto/create-bitcode-wallet.dto.ts +7 -0
  354. package/src/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.ts +28 -0
  355. package/src/bitcode-wallet/dto/update-bitcode-wallet.dto.ts +8 -0
  356. package/src/certificate/certificate.controller.ts +20 -11
  357. package/src/certificate/certificate.mcp-tools.ts +131 -0
  358. package/src/certificate/certificate.module.ts +2 -1
  359. package/src/certificate/certificate.service.ts +95 -4
  360. package/src/certificate/dto/update-certificate-public-access.dto.ts +6 -0
  361. package/src/class-group/class-group.mcp-tools.ts +435 -0
  362. package/src/class-group/class-group.module.ts +2 -1
  363. package/src/class-group/class-group.service.ts +51 -1
  364. package/src/course/course-operations-integration.service.ts +520 -0
  365. package/src/course/course-structure.controller.ts +22 -8
  366. package/src/course/course-structure.service.ts +215 -23
  367. package/src/course/course.mcp-tools.ts +409 -0
  368. package/src/course/course.module.ts +8 -1
  369. package/src/course/course.service.ts +106 -27
  370. package/src/course/dto/create-course.dto.ts +8 -0
  371. package/src/course/dto/update-course-resources.dto.ts +39 -0
  372. package/src/course-lesson-discussion/course-lesson-discussion.controller.ts +55 -0
  373. package/src/course-lesson-discussion/course-lesson-discussion.mcp-tools.ts +75 -0
  374. package/src/course-lesson-discussion/course-lesson-discussion.module.ts +13 -0
  375. package/src/course-lesson-discussion/course-lesson-discussion.service.ts +354 -0
  376. package/src/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.ts +16 -0
  377. package/src/course-lesson-note/course-lesson-note.controller.ts +68 -0
  378. package/src/course-lesson-note/course-lesson-note.mcp-tools.ts +96 -0
  379. package/src/course-lesson-note/course-lesson-note.module.ts +13 -0
  380. package/src/course-lesson-note/course-lesson-note.service.ts +248 -0
  381. package/src/course-lesson-note/dto/create-course-lesson-note.dto.ts +16 -0
  382. package/src/course-lesson-note/dto/update-course-lesson-note.dto.ts +18 -0
  383. package/src/dashboard/dashboard.mcp-tools.ts +23 -0
  384. package/src/dashboard/dashboard.module.ts +2 -1
  385. package/src/enterprise/enterprise.mcp-tools.ts +403 -0
  386. package/src/enterprise/enterprise.module.ts +2 -1
  387. package/src/enterprise/training/enterprise-training.module.ts +11 -1
  388. package/src/enterprise/training/training-admin.mcp-tools.ts +479 -0
  389. package/src/enterprise/training/training-instructor.mcp-tools.ts +210 -0
  390. package/src/enterprise/training/training-student.controller.ts +17 -1
  391. package/src/enterprise/training/training-student.mcp-tools.ts +136 -0
  392. package/src/enterprise/training/training-student.service.ts +167 -1
  393. package/src/evaluation/evaluation.mcp-tools.ts +155 -0
  394. package/src/evaluation/evaluation.module.ts +2 -1
  395. package/src/exam/dto/create-exam-question.dto.ts +8 -0
  396. package/src/exam/dto/create-exam.dto.ts +8 -0
  397. package/src/exam/dto/create-question-subject.dto.ts +12 -0
  398. package/src/exam/exam-attempt.service.ts +46 -14
  399. package/src/exam/exam.controller.ts +19 -0
  400. package/src/exam/exam.mcp-tools.ts +337 -0
  401. package/src/exam/exam.module.ts +2 -1
  402. package/src/exam/exam.service.ts +121 -0
  403. package/src/index.ts +9 -0
  404. package/src/instructor/instructor.mcp-tools.ts +243 -0
  405. package/src/instructor/instructor.module.ts +2 -1
  406. package/src/lms.module.ts +15 -1
  407. package/src/realtime/lms-realtime.controller.ts +12 -0
  408. package/src/realtime/lms-realtime.module.ts +12 -0
  409. package/src/realtime/lms-realtime.service.ts +98 -0
  410. package/src/realtime/lms-realtime.subscriber.ts +61 -0
  411. package/src/reports/reports.mcp-tools.ts +27 -0
  412. package/src/reports/reports.module.ts +2 -1
  413. package/src/training/training.mcp-tools.ts +128 -0
  414. package/src/training/training.module.ts +2 -1
@@ -577,11 +577,6 @@ export default function TrainingPage() {
577
577
  allowedValues: PAGE_SIZES,
578
578
  });
579
579
 
580
- // Double-click tracking
581
- const clickTimers = useRef<Map<number, ReturnType<typeof setTimeout>>>(
582
- new Map()
583
- );
584
-
585
580
  const sensors = useSensors(
586
581
  useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),
587
582
  useSensor(KeyboardSensor, {
@@ -947,23 +942,6 @@ export default function TrainingPage() {
947
942
  setDeleteDialogOpen(true);
948
943
  }
949
944
 
950
- // ── Double-click ──────────────────────────────────────────────────────────
951
-
952
- function handleCardClick(formacao: Formacao) {
953
- const existing = clickTimers.current.get(formacao.id);
954
- if (existing) {
955
- clearTimeout(existing);
956
- clickTimers.current.delete(formacao.id);
957
- // Toast message for opening would go here if integrated
958
- } else {
959
- const timer = setTimeout(
960
- () => clickTimers.current.delete(formacao.id),
961
- 300
962
- );
963
- clickTimers.current.set(formacao.id, timer);
964
- }
965
- }
966
-
967
945
  // ── CRUD ──────────────────────────────────────────────────────────────────
968
946
 
969
947
  function openCreateSheet() {
@@ -1308,11 +1286,15 @@ export default function TrainingPage() {
1308
1286
  data.tituloComercial || data.nomeInterno
1309
1287
  ),
1310
1288
  slug,
1289
+ name: data.nomeInterno.trim() || undefined,
1311
1290
  title: data.tituloComercial,
1312
1291
  description: data.descricao,
1313
1292
  level: ptLevelToApi(data.nivel),
1314
1293
  status: courseStatusToApi(data.status),
1315
1294
  categorySlugs,
1295
+ operationsProjectId: data.operationsProjectId
1296
+ ? Number(data.operationsProjectId)
1297
+ : null,
1316
1298
  },
1317
1299
  });
1318
1300
 
@@ -1654,7 +1636,7 @@ export default function TrainingPage() {
1654
1636
  <motion.div key={formacao.id} variants={fadeUp}>
1655
1637
  <Card
1656
1638
  className="group relative flex min-h-60 max-h-67.5 cursor-pointer flex-col overflow-hidden border-border/70 py-0 shadow-sm transition-all duration-200 hover:border-border hover:shadow-md"
1657
- onClick={() => handleCardClick(formacao)}
1639
+ onDoubleClick={() => openEditSheet(formacao)}
1658
1640
  title={t('cards.tooltip')}
1659
1641
  >
1660
1642
  <div
@@ -1796,7 +1778,7 @@ export default function TrainingPage() {
1796
1778
  <TableRow
1797
1779
  key={formacao.id}
1798
1780
  className="cursor-pointer"
1799
- onClick={() => handleCardClick(formacao)}
1781
+ onDoubleClick={() => openEditSheet(formacao)}
1800
1782
  title={t('cards.tooltip')}
1801
1783
  >
1802
1784
  <TableCell>
@@ -373,6 +373,36 @@
373
373
  "technology": "Technology - Dark Theme",
374
374
  "corporate": "Corporate - Formal"
375
375
  },
376
+ "structureEditor": {
377
+ "tabs": {
378
+ "structure": "Structure",
379
+ "about": "About",
380
+ "media": "Media",
381
+ "resources": "Resources",
382
+ "extra": "Extra",
383
+ "publish": "Publish"
384
+ },
385
+ "publishChecklist": {
386
+ "title": "Publishing checklist",
387
+ "required": "Required for publishing",
388
+ "recommended": "Recommended",
389
+ "done": "Done",
390
+ "missing": "Missing",
391
+ "statusTitle": "Publishing status",
392
+ "statusProgress": "{completed}/{total} required items completed",
393
+ "ready": "Ready to publish",
394
+ "notReady": "Not ready yet",
395
+ "items": {
396
+ "title": "Commercial title filled",
397
+ "description": "Public description filled",
398
+ "media": "Logo or banner defined",
399
+ "session": "At least one session created",
400
+ "lesson": "At least one lesson created",
401
+ "publishedLessons": "At least one lesson published",
402
+ "certificate": "Certificate template defined (when enabled)"
403
+ }
404
+ }
405
+ },
376
406
  "deleteDialog": {
377
407
  "title": "Confirm Deletion",
378
408
  "description": "Are you sure you want to delete the course",
@@ -908,9 +938,21 @@
908
938
  "transcriptionHint": "Full video transcription.",
909
939
  "transcriptionVideoOnly": "Transcription is only available for video lessons.",
910
940
  "transcriptionPlaceholder": "Write or paste the transcription here...",
941
+ "transcriptionSegments": "Transcription segments",
942
+ "newTranscriptionSegment": "New segment",
943
+ "transcriptionSegmentPlaceholder": "Segment text {count}",
944
+ "removeTranscriptionSegment": "Remove segment {count}",
945
+ "transcriptionAcceptedFormats": "Accepted formats: mm:ss and hh:mm:ss.",
911
946
  "resourcesCount": "{count} resource(s)",
912
947
  "addResource": "Add resource",
913
948
  "noResources": "No resources added",
949
+ "fileStorageVideosByResolution": "Videos by resolution (File Storage)",
950
+ "videoResolutionPlaceholder": "Eg.: 1080p",
951
+ "uploadVideoForResolution": "Upload video for this resolution",
952
+ "noResolutionVideosYet": "No resolution-based videos uploaded yet.",
953
+ "openVideoAria": "Open video {name}",
954
+ "downloadVideoAria": "Download video {name}",
955
+ "removeVideoAria": "Remove video {name}",
914
956
  "public": "Public",
915
957
  "private": "Private"
916
958
  },
@@ -960,8 +1002,16 @@
960
1002
  "questao": "Question",
961
1003
  "exercicio": "Exercise"
962
1004
  },
1005
+ "statuses": {
1006
+ "preparada": "Prepared",
1007
+ "gravada": "Recorded",
1008
+ "editada": "Edited",
1009
+ "finalizada": "Finalized",
1010
+ "publicada": "Published"
1011
+ },
963
1012
  "providers": {
964
- "custom": "Custom"
1013
+ "custom": "Custom",
1014
+ "fileStorage": "File Storage (HedHog)"
965
1015
  },
966
1016
  "questionEditor": {
967
1017
  "identification": "Identification",
@@ -984,6 +1034,9 @@
984
1034
  "resourceUploadFailed": "{count} file(s) could not be uploaded",
985
1035
  "resourceRemoveError": "Error removing file",
986
1036
  "resourceDownloadSoon": "Download for {name} coming soon",
1037
+ "resourceOpenError": "Could not open the file.",
1038
+ "videoResolutionRequired": "Enter the resolution before uploading the video.",
1039
+ "videoUploadFailed": "Failed to upload {count} video file(s).",
987
1040
  "newQuestion": "New question",
988
1041
  "editQuestion": "Edit question",
989
1042
  "selectQuestion": "Select question...",
@@ -1103,9 +1156,14 @@
1103
1156
  "sheetTitle": "{title} — Structure"
1104
1157
  },
1105
1158
  "contextMenu": {
1159
+ "courseFallback": "Course",
1106
1160
  "edit": "Edit",
1107
1161
  "addLesson": "Add lesson",
1108
1162
  "addSession": "New session",
1163
+ "pasteSession": "Paste session",
1164
+ "pasteLesson": "Paste lesson",
1165
+ "pasteLessons": "Paste lessons ({count})",
1166
+ "selectSessionToPasteLessons": "Select a session to paste lessons.",
1109
1167
  "duplicate": "Duplicate",
1110
1168
  "mergeWith": "Merge with...",
1111
1169
  "moveTo": "Move to...",
@@ -1260,6 +1318,19 @@
1260
1318
  "shuffle": {
1261
1319
  "label": "Shuffle questions",
1262
1320
  "description": "Random order for each attempt"
1321
+ },
1322
+ "level": {
1323
+ "label": "Level",
1324
+ "placeholder": "Select level",
1325
+ "options": {
1326
+ "beginner": "Beginner",
1327
+ "intermediate": "Intermediate",
1328
+ "advanced": "Advanced"
1329
+ }
1330
+ },
1331
+ "showAnswerKeyAfterFinish": {
1332
+ "label": "Show correct answers after completion",
1333
+ "description": "Allows learner to review answered questions and the answer key after finishing"
1263
1334
  }
1264
1335
  },
1265
1336
  "actions": {
@@ -1370,7 +1441,17 @@
1370
1441
  "matchingDescription": "Define the correct pairs between left and right columns.",
1371
1442
  "matchingItem": "Pair {number}",
1372
1443
  "matchingLeftPlaceholder": "Left column text",
1373
- "matchingRightPlaceholder": "Right column text"
1444
+ "matchingRightPlaceholder": "Right column text",
1445
+ "subject": "Subject",
1446
+ "subjectPlaceholder": "Select a subject",
1447
+ "subjectSearchPlaceholder": "Search subject...",
1448
+ "subjectEntityLabel": "subject",
1449
+ "subjectNoResults": "No subjects found",
1450
+ "subjectCreateTitle": "New subject",
1451
+ "subjectCreateDescription": "Create a subject to reuse in other questions.",
1452
+ "subjectCreateNameLabel": "Subject name",
1453
+ "subjectCreateNamePlaceholder": "Ex: React Hooks",
1454
+ "explanation": "Explanation (optional)"
1374
1455
  },
1375
1456
  "actions": {
1376
1457
  "add": "Add",
@@ -1380,7 +1461,8 @@
1380
1461
  "validation": {
1381
1462
  "minAlternatives": "Minimum of 2 alternatives required.",
1382
1463
  "statementMin": "Statement must be at least 5 characters",
1383
- "scoreMin": "Minimum score of 0.5"
1464
+ "scoreMin": "Minimum score of 0.5",
1465
+ "subjectRequired": "Select a subject for the question."
1384
1466
  }
1385
1467
  },
1386
1468
  "deleteDialog": {
@@ -1401,7 +1483,10 @@
1401
1483
  "questionDuplicated": "Question duplicated!",
1402
1484
  "changesSaved": "Changes saved successfully!",
1403
1485
  "fillBlankNeedsAnswers": "Provide at least one expected answer for fill-blank questions.",
1404
- "matchingNeedsPairs": "Provide at least two valid pairs for matching questions."
1486
+ "matchingNeedsPairs": "Provide at least two valid pairs for matching questions.",
1487
+ "subjectNameRequired": "Enter the subject name.",
1488
+ "subjectCreated": "Subject created successfully!",
1489
+ "subjectRequiredToDuplicate": "This question must have a subject to be duplicated."
1405
1490
  },
1406
1491
  "copySuffix": " (copy)",
1407
1492
  "viewMode": {
@@ -1421,7 +1506,8 @@
1421
1506
  "headers": {
1422
1507
  "question": "Question",
1423
1508
  "type": "Type",
1424
- "points": "Points"
1509
+ "points": "Points",
1510
+ "subject": "Subject"
1425
1511
  },
1426
1512
  "actions": {
1427
1513
  "label": "Actions"
@@ -2478,6 +2564,11 @@
2478
2564
  "workload": "Workload",
2479
2565
  "finalScore": "Final score",
2480
2566
  "verificationCode": "Verification code",
2567
+ "publicAccess": {
2568
+ "label": "Public access",
2569
+ "enabled": "Public",
2570
+ "disabled": "Private"
2571
+ },
2481
2572
  "actions": {
2482
2573
  "newTemplate": "New Template",
2483
2574
  "editTemplate": "Edit Template",
@@ -2485,6 +2576,11 @@
2485
2576
  "verify": "Verify"
2486
2577
  }
2487
2578
  },
2579
+ "messages": {
2580
+ "publicAccessEnabled": "Public access enabled for this certificate.",
2581
+ "publicAccessDisabled": "Public access disabled for this certificate.",
2582
+ "publicAccessError": "Could not update certificate public access."
2583
+ },
2488
2584
  "sheet": {
2489
2585
  "title": "Create certificate template",
2490
2586
  "description": "Fill the initial template fields. Then you can refine layout in the visual editor.",
@@ -3454,7 +3550,9 @@
3454
3550
  },
3455
3551
  "status": {
3456
3552
  "active": "Active",
3457
- "inactive": "Inactive"
3553
+ "inactive": "Inactive",
3554
+ "draft": "Draft",
3555
+ "archived": "Archived"
3458
3556
  },
3459
3557
  "contractType": {
3460
3558
  "monthly": "Monthly",
@@ -3623,12 +3721,6 @@
3623
3721
  "beginner": "Beginner",
3624
3722
  "intermediate": "Intermediate",
3625
3723
  "advanced": "Advanced"
3626
- },
3627
- "status": {
3628
- "active": "Active",
3629
- "inactive": "Inactive",
3630
- "draft": "Draft",
3631
- "archived": "Archived"
3632
3724
  }
3633
3725
  },
3634
3726
  "InstructorsPage": {
@@ -3850,6 +3942,216 @@
3850
3942
  "description": "Are you sure you want to delete the skill \"{slug}\"? This action cannot be undone."
3851
3943
  }
3852
3944
  },
3945
+ "AchievementsPage": {
3946
+ "title": "Achievements",
3947
+ "description": "Manage the LMS achievement catalog, including images, type, BitCodes value, and repeat rules.",
3948
+ "breadcrumbs": {
3949
+ "home": "Home",
3950
+ "lms": "LMS",
3951
+ "current": "Achievements"
3952
+ },
3953
+ "filters": {
3954
+ "searchPlaceholder": "Search by name, description, or type..."
3955
+ },
3956
+ "table": {
3957
+ "name": "Name",
3958
+ "type": "Type",
3959
+ "bitCodesValue": "BitCodes",
3960
+ "repeatable": "Repeatable",
3961
+ "images": "Images"
3962
+ },
3963
+ "form": {
3964
+ "name": "Name",
3965
+ "namePlaceholder": "e.g. Learning Path Master",
3966
+ "description": "Description",
3967
+ "descriptionPlaceholder": "Explain when this achievement should be granted.",
3968
+ "iconImage": "Icon image",
3969
+ "iconImageDescription": "Use a square image to represent the achievement in lists and cards.",
3970
+ "mainImage": "Main image",
3971
+ "mainImageDescription": "Hero image used in details, campaigns, or communications.",
3972
+ "imageUpload": "Upload image",
3973
+ "imageReplace": "Replace image",
3974
+ "imageRemove": "Remove",
3975
+ "type": "Type",
3976
+ "typePlaceholder": "Select a type",
3977
+ "bitCodesValue": "BitCodes value",
3978
+ "canReceiveMultipleTimes": "Allow receiving more than once",
3979
+ "canReceiveMultipleTimesDescription": "Enable this when the same person can earn this achievement multiple times.",
3980
+ "validation": {
3981
+ "required": "Required",
3982
+ "max255": "Maximum 255 characters",
3983
+ "integer": "Enter a whole number",
3984
+ "nonNegative": "Enter a value greater than or equal to zero"
3985
+ }
3986
+ },
3987
+ "types": {
3988
+ "course_completion": "Course completion",
3989
+ "learning_path_completion": "Learning path completion",
3990
+ "exam_approval": "Exam approval",
3991
+ "attendance": "Attendance",
3992
+ "engagement": "Engagement",
3993
+ "custom": "Custom"
3994
+ },
3995
+ "repeatable": {
3996
+ "yes": "Yes",
3997
+ "no": "No"
3998
+ },
3999
+ "sheet": {
4000
+ "createTitle": "New achievement",
4001
+ "editTitle": "Edit achievement"
4002
+ },
4003
+ "actions": {
4004
+ "create": "New achievement",
4005
+ "edit": "Edit",
4006
+ "delete": "Delete",
4007
+ "save": "Save",
4008
+ "saving": "Saving...",
4009
+ "cancel": "Cancel",
4010
+ "deleting": "Deleting..."
4011
+ },
4012
+ "messages": {
4013
+ "createSuccess": "Achievement created successfully.",
4014
+ "updateSuccess": "Achievement updated successfully.",
4015
+ "saveError": "Error saving achievement. Please try again.",
4016
+ "deleteSuccess": "Achievement removed successfully.",
4017
+ "deleteError": "Error removing achievement. Please try again.",
4018
+ "uploadError": "Error uploading image. Please try again."
4019
+ },
4020
+ "empty": {
4021
+ "title": "No achievements found",
4022
+ "description": "Create a new achievement or adjust the search filters."
4023
+ },
4024
+ "deleteDialog": {
4025
+ "title": "Delete achievement",
4026
+ "description": "Are you sure you want to delete the achievement \"{name}\"? This action cannot be undone."
4027
+ }
4028
+ },
4029
+ "BitcodesPage": {
4030
+ "title": "BitCodes",
4031
+ "description": "Manage wallets per person and register LMS virtual currency credit and debit entries.",
4032
+ "breadcrumbs": {
4033
+ "home": "Home",
4034
+ "lms": "LMS",
4035
+ "current": "BitCodes"
4036
+ },
4037
+ "kpis": {
4038
+ "wallets": "Wallets",
4039
+ "walletsDescription": "people with an active wallet",
4040
+ "balance": "Total balance",
4041
+ "balanceDescription": "available BitCodes",
4042
+ "transactions": "Transactions",
4043
+ "transactionsDescription": "registered entries",
4044
+ "movement": "Credit / Debit",
4045
+ "movementDescription": "accumulated movement"
4046
+ },
4047
+ "filters": {
4048
+ "searchPlaceholder": "Search by person name..."
4049
+ },
4050
+ "table": {
4051
+ "person": "Person",
4052
+ "personId": "Person #{id}",
4053
+ "balance": "Balance",
4054
+ "credits": "Credits",
4055
+ "debits": "Debits",
4056
+ "transactions": "Transactions",
4057
+ "updatedAt": "Updated at"
4058
+ },
4059
+ "form": {
4060
+ "title": "Wallet",
4061
+ "description": "Link the wallet to a person from the registry.",
4062
+ "person": "Person",
4063
+ "personPlaceholder": "Select a person",
4064
+ "personSearchPlaceholder": "Search person...",
4065
+ "personEntityLabel": "person",
4066
+ "personEmpty": "No person found",
4067
+ "currentBalance": "Current balance: {value} BitCodes",
4068
+ "validation": {
4069
+ "personRequired": "Select a person"
4070
+ }
4071
+ },
4072
+ "transactions": {
4073
+ "types": {
4074
+ "credit": "Credit",
4075
+ "debit": "Debit"
4076
+ },
4077
+ "kpis": {
4078
+ "balance": "Current balance",
4079
+ "balanceDescription": "balance consolidated by the trigger",
4080
+ "credits": "Total credits",
4081
+ "creditsDescription": "accumulated inflows",
4082
+ "debits": "Total debits",
4083
+ "debitsDescription": "accumulated outflows"
4084
+ },
4085
+ "form": {
4086
+ "createTitle": "New entry",
4087
+ "editTitle": "Edit entry",
4088
+ "description": "Register a credit or debit to update the wallet balance.",
4089
+ "cancelEdit": "Cancel edit",
4090
+ "type": "Type",
4091
+ "typePlaceholder": "Select the type",
4092
+ "amount": "Amount",
4093
+ "descriptionLabel": "Description",
4094
+ "descriptionPlaceholder": "E.g. bonus for course completion",
4095
+ "createAction": "Register transaction",
4096
+ "saveEdit": "Save transaction",
4097
+ "validation": {
4098
+ "integer": "Enter a whole number",
4099
+ "positive": "Enter a value greater than zero",
4100
+ "max2000": "Maximum 2000 characters"
4101
+ }
4102
+ },
4103
+ "table": {
4104
+ "title": "Statement",
4105
+ "description": "{count} entr(y)(ies) in this wallet",
4106
+ "type": "Type",
4107
+ "amount": "Amount",
4108
+ "descriptionLabel": "Description",
4109
+ "createdAt": "Created at"
4110
+ },
4111
+ "empty": "There are no transactions registered for this wallet yet.",
4112
+ "deleteDialog": {
4113
+ "title": "Delete transaction",
4114
+ "description": "Are you sure you want to delete this transaction? The wallet balance will be recalculated automatically."
4115
+ }
4116
+ },
4117
+ "sheet": {
4118
+ "createTitle": "New wallet",
4119
+ "editTitle": "Edit wallet",
4120
+ "createDescription": "Create a BitCodes wallet for a person.",
4121
+ "editDescription": "Adjust the wallet and register transactions in the statement."
4122
+ },
4123
+ "actions": {
4124
+ "createWallet": "New wallet",
4125
+ "saveWallet": "Save wallet",
4126
+ "edit": "Edit",
4127
+ "delete": "Delete",
4128
+ "save": "Save",
4129
+ "saving": "Saving...",
4130
+ "clear": "Clear",
4131
+ "cancel": "Cancel",
4132
+ "deleting": "Deleting..."
4133
+ },
4134
+ "messages": {
4135
+ "walletCreated": "Wallet created successfully.",
4136
+ "walletUpdated": "Wallet updated successfully.",
4137
+ "walletDeleted": "Wallet removed successfully.",
4138
+ "walletSaveError": "Error saving wallet. Please try again.",
4139
+ "walletDeleteError": "Error removing wallet. Please try again.",
4140
+ "transactionCreated": "Transaction registered successfully.",
4141
+ "transactionUpdated": "Transaction updated successfully.",
4142
+ "transactionDeleted": "Transaction removed successfully.",
4143
+ "transactionSaveError": "Error saving transaction. Please try again.",
4144
+ "transactionDeleteError": "Error removing transaction. Please try again."
4145
+ },
4146
+ "empty": {
4147
+ "title": "No wallet found",
4148
+ "description": "Create a new wallet or adjust the search to find a person."
4149
+ },
4150
+ "deleteDialog": {
4151
+ "title": "Delete wallet",
4152
+ "description": "Are you sure you want to delete the wallet for \"{name}\"? Related transactions will also be removed."
4153
+ }
4154
+ },
3853
4155
  "EnterpriseDetailPage": {
3854
4156
  "breadcrumbs": {
3855
4157
  "home": "Home",