analytica-frontend-lib 1.6.21 → 1.6.22

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 (405) hide show
  1. package/dist/AccessReportModal/index.js +1 -1
  2. package/dist/AccessReportModal/index.mjs +1 -1
  3. package/dist/AccessibilityWidget/index.js +1 -1
  4. package/dist/AccessibilityWidget/index.mjs +1 -1
  5. package/dist/Accordation/index.js +1 -1
  6. package/dist/Accordation/index.mjs +1 -1
  7. package/dist/ActivitiesHistory/index.js +19 -19
  8. package/dist/ActivitiesHistory/index.mjs +18 -18
  9. package/dist/ActivityCardQuestionBanks/index.js +19 -19
  10. package/dist/ActivityCardQuestionBanks/index.mjs +18 -18
  11. package/dist/ActivityCardQuestionPreview/index.js +19 -19
  12. package/dist/ActivityCardQuestionPreview/index.mjs +18 -18
  13. package/dist/ActivityCreate/ActivityCreate.utils/index.js +3 -3
  14. package/dist/ActivityCreate/ActivityCreate.utils/index.mjs +2 -2
  15. package/dist/ActivityCreate/ActivityCreateContent/index.js +19 -19
  16. package/dist/ActivityCreate/ActivityCreateContent/index.mjs +18 -18
  17. package/dist/ActivityCreate/index.js +19 -19
  18. package/dist/ActivityCreate/index.mjs +18 -18
  19. package/dist/ActivityDetails/index.js +19 -19
  20. package/dist/ActivityDetails/index.mjs +18 -18
  21. package/dist/ActivityFilters/index.js +19 -19
  22. package/dist/ActivityFilters/index.mjs +18 -18
  23. package/dist/ActivityPageLayout/index.js +19 -19
  24. package/dist/ActivityPageLayout/index.mjs +18 -18
  25. package/dist/ActivityPreview/index.js +19 -19
  26. package/dist/ActivityPreview/index.mjs +18 -18
  27. package/dist/Alert/index.js +1 -1
  28. package/dist/Alert/index.mjs +1 -1
  29. package/dist/AlertDialog/index.js +1 -1
  30. package/dist/AlertDialog/index.mjs +1 -1
  31. package/dist/AlertManager/index.js +19 -19
  32. package/dist/AlertManager/index.mjs +18 -18
  33. package/dist/AlertManagerView/index.js +1 -1
  34. package/dist/AlertManagerView/index.mjs +1 -1
  35. package/dist/Alternative/index.js +1 -1
  36. package/dist/Alternative/index.mjs +1 -1
  37. package/dist/AnnouncementModal/index.js +1 -1
  38. package/dist/AnnouncementModal/index.mjs +1 -1
  39. package/dist/AnnouncementsGate/index.js +1 -1
  40. package/dist/AnnouncementsGate/index.mjs +1 -1
  41. package/dist/AnswerKeyModal/index.js +1 -1
  42. package/dist/AnswerKeyModal/index.mjs +1 -1
  43. package/dist/AppHeader/index.js +1 -1
  44. package/dist/AppHeader/index.mjs +1 -1
  45. package/dist/AppLayout/index.js +1 -1
  46. package/dist/AppLayout/index.mjs +1 -1
  47. package/dist/Avatar/index.js +1 -1
  48. package/dist/Avatar/index.mjs +1 -1
  49. package/dist/Badge/index.js +1 -1
  50. package/dist/Badge/index.mjs +1 -1
  51. package/dist/BreadcrumbMenu/index.js +1 -1
  52. package/dist/BreadcrumbMenu/index.mjs +1 -1
  53. package/dist/Button/index.js +1 -1
  54. package/dist/Button/index.mjs +1 -1
  55. package/dist/Calendar/index.js +1 -1
  56. package/dist/Calendar/index.mjs +1 -1
  57. package/dist/CalendarCard/index.js +1 -1
  58. package/dist/CalendarCard/index.mjs +1 -1
  59. package/dist/Card/index.js +1 -1
  60. package/dist/Card/index.mjs +1 -1
  61. package/dist/ChartComponents/index.js +1 -1
  62. package/dist/ChartComponents/index.mjs +1 -1
  63. package/dist/Chat/index.js +1 -1
  64. package/dist/Chat/index.mjs +1 -1
  65. package/dist/Chatbot/index.js +1 -1
  66. package/dist/Chatbot/index.mjs +1 -1
  67. package/dist/CheckBox/index.js +1 -1
  68. package/dist/CheckBox/index.mjs +1 -1
  69. package/dist/CheckBoxGroup/index.js +19 -19
  70. package/dist/CheckBoxGroup/index.mjs +18 -18
  71. package/dist/Chips/index.js +1 -1
  72. package/dist/Chips/index.mjs +1 -1
  73. package/dist/ChoroplethMap/index.js +1 -1
  74. package/dist/ChoroplethMap/index.mjs +1 -1
  75. package/dist/ColorPicker/index.js +1 -1
  76. package/dist/ColorPicker/index.mjs +1 -1
  77. package/dist/ComparatorChart/ComparatorView/index.js +1 -1
  78. package/dist/ComparatorChart/ComparatorView/index.mjs +1 -1
  79. package/dist/CorrectActivityModal/index.js +6 -6
  80. package/dist/CorrectActivityModal/index.mjs +5 -5
  81. package/dist/Divider/index.js +1 -1
  82. package/dist/Divider/index.mjs +1 -1
  83. package/dist/DownloadButton/index.js +1 -1
  84. package/dist/DownloadButton/index.mjs +1 -1
  85. package/dist/DownloadModal/index.js +1 -1
  86. package/dist/DownloadModal/index.mjs +1 -1
  87. package/dist/DragHandleButton/index.js +1 -1
  88. package/dist/DragHandleButton/index.mjs +1 -1
  89. package/dist/DropdownMenu/index.js +1 -1
  90. package/dist/DropdownMenu/index.mjs +1 -1
  91. package/dist/EmptyState/index.js +1 -1
  92. package/dist/EmptyState/index.mjs +1 -1
  93. package/dist/EnemClassroomStartModal/index.d.ts +0 -2
  94. package/dist/EnemClassroomStartModal/index.d.ts.map +1 -1
  95. package/dist/EnemClassroomStartModal/index.js +4 -6
  96. package/dist/EnemClassroomStartModal/index.js.map +1 -1
  97. package/dist/EnemClassroomStartModal/index.mjs +3 -5
  98. package/dist/EssayThemePicker/index.js +1 -1
  99. package/dist/EssayThemePicker/index.mjs +1 -1
  100. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js +19 -19
  101. package/dist/ExamDetailsLayout/ExamDetailsPage/index.mjs +18 -18
  102. package/dist/ExamPageLayout/examsTableConfig/index.js +1 -1
  103. package/dist/ExamPageLayout/examsTableConfig/index.mjs +1 -1
  104. package/dist/ExamPageLayout/index.js +19 -19
  105. package/dist/ExamPageLayout/index.mjs +18 -18
  106. package/dist/FileAttachment/index.js +1 -1
  107. package/dist/FileAttachment/index.mjs +1 -1
  108. package/dist/FileDropzone/index.js +1 -1
  109. package/dist/FileDropzone/index.mjs +1 -1
  110. package/dist/Forum/index.js +4 -4
  111. package/dist/Forum/index.mjs +3 -3
  112. package/dist/HtmlMathRenderer/index.js +1 -1
  113. package/dist/HtmlMathRenderer/index.mjs +1 -1
  114. package/dist/IconButton/index.js +1 -1
  115. package/dist/IconButton/index.mjs +1 -1
  116. package/dist/IconRoundedButton/index.js +1 -1
  117. package/dist/IconRoundedButton/index.mjs +1 -1
  118. package/dist/ImagePreviewCard/index.js +1 -1
  119. package/dist/ImagePreviewCard/index.mjs +1 -1
  120. package/dist/ImageUpload/index.js +1 -1
  121. package/dist/ImageUpload/index.mjs +1 -1
  122. package/dist/LatexRenderer/index.js +1 -1
  123. package/dist/LatexRenderer/index.mjs +1 -1
  124. package/dist/LevelBar/index.js +1 -1
  125. package/dist/LevelBar/index.mjs +1 -1
  126. package/dist/Menu/index.js +1 -1
  127. package/dist/Menu/index.mjs +1 -1
  128. package/dist/MetricBox/index.js +1 -1
  129. package/dist/MetricBox/index.mjs +1 -1
  130. package/dist/Modal/index.js +1 -1
  131. package/dist/Modal/index.mjs +1 -1
  132. package/dist/ModalComponents/index.js +1 -1
  133. package/dist/ModalComponents/index.mjs +1 -1
  134. package/dist/MultiSearchSelect/index.js +1 -1
  135. package/dist/MultiSearchSelect/index.mjs +1 -1
  136. package/dist/MultipleChoice/index.js +1 -1
  137. package/dist/MultipleChoice/index.mjs +1 -1
  138. package/dist/NavButton/index.js +1 -1
  139. package/dist/NavButton/index.mjs +1 -1
  140. package/dist/NoSearchResult/index.js +1 -1
  141. package/dist/NoSearchResult/index.mjs +1 -1
  142. package/dist/NotFound/index.js +1 -1
  143. package/dist/NotFound/index.mjs +1 -1
  144. package/dist/NotificationCard/index.js +1 -1
  145. package/dist/NotificationCard/index.mjs +1 -1
  146. package/dist/PerformanceDistributionChart/index.js +1 -1
  147. package/dist/PerformanceDistributionChart/index.mjs +1 -1
  148. package/dist/PerformanceQuestionsData/index.js +1 -1
  149. package/dist/PerformanceQuestionsData/index.mjs +1 -1
  150. package/dist/PerformanceRanking/index.js +1 -1
  151. package/dist/PerformanceRanking/index.mjs +1 -1
  152. package/dist/PerformanceReport/index.js +1 -1
  153. package/dist/PerformanceReport/index.mjs +1 -1
  154. package/dist/PerformanceReportModal/index.js +1 -1
  155. package/dist/PerformanceReportModal/index.mjs +1 -1
  156. package/dist/PeriodSelector/index.js +1 -1
  157. package/dist/PeriodSelector/index.mjs +1 -1
  158. package/dist/PrintableUsersTable/index.js +19 -19
  159. package/dist/PrintableUsersTable/index.mjs +18 -18
  160. package/dist/ProficiencyChart/index.js +1 -1
  161. package/dist/ProficiencyChart/index.mjs +1 -1
  162. package/dist/ProgressBar/index.js +1 -1
  163. package/dist/ProgressBar/index.mjs +1 -1
  164. package/dist/ProgressCircle/index.js +1 -1
  165. package/dist/ProgressCircle/index.mjs +1 -1
  166. package/dist/ProgressModal/index.js +1 -1
  167. package/dist/ProgressModal/index.mjs +1 -1
  168. package/dist/QuestionsData/index.js +1 -1
  169. package/dist/QuestionsData/index.mjs +1 -1
  170. package/dist/QuestionsPerformanceCard/index.js +19 -19
  171. package/dist/QuestionsPerformanceCard/index.mjs +18 -18
  172. package/dist/Quiz/QuizResult/index.d.ts.map +1 -1
  173. package/dist/Quiz/QuizResult/index.js +4 -4
  174. package/dist/Quiz/QuizResult/index.mjs +3 -3
  175. package/dist/Quiz/TeacherFeedbackSection/index.js +3 -3
  176. package/dist/Quiz/TeacherFeedbackSection/index.mjs +2 -2
  177. package/dist/Quiz/TeacherQuestionComment/index.js +3 -3
  178. package/dist/Quiz/TeacherQuestionComment/index.mjs +2 -2
  179. package/dist/Quiz/index.d.ts.map +1 -1
  180. package/dist/Quiz/index.js +6 -6
  181. package/dist/Quiz/index.mjs +5 -5
  182. package/dist/Quiz/useQuizStore/index.d.ts +6 -0
  183. package/dist/Quiz/useQuizStore/index.d.ts.map +1 -1
  184. package/dist/Quiz/useQuizStore/index.js +2 -2
  185. package/dist/Quiz/useQuizStore/index.mjs +1 -1
  186. package/dist/QuizTimer/index.js +3 -3
  187. package/dist/QuizTimer/index.mjs +2 -2
  188. package/dist/Radio/index.js +1 -1
  189. package/dist/Radio/index.mjs +1 -1
  190. package/dist/RangeGauge/index.js +1 -1
  191. package/dist/RangeGauge/index.mjs +1 -1
  192. package/dist/RecommendedLessonCreate/index.js +19 -19
  193. package/dist/RecommendedLessonCreate/index.mjs +18 -18
  194. package/dist/RecommendedLessonDetails/index.js +1 -1
  195. package/dist/RecommendedLessonDetails/index.mjs +1 -1
  196. package/dist/RecommendedLessonsHistory/index.js +19 -19
  197. package/dist/RecommendedLessonsHistory/index.mjs +18 -18
  198. package/dist/ReportDetailModal/index.js +1 -1
  199. package/dist/ReportDetailModal/index.mjs +1 -1
  200. package/dist/RestrictedAccess/index.js +1 -1
  201. package/dist/RestrictedAccess/index.mjs +1 -1
  202. package/dist/RichEditor/index.js +3 -3
  203. package/dist/RichEditor/index.mjs +2 -2
  204. package/dist/{RichEditorCore-F5QPQLEK.js → RichEditorCore-NEIZKFKE.js} +2 -2
  205. package/dist/{RichEditorCore-F5QPQLEK.js.map → RichEditorCore-NEIZKFKE.js.map} +1 -1
  206. package/dist/{RichEditorCore-QZYPHNRY.mjs → RichEditorCore-TLAFZ5XG.mjs} +2 -2
  207. package/dist/ScoreCircle/index.js +1 -1
  208. package/dist/ScoreCircle/index.mjs +1 -1
  209. package/dist/Search/index.js +1 -1
  210. package/dist/Search/index.mjs +1 -1
  211. package/dist/SearchSelect/index.js +1 -1
  212. package/dist/SearchSelect/index.mjs +1 -1
  213. package/dist/Select/index.js +1 -1
  214. package/dist/Select/index.mjs +1 -1
  215. package/dist/SelectionButton/index.js +1 -1
  216. package/dist/SelectionButton/index.mjs +1 -1
  217. package/dist/SendActivityModal/SendActivityModal.js +19 -19
  218. package/dist/SendActivityModal/SendActivityModal.mjs +18 -18
  219. package/dist/SendActivityModal/index.js +19 -19
  220. package/dist/SendActivityModal/index.mjs +18 -18
  221. package/dist/SendLessonModal/index.js +19 -19
  222. package/dist/SendLessonModal/index.mjs +18 -18
  223. package/dist/SimpleBarChart/index.js +1 -1
  224. package/dist/SimpleBarChart/index.mjs +1 -1
  225. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js +19 -19
  226. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.mjs +18 -18
  227. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js +1 -1
  228. package/dist/SimulatedPerformance/useSimulatedPerformance/index.mjs +1 -1
  229. package/dist/SimulatedStudentSimulationsModal/index.js +19 -19
  230. package/dist/SimulatedStudentSimulationsModal/index.mjs +5 -5
  231. package/dist/SimulationsPage/index.js +19 -19
  232. package/dist/SimulationsPage/index.mjs +18 -18
  233. package/dist/Skeleton/index.js +1 -1
  234. package/dist/Skeleton/index.mjs +1 -1
  235. package/dist/StatisticsCard/index.js +1 -1
  236. package/dist/StatisticsCard/index.mjs +1 -1
  237. package/dist/Stepper/index.js +1 -1
  238. package/dist/Stepper/index.mjs +1 -1
  239. package/dist/StudentLessonProgressModal/index.js +1 -1
  240. package/dist/StudentLessonProgressModal/index.mjs +1 -1
  241. package/dist/StudentPerformanceDetailsModal/index.js +1 -1
  242. package/dist/StudentPerformanceDetailsModal/index.mjs +1 -1
  243. package/dist/StudentRanking/index.js +1 -1
  244. package/dist/StudentRanking/index.mjs +1 -1
  245. package/dist/SubjectIcons/index.js +1 -1
  246. package/dist/SubjectIcons/index.mjs +1 -1
  247. package/dist/SubjectMenuOverflow/index.js +1 -1
  248. package/dist/SubjectMenuOverflow/index.mjs +1 -1
  249. package/dist/Support/TicketModal/index.js +1 -1
  250. package/dist/Support/TicketModal/index.mjs +1 -1
  251. package/dist/Support/index.js +1 -1
  252. package/dist/Support/index.mjs +1 -1
  253. package/dist/Table/TablePagination/index.js +1 -1
  254. package/dist/Table/TablePagination/index.mjs +1 -1
  255. package/dist/Table/index.js +1 -1
  256. package/dist/Table/index.mjs +1 -1
  257. package/dist/TableProvider/index.js +19 -19
  258. package/dist/TableProvider/index.mjs +18 -18
  259. package/dist/Text/index.js +1 -1
  260. package/dist/Text/index.mjs +1 -1
  261. package/dist/TextArea/index.js +1 -1
  262. package/dist/TextArea/index.mjs +1 -1
  263. package/dist/ThemeToggle/index.js +1 -1
  264. package/dist/ThemeToggle/index.mjs +1 -1
  265. package/dist/TimeChart/index.js +1 -1
  266. package/dist/TimeChart/index.mjs +1 -1
  267. package/dist/TimeReport/index.js +1 -1
  268. package/dist/TimeReport/index.mjs +1 -1
  269. package/dist/Toast/Toaster/index.js +1 -1
  270. package/dist/Toast/Toaster/index.mjs +1 -1
  271. package/dist/Toast/index.js +1 -1
  272. package/dist/Toast/index.mjs +1 -1
  273. package/dist/ToggleSwitch/index.js +1 -1
  274. package/dist/ToggleSwitch/index.mjs +1 -1
  275. package/dist/TokenValidation/index.js +1 -1
  276. package/dist/TokenValidation/index.mjs +1 -1
  277. package/dist/Tooltip/index.js +1 -1
  278. package/dist/Tooltip/index.mjs +1 -1
  279. package/dist/TruncatedText/index.js +1 -1
  280. package/dist/TruncatedText/index.mjs +1 -1
  281. package/dist/TypeSelector/index.js +1 -1
  282. package/dist/TypeSelector/index.mjs +1 -1
  283. package/dist/UnifiedDraftModelPage/index.js +19 -19
  284. package/dist/UnifiedDraftModelPage/index.mjs +18 -18
  285. package/dist/UnifiedHistoryPage/index.js +19 -19
  286. package/dist/UnifiedHistoryPage/index.mjs +18 -18
  287. package/dist/VerticalBarChart/index.js +1 -1
  288. package/dist/VerticalBarChart/index.mjs +1 -1
  289. package/dist/VideoPlayer/index.js +1 -1
  290. package/dist/VideoPlayer/index.mjs +1 -1
  291. package/dist/Whiteboard/index.js +1 -1
  292. package/dist/Whiteboard/index.mjs +1 -1
  293. package/dist/{chunk-JBAGQ7L5.js → chunk-3VG5MEMY.js} +14 -13
  294. package/dist/chunk-3VG5MEMY.js.map +1 -0
  295. package/dist/{chunk-ED23HOE6.mjs → chunk-5NIU4XJY.mjs} +7 -6
  296. package/dist/chunk-5NIU4XJY.mjs.map +1 -0
  297. package/dist/{chunk-DDZDNGBU.mjs → chunk-64WGFT5E.mjs} +3 -1
  298. package/dist/chunk-64WGFT5E.mjs.map +1 -0
  299. package/dist/{chunk-QN32O3J3.js → chunk-6MK23BTK.js} +62 -62
  300. package/dist/{chunk-QN32O3J3.js.map → chunk-6MK23BTK.js.map} +1 -1
  301. package/dist/{chunk-XX4WE4TL.js → chunk-726PIA5M.js} +1 -1
  302. package/dist/chunk-726PIA5M.js.map +1 -0
  303. package/dist/{chunk-VZJKHIHN.mjs → chunk-7KALNPIG.mjs} +4 -4
  304. package/dist/{chunk-NQNEG4KR.mjs → chunk-7VKFZHWP.mjs} +11 -10
  305. package/dist/chunk-7VKFZHWP.mjs.map +1 -0
  306. package/dist/{chunk-GYQUB3VW.js → chunk-BBFV3NDF.js} +8 -6
  307. package/dist/chunk-BBFV3NDF.js.map +1 -0
  308. package/dist/{chunk-I3Z2BHGN.js → chunk-BJHYT75K.js} +3 -3
  309. package/dist/{chunk-I3Z2BHGN.js.map → chunk-BJHYT75K.js.map} +1 -1
  310. package/dist/{chunk-CFTQ24UT.mjs → chunk-CMYBNZ74.mjs} +2 -2
  311. package/dist/{chunk-R7NS5KFE.mjs → chunk-CWUNF7U6.mjs} +3 -3
  312. package/dist/{chunk-NAOHJW6H.mjs → chunk-DLHV7CZN.mjs} +6 -6
  313. package/dist/{chunk-7EXSCXPK.mjs → chunk-DMYETMZG.mjs} +2 -2
  314. package/dist/{chunk-RQPSA4QV.js → chunk-GQUTHDV2.js} +3 -3
  315. package/dist/{chunk-RQPSA4QV.js.map → chunk-GQUTHDV2.js.map} +1 -1
  316. package/dist/{chunk-OZWPOXVU.mjs → chunk-GVGDUCVF.mjs} +2 -2
  317. package/dist/{chunk-QFWY46XU.js → chunk-IMDS5NQL.js} +16 -16
  318. package/dist/{chunk-QFWY46XU.js.map → chunk-IMDS5NQL.js.map} +1 -1
  319. package/dist/{chunk-KYGFYAU7.js → chunk-JHN35HPH.js} +3 -3
  320. package/dist/{chunk-KYGFYAU7.js.map → chunk-JHN35HPH.js.map} +1 -1
  321. package/dist/{chunk-DMZTDCUF.js → chunk-JPQI2RIV.js} +3 -3
  322. package/dist/{chunk-DMZTDCUF.js.map → chunk-JPQI2RIV.js.map} +1 -1
  323. package/dist/{chunk-LXX5KU3O.mjs → chunk-LMDAF6LA.mjs} +2 -2
  324. package/dist/{chunk-FL4W4S6J.mjs → chunk-MOSP7FR5.mjs} +1 -1
  325. package/dist/chunk-MOSP7FR5.mjs.map +1 -0
  326. package/dist/{chunk-HZXXADG4.js → chunk-NLPBW3SW.js} +44 -43
  327. package/dist/chunk-NLPBW3SW.js.map +1 -0
  328. package/dist/{chunk-TAABXGZL.mjs → chunk-O3JP6ZMQ.mjs} +2 -2
  329. package/dist/{chunk-MFO4S7T5.js → chunk-PJOBOBNJ.js} +3 -3
  330. package/dist/{chunk-MFO4S7T5.js.map → chunk-PJOBOBNJ.js.map} +1 -1
  331. package/dist/{chunk-CWGYVJTQ.mjs → chunk-PORNR2NU.mjs} +3 -3
  332. package/dist/chunk-QF3UKRIJ.js +33 -0
  333. package/dist/chunk-QF3UKRIJ.js.map +1 -0
  334. package/dist/chunk-RAHXO5YU.mjs +33 -0
  335. package/dist/chunk-RAHXO5YU.mjs.map +1 -0
  336. package/dist/{chunk-BTZANNVO.js → chunk-RQ65U5G2.js} +3 -3
  337. package/dist/{chunk-BTZANNVO.js.map → chunk-RQ65U5G2.js.map} +1 -1
  338. package/dist/{chunk-Q56I63FO.mjs → chunk-RVGLLMWG.mjs} +2 -2
  339. package/dist/{chunk-VVRRAF6H.js → chunk-S2S7TK3L.js} +49 -36
  340. package/dist/chunk-S2S7TK3L.js.map +1 -0
  341. package/dist/{chunk-INIH23HU.js → chunk-VF6QXUX3.js} +2 -2
  342. package/dist/{chunk-INIH23HU.js.map → chunk-VF6QXUX3.js.map} +1 -1
  343. package/dist/{chunk-QWC5GC2Q.mjs → chunk-WY7V5UJN.mjs} +2 -2
  344. package/dist/{chunk-OCKO7T7L.js → chunk-XQAYZBLL.js} +3 -3
  345. package/dist/{chunk-OCKO7T7L.js.map → chunk-XQAYZBLL.js.map} +1 -1
  346. package/dist/{chunk-ATGLKKXI.js → chunk-Y7ZBWTD7.js} +17 -17
  347. package/dist/{chunk-ATGLKKXI.js.map → chunk-Y7ZBWTD7.js.map} +1 -1
  348. package/dist/{chunk-7XWWI5EY.js → chunk-YFIB3YNQ.js} +11 -11
  349. package/dist/{chunk-7XWWI5EY.js.map → chunk-YFIB3YNQ.js.map} +1 -1
  350. package/dist/{chunk-UCWTF336.mjs → chunk-YWGJAB63.mjs} +2 -2
  351. package/dist/{chunk-4MPXVPBQ.mjs → chunk-YYHS2TM6.mjs} +43 -30
  352. package/dist/chunk-YYHS2TM6.mjs.map +1 -0
  353. package/dist/components/Quiz/Quiz.utils.d.ts +8 -0
  354. package/dist/components/Quiz/Quiz.utils.d.ts.map +1 -1
  355. package/dist/hooks/useAppContent/index.js +19 -19
  356. package/dist/hooks/useAppContent/index.mjs +18 -18
  357. package/dist/hooks/useComparator/index.js +1 -1
  358. package/dist/hooks/useComparator/index.mjs +1 -1
  359. package/dist/hooks/useDraftAutoSave/index.js +3 -3
  360. package/dist/hooks/useDraftAutoSave/index.mjs +2 -2
  361. package/dist/index.js +19 -19
  362. package/dist/index.mjs +18 -18
  363. package/dist/types/enemClassroom/index.d.ts +29 -2
  364. package/dist/types/enemClassroom/index.d.ts.map +1 -1
  365. package/dist/types/enemClassroom/index.js +4 -2
  366. package/dist/types/enemClassroom/index.js.map +1 -1
  367. package/dist/types/enemClassroom/index.mjs +3 -1
  368. package/dist/types/enemClassroom.d.ts +29 -2
  369. package/dist/types/enemClassroom.d.ts.map +1 -1
  370. package/dist/types/questionTypes/index.js +1 -1
  371. package/dist/types/questionTypes/index.mjs +1 -1
  372. package/dist/utils/index.js +1 -1
  373. package/dist/utils/index.mjs +1 -1
  374. package/dist/utils/renderSubjectCell/index.js +1 -1
  375. package/dist/utils/renderSubjectCell/index.mjs +1 -1
  376. package/dist/utils/renderTextCell/index.js +1 -1
  377. package/dist/utils/renderTextCell/index.mjs +1 -1
  378. package/package.json +1 -1
  379. package/dist/chunk-4MPXVPBQ.mjs.map +0 -1
  380. package/dist/chunk-DDZDNGBU.mjs.map +0 -1
  381. package/dist/chunk-ED23HOE6.mjs.map +0 -1
  382. package/dist/chunk-FL4W4S6J.mjs.map +0 -1
  383. package/dist/chunk-GYQUB3VW.js.map +0 -1
  384. package/dist/chunk-HZXXADG4.js.map +0 -1
  385. package/dist/chunk-JBAGQ7L5.js.map +0 -1
  386. package/dist/chunk-ND5M3DZA.mjs +0 -21
  387. package/dist/chunk-ND5M3DZA.mjs.map +0 -1
  388. package/dist/chunk-NQNEG4KR.mjs.map +0 -1
  389. package/dist/chunk-NYKBCQUO.js +0 -21
  390. package/dist/chunk-NYKBCQUO.js.map +0 -1
  391. package/dist/chunk-VVRRAF6H.js.map +0 -1
  392. package/dist/chunk-XX4WE4TL.js.map +0 -1
  393. /package/dist/{RichEditorCore-QZYPHNRY.mjs.map → RichEditorCore-TLAFZ5XG.mjs.map} +0 -0
  394. /package/dist/{chunk-VZJKHIHN.mjs.map → chunk-7KALNPIG.mjs.map} +0 -0
  395. /package/dist/{chunk-CFTQ24UT.mjs.map → chunk-CMYBNZ74.mjs.map} +0 -0
  396. /package/dist/{chunk-R7NS5KFE.mjs.map → chunk-CWUNF7U6.mjs.map} +0 -0
  397. /package/dist/{chunk-NAOHJW6H.mjs.map → chunk-DLHV7CZN.mjs.map} +0 -0
  398. /package/dist/{chunk-7EXSCXPK.mjs.map → chunk-DMYETMZG.mjs.map} +0 -0
  399. /package/dist/{chunk-OZWPOXVU.mjs.map → chunk-GVGDUCVF.mjs.map} +0 -0
  400. /package/dist/{chunk-LXX5KU3O.mjs.map → chunk-LMDAF6LA.mjs.map} +0 -0
  401. /package/dist/{chunk-TAABXGZL.mjs.map → chunk-O3JP6ZMQ.mjs.map} +0 -0
  402. /package/dist/{chunk-CWGYVJTQ.mjs.map → chunk-PORNR2NU.mjs.map} +0 -0
  403. /package/dist/{chunk-Q56I63FO.mjs.map → chunk-RVGLLMWG.mjs.map} +0 -0
  404. /package/dist/{chunk-QWC5GC2Q.mjs.map → chunk-WY7V5UJN.mjs.map} +0 -0
  405. /package/dist/{chunk-UCWTF336.mjs.map → chunk-YWGJAB63.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-OCKO7T7L.js","../src/components/ActivityCreate/ActivityCreate.utils.ts"],"names":[],"mappings":"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B,EAAA;AACA,IAAA;AACA,IAAA;AACN,EAAA;AAEZ;AASgB;AAWP,EAAA;AACe,IAAA;AACb,IAAA;AACI,IAAA;AACF,IAAA;AACE,IAAA;AACO,IAAA;AACF,MAAA;AACd,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAQgB;AACF,EAAA;AACd;AAmBgB;AAGK,EAAA;AACF,EAAA;AACC,IAAA;AAClB,EAAA;AACO,EAAA;AACT;AASgB;AAIP,EAAA;AACL,IAAA;AACA,IAAA;AACF,EAAA;AACF;AASgB;AAIO,EAAA;AACH,IAAA;AAClB,EAAA;AACmB,EAAA;AACD,IAAA;AAClB,EAAA;AACF;AASgB;AAIP,EAAA;AACT;AAqBgB;AAYP,EAAA;AACK,IAAA;AACE,IAAA;AACC,IAAA;AACI,IAAA;AACF,IAAA;AACf,IAAA;AACiB,IAAA;AACnB,EAAA;AACF;AAUgB;AAaP,EAAA;AACK,IAAA;AACE,IAAA;AACC,IAAA;AACI,IAAA;AACR,IAAA;AACT,IAAA;AACiB,IAAA;AACnB,EAAA;AACF;AAYgB;AASR,EAAA;AACA,EAAA;AAIJ,EAAA;AAIK,EAAA;AACF,IAAA;AACG,IAAA;AACN,IAAA;AACF,EAAA;AACF;AAWgB;AAMM,EAAA;AACX,IAAA;AACT,EAAA;AACgB,EAAA;AAEb,EAAA;AAKL;AAgBgB;AAGG,EAAA;AACR,IAAA;AACT,EAAA;AAES,EAAA;AAIW,IAAA;AACpB,EAAA;AACO,EAAA;AACT;AASgB;AAIO,EAAA;AACZ,IAAA;AACT,EAAA;AACI,EAAA;AACK,IAAA;AACT,EAAA;AACO,EAAA;AACT;AAkBgB;AAGR,EAAA;AACJ,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACE,EAAA;AACkB,EAAA;AAEpB,EAAA;AAKJ;AAQgB;AAGO,EAAA;AACvB;AASgB;AAIP,EAAA;AACT;AASgB;AAIJ,EAAA;AACZ;AASgB;AAIJ,EAAA;AACZ;ADxtBwB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-OCKO7T7L.js","sourcesContent":[null,"import type {\n ActivityFiltersData,\n PreviewQuestion,\n QuestionActivity as Question,\n SendActivityFormData,\n} from '../..';\nimport type { Lesson } from '../../types/lessons';\nimport { ActivityMode, ActivitySubtype } from '../SendActivityModal/types';\nimport { QUESTION_TYPE } from '../Quiz/useQuizStore';\nimport type {\n BackendFiltersFormat,\n ActivityDraftResponse,\n} from './ActivityCreate.types';\nimport { ActivityType } from './ActivityCreate.types';\nimport type { CreateActivityPayload } from '../../types/sendActivity';\n\n/**\n * Response format for recommended class lesson data\n */\ninterface LessonResponseData {\n draft?: {\n selectedLessons?: Lesson[];\n lessons?: Array<{\n lessonId: string;\n sequence: number;\n lesson?: Lesson;\n }>;\n };\n selectedLessons?: Lesson[];\n lessons?: Array<{\n lessonId: string;\n sequence: number;\n lesson?: Lesson;\n }>;\n}\n\n/**\n * Extract lessons from recommended class API response\n * Handles multiple response formats for backward compatibility\n *\n * @param responseData - Response data from recommended class API\n * @returns Array of Lesson objects\n *\n * @example\n * ```ts\n * const lessons = extractLessonsFromResponse({\n * draft: { selectedLessons: [...] }\n * });\n * ```\n */\nexport function extractLessonsFromResponse(\n responseData: LessonResponseData\n): Lesson[] {\n const draft = responseData.draft;\n\n // Try draft.selectedLessons first\n if (draft?.selectedLessons && draft.selectedLessons.length > 0) {\n return draft.selectedLessons;\n }\n\n // Try responseData.selectedLessons\n if (responseData.selectedLessons && responseData.selectedLessons.length > 0) {\n return responseData.selectedLessons;\n }\n\n // Try draft.lessons (extract lesson property)\n if (draft?.lessons && draft.lessons.length > 0) {\n return draft.lessons\n .map((item) => {\n if (\n item &&\n typeof item === 'object' &&\n 'lesson' in item &&\n item.lesson\n ) {\n return item.lesson;\n }\n return null;\n })\n .filter((lesson): lesson is Lesson => lesson !== null);\n }\n\n // Try responseData.lessons (extract lesson property)\n if (responseData.lessons && responseData.lessons.length > 0) {\n return responseData.lessons\n .map((item) => {\n if (\n item &&\n typeof item === 'object' &&\n 'lesson' in item &&\n item.lesson\n ) {\n return item.lesson;\n }\n return null;\n })\n .filter((lesson): lesson is Lesson => lesson !== null);\n }\n\n return [];\n}\n\n/**\n * Set of valid QUESTION_TYPE enum values for runtime validation\n */\nconst VALID_QUESTION_TYPES = new Set(Object.values(QUESTION_TYPE));\n\n/**\n * Type guard to validate if a string is a valid QUESTION_TYPE\n * @param type - String to validate\n * @returns True if type is a valid QUESTION_TYPE enum value\n */\nconst isValidQuestionType = (type: string): type is QUESTION_TYPE => {\n return VALID_QUESTION_TYPES.has(type as QUESTION_TYPE);\n};\n\n/**\n * Knowledge area interface for subject lookup\n */\nexport interface KnowledgeArea {\n id: string;\n name: string;\n}\n\n/**\n * Convert ActivityFiltersData to backend format\n *\n * @param filters - ActivityFiltersData to convert, can be null\n * @returns BackendFiltersFormat object with converted filter data\n *\n * @example\n * ```ts\n * const backendFilters = convertFiltersToBackendFormat({\n * types: ['ALTERNATIVA'],\n * subjectIds: ['math'],\n * // ...\n * });\n * ```\n */\nexport function convertFiltersToBackendFormat(\n filters: ActivityFiltersData | null\n): BackendFiltersFormat {\n if (!filters) {\n return {\n questionTypes: [],\n questionBanks: [],\n subjects: [],\n topics: [],\n subtopics: [],\n contents: [],\n };\n }\n\n return {\n questionTypes: filters.types,\n questionBanks: filters.bankIds,\n subjects: filters.subjectIds,\n topics: filters.topicIds,\n subtopics: filters.subtopicIds,\n contents: filters.contentIds,\n };\n}\n\n/**\n * Convert backend filters format to ActivityFiltersData\n *\n * @param backendFilters - BackendFiltersFormat to convert, can be null\n * @returns ActivityFiltersData object with converted filter data, or null if input is null\n *\n * @example\n * ```ts\n * const activityFilters = convertBackendFiltersToActivityFiltersData({\n * questionTypes: ['ALTERNATIVA'],\n * subjects: ['math'],\n * // ...\n * });\n * ```\n */\nexport function convertBackendFiltersToActivityFiltersData(\n backendFilters: BackendFiltersFormat | null\n): ActivityFiltersData | null {\n if (!backendFilters) {\n return null;\n }\n\n return {\n types: (backendFilters.questionTypes || []).filter(isValidQuestionType),\n bankIds: backendFilters.questionBanks || [],\n subjectIds: backendFilters.subjects || [],\n topicIds: backendFilters.topics || [],\n subtopicIds: backendFilters.subtopics || [],\n contentIds: backendFilters.contents || [],\n yearIds: [],\n };\n}\n\n/**\n * Get subject name from subjectId by searching in knowledge areas\n *\n * @param subjectId - The subject ID to look up\n * @param knowledgeAreas - Array of knowledge areas to search in\n * @returns The subject name if found, null otherwise\n *\n * @example\n * ```ts\n * const subjectName = getSubjectName('math', [\n * { id: 'math', name: 'Matemática' }\n * ]);\n * // Returns: 'Matemática'\n * ```\n */\nexport function getSubjectName(\n subjectId: string | null,\n knowledgeAreas: KnowledgeArea[]\n): string | null {\n if (!subjectId || !knowledgeAreas.length) {\n return null;\n }\n const subject = knowledgeAreas.find((area) => area.id === subjectId);\n return subject?.name || null;\n}\n\n/**\n * Get activity type label using object literal mapping\n *\n * @param type - Activity type (ActivityType enum)\n * @returns Label string for the activity type\n *\n * @example\n * ```ts\n * const label = getActivityTypeLabel(ActivityType.RASCUNHO);\n * // Returns: 'Rascunho'\n * ```\n */\nexport function getActivityTypeLabel(type: ActivityType): string {\n const activityTypeLabels: Record<ActivityType, string> = {\n [ActivityType.RASCUNHO]: 'Rascunho',\n [ActivityType.MODELO]: 'Modelo',\n [ActivityType.ATIVIDADE]: 'Atividade',\n };\n return activityTypeLabels[type];\n}\n\n/**\n * Generate activity title based on type and subject\n *\n * @param type - Activity type (ActivityType enum)\n * @param subjectId - Subject ID to get name from\n * @param knowledgeAreas - Array of knowledge areas for subject lookup\n * @returns Generated title string\n *\n * @example\n * ```ts\n * const title = generateTitle(ActivityType.RASCUNHO, 'math', [\n * { id: 'math', name: 'Matemática' }\n * ]);\n * // Returns: 'Rascunho - Matemática'\n * ```\n */\nexport function generateTitle(\n type: ActivityType,\n subjectId: string | null,\n knowledgeAreas: KnowledgeArea[]\n): string {\n const typeLabel = getActivityTypeLabel(type);\n const subjectName = getSubjectName(subjectId, knowledgeAreas);\n return subjectName ? `${typeLabel} - ${subjectName}` : typeLabel;\n}\n\n/**\n * Builds a draft title when the selection spans several subjects and no single\n * subject name applies.\n *\n * @param type - Activity type used for the label prefix\n * @returns Title string for a multi-subject draft\n *\n * @example\n * ```ts\n * generateMultiSubjectTitle(ActivityType.RASCUNHO);\n * // Returns: 'Rascunho - Diversos componentes curriculares'\n * ```\n */\nexport function generateMultiSubjectTitle(type: ActivityType): string {\n return `${getActivityTypeLabel(type)} - Diversos componentes curriculares`;\n}\n\n/**\n * Resolves the legacy single `subjectId` to send with an activity.\n *\n * The backend derives an activity's real subjects from the subjects of its\n * questions, so this field is only the legacy \"primary subject\" fallback and is\n * optional. It is therefore sent only when it is unambiguous: the subject the\n * activity already carries, or the one selected subject when exactly one is\n * filtered. With several filtered, electing one of them would be arbitrary —\n * the junction table already has the right answer.\n *\n * @param activitySubjectId - Subject already stored on the activity/draft\n * @param subjectIds - Subjects currently selected in the filters\n * @returns The subject id to send, or null to omit it\n *\n * @example\n * ```ts\n * resolveActivitySubjectId(undefined, ['bio']); // 'bio'\n * resolveActivitySubjectId(undefined, ['bio', 'fis']); // null\n * ```\n */\nexport function resolveActivitySubjectId(\n activitySubjectId: string | undefined,\n subjectIds: string[] | undefined\n): string | null {\n if (activitySubjectId) {\n return activitySubjectId;\n }\n\n return subjectIds?.length === 1 ? subjectIds[0] : null;\n}\n\n/**\n * Converte ActivityType para o formato usado na URL\n *\n * @param type - ActivityType enum value\n * @returns String representation for URL (rascunho or modelo)\n *\n * @example\n * ```ts\n * const urlType = getTypeFromUrl(ActivityType.RASCUNHO);\n * // Returns: 'rascunho'\n * ```\n */\nexport function getTypeFromUrl(type: ActivityType): string {\n switch (type) {\n case ActivityType.RASCUNHO:\n return 'rascunho';\n case ActivityType.MODELO:\n return 'modelo';\n default:\n return 'rascunho';\n }\n}\n\n/**\n * Converte string da URL para ActivityType\n *\n * @param type - String from URL (rascunho or modelo)\n * @returns ActivityType enum value\n *\n * @example\n * ```ts\n * const activityType = getTypeFromUrlString('rascunho');\n * // Returns: ActivityType.RASCUNHO\n * ```\n */\nexport function getTypeFromUrlString(type: string | undefined): ActivityType {\n switch (type) {\n case 'rascunho':\n return ActivityType.RASCUNHO;\n case 'modelo':\n return ActivityType.MODELO;\n default:\n return ActivityType.RASCUNHO;\n }\n}\n\n/**\n * Convert Question to PreviewQuestion format\n *\n * @param question - Question object to convert\n * @returns PreviewQuestion object with converted data\n *\n * @example\n * ```ts\n * const previewQuestion = convertQuestionToPreview({\n * id: 'q1',\n * statement: 'Test question',\n * questionType: 'ALTERNATIVA',\n * options: [{ id: 'opt1', option: 'Option 1' }],\n * knowledgeMatrix: [{\n * subject: { name: 'Math', color: '#000', icon: 'Math' }\n * }]\n * });\n * ```\n */\nexport function convertQuestionToPreview(question: Question): PreviewQuestion {\n const subjectInfo =\n question.knowledgeMatrix && question.knowledgeMatrix.length > 0\n ? {\n subjectName: question.knowledgeMatrix[0].subject?.name || undefined,\n subjectColor: question.knowledgeMatrix[0].subject?.color || undefined,\n iconName: question.knowledgeMatrix[0].subject?.icon || undefined,\n }\n : {};\n\n return {\n id: question.id,\n statement: question.statement,\n solutionExplanation: question.solutionExplanation ?? null,\n bank: question.questionBankYear?.questionBank?.name || undefined,\n year: question.questionBankYear?.year || undefined,\n questionType: question.questionType,\n question: question.options\n ? {\n options: question.options.map(\n (opt: { id: string; option: string; isCorrect?: boolean }) => ({\n id: opt.id,\n option: opt.option,\n isCorrect: opt.isCorrect,\n })\n ),\n correctOptionIds: question.options\n .filter((opt: { isCorrect?: boolean }) => opt.isCorrect === true)\n .map((opt: { id: string }) => opt.id),\n }\n : undefined,\n ...subjectInfo,\n };\n}\n\n/**\n * Build ISO date time string from date and time parts\n *\n * @param date - Date string in YYYY-MM-DD format\n * @param time - Time string in HH:mm format\n * @returns ISO date time string\n */\nexport function buildISODateTime(date: string, time: string): string {\n return new Date(`${date}T${time}`).toISOString();\n}\n\n/**\n * Build final date time based on exam mode\n *\n * @param formData - Form data with finalDate and finalTime\n * @param isExamMode - Whether exam mode is enabled\n * @returns ISO date time string or null for exam mode\n */\nexport function buildFinalDateTime(\n finalDate: string,\n finalTime: string,\n isExamMode: boolean,\n isInPersonExam = false\n): string | null {\n // A prova digital é aplicada num dia só: não tem prazo final a gravar. A\n // impressa tem — o aluno responde em casa ao longo de um período, e é esse\n // prazo que fecha o envio das fotos e alimenta o \"Andamento da atividade\".\n if (isExamMode && !isInPersonExam) {\n return null;\n }\n return buildISODateTime(finalDate, finalTime);\n}\n\nexport function buildSendActivityPayload(\n formData: SendActivityFormData,\n subjectId: string | null,\n questionIds: string[],\n startDateTime: string,\n finalDateTime: string | null,\n activityType?: 'ATIVIDADE' | 'PROVA',\n essayThemeId?: string | null\n): CreateActivityPayload {\n const isDigital =\n formData.subtype === ActivitySubtype.PROVA\n ? formData.mode !== ActivityMode.PRESENCIAL\n : true;\n\n return {\n title: formData.title,\n // The legacy primary subject is `.optional()` on the backend, which accepts\n // an absent key but rejects an explicit null — so it is omitted when the\n // selection spans several subjects and none is authoritative.\n ...(subjectId ? { subjectId } : {}),\n questionIds,\n subtype: formData.subtype,\n type: activityType,\n notification: formData.notification || '',\n startDate: startDateTime,\n finalDate: finalDateTime,\n canRetry: formData.canRetry,\n isDigital,\n // The backend rejects a theme on a digital activity, so it only rides along\n // on the in-person booklet that actually carries the essay sheet.\n ...(!isDigital && essayThemeId ? { essayThemeId } : {}),\n };\n}\n\n/**\n * Check if questions have changed compared to last saved state\n *\n * @param currentQuestions - Current questions array\n * @param lastSavedQuestions - Last saved questions array\n * @returns True if questions have changed\n */\nexport function hasQuestionsChanged(\n currentQuestions: Array<{ id: string }>,\n lastSavedQuestions: Array<{ id: string }>\n): boolean {\n const currentIds = currentQuestions.map((q) => q.id).join(',');\n const lastSavedIds = lastSavedQuestions.map((q) => q.id).join(',');\n return currentIds !== lastSavedIds;\n}\n\n/**\n * Parameters for shouldSkipAutoSave check\n */\ninterface AutoSaveCheckParams {\n loadingInitialQuestions: boolean;\n questionsCount: number;\n hasFirstSaveBeenDone: boolean;\n appliedFilters: ActivityFiltersData | null;\n}\n\n/**\n * Check if auto-save should be skipped based on current state\n *\n * @param params - Parameters to check\n * @returns True if auto-save should be skipped\n */\n/**\n * Parameters for building URL with preserved query params\n */\ninterface BuildUrlParams {\n newType: string;\n newId: string;\n basePath: string;\n recommendedLessonDraftId?: string;\n recommendedLessonId?: string;\n classTypeParam?: string;\n onFinishPath?: string;\n}\n\n/**\n * Build URL preserving existing query parameters\n * Used when updating URL after saving draft to maintain context for navigation\n *\n * @param params - URL building parameters\n * @returns Complete URL string with query parameters\n */\nexport function buildUrlWithParams(params: BuildUrlParams): string {\n const {\n newType,\n newId,\n basePath,\n recommendedLessonDraftId,\n recommendedLessonId,\n classTypeParam,\n onFinishPath,\n } = params;\n\n const urlParams = new URLSearchParams();\n urlParams.set('type', newType);\n urlParams.set('id', newId);\n\n if (recommendedLessonDraftId) {\n urlParams.set('recommended-class-draft', recommendedLessonDraftId);\n }\n if (recommendedLessonId) {\n urlParams.set('recommended-class', recommendedLessonId);\n }\n if (classTypeParam) {\n urlParams.set('classType', classTypeParam);\n }\n if (onFinishPath) {\n urlParams.set('onFinish', onFinishPath);\n }\n\n return `${basePath}?${urlParams.toString()}`;\n}\n\nexport function shouldSkipAutoSave(params: AutoSaveCheckParams): boolean {\n const {\n loadingInitialQuestions,\n questionsCount,\n hasFirstSaveBeenDone,\n appliedFilters,\n } = params;\n\n if (loadingInitialQuestions) {\n return true;\n }\n if (questionsCount === 0 && !hasFirstSaveBeenDone) {\n return true;\n }\n if (!appliedFilters) {\n return true;\n }\n return false;\n}\n\n/**\n * Try to extract draft from standard response format\n */\nfunction tryExtractDraftFromStandardFormat(\n responseData: ActivityDraftResponse\n): ActivityDraftResponse['data']['draft'] | undefined {\n if (responseData.data?.draft) {\n return responseData.data.draft;\n }\n if ('draft' in responseData && typeof responseData === 'object') {\n return (\n responseData as unknown as {\n draft: ActivityDraftResponse['data']['draft'];\n }\n )?.draft;\n }\n return undefined;\n}\n\n/**\n * Log error details for draft extraction failure\n */\nfunction logDraftExtractionError(response: { data: ActivityDraftResponse }) {\n console.error('❌ Resposta inválida da API ao criar rascunho:', {\n response,\n responseData: response?.data,\n responseDataData: response?.data?.data,\n responseKeys: response?.data ? Object.keys(response.data) : [],\n responseDataKeys: response?.data?.data\n ? Object.keys(response.data.data)\n : [],\n });\n}\n\n/**\n * Extract draft from API response\n * Handles multiple response formats for backward compatibility\n *\n * @param response - API response object\n * @returns Extracted draft object\n * @throws Error if draft cannot be extracted\n */\nexport function extractDraftFromResponse(response: {\n data: ActivityDraftResponse;\n}): ActivityDraftResponse['data']['draft'] {\n if (!response?.data) {\n console.error('❌ Resposta vazia da API ao criar rascunho:', response);\n throw new Error('Invalid response: empty response from API');\n }\n\n const savedDraft = tryExtractDraftFromStandardFormat(response.data);\n\n if (!savedDraft?.id) {\n logDraftExtractionError(response);\n throw new Error(\n 'Invalid response: draft data is missing. Expected structure: response.data.data.draft'\n );\n }\n\n return savedDraft;\n}\n\n/**\n * Get the recommended class endpoint URL based on class type\n *\n * @param lessonDraftId - The lesson draft ID\n * @param classTypeParam - The class type parameter (modelo or undefined)\n * @returns The endpoint URL for the recommended class\n */\nexport function getRecommendedClassEndpoint(\n lessonDraftId: string,\n classTypeParam?: string\n): string {\n const baseUrl =\n classTypeParam === 'modelo'\n ? '/recommended-class/models'\n : '/recommended-class/drafts';\n return `${baseUrl}/${lessonDraftId}`;\n}\n\n/**\n * Activity draft item for lesson draft update\n */\ninterface ActivityDraftItem {\n activityDraftId: string;\n sequence: number;\n}\n\n/**\n * Lesson item for lesson draft update\n */\ninterface LessonItem {\n lessonId: string;\n sequence: number;\n}\n\n/**\n * Current lesson data from API\n */\ninterface CurrentLessonData {\n type: string;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n activityDrafts?: ActivityDraftItem[];\n lessons?: LessonItem[];\n}\n\n/**\n * Build activity draft IDs array for lesson draft update\n *\n * @param existingActivities - Existing activity drafts from the lesson\n * @param newActivityDraftId - New activity draft ID to add\n * @returns Array of activity draft items with sequences\n */\nexport function buildActivityDraftIds(\n existingActivities: ActivityDraftItem[] | undefined,\n newActivityDraftId: string\n): ActivityDraftItem[] {\n const activities = existingActivities || [];\n return [\n ...activities.map((a) => ({\n activityDraftId: a.activityDraftId,\n sequence: a.sequence,\n })),\n {\n activityDraftId: newActivityDraftId,\n sequence: activities.length + 1,\n },\n ];\n}\n\n/**\n * Build lesson IDs array from current lesson data\n *\n * @param lessons - Lessons from the current lesson data\n * @returns Array of lesson items with sequences\n */\nexport function buildLessonIds(\n lessons: LessonItem[] | undefined\n): LessonItem[] {\n return (\n lessons?.map((l) => ({\n lessonId: l.lessonId,\n sequence: l.sequence,\n })) || []\n );\n}\n\n/**\n * Build update payload for lesson draft\n *\n * @param currentLesson - Current lesson data from API\n * @param newActivityDraftId - New activity draft ID to add\n * @returns Update payload for PATCH request\n */\nexport function buildLessonDraftUpdatePayload(\n currentLesson: CurrentLessonData,\n newActivityDraftId: string\n): {\n type: string;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n lessonIds: LessonItem[];\n activityDraftIds: ActivityDraftItem[];\n} {\n return {\n type: currentLesson.type,\n title: currentLesson.title,\n subjectId: currentLesson.subjectId,\n filters: currentLesson.filters,\n lessonIds: buildLessonIds(currentLesson.lessons),\n activityDraftIds: buildActivityDraftIds(\n currentLesson.activityDrafts,\n newActivityDraftId\n ),\n };\n}\n\n/**\n * Format a path to ensure it starts with /\n *\n * @param path - The path to format\n * @returns Path starting with /\n */\nexport function formatNavigatePath(path: string): string {\n return path.startsWith('/') ? path : `/${path}`;\n}\n\n/**\n * Activity create response data structure\n */\ninterface ActivityCreateResponseData {\n data?: {\n data?: {\n id?: string;\n };\n };\n}\n\n/**\n * Extract activity ID from create activity response\n *\n * @param response - Response from create activity API\n * @returns Activity ID or throws error if not found\n */\nexport function extractActivityIdFromResponse(\n response: ActivityCreateResponseData\n): string {\n const activityId = response?.data?.data?.id;\n if (!activityId) {\n throw new Error('ID da atividade não retornado pela API');\n }\n return activityId;\n}\n\n/**\n * Build payload for sending activity to students\n *\n * @param activityId - Activity ID\n * @param students - Array of student IDs\n * @returns Send to students payload\n */\nexport function buildSendToStudentsPayload(\n activityId: string,\n students: string[]\n): { activityId: string; students: string[] } {\n return {\n activityId,\n students,\n };\n}\n\n/**\n * Validate send activity responses\n *\n * @param createResponse - Response from create activity API\n * @param sendResponse - Response from send to students API\n * @throws Error if any response is invalid\n */\nexport function validateSendActivityResponses(\n createResponse: { data?: unknown } | undefined,\n sendResponse: { data?: unknown } | undefined\n): void {\n if (!createResponse?.data) {\n throw new Error('Resposta inválida ao criar atividade');\n }\n if (!sendResponse?.data) {\n throw new Error('Resposta inválida ao enviar atividade para estudantes');\n }\n}\n\n/**\n * Format error message from unknown error\n *\n * @param error - Error object\n * @param defaultMessage - Default message if error is not an Error instance\n * @returns Formatted error message\n */\nexport function formatErrorMessage(\n error: unknown,\n defaultMessage: string\n): string {\n return error instanceof Error ? error.message : defaultMessage;\n}\n\n/**\n * Draft data from API response\n */\ninterface DraftData {\n id: string;\n type: ActivityType;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n updatedAt?: string;\n}\n\n/**\n * Build ActivityData from draft response\n *\n * @param draft - Draft data from API\n * @param questionIds - Current question IDs\n * @returns ActivityData object\n */\nexport function buildActivityDataFromDraft(\n draft: DraftData,\n questionIds: string[]\n): {\n id: string;\n type: ActivityType;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n questionIds: string[];\n updatedAt?: string;\n} {\n return {\n id: draft.id,\n type: draft.type,\n title: draft.title,\n subjectId: draft.subjectId,\n filters: draft.filters,\n questionIds,\n updatedAt: draft.updatedAt,\n };\n}\n\n/**\n * Build partial activity update (preserves filters)\n *\n * @param prevActivity - Previous activity state\n * @param draft - New draft data\n * @param questionIds - Current question IDs\n * @returns Updated activity data\n */\nexport function buildPartialActivityUpdate(\n prevActivity: { filters: BackendFiltersFormat },\n draft: DraftData,\n questionIds: string[]\n): {\n id: string;\n type: ActivityType;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n questionIds: string[];\n updatedAt?: string;\n} {\n return {\n id: draft.id,\n type: draft.type,\n title: draft.title,\n subjectId: draft.subjectId,\n filters: prevActivity.filters,\n questionIds,\n updatedAt: draft.updatedAt,\n };\n}\n\n/**\n * Build draft payload with type override\n *\n * @param basePayload - Base payload\n * @param typeOverride - Type to override\n * @param customTitle - Custom title (optional)\n * @param subjectId - Subject ID for title generation\n * @param knowledgeAreas - Knowledge areas for title generation\n * @returns Updated payload\n */\nexport function buildPayloadWithTypeOverride<\n T extends { type: ActivityType; title: string },\n>(\n basePayload: T,\n typeOverride: ActivityType,\n customTitle: string | undefined,\n subjectId: string | null,\n knowledgeAreas: KnowledgeArea[]\n): T {\n const trimmedCustomTitle = customTitle?.trim();\n const generatedTitle = subjectId\n ? generateTitle(typeOverride, subjectId, knowledgeAreas)\n : generateMultiSubjectTitle(typeOverride);\n const title =\n trimmedCustomTitle && trimmedCustomTitle.length > 0\n ? trimmedCustomTitle\n : generatedTitle;\n\n return {\n ...basePayload,\n type: typeOverride,\n title,\n };\n}\n\n/**\n * Check if URL needs to be updated based on activity state\n *\n * @param activityId - Current activity ID\n * @param activityType - Current activity type\n * @param currentUrlType - Current URL type param\n * @param currentUrlId - Current URL id param\n * @returns True if URL needs update\n */\nexport function shouldUpdateUrl(\n activityId: string | undefined,\n activityType: ActivityType | undefined,\n currentUrlType: string | undefined,\n currentUrlId: string | undefined\n): boolean {\n if (!activityId || !activityType) {\n return false;\n }\n const urlType = getTypeFromUrl(activityType);\n return (\n !currentUrlType ||\n !currentUrlId ||\n currentUrlId !== activityId ||\n currentUrlType !== urlType\n );\n}\n\n/**\n * Pre-filters input type\n */\ntype PreFiltersInput =\n | BackendFiltersFormat\n | { filters?: BackendFiltersFormat | null }\n | null;\n\n/**\n * Resolve pre-filters from various input formats\n *\n * @param preFilters - Pre-filters in various formats\n * @returns Resolved BackendFiltersFormat or null\n */\nexport function resolvePreFilters(\n preFilters: PreFiltersInput\n): BackendFiltersFormat | null | undefined {\n if (!preFilters) {\n return null;\n }\n if (\n typeof preFilters === 'object' &&\n preFilters !== null &&\n 'filters' in preFilters\n ) {\n return preFilters.filters;\n }\n return preFilters as BackendFiltersFormat;\n}\n\n/**\n * Get initial filters data from activity or pre-filters\n *\n * @param activityFilters - Activity filters\n * @param resolvedPreFilters - Resolved pre-filters\n * @returns ActivityFiltersData or null\n */\nexport function getInitialFiltersData(\n activityFilters: BackendFiltersFormat | undefined,\n resolvedPreFilters: BackendFiltersFormat | null | undefined\n): ActivityFiltersData | null {\n if (activityFilters) {\n return convertBackendFiltersToActivityFiltersData(activityFilters);\n }\n if (resolvedPreFilters) {\n return convertBackendFiltersToActivityFiltersData(resolvedPreFilters);\n }\n return null;\n}\n\n/**\n * Parameters for checking if save should trigger on reorder\n */\ninterface ReorderSaveCheckParams {\n hasFirstSaveBeenDone: boolean;\n subjectIds: string[] | undefined;\n loadingInitialQuestions: boolean;\n isSaving: boolean;\n}\n\n/**\n * Check if save should be triggered after reordering questions\n *\n * @param params - Check parameters\n * @returns True if save should be triggered\n */\nexport function shouldTriggerSaveOnReorder(\n params: ReorderSaveCheckParams\n): boolean {\n const {\n hasFirstSaveBeenDone,\n subjectIds,\n loadingInitialQuestions,\n isSaving,\n } = params;\n const hasSubjectIds = Array.isArray(subjectIds) && subjectIds.length > 0;\n return (\n hasFirstSaveBeenDone &&\n hasSubjectIds &&\n !loadingInitialQuestions &&\n !isSaving\n );\n}\n\n/**\n * Check if filters have required subject IDs\n *\n * @param subjectIds - Subject IDs from filters\n * @returns True if at least one subject ID exists\n */\nexport function hasRequiredSubjectIds(\n subjectIds: string[] | undefined\n): boolean {\n return Array.isArray(subjectIds) && subjectIds.length > 0;\n}\n\n/**\n * Check if should save draft before adding to lesson\n *\n * @param questionsCount - Number of questions\n * @param activityDraftId - Current draft ID\n * @returns True if draft should be saved\n */\nexport function shouldSaveDraftBeforeAddingToLesson(\n questionsCount: number,\n activityDraftId: string | null | undefined\n): boolean {\n return questionsCount > 0 || !!activityDraftId;\n}\n\n/**\n * Check if should use custom callback for adding activity\n *\n * @param onAddActivityToLesson - Callback function\n * @param activityDraftId - Activity draft ID\n * @returns True if custom callback should be used\n */\nexport function shouldUseCustomAddActivityCallback(\n onAddActivityToLesson: ((id: string) => void) | undefined,\n activityDraftId: string | null | undefined\n): boolean {\n return !!(onAddActivityToLesson && activityDraftId);\n}\n\n/**\n * Check if should add activity to lesson draft automatically\n *\n * @param activityDraftId - Activity draft ID\n * @param recommendedLessonDraftId - Recommended lesson draft ID\n * @returns True if should add automatically\n */\nexport function shouldAddActivityToLessonDraft(\n activityDraftId: string | null | undefined,\n recommendedLessonDraftId: string | undefined\n): boolean {\n return !!(activityDraftId && recommendedLessonDraftId);\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-XQAYZBLL.js","../src/components/ActivityCreate/ActivityCreate.utils.ts"],"names":[],"mappings":"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B,EAAA;AACA,IAAA;AACA,IAAA;AACN,EAAA;AAEZ;AASgB;AAWP,EAAA;AACe,IAAA;AACb,IAAA;AACI,IAAA;AACF,IAAA;AACE,IAAA;AACO,IAAA;AACF,MAAA;AACd,MAAA;AACF,IAAA;AACF,EAAA;AACF;AAQgB;AACF,EAAA;AACd;AAmBgB;AAGK,EAAA;AACF,EAAA;AACC,IAAA;AAClB,EAAA;AACO,EAAA;AACT;AASgB;AAIP,EAAA;AACL,IAAA;AACA,IAAA;AACF,EAAA;AACF;AASgB;AAIO,EAAA;AACH,IAAA;AAClB,EAAA;AACmB,EAAA;AACD,IAAA;AAClB,EAAA;AACF;AASgB;AAIP,EAAA;AACT;AAqBgB;AAYP,EAAA;AACK,IAAA;AACE,IAAA;AACC,IAAA;AACI,IAAA;AACF,IAAA;AACf,IAAA;AACiB,IAAA;AACnB,EAAA;AACF;AAUgB;AAaP,EAAA;AACK,IAAA;AACE,IAAA;AACC,IAAA;AACI,IAAA;AACR,IAAA;AACT,IAAA;AACiB,IAAA;AACnB,EAAA;AACF;AAYgB;AASR,EAAA;AACA,EAAA;AAIJ,EAAA;AAIK,EAAA;AACF,IAAA;AACG,IAAA;AACN,IAAA;AACF,EAAA;AACF;AAWgB;AAMM,EAAA;AACX,IAAA;AACT,EAAA;AACgB,EAAA;AAEb,EAAA;AAKL;AAgBgB;AAGG,EAAA;AACR,IAAA;AACT,EAAA;AAES,EAAA;AAIW,IAAA;AACpB,EAAA;AACO,EAAA;AACT;AASgB;AAIO,EAAA;AACZ,IAAA;AACT,EAAA;AACI,EAAA;AACK,IAAA;AACT,EAAA;AACO,EAAA;AACT;AAkBgB;AAGR,EAAA;AACJ,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACE,EAAA;AACkB,EAAA;AAEpB,EAAA;AAKJ;AAQgB;AAGO,EAAA;AACvB;AASgB;AAIP,EAAA;AACT;AASgB;AAIJ,EAAA;AACZ;AASgB;AAIJ,EAAA;AACZ;ADxtBwB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-XQAYZBLL.js","sourcesContent":[null,"import type {\n ActivityFiltersData,\n PreviewQuestion,\n QuestionActivity as Question,\n SendActivityFormData,\n} from '../..';\nimport type { Lesson } from '../../types/lessons';\nimport { ActivityMode, ActivitySubtype } from '../SendActivityModal/types';\nimport { QUESTION_TYPE } from '../Quiz/useQuizStore';\nimport type {\n BackendFiltersFormat,\n ActivityDraftResponse,\n} from './ActivityCreate.types';\nimport { ActivityType } from './ActivityCreate.types';\nimport type { CreateActivityPayload } from '../../types/sendActivity';\n\n/**\n * Response format for recommended class lesson data\n */\ninterface LessonResponseData {\n draft?: {\n selectedLessons?: Lesson[];\n lessons?: Array<{\n lessonId: string;\n sequence: number;\n lesson?: Lesson;\n }>;\n };\n selectedLessons?: Lesson[];\n lessons?: Array<{\n lessonId: string;\n sequence: number;\n lesson?: Lesson;\n }>;\n}\n\n/**\n * Extract lessons from recommended class API response\n * Handles multiple response formats for backward compatibility\n *\n * @param responseData - Response data from recommended class API\n * @returns Array of Lesson objects\n *\n * @example\n * ```ts\n * const lessons = extractLessonsFromResponse({\n * draft: { selectedLessons: [...] }\n * });\n * ```\n */\nexport function extractLessonsFromResponse(\n responseData: LessonResponseData\n): Lesson[] {\n const draft = responseData.draft;\n\n // Try draft.selectedLessons first\n if (draft?.selectedLessons && draft.selectedLessons.length > 0) {\n return draft.selectedLessons;\n }\n\n // Try responseData.selectedLessons\n if (responseData.selectedLessons && responseData.selectedLessons.length > 0) {\n return responseData.selectedLessons;\n }\n\n // Try draft.lessons (extract lesson property)\n if (draft?.lessons && draft.lessons.length > 0) {\n return draft.lessons\n .map((item) => {\n if (\n item &&\n typeof item === 'object' &&\n 'lesson' in item &&\n item.lesson\n ) {\n return item.lesson;\n }\n return null;\n })\n .filter((lesson): lesson is Lesson => lesson !== null);\n }\n\n // Try responseData.lessons (extract lesson property)\n if (responseData.lessons && responseData.lessons.length > 0) {\n return responseData.lessons\n .map((item) => {\n if (\n item &&\n typeof item === 'object' &&\n 'lesson' in item &&\n item.lesson\n ) {\n return item.lesson;\n }\n return null;\n })\n .filter((lesson): lesson is Lesson => lesson !== null);\n }\n\n return [];\n}\n\n/**\n * Set of valid QUESTION_TYPE enum values for runtime validation\n */\nconst VALID_QUESTION_TYPES = new Set(Object.values(QUESTION_TYPE));\n\n/**\n * Type guard to validate if a string is a valid QUESTION_TYPE\n * @param type - String to validate\n * @returns True if type is a valid QUESTION_TYPE enum value\n */\nconst isValidQuestionType = (type: string): type is QUESTION_TYPE => {\n return VALID_QUESTION_TYPES.has(type as QUESTION_TYPE);\n};\n\n/**\n * Knowledge area interface for subject lookup\n */\nexport interface KnowledgeArea {\n id: string;\n name: string;\n}\n\n/**\n * Convert ActivityFiltersData to backend format\n *\n * @param filters - ActivityFiltersData to convert, can be null\n * @returns BackendFiltersFormat object with converted filter data\n *\n * @example\n * ```ts\n * const backendFilters = convertFiltersToBackendFormat({\n * types: ['ALTERNATIVA'],\n * subjectIds: ['math'],\n * // ...\n * });\n * ```\n */\nexport function convertFiltersToBackendFormat(\n filters: ActivityFiltersData | null\n): BackendFiltersFormat {\n if (!filters) {\n return {\n questionTypes: [],\n questionBanks: [],\n subjects: [],\n topics: [],\n subtopics: [],\n contents: [],\n };\n }\n\n return {\n questionTypes: filters.types,\n questionBanks: filters.bankIds,\n subjects: filters.subjectIds,\n topics: filters.topicIds,\n subtopics: filters.subtopicIds,\n contents: filters.contentIds,\n };\n}\n\n/**\n * Convert backend filters format to ActivityFiltersData\n *\n * @param backendFilters - BackendFiltersFormat to convert, can be null\n * @returns ActivityFiltersData object with converted filter data, or null if input is null\n *\n * @example\n * ```ts\n * const activityFilters = convertBackendFiltersToActivityFiltersData({\n * questionTypes: ['ALTERNATIVA'],\n * subjects: ['math'],\n * // ...\n * });\n * ```\n */\nexport function convertBackendFiltersToActivityFiltersData(\n backendFilters: BackendFiltersFormat | null\n): ActivityFiltersData | null {\n if (!backendFilters) {\n return null;\n }\n\n return {\n types: (backendFilters.questionTypes || []).filter(isValidQuestionType),\n bankIds: backendFilters.questionBanks || [],\n subjectIds: backendFilters.subjects || [],\n topicIds: backendFilters.topics || [],\n subtopicIds: backendFilters.subtopics || [],\n contentIds: backendFilters.contents || [],\n yearIds: [],\n };\n}\n\n/**\n * Get subject name from subjectId by searching in knowledge areas\n *\n * @param subjectId - The subject ID to look up\n * @param knowledgeAreas - Array of knowledge areas to search in\n * @returns The subject name if found, null otherwise\n *\n * @example\n * ```ts\n * const subjectName = getSubjectName('math', [\n * { id: 'math', name: 'Matemática' }\n * ]);\n * // Returns: 'Matemática'\n * ```\n */\nexport function getSubjectName(\n subjectId: string | null,\n knowledgeAreas: KnowledgeArea[]\n): string | null {\n if (!subjectId || !knowledgeAreas.length) {\n return null;\n }\n const subject = knowledgeAreas.find((area) => area.id === subjectId);\n return subject?.name || null;\n}\n\n/**\n * Get activity type label using object literal mapping\n *\n * @param type - Activity type (ActivityType enum)\n * @returns Label string for the activity type\n *\n * @example\n * ```ts\n * const label = getActivityTypeLabel(ActivityType.RASCUNHO);\n * // Returns: 'Rascunho'\n * ```\n */\nexport function getActivityTypeLabel(type: ActivityType): string {\n const activityTypeLabels: Record<ActivityType, string> = {\n [ActivityType.RASCUNHO]: 'Rascunho',\n [ActivityType.MODELO]: 'Modelo',\n [ActivityType.ATIVIDADE]: 'Atividade',\n };\n return activityTypeLabels[type];\n}\n\n/**\n * Generate activity title based on type and subject\n *\n * @param type - Activity type (ActivityType enum)\n * @param subjectId - Subject ID to get name from\n * @param knowledgeAreas - Array of knowledge areas for subject lookup\n * @returns Generated title string\n *\n * @example\n * ```ts\n * const title = generateTitle(ActivityType.RASCUNHO, 'math', [\n * { id: 'math', name: 'Matemática' }\n * ]);\n * // Returns: 'Rascunho - Matemática'\n * ```\n */\nexport function generateTitle(\n type: ActivityType,\n subjectId: string | null,\n knowledgeAreas: KnowledgeArea[]\n): string {\n const typeLabel = getActivityTypeLabel(type);\n const subjectName = getSubjectName(subjectId, knowledgeAreas);\n return subjectName ? `${typeLabel} - ${subjectName}` : typeLabel;\n}\n\n/**\n * Builds a draft title when the selection spans several subjects and no single\n * subject name applies.\n *\n * @param type - Activity type used for the label prefix\n * @returns Title string for a multi-subject draft\n *\n * @example\n * ```ts\n * generateMultiSubjectTitle(ActivityType.RASCUNHO);\n * // Returns: 'Rascunho - Diversos componentes curriculares'\n * ```\n */\nexport function generateMultiSubjectTitle(type: ActivityType): string {\n return `${getActivityTypeLabel(type)} - Diversos componentes curriculares`;\n}\n\n/**\n * Resolves the legacy single `subjectId` to send with an activity.\n *\n * The backend derives an activity's real subjects from the subjects of its\n * questions, so this field is only the legacy \"primary subject\" fallback and is\n * optional. It is therefore sent only when it is unambiguous: the subject the\n * activity already carries, or the one selected subject when exactly one is\n * filtered. With several filtered, electing one of them would be arbitrary —\n * the junction table already has the right answer.\n *\n * @param activitySubjectId - Subject already stored on the activity/draft\n * @param subjectIds - Subjects currently selected in the filters\n * @returns The subject id to send, or null to omit it\n *\n * @example\n * ```ts\n * resolveActivitySubjectId(undefined, ['bio']); // 'bio'\n * resolveActivitySubjectId(undefined, ['bio', 'fis']); // null\n * ```\n */\nexport function resolveActivitySubjectId(\n activitySubjectId: string | undefined,\n subjectIds: string[] | undefined\n): string | null {\n if (activitySubjectId) {\n return activitySubjectId;\n }\n\n return subjectIds?.length === 1 ? subjectIds[0] : null;\n}\n\n/**\n * Converte ActivityType para o formato usado na URL\n *\n * @param type - ActivityType enum value\n * @returns String representation for URL (rascunho or modelo)\n *\n * @example\n * ```ts\n * const urlType = getTypeFromUrl(ActivityType.RASCUNHO);\n * // Returns: 'rascunho'\n * ```\n */\nexport function getTypeFromUrl(type: ActivityType): string {\n switch (type) {\n case ActivityType.RASCUNHO:\n return 'rascunho';\n case ActivityType.MODELO:\n return 'modelo';\n default:\n return 'rascunho';\n }\n}\n\n/**\n * Converte string da URL para ActivityType\n *\n * @param type - String from URL (rascunho or modelo)\n * @returns ActivityType enum value\n *\n * @example\n * ```ts\n * const activityType = getTypeFromUrlString('rascunho');\n * // Returns: ActivityType.RASCUNHO\n * ```\n */\nexport function getTypeFromUrlString(type: string | undefined): ActivityType {\n switch (type) {\n case 'rascunho':\n return ActivityType.RASCUNHO;\n case 'modelo':\n return ActivityType.MODELO;\n default:\n return ActivityType.RASCUNHO;\n }\n}\n\n/**\n * Convert Question to PreviewQuestion format\n *\n * @param question - Question object to convert\n * @returns PreviewQuestion object with converted data\n *\n * @example\n * ```ts\n * const previewQuestion = convertQuestionToPreview({\n * id: 'q1',\n * statement: 'Test question',\n * questionType: 'ALTERNATIVA',\n * options: [{ id: 'opt1', option: 'Option 1' }],\n * knowledgeMatrix: [{\n * subject: { name: 'Math', color: '#000', icon: 'Math' }\n * }]\n * });\n * ```\n */\nexport function convertQuestionToPreview(question: Question): PreviewQuestion {\n const subjectInfo =\n question.knowledgeMatrix && question.knowledgeMatrix.length > 0\n ? {\n subjectName: question.knowledgeMatrix[0].subject?.name || undefined,\n subjectColor: question.knowledgeMatrix[0].subject?.color || undefined,\n iconName: question.knowledgeMatrix[0].subject?.icon || undefined,\n }\n : {};\n\n return {\n id: question.id,\n statement: question.statement,\n solutionExplanation: question.solutionExplanation ?? null,\n bank: question.questionBankYear?.questionBank?.name || undefined,\n year: question.questionBankYear?.year || undefined,\n questionType: question.questionType,\n question: question.options\n ? {\n options: question.options.map(\n (opt: { id: string; option: string; isCorrect?: boolean }) => ({\n id: opt.id,\n option: opt.option,\n isCorrect: opt.isCorrect,\n })\n ),\n correctOptionIds: question.options\n .filter((opt: { isCorrect?: boolean }) => opt.isCorrect === true)\n .map((opt: { id: string }) => opt.id),\n }\n : undefined,\n ...subjectInfo,\n };\n}\n\n/**\n * Build ISO date time string from date and time parts\n *\n * @param date - Date string in YYYY-MM-DD format\n * @param time - Time string in HH:mm format\n * @returns ISO date time string\n */\nexport function buildISODateTime(date: string, time: string): string {\n return new Date(`${date}T${time}`).toISOString();\n}\n\n/**\n * Build final date time based on exam mode\n *\n * @param formData - Form data with finalDate and finalTime\n * @param isExamMode - Whether exam mode is enabled\n * @returns ISO date time string or null for exam mode\n */\nexport function buildFinalDateTime(\n finalDate: string,\n finalTime: string,\n isExamMode: boolean,\n isInPersonExam = false\n): string | null {\n // A prova digital é aplicada num dia só: não tem prazo final a gravar. A\n // impressa tem — o aluno responde em casa ao longo de um período, e é esse\n // prazo que fecha o envio das fotos e alimenta o \"Andamento da atividade\".\n if (isExamMode && !isInPersonExam) {\n return null;\n }\n return buildISODateTime(finalDate, finalTime);\n}\n\nexport function buildSendActivityPayload(\n formData: SendActivityFormData,\n subjectId: string | null,\n questionIds: string[],\n startDateTime: string,\n finalDateTime: string | null,\n activityType?: 'ATIVIDADE' | 'PROVA',\n essayThemeId?: string | null\n): CreateActivityPayload {\n const isDigital =\n formData.subtype === ActivitySubtype.PROVA\n ? formData.mode !== ActivityMode.PRESENCIAL\n : true;\n\n return {\n title: formData.title,\n // The legacy primary subject is `.optional()` on the backend, which accepts\n // an absent key but rejects an explicit null — so it is omitted when the\n // selection spans several subjects and none is authoritative.\n ...(subjectId ? { subjectId } : {}),\n questionIds,\n subtype: formData.subtype,\n type: activityType,\n notification: formData.notification || '',\n startDate: startDateTime,\n finalDate: finalDateTime,\n canRetry: formData.canRetry,\n isDigital,\n // The backend rejects a theme on a digital activity, so it only rides along\n // on the in-person booklet that actually carries the essay sheet.\n ...(!isDigital && essayThemeId ? { essayThemeId } : {}),\n };\n}\n\n/**\n * Check if questions have changed compared to last saved state\n *\n * @param currentQuestions - Current questions array\n * @param lastSavedQuestions - Last saved questions array\n * @returns True if questions have changed\n */\nexport function hasQuestionsChanged(\n currentQuestions: Array<{ id: string }>,\n lastSavedQuestions: Array<{ id: string }>\n): boolean {\n const currentIds = currentQuestions.map((q) => q.id).join(',');\n const lastSavedIds = lastSavedQuestions.map((q) => q.id).join(',');\n return currentIds !== lastSavedIds;\n}\n\n/**\n * Parameters for shouldSkipAutoSave check\n */\ninterface AutoSaveCheckParams {\n loadingInitialQuestions: boolean;\n questionsCount: number;\n hasFirstSaveBeenDone: boolean;\n appliedFilters: ActivityFiltersData | null;\n}\n\n/**\n * Check if auto-save should be skipped based on current state\n *\n * @param params - Parameters to check\n * @returns True if auto-save should be skipped\n */\n/**\n * Parameters for building URL with preserved query params\n */\ninterface BuildUrlParams {\n newType: string;\n newId: string;\n basePath: string;\n recommendedLessonDraftId?: string;\n recommendedLessonId?: string;\n classTypeParam?: string;\n onFinishPath?: string;\n}\n\n/**\n * Build URL preserving existing query parameters\n * Used when updating URL after saving draft to maintain context for navigation\n *\n * @param params - URL building parameters\n * @returns Complete URL string with query parameters\n */\nexport function buildUrlWithParams(params: BuildUrlParams): string {\n const {\n newType,\n newId,\n basePath,\n recommendedLessonDraftId,\n recommendedLessonId,\n classTypeParam,\n onFinishPath,\n } = params;\n\n const urlParams = new URLSearchParams();\n urlParams.set('type', newType);\n urlParams.set('id', newId);\n\n if (recommendedLessonDraftId) {\n urlParams.set('recommended-class-draft', recommendedLessonDraftId);\n }\n if (recommendedLessonId) {\n urlParams.set('recommended-class', recommendedLessonId);\n }\n if (classTypeParam) {\n urlParams.set('classType', classTypeParam);\n }\n if (onFinishPath) {\n urlParams.set('onFinish', onFinishPath);\n }\n\n return `${basePath}?${urlParams.toString()}`;\n}\n\nexport function shouldSkipAutoSave(params: AutoSaveCheckParams): boolean {\n const {\n loadingInitialQuestions,\n questionsCount,\n hasFirstSaveBeenDone,\n appliedFilters,\n } = params;\n\n if (loadingInitialQuestions) {\n return true;\n }\n if (questionsCount === 0 && !hasFirstSaveBeenDone) {\n return true;\n }\n if (!appliedFilters) {\n return true;\n }\n return false;\n}\n\n/**\n * Try to extract draft from standard response format\n */\nfunction tryExtractDraftFromStandardFormat(\n responseData: ActivityDraftResponse\n): ActivityDraftResponse['data']['draft'] | undefined {\n if (responseData.data?.draft) {\n return responseData.data.draft;\n }\n if ('draft' in responseData && typeof responseData === 'object') {\n return (\n responseData as unknown as {\n draft: ActivityDraftResponse['data']['draft'];\n }\n )?.draft;\n }\n return undefined;\n}\n\n/**\n * Log error details for draft extraction failure\n */\nfunction logDraftExtractionError(response: { data: ActivityDraftResponse }) {\n console.error('❌ Resposta inválida da API ao criar rascunho:', {\n response,\n responseData: response?.data,\n responseDataData: response?.data?.data,\n responseKeys: response?.data ? Object.keys(response.data) : [],\n responseDataKeys: response?.data?.data\n ? Object.keys(response.data.data)\n : [],\n });\n}\n\n/**\n * Extract draft from API response\n * Handles multiple response formats for backward compatibility\n *\n * @param response - API response object\n * @returns Extracted draft object\n * @throws Error if draft cannot be extracted\n */\nexport function extractDraftFromResponse(response: {\n data: ActivityDraftResponse;\n}): ActivityDraftResponse['data']['draft'] {\n if (!response?.data) {\n console.error('❌ Resposta vazia da API ao criar rascunho:', response);\n throw new Error('Invalid response: empty response from API');\n }\n\n const savedDraft = tryExtractDraftFromStandardFormat(response.data);\n\n if (!savedDraft?.id) {\n logDraftExtractionError(response);\n throw new Error(\n 'Invalid response: draft data is missing. Expected structure: response.data.data.draft'\n );\n }\n\n return savedDraft;\n}\n\n/**\n * Get the recommended class endpoint URL based on class type\n *\n * @param lessonDraftId - The lesson draft ID\n * @param classTypeParam - The class type parameter (modelo or undefined)\n * @returns The endpoint URL for the recommended class\n */\nexport function getRecommendedClassEndpoint(\n lessonDraftId: string,\n classTypeParam?: string\n): string {\n const baseUrl =\n classTypeParam === 'modelo'\n ? '/recommended-class/models'\n : '/recommended-class/drafts';\n return `${baseUrl}/${lessonDraftId}`;\n}\n\n/**\n * Activity draft item for lesson draft update\n */\ninterface ActivityDraftItem {\n activityDraftId: string;\n sequence: number;\n}\n\n/**\n * Lesson item for lesson draft update\n */\ninterface LessonItem {\n lessonId: string;\n sequence: number;\n}\n\n/**\n * Current lesson data from API\n */\ninterface CurrentLessonData {\n type: string;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n activityDrafts?: ActivityDraftItem[];\n lessons?: LessonItem[];\n}\n\n/**\n * Build activity draft IDs array for lesson draft update\n *\n * @param existingActivities - Existing activity drafts from the lesson\n * @param newActivityDraftId - New activity draft ID to add\n * @returns Array of activity draft items with sequences\n */\nexport function buildActivityDraftIds(\n existingActivities: ActivityDraftItem[] | undefined,\n newActivityDraftId: string\n): ActivityDraftItem[] {\n const activities = existingActivities || [];\n return [\n ...activities.map((a) => ({\n activityDraftId: a.activityDraftId,\n sequence: a.sequence,\n })),\n {\n activityDraftId: newActivityDraftId,\n sequence: activities.length + 1,\n },\n ];\n}\n\n/**\n * Build lesson IDs array from current lesson data\n *\n * @param lessons - Lessons from the current lesson data\n * @returns Array of lesson items with sequences\n */\nexport function buildLessonIds(\n lessons: LessonItem[] | undefined\n): LessonItem[] {\n return (\n lessons?.map((l) => ({\n lessonId: l.lessonId,\n sequence: l.sequence,\n })) || []\n );\n}\n\n/**\n * Build update payload for lesson draft\n *\n * @param currentLesson - Current lesson data from API\n * @param newActivityDraftId - New activity draft ID to add\n * @returns Update payload for PATCH request\n */\nexport function buildLessonDraftUpdatePayload(\n currentLesson: CurrentLessonData,\n newActivityDraftId: string\n): {\n type: string;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n lessonIds: LessonItem[];\n activityDraftIds: ActivityDraftItem[];\n} {\n return {\n type: currentLesson.type,\n title: currentLesson.title,\n subjectId: currentLesson.subjectId,\n filters: currentLesson.filters,\n lessonIds: buildLessonIds(currentLesson.lessons),\n activityDraftIds: buildActivityDraftIds(\n currentLesson.activityDrafts,\n newActivityDraftId\n ),\n };\n}\n\n/**\n * Format a path to ensure it starts with /\n *\n * @param path - The path to format\n * @returns Path starting with /\n */\nexport function formatNavigatePath(path: string): string {\n return path.startsWith('/') ? path : `/${path}`;\n}\n\n/**\n * Activity create response data structure\n */\ninterface ActivityCreateResponseData {\n data?: {\n data?: {\n id?: string;\n };\n };\n}\n\n/**\n * Extract activity ID from create activity response\n *\n * @param response - Response from create activity API\n * @returns Activity ID or throws error if not found\n */\nexport function extractActivityIdFromResponse(\n response: ActivityCreateResponseData\n): string {\n const activityId = response?.data?.data?.id;\n if (!activityId) {\n throw new Error('ID da atividade não retornado pela API');\n }\n return activityId;\n}\n\n/**\n * Build payload for sending activity to students\n *\n * @param activityId - Activity ID\n * @param students - Array of student IDs\n * @returns Send to students payload\n */\nexport function buildSendToStudentsPayload(\n activityId: string,\n students: string[]\n): { activityId: string; students: string[] } {\n return {\n activityId,\n students,\n };\n}\n\n/**\n * Validate send activity responses\n *\n * @param createResponse - Response from create activity API\n * @param sendResponse - Response from send to students API\n * @throws Error if any response is invalid\n */\nexport function validateSendActivityResponses(\n createResponse: { data?: unknown } | undefined,\n sendResponse: { data?: unknown } | undefined\n): void {\n if (!createResponse?.data) {\n throw new Error('Resposta inválida ao criar atividade');\n }\n if (!sendResponse?.data) {\n throw new Error('Resposta inválida ao enviar atividade para estudantes');\n }\n}\n\n/**\n * Format error message from unknown error\n *\n * @param error - Error object\n * @param defaultMessage - Default message if error is not an Error instance\n * @returns Formatted error message\n */\nexport function formatErrorMessage(\n error: unknown,\n defaultMessage: string\n): string {\n return error instanceof Error ? error.message : defaultMessage;\n}\n\n/**\n * Draft data from API response\n */\ninterface DraftData {\n id: string;\n type: ActivityType;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n updatedAt?: string;\n}\n\n/**\n * Build ActivityData from draft response\n *\n * @param draft - Draft data from API\n * @param questionIds - Current question IDs\n * @returns ActivityData object\n */\nexport function buildActivityDataFromDraft(\n draft: DraftData,\n questionIds: string[]\n): {\n id: string;\n type: ActivityType;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n questionIds: string[];\n updatedAt?: string;\n} {\n return {\n id: draft.id,\n type: draft.type,\n title: draft.title,\n subjectId: draft.subjectId,\n filters: draft.filters,\n questionIds,\n updatedAt: draft.updatedAt,\n };\n}\n\n/**\n * Build partial activity update (preserves filters)\n *\n * @param prevActivity - Previous activity state\n * @param draft - New draft data\n * @param questionIds - Current question IDs\n * @returns Updated activity data\n */\nexport function buildPartialActivityUpdate(\n prevActivity: { filters: BackendFiltersFormat },\n draft: DraftData,\n questionIds: string[]\n): {\n id: string;\n type: ActivityType;\n title: string;\n subjectId: string;\n filters: BackendFiltersFormat;\n questionIds: string[];\n updatedAt?: string;\n} {\n return {\n id: draft.id,\n type: draft.type,\n title: draft.title,\n subjectId: draft.subjectId,\n filters: prevActivity.filters,\n questionIds,\n updatedAt: draft.updatedAt,\n };\n}\n\n/**\n * Build draft payload with type override\n *\n * @param basePayload - Base payload\n * @param typeOverride - Type to override\n * @param customTitle - Custom title (optional)\n * @param subjectId - Subject ID for title generation\n * @param knowledgeAreas - Knowledge areas for title generation\n * @returns Updated payload\n */\nexport function buildPayloadWithTypeOverride<\n T extends { type: ActivityType; title: string },\n>(\n basePayload: T,\n typeOverride: ActivityType,\n customTitle: string | undefined,\n subjectId: string | null,\n knowledgeAreas: KnowledgeArea[]\n): T {\n const trimmedCustomTitle = customTitle?.trim();\n const generatedTitle = subjectId\n ? generateTitle(typeOverride, subjectId, knowledgeAreas)\n : generateMultiSubjectTitle(typeOverride);\n const title =\n trimmedCustomTitle && trimmedCustomTitle.length > 0\n ? trimmedCustomTitle\n : generatedTitle;\n\n return {\n ...basePayload,\n type: typeOverride,\n title,\n };\n}\n\n/**\n * Check if URL needs to be updated based on activity state\n *\n * @param activityId - Current activity ID\n * @param activityType - Current activity type\n * @param currentUrlType - Current URL type param\n * @param currentUrlId - Current URL id param\n * @returns True if URL needs update\n */\nexport function shouldUpdateUrl(\n activityId: string | undefined,\n activityType: ActivityType | undefined,\n currentUrlType: string | undefined,\n currentUrlId: string | undefined\n): boolean {\n if (!activityId || !activityType) {\n return false;\n }\n const urlType = getTypeFromUrl(activityType);\n return (\n !currentUrlType ||\n !currentUrlId ||\n currentUrlId !== activityId ||\n currentUrlType !== urlType\n );\n}\n\n/**\n * Pre-filters input type\n */\ntype PreFiltersInput =\n | BackendFiltersFormat\n | { filters?: BackendFiltersFormat | null }\n | null;\n\n/**\n * Resolve pre-filters from various input formats\n *\n * @param preFilters - Pre-filters in various formats\n * @returns Resolved BackendFiltersFormat or null\n */\nexport function resolvePreFilters(\n preFilters: PreFiltersInput\n): BackendFiltersFormat | null | undefined {\n if (!preFilters) {\n return null;\n }\n if (\n typeof preFilters === 'object' &&\n preFilters !== null &&\n 'filters' in preFilters\n ) {\n return preFilters.filters;\n }\n return preFilters as BackendFiltersFormat;\n}\n\n/**\n * Get initial filters data from activity or pre-filters\n *\n * @param activityFilters - Activity filters\n * @param resolvedPreFilters - Resolved pre-filters\n * @returns ActivityFiltersData or null\n */\nexport function getInitialFiltersData(\n activityFilters: BackendFiltersFormat | undefined,\n resolvedPreFilters: BackendFiltersFormat | null | undefined\n): ActivityFiltersData | null {\n if (activityFilters) {\n return convertBackendFiltersToActivityFiltersData(activityFilters);\n }\n if (resolvedPreFilters) {\n return convertBackendFiltersToActivityFiltersData(resolvedPreFilters);\n }\n return null;\n}\n\n/**\n * Parameters for checking if save should trigger on reorder\n */\ninterface ReorderSaveCheckParams {\n hasFirstSaveBeenDone: boolean;\n subjectIds: string[] | undefined;\n loadingInitialQuestions: boolean;\n isSaving: boolean;\n}\n\n/**\n * Check if save should be triggered after reordering questions\n *\n * @param params - Check parameters\n * @returns True if save should be triggered\n */\nexport function shouldTriggerSaveOnReorder(\n params: ReorderSaveCheckParams\n): boolean {\n const {\n hasFirstSaveBeenDone,\n subjectIds,\n loadingInitialQuestions,\n isSaving,\n } = params;\n const hasSubjectIds = Array.isArray(subjectIds) && subjectIds.length > 0;\n return (\n hasFirstSaveBeenDone &&\n hasSubjectIds &&\n !loadingInitialQuestions &&\n !isSaving\n );\n}\n\n/**\n * Check if filters have required subject IDs\n *\n * @param subjectIds - Subject IDs from filters\n * @returns True if at least one subject ID exists\n */\nexport function hasRequiredSubjectIds(\n subjectIds: string[] | undefined\n): boolean {\n return Array.isArray(subjectIds) && subjectIds.length > 0;\n}\n\n/**\n * Check if should save draft before adding to lesson\n *\n * @param questionsCount - Number of questions\n * @param activityDraftId - Current draft ID\n * @returns True if draft should be saved\n */\nexport function shouldSaveDraftBeforeAddingToLesson(\n questionsCount: number,\n activityDraftId: string | null | undefined\n): boolean {\n return questionsCount > 0 || !!activityDraftId;\n}\n\n/**\n * Check if should use custom callback for adding activity\n *\n * @param onAddActivityToLesson - Callback function\n * @param activityDraftId - Activity draft ID\n * @returns True if custom callback should be used\n */\nexport function shouldUseCustomAddActivityCallback(\n onAddActivityToLesson: ((id: string) => void) | undefined,\n activityDraftId: string | null | undefined\n): boolean {\n return !!(onAddActivityToLesson && activityDraftId);\n}\n\n/**\n * Check if should add activity to lesson draft automatically\n *\n * @param activityDraftId - Activity draft ID\n * @param recommendedLessonDraftId - Recommended lesson draft ID\n * @returns True if should add automatically\n */\nexport function shouldAddActivityToLessonDraft(\n activityDraftId: string | null | undefined,\n recommendedLessonDraftId: string | undefined\n): boolean {\n return !!(activityDraftId && recommendedLessonDraftId);\n}\n"]}
@@ -8,7 +8,7 @@ var _chunkAL6GXN2Mjs = require('./chunk-AL6GXN2M.js');
8
8
 
9
9
 
10
10
 
11
- var _chunkBTZANNVOjs = require('./chunk-BTZANNVO.js');
11
+ var _chunkRQ65U5G2js = require('./chunk-RQ65U5G2.js');
12
12
 
13
13
 
14
14
  var _chunkQ3KAPJHLjs = require('./chunk-Q3KAPJHL.js');
@@ -30,10 +30,10 @@ var _chunkYCOW5GXGjs = require('./chunk-YCOW5GXG.js');
30
30
 
31
31
 
32
32
 
33
- var _chunkQFWY46XUjs = require('./chunk-QFWY46XU.js');
33
+ var _chunkIMDS5NQLjs = require('./chunk-IMDS5NQL.js');
34
34
 
35
35
 
36
- var _chunkGYQUB3VWjs = require('./chunk-GYQUB3VW.js');
36
+ var _chunkBBFV3NDFjs = require('./chunk-BBFV3NDF.js');
37
37
 
38
38
 
39
39
  var _chunk4XUEJUISjs = require('./chunk-4XUEJUIS.js');
@@ -209,7 +209,7 @@ var renderQuestionTrueOrFalse = ({
209
209
  };
210
210
  });
211
211
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
212
- _chunkBTZANNVOjs.TrueFalseStatementList,
212
+ _chunkRQ65U5G2js.TrueFalseStatementList,
213
213
  {
214
214
  statements,
215
215
  showCorrectness: shouldShowStatus
@@ -241,7 +241,7 @@ var renderQuestionFill = ({
241
241
  question,
242
242
  result
243
243
  }) => {
244
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBTZANNVOjs.FillQuestionContent, { question, result });
244
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRQ65U5G2js.FillQuestionContent, { question, result });
245
245
  };
