analytica-frontend-lib 1.5.37 → 1.5.39

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 (329) hide show
  1. package/dist/AccessReportModal/index.js +4 -3
  2. package/dist/AccessReportModal/index.js.map +1 -1
  3. package/dist/AccessReportModal/index.mjs +3 -2
  4. package/dist/ActivitiesHistory/index.js +44 -42
  5. package/dist/ActivitiesHistory/index.js.map +1 -1
  6. package/dist/ActivitiesHistory/index.mjs +43 -41
  7. package/dist/ActivityCardQuestionBanks/index.js +44 -42
  8. package/dist/ActivityCardQuestionBanks/index.js.map +1 -1
  9. package/dist/ActivityCardQuestionBanks/index.mjs +43 -41
  10. package/dist/ActivityCardQuestionPreview/index.js +44 -42
  11. package/dist/ActivityCardQuestionPreview/index.js.map +1 -1
  12. package/dist/ActivityCardQuestionPreview/index.mjs +43 -41
  13. package/dist/ActivityCreate/index.js +44 -42
  14. package/dist/ActivityCreate/index.js.map +1 -1
  15. package/dist/ActivityCreate/index.mjs +43 -41
  16. package/dist/ActivityDetails/index.js +44 -42
  17. package/dist/ActivityDetails/index.js.map +1 -1
  18. package/dist/ActivityDetails/index.mjs +43 -41
  19. package/dist/ActivityFilters/index.js +44 -42
  20. package/dist/ActivityFilters/index.js.map +1 -1
  21. package/dist/ActivityFilters/index.mjs +43 -41
  22. package/dist/ActivityPageLayout/index.js +44 -42
  23. package/dist/ActivityPageLayout/index.js.map +1 -1
  24. package/dist/ActivityPageLayout/index.mjs +43 -41
  25. package/dist/ActivityPreview/index.js +44 -42
  26. package/dist/ActivityPreview/index.js.map +1 -1
  27. package/dist/ActivityPreview/index.mjs +43 -41
  28. package/dist/AlertManager/index.js +44 -42
  29. package/dist/AlertManager/index.js.map +1 -1
  30. package/dist/AlertManager/index.mjs +43 -41
  31. package/dist/AlertManagerView/index.js +4 -3
  32. package/dist/AlertManagerView/index.js.map +1 -1
  33. package/dist/AlertManagerView/index.mjs +3 -2
  34. package/dist/AppHeader/index.js +7 -6
  35. package/dist/AppHeader/index.js.map +1 -1
  36. package/dist/AppHeader/index.mjs +6 -5
  37. package/dist/CalendarCard/index.js +5 -4
  38. package/dist/CalendarCard/index.js.map +1 -1
  39. package/dist/CalendarCard/index.mjs +4 -3
  40. package/dist/Chat/index.js +4 -3
  41. package/dist/Chat/index.js.map +1 -1
  42. package/dist/Chat/index.mjs +3 -2
  43. package/dist/CheckBoxGroup/index.js +44 -42
  44. package/dist/CheckBoxGroup/index.js.map +1 -1
  45. package/dist/CheckBoxGroup/index.mjs +43 -41
  46. package/dist/ChoroplethMap/index.d.ts.map +1 -1
  47. package/dist/ChoroplethMap/index.js +2 -2
  48. package/dist/ChoroplethMap/index.mjs +1 -1
  49. package/dist/ComparatorChart/ComparatorView/index.js +4 -3
  50. package/dist/ComparatorChart/ComparatorView/index.js.map +1 -1
  51. package/dist/ComparatorChart/ComparatorView/index.mjs +3 -2
  52. package/dist/CorrectActivityModal/index.js +4 -3
  53. package/dist/CorrectActivityModal/index.js.map +1 -1
  54. package/dist/CorrectActivityModal/index.mjs +3 -2
  55. package/dist/DownloadButton/index.js +5 -4
  56. package/dist/DownloadButton/index.js.map +1 -1
  57. package/dist/DownloadButton/index.mjs +4 -3
  58. package/dist/DownloadModal/index.js +4 -3
  59. package/dist/DownloadModal/index.js.map +1 -1
  60. package/dist/DownloadModal/index.mjs +3 -2
  61. package/dist/DropdownMenu/index.d.ts.map +1 -1
  62. package/dist/DropdownMenu/index.js +4 -3
  63. package/dist/DropdownMenu/index.js.map +1 -1
  64. package/dist/DropdownMenu/index.mjs +3 -2
  65. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js +44 -42
  66. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js.map +1 -1
  67. package/dist/ExamDetailsLayout/ExamDetailsPage/index.mjs +43 -41
  68. package/dist/ExamPageLayout/index.js +44 -42
  69. package/dist/ExamPageLayout/index.js.map +1 -1
  70. package/dist/ExamPageLayout/index.mjs +43 -41
  71. package/dist/Forum/index.js +6 -5
  72. package/dist/Forum/index.js.map +1 -1
  73. package/dist/Forum/index.mjs +5 -4
  74. package/dist/Modal/index.d.ts +3 -2
  75. package/dist/Modal/index.d.ts.map +1 -1
  76. package/dist/Modal/index.js +3 -2
  77. package/dist/Modal/index.js.map +1 -1
  78. package/dist/Modal/index.mjs +2 -1
  79. package/dist/NotificationCard/index.js +5 -4
  80. package/dist/NotificationCard/index.js.map +1 -1
  81. package/dist/NotificationCard/index.mjs +4 -3
  82. package/dist/PerformanceReportModal/index.js +4 -3
  83. package/dist/PerformanceReportModal/index.js.map +1 -1
  84. package/dist/PerformanceReportModal/index.mjs +3 -2
  85. package/dist/PrintableUsersTable/index.js +44 -42
  86. package/dist/PrintableUsersTable/index.js.map +1 -1
  87. package/dist/PrintableUsersTable/index.mjs +43 -41
  88. package/dist/ProgressModal/index.js +4 -3
  89. package/dist/ProgressModal/index.js.map +1 -1
  90. package/dist/ProgressModal/index.mjs +3 -2
  91. package/dist/Quiz/index.js +4 -3
  92. package/dist/Quiz/index.js.map +1 -1
  93. package/dist/Quiz/index.mjs +3 -2
  94. package/dist/RecommendedLessonCreate/index.js +44 -42
  95. package/dist/RecommendedLessonCreate/index.js.map +1 -1
  96. package/dist/RecommendedLessonCreate/index.mjs +43 -41
  97. package/dist/RecommendedLessonDetails/index.js +7 -6
  98. package/dist/RecommendedLessonDetails/index.js.map +1 -1
  99. package/dist/RecommendedLessonDetails/index.mjs +6 -5
  100. package/dist/RecommendedLessonsHistory/index.js +44 -42
  101. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  102. package/dist/RecommendedLessonsHistory/index.mjs +43 -41
  103. package/dist/RichEditor/index.js +6 -5
  104. package/dist/RichEditor/index.js.map +1 -1
  105. package/dist/RichEditor/index.mjs +5 -4
  106. package/dist/{RichEditorCore-6TKZG533.js → RichEditorCore-C3MN2JQX.js} +8 -7
  107. package/dist/RichEditorCore-C3MN2JQX.js.map +1 -0
  108. package/dist/{RichEditorCore-I7F66DB2.mjs → RichEditorCore-KZFJVQXI.mjs} +5 -4
  109. package/dist/{RichEditorCore-I7F66DB2.mjs.map → RichEditorCore-KZFJVQXI.mjs.map} +1 -1
  110. package/dist/Search/index.js +5 -4
  111. package/dist/Search/index.js.map +1 -1
  112. package/dist/Search/index.mjs +4 -3
  113. package/dist/SendActivityModal/SendActivityModal.js +44 -42
  114. package/dist/SendActivityModal/SendActivityModal.js.map +1 -1
  115. package/dist/SendActivityModal/SendActivityModal.mjs +43 -41
  116. package/dist/SendActivityModal/index.js +44 -42
  117. package/dist/SendActivityModal/index.js.map +1 -1
  118. package/dist/SendActivityModal/index.mjs +43 -41
  119. package/dist/SendLessonModal/index.js +44 -42
  120. package/dist/SendLessonModal/index.js.map +1 -1
  121. package/dist/SendLessonModal/index.mjs +43 -41
  122. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js +44 -42
  123. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js.map +1 -1
  124. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.mjs +43 -41
  125. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js +4 -3
  126. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js.map +1 -1
  127. package/dist/SimulatedPerformance/useSimulatedPerformance/index.mjs +3 -2
  128. package/dist/SimulationsPage/index.js +44 -42
  129. package/dist/SimulationsPage/index.js.map +1 -1
  130. package/dist/SimulationsPage/index.mjs +43 -41
  131. package/dist/StudentLessonProgressModal/index.js +4 -3
  132. package/dist/StudentLessonProgressModal/index.js.map +1 -1
  133. package/dist/StudentLessonProgressModal/index.mjs +3 -2
  134. package/dist/StudentPerformanceDetailsModal/index.js +4 -3
  135. package/dist/StudentPerformanceDetailsModal/index.js.map +1 -1
  136. package/dist/StudentPerformanceDetailsModal/index.mjs +3 -2
  137. package/dist/Support/TicketModal/index.js +4 -3
  138. package/dist/Support/TicketModal/index.js.map +1 -1
  139. package/dist/Support/TicketModal/index.mjs +3 -2
  140. package/dist/Support/index.js +5 -4
  141. package/dist/Support/index.js.map +1 -1
  142. package/dist/Support/index.mjs +4 -3
  143. package/dist/TableProvider/index.js +44 -42
  144. package/dist/TableProvider/index.js.map +1 -1
  145. package/dist/TableProvider/index.mjs +43 -41
  146. package/dist/UnifiedDraftModelPage/index.js +44 -42
  147. package/dist/UnifiedDraftModelPage/index.js.map +1 -1
  148. package/dist/UnifiedDraftModelPage/index.mjs +43 -41
  149. package/dist/UnifiedHistoryPage/index.js +44 -42
  150. package/dist/UnifiedHistoryPage/index.js.map +1 -1
  151. package/dist/UnifiedHistoryPage/index.mjs +43 -41
  152. package/dist/VideoPlayer/index.js +6 -5
  153. package/dist/VideoPlayer/index.js.map +1 -1
  154. package/dist/VideoPlayer/index.mjs +5 -4
  155. package/dist/assets/fallbacks/readingFluencyFallback.d.ts +5 -0
  156. package/dist/assets/fallbacks/readingFluencyFallback.d.ts.map +1 -0
  157. package/dist/{chunk-KRIEI3QT.js → chunk-2FYSJPRL.js} +94 -55
  158. package/dist/chunk-2FYSJPRL.js.map +1 -0
  159. package/dist/{chunk-5ARNZ5UP.js → chunk-2MDHKQ33.js} +6 -6
  160. package/dist/{chunk-5ARNZ5UP.js.map → chunk-2MDHKQ33.js.map} +1 -1
  161. package/dist/{chunk-FRDVZK3J.js → chunk-2WZ3KRCK.js} +3 -3
  162. package/dist/{chunk-FRDVZK3J.js.map → chunk-2WZ3KRCK.js.map} +1 -1
  163. package/dist/{chunk-KNP4QYTU.mjs → chunk-2X5TJZ5Z.mjs} +2 -2
  164. package/dist/{chunk-5UK4DNBK.mjs → chunk-3I5QVUPZ.mjs} +2 -2
  165. package/dist/{chunk-J3CUOCIV.mjs → chunk-43CA6NQG.mjs} +2 -2
  166. package/dist/chunk-4L7P2FHP.js +34 -0
  167. package/dist/chunk-4L7P2FHP.js.map +1 -0
  168. package/dist/{chunk-XJ5IKQR7.mjs → chunk-5QPYIL4Z.mjs} +2 -2
  169. package/dist/{chunk-VAVPDWUP.mjs → chunk-5RBZCQGH.mjs} +14 -14
  170. package/dist/chunk-5RBZCQGH.mjs.map +1 -0
  171. package/dist/chunk-624IUGB4.mjs +37 -0
  172. package/dist/chunk-624IUGB4.mjs.map +1 -0
  173. package/dist/{chunk-D7JBLUZX.mjs → chunk-7LRIQOCS.mjs} +10 -3
  174. package/dist/{chunk-D7JBLUZX.mjs.map → chunk-7LRIQOCS.mjs.map} +1 -1
  175. package/dist/chunk-A43TV76K.mjs +34 -0
  176. package/dist/chunk-A43TV76K.mjs.map +1 -0
  177. package/dist/{chunk-CFER5AQS.mjs → chunk-AFBTGILL.mjs} +4 -4
  178. package/dist/{chunk-4725FJBQ.js → chunk-BN5AWOG5.js} +3 -3
  179. package/dist/{chunk-4725FJBQ.js.map → chunk-BN5AWOG5.js.map} +1 -1
  180. package/dist/{chunk-MEOPXFYM.mjs → chunk-C7MYCQPG.mjs} +2 -2
  181. package/dist/{chunk-EHIHSCWG.js → chunk-CFLFCBRM.js} +79 -79
  182. package/dist/chunk-CFLFCBRM.js.map +1 -0
  183. package/dist/{chunk-VZBDR6GW.mjs → chunk-DGWMOIIX.mjs} +2 -2
  184. package/dist/chunk-EBA7URWC.js +37 -0
  185. package/dist/chunk-EBA7URWC.js.map +1 -0
  186. package/dist/{chunk-R7K6XUBA.mjs → chunk-EBGFR7IQ.mjs} +2 -2
  187. package/dist/{chunk-3II7JJG7.js → chunk-EMW3LCGX.js} +4 -4
  188. package/dist/{chunk-3II7JJG7.js.map → chunk-EMW3LCGX.js.map} +1 -1
  189. package/dist/{chunk-LOA7UXY3.mjs → chunk-EWG6Q2QF.mjs} +3 -3
  190. package/dist/{chunk-6W6ZYXNZ.js → chunk-FA6GCOJW.js} +13 -13
  191. package/dist/{chunk-6W6ZYXNZ.js.map → chunk-FA6GCOJW.js.map} +1 -1
  192. package/dist/{chunk-JM7NE3XZ.mjs → chunk-FZUPX44N.mjs} +3 -3
  193. package/dist/{chunk-TRXYICTC.mjs → chunk-GH5YUGDP.mjs} +2 -2
  194. package/dist/{chunk-IHSHQ6NP.mjs → chunk-GNQHR4AT.mjs} +2 -2
  195. package/dist/{chunk-H5ZY6S2J.js → chunk-GYMVSUMC.js} +3 -3
  196. package/dist/{chunk-H5ZY6S2J.js.map → chunk-GYMVSUMC.js.map} +1 -1
  197. package/dist/{chunk-GNUM5L6F.js → chunk-GYYFSFYJ.js} +5 -5
  198. package/dist/{chunk-GNUM5L6F.js.map → chunk-GYYFSFYJ.js.map} +1 -1
  199. package/dist/{chunk-X67VCXAJ.js → chunk-GZMZ3GPE.js} +3 -3
  200. package/dist/{chunk-X67VCXAJ.js.map → chunk-GZMZ3GPE.js.map} +1 -1
  201. package/dist/chunk-HEP6VNLE.mjs +1058 -0
  202. package/dist/chunk-HEP6VNLE.mjs.map +1 -0
  203. package/dist/{chunk-35LRECBW.mjs → chunk-IM4VNWZ6.mjs} +2 -2
  204. package/dist/{chunk-B4JAFWHZ.mjs → chunk-JGBX7KPP.mjs} +4 -4
  205. package/dist/{chunk-EJ2YRD73.js → chunk-KC7CYS7L.js} +1 -1
  206. package/dist/chunk-KC7CYS7L.js.map +1 -0
  207. package/dist/{chunk-ODY545KG.js → chunk-KDBTSXBL.js} +3 -3
  208. package/dist/{chunk-ODY545KG.js.map → chunk-KDBTSXBL.js.map} +1 -1
  209. package/dist/{chunk-3XCHQD4W.mjs → chunk-LH4UP3H6.mjs} +4 -4
  210. package/dist/chunk-LS4EGCEJ.js +1058 -0
  211. package/dist/chunk-LS4EGCEJ.js.map +1 -0
  212. package/dist/{chunk-N6T4F25A.mjs → chunk-LS6UXIAI.mjs} +2 -2
  213. package/dist/{chunk-5BB62IGA.js → chunk-LX6VW2CL.js} +7 -7
  214. package/dist/{chunk-5BB62IGA.js.map → chunk-LX6VW2CL.js.map} +1 -1
  215. package/dist/{chunk-JEQTODE5.js → chunk-MEILCZ46.js} +3 -3
  216. package/dist/{chunk-JEQTODE5.js.map → chunk-MEILCZ46.js.map} +1 -1
  217. package/dist/{chunk-EOUHL7OK.mjs → chunk-MK7TLTKV.mjs} +2 -2
  218. package/dist/{chunk-GV2UDYYH.js → chunk-MKY42S3T.js} +3 -3
  219. package/dist/{chunk-GV2UDYYH.js.map → chunk-MKY42S3T.js.map} +1 -1
  220. package/dist/{chunk-BVIY2YJ5.mjs → chunk-MQCTISBB.mjs} +2 -2
  221. package/dist/{chunk-KHLCO6PF.js → chunk-MVEXCJVJ.js} +15 -15
  222. package/dist/{chunk-KHLCO6PF.js.map → chunk-MVEXCJVJ.js.map} +1 -1
  223. package/dist/{chunk-HR2AEOZX.js → chunk-OCIBLTVL.js} +11 -4
  224. package/dist/chunk-OCIBLTVL.js.map +1 -0
  225. package/dist/{chunk-SI6YPFB6.mjs → chunk-ORVASFAF.mjs} +2 -2
  226. package/dist/{chunk-SM2QRMWS.mjs → chunk-OVRINYGJ.mjs} +2 -2
  227. package/dist/{chunk-UFYO5NDX.js → chunk-PCVWLKJC.js} +3 -3
  228. package/dist/{chunk-UFYO5NDX.js.map → chunk-PCVWLKJC.js.map} +1 -1
  229. package/dist/{chunk-37NXCXFF.mjs → chunk-PDHZEFFZ.mjs} +2 -2
  230. package/dist/{chunk-37CPKURX.js → chunk-Q5VRX5TR.js} +7 -7
  231. package/dist/{chunk-37CPKURX.js.map → chunk-Q5VRX5TR.js.map} +1 -1
  232. package/dist/{chunk-C2NJL4WK.mjs → chunk-QBXT4LMT.mjs} +2 -2
  233. package/dist/{chunk-RBFQP3HZ.js → chunk-QETA3PTM.js} +2 -2
  234. package/dist/{chunk-RBFQP3HZ.js.map → chunk-QETA3PTM.js.map} +1 -1
  235. package/dist/{chunk-4V5V6MVY.js → chunk-QFCGNRJO.js} +3 -3
  236. package/dist/{chunk-4V5V6MVY.js.map → chunk-QFCGNRJO.js.map} +1 -1
  237. package/dist/{chunk-JMFZKAVY.js → chunk-RZDAIAVY.js} +5 -5
  238. package/dist/{chunk-JMFZKAVY.js.map → chunk-RZDAIAVY.js.map} +1 -1
  239. package/dist/{chunk-EUQYYX23.mjs → chunk-TASK776Q.mjs} +2 -2
  240. package/dist/{chunk-XPUPZSGT.js → chunk-TYQP2J4H.js} +15 -15
  241. package/dist/{chunk-XPUPZSGT.js.map → chunk-TYQP2J4H.js.map} +1 -1
  242. package/dist/{chunk-MGUMW6EN.js → chunk-U2N3N4I2.js} +3 -3
  243. package/dist/{chunk-MGUMW6EN.js.map → chunk-U2N3N4I2.js.map} +1 -1
  244. package/dist/{chunk-FYL6QYKK.js → chunk-UERZHJKL.js} +3 -3
  245. package/dist/{chunk-FYL6QYKK.js.map → chunk-UERZHJKL.js.map} +1 -1
  246. package/dist/{chunk-6V6NE224.js → chunk-UJI7NDUF.js} +6 -6
  247. package/dist/{chunk-6V6NE224.js.map → chunk-UJI7NDUF.js.map} +1 -1
  248. package/dist/{chunk-VVHNBYIN.js → chunk-VBOK3A4Y.js} +3 -3
  249. package/dist/{chunk-VVHNBYIN.js.map → chunk-VBOK3A4Y.js.map} +1 -1
  250. package/dist/{chunk-MA7XQY6A.mjs → chunk-WJXJUSXH.mjs} +3 -3
  251. package/dist/{chunk-7TM6LSSC.mjs → chunk-WMLUKVPJ.mjs} +94 -55
  252. package/dist/chunk-WMLUKVPJ.mjs.map +1 -0
  253. package/dist/{chunk-PQBS3HME.js → chunk-X2PEBXX6.js} +3 -3
  254. package/dist/{chunk-PQBS3HME.js.map → chunk-X2PEBXX6.js.map} +1 -1
  255. package/dist/{chunk-VTYR5RLZ.js → chunk-X7MXRBUO.js} +3 -3
  256. package/dist/{chunk-VTYR5RLZ.js.map → chunk-X7MXRBUO.js.map} +1 -1
  257. package/dist/{chunk-7VYBP6E2.mjs → chunk-XH2PTWXI.mjs} +2 -2
  258. package/dist/{chunk-CXROMRAO.mjs → chunk-XNYWZYOS.mjs} +1 -1
  259. package/dist/chunk-XNYWZYOS.mjs.map +1 -0
  260. package/dist/{chunk-GTN2ZMIP.js → chunk-Y5L5ACRX.js} +4 -4
  261. package/dist/{chunk-GTN2ZMIP.js.map → chunk-Y5L5ACRX.js.map} +1 -1
  262. package/dist/{chunk-7KRZOFYJ.mjs → chunk-ZLJZA3CF.mjs} +2 -2
  263. package/dist/components/ReadAloudPromptReadingFluency/ReadAloudPromptReadingFluency.d.ts +3 -2
  264. package/dist/components/ReadAloudPromptReadingFluency/ReadAloudPromptReadingFluency.d.ts.map +1 -1
  265. package/dist/hooks/useAppContent/index.js +44 -42
  266. package/dist/hooks/useAppContent/index.js.map +1 -1
  267. package/dist/hooks/useAppContent/index.mjs +43 -41
  268. package/dist/hooks/useAppInitialization/index.js +3 -3
  269. package/dist/hooks/useAppInitialization/index.mjs +2 -2
  270. package/dist/hooks/useInstitution/index.d.ts +4 -0
  271. package/dist/hooks/useInstitution/index.d.ts.map +1 -1
  272. package/dist/hooks/useInstitution/index.js +2 -2
  273. package/dist/hooks/useInstitution/index.mjs +1 -1
  274. package/dist/hooks/useInstitution.d.ts +4 -0
  275. package/dist/hooks/useInstitution.d.ts.map +1 -1
  276. package/dist/hooks/useProfileLabels/index.js +1 -1
  277. package/dist/hooks/useProfileLabels/index.mjs +1 -1
  278. package/dist/hooks/useReadingFluencyAsset/index.d.ts +54 -0
  279. package/dist/hooks/useReadingFluencyAsset/index.d.ts.map +1 -0
  280. package/dist/hooks/useReadingFluencyAsset/index.js +9 -0
  281. package/dist/hooks/useReadingFluencyAsset/index.js.map +1 -0
  282. package/dist/hooks/useReadingFluencyAsset/index.mjs +9 -0
  283. package/dist/hooks/useReadingFluencyAsset/index.mjs.map +1 -0
  284. package/dist/hooks/useReadingFluencyAsset.d.ts +54 -0
  285. package/dist/hooks/useReadingFluencyAsset.d.ts.map +1 -0
  286. package/dist/index.d.ts +2 -0
  287. package/dist/index.d.ts.map +1 -1
  288. package/dist/index.js +75 -70
  289. package/dist/index.js.map +1 -1
  290. package/dist/index.mjs +103 -98
  291. package/package.json +8 -1
  292. package/dist/RichEditorCore-6TKZG533.js.map +0 -1
  293. package/dist/chunk-7TM6LSSC.mjs.map +0 -1
  294. package/dist/chunk-CXROMRAO.mjs.map +0 -1
  295. package/dist/chunk-EHIHSCWG.js.map +0 -1
  296. package/dist/chunk-EJ2YRD73.js.map +0 -1
  297. package/dist/chunk-HFBGOUUR.mjs +0 -1044
  298. package/dist/chunk-HFBGOUUR.mjs.map +0 -1
  299. package/dist/chunk-HR2AEOZX.js.map +0 -1
  300. package/dist/chunk-KRIEI3QT.js.map +0 -1
  301. package/dist/chunk-TUIEB7NY.js +0 -1044
  302. package/dist/chunk-TUIEB7NY.js.map +0 -1
  303. package/dist/chunk-VAVPDWUP.mjs.map +0 -1
  304. /package/dist/{chunk-KNP4QYTU.mjs.map → chunk-2X5TJZ5Z.mjs.map} +0 -0
  305. /package/dist/{chunk-5UK4DNBK.mjs.map → chunk-3I5QVUPZ.mjs.map} +0 -0
  306. /package/dist/{chunk-J3CUOCIV.mjs.map → chunk-43CA6NQG.mjs.map} +0 -0
  307. /package/dist/{chunk-XJ5IKQR7.mjs.map → chunk-5QPYIL4Z.mjs.map} +0 -0
  308. /package/dist/{chunk-CFER5AQS.mjs.map → chunk-AFBTGILL.mjs.map} +0 -0
  309. /package/dist/{chunk-MEOPXFYM.mjs.map → chunk-C7MYCQPG.mjs.map} +0 -0
  310. /package/dist/{chunk-VZBDR6GW.mjs.map → chunk-DGWMOIIX.mjs.map} +0 -0
  311. /package/dist/{chunk-R7K6XUBA.mjs.map → chunk-EBGFR7IQ.mjs.map} +0 -0
  312. /package/dist/{chunk-LOA7UXY3.mjs.map → chunk-EWG6Q2QF.mjs.map} +0 -0
  313. /package/dist/{chunk-JM7NE3XZ.mjs.map → chunk-FZUPX44N.mjs.map} +0 -0
  314. /package/dist/{chunk-TRXYICTC.mjs.map → chunk-GH5YUGDP.mjs.map} +0 -0
  315. /package/dist/{chunk-IHSHQ6NP.mjs.map → chunk-GNQHR4AT.mjs.map} +0 -0
  316. /package/dist/{chunk-35LRECBW.mjs.map → chunk-IM4VNWZ6.mjs.map} +0 -0
  317. /package/dist/{chunk-B4JAFWHZ.mjs.map → chunk-JGBX7KPP.mjs.map} +0 -0
  318. /package/dist/{chunk-3XCHQD4W.mjs.map → chunk-LH4UP3H6.mjs.map} +0 -0
  319. /package/dist/{chunk-N6T4F25A.mjs.map → chunk-LS6UXIAI.mjs.map} +0 -0
  320. /package/dist/{chunk-EOUHL7OK.mjs.map → chunk-MK7TLTKV.mjs.map} +0 -0
  321. /package/dist/{chunk-BVIY2YJ5.mjs.map → chunk-MQCTISBB.mjs.map} +0 -0
  322. /package/dist/{chunk-SI6YPFB6.mjs.map → chunk-ORVASFAF.mjs.map} +0 -0
  323. /package/dist/{chunk-SM2QRMWS.mjs.map → chunk-OVRINYGJ.mjs.map} +0 -0
  324. /package/dist/{chunk-37NXCXFF.mjs.map → chunk-PDHZEFFZ.mjs.map} +0 -0
  325. /package/dist/{chunk-C2NJL4WK.mjs.map → chunk-QBXT4LMT.mjs.map} +0 -0
  326. /package/dist/{chunk-EUQYYX23.mjs.map → chunk-TASK776Q.mjs.map} +0 -0
  327. /package/dist/{chunk-MA7XQY6A.mjs.map → chunk-WJXJUSXH.mjs.map} +0 -0
  328. /package/dist/{chunk-7VYBP6E2.mjs.map → chunk-XH2PTWXI.mjs.map} +0 -0
  329. /package/dist/{chunk-7KRZOFYJ.mjs.map → chunk-ZLJZA3CF.mjs.map} +0 -0
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-VN4ORBHU.mjs";
15
15
  import {
16
16
  Modal_default
17
- } from "./chunk-HFBGOUUR.mjs";
17
+ } from "./chunk-HEP6VNLE.mjs";
18
18
  import {
19
19
  Button_default
20
20
  } from "./chunk-TLMMQCSW.mjs";
