@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
@@ -21,12 +21,12 @@ import {
21
21
  } from '@/components/ui/select';
22
22
  import {
23
23
  Sheet,
24
- SheetContent,
25
24
  SheetDescription,
26
25
  SheetFooter,
27
26
  SheetHeader,
28
27
  SheetTitle,
29
28
  } from '@/components/ui/sheet';
29
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
30
30
  import { useApp } from '@hed-hog/next-app-provider';
31
31
  import { zodResolver } from '@hookform/resolvers/zod';
32
32
  import { Eye, EyeOff, Loader2, RefreshCw } from 'lucide-react';
@@ -165,7 +165,14 @@ export function EnterpriseAdminCreateSheet({
165
165
 
166
166
  return (
167
167
  <Sheet open={open} onOpenChange={handleOpenChange}>
168
- <SheetContent side="right" className="flex flex-col gap-0 sm:max-w-md">
168
+ <ResizableSheetContent
169
+ sheetId="lms-enterprise-admin-create-sheet"
170
+ defaultWidth={520}
171
+ minWidth={400}
172
+ maxWidth={860}
173
+ side="right"
174
+ className="flex flex-col gap-0 sm:max-w-md"
175
+ >
169
176
  <SheetHeader className="border-b px-6 py-4">
170
177
  <SheetTitle>New administrator</SheetTitle>
171
178
  <SheetDescription>
@@ -318,7 +325,7 @@ export function EnterpriseAdminCreateSheet({
318
325
  </SheetFooter>
319
326
  </form>
320
327
  </Form>
321
- </SheetContent>
328
+ </ResizableSheetContent>
322
329
  </Sheet>
323
330
  );
324
331
  }
@@ -143,6 +143,9 @@ export function EnterpriseCourseCreateSheet({
143
143
  primaryContrastColor: getContrastColor(data.primaryColor),
144
144
  secondaryColor: data.secondaryColor,
145
145
  secondaryContrastColor: getContrastColor(data.secondaryColor),
146
+ operationsProjectId: data.operationsProjectId
147
+ ? Number(data.operationsProjectId)
148
+ : null,
146
149
  };
147
150
 
148
151
  const response = await request<ApiCreatedCourse>({
@@ -36,6 +36,7 @@ type ApiCourse = {
36
36
  primaryColor?: string | null;
37
37
  secondaryColor?: string | null;
38
38
  logoFileId?: number | null;
39
+ operationsProjectId?: number | null;
39
40
  };
40
41
 
41
42
  export interface EnterpriseCourseEditSheetProps {
@@ -128,6 +129,9 @@ export function EnterpriseCourseEditSheet({
128
129
  nivel: toPtLevel(course.level),
129
130
  status: toPtStatus(course.status),
130
131
  categorias: course.categories ?? [],
132
+ operationsProjectId: course.operationsProjectId
133
+ ? String(course.operationsProjectId)
134
+ : '',
131
135
  primaryColor: course.primaryColor ?? '#1D4ED8',
132
136
  secondaryColor: course.secondaryColor ?? '#111827',
133
137
  logoFileId: course.logoFileId ?? null,
@@ -171,6 +175,9 @@ export function EnterpriseCourseEditSheet({
171
175
  primaryContrastColor: getContrastColor(values.primaryColor),
172
176
  secondaryColor: values.secondaryColor,
173
177
  secondaryContrastColor: getContrastColor(values.secondaryColor),
178
+ operationsProjectId: values.operationsProjectId
179
+ ? Number(values.operationsProjectId)
180
+ : null,
174
181
  logoFileId: values.logoFileId ?? null,
175
182
  },
176
183
  });
@@ -17,11 +17,11 @@ import { Input } from '@/components/ui/input';
17
17
  import { KpiCardsGrid, type KpiCardItem } from '@/components/ui/kpi-cards-grid';
18
18
  import {
19
19
  Sheet,
20
- SheetContent,
21
20
  SheetDescription,
22
21
  SheetHeader,
23
22
  SheetTitle,
24
23
  } from '@/components/ui/sheet';
24
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
25
25
  import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
26
26
  import { useApp } from '@hed-hog/next-app-provider';
27
27
  import {
@@ -274,9 +274,13 @@ export function EnterpriseDetailSheet({
274
274
  return (
275
275
  <>
276
276
  <Sheet open={open} onOpenChange={onOpenChange}>
277
- <SheetContent
277
+ <ResizableSheetContent
278
+ sheetId="lms-enterprise-detail-sheet"
279
+ defaultWidth={1120}
280
+ minWidth={700}
281
+ maxWidth={1440}
278
282
  side="right"
279
- className="flex w-full flex-col gap-0 overflow-y-auto p-0 sm:max-w-[95vw] lg:max-w-6xl"
283
+ className="flex w-full flex-col gap-0 overflow-y-auto p-0"
280
284
  >
281
285
  {currentAccount && (
282
286
  <>
@@ -612,7 +616,7 @@ export function EnterpriseDetailSheet({
612
616
  </div>
613
617
  </>
614
618
  )}
615
- </SheetContent>
619
+ </ResizableSheetContent>
616
620
  </Sheet>
617
621
 
618
622
  {/* ── Delete Confirmation Dialog ── */}
@@ -2,12 +2,12 @@
2
2
 
3
3
  import { useApp, useQuery } from '@hed-hog/next-app-provider';
4
4
  import { useMemo } from 'react';
5
- import { PersonFormSheet } from '../../../contact/person/_components/person-form-sheet';
5
+ import { PersonFormSheet } from '../../../crm/person/_components/person-form-sheet';
6
6
  import type {
7
7
  ContactTypeOption,
8
8
  DocumentTypeOption,
9
9
  Person,
10
- } from '../../../contact/person/_components/person-types';
10
+ } from '../../../crm/person/_components/person-types';
11
11
 
12
12
  export interface EnterprisePersonEditSheetProps {
13
13
  open: boolean;
@@ -20,11 +20,11 @@ import {
20
20
  } from '@/components/ui/select';
21
21
  import {
22
22
  Sheet,
23
- SheetContent,
24
23
  SheetDescription,
25
24
  SheetHeader,
26
25
  SheetTitle,
27
26
  } from '@/components/ui/sheet';
27
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
28
28
  import { Switch } from '@/components/ui/switch';
29
29
  import { Textarea } from '@/components/ui/textarea';
30
30
  import { useApp } from '@hed-hog/next-app-provider';
@@ -34,7 +34,7 @@ import { useEffect, useState } from 'react';
34
34
  import { useForm } from 'react-hook-form';
35
35
  import { toast } from 'sonner';
36
36
  import { z } from 'zod';
37
- import { PersonPicker } from '../../../contact/_components/person-picker';
37
+ import { PersonPicker } from '../../../crm/_components/person-picker';
38
38
  import { EnterprisePersonEditSheet } from './enterprise-person-edit-sheet';
39
39
  import type { EnterpriseAccount } from './enterprise-types';
40
40
 
@@ -187,7 +187,13 @@ export function EnterpriseSheet({
187
187
 
188
188
  return (
189
189
  <Sheet open={open} onOpenChange={onOpenChange}>
190
- <SheetContent className="w-full overflow-y-auto sm:max-w-lg">
190
+ <ResizableSheetContent
191
+ sheetId="lms-enterprise-account-sheet"
192
+ defaultWidth={560}
193
+ minWidth={420}
194
+ maxWidth={920}
195
+ className="w-full overflow-y-auto sm:max-w-lg"
196
+ >
191
197
  <SheetHeader>
192
198
  <SheetTitle>
193
199
  {isEditing ? t('editTitle') : t('createTitle')}
@@ -414,7 +420,7 @@ export function EnterpriseSheet({
414
420
  setSelectedCompanyLabel(person.name ?? '');
415
421
  }}
416
422
  />
417
- </SheetContent>
423
+ </ResizableSheetContent>
418
424
  </Sheet>
419
425
  );
420
426
  }
@@ -13,12 +13,12 @@ import {
13
13
  import { Input } from '@/components/ui/input';
14
14
  import {
15
15
  Sheet,
16
- SheetContent,
17
16
  SheetDescription,
18
17
  SheetFooter,
19
18
  SheetHeader,
20
19
  SheetTitle,
21
20
  } from '@/components/ui/sheet';
21
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
22
22
  import { useApp } from '@hed-hog/next-app-provider';
23
23
  import { zodResolver } from '@hookform/resolvers/zod';
24
24
  import { Loader2 } from 'lucide-react';
@@ -101,7 +101,14 @@ export function EnterpriseStudentCreateSheet({
101
101
 
102
102
  return (
103
103
  <Sheet open={open} onOpenChange={handleOpenChange}>
104
- <SheetContent side="right" className="flex flex-col gap-0 sm:max-w-md">
104
+ <ResizableSheetContent
105
+ sheetId="lms-enterprise-student-create-sheet"
106
+ defaultWidth={520}
107
+ minWidth={400}
108
+ maxWidth={860}
109
+ side="right"
110
+ className="flex flex-col gap-0 sm:max-w-md"
111
+ >
105
112
  <SheetHeader className="border-b px-6 py-4">
106
113
  <SheetTitle>New student (person)</SheetTitle>
107
114
  <SheetDescription>
@@ -167,7 +174,7 @@ export function EnterpriseStudentCreateSheet({
167
174
  </SheetFooter>
168
175
  </form>
169
176
  </Form>
170
- </SheetContent>
177
+ </ResizableSheetContent>
171
178
  </Sheet>
172
179
  );
173
180
  }
@@ -20,12 +20,12 @@ import {
20
20
  } from '@/components/ui/select';
21
21
  import {
22
22
  Sheet,
23
- SheetContent,
24
23
  SheetDescription,
25
24
  SheetFooter,
26
25
  SheetHeader,
27
26
  SheetTitle,
28
27
  } from '@/components/ui/sheet';
28
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
29
29
  import { zodResolver } from '@hookform/resolvers/zod';
30
30
  import { Loader2 } from 'lucide-react';
31
31
  import { useEffect } from 'react';
@@ -104,7 +104,14 @@ export function EnterpriseUserCreateSheet({
104
104
 
105
105
  return (
106
106
  <Sheet open={open} onOpenChange={handleOpenChange}>
107
- <SheetContent side="right" className="flex flex-col gap-0 sm:max-w-md">
107
+ <ResizableSheetContent
108
+ sheetId="lms-enterprise-user-create-sheet"
109
+ defaultWidth={520}
110
+ minWidth={400}
111
+ maxWidth={860}
112
+ side="right"
113
+ className="flex flex-col gap-0 sm:max-w-md"
114
+ >
108
115
  <SheetHeader className="border-b px-6 py-4">
109
116
  <SheetTitle>New user</SheetTitle>
110
117
  <SheetDescription>
@@ -205,7 +212,7 @@ export function EnterpriseUserCreateSheet({
205
212
  </SheetFooter>
206
213
  </form>
207
214
  </Form>
208
- </SheetContent>
215
+ </ResizableSheetContent>
209
216
  </Sheet>
210
217
  );
211
218
  }
@@ -12,11 +12,11 @@ import {
12
12
  } from '@/components/ui/select';
13
13
  import {
14
14
  Sheet,
15
- SheetContent,
16
15
  SheetFooter,
17
16
  SheetHeader,
18
17
  SheetTitle,
19
18
  } from '@/components/ui/sheet';
19
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
20
20
  import { Switch } from '@/components/ui/switch';
21
21
  import { Textarea } from '@/components/ui/textarea';
22
22
  import { useApp } from '@hed-hog/next-app-provider';
@@ -106,7 +106,14 @@ export function EvaluationTopicFormSheet({
106
106
 
107
107
  return (
108
108
  <Sheet open={open} onOpenChange={onOpenChange}>
109
- <SheetContent side="right" className="w-full overflow-y-auto sm:max-w-md">
109
+ <ResizableSheetContent
110
+ sheetId="lms-evaluation-topic-form-sheet"
111
+ defaultWidth={520}
112
+ minWidth={400}
113
+ maxWidth={860}
114
+ side="right"
115
+ className="w-full overflow-y-auto sm:max-w-md"
116
+ >
110
117
  <SheetHeader>
111
118
  <SheetTitle>
112
119
  {editingItem ? t('form.editTitle') : t('form.createTitle')}
@@ -195,7 +202,7 @@ export function EvaluationTopicFormSheet({
195
202
  </Button>
196
203
  </SheetFooter>
197
204
  </form>
198
- </SheetContent>
205
+ </ResizableSheetContent>
199
206
  </Sheet>
200
207
  );
201
208
  }
@@ -8,6 +8,7 @@ import {
8
8
  SearchBar,
9
9
  ViewModeToggle,
10
10
  } from '@/components/entity-list';
11
+ import { EntityPicker } from '@/components/ui/entity-picker';
11
12
  import { RichTextEditor } from '@/components/rich-text-editor';
12
13
  import { Badge } from '@/components/ui/badge';
13
14
  import { Button } from '@/components/ui/button';
@@ -47,12 +48,12 @@ import {
47
48
  import { Separator } from '@/components/ui/separator';
48
49
  import {
49
50
  Sheet,
50
- SheetContent,
51
51
  SheetDescription,
52
52
  SheetFooter,
53
53
  SheetHeader,
54
54
  SheetTitle,
55
55
  } from '@/components/ui/sheet';
56
+ import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
56
57
  import { Skeleton } from '@/components/ui/skeleton';
57
58
  import {
58
59
  Table,
@@ -132,13 +133,22 @@ interface Questao {
132
133
  examQuestionId: number;
133
134
  order: number;
134
135
  tipo: ExamQuestionType;
136
+ assuntoId: number | null;
137
+ assunto: string | null;
135
138
  enunciado: string;
139
+ explicacao: string;
136
140
  pontuacao: number;
137
141
  alternativas: Alternativa[];
138
142
  fillBlankAnswers: FillBlankAnswer[];
139
143
  matchingPairs: MatchingPair[];
140
144
  }
141
145
 
146
+ type AssuntoQuestaoOption = {
147
+ id: number;
148
+ name: string;
149
+ description?: string | null;
150
+ };
151
+
142
152
  type ExamQuestionType =
143
153
  | 'multiple_choice'
144
154
  | 'true_false'
@@ -164,7 +174,10 @@ type ApiExamQuestion = {
164
174
  examQuestionId: number;
165
175
  order: number;
166
176
  questionType: ExamQuestionType;
177
+ subjectId: number | null;
178
+ subjectName: string | null;
167
179
  statement: string;
180
+ explanation?: string | null;
168
181
  points: number;
169
182
  alternatives: ApiExamQuestionAlternative[];
170
183
  fillBlankAnswers?: Array<{
@@ -188,8 +201,18 @@ type ApiExamQuestionsResponse = {
188
201
  data: ApiExamQuestion[];
189
202
  };
190
203
 
204
+ type ApiQuestionSubjectListResponse = {
205
+ data: AssuntoQuestaoOption[];
206
+ total: number;
207
+ page: number;
208
+ pageSize: number;
209
+ lastPage: number;
210
+ };
211
+
191
212
  type QuestaoForm = {
213
+ subjectId: number;
192
214
  enunciado: string;
215
+ explicacao?: string;
193
216
  questionType: ExamQuestionType;
194
217
  pontuacao: number;
195
218
  };
@@ -204,7 +227,10 @@ function mapApiQuestion(question: ApiExamQuestion): Questao {
204
227
  examQuestionId: question.examQuestionId,
205
228
  order: question.order,
206
229
  tipo: question.questionType,
230
+ assuntoId: question.subjectId,
231
+ assunto: question.subjectName,
207
232
  enunciado: question.statement,
233
+ explicacao: question.explanation ?? '',
208
234
  pontuacao: question.points,
209
235
  alternativas: question.alternatives.map((alternative) => ({
210
236
  id: alternative.id,
@@ -440,6 +466,11 @@ function SortableQuestao({
440
466
 
441
467
  <div className="flex items-start justify-between gap-3">
442
468
  <div className="mt-2 flex flex-wrap items-center gap-2">
469
+ {questao.assunto && (
470
+ <Badge variant="secondary" className="text-xs">
471
+ {questao.assunto}
472
+ </Badge>
473
+ )}
443
474
  <Badge variant="outline" className="text-xs">
444
475
  {t(`question.types.${questao.tipo}`)}
445
476
  </Badge>
@@ -588,6 +619,9 @@ export default function QuestoesPage() {
588
619
  );
589
620
  const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
590
621
  const [questaoToDelete, setQuestaoToDelete] = useState<Questao | null>(null);
622
+ const [assuntosLocais, setAssuntosLocais] = useState<AssuntoQuestaoOption[]>(
623
+ []
624
+ );
591
625
  const [hasChanges, setHasChanges] = useState(false);
592
626
  const [saving, setSaving] = useState(false);
593
627
  const [buscaInput, setBuscaInput] = useState('');
@@ -608,7 +642,12 @@ export default function QuestoesPage() {
608
642
  });
609
643
 
610
644
  const questaoSchema = z.object({
645
+ subjectId: z.coerce
646
+ .number()
647
+ .int()
648
+ .min(1, t('sheet.validation.subjectRequired')),
611
649
  enunciado: z.string().min(5, t('sheet.validation.statementMin')),
650
+ explicacao: z.string().optional(),
612
651
  questionType: z.enum([
613
652
  'multiple_choice',
614
653
  'true_false',
@@ -622,7 +661,9 @@ export default function QuestoesPage() {
622
661
  const form = useForm<QuestaoForm>({
623
662
  resolver: zodResolver(questaoSchema),
624
663
  defaultValues: {
664
+ subjectId: 0,
625
665
  enunciado: '',
666
+ explicacao: '',
626
667
  questionType: 'multiple_choice',
627
668
  pontuacao: 1,
628
669
  },
@@ -701,6 +742,64 @@ export default function QuestoesPage() {
701
742
  setCurrentPage(1);
702
743
  }
703
744
 
745
+ async function loadQuestionSubjectOptions(args: {
746
+ page: number;
747
+ pageSize: number;
748
+ search: string;
749
+ }) {
750
+ const response = await request<ApiQuestionSubjectListResponse>({
751
+ url: '/lms/exams/question-subjects',
752
+ method: 'GET',
753
+ params: {
754
+ page: args.page,
755
+ pageSize: args.pageSize,
756
+ ...(args.search ? { search: args.search } : {}),
757
+ },
758
+ });
759
+
760
+ const items = response.data?.data ?? [];
761
+
762
+ setAssuntosLocais((prev) => {
763
+ const merged = [...prev, ...items];
764
+ return merged.filter(
765
+ (item, index, arr) =>
766
+ arr.findIndex((candidate) => candidate.id === item.id) === index
767
+ );
768
+ });
769
+
770
+ return {
771
+ items,
772
+ hasMore: (response.data?.page ?? 1) < (response.data?.lastPage ?? 1),
773
+ };
774
+ }
775
+
776
+ async function createQuestionSubject(values: Record<string, string>) {
777
+ const name = values.name?.trim() ?? '';
778
+
779
+ if (!name) {
780
+ toast.error(t('toasts.subjectNameRequired'));
781
+ return null;
782
+ }
783
+
784
+ const response = await request<AssuntoQuestaoOption>({
785
+ url: '/lms/exams/question-subjects',
786
+ method: 'POST',
787
+ data: { name },
788
+ });
789
+
790
+ const created = response.data;
791
+
792
+ if (created?.id) {
793
+ setAssuntosLocais((prev) =>
794
+ prev.some((item) => item.id === created.id) ? prev : [...prev, created]
795
+ );
796
+ toast.success(t('toasts.subjectCreated'));
797
+ return created;
798
+ }
799
+
800
+ return null;
801
+ }
802
+
704
803
  useEffect(() => {
705
804
  if (currentPage > totalPages) {
706
805
  setCurrentPage(totalPages);
@@ -786,7 +885,9 @@ export default function QuestoesPage() {
786
885
  function openCreateSheet() {
787
886
  setEditingQuestao(null);
788
887
  form.reset({
888
+ subjectId: 0,
789
889
  enunciado: '',
890
+ explicacao: '',
790
891
  questionType: 'multiple_choice',
791
892
  pontuacao: 1,
792
893
  });
@@ -802,7 +903,9 @@ export default function QuestoesPage() {
802
903
  function openEditSheet(questao: Questao) {
803
904
  setEditingQuestao(questao);
804
905
  form.reset({
906
+ subjectId: questao.assuntoId ?? 0,
805
907
  enunciado: questao.enunciado,
908
+ explicacao: questao.explicacao,
806
909
  questionType: questao.tipo,
807
910
  pontuacao: questao.pontuacao,
808
911
  });
@@ -967,7 +1070,9 @@ export default function QuestoesPage() {
967
1070
  }
968
1071
 
969
1072
  const payload = {
1073
+ subjectId: data.subjectId,
970
1074
  statement: data.enunciado,
1075
+ explanation: data.explicacao?.trim() || null,
971
1076
  questionType: data.questionType,
972
1077
  points: Math.max(1, Math.round(data.pontuacao)),
973
1078
  ...(requiresAlternatives && {
@@ -1033,11 +1138,18 @@ export default function QuestoesPage() {
1033
1138
  }
1034
1139
 
1035
1140
  async function duplicateQuestao(questao: Questao) {
1141
+ if (!questao.assuntoId) {
1142
+ toast.error(t('toasts.subjectRequiredToDuplicate'));
1143
+ return;
1144
+ }
1145
+
1036
1146
  await request({
1037
- url: `/lms/exams/${examId}/questions`,
1147
+ url: '/lms/exams/' + examId + '/questions',
1038
1148
  method: 'POST',
1039
1149
  data: {
1040
- statement: `${questao.enunciado}${t('copySuffix')}`,
1150
+ subjectId: questao.assuntoId,
1151
+ statement: questao.enunciado + t('copySuffix'),
1152
+ explanation: questao.explicacao?.trim() || null,
1041
1153
  questionType: questao.tipo,
1042
1154
  points: Math.max(1, Math.round(questao.pontuacao)),
1043
1155
  ...(OBJECTIVE_QUESTION_TYPES.includes(questao.tipo) && {
@@ -1346,6 +1458,7 @@ export default function QuestoesPage() {
1346
1458
  <TableHeader>
1347
1459
  <TableRow>
1348
1460
  <TableHead>{t('table.headers.question')}</TableHead>
1461
+ <TableHead>{t('table.headers.subject')}</TableHead>
1349
1462
  <TableHead>{t('table.headers.type')}</TableHead>
1350
1463
  <TableHead className="text-right">
1351
1464
  {t('table.headers.points')}
@@ -1366,6 +1479,7 @@ export default function QuestoesPage() {
1366
1479
  </p>
1367
1480
  </div>
1368
1481
  </TableCell>
1482
+ <TableCell>{questao.assunto ?? '-'}</TableCell>
1369
1483
  <TableCell>
1370
1484
  <Badge variant="outline" className="text-xs">
1371
1485
  {t(`question.types.${questao.tipo}`)}
@@ -1474,7 +1588,11 @@ export default function QuestoesPage() {
1474
1588
 
1475
1589
  {/* Create/Edit Sheet */}
1476
1590
  <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>
1477
- <SheetContent
1591
+ <ResizableSheetContent
1592
+ sheetId="lms-exam-questions-form-sheet"
1593
+ defaultWidth={560}
1594
+ minWidth={420}
1595
+ maxWidth={920}
1478
1596
  side="right"
1479
1597
  className="flex w-full flex-col sm:max-w-lg overflow-y-auto"
1480
1598
  >
@@ -1493,6 +1611,51 @@ export default function QuestoesPage() {
1493
1611
  onSubmit={form.handleSubmit(onSubmit)}
1494
1612
  className="flex flex-1 flex-col gap-5 px-4 pb-4"
1495
1613
  >
1614
+ <FormField
1615
+ control={form.control}
1616
+ name="subjectId"
1617
+ render={({ field }) => (
1618
+ <FormItem>
1619
+ <FormLabel>{t('sheet.fields.subject')}</FormLabel>
1620
+ <FormControl>
1621
+ <EntityPicker<AssuntoQuestaoOption>
1622
+ value={field.value || null}
1623
+ valueType="number"
1624
+ placeholder={t('sheet.fields.subjectPlaceholder')}
1625
+ searchPlaceholder={t(
1626
+ 'sheet.fields.subjectSearchPlaceholder'
1627
+ )}
1628
+ entityLabel={t('sheet.fields.subjectEntityLabel')}
1629
+ noResultsLabel={t('sheet.fields.subjectNoResults')}
1630
+ options={assuntosLocais}
1631
+ loadOptions={loadQuestionSubjectOptions}
1632
+ getOptionLabel={(option) => option.name}
1633
+ getOptionDescription={(option) =>
1634
+ option.description ?? undefined
1635
+ }
1636
+ createTitle={t('sheet.fields.subjectCreateTitle')}
1637
+ createDescription={t(
1638
+ 'sheet.fields.subjectCreateDescription'
1639
+ )}
1640
+ createFields={[
1641
+ {
1642
+ name: 'name',
1643
+ label: t('sheet.fields.subjectCreateNameLabel'),
1644
+ placeholder: t(
1645
+ 'sheet.fields.subjectCreateNamePlaceholder'
1646
+ ),
1647
+ required: true,
1648
+ },
1649
+ ]}
1650
+ onCreate={createQuestionSubject}
1651
+ onChange={(value) => field.onChange(Number(value ?? 0))}
1652
+ />
1653
+ </FormControl>
1654
+ <FormMessage />
1655
+ </FormItem>
1656
+ )}
1657
+ />
1658
+
1496
1659
  <FormField
1497
1660
  control={form.control}
1498
1661
  name="enunciado"
@@ -1554,6 +1717,24 @@ export default function QuestoesPage() {
1554
1717
  )}
1555
1718
  />
1556
1719
 
1720
+ <FormField
1721
+ control={form.control}
1722
+ name="explicacao"
1723
+ render={({ field }) => (
1724
+ <FormItem>
1725
+ <FormLabel>{t('sheet.fields.explanation')}</FormLabel>
1726
+ <FormControl>
1727
+ <RichTextEditor
1728
+ className="w-full max-w-full h-40"
1729
+ value={field.value ?? ''}
1730
+ onChange={field.onChange}
1731
+ />
1732
+ </FormControl>
1733
+ <FormMessage />
1734
+ </FormItem>
1735
+ )}
1736
+ />
1737
+
1557
1738
  <FormField
1558
1739
  control={form.control}
1559
1740
  name="pontuacao"
@@ -1816,7 +1997,7 @@ export default function QuestoesPage() {
1816
1997
  </SheetFooter>
1817
1998
  </form>
1818
1999
  </Form>
1819
- </SheetContent>
2000
+ </ResizableSheetContent>
1820
2001
  </Sheet>
1821
2002
 
1822
2003
  {/* Delete Dialog */}