246
246
 
247
247
  // src/utils/questionRenderer/image/index.tsx
@@ -250,17 +250,17 @@ var renderQuestionImage = ({
250
250
  question,
251
251
  result
252
252
  }) => {
253
- const correctPoint = _chunkQFWY46XUjs.parseImageCorrectPoint.call(void 0,
253
+ const correctPoint = _chunkIMDS5NQLjs.parseImageCorrectPoint.call(void 0,
254
254
  _optionalChain([question, 'optionalAccess', _47 => _47.options])
255
255
  );
256
- const studentPoint = _chunkQFWY46XUjs.parseImageStudentPoint.call(void 0, result);
256
+ const studentPoint = _chunkIMDS5NQLjs.parseImageStudentPoint.call(void 0, result);
257
257
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
258
- _chunkQFWY46XUjs.ImageAnswerView,
258
+ _chunkIMDS5NQLjs.ImageAnswerView,
259
259
  {
260
260
  imageUrl: _nullishCoalesce(_optionalChain([question, 'optionalAccess', _48 => _48.additionalContent]), () => ( "")),
261
261
  correctPoint,
262
262
  studentPoint,
263
- toleranceRadius: _nullishCoalesce(_optionalChain([result, 'optionalAccess', _49 => _49.imageTolerance]), () => ( _chunkQFWY46XUjs.DEFAULT_IMAGE_TOLERANCE))
263
+ toleranceRadius: _nullishCoalesce(_optionalChain([result, 'optionalAccess', _49 => _49.imageTolerance]), () => ( _chunkIMDS5NQLjs.DEFAULT_IMAGE_TOLERANCE))
264
264
  }
265
265
  );
266
266
  };
