analytica-frontend-lib 1.7.21 → 1.7.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/dist/AccessReportModal/index.js +3 -3
  2. package/dist/AccessReportModal/index.mjs +2 -2
  3. package/dist/ActivitiesHistory/index.js +49 -49
  4. package/dist/ActivitiesHistory/index.mjs +48 -48
  5. package/dist/ActivityCardQuestionBanks/index.js +49 -49
  6. package/dist/ActivityCardQuestionBanks/index.mjs +48 -48
  7. package/dist/ActivityCardQuestionPreview/index.js +49 -49
  8. package/dist/ActivityCardQuestionPreview/index.mjs +48 -48
  9. package/dist/ActivityCreate/ActivityCreateContent/index.js +49 -49
  10. package/dist/ActivityCreate/ActivityCreateContent/index.mjs +48 -48
  11. package/dist/ActivityCreate/index.js +49 -49
  12. package/dist/ActivityCreate/index.mjs +48 -48
  13. package/dist/ActivityDetails/index.js +49 -49
  14. package/dist/ActivityDetails/index.mjs +48 -48
  15. package/dist/ActivityFilters/index.js +49 -49
  16. package/dist/ActivityFilters/index.mjs +48 -48
  17. package/dist/ActivityPageLayout/index.js +49 -49
  18. package/dist/ActivityPageLayout/index.mjs +48 -48
  19. package/dist/ActivityPreview/index.js +49 -49
  20. package/dist/ActivityPreview/index.mjs +48 -48
  21. package/dist/AlertManager/index.js +49 -49
  22. package/dist/AlertManager/index.mjs +48 -48
  23. package/dist/AlertManagerView/index.js +3 -3
  24. package/dist/AlertManagerView/index.mjs +2 -2
  25. package/dist/AnnouncementModal/index.js +3 -3
  26. package/dist/AnnouncementModal/index.mjs +2 -2
  27. package/dist/AnnouncementsGate/index.js +4 -4
  28. package/dist/AnnouncementsGate/index.mjs +3 -3
  29. package/dist/AnswerKeyModal/index.js +3 -3
  30. package/dist/AnswerKeyModal/index.mjs +2 -2
  31. package/dist/AppHeader/index.js +6 -6
  32. package/dist/AppHeader/index.mjs +5 -5
  33. package/dist/CalendarCard/index.js +4 -4
  34. package/dist/CalendarCard/index.mjs +3 -3
  35. package/dist/Chat/index.js +3 -3
  36. package/dist/Chat/index.mjs +2 -2
  37. package/dist/CheckBox/index.d.ts.map +1 -1
  38. package/dist/CheckBox/index.js +2 -2
  39. package/dist/CheckBox/index.mjs +1 -1
  40. package/dist/CheckBoxGroup/index.js +49 -49
  41. package/dist/CheckBoxGroup/index.mjs +48 -48
  42. package/dist/ComparatorChart/ComparatorView/index.js +3 -3
  43. package/dist/ComparatorChart/ComparatorView/index.mjs +2 -2
  44. package/dist/CorrectActivityModal/index.js +7 -7
  45. package/dist/CorrectActivityModal/index.mjs +6 -6
  46. package/dist/DownloadButton/index.js +4 -4
  47. package/dist/DownloadButton/index.mjs +3 -3
  48. package/dist/DownloadModal/index.js +3 -3
  49. package/dist/DownloadModal/index.mjs +2 -2
  50. package/dist/DropdownMenu/index.js +3 -3
  51. package/dist/DropdownMenu/index.mjs +2 -2
  52. package/dist/EnemClassroomStartModal/index.d.ts.map +1 -1
  53. package/dist/EnemClassroomStartModal/index.js +7 -7
  54. package/dist/EnemClassroomStartModal/index.mjs +6 -6
  55. package/dist/EnemMoment/index.js +57 -57
  56. package/dist/EnemMoment/index.mjs +51 -51
  57. package/dist/EnemMomentStudentModal/index.js +50 -50
  58. package/dist/EnemMomentStudentModal/index.mjs +48 -48
  59. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js +49 -49
  60. package/dist/ExamDetailsLayout/ExamDetailsPage/index.mjs +48 -48
  61. package/dist/ExamPageLayout/index.js +49 -49
  62. package/dist/ExamPageLayout/index.mjs +48 -48
  63. package/dist/Forum/index.js +5 -5
  64. package/dist/Forum/index.mjs +4 -4
  65. package/dist/KnowledgePerformanceCard/index.js +51 -51
  66. package/dist/KnowledgePerformanceCard/index.mjs +50 -50
  67. package/dist/LessonCardPreview/index.js +49 -49
  68. package/dist/LessonCardPreview/index.mjs +48 -48
  69. package/dist/LessonMediaSections/index.js +49 -49
  70. package/dist/LessonMediaSections/index.mjs +48 -48
  71. package/dist/LessonsCatalog/index.js +49 -49
  72. package/dist/LessonsCatalog/index.mjs +48 -48
  73. package/dist/Modal/index.d.ts.map +1 -1
  74. package/dist/Modal/index.js +2 -2
  75. package/dist/Modal/index.mjs +1 -1
  76. package/dist/MultiCheckSelect/index.js +5 -5
  77. package/dist/MultiCheckSelect/index.mjs +4 -4
  78. package/dist/MultiSearchSelect/index.js +3 -3
  79. package/dist/MultiSearchSelect/index.mjs +2 -2
  80. package/dist/MultipleChoice/index.js +3 -3
  81. package/dist/MultipleChoice/index.mjs +2 -2
  82. package/dist/NotificationCard/index.js +4 -4
  83. package/dist/NotificationCard/index.mjs +3 -3
  84. package/dist/PerformanceReportModal/index.js +3 -3
  85. package/dist/PerformanceReportModal/index.mjs +2 -2
  86. package/dist/PrintableUsersTable/index.js +49 -49
  87. package/dist/PrintableUsersTable/index.mjs +48 -48
  88. package/dist/ProgressModal/index.js +3 -3
  89. package/dist/ProgressModal/index.mjs +2 -2
  90. package/dist/QuestionsPerformanceCard/index.js +50 -50
  91. package/dist/QuestionsPerformanceCard/index.mjs +49 -49
  92. package/dist/Quiz/index.js +6 -6
  93. package/dist/Quiz/index.mjs +5 -5
  94. package/dist/RecommendedLessonCreate/index.js +49 -49
  95. package/dist/RecommendedLessonCreate/index.mjs +48 -48
  96. package/dist/RecommendedLessonDetails/index.js +7 -7
  97. package/dist/RecommendedLessonDetails/index.mjs +6 -6
  98. package/dist/RecommendedLessonsHistory/index.js +49 -49
  99. package/dist/RecommendedLessonsHistory/index.mjs +48 -48
  100. package/dist/ReportDetailModal/index.js +4 -4
  101. package/dist/ReportDetailModal/index.mjs +3 -3
  102. package/dist/RichEditor/index.js +5 -5
  103. package/dist/RichEditor/index.mjs +4 -4
  104. package/dist/{RichEditorCore-6MTYSSKS.mjs → RichEditorCore-2S5YUAOI.mjs} +5 -5
  105. package/dist/{RichEditorCore-KDARBEK4.js → RichEditorCore-N7A2445B.js} +16 -16
  106. package/dist/{RichEditorCore-KDARBEK4.js.map → RichEditorCore-N7A2445B.js.map} +1 -1
  107. package/dist/Search/index.js +4 -4
  108. package/dist/Search/index.mjs +3 -3
  109. package/dist/SendActivityModal/SendActivityModal.js +49 -49
  110. package/dist/SendActivityModal/SendActivityModal.mjs +48 -48
  111. package/dist/SendActivityModal/index.js +49 -49
  112. package/dist/SendActivityModal/index.mjs +48 -48
  113. package/dist/SendLessonModal/index.js +49 -49
  114. package/dist/SendLessonModal/index.mjs +48 -48
  115. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js +49 -49
  116. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.mjs +48 -48
  117. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js +5 -5
  118. package/dist/SimulatedPerformance/useSimulatedPerformance/index.mjs +4 -4
  119. package/dist/SimulatedStudentSimulationsModal/index.js +6 -6
  120. package/dist/SimulatedStudentSimulationsModal/index.mjs +5 -5
  121. package/dist/SimulationsPage/index.js +49 -49
  122. package/dist/SimulationsPage/index.mjs +48 -48
  123. package/dist/StudentLessonProgressModal/index.js +3 -3
  124. package/dist/StudentLessonProgressModal/index.mjs +2 -2
  125. package/dist/StudentPerformanceDetailsModal/index.js +5 -5
  126. package/dist/StudentPerformanceDetailsModal/index.mjs +4 -4
  127. package/dist/Support/TicketModal/index.js +3 -3
  128. package/dist/Support/TicketModal/index.mjs +2 -2
  129. package/dist/Support/index.js +4 -4
  130. package/dist/Support/index.mjs +3 -3
  131. package/dist/SupportChatComposer/index.js +3 -3
  132. package/dist/SupportChatComposer/index.mjs +2 -2
  133. package/dist/SupportChatEvent/index.js +3 -3
  134. package/dist/SupportChatEvent/index.mjs +2 -2
  135. package/dist/SupportChatMessage/index.js +3 -3
  136. package/dist/SupportChatMessage/index.mjs +2 -2
  137. package/dist/SupportChatWidget/index.js +3 -3
  138. package/dist/SupportChatWidget/index.mjs +2 -2
  139. package/dist/SupportConcludeModal/index.js +4 -4
  140. package/dist/SupportConcludeModal/index.mjs +3 -3
  141. package/dist/SupportConversationHeader/index.js +4 -4
  142. package/dist/SupportConversationHeader/index.mjs +3 -3
  143. package/dist/SupportConversationMessages/index.js +5 -5
  144. package/dist/SupportConversationMessages/index.mjs +4 -4
  145. package/dist/SupportTicketConversation/index.js +12 -12
  146. package/dist/SupportTicketConversation/index.mjs +11 -11
  147. package/dist/TableProvider/index.js +49 -49
  148. package/dist/TableProvider/index.mjs +48 -48
  149. package/dist/UnifiedDraftModelPage/index.js +49 -49
  150. package/dist/UnifiedDraftModelPage/index.mjs +48 -48
  151. package/dist/UnifiedHistoryPage/index.js +49 -49
  152. package/dist/UnifiedHistoryPage/index.mjs +48 -48
  153. package/dist/VideoPlayer/index.js +5 -5
  154. package/dist/VideoPlayer/index.mjs +4 -4
  155. package/dist/Whiteboard/index.js +3 -3
  156. package/dist/Whiteboard/index.mjs +2 -2
  157. package/dist/{chunk-B6QOBHZM.mjs → chunk-24BEZK43.mjs} +2 -2
  158. package/dist/{chunk-CYSODZGX.js → chunk-27Y6V3GM.js} +169 -66
  159. package/dist/chunk-27Y6V3GM.js.map +1 -0
  160. package/dist/{chunk-OQTXTDSK.mjs → chunk-2OJ3QSLU.mjs} +3 -3
  161. package/dist/{chunk-VDUO65VK.mjs → chunk-3EGJJDIM.mjs} +2 -2
  162. package/dist/{chunk-VDUO65VK.mjs.map → chunk-3EGJJDIM.mjs.map} +1 -1
  163. package/dist/{chunk-4OUBPEVS.mjs → chunk-3HKLGNUE.mjs} +3 -3
  164. package/dist/{chunk-YA7XLH7D.js → chunk-3MFACEZ2.js} +3 -3
  165. package/dist/{chunk-YA7XLH7D.js.map → chunk-3MFACEZ2.js.map} +1 -1
  166. package/dist/{chunk-IHBWJM4C.mjs → chunk-3Q7RJKUP.mjs} +2 -2
  167. package/dist/{chunk-PY6WD6SB.mjs → chunk-3WRB4WCD.mjs} +4 -4
  168. package/dist/{chunk-4RHCBMMP.js → chunk-46VHAL4S.js} +3 -3
  169. package/dist/{chunk-4RHCBMMP.js.map → chunk-46VHAL4S.js.map} +1 -1
  170. package/dist/{chunk-POT3ALY3.js → chunk-5DINXU6W.js} +1 -1
  171. package/dist/{chunk-POT3ALY3.js.map → chunk-5DINXU6W.js.map} +1 -1
  172. package/dist/{chunk-L52NFNFK.mjs → chunk-5VC4BK65.mjs} +3 -3
  173. package/dist/{chunk-B67RLIUM.js → chunk-72D7G6YQ.js} +3 -3
  174. package/dist/{chunk-B67RLIUM.js.map → chunk-72D7G6YQ.js.map} +1 -1
  175. package/dist/{chunk-C65DG2RI.mjs → chunk-7FSBWUOM.mjs} +2 -2
  176. package/dist/{chunk-QWMFWYII.js → chunk-7IZNLARX.js} +3 -3
  177. package/dist/{chunk-QWMFWYII.js.map → chunk-7IZNLARX.js.map} +1 -1
  178. package/dist/{chunk-ZCBT2BUZ.js → chunk-7RFHXFFV.js} +13 -13
  179. package/dist/{chunk-ZCBT2BUZ.js.map → chunk-7RFHXFFV.js.map} +1 -1
  180. package/dist/{chunk-EMWX6IKP.js → chunk-7VJP5D26.js} +13 -13
  181. package/dist/{chunk-EMWX6IKP.js.map → chunk-7VJP5D26.js.map} +1 -1
  182. package/dist/{chunk-HCQJR5CE.mjs → chunk-7ZWEBNFB.mjs} +2 -2
  183. package/dist/{chunk-3RHNJUXU.mjs → chunk-ACSEJOW6.mjs} +2 -2
  184. package/dist/{chunk-WQZHUW7C.mjs → chunk-ANFHLSDB.mjs} +3 -3
  185. package/dist/{chunk-H6NQOLQY.mjs → chunk-ANFLWCVD.mjs} +2 -2
  186. package/dist/{chunk-BKBDQXZX.js → chunk-AOYPUZRO.js} +3 -3
  187. package/dist/{chunk-BKBDQXZX.js.map → chunk-AOYPUZRO.js.map} +1 -1
  188. package/dist/{chunk-5WS6IENQ.mjs → chunk-AU2HLQDJ.mjs} +2 -2
  189. package/dist/{chunk-P6FX3NT6.mjs → chunk-AZGDHAP5.mjs} +2 -2
  190. package/dist/{chunk-NCGO7FPB.js → chunk-AZKNYREH.js} +8 -8
  191. package/dist/{chunk-NCGO7FPB.js.map → chunk-AZKNYREH.js.map} +1 -1
  192. package/dist/{chunk-R6MTPYYW.js → chunk-AZTBNERQ.js} +3 -3
  193. package/dist/{chunk-R6MTPYYW.js.map → chunk-AZTBNERQ.js.map} +1 -1
  194. package/dist/{chunk-NPB2JTYC.mjs → chunk-BO3QVQ37.mjs} +4 -4
  195. package/dist/{chunk-2WI4Q2I2.mjs → chunk-BPMWRFSI.mjs} +4 -4
  196. package/dist/{chunk-TEW33GLR.mjs → chunk-BXN3VO6I.mjs} +2 -2
  197. package/dist/{chunk-7ZB3YHF2.mjs → chunk-C6LC5LD5.mjs} +1 -1
  198. package/dist/{chunk-7ZB3YHF2.mjs.map → chunk-C6LC5LD5.mjs.map} +1 -1
  199. package/dist/{chunk-5HONWYQA.js → chunk-C7ILTLT5.js} +3 -3
  200. package/dist/{chunk-5HONWYQA.js.map → chunk-C7ILTLT5.js.map} +1 -1
  201. package/dist/{chunk-OES54VU6.mjs → chunk-CFV2OZ3P.mjs} +116 -13
  202. package/dist/chunk-CFV2OZ3P.mjs.map +1 -0
  203. package/dist/{chunk-4OVIHZ3I.js → chunk-CGXWWPEA.js} +6 -6
  204. package/dist/{chunk-4OVIHZ3I.js.map → chunk-CGXWWPEA.js.map} +1 -1
  205. package/dist/{chunk-MNU45FM3.js → chunk-COT4KW3H.js} +2 -2
  206. package/dist/{chunk-MNU45FM3.js.map → chunk-COT4KW3H.js.map} +1 -1
  207. package/dist/{chunk-JDQUXG75.js → chunk-CVDNCU6L.js} +3 -3
  208. package/dist/{chunk-JDQUXG75.js.map → chunk-CVDNCU6L.js.map} +1 -1
  209. package/dist/{chunk-HBZHWSMZ.mjs → chunk-D46PJSQ7.mjs} +13 -13
  210. package/dist/{chunk-ARYIJ4RU.js → chunk-DDORKDQO.js} +3 -3
  211. package/dist/{chunk-ARYIJ4RU.js.map → chunk-DDORKDQO.js.map} +1 -1
  212. package/dist/{chunk-7YQTDJFA.js → chunk-DKXSR2V3.js} +3 -3
  213. package/dist/{chunk-7YQTDJFA.js.map → chunk-DKXSR2V3.js.map} +1 -1
  214. package/dist/{chunk-I6EAPPBL.mjs → chunk-DZMYIOKZ.mjs} +5 -5
  215. package/dist/{chunk-SKM7NFPY.js → chunk-EPXAFJVW.js} +6 -6
  216. package/dist/{chunk-SKM7NFPY.js.map → chunk-EPXAFJVW.js.map} +1 -1
  217. package/dist/{chunk-AYYMS23L.js → chunk-ESIQ2GB4.js} +7 -7
  218. package/dist/{chunk-AYYMS23L.js.map → chunk-ESIQ2GB4.js.map} +1 -1
  219. package/dist/{chunk-NU2WNYOD.js → chunk-EW7HGUFV.js} +87 -87
  220. package/dist/{chunk-NU2WNYOD.js.map → chunk-EW7HGUFV.js.map} +1 -1
  221. package/dist/{chunk-I4QGQMXI.mjs → chunk-EXYXZFNK.mjs} +2 -2
  222. package/dist/{chunk-RBJAO57A.js → chunk-FAAR4XC5.js} +3 -3
  223. package/dist/{chunk-RBJAO57A.js.map → chunk-FAAR4XC5.js.map} +1 -1
  224. package/dist/{chunk-N2VNE3ON.js → chunk-FDTDJDZI.js} +13 -13
  225. package/dist/{chunk-N2VNE3ON.js.map → chunk-FDTDJDZI.js.map} +1 -1
  226. package/dist/{chunk-SU5Q64TW.mjs → chunk-FVCTKS33.mjs} +6 -5
  227. package/dist/chunk-FVCTKS33.mjs.map +1 -0
  228. package/dist/{chunk-AVHZHWI3.js → chunk-GBIFSFWJ.js} +15 -15
  229. package/dist/{chunk-AVHZHWI3.js.map → chunk-GBIFSFWJ.js.map} +1 -1
  230. package/dist/{chunk-KSUPPAKH.js → chunk-GIQSHTB5.js} +9 -9
  231. package/dist/{chunk-KSUPPAKH.js.map → chunk-GIQSHTB5.js.map} +1 -1
  232. package/dist/{chunk-4QBKD4JN.js → chunk-GUUJYGXF.js} +3 -3
  233. package/dist/{chunk-4QBKD4JN.js.map → chunk-GUUJYGXF.js.map} +1 -1
  234. package/dist/{chunk-M4O46VDY.mjs → chunk-GX2PKLN2.mjs} +2 -2
  235. package/dist/{chunk-5BUTINIM.mjs → chunk-HLVLSWKD.mjs} +3 -3
  236. package/dist/{chunk-FU23WOTY.js → chunk-HSV5VZ4Z.js} +6 -6
  237. package/dist/{chunk-FU23WOTY.js.map → chunk-HSV5VZ4Z.js.map} +1 -1
  238. package/dist/{chunk-MMS2ELDK.mjs → chunk-IIQCS3A2.mjs} +2 -2
  239. package/dist/{chunk-NKWLCZUZ.mjs → chunk-JGGUMHM6.mjs} +2 -2
  240. package/dist/{chunk-HT2GREFH.js → chunk-JLD46DL7.js} +11 -11
  241. package/dist/{chunk-HT2GREFH.js.map → chunk-JLD46DL7.js.map} +1 -1
  242. package/dist/{chunk-NVL5TKWD.mjs → chunk-JYFLOQYT.mjs} +2 -2
  243. package/dist/{chunk-DWGDEUEW.mjs → chunk-KG563P7F.mjs} +5 -5
  244. package/dist/{chunk-TCIC5556.mjs → chunk-KH4TEDGD.mjs} +2 -2
  245. package/dist/{chunk-23PAYKWB.js → chunk-KM27ZDHZ.js} +2 -2
  246. package/dist/{chunk-23PAYKWB.js.map → chunk-KM27ZDHZ.js.map} +1 -1
  247. package/dist/{chunk-XZUMD3CB.mjs → chunk-LODDYDTP.mjs} +2 -2
  248. package/dist/{chunk-XZUMD3CB.mjs.map → chunk-LODDYDTP.mjs.map} +1 -1
  249. package/dist/{chunk-E6CGJBID.mjs → chunk-LUHKMY56.mjs} +2 -2
  250. package/dist/{chunk-TVLEUNKE.mjs → chunk-LZP5VZCO.mjs} +2 -2
  251. package/dist/{chunk-EHNEBXS7.mjs → chunk-M6DXZ2FM.mjs} +2 -2
  252. package/dist/{chunk-B4C5DWAP.mjs → chunk-MMMJDO75.mjs} +2 -2
  253. package/dist/{chunk-AFCWMJQO.js → chunk-MOUPNP53.js} +3 -3
  254. package/dist/{chunk-AFCWMJQO.js.map → chunk-MOUPNP53.js.map} +1 -1
  255. package/dist/{chunk-36KFIZ43.js → chunk-MYPUZ6EG.js} +3 -3
  256. package/dist/{chunk-36KFIZ43.js.map → chunk-MYPUZ6EG.js.map} +1 -1
  257. package/dist/{chunk-6JHIKIPA.js → chunk-NUGLTWEA.js} +23 -23
  258. package/dist/{chunk-6JHIKIPA.js.map → chunk-NUGLTWEA.js.map} +1 -1
  259. package/dist/{chunk-KWXOYHYK.mjs → chunk-P7MORXSE.mjs} +2 -2
  260. package/dist/{chunk-YG4IZ5Q3.mjs → chunk-Q2OSEROT.mjs} +2 -2
  261. package/dist/{chunk-L5SXG6T6.mjs → chunk-QQKOHKO2.mjs} +3 -3
  262. package/dist/{chunk-SADSJ2MV.js → chunk-QVGUYPXO.js} +3 -3
  263. package/dist/{chunk-SADSJ2MV.js.map → chunk-QVGUYPXO.js.map} +1 -1
  264. package/dist/{chunk-K45PTE7F.mjs → chunk-RBKQXT73.mjs} +4 -4
  265. package/dist/{chunk-JZFISWTP.js → chunk-RIN2IN7E.js} +2 -2
  266. package/dist/{chunk-JZFISWTP.js.map → chunk-RIN2IN7E.js.map} +1 -1
  267. package/dist/{chunk-BXLAOYAG.mjs → chunk-RIUVPTG7.mjs} +2 -2
  268. package/dist/{chunk-QVB54LBS.mjs → chunk-RNZGX6MX.mjs} +3 -3
  269. package/dist/{chunk-VSVLIRO2.js → chunk-RXEU77VN.js} +15 -15
  270. package/dist/{chunk-VSVLIRO2.js.map → chunk-RXEU77VN.js.map} +1 -1
  271. package/dist/{chunk-ZRIYCU2V.js → chunk-S2BZPPAI.js} +5 -5
  272. package/dist/{chunk-ZRIYCU2V.js.map → chunk-S2BZPPAI.js.map} +1 -1
  273. package/dist/{chunk-MES2BP4T.mjs → chunk-SGL5IUCV.mjs} +2 -2
  274. package/dist/{chunk-7LS5UQCQ.mjs → chunk-STKUPDHG.mjs} +2 -2
  275. package/dist/{chunk-PPYCCT2K.js → chunk-SWDVSCQJ.js} +9 -8
  276. package/dist/chunk-SWDVSCQJ.js.map +1 -0
  277. package/dist/{chunk-JCA76TCX.mjs → chunk-SZKLJOTN.mjs} +2 -2
  278. package/dist/{chunk-F5WR6XZZ.js → chunk-T73HPYF2.js} +3 -3
  279. package/dist/{chunk-F5WR6XZZ.js.map → chunk-T73HPYF2.js.map} +1 -1
  280. package/dist/{chunk-ZB6HDDE4.js → chunk-TQO37PVW.js} +14 -14
  281. package/dist/{chunk-ZB6HDDE4.js.map → chunk-TQO37PVW.js.map} +1 -1
  282. package/dist/{chunk-VKQ5AJDT.mjs → chunk-UENZQF2Y.mjs} +2 -2
  283. package/dist/{chunk-DCG7EUBC.js → chunk-UWLW5YVB.js} +6 -6
  284. package/dist/{chunk-DCG7EUBC.js.map → chunk-UWLW5YVB.js.map} +1 -1
  285. package/dist/{chunk-37AJ2GVO.mjs → chunk-UXJIZDXQ.mjs} +2 -2
  286. package/dist/{chunk-PLLPFCN3.js → chunk-UXMDPRAI.js} +14 -14
  287. package/dist/{chunk-PLLPFCN3.js.map → chunk-UXMDPRAI.js.map} +1 -1
  288. package/dist/{chunk-7BOTKRY6.mjs → chunk-V55DG5B4.mjs} +2 -2
  289. package/dist/{chunk-YRTIDZTN.js → chunk-VHEDMUAW.js} +4 -4
  290. package/dist/{chunk-YRTIDZTN.js.map → chunk-VHEDMUAW.js.map} +1 -1
  291. package/dist/{chunk-4RD55E4R.js → chunk-VWLWSO4J.js} +3 -3
  292. package/dist/{chunk-4RD55E4R.js.map → chunk-VWLWSO4J.js.map} +1 -1
  293. package/dist/{chunk-VJQIKFMG.mjs → chunk-W3CWEZDB.mjs} +3 -3
  294. package/dist/{chunk-JM6SLU7D.js → chunk-W7NNH4VY.js} +6 -6
  295. package/dist/{chunk-JM6SLU7D.js.map → chunk-W7NNH4VY.js.map} +1 -1
  296. package/dist/{chunk-VQ7MSYIH.js → chunk-WUN5NHZE.js} +4 -4
  297. package/dist/{chunk-VQ7MSYIH.js.map → chunk-WUN5NHZE.js.map} +1 -1
  298. package/dist/{chunk-AAU7ABJN.js → chunk-WWTRSQ3X.js} +3 -3
  299. package/dist/{chunk-AAU7ABJN.js.map → chunk-WWTRSQ3X.js.map} +1 -1
  300. package/dist/{chunk-BR6D2TGF.js → chunk-WZOA2PVJ.js} +3 -3
  301. package/dist/{chunk-BR6D2TGF.js.map → chunk-WZOA2PVJ.js.map} +1 -1
  302. package/dist/{chunk-TZKR5Z4J.mjs → chunk-XJF2F36N.mjs} +2 -2
  303. package/dist/{chunk-P6ACVNQK.mjs → chunk-YD2XBEKO.mjs} +2 -2
  304. package/dist/{chunk-LMXWIPGR.js → chunk-YWPLHFAK.js} +3 -3
  305. package/dist/{chunk-LMXWIPGR.js.map → chunk-YWPLHFAK.js.map} +1 -1
  306. package/dist/{chunk-DCEWWHV5.mjs → chunk-Z3HGYPH7.mjs} +2 -2
  307. package/dist/{chunk-Q3PKW6TH.js → chunk-ZCV3HWI2.js} +6 -6
  308. package/dist/{chunk-Q3PKW6TH.js.map → chunk-ZCV3HWI2.js.map} +1 -1
  309. package/dist/{chunk-OSA3YVDZ.mjs → chunk-ZF46DCAC.mjs} +2 -2
  310. package/dist/{chunk-5T6IDXSB.js → chunk-ZO2GA23I.js} +3 -3
  311. package/dist/{chunk-5T6IDXSB.js.map → chunk-ZO2GA23I.js.map} +1 -1
  312. package/dist/{chunk-ZN3763VZ.js → chunk-ZQLW4EJB.js} +9 -9
  313. package/dist/{chunk-ZN3763VZ.js.map → chunk-ZQLW4EJB.js.map} +1 -1
  314. package/dist/{chunk-CM5R4SPF.js → chunk-ZQQJTO6T.js} +3 -3
  315. package/dist/{chunk-CM5R4SPF.js.map → chunk-ZQQJTO6T.js.map} +1 -1
  316. package/dist/{chunk-SEL4QDCO.js → chunk-ZSXSAE3D.js} +3 -3
  317. package/dist/{chunk-SEL4QDCO.js.map → chunk-ZSXSAE3D.js.map} +1 -1
  318. package/dist/components/SupportChatWidget/guestSupportChatAdapter.d.ts +6 -1
  319. package/dist/components/SupportChatWidget/guestSupportChatAdapter.d.ts.map +1 -1
  320. package/dist/hooks/useAppContent/index.js +49 -49
  321. package/dist/hooks/useAppContent/index.mjs +48 -48
  322. package/dist/hooks/useSupportChat.d.ts +2 -0
  323. package/dist/hooks/useSupportChat.d.ts.map +1 -1
  324. package/dist/index.js +49 -49
  325. package/dist/index.mjs +48 -48
  326. package/dist/types/supportChat/index.d.ts +14 -0
  327. package/dist/types/supportChat/index.d.ts.map +1 -1
  328. package/dist/types/supportChat/index.js +2 -2
  329. package/dist/types/supportChat/index.mjs +1 -1
  330. package/dist/types/supportChat.d.ts +14 -0
  331. package/dist/types/supportChat.d.ts.map +1 -1
  332. package/package.json +1 -1
  333. package/dist/chunk-CYSODZGX.js.map +0 -1
  334. package/dist/chunk-OES54VU6.mjs.map +0 -1
  335. package/dist/chunk-PPYCCT2K.js.map +0 -1
  336. package/dist/chunk-SU5Q64TW.mjs.map +0 -1
  337. /package/dist/{RichEditorCore-6MTYSSKS.mjs.map → RichEditorCore-2S5YUAOI.mjs.map} +0 -0
  338. /package/dist/{chunk-B6QOBHZM.mjs.map → chunk-24BEZK43.mjs.map} +0 -0
  339. /package/dist/{chunk-OQTXTDSK.mjs.map → chunk-2OJ3QSLU.mjs.map} +0 -0
  340. /package/dist/{chunk-4OUBPEVS.mjs.map → chunk-3HKLGNUE.mjs.map} +0 -0
  341. /package/dist/{chunk-IHBWJM4C.mjs.map → chunk-3Q7RJKUP.mjs.map} +0 -0
  342. /package/dist/{chunk-PY6WD6SB.mjs.map → chunk-3WRB4WCD.mjs.map} +0 -0
  343. /package/dist/{chunk-L52NFNFK.mjs.map → chunk-5VC4BK65.mjs.map} +0 -0
  344. /package/dist/{chunk-C65DG2RI.mjs.map → chunk-7FSBWUOM.mjs.map} +0 -0
  345. /package/dist/{chunk-HCQJR5CE.mjs.map → chunk-7ZWEBNFB.mjs.map} +0 -0
  346. /package/dist/{chunk-3RHNJUXU.mjs.map → chunk-ACSEJOW6.mjs.map} +0 -0
  347. /package/dist/{chunk-WQZHUW7C.mjs.map → chunk-ANFHLSDB.mjs.map} +0 -0
  348. /package/dist/{chunk-H6NQOLQY.mjs.map → chunk-ANFLWCVD.mjs.map} +0 -0
  349. /package/dist/{chunk-5WS6IENQ.mjs.map → chunk-AU2HLQDJ.mjs.map} +0 -0
  350. /package/dist/{chunk-P6FX3NT6.mjs.map → chunk-AZGDHAP5.mjs.map} +0 -0
  351. /package/dist/{chunk-NPB2JTYC.mjs.map → chunk-BO3QVQ37.mjs.map} +0 -0
  352. /package/dist/{chunk-2WI4Q2I2.mjs.map → chunk-BPMWRFSI.mjs.map} +0 -0
  353. /package/dist/{chunk-TEW33GLR.mjs.map → chunk-BXN3VO6I.mjs.map} +0 -0
  354. /package/dist/{chunk-HBZHWSMZ.mjs.map → chunk-D46PJSQ7.mjs.map} +0 -0
  355. /package/dist/{chunk-I6EAPPBL.mjs.map → chunk-DZMYIOKZ.mjs.map} +0 -0
  356. /package/dist/{chunk-I4QGQMXI.mjs.map → chunk-EXYXZFNK.mjs.map} +0 -0
  357. /package/dist/{chunk-M4O46VDY.mjs.map → chunk-GX2PKLN2.mjs.map} +0 -0
  358. /package/dist/{chunk-5BUTINIM.mjs.map → chunk-HLVLSWKD.mjs.map} +0 -0
  359. /package/dist/{chunk-MMS2ELDK.mjs.map → chunk-IIQCS3A2.mjs.map} +0 -0
  360. /package/dist/{chunk-NKWLCZUZ.mjs.map → chunk-JGGUMHM6.mjs.map} +0 -0
  361. /package/dist/{chunk-NVL5TKWD.mjs.map → chunk-JYFLOQYT.mjs.map} +0 -0
  362. /package/dist/{chunk-DWGDEUEW.mjs.map → chunk-KG563P7F.mjs.map} +0 -0
  363. /package/dist/{chunk-TCIC5556.mjs.map → chunk-KH4TEDGD.mjs.map} +0 -0
  364. /package/dist/{chunk-E6CGJBID.mjs.map → chunk-LUHKMY56.mjs.map} +0 -0
  365. /package/dist/{chunk-TVLEUNKE.mjs.map → chunk-LZP5VZCO.mjs.map} +0 -0
  366. /package/dist/{chunk-EHNEBXS7.mjs.map → chunk-M6DXZ2FM.mjs.map} +0 -0
  367. /package/dist/{chunk-B4C5DWAP.mjs.map → chunk-MMMJDO75.mjs.map} +0 -0
  368. /package/dist/{chunk-KWXOYHYK.mjs.map → chunk-P7MORXSE.mjs.map} +0 -0
  369. /package/dist/{chunk-YG4IZ5Q3.mjs.map → chunk-Q2OSEROT.mjs.map} +0 -0
  370. /package/dist/{chunk-L5SXG6T6.mjs.map → chunk-QQKOHKO2.mjs.map} +0 -0
  371. /package/dist/{chunk-K45PTE7F.mjs.map → chunk-RBKQXT73.mjs.map} +0 -0
  372. /package/dist/{chunk-BXLAOYAG.mjs.map → chunk-RIUVPTG7.mjs.map} +0 -0
  373. /package/dist/{chunk-QVB54LBS.mjs.map → chunk-RNZGX6MX.mjs.map} +0 -0
  374. /package/dist/{chunk-MES2BP4T.mjs.map → chunk-SGL5IUCV.mjs.map} +0 -0
  375. /package/dist/{chunk-7LS5UQCQ.mjs.map → chunk-STKUPDHG.mjs.map} +0 -0
  376. /package/dist/{chunk-JCA76TCX.mjs.map → chunk-SZKLJOTN.mjs.map} +0 -0
  377. /package/dist/{chunk-VKQ5AJDT.mjs.map → chunk-UENZQF2Y.mjs.map} +0 -0
  378. /package/dist/{chunk-37AJ2GVO.mjs.map → chunk-UXJIZDXQ.mjs.map} +0 -0
  379. /package/dist/{chunk-7BOTKRY6.mjs.map → chunk-V55DG5B4.mjs.map} +0 -0
  380. /package/dist/{chunk-VJQIKFMG.mjs.map → chunk-W3CWEZDB.mjs.map} +0 -0
  381. /package/dist/{chunk-TZKR5Z4J.mjs.map → chunk-XJF2F36N.mjs.map} +0 -0
  382. /package/dist/{chunk-P6ACVNQK.mjs.map → chunk-YD2XBEKO.mjs.map} +0 -0
  383. /package/dist/{chunk-DCEWWHV5.mjs.map → chunk-Z3HGYPH7.mjs.map} +0 -0
  384. /package/dist/{chunk-OSA3YVDZ.mjs.map → chunk-ZF46DCAC.mjs.map} +0 -0
