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
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-JEQTODE5.js","../src/components/RichEditor/components/ImageDialog.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-JEQTODE5.js","sourcesContent":[null,"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';\n\n/**\n * Matches the 5MB cap enforced by the backend pre-signed URL schema.\n * Keeping it here avoids the client accepting files the server will reject.\n */\nexport const MAX_IMAGE_SIZE = 5 * 1024 * 1024;\n\ntype InputMode = 'file' | 'url';\n\ninterface ImageDialogProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly onInsert: (src: string, alt: string) => 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 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 resetState = () => {\n setInputMode(onUploadImage ? 'file' : 'url');\n setFile(null);\n setUrl('');\n setAlt('');\n setIsUploading(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 const handleInsert = async () => {\n if (inputMode === 'url') {\n if (!url.trim()) return;\n onInsert(url.trim(), alt.trim());\n resetState();\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 onInsert(uploadedUrl, alt.trim());\n resetState();\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 || isUploading}\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-MEILCZ46.js","../src/components/RichEditor/components/ImageDialog.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;AChBA,8BAA8C;AAM9C,2DAAyB;AACzB,2EAAiC;AAqHzB,+CAAA;AA/GD,IAAM,eAAA,EAAiB,EAAA,EAAI,KAAA,EAAO,IAAA;AAkBlC,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,6BAAA;AAAA,IAChC,cAAA,EAAgB,OAAA,EAAS;AAAA,EAC3B,CAAA;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,EAAA,EAAI,6BAAA,IAA0B,CAAA;AAClD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,EAAA,EAAI,6BAAA,EAAW,CAAA;AACjC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,EAAA,EAAI,6BAAA,EAAW,CAAA;AACjC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,EAAA,EAAI,6BAAA,KAAc,CAAA;AACpD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,EAAA,EAAI,6BAAA,EAAW,CAAA;AAErC,EAAA,MAAM,eAAA,EAAiB,2BAAA,CAAQ,CAAA;AAE/B,EAAA,MAAM,WAAA,EAAa,CAAA,EAAA,GAAM;AACvB,IAAA,YAAA,CAAa,cAAA,EAAgB,OAAA,EAAS,KAAK,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,MAAA,CAAO,EAAE,CAAA;AACT,IAAA,MAAA,CAAO,EAAE,CAAA;AACT,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,YAAA,EAAc,CAAA,EAAA,GAAM;AAIxB,IAAA,cAAA,CAAe,QAAA,GAAW,CAAA;AAC1B,IAAA,UAAA,CAAW,CAAA;AACX,IAAA,OAAA,CAAQ,CAAA;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,iBAAA,EAAmB,CAAC,QAAA,EAAA,GAAmB;AAC3C,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AAC5B,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,QAAA,CAAS,qCAAkC,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AAC5B,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,QAAA,CAAS,2CAAwC,CAAA;AAAA,EACnD,CAAA;AAEA,EAAA,MAAM,WAAA,EAAa,CAAC,IAAA,EAAA,GAAoB;AACtC,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,aAAA,EAAe,MAAA,CAAA,EAAA,GAAY;AAC/B,IAAA,GAAA,CAAI,UAAA,IAAc,KAAA,EAAO;AACvB,MAAA,GAAA,CAAI,CAAC,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,MAAA;AACjB,MAAA,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAC/B,MAAA,UAAA,CAAW,CAAA;AACX,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,CAAC,aAAA,EAAe,MAAA;AAE7B,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,MAAM,MAAA,EAAQ,cAAA,CAAe,OAAA;AAE7B,IAAA,IAAI;AAGF,MAAA,MAAM,YAAA,EAAc,MAAM,aAAA,CAAc,IAAI,CAAA;AAC5C,MAAA,GAAA,CAAI,MAAA,IAAU,cAAA,CAAe,OAAA,EAAS,MAAA;AACtC,MAAA,QAAA,CAAS,WAAA,EAAa,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA;AAChC,MAAA,UAAA,CAAW,CAAA;AAAA,IACb,EAAA,MAAA,CAAS,GAAA,EAAK;AACZ,MAAA,GAAA,CAAI,MAAA,IAAU,cAAA,CAAe,OAAA,EAAS,MAAA;AACtC,MAAA,QAAA,CAAS,IAAA,WAAe,MAAA,EAAQ,GAAA,CAAI,QAAA,EAAU,0BAA0B,CAAA;AAAA,IAC1E,EAAA,QAAE;AACA,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,EAAY,UAAA,IAAc,MAAA,EAAQ,CAAC,CAAC,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,CAAC,CAAC,IAAA;AAEzD,EAAA,uBACE,6BAAA;AAAA,IAAC,8BAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,WAAA;AAAA,MACT,KAAA,EAAM,gBAAA;AAAA,MACN,IAAA,EAAK,IAAA;AAAA,MACL,MAAA,kBACE,8BAAA,oBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,6BAAA;AAAA,UAAC,+BAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,WAAA;AAAA,YACT,QAAA,EAAU,WAAA;AAAA,YACX,QAAA,EAAA;AAAA,UAAA;AAAA,QAED,CAAA;AAAA,wBACA,6BAAA;AAAA,UAAC,+BAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAO,SAAA;AAAA,YACP,OAAA,EAAS,YAAA;AAAA,YACT,QAAA,EAAU,CAAC,UAAA,GAAa,WAAA;AAAA,YAEvB,QAAA,EAAA,YAAA,EAAc,cAAA,EAAgB;AAAA,UAAA;AAAA,QACjC;AAAA,MAAA,EAAA,CACF,CAAA;AAAA,MAGF,QAAA,kBAAA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,qBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,cAAA,mBACC,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAA,8BAAA;AAAA,YAAC,+BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,UAAA,IAAc,OAAA,EAAS,QAAA,EAAU,SAAA;AAAA,cAC1C,MAAA,EAAO,SAAA;AAAA,cACP,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,CAAA,EAAA,GAAM,UAAA,CAAW,MAAM,CAAA;AAAA,cAChC,SAAA,EAAU,yBAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,6BAAA,8BAAC,EAAA,EAAiB,IAAA,EAAM,GAAA,CAAI,CAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAEhC,CAAA;AAAA,0BACA,8BAAA;AAAA,YAAC,+BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,UAAA,IAAc,MAAA,EAAQ,QAAA,EAAU,SAAA;AAAA,cACzC,MAAA,EAAO,SAAA;AAAA,cACP,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,CAAA,EAAA,GAAM,UAAA,CAAW,KAAK,CAAA;AAAA,cAC/B,SAAA,EAAU,yBAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,6BAAA,cAAC,EAAA,EAAS,IAAA,EAAM,GAAA,CAAI,CAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAExB;AAAA,QAAA,EAAA,CACF,CAAA;AAAA,QAGD,UAAA,IAAc,OAAA,GAAU,cAAA,kBACvB,8BAAA,KAAC,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,6BAAA;AAAA,YAAC,4BAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAc,IAAA;AAAA,cACd,YAAA,EAAc,gBAAA;AAAA,cACd,YAAA,EAAc,CAAA,EAAA,GAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,cAGhC,UAAA,EAAW,oBAAA;AAAA,cACX,OAAA,EAAS,cAAA;AAAA,cACT,WAAA,EAAa,eAAA;AAAA,cACb,WAAA,EAAa,eAAA;AAAA,cACb,QAAA,EAAU;AAAA,YAAA;AAAA,UACZ,CAAA;AAAA,0BACA,6BAAA,6BAAC,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA,sDAAA,CAE/C;AAAA,QAAA,EAAA,CACF,EAAA,kBAEA,8BAAA,KAAC,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,6BAAA,6BAAC,EAAA,EAAK,MAAA,EAAO,QAAA,EAAS,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,gBAAA,CAEnE,CAAA;AAAA,0BACA,6BAAA;AAAA,YAAC,8BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,GAAA;AAAA,cACP,QAAA,EAAU,CAAC,CAAA,EAAA,GACT,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,cAEvB,WAAA,EAAY;AAAA,YAAA;AAAA,UACd;AAAA,QAAA,EAAA,CACF,CAAA;AAAA,wBAGF,8BAAA,KAAC,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,6BAAA,6BAAC,EAAA,EAAK,MAAA,EAAO,QAAA,EAAS,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,+BAAA,CAEnE,CAAA;AAAA,0BACA,6BAAA;AAAA,YAAC,8BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,GAAA;AAAA,cACP,QAAA,EAAU,CAAC,CAAA,EAAA,GACT,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,cAEvB,WAAA,EAAY,yCAAA;AAAA,cACZ,QAAA,EAAU;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA,EAAA,CACF,CAAA;AAAA,QAEC,MAAA,mBACC,6BAAA,6BAAC,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,gBAAA,EACvB,QAAA,EAAA,MAAA,CACH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ;ADhCA;AACA;AACE;AACA;AACF,2EAAC","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-MEILCZ46.js","sourcesContent":[null,"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';\n\n/**\n * Matches the 5MB cap enforced by the backend pre-signed URL schema.\n * Keeping it here avoids the client accepting files the server will reject.\n */\nexport const MAX_IMAGE_SIZE = 5 * 1024 * 1024;\n\ntype InputMode = 'file' | 'url';\n\ninterface ImageDialogProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly onInsert: (src: string, alt: string) => 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 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 resetState = () => {\n setInputMode(onUploadImage ? 'file' : 'url');\n setFile(null);\n setUrl('');\n setAlt('');\n setIsUploading(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 const handleInsert = async () => {\n if (inputMode === 'url') {\n if (!url.trim()) return;\n onInsert(url.trim(), alt.trim());\n resetState();\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 onInsert(uploadedUrl, alt.trim());\n resetState();\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 || isUploading}\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"]}
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-EXVVHZOO.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";
@@ -378,4 +378,4 @@ export {
378
378
  unprocessLatexInHtml,
379
379
  FormulaDialog
380
380
  };
381
- //# sourceMappingURL=chunk-EOUHL7OK.mjs.map
381
+ //# sourceMappingURL=chunk-MK7TLTKV.mjs.map
@@ -13,7 +13,7 @@ var _chunkNEDUOGWUjs = require('./chunk-NEDUOGWU.js');
13
13
  var _chunkBJMKBBN3js = require('./chunk-BJMKBBN3.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');
@@ -785,7 +785,7 @@ function ComparatorView({
785
785
  )) }),
786
786
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "main", { className: "flex-1 overflow-auto p-6", children: renderMainContent() }),
787
787
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
788
- _chunkTUIEB7NYjs.Modal_default,
788
+ _chunkLS4EGCEJjs.Modal_default,
789
789
  {
790
790
  isOpen: isModalOpen,
791
791
  onClose: handleCloseModal,
@@ -850,4 +850,4 @@ function ComparatorView({
850
850
 
851
851
 
852
852
  exports.Legend = Legend; exports.PercentageScale = PercentageScale; exports.ChartArea = ChartArea; exports.BarChartRow = BarChartRow; exports.KnowledgeAreasContent = KnowledgeAreasContent; exports.CurricularComponentsContent = CurricularComponentsContent; exports.CompetenciesContent = CompetenciesContent; exports.NationalAverageCard = NationalAverageCard; exports.NationalAveragesContent = NationalAveragesContent; exports.ComparatorEmptyState = ComparatorEmptyState; exports.ComparatorLoadingState = ComparatorLoadingState; exports.ComparatorSelectTypeStep = ComparatorSelectTypeStep; exports.ComparatorSelectItemsStep = ComparatorSelectItemsStep; exports.ComparatorTabContent = ComparatorTabContent; exports.ComparatorView = ComparatorView;
853
- //# sourceMappingURL=chunk-GV2UDYYH.js.map
853
+ //# sourceMappingURL=chunk-MKY42S3T.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-GV2UDYYH.js","../src/components/ComparatorChart/ComparatorView.tsx","../src/components/ComparatorChart/ComparatorEmptyState.tsx","../src/components/ComparatorChart/ComparatorLoadingState.tsx","../src/components/ComparatorChart/ComparatorSelectTypeStep.tsx","../src/components/ComparatorChart/ComparatorSelectItemsStep.tsx","../src/components/ComparatorChart/Legend.tsx","../src/components/ComparatorChart/PercentageScale.tsx","../src/components/ComparatorChart/ChartArea.tsx","../src/components/ComparatorChart/BarChartRow.tsx","../src/components/ComparatorChart/KnowledgeAreasContent.tsx","../src/components/ComparatorChart/CurricularComponentsContent.tsx","../src/components/ComparatorChart/CompetenciesContent.tsx","../src/components/ComparatorChart/NationalAverageCard.tsx","../src/components/ComparatorChart/NationalAveragesContent.tsx","../src/components/ComparatorChart/ComparatorTabContent.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-GV2UDYYH.js","sourcesContent":[null,"import { useState, useMemo, useCallback, useEffect, useRef } from 'react';\nimport { CaretLeftIcon } from '@phosphor-icons/react/dist/csr/CaretLeft';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Modal from '../Modal/Modal';\nimport type { SearchSelectOption } from '../SearchSelect/SearchSelect';\nimport { ComparatorEmptyState } from './ComparatorEmptyState';\nimport { ComparatorLoadingState } from './ComparatorLoadingState';\nimport { ComparatorSelectTypeStep } from './ComparatorSelectTypeStep';\nimport { ComparatorSelectItemsStep } from './ComparatorSelectItemsStep';\nimport { ComparatorTabContent } from './ComparatorTabContent';\nimport {\n ComparatorTabValue,\n DEFAULT_COMPARATOR_LABELS,\n DEFAULT_COMPARATOR_TABS,\n type ComparisonType,\n type ComparatorTabType,\n type ComparatorStoreState,\n type UseComparatorReturn,\n type ComparatorLabels,\n type ComparatorTab,\n} from '../../types/comparator';\n\nexport interface ComparatorViewProps {\n // Data sources\n readonly schools: SearchSelectOption[];\n readonly schoolYears: SearchSelectOption[];\n\n // Store hooks (injected)\n readonly useComparatorStore: () => ComparatorStoreState;\n readonly useComparator: () => UseComparatorReturn;\n\n // Navigation\n readonly onBack?: () => void;\n\n // Tab management\n readonly activeTab?: ComparatorTabType;\n readonly onTabChange?: (tab: ComparatorTabType) => void;\n readonly tabs?: ComparatorTab[];\n\n // Customization\n readonly labels?: Partial<ComparatorLabels>;\n readonly isUserLoading?: boolean;\n\n // Callbacks\n readonly onFetchUserData?: (force?: boolean) => void;\n}\n\nexport function ComparatorView({\n schools,\n schoolYears,\n useComparatorStore,\n useComparator,\n onBack,\n activeTab: externalActiveTab,\n onTabChange,\n tabs = DEFAULT_COMPARATOR_TABS,\n labels: customLabels,\n isUserLoading = false,\n onFetchUserData,\n}: ComparatorViewProps) {\n const labels = useMemo(\n () => ({ ...DEFAULT_COMPARATOR_LABELS, ...customLabels }),\n [customLabels]\n );\n\n // Store state\n const {\n comparisonType,\n selectedItems,\n setComparisonType,\n addItem,\n removeItem,\n clearSelection,\n } = useComparatorStore();\n\n // Data hook\n const { data, loading, fetchData } = useComparator();\n\n // Local UI state\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [modalStep, setModalStep] = useState<1 | 2>(1);\n const [internalActiveTab, setInternalActiveTab] = useState<ComparatorTabType>(\n ComparatorTabValue.KNOWLEDGE_AREAS\n );\n const hasInitializedRef = useRef(false);\n\n // Use external tab if provided, otherwise internal\n const activeTab = externalActiveTab ?? internalActiveTab;\n\n // Determine comparison availability\n const canCompareSchools = schools.length > 1;\n const canCompareSchoolYears = schoolYears.length > 1;\n const hasAnyComparisonOption = canCompareSchools || canCompareSchoolYears;\n\n // Fetch user data on mount\n useEffect(() => {\n onFetchUserData?.(true);\n }, [onFetchUserData]);\n\n // Load comparison data on mount if there are persisted selections\n useEffect(() => {\n if (hasInitializedRef.current) return;\n if (selectedItems.length > 0 && comparisonType) {\n hasInitializedRef.current = true;\n fetchData(\n selectedItems.map((i) => i.id),\n comparisonType,\n activeTab\n );\n }\n }, [selectedItems, comparisonType, activeTab, fetchData]);\n\n // Options based on comparison type\n const options = useMemo((): SearchSelectOption[] => {\n if (comparisonType === 'school') return schools;\n if (comparisonType === 'schoolYear') return schoolYears;\n return [];\n }, [comparisonType, schools, schoolYears]);\n\n // Filter out already selected items\n const availableOptions = useMemo(() => {\n return options.filter(\n (opt) => !selectedItems.some((item) => item.id === opt.value)\n );\n }, [options, selectedItems]);\n\n // Handlers\n const handleTabChange = useCallback(\n (tab: ComparatorTabType) => {\n if (onTabChange) {\n onTabChange(tab);\n } else {\n setInternalActiveTab(tab);\n }\n\n if (selectedItems.length > 0 && comparisonType) {\n fetchData(\n selectedItems.map((i) => i.id),\n comparisonType,\n tab\n );\n }\n },\n [selectedItems, comparisonType, onTabChange, fetchData]\n );\n\n const handleOpenModal = useCallback(() => {\n if (comparisonType) {\n setModalStep(2);\n setIsModalOpen(true);\n return;\n }\n\n if (canCompareSchools && !canCompareSchoolYears) {\n setComparisonType('school');\n setModalStep(2);\n } else if (canCompareSchoolYears && !canCompareSchools) {\n setComparisonType('schoolYear');\n setModalStep(2);\n } else {\n setModalStep(1);\n }\n setIsModalOpen(true);\n }, [\n comparisonType,\n canCompareSchools,\n canCompareSchoolYears,\n setComparisonType,\n ]);\n\n const handleSelectType = useCallback(\n (type: ComparisonType) => {\n clearSelection();\n setComparisonType(type);\n setModalStep(2);\n },\n [clearSelection, setComparisonType]\n );\n\n const handleSelectItem = useCallback(\n (value: string) => {\n if (selectedItems.length >= 5) return;\n\n const option = options.find((opt) => opt.value === value);\n if (!option) return;\n\n addItem({\n id: option.value,\n name: option.label,\n color: '',\n });\n },\n [options, selectedItems.length, addItem]\n );\n\n const handleRemoveItem = useCallback(\n (itemId: string) => {\n removeItem(itemId);\n },\n [removeItem]\n );\n\n const handleConfirmSelection = useCallback(() => {\n setIsModalOpen(false);\n if (selectedItems.length > 0 && comparisonType) {\n fetchData(\n selectedItems.map((i) => i.id),\n comparisonType,\n activeTab\n );\n }\n }, [selectedItems, comparisonType, activeTab, fetchData]);\n\n const handleCloseModal = useCallback(() => {\n setIsModalOpen(false);\n }, []);\n\n const handleChangeType = useCallback(() => {\n setModalStep(1);\n clearSelection();\n }, [clearSelection]);\n\n // Get button text\n const buttonText = useMemo(() => {\n if (selectedItems.length > 0) {\n return comparisonType === 'school'\n ? labels.selectSchools\n : labels.selectSchoolYears;\n }\n if (canCompareSchools && canCompareSchoolYears) {\n return labels.selectComparison;\n }\n return canCompareSchools ? labels.selectSchools : labels.selectSchoolYears;\n }, [\n selectedItems.length,\n comparisonType,\n canCompareSchools,\n canCompareSchoolYears,\n labels,\n ]);\n\n const renderMainContent = () => {\n if (selectedItems.length === 0) {\n return (\n <ComparatorEmptyState\n onSelectClick={handleOpenModal}\n canCompareSchools={canCompareSchools}\n canCompareSchoolYears={canCompareSchoolYears}\n isLoading={isUserLoading}\n labels={labels}\n />\n );\n }\n\n if (loading) {\n return <ComparatorLoadingState />;\n }\n\n return (\n <ComparatorTabContent\n activeTab={activeTab}\n data={data}\n selectedItems={selectedItems}\n labels={labels}\n />\n );\n };\n\n return (\n <div className=\"h-screen bg-background flex flex-col\">\n {/* Header */}\n <header className=\"flex items-center justify-between px-6 py-4 border-b border-border-100 bg-secondary-50\">\n {onBack ? (\n <Button\n variant=\"raw\"\n onClick={onBack}\n className=\"flex items-center gap-2 text-text-950 hover:text-text-700 transition-colors\"\n >\n <CaretLeftIcon size={20} weight=\"bold\" />\n <Text size=\"lg\" weight=\"semibold\">\n {labels.title}\n </Text>\n </Button>\n ) : (\n <div className=\"flex items-center gap-2 text-text-950\">\n <Text size=\"lg\" weight=\"semibold\">\n {labels.title}\n </Text>\n </div>\n )}\n <Button\n variant=\"solid\"\n action=\"primary\"\n size=\"medium\"\n onClick={handleOpenModal}\n disabled={!hasAnyComparisonOption || isUserLoading}\n >\n {buttonText}\n </Button>\n </header>\n\n {/* Tabs */}\n <div className=\"flex gap-2 px-6 py-4 border-b border-border-100 bg-secondary-50\">\n {tabs.map((tab) => (\n <Button\n variant=\"raw\"\n key={tab.value}\n onClick={() => handleTabChange(tab.value)}\n className={`px-4 py-2 text-sm font-medium transition-colors ${\n activeTab === tab.value\n ? 'text-primary-700 border-b-2 border-primary-600'\n : 'text-text-500 hover:text-text-700'\n }`}\n >\n {tab.label}\n </Button>\n ))}\n </div>\n\n {/* Content */}\n <main className=\"flex-1 overflow-auto p-6\">{renderMainContent()}</main>\n\n {/* Selection Modal */}\n <Modal\n isOpen={isModalOpen}\n onClose={handleCloseModal}\n title={labels.filters}\n size=\"md\"\n footer={\n modalStep === 2 ? (\n <div className=\"flex justify-end gap-3 w-full\">\n <Button variant=\"outline\" onClick={handleChangeType}>\n {labels.back}\n </Button>\n <Button\n variant=\"solid\"\n action=\"primary\"\n onClick={handleConfirmSelection}\n disabled={selectedItems.length === 0}\n >\n {labels.confirm} ({selectedItems.length}/5)\n </Button>\n </div>\n ) : undefined\n }\n >\n {modalStep === 1 ? (\n <ComparatorSelectTypeStep\n onSelectType={handleSelectType}\n canCompareSchools={canCompareSchools}\n canCompareSchoolYears={canCompareSchoolYears}\n labels={labels}\n />\n ) : (\n <ComparatorSelectItemsStep\n options={availableOptions}\n selectedItems={selectedItems}\n onSelectItem={handleSelectItem}\n onRemoveItem={handleRemoveItem}\n comparisonType={comparisonType!}\n labels={labels}\n />\n )}\n </Modal>\n </div>\n );\n}\n","import { PlusIcon } from '@phosphor-icons/react/dist/csr/Plus';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport type { ComparatorLabels } from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorEmptyStateProps {\n readonly onSelectClick: () => void;\n readonly canCompareSchools: boolean;\n readonly canCompareSchoolYears: boolean;\n readonly isLoading?: boolean;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorEmptyState({\n onSelectClick,\n canCompareSchools,\n canCompareSchoolYears,\n isLoading = false,\n labels: customLabels,\n}: ComparatorEmptyStateProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n const hasAnyOption = canCompareSchools || canCompareSchoolYears;\n\n const getButtonText = (): string => {\n if (canCompareSchools && canCompareSchoolYears) {\n return labels.selectComparison;\n }\n if (canCompareSchools) {\n return labels.selectSchools;\n }\n return labels.selectSchoolYears;\n };\n\n const getDescriptionText = (): string => {\n if (canCompareSchools && canCompareSchoolYears) {\n return labels.emptyStateDescriptionBoth;\n }\n if (canCompareSchools) {\n return labels.emptyStateDescriptionSchools;\n }\n if (canCompareSchoolYears) {\n return labels.emptyStateDescriptionSchoolYears;\n }\n return labels.noAccessMessage;\n };\n\n const buttonText = getButtonText();\n const descriptionText = getDescriptionText();\n\n return (\n <div className=\"flex flex-col items-center justify-center h-full gap-6\">\n <div className=\"w-24 h-24 rounded-full bg-primary-100 flex items-center justify-center\">\n <svg\n className=\"w-12 h-12 text-primary-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"\n />\n </svg>\n </div>\n <div className=\"text-center\">\n <Text size=\"lg\" weight=\"semibold\" className=\"text-text-950 mb-2\">\n {labels.title}\n </Text>\n <Text size=\"sm\" className=\"text-text-500\">\n {descriptionText}\n </Text>\n </div>\n {hasAnyOption && (\n <Button\n variant=\"outline\"\n action=\"primary\"\n size=\"medium\"\n onClick={onSelectClick}\n disabled={isLoading}\n >\n <PlusIcon size={18} />\n {buttonText}\n </Button>\n )}\n </div>\n );\n}\n","import { SkeletonCard } from '../Skeleton/Skeleton';\n\nexport function ComparatorLoadingState() {\n return (\n <div\n className=\"flex flex-col gap-6\"\n data-testid=\"comparator-loading-skeleton\"\n >\n <SkeletonCard className=\"h-12 w-full\" />\n <SkeletonCard className=\"h-64 w-full\" />\n <SkeletonCard className=\"h-64 w-full\" />\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport type { ComparisonType, ComparatorLabels } from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorSelectTypeStepProps {\n readonly onSelectType: (type: ComparisonType) => void;\n readonly canCompareSchools: boolean;\n readonly canCompareSchoolYears: boolean;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorSelectTypeStep({\n onSelectType,\n canCompareSchools,\n canCompareSchoolYears,\n labels: customLabels,\n}: ComparatorSelectTypeStepProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n if (!canCompareSchools && !canCompareSchoolYears) {\n return (\n <div className=\"flex flex-col gap-4\">\n <Text size=\"sm\" className=\"text-text-600\">\n {labels.noAccessMessage}\n </Text>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Text size=\"sm\" className=\"text-text-600\">\n {labels.selectComparisonType}\n </Text>\n <div className=\"flex gap-4\">\n {canCompareSchools && (\n <Button\n variant=\"raw\"\n onClick={() => onSelectType('school')}\n className=\"flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left\"\n >\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n {labels.schools}\n </Text>\n <Text size=\"sm\" className=\"text-text-500\">\n {labels.compareSchoolsDescription}\n </Text>\n </Button>\n )}\n {canCompareSchoolYears && (\n <Button\n variant=\"raw\"\n onClick={() => onSelectType('schoolYear')}\n className=\"flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left\"\n >\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n {labels.schoolYears}\n </Text>\n <Text size=\"sm\" className=\"text-text-500\">\n {labels.compareSchoolYearsDescription}\n </Text>\n </Button>\n )}\n </div>\n </div>\n );\n}\n","import { XIcon } from '@phosphor-icons/react/dist/csr/X';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Badge from '../Badge/Badge';\nimport SearchSelect from '../SearchSelect/SearchSelect';\nimport type { SearchSelectOption } from '../SearchSelect/SearchSelect';\nimport type {\n ComparisonType,\n ComparisonItem,\n ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorSelectItemsStepProps {\n readonly options: SearchSelectOption[];\n readonly selectedItems: ComparisonItem[];\n readonly onSelectItem: (value: string) => void;\n readonly onRemoveItem: (itemId: string) => void;\n readonly comparisonType: ComparisonType;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorSelectItemsStep({\n options,\n selectedItems,\n onSelectItem,\n onRemoveItem,\n comparisonType,\n labels: customLabels,\n}: ComparatorSelectItemsStepProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n const isMaxReached = selectedItems.length >= 5;\n const placeholder =\n comparisonType === 'school' ? labels.schools : labels.schoolYears;\n const itemTypeName =\n comparisonType === 'school'\n ? labels.schools.toLowerCase()\n : labels.schoolYears.toLowerCase();\n const singularItemTypeName =\n comparisonType === 'school' ? labels.school : labels.schoolYear;\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Text size=\"sm\" className=\"text-text-600\">\n {labels.selectItemInstruction.replace('{item}', singularItemTypeName)}\n </Text>\n\n <SearchSelect\n options={options}\n placeholder={placeholder}\n searchPlaceholder={`${labels.search} ${placeholder.toLowerCase()}...`}\n onValueChange={onSelectItem}\n disabled={isMaxReached}\n emptyText=\"Nenhum resultado encontrado\"\n size=\"medium\"\n variant=\"outlined\"\n />\n\n {selectedItems.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-3 bg-secondary-50 rounded-xl border border-border-100\">\n {selectedItems.map((item) => (\n <Badge\n key={item.id}\n variant=\"outlined\"\n action=\"info\"\n size=\"medium\"\n className=\"flex items-center gap-1 pr-1\"\n >\n <span\n className=\"w-2 h-2 rounded-full mr-1\"\n style={{ backgroundColor: item.color }}\n />\n <span className=\"truncate max-w-[200px]\">{item.name}</span>\n <Button\n variant=\"raw\"\n onClick={() => onRemoveItem(item.id)}\n className=\"ml-1 p-0.5 rounded-full hover:bg-secondary-200 transition-colors\"\n aria-label={`Remover ${item.name}`}\n >\n <XIcon size={14} />\n </Button>\n </Badge>\n ))}\n </div>\n )}\n\n {isMaxReached && (\n <Text size=\"xs\" className=\"text-warning-600\">\n {labels.maxLimitWarning}\n </Text>\n )}\n\n <Text size=\"xs\" className=\"text-text-500\">\n {selectedItems.length} de 5 {itemTypeName} {labels.ofSelected}\n </Text>\n </div>\n );\n}\n","import Text from '../Text/Text';\n\nexport interface LegendItem {\n id: string;\n name: string;\n color: string;\n}\n\nexport interface LegendProps {\n readonly items: LegendItem[];\n}\n\nexport function Legend({ items }: LegendProps) {\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap gap-4 items-center\">\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: item.color }}\n />\n <Text size=\"sm\" className=\"text-text-700\">\n {item.name}\n </Text>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import Text from '../Text/Text';\n\nexport function PercentageScale() {\n return (\n <div className=\"flex items-center gap-4 mb-2 border-b border-border-100 pb-2\">\n {/* Spacer for label column (matches BarChartRow label width) */}\n <div className=\"w-64 shrink-0\" />\n {/* Scale markers */}\n <div className=\"flex-1 flex justify-between px-1\">\n <Text size=\"xs\" className=\"text-text-400\">\n 0%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 25%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 50%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 75%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 100%\n </Text>\n </div>\n </div>\n );\n}\n","import { ReactNode } from 'react';\n\nexport interface ChartAreaProps {\n readonly children: ReactNode;\n}\n\nexport function ChartArea({ children }: ChartAreaProps) {\n return (\n <div className=\"relative\">\n {/* Grid lines */}\n <div className=\"absolute inset-0 flex items-stretch pointer-events-none gap-4\">\n {/* Spacer for label column (matches BarChartRow label width) */}\n <div className=\"w-64 shrink-0\" />\n <div className=\"flex-1 flex\">\n <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n <div className=\"w-1/4\" />\n </div>\n </div>\n {/* Content */}\n <div className=\"relative space-y-6\">{children}</div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport Text from '../Text/Text';\nimport type { LegendItem } from './Legend';\n\nexport interface BarChartValue {\n itemId: string;\n percentage: number;\n}\n\nexport interface BarChartRowProps {\n readonly label: string;\n readonly values: BarChartValue[];\n readonly items: LegendItem[];\n}\n\nexport function BarChartRow({ label, values, items }: BarChartRowProps) {\n const [hoveredItem, setHoveredItem] = useState<string | null>(null);\n\n return (\n <div className=\"flex items-center gap-4\">\n <Text size=\"sm\" className=\"text-text-700 w-64 shrink-0\">\n {label}\n </Text>\n <div className=\"flex-1 space-y-1.5\">\n {items.map((item) => {\n const value = values.find((v) => v.itemId === item.id);\n const percentage = value?.percentage ?? 0;\n const clampedPercentage = Math.max(0, Math.min(percentage, 100));\n const isHovered = hoveredItem === item.id;\n\n return (\n <div\n key={item.id}\n className=\"relative group\"\n onMouseEnter={() => setHoveredItem(item.id)}\n onMouseLeave={() => setHoveredItem(null)}\n >\n <div className=\"flex-1 h-5 bg-secondary-100 rounded-full overflow-hidden relative\">\n <div\n className={`h-full rounded-full transition-all duration-500 ${\n isHovered ? 'opacity-90' : ''\n }`}\n style={{\n width: `${clampedPercentage}%`,\n backgroundColor: item.color,\n minWidth: clampedPercentage > 0 ? '8px' : '0px',\n }}\n />\n </div>\n {/* Tooltip */}\n {isHovered && (\n <div\n className=\"absolute z-10 px-2 py-1 bg-text-900 rounded shadow-lg whitespace-nowrap\"\n style={{\n left: `${Math.min(Math.max(percentage, 5), 95)}%`,\n top: '-28px',\n transform: 'translateX(-50%)',\n }}\n >\n <Text size=\"xs\" weight=\"medium\" className=\"text-white\">\n {item.name}: {percentage.toFixed(1)}%\n </Text>\n <div\n className=\"absolute w-2 h-2 bg-text-900 rotate-45\"\n style={{\n left: '50%',\n bottom: '-4px',\n transform: 'translateX(-50%)',\n }}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type { KnowledgeAreaData, ComparisonItem } from '../../types/comparator';\n\nexport interface KnowledgeAreasContentProps {\n readonly data: KnowledgeAreaData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n}\n\nexport function KnowledgeAreasContent({\n data,\n items,\n title = 'Proficiência média das escolas por área do Enem',\n}: KnowledgeAreasContentProps) {\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <div className=\"mb-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {title}\n </Text>\n <Legend items={items} />\n </div>\n <PercentageScale />\n <ChartArea>\n {data.map((area) => (\n <BarChartRow\n key={area.area}\n label={area.area}\n values={area.values}\n items={items}\n />\n ))}\n </ChartArea>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type {\n CurricularComponentData,\n ComparisonItem,\n} from '../../types/comparator';\n\nexport interface CurricularComponentsContentProps {\n readonly data: CurricularComponentData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n}\n\nexport function CurricularComponentsContent({\n data,\n items,\n title = 'Proficiência média por componente curricular',\n}: CurricularComponentsContentProps) {\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <div className=\"mb-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {title}\n </Text>\n <Legend items={items} />\n </div>\n <PercentageScale />\n <ChartArea>\n {data.map((component) => (\n <BarChartRow\n key={component.component}\n label={component.component}\n values={component.values}\n items={items}\n />\n ))}\n </ChartArea>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type { CompetencyData, ComparisonItem } from '../../types/comparator';\n\nexport interface CompetenciesContentProps {\n readonly data: CompetencyData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n}\n\nexport function CompetenciesContent({\n data,\n items,\n title = 'Proficiência média por competência',\n}: CompetenciesContentProps) {\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <div className=\"mb-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {title}\n </Text>\n <Legend items={items} />\n </div>\n <PercentageScale />\n <ChartArea>\n {data.map((competency) => (\n <BarChartRow\n key={competency.competency}\n label={competency.competency}\n values={competency.values}\n items={items}\n />\n ))}\n </ChartArea>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport type {\n NationalAverageData,\n ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface NationalAverageCardProps {\n readonly data: NationalAverageData;\n readonly color?: string;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nconst DETAIL_LABELS = [\n { key: 'languages', label: 'LINGUAGENS, CÓDIGOS E SUAS TECNOLOGIAS' },\n { key: 'humanities', label: 'CIÊNCIAS HUMANAS E SUAS TECNOLOGIAS' },\n { key: 'essay', label: 'REDAÇÃO' },\n { key: 'naturalSciences', label: 'CIÊNCIAS DA NATUREZA E SUAS TECNOLOGIAS' },\n { key: 'mathematics', label: 'MATEMÁTICA E SUAS TECNOLOGIAS' },\n] as const;\n\nexport function NationalAverageCard({\n data,\n color,\n labels: customLabels,\n}: NationalAverageCardProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {data.itemName}\n </Text>\n\n {/* Main scores */}\n <div className=\"grid grid-cols-3 gap-4 mb-6\">\n <div\n className=\"bg-background rounded-xl p-4 text-center border-l-4\"\n style={{ borderColor: color }}\n >\n <Text size=\"2xl\" weight=\"bold\" className=\"text-primary-700\">\n {data.simulatedProficiency.toFixed(1)}\n </Text>\n <Text size=\"xs\" className=\"text-text-500 uppercase\">\n {labels.simulatedProficiency}\n </Text>\n </div>\n <div className=\"bg-warning-50 rounded-xl p-4 text-center\">\n <Text size=\"2xl\" weight=\"bold\" className=\"text-warning-700\">\n {data.publicAverage}\n </Text>\n <Text size=\"xs\" className=\"text-text-500 uppercase\">\n {labels.publicSchoolAverage}\n </Text>\n </div>\n <div className=\"bg-success-50 rounded-xl p-4 text-center\">\n <Text size=\"2xl\" weight=\"bold\" className=\"text-success-700\">\n {data.privateAverage}\n </Text>\n <Text size=\"xs\" className=\"text-text-500 uppercase\">\n {labels.privateSchoolAverage}\n </Text>\n </div>\n </div>\n\n {/* Detail scores */}\n <div className=\"grid grid-cols-5 gap-4 mb-4\">\n {DETAIL_LABELS.map(({ key, label }) => (\n <div key={key} className=\"bg-background rounded-xl p-3 text-center\">\n <Text\n size=\"xs\"\n className=\"text-text-500 uppercase mb-1 line-clamp-2\"\n >\n {label}\n </Text>\n <Text size=\"lg\" weight=\"bold\" className=\"text-primary-700\">\n {data.details[key]}\n </Text>\n </div>\n ))}\n </div>\n\n {/* Status */}\n <Badge\n variant=\"solid\"\n action={data.status === 'above' ? 'success' : 'warning'}\n size=\"medium\"\n className=\"w-full justify-center py-3\"\n >\n {data.status === 'above' ? labels.aboveAverage : labels.belowAverage}\n </Badge>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { NationalAverageCard } from './NationalAverageCard';\nimport type {\n NationalAverageData,\n ComparisonItem,\n ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface NationalAveragesContentProps {\n readonly data: NationalAverageData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function NationalAveragesContent({\n data,\n items,\n title,\n labels: customLabels,\n}: NationalAveragesContentProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n return (\n <div className=\"space-y-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n {title || labels.nationalAveragesTitle}\n </Text>\n {data.map((item) => {\n const selectedItem = items.find((i) => i.id === item.itemId);\n return (\n <NationalAverageCard\n key={item.itemId}\n data={item}\n color={selectedItem?.color}\n labels={labels}\n />\n );\n })}\n </div>\n );\n}\n","import { KnowledgeAreasContent } from './KnowledgeAreasContent';\nimport { CurricularComponentsContent } from './CurricularComponentsContent';\nimport { CompetenciesContent } from './CompetenciesContent';\nimport { NationalAveragesContent } from './NationalAveragesContent';\nimport {\n ComparatorTabValue,\n type ComparatorTabType,\n type ComparatorData,\n type ComparisonItem,\n type ComparatorLabels,\n} from '../../types/comparator';\n\nexport interface ComparatorTabContentProps {\n readonly activeTab: ComparatorTabType;\n readonly data: ComparatorData;\n readonly selectedItems: ComparisonItem[];\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorTabContent({\n activeTab,\n data,\n selectedItems,\n labels,\n}: ComparatorTabContentProps) {\n switch (activeTab) {\n case ComparatorTabValue.KNOWLEDGE_AREAS:\n return (\n <KnowledgeAreasContent\n data={data.knowledgeAreas}\n items={selectedItems}\n title={labels?.knowledgeAreasTitle}\n />\n );\n case ComparatorTabValue.CURRICULAR_COMPONENTS:\n return (\n <CurricularComponentsContent\n data={data.curricularComponents}\n items={selectedItems}\n title={labels?.curricularComponentsTitle}\n />\n );\n case ComparatorTabValue.COMPETENCIES:\n return (\n <CompetenciesContent\n data={data.competencies}\n items={selectedItems}\n title={labels?.competenciesTitle}\n />\n );\n case ComparatorTabValue.NATIONAL_AVERAGES:\n return (\n <NationalAveragesContent\n data={data.nationalAverages}\n items={selectedItems}\n title={labels?.nationalAveragesTitle}\n labels={labels}\n />\n );\n default:\n return null;\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-MKY42S3T.js","../src/components/ComparatorChart/ComparatorView.tsx","../src/components/ComparatorChart/ComparatorEmptyState.tsx","../src/components/ComparatorChart/ComparatorLoadingState.tsx","../src/components/ComparatorChart/ComparatorSelectTypeStep.tsx","../src/components/ComparatorChart/ComparatorSelectItemsStep.tsx","../src/components/ComparatorChart/Legend.tsx","../src/components/ComparatorChart/PercentageScale.tsx","../src/components/ComparatorChart/ChartArea.tsx","../src/components/ComparatorChart/BarChartRow.tsx","../src/components/ComparatorChart/KnowledgeAreasContent.tsx","../src/components/ComparatorChart/CurricularComponentsContent.tsx","../src/components/ComparatorChart/CompetenciesContent.tsx","../src/components/ComparatorChart/NationalAverageCard.tsx","../src/components/ComparatorChart/NationalAveragesContent.tsx","../src/components/ComparatorChart/ComparatorTabContent.tsx"],"names":["jsxs","jsx"],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-MKY42S3T.js","sourcesContent":[null,"import { useState, useMemo, useCallback, useEffect, useRef } from 'react';\nimport { CaretLeftIcon } from '@phosphor-icons/react/dist/csr/CaretLeft';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Modal from '../Modal/Modal';\nimport type { SearchSelectOption } from '../SearchSelect/SearchSelect';\nimport { ComparatorEmptyState } from './ComparatorEmptyState';\nimport { ComparatorLoadingState } from './ComparatorLoadingState';\nimport { ComparatorSelectTypeStep } from './ComparatorSelectTypeStep';\nimport { ComparatorSelectItemsStep } from './ComparatorSelectItemsStep';\nimport { ComparatorTabContent } from './ComparatorTabContent';\nimport {\n ComparatorTabValue,\n DEFAULT_COMPARATOR_LABELS,\n DEFAULT_COMPARATOR_TABS,\n type ComparisonType,\n type ComparatorTabType,\n type ComparatorStoreState,\n type UseComparatorReturn,\n type ComparatorLabels,\n type ComparatorTab,\n} from '../../types/comparator';\n\nexport interface ComparatorViewProps {\n // Data sources\n readonly schools: SearchSelectOption[];\n readonly schoolYears: SearchSelectOption[];\n\n // Store hooks (injected)\n readonly useComparatorStore: () => ComparatorStoreState;\n readonly useComparator: () => UseComparatorReturn;\n\n // Navigation\n readonly onBack?: () => void;\n\n // Tab management\n readonly activeTab?: ComparatorTabType;\n readonly onTabChange?: (tab: ComparatorTabType) => void;\n readonly tabs?: ComparatorTab[];\n\n // Customization\n readonly labels?: Partial<ComparatorLabels>;\n readonly isUserLoading?: boolean;\n\n // Callbacks\n readonly onFetchUserData?: (force?: boolean) => void;\n}\n\nexport function ComparatorView({\n schools,\n schoolYears,\n useComparatorStore,\n useComparator,\n onBack,\n activeTab: externalActiveTab,\n onTabChange,\n tabs = DEFAULT_COMPARATOR_TABS,\n labels: customLabels,\n isUserLoading = false,\n onFetchUserData,\n}: ComparatorViewProps) {\n const labels = useMemo(\n () => ({ ...DEFAULT_COMPARATOR_LABELS, ...customLabels }),\n [customLabels]\n );\n\n // Store state\n const {\n comparisonType,\n selectedItems,\n setComparisonType,\n addItem,\n removeItem,\n clearSelection,\n } = useComparatorStore();\n\n // Data hook\n const { data, loading, fetchData } = useComparator();\n\n // Local UI state\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [modalStep, setModalStep] = useState<1 | 2>(1);\n const [internalActiveTab, setInternalActiveTab] = useState<ComparatorTabType>(\n ComparatorTabValue.KNOWLEDGE_AREAS\n );\n const hasInitializedRef = useRef(false);\n\n // Use external tab if provided, otherwise internal\n const activeTab = externalActiveTab ?? internalActiveTab;\n\n // Determine comparison availability\n const canCompareSchools = schools.length > 1;\n const canCompareSchoolYears = schoolYears.length > 1;\n const hasAnyComparisonOption = canCompareSchools || canCompareSchoolYears;\n\n // Fetch user data on mount\n useEffect(() => {\n onFetchUserData?.(true);\n }, [onFetchUserData]);\n\n // Load comparison data on mount if there are persisted selections\n useEffect(() => {\n if (hasInitializedRef.current) return;\n if (selectedItems.length > 0 && comparisonType) {\n hasInitializedRef.current = true;\n fetchData(\n selectedItems.map((i) => i.id),\n comparisonType,\n activeTab\n );\n }\n }, [selectedItems, comparisonType, activeTab, fetchData]);\n\n // Options based on comparison type\n const options = useMemo((): SearchSelectOption[] => {\n if (comparisonType === 'school') return schools;\n if (comparisonType === 'schoolYear') return schoolYears;\n return [];\n }, [comparisonType, schools, schoolYears]);\n\n // Filter out already selected items\n const availableOptions = useMemo(() => {\n return options.filter(\n (opt) => !selectedItems.some((item) => item.id === opt.value)\n );\n }, [options, selectedItems]);\n\n // Handlers\n const handleTabChange = useCallback(\n (tab: ComparatorTabType) => {\n if (onTabChange) {\n onTabChange(tab);\n } else {\n setInternalActiveTab(tab);\n }\n\n if (selectedItems.length > 0 && comparisonType) {\n fetchData(\n selectedItems.map((i) => i.id),\n comparisonType,\n tab\n );\n }\n },\n [selectedItems, comparisonType, onTabChange, fetchData]\n );\n\n const handleOpenModal = useCallback(() => {\n if (comparisonType) {\n setModalStep(2);\n setIsModalOpen(true);\n return;\n }\n\n if (canCompareSchools && !canCompareSchoolYears) {\n setComparisonType('school');\n setModalStep(2);\n } else if (canCompareSchoolYears && !canCompareSchools) {\n setComparisonType('schoolYear');\n setModalStep(2);\n } else {\n setModalStep(1);\n }\n setIsModalOpen(true);\n }, [\n comparisonType,\n canCompareSchools,\n canCompareSchoolYears,\n setComparisonType,\n ]);\n\n const handleSelectType = useCallback(\n (type: ComparisonType) => {\n clearSelection();\n setComparisonType(type);\n setModalStep(2);\n },\n [clearSelection, setComparisonType]\n );\n\n const handleSelectItem = useCallback(\n (value: string) => {\n if (selectedItems.length >= 5) return;\n\n const option = options.find((opt) => opt.value === value);\n if (!option) return;\n\n addItem({\n id: option.value,\n name: option.label,\n color: '',\n });\n },\n [options, selectedItems.length, addItem]\n );\n\n const handleRemoveItem = useCallback(\n (itemId: string) => {\n removeItem(itemId);\n },\n [removeItem]\n );\n\n const handleConfirmSelection = useCallback(() => {\n setIsModalOpen(false);\n if (selectedItems.length > 0 && comparisonType) {\n fetchData(\n selectedItems.map((i) => i.id),\n comparisonType,\n activeTab\n );\n }\n }, [selectedItems, comparisonType, activeTab, fetchData]);\n\n const handleCloseModal = useCallback(() => {\n setIsModalOpen(false);\n }, []);\n\n const handleChangeType = useCallback(() => {\n setModalStep(1);\n clearSelection();\n }, [clearSelection]);\n\n // Get button text\n const buttonText = useMemo(() => {\n if (selectedItems.length > 0) {\n return comparisonType === 'school'\n ? labels.selectSchools\n : labels.selectSchoolYears;\n }\n if (canCompareSchools && canCompareSchoolYears) {\n return labels.selectComparison;\n }\n return canCompareSchools ? labels.selectSchools : labels.selectSchoolYears;\n }, [\n selectedItems.length,\n comparisonType,\n canCompareSchools,\n canCompareSchoolYears,\n labels,\n ]);\n\n const renderMainContent = () => {\n if (selectedItems.length === 0) {\n return (\n <ComparatorEmptyState\n onSelectClick={handleOpenModal}\n canCompareSchools={canCompareSchools}\n canCompareSchoolYears={canCompareSchoolYears}\n isLoading={isUserLoading}\n labels={labels}\n />\n );\n }\n\n if (loading) {\n return <ComparatorLoadingState />;\n }\n\n return (\n <ComparatorTabContent\n activeTab={activeTab}\n data={data}\n selectedItems={selectedItems}\n labels={labels}\n />\n );\n };\n\n return (\n <div className=\"h-screen bg-background flex flex-col\">\n {/* Header */}\n <header className=\"flex items-center justify-between px-6 py-4 border-b border-border-100 bg-secondary-50\">\n {onBack ? (\n <Button\n variant=\"raw\"\n onClick={onBack}\n className=\"flex items-center gap-2 text-text-950 hover:text-text-700 transition-colors\"\n >\n <CaretLeftIcon size={20} weight=\"bold\" />\n <Text size=\"lg\" weight=\"semibold\">\n {labels.title}\n </Text>\n </Button>\n ) : (\n <div className=\"flex items-center gap-2 text-text-950\">\n <Text size=\"lg\" weight=\"semibold\">\n {labels.title}\n </Text>\n </div>\n )}\n <Button\n variant=\"solid\"\n action=\"primary\"\n size=\"medium\"\n onClick={handleOpenModal}\n disabled={!hasAnyComparisonOption || isUserLoading}\n >\n {buttonText}\n </Button>\n </header>\n\n {/* Tabs */}\n <div className=\"flex gap-2 px-6 py-4 border-b border-border-100 bg-secondary-50\">\n {tabs.map((tab) => (\n <Button\n variant=\"raw\"\n key={tab.value}\n onClick={() => handleTabChange(tab.value)}\n className={`px-4 py-2 text-sm font-medium transition-colors ${\n activeTab === tab.value\n ? 'text-primary-700 border-b-2 border-primary-600'\n : 'text-text-500 hover:text-text-700'\n }`}\n >\n {tab.label}\n </Button>\n ))}\n </div>\n\n {/* Content */}\n <main className=\"flex-1 overflow-auto p-6\">{renderMainContent()}</main>\n\n {/* Selection Modal */}\n <Modal\n isOpen={isModalOpen}\n onClose={handleCloseModal}\n title={labels.filters}\n size=\"md\"\n footer={\n modalStep === 2 ? (\n <div className=\"flex justify-end gap-3 w-full\">\n <Button variant=\"outline\" onClick={handleChangeType}>\n {labels.back}\n </Button>\n <Button\n variant=\"solid\"\n action=\"primary\"\n onClick={handleConfirmSelection}\n disabled={selectedItems.length === 0}\n >\n {labels.confirm} ({selectedItems.length}/5)\n </Button>\n </div>\n ) : undefined\n }\n >\n {modalStep === 1 ? (\n <ComparatorSelectTypeStep\n onSelectType={handleSelectType}\n canCompareSchools={canCompareSchools}\n canCompareSchoolYears={canCompareSchoolYears}\n labels={labels}\n />\n ) : (\n <ComparatorSelectItemsStep\n options={availableOptions}\n selectedItems={selectedItems}\n onSelectItem={handleSelectItem}\n onRemoveItem={handleRemoveItem}\n comparisonType={comparisonType!}\n labels={labels}\n />\n )}\n </Modal>\n </div>\n );\n}\n","import { PlusIcon } from '@phosphor-icons/react/dist/csr/Plus';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport type { ComparatorLabels } from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorEmptyStateProps {\n readonly onSelectClick: () => void;\n readonly canCompareSchools: boolean;\n readonly canCompareSchoolYears: boolean;\n readonly isLoading?: boolean;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorEmptyState({\n onSelectClick,\n canCompareSchools,\n canCompareSchoolYears,\n isLoading = false,\n labels: customLabels,\n}: ComparatorEmptyStateProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n const hasAnyOption = canCompareSchools || canCompareSchoolYears;\n\n const getButtonText = (): string => {\n if (canCompareSchools && canCompareSchoolYears) {\n return labels.selectComparison;\n }\n if (canCompareSchools) {\n return labels.selectSchools;\n }\n return labels.selectSchoolYears;\n };\n\n const getDescriptionText = (): string => {\n if (canCompareSchools && canCompareSchoolYears) {\n return labels.emptyStateDescriptionBoth;\n }\n if (canCompareSchools) {\n return labels.emptyStateDescriptionSchools;\n }\n if (canCompareSchoolYears) {\n return labels.emptyStateDescriptionSchoolYears;\n }\n return labels.noAccessMessage;\n };\n\n const buttonText = getButtonText();\n const descriptionText = getDescriptionText();\n\n return (\n <div className=\"flex flex-col items-center justify-center h-full gap-6\">\n <div className=\"w-24 h-24 rounded-full bg-primary-100 flex items-center justify-center\">\n <svg\n className=\"w-12 h-12 text-primary-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"\n />\n </svg>\n </div>\n <div className=\"text-center\">\n <Text size=\"lg\" weight=\"semibold\" className=\"text-text-950 mb-2\">\n {labels.title}\n </Text>\n <Text size=\"sm\" className=\"text-text-500\">\n {descriptionText}\n </Text>\n </div>\n {hasAnyOption && (\n <Button\n variant=\"outline\"\n action=\"primary\"\n size=\"medium\"\n onClick={onSelectClick}\n disabled={isLoading}\n >\n <PlusIcon size={18} />\n {buttonText}\n </Button>\n )}\n </div>\n );\n}\n","import { SkeletonCard } from '../Skeleton/Skeleton';\n\nexport function ComparatorLoadingState() {\n return (\n <div\n className=\"flex flex-col gap-6\"\n data-testid=\"comparator-loading-skeleton\"\n >\n <SkeletonCard className=\"h-12 w-full\" />\n <SkeletonCard className=\"h-64 w-full\" />\n <SkeletonCard className=\"h-64 w-full\" />\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport type { ComparisonType, ComparatorLabels } from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorSelectTypeStepProps {\n readonly onSelectType: (type: ComparisonType) => void;\n readonly canCompareSchools: boolean;\n readonly canCompareSchoolYears: boolean;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorSelectTypeStep({\n onSelectType,\n canCompareSchools,\n canCompareSchoolYears,\n labels: customLabels,\n}: ComparatorSelectTypeStepProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n if (!canCompareSchools && !canCompareSchoolYears) {\n return (\n <div className=\"flex flex-col gap-4\">\n <Text size=\"sm\" className=\"text-text-600\">\n {labels.noAccessMessage}\n </Text>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Text size=\"sm\" className=\"text-text-600\">\n {labels.selectComparisonType}\n </Text>\n <div className=\"flex gap-4\">\n {canCompareSchools && (\n <Button\n variant=\"raw\"\n onClick={() => onSelectType('school')}\n className=\"flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left\"\n >\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n {labels.schools}\n </Text>\n <Text size=\"sm\" className=\"text-text-500\">\n {labels.compareSchoolsDescription}\n </Text>\n </Button>\n )}\n {canCompareSchoolYears && (\n <Button\n variant=\"raw\"\n onClick={() => onSelectType('schoolYear')}\n className=\"flex-1 p-4 border border-border-200 rounded-xl hover:border-primary-500 hover:bg-primary-50 transition-colors text-left\"\n >\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n {labels.schoolYears}\n </Text>\n <Text size=\"sm\" className=\"text-text-500\">\n {labels.compareSchoolYearsDescription}\n </Text>\n </Button>\n )}\n </div>\n </div>\n );\n}\n","import { XIcon } from '@phosphor-icons/react/dist/csr/X';\nimport Text from '../Text/Text';\nimport Button from '../Button/Button';\nimport Badge from '../Badge/Badge';\nimport SearchSelect from '../SearchSelect/SearchSelect';\nimport type { SearchSelectOption } from '../SearchSelect/SearchSelect';\nimport type {\n ComparisonType,\n ComparisonItem,\n ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface ComparatorSelectItemsStepProps {\n readonly options: SearchSelectOption[];\n readonly selectedItems: ComparisonItem[];\n readonly onSelectItem: (value: string) => void;\n readonly onRemoveItem: (itemId: string) => void;\n readonly comparisonType: ComparisonType;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorSelectItemsStep({\n options,\n selectedItems,\n onSelectItem,\n onRemoveItem,\n comparisonType,\n labels: customLabels,\n}: ComparatorSelectItemsStepProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n const isMaxReached = selectedItems.length >= 5;\n const placeholder =\n comparisonType === 'school' ? labels.schools : labels.schoolYears;\n const itemTypeName =\n comparisonType === 'school'\n ? labels.schools.toLowerCase()\n : labels.schoolYears.toLowerCase();\n const singularItemTypeName =\n comparisonType === 'school' ? labels.school : labels.schoolYear;\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Text size=\"sm\" className=\"text-text-600\">\n {labels.selectItemInstruction.replace('{item}', singularItemTypeName)}\n </Text>\n\n <SearchSelect\n options={options}\n placeholder={placeholder}\n searchPlaceholder={`${labels.search} ${placeholder.toLowerCase()}...`}\n onValueChange={onSelectItem}\n disabled={isMaxReached}\n emptyText=\"Nenhum resultado encontrado\"\n size=\"medium\"\n variant=\"outlined\"\n />\n\n {selectedItems.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-3 bg-secondary-50 rounded-xl border border-border-100\">\n {selectedItems.map((item) => (\n <Badge\n key={item.id}\n variant=\"outlined\"\n action=\"info\"\n size=\"medium\"\n className=\"flex items-center gap-1 pr-1\"\n >\n <span\n className=\"w-2 h-2 rounded-full mr-1\"\n style={{ backgroundColor: item.color }}\n />\n <span className=\"truncate max-w-[200px]\">{item.name}</span>\n <Button\n variant=\"raw\"\n onClick={() => onRemoveItem(item.id)}\n className=\"ml-1 p-0.5 rounded-full hover:bg-secondary-200 transition-colors\"\n aria-label={`Remover ${item.name}`}\n >\n <XIcon size={14} />\n </Button>\n </Badge>\n ))}\n </div>\n )}\n\n {isMaxReached && (\n <Text size=\"xs\" className=\"text-warning-600\">\n {labels.maxLimitWarning}\n </Text>\n )}\n\n <Text size=\"xs\" className=\"text-text-500\">\n {selectedItems.length} de 5 {itemTypeName} {labels.ofSelected}\n </Text>\n </div>\n );\n}\n","import Text from '../Text/Text';\n\nexport interface LegendItem {\n id: string;\n name: string;\n color: string;\n}\n\nexport interface LegendProps {\n readonly items: LegendItem[];\n}\n\nexport function Legend({ items }: LegendProps) {\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap gap-4 items-center\">\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full\"\n style={{ backgroundColor: item.color }}\n />\n <Text size=\"sm\" className=\"text-text-700\">\n {item.name}\n </Text>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import Text from '../Text/Text';\n\nexport function PercentageScale() {\n return (\n <div className=\"flex items-center gap-4 mb-2 border-b border-border-100 pb-2\">\n {/* Spacer for label column (matches BarChartRow label width) */}\n <div className=\"w-64 shrink-0\" />\n {/* Scale markers */}\n <div className=\"flex-1 flex justify-between px-1\">\n <Text size=\"xs\" className=\"text-text-400\">\n 0%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 25%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 50%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 75%\n </Text>\n <Text size=\"xs\" className=\"text-text-400\">\n 100%\n </Text>\n </div>\n </div>\n );\n}\n","import { ReactNode } from 'react';\n\nexport interface ChartAreaProps {\n readonly children: ReactNode;\n}\n\nexport function ChartArea({ children }: ChartAreaProps) {\n return (\n <div className=\"relative\">\n {/* Grid lines */}\n <div className=\"absolute inset-0 flex items-stretch pointer-events-none gap-4\">\n {/* Spacer for label column (matches BarChartRow label width) */}\n <div className=\"w-64 shrink-0\" />\n <div className=\"flex-1 flex\">\n <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n <div className=\"w-1/4 border-r border-dashed border-border-200\" />\n <div className=\"w-1/4\" />\n </div>\n </div>\n {/* Content */}\n <div className=\"relative space-y-6\">{children}</div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport Text from '../Text/Text';\nimport type { LegendItem } from './Legend';\n\nexport interface BarChartValue {\n itemId: string;\n percentage: number;\n}\n\nexport interface BarChartRowProps {\n readonly label: string;\n readonly values: BarChartValue[];\n readonly items: LegendItem[];\n}\n\nexport function BarChartRow({ label, values, items }: BarChartRowProps) {\n const [hoveredItem, setHoveredItem] = useState<string | null>(null);\n\n return (\n <div className=\"flex items-center gap-4\">\n <Text size=\"sm\" className=\"text-text-700 w-64 shrink-0\">\n {label}\n </Text>\n <div className=\"flex-1 space-y-1.5\">\n {items.map((item) => {\n const value = values.find((v) => v.itemId === item.id);\n const percentage = value?.percentage ?? 0;\n const clampedPercentage = Math.max(0, Math.min(percentage, 100));\n const isHovered = hoveredItem === item.id;\n\n return (\n <div\n key={item.id}\n className=\"relative group\"\n onMouseEnter={() => setHoveredItem(item.id)}\n onMouseLeave={() => setHoveredItem(null)}\n >\n <div className=\"flex-1 h-5 bg-secondary-100 rounded-full overflow-hidden relative\">\n <div\n className={`h-full rounded-full transition-all duration-500 ${\n isHovered ? 'opacity-90' : ''\n }`}\n style={{\n width: `${clampedPercentage}%`,\n backgroundColor: item.color,\n minWidth: clampedPercentage > 0 ? '8px' : '0px',\n }}\n />\n </div>\n {/* Tooltip */}\n {isHovered && (\n <div\n className=\"absolute z-10 px-2 py-1 bg-text-900 rounded shadow-lg whitespace-nowrap\"\n style={{\n left: `${Math.min(Math.max(percentage, 5), 95)}%`,\n top: '-28px',\n transform: 'translateX(-50%)',\n }}\n >\n <Text size=\"xs\" weight=\"medium\" className=\"text-white\">\n {item.name}: {percentage.toFixed(1)}%\n </Text>\n <div\n className=\"absolute w-2 h-2 bg-text-900 rotate-45\"\n style={{\n left: '50%',\n bottom: '-4px',\n transform: 'translateX(-50%)',\n }}\n />\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type { KnowledgeAreaData, ComparisonItem } from '../../types/comparator';\n\nexport interface KnowledgeAreasContentProps {\n readonly data: KnowledgeAreaData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n}\n\nexport function KnowledgeAreasContent({\n data,\n items,\n title = 'Proficiência média das escolas por área do Enem',\n}: KnowledgeAreasContentProps) {\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <div className=\"mb-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {title}\n </Text>\n <Legend items={items} />\n </div>\n <PercentageScale />\n <ChartArea>\n {data.map((area) => (\n <BarChartRow\n key={area.area}\n label={area.area}\n values={area.values}\n items={items}\n />\n ))}\n </ChartArea>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type {\n CurricularComponentData,\n ComparisonItem,\n} from '../../types/comparator';\n\nexport interface CurricularComponentsContentProps {\n readonly data: CurricularComponentData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n}\n\nexport function CurricularComponentsContent({\n data,\n items,\n title = 'Proficiência média por componente curricular',\n}: CurricularComponentsContentProps) {\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <div className=\"mb-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {title}\n </Text>\n <Legend items={items} />\n </div>\n <PercentageScale />\n <ChartArea>\n {data.map((component) => (\n <BarChartRow\n key={component.component}\n label={component.component}\n values={component.values}\n items={items}\n />\n ))}\n </ChartArea>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { Legend } from './Legend';\nimport { PercentageScale } from './PercentageScale';\nimport { ChartArea } from './ChartArea';\nimport { BarChartRow } from './BarChartRow';\nimport type { CompetencyData, ComparisonItem } from '../../types/comparator';\n\nexport interface CompetenciesContentProps {\n readonly data: CompetencyData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n}\n\nexport function CompetenciesContent({\n data,\n items,\n title = 'Proficiência média por competência',\n}: CompetenciesContentProps) {\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <div className=\"mb-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {title}\n </Text>\n <Legend items={items} />\n </div>\n <PercentageScale />\n <ChartArea>\n {data.map((competency) => (\n <BarChartRow\n key={competency.competency}\n label={competency.competency}\n values={competency.values}\n items={items}\n />\n ))}\n </ChartArea>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport type {\n NationalAverageData,\n ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface NationalAverageCardProps {\n readonly data: NationalAverageData;\n readonly color?: string;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nconst DETAIL_LABELS = [\n { key: 'languages', label: 'LINGUAGENS, CÓDIGOS E SUAS TECNOLOGIAS' },\n { key: 'humanities', label: 'CIÊNCIAS HUMANAS E SUAS TECNOLOGIAS' },\n { key: 'essay', label: 'REDAÇÃO' },\n { key: 'naturalSciences', label: 'CIÊNCIAS DA NATUREZA E SUAS TECNOLOGIAS' },\n { key: 'mathematics', label: 'MATEMÁTICA E SUAS TECNOLOGIAS' },\n] as const;\n\nexport function NationalAverageCard({\n data,\n color,\n labels: customLabels,\n}: NationalAverageCardProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n return (\n <div className=\"bg-secondary-50 rounded-2xl p-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950 mb-4\">\n {data.itemName}\n </Text>\n\n {/* Main scores */}\n <div className=\"grid grid-cols-3 gap-4 mb-6\">\n <div\n className=\"bg-background rounded-xl p-4 text-center border-l-4\"\n style={{ borderColor: color }}\n >\n <Text size=\"2xl\" weight=\"bold\" className=\"text-primary-700\">\n {data.simulatedProficiency.toFixed(1)}\n </Text>\n <Text size=\"xs\" className=\"text-text-500 uppercase\">\n {labels.simulatedProficiency}\n </Text>\n </div>\n <div className=\"bg-warning-50 rounded-xl p-4 text-center\">\n <Text size=\"2xl\" weight=\"bold\" className=\"text-warning-700\">\n {data.publicAverage}\n </Text>\n <Text size=\"xs\" className=\"text-text-500 uppercase\">\n {labels.publicSchoolAverage}\n </Text>\n </div>\n <div className=\"bg-success-50 rounded-xl p-4 text-center\">\n <Text size=\"2xl\" weight=\"bold\" className=\"text-success-700\">\n {data.privateAverage}\n </Text>\n <Text size=\"xs\" className=\"text-text-500 uppercase\">\n {labels.privateSchoolAverage}\n </Text>\n </div>\n </div>\n\n {/* Detail scores */}\n <div className=\"grid grid-cols-5 gap-4 mb-4\">\n {DETAIL_LABELS.map(({ key, label }) => (\n <div key={key} className=\"bg-background rounded-xl p-3 text-center\">\n <Text\n size=\"xs\"\n className=\"text-text-500 uppercase mb-1 line-clamp-2\"\n >\n {label}\n </Text>\n <Text size=\"lg\" weight=\"bold\" className=\"text-primary-700\">\n {data.details[key]}\n </Text>\n </div>\n ))}\n </div>\n\n {/* Status */}\n <Badge\n variant=\"solid\"\n action={data.status === 'above' ? 'success' : 'warning'}\n size=\"medium\"\n className=\"w-full justify-center py-3\"\n >\n {data.status === 'above' ? labels.aboveAverage : labels.belowAverage}\n </Badge>\n </div>\n );\n}\n","import Text from '../Text/Text';\nimport { NationalAverageCard } from './NationalAverageCard';\nimport type {\n NationalAverageData,\n ComparisonItem,\n ComparatorLabels,\n} from '../../types/comparator';\nimport { DEFAULT_COMPARATOR_LABELS } from '../../types/comparator';\n\nexport interface NationalAveragesContentProps {\n readonly data: NationalAverageData[];\n readonly items: ComparisonItem[];\n readonly title?: string;\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function NationalAveragesContent({\n data,\n items,\n title,\n labels: customLabels,\n}: NationalAveragesContentProps) {\n const labels = { ...DEFAULT_COMPARATOR_LABELS, ...customLabels };\n\n return (\n <div className=\"space-y-6\">\n <Text size=\"md\" weight=\"semibold\" className=\"text-text-950\">\n {title || labels.nationalAveragesTitle}\n </Text>\n {data.map((item) => {\n const selectedItem = items.find((i) => i.id === item.itemId);\n return (\n <NationalAverageCard\n key={item.itemId}\n data={item}\n color={selectedItem?.color}\n labels={labels}\n />\n );\n })}\n </div>\n );\n}\n","import { KnowledgeAreasContent } from './KnowledgeAreasContent';\nimport { CurricularComponentsContent } from './CurricularComponentsContent';\nimport { CompetenciesContent } from './CompetenciesContent';\nimport { NationalAveragesContent } from './NationalAveragesContent';\nimport {\n ComparatorTabValue,\n type ComparatorTabType,\n type ComparatorData,\n type ComparisonItem,\n type ComparatorLabels,\n} from '../../types/comparator';\n\nexport interface ComparatorTabContentProps {\n readonly activeTab: ComparatorTabType;\n readonly data: ComparatorData;\n readonly selectedItems: ComparisonItem[];\n readonly labels?: Partial<ComparatorLabels>;\n}\n\nexport function ComparatorTabContent({\n activeTab,\n data,\n selectedItems,\n labels,\n}: ComparatorTabContentProps) {\n switch (activeTab) {\n case ComparatorTabValue.KNOWLEDGE_AREAS:\n return (\n <KnowledgeAreasContent\n data={data.knowledgeAreas}\n items={selectedItems}\n title={labels?.knowledgeAreasTitle}\n />\n );\n case ComparatorTabValue.CURRICULAR_COMPONENTS:\n return (\n <CurricularComponentsContent\n data={data.curricularComponents}\n items={selectedItems}\n title={labels?.curricularComponentsTitle}\n />\n );\n case ComparatorTabValue.COMPETENCIES:\n return (\n <CompetenciesContent\n data={data.competencies}\n items={selectedItems}\n title={labels?.competenciesTitle}\n />\n );\n case ComparatorTabValue.NATIONAL_AVERAGES:\n return (\n <NationalAveragesContent\n data={data.nationalAverages}\n items={selectedItems}\n title={labels?.nationalAveragesTitle}\n labels={labels}\n />\n );\n default:\n return null;\n }\n}\n"]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-LDBWF6EA.mjs";
4
4
  import {
5
5
  Modal_default
6
- } from "./chunk-HFBGOUUR.mjs";
6
+ } from "./chunk-HEP6VNLE.mjs";
7
7
  import {
8
8
  Text_default
9
9
  } from "./chunk-IMCIR6TJ.mjs";
@@ -58,4 +58,4 @@ var ProgressModal_default = ProgressModal;
58
58
  export {
59
59
  ProgressModal_default
60
60
  };
61
- //# sourceMappingURL=chunk-BVIY2YJ5.mjs.map
61
+ //# sourceMappingURL=chunk-MQCTISBB.mjs.map
@@ -18,10 +18,10 @@ var _chunkBJMKBBN3js = require('./chunk-BJMKBBN3.js');
18
18
 
19
19
 
20
20
 
21
- var _chunkHR2AEOZXjs = require('./chunk-HR2AEOZX.js');
21
+ var _chunkOCIBLTVLjs = require('./chunk-OCIBLTVL.js');
22
22
 
23
23
 
24
- var _chunkTUIEB7NYjs = require('./chunk-TUIEB7NY.js');
24
+ var _chunkLS4EGCEJjs = require('./chunk-LS4EGCEJ.js');
25
25
 
26
26
 
27
27
  var _chunkANT66KVKjs = require('./chunk-ANT66KVK.js');
@@ -120,25 +120,25 @@ var SingleNotificationCard = ({
120
120
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 w-full", children: [
121
121
  !isRead && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-[7px] h-[7px] bg-info-300 rounded-full flex-shrink-0" }),
122
122
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "font-bold text-sm leading-4 text-text-950 flex-grow", children: title }),
123
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHR2AEOZXjs.DropdownMenu_default, { children: [
123
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkOCIBLTVLjs.DropdownMenu_default, { children: [
124
124
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
125
- _chunkHR2AEOZXjs.DropdownMenuTrigger,
125
+ _chunkOCIBLTVLjs.DropdownMenuTrigger,
126
126
  {
127
127
  className: "flex-shrink-0 inline-flex items-center justify-center font-medium bg-transparent text-text-950 cursor-pointer hover:bg-info-50 w-6 h-6 rounded-lg",
128
128
  "aria-label": "Menu de a\xE7\xF5es",
129
129
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _DotsThreeVertical.DotsThreeVerticalIcon, { size: 24 })
130
130
  }
131
131
  ),
132
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHR2AEOZXjs.DropdownMenuContent, { align: "end", className: "min-w-[160px]", children: [
132
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkOCIBLTVLjs.DropdownMenuContent, { align: "end", className: "min-w-[160px]", children: [
133
133
  !isRead && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
134
- _chunkHR2AEOZXjs.DropdownMenuItem,
134
+ _chunkOCIBLTVLjs.DropdownMenuItem,
135
135
  {
136
136
  onClick: handleMarkAsRead,
137
137
  className: "text-text-950",
138
138
  children: "Marcar como lida"
139
139
  }
140
140
  ),
141
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHR2AEOZXjs.DropdownMenuItem, { onClick: handleDelete, className: "text-error-600", children: "Deletar" })
141
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOCIBLTVLjs.DropdownMenuItem, { onClick: handleDelete, className: "text-error-600", children: "Deletar" })
142
142
  ] })
143
143
  ] })
