analytica-frontend-lib 1.6.76 → 1.6.78

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 (473) hide show
  1. package/dist/AccessReportModal/index.js +4 -5
  2. package/dist/AccessReportModal/index.js.map +1 -1
  3. package/dist/AccessReportModal/index.mjs +3 -4
  4. package/dist/AccessibilityWidget/index.js +4 -5
  5. package/dist/AccessibilityWidget/index.js.map +1 -1
  6. package/dist/AccessibilityWidget/index.mjs +3 -4
  7. package/dist/Accordation/index.js +4 -4
  8. package/dist/Accordation/index.mjs +3 -3
  9. package/dist/ActivitiesHistory/index.js +48 -49
  10. package/dist/ActivitiesHistory/index.js.map +1 -1
  11. package/dist/ActivitiesHistory/index.mjs +47 -48
  12. package/dist/ActivityCardQuestionBanks/index.d.ts.map +1 -1
  13. package/dist/ActivityCardQuestionBanks/index.js +48 -49
  14. package/dist/ActivityCardQuestionBanks/index.js.map +1 -1
  15. package/dist/ActivityCardQuestionBanks/index.mjs +47 -48
  16. package/dist/ActivityCardQuestionPreview/index.js +48 -49
  17. package/dist/ActivityCardQuestionPreview/index.js.map +1 -1
  18. package/dist/ActivityCardQuestionPreview/index.mjs +47 -48
  19. package/dist/ActivityCreate/ActivityCreateContent/index.js +48 -49
  20. package/dist/ActivityCreate/ActivityCreateContent/index.js.map +1 -1
  21. package/dist/ActivityCreate/ActivityCreateContent/index.mjs +47 -48
  22. package/dist/ActivityCreate/index.js +48 -49
  23. package/dist/ActivityCreate/index.js.map +1 -1
  24. package/dist/ActivityCreate/index.mjs +47 -48
  25. package/dist/ActivityDetails/index.js +48 -49
  26. package/dist/ActivityDetails/index.js.map +1 -1
  27. package/dist/ActivityDetails/index.mjs +47 -48
  28. package/dist/ActivityFilters/index.js +48 -49
  29. package/dist/ActivityFilters/index.js.map +1 -1
  30. package/dist/ActivityFilters/index.mjs +47 -48
  31. package/dist/ActivityPageLayout/index.js +48 -49
  32. package/dist/ActivityPageLayout/index.js.map +1 -1
  33. package/dist/ActivityPageLayout/index.mjs +47 -48
  34. package/dist/ActivityPreview/index.js +48 -49
  35. package/dist/ActivityPreview/index.js.map +1 -1
  36. package/dist/ActivityPreview/index.mjs +47 -48
  37. package/dist/AlertDialog/index.d.ts.map +1 -1
  38. package/dist/AlertDialog/index.js +3 -3
  39. package/dist/AlertDialog/index.mjs +2 -2
  40. package/dist/AlertManager/index.js +48 -49
  41. package/dist/AlertManager/index.js.map +1 -1
  42. package/dist/AlertManager/index.mjs +47 -48
  43. package/dist/AlertManagerView/index.js +4 -5
  44. package/dist/AlertManagerView/index.js.map +1 -1
  45. package/dist/AlertManagerView/index.mjs +3 -4
  46. package/dist/AnnouncementModal/index.js +4 -5
  47. package/dist/AnnouncementModal/index.js.map +1 -1
  48. package/dist/AnnouncementModal/index.mjs +3 -4
  49. package/dist/AnnouncementsGate/index.js +5 -6
  50. package/dist/AnnouncementsGate/index.js.map +1 -1
  51. package/dist/AnnouncementsGate/index.mjs +4 -5
  52. package/dist/AnswerKeyModal/index.js +4 -5
  53. package/dist/AnswerKeyModal/index.js.map +1 -1
  54. package/dist/AnswerKeyModal/index.mjs +3 -4
  55. package/dist/AppHeader/index.js +8 -9
  56. package/dist/AppHeader/index.js.map +1 -1
  57. package/dist/AppHeader/index.mjs +7 -8
  58. package/dist/CalendarCard/index.js +6 -7
  59. package/dist/CalendarCard/index.js.map +1 -1
  60. package/dist/CalendarCard/index.mjs +5 -6
  61. package/dist/Card/index.d.ts.map +1 -1
  62. package/dist/Card/index.js +3 -3
  63. package/dist/Card/index.mjs +2 -2
  64. package/dist/Chat/index.js +4 -5
  65. package/dist/Chat/index.js.map +1 -1
  66. package/dist/Chat/index.mjs +3 -4
  67. package/dist/Chatbot/index.js +4 -5
  68. package/dist/Chatbot/index.js.map +1 -1
  69. package/dist/Chatbot/index.mjs +3 -4
  70. package/dist/CheckBoxGroup/index.js +48 -49
  71. package/dist/CheckBoxGroup/index.js.map +1 -1
  72. package/dist/CheckBoxGroup/index.mjs +47 -48
  73. package/dist/ComparatorChart/ComparatorView/index.js +4 -5
  74. package/dist/ComparatorChart/ComparatorView/index.js.map +1 -1
  75. package/dist/ComparatorChart/ComparatorView/index.mjs +3 -4
  76. package/dist/CorrectActivityModal/index.js +9 -10
  77. package/dist/CorrectActivityModal/index.js.map +1 -1
  78. package/dist/CorrectActivityModal/index.mjs +8 -9
  79. package/dist/DownloadButton/index.js +6 -7
  80. package/dist/DownloadButton/index.js.map +1 -1
  81. package/dist/DownloadButton/index.mjs +5 -6
  82. package/dist/DownloadModal/index.js +4 -5
  83. package/dist/DownloadModal/index.js.map +1 -1
  84. package/dist/DownloadModal/index.mjs +3 -4
  85. package/dist/DropdownMenu/index.js +4 -5
  86. package/dist/DropdownMenu/index.js.map +1 -1
  87. package/dist/DropdownMenu/index.mjs +3 -4
  88. package/dist/EnemClassroomStartModal/index.js +8 -9
  89. package/dist/EnemClassroomStartModal/index.js.map +1 -1
  90. package/dist/EnemClassroomStartModal/index.mjs +7 -8
  91. package/dist/EnemMoment/index.js +110 -94
  92. package/dist/EnemMoment/index.js.map +1 -1
  93. package/dist/EnemMoment/index.mjs +74 -58
  94. package/dist/EnemMoment/index.mjs.map +1 -1
  95. package/dist/EnemMomentStudentModal/index.js +62 -63
  96. package/dist/EnemMomentStudentModal/index.js.map +1 -1
  97. package/dist/EnemMomentStudentModal/index.mjs +48 -49
  98. package/dist/EnemMomentStudentModal/index.mjs.map +1 -1
  99. package/dist/EssayThemePicker/index.js +3 -3
  100. package/dist/EssayThemePicker/index.mjs +2 -2
  101. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js +48 -49
  102. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js.map +1 -1
  103. package/dist/ExamDetailsLayout/ExamDetailsPage/index.mjs +47 -48
  104. package/dist/ExamPageLayout/index.js +48 -49
  105. package/dist/ExamPageLayout/index.js.map +1 -1
  106. package/dist/ExamPageLayout/index.mjs +47 -48
  107. package/dist/Forum/index.js +6 -7
  108. package/dist/Forum/index.js.map +1 -1
  109. package/dist/Forum/index.mjs +5 -6
  110. package/dist/IconButton/index.js +2 -2
  111. package/dist/IconButton/index.mjs +1 -1
  112. package/dist/LessonCardPreview/index.js +48 -49
  113. package/dist/LessonCardPreview/index.js.map +1 -1
  114. package/dist/LessonCardPreview/index.mjs +47 -48
  115. package/dist/LessonMediaSections/index.js +48 -49
  116. package/dist/LessonMediaSections/index.js.map +1 -1
  117. package/dist/LessonMediaSections/index.mjs +47 -48
  118. package/dist/LessonsCatalog/index.js +48 -49
  119. package/dist/LessonsCatalog/index.js.map +1 -1
  120. package/dist/LessonsCatalog/index.mjs +47 -48
  121. package/dist/Modal/index.d.ts +11 -1
  122. package/dist/Modal/index.d.ts.map +1 -1
  123. package/dist/Modal/index.js +3 -4
  124. package/dist/Modal/index.js.map +1 -1
  125. package/dist/Modal/index.mjs +2 -3
  126. package/dist/MultiCheckSelect/index.js +5 -6
  127. package/dist/MultiCheckSelect/index.js.map +1 -1
  128. package/dist/MultiCheckSelect/index.mjs +4 -5
  129. package/dist/NotificationCard/index.js +6 -7
  130. package/dist/NotificationCard/index.js.map +1 -1
  131. package/dist/NotificationCard/index.mjs +5 -6
  132. package/dist/PerformanceReportModal/index.js +4 -5
  133. package/dist/PerformanceReportModal/index.js.map +1 -1
  134. package/dist/PerformanceReportModal/index.mjs +3 -4
  135. package/dist/PrintableUsersTable/index.js +48 -49
  136. package/dist/PrintableUsersTable/index.js.map +1 -1
  137. package/dist/PrintableUsersTable/index.mjs +47 -48
  138. package/dist/ProgressModal/index.js +4 -5
  139. package/dist/ProgressModal/index.js.map +1 -1
  140. package/dist/ProgressModal/index.mjs +3 -4
  141. package/dist/QuestionsPerformanceCard/index.js +49 -50
  142. package/dist/QuestionsPerformanceCard/index.js.map +1 -1
  143. package/dist/QuestionsPerformanceCard/index.mjs +48 -49
  144. package/dist/Quiz/QuizResult/index.js +4 -4
  145. package/dist/Quiz/QuizResult/index.mjs +3 -3
  146. package/dist/Quiz/index.d.ts.map +1 -1
  147. package/dist/Quiz/index.js +8 -9
  148. package/dist/Quiz/index.js.map +1 -1
  149. package/dist/Quiz/index.mjs +7 -8
  150. package/dist/QuizTimer/index.d.ts +12 -0
  151. package/dist/QuizTimer/index.d.ts.map +1 -1
  152. package/dist/QuizTimer/index.js +4 -2
  153. package/dist/QuizTimer/index.js.map +1 -1
  154. package/dist/QuizTimer/index.mjs +4 -2
  155. package/dist/RecommendedLessonCreate/index.js +48 -49
  156. package/dist/RecommendedLessonCreate/index.js.map +1 -1
  157. package/dist/RecommendedLessonCreate/index.mjs +47 -48
  158. package/dist/RecommendedLessonDetails/index.js +11 -12
  159. package/dist/RecommendedLessonDetails/index.js.map +1 -1
  160. package/dist/RecommendedLessonDetails/index.mjs +10 -11
  161. package/dist/RecommendedLessonsHistory/index.js +48 -49
  162. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  163. package/dist/RecommendedLessonsHistory/index.mjs +47 -48
  164. package/dist/ReportDetailModal/index.js +5 -6
  165. package/dist/ReportDetailModal/index.js.map +1 -1
  166. package/dist/ReportDetailModal/index.mjs +4 -5
  167. package/dist/RichEditor/index.js +6 -7
  168. package/dist/RichEditor/index.js.map +1 -1
  169. package/dist/RichEditor/index.mjs +5 -6
  170. package/dist/{RichEditorCore-62NIM7PC.js → RichEditorCore-6OT3VNJR.js} +15 -16
  171. package/dist/RichEditorCore-6OT3VNJR.js.map +1 -0
  172. package/dist/{RichEditorCore-CCO3SSSU.mjs → RichEditorCore-IF6JQHEO.mjs} +6 -7
  173. package/dist/{RichEditorCore-CCO3SSSU.mjs.map → RichEditorCore-IF6JQHEO.mjs.map} +1 -1
  174. package/dist/Search/index.js +5 -6
  175. package/dist/Search/index.js.map +1 -1
  176. package/dist/Search/index.mjs +4 -5
  177. package/dist/SendActivityModal/SendActivityModal.js +48 -49
  178. package/dist/SendActivityModal/SendActivityModal.js.map +1 -1
  179. package/dist/SendActivityModal/SendActivityModal.mjs +47 -48
  180. package/dist/SendActivityModal/index.js +48 -49
  181. package/dist/SendActivityModal/index.js.map +1 -1
  182. package/dist/SendActivityModal/index.mjs +47 -48
  183. package/dist/SendLessonModal/index.js +48 -49
  184. package/dist/SendLessonModal/index.js.map +1 -1
  185. package/dist/SendLessonModal/index.mjs +47 -48
  186. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js +48 -49
  187. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js.map +1 -1
  188. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.mjs +47 -48
  189. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js +6 -7
  190. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js.map +1 -1
  191. package/dist/SimulatedPerformance/useSimulatedPerformance/index.mjs +5 -6
  192. package/dist/SimulatedStudentSimulationsModal/index.js +8 -9
  193. package/dist/SimulatedStudentSimulationsModal/index.js.map +1 -1
  194. package/dist/SimulatedStudentSimulationsModal/index.mjs +7 -8
  195. package/dist/SimulationSummaryCards/index.js +5 -5
  196. package/dist/SimulationSummaryCards/index.mjs +4 -4
  197. package/dist/SimulationsPage/index.js +48 -49
  198. package/dist/SimulationsPage/index.js.map +1 -1
  199. package/dist/SimulationsPage/index.mjs +47 -48
  200. package/dist/StudentLessonProgressModal/index.js +6 -7
  201. package/dist/StudentLessonProgressModal/index.js.map +1 -1
  202. package/dist/StudentLessonProgressModal/index.mjs +5 -6
  203. package/dist/StudentPerformanceDetailsModal/index.js +9 -10
  204. package/dist/StudentPerformanceDetailsModal/index.js.map +1 -1
  205. package/dist/StudentPerformanceDetailsModal/index.mjs +8 -9
  206. package/dist/Support/TicketModal/index.js +4 -5
  207. package/dist/Support/TicketModal/index.js.map +1 -1
  208. package/dist/Support/TicketModal/index.mjs +3 -4
  209. package/dist/Support/index.js +5 -6
  210. package/dist/Support/index.js.map +1 -1
  211. package/dist/Support/index.mjs +4 -5
  212. package/dist/TableProvider/index.js +48 -49
  213. package/dist/TableProvider/index.js.map +1 -1
  214. package/dist/TableProvider/index.mjs +47 -48
  215. package/dist/UnifiedDraftModelPage/index.js +48 -49
  216. package/dist/UnifiedDraftModelPage/index.js.map +1 -1
  217. package/dist/UnifiedDraftModelPage/index.mjs +47 -48
  218. package/dist/UnifiedHistoryPage/index.js +48 -49
  219. package/dist/UnifiedHistoryPage/index.js.map +1 -1
  220. package/dist/UnifiedHistoryPage/index.mjs +47 -48
  221. package/dist/VideoPlayer/index.js +7 -8
  222. package/dist/VideoPlayer/index.js.map +1 -1
  223. package/dist/VideoPlayer/index.mjs +6 -7
  224. package/dist/Whiteboard/index.js +4 -5
  225. package/dist/Whiteboard/index.js.map +1 -1
  226. package/dist/Whiteboard/index.mjs +3 -4
  227. package/dist/{chunk-EVBQNVQW.mjs → chunk-233FSBU7.mjs} +5 -5
  228. package/dist/{chunk-JU63EMZM.js → chunk-24DQFREC.js} +3 -3
  229. package/dist/{chunk-JU63EMZM.js.map → chunk-24DQFREC.js.map} +1 -1
  230. package/dist/{chunk-QFXSQKW3.mjs → chunk-254EBPMW.mjs} +22 -22
  231. package/dist/{chunk-QFXSQKW3.mjs.map → chunk-254EBPMW.mjs.map} +1 -1
  232. package/dist/{chunk-SFQVZ4KQ.js → chunk-2ETPIOCD.js} +3 -3
  233. package/dist/{chunk-SFQVZ4KQ.js.map → chunk-2ETPIOCD.js.map} +1 -1
  234. package/dist/{chunk-RCNIBRZY.js → chunk-2VTJ2PKF.js} +10 -10
  235. package/dist/{chunk-RCNIBRZY.js.map → chunk-2VTJ2PKF.js.map} +1 -1
  236. package/dist/{chunk-B35D5S4G.js → chunk-2ZMGNCMI.js} +6 -6
  237. package/dist/{chunk-B35D5S4G.js.map → chunk-2ZMGNCMI.js.map} +1 -1
  238. package/dist/{chunk-QEPKR6ZF.js → chunk-3KSRDIS2.js} +20 -20
  239. package/dist/{chunk-QEPKR6ZF.js.map → chunk-3KSRDIS2.js.map} +1 -1
  240. package/dist/{chunk-MUCV5ZWZ.mjs → chunk-3YF7H577.mjs} +15 -9
  241. package/dist/chunk-3YF7H577.mjs.map +1 -0
  242. package/dist/{chunk-MADPP2PW.mjs → chunk-3ZSI2KI5.mjs} +2 -2
  243. package/dist/{chunk-2W7PTFXS.mjs → chunk-42XKJV56.mjs} +2 -2
  244. package/dist/{chunk-M6TC6XRQ.mjs → chunk-55ESXRRM.mjs} +2 -2
  245. package/dist/{chunk-4MURAKPC.mjs → chunk-5DJVOLVX.mjs} +3 -3
  246. package/dist/{chunk-YVT7CT3G.mjs → chunk-5P6CBDZ6.mjs} +2 -2
  247. package/dist/{chunk-BHKTJCFD.js → chunk-5QUP5HKB.js} +3 -3
  248. package/dist/{chunk-BHKTJCFD.js.map → chunk-5QUP5HKB.js.map} +1 -1
  249. package/dist/{chunk-SFEU7BMY.mjs → chunk-5SFNRXZB.mjs} +2 -2
  250. package/dist/{chunk-6ALEXGAN.js → chunk-6U4AI5SE.js} +6 -6
  251. package/dist/{chunk-6ALEXGAN.js.map → chunk-6U4AI5SE.js.map} +1 -1
  252. package/dist/{chunk-KYY4U5SN.mjs → chunk-6Z5W5J44.mjs} +3 -3
  253. package/dist/{chunk-XOKBMLW3.js → chunk-7IGUYLSF.js} +3 -3
  254. package/dist/{chunk-XOKBMLW3.js.map → chunk-7IGUYLSF.js.map} +1 -1
  255. package/dist/{chunk-GVYGPJH3.mjs → chunk-AU5M2766.mjs} +2 -2
  256. package/dist/{chunk-2VODGC76.js → chunk-AVEMHDN2.js} +66 -44
  257. package/dist/chunk-AVEMHDN2.js.map +1 -0
  258. package/dist/{chunk-HIIOADV4.js → chunk-AZSRKBYS.js} +63 -71
  259. package/dist/chunk-AZSRKBYS.js.map +1 -0
  260. package/dist/{chunk-CY2VKNCB.js → chunk-BQIBVC6X.js} +5 -5
  261. package/dist/{chunk-CY2VKNCB.js.map → chunk-BQIBVC6X.js.map} +1 -1
  262. package/dist/{chunk-M77TQ5JJ.mjs → chunk-BU32E6BR.mjs} +4 -6
  263. package/dist/{chunk-M77TQ5JJ.mjs.map → chunk-BU32E6BR.mjs.map} +1 -1
  264. package/dist/{chunk-5CQVDUDO.js → chunk-BUNF5POU.js} +5 -5
  265. package/dist/{chunk-5CQVDUDO.js.map → chunk-BUNF5POU.js.map} +1 -1
  266. package/dist/{chunk-Z6UN4ZPW.mjs → chunk-BVHVYC7Q.mjs} +4 -4
  267. package/dist/{chunk-WJENEFDG.js → chunk-CAFVLHDV.js} +3 -3
  268. package/dist/{chunk-WJENEFDG.js.map → chunk-CAFVLHDV.js.map} +1 -1
  269. package/dist/{chunk-BVUPM6EY.js → chunk-CAQ2Q3ON.js} +2 -2
  270. package/dist/chunk-CAQ2Q3ON.js.map +1 -0
  271. package/dist/{chunk-QMPOGLAR.js → chunk-CIASXVWX.js} +3 -3
  272. package/dist/{chunk-QMPOGLAR.js.map → chunk-CIASXVWX.js.map} +1 -1
  273. package/dist/{chunk-APKEYUJ3.js → chunk-CIQLC2ZZ.js} +3 -3
  274. package/dist/{chunk-APKEYUJ3.js.map → chunk-CIQLC2ZZ.js.map} +1 -1
  275. package/dist/{chunk-36XPNLGQ.js → chunk-CW3FCWR4.js} +16 -16
  276. package/dist/{chunk-36XPNLGQ.js.map → chunk-CW3FCWR4.js.map} +1 -1
  277. package/dist/{chunk-J5VEAJN5.mjs → chunk-CWVUGZNK.mjs} +2 -2
  278. package/dist/{chunk-BCMDP6GK.mjs → chunk-DV3N2K3Y.mjs} +4 -4
  279. package/dist/{chunk-PP7SEERV.mjs → chunk-DXYSEBK3.mjs} +9 -3
  280. package/dist/chunk-DXYSEBK3.mjs.map +1 -0
  281. package/dist/{chunk-754M6HQ5.js → chunk-EJN4OP3D.js} +5 -5
  282. package/dist/{chunk-754M6HQ5.js.map → chunk-EJN4OP3D.js.map} +1 -1
  283. package/dist/{chunk-3IM2SBPO.js → chunk-F5K3HMKT.js} +4 -4
  284. package/dist/{chunk-3IM2SBPO.js.map → chunk-F5K3HMKT.js.map} +1 -1
  285. package/dist/{chunk-WMDSGVZ7.mjs → chunk-GCGSAS2Z.mjs} +48 -63
  286. package/dist/chunk-GCGSAS2Z.mjs.map +1 -0
  287. package/dist/{chunk-EXHGEJ4P.mjs → chunk-GKARHTZ2.mjs} +2 -2
  288. package/dist/{chunk-2VDCEEXB.js → chunk-GNKFBVW4.js} +3 -3
  289. package/dist/{chunk-2VDCEEXB.js.map → chunk-GNKFBVW4.js.map} +1 -1
  290. package/dist/{chunk-CDLOMECB.js → chunk-GTBPMNTJ.js} +3 -3
  291. package/dist/{chunk-CDLOMECB.js.map → chunk-GTBPMNTJ.js.map} +1 -1
  292. package/dist/{chunk-YQKAASWM.js → chunk-GXXDSBN2.js} +10 -4
  293. package/dist/chunk-GXXDSBN2.js.map +1 -0
  294. package/dist/{chunk-FASVPU6N.js → chunk-H3F4OCXC.js} +10 -10
  295. package/dist/{chunk-FASVPU6N.js.map → chunk-H3F4OCXC.js.map} +1 -1
  296. package/dist/{chunk-JCFN6KRS.mjs → chunk-HGWDB73S.mjs} +2 -2
  297. package/dist/{chunk-JXXMO7PY.mjs → chunk-HN5RW4C3.mjs} +3 -3
  298. package/dist/{chunk-I2A4EQPH.mjs → chunk-HQ2GXFK5.mjs} +6 -6
  299. package/dist/{chunk-BIPC6F6D.js → chunk-IDJ37MOU.js} +115 -115
  300. package/dist/{chunk-BIPC6F6D.js.map → chunk-IDJ37MOU.js.map} +1 -1
  301. package/dist/{chunk-TBJLNIOY.mjs → chunk-JBLYYTHN.mjs} +2 -2
  302. package/dist/{chunk-G4NK66PM.js → chunk-JTWXQ267.js} +24 -18
  303. package/dist/chunk-JTWXQ267.js.map +1 -0
  304. package/dist/{chunk-V6IC74KH.js → chunk-JXGLDRDC.js} +34 -34
  305. package/dist/{chunk-V6IC74KH.js.map → chunk-JXGLDRDC.js.map} +1 -1
  306. package/dist/{chunk-DDFIRQI5.mjs → chunk-K3E5VEBF.mjs} +56 -34
  307. package/dist/chunk-K3E5VEBF.mjs.map +1 -0
  308. package/dist/{chunk-MSBEWG26.js → chunk-K5O2IOI4.js} +8 -8
  309. package/dist/{chunk-MSBEWG26.js.map → chunk-K5O2IOI4.js.map} +1 -1
  310. package/dist/{chunk-SB5YGKXR.js → chunk-KBMLGQ5J.js} +49 -64
  311. package/dist/chunk-KBMLGQ5J.js.map +1 -0
  312. package/dist/chunk-KCZEKV7M.mjs +81 -0
  313. package/dist/chunk-KCZEKV7M.mjs.map +1 -0
  314. package/dist/{chunk-GRSN76BV.mjs → chunk-KH2R4STU.mjs} +3 -3
  315. package/dist/{chunk-7DQM34JT.js → chunk-KHYSXYPO.js} +23 -23
  316. package/dist/{chunk-7DQM34JT.js.map → chunk-KHYSXYPO.js.map} +1 -1
  317. package/dist/{chunk-V2YHMPRR.js → chunk-KJHBQQYJ.js} +5 -5
  318. package/dist/{chunk-V2YHMPRR.js.map → chunk-KJHBQQYJ.js.map} +1 -1
  319. package/dist/{chunk-ZF5NMQJZ.mjs → chunk-KUKLN3CK.mjs} +4 -4
  320. package/dist/{chunk-6AYB7CZH.js → chunk-KZQVGSR2.js} +2 -2
  321. package/dist/{chunk-6AYB7CZH.js.map → chunk-KZQVGSR2.js.map} +1 -1
  322. package/dist/{chunk-UAKRBNW2.mjs → chunk-L4T76OKM.mjs} +2 -2
  323. package/dist/{chunk-AUCXJ7LG.js → chunk-M3LQH7Y7.js} +3 -3
  324. package/dist/{chunk-AUCXJ7LG.js.map → chunk-M3LQH7Y7.js.map} +1 -1
  325. package/dist/{chunk-FQNJJH7F.js → chunk-MCXRKD56.js} +13 -13
  326. package/dist/{chunk-FQNJJH7F.js.map → chunk-MCXRKD56.js.map} +1 -1
  327. package/dist/{chunk-PY5WCBKN.mjs → chunk-MERKXOSI.mjs} +4 -4
  328. package/dist/{chunk-D3YDZF2G.js → chunk-N472HQPZ.js} +3 -3
  329. package/dist/{chunk-D3YDZF2G.js.map → chunk-N472HQPZ.js.map} +1 -1
  330. package/dist/{chunk-UPMYCGXR.js → chunk-N4K4X34Z.js} +4 -4
  331. package/dist/{chunk-UPMYCGXR.js.map → chunk-N4K4X34Z.js.map} +1 -1
  332. package/dist/{chunk-RU43UMEH.js → chunk-NFCNAFUK.js} +3 -3
  333. package/dist/{chunk-RU43UMEH.js.map → chunk-NFCNAFUK.js.map} +1 -1
  334. package/dist/{chunk-APCB5HWT.mjs → chunk-NLSDZJRR.mjs} +3 -3
  335. package/dist/{chunk-EWYIXCNF.mjs → chunk-NLUTNCLH.mjs} +5 -5
  336. package/dist/{chunk-OP4Q2KDS.mjs → chunk-NMKKMY5P.mjs} +2 -2
  337. package/dist/{chunk-WDPFO4II.mjs → chunk-NMPK336K.mjs} +2 -2
  338. package/dist/{chunk-X6BZ5IEV.mjs → chunk-NU7O6YKR.mjs} +2 -2
  339. package/dist/{chunk-ZABDSRX3.js → chunk-NUZ5K3CB.js} +4 -4
  340. package/dist/{chunk-ZABDSRX3.js.map → chunk-NUZ5K3CB.js.map} +1 -1
  341. package/dist/{chunk-N5ZGFYLA.js → chunk-NZX3BA62.js} +3 -3
  342. package/dist/{chunk-N5ZGFYLA.js.map → chunk-NZX3BA62.js.map} +1 -1
  343. package/dist/{chunk-2TLSEAL2.js → chunk-O4TRDWXJ.js} +3 -3
  344. package/dist/{chunk-2TLSEAL2.js.map → chunk-O4TRDWXJ.js.map} +1 -1
  345. package/dist/{chunk-CBI5F4ME.mjs → chunk-OMSSA4NO.mjs} +2 -2
  346. package/dist/{chunk-YGEEWLGJ.js → chunk-PKKXCX5B.js} +3 -3
  347. package/dist/{chunk-YGEEWLGJ.js.map → chunk-PKKXCX5B.js.map} +1 -1
  348. package/dist/{chunk-GYHD6QEA.mjs → chunk-PQGQ3EH5.mjs} +2 -2
  349. package/dist/{chunk-3LN5GQAC.js → chunk-Q6UIUYNF.js} +6 -8
  350. package/dist/chunk-Q6UIUYNF.js.map +1 -0
  351. package/dist/chunk-QLWBGM7H.js +81 -0
  352. package/dist/chunk-QLWBGM7H.js.map +1 -0
  353. package/dist/{chunk-IF5GW6ID.js → chunk-QZ5DCDZ2.js} +6 -6
  354. package/dist/{chunk-IF5GW6ID.js.map → chunk-QZ5DCDZ2.js.map} +1 -1
  355. package/dist/{chunk-LSUCENYD.mjs → chunk-RBKGHUSR.mjs} +2 -2
  356. package/dist/{chunk-PIZTI5SJ.js → chunk-RMCZ7C2C.js} +3 -3
  357. package/dist/{chunk-PIZTI5SJ.js.map → chunk-RMCZ7C2C.js.map} +1 -1
  358. package/dist/{chunk-LGQNMQOT.mjs → chunk-ROS5XGTQ.mjs} +2 -2
  359. package/dist/chunk-ROS5XGTQ.mjs.map +1 -0
  360. package/dist/{chunk-TEUERRDG.mjs → chunk-RV45XVXE.mjs} +2 -2
  361. package/dist/{chunk-FW6ZI2MC.mjs → chunk-UAFSWXN5.mjs} +2 -2
  362. package/dist/{chunk-QUGKQYAJ.mjs → chunk-ULVFVLFE.mjs} +4 -6
  363. package/dist/{chunk-QUGKQYAJ.mjs.map → chunk-ULVFVLFE.mjs.map} +1 -1
  364. package/dist/{chunk-ANLL2EIX.mjs → chunk-UWCGTH3U.mjs} +2 -2
  365. package/dist/{chunk-6R2LEEEP.mjs → chunk-UZF2D2GG.mjs} +2 -2
  366. package/dist/{chunk-62L3PMYE.mjs → chunk-V3OVMHZD.mjs} +2 -2
  367. package/dist/{chunk-UDITT3N3.mjs → chunk-V6ELDZ2B.mjs} +2 -2
  368. package/dist/{chunk-G7NUCBD3.js → chunk-VDPV24JJ.js} +3 -3
  369. package/dist/{chunk-G7NUCBD3.js.map → chunk-VDPV24JJ.js.map} +1 -1
  370. package/dist/{chunk-IJQOTS5O.mjs → chunk-VJUS3GC4.mjs} +2 -2
  371. package/dist/{chunk-ZUPP7R2K.js → chunk-W7BBVDBI.js} +17 -3
  372. package/dist/chunk-W7BBVDBI.js.map +1 -0
  373. package/dist/{chunk-EHQDQ5RV.js → chunk-XARMPXRN.js} +10 -12
  374. package/dist/chunk-XARMPXRN.js.map +1 -0
  375. package/dist/{chunk-MQEAEU6G.mjs → chunk-XGMRYNER.mjs} +2 -2
  376. package/dist/{chunk-MMQMVVD6.mjs → chunk-XLTD5J74.mjs} +3 -3
  377. package/dist/{chunk-L3ST5GUJ.js → chunk-XQUK7R7L.js} +17 -17
  378. package/dist/{chunk-L3ST5GUJ.js.map → chunk-XQUK7R7L.js.map} +1 -1
  379. package/dist/{chunk-OMBUOOMD.mjs → chunk-XYT542WD.mjs} +2 -2
  380. package/dist/{chunk-IZNABVXE.js → chunk-Y4IGIWP4.js} +3 -3
  381. package/dist/{chunk-IZNABVXE.js.map → chunk-Y4IGIWP4.js.map} +1 -1
  382. package/dist/{chunk-COWOGT7U.mjs → chunk-YZWFDSTC.mjs} +2 -2
  383. package/dist/{chunk-M2FN7CNS.mjs → chunk-Z4L2DWMX.mjs} +17 -3
  384. package/dist/chunk-Z4L2DWMX.mjs.map +1 -0
  385. package/dist/chunk-Z75J66LL.mjs +149 -0
  386. package/dist/chunk-Z75J66LL.mjs.map +1 -0
  387. package/dist/{chunk-CWIJ7RXR.js → chunk-ZHUFICW3.js} +3 -3
  388. package/dist/{chunk-CWIJ7RXR.js.map → chunk-ZHUFICW3.js.map} +1 -1
  389. package/dist/{chunk-Q5XGBTOY.js → chunk-ZNITTMV5.js} +3 -3
  390. package/dist/{chunk-Q5XGBTOY.js.map → chunk-ZNITTMV5.js.map} +1 -1
  391. package/dist/components/EnemMoment/HeaderFilters.d.ts +12 -1
  392. package/dist/components/EnemMoment/HeaderFilters.d.ts.map +1 -1
  393. package/dist/components/EnemMoment/types.d.ts +10 -1
  394. package/dist/components/EnemMoment/types.d.ts.map +1 -1
  395. package/dist/hooks/useAppContent/index.js +48 -49
  396. package/dist/hooks/useAppContent/index.js.map +1 -1
  397. package/dist/hooks/useAppContent/index.mjs +47 -48
  398. package/dist/hooks/useResizableColumns.d.ts +20 -9
  399. package/dist/hooks/useResizableColumns.d.ts.map +1 -1
  400. package/dist/hooks/useScreen/index.js +2 -2
  401. package/dist/hooks/useScreen/index.mjs +1 -1
  402. package/dist/index.js +48 -49
  403. package/dist/index.js.map +1 -1
  404. package/dist/index.mjs +47 -48
  405. package/dist/store/layoutPreferencesStore.d.ts +12 -24
  406. package/dist/store/layoutPreferencesStore.d.ts.map +1 -1
  407. package/package.json +1 -1
  408. package/dist/RichEditorCore-62NIM7PC.js.map +0 -1
  409. package/dist/chunk-2EDRPEYL.mjs +0 -157
  410. package/dist/chunk-2EDRPEYL.mjs.map +0 -1
  411. package/dist/chunk-2VODGC76.js.map +0 -1
  412. package/dist/chunk-3LN5GQAC.js.map +0 -1
  413. package/dist/chunk-BVUPM6EY.js.map +0 -1
  414. package/dist/chunk-CH6BWMSQ.js +0 -17
  415. package/dist/chunk-CH6BWMSQ.js.map +0 -1
  416. package/dist/chunk-DDFIRQI5.mjs.map +0 -1
  417. package/dist/chunk-EHQDQ5RV.js.map +0 -1
  418. package/dist/chunk-G4NK66PM.js.map +0 -1
  419. package/dist/chunk-HIIOADV4.js.map +0 -1
  420. package/dist/chunk-JSH3BQZ7.mjs +0 -17
  421. package/dist/chunk-JSH3BQZ7.mjs.map +0 -1
  422. package/dist/chunk-LGQNMQOT.mjs.map +0 -1
  423. package/dist/chunk-LMDAF6LA.mjs +0 -51
  424. package/dist/chunk-LMDAF6LA.mjs.map +0 -1
  425. package/dist/chunk-M2FN7CNS.mjs.map +0 -1
  426. package/dist/chunk-MUCV5ZWZ.mjs.map +0 -1
  427. package/dist/chunk-PJOBOBNJ.js +0 -51
  428. package/dist/chunk-PJOBOBNJ.js.map +0 -1
  429. package/dist/chunk-PP7SEERV.mjs.map +0 -1
  430. package/dist/chunk-SB5YGKXR.js.map +0 -1
  431. package/dist/chunk-WMDSGVZ7.mjs.map +0 -1
  432. package/dist/chunk-YQKAASWM.js.map +0 -1
  433. package/dist/chunk-ZUPP7R2K.js.map +0 -1
  434. /package/dist/{chunk-EVBQNVQW.mjs.map → chunk-233FSBU7.mjs.map} +0 -0
  435. /package/dist/{chunk-MADPP2PW.mjs.map → chunk-3ZSI2KI5.mjs.map} +0 -0
  436. /package/dist/{chunk-2W7PTFXS.mjs.map → chunk-42XKJV56.mjs.map} +0 -0
  437. /package/dist/{chunk-M6TC6XRQ.mjs.map → chunk-55ESXRRM.mjs.map} +0 -0
  438. /package/dist/{chunk-4MURAKPC.mjs.map → chunk-5DJVOLVX.mjs.map} +0 -0
  439. /package/dist/{chunk-YVT7CT3G.mjs.map → chunk-5P6CBDZ6.mjs.map} +0 -0
  440. /package/dist/{chunk-SFEU7BMY.mjs.map → chunk-5SFNRXZB.mjs.map} +0 -0
  441. /package/dist/{chunk-KYY4U5SN.mjs.map → chunk-6Z5W5J44.mjs.map} +0 -0
  442. /package/dist/{chunk-GVYGPJH3.mjs.map → chunk-AU5M2766.mjs.map} +0 -0
  443. /package/dist/{chunk-Z6UN4ZPW.mjs.map → chunk-BVHVYC7Q.mjs.map} +0 -0
  444. /package/dist/{chunk-J5VEAJN5.mjs.map → chunk-CWVUGZNK.mjs.map} +0 -0
  445. /package/dist/{chunk-BCMDP6GK.mjs.map → chunk-DV3N2K3Y.mjs.map} +0 -0
  446. /package/dist/{chunk-EXHGEJ4P.mjs.map → chunk-GKARHTZ2.mjs.map} +0 -0
  447. /package/dist/{chunk-JCFN6KRS.mjs.map → chunk-HGWDB73S.mjs.map} +0 -0
  448. /package/dist/{chunk-JXXMO7PY.mjs.map → chunk-HN5RW4C3.mjs.map} +0 -0
  449. /package/dist/{chunk-I2A4EQPH.mjs.map → chunk-HQ2GXFK5.mjs.map} +0 -0
  450. /package/dist/{chunk-TBJLNIOY.mjs.map → chunk-JBLYYTHN.mjs.map} +0 -0
  451. /package/dist/{chunk-GRSN76BV.mjs.map → chunk-KH2R4STU.mjs.map} +0 -0
  452. /package/dist/{chunk-ZF5NMQJZ.mjs.map → chunk-KUKLN3CK.mjs.map} +0 -0
  453. /package/dist/{chunk-UAKRBNW2.mjs.map → chunk-L4T76OKM.mjs.map} +0 -0
  454. /package/dist/{chunk-PY5WCBKN.mjs.map → chunk-MERKXOSI.mjs.map} +0 -0
  455. /package/dist/{chunk-APCB5HWT.mjs.map → chunk-NLSDZJRR.mjs.map} +0 -0
  456. /package/dist/{chunk-EWYIXCNF.mjs.map → chunk-NLUTNCLH.mjs.map} +0 -0
  457. /package/dist/{chunk-OP4Q2KDS.mjs.map → chunk-NMKKMY5P.mjs.map} +0 -0
  458. /package/dist/{chunk-WDPFO4II.mjs.map → chunk-NMPK336K.mjs.map} +0 -0
  459. /package/dist/{chunk-X6BZ5IEV.mjs.map → chunk-NU7O6YKR.mjs.map} +0 -0
  460. /package/dist/{chunk-CBI5F4ME.mjs.map → chunk-OMSSA4NO.mjs.map} +0 -0
  461. /package/dist/{chunk-GYHD6QEA.mjs.map → chunk-PQGQ3EH5.mjs.map} +0 -0
  462. /package/dist/{chunk-LSUCENYD.mjs.map → chunk-RBKGHUSR.mjs.map} +0 -0
  463. /package/dist/{chunk-TEUERRDG.mjs.map → chunk-RV45XVXE.mjs.map} +0 -0
  464. /package/dist/{chunk-FW6ZI2MC.mjs.map → chunk-UAFSWXN5.mjs.map} +0 -0
  465. /package/dist/{chunk-ANLL2EIX.mjs.map → chunk-UWCGTH3U.mjs.map} +0 -0
  466. /package/dist/{chunk-6R2LEEEP.mjs.map → chunk-UZF2D2GG.mjs.map} +0 -0
  467. /package/dist/{chunk-62L3PMYE.mjs.map → chunk-V3OVMHZD.mjs.map} +0 -0
  468. /package/dist/{chunk-UDITT3N3.mjs.map → chunk-V6ELDZ2B.mjs.map} +0 -0
  469. /package/dist/{chunk-IJQOTS5O.mjs.map → chunk-VJUS3GC4.mjs.map} +0 -0
  470. /package/dist/{chunk-MQEAEU6G.mjs.map → chunk-XGMRYNER.mjs.map} +0 -0
  471. /package/dist/{chunk-MMQMVVD6.mjs.map → chunk-XLTD5J74.mjs.map} +0 -0
  472. /package/dist/{chunk-OMBUOOMD.mjs.map → chunk-XYT542WD.mjs.map} +0 -0
  473. /package/dist/{chunk-COWOGT7U.mjs.map → chunk-YZWFDSTC.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CardAccordation
3
- } from "./chunk-OMBUOOMD.mjs";
3
+ } from "./chunk-XYT542WD.mjs";
4
4
  import {
5
5
  UserIcon
6
6
  } from "./chunk-LGYNGKFL.mjs";