@@ -159,4 +159,4 @@ var AlertsManagerView = ({
159
159
  export {
160
160
  AlertsManagerView
161
161
  };
162
- //# sourceMappingURL=chunk-IHSHQ6NP.mjs.map
162
+ //# sourceMappingURL=chunk-GNQHR4AT.mjs.map
@@ -13,7 +13,7 @@ var _chunkNEDUOGWUjs = require('./chunk-NEDUOGWU.js');
13
13
  var _chunkLGPTKTMPjs = require('./chunk-LGPTKTMP.js');
14
14
 
15
15
 
16
- var _chunkTUIEB7NYjs = require('./chunk-TUIEB7NY.js');
16
+ var _chunkLS4EGCEJjs = require('./chunk-LS4EGCEJ.js');
17
17
 
18
18
 
19
19
  var _chunkOJPQTOMNjs = require('./chunk-OJPQTOMN.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
- _chunkTUIEB7NYjs.Modal_default,
744
+ _chunkLS4EGCEJjs.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-H5ZY6S2J.js.map
794
+ //# sourceMappingURL=chunk-GYMVSUMC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-H5ZY6S2J.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-H5ZY6S2J.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-GYMVSUMC.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-GYMVSUMC.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"]}
@@ -34,7 +34,7 @@ var _chunkHGWU3GUNjs = require('./chunk-HGWU3GUN.js');
34
34
  var _chunkBVUPM6EYjs = require('./chunk-BVUPM6EY.js');
35
35
 
36
36
 
37
- var _chunkTUIEB7NYjs = require('./chunk-TUIEB7NY.js');
37
+ var _chunkLS4EGCEJjs = require('./chunk-LS4EGCEJ.js');
38
38
 
39
39
 
40
40
  var _chunkOJPQTOMNjs = require('./chunk-OJPQTOMN.js');
@@ -317,7 +317,7 @@ var QuizResultModal = ({
317
317
  description,
318
318
  footer
319
319
  }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
320
- _chunkTUIEB7NYjs.Modal_default,
320
+ _chunkLS4EGCEJjs.Modal_default,
321
321
  {
322
322
  isOpen,
323
323
  onClose,
@@ -553,7 +553,7 @@ var QuizFooter = _react.forwardRef.call(void 0,
553
553
  }
554
554
  ),
555
555
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
556
- _chunkTUIEB7NYjs.Modal_default,
556
+ _chunkLS4EGCEJjs.Modal_default,
557
557
  {
558
558
  isOpen: isModalOpen("modalNavigate"),
559
559
  onClose: closeModal,
@@ -589,7 +589,7 @@ var QuizFooter = _react.forwardRef.call(void 0,
589
589
  }
590
590
  ),
591
591
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
592
- _chunkTUIEB7NYjs.Modal_default,
592
+ _chunkLS4EGCEJjs.Modal_default,
593
593
  {
594
594
  isOpen: isModalOpen("modalResolution"),
595
595
  onClose: closeModal,
@@ -704,4 +704,4 @@ var QuizFooter = _react.forwardRef.call(void 0,
704
704
 
705
705
 
706
706
  exports.getQuizTypeConfig = getQuizTypeConfig; exports.getTypeLabel = getTypeLabel; exports.getQuizArticle = getQuizArticle; exports.getQuizPreposition = getQuizPreposition; exports.getCompletionTitle = getCompletionTitle; exports.getGoBackButtonLabel = getGoBackButtonLabel; exports.getExitConfirmationText = getExitConfirmationText; exports.getFinishConfirmationText = getFinishConfirmationText; exports.Quiz = Quiz; exports.QuizTitle = QuizTitle; exports.QuizHeader = QuizHeader; exports.QuizContent = QuizContent; exports.QuizQuestionList = QuizQuestionList; exports.QuizFooter = QuizFooter;
707
- //# sourceMappingURL=chunk-GNUM5L6F.js.map
707
+ //# sourceMappingURL=chunk-GYYFSFYJ.js.map