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.
- package/dist/AccessReportModal/index.js +4 -5
- package/dist/AccessReportModal/index.js.map +1 -1
- package/dist/AccessReportModal/index.mjs +3 -4
- package/dist/AccessibilityWidget/index.js +4 -5
- package/dist/AccessibilityWidget/index.js.map +1 -1
- package/dist/AccessibilityWidget/index.mjs +3 -4
- package/dist/Accordation/index.js +4 -4
- package/dist/Accordation/index.mjs +3 -3
- package/dist/ActivitiesHistory/index.js +48 -49
- package/dist/ActivitiesHistory/index.js.map +1 -1
- package/dist/ActivitiesHistory/index.mjs +47 -48
- package/dist/ActivityCardQuestionBanks/index.d.ts.map +1 -1
- package/dist/ActivityCardQuestionBanks/index.js +48 -49
- package/dist/ActivityCardQuestionBanks/index.js.map +1 -1
- package/dist/ActivityCardQuestionBanks/index.mjs +47 -48
- package/dist/ActivityCardQuestionPreview/index.js +48 -49
- package/dist/ActivityCardQuestionPreview/index.js.map +1 -1
- package/dist/ActivityCardQuestionPreview/index.mjs +47 -48
- package/dist/ActivityCreate/ActivityCreateContent/index.js +48 -49
- package/dist/ActivityCreate/ActivityCreateContent/index.js.map +1 -1
- package/dist/ActivityCreate/ActivityCreateContent/index.mjs +47 -48
- package/dist/ActivityCreate/index.js +48 -49
- package/dist/ActivityCreate/index.js.map +1 -1
- package/dist/ActivityCreate/index.mjs +47 -48
- package/dist/ActivityDetails/index.js +48 -49
- package/dist/ActivityDetails/index.js.map +1 -1
- package/dist/ActivityDetails/index.mjs +47 -48
- package/dist/ActivityFilters/index.js +48 -49
- package/dist/ActivityFilters/index.js.map +1 -1
- package/dist/ActivityFilters/index.mjs +47 -48
- package/dist/ActivityPageLayout/index.js +48 -49
- package/dist/ActivityPageLayout/index.js.map +1 -1
- package/dist/ActivityPageLayout/index.mjs +47 -48
- package/dist/ActivityPreview/index.js +48 -49
- package/dist/ActivityPreview/index.js.map +1 -1
- package/dist/ActivityPreview/index.mjs +47 -48
- package/dist/AlertDialog/index.d.ts.map +1 -1
- package/dist/AlertDialog/index.js +3 -3
- package/dist/AlertDialog/index.mjs +2 -2
- package/dist/AlertManager/index.js +48 -49
- package/dist/AlertManager/index.js.map +1 -1
- package/dist/AlertManager/index.mjs +47 -48
- package/dist/AlertManagerView/index.js +4 -5
- package/dist/AlertManagerView/index.js.map +1 -1
- package/dist/AlertManagerView/index.mjs +3 -4
- package/dist/AnnouncementModal/index.js +4 -5
- package/dist/AnnouncementModal/index.js.map +1 -1
- package/dist/AnnouncementModal/index.mjs +3 -4
- package/dist/AnnouncementsGate/index.js +5 -6
- package/dist/AnnouncementsGate/index.js.map +1 -1
- package/dist/AnnouncementsGate/index.mjs +4 -5
- package/dist/AnswerKeyModal/index.js +4 -5
- package/dist/AnswerKeyModal/index.js.map +1 -1
- package/dist/AnswerKeyModal/index.mjs +3 -4
- package/dist/AppHeader/index.js +8 -9
- package/dist/AppHeader/index.js.map +1 -1
- package/dist/AppHeader/index.mjs +7 -8
- package/dist/CalendarCard/index.js +6 -7
- package/dist/CalendarCard/index.js.map +1 -1
- package/dist/CalendarCard/index.mjs +5 -6
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +3 -3
- package/dist/Card/index.mjs +2 -2
- package/dist/Chat/index.js +4 -5
- package/dist/Chat/index.js.map +1 -1
- package/dist/Chat/index.mjs +3 -4
- package/dist/Chatbot/index.js +4 -5
- package/dist/Chatbot/index.js.map +1 -1
- package/dist/Chatbot/index.mjs +3 -4
- package/dist/CheckBoxGroup/index.js +48 -49
- package/dist/CheckBoxGroup/index.js.map +1 -1
- package/dist/CheckBoxGroup/index.mjs +47 -48
- package/dist/ComparatorChart/ComparatorView/index.js +4 -5
- package/dist/ComparatorChart/ComparatorView/index.js.map +1 -1
- package/dist/ComparatorChart/ComparatorView/index.mjs +3 -4
- package/dist/CorrectActivityModal/index.js +9 -10
- package/dist/CorrectActivityModal/index.js.map +1 -1
- package/dist/CorrectActivityModal/index.mjs +8 -9
- package/dist/DownloadButton/index.js +6 -7
- package/dist/DownloadButton/index.js.map +1 -1
- package/dist/DownloadButton/index.mjs +5 -6
- package/dist/DownloadModal/index.js +4 -5
- package/dist/DownloadModal/index.js.map +1 -1
- package/dist/DownloadModal/index.mjs +3 -4
- package/dist/DropdownMenu/index.js +4 -5
- package/dist/DropdownMenu/index.js.map +1 -1
- package/dist/DropdownMenu/index.mjs +3 -4
- package/dist/EnemClassroomStartModal/index.js +8 -9
- package/dist/EnemClassroomStartModal/index.js.map +1 -1
- package/dist/EnemClassroomStartModal/index.mjs +7 -8
- package/dist/EnemMoment/index.js +110 -94
- package/dist/EnemMoment/index.js.map +1 -1
- package/dist/EnemMoment/index.mjs +74 -58
- package/dist/EnemMoment/index.mjs.map +1 -1
- package/dist/EnemMomentStudentModal/index.js +62 -63
- package/dist/EnemMomentStudentModal/index.js.map +1 -1
- package/dist/EnemMomentStudentModal/index.mjs +48 -49
- package/dist/EnemMomentStudentModal/index.mjs.map +1 -1
- package/dist/EssayThemePicker/index.js +3 -3
- package/dist/EssayThemePicker/index.mjs +2 -2
- package/dist/ExamDetailsLayout/ExamDetailsPage/index.js +48 -49
- package/dist/ExamDetailsLayout/ExamDetailsPage/index.js.map +1 -1
- package/dist/ExamDetailsLayout/ExamDetailsPage/index.mjs +47 -48
- package/dist/ExamPageLayout/index.js +48 -49
- package/dist/ExamPageLayout/index.js.map +1 -1
- package/dist/ExamPageLayout/index.mjs +47 -48
- package/dist/Forum/index.js +6 -7
- package/dist/Forum/index.js.map +1 -1
- package/dist/Forum/index.mjs +5 -6
- package/dist/IconButton/index.js +2 -2
- package/dist/IconButton/index.mjs +1 -1
- package/dist/LessonCardPreview/index.js +48 -49
- package/dist/LessonCardPreview/index.js.map +1 -1
- package/dist/LessonCardPreview/index.mjs +47 -48
- package/dist/LessonMediaSections/index.js +48 -49
- package/dist/LessonMediaSections/index.js.map +1 -1
- package/dist/LessonMediaSections/index.mjs +47 -48
- package/dist/LessonsCatalog/index.js +48 -49
- package/dist/LessonsCatalog/index.js.map +1 -1
- package/dist/LessonsCatalog/index.mjs +47 -48
- package/dist/Modal/index.d.ts +11 -1
- package/dist/Modal/index.d.ts.map +1 -1
- package/dist/Modal/index.js +3 -4
- package/dist/Modal/index.js.map +1 -1
- package/dist/Modal/index.mjs +2 -3
- package/dist/MultiCheckSelect/index.js +5 -6
- package/dist/MultiCheckSelect/index.js.map +1 -1
- package/dist/MultiCheckSelect/index.mjs +4 -5
- package/dist/NotificationCard/index.js +6 -7
- package/dist/NotificationCard/index.js.map +1 -1
- package/dist/NotificationCard/index.mjs +5 -6
- package/dist/PerformanceReportModal/index.js +4 -5
- package/dist/PerformanceReportModal/index.js.map +1 -1
- package/dist/PerformanceReportModal/index.mjs +3 -4
- package/dist/PrintableUsersTable/index.js +48 -49
- package/dist/PrintableUsersTable/index.js.map +1 -1
- package/dist/PrintableUsersTable/index.mjs +47 -48
- package/dist/ProgressModal/index.js +4 -5
- package/dist/ProgressModal/index.js.map +1 -1
- package/dist/ProgressModal/index.mjs +3 -4
- package/dist/QuestionsPerformanceCard/index.js +49 -50
- package/dist/QuestionsPerformanceCard/index.js.map +1 -1
- package/dist/QuestionsPerformanceCard/index.mjs +48 -49
- package/dist/Quiz/QuizResult/index.js +4 -4
- package/dist/Quiz/QuizResult/index.mjs +3 -3
- package/dist/Quiz/index.d.ts.map +1 -1
- package/dist/Quiz/index.js +8 -9
- package/dist/Quiz/index.js.map +1 -1
- package/dist/Quiz/index.mjs +7 -8
- package/dist/QuizTimer/index.d.ts +12 -0
- package/dist/QuizTimer/index.d.ts.map +1 -1
- package/dist/QuizTimer/index.js +4 -2
- package/dist/QuizTimer/index.js.map +1 -1
- package/dist/QuizTimer/index.mjs +4 -2
- package/dist/RecommendedLessonCreate/index.js +48 -49
- package/dist/RecommendedLessonCreate/index.js.map +1 -1
- package/dist/RecommendedLessonCreate/index.mjs +47 -48
- package/dist/RecommendedLessonDetails/index.js +11 -12
- package/dist/RecommendedLessonDetails/index.js.map +1 -1
- package/dist/RecommendedLessonDetails/index.mjs +10 -11
- package/dist/RecommendedLessonsHistory/index.js +48 -49
- package/dist/RecommendedLessonsHistory/index.js.map +1 -1
- package/dist/RecommendedLessonsHistory/index.mjs +47 -48
- package/dist/ReportDetailModal/index.js +5 -6
- package/dist/ReportDetailModal/index.js.map +1 -1
- package/dist/ReportDetailModal/index.mjs +4 -5
- package/dist/RichEditor/index.js +6 -7
- package/dist/RichEditor/index.js.map +1 -1
- package/dist/RichEditor/index.mjs +5 -6
- package/dist/{RichEditorCore-62NIM7PC.js → RichEditorCore-6OT3VNJR.js} +15 -16
- package/dist/RichEditorCore-6OT3VNJR.js.map +1 -0
- package/dist/{RichEditorCore-CCO3SSSU.mjs → RichEditorCore-IF6JQHEO.mjs} +6 -7
- package/dist/{RichEditorCore-CCO3SSSU.mjs.map → RichEditorCore-IF6JQHEO.mjs.map} +1 -1
- package/dist/Search/index.js +5 -6
- package/dist/Search/index.js.map +1 -1
- package/dist/Search/index.mjs +4 -5
- package/dist/SendActivityModal/SendActivityModal.js +48 -49
- package/dist/SendActivityModal/SendActivityModal.js.map +1 -1
- package/dist/SendActivityModal/SendActivityModal.mjs +47 -48
- package/dist/SendActivityModal/index.js +48 -49
- package/dist/SendActivityModal/index.js.map +1 -1
- package/dist/SendActivityModal/index.mjs +47 -48
- package/dist/SendLessonModal/index.js +48 -49
- package/dist/SendLessonModal/index.js.map +1 -1
- package/dist/SendLessonModal/index.mjs +47 -48
- package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js +48 -49
- package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js.map +1 -1
- package/dist/SimulatedPerformance/SimulatedPerformanceView/index.mjs +47 -48
- package/dist/SimulatedPerformance/useSimulatedPerformance/index.js +6 -7
- package/dist/SimulatedPerformance/useSimulatedPerformance/index.js.map +1 -1
- package/dist/SimulatedPerformance/useSimulatedPerformance/index.mjs +5 -6
- package/dist/SimulatedStudentSimulationsModal/index.js +8 -9
- package/dist/SimulatedStudentSimulationsModal/index.js.map +1 -1
- package/dist/SimulatedStudentSimulationsModal/index.mjs +7 -8
- package/dist/SimulationSummaryCards/index.js +5 -5
- package/dist/SimulationSummaryCards/index.mjs +4 -4
- package/dist/SimulationsPage/index.js +48 -49
- package/dist/SimulationsPage/index.js.map +1 -1
- package/dist/SimulationsPage/index.mjs +47 -48
- package/dist/StudentLessonProgressModal/index.js +6 -7
- package/dist/StudentLessonProgressModal/index.js.map +1 -1
- package/dist/StudentLessonProgressModal/index.mjs +5 -6
- package/dist/StudentPerformanceDetailsModal/index.js +9 -10
- package/dist/StudentPerformanceDetailsModal/index.js.map +1 -1
- package/dist/StudentPerformanceDetailsModal/index.mjs +8 -9
- package/dist/Support/TicketModal/index.js +4 -5
- package/dist/Support/TicketModal/index.js.map +1 -1
- package/dist/Support/TicketModal/index.mjs +3 -4
- package/dist/Support/index.js +5 -6
- package/dist/Support/index.js.map +1 -1
- package/dist/Support/index.mjs +4 -5
- package/dist/TableProvider/index.js +48 -49
- package/dist/TableProvider/index.js.map +1 -1
- package/dist/TableProvider/index.mjs +47 -48
- package/dist/UnifiedDraftModelPage/index.js +48 -49
- package/dist/UnifiedDraftModelPage/index.js.map +1 -1
- package/dist/UnifiedDraftModelPage/index.mjs +47 -48
- package/dist/UnifiedHistoryPage/index.js +48 -49
- package/dist/UnifiedHistoryPage/index.js.map +1 -1
- package/dist/UnifiedHistoryPage/index.mjs +47 -48
- package/dist/VideoPlayer/index.js +7 -8
- package/dist/VideoPlayer/index.js.map +1 -1
- package/dist/VideoPlayer/index.mjs +6 -7
- package/dist/Whiteboard/index.js +4 -5
- package/dist/Whiteboard/index.js.map +1 -1
- package/dist/Whiteboard/index.mjs +3 -4
- package/dist/{chunk-EVBQNVQW.mjs → chunk-233FSBU7.mjs} +5 -5
- package/dist/{chunk-JU63EMZM.js → chunk-24DQFREC.js} +3 -3
- package/dist/{chunk-JU63EMZM.js.map → chunk-24DQFREC.js.map} +1 -1
- package/dist/{chunk-QFXSQKW3.mjs → chunk-254EBPMW.mjs} +22 -22
- package/dist/{chunk-QFXSQKW3.mjs.map → chunk-254EBPMW.mjs.map} +1 -1
- package/dist/{chunk-SFQVZ4KQ.js → chunk-2ETPIOCD.js} +3 -3
- package/dist/{chunk-SFQVZ4KQ.js.map → chunk-2ETPIOCD.js.map} +1 -1
- package/dist/{chunk-RCNIBRZY.js → chunk-2VTJ2PKF.js} +10 -10
- package/dist/{chunk-RCNIBRZY.js.map → chunk-2VTJ2PKF.js.map} +1 -1
- package/dist/{chunk-B35D5S4G.js → chunk-2ZMGNCMI.js} +6 -6
- package/dist/{chunk-B35D5S4G.js.map → chunk-2ZMGNCMI.js.map} +1 -1
- package/dist/{chunk-QEPKR6ZF.js → chunk-3KSRDIS2.js} +20 -20
- package/dist/{chunk-QEPKR6ZF.js.map → chunk-3KSRDIS2.js.map} +1 -1
- package/dist/{chunk-MUCV5ZWZ.mjs → chunk-3YF7H577.mjs} +15 -9
- package/dist/chunk-3YF7H577.mjs.map +1 -0
- package/dist/{chunk-MADPP2PW.mjs → chunk-3ZSI2KI5.mjs} +2 -2
- package/dist/{chunk-2W7PTFXS.mjs → chunk-42XKJV56.mjs} +2 -2
- package/dist/{chunk-M6TC6XRQ.mjs → chunk-55ESXRRM.mjs} +2 -2
- package/dist/{chunk-4MURAKPC.mjs → chunk-5DJVOLVX.mjs} +3 -3
- package/dist/{chunk-YVT7CT3G.mjs → chunk-5P6CBDZ6.mjs} +2 -2
- package/dist/{chunk-BHKTJCFD.js → chunk-5QUP5HKB.js} +3 -3
- package/dist/{chunk-BHKTJCFD.js.map → chunk-5QUP5HKB.js.map} +1 -1
- package/dist/{chunk-SFEU7BMY.mjs → chunk-5SFNRXZB.mjs} +2 -2
- package/dist/{chunk-6ALEXGAN.js → chunk-6U4AI5SE.js} +6 -6
- package/dist/{chunk-6ALEXGAN.js.map → chunk-6U4AI5SE.js.map} +1 -1
- package/dist/{chunk-KYY4U5SN.mjs → chunk-6Z5W5J44.mjs} +3 -3
- package/dist/{chunk-XOKBMLW3.js → chunk-7IGUYLSF.js} +3 -3
- package/dist/{chunk-XOKBMLW3.js.map → chunk-7IGUYLSF.js.map} +1 -1
- package/dist/{chunk-GVYGPJH3.mjs → chunk-AU5M2766.mjs} +2 -2
- package/dist/{chunk-2VODGC76.js → chunk-AVEMHDN2.js} +66 -44
- package/dist/chunk-AVEMHDN2.js.map +1 -0
- package/dist/{chunk-HIIOADV4.js → chunk-AZSRKBYS.js} +63 -71
- package/dist/chunk-AZSRKBYS.js.map +1 -0
- package/dist/{chunk-CY2VKNCB.js → chunk-BQIBVC6X.js} +5 -5
- package/dist/{chunk-CY2VKNCB.js.map → chunk-BQIBVC6X.js.map} +1 -1
- package/dist/{chunk-M77TQ5JJ.mjs → chunk-BU32E6BR.mjs} +4 -6
- package/dist/{chunk-M77TQ5JJ.mjs.map → chunk-BU32E6BR.mjs.map} +1 -1
- package/dist/{chunk-5CQVDUDO.js → chunk-BUNF5POU.js} +5 -5
- package/dist/{chunk-5CQVDUDO.js.map → chunk-BUNF5POU.js.map} +1 -1
- package/dist/{chunk-Z6UN4ZPW.mjs → chunk-BVHVYC7Q.mjs} +4 -4
- package/dist/{chunk-WJENEFDG.js → chunk-CAFVLHDV.js} +3 -3
- package/dist/{chunk-WJENEFDG.js.map → chunk-CAFVLHDV.js.map} +1 -1
- package/dist/{chunk-BVUPM6EY.js → chunk-CAQ2Q3ON.js} +2 -2
- package/dist/chunk-CAQ2Q3ON.js.map +1 -0
- package/dist/{chunk-QMPOGLAR.js → chunk-CIASXVWX.js} +3 -3
- package/dist/{chunk-QMPOGLAR.js.map → chunk-CIASXVWX.js.map} +1 -1
- package/dist/{chunk-APKEYUJ3.js → chunk-CIQLC2ZZ.js} +3 -3
- package/dist/{chunk-APKEYUJ3.js.map → chunk-CIQLC2ZZ.js.map} +1 -1
- package/dist/{chunk-36XPNLGQ.js → chunk-CW3FCWR4.js} +16 -16
- package/dist/{chunk-36XPNLGQ.js.map → chunk-CW3FCWR4.js.map} +1 -1
- package/dist/{chunk-J5VEAJN5.mjs → chunk-CWVUGZNK.mjs} +2 -2
- package/dist/{chunk-BCMDP6GK.mjs → chunk-DV3N2K3Y.mjs} +4 -4
- package/dist/{chunk-PP7SEERV.mjs → chunk-DXYSEBK3.mjs} +9 -3
- package/dist/chunk-DXYSEBK3.mjs.map +1 -0
- package/dist/{chunk-754M6HQ5.js → chunk-EJN4OP3D.js} +5 -5
- package/dist/{chunk-754M6HQ5.js.map → chunk-EJN4OP3D.js.map} +1 -1
- package/dist/{chunk-3IM2SBPO.js → chunk-F5K3HMKT.js} +4 -4
- package/dist/{chunk-3IM2SBPO.js.map → chunk-F5K3HMKT.js.map} +1 -1
- package/dist/{chunk-WMDSGVZ7.mjs → chunk-GCGSAS2Z.mjs} +48 -63
- package/dist/chunk-GCGSAS2Z.mjs.map +1 -0
- package/dist/{chunk-EXHGEJ4P.mjs → chunk-GKARHTZ2.mjs} +2 -2
- package/dist/{chunk-2VDCEEXB.js → chunk-GNKFBVW4.js} +3 -3
- package/dist/{chunk-2VDCEEXB.js.map → chunk-GNKFBVW4.js.map} +1 -1
- package/dist/{chunk-CDLOMECB.js → chunk-GTBPMNTJ.js} +3 -3
- package/dist/{chunk-CDLOMECB.js.map → chunk-GTBPMNTJ.js.map} +1 -1
- package/dist/{chunk-YQKAASWM.js → chunk-GXXDSBN2.js} +10 -4
- package/dist/chunk-GXXDSBN2.js.map +1 -0
- package/dist/{chunk-FASVPU6N.js → chunk-H3F4OCXC.js} +10 -10
- package/dist/{chunk-FASVPU6N.js.map → chunk-H3F4OCXC.js.map} +1 -1
- package/dist/{chunk-JCFN6KRS.mjs → chunk-HGWDB73S.mjs} +2 -2
- package/dist/{chunk-JXXMO7PY.mjs → chunk-HN5RW4C3.mjs} +3 -3
- package/dist/{chunk-I2A4EQPH.mjs → chunk-HQ2GXFK5.mjs} +6 -6
- package/dist/{chunk-BIPC6F6D.js → chunk-IDJ37MOU.js} +115 -115
- package/dist/{chunk-BIPC6F6D.js.map → chunk-IDJ37MOU.js.map} +1 -1
- package/dist/{chunk-TBJLNIOY.mjs → chunk-JBLYYTHN.mjs} +2 -2
- package/dist/{chunk-G4NK66PM.js → chunk-JTWXQ267.js} +24 -18
- package/dist/chunk-JTWXQ267.js.map +1 -0
- package/dist/{chunk-V6IC74KH.js → chunk-JXGLDRDC.js} +34 -34
- package/dist/{chunk-V6IC74KH.js.map → chunk-JXGLDRDC.js.map} +1 -1
- package/dist/{chunk-DDFIRQI5.mjs → chunk-K3E5VEBF.mjs} +56 -34
- package/dist/chunk-K3E5VEBF.mjs.map +1 -0
- package/dist/{chunk-MSBEWG26.js → chunk-K5O2IOI4.js} +8 -8
- package/dist/{chunk-MSBEWG26.js.map → chunk-K5O2IOI4.js.map} +1 -1
- package/dist/{chunk-SB5YGKXR.js → chunk-KBMLGQ5J.js} +49 -64
- package/dist/chunk-KBMLGQ5J.js.map +1 -0
- package/dist/chunk-KCZEKV7M.mjs +81 -0
- package/dist/chunk-KCZEKV7M.mjs.map +1 -0
- package/dist/{chunk-GRSN76BV.mjs → chunk-KH2R4STU.mjs} +3 -3
- package/dist/{chunk-7DQM34JT.js → chunk-KHYSXYPO.js} +23 -23
- package/dist/{chunk-7DQM34JT.js.map → chunk-KHYSXYPO.js.map} +1 -1
- package/dist/{chunk-V2YHMPRR.js → chunk-KJHBQQYJ.js} +5 -5
- package/dist/{chunk-V2YHMPRR.js.map → chunk-KJHBQQYJ.js.map} +1 -1
- package/dist/{chunk-ZF5NMQJZ.mjs → chunk-KUKLN3CK.mjs} +4 -4
- package/dist/{chunk-6AYB7CZH.js → chunk-KZQVGSR2.js} +2 -2
- package/dist/{chunk-6AYB7CZH.js.map → chunk-KZQVGSR2.js.map} +1 -1
- package/dist/{chunk-UAKRBNW2.mjs → chunk-L4T76OKM.mjs} +2 -2
- package/dist/{chunk-AUCXJ7LG.js → chunk-M3LQH7Y7.js} +3 -3
- package/dist/{chunk-AUCXJ7LG.js.map → chunk-M3LQH7Y7.js.map} +1 -1
- package/dist/{chunk-FQNJJH7F.js → chunk-MCXRKD56.js} +13 -13
- package/dist/{chunk-FQNJJH7F.js.map → chunk-MCXRKD56.js.map} +1 -1
- package/dist/{chunk-PY5WCBKN.mjs → chunk-MERKXOSI.mjs} +4 -4
- package/dist/{chunk-D3YDZF2G.js → chunk-N472HQPZ.js} +3 -3
- package/dist/{chunk-D3YDZF2G.js.map → chunk-N472HQPZ.js.map} +1 -1
- package/dist/{chunk-UPMYCGXR.js → chunk-N4K4X34Z.js} +4 -4
- package/dist/{chunk-UPMYCGXR.js.map → chunk-N4K4X34Z.js.map} +1 -1
- package/dist/{chunk-RU43UMEH.js → chunk-NFCNAFUK.js} +3 -3
- package/dist/{chunk-RU43UMEH.js.map → chunk-NFCNAFUK.js.map} +1 -1
- package/dist/{chunk-APCB5HWT.mjs → chunk-NLSDZJRR.mjs} +3 -3
- package/dist/{chunk-EWYIXCNF.mjs → chunk-NLUTNCLH.mjs} +5 -5
- package/dist/{chunk-OP4Q2KDS.mjs → chunk-NMKKMY5P.mjs} +2 -2
- package/dist/{chunk-WDPFO4II.mjs → chunk-NMPK336K.mjs} +2 -2
- package/dist/{chunk-X6BZ5IEV.mjs → chunk-NU7O6YKR.mjs} +2 -2
- package/dist/{chunk-ZABDSRX3.js → chunk-NUZ5K3CB.js} +4 -4
- package/dist/{chunk-ZABDSRX3.js.map → chunk-NUZ5K3CB.js.map} +1 -1
- package/dist/{chunk-N5ZGFYLA.js → chunk-NZX3BA62.js} +3 -3
- package/dist/{chunk-N5ZGFYLA.js.map → chunk-NZX3BA62.js.map} +1 -1
- package/dist/{chunk-2TLSEAL2.js → chunk-O4TRDWXJ.js} +3 -3
- package/dist/{chunk-2TLSEAL2.js.map → chunk-O4TRDWXJ.js.map} +1 -1
- package/dist/{chunk-CBI5F4ME.mjs → chunk-OMSSA4NO.mjs} +2 -2
- package/dist/{chunk-YGEEWLGJ.js → chunk-PKKXCX5B.js} +3 -3
- package/dist/{chunk-YGEEWLGJ.js.map → chunk-PKKXCX5B.js.map} +1 -1
- package/dist/{chunk-GYHD6QEA.mjs → chunk-PQGQ3EH5.mjs} +2 -2
- package/dist/{chunk-3LN5GQAC.js → chunk-Q6UIUYNF.js} +6 -8
- package/dist/chunk-Q6UIUYNF.js.map +1 -0
- package/dist/chunk-QLWBGM7H.js +81 -0
- package/dist/chunk-QLWBGM7H.js.map +1 -0
- package/dist/{chunk-IF5GW6ID.js → chunk-QZ5DCDZ2.js} +6 -6
- package/dist/{chunk-IF5GW6ID.js.map → chunk-QZ5DCDZ2.js.map} +1 -1
- package/dist/{chunk-LSUCENYD.mjs → chunk-RBKGHUSR.mjs} +2 -2
- package/dist/{chunk-PIZTI5SJ.js → chunk-RMCZ7C2C.js} +3 -3
- package/dist/{chunk-PIZTI5SJ.js.map → chunk-RMCZ7C2C.js.map} +1 -1
- package/dist/{chunk-LGQNMQOT.mjs → chunk-ROS5XGTQ.mjs} +2 -2
- package/dist/chunk-ROS5XGTQ.mjs.map +1 -0
- package/dist/{chunk-TEUERRDG.mjs → chunk-RV45XVXE.mjs} +2 -2
- package/dist/{chunk-FW6ZI2MC.mjs → chunk-UAFSWXN5.mjs} +2 -2
- package/dist/{chunk-QUGKQYAJ.mjs → chunk-ULVFVLFE.mjs} +4 -6
- package/dist/{chunk-QUGKQYAJ.mjs.map → chunk-ULVFVLFE.mjs.map} +1 -1
- package/dist/{chunk-ANLL2EIX.mjs → chunk-UWCGTH3U.mjs} +2 -2
- package/dist/{chunk-6R2LEEEP.mjs → chunk-UZF2D2GG.mjs} +2 -2
- package/dist/{chunk-62L3PMYE.mjs → chunk-V3OVMHZD.mjs} +2 -2
- package/dist/{chunk-UDITT3N3.mjs → chunk-V6ELDZ2B.mjs} +2 -2
- package/dist/{chunk-G7NUCBD3.js → chunk-VDPV24JJ.js} +3 -3
- package/dist/{chunk-G7NUCBD3.js.map → chunk-VDPV24JJ.js.map} +1 -1
- package/dist/{chunk-IJQOTS5O.mjs → chunk-VJUS3GC4.mjs} +2 -2
- package/dist/{chunk-ZUPP7R2K.js → chunk-W7BBVDBI.js} +17 -3
- package/dist/chunk-W7BBVDBI.js.map +1 -0
- package/dist/{chunk-EHQDQ5RV.js → chunk-XARMPXRN.js} +10 -12
- package/dist/chunk-XARMPXRN.js.map +1 -0
- package/dist/{chunk-MQEAEU6G.mjs → chunk-XGMRYNER.mjs} +2 -2
- package/dist/{chunk-MMQMVVD6.mjs → chunk-XLTD5J74.mjs} +3 -3
- package/dist/{chunk-L3ST5GUJ.js → chunk-XQUK7R7L.js} +17 -17
- package/dist/{chunk-L3ST5GUJ.js.map → chunk-XQUK7R7L.js.map} +1 -1
- package/dist/{chunk-OMBUOOMD.mjs → chunk-XYT542WD.mjs} +2 -2
- package/dist/{chunk-IZNABVXE.js → chunk-Y4IGIWP4.js} +3 -3
- package/dist/{chunk-IZNABVXE.js.map → chunk-Y4IGIWP4.js.map} +1 -1
- package/dist/{chunk-COWOGT7U.mjs → chunk-YZWFDSTC.mjs} +2 -2
- package/dist/{chunk-M2FN7CNS.mjs → chunk-Z4L2DWMX.mjs} +17 -3
- package/dist/chunk-Z4L2DWMX.mjs.map +1 -0
- package/dist/chunk-Z75J66LL.mjs +149 -0
- package/dist/chunk-Z75J66LL.mjs.map +1 -0
- package/dist/{chunk-CWIJ7RXR.js → chunk-ZHUFICW3.js} +3 -3
- package/dist/{chunk-CWIJ7RXR.js.map → chunk-ZHUFICW3.js.map} +1 -1
- package/dist/{chunk-Q5XGBTOY.js → chunk-ZNITTMV5.js} +3 -3
- package/dist/{chunk-Q5XGBTOY.js.map → chunk-ZNITTMV5.js.map} +1 -1
- package/dist/components/EnemMoment/HeaderFilters.d.ts +12 -1
- package/dist/components/EnemMoment/HeaderFilters.d.ts.map +1 -1
- package/dist/components/EnemMoment/types.d.ts +10 -1
- package/dist/components/EnemMoment/types.d.ts.map +1 -1
- package/dist/hooks/useAppContent/index.js +48 -49
- package/dist/hooks/useAppContent/index.js.map +1 -1
- package/dist/hooks/useAppContent/index.mjs +47 -48
- package/dist/hooks/useResizableColumns.d.ts +20 -9
- package/dist/hooks/useResizableColumns.d.ts.map +1 -1
- package/dist/hooks/useScreen/index.js +2 -2
- package/dist/hooks/useScreen/index.mjs +1 -1
- package/dist/index.js +48 -49
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +47 -48
- package/dist/store/layoutPreferencesStore.d.ts +12 -24
- package/dist/store/layoutPreferencesStore.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/RichEditorCore-62NIM7PC.js.map +0 -1
- package/dist/chunk-2EDRPEYL.mjs +0 -157
- package/dist/chunk-2EDRPEYL.mjs.map +0 -1
- package/dist/chunk-2VODGC76.js.map +0 -1
- package/dist/chunk-3LN5GQAC.js.map +0 -1
- package/dist/chunk-BVUPM6EY.js.map +0 -1
- package/dist/chunk-CH6BWMSQ.js +0 -17
- package/dist/chunk-CH6BWMSQ.js.map +0 -1
- package/dist/chunk-DDFIRQI5.mjs.map +0 -1
- package/dist/chunk-EHQDQ5RV.js.map +0 -1
- package/dist/chunk-G4NK66PM.js.map +0 -1
- package/dist/chunk-HIIOADV4.js.map +0 -1
- package/dist/chunk-JSH3BQZ7.mjs +0 -17
- package/dist/chunk-JSH3BQZ7.mjs.map +0 -1
- package/dist/chunk-LGQNMQOT.mjs.map +0 -1
- package/dist/chunk-LMDAF6LA.mjs +0 -51
- package/dist/chunk-LMDAF6LA.mjs.map +0 -1
- package/dist/chunk-M2FN7CNS.mjs.map +0 -1
- package/dist/chunk-MUCV5ZWZ.mjs.map +0 -1
- package/dist/chunk-PJOBOBNJ.js +0 -51
- package/dist/chunk-PJOBOBNJ.js.map +0 -1
- package/dist/chunk-PP7SEERV.mjs.map +0 -1
- package/dist/chunk-SB5YGKXR.js.map +0 -1
- package/dist/chunk-WMDSGVZ7.mjs.map +0 -1
- package/dist/chunk-YQKAASWM.js.map +0 -1
- package/dist/chunk-ZUPP7R2K.js.map +0 -1
- /package/dist/{chunk-EVBQNVQW.mjs.map → chunk-233FSBU7.mjs.map} +0 -0
- /package/dist/{chunk-MADPP2PW.mjs.map → chunk-3ZSI2KI5.mjs.map} +0 -0
- /package/dist/{chunk-2W7PTFXS.mjs.map → chunk-42XKJV56.mjs.map} +0 -0
- /package/dist/{chunk-M6TC6XRQ.mjs.map → chunk-55ESXRRM.mjs.map} +0 -0
- /package/dist/{chunk-4MURAKPC.mjs.map → chunk-5DJVOLVX.mjs.map} +0 -0
- /package/dist/{chunk-YVT7CT3G.mjs.map → chunk-5P6CBDZ6.mjs.map} +0 -0
- /package/dist/{chunk-SFEU7BMY.mjs.map → chunk-5SFNRXZB.mjs.map} +0 -0
- /package/dist/{chunk-KYY4U5SN.mjs.map → chunk-6Z5W5J44.mjs.map} +0 -0
- /package/dist/{chunk-GVYGPJH3.mjs.map → chunk-AU5M2766.mjs.map} +0 -0
- /package/dist/{chunk-Z6UN4ZPW.mjs.map → chunk-BVHVYC7Q.mjs.map} +0 -0
- /package/dist/{chunk-J5VEAJN5.mjs.map → chunk-CWVUGZNK.mjs.map} +0 -0
- /package/dist/{chunk-BCMDP6GK.mjs.map → chunk-DV3N2K3Y.mjs.map} +0 -0
- /package/dist/{chunk-EXHGEJ4P.mjs.map → chunk-GKARHTZ2.mjs.map} +0 -0
- /package/dist/{chunk-JCFN6KRS.mjs.map → chunk-HGWDB73S.mjs.map} +0 -0
- /package/dist/{chunk-JXXMO7PY.mjs.map → chunk-HN5RW4C3.mjs.map} +0 -0
- /package/dist/{chunk-I2A4EQPH.mjs.map → chunk-HQ2GXFK5.mjs.map} +0 -0
- /package/dist/{chunk-TBJLNIOY.mjs.map → chunk-JBLYYTHN.mjs.map} +0 -0
- /package/dist/{chunk-GRSN76BV.mjs.map → chunk-KH2R4STU.mjs.map} +0 -0
- /package/dist/{chunk-ZF5NMQJZ.mjs.map → chunk-KUKLN3CK.mjs.map} +0 -0
- /package/dist/{chunk-UAKRBNW2.mjs.map → chunk-L4T76OKM.mjs.map} +0 -0
- /package/dist/{chunk-PY5WCBKN.mjs.map → chunk-MERKXOSI.mjs.map} +0 -0
- /package/dist/{chunk-APCB5HWT.mjs.map → chunk-NLSDZJRR.mjs.map} +0 -0
- /package/dist/{chunk-EWYIXCNF.mjs.map → chunk-NLUTNCLH.mjs.map} +0 -0
- /package/dist/{chunk-OP4Q2KDS.mjs.map → chunk-NMKKMY5P.mjs.map} +0 -0
- /package/dist/{chunk-WDPFO4II.mjs.map → chunk-NMPK336K.mjs.map} +0 -0
- /package/dist/{chunk-X6BZ5IEV.mjs.map → chunk-NU7O6YKR.mjs.map} +0 -0
- /package/dist/{chunk-CBI5F4ME.mjs.map → chunk-OMSSA4NO.mjs.map} +0 -0
- /package/dist/{chunk-GYHD6QEA.mjs.map → chunk-PQGQ3EH5.mjs.map} +0 -0
- /package/dist/{chunk-LSUCENYD.mjs.map → chunk-RBKGHUSR.mjs.map} +0 -0
- /package/dist/{chunk-TEUERRDG.mjs.map → chunk-RV45XVXE.mjs.map} +0 -0
- /package/dist/{chunk-FW6ZI2MC.mjs.map → chunk-UAFSWXN5.mjs.map} +0 -0
- /package/dist/{chunk-ANLL2EIX.mjs.map → chunk-UWCGTH3U.mjs.map} +0 -0
- /package/dist/{chunk-6R2LEEEP.mjs.map → chunk-UZF2D2GG.mjs.map} +0 -0
- /package/dist/{chunk-62L3PMYE.mjs.map → chunk-V3OVMHZD.mjs.map} +0 -0
- /package/dist/{chunk-UDITT3N3.mjs.map → chunk-V6ELDZ2B.mjs.map} +0 -0
- /package/dist/{chunk-IJQOTS5O.mjs.map → chunk-VJUS3GC4.mjs.map} +0 -0
- /package/dist/{chunk-MQEAEU6G.mjs.map → chunk-XGMRYNER.mjs.map} +0 -0
- /package/dist/{chunk-MMQMVVD6.mjs.map → chunk-XLTD5J74.mjs.map} +0 -0
- /package/dist/{chunk-OMBUOOMD.mjs.map → chunk-XYT542WD.mjs.map} +0 -0
- /package/dist/{chunk-COWOGT7U.mjs.map → chunk-YZWFDSTC.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -102,10 +102,10 @@ import {
|
|
|
102
102
|
useSimulatedSubjects,
|
|
103
103
|
useStudentsFilter,
|
|
104
104
|
useUserAccessData
|
|
105
|
-
} from "./chunk-
|
|
105
|
+
} from "./chunk-254EBPMW.mjs";
|
|
106
106
|
import {
|
|
107
107
|
MathNode
|
|
108
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-UAFSWXN5.mjs";
|
|
109
109
|
import {
|
|
110
110
|
buildExamPackagePages
|
|
111
111
|
} from "./chunk-RRID37Y3.mjs";
|
|
@@ -262,7 +262,7 @@ import {
|
|
|
262
262
|
useSimulatedOverview,
|
|
263
263
|
useSimulatedPerformance,
|
|
264
264
|
useSimulatedStudentDetails
|
|
265
|
-
} from "./chunk-
|
|
265
|
+
} from "./chunk-OMSSA4NO.mjs";
|
|
266
266
|
import {
|
|
267
267
|
DEFAULT_CATEGORIES,
|
|
268
268
|
STUDENT_CATEGORIES,
|
|
@@ -283,7 +283,7 @@ import {
|
|
|
283
283
|
import {
|
|
284
284
|
RecommendedLessonDetails_default,
|
|
285
285
|
StudentPerformanceModal
|
|
286
|
-
} from "./chunk-
|
|
286
|
+
} from "./chunk-HQ2GXFK5.mjs";
|
|
287
287
|
import "./chunk-UAT7LJVY.mjs";
|
|
288
288
|
import {
|
|
289
289
|
RestrictedAccess_default
|
|
@@ -298,7 +298,7 @@ import {
|
|
|
298
298
|
import "./chunk-F747OBGX.mjs";
|
|
299
299
|
import {
|
|
300
300
|
PerformanceReportModal
|
|
301
|
-
} from "./chunk-
|
|
301
|
+
} from "./chunk-GKARHTZ2.mjs";
|
|
302
302
|
import {
|
|
303
303
|
PERFORMANCE_TAG_CONFIG,
|
|
304
304
|
PerformanceTag,
|
|
@@ -317,7 +317,7 @@ import {
|
|
|
317
317
|
QuizResultHeaderTitle,
|
|
318
318
|
QuizResultPerformance,
|
|
319
319
|
QuizResultTitle
|
|
320
|
-
} from "./chunk-
|
|
320
|
+
} from "./chunk-5SFNRXZB.mjs";
|
|
321
321
|
import {
|
|
322
322
|
TeacherFeedbackSection
|
|
323
323
|
} from "./chunk-WY7V5UJN.mjs";
|
|
@@ -332,7 +332,7 @@ import {
|
|
|
332
332
|
} from "./chunk-DZMWZNQK.mjs";
|
|
333
333
|
import {
|
|
334
334
|
Forum
|
|
335
|
-
} from "./chunk-
|
|
335
|
+
} from "./chunk-MERKXOSI.mjs";
|
|
336
336
|
import {
|
|
337
337
|
MaskedInput_default
|
|
338
338
|
} from "./chunk-6IOJEDYE.mjs";
|
|
@@ -392,7 +392,7 @@ import {
|
|
|
392
392
|
NationalAverageCard,
|
|
393
393
|
NationalAveragesContent,
|
|
394
394
|
PercentageScale
|
|
395
|
-
} from "./chunk-
|
|
395
|
+
} from "./chunk-5P6CBDZ6.mjs";
|
|
396
396
|
import {
|
|
397
397
|
COMPARATOR_CHART_COLORS,
|
|
398
398
|
ComparatorTabValue,
|
|
@@ -423,7 +423,7 @@ import {
|
|
|
423
423
|
} from "./chunk-WKIDESGP.mjs";
|
|
424
424
|
import {
|
|
425
425
|
EnemClassroomStartModal_default
|
|
426
|
-
} from "./chunk-
|
|
426
|
+
} from "./chunk-KH2R4STU.mjs";
|
|
427
427
|
import "./chunk-YWGJAB63.mjs";
|
|
428
428
|
import {
|
|
429
429
|
useQuestionFiltersStore
|
|
@@ -440,7 +440,7 @@ import {
|
|
|
440
440
|
useLayoutPreferencesStore,
|
|
441
441
|
usePanelWidthPreference,
|
|
442
442
|
useResizableColumns
|
|
443
|
-
} from "./chunk-
|
|
443
|
+
} from "./chunk-GCGSAS2Z.mjs";
|
|
444
444
|
import {
|
|
445
445
|
ENEM_CLASSROOM_LANGUAGE,
|
|
446
446
|
ENEM_CLASSROOM_LANGUAGE_LABELS,
|
|
@@ -456,7 +456,7 @@ import {
|
|
|
456
456
|
createUseChatRooms,
|
|
457
457
|
useChat,
|
|
458
458
|
useChatRooms
|
|
459
|
-
} from "./chunk-
|
|
459
|
+
} from "./chunk-PQGQ3EH5.mjs";
|
|
460
460
|
import {
|
|
461
461
|
useProfileLabels
|
|
462
462
|
} from "./chunk-TD4TCHHR.mjs";
|
|
@@ -466,8 +466,8 @@ import {
|
|
|
466
466
|
} from "./chunk-AL66UXRT.mjs";
|
|
467
467
|
import {
|
|
468
468
|
AccessReportModal
|
|
469
|
-
} from "./chunk-
|
|
470
|
-
import "./chunk-
|
|
469
|
+
} from "./chunk-V3OVMHZD.mjs";
|
|
470
|
+
import "./chunk-L4T76OKM.mjs";
|
|
471
471
|
import {
|
|
472
472
|
DIFFICULTY_LEVEL_ENUM,
|
|
473
473
|
QUESTION_STATUS_ENUM
|
|
@@ -507,7 +507,7 @@ import {
|
|
|
507
507
|
ChatbotMessageList,
|
|
508
508
|
ChatbotPanel,
|
|
509
509
|
ChatbotTypingIndicator
|
|
510
|
-
} from "./chunk-
|
|
510
|
+
} from "./chunk-BU32E6BR.mjs";
|
|
511
511
|
import {
|
|
512
512
|
createUseChatbot
|
|
513
513
|
} from "./chunk-L57VCDNM.mjs";
|
|
@@ -523,7 +523,7 @@ import {
|
|
|
523
523
|
ReadingAid,
|
|
524
524
|
TTSController,
|
|
525
525
|
VLibrasLoader
|
|
526
|
-
} from "./chunk-
|
|
526
|
+
} from "./chunk-ULVFVLFE.mjs";
|
|
527
527
|
import {
|
|
528
528
|
useA11yPreferences
|
|
529
529
|
} from "./chunk-XNZR6CNJ.mjs";
|
|
@@ -543,7 +543,7 @@ import {
|
|
|
543
543
|
} from "./chunk-7CD5FIDV.mjs";
|
|
544
544
|
import {
|
|
545
545
|
StudentLessonProgressModal
|
|
546
|
-
} from "./chunk-
|
|
546
|
+
} from "./chunk-6Z5W5J44.mjs";
|
|
547
547
|
import {
|
|
548
548
|
DEFAULT_LESSON_PROGRESS_LABELS
|
|
549
549
|
} from "./chunk-IVPVR5IM.mjs";
|
|
@@ -595,12 +595,12 @@ import {
|
|
|
595
595
|
} from "./chunk-RKP4UAN7.mjs";
|
|
596
596
|
import {
|
|
597
597
|
StudentPerformanceDetailsModal
|
|
598
|
-
} from "./chunk-
|
|
598
|
+
} from "./chunk-NLSDZJRR.mjs";
|
|
599
599
|
import "./chunk-ILQ33JG4.mjs";
|
|
600
600
|
import "./chunk-RV6HA5CB.mjs";
|
|
601
601
|
import {
|
|
602
602
|
ReportDetailModal
|
|
603
|
-
} from "./chunk-
|
|
603
|
+
} from "./chunk-HN5RW4C3.mjs";
|
|
604
604
|
import {
|
|
605
605
|
useReportPrint
|
|
606
606
|
} from "./chunk-4D3QCMQO.mjs";
|
|
@@ -610,7 +610,7 @@ import {
|
|
|
610
610
|
import {
|
|
611
611
|
DOWNLOAD_FORMAT,
|
|
612
612
|
DownloadModal_default
|
|
613
|
-
} from "./chunk-
|
|
613
|
+
} from "./chunk-JBLYYTHN.mjs";
|
|
614
614
|
import {
|
|
615
615
|
downloadExcel
|
|
616
616
|
} from "./chunk-MG352MKB.mjs";
|
|
@@ -707,11 +707,11 @@ import {
|
|
|
707
707
|
import {
|
|
708
708
|
Support_default,
|
|
709
709
|
supportSchema
|
|
710
|
-
} from "./chunk-
|
|
710
|
+
} from "./chunk-VJUS3GC4.mjs";
|
|
711
711
|
import {
|
|
712
712
|
TicketModal,
|
|
713
713
|
getCategoryIcon
|
|
714
|
-
} from "./chunk-
|
|
714
|
+
} from "./chunk-V6ELDZ2B.mjs";
|
|
715
715
|
import {
|
|
716
716
|
SupportCategory,
|
|
717
717
|
SupportStatus,
|
|
@@ -756,10 +756,10 @@ import {
|
|
|
756
756
|
} from "./chunk-EHORXGFK.mjs";
|
|
757
757
|
import {
|
|
758
758
|
AlertsManagerView
|
|
759
|
-
} from "./chunk-
|
|
759
|
+
} from "./chunk-UWCGTH3U.mjs";
|
|
760
760
|
import {
|
|
761
761
|
AppHeader
|
|
762
|
-
} from "./chunk-
|
|
762
|
+
} from "./chunk-NLUTNCLH.mjs";
|
|
763
763
|
import {
|
|
764
764
|
BrandingLogo
|
|
765
765
|
} from "./chunk-A66YU5RO.mjs";
|
|
@@ -774,15 +774,15 @@ import {
|
|
|
774
774
|
} from "./chunk-VJUNDVQM.mjs";
|
|
775
775
|
import {
|
|
776
776
|
Whiteboard_default
|
|
777
|
-
} from "./chunk-
|
|
777
|
+
} from "./chunk-RBKGHUSR.mjs";
|
|
778
778
|
import {
|
|
779
779
|
FormulaDialog,
|
|
780
780
|
processLatexInHtml,
|
|
781
781
|
unprocessLatexInHtml
|
|
782
|
-
} from "./chunk-
|
|
782
|
+
} from "./chunk-NU7O6YKR.mjs";
|
|
783
783
|
import {
|
|
784
784
|
RichEditor
|
|
785
|
-
} from "./chunk-
|
|
785
|
+
} from "./chunk-XGMRYNER.mjs";
|
|
786
786
|
import {
|
|
787
787
|
ImageUpload
|
|
788
788
|
} from "./chunk-LXP6LRHO.mjs";
|
|
@@ -807,16 +807,16 @@ import {
|
|
|
807
807
|
QuizHeader,
|
|
808
808
|
QuizQuestionList,
|
|
809
809
|
QuizTitle
|
|
810
|
-
} from "./chunk-
|
|
810
|
+
} from "./chunk-K3E5VEBF.mjs";
|
|
811
811
|
import {
|
|
812
812
|
QuizTimer_default
|
|
813
|
-
} from "./chunk-
|
|
813
|
+
} from "./chunk-KCZEKV7M.mjs";
|
|
814
814
|
import {
|
|
815
815
|
AlertDialog
|
|
816
|
-
} from "./chunk-
|
|
816
|
+
} from "./chunk-Z75J66LL.mjs";
|
|
817
817
|
import {
|
|
818
818
|
NotificationCard_default
|
|
819
|
-
} from "./chunk-
|
|
819
|
+
} from "./chunk-DV3N2K3Y.mjs";
|
|
820
820
|
import {
|
|
821
821
|
createNotificationStore,
|
|
822
822
|
formatTimeAgo
|
|
@@ -826,14 +826,14 @@ import {
|
|
|
826
826
|
} from "./chunk-FTNZFPQR.mjs";
|
|
827
827
|
import {
|
|
828
828
|
AnnouncementsGate_default
|
|
829
|
-
} from "./chunk-
|
|
829
|
+
} from "./chunk-HGWDB73S.mjs";
|
|
830
830
|
import {
|
|
831
831
|
createUseAnnouncements
|
|
832
832
|
} from "./chunk-CIWVKSO7.mjs";
|
|
833
833
|
import {
|
|
834
834
|
AnnouncementMessage,
|
|
835
835
|
AnnouncementModal_default
|
|
836
|
-
} from "./chunk-
|
|
836
|
+
} from "./chunk-3ZSI2KI5.mjs";
|
|
837
837
|
import {
|
|
838
838
|
SEEN_ANNOUNCEMENTS_STORAGE_PREFIX,
|
|
839
839
|
getSeenAnnouncementIds,
|
|
@@ -843,16 +843,16 @@ import {
|
|
|
843
843
|
} from "./chunk-TBX2ZHCS.mjs";
|
|
844
844
|
import {
|
|
845
845
|
CalendarCard_default
|
|
846
|
-
} from "./chunk-
|
|
846
|
+
} from "./chunk-BVHVYC7Q.mjs";
|
|
847
847
|
import {
|
|
848
848
|
NotFound_default
|
|
849
849
|
} from "./chunk-6NB6QH76.mjs";
|
|
850
850
|
import {
|
|
851
851
|
VideoPlayer_default
|
|
852
|
-
} from "./chunk-
|
|
852
|
+
} from "./chunk-XLTD5J74.mjs";
|
|
853
853
|
import {
|
|
854
854
|
DownloadButton_default
|
|
855
|
-
} from "./chunk-
|
|
855
|
+
} from "./chunk-5DJVOLVX.mjs";
|
|
856
856
|
import "./chunk-E3UVFK72.mjs";
|
|
857
857
|
import {
|
|
858
858
|
VerticalBarChart
|
|
@@ -890,14 +890,14 @@ import {
|
|
|
890
890
|
} from "./chunk-YGF3KVWG.mjs";
|
|
891
891
|
import {
|
|
892
892
|
CorrectActivityModal_default
|
|
893
|
-
} from "./chunk-
|
|
893
|
+
} from "./chunk-233FSBU7.mjs";
|
|
894
894
|
import {
|
|
895
895
|
QUESTION_STATUS as QUESTION_STATUS2,
|
|
896
896
|
SimulationsDetailModal,
|
|
897
897
|
TrueFalseStatementList,
|
|
898
898
|
convertApiResponseToCorrectionData,
|
|
899
899
|
getQuestionStatusBadgeConfig
|
|
900
|
-
} from "./chunk-
|
|
900
|
+
} from "./chunk-KUKLN3CK.mjs";
|
|
901
901
|
import {
|
|
902
902
|
QuestionCommentField
|
|
903
903
|
} from "./chunk-KUB46JZT.mjs";
|
|
@@ -954,14 +954,14 @@ import "./chunk-ZWMOGGGE.mjs";
|
|
|
954
954
|
import {
|
|
955
955
|
looksLikeMath
|
|
956
956
|
} from "./chunk-YITR4BIQ.mjs";
|
|
957
|
-
import "./chunk-
|
|
957
|
+
import "./chunk-YZWFDSTC.mjs";
|
|
958
958
|
import "./chunk-SK6FJ5XU.mjs";
|
|
959
959
|
import {
|
|
960
960
|
AccordionGroup
|
|
961
961
|
} from "./chunk-ILCBSWZF.mjs";
|
|
962
962
|
import {
|
|
963
963
|
CardAccordation
|
|
964
|
-
} from "./chunk-
|
|
964
|
+
} from "./chunk-XYT542WD.mjs";
|
|
965
965
|
import {
|
|
966
966
|
CardActivitiesResults,
|
|
967
967
|
CardAudio,
|
|
@@ -978,7 +978,7 @@ import {
|
|
|
978
978
|
CardTopic,
|
|
979
979
|
EssayReviewStatus,
|
|
980
980
|
EssayStatus
|
|
981
|
-
} from "./chunk-
|
|
981
|
+
} from "./chunk-DXYSEBK3.mjs";
|
|
982
982
|
import {
|
|
983
983
|
DEFAULT_MEDIA_VOLUME,
|
|
984
984
|
UNMUTE_FALLBACK_VOLUME,
|
|
@@ -1060,10 +1060,10 @@ import {
|
|
|
1060
1060
|
} from "./chunk-QYL72E7Q.mjs";
|
|
1061
1061
|
import {
|
|
1062
1062
|
AnswerKeyModal_default
|
|
1063
|
-
} from "./chunk-
|
|
1063
|
+
} from "./chunk-55ESXRRM.mjs";
|
|
1064
1064
|
import {
|
|
1065
1065
|
ProgressModal_default
|
|
1066
|
-
} from "./chunk-
|
|
1066
|
+
} from "./chunk-CWVUGZNK.mjs";
|
|
1067
1067
|
import {
|
|
1068
1068
|
ScoreCircle_default
|
|
1069
1069
|
} from "./chunk-CAQLUBBE.mjs";
|
|
@@ -1090,7 +1090,7 @@ import {
|
|
|
1090
1090
|
} from "./chunk-QZHSY53O.mjs";
|
|
1091
1091
|
import {
|
|
1092
1092
|
Search_default
|
|
1093
|
-
} from "./chunk-
|
|
1093
|
+
} from "./chunk-AU5M2766.mjs";
|
|
1094
1094
|
import {
|
|
1095
1095
|
ProgressBar_default
|
|
1096
1096
|
} from "./chunk-RU26377I.mjs";
|
|
@@ -1117,7 +1117,7 @@ import {
|
|
|
1117
1117
|
} from "./chunk-5ZWG3GNU.mjs";
|
|
1118
1118
|
import {
|
|
1119
1119
|
IconButton_default
|
|
1120
|
-
} from "./chunk-
|
|
1120
|
+
} from "./chunk-ROS5XGTQ.mjs";
|
|
1121
1121
|
import {
|
|
1122
1122
|
IconRoundedButton_default
|
|
1123
1123
|
} from "./chunk-R6MGG44J.mjs";
|
|
@@ -1173,7 +1173,7 @@ import {
|
|
|
1173
1173
|
ProfileMenuSection,
|
|
1174
1174
|
ProfileMenuTrigger,
|
|
1175
1175
|
ProfileToggleTheme
|
|
1176
|
-
} from "./chunk-
|
|
1176
|
+
} from "./chunk-NMPK336K.mjs";
|
|
1177
1177
|
import {
|
|
1178
1178
|
ThemeToggle
|
|
1179
1179
|
} from "./chunk-JWTNOKCG.mjs";
|
|
@@ -1198,9 +1198,8 @@ import {
|
|
|
1198
1198
|
SuccessModalReadingFluency,
|
|
1199
1199
|
VoiceIconReadingFluency,
|
|
1200
1200
|
useMicrophonePermission
|
|
1201
|
-
} from "./chunk-
|
|
1202
|
-
import "./chunk-
|
|
1203
|
-
import "./chunk-M2FN7CNS.mjs";
|
|
1201
|
+
} from "./chunk-3YF7H577.mjs";
|
|
1202
|
+
import "./chunk-Z4L2DWMX.mjs";
|
|
1204
1203
|
import "./chunk-624IUGB4.mjs";
|
|
1205
1204
|
import "./chunk-MEUREWL3.mjs";
|
|
1206
1205
|
import "./chunk-Z2G5TBXF.mjs";
|
|
@@ -14,18 +14,17 @@ export interface PanelWidths {
|
|
|
14
14
|
preview: number;
|
|
15
15
|
}
|
|
16
16
|
export interface LayoutPreferencesState {
|
|
17
|
-
/** Larguras
|
|
17
|
+
/** Larguras atuais por tela */
|
|
18
18
|
widths: Record<LayoutScope, PanelWidths>;
|
|
19
19
|
setPanelWidth: (scope: LayoutScope, panel: LayoutPanel, width: number) => void;
|
|
20
20
|
resetPanelWidth: (scope: LayoutScope, panel: LayoutPanel) => void;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Mantém a largura acima do mínimo e descarta valores inválidos
|
|
24
|
-
*
|
|
25
|
-
* inline colapsaria a coluna.
|
|
23
|
+
* Mantém a largura acima do mínimo e descarta valores inválidos (`NaN`,
|
|
24
|
+
* negativo, string) — um `width` inválido no style inline colapsaria a coluna.
|
|
26
25
|
*
|
|
27
26
|
* Não há teto aqui de propósito: o limite superior depende da largura da tela
|
|
28
|
-
* em runtime e é aplicado por `useResizableColumns`, não pelo
|
|
27
|
+
* em runtime e é aplicado por `useResizableColumns`, não pelo store.
|
|
29
28
|
*
|
|
30
29
|
* @param value - Largura candidata
|
|
31
30
|
* @returns Largura válida, nunca menor que `SIDE_PANEL_DEFAULT_WIDTH`
|
|
@@ -34,31 +33,20 @@ export declare const clampPanelWidth: (value: unknown) => number;
|
|
|
34
33
|
/**
|
|
35
34
|
* Store das larguras das colunas redimensionáveis das telas de criação.
|
|
36
35
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
36
|
+
* As larguras valem só enquanto a tela está aberta: nada é persistido, e
|
|
37
|
+
* `useResizableColumns` devolve as duas colunas ao padrão ao desmontar. Toda
|
|
38
|
+
* visita começa no layout de 400px, independente de como a anterior terminou.
|
|
39
|
+
*
|
|
40
|
+
* `activity` e `lesson` continuam independentes — o professor pode alargar a
|
|
41
|
+
* prévia ao montar uma atividade sem mexer na tela de aula da mesma sessão.
|
|
42
42
|
*/
|
|
43
|
-
export declare const useLayoutPreferencesStore: import("zustand").UseBoundStore<
|
|
44
|
-
setState(partial: LayoutPreferencesState | Partial<LayoutPreferencesState> | ((state: LayoutPreferencesState) => LayoutPreferencesState | Partial<LayoutPreferencesState>), replace?: false | undefined): unknown;
|
|
45
|
-
setState(state: LayoutPreferencesState | ((state: LayoutPreferencesState) => LayoutPreferencesState), replace: true): unknown;
|
|
46
|
-
persist: {
|
|
47
|
-
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<LayoutPreferencesState, unknown, unknown>>) => void;
|
|
48
|
-
clearStorage: () => void;
|
|
49
|
-
rehydrate: () => Promise<void> | void;
|
|
50
|
-
hasHydrated: () => boolean;
|
|
51
|
-
onHydrate: (fn: (state: LayoutPreferencesState) => void) => () => void;
|
|
52
|
-
onFinishHydration: (fn: (state: LayoutPreferencesState) => void) => () => void;
|
|
53
|
-
getOptions: () => Partial<import("zustand/middleware").PersistOptions<LayoutPreferencesState, unknown, unknown>>;
|
|
54
|
-
};
|
|
55
|
-
}>;
|
|
43
|
+
export declare const useLayoutPreferencesStore: import("zustand").UseBoundStore<import("zustand").StoreApi<LayoutPreferencesState>>;
|
|
56
44
|
/**
|
|
57
45
|
* Lê as larguras de uma tela com seletores primitivos, evitando o re-render
|
|
58
46
|
* extra que um seletor de objeto causaria a cada `set` do store.
|
|
59
47
|
*
|
|
60
48
|
* @param scope - Tela cujas larguras devem ser lidas
|
|
61
|
-
* @returns Larguras
|
|
49
|
+
* @returns Larguras atuais e os setters
|
|
62
50
|
*/
|
|
63
51
|
export declare const usePanelWidthPreference: (scope: LayoutScope) => {
|
|
64
52
|
filtersWidth: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutPreferencesStore.d.ts","sourceRoot":"","sources":["../../src/store/layoutPreferencesStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layoutPreferencesStore.d.ts","sourceRoot":"","sources":["../../src/store/layoutPreferencesStore.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhD,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhD,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACzC,aAAa,EAAE,CACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACnE;AAiBD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,MAIhD,CAAC;AAqCF;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,qFA2CrC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAAI,OAAO,WAAW;;;2BAvI/C,WAAW,SACX,WAAW,SACX,MAAM,KACV,IAAI;6BACgB,WAAW,SAAS,WAAW,KAAK,IAAI;CAkJlE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/RichEditorCore-62NIM7PC.js","../src/components/RichEditor/RichEditorCore.tsx","../src/components/RichEditor/components/extensions.ts","../src/components/RichEditor/components/pastedImage.ts","../src/utils/htmlColors.ts"],"names":["editor"],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B,+BAA4B;AAC5B;AACA;AC5CA,sCAAyD;AD8CzD;AACA;AE/CA,yGAAuB;AACvB,yIAAsB;AACtB,0IAAsB;AACtB,yIAAsB;AACtB,iJAAwB;AACxB,qHAAiB;AACjB,iJAAwB;AACxB,yHAAkB;AAClB,yDAAyB;AAsBzB,IAAM,eAAA,EAAiB,wBAAA,CAAM,MAAA,CAAO;AAAA,EAClC,aAAA,CAAA,EAAgB;AACd,IAAA,OAAO;AAAA,MACL,mBAAG,IAAA,mBAAK,MAAA,0BAAA,CAAS,GAAA;AAAA,MACjB,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,CAAC,OAAA,EAAA,GAAyB,8CAAA,OAAuB,CAAA;AAAA,QAC5D,UAAA,EAAY,CAAC,UAAA,EAAA,GACX,OAAO,UAAA,CAAW,MAAA,IAAU,SAAA,EACxB,EAAE,KAAA,EAAO,UAAA,CAAW,MAAM,EAAA,EAC1B,CAAC;AAAA,MACT,CAAA;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,CAAA,EAAA,GAAM,IAAA;AAAA,QACjB,QAAA,EAAU;AAAA,MACZ;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AAAA,EAEA,WAAA,CAAA,EAAc;AACZ,IAAA,MAAM,eAAA,kBAAiB,IAAA,qBAAK,MAAA,0BAAA,CAAS,GAAA;AACrC,IAAA,GAAA,CAAI,CAAC,cAAA,EAAgB,OAAO,IAAA;AAE5B,IAAA,OAAO,CAAC,KAAA,EAAA,GAAU;AAChB,MAAA,MAAM,SAAA,EAAW,cAAA,CAAe,KAAK,CAAA;AACrC,MAAA,MAAM,UAAA,EAAY,QAAA,CAAS,GAAA;AAE3B,MAAA,GAAA,CAAI,UAAA,WAAqB,WAAA,EAAa;AAIpC,QAAA,MAAM,MAAA,EAAQ,SAAA,CAAU,aAAA,CAAc,KAAK,CAAA;AAC3C,wBAAA,KAAA,6BAAO,gBAAA,mBAAiB,OAAA,EAAS,CAAA,EAAA,GAAM;AACrC,UAAA,SAAA,CAAU,KAAA,CAAM,WAAA,EAAa,EAAA;AAC7B,UAAA,SAAA,CAAU,KAAA,CAAM,cAAA,EAAgB,EAAA;AAAA,QAClC,CAAC,GAAA;AAAA,MACH;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,EACF;AACF,CAAC,CAAA;AAqBM,SAAS,0BAAA,CAA2B,WAAA,EAAqB;AAC9D,EAAA,OAAO;AAAA,IACL,oBAAA;AAAA,IACA,4BAAA;AAAA,IACA,4BAAA;AAAA,IACA,8BAAA;AAAA,IACA,4BAAA,CAAU,SAAA,CAAU,EAAE,KAAA,EAAO,CAAC,SAAA,EAAW,WAAW,EAAE,CAAC,CAAA;AAAA,IACvD,uBAAA,CAAK,SAAA,CAAU,EAAE,WAAA,EAAa,MAAM,CAAC,CAAA;AAAA,IACrC,8BAAA,CAAY,SAAA,CAAU,EAAE,YAAY,CAAC,CAAA;AAAA,IACrC,cAAA,CAAe,SAAA,CAAU;AAAA,MACvB,MAAA,EAAQ,KAAA;AAAA,MACR,WAAA,EAAa,KAAA;AAAA,MACb,MAAA,EAAQ;AAAA,QACN,OAAA,EAAS,IAAA;AAAA;AAAA;AAAA,QAGT,UAAA,EAAY,CAAC,UAAA,EAAY,WAAA,EAAa,aAAA,EAAe,cAAc,CAAA;AAAA,QACnE,QAAA,EAAU,gCAAA;AAAA,QACV,SAAA,EAAW,iCAAA;AAAA,QACX,yBAAA,EAA2B;AAAA,MAC7B;AAAA,IACF,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMD,wBAAA,CAAS,SAAA,CAAU;AAAA;AAAA;AAAA;AAAA,MAIjB,KAAA,EAAO,EAAE,SAAA,EAAW,MAAM;AAAA,IAC5B,CAAC,CAAA;AAAA,IACD;AAAA,EACF,CAAA;AACF;AFFA;AACA;ACzHA,oCAAO;AACP,6DAA+B;AAC/B,uEAA+B;AAC/B,6EAAkC;AAClC,qFAAsC;AACtC,6EAAkC;AAClC,iFAAoC;AACpC,+EAAmC;AACnC,mFAAqC;AACrC,2DAAyB;AACzB,yEAAgC;AAChC,yEAAgC;AAChC,+DAA2B;AAC3B,6DAA0B;AAC1B,2DAAyB;AACzB,mEAA6B;AAC7B,mEAA6B;AAC7B,uEAA+B;AAC/B,+EAAmC;AACnC,6DAA0B;AAC1B,6DAA0B;AAC1B,yEAAgC;AAChC,+EAAmC;AACnC,iFAAoC;AACpC,mFAAqC;AACrC,2DAAyB;AACzB,iEAA4B;AAC5B,6DAA0B;AAC1B,+BAAuD;AD2HvD;AACA;AGjJA,IAAM,sBAAA,EAAwB,eAAA;AAM9B,IAAM,kBAAA,EAA4C;AAAA,EAChD,WAAA,EAAa,KAAA;AAAA,EACb,YAAA,EAAc,KAAA;AAAA,EACd,WAAA,EAAa,KAAA;AAAA,EACb,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,KAAA;AAAA,EACb,eAAA,EAAiB;AACnB,CAAA;AAGA,IAAM,mBAAA,EAAqB,KAAA;AASpB,IAAM,wBAAA,EAA0B,CACrC,aAAA,EAAA,GACW;AACX,EAAA,GAAA,CAAI,iBAAC,aAAA,6BAAe,OAAA,EAAO,OAAO,CAAC,CAAA;AAEnC,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,KAAK,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,IAAA,EAAA,GAC7C,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ;AAAA,EAC/B,CAAA;AACF,CAAA;AAUO,IAAM,gBAAA,EAAkB,CAAC,IAAA,EAAA,GAAqB;AACnD,EAAA,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA;AAEtB,EAAA,MAAM,UAAA,mBAAY,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA,UAAK,oBAAA;AAClD,EAAA,OAAO,IAAI,IAAA,CAAK,CAAC,IAAI,CAAA,EAAG,CAAA,EAAA;AACX,IAAA;AACZ,EAAA;AACH;AAEqB;AAaE;AACR,EAAA;AACU,EAAA;AACzB;AAyBa;AAGgB,EAAA;AAED,EAAA;AACD,EAAA;AAET,EAAA;AACO,EAAA;AAIA,EAAA;AAEN,EAAA;AACD,IAAA;AACL,IAAA;AACT,EAAA;AAEmB,EAAA;AACZ,EAAA;AACT;AHyEyB;AACA;AIxLH;AAStB;AAOmB;AACnB,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACF;AAO+B;AACX,EAAA;AAEK,EAAA;AAEE,EAAA;AACD,IAAA;AACxB,EAAA;AAEO,EAAA;AACT;AJmK2B;AACA;ACzKzB;AADoB;AACnB,EAAA;AAAA,EAAA;AACM,IAAA;AACL,IAAA;AACA,IAAA;AACK,IAAA;AACM,IAAA;AAIV,IAAA;AAAA,EAAA;AACH;AAGoB;AAcE;AACtB,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAEA;AAAC,EAAA;AAAA,EAAA;AACM,IAAA;AACL,IAAA;AACO,IAAA;AACF,IAAA;AACM,IAAA;AAIV,IAAA;AAAA,MAAA;AACA,MAAA;AAAA,IAAA;AAAA,EAAA;AACH;AAI2B;AAML;AAIlB;AAGsB;AAoCD;AACzB,EAAA;AACA,EAAA;AACc,EAAA;AACd,EAAA;AACA,EAAA;AACkB,EAAA;AACA;AACE,EAAA;AACF,EAAA;AACK,EAAA;AACJ,EAAA;AACI,EAAA;AAUC,EAAA;AAOA,EAAA;AAChB,IAAA;AACR,EAAA;AAEsB,EAAA;AAEG,EAAA;AACX,IAAA;AACH,IAAA;AAAsB;AAAA;AAGlBA,IAAAA;AACS,MAAA;AACL,MAAA;AACJ,sBAAA;AACI,QAAA;AACb,QAAA;AACD,MAAA;AACH,IAAA;AACa,IAAA;AACC,MAAA;AAER,QAAA;AACJ,MAAA;AACqB,MAAA;AACvB,IAAA;AACD,EAAA;AAYe,EAAA;AACd,IAAA;AACaA,IAAAA;AACM,MAAA;AACA,MAAA;AACA,MAAA;AACJ,MAAA;AACE,MAAA;AACG,MAAA;AACH,MAAA;AACG,MAAA;AACE,MAAA;AACP,MAAA;AACK,MAAA;AACE,MAAA;AACD,MAAA;AACLA,MAAAA;AACK,MAAA;AACC,MAAA;AACD,MAAA;AACN,MAAA;AACC,MAAA;AACA,MAAA;AAChB,IAAA;AACD,EAAA;AAkBK,EAAA;AACY,IAAA;AAEI,IAAA;AACL,IAAA;AACI,oBAAA;AACrB,EAAA;AAGgB,EAAA;AACC,IAAA;AAIC,IAAA;AACE,MAAA;AACF,QAAA;AACb,MAAA;AACc,MAAA;AACjB,IAAA;AAGgB,IAAA;AACE,MAAA;AACK,MAAA;AACvB,IAAA;AAIkB,EAAA;AAEG,EAAA;AACE,IAAA;AAIpB,IAAA;AACO,MAAA;AACU,MAAA;AAEb,IAAA;AACa,IAAA;AACtB,EAAA;AAEiC,EAAA;AACV,IAAA;AAIlB,IAAA;AAEL,EAAA;AAEqB,EAAA;AACE,IAAA;AACH,IAAA;AACpB,EAAA;AAWM,EAAA;AAIU,IAAA;AACE,IAAA;AACM,IAAA;AAElB,IAAA;AACiB,MAAA;AACC,QAAA;AACJ,QAAA;AAEA,QAAA;AACE,QAAA;AAClB,MAAA;AACc,IAAA;AACA,MAAA;AACd,MAAA;AACmB,QAAA;AACnB,MAAA;AACA,IAAA;AACkB,MAAA;AACpB,IAAA;AACF,EAAA;AAEgB,EAAA;AACE,IAAA;AACL,MAAA;AACD,MAAA;AACE,MAAA;AACS,MAAA;AACpB,IAAA;AAIkB,EAAA;AAEL,EAAA;AAGD,IAAA;AACG,MAAA;AAChB,IAAA;AACG,EAAA;AAEiB,EAAA;AACG,IAAA;AACF,IAAA;AACL,IAAA;AACO,MAAA;AACrB,MAAA;AACF,IAAA;AACuB,IAAA;AACzB,EAAA;AAGyB,EAAA;AAMvB,EAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AACU,MAAA;AAGV,MAAA;AAAA,wBAAA;AAEE,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AAGD,cAAA;AACF,cAAA;AAEN,cAAA;AAAsC,YAAA;AACxC,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AAGD,cAAA;AACF,cAAA;AAEN,cAAA;AAAsC,YAAA;AACxC,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AAGD,cAAA;AACF,cAAA;AAEN,cAAA;AAAwC,YAAA;AAC1C,UAAA;AAEA,0BAAA;AAGA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAwC,YAAA;AAC1C,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAA0B,YAAA;AAC5B,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAA6B,YAAA;AAC/B,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAiC,YAAA;AACnC,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAsC,gBAAA;AACnC,gCAAA;AACH,cAAA;AAAA,YAAA;AACF,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAsC,gBAAA;AACnC,gCAAA;AACH,cAAA;AAAA,YAAA;AACF,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAoB,YAAA;AACtB,UAAA;AAEA,0BAAA;AAGA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAA6B,YAAA;AAC/B,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAA+B,YAAA;AACjC,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAA8B,YAAA;AAChC,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAgC,YAAA;AAClC,UAAA;AAEA,0BAAA;AAGA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAA2B,YAAA;AAC7B,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAA2B,YAAA;AAC7B,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAsB,YAAA;AACxB,UAAA;AACA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAqB,YAAA;AACvB,UAAA;AAEA,0BAAA;AAGA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAoB,YAAA;AACtB,UAAA;AAGA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAqB,YAAA;AACvB,UAAA;AAGA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACU,cAAA;AACD,cAAA;AACF,cAAA;AAEN,cAAA;AAAqB,YAAA;AACvB,UAAA;AAGA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACM,cAAA;AACI,cAAA;AACH,cAAA;AACD,cAAA;AACG,cAAA;AAER,cAAA;AAAA,gCAAA;AAAgC,gBAAA;AAAA,cAAA;AAAA,YAAA;AAElC,UAAA;AACF,QAAA;AAQE,QAAA;AAAC,UAAA;AAAA,UAAA;AACa,YAAA;AACF,YAAA;AAEV,YAAA;AAAA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AAEN,kBAAA;AAA2B,gBAAA;AAC7B,cAAA;AACA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AAEN,kBAAA;AAA8B,gBAAA;AAChC,cAAA;AACA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AAEN,kBAAA;AAA+B,gBAAA;AACjC,cAAA;AACA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AAEN,kBAAA;AAAgC,gBAAA;AAClC,cAAA;AAEA,8BAAA;AAEA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AAEN,kBAAA;AAAqB,gBAAA;AACvB,cAAA;AAEA,8BAAA;AAEA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AACA,kBAAA;AAEN,kBAAA;AAAoB,gBAAA;AACtB,cAAA;AACA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AACA,kBAAA;AAEN,kBAAA;AAAuB,gBAAA;AACzB,cAAA;AACA,8BAAA;AAAC,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACH,kBAAA;AACA,kBAAA;AAEN,kBAAA;AAAqB,gBAAA;AACvB,cAAA;AAAA,YAAA;AAAA,UAAA;AACF,QAAA;AAIF,wBAAA;AAGA,wBAAA;AACG,UAAA;AAMC,UAAA;AAIF,0BAAA;AAAsC,YAAA;AAC1B,YAAA;AACV,4BAAA;AAAiE,YAAA;AAClD,YAAA;AACf,4BAAA;AAAoE,YAAA;AAAI,YAAA;AAG1E,UAAA;AACF,QAAA;AAEA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACO,YAAA;AACS,YAAA;AACL,YAAA;AACV,YAAA;AAAkB,UAAA;AACpB,QAAA;AAEA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACO,YAAA;AACS,YAAA;AACL,YAAA;AACV,YAAA;AAAA,UAAA;AACF,QAAA;AAAA,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;ADuC2B;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/RichEditorCore-62NIM7PC.js","sourcesContent":[null,"import { EditorContent, useEditor, useEditorState } from '@tiptap/react';\nimport { createRichEditorExtensions } from './components/extensions';\nimport {\n normalizeLineBreaksInHtml,\n processLatexInHtml,\n} from './components/utils';\nimport 'katex/dist/katex.min.css';\nimport { TextBolderIcon } from '@phosphor-icons/react/dist/csr/TextB';\nimport { TextItalicIcon } from '@phosphor-icons/react/dist/csr/TextItalic';\nimport { TextUnderlineIcon } from '@phosphor-icons/react/dist/csr/TextUnderline';\nimport { TextStrikethroughIcon } from '@phosphor-icons/react/dist/csr/TextStrikethrough';\nimport { TextAlignLeftIcon } from '@phosphor-icons/react/dist/csr/TextAlignLeft';\nimport { TextAlignCenterIcon } from '@phosphor-icons/react/dist/csr/TextAlignCenter';\nimport { TextAlignRightIcon } from '@phosphor-icons/react/dist/csr/TextAlignRight';\nimport { TextAlignJustifyIcon } from '@phosphor-icons/react/dist/csr/TextAlignJustify';\nimport { LinkIcon } from '@phosphor-icons/react/dist/csr/Link';\nimport { ListBulletsIcon } from '@phosphor-icons/react/dist/csr/ListBullets';\nimport { ListNumbersIcon } from '@phosphor-icons/react/dist/csr/ListNumbers';\nimport { QuotesIcon } from '@phosphor-icons/react/dist/csr/Quotes';\nimport { MinusIcon } from '@phosphor-icons/react/dist/csr/Minus';\nimport { CodeIcon } from '@phosphor-icons/react/dist/csr/Code';\nimport { TextHOneIcon } from '@phosphor-icons/react/dist/csr/TextHOne';\nimport { TextHTwoIcon } from '@phosphor-icons/react/dist/csr/TextHTwo';\nimport { TextHThreeIcon } from '@phosphor-icons/react/dist/csr/TextHThree';\nimport { MathOperationsIcon } from '@phosphor-icons/react/dist/csr/MathOperations';\nimport { ImageIcon } from '@phosphor-icons/react/dist/csr/Image';\nimport { TableIcon } from '@phosphor-icons/react/dist/csr/Table';\nimport { RowsPlusTopIcon } from '@phosphor-icons/react/dist/csr/RowsPlusTop';\nimport { RowsPlusBottomIcon } from '@phosphor-icons/react/dist/csr/RowsPlusBottom';\nimport { ColumnsPlusLeftIcon } from '@phosphor-icons/react/dist/csr/ColumnsPlusLeft';\nimport { ColumnsPlusRightIcon } from '@phosphor-icons/react/dist/csr/ColumnsPlusRight';\nimport { RowsIcon } from '@phosphor-icons/react/dist/csr/Rows';\nimport { ColumnsIcon } from '@phosphor-icons/react/dist/csr/Columns';\nimport { TrashIcon } from '@phosphor-icons/react/dist/csr/Trash';\nimport { useState, useRef, useEffect, ReactNode } from 'react';\nimport { FormulaDialog } from './components/FormulaDialog';\nimport { ImageDialog } from './components/ImageDialog';\nimport { createPastedImageHandler } from './components/pastedImage';\nimport { resolveInsertWidth } from './components/imageSize';\nimport { hasColorMarkup } from '../../utils/htmlColors';\nimport Button from '../Button/Button';\nimport Text from '../Text/Text';\n\ninterface ToolbarBtnProps {\n onClick: () => void;\n active?: boolean;\n title: string;\n children: ReactNode;\n}\n\nconst ToolbarBtn = ({ onClick, active, title, children }: ToolbarBtnProps) => (\n <Button\n type=\"button\"\n onClick={onClick}\n title={title}\n size=\"small\"\n className={`bg-transparent border-transparent h-7 w-7 p-0 flex items-center justify-center rounded hover:bg-background-100 ${\n active ? 'bg-background-200 text-primary-700' : 'text-text-700'\n }`}\n >\n {children}\n </Button>\n);\n\nconst Divider = () => <div className=\"w-px h-5 bg-border-200 mx-0.5\" />;\n\ninterface TableActionBtnProps {\n onClick: () => void;\n label: string;\n danger?: boolean;\n children: ReactNode;\n}\n\n/**\n * Ação da barra de tabela. Leva rótulo escrito, e não só ícone: \"linha acima\"\n * e \"coluna à esquerda\" são indistinguíveis em 16px para quem não usa o editor\n * com frequência, e esta barra só aparece de vez em quando — há espaço de sobra.\n */\nconst TableActionBtn = ({\n onClick,\n label,\n danger,\n children,\n}: TableActionBtnProps) => (\n <Button\n type=\"button\"\n onClick={onClick}\n title={label}\n size=\"small\"\n className={`bg-transparent border-transparent h-7 px-2 flex items-center gap-1 rounded text-xs whitespace-nowrap hover:bg-background-100 ${\n danger ? 'text-error-600' : 'text-text-700'\n }`}\n >\n {children}\n {label}\n </Button>\n);\n\n/** Tabela padrão de quem está montando um enunciado: cabeçalho + 2 linhas. */\nconst NEW_TABLE = { rows: 3, cols: 3, withHeaderRow: true };\n\n/**\n * Prepares stored content for the TipTap parser. Line breaks are restored first\n * so that LaTeX spans are injected into already-structured markup.\n */\nconst prepareContent = (content?: string) =>\n processLatexInHtml(normalizeLineBreaksInHtml(content || ''));\n\n/** Shown when a pasted image is bigger than the storage backend accepts. */\nconst OVERSIZED_PASTE_MESSAGE = 'A imagem deve ter no máximo 5MB.';\n\n/** Shown when the upload rejects with something that is not an `Error`. */\nconst GENERIC_PASTE_ERROR = 'Erro ao enviar a imagem.';\n\ninterface RichEditorProps {\n readonly content?: string;\n /**\n * Notificado a cada edição do autor e, na carga, quando o `content` recebido\n * trazia cor: o editor descarta a cor ao parsear e devolve aqui o HTML limpo,\n * para que salvar sem editar nada não regrave a cor. Carregar conteúdo sem cor\n * não dispara nada.\n */\n readonly onChange?: (data: { json: object; html: string }) => void;\n readonly placeholder?: string;\n /**\n * Optional callback to generate LaTeX using AI\n * If provided, the AI generation feature will be enabled in the formula dialog\n * @param description - Natural language description of the formula\n * @returns Promise resolving to the LaTeX string\n */\n readonly onGenerateLatexWithAI?: (description: string) => Promise<string>;\n /**\n * Optional callback to upload an image file and get back its public URL.\n * If provided, the file upload tab is enabled in the image dialog; otherwise\n * images can still be inserted by URL.\n * @param file - The image file selected by the user\n * @returns Promise resolving to the public URL of the uploaded image\n */\n readonly onUploadImage?: (file: File) => Promise<string>;\n /**\n * Enables pasting an image straight from the clipboard (Ctrl+V), uploading it\n * through `onUploadImage` and inserting the resulting URL. Off by default and\n * ignored without `onUploadImage`, since there would be nowhere to put the\n * file — the editor schema rejects base64 sources.\n */\n readonly allowImagePaste?: boolean;\n}\n\nexport function RichEditor({\n content,\n onChange,\n placeholder = 'Digite aqui...',\n onGenerateLatexWithAI,\n onUploadImage,\n allowImagePaste = false,\n}: RichEditorProps) {\n const [formulaOpen, setFormulaOpen] = useState(false);\n const [imageOpen, setImageOpen] = useState(false);\n const [isPastingImage, setIsPastingImage] = useState(false);\n const [pasteError, setPasteError] = useState('');\n const lastContentRef = useRef(content);\n /**\n * Último `content` recebido cuja cor já foi verificada.\n *\n * Separado do `lastContentRef` — que guarda o HTML que o consumidor tem em\n * mãos, e por isso muda quando devolvemos a versão limpa — para que uma nova\n * execução do efeito com o mesmo conteúdo (o editor sendo recriado, ou um\n * consumidor que ignore o `onChange` e siga mandando o HTML colorido) não\n * notifique a mesma limpeza duas vezes.\n */\n const colorCheckedRef = useRef<string | undefined>(undefined);\n /**\n * `editorProps` is captured once, when `useEditor` runs, so a handler reading\n * the props directly would keep serving the first render's values. The editor\n * calls through this ref, which the effect below repoints whenever the paste\n * configuration changes.\n */\n const pasteHandlerRef = useRef<(event: ClipboardEvent) => boolean>(\n () => false\n );\n /** Bumped on unmount so an upload still in flight knows not to insert. */\n const pasteTokenRef = useRef(0);\n\n const editor = useEditor({\n extensions: createRichEditorExtensions(placeholder),\n content: prepareContent(content),\n // External updates do not reach this callback: the sync effect below calls\n // setContent with `emitUpdate: false`.\n onUpdate: ({ editor }) => {\n const html = editor.getHTML();\n lastContentRef.current = html;\n onChange?.({\n json: editor.getJSON(),\n html,\n });\n },\n editorProps: {\n attributes: {\n class:\n 'min-h-[120px] outline-none prose prose-sm max-w-none px-4 py-3 focus:outline-none',\n },\n handlePaste: (_view, event) => pasteHandlerRef.current(event),\n },\n });\n\n /**\n * Estado reativo da toolbar.\n *\n * No Tiptap 3 o `useEditor` deixou de re-renderizar a cada transação, então\n * ler `editor.isActive(...)` direto no corpo do componente devolve o valor\n * congelado do último render: os botões não acendiam ao mover o cursor e a\n * barra de tabela nunca apareceria ao entrar numa célula. `useEditorState`\n * assina as transações e só re-renderiza quando um destes flags muda — bem\n * mais barato que re-renderizar a toolbar inteira a cada tecla digitada.\n */\n const toolbar = useEditorState({\n editor,\n selector: ({ editor }) => ({\n heading1: editor.isActive('heading', { level: 1 }),\n heading2: editor.isActive('heading', { level: 2 }),\n heading3: editor.isActive('heading', { level: 3 }),\n bold: editor.isActive('bold'),\n italic: editor.isActive('italic'),\n underline: editor.isActive('underline'),\n strike: editor.isActive('strike'),\n subscript: editor.isActive('subscript'),\n superscript: editor.isActive('superscript'),\n code: editor.isActive('code'),\n alignLeft: editor.isActive({ textAlign: 'left' }),\n alignCenter: editor.isActive({ textAlign: 'center' }),\n alignRight: editor.isActive({ textAlign: 'right' }),\n alignJustify: editor.isActive({ textAlign: 'justify' }),\n bulletList: editor.isActive('bulletList'),\n orderedList: editor.isActive('orderedList'),\n blockquote: editor.isActive('blockquote'),\n link: editor.isActive('link'),\n image: editor.isActive('image'),\n table: editor.isActive('table'),\n }),\n });\n\n /**\n * Devolve ao consumidor o HTML já sem cor quando o conteúdo carregado vinha\n * colorido.\n *\n * O schema descarta a cor ao parsear, então a tela aparece limpa sozinha — mas\n * o valor que o consumidor guarda continuaria sendo o HTML colorido que veio\n * da API, e salvar sem editar nada regravaria o vermelho no banco. Emitir aqui\n * alinha os dois: o próximo salvamento persiste a questão sem cor, mesmo que o\n * autor só tenha aberto e clicado em salvar.\n *\n * `emitUpdate: false` na sincronização abaixo é justamente o que torna este\n * passo necessário, e o `onChange` só dispara quando havia cor de fato —\n * qualquer outro conteúdo continua sendo carregado em silêncio, sem reescrever\n * o que já está salvo.\n * @param loaded - O HTML como chegou na prop `content`\n */\n const emitColorlessContent = (loaded: string) => {\n if (!editor || !hasColorMarkup(loaded)) return;\n\n const html = editor.getHTML();\n lastContentRef.current = html;\n onChange?.({ json: editor.getJSON(), html });\n };\n\n // Update editor content when prop changes externally (e.g., from loadQuestion)\n useEffect(() => {\n if (!editor || content === undefined) return;\n\n // Na primeira renderização o conteúdo já entrou pelo `useEditor`, então só\n // o que chega depois precisa ser reaplicado.\n if (content !== lastContentRef.current) {\n editor.commands.setContent(prepareContent(content), {\n emitUpdate: false,\n });\n lastContentRef.current = content;\n }\n\n // Uma vez por conteúdo recebido, e não a cada execução do efeito.\n if (content !== colorCheckedRef.current) {\n colorCheckedRef.current = content;\n emitColorlessContent(content);\n }\n // `emitColorlessContent` é recriada a cada render e fica fora das\n // dependências de propósito: só fecha sobre o editor e o `onChange` do\n // consumidor, e reagir a eles reemitiria o mesmo conteúdo.\n }, [content, editor]);\n\n const insertFormula = (latex: string, display: boolean) => {\n if (!latex || !editor) return;\n editor\n .chain()\n .focus()\n .insertContent({\n type: 'mathInline',\n attrs: { latex, display },\n })\n .run();\n setFormulaOpen(false);\n };\n\n const applyImage = (src: string, alt: string, width?: number) => {\n if (!src || !editor) return;\n editor\n .chain()\n .focus()\n .setImage({ src, alt, ...(width ? { width } : {}) })\n .run();\n };\n\n const insertImage = (src: string, alt: string, width?: number) => {\n applyImage(src, alt, width);\n setImageOpen(false);\n };\n\n /**\n * Uploads the images taken from the clipboard and inserts them in order.\n *\n * The upload has to finish before anything reaches the document: a `blob:`\n * source would survive into the saved HTML and break as soon as the page\n * unloads, and base64 is rejected by the schema.\n * @param files - Images already named and within the size limit\n * @param upload - The consumer's upload callback\n */\n const uploadPastedImages = async (\n files: File[],\n upload: (file: File) => Promise<string>\n ) => {\n const token = pasteTokenRef.current;\n setPasteError('');\n setIsPastingImage(true);\n\n try {\n for (const file of files) {\n const src = await upload(file);\n const width = await resolveInsertWidth(src);\n // The editor may be gone by now — the user can navigate away mid-upload.\n if (token !== pasteTokenRef.current) return;\n applyImage(src, '', width);\n }\n } catch (error) {\n if (token !== pasteTokenRef.current) return;\n setPasteError(\n error instanceof Error ? error.message : GENERIC_PASTE_ERROR\n );\n } finally {\n setIsPastingImage(false);\n }\n };\n\n useEffect(() => {\n pasteHandlerRef.current = createPastedImageHandler({\n enabled: allowImagePaste,\n upload: onUploadImage,\n onImages: uploadPastedImages,\n onOversized: () => setPasteError(OVERSIZED_PASTE_MESSAGE),\n });\n // `uploadPastedImages` is rebuilt on every render and is deliberately left\n // out of the dependencies: it only closes over the editor instance and the\n // state setters, all stable once mounted.\n }, [allowImagePaste, onUploadImage, editor]);\n\n useEffect(() => {\n // Invalidates uploads still in flight, so a late resolution cannot insert\n // into an editor that no longer exists.\n return () => {\n pasteTokenRef.current += 1;\n };\n }, []);\n\n const setLink = () => {\n const url = globalThis.window.prompt('URL do link:');\n if (url === null || !editor) return;\n if (url === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: url }).run();\n };\n\n // `toolbar` só é nulo junto com o editor, mas o TypeScript não sabe disso.\n if (!editor || !toolbar) return null;\n\n // `data-analytica-rich-editor` scopes the image resize handle styles shipped\n // in the library's global stylesheet, so they cannot leak into another Tiptap\n // instance living in the consumer app.\n return (\n <div\n data-analytica-rich-editor\n className=\"border border-border-200 rounded-xl overflow-hidden bg-background-0\"\n >\n {/* Toolbar */}\n <div className=\"flex items-center gap-0.5 border-b border-border-200 bg-background-50 px-2 py-1.5 flex-wrap\">\n {/* Headings */}\n <ToolbarBtn\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 1 }).run()\n }\n active={toolbar.heading1}\n title=\"Título 1\"\n >\n <TextHOneIcon size={16} weight=\"bold\" />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 2 }).run()\n }\n active={toolbar.heading2}\n title=\"Título 2\"\n >\n <TextHTwoIcon size={16} weight=\"bold\" />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() =>\n editor.chain().focus().toggleHeading({ level: 3 }).run()\n }\n active={toolbar.heading3}\n title=\"Título 3\"\n >\n <TextHThreeIcon size={16} weight=\"bold\" />\n </ToolbarBtn>\n\n <Divider />\n\n {/* Text formatting */}\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleBold().run()}\n active={toolbar.bold}\n title=\"Negrito (Ctrl+B)\"\n >\n <TextBolderIcon size={16} weight=\"bold\" />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleItalic().run()}\n active={toolbar.italic}\n title=\"Itálico (Ctrl+I)\"\n >\n <TextItalicIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n active={toolbar.underline}\n title=\"Sublinhado (Ctrl+U)\"\n >\n <TextUnderlineIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleStrike().run()}\n active={toolbar.strike}\n title=\"Tachado\"\n >\n <TextStrikethroughIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n active={toolbar.subscript}\n title=\"Subscrito\"\n >\n <span className=\"text-xs font-medium\">\n X<sub className=\"text-[8px]\">2</sub>\n </span>\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n active={toolbar.superscript}\n title=\"Sobrescrito\"\n >\n <span className=\"text-xs font-medium\">\n X<sup className=\"text-[8px]\">2</sup>\n </span>\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleCode().run()}\n active={toolbar.code}\n title=\"Código inline\"\n >\n <CodeIcon size={16} />\n </ToolbarBtn>\n\n <Divider />\n\n {/* Alignment */}\n <ToolbarBtn\n onClick={() => editor.chain().focus().setTextAlign('left').run()}\n active={toolbar.alignLeft}\n title=\"Alinhar à esquerda\"\n >\n <TextAlignLeftIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().setTextAlign('center').run()}\n active={toolbar.alignCenter}\n title=\"Centralizar\"\n >\n <TextAlignCenterIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().setTextAlign('right').run()}\n active={toolbar.alignRight}\n title=\"Alinhar à direita\"\n >\n <TextAlignRightIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().setTextAlign('justify').run()}\n active={toolbar.alignJustify}\n title=\"Justificar\"\n >\n <TextAlignJustifyIcon size={16} />\n </ToolbarBtn>\n\n <Divider />\n\n {/* Lists */}\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n active={toolbar.bulletList}\n title=\"Lista com marcadores\"\n >\n <ListBulletsIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n active={toolbar.orderedList}\n title=\"Lista numerada\"\n >\n <ListNumbersIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n active={toolbar.blockquote}\n title=\"Citação\"\n >\n <QuotesIcon size={16} />\n </ToolbarBtn>\n <ToolbarBtn\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n active={false}\n title=\"Linha horizontal\"\n >\n <MinusIcon size={16} />\n </ToolbarBtn>\n\n <Divider />\n\n {/* Link */}\n <ToolbarBtn\n onClick={setLink}\n active={toolbar.link}\n title=\"Inserir link\"\n >\n <LinkIcon size={16} />\n </ToolbarBtn>\n\n {/* Image */}\n <ToolbarBtn\n onClick={() => setImageOpen(true)}\n active={toolbar.image}\n title=\"Inserir imagem\"\n >\n <ImageIcon size={16} />\n </ToolbarBtn>\n\n {/* Table */}\n <ToolbarBtn\n onClick={() => editor.chain().focus().insertTable(NEW_TABLE).run()}\n active={toolbar.table}\n title=\"Inserir tabela\"\n >\n <TableIcon size={16} />\n </ToolbarBtn>\n\n {/* Formula */}\n <Button\n type=\"button\"\n onClick={() => setFormulaOpen(true)}\n title=\"Inserir fórmula LaTeX\"\n size=\"extra-small\"\n variant=\"link\"\n >\n <MathOperationsIcon size={16} />\n LaTeX\n </Button>\n </div>\n\n {/*\n Ações de linha/coluna só existem quando o cursor está dentro de uma\n tabela, então ficam numa barra própria em vez de ocuparem a toolbar\n principal — que já quebra em duas linhas no tablet.\n */}\n {toolbar.table && (\n <div\n data-testid=\"table-toolbar\"\n className=\"flex items-center gap-0.5 border-b border-border-200 bg-background-50 px-2 py-1.5 flex-wrap\"\n >\n <TableActionBtn\n onClick={() => editor.chain().focus().addRowBefore().run()}\n label=\"Linha acima\"\n >\n <RowsPlusTopIcon size={16} />\n </TableActionBtn>\n <TableActionBtn\n onClick={() => editor.chain().focus().addRowAfter().run()}\n label=\"Linha abaixo\"\n >\n <RowsPlusBottomIcon size={16} />\n </TableActionBtn>\n <TableActionBtn\n onClick={() => editor.chain().focus().addColumnBefore().run()}\n label=\"Coluna à esquerda\"\n >\n <ColumnsPlusLeftIcon size={16} />\n </TableActionBtn>\n <TableActionBtn\n onClick={() => editor.chain().focus().addColumnAfter().run()}\n label=\"Coluna à direita\"\n >\n <ColumnsPlusRightIcon size={16} />\n </TableActionBtn>\n\n <Divider />\n\n <TableActionBtn\n onClick={() => editor.chain().focus().toggleHeaderRow().run()}\n label=\"Cabeçalho\"\n >\n <TableIcon size={16} />\n </TableActionBtn>\n\n <Divider />\n\n <TableActionBtn\n onClick={() => editor.chain().focus().deleteRow().run()}\n label=\"Excluir linha\"\n danger\n >\n <RowsIcon size={16} />\n </TableActionBtn>\n <TableActionBtn\n onClick={() => editor.chain().focus().deleteColumn().run()}\n label=\"Excluir coluna\"\n danger\n >\n <ColumnsIcon size={16} />\n </TableActionBtn>\n <TableActionBtn\n onClick={() => editor.chain().focus().deleteTable().run()}\n label=\"Excluir tabela\"\n danger\n >\n <TrashIcon size={16} />\n </TableActionBtn>\n </div>\n )}\n\n {/* Editor */}\n <EditorContent editor={editor} />\n\n {/* Estado do envio de imagem colada e dica de LaTeX */}\n <div className=\"border-t border-border-200 px-4 py-2 bg-background-50\">\n {isPastingImage && (\n <Text size=\"xs\" color=\"text-text-600\" className=\"block mb-1\">\n Enviando imagem...\n </Text>\n )}\n {pasteError && (\n <Text size=\"xs\" color=\"text-error-600\" className=\"block mb-1\">\n {pasteError}\n </Text>\n )}\n <Text size=\"xs\" color=\"text-text-400\">\n Dica: use{' '}\n <code className=\"bg-background-200 px-1 rounded\">$fórmula$</code> para\n LaTeX inline e{' '}\n <code className=\"bg-background-200 px-1 rounded\">$$fórmula$$</code>{' '}\n para fórmula em bloco. A conversão acontece assim que você fecha os\n cifrões.\n </Text>\n </div>\n\n <FormulaDialog\n open={formulaOpen}\n onClose={() => setFormulaOpen(false)}\n onInsert={insertFormula}\n onGenerateWithAI={onGenerateLatexWithAI}\n />\n\n <ImageDialog\n open={imageOpen}\n onClose={() => setImageOpen(false)}\n onInsert={insertImage}\n onUploadImage={onUploadImage}\n />\n </div>\n );\n}\n","import StarterKit from '@tiptap/starter-kit';\nimport Underline from '@tiptap/extension-underline';\nimport TextAlign from '@tiptap/extension-text-align';\nimport Subscript from '@tiptap/extension-subscript';\nimport Superscript from '@tiptap/extension-superscript';\nimport Link from '@tiptap/extension-link';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Image from '@tiptap/extension-image';\nimport { TableKit } from '@tiptap/extension-table';\nimport { MathNode } from './MathNode';\nimport {\n MIN_IMAGE_HEIGHT,\n MIN_IMAGE_WIDTH,\n parseImageWidth,\n} from './imageSize';\n\n/**\n * Image node with drag-to-resize handles.\n *\n * The stock extension already declares `width`/`height` attributes, but their\n * default parser keeps the raw HTML value. That breaks the resizable node view,\n * which appends `px` to whatever is stored — a legacy `width=\"400px\"` would\n * become `400pxpx`. Parsing to a number up front keeps every source consistent.\n *\n * `height` is deliberately never persisted: the editor stylesheet and\n * HtmlMathRenderer both force `height: auto`, so a stored height exists only to\n * be overridden. Worse, when `max-width` clips a too-wide image while an inline\n * height survives, the node view measures the clipped box and commits a\n * distorted aspect ratio on the next drag.\n */\nconst ResizableImage = Image.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n width: {\n default: null,\n parseHTML: (element: HTMLElement) => parseImageWidth(element),\n renderHTML: (attributes: Record<string, unknown>) =>\n typeof attributes.width === 'number'\n ? { width: attributes.width }\n : {},\n },\n height: {\n default: null,\n parseHTML: () => null,\n rendered: false,\n },\n };\n },\n\n addNodeView() {\n const parentNodeView = this.parent?.();\n if (!parentNodeView) return null;\n\n return (props) => {\n const nodeView = parentNodeView(props);\n const container = nodeView.dom;\n\n if (container instanceof HTMLElement) {\n // The upstream node view hides the container until `load` fires. An\n // expired storage URL therefore leaves an invisible, unselectable node —\n // worse than the browser's broken-image icon. Reveal it on failure.\n const image = container.querySelector('img');\n image?.addEventListener('error', () => {\n container.style.visibility = '';\n container.style.pointerEvents = '';\n });\n }\n\n return nodeView;\n };\n },\n});\n\n/**\n * Extension list backing the RichEditor.\n *\n * Tiptap validates incoming HTML against the schema these extensions build and\n * silently discards any node it cannot match. Anything the editor must be able\n * to *load* has to be registered here, not only what it can create — omitting\n * Image is what made `<img>` tags disappear from existing content.\n *\n * That same rule is what keeps colour out of the content, and it is why\n * TextStyle/Color/Highlight are deliberately absent. The toolbar has never\n * offered a colour control, so every coloured run in the question bank arrived\n * pasted from Word, a PDF or an old ENEM export (`<span style=\"color: red\">`,\n * `<mark style=\"background-color: yellow\">`) and then survived into the saved\n * HTML, where it fights the app's own typography. Without a schema attribute\n * to land in, the declaration is dropped on the way in — on paste, on\n * drag-and-drop and when an existing question is loaded for editing — while\n * the text itself is kept. Bold, italic, alignment and the rest are unaffected:\n * they are separate marks.\n */\nexport function createRichEditorExtensions(placeholder: string) {\n return [\n StarterKit,\n Underline,\n Subscript,\n Superscript,\n TextAlign.configure({ types: ['heading', 'paragraph'] }),\n Link.configure({ openOnClick: false }),\n Placeholder.configure({ placeholder }),\n ResizableImage.configure({\n inline: false,\n allowBase64: false,\n resize: {\n enabled: true,\n // Corner handles only: edge handles span the whole side and read as a\n // border rather than a grip.\n directions: ['top-left', 'top-right', 'bottom-left', 'bottom-right'],\n minWidth: MIN_IMAGE_WIDTH,\n minHeight: MIN_IMAGE_HEIGHT,\n alwaysPreserveAspectRatio: true,\n },\n }),\n // Registering these nodes is what makes a table survive at all: without\n // them the schema has no match for `<table>`, so every cell collapsed into\n // a single run-on paragraph — and the next save persisted that flattened\n // text over the original table. The toolbar commands (insert, add/remove\n // row and column) come from the same kit.\n TableKit.configure({\n // Resizing is off on purpose: dragging a column persists a `colwidth`\n // measured against the editor viewport, and the student's viewport is a\n // different width. Column layout stays with the display stylesheet.\n table: { resizable: false },\n }),\n MathNode,\n ];\n}\n","/**\n * Clipboard handling for images pasted straight into the RichEditor.\n *\n * A screenshot on the clipboard arrives as a `File` on the paste event, but the\n * editor schema rejects base64 sources, so the file has to be uploaded before\n * it can be inserted. These helpers isolate the clipboard reading from the\n * upload flow in `RichEditorCore`, which keeps them testable without a real\n * ProseMirror view.\n */\n\nimport { MAX_IMAGE_SIZE } from './imageSize';\n\n/** Base name given to a clipboard image that arrives without a filename. */\nconst PASTED_IMAGE_BASENAME = 'imagem-colada';\n\n/**\n * Extension per MIME type accepted by the storage backend. Keyed by the types a\n * browser actually puts on the clipboard when copying an image.\n */\nconst EXTENSION_BY_MIME: Record<string, string> = {\n 'image/png': 'png',\n 'image/jpeg': 'jpg',\n 'image/gif': 'gif',\n 'image/webp': 'webp',\n 'image/bmp': 'bmp',\n 'image/svg+xml': 'svg',\n};\n\n/** Extension used when the clipboard reports an image type we do not map. */\nconst FALLBACK_EXTENSION = 'png';\n\n/**\n * Reads the image files carried by a paste event.\n * Anything that is not an image is left alone so the default paste behaviour\n * still handles it.\n * @param clipboardData - The `clipboardData` of the paste event\n * @returns The image files found, in clipboard order\n */\nexport const extractPastedImageFiles = (\n clipboardData: DataTransfer | null | undefined\n): File[] => {\n if (!clipboardData?.files) return [];\n\n return Array.from(clipboardData.files).filter((file) =>\n file.type.startsWith('image/')\n );\n};\n\n/**\n * Guarantees the file has a name before it reaches the upload.\n * Some browsers hand over a nameless blob for a screenshot, and the pre-signed\n * URL request sends `file.name` to the backend — an empty name would be\n * rejected there.\n * @param file - The image file taken from the clipboard\n * @returns The original file when it is already named, a renamed copy otherwise\n */\nexport const namePastedImage = (file: File): File => {\n if (file.name) return file;\n\n const extension = EXTENSION_BY_MIME[file.type] ?? FALLBACK_EXTENSION;\n return new File([file], `${PASTED_IMAGE_BASENAME}.${extension}`, {\n type: file.type,\n });\n};\n\nconst isOversized = (file: File) => file.size > MAX_IMAGE_SIZE;\n\n/**\n * Whether the clipboard markup should win over the image file it came with.\n *\n * Copying a range from Excel or Google Sheets puts both an HTML table and a\n * picture of it on the clipboard; taking the picture would silently turn a\n * pasteable table into a figure. Markup that carries its own `<img>` is the\n * opposite case — copying a picture from Word sends `<img src=\"file:///...\">`,\n * which would paste as a broken image, so there the file is the good source.\n * @param clipboardData - The `clipboardData` of the paste event\n * @returns True when the default paste handling should keep the markup\n */\nconst prefersMarkup = (clipboardData: DataTransfer) => {\n const html = clipboardData.getData('text/html');\n return html !== '' && !/<img\\b/i.test(html);\n};\n\ninterface PastedImageHandlerOptions {\n /** Whether the consumer opted into pasting images. */\n readonly enabled: boolean;\n /** Upload callback. Without one there is nowhere to put the file. */\n readonly upload?: (file: File) => Promise<string>;\n /** Receives the named images to upload, once the clipboard is accepted. */\n readonly onImages: (\n files: File[],\n upload: (file: File) => Promise<string>\n ) => void;\n /** Called instead of `onImages` when any image is over the size limit. */\n readonly onOversized: () => void;\n}\n\n/**\n * Builds the handler Tiptap calls on every paste.\n *\n * Returning false leaves the paste to the default handling, so text, HTML and\n * anything else keep behaving exactly as before — only a clipboard carrying\n * image files is taken over.\n * @param options - Upload wiring and the callbacks used to report the outcome\n * @returns A handler that reports whether it consumed the paste\n */\nexport const createPastedImageHandler =\n ({ enabled, upload, onImages, onOversized }: PastedImageHandlerOptions) =>\n (event: ClipboardEvent): boolean => {\n if (!enabled || !upload) return false;\n\n const clipboard = event.clipboardData;\n if (!clipboard) return false;\n\n const files = extractPastedImageFiles(clipboard);\n if (files.length === 0 || prefersMarkup(clipboard)) return false;\n\n // From here on the paste belongs to us: the default handler would drop the\n // file anyway, since the editor schema rejects base64 image sources.\n event.preventDefault();\n\n if (files.some(isOversized)) {\n onOversized();\n return true;\n }\n\n onImages(files.map(namePastedImage), upload);\n return true;\n };\n","/**\n * Detecção de cor no HTML das questões.\n *\n * O schema do RichEditor não tem atributo onde guardar cor (ver\n * `components/RichEditor/components/extensions.ts`), então toda declaração de\n * cor é descartada na leitura — o autor abre a questão e ela já aparece sem o\n * vermelho que veio da API. O que o schema não faz é avisar que descartou algo:\n * o valor em memória do formulário continua sendo o HTML colorido, e salvar sem\n * editar nada regravaria a cor no banco.\n *\n * Este módulo é o gatilho que fecha esse buraco. É deliberadamente uma\n * heurística sobre a string: basta reconhecer que havia cor para que o editor\n * devolva ao consumidor o HTML já limpo. Um falso positivo custa um\n * `onChange` extra na carga; um falso negativo só deixa a cor no valor salvo até\n * a próxima edição de verdade.\n */\n\n/** Valores de atributos `style` (aspas duplas ou simples) presentes no HTML. */\nconst STYLE_ATTRIBUTE = /style\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi;\n\n/**\n * Propriedades CSS que pintam texto ou fundo, ancoradas no início de uma\n * declaração para não casar com `border-color` e afins. A forma abreviada\n * `background` entra na lista porque é o que Word e Google Docs escrevem com\n * frequência no lugar de `background-color`.\n */\nconst COLOR_DECLARATION =\n /(?:^|;)\\s*(?:color|background|background-color)\\s*:/i;\n\n/**\n * Cor que vive fora do `style`: `<font color>` e `bgcolor` vêm dos exports\n * antigos do ENEM e do que se cola de um PDF; `<mark>` e `data-color` são o\n * grifo que o Highlight do Tiptap gravava junto com a cor de fundo.\n */\nconst COLOR_MARKUP = [\n /<font\\b[^>]*\\bcolor\\s*=/i,\n /<[a-z][^>]*\\bbgcolor\\s*=/i,\n /<mark\\b/i,\n /\\bdata-color\\s*=/i,\n];\n\n/**\n * Se `html` carrega alguma cor que o editor vai descartar ao carregá-lo.\n * @param html - HTML como veio da API, da geração por IA ou de um export antigo\n * @returns True quando há cor de fonte, de fundo ou grifo no conteúdo\n */\nexport function hasColorMarkup(html?: string | null): boolean {\n if (!html) return false;\n\n if (COLOR_MARKUP.some((pattern) => pattern.test(html))) return true;\n\n for (const match of html.matchAll(STYLE_ATTRIBUTE)) {\n if (COLOR_DECLARATION.test(match[1] ?? match[2] ?? '')) return true;\n }\n\n return false;\n}\n"]}
|