@@ -336,4 +336,4 @@ export {
336
336
  SimulationCardShell,
337
337
  StudentSummaryHeader
338
338
  };
339
- //# sourceMappingURL=chunk-COWOGT7U.mjs.map
339
+ //# sourceMappingURL=chunk-YZWFDSTC.mjs.map
@@ -1,5 +1,18 @@
1
- // src/hooks/useModalFocus.ts
1
+ // src/hooks/useEscapeToClose.ts
2
2
  import { useEffect } from "react";
3
+ var useEscapeToClose = (enabled, onClose) => {
4
+ useEffect(() => {
5
+ if (!enabled) return;
6
+ const handleEscape = (event) => {
7
+ if (event.key === "Escape" && !event.defaultPrevented) onClose();
8
+ };
9
+ document.addEventListener("keydown", handleEscape);
10
+ return () => document.removeEventListener("keydown", handleEscape);
11
+ }, [enabled, onClose]);
12
+ };
13
+
14
+ // src/hooks/useModalFocus.ts
15
+ import { useEffect as useEffect2 } from "react";
3
16
  var FOCUSABLE_SELECTOR = [
4
17
  "a[href]",
5
18
  "button:not([disabled])",
@@ -62,7 +75,7 @@ var applyTopmostInert = () => {
62
75
  }
63
76
  };
