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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
var _chunkW7BBVDBIjs = require('./chunk-W7BBVDBI.js');
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
var _chunkXN2HPVVHjs = require('./chunk-XN2HPVVH.js');
|
|
@@ -9,11 +10,6 @@ var _chunkXN2HPVVHjs = require('./chunk-XN2HPVVH.js');
|
|
|
9
10
|
var _chunkTN3AYOMVjs = require('./chunk-TN3AYOMV.js');
|
|
10
11
|
|
|
11
12
|
// src/components/AlertDialog/AlertDialog.tsx
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
13
|
var _react = require('react');
|
|
18
14
|
var _jsxruntime = require('react/jsx-runtime');
|
|
19
15
|
var SIZE_CLASSES = {
|
|
@@ -45,7 +41,7 @@ var AlertDialog = _react.forwardRef.call(void 0,
|
|
|
45
41
|
const dialogRef = _react.useRef.call(void 0, null);
|
|
46
42
|
const titleId = _react.useId.call(void 0, );
|
|
47
43
|
const descriptionId = _react.useId.call(void 0, );
|
|
48
|
-
|
|
44
|
+
_chunkW7BBVDBIjs.useModalFocus.call(void 0, isOpen, dialogRef);
|
|
49
45
|
const setDialogRef = (node) => {
|
|
50
46
|
dialogRef.current = node;
|
|
51
47
|
if (typeof ref === "function") {
|
|
@@ -54,16 +50,7 @@ var AlertDialog = _react.forwardRef.call(void 0,
|
|
|
54
50
|
ref.current = node;
|
|
55
51
|
}
|
|
56
52
|
};
|
|
57
|
-
|
|
58
|
-
if (!isOpen || !closeOnEscape) return;
|
|
59
|
-
const handleEscape = (event) => {
|
|
60
|
-
if (event.key === "Escape") {
|
|
61
|
-
onChangeOpen(false);
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
document.addEventListener("keydown", handleEscape);
|
|
65
|
-
return () => document.removeEventListener("keydown", handleEscape);
|
|
66
|
-
}, [isOpen, closeOnEscape]);
|
|
53
|
+
_chunkW7BBVDBIjs.useEscapeToClose.call(void 0, isOpen && closeOnEscape, () => onChangeOpen(false));
|
|
67
54
|
_react.useEffect.call(void 0, () => {
|
|
68
55
|
if (isOpen) {
|
|
69
56
|
document.body.style.overflow = "hidden";
|
|
@@ -74,15 +61,8 @@ var AlertDialog = _react.forwardRef.call(void 0,
|
|
|
74
61
|
document.body.style.overflow = "unset";
|
|
75
62
|
};
|
|
76
63
|
}, [isOpen]);
|
|
77
|
-
const handleBackdropClick = (
|
|
78
|
-
|
|
79
|
-
onChangeOpen(false);
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
const handleBackdropKeyDown = (event) => {
|
|
83
|
-
if (event.key === "Escape" && closeOnEscape) {
|
|
84
|
-
onChangeOpen(false);
|
|
85
|
-
}
|
|
64
|
+
const handleBackdropClick = () => {
|
|
65
|
+
onChangeOpen(false);
|
|
86
66
|
};
|
|
87
67
|
const handleSubmit = () => {
|
|
88
68
|
onChangeOpen(false);
|
|
@@ -93,58 +73,70 @@ var AlertDialog = _react.forwardRef.call(void 0,
|
|
|
93
73
|
_optionalChain([onCancel, 'optionalCall', _2 => _2(cancelValue)]);
|
|
94
74
|
};
|
|
95
75
|
const sizeClasses = SIZE_CLASSES[size];
|
|
96
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: isOpen && /* @__PURE__ */ _jsxruntime.
|
|
76
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: isOpen && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
97
77
|
"div",
|
|
98
78
|
{
|
|
99
79
|
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm",
|
|
100
|
-
onClick: handleBackdropClick,
|
|
101
|
-
onKeyDown: handleBackdropKeyDown,
|
|
102
80
|
"data-testid": "alert-dialog-overlay",
|
|
103
|
-
children:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
81
|
+
children: [
|
|
82
|
+
closeOnBackdropClick && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
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__ */ _jsxruntime.jsxs.call(void 0,
|
|
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: _chunkTN3AYOMVjs.cn.call(void 0,
|
|
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
|
|
130
111
|
),
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXN2HPVVHjs.Button_default, { variant: "outline", size: "small", onClick: handleCancel, children: cancelButtonLabel }),
|
|
112
|
+
...props,
|
|
113
|
+
children: [
|
|
134
114
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
135
|
-
|
|
115
|
+
"h2",
|
|
136
116
|
{
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
onClick: handleSubmit,
|
|
141
|
-
children: submitButtonLabel
|
|
117
|
+
id: titleId,
|
|
118
|
+
className: "pb-3 text-xl font-semibold text-text-950",
|
|
119
|
+
children: title
|
|
142
120
|
}
|
|
143
|
-
)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
121
|
+
),
|
|
122
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { id: descriptionId, className: "text-text-700 text-sm", children: description }),
|
|
123
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-row items-center justify-end pt-4 gap-3", children: [
|
|
124
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXN2HPVVHjs.Button_default, { variant: "outline", size: "small", onClick: handleCancel, children: cancelButtonLabel }),
|
|
125
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
126
|
+
_chunkXN2HPVVHjs.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
|
+
]
|
|
148
140
|
}
|
|
149
141
|
) });
|
|
150
142
|
}
|
|
@@ -154,4 +146,4 @@ AlertDialog.displayName = "AlertDialog";
|
|
|
154
146
|
|
|
155
147
|
|
|
156
148
|
exports.AlertDialog = AlertDialog;
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-AZSRKBYS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-AZSRKBYS.js","../src/components/AlertDialog/AlertDialog.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-AZSRKBYS.js","sourcesContent":[null,"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"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var _chunkQF3UKRIJjs = require('./chunk-QF3UKRIJ.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkH3F4OCXCjs = require('./chunk-H3F4OCXC.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
var _chunkHOVTCEHKjs = require('./chunk-HOVTCEHK.js');
|
|
@@ -16,7 +16,7 @@ var _chunkVVO3W2SMjs = require('./chunk-VVO3W2SM.js');
|
|
|
16
16
|
var _chunkMNU45FM3js = require('./chunk-MNU45FM3.js');
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var _chunkJTWXQ267js = require('./chunk-JTWXQ267.js');
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
var _chunkXN2HPVVHjs = require('./chunk-XN2HPVVH.js');
|
|
@@ -221,7 +221,7 @@ var EnemClassroomStartModal = ({
|
|
|
221
221
|
}
|
|
222
222
|
),
|
|
223
223
|
exam.videoUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
224
|
-
|
|
224
|
+
_chunkH3F4OCXCjs.VideoPlayer_default,
|
|
225
225
|
{
|
|
226
226
|
src: exam.videoUrl,
|
|
227
227
|
title: exam.title,
|
|
@@ -485,7 +485,7 @@ var EnemClassroomStartModal = ({
|
|
|
485
485
|
] }) : void 0;
|
|
486
486
|
};
|
|
487
487
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
488
|
-
|
|
488
|
+
_chunkJTWXQ267js.Modal_default,
|
|
489
489
|
{
|
|
490
490
|
isOpen,
|
|
491
491
|
onClose,
|
|
@@ -513,4 +513,4 @@ var EnemClassroomStartModal_default = EnemClassroomStartModal;
|
|
|
513
513
|
|
|
514
514
|
|
|
515
515
|
exports.EnemClassroomStartModal_default = EnemClassroomStartModal_default;
|
|
516
|
-
//# sourceMappingURL=chunk-
|
|
516
|
+
//# sourceMappingURL=chunk-BQIBVC6X.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-CY2VKNCB.js","../src/components/EnemClassroomStartModal/EnemClassroomStartModal.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-CY2VKNCB.js","sourcesContent":[null,"import { useCallback, useEffect, useMemo, useState, ChangeEvent } from 'react';\nimport Modal from '../Modal/Modal';\nimport Stepper from '../Stepper/Stepper';\nimport Button from '../Button/Button';\nimport Input from '../Input/Input';\nimport CheckBox from '../CheckBox/CheckBox';\nimport Text from '../Text/Text';\nimport VideoPlayer from '../VideoPlayer/VideoPlayer';\nimport { CaretLeftIcon } from '@phosphor-icons/react/dist/csr/CaretLeft';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { CheckIcon } from '@phosphor-icons/react/dist/csr/Check';\nimport { cn } from '../../utils/utils';\nimport warningClassroomIcon from '../../assets/img/enemClassroom/warning-classroom.png';\nimport warningTimerIcon from '../../assets/img/enemClassroom/warning-timer.png';\nimport warningIrreversibleIcon from '../../assets/img/enemClassroom/warning-irreversible.png';\nimport flagEnglish from '../../assets/img/enemClassroom/flag-english.png';\nimport flagSpanish from '../../assets/img/enemClassroom/flag-spanish.png';\nimport surveyCourseIllustration from '../../assets/img/enemClassroom/survey-course.svg';\nimport surveyUniversityIllustration from '../../assets/img/enemClassroom/survey-university.png';\nimport {\n ENEM_CLASSROOM_LANGUAGE,\n ENEM_CLASSROOM_LANGUAGE_LABELS,\n type EnemClassroomExam,\n type EnemClassroomLanguage,\n type EnemClassroomStartPayload,\n type EnemClassroomStudentTexts,\n type EnemClassroomSurveyQuestion,\n} from '../../types/enemClassroom';\n\n/** Title shared by every step, as in the design. */\n/**\n * The three warnings of the introduction step. The exam only counts when\n * taken in class, so they are shown before anything else. The first one is\n * the backoffice's to write (`studentTexts`); the other two are fixed.\n *\n * @param texts - The exam's texts\n * @returns The warnings in order\n */\nconst buildIntroWarnings = (texts: EnemClassroomStudentTexts) => [\n {\n icon: warningClassroomIcon,\n title: texts.introWarningTitle,\n description: texts.introWarningText,\n },\n {\n icon: warningTimerIcon,\n title: 'O cronômetro liga na hora',\n description:\n 'Assim que clicar em começar, o tempo já corre e não para, mesmo se fechar o navegador.',\n },\n {\n icon: warningIrreversibleIcon,\n title: 'Não tem como desfazer',\n description:\n 'Iniciar fora do horário estabelecido pelo seu professor em sala de aula pode atrapalhar seu resultado!',\n },\n];\n\n/** Flag shown next to each language, as in the design. */\nconst LANGUAGE_FLAGS: Record<EnemClassroomLanguage, string> = {\n [ENEM_CLASSROOM_LANGUAGE.INGLES]: flagEnglish,\n [ENEM_CLASSROOM_LANGUAGE.ESPANHOL]: flagSpanish,\n};\n\n/**\n * Illustration of each survey step, in the order the steps are asked: the\n * course question, then the university one.\n *\n * Fixed here rather than sent by the backoffice, so it is keyed by position —\n * reordering the questions there moves the illustration with the position,\n * not with the question. A question past the end simply gets none.\n */\nconst SURVEY_ILLUSTRATIONS = [\n surveyCourseIllustration,\n surveyUniversityIllustration,\n] as const;\n\n/**\n * The white card the warnings and the options sit on. Same vocabulary as\n * SelectionButton, so the modal reads like the rest of the design system\n * against the modal's `secondary-50` background.\n */\nconst CARD_CLASSES =\n 'rounded-xl border border-border-50 bg-background shadow-soft-shadow-1';\n\n/**\n * Gradiente da identidade da simulação em sala de aula — os mesmos tons do\n * card do painel do aluno. Não sai dos tokens de tema porque é a marca da\n * prova, não a da instituição.\n *\n * Literal, e não `bg-gradient-to-r from-… to-…`: o Tailwind v4 interpola\n * `in oklab`, o que muda os tons do meio em relação ao sRGB do design.\n *\n * `border-0` porque o `solid/primary` do Button traz `border-primary-950`, que\n * o gradiente não cobre — ele só troca o fundo. Zerar a largura, em vez de\n * pintar a borda de transparente, também neutraliza as cores de hover e\n * active, que voltariam a aparecer.\n */\nconst GRADIENT_CTA_CLASSES =\n 'bg-[linear-gradient(270deg,#B21FF6_0%,#F95493_100%)] border-0 hover:opacity-90 transition-opacity';\n\n/**\n * One selectable option: a card carrying an optional icon and a label.\n *\n * The radio control itself is visually hidden — in the design the card's own\n * border carries the selection. The native input stays in the tree so the\n * options remain a real radio group: arrow keys move between them and screen\n * readers announce \"1 of 2\", which a set of toggle buttons would not.\n */\nconst OptionCard = ({\n name,\n value,\n label,\n iconSrc,\n checked,\n onSelect,\n testId,\n}: {\n name: string;\n value: string;\n label: string;\n iconSrc?: string;\n checked: boolean;\n onSelect: () => void;\n testId?: string;\n}) => (\n <label\n className={cn(\n CARD_CLASSES,\n 'flex flex-row items-center gap-3 px-4 py-3.5',\n 'cursor-pointer transition-colors hover:bg-background-100',\n 'focus-within:ring-2 focus-within:ring-indicator-info',\n checked && 'border-primary-700 ring-1 ring-primary-700'\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n onChange={onSelect}\n className=\"sr-only\"\n data-testid={testId}\n />\n {iconSrc && (\n <img src={iconSrc} alt=\"\" aria-hidden className=\"w-6 h-6 flex-shrink-0\" />\n )}\n <Text size=\"sm\" weight=\"semibold\" className=\"text-text-900\">\n {label}\n </Text>\n </label>\n);\n\n/**\n * How a survey question was answered. The student either writes an answer or\n * ticks \"ainda estou pensando\" — the tick clears and disables the field, so\n * the two never disagree.\n */\ninterface SurveyAnswerDraft {\n skipped: boolean;\n text: string;\n}\n\n/**\n * One line of the summary: the step's name over what the student answered.\n */\nconst SummaryRow = ({ label, value }: { label: string; value: string }) => (\n <div className=\"flex flex-col rounded-lg bg-primary-50 px-3 py-2\">\n <Text as=\"dt\" size=\"sm\" weight=\"bold\" className=\"text-primary-800\">\n {label}\n </Text>\n <Text as=\"dd\" size=\"sm\" className=\"text-text-600\">\n {value}\n </Text>\n </div>\n);\n\n/** The introduction is always first; the first choice comes right after it. */\nconst INTRO_STEP = 0;\nconst FIRST_CHOICE_STEP = 1;\n\n/** One screen of the flow. Which ones exist depends on the exam. */\ntype FlowStep =\n | { kind: 'intro' }\n | { kind: 'language' }\n | { kind: 'survey'; question: EnemClassroomSurveyQuestion; index: number }\n | { kind: 'summary' };\n\nexport interface EnemClassroomStartModalProps {\n isOpen: boolean;\n onClose: () => void;\n exam: EnemClassroomExam;\n /** Called with everything the start endpoint needs. */\n onStart: (payload: EnemClassroomStartPayload) => void;\n /** Disables the final button while the start request is in flight. */\n isStarting?: boolean;\n}\n\n/**\n * Whether a survey draft is complete: skipped, or answered with some text.\n */\nconst isSurveyAnswerComplete = (draft: SurveyAnswerDraft | undefined) =>\n draft?.skipped === true || (draft?.text.trim().length ?? 0) > 0;\n\n/**\n * The text shown for a survey answer on the summary screen.\n */\nconst describeSurveyAnswer = (\n question: EnemClassroomSurveyQuestion,\n draft: SurveyAnswerDraft | undefined\n) => (draft && !draft.skipped ? draft.text.trim() : question.skipLabel);\n\n/**\n * Start flow of the in-classroom ENEM simulation.\n *\n * Steps, in order: introduction (video + warnings), foreign language — only\n * when the exam offers the choice —, one step per survey question, and a\n * summary the student confirms before the exam opens. The stepper only lists\n * the steps that carry a choice; the summary is a screen of its own, as in\n * the design.\n *\n * Presentational: it collects the choices and hands them to `onStart`; the\n * caller talks to the API.\n *\n * @example\n * ```tsx\n * <EnemClassroomStartModal\n * isOpen={open}\n * onClose={() => setOpen(false)}\n * exam={exam}\n * onStart={(payload) => start(exam.id, payload)}\n * />\n * ```\n */\nconst EnemClassroomStartModal = ({\n isOpen,\n onClose,\n exam,\n onStart,\n isStarting = false,\n}: EnemClassroomStartModalProps) => {\n const surveyQuestions = useMemo(\n () => [...exam.surveyQuestions].sort((a, b) => a.position - b.position),\n [exam.surveyQuestions]\n );\n // The screens this exam has: no language step on an exam without the\n // choice, so the student goes from the warnings straight to the survey.\n const steps = useMemo<FlowStep[]>(\n () => [\n { kind: 'intro' },\n ...(exam.languageChoice ? [{ kind: 'language' } as const] : []),\n ...surveyQuestions.map((question, index) => ({\n kind: 'survey' as const,\n question,\n index,\n })),\n { kind: 'summary' },\n ],\n [exam.languageChoice, surveyQuestions]\n );\n const summaryStep = steps.length - 1;\n\n const [step, setStep] = useState(INTRO_STEP);\n const [language, setLanguage] = useState<EnemClassroomLanguage | null>(null);\n const [answers, setAnswers] = useState<Record<string, SurveyAnswerDraft>>({});\n\n // Every opening starts from the introduction with nothing filled in — and\n // so does a different exam handed in while the modal is open, whose steps\n // and questions are not the ones the answers were given to.\n useEffect(() => {\n if (isOpen) {\n setStep(INTRO_STEP);\n setLanguage(null);\n setAnswers({});\n }\n }, [isOpen, exam.id]);\n\n const stepperSteps = useMemo(\n () =>\n steps\n .filter((flowStep) => flowStep.kind !== 'summary')\n .map((flowStep) => {\n if (flowStep.kind === 'intro') {\n return {\n id: 'intro',\n label: 'Introdução',\n state: 'pending' as const,\n };\n }\n if (flowStep.kind === 'language') {\n return {\n id: 'language',\n label: 'Língua estrangeira',\n state: 'pending' as const,\n };\n }\n return {\n id: flowStep.question.id,\n label: flowStep.question.stepLabel,\n state: 'pending' as const,\n };\n }),\n [steps]\n );\n\n const currentStep = steps[step] ?? steps[INTRO_STEP];\n const currentQuestion =\n currentStep.kind === 'survey' ? currentStep.question : null;\n\n const canGoNext =\n currentStep.kind === 'language'\n ? language !== null\n : currentQuestion !== null &&\n isSurveyAnswerComplete(answers[currentQuestion.id]);\n\n const updateAnswer = useCallback(\n (questionId: string, patch: Partial<SurveyAnswerDraft>) => {\n setAnswers((prev) => {\n const current = prev[questionId] ?? { skipped: false, text: '' };\n return { ...prev, [questionId]: { ...current, ...patch } };\n });\n },\n []\n );\n\n const handleStart = useCallback(() => {\n // The language is only a choice on an exam that offers one.\n if (exam.languageChoice && !language) return;\n onStart({\n language: exam.languageChoice ? language : null,\n surveyAnswers: surveyQuestions.map((question) => {\n const draft = answers[question.id];\n const text = draft && !draft.skipped ? draft.text.trim() : '';\n return { questionId: question.id, answer: text || null };\n }),\n });\n }, [exam.languageChoice, language, surveyQuestions, answers, onStart]);\n\n const renderIntroStep = () => (\n <div className=\"flex flex-col gap-6\" data-testid=\"enem-classroom-intro\">\n {exam.videoUrl && (\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-950\"\n data-testid=\"enem-classroom-intro-video-text\"\n >\n {exam.studentTexts.introVideoText}\n </Text>\n )}\n {exam.videoUrl && (\n <VideoPlayer\n src={exam.videoUrl}\n title={exam.title}\n // O desenho mostra só o vídeo: o nome da prova já está no título do\n // modal. O `title` fica para rotular o player nos leitores de tela.\n hideHeader\n className=\"w-full rounded-xl overflow-hidden\"\n autoSave={false}\n />\n )}\n\n <div className=\"flex flex-col gap-4\">\n <Text size=\"lg\" weight=\"bold\" className=\"text-text-950\">\n {exam.studentTexts.introHeading}\n </Text>\n {buildIntroWarnings(exam.studentTexts).map(\n ({ icon, title, description }) => (\n <div\n key={title}\n className={cn(\n CARD_CLASSES,\n 'flex flex-row gap-4 items-start p-4'\n )}\n >\n <img\n src={icon}\n alt=\"\"\n aria-hidden\n className=\"flex-shrink-0 w-10 h-10\"\n />\n <div className=\"flex flex-col gap-1\">\n <Text size=\"md\" weight=\"bold\" className=\"text-text-950\">\n {title}\n </Text>\n <Text size=\"sm\" className=\"text-text-600\">\n {description}\n </Text>\n </div>\n </div>\n )\n )}\n </div>\n </div>\n );\n\n const renderLanguageStep = () => (\n <div className=\"flex flex-col gap-4\" data-testid=\"enem-classroom-language\">\n <Text\n id=\"enem-classroom-language-prompt\"\n size=\"lg\"\n weight=\"bold\"\n className=\"text-text-950\"\n >\n Qual língua estrangeira você vai usar na simulação?\n </Text>\n <div\n role=\"radiogroup\"\n aria-labelledby=\"enem-classroom-language-prompt\"\n className=\"flex flex-col gap-4\"\n >\n {Object.values(ENEM_CLASSROOM_LANGUAGE).map((value) => (\n <OptionCard\n key={value}\n name=\"enem-classroom-language\"\n value={value}\n label={ENEM_CLASSROOM_LANGUAGE_LABELS[value]}\n iconSrc={LANGUAGE_FLAGS[value]}\n checked={language === value}\n onSelect={() => setLanguage(value)}\n testId={`enem-classroom-language-${value.toLowerCase()}`}\n />\n ))}\n </div>\n </div>\n );\n\n const renderSurveyStep = (\n question: EnemClassroomSurveyQuestion,\n index: number\n ) => {\n const draft = answers[question.id];\n const illustration = SURVEY_ILLUSTRATIONS[index];\n // The two ways of answering disable each other, so they can never\n // contradict — and either one on its own releases the step.\n const hasText = (draft?.text.trim().length ?? 0) > 0;\n const isSkipped = draft?.skipped === true;\n return (\n <div\n className=\"flex flex-col gap-4\"\n data-testid={`enem-classroom-survey-${question.id}`}\n >\n {illustration && (\n <img\n src={illustration}\n alt=\"\"\n aria-hidden\n className=\"w-[220px] max-w-full self-center\"\n data-testid=\"enem-classroom-survey-illustration\"\n />\n )}\n <Text\n id={`enem-classroom-survey-prompt-${question.id}`}\n size=\"lg\"\n weight=\"bold\"\n className=\"text-text-950\"\n >\n {question.prompt}\n </Text>\n <div className=\"flex flex-col gap-2\">\n <Text\n as=\"label\"\n htmlFor={`enem-classroom-survey-input-${question.id}`}\n size=\"sm\"\n className=\"text-text-600\"\n >\n {question.inputLabel}\n </Text>\n <Input\n id={`enem-classroom-survey-input-${question.id}`}\n variant=\"rounded\"\n placeholder={question.inputPlaceholder}\n value={draft?.text ?? ''}\n maxLength={255}\n disabled={isSkipped}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n updateAnswer(question.id, { text: event.target.value })\n }\n data-testid=\"enem-classroom-survey-input\"\n />\n </div>\n\n <CheckBox\n label={question.skipLabel}\n checked={isSkipped}\n disabled={hasText}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n updateAnswer(question.id, { skipped: event.target.checked })\n }\n data-testid=\"enem-classroom-survey-skip\"\n />\n </div>\n );\n };\n\n const renderSummaryStep = () => (\n <div\n className=\"flex flex-col items-center gap-6 text-center\"\n data-testid=\"enem-classroom-summary\"\n >\n <span className=\"flex items-center justify-center w-14 h-14 rounded-full bg-success-200 text-success-950\">\n <CheckIcon size={24} aria-hidden />\n </span>\n <div className=\"flex flex-col gap-2\">\n <Text size=\"xl\" weight=\"bold\" className=\"text-text-950\">\n Boa sorte!\n </Text>\n <Text size=\"sm\" className=\"text-text-600\">\n O seu simulado ENEM já vai começar e o cronômetro vai iniciar. Respire\n fundo e dê o seu melhor!\n </Text>\n </div>\n\n <div\n className={cn(CARD_CLASSES, 'flex flex-col gap-3 w-full text-left p-4')}\n >\n <Text size=\"sm\" weight=\"bold\" className=\"text-text-950\">\n Suas respostas\n </Text>\n <dl className=\"flex flex-col gap-2\">\n {exam.languageChoice && (\n <SummaryRow\n label=\"Idioma\"\n value={language ? ENEM_CLASSROOM_LANGUAGE_LABELS[language] : '—'}\n />\n )}\n {surveyQuestions.map((question) => (\n <SummaryRow\n key={question.id}\n label={question.stepLabel}\n value={describeSurveyAnswer(question, answers[question.id])}\n />\n ))}\n </dl>\n <Button\n size=\"medium\"\n variant=\"outline\"\n action=\"primary\"\n className=\"self-center\"\n disabled={isStarting}\n onClick={() => setStep(FIRST_CHOICE_STEP)}\n data-testid=\"enem-classroom-review\"\n >\n Revisar minhas respostas\n </Button>\n </div>\n </div>\n );\n\n const renderStepContent = () => {\n if (currentStep.kind === 'intro') return renderIntroStep();\n if (currentStep.kind === 'language') return renderLanguageStep();\n if (currentStep.kind === 'survey')\n return renderSurveyStep(currentStep.question, currentStep.index);\n return renderSummaryStep();\n };\n\n const showNavigation = step >= FIRST_CHOICE_STEP && step < summaryStep;\n const showStepper = step < summaryStep;\n\n /*\n * O rodapé do Modal não rola, e é lá que o desenho quer o botão: na\n * introdução ele leva o CTA; nos passos de escolha, a navegação.\n */\n /**\n * O rodapé do Modal não rola, e é onde o desenho quer o botão de cada passo:\n * o CTA na introdução, a navegação nos passos de escolha e o de iniciar no\n * resumo. O \"Revisar minhas respostas\" fica de fora de propósito — ele mora\n * dentro do card de respostas.\n * @returns O rodapé do passo atual, ou nada quando ele não tem botão\n */\n const renderFooter = () => {\n if (currentStep.kind === 'intro') {\n return (\n <Button\n size=\"large\"\n variant=\"solid\"\n action=\"primary\"\n className={cn('w-full', GRADIENT_CTA_CLASSES)}\n onClick={() => setStep(FIRST_CHOICE_STEP)}\n data-testid=\"enem-classroom-intro-continue\"\n >\n Estou em sala. Quero começar!\n </Button>\n );\n }\n\n if (currentStep.kind === 'summary') {\n return (\n <Button\n size=\"large\"\n variant=\"solid\"\n action=\"primary\"\n className={cn('w-full', GRADIENT_CTA_CLASSES)}\n disabled={isStarting}\n onClick={handleStart}\n data-testid=\"enem-classroom-start\"\n >\n Iniciar a prova!\n </Button>\n );\n }\n\n return showNavigation ? (\n <div className=\"flex flex-row justify-end gap-2 w-full\">\n <Button\n size=\"medium\"\n variant=\"outline\"\n action=\"primary\"\n iconLeft={<CaretLeftIcon size={16} aria-hidden />}\n onClick={() => setStep((current) => current - 1)}\n data-testid=\"enem-classroom-previous\"\n >\n Anterior\n </Button>\n <Button\n size=\"medium\"\n variant=\"solid\"\n action=\"primary\"\n iconRight={<CaretRightIcon size={16} aria-hidden />}\n disabled={!canGoNext}\n onClick={() => setStep((current) => current + 1)}\n data-testid=\"enem-classroom-next\"\n >\n Próximo\n </Button>\n </div>\n ) : undefined;\n };\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n /*\n * A tela de resumo abre com o header vazio, só o X — quem dá o título\n * ali é o \"Boa sorte!\". O texto continua no <h2>, apenas oculto: o\n * `aria-labelledby` do Modal aponta pra ele, e um h2 vazio deixaria o\n * dialog sem nome acessível.\n */\n title={\n showStepper ? exam.title : <span className=\"sr-only\">{exam.title}</span>\n }\n size=\"lg\"\n footer={renderFooter()}\n /*\n * A rolagem sai do Modal e vai para o miolo: título e stepper ficam\n * parados em cima, o rodapé embaixo, e só o conteúdo entre eles corre.\n */\n contentClassName=\"flex flex-col overflow-hidden\"\n >\n <div className=\"flex flex-col gap-6 flex-1 min-h-0\">\n {showStepper && (\n <Stepper\n steps={stepperSteps}\n currentStep={step}\n size=\"small\"\n className=\"flex-none\"\n />\n )}\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {renderStepContent()}\n </div>\n </div>\n </Modal>\n );\n};\n\nexport default EnemClassroomStartModal;\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-BQIBVC6X.js","../src/components/EnemClassroomStartModal/EnemClassroomStartModal.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-BQIBVC6X.js","sourcesContent":[null,"import { useCallback, useEffect, useMemo, useState, ChangeEvent } from 'react';\nimport Modal from '../Modal/Modal';\nimport Stepper from '../Stepper/Stepper';\nimport Button from '../Button/Button';\nimport Input from '../Input/Input';\nimport CheckBox from '../CheckBox/CheckBox';\nimport Text from '../Text/Text';\nimport VideoPlayer from '../VideoPlayer/VideoPlayer';\nimport { CaretLeftIcon } from '@phosphor-icons/react/dist/csr/CaretLeft';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { CheckIcon } from '@phosphor-icons/react/dist/csr/Check';\nimport { cn } from '../../utils/utils';\nimport warningClassroomIcon from '../../assets/img/enemClassroom/warning-classroom.png';\nimport warningTimerIcon from '../../assets/img/enemClassroom/warning-timer.png';\nimport warningIrreversibleIcon from '../../assets/img/enemClassroom/warning-irreversible.png';\nimport flagEnglish from '../../assets/img/enemClassroom/flag-english.png';\nimport flagSpanish from '../../assets/img/enemClassroom/flag-spanish.png';\nimport surveyCourseIllustration from '../../assets/img/enemClassroom/survey-course.svg';\nimport surveyUniversityIllustration from '../../assets/img/enemClassroom/survey-university.png';\nimport {\n ENEM_CLASSROOM_LANGUAGE,\n ENEM_CLASSROOM_LANGUAGE_LABELS,\n type EnemClassroomExam,\n type EnemClassroomLanguage,\n type EnemClassroomStartPayload,\n type EnemClassroomStudentTexts,\n type EnemClassroomSurveyQuestion,\n} from '../../types/enemClassroom';\n\n/** Title shared by every step, as in the design. */\n/**\n * The three warnings of the introduction step. The exam only counts when\n * taken in class, so they are shown before anything else. The first one is\n * the backoffice's to write (`studentTexts`); the other two are fixed.\n *\n * @param texts - The exam's texts\n * @returns The warnings in order\n */\nconst buildIntroWarnings = (texts: EnemClassroomStudentTexts) => [\n {\n icon: warningClassroomIcon,\n title: texts.introWarningTitle,\n description: texts.introWarningText,\n },\n {\n icon: warningTimerIcon,\n title: 'O cronômetro liga na hora',\n description:\n 'Assim que clicar em começar, o tempo já corre e não para, mesmo se fechar o navegador.',\n },\n {\n icon: warningIrreversibleIcon,\n title: 'Não tem como desfazer',\n description:\n 'Iniciar fora do horário estabelecido pelo seu professor em sala de aula pode atrapalhar seu resultado!',\n },\n];\n\n/** Flag shown next to each language, as in the design. */\nconst LANGUAGE_FLAGS: Record<EnemClassroomLanguage, string> = {\n [ENEM_CLASSROOM_LANGUAGE.INGLES]: flagEnglish,\n [ENEM_CLASSROOM_LANGUAGE.ESPANHOL]: flagSpanish,\n};\n\n/**\n * Illustration of each survey step, in the order the steps are asked: the\n * course question, then the university one.\n *\n * Fixed here rather than sent by the backoffice, so it is keyed by position —\n * reordering the questions there moves the illustration with the position,\n * not with the question. A question past the end simply gets none.\n */\nconst SURVEY_ILLUSTRATIONS = [\n surveyCourseIllustration,\n surveyUniversityIllustration,\n] as const;\n\n/**\n * The white card the warnings and the options sit on. Same vocabulary as\n * SelectionButton, so the modal reads like the rest of the design system\n * against the modal's `secondary-50` background.\n */\nconst CARD_CLASSES =\n 'rounded-xl border border-border-50 bg-background shadow-soft-shadow-1';\n\n/**\n * Gradiente da identidade da simulação em sala de aula — os mesmos tons do\n * card do painel do aluno. Não sai dos tokens de tema porque é a marca da\n * prova, não a da instituição.\n *\n * Literal, e não `bg-gradient-to-r from-… to-…`: o Tailwind v4 interpola\n * `in oklab`, o que muda os tons do meio em relação ao sRGB do design.\n *\n * `border-0` porque o `solid/primary` do Button traz `border-primary-950`, que\n * o gradiente não cobre — ele só troca o fundo. Zerar a largura, em vez de\n * pintar a borda de transparente, também neutraliza as cores de hover e\n * active, que voltariam a aparecer.\n */\nconst GRADIENT_CTA_CLASSES =\n 'bg-[linear-gradient(270deg,#B21FF6_0%,#F95493_100%)] border-0 hover:opacity-90 transition-opacity';\n\n/**\n * One selectable option: a card carrying an optional icon and a label.\n *\n * The radio control itself is visually hidden — in the design the card's own\n * border carries the selection. The native input stays in the tree so the\n * options remain a real radio group: arrow keys move between them and screen\n * readers announce \"1 of 2\", which a set of toggle buttons would not.\n */\nconst OptionCard = ({\n name,\n value,\n label,\n iconSrc,\n checked,\n onSelect,\n testId,\n}: {\n name: string;\n value: string;\n label: string;\n iconSrc?: string;\n checked: boolean;\n onSelect: () => void;\n testId?: string;\n}) => (\n <label\n className={cn(\n CARD_CLASSES,\n 'flex flex-row items-center gap-3 px-4 py-3.5',\n 'cursor-pointer transition-colors hover:bg-background-100',\n 'focus-within:ring-2 focus-within:ring-indicator-info',\n checked && 'border-primary-700 ring-1 ring-primary-700'\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n onChange={onSelect}\n className=\"sr-only\"\n data-testid={testId}\n />\n {iconSrc && (\n <img src={iconSrc} alt=\"\" aria-hidden className=\"w-6 h-6 flex-shrink-0\" />\n )}\n <Text size=\"sm\" weight=\"semibold\" className=\"text-text-900\">\n {label}\n </Text>\n </label>\n);\n\n/**\n * How a survey question was answered. The student either writes an answer or\n * ticks \"ainda estou pensando\" — the tick clears and disables the field, so\n * the two never disagree.\n */\ninterface SurveyAnswerDraft {\n skipped: boolean;\n text: string;\n}\n\n/**\n * One line of the summary: the step's name over what the student answered.\n */\nconst SummaryRow = ({ label, value }: { label: string; value: string }) => (\n <div className=\"flex flex-col rounded-lg bg-primary-50 px-3 py-2\">\n <Text as=\"dt\" size=\"sm\" weight=\"bold\" className=\"text-primary-800\">\n {label}\n </Text>\n <Text as=\"dd\" size=\"sm\" className=\"text-text-600\">\n {value}\n </Text>\n </div>\n);\n\n/** The introduction is always first; the first choice comes right after it. */\nconst INTRO_STEP = 0;\nconst FIRST_CHOICE_STEP = 1;\n\n/** One screen of the flow. Which ones exist depends on the exam. */\ntype FlowStep =\n | { kind: 'intro' }\n | { kind: 'language' }\n | { kind: 'survey'; question: EnemClassroomSurveyQuestion; index: number }\n | { kind: 'summary' };\n\nexport interface EnemClassroomStartModalProps {\n isOpen: boolean;\n onClose: () => void;\n exam: EnemClassroomExam;\n /** Called with everything the start endpoint needs. */\n onStart: (payload: EnemClassroomStartPayload) => void;\n /** Disables the final button while the start request is in flight. */\n isStarting?: boolean;\n}\n\n/**\n * Whether a survey draft is complete: skipped, or answered with some text.\n */\nconst isSurveyAnswerComplete = (draft: SurveyAnswerDraft | undefined) =>\n draft?.skipped === true || (draft?.text.trim().length ?? 0) > 0;\n\n/**\n * The text shown for a survey answer on the summary screen.\n */\nconst describeSurveyAnswer = (\n question: EnemClassroomSurveyQuestion,\n draft: SurveyAnswerDraft | undefined\n) => (draft && !draft.skipped ? draft.text.trim() : question.skipLabel);\n\n/**\n * Start flow of the in-classroom ENEM simulation.\n *\n * Steps, in order: introduction (video + warnings), foreign language — only\n * when the exam offers the choice —, one step per survey question, and a\n * summary the student confirms before the exam opens. The stepper only lists\n * the steps that carry a choice; the summary is a screen of its own, as in\n * the design.\n *\n * Presentational: it collects the choices and hands them to `onStart`; the\n * caller talks to the API.\n *\n * @example\n * ```tsx\n * <EnemClassroomStartModal\n * isOpen={open}\n * onClose={() => setOpen(false)}\n * exam={exam}\n * onStart={(payload) => start(exam.id, payload)}\n * />\n * ```\n */\nconst EnemClassroomStartModal = ({\n isOpen,\n onClose,\n exam,\n onStart,\n isStarting = false,\n}: EnemClassroomStartModalProps) => {\n const surveyQuestions = useMemo(\n () => [...exam.surveyQuestions].sort((a, b) => a.position - b.position),\n [exam.surveyQuestions]\n );\n // The screens this exam has: no language step on an exam without the\n // choice, so the student goes from the warnings straight to the survey.\n const steps = useMemo<FlowStep[]>(\n () => [\n { kind: 'intro' },\n ...(exam.languageChoice ? [{ kind: 'language' } as const] : []),\n ...surveyQuestions.map((question, index) => ({\n kind: 'survey' as const,\n question,\n index,\n })),\n { kind: 'summary' },\n ],\n [exam.languageChoice, surveyQuestions]\n );\n const summaryStep = steps.length - 1;\n\n const [step, setStep] = useState(INTRO_STEP);\n const [language, setLanguage] = useState<EnemClassroomLanguage | null>(null);\n const [answers, setAnswers] = useState<Record<string, SurveyAnswerDraft>>({});\n\n // Every opening starts from the introduction with nothing filled in — and\n // so does a different exam handed in while the modal is open, whose steps\n // and questions are not the ones the answers were given to.\n useEffect(() => {\n if (isOpen) {\n setStep(INTRO_STEP);\n setLanguage(null);\n setAnswers({});\n }\n }, [isOpen, exam.id]);\n\n const stepperSteps = useMemo(\n () =>\n steps\n .filter((flowStep) => flowStep.kind !== 'summary')\n .map((flowStep) => {\n if (flowStep.kind === 'intro') {\n return {\n id: 'intro',\n label: 'Introdução',\n state: 'pending' as const,\n };\n }\n if (flowStep.kind === 'language') {\n return {\n id: 'language',\n label: 'Língua estrangeira',\n state: 'pending' as const,\n };\n }\n return {\n id: flowStep.question.id,\n label: flowStep.question.stepLabel,\n state: 'pending' as const,\n };\n }),\n [steps]\n );\n\n const currentStep = steps[step] ?? steps[INTRO_STEP];\n const currentQuestion =\n currentStep.kind === 'survey' ? currentStep.question : null;\n\n const canGoNext =\n currentStep.kind === 'language'\n ? language !== null\n : currentQuestion !== null &&\n isSurveyAnswerComplete(answers[currentQuestion.id]);\n\n const updateAnswer = useCallback(\n (questionId: string, patch: Partial<SurveyAnswerDraft>) => {\n setAnswers((prev) => {\n const current = prev[questionId] ?? { skipped: false, text: '' };\n return { ...prev, [questionId]: { ...current, ...patch } };\n });\n },\n []\n );\n\n const handleStart = useCallback(() => {\n // The language is only a choice on an exam that offers one.\n if (exam.languageChoice && !language) return;\n onStart({\n language: exam.languageChoice ? language : null,\n surveyAnswers: surveyQuestions.map((question) => {\n const draft = answers[question.id];\n const text = draft && !draft.skipped ? draft.text.trim() : '';\n return { questionId: question.id, answer: text || null };\n }),\n });\n }, [exam.languageChoice, language, surveyQuestions, answers, onStart]);\n\n const renderIntroStep = () => (\n <div className=\"flex flex-col gap-6\" data-testid=\"enem-classroom-intro\">\n {exam.videoUrl && (\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-950\"\n data-testid=\"enem-classroom-intro-video-text\"\n >\n {exam.studentTexts.introVideoText}\n </Text>\n )}\n {exam.videoUrl && (\n <VideoPlayer\n src={exam.videoUrl}\n title={exam.title}\n // O desenho mostra só o vídeo: o nome da prova já está no título do\n // modal. O `title` fica para rotular o player nos leitores de tela.\n hideHeader\n className=\"w-full rounded-xl overflow-hidden\"\n autoSave={false}\n />\n )}\n\n <div className=\"flex flex-col gap-4\">\n <Text size=\"lg\" weight=\"bold\" className=\"text-text-950\">\n {exam.studentTexts.introHeading}\n </Text>\n {buildIntroWarnings(exam.studentTexts).map(\n ({ icon, title, description }) => (\n <div\n key={title}\n className={cn(\n CARD_CLASSES,\n 'flex flex-row gap-4 items-start p-4'\n )}\n >\n <img\n src={icon}\n alt=\"\"\n aria-hidden\n className=\"flex-shrink-0 w-10 h-10\"\n />\n <div className=\"flex flex-col gap-1\">\n <Text size=\"md\" weight=\"bold\" className=\"text-text-950\">\n {title}\n </Text>\n <Text size=\"sm\" className=\"text-text-600\">\n {description}\n </Text>\n </div>\n </div>\n )\n )}\n </div>\n </div>\n );\n\n const renderLanguageStep = () => (\n <div className=\"flex flex-col gap-4\" data-testid=\"enem-classroom-language\">\n <Text\n id=\"enem-classroom-language-prompt\"\n size=\"lg\"\n weight=\"bold\"\n className=\"text-text-950\"\n >\n Qual língua estrangeira você vai usar na simulação?\n </Text>\n <div\n role=\"radiogroup\"\n aria-labelledby=\"enem-classroom-language-prompt\"\n className=\"flex flex-col gap-4\"\n >\n {Object.values(ENEM_CLASSROOM_LANGUAGE).map((value) => (\n <OptionCard\n key={value}\n name=\"enem-classroom-language\"\n value={value}\n label={ENEM_CLASSROOM_LANGUAGE_LABELS[value]}\n iconSrc={LANGUAGE_FLAGS[value]}\n checked={language === value}\n onSelect={() => setLanguage(value)}\n testId={`enem-classroom-language-${value.toLowerCase()}`}\n />\n ))}\n </div>\n </div>\n );\n\n const renderSurveyStep = (\n question: EnemClassroomSurveyQuestion,\n index: number\n ) => {\n const draft = answers[question.id];\n const illustration = SURVEY_ILLUSTRATIONS[index];\n // The two ways of answering disable each other, so they can never\n // contradict — and either one on its own releases the step.\n const hasText = (draft?.text.trim().length ?? 0) > 0;\n const isSkipped = draft?.skipped === true;\n return (\n <div\n className=\"flex flex-col gap-4\"\n data-testid={`enem-classroom-survey-${question.id}`}\n >\n {illustration && (\n <img\n src={illustration}\n alt=\"\"\n aria-hidden\n className=\"w-[220px] max-w-full self-center\"\n data-testid=\"enem-classroom-survey-illustration\"\n />\n )}\n <Text\n id={`enem-classroom-survey-prompt-${question.id}`}\n size=\"lg\"\n weight=\"bold\"\n className=\"text-text-950\"\n >\n {question.prompt}\n </Text>\n <div className=\"flex flex-col gap-2\">\n <Text\n as=\"label\"\n htmlFor={`enem-classroom-survey-input-${question.id}`}\n size=\"sm\"\n className=\"text-text-600\"\n >\n {question.inputLabel}\n </Text>\n <Input\n id={`enem-classroom-survey-input-${question.id}`}\n variant=\"rounded\"\n placeholder={question.inputPlaceholder}\n value={draft?.text ?? ''}\n maxLength={255}\n disabled={isSkipped}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n updateAnswer(question.id, { text: event.target.value })\n }\n data-testid=\"enem-classroom-survey-input\"\n />\n </div>\n\n <CheckBox\n label={question.skipLabel}\n checked={isSkipped}\n disabled={hasText}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n updateAnswer(question.id, { skipped: event.target.checked })\n }\n data-testid=\"enem-classroom-survey-skip\"\n />\n </div>\n );\n };\n\n const renderSummaryStep = () => (\n <div\n className=\"flex flex-col items-center gap-6 text-center\"\n data-testid=\"enem-classroom-summary\"\n >\n <span className=\"flex items-center justify-center w-14 h-14 rounded-full bg-success-200 text-success-950\">\n <CheckIcon size={24} aria-hidden />\n </span>\n <div className=\"flex flex-col gap-2\">\n <Text size=\"xl\" weight=\"bold\" className=\"text-text-950\">\n Boa sorte!\n </Text>\n <Text size=\"sm\" className=\"text-text-600\">\n O seu simulado ENEM já vai começar e o cronômetro vai iniciar. Respire\n fundo e dê o seu melhor!\n </Text>\n </div>\n\n <div\n className={cn(CARD_CLASSES, 'flex flex-col gap-3 w-full text-left p-4')}\n >\n <Text size=\"sm\" weight=\"bold\" className=\"text-text-950\">\n Suas respostas\n </Text>\n <dl className=\"flex flex-col gap-2\">\n {exam.languageChoice && (\n <SummaryRow\n label=\"Idioma\"\n value={language ? ENEM_CLASSROOM_LANGUAGE_LABELS[language] : '—'}\n />\n )}\n {surveyQuestions.map((question) => (\n <SummaryRow\n key={question.id}\n label={question.stepLabel}\n value={describeSurveyAnswer(question, answers[question.id])}\n />\n ))}\n </dl>\n <Button\n size=\"medium\"\n variant=\"outline\"\n action=\"primary\"\n className=\"self-center\"\n disabled={isStarting}\n onClick={() => setStep(FIRST_CHOICE_STEP)}\n data-testid=\"enem-classroom-review\"\n >\n Revisar minhas respostas\n </Button>\n </div>\n </div>\n );\n\n const renderStepContent = () => {\n if (currentStep.kind === 'intro') return renderIntroStep();\n if (currentStep.kind === 'language') return renderLanguageStep();\n if (currentStep.kind === 'survey')\n return renderSurveyStep(currentStep.question, currentStep.index);\n return renderSummaryStep();\n };\n\n const showNavigation = step >= FIRST_CHOICE_STEP && step < summaryStep;\n const showStepper = step < summaryStep;\n\n /*\n * O rodapé do Modal não rola, e é lá que o desenho quer o botão: na\n * introdução ele leva o CTA; nos passos de escolha, a navegação.\n */\n /**\n * O rodapé do Modal não rola, e é onde o desenho quer o botão de cada passo:\n * o CTA na introdução, a navegação nos passos de escolha e o de iniciar no\n * resumo. O \"Revisar minhas respostas\" fica de fora de propósito — ele mora\n * dentro do card de respostas.\n * @returns O rodapé do passo atual, ou nada quando ele não tem botão\n */\n const renderFooter = () => {\n if (currentStep.kind === 'intro') {\n return (\n <Button\n size=\"large\"\n variant=\"solid\"\n action=\"primary\"\n className={cn('w-full', GRADIENT_CTA_CLASSES)}\n onClick={() => setStep(FIRST_CHOICE_STEP)}\n data-testid=\"enem-classroom-intro-continue\"\n >\n Estou em sala. Quero começar!\n </Button>\n );\n }\n\n if (currentStep.kind === 'summary') {\n return (\n <Button\n size=\"large\"\n variant=\"solid\"\n action=\"primary\"\n className={cn('w-full', GRADIENT_CTA_CLASSES)}\n disabled={isStarting}\n onClick={handleStart}\n data-testid=\"enem-classroom-start\"\n >\n Iniciar a prova!\n </Button>\n );\n }\n\n return showNavigation ? (\n <div className=\"flex flex-row justify-end gap-2 w-full\">\n <Button\n size=\"medium\"\n variant=\"outline\"\n action=\"primary\"\n iconLeft={<CaretLeftIcon size={16} aria-hidden />}\n onClick={() => setStep((current) => current - 1)}\n data-testid=\"enem-classroom-previous\"\n >\n Anterior\n </Button>\n <Button\n size=\"medium\"\n variant=\"solid\"\n action=\"primary\"\n iconRight={<CaretRightIcon size={16} aria-hidden />}\n disabled={!canGoNext}\n onClick={() => setStep((current) => current + 1)}\n data-testid=\"enem-classroom-next\"\n >\n Próximo\n </Button>\n </div>\n ) : undefined;\n };\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n /*\n * A tela de resumo abre com o header vazio, só o X — quem dá o título\n * ali é o \"Boa sorte!\". O texto continua no <h2>, apenas oculto: o\n * `aria-labelledby` do Modal aponta pra ele, e um h2 vazio deixaria o\n * dialog sem nome acessível.\n */\n title={\n showStepper ? exam.title : <span className=\"sr-only\">{exam.title}</span>\n }\n size=\"lg\"\n footer={renderFooter()}\n /*\n * A rolagem sai do Modal e vai para o miolo: título e stepper ficam\n * parados em cima, o rodapé embaixo, e só o conteúdo entre eles corre.\n */\n contentClassName=\"flex flex-col overflow-hidden\"\n >\n <div className=\"flex flex-col gap-6 flex-1 min-h-0\">\n {showStepper && (\n <Stepper\n steps={stepperSteps}\n currentStep={step}\n size=\"small\"\n className=\"flex-none\"\n />\n )}\n <div className=\"flex-1 min-h-0 overflow-y-auto\">\n {renderStepContent()}\n </div>\n </div>\n </Modal>\n );\n};\n\nexport default EnemClassroomStartModal;\n"]}
|
|
@@ -19,13 +19,11 @@ import {
|
|
|
19
19
|
} from "./chunk-6A2IK5NJ.mjs";
|
|
20
20
|
import {
|
|
21
21
|
IconButton_default
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import {
|
|
24
|
-
useEscapeToClose
|
|
25
|
-
} from "./chunk-JSH3BQZ7.mjs";
|
|
22
|
+
} from "./chunk-ROS5XGTQ.mjs";
|
|
26
23
|
import {
|
|
24
|
+
useEscapeToClose,
|
|
27
25
|
useModalFocus
|
|
28
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-Z4L2DWMX.mjs";
|
|
29
27
|
import {
|
|
30
28
|
Button_default
|
|
31
29
|
} from "./chunk-ZQZBOTZJ.mjs";
|
|
@@ -750,4 +748,4 @@ export {
|
|
|
750
748
|
ChatbotConversationList,
|
|
751
749
|
Chatbot
|
|
752
750
|
};
|
|
753
|
-
//# sourceMappingURL=chunk-
|
|
751
|
+
//# sourceMappingURL=chunk-BU32E6BR.mjs.map
|