@hed-hog/lms 0.0.349 → 0.0.351

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 (496) 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 +24 -2
  58. package/dist/certificate/certificate.controller.d.ts.map +1 -1
  59. package/dist/certificate/certificate.controller.js +20 -6
  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 +30 -4
  69. package/dist/certificate/certificate.service.d.ts.map +1 -1
  70. package/dist/certificate/certificate.service.js +157 -8
  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.mcp-tools.d.ts +87 -0
  77. package/dist/class-group/class-group.mcp-tools.d.ts.map +1 -0
  78. package/dist/class-group/class-group.mcp-tools.js +553 -0
  79. package/dist/class-group/class-group.mcp-tools.js.map +1 -0
  80. package/dist/class-group/class-group.module.d.ts.map +1 -1
  81. package/dist/class-group/class-group.module.js +2 -1
  82. package/dist/class-group/class-group.module.js.map +1 -1
  83. package/dist/class-group/class-group.service.d.ts +3 -1
  84. package/dist/class-group/class-group.service.d.ts.map +1 -1
  85. package/dist/class-group/class-group.service.js +45 -2
  86. package/dist/class-group/class-group.service.js.map +1 -1
  87. package/dist/course/course-operations-integration.service.d.ts +40 -0
  88. package/dist/course/course-operations-integration.service.d.ts.map +1 -0
  89. package/dist/course/course-operations-integration.service.js +372 -0
  90. package/dist/course/course-operations-integration.service.js.map +1 -0
  91. package/dist/course/course-structure.controller.d.ts +67 -14
  92. package/dist/course/course-structure.controller.d.ts.map +1 -1
  93. package/dist/course/course-structure.controller.js +45 -2
  94. package/dist/course/course-structure.controller.js.map +1 -1
  95. package/dist/course/course-structure.service.d.ts +58 -9
  96. package/dist/course/course-structure.service.d.ts.map +1 -1
  97. package/dist/course/course-structure.service.js +260 -62
  98. package/dist/course/course-structure.service.js.map +1 -1
  99. package/dist/course/course-video-conversion.service.d.ts +37 -0
  100. package/dist/course/course-video-conversion.service.d.ts.map +1 -0
  101. package/dist/course/course-video-conversion.service.js +308 -0
  102. package/dist/course/course-video-conversion.service.js.map +1 -0
  103. package/dist/course/course.controller.d.ts +29 -0
  104. package/dist/course/course.controller.d.ts.map +1 -1
  105. package/dist/course/course.controller.js +23 -0
  106. package/dist/course/course.controller.js.map +1 -1
  107. package/dist/course/course.mcp-tools.d.ts +90 -0
  108. package/dist/course/course.mcp-tools.d.ts.map +1 -0
  109. package/dist/course/course.mcp-tools.js +520 -0
  110. package/dist/course/course.mcp-tools.js.map +1 -0
  111. package/dist/course/course.module.d.ts.map +1 -1
  112. package/dist/course/course.module.js +23 -3
  113. package/dist/course/course.module.js.map +1 -1
  114. package/dist/course/course.service.d.ts +30 -1
  115. package/dist/course/course.service.d.ts.map +1 -1
  116. package/dist/course/course.service.js +159 -70
  117. package/dist/course/course.service.js.map +1 -1
  118. package/dist/course/dto/create-course-structure-lesson.dto.d.ts +5 -1
  119. package/dist/course/dto/create-course-structure-lesson.dto.d.ts.map +1 -1
  120. package/dist/course/dto/create-course-structure-lesson.dto.js +16 -2
  121. package/dist/course/dto/create-course-structure-lesson.dto.js.map +1 -1
  122. package/dist/course/dto/create-course.dto.d.ts +2 -0
  123. package/dist/course/dto/create-course.dto.d.ts.map +1 -1
  124. package/dist/course/dto/create-course.dto.js +16 -0
  125. package/dist/course/dto/create-course.dto.js.map +1 -1
  126. package/dist/course/dto/update-course-resources.dto.d.ts +11 -0
  127. package/dist/course/dto/update-course-resources.dto.d.ts.map +1 -0
  128. package/dist/course/dto/update-course-resources.dto.js +51 -0
  129. package/dist/course/dto/update-course-resources.dto.js.map +1 -0
  130. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts +23 -0
  131. package/dist/course-lesson-discussion/course-lesson-discussion.controller.d.ts.map +1 -0
  132. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js +78 -0
  133. package/dist/course-lesson-discussion/course-lesson-discussion.controller.js.map +1 -0
  134. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts +22 -0
  135. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.d.ts.map +1 -0
  136. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js +120 -0
  137. package/dist/course-lesson-discussion/course-lesson-discussion.mcp-tools.js.map +1 -0
  138. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts +3 -0
  139. package/dist/course-lesson-discussion/course-lesson-discussion.module.d.ts.map +1 -0
  140. package/dist/course-lesson-discussion/course-lesson-discussion.module.js +26 -0
  141. package/dist/course-lesson-discussion/course-lesson-discussion.module.js.map +1 -0
  142. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts +49 -0
  143. package/dist/course-lesson-discussion/course-lesson-discussion.service.d.ts.map +1 -0
  144. package/dist/course-lesson-discussion/course-lesson-discussion.service.js +272 -0
  145. package/dist/course-lesson-discussion/course-lesson-discussion.service.js.map +1 -0
  146. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts +6 -0
  147. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.d.ts.map +1 -0
  148. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js +33 -0
  149. package/dist/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.js.map +1 -0
  150. package/dist/course-lesson-note/course-lesson-note.controller.d.ts +53 -0
  151. package/dist/course-lesson-note/course-lesson-note.controller.d.ts.map +1 -0
  152. package/dist/course-lesson-note/course-lesson-note.controller.js +93 -0
  153. package/dist/course-lesson-note/course-lesson-note.controller.js.map +1 -0
  154. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts +27 -0
  155. package/dist/course-lesson-note/course-lesson-note.mcp-tools.d.ts.map +1 -0
  156. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js +145 -0
  157. package/dist/course-lesson-note/course-lesson-note.mcp-tools.js.map +1 -0
  158. package/dist/course-lesson-note/course-lesson-note.module.d.ts +3 -0
  159. package/dist/course-lesson-note/course-lesson-note.module.d.ts.map +1 -0
  160. package/dist/course-lesson-note/course-lesson-note.module.js +26 -0
  161. package/dist/course-lesson-note/course-lesson-note.module.js.map +1 -0
  162. package/dist/course-lesson-note/course-lesson-note.service.d.ts +59 -0
  163. package/dist/course-lesson-note/course-lesson-note.service.d.ts.map +1 -0
  164. package/dist/course-lesson-note/course-lesson-note.service.js +195 -0
  165. package/dist/course-lesson-note/course-lesson-note.service.js.map +1 -0
  166. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts +6 -0
  167. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.d.ts.map +1 -0
  168. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js +33 -0
  169. package/dist/course-lesson-note/dto/create-course-lesson-note.dto.js.map +1 -0
  170. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts +6 -0
  171. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.d.ts.map +1 -0
  172. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js +35 -0
  173. package/dist/course-lesson-note/dto/update-course-lesson-note.dto.js.map +1 -0
  174. package/dist/dashboard/dashboard.mcp-tools.d.ts +10 -0
  175. package/dist/dashboard/dashboard.mcp-tools.d.ts.map +1 -0
  176. package/dist/dashboard/dashboard.mcp-tools.js +46 -0
  177. package/dist/dashboard/dashboard.mcp-tools.js.map +1 -0
  178. package/dist/dashboard/dashboard.module.d.ts.map +1 -1
  179. package/dist/dashboard/dashboard.module.js +2 -1
  180. package/dist/dashboard/dashboard.module.js.map +1 -1
  181. package/dist/enterprise/enterprise.controller.d.ts +3 -3
  182. package/dist/enterprise/enterprise.controller.d.ts.map +1 -1
  183. package/dist/enterprise/enterprise.controller.js +0 -1
  184. package/dist/enterprise/enterprise.controller.js.map +1 -1
  185. package/dist/enterprise/enterprise.mcp-tools.d.ts +82 -0
  186. package/dist/enterprise/enterprise.mcp-tools.d.ts.map +1 -0
  187. package/dist/enterprise/enterprise.mcp-tools.js +516 -0
  188. package/dist/enterprise/enterprise.mcp-tools.js.map +1 -0
  189. package/dist/enterprise/enterprise.module.d.ts.map +1 -1
  190. package/dist/enterprise/enterprise.module.js +2 -1
  191. package/dist/enterprise/enterprise.module.js.map +1 -1
  192. package/dist/enterprise/enterprise.service.d.ts +3 -3
  193. package/dist/enterprise/training/enterprise-training.module.d.ts.map +1 -1
  194. package/dist/enterprise/training/enterprise-training.module.js +11 -1
  195. package/dist/enterprise/training/enterprise-training.module.js.map +1 -1
  196. package/dist/enterprise/training/training-admin.mcp-tools.d.ts +79 -0
  197. package/dist/enterprise/training/training-admin.mcp-tools.d.ts.map +1 -0
  198. package/dist/enterprise/training/training-admin.mcp-tools.js +620 -0
  199. package/dist/enterprise/training/training-admin.mcp-tools.js.map +1 -0
  200. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts +47 -0
  201. package/dist/enterprise/training/training-instructor.mcp-tools.d.ts.map +1 -0
  202. package/dist/enterprise/training/training-instructor.mcp-tools.js +275 -0
  203. package/dist/enterprise/training/training-instructor.mcp-tools.js.map +1 -0
  204. package/dist/enterprise/training/training-student.controller.d.ts +24 -0
  205. package/dist/enterprise/training/training-student.controller.d.ts.map +1 -1
  206. package/dist/enterprise/training/training-student.controller.js +22 -0
  207. package/dist/enterprise/training/training-student.controller.js.map +1 -1
  208. package/dist/enterprise/training/training-student.mcp-tools.d.ts +27 -0
  209. package/dist/enterprise/training/training-student.mcp-tools.d.ts.map +1 -0
  210. package/dist/enterprise/training/training-student.mcp-tools.js +186 -0
  211. package/dist/enterprise/training/training-student.mcp-tools.js.map +1 -0
  212. package/dist/enterprise/training/training-student.service.d.ts +32 -0
  213. package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
  214. package/dist/enterprise/training/training-student.service.js +138 -0
  215. package/dist/enterprise/training/training-student.service.js.map +1 -1
  216. package/dist/evaluation/evaluation.mcp-tools.d.ts +25 -0
  217. package/dist/evaluation/evaluation.mcp-tools.d.ts.map +1 -0
  218. package/dist/evaluation/evaluation.mcp-tools.js +220 -0
  219. package/dist/evaluation/evaluation.mcp-tools.js.map +1 -0
  220. package/dist/evaluation/evaluation.module.d.ts.map +1 -1
  221. package/dist/evaluation/evaluation.module.js +2 -1
  222. package/dist/evaluation/evaluation.module.js.map +1 -1
  223. package/dist/evaluation/evaluation.service.d.ts.map +1 -1
  224. package/dist/evaluation/evaluation.service.js +9 -2
  225. package/dist/evaluation/evaluation.service.js.map +1 -1
  226. package/dist/exam/dto/create-exam-question.dto.d.ts +2 -0
  227. package/dist/exam/dto/create-exam-question.dto.d.ts.map +1 -1
  228. package/dist/exam/dto/create-exam-question.dto.js +10 -0
  229. package/dist/exam/dto/create-exam-question.dto.js.map +1 -1
  230. package/dist/exam/dto/create-exam.dto.d.ts +2 -0
  231. package/dist/exam/dto/create-exam.dto.d.ts.map +1 -1
  232. package/dist/exam/dto/create-exam.dto.js +10 -0
  233. package/dist/exam/dto/create-exam.dto.js.map +1 -1
  234. package/dist/exam/dto/create-question-subject.dto.d.ts +5 -0
  235. package/dist/exam/dto/create-question-subject.dto.d.ts.map +1 -0
  236. package/dist/exam/dto/create-question-subject.dto.js +28 -0
  237. package/dist/exam/dto/create-question-subject.dto.js.map +1 -0
  238. package/dist/exam/exam-attempt.controller.d.ts +4 -0
  239. package/dist/exam/exam-attempt.controller.d.ts.map +1 -1
  240. package/dist/exam/exam-attempt.service.d.ts +7 -1
  241. package/dist/exam/exam-attempt.service.d.ts.map +1 -1
  242. package/dist/exam/exam-attempt.service.js +47 -17
  243. package/dist/exam/exam-attempt.service.js.map +1 -1
  244. package/dist/exam/exam.controller.d.ts +34 -0
  245. package/dist/exam/exam.controller.d.ts.map +1 -1
  246. package/dist/exam/exam.controller.js +27 -0
  247. package/dist/exam/exam.controller.js.map +1 -1
  248. package/dist/exam/exam.mcp-tools.d.ts +62 -0
  249. package/dist/exam/exam.mcp-tools.d.ts.map +1 -0
  250. package/dist/exam/exam.mcp-tools.js +430 -0
  251. package/dist/exam/exam.mcp-tools.js.map +1 -0
  252. package/dist/exam/exam.module.d.ts.map +1 -1
  253. package/dist/exam/exam.module.js +2 -1
  254. package/dist/exam/exam.module.js.map +1 -1
  255. package/dist/exam/exam.service.d.ts +38 -0
  256. package/dist/exam/exam.service.d.ts.map +1 -1
  257. package/dist/exam/exam.service.js +114 -17
  258. package/dist/exam/exam.service.js.map +1 -1
  259. package/dist/index.d.ts +10 -0
  260. package/dist/index.d.ts.map +1 -1
  261. package/dist/index.js +10 -0
  262. package/dist/index.js.map +1 -1
  263. package/dist/instructor/instructor.mcp-tools.d.ts +41 -0
  264. package/dist/instructor/instructor.mcp-tools.d.ts.map +1 -0
  265. package/dist/instructor/instructor.mcp-tools.js +326 -0
  266. package/dist/instructor/instructor.mcp-tools.js.map +1 -0
  267. package/dist/instructor/instructor.module.d.ts.map +1 -1
  268. package/dist/instructor/instructor.module.js +2 -1
  269. package/dist/instructor/instructor.module.js.map +1 -1
  270. package/dist/lms.module.d.ts.map +1 -1
  271. package/dist/lms.module.js +18 -0
  272. package/dist/lms.module.js.map +1 -1
  273. package/dist/realtime/lms-realtime.controller.d.ts +7 -0
  274. package/dist/realtime/lms-realtime.controller.d.ts.map +1 -0
  275. package/dist/realtime/lms-realtime.controller.js +34 -0
  276. package/dist/realtime/lms-realtime.controller.js.map +1 -0
  277. package/dist/realtime/lms-realtime.module.d.ts +3 -0
  278. package/dist/realtime/lms-realtime.module.d.ts.map +1 -0
  279. package/dist/realtime/lms-realtime.module.js +25 -0
  280. package/dist/realtime/lms-realtime.module.js.map +1 -0
  281. package/dist/realtime/lms-realtime.service.d.ts +36 -0
  282. package/dist/realtime/lms-realtime.service.d.ts.map +1 -0
  283. package/dist/realtime/lms-realtime.service.js +59 -0
  284. package/dist/realtime/lms-realtime.service.js.map +1 -0
  285. package/dist/realtime/lms-realtime.subscriber.d.ts +10 -0
  286. package/dist/realtime/lms-realtime.subscriber.d.ts.map +1 -0
  287. package/dist/realtime/lms-realtime.subscriber.js +70 -0
  288. package/dist/realtime/lms-realtime.subscriber.js.map +1 -0
  289. package/dist/reports/reports.mcp-tools.d.ts +10 -0
  290. package/dist/reports/reports.mcp-tools.d.ts.map +1 -0
  291. package/dist/reports/reports.mcp-tools.js +50 -0
  292. package/dist/reports/reports.mcp-tools.js.map +1 -0
  293. package/dist/reports/reports.module.d.ts.map +1 -1
  294. package/dist/reports/reports.module.js +2 -1
  295. package/dist/reports/reports.module.js.map +1 -1
  296. package/dist/training/training.mcp-tools.d.ts +20 -0
  297. package/dist/training/training.mcp-tools.d.ts.map +1 -0
  298. package/dist/training/training.mcp-tools.js +181 -0
  299. package/dist/training/training.mcp-tools.js.map +1 -0
  300. package/dist/training/training.module.d.ts.map +1 -1
  301. package/dist/training/training.module.js +2 -1
  302. package/dist/training/training.module.js.map +1 -1
  303. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts +6 -0
  304. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.d.ts.map +1 -0
  305. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js +33 -0
  306. package/dist/video-resolution-profile/dto/create-video-resolution-profile.dto.js.map +1 -0
  307. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts +6 -0
  308. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.d.ts.map +1 -0
  309. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js +33 -0
  310. package/dist/video-resolution-profile/dto/update-video-resolution-profile.dto.js.map +1 -0
  311. package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts +38 -0
  312. package/dist/video-resolution-profile/video-resolution-profile.controller.d.ts.map +1 -0
  313. package/dist/video-resolution-profile/video-resolution-profile.controller.js +89 -0
  314. package/dist/video-resolution-profile/video-resolution-profile.controller.js.map +1 -0
  315. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts +26 -0
  316. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.d.ts.map +1 -0
  317. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js +160 -0
  318. package/dist/video-resolution-profile/video-resolution-profile.mcp-tools.js.map +1 -0
  319. package/dist/video-resolution-profile/video-resolution-profile.module.d.ts +3 -0
  320. package/dist/video-resolution-profile/video-resolution-profile.module.d.ts.map +1 -0
  321. package/dist/video-resolution-profile/video-resolution-profile.module.js +26 -0
  322. package/dist/video-resolution-profile/video-resolution-profile.module.js.map +1 -0
  323. package/dist/video-resolution-profile/video-resolution-profile.service.d.ts +45 -0
  324. package/dist/video-resolution-profile/video-resolution-profile.service.d.ts.map +1 -0
  325. package/dist/video-resolution-profile/video-resolution-profile.service.js +117 -0
  326. package/dist/video-resolution-profile/video-resolution-profile.service.js.map +1 -0
  327. package/hedhog/data/integration_event_catalog.yaml +69 -0
  328. package/hedhog/data/menu.yaml +51 -0
  329. package/hedhog/data/route.yaml +2484 -0
  330. package/hedhog/data/video_resolution_profile.yaml +7 -0
  331. package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +432 -422
  332. package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +200 -67
  333. package/hedhog/frontend/app/_components/course-picker.tsx.ejs +228 -0
  334. package/hedhog/frontend/app/_components/create-lms-instructor-sheet.tsx.ejs +7 -4
  335. package/hedhog/frontend/app/_components/create-lms-person-sheet.tsx.ejs +2 -2
  336. package/hedhog/frontend/app/_components/create-lms-student-person-sheet.tsx.ejs +2 -2
  337. package/hedhog/frontend/app/_lib/editor/templateSerializer.ts.ejs +34 -4
  338. package/hedhog/frontend/app/_lib/editor/types.ts.ejs +28 -3
  339. package/hedhog/frontend/app/_lib/hooks/use-lms-realtime-refresh.ts.ejs +58 -0
  340. package/hedhog/frontend/app/achievements/page.tsx.ejs +850 -0
  341. package/hedhog/frontend/app/bitcodes/page.tsx.ejs +1016 -0
  342. package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +68 -5
  343. package/hedhog/frontend/app/certificates/models/CanvasStage.tsx.ejs +29 -8
  344. package/hedhog/frontend/app/certificates/models/LeftPanel.tsx.ejs +14 -0
  345. package/hedhog/frontend/app/certificates/models/RightPanel.tsx.ejs +194 -9
  346. package/hedhog/frontend/app/certificates/models/page.tsx.ejs +15 -5
  347. package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +16 -5
  348. package/hedhog/frontend/app/classes/page.tsx.ejs +126 -2105
  349. package/hedhog/frontend/app/courses/[id]/_components/CourseCertificateCard.tsx.ejs +19 -9
  350. package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +24 -1
  351. package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +1 -1
  352. package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +1 -1
  353. package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +51 -11
  354. package/hedhog/frontend/app/courses/[id]/_components/CourseSectionCard.tsx.ejs +11 -6
  355. package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +7 -4
  356. package/hedhog/frontend/app/courses/[id]/_components/course-edit-types.ts.ejs +2 -0
  357. package/hedhog/frontend/app/courses/[id]/page.tsx.ejs +24 -96
  358. package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree-dnd.tsx.ejs +80 -66
  359. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +1286 -230
  360. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +1334 -153
  361. package/hedhog/frontend/app/courses/[id]/structure/_components/editor-session.tsx.ejs +11 -11
  362. package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +1 -1
  363. package/hedhog/frontend/app/courses/[id]/structure/_components/shortcuts-help.tsx.ejs +62 -52
  364. package/hedhog/frontend/app/courses/[id]/structure/_components/tree-context-menu.tsx.ejs +106 -4
  365. package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +4 -1
  366. package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +30 -7
  367. package/hedhog/frontend/app/courses/[id]/structure/_data/services/course-structure.service.ts.ejs +138 -6
  368. package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +16 -2
  369. package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +1 -0
  370. package/hedhog/frontend/app/courses/page.tsx.ejs +282 -113
  371. package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +1 -1
  372. package/hedhog/frontend/app/enterprise/_components/enterprise-admin-create-sheet.tsx.ejs +10 -3
  373. package/hedhog/frontend/app/enterprise/_components/enterprise-course-create-sheet.tsx.ejs +3 -0
  374. package/hedhog/frontend/app/enterprise/_components/enterprise-course-edit-sheet.tsx.ejs +7 -0
  375. package/hedhog/frontend/app/enterprise/_components/enterprise-detail-sheet.tsx.ejs +8 -4
  376. package/hedhog/frontend/app/enterprise/_components/enterprise-person-edit-sheet.tsx.ejs +2 -2
  377. package/hedhog/frontend/app/enterprise/_components/enterprise-sheet.tsx.ejs +10 -4
  378. package/hedhog/frontend/app/enterprise/_components/enterprise-student-create-sheet.tsx.ejs +10 -3
  379. package/hedhog/frontend/app/enterprise/_components/enterprise-user-create-sheet.tsx.ejs +10 -3
  380. package/hedhog/frontend/app/evaluations/_components/evaluation-topic-form-sheet.tsx.ejs +10 -3
  381. package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +186 -5
  382. package/hedhog/frontend/app/exams/page.tsx.ejs +89 -26
  383. package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +10 -3
  384. package/hedhog/frontend/app/instructors/_components/instructor-form-sheet.tsx.ejs +190 -17
  385. package/hedhog/frontend/app/instructors/page.tsx.ejs +1 -0
  386. package/hedhog/frontend/app/layout.tsx.ejs +5 -1
  387. package/hedhog/frontend/app/paths/page.tsx.ejs +19 -29
  388. package/hedhog/frontend/app/reports/evaluations/page.tsx.ejs +10 -10
  389. package/hedhog/frontend/app/training/page.tsx.ejs +19 -29
  390. package/hedhog/frontend/app/video-resolution-profiles/page.tsx.ejs +607 -0
  391. package/hedhog/frontend/messages/en.json +563 -20
  392. package/hedhog/frontend/messages/pt.json +563 -20
  393. package/hedhog/query/triggers.sql +53 -0
  394. package/hedhog/table/achievement.yaml +46 -0
  395. package/hedhog/table/bitcode_wallet.yaml +18 -0
  396. package/hedhog/table/bitcode_wallet_transaction.yaml +22 -0
  397. package/hedhog/table/certificate.yaml +3 -0
  398. package/hedhog/table/course.yaml +8 -0
  399. package/hedhog/table/course_file.yaml +23 -0
  400. package/hedhog/table/course_lesson.yaml +5 -0
  401. package/hedhog/table/course_lesson_discussion_like.yaml +21 -0
  402. package/hedhog/table/course_lesson_discussion_topic.yaml +35 -0
  403. package/hedhog/table/course_lesson_file.yaml +8 -0
  404. package/hedhog/table/course_lesson_note.yaml +34 -0
  405. package/hedhog/table/course_video_resolution_profile.yaml +22 -0
  406. package/hedhog/table/exam.yaml +5 -0
  407. package/hedhog/table/learning_path_enrollment.yaml +6 -0
  408. package/hedhog/table/question.yaml +10 -0
  409. package/hedhog/table/question_subject.yaml +17 -0
  410. package/hedhog/table/student_activity_streak.yaml +25 -0
  411. package/hedhog/table/video_resolution_profile.yaml +18 -0
  412. package/package.json +8 -7
  413. package/src/achievement/achievement.controller.ts +60 -0
  414. package/src/achievement/achievement.mcp-tools.ts +108 -0
  415. package/src/achievement/achievement.module.ts +13 -0
  416. package/src/achievement/achievement.service.ts +252 -0
  417. package/src/achievement/dto/create-achievement.dto.ts +50 -0
  418. package/src/achievement/dto/update-achievement.dto.ts +47 -0
  419. package/src/bitcode-wallet/bitcode-wallet.controller.ts +69 -0
  420. package/src/bitcode-wallet/bitcode-wallet.mcp-tools.ts +107 -0
  421. package/src/bitcode-wallet/bitcode-wallet.module.ts +13 -0
  422. package/src/bitcode-wallet/bitcode-wallet.service.ts +361 -0
  423. package/src/bitcode-wallet/dto/create-bitcode-wallet-transaction.dto.ts +27 -0
  424. package/src/bitcode-wallet/dto/create-bitcode-wallet.dto.ts +7 -0
  425. package/src/bitcode-wallet/dto/update-bitcode-wallet-transaction.dto.ts +28 -0
  426. package/src/bitcode-wallet/dto/update-bitcode-wallet.dto.ts +8 -0
  427. package/src/certificate/certificate.controller.ts +17 -3
  428. package/src/certificate/certificate.mcp-tools.ts +131 -0
  429. package/src/certificate/certificate.module.ts +2 -1
  430. package/src/certificate/certificate.service.ts +193 -7
  431. package/src/certificate/dto/update-certificate-public-access.dto.ts +6 -0
  432. package/src/class-group/class-group.mcp-tools.ts +435 -0
  433. package/src/class-group/class-group.module.ts +2 -1
  434. package/src/class-group/class-group.service.ts +51 -1
  435. package/src/course/course-operations-integration.service.ts +520 -0
  436. package/src/course/course-structure.controller.ts +46 -10
  437. package/src/course/course-structure.service.ts +236 -27
  438. package/src/course/course-video-conversion.service.ts +415 -0
  439. package/src/course/course.controller.ts +18 -0
  440. package/src/course/course.mcp-tools.ts +409 -0
  441. package/src/course/course.module.ts +23 -3
  442. package/src/course/course.service.ts +178 -29
  443. package/src/course/dto/create-course-structure-lesson.dto.ts +13 -2
  444. package/src/course/dto/create-course.dto.ts +16 -0
  445. package/src/course/dto/update-course-resources.dto.ts +39 -0
  446. package/src/course-lesson-discussion/course-lesson-discussion.controller.ts +55 -0
  447. package/src/course-lesson-discussion/course-lesson-discussion.mcp-tools.ts +75 -0
  448. package/src/course-lesson-discussion/course-lesson-discussion.module.ts +13 -0
  449. package/src/course-lesson-discussion/course-lesson-discussion.service.ts +354 -0
  450. package/src/course-lesson-discussion/dto/create-course-lesson-discussion-topic.dto.ts +16 -0
  451. package/src/course-lesson-note/course-lesson-note.controller.ts +68 -0
  452. package/src/course-lesson-note/course-lesson-note.mcp-tools.ts +96 -0
  453. package/src/course-lesson-note/course-lesson-note.module.ts +13 -0
  454. package/src/course-lesson-note/course-lesson-note.service.ts +248 -0
  455. package/src/course-lesson-note/dto/create-course-lesson-note.dto.ts +16 -0
  456. package/src/course-lesson-note/dto/update-course-lesson-note.dto.ts +18 -0
  457. package/src/dashboard/dashboard.mcp-tools.ts +23 -0
  458. package/src/dashboard/dashboard.module.ts +2 -1
  459. package/src/enterprise/enterprise.controller.ts +0 -1
  460. package/src/enterprise/enterprise.mcp-tools.ts +403 -0
  461. package/src/enterprise/enterprise.module.ts +2 -1
  462. package/src/enterprise/training/enterprise-training.module.ts +11 -1
  463. package/src/enterprise/training/training-admin.mcp-tools.ts +479 -0
  464. package/src/enterprise/training/training-instructor.mcp-tools.ts +210 -0
  465. package/src/enterprise/training/training-student.controller.ts +17 -1
  466. package/src/enterprise/training/training-student.mcp-tools.ts +136 -0
  467. package/src/enterprise/training/training-student.service.ts +167 -1
  468. package/src/evaluation/evaluation.mcp-tools.ts +155 -0
  469. package/src/evaluation/evaluation.module.ts +2 -1
  470. package/src/evaluation/evaluation.service.ts +9 -2
  471. package/src/exam/dto/create-exam-question.dto.ts +8 -0
  472. package/src/exam/dto/create-exam.dto.ts +8 -0
  473. package/src/exam/dto/create-question-subject.dto.ts +12 -0
  474. package/src/exam/exam-attempt.service.ts +46 -14
  475. package/src/exam/exam.controller.ts +19 -0
  476. package/src/exam/exam.mcp-tools.ts +337 -0
  477. package/src/exam/exam.module.ts +2 -1
  478. package/src/exam/exam.service.ts +121 -0
  479. package/src/index.ts +10 -0
  480. package/src/instructor/instructor.mcp-tools.ts +243 -0
  481. package/src/instructor/instructor.module.ts +2 -1
  482. package/src/lms.module.ts +18 -1
  483. package/src/realtime/lms-realtime.controller.ts +12 -0
  484. package/src/realtime/lms-realtime.module.ts +12 -0
  485. package/src/realtime/lms-realtime.service.ts +98 -0
  486. package/src/realtime/lms-realtime.subscriber.ts +61 -0
  487. package/src/reports/reports.mcp-tools.ts +27 -0
  488. package/src/reports/reports.module.ts +2 -1
  489. package/src/training/training.mcp-tools.ts +128 -0
  490. package/src/training/training.module.ts +2 -1
  491. package/src/video-resolution-profile/dto/create-video-resolution-profile.dto.ts +16 -0
  492. package/src/video-resolution-profile/dto/update-video-resolution-profile.dto.ts +16 -0
  493. package/src/video-resolution-profile/video-resolution-profile.controller.ts +62 -0
  494. package/src/video-resolution-profile/video-resolution-profile.mcp-tools.ts +128 -0
  495. package/src/video-resolution-profile/video-resolution-profile.module.ts +13 -0
  496. package/src/video-resolution-profile/video-resolution-profile.service.ts +117 -0
