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
@@ -6,7 +6,7 @@ var _chunkHMIMGXGBjs = require('./chunk-HMIMGXGB.js');
6
6
  var _chunkVVO3W2SMjs = require('./chunk-VVO3W2SM.js');
7
7
 
8
8
 
9
- var _chunk23PAYKWBjs = require('./chunk-23PAYKWB.js');
9
+ var _chunkKM27ZDHZjs = require('./chunk-KM27ZDHZ.js');
10
10
 
11
11
 
12
12
  var _chunkXN2HPVVHjs = require('./chunk-XN2HPVVH.js');
@@ -147,7 +147,7 @@ function ImageDialog({
147
147
  };
148
148
  const canInsert = inputMode === "url" ? !!url.trim() : !!file;
149
149
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
150
- _chunk23PAYKWBjs.Modal_default,
150
+ _chunkKM27ZDHZjs.Modal_default,
151
151
  {
152
152
  isOpen: open,
153
153
  onClose: handleClose,
@@ -261,4 +261,4 @@ function ImageDialog({
261
261
 
262
262
 
263
263
  exports.MAX_IMAGE_SIZE = MAX_IMAGE_SIZE; exports.MIN_IMAGE_WIDTH = MIN_IMAGE_WIDTH; exports.MIN_IMAGE_HEIGHT = MIN_IMAGE_HEIGHT; exports.parseImageWidth = parseImageWidth; exports.resolveInsertWidth = resolveInsertWidth; exports.ImageDialog = ImageDialog;
264
- //# sourceMappingURL=chunk-7YQTDJFA.js.map
264
+ //# sourceMappingURL=chunk-DKXSR2V3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-7YQTDJFA.js","../src/components/RichEditor/components/imageSize.ts","../src/components/RichEditor/components/ImageDialog.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-7YQTDJFA.js","sourcesContent":[null,"/**\n * Shared sizing rules for resizable images inside the RichEditor.\n *\n * Both the Tiptap image extension and the image insertion dialog need the same\n * numbers, so they live here instead of being duplicated on each side.\n */\n\n/**\n * Largest file the editor accepts, in bytes.\n * Matches the 5MB cap enforced by the backend pre-signed URL schema, so the\n * client never accepts a file the server will reject.\n */\nexport const MAX_IMAGE_SIZE = 5 * 1024 * 1024;\n\n/** Smallest width a resize handle may produce, in pixels. */\nexport const MIN_IMAGE_WIDTH = 48;\n\n/**\n * Smallest height a resize handle may produce, in pixels.\n * Lower than the width floor so wide, short banners can still be shrunk without\n * the height constraint fighting the width.\n */\nexport const MIN_IMAGE_HEIGHT = 24;\n\n/**\n * Width applied on insert when the source image is wider than this.\n * Exam boards upload figures at their original scan resolution, which would\n * otherwise fill the whole statement.\n */\nexport const DEFAULT_MAX_INSERT_WIDTH = 640;\n\n/** Milliseconds to wait for an image to load before giving up on measuring it. */\nconst MEASURE_TIMEOUT_MS = 3000;\n\n/**\n * Converts a raw width value into a usable number of pixels.\n * Percentages and other units are rejected: the resizable node view appends\n * `px` to whatever it is given, so a stored `50%` would become `50%px`.\n * @param value - Raw attribute or style value\n * @returns The width in pixels, or null when it cannot be used\n */\nconst toPixelWidth = (value: string | null): number | null => {\n if (!value) return null;\n\n const trimmed = value.trim();\n // Accepts \"400\" and \"400px\" only. Anything else (%, em, vw, calc) is dropped.\n const match = /^(\\d+(?:\\.\\d+)?)(px)?$/i.exec(trimmed);\n if (!match) return null;\n\n // Rounding is checked instead of the parsed value: `0.4px` is positive but\n // rounds to zero, and a `width=\"0\"` would make the image vanish.\n const rounded = Math.round(Number.parseFloat(match[1]));\n return rounded > 0 ? rounded : null;\n};\n\n/**\n * Reads a usable pixel width from an `<img>` element.\n * The `width` attribute wins; an inline `width: Npx` style is used as fallback\n * so images pasted from other editors keep their intended size.\n * @param element - The image element being parsed by Tiptap\n * @returns The width in pixels, or null when the image has no usable width\n */\nexport const parseImageWidth = (element: HTMLElement): number | null => {\n const fromAttribute = toPixelWidth(element.getAttribute('width'));\n if (fromAttribute !== null) return fromAttribute;\n\n // `element.style.width` is the declaration the browser actually applies, so a\n // duplicated `width: 320px; width: 50%` resolves to `50%` and is rejected —\n // matching the source instead of the first value that happens to parse.\n return toPixelWidth(element.style.width);\n};\n\n/**\n * Loads an image off-DOM to discover its natural width.\n * Never rejects: a broken URL or a slow CDN resolves to null so the caller can\n * insert the image without a width instead of blocking on the network.\n * @param src - Public URL of the image\n * @param timeoutMs - How long to wait before giving up\n * @returns The natural width in pixels, or null when it cannot be measured\n */\nexport const measureNaturalWidth = (\n src: string,\n timeoutMs: number = MEASURE_TIMEOUT_MS\n): Promise<number | null> => {\n if (!src || globalThis.Image === undefined) {\n return Promise.resolve(null);\n }\n\n return new Promise((resolve) => {\n const image = new globalThis.Image();\n let settled = false;\n\n const finish = (width: number | null) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n image.onload = null;\n image.onerror = null;\n resolve(width);\n };\n\n const timeoutId = globalThis.setTimeout(() => finish(null), timeoutMs);\n\n image.onload = () => finish(image.naturalWidth || null);\n image.onerror = () => finish(null);\n image.src = src;\n });\n};\n\n/**\n * Resolves the width an image should be inserted with.\n * Exam board images are uploaded at their original scan resolution, so anything\n * wider than the cap is clamped up front. Images already within the cap get no\n * width attribute at all, leaving existing content untouched.\n * @param src - Public URL of the image about to be inserted\n * @returns The width in pixels, or undefined when no clamping is needed\n */\nexport const resolveInsertWidth = async (\n src: string\n): Promise<number | undefined> => {\n const naturalWidth = await measureNaturalWidth(src);\n return naturalWidth && naturalWidth > DEFAULT_MAX_INSERT_WIDTH\n ? DEFAULT_MAX_INSERT_WIDTH\n : undefined;\n};\n","import { useState, useRef, ChangeEvent } from 'react';\nimport Button from '../../Button/Button';\nimport Input from '../../Input/Input';\nimport ImageUpload from '../../ImageUpload/ImageUpload';\nimport Modal from '../../Modal/Modal';\nimport Text from '../../Text/Text';\nimport { LinkIcon } from '@phosphor-icons/react/dist/csr/Link';\nimport { UploadSimpleIcon } from '@phosphor-icons/react/dist/csr/UploadSimple';\nimport { MAX_IMAGE_SIZE, resolveInsertWidth } from './imageSize';\n\ntype InputMode = 'file' | 'url';\n\ninterface ImageDialogProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly onInsert: (src: string, alt: string, width?: number) => void;\n /**\n * Optional callback to upload an image file and get back its public URL.\n * If provided, the file upload tab is enabled; otherwise only URL input is\n * available. The library stays agnostic of how the consumer uploads.\n * @param file - The image file selected by the user\n * @returns Promise resolving to the public URL of the uploaded image\n */\n readonly onUploadImage?: (file: File) => Promise<string>;\n}\n\nexport function ImageDialog({\n open,\n onClose,\n onInsert,\n onUploadImage,\n}: ImageDialogProps) {\n const [inputMode, setInputMode] = useState<InputMode>(\n onUploadImage ? 'file' : 'url'\n );\n const [file, setFile] = useState<File | null>(null);\n const [url, setUrl] = useState('');\n const [alt, setAlt] = useState('');\n const [isUploading, setIsUploading] = useState(false);\n /**\n * True while the image is being measured. The URL branch has no upload to\n * wait on, so without this the confirm button would stay enabled during the\n * measurement and a second click would insert the same image twice.\n */\n const [isMeasuring, setIsMeasuring] = useState(false);\n const [error, setError] = useState('');\n /** Bumped on close so a resolving upload can tell it has been superseded. */\n const uploadTokenRef = useRef(0);\n\n const isBusy = isUploading || isMeasuring;\n\n const resetState = () => {\n setInputMode(onUploadImage ? 'file' : 'url');\n setFile(null);\n setUrl('');\n setAlt('');\n setIsUploading(false);\n setIsMeasuring(false);\n setError('');\n };\n\n const handleClose = () => {\n // Invalidates any upload still in flight. The Modal closes on Escape and on\n // its X button, so the user can dismiss the dialog mid-upload; without this\n // the promise would resolve afterwards and insert an image they cancelled.\n uploadTokenRef.current += 1;\n resetState();\n onClose();\n };\n\n const handleFileSelect = (selected: File) => {\n setFile(selected);\n setError('');\n };\n\n const handleSizeError = () => {\n setFile(null);\n setError('A imagem deve ter no máximo 5MB.');\n };\n\n const handleTypeError = () => {\n setFile(null);\n setError('Selecione um arquivo de imagem válido.');\n };\n\n const switchMode = (mode: InputMode) => {\n setInputMode(mode);\n setError('');\n };\n\n /** Inserts an image already available at `src`, measuring it first. */\n const insertMeasured = async (src: string) => {\n const token = uploadTokenRef.current;\n const width = await resolveInsertWidth(src);\n if (token !== uploadTokenRef.current) return;\n onInsert(src, alt.trim(), width);\n resetState();\n };\n\n const handleInsert = async () => {\n if (inputMode === 'url') {\n const trimmedUrl = url.trim();\n if (!trimmedUrl) return;\n\n // Marked busy before the first await so the confirm button is disabled\n // while measuring — otherwise a second click would insert the same image\n // twice, since the URL branch has no upload to keep it disabled.\n setIsMeasuring(true);\n try {\n await insertMeasured(trimmedUrl);\n } finally {\n setIsMeasuring(false);\n }\n return;\n }\n\n if (!file || !onUploadImage) return;\n\n setIsUploading(true);\n setError('');\n const token = uploadTokenRef.current;\n\n try {\n // Upload before inserting so the saved HTML never holds a blob: URL,\n // which would break as soon as the page unloads.\n const uploadedUrl = await onUploadImage(file);\n if (token !== uploadTokenRef.current) return;\n await insertMeasured(uploadedUrl);\n } catch (err) {\n if (token !== uploadTokenRef.current) return;\n setError(err instanceof Error ? err.message : 'Erro ao enviar a imagem.');\n } finally {\n setIsUploading(false);\n }\n };\n\n const canInsert = inputMode === 'url' ? !!url.trim() : !!file;\n\n return (\n <Modal\n isOpen={open}\n onClose={handleClose}\n title=\"Inserir imagem\"\n size=\"md\"\n footer={\n <>\n <Button\n variant=\"outline\"\n onClick={handleClose}\n disabled={isUploading}\n >\n Cancelar\n </Button>\n <Button\n variant=\"solid\"\n action=\"primary\"\n onClick={handleInsert}\n disabled={!canInsert || isBusy}\n >\n {isUploading ? 'Enviando...' : 'Inserir imagem'}\n </Button>\n </>\n }\n >\n <div className=\"flex flex-col gap-4\">\n {onUploadImage && (\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant={inputMode === 'file' ? 'solid' : 'outline'}\n action=\"primary\"\n size=\"small\"\n onClick={() => switchMode('file')}\n className=\"flex items-center gap-1\"\n >\n <UploadSimpleIcon size={14} />\n Enviar arquivo\n </Button>\n <Button\n type=\"button\"\n variant={inputMode === 'url' ? 'solid' : 'outline'}\n action=\"primary\"\n size=\"small\"\n onClick={() => switchMode('url')}\n className=\"flex items-center gap-1\"\n >\n <LinkIcon size={14} />\n Usar URL\n </Button>\n </div>\n )}\n\n {inputMode === 'file' && onUploadImage ? (\n <div>\n <ImageUpload\n selectedFile={file}\n onFileSelect={handleFileSelect}\n onRemoveFile={() => setFile(null)}\n // Defaults to \"Inserir imagem\", which would collide with the\n // dialog's confirm button — same name, different action.\n buttonText=\"Selecionar arquivo\"\n maxSize={MAX_IMAGE_SIZE}\n onSizeError={handleSizeError}\n onTypeError={handleTypeError}\n disabled={isUploading}\n />\n <Text size=\"xs\" className=\"text-text-400 mt-1\">\n Formatos aceitos: PNG, JPG, GIF, WEBP (máx. 5MB)\n </Text>\n </div>\n ) : (\n <div>\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2 block\">\n URL da imagem\n </Text>\n <Input\n type=\"text\"\n value={url}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setUrl(e.target.value)\n }\n placeholder=\"https://exemplo.com/imagem.png\"\n />\n </div>\n )}\n\n <div>\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2 block\">\n Texto alternativo (opcional)\n </Text>\n <Input\n type=\"text\"\n value={alt}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setAlt(e.target.value)\n }\n placeholder=\"Descreva a imagem para leitores de tela\"\n disabled={isUploading}\n />\n </div>\n\n {error && (\n <Text size=\"xs\" className=\"text-error-600\">\n {error}\n </Text>\n )}\n </div>\n </Modal>\n );\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-DKXSR2V3.js","../src/components/RichEditor/components/imageSize.ts","../src/components/RichEditor/components/ImageDialog.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-DKXSR2V3.js","sourcesContent":[null,"/**\n * Shared sizing rules for resizable images inside the RichEditor.\n *\n * Both the Tiptap image extension and the image insertion dialog need the same\n * numbers, so they live here instead of being duplicated on each side.\n */\n\n/**\n * Largest file the editor accepts, in bytes.\n * Matches the 5MB cap enforced by the backend pre-signed URL schema, so the\n * client never accepts a file the server will reject.\n */\nexport const MAX_IMAGE_SIZE = 5 * 1024 * 1024;\n\n/** Smallest width a resize handle may produce, in pixels. */\nexport const MIN_IMAGE_WIDTH = 48;\n\n/**\n * Smallest height a resize handle may produce, in pixels.\n * Lower than the width floor so wide, short banners can still be shrunk without\n * the height constraint fighting the width.\n */\nexport const MIN_IMAGE_HEIGHT = 24;\n\n/**\n * Width applied on insert when the source image is wider than this.\n * Exam boards upload figures at their original scan resolution, which would\n * otherwise fill the whole statement.\n */\nexport const DEFAULT_MAX_INSERT_WIDTH = 640;\n\n/** Milliseconds to wait for an image to load before giving up on measuring it. */\nconst MEASURE_TIMEOUT_MS = 3000;\n\n/**\n * Converts a raw width value into a usable number of pixels.\n * Percentages and other units are rejected: the resizable node view appends\n * `px` to whatever it is given, so a stored `50%` would become `50%px`.\n * @param value - Raw attribute or style value\n * @returns The width in pixels, or null when it cannot be used\n */\nconst toPixelWidth = (value: string | null): number | null => {\n if (!value) return null;\n\n const trimmed = value.trim();\n // Accepts \"400\" and \"400px\" only. Anything else (%, em, vw, calc) is dropped.\n const match = /^(\\d+(?:\\.\\d+)?)(px)?$/i.exec(trimmed);\n if (!match) return null;\n\n // Rounding is checked instead of the parsed value: `0.4px` is positive but\n // rounds to zero, and a `width=\"0\"` would make the image vanish.\n const rounded = Math.round(Number.parseFloat(match[1]));\n return rounded > 0 ? rounded : null;\n};\n\n/**\n * Reads a usable pixel width from an `<img>` element.\n * The `width` attribute wins; an inline `width: Npx` style is used as fallback\n * so images pasted from other editors keep their intended size.\n * @param element - The image element being parsed by Tiptap\n * @returns The width in pixels, or null when the image has no usable width\n */\nexport const parseImageWidth = (element: HTMLElement): number | null => {\n const fromAttribute = toPixelWidth(element.getAttribute('width'));\n if (fromAttribute !== null) return fromAttribute;\n\n // `element.style.width` is the declaration the browser actually applies, so a\n // duplicated `width: 320px; width: 50%` resolves to `50%` and is rejected —\n // matching the source instead of the first value that happens to parse.\n return toPixelWidth(element.style.width);\n};\n\n/**\n * Loads an image off-DOM to discover its natural width.\n * Never rejects: a broken URL or a slow CDN resolves to null so the caller can\n * insert the image without a width instead of blocking on the network.\n * @param src - Public URL of the image\n * @param timeoutMs - How long to wait before giving up\n * @returns The natural width in pixels, or null when it cannot be measured\n */\nexport const measureNaturalWidth = (\n src: string,\n timeoutMs: number = MEASURE_TIMEOUT_MS\n): Promise<number | null> => {\n if (!src || globalThis.Image === undefined) {\n return Promise.resolve(null);\n }\n\n return new Promise((resolve) => {\n const image = new globalThis.Image();\n let settled = false;\n\n const finish = (width: number | null) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n image.onload = null;\n image.onerror = null;\n resolve(width);\n };\n\n const timeoutId = globalThis.setTimeout(() => finish(null), timeoutMs);\n\n image.onload = () => finish(image.naturalWidth || null);\n image.onerror = () => finish(null);\n image.src = src;\n });\n};\n\n/**\n * Resolves the width an image should be inserted with.\n * Exam board images are uploaded at their original scan resolution, so anything\n * wider than the cap is clamped up front. Images already within the cap get no\n * width attribute at all, leaving existing content untouched.\n * @param src - Public URL of the image about to be inserted\n * @returns The width in pixels, or undefined when no clamping is needed\n */\nexport const resolveInsertWidth = async (\n src: string\n): Promise<number | undefined> => {\n const naturalWidth = await measureNaturalWidth(src);\n return naturalWidth && naturalWidth > DEFAULT_MAX_INSERT_WIDTH\n ? DEFAULT_MAX_INSERT_WIDTH\n : undefined;\n};\n","import { useState, useRef, ChangeEvent } from 'react';\nimport Button from '../../Button/Button';\nimport Input from '../../Input/Input';\nimport ImageUpload from '../../ImageUpload/ImageUpload';\nimport Modal from '../../Modal/Modal';\nimport Text from '../../Text/Text';\nimport { LinkIcon } from '@phosphor-icons/react/dist/csr/Link';\nimport { UploadSimpleIcon } from '@phosphor-icons/react/dist/csr/UploadSimple';\nimport { MAX_IMAGE_SIZE, resolveInsertWidth } from './imageSize';\n\ntype InputMode = 'file' | 'url';\n\ninterface ImageDialogProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly onInsert: (src: string, alt: string, width?: number) => void;\n /**\n * Optional callback to upload an image file and get back its public URL.\n * If provided, the file upload tab is enabled; otherwise only URL input is\n * available. The library stays agnostic of how the consumer uploads.\n * @param file - The image file selected by the user\n * @returns Promise resolving to the public URL of the uploaded image\n */\n readonly onUploadImage?: (file: File) => Promise<string>;\n}\n\nexport function ImageDialog({\n open,\n onClose,\n onInsert,\n onUploadImage,\n}: ImageDialogProps) {\n const [inputMode, setInputMode] = useState<InputMode>(\n onUploadImage ? 'file' : 'url'\n );\n const [file, setFile] = useState<File | null>(null);\n const [url, setUrl] = useState('');\n const [alt, setAlt] = useState('');\n const [isUploading, setIsUploading] = useState(false);\n /**\n * True while the image is being measured. The URL branch has no upload to\n * wait on, so without this the confirm button would stay enabled during the\n * measurement and a second click would insert the same image twice.\n */\n const [isMeasuring, setIsMeasuring] = useState(false);\n const [error, setError] = useState('');\n /** Bumped on close so a resolving upload can tell it has been superseded. */\n const uploadTokenRef = useRef(0);\n\n const isBusy = isUploading || isMeasuring;\n\n const resetState = () => {\n setInputMode(onUploadImage ? 'file' : 'url');\n setFile(null);\n setUrl('');\n setAlt('');\n setIsUploading(false);\n setIsMeasuring(false);\n setError('');\n };\n\n const handleClose = () => {\n // Invalidates any upload still in flight. The Modal closes on Escape and on\n // its X button, so the user can dismiss the dialog mid-upload; without this\n // the promise would resolve afterwards and insert an image they cancelled.\n uploadTokenRef.current += 1;\n resetState();\n onClose();\n };\n\n const handleFileSelect = (selected: File) => {\n setFile(selected);\n setError('');\n };\n\n const handleSizeError = () => {\n setFile(null);\n setError('A imagem deve ter no máximo 5MB.');\n };\n\n const handleTypeError = () => {\n setFile(null);\n setError('Selecione um arquivo de imagem válido.');\n };\n\n const switchMode = (mode: InputMode) => {\n setInputMode(mode);\n setError('');\n };\n\n /** Inserts an image already available at `src`, measuring it first. */\n const insertMeasured = async (src: string) => {\n const token = uploadTokenRef.current;\n const width = await resolveInsertWidth(src);\n if (token !== uploadTokenRef.current) return;\n onInsert(src, alt.trim(), width);\n resetState();\n };\n\n const handleInsert = async () => {\n if (inputMode === 'url') {\n const trimmedUrl = url.trim();\n if (!trimmedUrl) return;\n\n // Marked busy before the first await so the confirm button is disabled\n // while measuring — otherwise a second click would insert the same image\n // twice, since the URL branch has no upload to keep it disabled.\n setIsMeasuring(true);\n try {\n await insertMeasured(trimmedUrl);\n } finally {\n setIsMeasuring(false);\n }\n return;\n }\n\n if (!file || !onUploadImage) return;\n\n setIsUploading(true);\n setError('');\n const token = uploadTokenRef.current;\n\n try {\n // Upload before inserting so the saved HTML never holds a blob: URL,\n // which would break as soon as the page unloads.\n const uploadedUrl = await onUploadImage(file);\n if (token !== uploadTokenRef.current) return;\n await insertMeasured(uploadedUrl);\n } catch (err) {\n if (token !== uploadTokenRef.current) return;\n setError(err instanceof Error ? err.message : 'Erro ao enviar a imagem.');\n } finally {\n setIsUploading(false);\n }\n };\n\n const canInsert = inputMode === 'url' ? !!url.trim() : !!file;\n\n return (\n <Modal\n isOpen={open}\n onClose={handleClose}\n title=\"Inserir imagem\"\n size=\"md\"\n footer={\n <>\n <Button\n variant=\"outline\"\n onClick={handleClose}\n disabled={isUploading}\n >\n Cancelar\n </Button>\n <Button\n variant=\"solid\"\n action=\"primary\"\n onClick={handleInsert}\n disabled={!canInsert || isBusy}\n >\n {isUploading ? 'Enviando...' : 'Inserir imagem'}\n </Button>\n </>\n }\n >\n <div className=\"flex flex-col gap-4\">\n {onUploadImage && (\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant={inputMode === 'file' ? 'solid' : 'outline'}\n action=\"primary\"\n size=\"small\"\n onClick={() => switchMode('file')}\n className=\"flex items-center gap-1\"\n >\n <UploadSimpleIcon size={14} />\n Enviar arquivo\n </Button>\n <Button\n type=\"button\"\n variant={inputMode === 'url' ? 'solid' : 'outline'}\n action=\"primary\"\n size=\"small\"\n onClick={() => switchMode('url')}\n className=\"flex items-center gap-1\"\n >\n <LinkIcon size={14} />\n Usar URL\n </Button>\n </div>\n )}\n\n {inputMode === 'file' && onUploadImage ? (\n <div>\n <ImageUpload\n selectedFile={file}\n onFileSelect={handleFileSelect}\n onRemoveFile={() => setFile(null)}\n // Defaults to \"Inserir imagem\", which would collide with the\n // dialog's confirm button — same name, different action.\n buttonText=\"Selecionar arquivo\"\n maxSize={MAX_IMAGE_SIZE}\n onSizeError={handleSizeError}\n onTypeError={handleTypeError}\n disabled={isUploading}\n />\n <Text size=\"xs\" className=\"text-text-400 mt-1\">\n Formatos aceitos: PNG, JPG, GIF, WEBP (máx. 5MB)\n </Text>\n </div>\n ) : (\n <div>\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2 block\">\n URL da imagem\n </Text>\n <Input\n type=\"text\"\n value={url}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setUrl(e.target.value)\n }\n placeholder=\"https://exemplo.com/imagem.png\"\n />\n </div>\n )}\n\n <div>\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2 block\">\n Texto alternativo (opcional)\n </Text>\n <Input\n type=\"text\"\n value={alt}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setAlt(e.target.value)\n }\n placeholder=\"Descreva a imagem para leitores de tela\"\n disabled={isUploading}\n />\n </div>\n\n {error && (\n <Text size=\"xs\" className=\"text-error-600\">\n {error}\n </Text>\n )}\n </div>\n </Modal>\n );\n}\n"]}
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  SupportChatComposer_default
3
- } from "./chunk-I4QGQMXI.mjs";
3
+ } from "./chunk-EXYXZFNK.mjs";
4
4
  import {
5
5
  SupportStatusBanner
6
6
  } from "./chunk-IO2GOUTV.mjs";
7
7
  import {
8
8
  SupportConversationHeader
9
- } from "./chunk-3RHNJUXU.mjs";
9
+ } from "./chunk-ACSEJOW6.mjs";
10
10
  import {
11
11
  SupportConversationMessages
12
- } from "./chunk-K45PTE7F.mjs";
12
+ } from "./chunk-RBKQXT73.mjs";
13
13
  import {
14
14
  SupportConcludeModal
15
- } from "./chunk-L5SXG6T6.mjs";
15
+ } from "./chunk-QQKOHKO2.mjs";
16
16
  import {
17
17
  Button_default
18
18
  } from "./chunk-ZQZBOTZJ.mjs";