@@ -336,20 +336,20 @@ var renderQuestionConnectDots = ({
336
336
  {
337
337
  className: _chunkTN3AYOMVjs.cn.call(void 0,
338
338
  "grid grid-cols-[1fr_auto] items-center gap-4 p-2 rounded-md border",
339
- canShowCorrectness && hasAnswered ? _chunkQFWY46XUjs.getStatusStyles.call(void 0, variantCorrect) : ""
339
+ canShowCorrectness && hasAnswered ? _chunkIMDS5NQLjs.getStatusStyles.call(void 0, variantCorrect) : ""
340
340
  ),
341
341
  children: [
342
342
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
343
343
  _chunk5W7C4GZVjs.HtmlMathRenderer_default,
344
344
  {
345
- content: _chunkGYQUB3VWjs.prependLetterToHtml.call(void 0,
345
+ content: _chunkBBFV3NDFjs.prependLetterToHtml.call(void 0,
346
346
  getLetterByIndex(index),
347
347
  pair.leftItem
348
348
  ),
349
349
  className: "text-text-900 text-sm"
350
350
  }
351
351
  ),
352
- canShowCorrectness && hasAnswered && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-shrink-0", children: _chunkBTZANNVOjs.getStatusBadge.call(void 0, variantCorrect) })
352
+ canShowCorrectness && hasAnswered && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-shrink-0", children: _chunkRQ65U5G2js.getStatusBadge.call(void 0, variantCorrect) })
353
353
  ]
354
354
  }
355
355
  ),
@@ -1069,11 +1069,11 @@ var CorrectActivityModal = ({
1069
1069
  const isEssayWithLocalCorrection = questionData.question.questionType === "DISSERTATIVA" /* DISSERTATIVA */ && _optionalChain([localCorrection, 'optionalAccess', _104 => _104.isSaved]) && _optionalChain([localCorrection, 'optionalAccess', _105 => _105.isCorrect]) != null;
1070
1070
  let badgeConfig;
1071
1071
  if (isEssayWithLocalCorrection) {
1072
- const localStatus = localCorrection.isCorrect ? _chunkBTZANNVOjs.QUESTION_STATUS.CORRETA : _chunkBTZANNVOjs.QUESTION_STATUS.INCORRETA;
1073
- badgeConfig = _chunkBTZANNVOjs.getQuestionStatusBadgeConfig.call(void 0, localStatus);
1072
+ const localStatus = localCorrection.isCorrect ? _chunkRQ65U5G2js.QUESTION_STATUS.CORRETA : _chunkRQ65U5G2js.QUESTION_STATUS.INCORRETA;
1073
+ badgeConfig = _chunkRQ65U5G2js.getQuestionStatusBadgeConfig.call(void 0, localStatus);
1074
1074
  } else {
1075
- const status = _chunkBTZANNVOjs.getQuestionStatusFromData.call(void 0, questionData);
1076
- badgeConfig = _chunkBTZANNVOjs.getQuestionStatusBadgeConfig.call(void 0, status);
1075
+ const status = _chunkRQ65U5G2js.getQuestionStatusFromData.call(void 0, questionData);
1076
+ badgeConfig = _chunkRQ65U5G2js.getQuestionStatusBadgeConfig.call(void 0, status);
1077
1077
  }
1078
1078
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1079
1079
  _chunk2WW23BFOjs.CardAccordation,
@@ -1131,4 +1131,4 @@ var CorrectActivityModal_default = CorrectActivityModal;
1131
1131
 
1132
1132
 
1133
1133
  exports.renderFromMap = renderFromMap; exports.CorrectActivityModal_default = CorrectActivityModal_default;
1134
- //# sourceMappingURL=chunk-ATGLKKXI.js.map
1134
+ //# sourceMappingURL=chunk-Y7ZBWTD7.js.map