@@ -1,18 +1,18 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkFU23WOTYjs = require('./chunk-FU23WOTY.js');
3
+ var _chunkHSV5VZ4Zjs = require('./chunk-HSV5VZ4Z.js');
4
4
 
5
5
 
6
6
  var _chunkJPO6L6NEjs = require('./chunk-JPO6L6NE.js');
7
7
 
8
8
 
9
- var _chunkSKM7NFPYjs = require('./chunk-SKM7NFPY.js');
9
+ var _chunkEPXAFJVWjs = require('./chunk-EPXAFJVW.js');
10
10
 
11
11
 
12
- var _chunkVSVLIRO2js = require('./chunk-VSVLIRO2.js');
12
+ var _chunkRXEU77VNjs = require('./chunk-RXEU77VN.js');
13
13
 
14
14
 
15
- var _chunk4OVIHZ3Ijs = require('./chunk-4OVIHZ3I.js');
15
+ var _chunkCGXWWPEAjs = require('./chunk-CGXWWPEA.js');
16
16
 
17
17
 
18
18
  var _chunkXN2HPVVHjs = require('./chunk-XN2HPVVH.js');
@@ -58,9 +58,9 @@ function SupportTicketConversation({
58
58
  "data-testid": "support-ticket-conversation",
59
59
  className: _chunkTN3AYOMVjs.cn.call(void 0, "flex h-full min-h-0 min-w-0 flex-1 flex-col", className),
60
60
  children: [
61
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkSKM7NFPYjs.SupportConversationHeader, { ...header, actions }),
61
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkEPXAFJVWjs.SupportConversationHeader, { ...header, actions }),
62
62
  banner && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-6 pt-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJPO6L6NEjs.SupportStatusBanner, { ...banner }) }),