@@ -106,4 +106,4 @@ function SupportTicketConversation({
106
106
  export {
107
107
  SupportTicketConversation
108
108
  };
109
- //# sourceMappingURL=chunk-I6EAPPBL.mjs.map
109
+ //# sourceMappingURL=chunk-DZMYIOKZ.mjs.map
@@ -16,7 +16,7 @@ var _chunkJVDEOFXDjs = require('./chunk-JVDEOFXD.js');
16
16
 
17
17
 
18
18
 
19
- var _chunkRBJAO57Ajs = require('./chunk-RBJAO57A.js');
19
+ var _chunkFAAR4XC5js = require('./chunk-FAAR4XC5.js');
20
20
 
21
21
 
22
22
  var _chunkANT66KVKjs = require('./chunk-ANT66KVK.js');
@@ -113,9 +113,9 @@ function SupportConversationHeader({
113
113
  !compact && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap items-center gap-x-6 gap-y-2", children: [
114
114
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
115
115
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", color: "text-text-600", children: "Status" }),
116
- canChangeStatus ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkRBJAO57Ajs.DropdownMenu_default, { children: [
116
+ canChangeStatus ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkFAAR4XC5js.DropdownMenu_default, { children: [
117
117
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
118
- _chunkRBJAO57Ajs.DropdownMenuTrigger,
118
+ _chunkFAAR4XC5js.DropdownMenuTrigger,
119
119
  {
120
120
  "aria-label": `Status: ${status.label}. Alterar status`,
121
121
  className: "flex items-center gap-1 rounded-md p-0.5 hover:bg-background-50",
@@ -125,8 +125,8 @@ function SupportConversationHeader({
125
125
  ]
126
126
  }
127
127
  ),
128
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRBJAO57Ajs.DropdownMenuContent, { align: "start", children: _optionalChain([statusOptions, 'optionalAccess', _3 => _3.map, 'call', _4 => _4((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
129
- _chunkRBJAO57Ajs.DropdownMenuItem,
128
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFAAR4XC5js.DropdownMenuContent, { align: "start", children: _optionalChain([statusOptions, 'optionalAccess', _3 => _3.map, 'call', _4 => _4((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
129
+ _chunkFAAR4XC5js.DropdownMenuItem,
130
130
  {
131
131
  onClick: () => _optionalChain([onStatusChange, 'optionalCall', _5 => _5(option.value)]),
132
132
  children: option.label
@@ -188,4 +188,4 @@ function SupportConversationHeader({
188
188
 
189
189
 
190
190
  exports.SupportConversationHeader = SupportConversationHeader;
191
- //# sourceMappingURL=chunk-SKM7NFPY.js.map
191
+ //# sourceMappingURL=chunk-EPXAFJVW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-SKM7NFPY.js","../src/components/SupportConversation/SupportConversationHeader.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-SKM7NFPY.js","sourcesContent":[null,"import { useId, type ReactNode } from 'react';\nimport { SidebarSimpleIcon } from '@phosphor-icons/react/dist/csr/SidebarSimple';\nimport { CaretDownIcon } from '@phosphor-icons/react/dist/csr/CaretDown';\nimport { DeviceMobileIcon } from '@phosphor-icons/react/dist/csr/DeviceMobile';\nimport { DesktopIcon } from '@phosphor-icons/react/dist/csr/Desktop';\nimport { EnvelopeIcon } from '@phosphor-icons/react/dist/csr/Envelope';\nimport { ChatCircleTextIcon } from '@phosphor-icons/react/dist/csr/ChatCircleText';\nimport Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport IconButton from '../IconButton/IconButton';\nimport Select, {\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../Select/Select';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '../DropdownMenu/DropdownMenu';\nimport { cn } from '../../utils/utils';\nimport type {\n SupportConversationChannel,\n SupportConversationOption,\n SupportConversationStatusTone,\n} from '../../types/supportConversation';\n\n/**\n * Props of the SupportConversationHeader component\n */\nexport interface SupportConversationHeaderProps {\n /** Ticket code as shown in the list, e.g. \"#4819\" */\n ticketCode: string;\n /** Name of the requester */\n name: string;\n /** Current status, as a badge (e.g. \"HUMANO\" in warning) */\n status: { label: string; tone?: SupportConversationStatusTone };\n /**\n * Statuses the agent can switch to from the badge. Without them (or without\n * `onStatusChange`) the badge is read-only.\n */\n statusOptions?: SupportConversationOption[];\n onStatusChange?: (value: string) => void;\n /** Value of the \"Atendido por\" select (e.g. \"HUMANO\") */\n attendedBy?: string;\n /** Options of the \"Atendido por\" select (e.g. Humano / IA) */\n attendedByOptions?: SupportConversationOption[];\n onAttendedByChange?: (value: string) => void;\n /** Channel the ticket came from */\n channel?: SupportConversationChannel;\n /** Institution of the requester, after the channel (\"App · Rede…\") */\n institution?: string;\n /** Whether the details panel is open (drives the toggle button state) */\n isDetailsOpen?: boolean;\n /** Opens or closes the details panel; the button only renders with it */\n onToggleDetails?: () => void;\n /** Extra actions on the title row, e.g. \"Concluir\" and the \"…\" menu */\n actions?: ReactNode;\n /** Locks the selects (e.g. concluded ticket) */\n readOnly?: boolean;\n /**\n * One row only: code, name and the status badge (read-only), plus the\n * actions and the details toggle. The status and \"Atendido por\" selects and\n * the channel are left to the details panel, saving vertical space.\n */\n compact?: boolean;\n className?: string;\n}\n\n/** Default icon of each known channel */\nconst CHANNEL_ICONS: Record<string, ReactNode> = {\n App: <DeviceMobileIcon size={16} />,\n Web: <DesktopIcon size={16} />,\n 'E-mail': <EnvelopeIcon size={16} />,\n WhatsApp: <ChatCircleTextIcon size={16} />,\n};\n\n/**\n * Header of the support conversation.\n *\n * Title row: ticket code, requester name, optional actions and the button\n * that opens or closes the details panel (the parent owns that state and the\n * layout). Meta row: status badge (with a dropdown to change it), the\n * \"Atendido por\" select and the channel and institution.\n */\nexport default function SupportConversationHeader({\n ticketCode,\n name,\n status,\n statusOptions,\n onStatusChange,\n attendedBy,\n attendedByOptions,\n onAttendedByChange,\n channel,\n institution,\n isDetailsOpen = false,\n onToggleDetails,\n actions,\n readOnly = false,\n compact = false,\n className,\n}: Readonly<SupportConversationHeaderProps>) {\n const attendedByLabelId = useId();\n const canChangeStatus =\n !readOnly && Boolean(onStatusChange && statusOptions?.length);\n const channelText = [channel?.label, institution].filter(Boolean).join(' · ');\n\n const badge = (\n <Badge\n variant=\"solid\"\n action={status.tone ?? 'warning'}\n size=\"small\"\n data-testid=\"support-conversation-status\"\n >\n {status.label}\n </Badge>\n );\n\n return (\n <header\n className={cn(\n 'flex flex-col gap-3 border-b border-border-100 px-6',\n compact ? 'py-3' : 'py-4',\n className\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-baseline gap-2\">\n <Text size=\"sm\" color=\"text-text-500\" className=\"shrink-0\">\n {ticketCode}\n </Text>\n <Text\n as=\"h2\"\n size=\"xl\"\n weight=\"bold\"\n color=\"text-text-950\"\n className=\"truncate\"\n >\n {name}\n </Text>\n {compact && <span className=\"shrink-0 self-center\">{badge}</span>}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions}\n {onToggleDetails && (\n <IconButton\n icon={<SidebarSimpleIcon size={22} mirrored />}\n size=\"md\"\n aria-label={isDetailsOpen ? 'Fechar detalhes' : 'Abrir detalhes'}\n aria-expanded={isDetailsOpen}\n active={isDetailsOpen}\n onClick={onToggleDetails}\n />\n )}\n </div>\n </div>\n\n {!compact && (\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-2\">\n <div className=\"flex items-center gap-2\">\n <Text size=\"sm\" color=\"text-text-600\">\n Status\n </Text>\n {canChangeStatus ? (\n <DropdownMenu>\n <DropdownMenuTrigger\n aria-label={`Status: ${status.label}. Alterar status`}\n className=\"flex items-center gap-1 rounded-md p-0.5 hover:bg-background-50\"\n >\n {badge}\n <CaretDownIcon size={16} className=\"text-text-600\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {statusOptions?.map((option) => (\n <DropdownMenuItem\n key={option.value}\n onClick={() => onStatusChange?.(option.value)}\n >\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n badge\n )}\n </div>\n\n {attendedByOptions && attendedByOptions.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Text\n id={attendedByLabelId}\n size=\"sm\"\n color=\"text-text-600\"\n className=\"shrink-0\"\n >\n Atendido por\n </Text>\n <Select\n value={attendedBy}\n onValueChange={(value) => {\n if (value !== attendedBy) onAttendedByChange?.(value);\n }}\n >\n <SelectTrigger\n aria-labelledby={attendedByLabelId}\n disabled={readOnly || !onAttendedByChange}\n className=\"w-48\"\n >\n <SelectValue placeholder=\"Selecione\" />\n </SelectTrigger>\n <SelectContent>\n {attendedByOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {channelText && (\n <div\n className=\"ml-auto flex items-center gap-1.5 text-text-600\"\n data-testid=\"support-conversation-channel\"\n >\n {channel && (\n <span aria-hidden=\"true\" className=\"flex\">\n {channel.icon ?? CHANNEL_ICONS[channel.label]}\n </span>\n )}\n <Text size=\"sm\" color=\"text-text-600\">\n {channelText}\n </Text>\n </div>\n )}\n </div>\n )}\n </header>\n );\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-EPXAFJVW.js","../src/components/SupportConversation/SupportConversationHeader.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-EPXAFJVW.js","sourcesContent":[null,"import { useId, type ReactNode } from 'react';\nimport { SidebarSimpleIcon } from '@phosphor-icons/react/dist/csr/SidebarSimple';\nimport { CaretDownIcon } from '@phosphor-icons/react/dist/csr/CaretDown';\nimport { DeviceMobileIcon } from '@phosphor-icons/react/dist/csr/DeviceMobile';\nimport { DesktopIcon } from '@phosphor-icons/react/dist/csr/Desktop';\nimport { EnvelopeIcon } from '@phosphor-icons/react/dist/csr/Envelope';\nimport { ChatCircleTextIcon } from '@phosphor-icons/react/dist/csr/ChatCircleText';\nimport Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport IconButton from '../IconButton/IconButton';\nimport Select, {\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../Select/Select';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '../DropdownMenu/DropdownMenu';\nimport { cn } from '../../utils/utils';\nimport type {\n SupportConversationChannel,\n SupportConversationOption,\n SupportConversationStatusTone,\n} from '../../types/supportConversation';\n\n/**\n * Props of the SupportConversationHeader component\n */\nexport interface SupportConversationHeaderProps {\n /** Ticket code as shown in the list, e.g. \"#4819\" */\n ticketCode: string;\n /** Name of the requester */\n name: string;\n /** Current status, as a badge (e.g. \"HUMANO\" in warning) */\n status: { label: string; tone?: SupportConversationStatusTone };\n /**\n * Statuses the agent can switch to from the badge. Without them (or without\n * `onStatusChange`) the badge is read-only.\n */\n statusOptions?: SupportConversationOption[];\n onStatusChange?: (value: string) => void;\n /** Value of the \"Atendido por\" select (e.g. \"HUMANO\") */\n attendedBy?: string;\n /** Options of the \"Atendido por\" select (e.g. Humano / IA) */\n attendedByOptions?: SupportConversationOption[];\n onAttendedByChange?: (value: string) => void;\n /** Channel the ticket came from */\n channel?: SupportConversationChannel;\n /** Institution of the requester, after the channel (\"App · Rede…\") */\n institution?: string;\n /** Whether the details panel is open (drives the toggle button state) */\n isDetailsOpen?: boolean;\n /** Opens or closes the details panel; the button only renders with it */\n onToggleDetails?: () => void;\n /** Extra actions on the title row, e.g. \"Concluir\" and the \"…\" menu */\n actions?: ReactNode;\n /** Locks the selects (e.g. concluded ticket) */\n readOnly?: boolean;\n /**\n * One row only: code, name and the status badge (read-only), plus the\n * actions and the details toggle. The status and \"Atendido por\" selects and\n * the channel are left to the details panel, saving vertical space.\n */\n compact?: boolean;\n className?: string;\n}\n\n/** Default icon of each known channel */\nconst CHANNEL_ICONS: Record<string, ReactNode> = {\n App: <DeviceMobileIcon size={16} />,\n Web: <DesktopIcon size={16} />,\n 'E-mail': <EnvelopeIcon size={16} />,\n WhatsApp: <ChatCircleTextIcon size={16} />,\n};\n\n/**\n * Header of the support conversation.\n *\n * Title row: ticket code, requester name, optional actions and the button\n * that opens or closes the details panel (the parent owns that state and the\n * layout). Meta row: status badge (with a dropdown to change it), the\n * \"Atendido por\" select and the channel and institution.\n */\nexport default function SupportConversationHeader({\n ticketCode,\n name,\n status,\n statusOptions,\n onStatusChange,\n attendedBy,\n attendedByOptions,\n onAttendedByChange,\n channel,\n institution,\n isDetailsOpen = false,\n onToggleDetails,\n actions,\n readOnly = false,\n compact = false,\n className,\n}: Readonly<SupportConversationHeaderProps>) {\n const attendedByLabelId = useId();\n const canChangeStatus =\n !readOnly && Boolean(onStatusChange && statusOptions?.length);\n const channelText = [channel?.label, institution].filter(Boolean).join(' · ');\n\n const badge = (\n <Badge\n variant=\"solid\"\n action={status.tone ?? 'warning'}\n size=\"small\"\n data-testid=\"support-conversation-status\"\n >\n {status.label}\n </Badge>\n );\n\n return (\n <header\n className={cn(\n 'flex flex-col gap-3 border-b border-border-100 px-6',\n compact ? 'py-3' : 'py-4',\n className\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-baseline gap-2\">\n <Text size=\"sm\" color=\"text-text-500\" className=\"shrink-0\">\n {ticketCode}\n </Text>\n <Text\n as=\"h2\"\n size=\"xl\"\n weight=\"bold\"\n color=\"text-text-950\"\n className=\"truncate\"\n >\n {name}\n </Text>\n {compact && <span className=\"shrink-0 self-center\">{badge}</span>}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions}\n {onToggleDetails && (\n <IconButton\n icon={<SidebarSimpleIcon size={22} mirrored />}\n size=\"md\"\n aria-label={isDetailsOpen ? 'Fechar detalhes' : 'Abrir detalhes'}\n aria-expanded={isDetailsOpen}\n active={isDetailsOpen}\n onClick={onToggleDetails}\n />\n )}\n </div>\n </div>\n\n {!compact && (\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-2\">\n <div className=\"flex items-center gap-2\">\n <Text size=\"sm\" color=\"text-text-600\">\n Status\n </Text>\n {canChangeStatus ? (\n <DropdownMenu>\n <DropdownMenuTrigger\n aria-label={`Status: ${status.label}. Alterar status`}\n className=\"flex items-center gap-1 rounded-md p-0.5 hover:bg-background-50\"\n >\n {badge}\n <CaretDownIcon size={16} className=\"text-text-600\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {statusOptions?.map((option) => (\n <DropdownMenuItem\n key={option.value}\n onClick={() => onStatusChange?.(option.value)}\n >\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n badge\n )}\n </div>\n\n {attendedByOptions && attendedByOptions.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Text\n id={attendedByLabelId}\n size=\"sm\"\n color=\"text-text-600\"\n className=\"shrink-0\"\n >\n Atendido por\n </Text>\n <Select\n value={attendedBy}\n onValueChange={(value) => {\n if (value !== attendedBy) onAttendedByChange?.(value);\n }}\n >\n <SelectTrigger\n aria-labelledby={attendedByLabelId}\n disabled={readOnly || !onAttendedByChange}\n className=\"w-48\"\n >\n <SelectValue placeholder=\"Selecione\" />\n </SelectTrigger>\n <SelectContent>\n {attendedByOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {channelText && (\n <div\n className=\"ml-auto flex items-center gap-1.5 text-text-600\"\n data-testid=\"support-conversation-channel\"\n >\n {channel && (\n <span aria-hidden=\"true\" className=\"flex\">\n {channel.icon ?? CHANNEL_ICONS[channel.label]}\n </span>\n )}\n <Text size=\"sm\" color=\"text-text-600\">\n {channelText}\n </Text>\n </div>\n )}\n </div>\n )}\n </header>\n );\n}\n"]}
@@ -8,10 +8,10 @@ var _chunkCAQ2Q3ONjs = require('./chunk-CAQ2Q3ON.js');
8
8
 
9
9
 
10
10
 
11
- var _chunkRBJAO57Ajs = require('./chunk-RBJAO57A.js');
11
+ var _chunkFAAR4XC5js = require('./chunk-FAAR4XC5.js');
12
12
 
13
13
 
14
- var _chunk23PAYKWBjs = require('./chunk-23PAYKWB.js');
14
+ var _chunkKM27ZDHZjs = require('./chunk-KM27ZDHZ.js');
15
15
 
16
16
  // src/components/CalendarCard/CalendarCard.tsx
17
17
  var _CalendarBlank = require('@phosphor-icons/react/dist/csr/CalendarBlank');
@@ -53,7 +53,7 @@ var CalendarCard = ({
53
53
  }
54
54
  ),
55
55
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
56
- _chunk23PAYKWBjs.Modal_default,
56
+ _chunkKM27ZDHZjs.Modal_default,
57
57
  {
58
58
  isOpen: effectiveOpen,
59
59
  onClose: () => handleOpenChange(false),
@@ -63,9 +63,9 @@ var CalendarCard = ({
63
63
  )
64
64
  ] });
65
65
  }
66
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkRBJAO57Ajs.DropdownMenu_default, { open: effectiveOpen, onOpenChange: handleOpenChange, children: [
66
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkFAAR4XC5js.DropdownMenu_default, { open: effectiveOpen, onOpenChange: handleOpenChange, children: [
67
67
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
68
- _chunkRBJAO57Ajs.DropdownMenuTrigger,
68
+ _chunkFAAR4XC5js.DropdownMenuTrigger,
69
69
  {
70
70
  className: `text-primary cursor-pointer ${_nullishCoalesce(className, () => ( ""))}`,
71
71
  asChild: true,
@@ -80,7 +80,7 @@ var CalendarCard = ({
80
80
  }
81
81
  ),
82
82
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
83
- _chunkRBJAO57Ajs.DropdownMenuContent,
83
+ _chunkFAAR4XC5js.DropdownMenuContent,
84
84
  {
85
85
  role: "dialog",
86
86
  "aria-label": "Calend\xE1rio de atividades",
@@ -98,4 +98,4 @@ var CalendarCard_default = CalendarCard;
98
98
 
99
99
 
100
100
  exports.CalendarCard = CalendarCard; exports.CalendarCard_default = CalendarCard_default;
101
- //# sourceMappingURL=chunk-AYYMS23L.js.map
101
+ //# sourceMappingURL=chunk-ESIQ2GB4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-AYYMS23L.js","../src/components/CalendarCard/CalendarCard.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACfA,6EAAkC;AAElC,8BAAsC;AAiEhB,+CAAA;AA5Bf,IAAM,aAAA,EAAe,CAAC;AAAA,EAC3B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,EAAQ,eAAA;AAAA,EACR;AACF,CAAA,EAAA,GAAyB;AACvB,EAAA,MAAM,EAAE,SAAS,EAAA,EAAI,wCAAA,CAAU;AAC/B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,EAAA,EAAI,6BAAA,KAAc,CAAA;AAEtD,EAAA,MAAM,aAAA,EAAe,OAAA,IAAW,KAAA,CAAA;AAChC,EAAA,MAAM,cAAA,EAAgB,aAAA,EAAe,OAAA,EAAS,YAAA;AAM9C,EAAA,MAAM,iBAAA,EAAmB,gCAAA;AAAA,IACvB,CAAC,IAAA,EAAA,GAAkB;AACjB,MAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AACA,sBAAA,YAAA,wBAAA,CAAe,IAAI,GAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,YAAY;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,UAAA,EAAY,cAAA,EAAgB,mBAAA,EAAqB,cAAA;AACvD,EAAA,MAAM,YAAA,kBAAc,6BAAA,gCAAC,EAAA,EAAkB,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,UAAA,CAAW,CAAA;AAEvE,EAAA,GAAA,CAAI,QAAA,EAAU;AACZ,IAAA,uBACE,8BAAA,oBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,6BAAA;AAAA,QAAC,mCAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,CAAC,aAAa,CAAA;AAAA,UAC9C,YAAA,EAAW,6BAAA;AAAA,UAGX,eAAA,EAAe,aAAA;AAAA,UACf,IAAA,EAAM,WAAA;AAAA,UACN;AAAA,QAAA;AAAA,MACF,CAAA;AAAA,sBACA,6BAAA;AAAA,QAAC,8BAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,UACrC,KAAA;AAAA,UAEA,QAAA,kBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,QAAA,CAAQ;AAAA,QAAA;AAAA,MAChD;AAAA,IAAA,EAAA,CACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,8BAAA,qCAAC,EAAA,EAAa,IAAA,EAAM,aAAA,EAAe,YAAA,EAAc,gBAAA,EAC/C,QAAA,EAAA;AAAA,oBAAA,6BAAA;AAAA,MAAC,oCAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,4BAAA,mBAA+B,SAAA,UAAa,IAAE,CAAA,CAAA;AAClD,QAAA;AAEP,QAAA;AAAC,UAAA;AAAA,UAAA;AACS,YAAA;AACG,YAAA;AACL,YAAA;AAAA,UAAA;AACR,QAAA;AAAA,MAAA;AACF,IAAA;AAGA,oBAAA;AAAC,MAAA;AAAA,MAAA;AACM,QAAA;AACM,QAAA;AACD,QAAA;AACJ,QAAA;AACD,QAAA;AAEJ,QAAA;AAAA,MAAA;AACH,IAAA;AACF,EAAA;AAEJ;AAEe;ADzBmD;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-AYYMS23L.js","sourcesContent":[null,"import { CalendarBlankIcon } from '@phosphor-icons/react/dist/csr/CalendarBlank';\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '../DropdownMenu/DropdownMenu';\nimport IconButton from '../IconButton/IconButton';\nimport Modal from '../Modal/Modal';\nimport { useMobile } from '../../hooks/useMobile';\n\nexport interface CalendarCardProps {\n /** Content rendered inside the calendar (calendar grid + activities list). */\n content: ReactNode;\n /**\n * Whether the calendar surface is currently open.\n * When provided, the component is **controlled**: the consumer is the source of truth.\n * When omitted, the component manages internal state.\n */\n isOpen?: boolean;\n /**\n * Fired whenever the open state changes (user click, outside click,\n * programmatic close, ESC, etc.).\n */\n onOpenChange?: (open: boolean) => void;\n /** Title displayed in the mobile Modal. Default: \"Calendário\". */\n title?: string;\n /** Optional className applied to the trigger button. */\n className?: string;\n}\n\n/**\n * Calendar widget for the app header. Renders a calendar icon trigger that\n * opens a `DropdownMenu` on tablet/desktop and a `Modal` on mobile (<500px).\n *\n * Pairs naturally with `AppHeader`'s `calendarContent` prop. Use the\n * controlled `isOpen` + `onOpenChange` pair when the consumer needs to close\n * the surface programmatically (e.g. on route change).\n */\nexport const CalendarCard = ({\n content,\n isOpen,\n onOpenChange,\n title = 'Calendário',\n className,\n}: CalendarCardProps) => {\n const { isMobile } = useMobile();\n const [internalOpen, setInternalOpen] = useState(false);\n\n const isControlled = isOpen !== undefined;\n const effectiveOpen = isControlled ? isOpen : internalOpen;\n\n // `useCallback` keeps the reference stable across renders, so the\n // `DropdownMenu`'s `useEffect [open, onOpenChange]` doesn't re-fire on\n // every parent re-render (which is what triggers the infinite update loop\n // observed before).\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!isControlled) {\n setInternalOpen(open);\n }\n onOpenChange?.(open);\n },\n [isControlled, onOpenChange]\n );\n\n const iconColor = effectiveOpen ? 'text-primary-950' : 'text-primary';\n const triggerIcon = <CalendarBlankIcon size={24} className={iconColor} />;\n\n if (isMobile) {\n return (\n <>\n <IconButton\n active={effectiveOpen}\n onClick={() => handleOpenChange(!effectiveOpen)}\n aria-label=\"Calendário de atividades\"\n // No mobile o calendário abre um Modal, não um DropdownMenu, então\n // não há trigger para injetar o estado: ele é declarado aqui.\n aria-expanded={effectiveOpen}\n icon={triggerIcon}\n className={className}\n />\n <Modal\n isOpen={effectiveOpen}\n onClose={() => handleOpenChange(false)}\n title={title}\n >\n <div className=\"flex justify-center\">{content}</div>\n </Modal>\n </>\n );\n }\n\n return (\n <DropdownMenu open={effectiveOpen} onOpenChange={handleOpenChange}>\n <DropdownMenuTrigger\n className={`text-primary cursor-pointer ${className ?? ''}`}\n asChild\n >\n <IconButton\n active={effectiveOpen}\n aria-label=\"Calendário de atividades\"\n icon={triggerIcon}\n />\n </DropdownMenuTrigger>\n {/* A calendar is not a list of actions: as a `menu` without menu items\n it was announced as an empty menu */}\n <DropdownMenuContent\n role=\"dialog\"\n aria-label=\"Calendário de atividades\"\n className=\"w-[320px] max-w-[calc(100vw-16px)] max-h-[80vh] overflow-y-auto\"\n align=\"end\"\n side=\"bottom\"\n >\n {content}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default CalendarCard;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-ESIQ2GB4.js","../src/components/CalendarCard/CalendarCard.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACfA,6EAAkC;AAElC,8BAAsC;AAiEhB,+CAAA;AA5Bf,IAAM,aAAA,EAAe,CAAC;AAAA,EAC3B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,EAAQ,eAAA;AAAA,EACR;AACF,CAAA,EAAA,GAAyB;AACvB,EAAA,MAAM,EAAE,SAAS,EAAA,EAAI,wCAAA,CAAU;AAC/B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,EAAA,EAAI,6BAAA,KAAc,CAAA;AAEtD,EAAA,MAAM,aAAA,EAAe,OAAA,IAAW,KAAA,CAAA;AAChC,EAAA,MAAM,cAAA,EAAgB,aAAA,EAAe,OAAA,EAAS,YAAA;AAM9C,EAAA,MAAM,iBAAA,EAAmB,gCAAA;AAAA,IACvB,CAAC,IAAA,EAAA,GAAkB;AACjB,MAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AACA,sBAAA,YAAA,wBAAA,CAAe,IAAI,GAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,YAAY;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,UAAA,EAAY,cAAA,EAAgB,mBAAA,EAAqB,cAAA;AACvD,EAAA,MAAM,YAAA,kBAAc,6BAAA,gCAAC,EAAA,EAAkB,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,UAAA,CAAW,CAAA;AAEvE,EAAA,GAAA,CAAI,QAAA,EAAU;AACZ,IAAA,uBACE,8BAAA,oBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,6BAAA;AAAA,QAAC,mCAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,CAAC,aAAa,CAAA;AAAA,UAC9C,YAAA,EAAW,6BAAA;AAAA,UAGX,eAAA,EAAe,aAAA;AAAA,UACf,IAAA,EAAM,WAAA;AAAA,UACN;AAAA,QAAA;AAAA,MACF,CAAA;AAAA,sBACA,6BAAA;AAAA,QAAC,8BAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,UACrC,KAAA;AAAA,UAEA,QAAA,kBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,QAAA,CAAQ;AAAA,QAAA;AAAA,MAChD;AAAA,IAAA,EAAA,CACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,8BAAA,qCAAC,EAAA,EAAa,IAAA,EAAM,aAAA,EAAe,YAAA,EAAc,gBAAA,EAC/C,QAAA,EAAA;AAAA,oBAAA,6BAAA;AAAA,MAAC,oCAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,4BAAA,mBAA+B,SAAA,UAAa,IAAE,CAAA,CAAA;AAClD,QAAA;AAEP,QAAA;AAAC,UAAA;AAAA,UAAA;AACS,YAAA;AACG,YAAA;AACL,YAAA;AAAA,UAAA;AACR,QAAA;AAAA,MAAA;AACF,IAAA;AAGA,oBAAA;AAAC,MAAA;AAAA,MAAA;AACM,QAAA;AACM,QAAA;AACD,QAAA;AACJ,QAAA;AACD,QAAA;AAEJ,QAAA;AAAA,MAAA;AACH,IAAA;AACF,EAAA;AAEJ;AAEe;ADzBmD;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-ESIQ2GB4.js","sourcesContent":[null,"import { CalendarBlankIcon } from '@phosphor-icons/react/dist/csr/CalendarBlank';\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '../DropdownMenu/DropdownMenu';\nimport IconButton from '../IconButton/IconButton';\nimport Modal from '../Modal/Modal';\nimport { useMobile } from '../../hooks/useMobile';\n\nexport interface CalendarCardProps {\n /** Content rendered inside the calendar (calendar grid + activities list). */\n content: ReactNode;\n /**\n * Whether the calendar surface is currently open.\n * When provided, the component is **controlled**: the consumer is the source of truth.\n * When omitted, the component manages internal state.\n */\n isOpen?: boolean;\n /**\n * Fired whenever the open state changes (user click, outside click,\n * programmatic close, ESC, etc.).\n */\n onOpenChange?: (open: boolean) => void;\n /** Title displayed in the mobile Modal. Default: \"Calendário\". */\n title?: string;\n /** Optional className applied to the trigger button. */\n className?: string;\n}\n\n/**\n * Calendar widget for the app header. Renders a calendar icon trigger that\n * opens a `DropdownMenu` on tablet/desktop and a `Modal` on mobile (<500px).\n *\n * Pairs naturally with `AppHeader`'s `calendarContent` prop. Use the\n * controlled `isOpen` + `onOpenChange` pair when the consumer needs to close\n * the surface programmatically (e.g. on route change).\n */\nexport const CalendarCard = ({\n content,\n isOpen,\n onOpenChange,\n title = 'Calendário',\n className,\n}: CalendarCardProps) => {\n const { isMobile } = useMobile();\n const [internalOpen, setInternalOpen] = useState(false);\n\n const isControlled = isOpen !== undefined;\n const effectiveOpen = isControlled ? isOpen : internalOpen;\n\n // `useCallback` keeps the reference stable across renders, so the\n // `DropdownMenu`'s `useEffect [open, onOpenChange]` doesn't re-fire on\n // every parent re-render (which is what triggers the infinite update loop\n // observed before).\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!isControlled) {\n setInternalOpen(open);\n }\n onOpenChange?.(open);\n },\n [isControlled, onOpenChange]\n );\n\n const iconColor = effectiveOpen ? 'text-primary-950' : 'text-primary';\n const triggerIcon = <CalendarBlankIcon size={24} className={iconColor} />;\n\n if (isMobile) {\n return (\n <>\n <IconButton\n active={effectiveOpen}\n onClick={() => handleOpenChange(!effectiveOpen)}\n aria-label=\"Calendário de atividades\"\n // No mobile o calendário abre um Modal, não um DropdownMenu, então\n // não há trigger para injetar o estado: ele é declarado aqui.\n aria-expanded={effectiveOpen}\n icon={triggerIcon}\n className={className}\n />\n <Modal\n isOpen={effectiveOpen}\n onClose={() => handleOpenChange(false)}\n title={title}\n >\n <div className=\"flex justify-center\">{content}</div>\n </Modal>\n </>\n );\n }\n\n return (\n <DropdownMenu open={effectiveOpen} onOpenChange={handleOpenChange}>\n <DropdownMenuTrigger\n className={`text-primary cursor-pointer ${className ?? ''}`}\n asChild\n >\n <IconButton\n active={effectiveOpen}\n aria-label=\"Calendário de atividades\"\n icon={triggerIcon}\n />\n </DropdownMenuTrigger>\n {/* A calendar is not a list of actions: as a `menu` without menu items\n it was announced as an empty menu */}\n <DropdownMenuContent\n role=\"dialog\"\n aria-label=\"Calendário de atividades\"\n className=\"w-[320px] max-w-[calc(100vw-16px)] max-h-[80vh] overflow-y-auto\"\n align=\"end\"\n side=\"bottom\"\n >\n {content}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default CalendarCard;\n"]}