144
144
  ] }),
@@ -251,7 +251,7 @@ var NotificationList = ({
251
251
  })
252
252
  ] }, `${group.label}-${idx}`)),
253
253
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
254
- _chunkTUIEB7NYjs.Modal_default,
254
+ _chunkLS4EGCEJjs.Modal_default,
255
255
  {
256
256
  isOpen: globalNotificationModal.isOpen,
257
257
  onClose: () => setGlobalNotificationModal({ isOpen: false, notification: null }),
@@ -352,7 +352,7 @@ var NotificationCenter = ({
352
352
  }
353
353
  ),
354
354
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
355
- _chunkTUIEB7NYjs.Modal_default,
355
+ _chunkLS4EGCEJjs.Modal_default,
356
356
  {
357
357
  isOpen: isModalOpen,
358
358
  onClose: () => setIsModalOpen(false),
@@ -402,7 +402,7 @@ var NotificationCenter = ({
402
402
  }
403
403
  ),
404
404
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
405
- _chunkTUIEB7NYjs.Modal_default,
405
+ _chunkLS4EGCEJjs.Modal_default,
406
406
  {
407
407
  isOpen: globalNotificationModal.isOpen,
408
408
  onClose: () => setGlobalNotificationModal({ isOpen: false, notification: null }),
@@ -419,11 +419,11 @@ var NotificationCenter = ({
419
419
  }
420
420
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
421
421
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
422
- _chunkHR2AEOZXjs.DropdownMenu_default,
422
+ _chunkOCIBLTVLjs.DropdownMenu_default,
423
423
  {
424
424
  ...typeof isActive === "boolean" ? { open: isActive, onOpenChange: handleOpenChange } : { onOpenChange: handleOpenChange },
425
425
  children: [
426
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHR2AEOZXjs.DropdownMenuTrigger, { className: "text-primary cursor-pointer", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
426
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOCIBLTVLjs.DropdownMenuTrigger, { className: "text-primary cursor-pointer", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
427
427
  _chunkBVUPM6EYjs.IconButton_default,
428
428
  {
429
429
  active: isActive,
@@ -446,7 +446,7 @@ var NotificationCenter = ({
446
446
  }
447
447
  ) }),
448
448
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
449
- _chunkHR2AEOZXjs.DropdownMenuContent,
449
+ _chunkOCIBLTVLjs.DropdownMenuContent,
450
450
  {
451
451
  className: "min-w-[320px] max-w-[400px] max-h-[500px] overflow-hidden",
452
452
  side: "bottom",
@@ -498,7 +498,7 @@ var NotificationCenter = ({
498
498
  }
499
499
  ),
500
500
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
501
- _chunkTUIEB7NYjs.Modal_default,
501
+ _chunkLS4EGCEJjs.Modal_default,
502
502
  {
503
503
  isOpen: globalNotificationModal.isOpen,
504
504
  onClose: () => setGlobalNotificationModal({ isOpen: false, notification: null }),
@@ -630,4 +630,4 @@ var NotificationCard_default = NotificationCard;
630
630
 
631
631
 
632
632
  exports.LegacyNotificationCard = LegacyNotificationCard; exports.NotificationCard_default = NotificationCard_default;
633
- //# sourceMappingURL=chunk-KHLCO6PF.js.map
633
+ //# sourceMappingURL=chunk-MVEXCJVJ.js.map