63
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVSVLIRO2js.SupportConversationMessages, { ...messages }),
63
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRXEU77VNjs.SupportConversationMessages, { ...messages }),
64
64
  alert && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
65
65
  _chunkANT66KVKjs.Text_default,
66
66
  {
@@ -89,9 +89,9 @@ function SupportTicketConversation({
89
89
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", color: "text-text-600", children: lockedMessage })
90
90
  ]
91
91
  }
92
- ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFU23WOTYjs.SupportChatComposer_default, { ...composer }) }),
92
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHSV5VZ4Zjs.SupportChatComposer_default, { ...composer }) }),
93
93
  conclude && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
94
- _chunk4OVIHZ3Ijs.SupportConcludeModal,
94
+ _chunkCGXWWPEAjs.SupportConcludeModal,
95
95
  {
96
96
  ...conclude,
97
97
  isOpen: isConcludeOpen,
@@ -106,4 +106,4 @@ function SupportTicketConversation({
106
106
 
107
107
 
108
108
  exports.SupportTicketConversation = SupportTicketConversation;
109
- //# sourceMappingURL=chunk-KSUPPAKH.js.map
109
+ //# sourceMappingURL=chunk-GIQSHTB5.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-KSUPPAKH.js","../src/components/SupportConversation/SupportTicketConversation.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-KSUPPAKH.js","sourcesContent":[null,"import { useState } from 'react';\nimport { LockSimpleIcon } from '@phosphor-icons/react/dist/csr/LockSimple';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport SupportConcludeModal, {\n type SupportConcludeModalProps,\n} from '../SupportConcludeModal/SupportConcludeModal';\nimport SupportChatComposer, {\n type SupportChatComposerProps,\n} from '../SupportChat/SupportChatComposer';\nimport SupportConversationHeader, {\n type SupportConversationHeaderProps,\n} from './SupportConversationHeader';\nimport SupportStatusBanner, {\n type SupportStatusBannerProps,\n} from './SupportStatusBanner';\nimport SupportConversationMessages, {\n type SupportConversationMessagesProps,\n} from './SupportConversationMessages';\nimport { cn } from '../../utils/utils';\n\n/**\n * Props of the SupportTicketConversation component\n */\nexport interface SupportTicketConversationProps {\n /** Header: code, name, status, \"Atendido por\", channel and details toggle */\n header: SupportConversationHeaderProps;\n /** Fixed notice on top of the timeline; omit or null to hide it */\n banner?: SupportStatusBannerProps | null;\n /** Timeline: items, loading and empty text */\n messages: SupportConversationMessagesProps;\n /** Composer of the agent reply */\n composer: SupportChatComposerProps;\n /**\n * Replaces the composer with a locked footer, e.g. \"O assistente virtual\n * está atendendo. Clique em 'Responder como humano' para escrever.\" or\n * \"Atendimento concluído. O histórico está disponível somente para leitura.\"\n */\n lockedMessage?: string | null;\n /** Message shown above the composer (e.g. a send error) */\n alert?: string | null;\n /**\n * Shows the \"Concluir\" button in the header, which opens the\n * SupportConcludeModal with these props; omit or null to hide it\n */\n conclude?: Omit<SupportConcludeModalProps, 'isOpen' | 'onClose'> | null;\n className?: string;\n}\n\n/**\n * Central area of the agent's ticket screen: header, status banner, message\n * timeline and composer, stacked in a full-height column. Only the timeline\n * scrolls; the header, the banner and the footer stay fixed.\n *\n * Presentational: data comes in through props and every action goes out\n * through callbacks. The details panel (SupportUserPanel) is laid out by the\n * parent, which owns `isDetailsOpen` and passes `onToggleDetails` in the\n * header props.\n *\n * @example\n * ```tsx\n * <div className=\"flex h-full\">\n * <SupportTicketConversation\n * header={{ ticketCode: '#4819', name: 'Helena Martins', status,\n * isDetailsOpen, onToggleDetails: () => setOpen((o) => !o) }}\n * banner={{ variant: 'waiting', title: 'Aguardando resposta do backoffice' }}\n * messages={{ items }}\n * composer={{ onSend }}\n * />\n * {isDetailsOpen && <SupportUserPanel {...panel} />}\n * </div>\n * ```\n */\nexport default function SupportTicketConversation({\n header,\n banner,\n messages,\n composer,\n lockedMessage,\n alert,\n conclude,\n className,\n}: Readonly<SupportTicketConversationProps>) {\n const [isConcludeOpen, setConcludeOpen] = useState(false);\n\n const actions = conclude ? (\n <>\n <Button\n variant=\"outline\"\n action=\"positive\"\n size=\"small\"\n onClick={() => setConcludeOpen(true)}\n >\n Concluir\n </Button>\n {header.actions}\n </>\n ) : (\n header.actions\n );\n\n return (\n <section\n aria-label=\"Conversa do atendimento\"\n data-testid=\"support-ticket-conversation\"\n className={cn('flex h-full min-h-0 min-w-0 flex-1 flex-col', className)}\n >\n <SupportConversationHeader {...header} actions={actions} />\n\n {banner && (\n <div className=\"px-6 pt-4\">\n <SupportStatusBanner {...banner} />\n </div>\n )}\n\n <SupportConversationMessages {...messages} />\n\n {alert && (\n <Text\n as=\"p\"\n size=\"sm\"\n role=\"alert\"\n color=\"text-error-700\"\n className=\"bg-error-50 px-6 py-2\"\n >\n {alert}\n </Text>\n )}\n\n <footer className=\"border-t border-border-100 px-6 py-4\">\n {lockedMessage ? (\n <div\n data-testid=\"support-ticket-conversation-locked\"\n className=\"flex items-center gap-2 rounded-lg bg-background-50 px-4 py-3\"\n >\n <LockSimpleIcon\n size={18}\n aria-hidden=\"true\"\n className=\"shrink-0 text-text-500\"\n />\n <Text size=\"sm\" color=\"text-text-600\">\n {lockedMessage}\n </Text>\n </div>\n ) : (\n <SupportChatComposer {...composer} />\n )}\n </footer>\n\n {conclude && (\n <SupportConcludeModal\n {...conclude}\n isOpen={isConcludeOpen}\n onClose={() => setConcludeOpen(false)}\n />\n )}\n </section>\n );\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-GIQSHTB5.js","../src/components/SupportConversation/SupportTicketConversation.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-GIQSHTB5.js","sourcesContent":[null,"import { useState } from 'react';\nimport { LockSimpleIcon } from '@phosphor-icons/react/dist/csr/LockSimple';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport SupportConcludeModal, {\n type SupportConcludeModalProps,\n} from '../SupportConcludeModal/SupportConcludeModal';\nimport SupportChatComposer, {\n type SupportChatComposerProps,\n} from '../SupportChat/SupportChatComposer';\nimport SupportConversationHeader, {\n type SupportConversationHeaderProps,\n} from './SupportConversationHeader';\nimport SupportStatusBanner, {\n type SupportStatusBannerProps,\n} from './SupportStatusBanner';\nimport SupportConversationMessages, {\n type SupportConversationMessagesProps,\n} from './SupportConversationMessages';\nimport { cn } from '../../utils/utils';\n\n/**\n * Props of the SupportTicketConversation component\n */\nexport interface SupportTicketConversationProps {\n /** Header: code, name, status, \"Atendido por\", channel and details toggle */\n header: SupportConversationHeaderProps;\n /** Fixed notice on top of the timeline; omit or null to hide it */\n banner?: SupportStatusBannerProps | null;\n /** Timeline: items, loading and empty text */\n messages: SupportConversationMessagesProps;\n /** Composer of the agent reply */\n composer: SupportChatComposerProps;\n /**\n * Replaces the composer with a locked footer, e.g. \"O assistente virtual\n * está atendendo. Clique em 'Responder como humano' para escrever.\" or\n * \"Atendimento concluído. O histórico está disponível somente para leitura.\"\n */\n lockedMessage?: string | null;\n /** Message shown above the composer (e.g. a send error) */\n alert?: string | null;\n /**\n * Shows the \"Concluir\" button in the header, which opens the\n * SupportConcludeModal with these props; omit or null to hide it\n */\n conclude?: Omit<SupportConcludeModalProps, 'isOpen' | 'onClose'> | null;\n className?: string;\n}\n\n/**\n * Central area of the agent's ticket screen: header, status banner, message\n * timeline and composer, stacked in a full-height column. Only the timeline\n * scrolls; the header, the banner and the footer stay fixed.\n *\n * Presentational: data comes in through props and every action goes out\n * through callbacks. The details panel (SupportUserPanel) is laid out by the\n * parent, which owns `isDetailsOpen` and passes `onToggleDetails` in the\n * header props.\n *\n * @example\n * ```tsx\n * <div className=\"flex h-full\">\n * <SupportTicketConversation\n * header={{ ticketCode: '#4819', name: 'Helena Martins', status,\n * isDetailsOpen, onToggleDetails: () => setOpen((o) => !o) }}\n * banner={{ variant: 'waiting', title: 'Aguardando resposta do backoffice' }}\n * messages={{ items }}\n * composer={{ onSend }}\n * />\n * {isDetailsOpen && <SupportUserPanel {...panel} />}\n * </div>\n * ```\n */\nexport default function SupportTicketConversation({\n header,\n banner,\n messages,\n composer,\n lockedMessage,\n alert,\n conclude,\n className,\n}: Readonly<SupportTicketConversationProps>) {\n const [isConcludeOpen, setConcludeOpen] = useState(false);\n\n const actions = conclude ? (\n <>\n <Button\n variant=\"outline\"\n action=\"positive\"\n size=\"small\"\n onClick={() => setConcludeOpen(true)}\n >\n Concluir\n </Button>\n {header.actions}\n </>\n ) : (\n header.actions\n );\n\n return (\n <section\n aria-label=\"Conversa do atendimento\"\n data-testid=\"support-ticket-conversation\"\n className={cn('flex h-full min-h-0 min-w-0 flex-1 flex-col', className)}\n >\n <SupportConversationHeader {...header} actions={actions} />\n\n {banner && (\n <div className=\"px-6 pt-4\">\n <SupportStatusBanner {...banner} />\n </div>\n )}\n\n <SupportConversationMessages {...messages} />\n\n {alert && (\n <Text\n as=\"p\"\n size=\"sm\"\n role=\"alert\"\n color=\"text-error-700\"\n className=\"bg-error-50 px-6 py-2\"\n >\n {alert}\n </Text>\n )}\n\n <footer className=\"border-t border-border-100 px-6 py-4\">\n {lockedMessage ? (\n <div\n data-testid=\"support-ticket-conversation-locked\"\n className=\"flex items-center gap-2 rounded-lg bg-background-50 px-4 py-3\"\n >\n <LockSimpleIcon\n size={18}\n aria-hidden=\"true\"\n className=\"shrink-0 text-text-500\"\n />\n <Text size=\"sm\" color=\"text-text-600\">\n {lockedMessage}\n </Text>\n </div>\n ) : (\n <SupportChatComposer {...composer} />\n )}\n </footer>\n\n {conclude && (\n <SupportConcludeModal\n {...conclude}\n isOpen={isConcludeOpen}\n onClose={() => setConcludeOpen(false)}\n />\n )}\n </section>\n );\n}\n"]}
@@ -13,7 +13,7 @@ var _chunkUJWCE4XPjs = require('./chunk-UJWCE4XP.js');
13
13
  var _chunkVVO3W2SMjs = require('./chunk-VVO3W2SM.js');
14
14
 
15
15
 
16
- var _chunk23PAYKWBjs = require('./chunk-23PAYKWB.js');
16
+ var _chunkKM27ZDHZjs = require('./chunk-KM27ZDHZ.js');
17
17
 
18
18
 
19
19
  var _chunkXN2HPVVHjs = require('./chunk-XN2HPVVH.js');
@@ -741,7 +741,7 @@ function ChatContent({
741
741
  view === "list" && renderRoomList(),
742
742
  view === "room" && renderChatRoom(),
743
743
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
744
- _chunk23PAYKWBjs.Modal_default,
744
+ _chunkKM27ZDHZjs.Modal_default,
745
745
  {
746
746
  isOpen: showCreateModal,
747
747
  onClose: () => setShowCreateModal(false),
@@ -791,4 +791,4 @@ var Chat_default = Chat;
791
791
 
792
792
 
793
793
  exports.WS_STATES = WS_STATES; exports.useChat = useChat; exports.createUseChat = createUseChat; exports.useChatRooms = useChatRooms; exports.createUseChatRooms = createUseChatRooms; exports.Chat = Chat; exports.Chat_default = Chat_default;
794
- //# sourceMappingURL=chunk-4QBKD4JN.js.map
794
+ //# sourceMappingURL=chunk-GUUJYGXF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-4QBKD4JN.js","../src/components/Chat/Chat.tsx","../src/hooks/useChat.ts","../src/hooks/useChatRooms.ts"],"names":["error","useState","useCallback","useRef","useEffect"],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-4QBKD4JN.js","sourcesContent":[null,"import { useState, useEffect, useCallback, useRef } from 'react';\nimport {\n PaperPlaneTiltIcon,\n XIcon,\n PlusIcon,\n UsersIcon,\n} from '@phosphor-icons/react';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Input from '../Input/Input';\nimport Modal from '../Modal/Modal';\nimport { SkeletonText, SkeletonRounded } from '../Skeleton/Skeleton';\nimport EmptyState from '../EmptyState/EmptyState';\nimport { useChat } from '../../hooks/useChat';\nimport { useChatRooms } from '../../hooks/useChatRooms';\nimport {\n PROFILE_ROLES,\n CHAT_MESSAGE_TYPES,\n type ChatApiClient,\n type ChatRoomWithDetails,\n type ChatMessage,\n type ChatParticipant,\n type ChatUser,\n} from '../../types/chat';\nimport { cn } from '../../utils/utils';\n\n/**\n * Props for the Chat component\n */\nexport interface ChatProps {\n /** API client for REST calls */\n apiClient: ChatApiClient;\n /** WebSocket URL for real-time messaging */\n wsUrl: string;\n /** JWT authentication token */\n token: string;\n /** Current user's userInstitutionId */\n userId: string;\n /** Current user's display name */\n userName: string;\n /** Current user's profile photo URL */\n userPhoto?: string | null;\n /** Current user's role */\n userRole: PROFILE_ROLES;\n /** Additional CSS classes */\n className?: string;\n /** Initial room ID to open (from URL) */\n initialRoomId?: string;\n /** Callback when room changes (for URL navigation) */\n onRoomChange?: (roomId: string) => void;\n /** Callback when returning to room list */\n onBackToList?: () => void;\n}\n\n/**\n * Chat view states\n */\ntype ChatView = 'list' | 'room' | 'create';\n\n/**\n * Room item component for the list\n */\nconst RoomItem = ({\n room,\n onClick,\n isActive,\n}: {\n room: ChatRoomWithDetails;\n onClick: () => void;\n isActive: boolean;\n}) => (\n <Button\n variant=\"link\"\n onClick={onClick}\n className={cn(\n 'w-full p-3 rounded-lg text-left transition-colors justify-start h-auto',\n 'hover:bg-background-100',\n isActive && 'bg-primary-50 border-l-4 border-primary-500'\n )}\n >\n <div className=\"flex items-start gap-3 w-full\">\n <div className=\"w-10 h-10 rounded-full bg-primary-100 flex items-center justify-center flex-shrink-0\">\n <UsersIcon size={20} className=\"text-primary-600\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <Text size=\"sm\" weight=\"semibold\" className=\"text-text-900 truncate\">\n {room.name}\n </Text>\n {room.lastMessage && (\n <Text size=\"xs\" className=\"text-text-500 truncate mt-1\">\n {room.lastMessage.senderName}: {room.lastMessage.content}\n </Text>\n )}\n <Text size=\"xs\" className=\"text-text-400 mt-1\">\n {room.participantCount} participantes\n </Text>\n </div>\n </div>\n </Button>\n);\n\n/**\n * Message bubble component\n */\nconst MessageBubble = ({\n message,\n isOwn,\n}: {\n message: ChatMessage;\n isOwn: boolean;\n}) => (\n <div className={cn('flex gap-2 mb-3', isOwn && 'flex-row-reverse')}>\n {!isOwn && (\n <div className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center flex-shrink-0\">\n {message.senderPhoto ? (\n <img\n src={message.senderPhoto}\n alt={message.senderName}\n className=\"w-8 h-8 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"xs\" weight=\"bold\" className=\"text-gray-600\">\n {message.senderName.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n )}\n <div className={cn('max-w-[70%]', isOwn && 'items-end')}>\n {!isOwn && (\n <Text size=\"xs\" className=\"text-text-500 mb-1\">\n {message.senderName}\n </Text>\n )}\n <div\n className={cn(\n 'px-4 py-2 rounded-2xl',\n isOwn\n ? 'bg-primary-500 text-white rounded-br-md'\n : 'bg-background-100 text-text-900 rounded-bl-md'\n )}\n >\n <Text size=\"sm\">{message.content}</Text>\n </div>\n <Text\n size=\"xs\"\n className={cn('text-text-400 mt-1', isOwn && 'text-right')}\n >\n {new Date(message.createdAt).toLocaleTimeString('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Text>\n </div>\n </div>\n);\n\n/**\n * Participant item component\n */\nconst ParticipantItem = ({ participant }: { participant: ChatParticipant }) => (\n <div className=\"flex items-center gap-2 py-2\">\n <div className=\"relative\">\n <div className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\">\n {participant.photo ? (\n <img\n src={participant.photo}\n alt={participant.name}\n className=\"w-8 h-8 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"xs\" weight=\"bold\" className=\"text-gray-600\">\n {participant.name.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n {participant.isOnline && (\n <div className=\"absolute bottom-0 right-0 w-3 h-3 bg-green-500 rounded-full border-2 border-white\" />\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <Text size=\"sm\" className=\"text-text-900 truncate\">\n {participant.name}\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {participant.role}\n </Text>\n </div>\n </div>\n);\n\n/**\n * User selector for creating new rooms\n */\nconst UserSelector = ({\n users,\n selectedIds,\n onToggle,\n}: {\n users: ChatUser[];\n selectedIds: Set<string>;\n onToggle: (id: string) => void;\n}) => (\n <div className=\"space-y-2 max-h-64 overflow-y-auto\">\n {users.map((user) => (\n <Button\n key={user.userInstitutionId}\n variant=\"link\"\n onClick={() => onToggle(user.userInstitutionId)}\n className={cn(\n 'w-full flex items-center gap-3 p-3 rounded-lg transition-colors justify-start h-auto',\n selectedIds.has(user.userInstitutionId)\n ? 'bg-primary-50 border border-primary-500'\n : 'bg-background-50 hover:bg-background-100 border border-transparent'\n )}\n >\n <div className=\"w-10 h-10 rounded-full bg-gray-200 flex items-center justify-center\">\n {user.photo ? (\n <img\n src={user.photo}\n alt={user.name}\n className=\"w-10 h-10 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"sm\" weight=\"bold\" className=\"text-gray-600\">\n {user.name.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n <div className=\"flex-1 text-left\">\n <Text size=\"sm\" weight=\"medium\" className=\"text-text-900\">\n {user.name}\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {user.profileName}\n </Text>\n </div>\n <div\n className={cn(\n 'w-5 h-5 rounded-full border-2 flex items-center justify-center',\n selectedIds.has(user.userInstitutionId)\n ? 'bg-primary-500 border-primary-500'\n : 'border-gray-300'\n )}\n >\n {selectedIds.has(user.userInstitutionId) && (\n <div className=\"w-2 h-2 bg-white rounded-full\" />\n )}\n </div>\n </Button>\n ))}\n </div>\n);\n\n/**\n * Main Chat component\n *\n * Provides complete chat functionality:\n * - List of chat rooms\n * - Create new chat rooms\n * - Real-time messaging within rooms\n *\n * @example\n * ```tsx\n * <Chat\n * apiClient={api}\n * wsUrl=\"wss://api.example.com/chat/ws\"\n * token={authToken}\n * userId={user.userInstitutionId}\n * userName={user.name}\n * userPhoto={user.photo}\n * userRole=\"teacher\"\n * />\n * ```\n */\nexport function Chat(props: Readonly<ChatProps>) {\n const { userId, token } = props;\n\n // Show loading state if user info is not available\n if (!userId || !token) {\n return (\n <div className=\"flex items-center justify-center h-96\">\n <Text size=\"sm\" className=\"text-text-500\">\n Carregando...\n </Text>\n </div>\n );\n }\n\n return <ChatContent {...props} />;\n}\n\n/**\n * Internal Chat content component (rendered when user info is available)\n */\nfunction ChatContent({\n apiClient,\n wsUrl,\n token,\n userId,\n userName,\n userPhoto,\n userRole,\n className,\n initialRoomId,\n onRoomChange,\n onBackToList,\n}: Readonly<ChatProps>) {\n const [view, setView] = useState<ChatView>('list');\n const [selectedRoom, setSelectedRoom] = useState<ChatRoomWithDetails | null>(\n null\n );\n const [selectedUserIds, setSelectedUserIds] = useState<Set<string>>(\n new Set()\n );\n const [messageInput, setMessageInput] = useState('');\n const [showCreateModal, setShowCreateModal] = useState(false);\n const hasHandledInitialRoomRef = useRef(false);\n\n // Hooks for REST operations\n const {\n rooms,\n availableUsers,\n loading: roomsLoading,\n error: roomsError,\n fetchRooms,\n fetchAvailableUsers,\n createRoom,\n } = useChatRooms({ apiClient });\n\n // Hook for WebSocket (only when in a room)\n const {\n isConnected,\n messages,\n participants,\n sendMessage,\n error: chatError,\n } = useChat({\n wsUrl,\n token,\n roomId: selectedRoom?.id || '',\n userId,\n onConnect: () => console.log('Connected to chat'),\n onDisconnect: () => console.log('Disconnected from chat'),\n onError: (err) => console.error('Chat error:', err),\n });\n\n // Get role label for display\n const getRoleLabel = () => {\n return userRole === PROFILE_ROLES.TEACHER ? 'Professor' : 'Aluno';\n };\n\n // Fetch rooms on mount\n useEffect(() => {\n fetchRooms();\n }, [fetchRooms]);\n\n // Handle initial room from URL\n useEffect(() => {\n // Only handle initial room once\n if (hasHandledInitialRoomRef.current) {\n return;\n }\n\n // Wait for rooms to load before trying to find the initial room\n if (!initialRoomId || roomsLoading) {\n return;\n }\n\n // Only proceed if rooms have been loaded (not initial empty state)\n if (rooms?.length > 0) {\n const room = rooms.find((r) => r.id === initialRoomId);\n if (room) {\n hasHandledInitialRoomRef.current = true;\n setSelectedRoom(room);\n setView('room');\n } else {\n // Room not found in user's rooms, redirect to list\n hasHandledInitialRoomRef.current = true;\n onBackToList?.();\n }\n } else if (rooms !== undefined && !roomsLoading) {\n // Rooms loaded but empty, or room not found\n hasHandledInitialRoomRef.current = true;\n onBackToList?.();\n }\n }, [initialRoomId, rooms, roomsLoading, onBackToList]);\n\n // Handle room selection\n const handleSelectRoom = useCallback(\n (room: ChatRoomWithDetails) => {\n setSelectedRoom(room);\n setView('room');\n onRoomChange?.(room.id);\n },\n [onRoomChange]\n );\n\n // Handle create room\n const handleOpenCreateModal = useCallback(async () => {\n await fetchAvailableUsers();\n setSelectedUserIds(new Set());\n setShowCreateModal(true);\n }, [fetchAvailableUsers]);\n\n const handleToggleUser = useCallback((id: string) => {\n setSelectedUserIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n const handleCreateRoom = useCallback(async () => {\n if (selectedUserIds.size === 0) return;\n\n const room = await createRoom(Array.from(selectedUserIds));\n if (room) {\n setShowCreateModal(false);\n setSelectedUserIds(new Set());\n // Navigate to the new room\n onRoomChange?.(room.id);\n }\n }, [selectedUserIds, createRoom, onRoomChange]);\n\n // Handle send message\n const handleSendMessage = useCallback(() => {\n if (!messageInput.trim()) return;\n sendMessage(messageInput);\n setMessageInput('');\n }, [messageInput, sendMessage]);\n\n // Handle back to list\n const handleBackToList = useCallback(() => {\n setSelectedRoom(null);\n setView('list');\n onBackToList?.();\n }, [onBackToList]);\n\n // Render messages content\n const renderMessagesContent = () => {\n if (chatError) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-center\">\n <Text size=\"sm\" className=\"text-red-500 mb-2\">\n Erro de conexao com o chat\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n Tentando reconectar...\n </Text>\n </div>\n </div>\n );\n }\n\n // Filter out system messages (user joined/left notifications)\n const userMessages = messages?.filter(\n (message) => message.messageType !== CHAT_MESSAGE_TYPES.SYSTEM\n );\n\n if (!userMessages?.length) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Text size=\"sm\" className=\"text-text-500\">\n Nenhuma mensagem ainda. Comece a conversa!\n </Text>\n </div>\n );\n }\n\n return userMessages.map((message) => (\n <MessageBubble\n key={message.id}\n message={message}\n isOwn={message.senderId === userId}\n />\n ));\n };\n\n // Render room list\n const renderRoomList = () => (\n <div className=\"flex flex-col h-full\">\n <div className=\"p-4 border-b border-background-200 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-full bg-primary-100 flex items-center justify-center flex-shrink-0\">\n {userPhoto ? (\n <img\n src={userPhoto}\n alt={userName}\n className=\"w-10 h-10 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"sm\" weight=\"bold\" className=\"text-primary-600\">\n {userName.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n <div>\n <Text size=\"lg\" weight=\"bold\" className=\"text-text-900\">\n Conversas\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {userName} - {getRoleLabel()}\n </Text>\n </div>\n </div>\n <Button\n variant=\"solid\"\n size=\"small\"\n onClick={handleOpenCreateModal}\n iconLeft={<PlusIcon size={16} />}\n >\n Nova conversa\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-2\">\n {roomsError && (\n <div className=\"p-4 text-center\">\n <Text size=\"sm\" className=\"text-red-500 mb-2\">\n Erro ao carregar conversas\n </Text>\n <Button variant=\"outline\" size=\"small\" onClick={fetchRooms}>\n Tentar novamente\n </Button>\n </div>\n )}\n {!roomsError && roomsLoading && (\n <div className=\"space-y-3 p-2\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <SkeletonRounded className=\"w-10 h-10\" />\n <div className=\"flex-1\">\n <SkeletonText className=\"w-3/4 h-4 mb-2\" />\n <SkeletonText className=\"w-1/2 h-3\" />\n </div>\n </div>\n ))}\n </div>\n )}\n {!roomsError && !roomsLoading && !rooms?.length && (\n <EmptyState\n title=\"Nenhuma conversa\"\n description=\"Comece uma nova conversa clicando no botao acima\"\n />\n )}\n {!roomsError && !roomsLoading && !!rooms?.length && (\n <div className=\"space-y-1\">\n {rooms.map((room) => (\n <RoomItem\n key={room.id}\n room={room}\n onClick={() => handleSelectRoom(room)}\n isActive={selectedRoom?.id === room.id}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n\n // Render chat room\n const renderChatRoom = () => {\n if (!selectedRoom) return null;\n\n return (\n <div className=\"flex h-full\">\n {/* Messages area */}\n <div className=\"flex-1 flex flex-col\">\n {/* Header */}\n <div className=\"p-4 border-b border-background-200 flex items-center gap-3\">\n <Button variant=\"link\" size=\"small\" onClick={handleBackToList}>\n <XIcon size={20} />\n </Button>\n <div className=\"flex-1\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-900\">\n {selectedRoom.name}\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {isConnected ? 'Conectado' : 'Conectando...'}\n </Text>\n </div>\n </div>\n\n {/* Messages */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n {renderMessagesContent()}\n </div>\n\n {/* Input */}\n <div className=\"p-4 border-t border-background-200\">\n <div className=\"flex gap-2\">\n <Input\n placeholder=\"Digite sua mensagem...\"\n value={messageInput}\n onChange={(e) => setMessageInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSendMessage();\n }\n }}\n className=\"flex-1\"\n />\n <Button\n variant=\"solid\"\n onClick={handleSendMessage}\n disabled={!messageInput.trim() || !isConnected}\n >\n <PaperPlaneTiltIcon size={20} />\n </Button>\n </div>\n </div>\n </div>\n\n {/* Participants sidebar */}\n <div className=\"w-64 border-l border-background-200 p-4 hidden lg:block\">\n <Text size=\"sm\" weight=\"semibold\" className=\"text-text-900 mb-3\">\n Participantes ({participants?.length ?? 0})\n </Text>\n <div className=\"space-y-1\">\n {participants?.map((participant) => (\n <ParticipantItem\n key={participant.userInstitutionId}\n participant={participant}\n />\n ))}\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={cn(\n 'bg-background rounded-xl border border-background-200 h-[600px]',\n className\n )}\n >\n {view === 'list' && renderRoomList()}\n {view === 'room' && renderChatRoom()}\n\n {/* Create room modal */}\n <Modal\n isOpen={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n title=\"Nova conversa\"\n >\n <div className=\"p-4\">\n <Text size=\"sm\" className=\"text-text-600 mb-4\">\n Selecione os participantes para iniciar uma conversa\n </Text>\n\n {roomsLoading && (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <SkeletonRounded className=\"w-10 h-10\" />\n <SkeletonText className=\"flex-1 h-4\" />\n </div>\n ))}\n </div>\n )}\n {!roomsLoading && !availableUsers?.length && (\n <Text size=\"sm\" className=\"text-text-500 text-center py-4\">\n Nenhum usuario disponivel para chat\n </Text>\n )}\n {!roomsLoading && !!availableUsers?.length && (\n <UserSelector\n users={availableUsers}\n selectedIds={selectedUserIds}\n onToggle={handleToggleUser}\n />\n )}\n\n <div className=\"flex justify-end gap-2 mt-6\">\n <Button variant=\"outline\" onClick={() => setShowCreateModal(false)}>\n Cancelar\n </Button>\n <Button\n variant=\"solid\"\n onClick={handleCreateRoom}\n disabled={selectedUserIds.size === 0 || roomsLoading}\n >\n Criar conversa\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n}\n\nexport default Chat;\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type {\n ChatMessage,\n ChatParticipant,\n WSServerMessage,\n WSClientMessage,\n} from '../types/chat';\n\n/**\n * WebSocket connection states\n */\nexport const WS_STATES = {\n CONNECTING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n} as const;\n\n/**\n * Options for the useChat hook\n */\nexport interface UseChatOptions {\n /** WebSocket URL (e.g., wss://api.example.com/chat/ws) */\n wsUrl: string;\n /** JWT authentication token */\n token: string;\n /** Chat room ID */\n roomId: string;\n /** Current user's userInstitutionId */\n userId: string;\n /** Callback when connection is established */\n onConnect?: () => void;\n /** Callback when connection is closed */\n onDisconnect?: () => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Auto-reconnect on disconnect (default: true) */\n autoReconnect?: boolean;\n /** Reconnect interval in ms (default: 3000) */\n reconnectInterval?: number;\n /** Max reconnect attempts (default: 5) */\n maxReconnectAttempts?: number;\n}\n\n/**\n * Return type for the useChat hook\n */\nexport interface UseChatReturn {\n /** Whether WebSocket is connected */\n isConnected: boolean;\n /** List of chat messages */\n messages: ChatMessage[];\n /** List of room participants */\n participants: ChatParticipant[];\n /** Send a text message */\n sendMessage: (content: string) => void;\n /** Leave the chat room */\n leave: () => void;\n /** Current error state */\n error: Error | null;\n /** Reconnect to the WebSocket */\n reconnect: () => void;\n /** Current user ID for identifying own messages */\n currentUserId: string;\n}\n\n/**\n * Hook for managing WebSocket connection to a chat room\n *\n * Handles:\n * - WebSocket connection lifecycle\n * - Message sending/receiving\n * - Participant tracking\n * - Auto-reconnection\n *\n * @param options - Hook configuration options\n * @returns Chat state and actions\n *\n * @example\n * ```tsx\n * const {\n * isConnected,\n * messages,\n * participants,\n * sendMessage,\n * error\n * } = useChat({\n * wsUrl: 'wss://api.example.com/chat/ws',\n * token: authToken,\n * roomId: 'room-123',\n * userId: 'user-456',\n * onConnect: () => console.log('Connected!'),\n * onError: (err) => console.error('Error:', err),\n * });\n *\n * const handleSend = () => {\n * sendMessage('Hello, world!');\n * };\n * ```\n */\nexport function useChat({\n wsUrl,\n token,\n roomId,\n userId,\n onConnect,\n onDisconnect,\n onError,\n autoReconnect = true,\n reconnectInterval = 3000,\n maxReconnectAttempts = 5,\n}: UseChatOptions): UseChatReturn {\n const [isConnected, setIsConnected] = useState(false);\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [participants, setParticipants] = useState<ChatParticipant[]>([]);\n const [error, setError] = useState<Error | null>(null);\n\n const wsRef = useRef<WebSocket | null>(null);\n const reconnectAttemptsRef = useRef(0);\n const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const isManualDisconnectRef = useRef(false);\n const isConnectingRef = useRef(false);\n const connectRef = useRef<() => void>(() => {});\n\n /**\n * Send a WebSocket message\n */\n const sendWsMessage = useCallback((message: WSClientMessage) => {\n if (wsRef.current?.readyState === WS_STATES.OPEN) {\n wsRef.current.send(JSON.stringify(message));\n }\n }, []);\n\n /**\n * Send a text message\n */\n const sendMessage = useCallback(\n (content: string) => {\n const trimmedContent = content.trim();\n if (!trimmedContent) return;\n\n sendWsMessage({\n type: 'message',\n payload: { content: trimmedContent },\n });\n },\n [sendWsMessage]\n );\n\n /**\n * Leave the chat room\n */\n const leave = useCallback(() => {\n isManualDisconnectRef.current = true;\n sendWsMessage({ type: 'leave' });\n wsRef.current?.close(1000, 'User left');\n }, [sendWsMessage]);\n\n /**\n * Handle incoming WebSocket messages\n */\n const handleMessage = useCallback(\n (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data) as WSServerMessage;\n\n switch (data.type) {\n case 'history':\n if (data.payload.messages) {\n setMessages(data.payload.messages);\n }\n break;\n\n case 'participants':\n if (data.payload.participants) {\n setParticipants(data.payload.participants);\n }\n break;\n\n case 'new_message':\n if (data.payload.message) {\n setMessages((prev) => [...prev, data.payload.message!]);\n }\n break;\n\n case 'user_joined':\n if (data.payload.user) {\n const user = data.payload.user;\n setParticipants((prev) => {\n // Check if user already exists\n const exists = prev.some(\n (p) => p.userInstitutionId === user.userInstitutionId\n );\n if (exists) {\n // Update online status\n return prev.map((p) =>\n p.userInstitutionId === user.userInstitutionId\n ? { ...p, isOnline: true }\n : p\n );\n }\n // Add new participant\n return [\n ...prev,\n {\n userInstitutionId: user.userInstitutionId,\n name: user.name,\n photo: user.photo,\n role: user.role,\n isOnline: true,\n },\n ];\n });\n }\n break;\n\n case 'user_left':\n if (data.payload.user) {\n const user = data.payload.user;\n setParticipants((prev) =>\n prev.map((p) =>\n p.userInstitutionId === user.userInstitutionId\n ? { ...p, isOnline: false }\n : p\n )\n );\n }\n break;\n\n case 'error': {\n const errorMessage =\n data.payload.message_text || 'Erro desconhecido';\n setError(new Error(errorMessage));\n onError?.(new Error(errorMessage));\n break;\n }\n }\n } catch (err) {\n console.error('Error parsing WebSocket message:', err);\n }\n },\n [onError]\n );\n\n /**\n * Connect to WebSocket\n */\n const connect = useCallback(() => {\n // Prevent multiple simultaneous connection attempts\n if (isConnectingRef.current) {\n return;\n }\n\n // Build WebSocket URL with query params\n const url = new URL(wsUrl);\n url.searchParams.set('roomId', roomId);\n url.searchParams.set('token', token);\n\n // Close existing connection\n if (wsRef.current) {\n wsRef.current.close();\n }\n\n // Create new WebSocket connection\n isConnectingRef.current = true;\n const ws = new WebSocket(url.toString());\n wsRef.current = ws;\n\n ws.onopen = () => {\n isConnectingRef.current = false;\n setIsConnected(true);\n setError(null);\n reconnectAttemptsRef.current = 0;\n ws.send(JSON.stringify({ type: 'getInitialData' }));\n\n onConnect?.();\n };\n\n ws.onmessage = handleMessage;\n\n ws.onerror = () => {\n isConnectingRef.current = false;\n const error = new Error('Erro na conexão WebSocket');\n setError(error);\n onError?.(error);\n };\n\n ws.onclose = (event) => {\n isConnectingRef.current = false;\n setIsConnected(false);\n onDisconnect?.();\n\n // Auto-reconnect if not manual disconnect and within attempts limit\n if (\n autoReconnect &&\n !isManualDisconnectRef.current &&\n reconnectAttemptsRef.current < maxReconnectAttempts &&\n event.code !== 4001 && // Unauthorized\n event.code !== 4002 && // Missing roomId\n event.code !== 4003 // Access denied\n ) {\n reconnectAttemptsRef.current += 1;\n reconnectTimeoutRef.current = setTimeout(() => {\n connect();\n }, reconnectInterval);\n }\n };\n }, [\n wsUrl,\n roomId,\n token,\n handleMessage,\n onConnect,\n onDisconnect,\n onError,\n autoReconnect,\n reconnectInterval,\n maxReconnectAttempts,\n ]);\n\n // Keep connect ref updated\n connectRef.current = connect;\n\n /**\n * Reconnect to WebSocket\n */\n const reconnect = useCallback(() => {\n isManualDisconnectRef.current = false;\n reconnectAttemptsRef.current = 0;\n connectRef.current();\n }, []);\n\n // Connect on mount, disconnect on unmount\n // Only connect when roomId is provided\n useEffect(() => {\n if (!roomId) {\n return;\n }\n\n // Clear any pending reconnect\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n\n isManualDisconnectRef.current = false;\n isConnectingRef.current = false;\n reconnectAttemptsRef.current = 0;\n\n // Close existing connection before opening new one\n if (wsRef.current) {\n wsRef.current.close(1000, 'Room changed');\n wsRef.current = null;\n }\n\n // Small delay to ensure previous connection is closed\n const timeoutId = setTimeout(() => {\n connectRef.current();\n }, 100);\n\n return () => {\n clearTimeout(timeoutId);\n isManualDisconnectRef.current = true;\n isConnectingRef.current = false;\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n }\n wsRef.current?.close(1000, 'Component unmounted');\n };\n }, [roomId]);\n\n return {\n isConnected,\n messages,\n participants,\n sendMessage,\n leave,\n error,\n reconnect,\n currentUserId: userId,\n };\n}\n\n/**\n * Factory function to create a pre-configured useChat hook\n *\n * @param baseWsUrl - Base WebSocket URL\n * @returns Factory function that creates the hook with room-specific options\n *\n * @example\n * ```tsx\n * // In your app setup\n * const createChatHook = createUseChat('wss://api.example.com/chat/ws');\n *\n * // In component\n * const { messages, sendMessage } = createChatHook({\n * token: authToken,\n * roomId: 'room-123',\n * userId: 'user-456',\n * });\n * ```\n */\nexport function createUseChat(baseWsUrl: string) {\n return (options: Omit<UseChatOptions, 'wsUrl'>) =>\n useChat({ ...options, wsUrl: baseWsUrl });\n}\n","import { useState, useCallback } from 'react';\nimport type {\n ChatApiClient,\n ChatRoom,\n ChatRoomWithDetails,\n ChatUser,\n AvailableUsersResponse,\n CreateRoomResponse,\n GetRoomsResponse,\n} from '../types/chat';\n\n/**\n * Options for the useChatRooms hook\n */\nexport interface UseChatRoomsOptions {\n apiClient: ChatApiClient;\n}\n\n/**\n * Return type for the useChatRooms hook\n */\nexport interface UseChatRoomsReturn {\n /** List of user's chat rooms */\n rooms: ChatRoomWithDetails[];\n /** Available users for creating new chat rooms */\n availableUsers: ChatUser[];\n /** Loading state */\n loading: boolean;\n /** Error state */\n error: Error | null;\n /** Fetch user's chat rooms */\n fetchRooms: () => Promise<void>;\n /** Fetch available users for chat */\n fetchAvailableUsers: () => Promise<void>;\n /** Create a new chat room */\n createRoom: (participantIds: string[]) => Promise<ChatRoom | null>;\n /** Clear error state */\n clearError: () => void;\n}\n\n/**\n * Hook for managing chat rooms via REST API\n *\n * Provides functionality to:\n * - List user's chat rooms\n * - Fetch available users for new chats\n * - Create new chat rooms\n *\n * @param options - Hook configuration options\n * @returns Chat rooms state and actions\n *\n * @example\n * ```tsx\n * const { rooms, fetchRooms, createRoom } = useChatRooms({ apiClient: api });\n *\n * useEffect(() => {\n * fetchRooms();\n * }, []);\n *\n * const handleCreateRoom = async (userIds: string[]) => {\n * const room = await createRoom(userIds);\n * if (room) {\n * // Navigate to the new room\n * }\n * };\n * ```\n */\nexport function useChatRooms({\n apiClient,\n}: UseChatRoomsOptions): UseChatRoomsReturn {\n const [rooms, setRooms] = useState<ChatRoomWithDetails[]>([]);\n const [availableUsers, setAvailableUsers] = useState<ChatUser[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n /**\n * Fetch user's chat rooms\n */\n const fetchRooms = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.get<{ data: GetRoomsResponse }>(\n '/chat/rooms'\n );\n setRooms(response.data.data.rooms);\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Erro ao carregar salas');\n setError(error);\n console.error('Error fetching chat rooms:', err);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * Fetch available users for chat\n */\n const fetchAvailableUsers = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.get<{ data: AvailableUsersResponse }>(\n '/chat/available-users'\n );\n setAvailableUsers(response.data.data.users);\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Erro ao carregar usuários');\n setError(error);\n console.error('Error fetching available users:', err);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * Create a new chat room\n */\n const createRoom = useCallback(\n async (participantIds: string[]): Promise<ChatRoom | null> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.post<{ data: CreateRoomResponse }>(\n '/chat/rooms',\n {\n participantIds,\n }\n );\n\n // Refresh rooms list after creating\n await fetchRooms();\n\n return response.data.data.room;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Erro ao criar sala');\n setError(error);\n console.error('Error creating chat room:', err);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apiClient, fetchRooms]\n );\n\n /**\n * Clear error state\n */\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n return {\n rooms,\n availableUsers,\n loading,\n error,\n fetchRooms,\n fetchAvailableUsers,\n createRoom,\n clearError,\n };\n}\n\n/**\n * Factory function to create a pre-configured useChatRooms hook\n *\n * @param apiClient - API client instance\n * @returns Pre-configured hook function\n *\n * @example\n * ```tsx\n * // In your app setup\n * import { createUseChatRooms } from 'analytica-frontend-lib';\n * import api from './services/api';\n *\n * export const useChatRooms = createUseChatRooms(api);\n *\n * // Then use directly in components\n * const { rooms, fetchRooms } = useChatRooms();\n * ```\n */\nexport function createUseChatRooms(apiClient: ChatApiClient) {\n return () => useChatRooms({ apiClient });\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-GUUJYGXF.js","../src/components/Chat/Chat.tsx","../src/hooks/useChat.ts","../src/hooks/useChatRooms.ts"],"names":["error","useState","useCallback","useRef","useEffect"],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-GUUJYGXF.js","sourcesContent":[null,"import { useState, useEffect, useCallback, useRef } from 'react';\nimport {\n PaperPlaneTiltIcon,\n XIcon,\n PlusIcon,\n UsersIcon,\n} from '@phosphor-icons/react';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Input from '../Input/Input';\nimport Modal from '../Modal/Modal';\nimport { SkeletonText, SkeletonRounded } from '../Skeleton/Skeleton';\nimport EmptyState from '../EmptyState/EmptyState';\nimport { useChat } from '../../hooks/useChat';\nimport { useChatRooms } from '../../hooks/useChatRooms';\nimport {\n PROFILE_ROLES,\n CHAT_MESSAGE_TYPES,\n type ChatApiClient,\n type ChatRoomWithDetails,\n type ChatMessage,\n type ChatParticipant,\n type ChatUser,\n} from '../../types/chat';\nimport { cn } from '../../utils/utils';\n\n/**\n * Props for the Chat component\n */\nexport interface ChatProps {\n /** API client for REST calls */\n apiClient: ChatApiClient;\n /** WebSocket URL for real-time messaging */\n wsUrl: string;\n /** JWT authentication token */\n token: string;\n /** Current user's userInstitutionId */\n userId: string;\n /** Current user's display name */\n userName: string;\n /** Current user's profile photo URL */\n userPhoto?: string | null;\n /** Current user's role */\n userRole: PROFILE_ROLES;\n /** Additional CSS classes */\n className?: string;\n /** Initial room ID to open (from URL) */\n initialRoomId?: string;\n /** Callback when room changes (for URL navigation) */\n onRoomChange?: (roomId: string) => void;\n /** Callback when returning to room list */\n onBackToList?: () => void;\n}\n\n/**\n * Chat view states\n */\ntype ChatView = 'list' | 'room' | 'create';\n\n/**\n * Room item component for the list\n */\nconst RoomItem = ({\n room,\n onClick,\n isActive,\n}: {\n room: ChatRoomWithDetails;\n onClick: () => void;\n isActive: boolean;\n}) => (\n <Button\n variant=\"link\"\n onClick={onClick}\n className={cn(\n 'w-full p-3 rounded-lg text-left transition-colors justify-start h-auto',\n 'hover:bg-background-100',\n isActive && 'bg-primary-50 border-l-4 border-primary-500'\n )}\n >\n <div className=\"flex items-start gap-3 w-full\">\n <div className=\"w-10 h-10 rounded-full bg-primary-100 flex items-center justify-center flex-shrink-0\">\n <UsersIcon size={20} className=\"text-primary-600\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <Text size=\"sm\" weight=\"semibold\" className=\"text-text-900 truncate\">\n {room.name}\n </Text>\n {room.lastMessage && (\n <Text size=\"xs\" className=\"text-text-500 truncate mt-1\">\n {room.lastMessage.senderName}: {room.lastMessage.content}\n </Text>\n )}\n <Text size=\"xs\" className=\"text-text-400 mt-1\">\n {room.participantCount} participantes\n </Text>\n </div>\n </div>\n </Button>\n);\n\n/**\n * Message bubble component\n */\nconst MessageBubble = ({\n message,\n isOwn,\n}: {\n message: ChatMessage;\n isOwn: boolean;\n}) => (\n <div className={cn('flex gap-2 mb-3', isOwn && 'flex-row-reverse')}>\n {!isOwn && (\n <div className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center flex-shrink-0\">\n {message.senderPhoto ? (\n <img\n src={message.senderPhoto}\n alt={message.senderName}\n className=\"w-8 h-8 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"xs\" weight=\"bold\" className=\"text-gray-600\">\n {message.senderName.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n )}\n <div className={cn('max-w-[70%]', isOwn && 'items-end')}>\n {!isOwn && (\n <Text size=\"xs\" className=\"text-text-500 mb-1\">\n {message.senderName}\n </Text>\n )}\n <div\n className={cn(\n 'px-4 py-2 rounded-2xl',\n isOwn\n ? 'bg-primary-500 text-white rounded-br-md'\n : 'bg-background-100 text-text-900 rounded-bl-md'\n )}\n >\n <Text size=\"sm\">{message.content}</Text>\n </div>\n <Text\n size=\"xs\"\n className={cn('text-text-400 mt-1', isOwn && 'text-right')}\n >\n {new Date(message.createdAt).toLocaleTimeString('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n })}\n </Text>\n </div>\n </div>\n);\n\n/**\n * Participant item component\n */\nconst ParticipantItem = ({ participant }: { participant: ChatParticipant }) => (\n <div className=\"flex items-center gap-2 py-2\">\n <div className=\"relative\">\n <div className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\">\n {participant.photo ? (\n <img\n src={participant.photo}\n alt={participant.name}\n className=\"w-8 h-8 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"xs\" weight=\"bold\" className=\"text-gray-600\">\n {participant.name.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n {participant.isOnline && (\n <div className=\"absolute bottom-0 right-0 w-3 h-3 bg-green-500 rounded-full border-2 border-white\" />\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <Text size=\"sm\" className=\"text-text-900 truncate\">\n {participant.name}\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {participant.role}\n </Text>\n </div>\n </div>\n);\n\n/**\n * User selector for creating new rooms\n */\nconst UserSelector = ({\n users,\n selectedIds,\n onToggle,\n}: {\n users: ChatUser[];\n selectedIds: Set<string>;\n onToggle: (id: string) => void;\n}) => (\n <div className=\"space-y-2 max-h-64 overflow-y-auto\">\n {users.map((user) => (\n <Button\n key={user.userInstitutionId}\n variant=\"link\"\n onClick={() => onToggle(user.userInstitutionId)}\n className={cn(\n 'w-full flex items-center gap-3 p-3 rounded-lg transition-colors justify-start h-auto',\n selectedIds.has(user.userInstitutionId)\n ? 'bg-primary-50 border border-primary-500'\n : 'bg-background-50 hover:bg-background-100 border border-transparent'\n )}\n >\n <div className=\"w-10 h-10 rounded-full bg-gray-200 flex items-center justify-center\">\n {user.photo ? (\n <img\n src={user.photo}\n alt={user.name}\n className=\"w-10 h-10 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"sm\" weight=\"bold\" className=\"text-gray-600\">\n {user.name.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n <div className=\"flex-1 text-left\">\n <Text size=\"sm\" weight=\"medium\" className=\"text-text-900\">\n {user.name}\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {user.profileName}\n </Text>\n </div>\n <div\n className={cn(\n 'w-5 h-5 rounded-full border-2 flex items-center justify-center',\n selectedIds.has(user.userInstitutionId)\n ? 'bg-primary-500 border-primary-500'\n : 'border-gray-300'\n )}\n >\n {selectedIds.has(user.userInstitutionId) && (\n <div className=\"w-2 h-2 bg-white rounded-full\" />\n )}\n </div>\n </Button>\n ))}\n </div>\n);\n\n/**\n * Main Chat component\n *\n * Provides complete chat functionality:\n * - List of chat rooms\n * - Create new chat rooms\n * - Real-time messaging within rooms\n *\n * @example\n * ```tsx\n * <Chat\n * apiClient={api}\n * wsUrl=\"wss://api.example.com/chat/ws\"\n * token={authToken}\n * userId={user.userInstitutionId}\n * userName={user.name}\n * userPhoto={user.photo}\n * userRole=\"teacher\"\n * />\n * ```\n */\nexport function Chat(props: Readonly<ChatProps>) {\n const { userId, token } = props;\n\n // Show loading state if user info is not available\n if (!userId || !token) {\n return (\n <div className=\"flex items-center justify-center h-96\">\n <Text size=\"sm\" className=\"text-text-500\">\n Carregando...\n </Text>\n </div>\n );\n }\n\n return <ChatContent {...props} />;\n}\n\n/**\n * Internal Chat content component (rendered when user info is available)\n */\nfunction ChatContent({\n apiClient,\n wsUrl,\n token,\n userId,\n userName,\n userPhoto,\n userRole,\n className,\n initialRoomId,\n onRoomChange,\n onBackToList,\n}: Readonly<ChatProps>) {\n const [view, setView] = useState<ChatView>('list');\n const [selectedRoom, setSelectedRoom] = useState<ChatRoomWithDetails | null>(\n null\n );\n const [selectedUserIds, setSelectedUserIds] = useState<Set<string>>(\n new Set()\n );\n const [messageInput, setMessageInput] = useState('');\n const [showCreateModal, setShowCreateModal] = useState(false);\n const hasHandledInitialRoomRef = useRef(false);\n\n // Hooks for REST operations\n const {\n rooms,\n availableUsers,\n loading: roomsLoading,\n error: roomsError,\n fetchRooms,\n fetchAvailableUsers,\n createRoom,\n } = useChatRooms({ apiClient });\n\n // Hook for WebSocket (only when in a room)\n const {\n isConnected,\n messages,\n participants,\n sendMessage,\n error: chatError,\n } = useChat({\n wsUrl,\n token,\n roomId: selectedRoom?.id || '',\n userId,\n onConnect: () => console.log('Connected to chat'),\n onDisconnect: () => console.log('Disconnected from chat'),\n onError: (err) => console.error('Chat error:', err),\n });\n\n // Get role label for display\n const getRoleLabel = () => {\n return userRole === PROFILE_ROLES.TEACHER ? 'Professor' : 'Aluno';\n };\n\n // Fetch rooms on mount\n useEffect(() => {\n fetchRooms();\n }, [fetchRooms]);\n\n // Handle initial room from URL\n useEffect(() => {\n // Only handle initial room once\n if (hasHandledInitialRoomRef.current) {\n return;\n }\n\n // Wait for rooms to load before trying to find the initial room\n if (!initialRoomId || roomsLoading) {\n return;\n }\n\n // Only proceed if rooms have been loaded (not initial empty state)\n if (rooms?.length > 0) {\n const room = rooms.find((r) => r.id === initialRoomId);\n if (room) {\n hasHandledInitialRoomRef.current = true;\n setSelectedRoom(room);\n setView('room');\n } else {\n // Room not found in user's rooms, redirect to list\n hasHandledInitialRoomRef.current = true;\n onBackToList?.();\n }\n } else if (rooms !== undefined && !roomsLoading) {\n // Rooms loaded but empty, or room not found\n hasHandledInitialRoomRef.current = true;\n onBackToList?.();\n }\n }, [initialRoomId, rooms, roomsLoading, onBackToList]);\n\n // Handle room selection\n const handleSelectRoom = useCallback(\n (room: ChatRoomWithDetails) => {\n setSelectedRoom(room);\n setView('room');\n onRoomChange?.(room.id);\n },\n [onRoomChange]\n );\n\n // Handle create room\n const handleOpenCreateModal = useCallback(async () => {\n await fetchAvailableUsers();\n setSelectedUserIds(new Set());\n setShowCreateModal(true);\n }, [fetchAvailableUsers]);\n\n const handleToggleUser = useCallback((id: string) => {\n setSelectedUserIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n const handleCreateRoom = useCallback(async () => {\n if (selectedUserIds.size === 0) return;\n\n const room = await createRoom(Array.from(selectedUserIds));\n if (room) {\n setShowCreateModal(false);\n setSelectedUserIds(new Set());\n // Navigate to the new room\n onRoomChange?.(room.id);\n }\n }, [selectedUserIds, createRoom, onRoomChange]);\n\n // Handle send message\n const handleSendMessage = useCallback(() => {\n if (!messageInput.trim()) return;\n sendMessage(messageInput);\n setMessageInput('');\n }, [messageInput, sendMessage]);\n\n // Handle back to list\n const handleBackToList = useCallback(() => {\n setSelectedRoom(null);\n setView('list');\n onBackToList?.();\n }, [onBackToList]);\n\n // Render messages content\n const renderMessagesContent = () => {\n if (chatError) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"text-center\">\n <Text size=\"sm\" className=\"text-red-500 mb-2\">\n Erro de conexao com o chat\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n Tentando reconectar...\n </Text>\n </div>\n </div>\n );\n }\n\n // Filter out system messages (user joined/left notifications)\n const userMessages = messages?.filter(\n (message) => message.messageType !== CHAT_MESSAGE_TYPES.SYSTEM\n );\n\n if (!userMessages?.length) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <Text size=\"sm\" className=\"text-text-500\">\n Nenhuma mensagem ainda. Comece a conversa!\n </Text>\n </div>\n );\n }\n\n return userMessages.map((message) => (\n <MessageBubble\n key={message.id}\n message={message}\n isOwn={message.senderId === userId}\n />\n ));\n };\n\n // Render room list\n const renderRoomList = () => (\n <div className=\"flex flex-col h-full\">\n <div className=\"p-4 border-b border-background-200 flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-full bg-primary-100 flex items-center justify-center flex-shrink-0\">\n {userPhoto ? (\n <img\n src={userPhoto}\n alt={userName}\n className=\"w-10 h-10 rounded-full object-cover\"\n />\n ) : (\n <Text size=\"sm\" weight=\"bold\" className=\"text-primary-600\">\n {userName.charAt(0).toUpperCase()}\n </Text>\n )}\n </div>\n <div>\n <Text size=\"lg\" weight=\"bold\" className=\"text-text-900\">\n Conversas\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {userName} - {getRoleLabel()}\n </Text>\n </div>\n </div>\n <Button\n variant=\"solid\"\n size=\"small\"\n onClick={handleOpenCreateModal}\n iconLeft={<PlusIcon size={16} />}\n >\n Nova conversa\n </Button>\n </div>\n\n <div className=\"flex-1 overflow-y-auto p-2\">\n {roomsError && (\n <div className=\"p-4 text-center\">\n <Text size=\"sm\" className=\"text-red-500 mb-2\">\n Erro ao carregar conversas\n </Text>\n <Button variant=\"outline\" size=\"small\" onClick={fetchRooms}>\n Tentar novamente\n </Button>\n </div>\n )}\n {!roomsError && roomsLoading && (\n <div className=\"space-y-3 p-2\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <SkeletonRounded className=\"w-10 h-10\" />\n <div className=\"flex-1\">\n <SkeletonText className=\"w-3/4 h-4 mb-2\" />\n <SkeletonText className=\"w-1/2 h-3\" />\n </div>\n </div>\n ))}\n </div>\n )}\n {!roomsError && !roomsLoading && !rooms?.length && (\n <EmptyState\n title=\"Nenhuma conversa\"\n description=\"Comece uma nova conversa clicando no botao acima\"\n />\n )}\n {!roomsError && !roomsLoading && !!rooms?.length && (\n <div className=\"space-y-1\">\n {rooms.map((room) => (\n <RoomItem\n key={room.id}\n room={room}\n onClick={() => handleSelectRoom(room)}\n isActive={selectedRoom?.id === room.id}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n\n // Render chat room\n const renderChatRoom = () => {\n if (!selectedRoom) return null;\n\n return (\n <div className=\"flex h-full\">\n {/* Messages area */}\n <div className=\"flex-1 flex flex-col\">\n {/* Header */}\n <div className=\"p-4 border-b border-background-200 flex items-center gap-3\">\n <Button variant=\"link\" size=\"small\" onClick={handleBackToList}>\n <XIcon size={20} />\n </Button>\n <div className=\"flex-1\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-900\">\n {selectedRoom.name}\n </Text>\n <Text size=\"xs\" className=\"text-text-500\">\n {isConnected ? 'Conectado' : 'Conectando...'}\n </Text>\n </div>\n </div>\n\n {/* Messages */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n {renderMessagesContent()}\n </div>\n\n {/* Input */}\n <div className=\"p-4 border-t border-background-200\">\n <div className=\"flex gap-2\">\n <Input\n placeholder=\"Digite sua mensagem...\"\n value={messageInput}\n onChange={(e) => setMessageInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSendMessage();\n }\n }}\n className=\"flex-1\"\n />\n <Button\n variant=\"solid\"\n onClick={handleSendMessage}\n disabled={!messageInput.trim() || !isConnected}\n >\n <PaperPlaneTiltIcon size={20} />\n </Button>\n </div>\n </div>\n </div>\n\n {/* Participants sidebar */}\n <div className=\"w-64 border-l border-background-200 p-4 hidden lg:block\">\n <Text size=\"sm\" weight=\"semibold\" className=\"text-text-900 mb-3\">\n Participantes ({participants?.length ?? 0})\n </Text>\n <div className=\"space-y-1\">\n {participants?.map((participant) => (\n <ParticipantItem\n key={participant.userInstitutionId}\n participant={participant}\n />\n ))}\n </div>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={cn(\n 'bg-background rounded-xl border border-background-200 h-[600px]',\n className\n )}\n >\n {view === 'list' && renderRoomList()}\n {view === 'room' && renderChatRoom()}\n\n {/* Create room modal */}\n <Modal\n isOpen={showCreateModal}\n onClose={() => setShowCreateModal(false)}\n title=\"Nova conversa\"\n >\n <div className=\"p-4\">\n <Text size=\"sm\" className=\"text-text-600 mb-4\">\n Selecione os participantes para iniciar uma conversa\n </Text>\n\n {roomsLoading && (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <SkeletonRounded className=\"w-10 h-10\" />\n <SkeletonText className=\"flex-1 h-4\" />\n </div>\n ))}\n </div>\n )}\n {!roomsLoading && !availableUsers?.length && (\n <Text size=\"sm\" className=\"text-text-500 text-center py-4\">\n Nenhum usuario disponivel para chat\n </Text>\n )}\n {!roomsLoading && !!availableUsers?.length && (\n <UserSelector\n users={availableUsers}\n selectedIds={selectedUserIds}\n onToggle={handleToggleUser}\n />\n )}\n\n <div className=\"flex justify-end gap-2 mt-6\">\n <Button variant=\"outline\" onClick={() => setShowCreateModal(false)}>\n Cancelar\n </Button>\n <Button\n variant=\"solid\"\n onClick={handleCreateRoom}\n disabled={selectedUserIds.size === 0 || roomsLoading}\n >\n Criar conversa\n </Button>\n </div>\n </div>\n </Modal>\n </div>\n );\n}\n\nexport default Chat;\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport type {\n ChatMessage,\n ChatParticipant,\n WSServerMessage,\n WSClientMessage,\n} from '../types/chat';\n\n/**\n * WebSocket connection states\n */\nexport const WS_STATES = {\n CONNECTING: 0,\n OPEN: 1,\n CLOSING: 2,\n CLOSED: 3,\n} as const;\n\n/**\n * Options for the useChat hook\n */\nexport interface UseChatOptions {\n /** WebSocket URL (e.g., wss://api.example.com/chat/ws) */\n wsUrl: string;\n /** JWT authentication token */\n token: string;\n /** Chat room ID */\n roomId: string;\n /** Current user's userInstitutionId */\n userId: string;\n /** Callback when connection is established */\n onConnect?: () => void;\n /** Callback when connection is closed */\n onDisconnect?: () => void;\n /** Callback when an error occurs */\n onError?: (error: Error) => void;\n /** Auto-reconnect on disconnect (default: true) */\n autoReconnect?: boolean;\n /** Reconnect interval in ms (default: 3000) */\n reconnectInterval?: number;\n /** Max reconnect attempts (default: 5) */\n maxReconnectAttempts?: number;\n}\n\n/**\n * Return type for the useChat hook\n */\nexport interface UseChatReturn {\n /** Whether WebSocket is connected */\n isConnected: boolean;\n /** List of chat messages */\n messages: ChatMessage[];\n /** List of room participants */\n participants: ChatParticipant[];\n /** Send a text message */\n sendMessage: (content: string) => void;\n /** Leave the chat room */\n leave: () => void;\n /** Current error state */\n error: Error | null;\n /** Reconnect to the WebSocket */\n reconnect: () => void;\n /** Current user ID for identifying own messages */\n currentUserId: string;\n}\n\n/**\n * Hook for managing WebSocket connection to a chat room\n *\n * Handles:\n * - WebSocket connection lifecycle\n * - Message sending/receiving\n * - Participant tracking\n * - Auto-reconnection\n *\n * @param options - Hook configuration options\n * @returns Chat state and actions\n *\n * @example\n * ```tsx\n * const {\n * isConnected,\n * messages,\n * participants,\n * sendMessage,\n * error\n * } = useChat({\n * wsUrl: 'wss://api.example.com/chat/ws',\n * token: authToken,\n * roomId: 'room-123',\n * userId: 'user-456',\n * onConnect: () => console.log('Connected!'),\n * onError: (err) => console.error('Error:', err),\n * });\n *\n * const handleSend = () => {\n * sendMessage('Hello, world!');\n * };\n * ```\n */\nexport function useChat({\n wsUrl,\n token,\n roomId,\n userId,\n onConnect,\n onDisconnect,\n onError,\n autoReconnect = true,\n reconnectInterval = 3000,\n maxReconnectAttempts = 5,\n}: UseChatOptions): UseChatReturn {\n const [isConnected, setIsConnected] = useState(false);\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [participants, setParticipants] = useState<ChatParticipant[]>([]);\n const [error, setError] = useState<Error | null>(null);\n\n const wsRef = useRef<WebSocket | null>(null);\n const reconnectAttemptsRef = useRef(0);\n const reconnectTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const isManualDisconnectRef = useRef(false);\n const isConnectingRef = useRef(false);\n const connectRef = useRef<() => void>(() => {});\n\n /**\n * Send a WebSocket message\n */\n const sendWsMessage = useCallback((message: WSClientMessage) => {\n if (wsRef.current?.readyState === WS_STATES.OPEN) {\n wsRef.current.send(JSON.stringify(message));\n }\n }, []);\n\n /**\n * Send a text message\n */\n const sendMessage = useCallback(\n (content: string) => {\n const trimmedContent = content.trim();\n if (!trimmedContent) return;\n\n sendWsMessage({\n type: 'message',\n payload: { content: trimmedContent },\n });\n },\n [sendWsMessage]\n );\n\n /**\n * Leave the chat room\n */\n const leave = useCallback(() => {\n isManualDisconnectRef.current = true;\n sendWsMessage({ type: 'leave' });\n wsRef.current?.close(1000, 'User left');\n }, [sendWsMessage]);\n\n /**\n * Handle incoming WebSocket messages\n */\n const handleMessage = useCallback(\n (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data) as WSServerMessage;\n\n switch (data.type) {\n case 'history':\n if (data.payload.messages) {\n setMessages(data.payload.messages);\n }\n break;\n\n case 'participants':\n if (data.payload.participants) {\n setParticipants(data.payload.participants);\n }\n break;\n\n case 'new_message':\n if (data.payload.message) {\n setMessages((prev) => [...prev, data.payload.message!]);\n }\n break;\n\n case 'user_joined':\n if (data.payload.user) {\n const user = data.payload.user;\n setParticipants((prev) => {\n // Check if user already exists\n const exists = prev.some(\n (p) => p.userInstitutionId === user.userInstitutionId\n );\n if (exists) {\n // Update online status\n return prev.map((p) =>\n p.userInstitutionId === user.userInstitutionId\n ? { ...p, isOnline: true }\n : p\n );\n }\n // Add new participant\n return [\n ...prev,\n {\n userInstitutionId: user.userInstitutionId,\n name: user.name,\n photo: user.photo,\n role: user.role,\n isOnline: true,\n },\n ];\n });\n }\n break;\n\n case 'user_left':\n if (data.payload.user) {\n const user = data.payload.user;\n setParticipants((prev) =>\n prev.map((p) =>\n p.userInstitutionId === user.userInstitutionId\n ? { ...p, isOnline: false }\n : p\n )\n );\n }\n break;\n\n case 'error': {\n const errorMessage =\n data.payload.message_text || 'Erro desconhecido';\n setError(new Error(errorMessage));\n onError?.(new Error(errorMessage));\n break;\n }\n }\n } catch (err) {\n console.error('Error parsing WebSocket message:', err);\n }\n },\n [onError]\n );\n\n /**\n * Connect to WebSocket\n */\n const connect = useCallback(() => {\n // Prevent multiple simultaneous connection attempts\n if (isConnectingRef.current) {\n return;\n }\n\n // Build WebSocket URL with query params\n const url = new URL(wsUrl);\n url.searchParams.set('roomId', roomId);\n url.searchParams.set('token', token);\n\n // Close existing connection\n if (wsRef.current) {\n wsRef.current.close();\n }\n\n // Create new WebSocket connection\n isConnectingRef.current = true;\n const ws = new WebSocket(url.toString());\n wsRef.current = ws;\n\n ws.onopen = () => {\n isConnectingRef.current = false;\n setIsConnected(true);\n setError(null);\n reconnectAttemptsRef.current = 0;\n ws.send(JSON.stringify({ type: 'getInitialData' }));\n\n onConnect?.();\n };\n\n ws.onmessage = handleMessage;\n\n ws.onerror = () => {\n isConnectingRef.current = false;\n const error = new Error('Erro na conexão WebSocket');\n setError(error);\n onError?.(error);\n };\n\n ws.onclose = (event) => {\n isConnectingRef.current = false;\n setIsConnected(false);\n onDisconnect?.();\n\n // Auto-reconnect if not manual disconnect and within attempts limit\n if (\n autoReconnect &&\n !isManualDisconnectRef.current &&\n reconnectAttemptsRef.current < maxReconnectAttempts &&\n event.code !== 4001 && // Unauthorized\n event.code !== 4002 && // Missing roomId\n event.code !== 4003 // Access denied\n ) {\n reconnectAttemptsRef.current += 1;\n reconnectTimeoutRef.current = setTimeout(() => {\n connect();\n }, reconnectInterval);\n }\n };\n }, [\n wsUrl,\n roomId,\n token,\n handleMessage,\n onConnect,\n onDisconnect,\n onError,\n autoReconnect,\n reconnectInterval,\n maxReconnectAttempts,\n ]);\n\n // Keep connect ref updated\n connectRef.current = connect;\n\n /**\n * Reconnect to WebSocket\n */\n const reconnect = useCallback(() => {\n isManualDisconnectRef.current = false;\n reconnectAttemptsRef.current = 0;\n connectRef.current();\n }, []);\n\n // Connect on mount, disconnect on unmount\n // Only connect when roomId is provided\n useEffect(() => {\n if (!roomId) {\n return;\n }\n\n // Clear any pending reconnect\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n\n isManualDisconnectRef.current = false;\n isConnectingRef.current = false;\n reconnectAttemptsRef.current = 0;\n\n // Close existing connection before opening new one\n if (wsRef.current) {\n wsRef.current.close(1000, 'Room changed');\n wsRef.current = null;\n }\n\n // Small delay to ensure previous connection is closed\n const timeoutId = setTimeout(() => {\n connectRef.current();\n }, 100);\n\n return () => {\n clearTimeout(timeoutId);\n isManualDisconnectRef.current = true;\n isConnectingRef.current = false;\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n }\n wsRef.current?.close(1000, 'Component unmounted');\n };\n }, [roomId]);\n\n return {\n isConnected,\n messages,\n participants,\n sendMessage,\n leave,\n error,\n reconnect,\n currentUserId: userId,\n };\n}\n\n/**\n * Factory function to create a pre-configured useChat hook\n *\n * @param baseWsUrl - Base WebSocket URL\n * @returns Factory function that creates the hook with room-specific options\n *\n * @example\n * ```tsx\n * // In your app setup\n * const createChatHook = createUseChat('wss://api.example.com/chat/ws');\n *\n * // In component\n * const { messages, sendMessage } = createChatHook({\n * token: authToken,\n * roomId: 'room-123',\n * userId: 'user-456',\n * });\n * ```\n */\nexport function createUseChat(baseWsUrl: string) {\n return (options: Omit<UseChatOptions, 'wsUrl'>) =>\n useChat({ ...options, wsUrl: baseWsUrl });\n}\n","import { useState, useCallback } from 'react';\nimport type {\n ChatApiClient,\n ChatRoom,\n ChatRoomWithDetails,\n ChatUser,\n AvailableUsersResponse,\n CreateRoomResponse,\n GetRoomsResponse,\n} from '../types/chat';\n\n/**\n * Options for the useChatRooms hook\n */\nexport interface UseChatRoomsOptions {\n apiClient: ChatApiClient;\n}\n\n/**\n * Return type for the useChatRooms hook\n */\nexport interface UseChatRoomsReturn {\n /** List of user's chat rooms */\n rooms: ChatRoomWithDetails[];\n /** Available users for creating new chat rooms */\n availableUsers: ChatUser[];\n /** Loading state */\n loading: boolean;\n /** Error state */\n error: Error | null;\n /** Fetch user's chat rooms */\n fetchRooms: () => Promise<void>;\n /** Fetch available users for chat */\n fetchAvailableUsers: () => Promise<void>;\n /** Create a new chat room */\n createRoom: (participantIds: string[]) => Promise<ChatRoom | null>;\n /** Clear error state */\n clearError: () => void;\n}\n\n/**\n * Hook for managing chat rooms via REST API\n *\n * Provides functionality to:\n * - List user's chat rooms\n * - Fetch available users for new chats\n * - Create new chat rooms\n *\n * @param options - Hook configuration options\n * @returns Chat rooms state and actions\n *\n * @example\n * ```tsx\n * const { rooms, fetchRooms, createRoom } = useChatRooms({ apiClient: api });\n *\n * useEffect(() => {\n * fetchRooms();\n * }, []);\n *\n * const handleCreateRoom = async (userIds: string[]) => {\n * const room = await createRoom(userIds);\n * if (room) {\n * // Navigate to the new room\n * }\n * };\n * ```\n */\nexport function useChatRooms({\n apiClient,\n}: UseChatRoomsOptions): UseChatRoomsReturn {\n const [rooms, setRooms] = useState<ChatRoomWithDetails[]>([]);\n const [availableUsers, setAvailableUsers] = useState<ChatUser[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n /**\n * Fetch user's chat rooms\n */\n const fetchRooms = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.get<{ data: GetRoomsResponse }>(\n '/chat/rooms'\n );\n setRooms(response.data.data.rooms);\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Erro ao carregar salas');\n setError(error);\n console.error('Error fetching chat rooms:', err);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * Fetch available users for chat\n */\n const fetchAvailableUsers = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.get<{ data: AvailableUsersResponse }>(\n '/chat/available-users'\n );\n setAvailableUsers(response.data.data.users);\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Erro ao carregar usuários');\n setError(error);\n console.error('Error fetching available users:', err);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * Create a new chat room\n */\n const createRoom = useCallback(\n async (participantIds: string[]): Promise<ChatRoom | null> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.post<{ data: CreateRoomResponse }>(\n '/chat/rooms',\n {\n participantIds,\n }\n );\n\n // Refresh rooms list after creating\n await fetchRooms();\n\n return response.data.data.room;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error('Erro ao criar sala');\n setError(error);\n console.error('Error creating chat room:', err);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apiClient, fetchRooms]\n );\n\n /**\n * Clear error state\n */\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n return {\n rooms,\n availableUsers,\n loading,\n error,\n fetchRooms,\n fetchAvailableUsers,\n createRoom,\n clearError,\n };\n}\n\n/**\n * Factory function to create a pre-configured useChatRooms hook\n *\n * @param apiClient - API client instance\n * @returns Pre-configured hook function\n *\n * @example\n * ```tsx\n * // In your app setup\n * import { createUseChatRooms } from 'analytica-frontend-lib';\n * import api from './services/api';\n *\n * export const useChatRooms = createUseChatRooms(api);\n *\n * // Then use directly in components\n * const { rooms, fetchRooms } = useChatRooms();\n * ```\n */\nexport function createUseChatRooms(apiClient: ChatApiClient) {\n return () => useChatRooms({ apiClient });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Modal_default
3
- } from "./chunk-XZUMD3CB.mjs";
3
+ } from "./chunk-LODDYDTP.mjs";
4
4
  import {
5
5
  Text_default
6
6
  } from "./chunk-IMCIR6TJ.mjs";
@@ -115,4 +115,4 @@ var AnswerKeyModal_default = AnswerKeyModal;
115
115
  export {
116
116
  AnswerKeyModal_default
117
117
  };
118
- //# sourceMappingURL=chunk-M4O46VDY.mjs.map
118
+ //# sourceMappingURL=chunk-GX2PKLN2.mjs.map
@@ -8,7 +8,7 @@ import {
8
8
  DEFAULT_IMAGE_TOLERANCE,
9
9
  ImageAnswerView,
10
10
  getStatusStyles
11
- } from "./chunk-MMS2ELDK.mjs";
11
+ } from "./chunk-IIQCS3A2.mjs";
12
12
  import {
13
13
  stripHtmlTags
14
14
  } from "./chunk-XIT5EAVZ.mjs";
@@ -41,7 +41,7 @@ import {
41
41
  } from "./chunk-N26PFH64.mjs";
42
42
  import {
43
43
  Modal_default
44
- } from "./chunk-XZUMD3CB.mjs";
44
+ } from "./chunk-LODDYDTP.mjs";
45
45
  import {
46
46
  Button_default
47
47
  } from "./chunk-ZQZBOTZJ.mjs";
@@ -1638,4 +1638,4 @@ export {
1638
1638
  DEFAULT_SIMULATED_STUDENT_SIMULATIONS_LABELS,
1639
1639
  SimulatedStudentSimulationsModal
1640
1640
  };
1641
- //# sourceMappingURL=chunk-5BUTINIM.mjs.map
1641
+ //# sourceMappingURL=chunk-HLVLSWKD.mjs.map
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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
- var _chunkPOT3ALY3js = require('./chunk-POT3ALY3.js');
3
+ var _chunk5DINXU6Wjs = require('./chunk-5DINXU6W.js');
4
4
 
5
5
 
6
6
  var _chunkBSMYGZ5Qjs = require('./chunk-BSMYGZ5Q.js');
@@ -35,12 +35,12 @@ var filterQuickReplies = (replies, query) => {
35
35
  );
36
36
  };
37
37
  var MODE_OPTIONS = [
38
- { mode: _chunkPOT3ALY3js.SUPPORT_CHAT_REPLY_MODE.USER, label: "Resposta ao usu\xE1rio" },
39
- { mode: _chunkPOT3ALY3js.SUPPORT_CHAT_REPLY_MODE.INTERNAL_NOTE, label: "Nota interna" }
38
+ { mode: _chunk5DINXU6Wjs.SUPPORT_CHAT_REPLY_MODE.USER, label: "Resposta ao usu\xE1rio" },
39
+ { mode: _chunk5DINXU6Wjs.SUPPORT_CHAT_REPLY_MODE.INTERNAL_NOTE, label: "Nota interna" }
40
40
  ];
41
41
  var SupportChatComposer = ({
42
42
  onSend,
43
- defaultMode = _chunkPOT3ALY3js.SUPPORT_CHAT_REPLY_MODE.USER,
43
+ defaultMode = _chunk5DINXU6Wjs.SUPPORT_CHAT_REPLY_MODE.USER,
44
44
  onModeChange,
45
45
  onAttachImages,
46
46
  quickReplies,
@@ -54,7 +54,7 @@ var SupportChatComposer = ({
54
54
  const [quickMenuOpen, setQuickMenuOpen] = _react.useState.call(void 0, false);
55
55
  const fileInputRef = _react.useRef.call(void 0, null);
56
56
  const hasQuickReplies = Boolean(_optionalChain([quickReplies, 'optionalAccess', _ => _.length]));
57
- const isNote = mode === _chunkPOT3ALY3js.SUPPORT_CHAT_REPLY_MODE.INTERNAL_NOTE;
57
+ const isNote = mode === _chunk5DINXU6Wjs.SUPPORT_CHAT_REPLY_MODE.INTERNAL_NOTE;
58
58
  const slashQuery = hasQuickReplies && text.startsWith("/") ? text.slice(1) : null;
59
59
  const menuOpen = !disabled && (quickMenuOpen || slashQuery !== null);
60
60
  const visibleReplies = menuOpen ? filterQuickReplies(_nullishCoalesce(quickReplies, () => ( [])), _nullishCoalesce(slashQuery, () => ( ""))) : [];
@@ -235,4 +235,4 @@ var SupportChatComposer_default = SupportChatComposer;
235
235
 
236
236
 
237
237
  exports.SupportChatComposer_default = SupportChatComposer_default;
238
- //# sourceMappingURL=chunk-FU23WOTY.js.map
238
+ //# sourceMappingURL=chunk-HSV5VZ4Z.js.map