@@ -43,12 +43,12 @@ import {
43
43
  } from '@/components/ui/select';
44
44
  import {
45
45
  Sheet,
46
- SheetContent,
47
46
  SheetDescription,
48
47
  SheetFooter,
49
48
  SheetHeader,
50
49
  SheetTitle,
51
50
  } from '@/components/ui/sheet';
51
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
52
52
  import { Skeleton } from '@/components/ui/skeleton';
53
53
  import { Switch } from '@/components/ui/switch';
54
54
  import {
@@ -59,6 +59,7 @@ import {
59
59
  TableHeader,
60
60
  TableRow,
61
61
  } from '@/components/ui/table';
62
+ import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
62
63
  import { usePersistedViewMode } from '@/hooks/use-persisted-view-mode';
63
64
  import { useApp, useQuery } from '@hed-hog/next-app-provider';
64
65
  import { zodResolver } from '@hookform/resolvers/zod';
@@ -82,8 +83,7 @@ import {
82
83
  } from 'lucide-react';
83
84
  import { useTranslations } from 'next-intl';
84
85
  import { useRouter } from 'next/navigation';
85
- import { useEffect, useMemo, useRef, useState } from 'react';
86
- import { usePersistedPageSize } from '@/hooks/use-persisted-page-size';
86
+ import { useEffect, useMemo, useState } from 'react';
87
87
  import { Controller, useForm, useWatch } from 'react-hook-form';
88
88
  import { toast } from 'sonner';
89
89
  import { z } from 'zod';
@@ -94,9 +94,11 @@ interface Exame {
94
94
  id: number;
95
95
  codigo: string;
96
96
  titulo: string;
97
+ nivel: 'beginner' | 'intermediate' | 'advanced';
97
98
  notaMinima: number;
98
99
  limiteTempo: number;
99
100
  shuffle: boolean;
101
+ mostrarGabaritoAposConclusao: boolean;
100
102
  status: 'publicado' | 'rascunho' | 'encerrado';
101
103
  questoes: number;
102
104
  realizacoes: number;
@@ -110,9 +112,11 @@ type ApiExame = {
110
112
  id: number;
111
113
  code: string;
112
114
  title: string;
115
+ level: 'beginner' | 'intermediate' | 'advanced';
113
116
  minScore: number;
114
117
  timeLimit: number;
115
118
  shuffle: boolean;
119
+ showAnswerKeyAfterFinish: boolean;
116
120
  status: 'published' | 'draft' | 'closed' | 'archived';
117
121
  questions: number;
118
122
  attempts: number;
@@ -153,12 +157,14 @@ const API_EXAMS_CACHE_KEY = 'lms:exams:api-cache';
153
157
  const createExameSchema = (t: (key: string) => string) =>
154
158
  z.object({
155
159
  titulo: z.string().min(3, t('form.validation.titleMinLength')),
160
+ nivel: z.enum(['beginner', 'intermediate', 'advanced']),
156
161
  notaMinima: z.coerce
157
162
  .number()
158
163
  .min(0, t('form.validation.minScoreMin'))
159
164
  .max(10, t('form.validation.minScoreMax')),
160
165
  limiteTempo: z.coerce.number().min(1, t('form.validation.timeLimitMin')),
161
166
  shuffle: z.boolean().default(false),
167
+ mostrarGabaritoAposConclusao: z.boolean().default(false),
162
168
  status: z.string().min(1, t('form.validation.statusRequired')),
163
169
  primaryColor: z
164
170
  .string()
@@ -190,9 +196,11 @@ function mapApiExame(exame: ApiExame): Exame {
190
196
  id: exame.id,
191
197
  codigo: exame.code,
192
198
  titulo: exame.title,
199
+ nivel: exame.level,
193
200
  notaMinima: exame.minScore,
194
201
  limiteTempo: exame.timeLimit,
195
202
  shuffle: exame.shuffle,
203
+ mostrarGabaritoAposConclusao: Boolean(exame.showAnswerKeyAfterFinish),
196
204
  status: toPtStatus(exame.status),
197
205
  questoes: exame.questions,
198
206
  realizacoes: exame.attempts,
@@ -268,18 +276,15 @@ export default function ExamesPage() {
268
276
  allowedValues: PAGE_SIZES,
269
277
  });
270
278
 
271
- // Double-click tracking
272
- const clickTimers = useRef<Map<number, ReturnType<typeof setTimeout>>>(
273
- new Map()
274
- );
275
-
276
279
  const form = useForm<ExameForm>({
277
280
  resolver: zodResolver(exameSchema),
278
281
  defaultValues: {
279
282
  titulo: '',
283
+ nivel: 'beginner',
280
284
  notaMinima: 7,
281
285
  limiteTempo: 60,
282
286
  shuffle: true,
287
+ mostrarGabaritoAposConclusao: false,
283
288
  status: 'rascunho',
284
289
  primaryColor: '#1D4ED8',
285
290
  secondaryColor: '#111827',
@@ -365,11 +370,18 @@ export default function ExamesPage() {
365
370
  watchedFormValues.notaMinima,
366
371
  editingExame.notaMinima
367
372
  ),
373
+ nivel:
374
+ watchedFormValues.nivel === undefined
375
+ ? editingExame.nivel
376
+ : watchedFormValues.nivel,
368
377
  limiteTempo: toNumberOrFallback(
369
378
  watchedFormValues.limiteTempo,
370
379
  editingExame.limiteTempo
371
380
  ),
372
381
  shuffle: watchedFormValues.shuffle ?? editingExame.shuffle,
382
+ mostrarGabaritoAposConclusao:
383
+ watchedFormValues.mostrarGabaritoAposConclusao ??
384
+ editingExame.mostrarGabaritoAposConclusao,
373
385
  status:
374
386
  (watchedFormValues.status as Exame['status'] | undefined) ??
375
387
  editingExame.status,
@@ -421,29 +433,17 @@ export default function ExamesPage() {
421
433
  setDeleteDialogOpen(true);
422
434
  }
423
435
 
424
- // ── Double-click ──────────────────────────────────────────────────────────
425
-
426
- function handleCardClick(exame: Exame) {
427
- const existing = clickTimers.current.get(exame.id);
428
- if (existing) {
429
- clearTimeout(existing);
430
- clickTimers.current.delete(exame.id);
431
- router.push(`/lms/exams/${exame.id}/questions`);
432
- } else {
433
- const t = setTimeout(() => clickTimers.current.delete(exame.id), 300);
434
- clickTimers.current.set(exame.id, t);
435
- }
436
- }
437
-
438
436
  // ── CRUD ──────────────────────────────────────────────────────────────────
439
437
 
440
438
  function openCreateSheet() {
441
439
  setEditingExame(null);
442
440
  form.reset({
443
441
  titulo: '',
442
+ nivel: 'beginner',
444
443
  notaMinima: 7,
445
444
  limiteTempo: 60,
446
445
  shuffle: true,
446
+ mostrarGabaritoAposConclusao: false,
447
447
  status: 'rascunho',
448
448
  primaryColor: '#1D4ED8',
449
449
  secondaryColor: '#111827',
@@ -456,9 +456,11 @@ export default function ExamesPage() {
456
456
  setEditingExame(exame);
457
457
  form.reset({
458
458
  titulo: exame.titulo,
459
+ nivel: exame.nivel,
459
460
  notaMinima: exame.notaMinima,
460
461
  limiteTempo: exame.limiteTempo,
461
462
  shuffle: exame.shuffle,
463
+ mostrarGabaritoAposConclusao: exame.mostrarGabaritoAposConclusao,
462
464
  status: exame.status,
463
465
  primaryColor: exame.primaryColor ?? '#1D4ED8',
464
466
  secondaryColor: exame.secondaryColor ?? '#111827',
@@ -471,9 +473,11 @@ export default function ExamesPage() {
471
473
  try {
472
474
  const payload = {
473
475
  title: data.titulo,
476
+ level: data.nivel,
474
477
  minScore: data.notaMinima,
475
478
  timeLimit: data.limiteTempo,
476
479
  shuffle: data.shuffle,
480
+ showAnswerKeyAfterFinish: data.mostrarGabaritoAposConclusao,
477
481
  status: toApiStatus(data.status),
478
482
  primaryColor: data.primaryColor,
479
483
  secondaryColor: data.secondaryColor,
@@ -783,7 +787,9 @@ export default function ExamesPage() {
783
787
  <motion.div key={exame.id} variants={fadeUp}>
784
788
  <Card
785
789
  className="group relative h-95 cursor-pointer overflow-hidden border-border/70 shadow-sm transition-all duration-200 hover:border-border hover:shadow-md"
786
- onClick={() => handleCardClick(exame)}
790
+ onDoubleClick={() =>
791
+ router.push(`/lms/exams/${exame.id}`)
792
+ }
787
793
  title={t('cards.tooltip')}
788
794
  >
789
795
  <div
@@ -962,7 +968,9 @@ export default function ExamesPage() {
962
968
  <TableRow
963
969
  key={exame.id}
964
970
  className="cursor-pointer"
965
- onClick={() => handleCardClick(exame)}
971
+ onDoubleClick={() =>
972
+ router.push(`/lms/exams/${exame.id}`)
973
+ }
966
974
  title={t('cards.tooltip')}
967
975
  >
968
976
  <TableCell>
@@ -1072,7 +1080,11 @@ export default function ExamesPage() {
1072
1080
 
1073
1081
  {/* Sheet */}
1074
1082
  <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>
1075
- <SheetContent
1083
+ <ResizableSheetContent
1084
+ sheetId="lms-exams-form-sheet"
1085
+ defaultWidth={560}
1086
+ minWidth={420}
1087
+ maxWidth={920}
1076
1088
  side="right"
1077
1089
  className="flex w-full flex-col sm:max-w-lg overflow-y-auto"
1078
1090
  >
@@ -1114,6 +1126,37 @@ export default function ExamesPage() {
1114
1126
  <FieldError>{form.formState.errors.titulo?.message}</FieldError>
1115
1127
  </Field>
1116
1128
  <div className="grid grid-cols-2 gap-4">
1129
+ <Field>
1130
+ <FieldLabel>
1131
+ {t('form.fields.level.label')}{' '}
1132
+ <span className="text-destructive">*</span>
1133
+ </FieldLabel>
1134
+ <Controller
1135
+ name="nivel"
1136
+ control={form.control}
1137
+ render={({ field }) => (
1138
+ <Select onValueChange={field.onChange} value={field.value}>
1139
+ <SelectTrigger>
1140
+ <SelectValue
1141
+ placeholder={t('form.fields.level.placeholder')}
1142
+ />
1143
+ </SelectTrigger>
1144
+ <SelectContent>
1145
+ <SelectItem value="beginner">
1146
+ {t('form.fields.level.options.beginner')}
1147
+ </SelectItem>
1148
+ <SelectItem value="intermediate">
1149
+ {t('form.fields.level.options.intermediate')}
1150
+ </SelectItem>
1151
+ <SelectItem value="advanced">
1152
+ {t('form.fields.level.options.advanced')}
1153
+ </SelectItem>
1154
+ </SelectContent>
1155
+ </Select>
1156
+ )}
1157
+ />
1158
+ <FieldError>{form.formState.errors.nivel?.message}</FieldError>
1159
+ </Field>
1117
1160
  <Field>
1118
1161
  <FieldLabel htmlFor="notaMinima">
1119
1162
  {t('form.fields.minScore.label')}{' '}
@@ -1261,6 +1304,26 @@ export default function ExamesPage() {
1261
1304
  )}
1262
1305
  />
1263
1306
  </label>
1307
+ <label className="flex cursor-pointer items-center justify-between rounded-lg border p-3 hover:bg-muted">
1308
+ <div>
1309
+ <p className="text-sm font-medium">
1310
+ {t('form.fields.showAnswerKeyAfterFinish.label')}
1311
+ </p>
1312
+ <p className="text-xs text-muted-foreground">
1313
+ {t('form.fields.showAnswerKeyAfterFinish.description')}
1314
+ </p>
1315
+ </div>
1316
+ <Controller
1317
+ name="mostrarGabaritoAposConclusao"
1318
+ control={form.control}
1319
+ render={({ field }) => (
1320
+ <Switch
1321
+ checked={field.value}
1322
+ onCheckedChange={field.onChange}
1323
+ />
1324
+ )}
1325
+ />
1326
+ </label>
1264
1327
  <SheetFooter className="mt-auto shrink-0 gap-2 pt-4 px-0">
1265
1328
  <Button type="submit" disabled={saving} className="gap-2">
1266
1329
  {saving && <Loader2 className="size-4 animate-spin" />}
@@ -1270,7 +1333,7 @@ export default function ExamesPage() {
1270
1333
  </Button>
1271
1334
  </SheetFooter>
1272
1335
  </form>
1273
- </SheetContent>
1336
+ </ResizableSheetContent>
1274
1337
  </Sheet>
1275
1338
 
1276
1339
  {/* Delete Dialog */}
@@ -43,10 +43,10 @@ import {
43
43
  } from '@/components/ui/select';
44
44
  import {
45
45
  Sheet,
46
- SheetContent,
47
46
  SheetHeader,
48
47
  SheetTitle,
49
48
  } from '@/components/ui/sheet';
49
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
50
50
  import { Skeleton } from '@/components/ui/skeleton';
51
51
  import {
52
52
  Table,
@@ -176,7 +176,13 @@ function SkillFormSheet({
176
176
 
177
177
  return (
178
178
  <Sheet open={open} onOpenChange={onOpenChange}>
179
- <SheetContent className="w-full overflow-y-auto sm:max-w-md">
179
+ <ResizableSheetContent
180
+ sheetId="lms-instructor-skills-form-sheet"
181
+ defaultWidth={520}
182
+ minWidth={400}
183
+ maxWidth={860}
184
+ className="w-full overflow-y-auto sm:max-w-md"
185
+ >
180
186
  <SheetHeader>
181
187
  <SheetTitle>
182
188
  {skillToEdit ? t('sheet.editTitle') : t('sheet.createTitle')}
@@ -250,7 +256,7 @@ function SkillFormSheet({
250
256
  </div>
251
257
  </form>
252
258
  </Form>
253
- </SheetContent>
259
+ </ResizableSheetContent>
254
260
  </Sheet>
255
261
  );
256
262
  }
@@ -476,6 +482,7 @@ export default function InstructorSkillsPage() {
476
482
  setPageSize(nextPageSize);
477
483
  setPage(1);
478
484
  }}
485
+ pageSizeOptions={[6, 12, 24]}
479
486
  />
480
487
 
481
488
  <SkillFormSheet
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
 
3
- import { PersonPicker } from '@/app/(app)/(libraries)/contact/_components/person-picker';
4
- import { PersonFormSheet } from '@/app/(app)/(libraries)/contact/person/_components/person-form-sheet';
3
+ import { PersonPicker } from '@/app/(app)/(libraries)/crm/_components/person-picker';
4
+ import { PersonFormSheet } from '@/app/(app)/(libraries)/crm/person/_components/person-form-sheet';
5
5
  import type {
6
6
  ContactTypeOption,
7
7
  DocumentTypeOption,
8
8
  Person,
9
- } from '@/app/(app)/(libraries)/contact/person/_components/person-types';
9
+ } from '@/app/(app)/(libraries)/crm/person/_components/person-types';
10
10
  import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
11
11
  import { Badge } from '@/components/ui/badge';
12
12
  import { Button } from '@/components/ui/button';
@@ -23,12 +23,12 @@ import {
23
23
  } from '@/components/ui/select';
24
24
  import {
25
25
  Sheet,
26
- SheetContent,
27
26
  SheetDescription,
28
27
  SheetFooter,
29
28
  SheetHeader,
30
29
  SheetTitle,
31
30
  } from '@/components/ui/sheet';
31
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
32
32
  import { Switch } from '@/components/ui/switch';
33
33
  import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
34
34
  import { useApp, useQuery } from '@hed-hog/next-app-provider';
@@ -69,6 +69,27 @@ type ClassGroupItem = {
69
69
  totalSlots: number | null;
70
70
  };
71
71
 
72
+ type EvaluationItem = {
73
+ id: number;
74
+ topicName: string;
75
+ topicDescription: string | null;
76
+ targetType: string;
77
+ targetName: string;
78
+ score: number;
79
+ comment: string | null;
80
+ evaluatorName: string | null;
81
+ evaluatorId: number | null;
82
+ courseName: string | null;
83
+ courseId: number | null;
84
+ className: string | null;
85
+ classId: number | null;
86
+ instructorName: string | null;
87
+ instructorId: number | null;
88
+ createdAt: string;
89
+ topicAvgScore: number;
90
+ topicRatingCount: number;
91
+ };
92
+
72
93
  function toKebabCase(str: string) {
73
94
  return (
74
95
  str
@@ -127,6 +148,8 @@ export function InstructorFormSheet({
127
148
  const [classSheetOpen, setClassSheetOpen] = useState(false);
128
149
  const [editingClassId, setEditingClassId] = useState<number | null>(null);
129
150
  const TURMAS_PAGE_SIZE = 6;
151
+ const [avaliacoesPage, setAvaliacoesPage] = useState(1);
152
+ const AVALIACOES_PAGE_SIZE = 6;
130
153
  const isEditing = typeof instructorId === 'number' && instructorId > 0;
131
154
  const qualificationOptions = [
132
155
  {
@@ -329,6 +352,38 @@ export function InstructorFormSheet({
329
352
  const turmasData = turmasResult?.data ?? [];
330
353
  const turmasLastPage = turmasResult?.lastPage ?? 1;
331
354
 
355
+ const {
356
+ data: avaliacoesResult,
357
+ isLoading: loadingAvaliacoes,
358
+ } = useQuery<{
359
+ data: EvaluationItem[];
360
+ total: number;
361
+ lastPage: number;
362
+ }>({
363
+ queryKey: ['lms-instructor-avaliacoes', instructorId, avaliacoesPage],
364
+ queryFn: async () => {
365
+ if (!instructorId) return { data: [], total: 0, lastPage: 1 };
366
+ const params = new URLSearchParams({
367
+ instructorId: String(instructorId),
368
+ page: String(avaliacoesPage),
369
+ pageSize: String(AVALIACOES_PAGE_SIZE),
370
+ });
371
+ const response = await request<{
372
+ data: EvaluationItem[];
373
+ total: number;
374
+ lastPage: number;
375
+ }>({
376
+ url: `/lms/evaluations?${params.toString()}`,
377
+ method: 'GET',
378
+ });
379
+ return response.data;
380
+ },
381
+ enabled: isEditing && open && activeTab === 'avaliacoes',
382
+ placeholderData: (prev) => prev,
383
+ });
384
+ const avaliacoesData = avaliacoesResult?.data ?? [];
385
+ const avaliacoesLastPage = avaliacoesResult?.lastPage ?? 1;
386
+
332
387
  useEffect(() => {
333
388
  const timeout = setTimeout(() => {
334
389
  setDebouncedTurmasSearch(turmasSearchInput.trim());
@@ -377,7 +432,7 @@ export function InstructorFormSheet({
377
432
  }
378
433
  }, [isEditing, existingInstructor, open, reset]);
379
434
 
380
- // Reset to first tab and turmas page when sheet closes
435
+ // Reset to first tab and turmas/avaliacoes page when sheet closes
381
436
  useEffect(() => {
382
437
  if (!open) {
383
438
  setActiveTab('detalhes');
@@ -387,6 +442,7 @@ export function InstructorFormSheet({
387
442
  setTurmasStatusFilter('all');
388
443
  setClassSheetOpen(false);
389
444
  setEditingClassId(null);
445
+ setAvaliacoesPage(1);
390
446
  }
391
447
  }, [open]);
392
448
 
@@ -489,9 +545,13 @@ export function InstructorFormSheet({
489
545
  return (
490
546
  <>
491
547
  <Sheet open={open} onOpenChange={handleSheetClose}>
492
- <SheetContent
548
+ <ResizableSheetContent
549
+ sheetId="lms-instructors-form-sheet"
550
+ defaultWidth={640}
551
+ minWidth={460}
552
+ maxWidth={1100}
493
553
  side="right"
494
- className="flex w-full max-w-lg flex-col overflow-hidden p-0 sm:max-w-xl"
554
+ className="flex w-full flex-col overflow-hidden p-0"
495
555
  >
496
556
  {/* ── Instructor header (edit mode) ── */}
497
557
  {isEditing && existingInstructor ? (
@@ -1136,15 +1196,128 @@ export function InstructorFormSheet({
1136
1196
  value="avaliacoes"
1137
1197
  className="flex min-h-0 flex-1 flex-col overflow-hidden data-[state=inactive]:hidden"
1138
1198
  >
1139
- {/* TODO: implementar endpoint de avaliações de instrutor */}
1140
- <div className="flex flex-1 flex-col items-center justify-center px-6 py-12 text-center">
1141
- <Star className="mb-3 h-10 w-10 text-muted-foreground/40" />
1142
- <p className="text-sm font-medium text-muted-foreground">
1143
- {t('form.evaluations.comingSoonTitle')}
1144
- </p>
1145
- <p className="mt-1 text-xs text-muted-foreground">
1146
- {t('form.evaluations.comingSoonDescription')}
1147
- </p>
1199
+ <div className="flex min-h-0 flex-1 flex-col">
1200
+ {/* List area */}
1201
+ <div className="flex-1 overflow-y-auto px-6 py-4">
1202
+ {loadingAvaliacoes ? (
1203
+ <div className="flex flex-col gap-3">
1204
+ {Array.from({ length: 3 }).map((_, i) => (
1205
+ <div
1206
+ key={i}
1207
+ className="flex flex-col gap-2 rounded-lg border p-4"
1208
+ >
1209
+ <div className="flex items-center justify-between">
1210
+ <div className="h-4 w-32 animate-pulse rounded bg-muted" />
1211
+ <div className="h-4 w-16 animate-pulse rounded bg-muted" />
1212
+ </div>
1213
+ <div className="h-3 w-48 animate-pulse rounded bg-muted" />
1214
+ <div className="h-3 w-64 animate-pulse rounded bg-muted" />
1215
+ </div>
1216
+ ))}
1217
+ </div>
1218
+ ) : avaliacoesData.length === 0 ? (
1219
+ <div className="flex flex-col items-center justify-center py-12 text-center">
1220
+ <Star className="mb-3 h-10 w-10 text-muted-foreground/40" />
1221
+ <p className="text-sm font-medium text-muted-foreground">
1222
+ {t('form.evaluations.emptyTitle')}
1223
+ </p>
1224
+ <p className="mt-1 text-xs text-muted-foreground">
1225
+ {t('form.evaluations.emptyDescription')}
1226
+ </p>
1227
+ </div>
1228
+ ) : (
1229
+ <div className="flex flex-col gap-3">
1230
+ {avaliacoesData.map((ev) => (
1231
+ <div
1232
+ key={ev.id}
1233
+ className="flex flex-col gap-2 rounded-lg border p-4"
1234
+ >
1235
+ {/* Header: topic name + score */}
1236
+ <div className="flex items-start justify-between gap-2">
1237
+ <p className="text-sm font-medium leading-snug">
1238
+ {ev.topicName}
1239
+ </p>
1240
+ <div className="flex shrink-0 items-center gap-1">
1241
+ {Array.from({ length: 5 }).map((_, i) => (
1242
+ <Star
1243
+ key={i}
1244
+ className={`h-3.5 w-3.5 ${
1245
+ i < Math.round(ev.score / 2)
1246
+ ? 'fill-amber-400 text-amber-400'
1247
+ : 'fill-none text-muted-foreground/40'
1248
+ }`}
1249
+ />
1250
+ ))}
1251
+ <span className="ml-1 text-xs font-medium tabular-nums text-muted-foreground">
1252
+ {ev.score.toFixed(1)}{t('form.evaluations.of')}10
1253
+ </span>
1254
+ </div>
1255
+ </div>
1256
+
1257
+ {/* Target + course/class info */}
1258
+ <div className="flex flex-wrap items-center gap-x-2 gap-y-1">
1259
+ {ev.className && (
1260
+ <span className="text-xs text-muted-foreground">
1261
+ <BookOpen className="mr-0.5 inline h-3 w-3" />
1262
+ {ev.className}
1263
+ </span>
1264
+ )}
1265
+ {ev.courseName && (
1266
+ <span className="text-xs text-muted-foreground">
1267
+ · {ev.courseName}
1268
+ </span>
1269
+ )}
1270
+ </div>
1271
+
1272
+ {/* Evaluator + date */}
1273
+ <div className="flex items-center gap-2 text-xs text-muted-foreground">
1274
+ <span>
1275
+ {ev.evaluatorName ?? t('form.evaluations.anonymous')}
1276
+ </span>
1277
+ <span>·</span>
1278
+ <span>
1279
+ {new Date(ev.createdAt).toLocaleDateString()}
1280
+ </span>
1281
+ </div>
1282
+
1283
+ {/* Comment */}
1284
+ {ev.comment && (
1285
+ <p className="line-clamp-2 text-xs text-muted-foreground italic">
1286
+ "{ev.comment}"
1287
+ </p>
1288
+ )}
1289
+ </div>
1290
+ ))}
1291
+ </div>
1292
+ )}
1293
+ </div>
1294
+
1295
+ {/* Pagination */}
1296
+ {avaliacoesLastPage > 1 && (
1297
+ <div className="flex shrink-0 items-center justify-center gap-2 border-t px-6 py-3">
1298
+ <Button
1299
+ type="button"
1300
+ variant="outline"
1301
+ size="icon"
1302
+ disabled={avaliacoesPage <= 1}
1303
+ onClick={() => setAvaliacoesPage((p) => p - 1)}
1304
+ >
1305
+ <ChevronLeft className="h-4 w-4" />
1306
+ </Button>
1307
+ <span className="text-xs text-muted-foreground">
1308
+ {avaliacoesPage} / {avaliacoesLastPage}
1309
+ </span>
1310
+ <Button
1311
+ type="button"
1312
+ variant="outline"
1313
+ size="icon"
1314
+ disabled={avaliacoesPage >= avaliacoesLastPage}
1315
+ onClick={() => setAvaliacoesPage((p) => p + 1)}
1316
+ >
1317
+ <ChevronRight className="h-4 w-4" />
1318
+ </Button>
1319
+ </div>
1320
+ )}
1148
1321
  </div>
1149
1322
  </TabsContent>
1150
1323
  </Tabs>
@@ -1343,7 +1516,7 @@ export function InstructorFormSheet({
1343
1516
  </SheetFooter>
1344
1517
  </form>
1345
1518
  )}
1346
- </SheetContent>
1519
+ </ResizableSheetContent>
1347
1520
  </Sheet>
1348
1521
 
1349
1522
  <ClassFormSheet
@@ -735,6 +735,7 @@ export default function InstructorsPage() {
735
735
  setPageSize(nextPageSize);
736
736
  setPage(1);
737
737
  }}
738
+ pageSizeOptions={[6, 12, 24]}
738
739
  />
739
740
 
740
741
  <InstructorFormSheet
@@ -1,5 +1,9 @@
1
1
  import type { ReactNode } from 'react';
2
2
 
3
3
  export default function LmsLayout({ children }: { children: ReactNode }) {
4
- return <div>{children}</div>;
4
+ return (
5
+ <div className="flex h-full min-h-0 flex-col overflow-hidden">
6
+ {children}
7
+ </div>
8
+ );
5
9
  }