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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-Q6UIUYNF.js","../src/components/AccessibilityWidget/AccessibilityWidget.tsx","../src/components/AccessibilityWidget/AccessibilityFab.tsx","../src/components/AccessibilityWidget/fabPositioning.ts","../src/components/AccessibilityWidget/AccessibilityPanel.tsx","../src/components/AccessibilityWidget/AccessibilityToggleRow.tsx","../src/components/AccessibilityWidget/TTSSection.tsx","../src/components/AccessibilityWidget/LibrasFab.tsx","../src/components/AccessibilityWidget/ReadingAid.tsx","../src/components/AccessibilityWidget/ColorBlindFilters.tsx","../src/components/AccessibilityWidget/TTSController.tsx","../src/components/AccessibilityWidget/VLibrasLoader.tsx"],"names":["jsx","PreviewSegmented","jsxs","useState","Fragment","useEffect"],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-Q6UIUYNF.js","sourcesContent":[null,"import { useEffect, useRef } from 'react';\nimport AccessibilityFab, {\n type AccessibilityFabPosition,\n} from './AccessibilityFab';\nimport AccessibilityPanel from './AccessibilityPanel';\nimport LibrasFab from './LibrasFab';\nimport ReadingAid from './ReadingAid';\nimport ColorBlindFilters from './ColorBlindFilters';\nimport TTSController from './TTSController';\nimport VLibrasLoader from './VLibrasLoader';\nimport { useAccessibilityStore } from '../../store/accessibilityStore';\nimport { useA11yPreferences } from '../../hooks/useA11yPreferences';\nimport { useA11yKeyboardShortcut } from '../../hooks/useA11yKeyboardShortcut';\nimport './accessibility.css';\n\nexport interface AccessibilityWidgetProps {\n /** Lado da viewport onde o botão fica colado (default: 'right') */\n position?: AccessibilityFabPosition;\n /** Classes extras para o botão flutuante */\n fabClassName?: string;\n /** Classes extras para o painel */\n panelClassName?: string;\n /**\n * Mostra o botão de Libras empilhado abaixo do botão de\n * acessibilidade (default: true). Plataformas que já injetam o\n * VLibras de forma própria podem desabilitar passando `false`.\n */\n showLibras?: boolean;\n}\n\n/**\n * Widget de acessibilidade — botão flutuante que abre um painel\n * com controles de contraste, fonte, espaçamento e outras\n * preferências visuais. As preferências são persistidas em\n * localStorage e aplicadas via classes no `<html>`.\n *\n * Renderize uma única instância no shell da aplicação. Tudo fica\n * dentro de `.a11y-widget-root` para que o próprio widget não\n * sofra com os filtros que aplica na página.\n *\n * @example\n * ```tsx\n * <AccessibilityWidget position=\"left\" />\n * ```\n */\nexport default function AccessibilityWidget({\n position = 'right',\n fabClassName,\n panelClassName,\n showLibras = true,\n}: Readonly<AccessibilityWidgetProps>) {\n useA11yPreferences();\n useA11yKeyboardShortcut();\n\n const isPanelOpen = useAccessibilityStore((s) => s.isPanelOpen);\n const togglePanel = useAccessibilityStore((s) => s.togglePanel);\n const closePanel = useAccessibilityStore((s) => s.closePanel);\n const librasEnabled = useAccessibilityStore((s) => s.librasEnabled);\n const setLibrasEnabled = useAccessibilityStore((s) => s.setLibrasEnabled);\n\n // Quando o Libras é exibido, os dois FABs ficam empilhados\n // (acessibilidade acima do meio, libras abaixo). Sem Libras,\n // o de acessibilidade ocupa o centro como antes.\n const accessibilityVerticalAlign = showLibras ? 'above-center' : 'center';\n\n /**\n * Clique no FAB de Libras:\n * - Primeira vez (não ativado): ativa o widget VLibras (que se\n * auto-abre no painel pela primeira vez).\n * - Demais vezes: dispara o click no botão de acesso nativo do\n * VLibras, que abre/fecha o painel sem precisar reinjetar o widget.\n * Isso evita o ciclo de remoção/reinjeção que deixava o VLibras\n * em estado inconsistente após fechá-lo.\n */\n const handleLibrasClick = () => {\n if (!librasEnabled) {\n setLibrasEnabled(true);\n return;\n }\n document.querySelector<HTMLElement>('[vw-access-button]')?.click();\n };\n\n const fabRef = useRef<HTMLButtonElement>(null);\n const wasPanelOpenRef = useRef(false);\n\n /**\n * Devolve o foco ao FAB quando o painel fecha.\n *\n * O painel já faz isso sozinho (`useModalFocus` guarda quem o abriu), mas\n * quando quem abriu foi o próprio FAB o nó guardado não existe mais: o FAB é\n * desmontado enquanto o painel está aberto, e o hook — que só devolve o foco\n * se o elemento ainda está na página — deixa o foco no `<body>`. Daí o Tab\n * recomeçava do topo da página.\n *\n * A guarda do `<body>` é o que mantém o caminho do atalho `Alt+A` intacto:\n * ali quem tinha o foco era um elemento qualquer da página, que sobrevive à\n * abertura e recebe o foco de volta do próprio hook. Nesse caso o foco não\n * está no `<body>` e este efeito sai do caminho.\n */\n useEffect(() => {\n if (isPanelOpen) {\n wasPanelOpenRef.current = true;\n return;\n }\n\n if (!wasPanelOpenRef.current) return;\n wasPanelOpenRef.current = false;\n\n const active = document.activeElement;\n if (!active || active === document.body) {\n fabRef.current?.focus();\n }\n }, [isPanelOpen]);\n\n return (\n <>\n {!isPanelOpen && (\n <AccessibilityFab\n ref={fabRef}\n onClick={togglePanel}\n isOpen={isPanelOpen}\n position={position}\n verticalAlign={accessibilityVerticalAlign}\n className={fabClassName}\n />\n )}\n {!isPanelOpen && showLibras && (\n <LibrasFab onClick={handleLibrasClick} position={position} />\n )}\n <AccessibilityPanel\n isOpen={isPanelOpen}\n onClose={closePanel}\n position={position}\n className={panelClassName}\n />\n <ReadingAid />\n <ColorBlindFilters />\n <TTSController />\n {showLibras && <VLibrasLoader />}\n </>\n );\n}\n","import { forwardRef } from 'react';\nimport Button from '../Button/Button';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { cn } from '../../utils/utils';\nimport accessibilityIcon from '../../assets/img/accessibility.png';\nimport {\n FAB_POSITION_CLASSES,\n FAB_TOOLTIP_POSITION,\n FAB_VERTICAL_ALIGN_CLASSES,\n type FabPosition,\n type FabVerticalAlign,\n} from './fabPositioning';\n\n/** Re-exports mantidos para compatibilidade com a API pública do widget. */\nexport type AccessibilityFabPosition = FabPosition;\nexport type AccessibilityFabVerticalAlign = FabVerticalAlign;\n\nexport interface AccessibilityFabProps {\n /** Click handler — alterna o painel */\n onClick: () => void;\n /** Indica se o painel está aberto (controla aria-expanded) */\n isOpen?: boolean;\n /** Lado da viewport onde o botão fica colado */\n position?: AccessibilityFabPosition;\n /** Alinhamento vertical (default: `center`) */\n verticalAlign?: AccessibilityFabVerticalAlign;\n /** Classes extras */\n className?: string;\n}\n\n/**\n * Botão flutuante (FAB) que abre o painel de acessibilidade.\n * Inspirado no padrão HandTalk: quadrado azul escuro colado na\n * lateral da viewport (direita por padrão), com o ícone universal\n * de acessibilidade. Verticalmente centralizado.\n *\n * A ref vai pro `<button>` em si: o FAB é desmontado enquanto o painel está\n * aberto, então quem devolve o foco pra ele no fechamento é o\n * `AccessibilityWidget`, que precisa alcançar o nó recém-remontado.\n */\nconst AccessibilityFab = forwardRef<HTMLButtonElement, AccessibilityFabProps>(\n (\n {\n onClick,\n isOpen = false,\n position = 'right',\n verticalAlign = 'center',\n className,\n },\n ref\n ) => {\n const label = isOpen\n ? 'Fechar opções de acessibilidade'\n : 'Opções de acessibilidade';\n\n return (\n <Tooltip\n content={label}\n position={FAB_TOOLTIP_POSITION[position]}\n className={cn(\n 'fixed z-40',\n FAB_VERTICAL_ALIGN_CLASSES[verticalAlign],\n FAB_POSITION_CLASSES[position]\n )}\n >\n <Button\n ref={ref}\n variant=\"raw\"\n onClick={onClick}\n aria-label={label}\n aria-expanded={isOpen}\n data-testid=\"accessibility-fab\"\n className={cn(\n 'a11y-widget-shield',\n FAB_POSITION_CLASSES[position],\n 'flex h-10 w-10 cursor-pointer items-center justify-center',\n // `text-text-50` flipa junto com `bg-info-900` (claro no light,\n // escuro no dark). `text-white` deixaria o ícone branco sumindo\n // no tema escuro, onde `bg-info-900` resolve pra azul-claro.\n 'bg-info-900 text-text-50 shadow-lg',\n 'transition-all duration-200 hover:scale-110 hover:bg-info-800',\n 'focus:outline-none focus:ring-4 focus:ring-info-300',\n className\n )}\n >\n <img\n src={accessibilityIcon}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"h-7 w-7\"\n />\n </Button>\n </Tooltip>\n );\n }\n);\n\nAccessibilityFab.displayName = 'AccessibilityFab';\n\nexport default AccessibilityFab;\n","/**\n * Constantes de posicionamento compartilhadas entre os FABs do widget\n * (`AccessibilityFab` e `LibrasFab`). Centralizadas aqui para evitar\n * que mudanças de gap/lateral precisem ser replicadas em cada FAB.\n */\n\nexport type FabPosition = 'right' | 'left';\n\n/**\n * Alinhamento vertical do FAB. Quando o widget renderiza só um botão\n * (sem Libras), `center` deixa-o no meio da viewport. Quando há também\n * o LibrasFab empilhado abaixo, o de acessibilidade fica `above-center`\n * e o Libras fica `below-center` — formando um par grudado no meio.\n */\nexport type FabVerticalAlign = 'center' | 'above-center' | 'below-center';\n\nexport const FAB_POSITION_CLASSES: Record<FabPosition, string> = {\n right: 'right-0 rounded-l-lg',\n left: 'left-0 rounded-r-lg',\n};\n\nexport const FAB_VERTICAL_ALIGN_CLASSES: Record<FabVerticalAlign, string> = {\n center: 'top-1/2 -translate-y-1/2',\n // Pares empilhados (acessibilidade + Libras) com gap mínimo entre si,\n // como no widget do HandTalk. Cada FAB tem 40px (h-10).\n 'above-center': 'top-[calc(50%-1px)] -translate-y-full',\n 'below-center': 'top-[calc(50%+1px)]',\n};\n\n/** Tooltip aparece do lado oposto à borda em que o FAB está colado. */\nexport const FAB_TOOLTIP_POSITION: Record<FabPosition, 'left' | 'right'> = {\n right: 'left',\n left: 'right',\n};\n","import { useRef, useState, type ReactNode } from 'react';\nimport {\n ArrowCounterClockwiseIcon,\n CaretDownIcon,\n EyeIcon,\n FilmReelIcon,\n KeyboardIcon,\n NavigationArrowIcon,\n SpeakerHighIcon,\n TextTIcon,\n XIcon,\n} from '@phosphor-icons/react';\nimport accessibilityIcon from '../../assets/img/accessibility.png';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport IconButton from '../IconButton/IconButton';\nimport AccessibilityToggleRow from './AccessibilityToggleRow';\nimport TTSSection from './TTSSection';\nimport { cn } from '../../utils/utils';\nimport { useModalFocus } from '../../hooks/useModalFocus';\nimport { useEscapeToClose } from '../../hooks/useEscapeToClose';\nimport {\n useAccessibilityStore,\n type ContrastMode,\n type SaturationMode,\n type ReadingAid,\n} from '../../store/accessibilityStore';\nimport type { AccessibilityFabPosition } from './AccessibilityFab';\n\nconst CONTRAST_OPTIONS: { value: ContrastMode; label: string }[] = [\n { value: 'normal', label: 'Normal' },\n { value: 'high', label: 'Alto' },\n { value: 'inverted', label: 'Invertido' },\n];\n\nconst SATURATION_OPTIONS: { value: SaturationMode; label: string }[] = [\n { value: 'normal', label: 'Normal' },\n { value: 'low', label: 'Baixa' },\n { value: 'grayscale', label: 'Tons de cinza' },\n];\n\nconst READING_AID_OPTIONS: { value: ReadingAid; label: string }[] = [\n { value: 'none', label: 'Nenhum' },\n { value: 'ruler', label: 'Régua' },\n { value: 'mask', label: 'Máscara' },\n];\n\nconst LEVEL_LABELS = ['Padrão', 'Pequeno', 'Médio', 'Grande'] as const;\n\n/** Tamanho de fonte do preview \"Aa\" em cada botão (Padrão → Grande). */\nconst FONT_SIZE_PREVIEW_CLASSES = [\n 'text-base', // Padrão\n 'text-lg', // Pequeno (= maior que Padrão, segue a escala incremental do widget)\n 'text-2xl', // Médio\n 'text-4xl', // Grande\n] as const;\n\n/** Letter-spacing do preview \"Aa\" em cada botão. */\nconst LETTER_SPACING_PREVIEW_CLASSES = [\n 'tracking-tighter', // Padrão (junto)\n 'tracking-normal',\n 'tracking-wider',\n 'tracking-widest',\n] as const;\n\n/** Gap vertical entre as 3 barras do preview de espaçamento entre linhas. */\nconst LINE_SPACING_PREVIEW_GAPS = [\n 'gap-0.5', // Padrão (2px) — linhas próximas\n 'gap-1.5', // Pequeno (6px)\n 'gap-2.5', // Médio (10px)\n 'gap-3.5', // Grande (14px)\n] as const;\n\n/**\n * `<dialog open>` aplica `left: 0; right: 0` como user-agent style. Sem\n * resetar o lado oposto para `auto`, o painel acaba grudando no lado\n * errado mesmo com `right-6` ou `left-6` aplicado.\n */\nconst PANEL_EDGE_CLASSES: Record<AccessibilityFabPosition, string> = {\n right: 'right-10 left-auto',\n left: 'left-10 right-auto',\n};\n\ninterface AccordionSectionProps {\n title: string;\n icon: ReactNode;\n defaultExpanded?: boolean;\n testId?: string;\n children: ReactNode;\n}\n\n/**\n * Item de accordion estilo lista (sem cantos arredondados nem card),\n * com ícone + título à esquerda e caret à direita. Cada item separado\n * do próximo por uma linha fina. Mantém a estrutura visual do design\n * do Figma sem usar o `CardAccordation` da lib (que tem visual de card).\n */\nconst AccordionSection = ({\n title,\n icon,\n defaultExpanded = false,\n testId,\n children,\n}: Readonly<AccordionSectionProps>) => {\n const [expanded, setExpanded] = useState(defaultExpanded);\n return (\n <section className=\"border-b border-background-200 last:border-b-0\">\n <Button\n variant=\"raw\"\n aria-expanded={expanded}\n onClick={() => setExpanded((v) => !v)}\n data-testid={testId}\n className={cn(\n 'flex w-full cursor-pointer items-center justify-between gap-2 px-4 py-3',\n 'text-left transition-colors hover:bg-background-50',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-info-500 focus-visible:ring-inset'\n )}\n >\n <span className=\"flex items-center gap-2\">\n <span className=\"text-text-800\" aria-hidden=\"true\">\n {icon}\n </span>\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"leading-none text-text-800\"\n >\n {title}\n </Text>\n </span>\n <CaretDownIcon\n size={16}\n weight=\"bold\"\n aria-hidden=\"true\"\n className={cn(\n 'text-text-700 transition-transform duration-200',\n expanded ? 'rotate-180' : 'rotate-0'\n )}\n />\n </Button>\n {expanded && (\n <div className=\"flex flex-col gap-6 px-4 pb-4 pt-2\">{children}</div>\n )}\n </section>\n );\n};\n\ninterface SubControlProps {\n label: string;\n children: ReactNode;\n}\n\n/**\n * Wrapper para uma control (segmented/toggle) com título dentro do\n * accordion. Tipografia do label segue o Figma: Roboto 12px/500/100%\n * uppercase, cor `text-text-600` (#737373).\n */\nconst SubControl = ({ label, children }: Readonly<SubControlProps>) => (\n <div className=\"flex flex-col gap-2\">\n <Text\n size=\"xs\"\n weight=\"medium\"\n className=\"uppercase leading-none text-text-600\"\n >\n {label}\n </Text>\n {children}\n </div>\n);\n\ninterface SegmentedProps<T extends string | number> {\n value: T;\n options: { value: T; label: string }[];\n onChange: (value: T) => void;\n ariaLabel: string;\n}\n\n/**\n * Estilo de segmented baseado no `SelectionButton` da lib: cada opção é\n * um botão independente com `border` + `bg-background`, e o selecionado\n * ganha `ring-primary-950` (mesma identidade visual do componente da lib,\n * sem o overhead de ícone obrigatório do SelectionButton).\n */\nconst Segmented = <T extends string | number>({\n value,\n options,\n onChange,\n ariaLabel,\n}: Readonly<SegmentedProps<T>>) => (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n className=\"flex flex-wrap gap-2\"\n >\n {options.map((opt) => {\n const isActive = opt.value === value;\n return (\n <Button\n key={String(opt.value)}\n variant=\"raw\"\n role=\"radio\"\n aria-checked={isActive}\n onClick={() => onChange(opt.value)}\n className={cn(\n 'flex-1 cursor-pointer rounded-xl border border-border-50 bg-background',\n // Texto segue spec do Figma: Roboto 14px/700/100%/0.2px, cor\n // #525252 (text-700). Quando ativo, troca pra primary-950\n // (azul escuro), mas mantém a mesma typography.\n 'px-4 py-4 text-sm font-bold leading-none tracking-[0.2px] text-text-700',\n 'shadow-soft-shadow-1 transition-all duration-150',\n 'hover:bg-background-100',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indicator-info',\n isActive &&\n 'ring-2 ring-primary-950 ring-offset-0 shadow-none text-primary-950'\n )}\n >\n {opt.label}\n </Button>\n );\n })}\n </div>\n);\n\ninterface PreviewSegmentedOption<T extends string | number> {\n value: T;\n label: string;\n /** Conteúdo visual exibido DENTRO do botão (preview do efeito). */\n preview: ReactNode;\n}\n\ninterface PreviewSegmentedProps<T extends string | number> {\n value: T;\n options: PreviewSegmentedOption<T>[];\n onChange: (value: T) => void;\n ariaLabel: string;\n}\n\n/**\n * Variante do Segmented onde o botão mostra um preview visual do efeito\n * (ex.: \"Aa\" em tamanhos diferentes para \"Tamanho da fonte\") e o label\n * textual fica abaixo do botão como legenda.\n */\nconst PreviewSegmented = <T extends string | number>({\n value,\n options,\n onChange,\n ariaLabel,\n}: Readonly<PreviewSegmentedProps<T>>) => (\n <div role=\"radiogroup\" aria-label={ariaLabel} className=\"flex gap-2\">\n {options.map((opt) => {\n const isActive = opt.value === value;\n return (\n <div\n key={String(opt.value)}\n className=\"flex flex-1 flex-col items-center gap-2\"\n >\n <Button\n variant=\"raw\"\n role=\"radio\"\n aria-checked={isActive}\n aria-label={opt.label}\n onClick={() => onChange(opt.value)}\n className={cn(\n 'flex aspect-square w-full items-center justify-center',\n 'cursor-pointer rounded-xl border border-border-50 bg-background',\n 'text-text-700 shadow-soft-shadow-1 transition-all duration-150',\n 'hover:bg-background-100',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indicator-info',\n isActive &&\n 'ring-2 ring-primary-950 ring-offset-0 shadow-none text-primary-950'\n )}\n >\n {opt.preview}\n </Button>\n <Text\n size=\"xs\"\n weight=\"normal\"\n className=\"leading-none text-text-700\"\n >\n {opt.label}\n </Text>\n </div>\n );\n })}\n </div>\n);\n\nexport interface AccessibilityPanelProps {\n isOpen: boolean;\n onClose: () => void;\n /** Lado da viewport onde o painel aparece (default: 'right') */\n position?: AccessibilityFabPosition;\n className?: string;\n}\n\n/**\n * Painel lateral com os controles de acessibilidade organizados em\n * accordions colapsáveis (Visão, Leitura, Leitor de texto, Animação,\n * Navegação, Atalho de teclado).\n *\n * O próprio painel fica dentro de `.a11y-widget-shield`, então\n * filtros aplicados no `<html>` (alto contraste, etc.) não afetam\n * sua legibilidade.\n */\nexport default function AccessibilityPanel({\n isOpen,\n onClose,\n position = 'right',\n className,\n}: Readonly<AccessibilityPanelProps>) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n\n const {\n contrastMode,\n saturationMode,\n fontSize,\n letterSpacing,\n lineSpacing,\n highlightLinks,\n pauseAnimations,\n bigCursor,\n dyslexiaFont,\n readingAid,\n keyboardShortcut,\n setContrastMode,\n setSaturationMode,\n setFontSize,\n setLetterSpacing,\n setLineSpacing,\n setHighlightLinks,\n setPauseAnimations,\n setBigCursor,\n setDyslexiaFont,\n setReadingAid,\n setKeyboardShortcut,\n resetPreferences,\n } = useAccessibilityStore();\n\n /**\n * Foco e navegação, pelos mesmos hooks que o `Modal` e o `AlertDialog` usam.\n * O `useModalFocus` leva o foco pro diálogo ao abrir, prende Tab e Shift+Tab\n * no ciclo (de \"Redefinir ajustes\" volta pro \"Fechar opções de\n * acessibilidade\", e vice-versa) e torna o resto da página `inert` —\n * necessário porque este é um `<dialog open>` sem top layer: sem isso o\n * cursor virtual do VoiceOver continua passeando pelo menu atrás, e o Tab\n * escapa pra ele. Também devolve o foco a quem abriu o painel.\n *\n * O foco inicial vai pro próprio diálogo (daí o `tabIndex={-1}` abaixo), e\n * não pro botão de fechar: assim o leitor anuncia \"Opções de acessibilidade,\n * diálogo\" antes de cair nos controles.\n *\n * `useEscapeToClose` em vez do listener manual de antes: ele ignora um\n * Escape já tratado (`defaultPrevented`), então fechar o `Select` de voz do\n * TTS não fecha mais o painel inteiro junto.\n *\n * Sem `useBodyScrollLock` de propósito: ele cobre a faixa da scrollbar com um\n * overlay escuro combinando com o backdrop dos modais, e este painel não tem\n * backdrop — a tarja apareceria solta na borda da tela.\n */\n useModalFocus(isOpen, dialogRef);\n useEscapeToClose(isOpen, onClose);\n\n if (!isOpen) return null;\n\n const levelOptions = LEVEL_LABELS.map((label, index) => ({\n value: index as 0 | 1 | 2 | 3,\n label,\n }));\n\n return (\n <dialog\n ref={dialogRef}\n open\n // Requisito do `useModalFocus` (ver a nota acima): o foco inicial vai pro\n // próprio diálogo, que precisa ser focável sem entrar no ciclo de Tab.\n tabIndex={-1}\n // `open` sem `showModal()` não cria top layer nem marca o diálogo como\n // modal, então o papel é declarado aqui — como no `Modal` e no\n // `AlertDialog`. Quem realmente prende a navegação é o `inert` aplicado\n // pelo hook; o atributo é o que anuncia ao leitor que a página atrás\n // saiu do caminho.\n aria-modal=\"true\"\n aria-label=\"Opções de acessibilidade\"\n data-testid=\"accessibility-panel\"\n // `<dialog>` não estica automaticamente com `top` + `bottom`, por\n // isso a altura fica explícita: `100vh - 5rem` (80px de respiro do\n // topo). Combinado com `bottom-0` no className, o painel encosta\n // na base da viewport como no Figma.\n style={{ height: 'calc(100vh - 5rem)' }}\n className={cn(\n 'a11y-widget-shield',\n 'fixed bottom-0 z-40 m-0',\n PANEL_EDGE_CLASSES[position],\n 'flex w-[calc(100vw-3rem)] max-w-110 flex-col overflow-hidden rounded-2xl p-0',\n 'border border-background-200 bg-background shadow-2xl',\n className\n )}\n >\n {/* Header — visual do Figma: bg azul-claro (Paraná) / rosa-claro\n (Paraíba) usando `primary-50`. Preferido em vez de `map-attention`\n porque `primary-50` flipa corretamente no dark mode em todos os\n temas (ex.: Paraná dark = #27344a), enquanto `map-attention`\n ficou idêntico em light/dark no theme do Paraná, deixando o\n texto branco invisível sobre o azul-claro no dark. */}\n <header className=\"flex items-center justify-between gap-3 bg-primary-50 px-4 py-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <img\n src={accessibilityIcon}\n alt=\"\"\n aria-hidden=\"true\"\n className=\"h-10 w-10 shrink-0\"\n />\n <div className=\"flex min-w-0 flex-col gap-1\">\n <Text\n size=\"md\"\n weight=\"bold\"\n className=\"leading-none tracking-[0.2px] text-text-950\"\n >\n Acessibilidade\n </Text>\n <Text\n size=\"xs\"\n weight=\"normal\"\n className=\"leading-none text-text-800\"\n >\n Personalize a leitura e navegação\n </Text>\n </div>\n </div>\n <IconButton\n size=\"sm\"\n aria-label=\"Fechar opções de acessibilidade\"\n onClick={onClose}\n icon={<XIcon size={18} />}\n />\n </header>\n\n <div className=\"flex-1 overflow-y-auto\">\n <AccordionSection\n title=\"Visão\"\n icon={<EyeIcon size={18} />}\n testId=\"a11y-section-vision\"\n >\n <SubControl label=\"Contraste\">\n <Segmented\n ariaLabel=\"Modo de contraste\"\n value={contrastMode}\n options={CONTRAST_OPTIONS}\n onChange={setContrastMode}\n />\n </SubControl>\n <SubControl label=\"Saturação\">\n <Segmented\n ariaLabel=\"Modo de saturação\"\n value={saturationMode}\n options={SATURATION_OPTIONS}\n onChange={setSaturationMode}\n />\n </SubControl>\n {/* Daltonismo removido por enquanto — store/store actions\n mantidos para reativação futura sem refactor. */}\n </AccordionSection>\n\n <AccordionSection\n title=\"Leitura\"\n icon={<TextTIcon size={18} />}\n testId=\"a11y-section-reading\"\n >\n <SubControl label=\"Fonte para dislexia\">\n <AccessibilityToggleRow\n ariaLabel=\"Trocar para Comic Sans MS\"\n rowTestId=\"a11y-toggle-dyslexia-font-row\"\n switchTestId=\"a11y-toggle-dyslexia-font\"\n checked={dyslexiaFont}\n onChange={() => setDyslexiaFont(!dyslexiaFont)}\n label={\n <>\n Trocar para{' '}\n <span style={{ fontFamily: '\"Comic Sans MS\", cursive' }}>\n Comic Sans MS\n </span>\n </>\n }\n />\n </SubControl>\n\n <SubControl label=\"Tamanho da fonte\">\n <PreviewSegmented\n ariaLabel=\"Tamanho da fonte\"\n value={fontSize}\n options={levelOptions.map((opt) => ({\n ...opt,\n preview: (\n <span\n className={cn(\n 'font-semibold leading-none',\n FONT_SIZE_PREVIEW_CLASSES[opt.value]\n )}\n >\n Aa\n </span>\n ),\n }))}\n onChange={setFontSize}\n />\n </SubControl>\n\n <SubControl label=\"Espaçamento entre letras\">\n <PreviewSegmented\n ariaLabel=\"Espaçamento entre letras\"\n value={letterSpacing}\n options={levelOptions.map((opt) => ({\n ...opt,\n preview: (\n <span\n className={cn(\n // Mesmo tamanho do \"Aa\" no botão Padrão de \"Tamanho\n // da fonte\" (text-base), pra que essa scale visualize\n // só a variação de letter-spacing.\n 'text-base font-semibold leading-none',\n LETTER_SPACING_PREVIEW_CLASSES[opt.value]\n )}\n >\n Aa\n </span>\n ),\n }))}\n onChange={setLetterSpacing}\n />\n </SubControl>\n\n <SubControl label=\"Espaçamento entre linhas\">\n <PreviewSegmented\n ariaLabel=\"Espaçamento entre linhas\"\n value={lineSpacing}\n options={levelOptions.map((opt) => ({\n ...opt,\n preview: (\n <span\n className={cn(\n 'flex flex-col items-stretch',\n LINE_SPACING_PREVIEW_GAPS[opt.value]\n )}\n >\n <span className=\"h-0.5 w-7 rounded-full bg-current\" />\n <span className=\"h-0.5 w-7 rounded-full bg-current\" />\n <span className=\"h-0.5 w-7 rounded-full bg-current\" />\n </span>\n ),\n }))}\n onChange={setLineSpacing}\n />\n </SubControl>\n\n <SubControl label=\"Auxiliar de leitura\">\n <Segmented\n ariaLabel=\"Auxiliar de leitura\"\n value={readingAid}\n options={READING_AID_OPTIONS}\n onChange={setReadingAid}\n />\n </SubControl>\n </AccordionSection>\n\n <AccordionSection\n title=\"Leitor de texto\"\n icon={<SpeakerHighIcon size={18} />}\n testId=\"a11y-section-tts\"\n >\n <TTSSection PreviewSegmented={PreviewSegmented} />\n </AccordionSection>\n\n <AccordionSection\n title=\"Animação\"\n icon={<FilmReelIcon size={18} />}\n testId=\"a11y-section-animation\"\n >\n <AccessibilityToggleRow\n label=\"Pausar animações para conforto visual\"\n checked={pauseAnimations}\n onChange={() => setPauseAnimations(!pauseAnimations)}\n switchTestId=\"a11y-toggle-pause-animations\"\n />\n </AccordionSection>\n\n <AccordionSection\n title=\"Navegação\"\n icon={<NavigationArrowIcon size={18} />}\n testId=\"a11y-section-navigation\"\n >\n <SubControl label=\"Destacar links e botões\">\n <AccessibilityToggleRow\n label=\"Adicionar contorno em elementos clicáveis\"\n checked={highlightLinks}\n onChange={() => setHighlightLinks(!highlightLinks)}\n switchTestId=\"a11y-toggle-highlight-links\"\n />\n </SubControl>\n <SubControl label=\"Cursor maior\">\n <AccessibilityToggleRow\n label=\"Aumentar e escurecer cursor\"\n checked={bigCursor}\n onChange={() => setBigCursor(!bigCursor)}\n switchTestId=\"a11y-toggle-big-cursor\"\n />\n </SubControl>\n </AccordionSection>\n\n <AccordionSection\n title=\"Atalho de teclado\"\n icon={<KeyboardIcon size={18} />}\n testId=\"a11y-section-shortcut\"\n >\n <AccessibilityToggleRow\n label=\"Alt+A para abrir o painel\"\n checked={keyboardShortcut}\n onChange={() => setKeyboardShortcut(!keyboardShortcut)}\n switchTestId=\"a11y-toggle-keyboard-shortcut\"\n />\n </AccordionSection>\n </div>\n\n <footer className=\"border-t border-background-200 px-4 py-3\">\n <Button\n variant=\"outline\"\n action=\"primary\"\n size=\"medium\"\n iconLeft={\n <ArrowCounterClockwiseIcon\n size={16}\n weight=\"bold\"\n aria-hidden=\"true\"\n />\n }\n onClick={resetPreferences}\n data-testid=\"a11y-reset\"\n className=\"w-full justify-center\"\n >\n Redefinir ajustes\n </Button>\n </footer>\n </dialog>\n );\n}\n","import type { ReactNode } from 'react';\nimport Text from '../Text/Text';\nimport ToggleSwitch from '../ToggleSwitch/ToggleSwitch';\nimport { cn } from '../../utils/utils';\n\nexport interface AccessibilityToggleRowProps {\n /** Conteúdo principal da linha (texto ou JSX, ex.: trecho em Comic Sans). */\n label: ReactNode;\n /** Aria-label do row quando `label` é JSX e não pode ser usado como texto. */\n ariaLabel?: string;\n /** Texto auxiliar abaixo do label. */\n description?: string;\n checked: boolean;\n onChange: () => void;\n /** Testid no wrapper interativo (toda a linha). */\n rowTestId?: string;\n /** Testid no `<ToggleSwitch>` interno — usado pelos testes que ainda\n * clicam diretamente no botão de switch. */\n switchTestId?: string;\n}\n\n/**\n * Linha clicável \"label à esquerda + ToggleSwitch à direita\" usada nos\n * accordions de Animação, Navegação, Atalho, dislexia e leitor de texto.\n *\n * O wrapper inteiro responde a click/Enter/Space; o `ToggleSwitch` interno\n * é apenas decorativo (`tabIndex={-1}`, `aria-hidden`) pra que toda a área\n * vire alvo de clique sem dupla-ativação do switch.\n */\nexport default function AccessibilityToggleRow({\n label,\n ariaLabel,\n description,\n checked,\n onChange,\n rowTestId,\n switchTestId,\n}: Readonly<AccessibilityToggleRowProps>) {\n const computedAriaLabel =\n ariaLabel ?? (typeof label === 'string' ? label : undefined);\n return (\n <div\n role=\"switch\"\n tabIndex={0}\n aria-checked={checked}\n aria-label={computedAriaLabel}\n data-testid={rowTestId}\n className={cn(\n 'flex items-center justify-between gap-3 rounded-md py-1.5',\n 'cursor-pointer transition-colors duration-150 hover:bg-background-100',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-info-500'\n )}\n onClick={onChange}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onChange();\n }\n }}\n >\n <div className=\"flex flex-col\">\n <Text size=\"sm\" className=\"text-text-900\">\n {label}\n </Text>\n {description && (\n <Text size=\"2xs\" className=\"text-text-600\">\n {description}\n </Text>\n )}\n </div>\n <ToggleSwitch\n checked={checked}\n onChange={() => undefined}\n checkedColor=\"bg-info-600\"\n data-testid={switchTestId}\n tabIndex={-1}\n aria-hidden\n />\n </div>\n );\n}\n","import { useMemo, type ReactElement, type ReactNode } from 'react';\nimport { PauseIcon, PlayIcon, StopIcon } from '@phosphor-icons/react';\nimport Button from '../Button/Button';\nimport Text from '../Text/Text';\nimport Select, {\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectValue,\n} from '../Select/Select';\nimport AccessibilityToggleRow from './AccessibilityToggleRow';\nimport { useAccessibilityStore } from '../../store/accessibilityStore';\nimport { useTTS } from '../../hooks/useTTS';\n\n/**\n * Opções de velocidade da fala. O `preview` mostra o valor numérico\n * dentro do botão (1.0, 1.25, etc.) e o `label` aparece como caption\n * abaixo. Valores escolhidos para casarem com o que o Web Speech API\n * aceita (0.5–2.0) — `0.75` foi mantido para \"Lento\" em vez de algo\n * mais agressivo porque vozes nativas ficam ininteligíveis abaixo disso.\n */\nconst RATE_OPTIONS: {\n value: string;\n label: string;\n preview: ReactNode;\n}[] = [\n { value: '0.75', label: 'Lento', preview: '0.75' },\n { value: '1', label: 'Normal', preview: '1.0' },\n { value: '1.25', label: 'Rápido', preview: '1.25' },\n { value: '2', label: 'Muito rápido', preview: '2.0' },\n];\n\nexport interface TTSSectionProps {\n /** Componente de segmented com preview visual + label abaixo */\n PreviewSegmented: <T extends string | number>(props: {\n value: T;\n options: { value: T; label: string; preview: ReactNode }[];\n ariaLabel: string;\n onChange: (value: T) => void;\n }) => ReactElement;\n}\n\n/**\n * Bloco de controles do leitor de texto dentro do painel.\n * Estrutura segue o design do Figma:\n * 1. \"Texto para voz\" — toggle que ativa/desativa o modo click-to-read\n * 2. \"Voz\" — seletor de voz\n * 3. \"Velocidade\" — PreviewSegmented com valor numérico\n */\nexport default function TTSSection({\n PreviewSegmented,\n}: Readonly<TTSSectionProps>) {\n const ttsMode = useAccessibilityStore((s) => s.ttsMode);\n const ttsStatus = useAccessibilityStore((s) => s.ttsStatus);\n const ttsRate = useAccessibilityStore((s) => s.ttsRate);\n const ttsVoiceId = useAccessibilityStore((s) => s.ttsVoiceId);\n const setTTSMode = useAccessibilityStore((s) => s.setTTSMode);\n const setTTSRate = useAccessibilityStore((s) => s.setTTSRate);\n const setTTSVoiceId = useAccessibilityStore((s) => s.setTTSVoiceId);\n\n const { isSupported, voices, hasPortugueseVoice, pause, resume, stop } =\n useTTS();\n\n // Preferimos vozes em português; demais ficam ao final.\n const sortedVoices = useMemo(() => {\n return [...voices].sort((a, b) => {\n const aPt = a.lang.toLowerCase().startsWith('pt') ? 0 : 1;\n const bPt = b.lang.toLowerCase().startsWith('pt') ? 0 : 1;\n if (aPt !== bPt) return aPt - bPt;\n return a.name.localeCompare(b.name);\n });\n }, [voices]);\n\n if (!isSupported) {\n return (\n <Text size=\"2xs\" className=\"text-text-600\">\n Síntese de voz não está disponível neste navegador.\n </Text>\n );\n }\n\n const isClickToReadOn = ttsMode === 'click-to-read';\n\n return (\n <div className=\"flex flex-col gap-6\">\n {/* Texto para voz: toggle row */}\n <div className=\"flex flex-col gap-2\">\n <Text\n size=\"xs\"\n weight=\"medium\"\n className=\"uppercase leading-none text-text-600\"\n >\n Texto para voz\n </Text>\n <AccessibilityToggleRow\n label=\"Ative a leitura e clique no texto para ouvir\"\n rowTestId=\"a11y-tts-mode-toggle\"\n checked={isClickToReadOn}\n onChange={() => setTTSMode(isClickToReadOn ? 'off' : 'click-to-read')}\n />\n </div>\n\n {!hasPortugueseVoice && (\n <Text size=\"2xs\" className=\"text-warning-700\">\n Nenhuma voz em português foi encontrada no seu sistema. A leitura será\n feita com a voz padrão disponível.\n </Text>\n )}\n\n {/* Voz: pill select */}\n <div className=\"flex flex-col gap-2\">\n <Text\n size=\"xs\"\n weight=\"medium\"\n className=\"uppercase leading-none text-text-600\"\n >\n Voz\n </Text>\n <Select\n size=\"small\"\n value={ttsVoiceId ?? ''}\n onValueChange={(value) => setTTSVoiceId(value || null)}\n >\n <SelectTrigger\n variant=\"rounded\"\n aria-label=\"Voz da síntese de fala\"\n data-testid=\"a11y-tts-voice-select\"\n >\n <SelectValue placeholder=\"Padrão do navegador\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"\">Padrão do navegador</SelectItem>\n {sortedVoices.map((v) => (\n <SelectItem key={v.id} value={v.id}>\n {v.name} — {v.lang}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {/* Velocidade: preview segmented com valor numérico no botão */}\n <div className=\"flex flex-col gap-2\">\n <Text\n size=\"xs\"\n weight=\"medium\"\n className=\"uppercase leading-none text-text-600\"\n >\n Velocidade\n </Text>\n <PreviewSegmented\n ariaLabel=\"Velocidade da fala\"\n value={String(ttsRate)}\n options={RATE_OPTIONS.map((opt) => ({\n value: opt.value,\n label: opt.label,\n preview: (\n <span className=\"text-base font-bold leading-none\">\n {opt.preview}\n </span>\n ),\n }))}\n onChange={(v) => setTTSRate(Number(v))}\n />\n </div>\n\n {/* Ações: pause/resume/stop conforme status — só visíveis durante a fala */}\n {ttsStatus !== 'idle' && (\n <div className=\"flex items-center gap-2\">\n {ttsStatus === 'speaking' && (\n <Button\n variant=\"outline\"\n action=\"secondary\"\n size=\"small\"\n iconLeft={\n <PauseIcon size={14} weight=\"bold\" aria-hidden=\"true\" />\n }\n onClick={pause}\n data-testid=\"a11y-tts-pause\"\n >\n Pausar\n </Button>\n )}\n\n {ttsStatus === 'paused' && (\n <Button\n variant=\"outline\"\n action=\"secondary\"\n size=\"small\"\n iconLeft={<PlayIcon size={14} weight=\"bold\" aria-hidden=\"true\" />}\n onClick={resume}\n data-testid=\"a11y-tts-resume\"\n >\n Retomar\n </Button>\n )}\n\n <Button\n variant=\"outline\"\n action=\"negative\"\n size=\"small\"\n iconLeft={<StopIcon size={14} weight=\"bold\" aria-hidden=\"true\" />}\n onClick={stop}\n data-testid=\"a11y-tts-stop\"\n className=\"ml-auto\"\n >\n Parar\n </Button>\n </div>\n )}\n </div>\n );\n}\n","import { HandWavingIcon } from '@phosphor-icons/react';\nimport Button from '../Button/Button';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { cn } from '../../utils/utils';\nimport {\n FAB_POSITION_CLASSES,\n FAB_TOOLTIP_POSITION,\n FAB_VERTICAL_ALIGN_CLASSES,\n type FabPosition,\n type FabVerticalAlign,\n} from './fabPositioning';\n\ntype AccessibilityFabPosition = FabPosition;\ntype AccessibilityFabVerticalAlign = FabVerticalAlign;\n\nexport interface LibrasFabProps {\n /** Click handler — alterna o painel do VLibras (abrir/fechar) */\n onClick: () => void;\n /** Lado da viewport onde o botão fica colado */\n position?: AccessibilityFabPosition;\n /** Alinhamento vertical (default: `below-center`) */\n verticalAlign?: AccessibilityFabVerticalAlign;\n /** Classes extras */\n className?: string;\n}\n\n/**\n * Segundo botão flutuante (FAB), posicionado abaixo do `AccessibilityFab`.\n * Aciona o widget oficial do VLibras (gov.br) que faz tradução automática\n * de português para Libras via avatar 3D.\n *\n * O botão tem visual constante — não mantemos um indicador de estado\n * \"ativo\" porque o painel do VLibras já reflete visualmente se está\n * aberto ou fechado. Cada clique alterna o painel.\n *\n * Mesma identidade visual do FAB principal (azul escuro, quadrado com\n * canto interno arredondado, colado na lateral).\n */\nexport default function LibrasFab({\n onClick,\n position = 'right',\n verticalAlign = 'below-center',\n className,\n}: Readonly<LibrasFabProps>) {\n const label = 'Tradução em Libras';\n\n return (\n <Tooltip\n content={label}\n position={FAB_TOOLTIP_POSITION[position]}\n className={cn(\n 'fixed z-40',\n FAB_VERTICAL_ALIGN_CLASSES[verticalAlign],\n FAB_POSITION_CLASSES[position]\n )}\n >\n <Button\n variant=\"raw\"\n onClick={onClick}\n aria-label={label}\n data-testid=\"libras-fab\"\n className={cn(\n 'a11y-widget-shield',\n FAB_POSITION_CLASSES[position],\n 'flex h-10 w-10 cursor-pointer items-center justify-center',\n // `text-text-50` flipa junto com `bg-info-900`: claro no light,\n // escuro no dark. Como o ícone usa `currentColor`, com `text-white`\n // a mãozinha sumiria no tema escuro (branco em fundo azul-claro).\n 'bg-info-900 text-text-50 shadow-lg',\n 'transition-all duration-200 hover:scale-110 hover:bg-info-800',\n 'focus:outline-none focus:ring-4 focus:ring-info-300',\n className\n )}\n >\n <HandWavingIcon size={25} weight=\"fill\" aria-hidden=\"true\" />\n </Button>\n </Tooltip>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useAccessibilityStore } from '../../store/accessibilityStore';\n\nconst RULER_HEIGHT_PX = 32;\nconst MASK_GAP_PX = 80; // metade da altura da janela visível\n\n/**\n * Renderiza auxiliares de leitura (régua ou máscara) que acompanham\n * a posição vertical do mouse. Só monta listener de `mousemove` quando\n * algum auxiliar está ativo, para não pagar custo quando desligado.\n */\nexport default function ReadingAid() {\n const readingAid = useAccessibilityStore((s) => s.readingAid);\n const [mouseY, setMouseY] = useState<number | null>(null);\n\n useEffect(() => {\n if (readingAid === 'none') {\n setMouseY(null);\n return;\n }\n\n let frame = 0;\n const handleMouseMove = (event: MouseEvent) => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => setMouseY(event.clientY));\n };\n\n document.addEventListener('mousemove', handleMouseMove, { passive: true });\n return () => {\n cancelAnimationFrame(frame);\n document.removeEventListener('mousemove', handleMouseMove);\n };\n }, [readingAid]);\n\n if (readingAid === 'none' || mouseY === null) return null;\n\n if (readingAid === 'ruler') {\n return (\n <div\n aria-hidden=\"true\"\n data-testid=\"a11y-reading-ruler\"\n className=\"a11y-widget-shield pointer-events-none fixed left-0 right-0 z-30\"\n style={{\n top: mouseY - RULER_HEIGHT_PX / 2,\n height: RULER_HEIGHT_PX,\n background: 'rgba(255, 235, 59, 0.25)',\n borderTop: '2px solid #facc15',\n borderBottom: '2px solid #facc15',\n }}\n />\n );\n }\n\n // Máscara: dois retângulos escurecendo acima e abaixo do cursor\n return (\n <>\n <div\n aria-hidden=\"true\"\n data-testid=\"a11y-reading-mask-top\"\n className=\"a11y-widget-shield pointer-events-none fixed left-0 right-0 top-0 z-30 bg-black/90\"\n style={{ height: Math.max(0, mouseY - MASK_GAP_PX) }}\n />\n <div\n aria-hidden=\"true\"\n data-testid=\"a11y-reading-mask-bottom\"\n className=\"a11y-widget-shield pointer-events-none fixed left-0 right-0 bottom-0 z-30 bg-black/90\"\n style={{ top: mouseY + MASK_GAP_PX }}\n />\n </>\n );\n}\n","import {\n ColorBlindMode,\n getColorBlindFilterId,\n} from '../../store/accessibilityStore';\n\n/**\n * SVG escondido com matrizes `<feColorMatrix>` que simulam/auxiliam\n * cada tipo de daltonismo. As classes em `accessibility.css` aplicam\n * `filter: url(#a11y-cb-...)` no `<html>` para colorir a página.\n *\n * Os IDs dos filters são derivados do enum `ColorBlindMode` via\n * `getColorBlindFilterId` — mesma fonte da verdade que o hook usa\n * para aplicar a classe.\n *\n * Matrizes baseadas em Brettel/Vienot/Mollon — padrão amplamente\n * utilizado em ferramentas de acessibilidade como AXE, Daltonize e\n * widget oficial do HandTalk.\n */\nexport default function ColorBlindFilters() {\n return (\n <svg\n aria-hidden=\"true\"\n data-testid=\"a11y-colorblind-filters\"\n style={{\n position: 'absolute',\n width: 0,\n height: 0,\n overflow: 'hidden',\n }}\n >\n <defs>\n <filter id={getColorBlindFilterId(ColorBlindMode.Protanopia)}>\n <feColorMatrix\n type=\"matrix\"\n values=\"0.567 0.433 0 0 0\n 0.558 0.442 0 0 0\n 0 0.242 0.758 0 0\n 0 0 0 1 0\"\n />\n </filter>\n <filter id={getColorBlindFilterId(ColorBlindMode.Deuteranopia)}>\n <feColorMatrix\n type=\"matrix\"\n values=\"0.625 0.375 0 0 0\n 0.700 0.300 0 0 0\n 0 0.300 0.7 0 0\n 0 0 0 1 0\"\n />\n </filter>\n <filter id={getColorBlindFilterId(ColorBlindMode.Tritanopia)}>\n <feColorMatrix\n type=\"matrix\"\n values=\"0.95 0.05 0 0 0\n 0 0.433 0.567 0 0\n 0 0.475 0.525 0 0\n 0 0 0 1 0\"\n />\n </filter>\n </defs>\n </svg>\n );\n}\n","import { useEffect } from 'react';\nimport { useAccessibilityStore } from '../../store/accessibilityStore';\nimport { useTTS } from '../../hooks/useTTS';\n\nconst HIGHLIGHT_CLASS = 'a11y-tts-target';\n\n/**\n * Controller invisível que conecta o `ttsMode` do store ao DOM:\n * - `click-to-read`: registra um listener global de clique. Ao clicar\n * em qualquer elemento (exceto o próprio widget), lê seu texto.\n * - `read-selection`: lê o texto atualmente selecionado quando o store\n * sinaliza (via `pendingReadSelection`). UI/atalho disparam isso.\n *\n * Aplica a classe `.a11y-tts-target` no elemento sendo lido para\n * destaque visual; remove ao terminar/parar.\n */\nexport default function TTSController() {\n const ttsMode = useAccessibilityStore((s) => s.ttsMode);\n const ttsStatus = useAccessibilityStore((s) => s.ttsStatus);\n const { speak, stop, isSupported } = useTTS();\n\n // Click-to-read: ouve cliques globais enquanto o modo está ativo\n useEffect(() => {\n if (!isSupported || ttsMode !== 'click-to-read') return;\n\n const handler = (event: MouseEvent) => {\n const initialTarget = event.target as HTMLElement | null;\n if (!initialTarget) return;\n\n // Ignora cliques dentro do próprio widget\n if (initialTarget.closest('.a11y-widget-shield')) return;\n\n // Sobe pela árvore até achar o ancestral que tem texto legível.\n // Cobre o caso comum de IconButtons com `<svg>` interno: clicar no\n // SVG não retorna texto, mas o botão pai tem aria-label.\n const found = findReadableAncestor(initialTarget);\n if (!found) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Limpa highlight anterior e marca o novo alvo\n document\n .querySelectorAll(`.${HIGHLIGHT_CLASS}`)\n .forEach((el) => el.classList.remove(HIGHLIGHT_CLASS));\n found.node.classList.add(HIGHLIGHT_CLASS);\n\n speak(found.text);\n };\n\n // capture: true → pegamos o clique antes do handler do app/link\n document.addEventListener('click', handler, true);\n return () => {\n document.removeEventListener('click', handler, true);\n document\n .querySelectorAll(`.${HIGHLIGHT_CLASS}`)\n .forEach((el) => el.classList.remove(HIGHLIGHT_CLASS));\n // Interrompe qualquer fala em curso ao sair do modo. Sem isso,\n // desligar o \"Clique para ler\" deixaria a leitura terminando\n // sozinha, contrariando a expectativa do usuário.\n stop();\n };\n }, [isSupported, ttsMode, speak, stop]);\n\n // Quando a fala termina (ttsStatus volta a 'idle'), limpa highlight\n useEffect(() => {\n if (ttsStatus === 'idle') {\n document\n .querySelectorAll(`.${HIGHLIGHT_CLASS}`)\n .forEach((el) => el.classList.remove(HIGHLIGHT_CLASS));\n }\n }, [ttsStatus]);\n\n // Para qualquer fala em curso quando o componente desmonta\n useEffect(() => () => stop(), [stop]);\n\n return null;\n}\n\n/**\n * Extrai texto legível do elemento clicado. Prioriza:\n * 1. `aria-label` se presente\n * 2. `title`\n * 3. `innerText` truncado\n *\n * `innerText` (e não `textContent`) respeita estilos como `display: none`\n * e quebras de linha visuais — leitura mais natural.\n */\nconst extractReadableText = (el: HTMLElement): string => {\n const aria = el.getAttribute('aria-label')?.trim();\n if (aria) return aria;\n const title = el.getAttribute('title')?.trim();\n if (title) return title;\n const text = el.innerText?.trim() ?? '';\n // Limita comprimento para evitar leitura infinita ao clicar em\n // contêineres grandes (ex.: <main>). 600 chars ≈ 1min de fala.\n return text.length > 600 ? `${text.slice(0, 600)}...` : text;\n};\n\n/** Quantos níveis de ancestralidade subimos buscando um nó legível. */\nconst MAX_ANCESTOR_LOOKUP = 8;\n\n/**\n * Caminha pela árvore a partir do elemento clicado até achar o ancestral\n * mais próximo que tenha texto legível (`aria-label`, `title` ou\n * `innerText`). Limita a profundidade e nunca retorna o `<body>` para\n * evitar ler a página inteira ao clicar em ícones soltos.\n */\nconst findReadableAncestor = (\n start: HTMLElement\n): { node: HTMLElement; text: string } | null => {\n let node: HTMLElement | null = start;\n let depth = 0;\n while (node && depth < MAX_ANCESTOR_LOOKUP && node !== document.body) {\n const text = extractReadableText(node);\n if (text) return { node, text };\n node = node.parentElement;\n depth++;\n }\n return null;\n};\n","import { useEffect } from 'react';\nimport { useAccessibilityStore } from '../../store/accessibilityStore';\n\nconst SCRIPT_ID = 'a11y-vlibras-script';\nconst SCRIPT_URL = 'https://vlibras.gov.br/app/vlibras-plugin.js';\nconst APP_URL = 'https://vlibras.gov.br/app';\nconst WRAPPER_ID = 'a11y-vlibras-wrapper';\n\ninterface VLibrasGlobal {\n Widget: new (appUrl: string) => unknown;\n}\n\n/**\n * Carrega e ativa o widget oficial de Libras do governo brasileiro\n * (gov.br/vlibras) sob demanda. Estratégia:\n *\n * - Quando `librasEnabled === true`:\n * 1. Injeta o esqueleto DOM esperado pelo VLibras (`<div vw>` etc.)\n * no `<body>` (precisa estar no body, não dentro do React tree).\n * 2. Carrega o script oficial uma única vez (cacheado por id).\n * 3. Instancia `new window.VLibras.Widget(...)` para inicializar o\n * avatar e os assets 3D.\n *\n * - Quando `librasEnabled === false`:\n * - Apenas OCULTA o esqueleto DOM (não remove). O plugin do VLibras\n * registra um listener de `resize` no `window` que ele nunca desanexa;\n * se removêssemos o wrapper, esse listener rodaria `d(\"[vp]\").closest(...)`\n * sobre um `null` (nós já removidos) e lançaria\n * `Cannot read properties of null (reading 'closest')` no próximo resize\n * (rotação de tela / teclado virtual no mobile). Mantendo o esqueleto\n * oculto no DOM, `[vp]`/`[vw]` continuam existindo e o handler órfão não\n * quebra. O script permanece em cache para reativações rápidas.\n *\n * O script é pesado (~MBs de avatares 3D), por isso só carregamos quando\n * o usuário clica para ativar — fluxo opt-in.\n */\nexport default function VLibrasLoader() {\n const enabled = useAccessibilityStore((s) => s.librasEnabled);\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n\n if (!enabled) {\n hideWrapper();\n return;\n }\n\n injectWrapper();\n loadScript()\n .then(() => {\n const VLibras = (globalThis as unknown as { VLibras?: VLibrasGlobal })\n .VLibras;\n if (!VLibras?.Widget) return;\n\n // ATENÇÃO: o construtor do VLibras Widget registra a lógica de\n // inicialização DENTRO de `window.onload = () => {...}`. Como\n // nesta integração o widget é ativado depois da página já ter\n // carregado, o evento `load` já disparou e o handler nunca\n // executa sozinho. Capturamos o handler que o construtor\n // instalou e chamamos manualmente para popular o DOM (avatar,\n // botão de acesso, painel) imediatamente.\n const previousOnload = globalThis.onload;\n // A instanciação importa pelos efeitos colaterais: o construtor\n // do VLibras registra `window.onload` com a lógica de inicialização\n // do widget. O retorno não é usado e é descartado de propósito.\n new VLibras.Widget(APP_URL); // NOSONAR — instantiation by side effect\n const installed = globalThis.onload;\n if (typeof installed === 'function' && installed !== previousOnload) {\n // `onload` espera tipo Window — usamos `as` porque o construtor\n // do VLibras só lê `event.target` (que ignoramos) e não toca em\n // propriedades específicas do Window.\n (installed as (this: Window, ev: Event) => unknown).call(\n globalThis as unknown as Window,\n new Event('load')\n );\n }\n\n // Após popular o DOM, abre direto o painel do VLibras — caso\n // contrário o usuário precisaria clicar duas vezes (nosso FAB\n // + botão de acesso do VLibras). Aguarda um frame para garantir\n // que o handler de click do botão já foi anexado pelo plugin.\n requestAnimationFrame(() => {\n const accessButton =\n document.querySelector<HTMLElement>('[vw-access-button]');\n accessButton?.click();\n });\n })\n .catch(() => {\n // Falha de rede ou bloqueio: desabilita silenciosamente o estado\n // para o usuário não ficar preso achando que vai funcionar.\n useAccessibilityStore.getState().setLibrasEnabled(false);\n });\n\n return () => {\n // Não removemos o wrapper aqui: a remoção real fica no ramo\n // `!enabled` acima. Manter aqui causaria flicker em re-renders.\n };\n }, [enabled]);\n\n return null;\n}\n\nconst injectWrapper = () => {\n const existing = document.getElementById(WRAPPER_ID);\n if (existing) {\n // Wrapper já foi criado numa ativação anterior e apenas ocultado ao\n // desativar. Basta reexibi-lo em vez de recriar (o que reinjetaria os\n // nós e recriaria o listener órfão do plugin).\n existing.style.removeProperty('display');\n return;\n }\n\n const wrapper = document.createElement('div');\n wrapper.id = WRAPPER_ID;\n wrapper.setAttribute('vw', '');\n wrapper.className = 'enabled';\n\n const accessButton = document.createElement('div');\n accessButton.setAttribute('vw-access-button', '');\n accessButton.className = 'active';\n wrapper.appendChild(accessButton);\n\n const pluginWrapper = document.createElement('div');\n pluginWrapper.setAttribute('vw-plugin-wrapper', '');\n const top = document.createElement('div');\n top.className = 'vw-plugin-top-wrapper';\n pluginWrapper.appendChild(top);\n wrapper.appendChild(pluginWrapper);\n\n document.body.appendChild(wrapper);\n};\n\nconst hideWrapper = () => {\n const wrapper = document.getElementById(WRAPPER_ID);\n if (wrapper) {\n // Oculta sem remover: preserva os nós [vp]/[vw] que o listener de resize\n // órfão do plugin do VLibras consulta via `.closest()`.\n wrapper.style.display = 'none';\n }\n};\n\nconst loadScript = (): Promise<void> => {\n return new Promise((resolve, reject) => {\n if (document.getElementById(SCRIPT_ID)) {\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.id = SCRIPT_ID;\n script.src = SCRIPT_URL;\n script.async = true;\n script.onload = () => resolve();\n script.onerror = () =>\n reject(new Error('Falha ao carregar o script do VLibras'));\n document.head.appendChild(script);\n });\n};\n\nexport const __testing = {\n SCRIPT_ID,\n SCRIPT_URL,\n WRAPPER_ID,\n injectWrapper,\n hideWrapper,\n};\n"]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
|
+
|
|
3
|
+
var _chunkANT66KVKjs = require('./chunk-ANT66KVK.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkTN3AYOMVjs = require('./chunk-TN3AYOMV.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkFPOKJGC6js = require('./chunk-FPOKJGC6.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunk726PIA5Mjs = require('./chunk-726PIA5M.js');
|
|
13
|
+
|
|
14
|
+
// src/components/QuizTimer/QuizTimer.tsx
|
|
15
|
+
var _Clock = require('@phosphor-icons/react/dist/csr/Clock');
|
|
16
|
+
var _react = require('react');
|
|
17
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
18
|
+
var TIMER_ANNOUNCE_INTERVAL_SECONDS = 5 * 60;
|
|
19
|
+
var QuizTimer = _react.forwardRef.call(void 0,
|
|
20
|
+
({ className, ...props }, ref) => {
|
|
21
|
+
const { timeElapsed, isTimeExceeded } = _chunk726PIA5Mjs.useQuizStore.call(void 0, );
|
|
22
|
+
const exceeded = isTimeExceeded();
|
|
23
|
+
const formatted = _chunkFPOKJGC6js.formatTimeSpent.call(void 0, timeElapsed);
|
|
24
|
+
const exceededSuffix = exceeded ? " \u2014 tempo excedido" : "";
|
|
25
|
+
const [exceededAt, setExceededAt] = _react.useState.call(void 0,
|
|
26
|
+
exceeded ? timeElapsed : null
|
|
27
|
+
);
|
|
28
|
+
if (exceeded && exceededAt === null) setExceededAt(timeElapsed);
|
|
29
|
+
if (!exceeded && exceededAt !== null) setExceededAt(null);
|
|
30
|
+
const warningStartedAt = exceeded ? _nullishCoalesce(exceededAt, () => ( timeElapsed)) : null;
|
|
31
|
+
const snappedSeconds = Math.floor(timeElapsed / TIMER_ANNOUNCE_INTERVAL_SECONDS) * TIMER_ANNOUNCE_INTERVAL_SECONDS;
|
|
32
|
+
const announcedSeconds = warningStartedAt !== null && snappedSeconds < warningStartedAt ? warningStartedAt : snappedSeconds;
|
|
33
|
+
const announcement = announcedSeconds > 0 || exceeded ? `Tempo de prova: ${_chunkFPOKJGC6js.formatTimeSpent.call(void 0, announcedSeconds)}${exceededSuffix}` : "";
|
|
34
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
35
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
ref,
|
|
39
|
+
role: "timer",
|
|
40
|
+
"aria-live": "off",
|
|
41
|
+
"aria-label": `Tempo de prova: ${formatted}${exceededSuffix}`,
|
|
42
|
+
className: _chunkTN3AYOMVjs.cn.call(void 0,
|
|
43
|
+
"inline-flex flex-row items-center gap-1 tabular-nums",
|
|
44
|
+
"rounded-md border px-2 py-1",
|
|
45
|
+
exceeded ? "bg-error-background border-error-300 text-error-700" : "bg-info border-info-300 text-info-800",
|
|
46
|
+
className
|
|
47
|
+
),
|
|
48
|
+
...props,
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
51
|
+
_Clock.ClockIcon,
|
|
52
|
+
{
|
|
53
|
+
size: 16,
|
|
54
|
+
weight: exceeded ? "fill" : "regular",
|
|
55
|
+
"aria-hidden": "true"
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { as: "span", size: "sm", weight: "medium", color: "", "aria-hidden": "true", children: formatted })
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
63
|
+
"span",
|
|
64
|
+
{
|
|
65
|
+
className: "sr-only",
|
|
66
|
+
"aria-live": "polite",
|
|
67
|
+
"data-testid": "quiz-timer-announcement",
|
|
68
|
+
children: announcement
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
] });
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
QuizTimer.displayName = "QuizTimer";
|
|
75
|
+
var QuizTimer_default = QuizTimer;
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
exports.TIMER_ANNOUNCE_INTERVAL_SECONDS = TIMER_ANNOUNCE_INTERVAL_SECONDS; exports.QuizTimer_default = QuizTimer_default;
|
|
81
|
+
//# sourceMappingURL=chunk-QLWBGM7H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-QLWBGM7H.js","../src/components/QuizTimer/QuizTimer.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACbA,6DAA0B;AAC1B,8BAAqC;AAmE/B,+CAAA;AAzDC,IAAM,gCAAA,EAAkC,EAAA,EAAI,EAAA;AAqBnD,IAAM,UAAA,EAAY,+BAAA;AAAA,EAChB,CAAC,EAAE,SAAA,EAAW,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,GAAQ;AAChC,IAAA,MAAM,EAAE,WAAA,EAAa,eAAe,EAAA,EAAI,2CAAA,CAAa;AACrD,IAAA,MAAM,SAAA,EAAW,cAAA,CAAe,CAAA;AAChC,IAAA,MAAM,UAAA,EAAY,8CAAA,WAA2B,CAAA;AAC7C,IAAA,MAAM,eAAA,EAAiB,SAAA,EAAW,yBAAA,EAAsB,EAAA;AAKxD,IAAA,MAAM,CAAC,UAAA,EAAY,aAAa,EAAA,EAAI,6BAAA;AAAA,MAClC,SAAA,EAAW,YAAA,EAAc;AAAA,IAC3B,CAAA;AACA,IAAA,GAAA,CAAI,SAAA,GAAY,WAAA,IAAe,IAAA,EAAM,aAAA,CAAc,WAAW,CAAA;AAC9D,IAAA,GAAA,CAAI,CAAC,SAAA,GAAY,WAAA,IAAe,IAAA,EAAM,aAAA,CAAc,IAAI,CAAA;AACxD,IAAA,MAAM,iBAAA,EAAmB,SAAA,mBAAY,UAAA,UAAc,cAAA,EAAe,IAAA;AAKlE,IAAA,MAAM,eAAA,EACJ,IAAA,CAAK,KAAA,CAAM,YAAA,EAAc,+BAA+B,EAAA,EACxD,+BAAA;AAIF,IAAA,MAAM,iBAAA,EACJ,iBAAA,IAAqB,KAAA,GAAQ,eAAA,EAAiB,iBAAA,EAC1C,iBAAA,EACA,cAAA;AACN,IAAA,MAAM,aAAA,EACJ,iBAAA,EAAmB,EAAA,GAAK,SAAA,EACpB,CAAA,gBAAA,EAAmB,8CAAA,gBAAgC,CAAC,CAAA,EAAA;AAKtD,IAAA;AAAA,sBAAA;AAAC,QAAA;AAAA,QAAA;AACC,UAAA;AACK,UAAA;AACK,UAAA;AAC+C,UAAA;AAC9C,UAAA;AACT,YAAA;AACA,YAAA;AAGI,YAAA;AACJ,YAAA;AACF,UAAA;AACI,UAAA;AAEJ,UAAA;AAAA,4BAAA;AAAC,cAAA;AAAA,cAAA;AACO,gBAAA;AACsB,gBAAA;AAChB,gBAAA;AAAA,cAAA;AACd,YAAA;AACmD,4BAAA;AAEnD,UAAA;AAAA,QAAA;AACF,MAAA;AACA,sBAAA;AAAC,QAAA;AAAA,QAAA;AACW,UAAA;AACA,UAAA;AACE,UAAA;AAEX,UAAA;AAAA,QAAA;AACH,MAAA;AACF,IAAA;AAEJ,EAAA;AACF;AAEwB;AAET;ADhCkG;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-QLWBGM7H.js","sourcesContent":[null,"import { ClockIcon } from '@phosphor-icons/react/dist/csr/Clock';\nimport { forwardRef, useState } from 'react';\nimport { useQuizStore } from '../Quiz/useQuizStore';\nimport { formatTimeSpent } from '../../utils/activityDetailsUtils';\nimport { cn } from '../../utils/utils';\nimport Text from '../Text/Text';\n\n/**\n * How often (in seconds) the elapsed time is announced to screen readers.\n * Announcing every tick would flood the reader and drown the question itself.\n */\nexport const TIMER_ANNOUNCE_INTERVAL_SECONDS = 5 * 60;\n\nexport interface QuizTimerProps {\n className?: string;\n}\n\n/**\n * Progressive exam stopwatch, driven entirely by the quiz store.\n *\n * Presentational only: the counting, the pausing and the resume seed all live\n * in `useQuizStore`. Once the configured warning threshold is passed the\n * display turns red and keeps going — going over time is reported, never\n * enforced.\n *\n * Accessibility: the badge is a named `timer`, read on demand when the screen\n * reader reaches it (\"Tempo de prova: 00:53:49\"). Its icon and digits are\n * hidden from assistive tech so the reader does not announce them as an image\n * plus a number, and a polite live region announces the time every\n * {@link TIMER_ANNOUNCE_INTERVAL_SECONDS} seconds and once more, with the\n * actual elapsed time, when the time is exceeded.\n */\nconst QuizTimer = forwardRef<HTMLDivElement, QuizTimerProps>(\n ({ className, ...props }, ref) => {\n const { timeElapsed, isTimeExceeded } = useQuizStore();\n const exceeded = isTimeExceeded();\n const formatted = formatTimeSpent(timeElapsed);\n const exceededSuffix = exceeded ? ' — tempo excedido' : '';\n\n // Elapsed time at the moment the warning was first rendered. Captured\n // during render (React's \"store info from previous renders\" pattern) so\n // the live region text is already right on that same render.\n const [exceededAt, setExceededAt] = useState<number | null>(\n exceeded ? timeElapsed : null\n );\n if (exceeded && exceededAt === null) setExceededAt(timeElapsed);\n if (!exceeded && exceededAt !== null) setExceededAt(null);\n const warningStartedAt = exceeded ? (exceededAt ?? timeElapsed) : null;\n\n // Derived from the elapsed time snapped to the announce interval, so the\n // live region text (and therefore the announcement) only changes once per\n // interval, or when the time becomes exceeded.\n const snappedSeconds =\n Math.floor(timeElapsed / TIMER_ANNOUNCE_INTERVAL_SECONDS) *\n TIMER_ANNOUNCE_INTERVAL_SECONDS;\n // When the warning starts between two boundaries, announce the actual\n // elapsed time at that moment instead of the stale boundary. It stays put\n // until the next boundary, so it is still announced only once.\n const announcedSeconds =\n warningStartedAt !== null && snappedSeconds < warningStartedAt\n ? warningStartedAt\n : snappedSeconds;\n const announcement =\n announcedSeconds > 0 || exceeded\n ? `Tempo de prova: ${formatTimeSpent(announcedSeconds)}${exceededSuffix}`\n : '';\n\n return (\n <>\n <div\n ref={ref}\n role=\"timer\"\n aria-live=\"off\"\n aria-label={`Tempo de prova: ${formatted}${exceededSuffix}`}\n className={cn(\n 'inline-flex flex-row items-center gap-1 tabular-nums',\n 'rounded-md border px-2 py-1',\n exceeded\n ? 'bg-error-background border-error-300 text-error-700'\n : 'bg-info border-info-300 text-info-800',\n className\n )}\n {...props}\n >\n <ClockIcon\n size={16}\n weight={exceeded ? 'fill' : 'regular'}\n aria-hidden=\"true\"\n />\n <Text as=\"span\" size=\"sm\" weight=\"medium\" color=\"\" aria-hidden=\"true\">\n {formatted}\n </Text>\n </div>\n <span\n className=\"sr-only\"\n aria-live=\"polite\"\n data-testid=\"quiz-timer-announcement\"\n >\n {announcement}\n </span>\n </>\n );\n }\n);\n\nQuizTimer.displayName = 'QuizTimer';\n\nexport default QuizTimer;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } 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
|
|
4
|
+
var _chunkNZX3BA62js = require('./chunk-NZX3BA62.js');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
var _chunkD4BRJ4ZNjs = require('./chunk-D4BRJ4ZN.js');
|
|
@@ -3100,7 +3100,7 @@ function MathNodeView({ node, editor, getPos }) {
|
|
|
3100
3100
|
displayMode: display
|
|
3101
3101
|
});
|
|
3102
3102
|
} catch (e2) {
|
|
3103
|
-
return `<span class="text-error-600">${
|
|
3103
|
+
return `<span class="text-error-600">${_chunkNZX3BA62js.escapeHtmlText.call(void 0, latex)}</span>`;
|
|
3104
3104
|
}
|
|
3105
3105
|
}, [latex, display]);
|
|
3106
3106
|
const handleClick = () => {
|
|
@@ -3220,7 +3220,7 @@ var MathNode = _core.Node.create({
|
|
|
3220
3220
|
new Plugin({
|
|
3221
3221
|
key: new PluginKey("mathInlinePaste"),
|
|
3222
3222
|
props: {
|
|
3223
|
-
transformPastedHTML: (html) =>
|
|
3223
|
+
transformPastedHTML: (html) => _chunkNZX3BA62js.processLatexInHtml.call(void 0, html),
|
|
3224
3224
|
handlePaste: (_view, event) => {
|
|
3225
3225
|
const clipboard = event.clipboardData;
|
|
3226
3226
|
if (!clipboard || clipboard.getData("text/html")) return false;
|
|
@@ -3228,8 +3228,8 @@ var MathNode = _core.Node.create({
|
|
|
3228
3228
|
if (!text || !(text.includes("$") || text.includes(String.raw`\begin{`))) {
|
|
3229
3229
|
return false;
|
|
3230
3230
|
}
|
|
3231
|
-
const html =
|
|
3232
|
-
_chunkD4BRJ4ZNjs.normalizeLineBreaksInHtml.call(void 0,
|
|
3231
|
+
const html = _chunkNZX3BA62js.processLatexInHtml.call(void 0,
|
|
3232
|
+
_chunkD4BRJ4ZNjs.normalizeLineBreaksInHtml.call(void 0, _chunkNZX3BA62js.escapeHtmlText.call(void 0, text), { inline: true })
|
|
3233
3233
|
);
|
|
3234
3234
|
if (!html.includes(`data-type="${_chunkOLZ65XLFjs.MATH_SPAN_TYPE}"`)) return false;
|
|
3235
3235
|
editor.commands.insertContent(html);
|
|
@@ -3292,4 +3292,4 @@ var MathNode = _core.Node.create({
|
|
|
3292
3292
|
|
|
3293
3293
|
|
|
3294
3294
|
exports.MathNode = MathNode;
|
|
3295
|
-
//# sourceMappingURL=chunk-
|
|
3295
|
+
//# sourceMappingURL=chunk-QZ5DCDZ2.js.map
|