64
77
  var useModalFocus = (enabled, containerRef) => {
65
- useEffect(() => {
78
+ useEffect2(() => {
66
79
  if (!enabled) return;
67
80
  const container = containerRef.current;
68
81
  if (!container) return;
@@ -114,6 +127,7 @@ var useModalFocus = (enabled, containerRef) => {
114
127
  };
115
128
 
116
129
  export {
130
+ useEscapeToClose,
117
131
  useModalFocus
118
132
  };
119
- //# sourceMappingURL=chunk-M2FN7CNS.mjs.map
133
+ //# sourceMappingURL=chunk-Z4L2DWMX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useEscapeToClose.ts","../src/hooks/useModalFocus.ts"],"sourcesContent":["import { useEffect } from 'react';\n\n/**\n * Fecha um overlay (modal/dialog) ao pressionar Escape enquanto ele está aberto.\n *\n * Compartilhado pelos modais da lib pra evitar duplicar o mesmo `keydown`\n * listener em cada componente.\n *\n * @param enabled - Liga o listener. Normalmente `isOpen && closeOnEscape`.\n * @param onClose - Chamado quando o Escape é pressionado.\n */\nexport const useEscapeToClose = (enabled: boolean, onClose: () => void) => {\n useEffect(() => {\n if (!enabled) return;\n\n const handleEscape = (event: globalThis.KeyboardEvent) => {\n // A popup inside the overlay (Select, DropdownMenu...) that already\n // handled this Escape marks it with preventDefault: only the popup\n // closes, the overlay stays open.\n if (event.key === 'Escape' && !event.defaultPrevented) onClose();\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [enabled, onClose]);\n};\n","import { RefObject, useEffect } from 'react';\n\n/**\n * Elementos que entram no ciclo de Tab dentro do modal. O seletor já descarta\n * os desabilitados e quem tem `tabindex=\"-1\"`.\n */\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\nconst getFocusableElements = (container: HTMLElement) =>\n Array.from(\n container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n ).filter((element) => element.getAttribute('aria-hidden') !== 'true');\n\n/**\n * Tags que não renderizam nada. Marcá-las como inertes não muda\n * comportamento nenhum, só sujaria o DOM de quem for inspecionar.\n */\nconst NON_RENDERED_TAGS = new Set([\n 'SCRIPT',\n 'STYLE',\n 'LINK',\n 'META',\n 'TEMPLATE',\n 'NOSCRIPT',\n 'TITLE',\n 'BASE',\n]);\n\ntype HiddenElement = {\n element: Element;\n previousAriaHidden: string | null;\n};\n\n/**\n * Tira do caminho tudo que não é o modal: sobe do diálogo até o `<body>` e, em\n * cada nível, marca os IRMÃOS do caminho com `inert` + `aria-hidden=\"true\"`.\n * Os ancestrais do diálogo nunca são marcados — fossem, o próprio modal (e o\n * backdrop, que precisa receber clique) iriam junto.\n *\n * `inert` tira do ciclo de Tab, do clique e da árvore de acessibilidade;\n * `aria-hidden` repete a última parte para os leitores de tela que ainda não\n * tratam `inert`. Juntos são o que faz a navegação ficar REALMENTE presa no\n * modal: o trap de Tab daqui só cobre o teclado, enquanto o cursor virtual do\n * VoiceOver (VO + setas) anda pelo DOM inteiro e ignora onde está o foco.\n * `aria-modal=\"true\"` sozinho não dá conta — é justamente o que o VoiceOver\n * costuma deixar passar.\n *\n * O que é montado DEPOIS da abertura não é marcado, de propósito: `Select`,\n * `DropdownMenu` e afins renderizam em portais no `document.body` e precisam\n * continuar utilizáveis dentro do modal (o trap de Tab também sai do caminho\n * nesse caso). Em troca, um portal que já estava aberto quando o modal abriu\n * fica inerte — o esperado, já que ele pertence à página de trás.\n *\n * @returns Função que devolve os atributos exatamente como estavam.\n */\nconst hideOutside = (container: HTMLElement) => {\n const hidden: HiddenElement[] = [];\n\n let node: HTMLElement | null = container;\n\n while (node && node !== document.body) {\n const parent: HTMLElement | null = node.parentElement;\n if (!parent) break;\n\n for (const sibling of Array.from(parent.children)) {\n if (sibling === node) continue;\n if (NON_RENDERED_TAGS.has(sibling.tagName)) continue;\n // Quem JÁ está inert foi marcado pela aplicação (ou por um modal de\n // baixo que ainda não fechou): não é nosso para mexer, e portanto nem\n // para devolver no fechamento.\n if (sibling.hasAttribute('inert')) continue;\n\n hidden.push({\n element: sibling,\n previousAriaHidden: sibling.getAttribute('aria-hidden'),\n });\n\n sibling.setAttribute('inert', '');\n sibling.setAttribute('aria-hidden', 'true');\n }\n\n node = parent;\n }\n\n return () => {\n for (const { element, previousAriaHidden } of hidden) {\n element.removeAttribute('inert');\n\n if (previousAriaHidden === null) {\n element.removeAttribute('aria-hidden');\n } else {\n element.setAttribute('aria-hidden', previousAriaHidden);\n }\n }\n };\n};\n\n/**\n * Pilha dos modais abertos, compartilhada por TODOS os modais da lib (mesma\n * ideia do contador do `useBodyScrollLock`).\n *\n * Só o modal do topo mantém o resto da página inerte. Sem isso, dois modais\n * irmãos abertos ao mesmo tempo marcariam um ao outro — cada um é \"o lado de\n * fora\" do outro — e a página inteira, modais inclusive, ficaria inerte.\n */\nconst openModals: HTMLElement[] = [];\nlet releaseInert: (() => void) | null = null;\n\n/**\n * Desfaz a marcação vigente e reaplica a partir do modal do topo. Chamado nas\n * duas pontas: ao abrir um modal (ele assume) e ao fechar (o de baixo retoma,\n * ou a página volta ao normal quando não sobra nenhum).\n */\nconst applyTopmostInert = () => {\n releaseInert?.();\n releaseInert = null;\n\n const topmost = openModals.at(-1);\n if (topmost) {\n releaseInert = hideOutside(topmost);\n }\n};\n\n/**\n * Dá conta do foco de um modal: leva o foco pra dentro quando ele abre, prende\n * a navegação lá dentro enquanto está aberto e devolve o foco pra quem o abriu\n * quando fecha.\n *\n * Os modais da lib usam `<dialog open>` em vez de `showModal()`, então o\n * navegador NÃO faz nada disso sozinho — não há top layer, e sem isto o leitor\n * de tela continua lendo a página atrás e o Tab escapa pro conteúdo que está\n * visualmente bloqueado pelo backdrop.\n *\n * O foco inicial vai pro próprio container (que precisa de `tabIndex={-1}`), e\n * não pro primeiro botão: como esses modais quase sempre são uma mensagem, cair\n * no \"Fechar modal\" faria o leitor anunciar só o botão e engolir o texto. No\n * container, ele anuncia título + papel de diálogo e o conteúdo fica legível a\n * partir do topo. Um `autoFocus` no conteúdo do modal tem prioridade e não é\n * sobrescrito.\n *\n * A navegação fica presa por duas vias complementares:\n *\n * 1. Tudo que está FORA do modal vira `inert` + `aria-hidden` (ver\n * `hideOutside`). É o que tranca também o cursor virtual do VoiceOver, e o\n * que impede o Tab de recomeçar do topo da página quando o foco cai no\n * `<body>` (um clique no backdrop, por exemplo).\n * 2. O Tab é interceptado nas bordas do ciclo, para fechar o anel em vez de\n * deixar o foco sair pela barra de endereços do navegador. Quando o foco\n * está num portal (Select, DropdownMenu e afins renderizam em\n * `document.body`, fora do container), o hook sai do caminho em vez de\n * arrastar o foco de volta.\n *\n * @param enabled - Liga o gerenciamento. Normalmente `isOpen`.\n * @param containerRef - Ref do elemento do diálogo.\n */\nexport const useModalFocus = (\n enabled: boolean,\n containerRef: RefObject<HTMLElement | null>\n) => {\n useEffect(() => {\n if (!enabled) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const activeOnOpen = document.activeElement as HTMLElement | null;\n\n // Se o foco JÁ está dentro do modal, quem mandou foi o consumidor (um\n // `autoFocus` num campo, por exemplo) e a escolha dele vale mais que o\n // padrão daqui. Nesse caso não há como saber quem abriu o modal, então\n // também não há o que devolver no fechamento.\n const focusWasOutside = !container.contains(activeOnOpen);\n const previouslyFocused = focusWasOutside ? activeOnOpen : null;\n\n // A ordem destes três passos importa, e cada um depende do anterior:\n //\n // 1. Guardar quem tinha o foco ACIMA, antes de qualquer `inert`. O\n // navegador desfoca na hora um elemento que vira inerte, então depois\n // disso `document.activeElement` já seria o `<body>` e não sobraria pra\n // quem devolver o foco no fechamento.\n // 2. Marcar a página, abaixo — é o que garante que este modal esteja fora\n // de qualquer região inerte. Um modal aberto sobre outro nasce DENTRO do\n // `inert` aplicado pelo de baixo; focá-lo antes desta linha não surtiria\n // efeito nenhum.\n // 3. Só então mover o foco.\n openModals.push(container);\n applyTopmostInert();\n\n if (focusWasOutside) {\n container.focus();\n }\n\n const handleKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const active = document.activeElement;\n if (!active || !container.contains(active)) return;\n\n const focusables = getFocusableElements(container);\n\n if (focusables.length === 0) {\n event.preventDefault();\n container.focus();\n return;\n }\n\n const first = focusables[0];\n // O guard de lista vazia acima garante que existe um último elemento;\n // `.at()` só não consegue expressar isso no tipo.\n const last = focusables.at(-1) as HTMLElement;\n\n if (event.shiftKey) {\n // O container entra no ciclo pra que voltar do topo caia no fim, em vez\n // de sair do modal.\n if (active === first || active === container) {\n event.preventDefault();\n last.focus();\n }\n return;\n }\n\n if (active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown, true);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, true);\n\n // Devolver a página ANTES de devolver o foco: o gatilho que abriu o modal\n // mora lá fora, e `focus()` num elemento ainda inerte não faz nada.\n const index = openModals.indexOf(container);\n if (index !== -1) {\n openModals.splice(index, 1);\n }\n applyTopmostInert();\n\n // Só devolve o foco se quem abriu o modal ainda existe na página.\n if (previouslyFocused?.isConnected) {\n previouslyFocused.focus();\n }\n };\n }, [enabled, containerRef]);\n};\n"],"mappings":"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","names":["useEffect"]}
@@ -0,0 +1,149 @@
1
+ import {
2
+ useEscapeToClose,
3
+ useModalFocus
4
+ } from "./chunk-Z4L2DWMX.mjs";
5
+ import {
6
+ Button_default
7
+ } from "./chunk-ZQZBOTZJ.mjs";
8
+ import {
9
+ cn
10
+ } from "./chunk-53ICLDGS.mjs";
11
+
12
+ // src/components/AlertDialog/AlertDialog.tsx
13
+ import { forwardRef, useEffect, useId, useRef } from "react";
14
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
+ var SIZE_CLASSES = {
16
+ "extra-small": "w-screen max-w-[324px]",
17
+ small: "w-screen max-w-[378px]",
18
+ medium: "w-screen max-w-[459px]",
19
+ large: "w-screen max-w-[578px]",
20
+ "extra-large": "w-screen max-w-[912px]"
21
+ };
22
+ var AlertDialog = forwardRef(
23
+ ({
24
+ description,
25
+ cancelButtonLabel = "Cancelar",
26
+ submitButtonLabel = "Deletar",
27
+ title,
28
+ isOpen,
29
+ closeOnBackdropClick = true,
30
+ closeOnEscape = true,
31
+ className = "",
32
+ onSubmit,
33
+ onChangeOpen,
34
+ submitValue,
35
+ onCancel,
36
+ cancelValue,
37
+ size = "medium",
38
+ submitAction = "negative",
39
+ ...props
40
+ }, ref) => {
41
+ const dialogRef = useRef(null);
42
+ const titleId = useId();
43
+ const descriptionId = useId();
44
+ useModalFocus(isOpen, dialogRef);
45
+ const setDialogRef = (node) => {
46
+ dialogRef.current = node;
47
+ if (typeof ref === "function") {
48
+ ref(node);
49
+ } else if (ref) {
50
+ ref.current = node;
51
+ }
52
+ };
53
+ useEscapeToClose(isOpen && closeOnEscape, () => onChangeOpen(false));
54
+ useEffect(() => {
55
+ if (isOpen) {
56
+ document.body.style.overflow = "hidden";
57
+ } else {
58
+ document.body.style.overflow = "unset";
59
+ }
60
+ return () => {
61
+ document.body.style.overflow = "unset";
62
+ };
63
+ }, [isOpen]);
64
+ const handleBackdropClick = () => {
65
+ onChangeOpen(false);
66
+ };
67
+ const handleSubmit = () => {
68
+ onChangeOpen(false);
69
+ onSubmit?.(submitValue);
70
+ };
71
+ const handleCancel = () => {
72
+ onChangeOpen(false);
73
+ onCancel?.(cancelValue);
74
+ };
75
+ const sizeClasses = SIZE_CLASSES[size];
76
+ return /* @__PURE__ */ jsx(Fragment, { children: isOpen && /* @__PURE__ */ jsxs(
77
+ "div",
78
+ {
79
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",
80
+ "data-testid": "alert-dialog-overlay",
81
+ children: [
82
+ closeOnBackdropClick && /* @__PURE__ */ jsx(
83
+ "button",
84
+ {
85
+ type: "button",
86
+ tabIndex: -1,
87
+ "aria-label": "Fechar di\xE1logo",
88
+ className: "absolute inset-0 w-full h-full cursor-default",
89
+ onClick: handleBackdropClick,
90
+ "data-testid": "alert-dialog-backdrop"
91
+ }
92
+ ),
93
+ /* @__PURE__ */ jsxs(
94
+ "dialog",
95
+ {
96
+ ref: setDialogRef,
97
+ open: true,
98
+ "aria-modal": "true",
99
+ "aria-labelledby": titleId,
100
+ "aria-describedby": descriptionId,
101
+ tabIndex: -1,
102
+ className: cn(
103
+ // `relative` anula o `position: absolute` que o navegador aplica
104
+ // a `<dialog>` (sem isso ele escapa da centralização do
105
+ // backdrop) e o põe acima do botão de fechar do backdrop. As
106
+ // demais regras do UA (padding, borda, fundo) já são
107
+ // sobrescritas pelas classes abaixo.
108
+ "relative bg-background border border-border-100 rounded-lg shadow-lg p-6 m-3",
109
+ sizeClasses,
110
+ className
111
+ ),
112
+ ...props,
113
+ children: [
114
+ /* @__PURE__ */ jsx(
115
+ "h2",
116
+ {
117
+ id: titleId,
118
+ className: "pb-3 text-xl font-semibold text-text-950",
119
+ children: title
120
+ }
121
+ ),
122
+ /* @__PURE__ */ jsx("p", { id: descriptionId, className: "text-text-700 text-sm", children: description }),
123
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-row items-center justify-end pt-4 gap-3", children: [
124
+ /* @__PURE__ */ jsx(Button_default, { variant: "outline", size: "small", onClick: handleCancel, children: cancelButtonLabel }),
125
+ /* @__PURE__ */ jsx(
126
+ Button_default,
127
+ {
128
+ variant: "solid",
129
+ size: "small",
130
+ action: submitAction,
131
+ onClick: handleSubmit,
132
+ children: submitButtonLabel
133
+ }
134
+ )
135
+ ] })
136
+ ]
137
+ }
138
+ )
139
+ ]
140
+ }
141
+ ) });
142
+ }
143
+ );
144
+ AlertDialog.displayName = "AlertDialog";
145
+
146
+ export {
147
+ AlertDialog
148
+ };
149
+ //# sourceMappingURL=chunk-Z75J66LL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import { forwardRef, HTMLAttributes, useEffect, useId, useRef } from 'react';\nimport Button from '../Button/Button';\nimport { useEscapeToClose } from '../../hooks/useEscapeToClose';\nimport { useModalFocus } from '../../hooks/useModalFocus';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n 'extra-small': 'w-screen max-w-[324px]',\n small: 'w-screen max-w-[378px]',\n medium: 'w-screen max-w-[459px]',\n large: 'w-screen max-w-[578px]',\n 'extra-large': 'w-screen max-w-[912px]',\n} as const;\n\ninterface AlertDialogProps extends HTMLAttributes<HTMLDialogElement> {\n /** Title of the alert dialog */\n title: string;\n /** Whether the alert dialog is open (controlled mode) */\n isOpen: boolean;\n /** Function called when the alert dialog is opened or closed (controlled mode) */\n onChangeOpen: (open: boolean) => void;\n /** Whether clicking the backdrop should close the alert dialog */\n closeOnBackdropClick?: boolean;\n /** Whether pressing Escape should close the alert dialog */\n closeOnEscape?: boolean;\n /** Additional CSS classes for the alert dialog content */\n className?: string;\n /** Function called when submit button is clicked */\n onSubmit?: (value?: unknown) => void;\n /** Value to pass to onSubmit function */\n submitValue?: unknown;\n /** Function called when cancel button is clicked */\n onCancel?: (value?: unknown) => void;\n /** Value to pass to onCancel function */\n cancelValue?: unknown;\n /** Description of the alert dialog */\n description: string;\n /** Label of the cancel button */\n cancelButtonLabel?: string;\n /** Label of the submit button */\n submitButtonLabel?: string;\n /** Size of the alert dialog */\n size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';\n /** Action type for the submit button (controls color/style). Defaults to 'negative' (destructive) */\n submitAction?: 'primary' | 'secondary' | 'positive' | 'negative';\n}\n\nconst AlertDialog = forwardRef<HTMLDialogElement, AlertDialogProps>(\n (\n {\n description,\n cancelButtonLabel = 'Cancelar',\n submitButtonLabel = 'Deletar',\n title,\n isOpen,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n className = '',\n onSubmit,\n onChangeOpen,\n submitValue,\n onCancel,\n cancelValue,\n size = 'medium',\n submitAction = 'negative',\n ...props\n },\n ref\n ) => {\n const dialogRef = useRef<HTMLDialogElement>(null);\n\n /**\n * Ids por instância. Fixos, dois diálogos abertos ao mesmo tempo — ou um\n * diálogo convivendo com qualquer outro elemento da página que use o mesmo\n * id — fariam o `aria-labelledby` apontar para o nó errado, e o leitor de\n * tela anunciaria o título do outro.\n */\n const titleId = useId();\n const descriptionId = useId();\n\n /**\n * Leva o foco pro diálogo ao abrir, prende o Tab lá dentro e devolve o foco\n * a quem o abriu ao fechar. Sem isto o foco ficava no botão que está ATRÁS\n * do backdrop: o leitor de tela seguia lendo a página de trás, sem nunca\n * anunciar que um diálogo abriu, e o Tab passeava pelo conteúdo bloqueado.\n *\n * É o mesmo hook que o `Modal` usa — o `AlertDialog` é que tinha ficado de\n * fora quando o foco foi resolvido lá.\n */\n useModalFocus(isOpen, dialogRef);\n\n /**\n * O nó é preciso aqui (para o foco) e também no `ref` do consumidor, que\n * segue sendo encaminhado como antes.\n */\n const setDialogRef = (node: HTMLDialogElement | null) => {\n dialogRef.current = node;\n\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as { current: HTMLDialogElement | null }).current = node;\n }\n };\n\n // Same Escape handling as `Modal`: a single document listener that leaves\n // alone an Escape already handled (`preventDefault`) by a popup inside.\n useEscapeToClose(isOpen && closeOnEscape, () => onChangeOpen(false));\n\n // Prevent body scroll when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n\n return () => {\n document.body.style.overflow = 'unset';\n };\n }, [isOpen]);\n\n const handleBackdropClick = () => {\n onChangeOpen(false);\n };\n\n const handleSubmit = () => {\n onChangeOpen(false);\n onSubmit?.(submitValue);\n };\n\n const handleCancel = () => {\n onChangeOpen(false);\n onCancel?.(cancelValue);\n };\n\n const sizeClasses = SIZE_CLASSES[size];\n\n return (\n <>\n {/* Alert Dialog Overlay */}\n {isOpen && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm\"\n data-testid=\"alert-dialog-overlay\"\n >\n {/* Click-outside-to-close is a native button behind the dialog\n instead of a click handler on this <div>: it is interactive by\n nature (mouse, touch and keyboard) and stays out of the Tab\n cycle, since Escape (`useEscapeToClose`) already covers the\n keyboard. */}\n {closeOnBackdropClick && (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Fechar diálogo\"\n className=\"absolute inset-0 w-full h-full cursor-default\"\n onClick={handleBackdropClick}\n data-testid=\"alert-dialog-backdrop\"\n />\n )}\n {/* Alert Dialog Content */}\n <dialog\n ref={setDialogRef}\n // `<dialog>` em vez de `role=\"dialog\"`: o papel vem do elemento,\n // que é o que garante o tratamento correto em qualquer\n // navegador/leitor. Mesmo padrão do `Modal`.\n //\n // `open` (e não `showModal()`) porque o backdrop é nosso; em\n // troca, o navegador não gerencia foco — quem faz isso é o\n // `useModalFocus` acima, e é dele o requisito do `tabIndex={-1}`:\n // o foco inicial vai pro próprio diálogo, não pro primeiro botão,\n // para o leitor anunciar título e descrição antes das ações.\n open\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n tabIndex={-1}\n className={cn(\n // `relative` anula o `position: absolute` que o navegador aplica\n // a `<dialog>` (sem isso ele escapa da centralização do\n // backdrop) e o põe acima do botão de fechar do backdrop. As\n // demais regras do UA (padding, borda, fundo) já são\n // sobrescritas pelas classes abaixo.\n 'relative bg-background border border-border-100 rounded-lg shadow-lg p-6 m-3',\n sizeClasses,\n className\n )}\n {...props}\n >\n <h2\n id={titleId}\n className=\"pb-3 text-xl font-semibold text-text-950\"\n >\n {title}\n </h2>\n <p id={descriptionId} className=\"text-text-700 text-sm\">\n {description}\n </p>\n\n <div className=\"flex flex-row items-center justify-end pt-4 gap-3\">\n <Button variant=\"outline\" size=\"small\" onClick={handleCancel}>\n {cancelButtonLabel}\n </Button>\n\n <Button\n variant=\"solid\"\n size=\"small\"\n action={submitAction}\n onClick={handleSubmit}\n >\n {submitButtonLabel}\n </Button>\n </div>\n </dialog>\n </div>\n )}\n </>\n );\n }\n);\n\nAlertDialog.displayName = 'AlertDialog';\n\nexport { AlertDialog };\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,YAA4B,WAAW,OAAO,cAAc;AA8I/D,mBAaQ,KAgDA,YA7DR;AArIN,IAAM,eAAe;AAAA,EACnB,eAAe;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,eAAe;AACjB;AAmCA,IAAM,cAAc;AAAA,EAClB,CACE;AAAA,IACE;AAAA,IACA,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB;AAAA,IACA;AAAA,IACA,uBAAuB;AAAA,IACvB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,eAAe;AAAA,IACf,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,YAAY,OAA0B,IAAI;AAQhD,UAAM,UAAU,MAAM;AACtB,UAAM,gBAAgB,MAAM;AAW5B,kBAAc,QAAQ,SAAS;AAM/B,UAAM,eAAe,CAAC,SAAmC;AACvD,gBAAU,UAAU;AAEpB,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,IAAI;AAAA,MACV,WAAW,KAAK;AACd,QAAC,IAA8C,UAAU;AAAA,MAC3D;AAAA,IACF;AAIA,qBAAiB,UAAU,eAAe,MAAM,aAAa,KAAK,CAAC;AAGnE,cAAU,MAAM;AACd,UAAI,QAAQ;AACV,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC,OAAO;AACL,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC;AAEA,aAAO,MAAM;AACX,iBAAS,KAAK,MAAM,WAAW;AAAA,MACjC;AAAA,IACF,GAAG,CAAC,MAAM,CAAC;AAEX,UAAM,sBAAsB,MAAM;AAChC,mBAAa,KAAK;AAAA,IACpB;AAEA,UAAM,eAAe,MAAM;AACzB,mBAAa,KAAK;AAClB,iBAAW,WAAW;AAAA,IACxB;AAEA,UAAM,eAAe,MAAM;AACzB,mBAAa,KAAK;AAClB,iBAAW,WAAW;AAAA,IACxB;AAEA,UAAM,cAAc,aAAa,IAAI;AAErC,WACE,gCAEG,oBACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAY;AAAA,QAOX;AAAA,kCACC;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAU;AAAA,cACV,cAAW;AAAA,cACX,WAAU;AAAA,cACV,SAAS;AAAA,cACT,eAAY;AAAA;AAAA,UACd;AAAA,UAGF;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cAUL,MAAI;AAAA,cACJ,cAAW;AAAA,cACX,mBAAiB;AAAA,cACjB,oBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMT;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACC,GAAG;AAAA,cAEJ;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,IAAI;AAAA,oBACJ,WAAU;AAAA,oBAET;AAAA;AAAA,gBACH;AAAA,gBACA,oBAAC,OAAE,IAAI,eAAe,WAAU,yBAC7B,uBACH;AAAA,gBAEA,qBAAC,SAAI,WAAU,qDACb;AAAA,sCAAC,kBAAO,SAAQ,WAAU,MAAK,SAAQ,SAAS,cAC7C,6BACH;AAAA,kBAEA;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,MAAK;AAAA,sBACL,QAAQ;AAAA,sBACR,SAAS;AAAA,sBAER;AAAA;AAAA,kBACH;AAAA,mBACF;AAAA;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF,GAEJ;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;","names":[]}
@@ -17,7 +17,7 @@ var _chunkE5DU4DIYjs = require('./chunk-E5DU4DIY.js');
17
17
  var _chunkBJMKBBN3js = require('./chunk-BJMKBBN3.js');
18
18
 
19
19
 
20
- var _chunkG4NK66PMjs = require('./chunk-G4NK66PM.js');
20
+ var _chunkJTWXQ267js = require('./chunk-JTWXQ267.js');
21
21
 
22
22
 
23
23
  var _chunkANT66KVKjs = require('./chunk-ANT66KVK.js');
@@ -250,7 +250,7 @@ var PerformanceReportModal = ({
250
250
  }
251
251
  }
252
252
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
253
- _chunkG4NK66PMjs.Modal_default,
253
+ _chunkJTWXQ267js.Modal_default,
254
254
  {
255
255
  isOpen,
256
256
  onClose,
@@ -267,4 +267,4 @@ var PerformanceReportModal_default = PerformanceReportModal;
267
267
 
268
268
 
269
269
  exports.PerformanceReportModal = PerformanceReportModal; exports.PerformanceReportModal_default = PerformanceReportModal_default;
270
- //# sourceMappingURL=chunk-CWIJ7RXR.js.map
270
+ //# sourceMappingURL=chunk-ZHUFICW3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-CWIJ7RXR.js","../src/components/PerformanceReportModal/PerformanceReportModal.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-CWIJ7RXR.js","sourcesContent":[null,"import { type ReactNode } from 'react';\nimport Modal from '../Modal/Modal';\nimport Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport { MetricBox } from '../shared/MetricBox';\nimport { LegendPieCard, type PieSlice } from '../shared/ChartComponents';\nimport {\n SectionTitle,\n UserHeader,\n ErrorContent,\n} from '../shared/ModalComponents';\nimport { REPORT_PERIOD, REPORT_MODAL_VARIANT } from '../../types/common';\nimport { PERFORMANCE_TAG_CONFIG } from '../../types/performance';\n\n// ─── API Types (match backend exactly) ───────────────────────\n\n/**\n * Query params for GET /performance/user/:userId\n */\nexport interface UserPerformanceRequest {\n userId: string;\n period: REPORT_PERIOD;\n classId?: string;\n}\n\n/**\n * Consolidated question statistics block.\n * Mirrors backend ConsolidatedQuestionStats.\n *\n * Note: `totalAnswered = correctQuestions + incorrectQuestions` (blank excluded).\n * To display the full total use `correctQuestions + incorrectQuestions + blankQuestions`.\n */\nexport interface UserPerformanceQuestionStats {\n totalAnswered: number;\n correctQuestions: number;\n correctPercentage: number;\n incorrectQuestions: number;\n incorrectPercentage: number;\n blankQuestions: number;\n blankPercentage: number;\n /** Localized label e.g. \"Acima da média\", \"Abaixo da média\" */\n performanceTag: string;\n}\n\n/**\n * Downloaded lesson entry.\n * Mirrors backend DownloadedLesson.\n */\nexport interface UserPerformanceLesson {\n lessonId: string;\n lessonName: string;\n bnccCode: string | null;\n}\n\n/**\n * Full 200 response for STUDENT profile.\n * Mirrors backend StudentUserPerformance.\n */\nexport interface UserPerformanceStudentData {\n user: {\n id: string;\n name: string;\n };\n school: {\n schoolId: string;\n schoolName: string;\n };\n class: {\n classId: string;\n className: string;\n };\n schoolYear: {\n schoolYearId: string;\n schoolYearName: string;\n };\n /** Derived from generalStats.performanceTag e.g. \"Abaixo da média\" */\n status: string;\n generalStats: UserPerformanceQuestionStats;\n activityStats: UserPerformanceQuestionStats;\n questionnaireStats: UserPerformanceQuestionStats;\n simulationStats: UserPerformanceQuestionStats;\n downloadedLessons: UserPerformanceLesson[];\n}\n\n/**\n * Consolidated material production stats.\n * Mirrors backend ConsolidatedMaterialStats.\n */\nexport interface UserPerformanceMaterialStats {\n totalMaterialProduced: number;\n totalRecommendedLessons: number;\n recommendedLessonsPercentage: number;\n totalActivities: number;\n activitiesPercentage: number;\n}\n\n/**\n * Full 200 response for TEACHER / UNIT_MANAGER / REGIONAL_MANAGER profiles.\n * Mirrors backend ProfessionalUserPerformance.\n *\n * Note: no user/school/class context is returned for professional profiles.\n * Pass user display info via `professionalUserInfo` if needed.\n */\nexport interface UserPerformanceProfessionalData {\n generalStats: UserPerformanceMaterialStats;\n}\n\n/** @deprecated Use {@link REPORT_MODAL_VARIANT} instead. Re-exported for backwards compatibility. */\nexport { REPORT_MODAL_VARIANT as PerformanceReportModalVariant } from '../../types/common';\n\ninterface PerformanceReportModalBaseProps {\n isOpen: boolean;\n onClose: () => void;\n /** Modal title (default: \"Desempenho em 1 ano\") */\n title?: string;\n loading?: boolean;\n error?: string | null;\n}\n\ntype PerformanceReportModalStudentProps = {\n variant: REPORT_MODAL_VARIANT.STUDENT;\n data: UserPerformanceStudentData | null;\n /**\n * Optional icon mapper for the downloaded lessons table.\n * The API does not return icons; the parent can derive them from lesson data.\n */\n getLessonIcon?: (lesson: UserPerformanceLesson) => ReactNode;\n /**\n * Optional activity/questionnaire/simulation done counts.\n * These are not part of the API response — pass them from other data sources.\n */\n studentActivityCounts?: {\n activities?: number;\n questionnaires?: number;\n simulations?: number;\n };\n professionalUserInfo?: never;\n};\n\ntype PerformanceReportModalProfessionalProps = {\n variant: REPORT_MODAL_VARIANT.PROFESSIONAL;\n data: UserPerformanceProfessionalData | null;\n /**\n * Display info for the professional modal header.\n * The professional API response does not include user/school context,\n * so the parent should supply this from the table row data.\n */\n professionalUserInfo?: {\n userName: string;\n schoolName: string;\n className: string;\n year: string | number;\n };\n getLessonIcon?: never;\n studentActivityCounts?: never;\n};\n\nexport type PerformanceReportModalProps = PerformanceReportModalBaseProps &\n (\n | PerformanceReportModalStudentProps\n | PerformanceReportModalProfessionalProps\n );\n\n// ─── Status → Badge variant mapping ──────────────────────────\n\nfunction getStatusVariant(\n status: string\n): 'success' | 'info' | 'warning' | 'error' {\n return (\n Object.values(PERFORMANCE_TAG_CONFIG).find((c) => c.label === status)\n ?.variant ?? 'info'\n );\n}\n\n// ─── Pie slice builders ───────────────────────────────────────\n\nfunction buildQuestionsSlices(stats: UserPerformanceQuestionStats): PieSlice[] {\n return [\n {\n label: 'Questões corretas',\n value: stats.correctQuestions,\n colorClass: 'bg-success-200',\n },\n {\n label: 'Questões incorretas',\n value: stats.incorrectQuestions,\n colorClass: 'bg-warning-400',\n },\n {\n label: 'Questões em branco',\n value: stats.blankQuestions,\n colorClass: 'bg-background-300',\n },\n ];\n}\n\nfunction buildMaterialSlices(stats: UserPerformanceMaterialStats): PieSlice[] {\n return [\n {\n label: 'Aulas recomendadas',\n value: stats.totalRecommendedLessons,\n colorClass: 'bg-warning-300',\n color: 'var(--Indicator-Indicator-Positive, #F8CC2E)',\n },\n {\n label: 'Atividades',\n value: stats.totalActivities,\n colorClass: 'bg-success-700',\n color: 'var(--Success-success700, #206F3E)',\n },\n ];\n}\n\n// ─── Sub-components ──────────────────────────────────────────\n\n/**\n * A questions stats section: one or two metrics + legend + pie chart.\n * Total displayed = correctQuestions + incorrectQuestions + blankQuestions\n * (backend totalAnswered excludes blank questions).\n * When `count` + `countLabel` are provided, renders two MetricBoxes side by side.\n */\nconst QuestionsSection = ({\n title,\n totalLabel,\n stats,\n count,\n countLabel,\n}: {\n title: string;\n totalLabel: string;\n stats: UserPerformanceQuestionStats;\n count?: number;\n countLabel?: string;\n}) => {\n const displayTotal =\n stats.correctQuestions + stats.incorrectQuestions + stats.blankQuestions;\n const slices = buildQuestionsSlices(stats);\n\n return (\n <div className=\"flex flex-col gap-3\">\n <SectionTitle>{title}</SectionTitle>\n {count !== undefined && countLabel ? (\n <div className=\"flex gap-3\">\n <MetricBox className=\"flex-1\" label={countLabel} value={count} />\n <MetricBox\n className=\"flex-1\"\n label={totalLabel}\n value={displayTotal}\n />\n </div>\n ) : (\n <MetricBox label={totalLabel} value={displayTotal} />\n )}\n <LegendPieCard slices={slices} />\n </div>\n );\n};\n\nconst LessonsTable = ({\n lessons,\n getLessonIcon,\n}: {\n lessons: UserPerformanceLesson[];\n getLessonIcon?: (lesson: UserPerformanceLesson) => ReactNode;\n}) => (\n <div className=\"flex flex-col gap-3\">\n <SectionTitle>Aulas baixadas</SectionTitle>\n <div className=\"bg-background border border-border-50 rounded-xl overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-border-100\">\n <Text size=\"xs\" weight=\"bold\" className=\"text-text-600\">\n Aula\n </Text>\n <Text size=\"xs\" weight=\"bold\" className=\"text-text-600\">\n BNCC\n </Text>\n </div>\n {lessons.length === 0 ? (\n <div className=\"flex items-center justify-center py-6\">\n <Text size=\"sm\" className=\"text-text-400\">\n Nenhuma aula baixada\n </Text>\n </div>\n ) : (\n lessons.map((lesson) => (\n <div\n key={lesson.lessonId}\n className=\"flex items-center justify-between px-4 py-3 border-b border-border-50 last:border-b-0\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n {getLessonIcon && (\n <span className=\"shrink-0 [&>svg]:w-5 [&>svg]:h-5\">\n {getLessonIcon(lesson)}\n </span>\n )}\n <Text size=\"sm\" className=\"text-text-950 truncate\">\n {lesson.lessonName}\n </Text>\n </div>\n <Text size=\"sm\" className=\"text-text-500 shrink-0 ml-3\">\n {lesson.bnccCode ?? '—'}\n </Text>\n </div>\n ))\n )}\n </div>\n </div>\n);\n\n// ─── Modal content ────────────────────────────────────────────\n\nconst StudentModalContent = ({\n data,\n getLessonIcon,\n activityCounts,\n}: {\n data: UserPerformanceStudentData;\n getLessonIcon?: (lesson: UserPerformanceLesson) => ReactNode;\n activityCounts?: PerformanceReportModalProps['studentActivityCounts'];\n}) => (\n <div className=\"flex flex-col gap-6\">\n <UserHeader\n name={data.user.name}\n school={data.school.schoolName}\n className={data.class.className}\n year={data.schoolYear.schoolYearName}\n statusBadge={\n data.status ? (\n <Badge\n variant=\"solid\"\n action={getStatusVariant(data.status)}\n size=\"small\"\n >\n {data.status.toUpperCase()}\n </Badge>\n ) : undefined\n }\n />\n\n <QuestionsSection\n title=\"Dados gerais\"\n totalLabel=\"Total de questões respondidas\"\n stats={data.generalStats}\n />\n\n <QuestionsSection\n title=\"Dados de atividades\"\n totalLabel=\"Total de questões\"\n stats={data.activityStats}\n count={activityCounts?.activities}\n countLabel=\"Atividades realizadas\"\n />\n\n <QuestionsSection\n title=\"Dados de questionários\"\n totalLabel=\"Total de questões\"\n stats={data.questionnaireStats}\n count={activityCounts?.questionnaires}\n countLabel=\"Questionários realizados\"\n />\n\n <QuestionsSection\n title=\"Dados de simulados\"\n totalLabel=\"Total de questões\"\n stats={data.simulationStats}\n count={activityCounts?.simulations}\n countLabel=\"Simulados realizados\"\n />\n\n <LessonsTable\n lessons={data.downloadedLessons}\n getLessonIcon={getLessonIcon}\n />\n </div>\n);\n\nconst ProfessionalModalContent = ({\n data,\n userInfo,\n}: {\n data: UserPerformanceProfessionalData;\n userInfo?: PerformanceReportModalProps['professionalUserInfo'];\n}) => {\n const slices = buildMaterialSlices(data.generalStats);\n\n return (\n <div className=\"flex flex-col gap-6\">\n {userInfo && (\n <UserHeader\n name={userInfo.userName}\n school={userInfo.schoolName}\n className={userInfo.className}\n year={userInfo.year}\n />\n )}\n\n <div className=\"flex flex-col gap-3\">\n <SectionTitle>Dados gerais</SectionTitle>\n <MetricBox\n label=\"Total de material produzido\"\n value={data.generalStats.totalMaterialProduced}\n />\n <LegendPieCard slices={slices} />\n </div>\n </div>\n );\n};\n\nconst LoadingSkeleton = () => (\n <div className=\"flex flex-col gap-4 animate-pulse\">\n <div className=\"h-16 bg-background-200 rounded-xl\" />\n <div className=\"h-5 bg-background-200 rounded w-32 mt-2\" />\n <div className=\"h-12 bg-background-200 rounded-xl\" />\n <div className=\"h-32 bg-background-200 rounded-xl\" />\n </div>\n);\n\n// ─── Main component ───────────────────────────────────────────\n\n/**\n * PerformanceReportModal component\n *\n * Displays a modal with performance data for a user from `GET /performance/user/:userId`.\n *\n * Two variants driven by the profile type:\n * - `STUDENT` — question stats per section (generalStats, activityStats,\n * questionnaireStats, simulationStats) + downloaded lessons table\n * - `PROFESSIONAL` — material production stats (totalMaterialProduced,\n * totalRecommendedLessons, totalActivities)\n *\n * The professional API response does not include user/school context.\n * Pass `professionalUserInfo` (from the table row) to show a user header.\n *\n * @example\n * ```tsx\n * // Student variant — pass API response directly\n * <PerformanceReportModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * variant={PerformanceReportModalVariant.STUDENT}\n * data={apiResponse.data}\n * />\n *\n * // Professional variant — API has no user context, pass it separately\n * <PerformanceReportModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * variant={PerformanceReportModalVariant.PROFESSIONAL}\n * data={apiResponse.data}\n * professionalUserInfo={{\n * userName: row.userName,\n * schoolName: row.schoolName,\n * className: row.className,\n * year: row.year,\n * }}\n * />\n * ```\n */\nexport const PerformanceReportModal = ({\n isOpen,\n onClose,\n title = 'Desempenho em 1 ano',\n loading = false,\n error = null,\n ...variantProps\n}: PerformanceReportModalProps) => {\n let content: ReactNode;\n\n if (loading) {\n content = <LoadingSkeleton />;\n } else if (error) {\n content = <ErrorContent message={error} />;\n } else if (variantProps.data !== null) {\n if (variantProps.variant === REPORT_MODAL_VARIANT.STUDENT) {\n content = (\n <StudentModalContent\n data={variantProps.data}\n getLessonIcon={variantProps.getLessonIcon}\n activityCounts={variantProps.studentActivityCounts}\n />\n );\n } else {\n content = (\n <ProfessionalModalContent\n data={variantProps.data}\n userInfo={variantProps.professionalUserInfo}\n />\n );\n }\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n size=\"lg\"\n contentClassName=\"max-h-[80vh] overflow-y-auto\"\n >\n {content}\n </Modal>\n );\n};\n\nexport default PerformanceReportModal;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-ZHUFICW3.js","../src/components/PerformanceReportModal/PerformanceReportModal.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-ZHUFICW3.js","sourcesContent":[null,"import { type ReactNode } from 'react';\nimport Modal from '../Modal/Modal';\nimport Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport { MetricBox } from '../shared/MetricBox';\nimport { LegendPieCard, type PieSlice } from '../shared/ChartComponents';\nimport {\n SectionTitle,\n UserHeader,\n ErrorContent,\n} from '../shared/ModalComponents';\nimport { REPORT_PERIOD, REPORT_MODAL_VARIANT } from '../../types/common';\nimport { PERFORMANCE_TAG_CONFIG } from '../../types/performance';\n\n// ─── API Types (match backend exactly) ───────────────────────\n\n/**\n * Query params for GET /performance/user/:userId\n */\nexport interface UserPerformanceRequest {\n userId: string;\n period: REPORT_PERIOD;\n classId?: string;\n}\n\n/**\n * Consolidated question statistics block.\n * Mirrors backend ConsolidatedQuestionStats.\n *\n * Note: `totalAnswered = correctQuestions + incorrectQuestions` (blank excluded).\n * To display the full total use `correctQuestions + incorrectQuestions + blankQuestions`.\n */\nexport interface UserPerformanceQuestionStats {\n totalAnswered: number;\n correctQuestions: number;\n correctPercentage: number;\n incorrectQuestions: number;\n incorrectPercentage: number;\n blankQuestions: number;\n blankPercentage: number;\n /** Localized label e.g. \"Acima da média\", \"Abaixo da média\" */\n performanceTag: string;\n}\n\n/**\n * Downloaded lesson entry.\n * Mirrors backend DownloadedLesson.\n */\nexport interface UserPerformanceLesson {\n lessonId: string;\n lessonName: string;\n bnccCode: string | null;\n}\n\n/**\n * Full 200 response for STUDENT profile.\n * Mirrors backend StudentUserPerformance.\n */\nexport interface UserPerformanceStudentData {\n user: {\n id: string;\n name: string;\n };\n school: {\n schoolId: string;\n schoolName: string;\n };\n class: {\n classId: string;\n className: string;\n };\n schoolYear: {\n schoolYearId: string;\n schoolYearName: string;\n };\n /** Derived from generalStats.performanceTag e.g. \"Abaixo da média\" */\n status: string;\n generalStats: UserPerformanceQuestionStats;\n activityStats: UserPerformanceQuestionStats;\n questionnaireStats: UserPerformanceQuestionStats;\n simulationStats: UserPerformanceQuestionStats;\n downloadedLessons: UserPerformanceLesson[];\n}\n\n/**\n * Consolidated material production stats.\n * Mirrors backend ConsolidatedMaterialStats.\n */\nexport interface UserPerformanceMaterialStats {\n totalMaterialProduced: number;\n totalRecommendedLessons: number;\n recommendedLessonsPercentage: number;\n totalActivities: number;\n activitiesPercentage: number;\n}\n\n/**\n * Full 200 response for TEACHER / UNIT_MANAGER / REGIONAL_MANAGER profiles.\n * Mirrors backend ProfessionalUserPerformance.\n *\n * Note: no user/school/class context is returned for professional profiles.\n * Pass user display info via `professionalUserInfo` if needed.\n */\nexport interface UserPerformanceProfessionalData {\n generalStats: UserPerformanceMaterialStats;\n}\n\n/** @deprecated Use {@link REPORT_MODAL_VARIANT} instead. Re-exported for backwards compatibility. */\nexport { REPORT_MODAL_VARIANT as PerformanceReportModalVariant } from '../../types/common';\n\ninterface PerformanceReportModalBaseProps {\n isOpen: boolean;\n onClose: () => void;\n /** Modal title (default: \"Desempenho em 1 ano\") */\n title?: string;\n loading?: boolean;\n error?: string | null;\n}\n\ntype PerformanceReportModalStudentProps = {\n variant: REPORT_MODAL_VARIANT.STUDENT;\n data: UserPerformanceStudentData | null;\n /**\n * Optional icon mapper for the downloaded lessons table.\n * The API does not return icons; the parent can derive them from lesson data.\n */\n getLessonIcon?: (lesson: UserPerformanceLesson) => ReactNode;\n /**\n * Optional activity/questionnaire/simulation done counts.\n * These are not part of the API response — pass them from other data sources.\n */\n studentActivityCounts?: {\n activities?: number;\n questionnaires?: number;\n simulations?: number;\n };\n professionalUserInfo?: never;\n};\n\ntype PerformanceReportModalProfessionalProps = {\n variant: REPORT_MODAL_VARIANT.PROFESSIONAL;\n data: UserPerformanceProfessionalData | null;\n /**\n * Display info for the professional modal header.\n * The professional API response does not include user/school context,\n * so the parent should supply this from the table row data.\n */\n professionalUserInfo?: {\n userName: string;\n schoolName: string;\n className: string;\n year: string | number;\n };\n getLessonIcon?: never;\n studentActivityCounts?: never;\n};\n\nexport type PerformanceReportModalProps = PerformanceReportModalBaseProps &\n (\n | PerformanceReportModalStudentProps\n | PerformanceReportModalProfessionalProps\n );\n\n// ─── Status → Badge variant mapping ──────────────────────────\n\nfunction getStatusVariant(\n status: string\n): 'success' | 'info' | 'warning' | 'error' {\n return (\n Object.values(PERFORMANCE_TAG_CONFIG).find((c) => c.label === status)\n ?.variant ?? 'info'\n );\n}\n\n// ─── Pie slice builders ───────────────────────────────────────\n\nfunction buildQuestionsSlices(stats: UserPerformanceQuestionStats): PieSlice[] {\n return [\n {\n label: 'Questões corretas',\n value: stats.correctQuestions,\n colorClass: 'bg-success-200',\n },\n {\n label: 'Questões incorretas',\n value: stats.incorrectQuestions,\n colorClass: 'bg-warning-400',\n },\n {\n label: 'Questões em branco',\n value: stats.blankQuestions,\n colorClass: 'bg-background-300',\n },\n ];\n}\n\nfunction buildMaterialSlices(stats: UserPerformanceMaterialStats): PieSlice[] {\n return [\n {\n label: 'Aulas recomendadas',\n value: stats.totalRecommendedLessons,\n colorClass: 'bg-warning-300',\n color: 'var(--Indicator-Indicator-Positive, #F8CC2E)',\n },\n {\n label: 'Atividades',\n value: stats.totalActivities,\n colorClass: 'bg-success-700',\n color: 'var(--Success-success700, #206F3E)',\n },\n ];\n}\n\n// ─── Sub-components ──────────────────────────────────────────\n\n/**\n * A questions stats section: one or two metrics + legend + pie chart.\n * Total displayed = correctQuestions + incorrectQuestions + blankQuestions\n * (backend totalAnswered excludes blank questions).\n * When `count` + `countLabel` are provided, renders two MetricBoxes side by side.\n */\nconst QuestionsSection = ({\n title,\n totalLabel,\n stats,\n count,\n countLabel,\n}: {\n title: string;\n totalLabel: string;\n stats: UserPerformanceQuestionStats;\n count?: number;\n countLabel?: string;\n}) => {\n const displayTotal =\n stats.correctQuestions + stats.incorrectQuestions + stats.blankQuestions;\n const slices = buildQuestionsSlices(stats);\n\n return (\n <div className=\"flex flex-col gap-3\">\n <SectionTitle>{title}</SectionTitle>\n {count !== undefined && countLabel ? (\n <div className=\"flex gap-3\">\n <MetricBox className=\"flex-1\" label={countLabel} value={count} />\n <MetricBox\n className=\"flex-1\"\n label={totalLabel}\n value={displayTotal}\n />\n </div>\n ) : (\n <MetricBox label={totalLabel} value={displayTotal} />\n )}\n <LegendPieCard slices={slices} />\n </div>\n );\n};\n\nconst LessonsTable = ({\n lessons,\n getLessonIcon,\n}: {\n lessons: UserPerformanceLesson[];\n getLessonIcon?: (lesson: UserPerformanceLesson) => ReactNode;\n}) => (\n <div className=\"flex flex-col gap-3\">\n <SectionTitle>Aulas baixadas</SectionTitle>\n <div className=\"bg-background border border-border-50 rounded-xl overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-border-100\">\n <Text size=\"xs\" weight=\"bold\" className=\"text-text-600\">\n Aula\n </Text>\n <Text size=\"xs\" weight=\"bold\" className=\"text-text-600\">\n BNCC\n </Text>\n </div>\n {lessons.length === 0 ? (\n <div className=\"flex items-center justify-center py-6\">\n <Text size=\"sm\" className=\"text-text-400\">\n Nenhuma aula baixada\n </Text>\n </div>\n ) : (\n lessons.map((lesson) => (\n <div\n key={lesson.lessonId}\n className=\"flex items-center justify-between px-4 py-3 border-b border-border-50 last:border-b-0\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n {getLessonIcon && (\n <span className=\"shrink-0 [&>svg]:w-5 [&>svg]:h-5\">\n {getLessonIcon(lesson)}\n </span>\n )}\n <Text size=\"sm\" className=\"text-text-950 truncate\">\n {lesson.lessonName}\n </Text>\n </div>\n <Text size=\"sm\" className=\"text-text-500 shrink-0 ml-3\">\n {lesson.bnccCode ?? '—'}\n </Text>\n </div>\n ))\n )}\n </div>\n </div>\n);\n\n// ─── Modal content ────────────────────────────────────────────\n\nconst StudentModalContent = ({\n data,\n getLessonIcon,\n activityCounts,\n}: {\n data: UserPerformanceStudentData;\n getLessonIcon?: (lesson: UserPerformanceLesson) => ReactNode;\n activityCounts?: PerformanceReportModalProps['studentActivityCounts'];\n}) => (\n <div className=\"flex flex-col gap-6\">\n <UserHeader\n name={data.user.name}\n school={data.school.schoolName}\n className={data.class.className}\n year={data.schoolYear.schoolYearName}\n statusBadge={\n data.status ? (\n <Badge\n variant=\"solid\"\n action={getStatusVariant(data.status)}\n size=\"small\"\n >\n {data.status.toUpperCase()}\n </Badge>\n ) : undefined\n }\n />\n\n <QuestionsSection\n title=\"Dados gerais\"\n totalLabel=\"Total de questões respondidas\"\n stats={data.generalStats}\n />\n\n <QuestionsSection\n title=\"Dados de atividades\"\n totalLabel=\"Total de questões\"\n stats={data.activityStats}\n count={activityCounts?.activities}\n countLabel=\"Atividades realizadas\"\n />\n\n <QuestionsSection\n title=\"Dados de questionários\"\n totalLabel=\"Total de questões\"\n stats={data.questionnaireStats}\n count={activityCounts?.questionnaires}\n countLabel=\"Questionários realizados\"\n />\n\n <QuestionsSection\n title=\"Dados de simulados\"\n totalLabel=\"Total de questões\"\n stats={data.simulationStats}\n count={activityCounts?.simulations}\n countLabel=\"Simulados realizados\"\n />\n\n <LessonsTable\n lessons={data.downloadedLessons}\n getLessonIcon={getLessonIcon}\n />\n </div>\n);\n\nconst ProfessionalModalContent = ({\n data,\n userInfo,\n}: {\n data: UserPerformanceProfessionalData;\n userInfo?: PerformanceReportModalProps['professionalUserInfo'];\n}) => {\n const slices = buildMaterialSlices(data.generalStats);\n\n return (\n <div className=\"flex flex-col gap-6\">\n {userInfo && (\n <UserHeader\n name={userInfo.userName}\n school={userInfo.schoolName}\n className={userInfo.className}\n year={userInfo.year}\n />\n )}\n\n <div className=\"flex flex-col gap-3\">\n <SectionTitle>Dados gerais</SectionTitle>\n <MetricBox\n label=\"Total de material produzido\"\n value={data.generalStats.totalMaterialProduced}\n />\n <LegendPieCard slices={slices} />\n </div>\n </div>\n );\n};\n\nconst LoadingSkeleton = () => (\n <div className=\"flex flex-col gap-4 animate-pulse\">\n <div className=\"h-16 bg-background-200 rounded-xl\" />\n <div className=\"h-5 bg-background-200 rounded w-32 mt-2\" />\n <div className=\"h-12 bg-background-200 rounded-xl\" />\n <div className=\"h-32 bg-background-200 rounded-xl\" />\n </div>\n);\n\n// ─── Main component ───────────────────────────────────────────\n\n/**\n * PerformanceReportModal component\n *\n * Displays a modal with performance data for a user from `GET /performance/user/:userId`.\n *\n * Two variants driven by the profile type:\n * - `STUDENT` — question stats per section (generalStats, activityStats,\n * questionnaireStats, simulationStats) + downloaded lessons table\n * - `PROFESSIONAL` — material production stats (totalMaterialProduced,\n * totalRecommendedLessons, totalActivities)\n *\n * The professional API response does not include user/school context.\n * Pass `professionalUserInfo` (from the table row) to show a user header.\n *\n * @example\n * ```tsx\n * // Student variant — pass API response directly\n * <PerformanceReportModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * variant={PerformanceReportModalVariant.STUDENT}\n * data={apiResponse.data}\n * />\n *\n * // Professional variant — API has no user context, pass it separately\n * <PerformanceReportModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * variant={PerformanceReportModalVariant.PROFESSIONAL}\n * data={apiResponse.data}\n * professionalUserInfo={{\n * userName: row.userName,\n * schoolName: row.schoolName,\n * className: row.className,\n * year: row.year,\n * }}\n * />\n * ```\n */\nexport const PerformanceReportModal = ({\n isOpen,\n onClose,\n title = 'Desempenho em 1 ano',\n loading = false,\n error = null,\n ...variantProps\n}: PerformanceReportModalProps) => {\n let content: ReactNode;\n\n if (loading) {\n content = <LoadingSkeleton />;\n } else if (error) {\n content = <ErrorContent message={error} />;\n } else if (variantProps.data !== null) {\n if (variantProps.variant === REPORT_MODAL_VARIANT.STUDENT) {\n content = (\n <StudentModalContent\n data={variantProps.data}\n getLessonIcon={variantProps.getLessonIcon}\n activityCounts={variantProps.studentActivityCounts}\n />\n );\n } else {\n content = (\n <ProfessionalModalContent\n data={variantProps.data}\n userInfo={variantProps.professionalUserInfo}\n />\n );\n }\n }\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n size=\"lg\"\n contentClassName=\"max-h-[80vh] overflow-y-auto\"\n >\n {content}\n </Modal>\n );\n};\n\nexport default PerformanceReportModal;\n"]}
@@ -3,7 +3,7 @@
3
3
  var _chunkJZZ5DD3Rjs = require('./chunk-JZZ5DD3R.js');
4
4
 
5
5
 
6
- var _chunkG4NK66PMjs = require('./chunk-G4NK66PM.js');
6
+ var _chunkJTWXQ267js = require('./chunk-JTWXQ267.js');
7
7
 
8
8
 
9
9
 
@@ -53,7 +53,7 @@ var AnnouncementModal = ({
53
53
  const embeddableVideoId = videoUrl && _chunkQFG6ZOOTjs.isYouTubeUrl.call(void 0, videoUrl) ? _chunkQFG6ZOOTjs.getYouTubeVideoId.call(void 0, videoUrl) : null;
54
54
  const hasMoreAnnouncements = remainingCount > 0;
55
55
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
56
- _chunkG4NK66PMjs.Modal_default,
56
+ _chunkJTWXQ267js.Modal_default,
57
57
  {
58
58
  isOpen,
59
59
  onClose,
@@ -105,4 +105,4 @@ var AnnouncementModal_default = AnnouncementModal;
105
105
 
106
106
 
107
107
  exports.AnnouncementMessage = AnnouncementMessage; exports.AnnouncementModal_default = AnnouncementModal_default;
108
- //# sourceMappingURL=chunk-Q5XGBTOY.js.map
108
+ //# sourceMappingURL=chunk-ZNITTMV5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-Q5XGBTOY.js","../src/components/AnnouncementModal/AnnouncementModal.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;AC0BU,+CAAA;AA9BV,IAAM,mBAAA,EAAqB,YAAA;AAoBpB,IAAM,oBAAA,EAAsB,CAAC,EAAE,KAAK,CAAA,EAAA,GAAgC;AACzE,EAAA,MAAM,MAAA,EAAQ,iDAAA,IAAuB,CAAA;AAErC,EAAA,uBACE,6BAAA;AAAA,IAAC,6BAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAU,yDAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,GAAA;AAAA,QAAI,CAAC,IAAA,EAAM,KAAA,EAAA,GAChB,IAAA,CAAK,OAAA,kBACH,6BAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YAIC,IAAA,EAAM,IAAA,CAAK,IAAA;AAAA,YACX,MAAA,EAAO,QAAA;AAAA,YACP,GAAA,EAAI,qBAAA;AAAA,YACJ,SAAA,EAAU,6DAAA;AAAA,YAET,QAAA,EAAA,IAAA,CAAK;AAAA,UAAA,CAAA;AAAA,UAND,CAAA,EAAA;AAOP,QAAA;AAIJ,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;AAqCM;AACJ,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAC4B;AACvB,EAAA;AAEG,EAAA;AAEF,EAAA;AAGA,EAAA;AAGJ,EAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AAEK,QAAA;AAOD,wBAAA;AAGF,MAAA;AAGF,MAAA;AACG,QAAA;AACE,UAAA;AAAA,UAAA;AAAA,YAAA;AAC0C,YAAA;AAC/B,YAAA;AACK,YAAA;AACT,YAAA;AACgB,UAAA;AACxB,QAAA;AAID,QAAA;AACE,UAAA;AAAA,UAAA;AAAA,YAAA;AACO,YAAA;AACC,YAAA;AACH,YAAA;AACM,YAAA;AACX,UAAA;AAED,QAAA;AAGD,QAAA;AAEA,QAAA;AACE,UAAA;AAAA,UAAA;AAAA,YAAA;AACO,YAAA;AACC,YAAA;AACH,YAAA;AACM,YAAA;AAEI,UAAA;AAChB,QAAA;AAEJ,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;AAEO;ADxEI;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-Q5XGBTOY.js","sourcesContent":[null,"import Modal from '../Modal/Modal';\nimport Button from '../Button/Button';\nimport Text from '../Text/Text';\nimport {\n getYouTubeEmbedUrl,\n getYouTubeVideoId,\n isYouTubeUrl,\n} from '../Modal/utils/videoUtils';\nimport { splitTextWithLinks } from '../../utils/announcements';\nimport type { Announcement } from '../../types/announcements';\n\n/**\n * Default label for the call-to-action button when the backoffice left it blank.\n */\nconst DEFAULT_LINK_LABEL = 'Saiba mais';\n\n/**\n * Props for {@link AnnouncementMessage}\n */\ntype AnnouncementMessageProps = {\n /** Raw message text, possibly containing bare URLs */\n text: string;\n};\n\n/**\n * Renders an announcement message with any bare URL turned into a link.\n *\n * Links open in a new tab with `noopener noreferrer`, so the announcement can\n * never reach back into the app through `window.opener`. Rendering React nodes\n * (rather than injecting HTML) keeps backoffice-authored text inert.\n *\n * @param text - Raw message text\n * @returns The message, with clickable links\n */\nexport const AnnouncementMessage = ({ text }: AnnouncementMessageProps) => {\n const parts = splitTextWithLinks(text);\n\n return (\n <Text\n size=\"sm\"\n className=\"text-text-700 whitespace-pre-line break-words leading-6\"\n >\n {parts.map((part, index) =>\n part.isLink ? (\n <a\n // Segments have no stable id of their own; the index is the position\n // in an immutable split of the same string.\n key={`${part.text}-${index}`}\n href={part.text}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-700 underline break-all hover:text-primary-800\"\n >\n {part.text}\n </a>\n ) : (\n <span key={`${part.text}-${index}`}>{part.text}</span>\n )\n )}\n </Text>\n );\n};\n\n/**\n * Props for {@link AnnouncementModal}\n */\nexport type AnnouncementModalProps = {\n /** Announcement to display */\n announcement: Announcement;\n /** Whether the modal is open */\n isOpen: boolean;\n /** Called when the user dismisses this announcement */\n onClose: () => void;\n /**\n * How many announcements are still queued behind this one. Drives the button\n * label (\"Próxima\" vs \"Entendi\") and the \"1 de 3\" counter.\n */\n remainingCount?: number;\n};\n\n/**\n * Modal that shows one global announcement right after login.\n *\n * Handles the three content combinations the backoffice can produce: a YouTube\n * video alone, a message alone, or both — plus an optional call-to-action link.\n * The video is embedded through the same `videoUtils` the rest of the lib uses,\n * so an unembeddable URL degrades to a link instead of a blank iframe.\n *\n * @example\n * ```tsx\n * <AnnouncementModal\n * announcement={announcement}\n * isOpen\n * onClose={dismissCurrent}\n * remainingCount={2}\n * />\n * ```\n */\nconst AnnouncementModal = ({\n announcement,\n isOpen,\n onClose,\n remainingCount = 0,\n}: AnnouncementModalProps) => {\n if (!isOpen) return null;\n\n const { title, message, videoUrl, linkUrl, linkLabel } = announcement;\n\n const embeddableVideoId =\n videoUrl && isYouTubeUrl(videoUrl) ? getYouTubeVideoId(videoUrl) : null;\n\n const hasMoreAnnouncements = remainingCount > 0;\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n size=\"lg\"\n footer={\n <div className=\"flex w-full items-center justify-between gap-3\">\n {hasMoreAnnouncements ? (\n <Text size=\"xs\" className=\"text-text-500\">\n {`Restam ${remainingCount}`}\n </Text>\n ) : (\n <span />\n )}\n <Button variant=\"solid\" action=\"primary\" onClick={onClose}>\n {hasMoreAnnouncements ? 'Próxima' : 'Entendi'}\n </Button>\n </div>\n }\n >\n <div className=\"flex flex-col gap-4\">\n {embeddableVideoId && (\n <iframe\n src={getYouTubeEmbedUrl(embeddableVideoId)}\n className=\"w-full aspect-video rounded-lg\"\n allowFullScreen\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n title={`Vídeo: ${title}`}\n />\n )}\n\n {/* A video URL the embed cannot handle still has to be reachable */}\n {videoUrl && !embeddableVideoId && (\n <a\n href={videoUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-700 underline break-all hover:text-primary-800\"\n >\n Assistir ao vídeo\n </a>\n )}\n\n {message && <AnnouncementMessage text={message} />}\n\n {linkUrl && (\n <a\n href={linkUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"self-start rounded-md border border-primary-950 bg-primary-950 px-4 py-2 text-sm font-medium text-text hover:bg-primary-800 hover:border-primary-800\"\n >\n {linkLabel || DEFAULT_LINK_LABEL}\n </a>\n )}\n </div>\n </Modal>\n );\n};\n\nexport default AnnouncementModal;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-ZNITTMV5.js","../src/components/AnnouncementModal/AnnouncementModal.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;AC0BU,+CAAA;AA9BV,IAAM,mBAAA,EAAqB,YAAA;AAoBpB,IAAM,oBAAA,EAAsB,CAAC,EAAE,KAAK,CAAA,EAAA,GAAgC;AACzE,EAAA,MAAM,MAAA,EAAQ,iDAAA,IAAuB,CAAA;AAErC,EAAA,uBACE,6BAAA;AAAA,IAAC,6BAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAU,yDAAA;AAAA,MAET,QAAA,EAAA,KAAA,CAAM,GAAA;AAAA,QAAI,CAAC,IAAA,EAAM,KAAA,EAAA,GAChB,IAAA,CAAK,OAAA,kBACH,6BAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YAIC,IAAA,EAAM,IAAA,CAAK,IAAA;AAAA,YACX,MAAA,EAAO,QAAA;AAAA,YACP,GAAA,EAAI,qBAAA;AAAA,YACJ,SAAA,EAAU,6DAAA;AAAA,YAET,QAAA,EAAA,IAAA,CAAK;AAAA,UAAA,CAAA;AAAA,UAND,CAAA,EAAA;AAOP,QAAA;AAIJ,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;AAqCM;AACJ,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAC4B;AACvB,EAAA;AAEG,EAAA;AAEF,EAAA;AAGA,EAAA;AAGJ,EAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AAEK,QAAA;AAOD,wBAAA;AAGF,MAAA;AAGF,MAAA;AACG,QAAA;AACE,UAAA;AAAA,UAAA;AAAA,YAAA;AAC0C,YAAA;AAC/B,YAAA;AACK,YAAA;AACT,YAAA;AACgB,UAAA;AACxB,QAAA;AAID,QAAA;AACE,UAAA;AAAA,UAAA;AAAA,YAAA;AACO,YAAA;AACC,YAAA;AACH,YAAA;AACM,YAAA;AACX,UAAA;AAED,QAAA;AAGD,QAAA;AAEA,QAAA;AACE,UAAA;AAAA,UAAA;AAAA,YAAA;AACO,YAAA;AACC,YAAA;AACH,YAAA;AACM,YAAA;AAEI,UAAA;AAChB,QAAA;AAEJ,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;AAEO;ADxEI;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-ZNITTMV5.js","sourcesContent":[null,"import Modal from '../Modal/Modal';\nimport Button from '../Button/Button';\nimport Text from '../Text/Text';\nimport {\n getYouTubeEmbedUrl,\n getYouTubeVideoId,\n isYouTubeUrl,\n} from '../Modal/utils/videoUtils';\nimport { splitTextWithLinks } from '../../utils/announcements';\nimport type { Announcement } from '../../types/announcements';\n\n/**\n * Default label for the call-to-action button when the backoffice left it blank.\n */\nconst DEFAULT_LINK_LABEL = 'Saiba mais';\n\n/**\n * Props for {@link AnnouncementMessage}\n */\ntype AnnouncementMessageProps = {\n /** Raw message text, possibly containing bare URLs */\n text: string;\n};\n\n/**\n * Renders an announcement message with any bare URL turned into a link.\n *\n * Links open in a new tab with `noopener noreferrer`, so the announcement can\n * never reach back into the app through `window.opener`. Rendering React nodes\n * (rather than injecting HTML) keeps backoffice-authored text inert.\n *\n * @param text - Raw message text\n * @returns The message, with clickable links\n */\nexport const AnnouncementMessage = ({ text }: AnnouncementMessageProps) => {\n const parts = splitTextWithLinks(text);\n\n return (\n <Text\n size=\"sm\"\n className=\"text-text-700 whitespace-pre-line break-words leading-6\"\n >\n {parts.map((part, index) =>\n part.isLink ? (\n <a\n // Segments have no stable id of their own; the index is the position\n // in an immutable split of the same string.\n key={`${part.text}-${index}`}\n href={part.text}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-700 underline break-all hover:text-primary-800\"\n >\n {part.text}\n </a>\n ) : (\n <span key={`${part.text}-${index}`}>{part.text}</span>\n )\n )}\n </Text>\n );\n};\n\n/**\n * Props for {@link AnnouncementModal}\n */\nexport type AnnouncementModalProps = {\n /** Announcement to display */\n announcement: Announcement;\n /** Whether the modal is open */\n isOpen: boolean;\n /** Called when the user dismisses this announcement */\n onClose: () => void;\n /**\n * How many announcements are still queued behind this one. Drives the button\n * label (\"Próxima\" vs \"Entendi\") and the \"1 de 3\" counter.\n */\n remainingCount?: number;\n};\n\n/**\n * Modal that shows one global announcement right after login.\n *\n * Handles the three content combinations the backoffice can produce: a YouTube\n * video alone, a message alone, or both — plus an optional call-to-action link.\n * The video is embedded through the same `videoUtils` the rest of the lib uses,\n * so an unembeddable URL degrades to a link instead of a blank iframe.\n *\n * @example\n * ```tsx\n * <AnnouncementModal\n * announcement={announcement}\n * isOpen\n * onClose={dismissCurrent}\n * remainingCount={2}\n * />\n * ```\n */\nconst AnnouncementModal = ({\n announcement,\n isOpen,\n onClose,\n remainingCount = 0,\n}: AnnouncementModalProps) => {\n if (!isOpen) return null;\n\n const { title, message, videoUrl, linkUrl, linkLabel } = announcement;\n\n const embeddableVideoId =\n videoUrl && isYouTubeUrl(videoUrl) ? getYouTubeVideoId(videoUrl) : null;\n\n const hasMoreAnnouncements = remainingCount > 0;\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n size=\"lg\"\n footer={\n <div className=\"flex w-full items-center justify-between gap-3\">\n {hasMoreAnnouncements ? (\n <Text size=\"xs\" className=\"text-text-500\">\n {`Restam ${remainingCount}`}\n </Text>\n ) : (\n <span />\n )}\n <Button variant=\"solid\" action=\"primary\" onClick={onClose}>\n {hasMoreAnnouncements ? 'Próxima' : 'Entendi'}\n </Button>\n </div>\n }\n >\n <div className=\"flex flex-col gap-4\">\n {embeddableVideoId && (\n <iframe\n src={getYouTubeEmbedUrl(embeddableVideoId)}\n className=\"w-full aspect-video rounded-lg\"\n allowFullScreen\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n title={`Vídeo: ${title}`}\n />\n )}\n\n {/* A video URL the embed cannot handle still has to be reachable */}\n {videoUrl && !embeddableVideoId && (\n <a\n href={videoUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-700 underline break-all hover:text-primary-800\"\n >\n Assistir ao vídeo\n </a>\n )}\n\n {message && <AnnouncementMessage text={message} />}\n\n {linkUrl && (\n <a\n href={linkUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"self-start rounded-md border border-primary-950 bg-primary-950 px-4 py-2 text-sm font-medium text-text hover:bg-primary-800 hover:border-primary-800\"\n >\n {linkLabel || DEFAULT_LINK_LABEL}\n </a>\n )}\n </div>\n </Modal>\n );\n};\n\nexport default AnnouncementModal;\n"]}
@@ -4,11 +4,22 @@ import type { EnemMomentEducationStage } from './types';
4
4
  * stage of the classes. They sit in the page's header, in place of the period
5
5
  * and filters of the other reports.
6
6
  */
7
- export declare function EnemMomentHeaderFilters({ durations, onDurationsChange, educationStage, onEducationStageChange, }: Readonly<{
7
+ export declare function EnemMomentHeaderFilters({ durations, onDurationsChange, educationStage, onEducationStageChange, availableStages, }: Readonly<{
8
8
  /** "Tempo de prova" picks, in minutes; empty is every time. */
9
9
  durations: number[];
10
10
  onDurationsChange: (durations: number[]) => void;
11
11
  educationStage: EnemMomentEducationStage;
12
12
  onEducationStageChange: (stage: EnemMomentEducationStage) => void;
13
+ /**
14
+ * Teaching stages the school has, as the scope's classes spell them.
15
+ *
16
+ * A school with a single modality has nothing to pick, so the "Série" select
17
+ * is not rendered at all — an only option is a statement, not a choice, and
18
+ * it invites the manager to look for the others.
19
+ *
20
+ * `undefined` is "not known yet" and keeps every stage on offer, which is
21
+ * what the screens did before the scope could answer this.
22
+ */
23
+ availableStages?: readonly EnemMomentEducationStage[];
13
24
  }>): import("react/jsx-runtime").JSX.Element;
14
25
  //# sourceMappingURL=HeaderFilters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderFilters.d.ts","sourceRoot":"","sources":["../../../src/components/EnemMoment/HeaderFilters.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAKxD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,sBAAsB,GACvB,EAAE,QAAQ,CAAC;IACV,+DAA+D;IAC/D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,wBAAwB,CAAC;IACzC,sBAAsB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACnE,CAAC,2CAqCD"}
1
+ {"version":3,"file":"HeaderFilters.d.ts","sourceRoot":"","sources":["../../../src/components/EnemMoment/HeaderFilters.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAuBxD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,eAAe,GAChB,EAAE,QAAQ,CAAC;IACV,+DAA+D;IAC/D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,wBAAwB,CAAC;IACzC,sBAAsB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAClE;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACvD,CAAC,2CAwDD"}
@@ -365,7 +365,8 @@ export interface EnemMomentSchoolsQuery extends EnemMomentRequest {
365
365
  order?: 'asc' | 'desc';
366
366
  }
367
367
  /**
368
- * What the tables' filters offer: the municipalities and classes of the cut.
368
+ * What the filters offer: the municipalities, classes and teaching stages of
369
+ * the cut.
369
370
  *
370
371
  * `POST /enem-moment-report/filter-options`.
371
372
  */
@@ -377,6 +378,14 @@ export interface EnemMomentFilterOptions {
377
378
  className: string | null;
378
379
  schoolYearName: string | null;
379
380
  }>;
381
+ /**
382
+ * The "Série" options the school has, for `EnemMomentHeaderFilters`.
383
+ *
384
+ * Optional because it genuinely can be absent: an API older than the field
385
+ * answers without it, and that reading must keep meaning "not known", which
386
+ * leaves every stage on offer.
387
+ */
388
+ educationStages?: EnemMomentEducationStage[];
380
389
  }
381
390
  /** `POST /enem-moment-report/schools`. */
382
391
  export interface EnemMomentSchoolsPage {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/EnemMoment/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/EnemMoment/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEzF;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4DAA4D;AAC5D,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,KAAK,GAAG,aAAa,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,GAAG,SAAS,CAAC;AAExE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,wBAAwB,CAAC;IACzC,kEAAkE;IAClE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oCAAoC;AACpC,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,kDAAkD;IAClD,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,4BAA4B,EAAE,MAAM,CAAC;IACrC,mDAAmD;IACnD,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,8CAA8C;IAC9C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,yCAAyC;AACzC,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,qBAAqB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IACzC,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;IACxC,mEAAmE;IACnE,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,IAAI,EAAE;QACJ,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,0CAA0C;QAC1C,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;QACzC,+DAA+D;QAC/D,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;IACF;;;;;OAKG;IACH,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;IACrD;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,MAAM,CAAC;IAClC,oDAAoD;IACpD,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,2EAA2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,MAAM,WAAW,4BAA6B,SAAQ,sBAAsB;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,sBAAsB,GAAG;QAC/B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B;;;WAGG;QACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,KAAK,EAAE,yBAAyB,EAAE,CAAC;IACnC,4BAA4B;IAC5B,QAAQ,EAAE,4BAA4B,EAAE,CAAC;CAC1C;AAED,oDAAoD;AACpD,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uCAAuC;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,4BAA4B,GAAG;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACjD,KAAK,EAAE,yBAAyB,EAAE,CAAC;IACnC,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qEAAqE;IACrE,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,2CAA2C;AAC3C,MAAM,MAAM,yBAAyB,GACjC,MAAM,GACN,cAAc,GACd,qBAAqB,GACrB,SAAS,GACT,WAAW,GACX,OAAO,GACP,SAAS,CAAC;AAEd,4EAA4E;AAC5E,MAAM,MAAM,6BAA6B,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,6BAA6B,CAAC;IAC9C;;;OAGG;IACH,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACvC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,gCAAgC;IAChC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mEAAmE;IACnE,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oDAAoD;IACpD,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,2CAA2C;AAC3C,MAAM,MAAM,wBAAwB,GAChC,YAAY,GACZ,cAAc,GACd,yBAAyB,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACvC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC,CAAC;IACH;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,wBAAwB,EAAE,CAAC;CAC9C;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,kDAAkD;AAClD,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE;QACP,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;IACF,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,mCAAmC;IACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iEAAiE;IACjE,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC1C,YAAY,EAAE,2BAA2B,GAAG,IAAI,CAAC;IACjD,aAAa,EAAE,2BAA2B,GAAG,IAAI,CAAC;CACnD;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wEAAwE;IACxE,UAAU,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,uBAAuB,CAAC;CACxC;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,QAAQ,EAAE,KAAK,CAAC;QACd,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,KAAK,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,oBAAoB,CAAA;SAAE,CAAC,CAAC;KAClE,CAAC,CAAC;CACJ"}