analytica-frontend-lib 1.6.76 → 1.6.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/dist/AccessReportModal/index.js +4 -5
  2. package/dist/AccessReportModal/index.js.map +1 -1
  3. package/dist/AccessReportModal/index.mjs +3 -4
  4. package/dist/AccessibilityWidget/index.js +4 -5
  5. package/dist/AccessibilityWidget/index.js.map +1 -1
  6. package/dist/AccessibilityWidget/index.mjs +3 -4
  7. package/dist/Accordation/index.js +4 -4
  8. package/dist/Accordation/index.mjs +3 -3
  9. package/dist/ActivitiesHistory/index.js +48 -49
  10. package/dist/ActivitiesHistory/index.js.map +1 -1
  11. package/dist/ActivitiesHistory/index.mjs +47 -48
  12. package/dist/ActivityCardQuestionBanks/index.d.ts.map +1 -1
  13. package/dist/ActivityCardQuestionBanks/index.js +48 -49
  14. package/dist/ActivityCardQuestionBanks/index.js.map +1 -1
  15. package/dist/ActivityCardQuestionBanks/index.mjs +47 -48
  16. package/dist/ActivityCardQuestionPreview/index.js +48 -49
  17. package/dist/ActivityCardQuestionPreview/index.js.map +1 -1
  18. package/dist/ActivityCardQuestionPreview/index.mjs +47 -48
  19. package/dist/ActivityCreate/ActivityCreateContent/index.js +48 -49
  20. package/dist/ActivityCreate/ActivityCreateContent/index.js.map +1 -1
  21. package/dist/ActivityCreate/ActivityCreateContent/index.mjs +47 -48
  22. package/dist/ActivityCreate/index.js +48 -49
  23. package/dist/ActivityCreate/index.js.map +1 -1
  24. package/dist/ActivityCreate/index.mjs +47 -48
  25. package/dist/ActivityDetails/index.js +48 -49
  26. package/dist/ActivityDetails/index.js.map +1 -1
  27. package/dist/ActivityDetails/index.mjs +47 -48
  28. package/dist/ActivityFilters/index.js +48 -49
  29. package/dist/ActivityFilters/index.js.map +1 -1
  30. package/dist/ActivityFilters/index.mjs +47 -48
  31. package/dist/ActivityPageLayout/index.js +48 -49
  32. package/dist/ActivityPageLayout/index.js.map +1 -1
  33. package/dist/ActivityPageLayout/index.mjs +47 -48
  34. package/dist/ActivityPreview/index.js +48 -49
  35. package/dist/ActivityPreview/index.js.map +1 -1
  36. package/dist/ActivityPreview/index.mjs +47 -48
  37. package/dist/AlertDialog/index.d.ts.map +1 -1
  38. package/dist/AlertDialog/index.js +3 -3
  39. package/dist/AlertDialog/index.mjs +2 -2
  40. package/dist/AlertManager/index.js +48 -49
  41. package/dist/AlertManager/index.js.map +1 -1
  42. package/dist/AlertManager/index.mjs +47 -48
  43. package/dist/AlertManagerView/index.js +4 -5
  44. package/dist/AlertManagerView/index.js.map +1 -1
  45. package/dist/AlertManagerView/index.mjs +3 -4
  46. package/dist/AnnouncementModal/index.js +4 -5
  47. package/dist/AnnouncementModal/index.js.map +1 -1
  48. package/dist/AnnouncementModal/index.mjs +3 -4
  49. package/dist/AnnouncementsGate/index.js +5 -6
  50. package/dist/AnnouncementsGate/index.js.map +1 -1
  51. package/dist/AnnouncementsGate/index.mjs +4 -5
  52. package/dist/AnswerKeyModal/index.js +4 -5
  53. package/dist/AnswerKeyModal/index.js.map +1 -1
  54. package/dist/AnswerKeyModal/index.mjs +3 -4
  55. package/dist/AppHeader/index.js +8 -9
  56. package/dist/AppHeader/index.js.map +1 -1
  57. package/dist/AppHeader/index.mjs +7 -8
  58. package/dist/CalendarCard/index.js +6 -7
  59. package/dist/CalendarCard/index.js.map +1 -1
  60. package/dist/CalendarCard/index.mjs +5 -6
  61. package/dist/Card/index.d.ts.map +1 -1
  62. package/dist/Card/index.js +3 -3
  63. package/dist/Card/index.mjs +2 -2
  64. package/dist/Chat/index.js +4 -5
  65. package/dist/Chat/index.js.map +1 -1
  66. package/dist/Chat/index.mjs +3 -4
  67. package/dist/Chatbot/index.js +4 -5
  68. package/dist/Chatbot/index.js.map +1 -1
  69. package/dist/Chatbot/index.mjs +3 -4
  70. package/dist/CheckBoxGroup/index.js +48 -49
  71. package/dist/CheckBoxGroup/index.js.map +1 -1
  72. package/dist/CheckBoxGroup/index.mjs +47 -48
  73. package/dist/ComparatorChart/ComparatorView/index.js +4 -5
  74. package/dist/ComparatorChart/ComparatorView/index.js.map +1 -1
  75. package/dist/ComparatorChart/ComparatorView/index.mjs +3 -4
  76. package/dist/CorrectActivityModal/index.js +9 -10
  77. package/dist/CorrectActivityModal/index.js.map +1 -1
  78. package/dist/CorrectActivityModal/index.mjs +8 -9
  79. package/dist/DownloadButton/index.js +6 -7
  80. package/dist/DownloadButton/index.js.map +1 -1
  81. package/dist/DownloadButton/index.mjs +5 -6
  82. package/dist/DownloadModal/index.js +4 -5
  83. package/dist/DownloadModal/index.js.map +1 -1
  84. package/dist/DownloadModal/index.mjs +3 -4
  85. package/dist/DropdownMenu/index.js +4 -5
  86. package/dist/DropdownMenu/index.js.map +1 -1
  87. package/dist/DropdownMenu/index.mjs +3 -4
  88. package/dist/EnemClassroomStartModal/index.js +8 -9
  89. package/dist/EnemClassroomStartModal/index.js.map +1 -1
  90. package/dist/EnemClassroomStartModal/index.mjs +7 -8
  91. package/dist/EnemMoment/index.js +110 -94
  92. package/dist/EnemMoment/index.js.map +1 -1
  93. package/dist/EnemMoment/index.mjs +74 -58
  94. package/dist/EnemMoment/index.mjs.map +1 -1
  95. package/dist/EnemMomentStudentModal/index.js +62 -63
  96. package/dist/EnemMomentStudentModal/index.js.map +1 -1
  97. package/dist/EnemMomentStudentModal/index.mjs +48 -49
  98. package/dist/EnemMomentStudentModal/index.mjs.map +1 -1
  99. package/dist/EssayThemePicker/index.js +3 -3
  100. package/dist/EssayThemePicker/index.mjs +2 -2
  101. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js +48 -49
  102. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js.map +1 -1
  103. package/dist/ExamDetailsLayout/ExamDetailsPage/index.mjs +47 -48
  104. package/dist/ExamPageLayout/index.js +48 -49
  105. package/dist/ExamPageLayout/index.js.map +1 -1
  106. package/dist/ExamPageLayout/index.mjs +47 -48
  107. package/dist/Forum/index.js +6 -7
  108. package/dist/Forum/index.js.map +1 -1
  109. package/dist/Forum/index.mjs +5 -6
  110. package/dist/IconButton/index.js +2 -2
  111. package/dist/IconButton/index.mjs +1 -1
  112. package/dist/LessonCardPreview/index.js +48 -49
  113. package/dist/LessonCardPreview/index.js.map +1 -1
  114. package/dist/LessonCardPreview/index.mjs +47 -48
  115. package/dist/LessonMediaSections/index.js +48 -49
  116. package/dist/LessonMediaSections/index.js.map +1 -1
  117. package/dist/LessonMediaSections/index.mjs +47 -48
  118. package/dist/LessonsCatalog/index.js +48 -49
  119. package/dist/LessonsCatalog/index.js.map +1 -1
  120. package/dist/LessonsCatalog/index.mjs +47 -48
  121. package/dist/Modal/index.d.ts +11 -1
  122. package/dist/Modal/index.d.ts.map +1 -1
  123. package/dist/Modal/index.js +3 -4
  124. package/dist/Modal/index.js.map +1 -1
  125. package/dist/Modal/index.mjs +2 -3
  126. package/dist/MultiCheckSelect/index.js +5 -6
  127. package/dist/MultiCheckSelect/index.js.map +1 -1
  128. package/dist/MultiCheckSelect/index.mjs +4 -5
  129. package/dist/NotificationCard/index.js +6 -7
  130. package/dist/NotificationCard/index.js.map +1 -1
  131. package/dist/NotificationCard/index.mjs +5 -6
  132. package/dist/PerformanceReportModal/index.js +4 -5
  133. package/dist/PerformanceReportModal/index.js.map +1 -1
  134. package/dist/PerformanceReportModal/index.mjs +3 -4
  135. package/dist/PrintableUsersTable/index.js +48 -49
  136. package/dist/PrintableUsersTable/index.js.map +1 -1
  137. package/dist/PrintableUsersTable/index.mjs +47 -48
  138. package/dist/ProgressModal/index.js +4 -5
  139. package/dist/ProgressModal/index.js.map +1 -1
  140. package/dist/ProgressModal/index.mjs +3 -4
  141. package/dist/QuestionsPerformanceCard/index.js +49 -50
  142. package/dist/QuestionsPerformanceCard/index.js.map +1 -1
  143. package/dist/QuestionsPerformanceCard/index.mjs +48 -49
  144. package/dist/Quiz/QuizResult/index.js +4 -4
  145. package/dist/Quiz/QuizResult/index.mjs +3 -3
  146. package/dist/Quiz/index.d.ts.map +1 -1
  147. package/dist/Quiz/index.js +8 -9
  148. package/dist/Quiz/index.js.map +1 -1
  149. package/dist/Quiz/index.mjs +7 -8
  150. package/dist/QuizTimer/index.d.ts +12 -0
  151. package/dist/QuizTimer/index.d.ts.map +1 -1
  152. package/dist/QuizTimer/index.js +4 -2
  153. package/dist/QuizTimer/index.js.map +1 -1
  154. package/dist/QuizTimer/index.mjs +4 -2
  155. package/dist/RecommendedLessonCreate/index.js +48 -49
  156. package/dist/RecommendedLessonCreate/index.js.map +1 -1
  157. package/dist/RecommendedLessonCreate/index.mjs +47 -48
  158. package/dist/RecommendedLessonDetails/index.js +11 -12
  159. package/dist/RecommendedLessonDetails/index.js.map +1 -1
  160. package/dist/RecommendedLessonDetails/index.mjs +10 -11
  161. package/dist/RecommendedLessonsHistory/index.js +48 -49
  162. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  163. package/dist/RecommendedLessonsHistory/index.mjs +47 -48
  164. package/dist/ReportDetailModal/index.js +5 -6
  165. package/dist/ReportDetailModal/index.js.map +1 -1
  166. package/dist/ReportDetailModal/index.mjs +4 -5
  167. package/dist/RichEditor/index.js +6 -7
  168. package/dist/RichEditor/index.js.map +1 -1
  169. package/dist/RichEditor/index.mjs +5 -6
  170. package/dist/{RichEditorCore-62NIM7PC.js → RichEditorCore-6OT3VNJR.js} +15 -16
  171. package/dist/RichEditorCore-6OT3VNJR.js.map +1 -0
  172. package/dist/{RichEditorCore-CCO3SSSU.mjs → RichEditorCore-IF6JQHEO.mjs} +6 -7
  173. package/dist/{RichEditorCore-CCO3SSSU.mjs.map → RichEditorCore-IF6JQHEO.mjs.map} +1 -1
  174. package/dist/Search/index.js +5 -6
  175. package/dist/Search/index.js.map +1 -1
  176. package/dist/Search/index.mjs +4 -5
  177. package/dist/SendActivityModal/SendActivityModal.js +48 -49
  178. package/dist/SendActivityModal/SendActivityModal.js.map +1 -1
  179. package/dist/SendActivityModal/SendActivityModal.mjs +47 -48
  180. package/dist/SendActivityModal/index.js +48 -49
  181. package/dist/SendActivityModal/index.js.map +1 -1
  182. package/dist/SendActivityModal/index.mjs +47 -48
  183. package/dist/SendLessonModal/index.js +48 -49
  184. package/dist/SendLessonModal/index.js.map +1 -1
  185. package/dist/SendLessonModal/index.mjs +47 -48
  186. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js +48 -49
  187. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js.map +1 -1
  188. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.mjs +47 -48
  189. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js +6 -7
  190. package/dist/SimulatedPerformance/useSimulatedPerformance/index.js.map +1 -1
  191. package/dist/SimulatedPerformance/useSimulatedPerformance/index.mjs +5 -6
  192. package/dist/SimulatedStudentSimulationsModal/index.js +8 -9
  193. package/dist/SimulatedStudentSimulationsModal/index.js.map +1 -1
  194. package/dist/SimulatedStudentSimulationsModal/index.mjs +7 -8
  195. package/dist/SimulationSummaryCards/index.js +5 -5
  196. package/dist/SimulationSummaryCards/index.mjs +4 -4
  197. package/dist/SimulationsPage/index.js +48 -49
  198. package/dist/SimulationsPage/index.js.map +1 -1
  199. package/dist/SimulationsPage/index.mjs +47 -48
  200. package/dist/StudentLessonProgressModal/index.js +6 -7
  201. package/dist/StudentLessonProgressModal/index.js.map +1 -1
  202. package/dist/StudentLessonProgressModal/index.mjs +5 -6
  203. package/dist/StudentPerformanceDetailsModal/index.js +9 -10
  204. package/dist/StudentPerformanceDetailsModal/index.js.map +1 -1
  205. package/dist/StudentPerformanceDetailsModal/index.mjs +8 -9
  206. package/dist/Support/TicketModal/index.js +4 -5
  207. package/dist/Support/TicketModal/index.js.map +1 -1
  208. package/dist/Support/TicketModal/index.mjs +3 -4
  209. package/dist/Support/index.js +5 -6
  210. package/dist/Support/index.js.map +1 -1
  211. package/dist/Support/index.mjs +4 -5
  212. package/dist/TableProvider/index.js +48 -49
  213. package/dist/TableProvider/index.js.map +1 -1
  214. package/dist/TableProvider/index.mjs +47 -48
  215. package/dist/UnifiedDraftModelPage/index.js +48 -49
  216. package/dist/UnifiedDraftModelPage/index.js.map +1 -1
  217. package/dist/UnifiedDraftModelPage/index.mjs +47 -48
  218. package/dist/UnifiedHistoryPage/index.js +48 -49
  219. package/dist/UnifiedHistoryPage/index.js.map +1 -1
  220. package/dist/UnifiedHistoryPage/index.mjs +47 -48
  221. package/dist/VideoPlayer/index.js +7 -8
  222. package/dist/VideoPlayer/index.js.map +1 -1
  223. package/dist/VideoPlayer/index.mjs +6 -7
  224. package/dist/Whiteboard/index.js +4 -5
  225. package/dist/Whiteboard/index.js.map +1 -1
  226. package/dist/Whiteboard/index.mjs +3 -4
  227. package/dist/{chunk-EVBQNVQW.mjs → chunk-233FSBU7.mjs} +5 -5
  228. package/dist/{chunk-JU63EMZM.js → chunk-24DQFREC.js} +3 -3
  229. package/dist/{chunk-JU63EMZM.js.map → chunk-24DQFREC.js.map} +1 -1
  230. package/dist/{chunk-QFXSQKW3.mjs → chunk-254EBPMW.mjs} +22 -22
  231. package/dist/{chunk-QFXSQKW3.mjs.map → chunk-254EBPMW.mjs.map} +1 -1
  232. package/dist/{chunk-SFQVZ4KQ.js → chunk-2ETPIOCD.js} +3 -3
  233. package/dist/{chunk-SFQVZ4KQ.js.map → chunk-2ETPIOCD.js.map} +1 -1
  234. package/dist/{chunk-RCNIBRZY.js → chunk-2VTJ2PKF.js} +10 -10
  235. package/dist/{chunk-RCNIBRZY.js.map → chunk-2VTJ2PKF.js.map} +1 -1
  236. package/dist/{chunk-B35D5S4G.js → chunk-2ZMGNCMI.js} +6 -6
  237. package/dist/{chunk-B35D5S4G.js.map → chunk-2ZMGNCMI.js.map} +1 -1
  238. package/dist/{chunk-QEPKR6ZF.js → chunk-3KSRDIS2.js} +20 -20
  239. package/dist/{chunk-QEPKR6ZF.js.map → chunk-3KSRDIS2.js.map} +1 -1
  240. package/dist/{chunk-MUCV5ZWZ.mjs → chunk-3YF7H577.mjs} +15 -9
  241. package/dist/chunk-3YF7H577.mjs.map +1 -0
  242. package/dist/{chunk-MADPP2PW.mjs → chunk-3ZSI2KI5.mjs} +2 -2
  243. package/dist/{chunk-2W7PTFXS.mjs → chunk-42XKJV56.mjs} +2 -2
  244. package/dist/{chunk-M6TC6XRQ.mjs → chunk-55ESXRRM.mjs} +2 -2
  245. package/dist/{chunk-4MURAKPC.mjs → chunk-5DJVOLVX.mjs} +3 -3
  246. package/dist/{chunk-YVT7CT3G.mjs → chunk-5P6CBDZ6.mjs} +2 -2
  247. package/dist/{chunk-BHKTJCFD.js → chunk-5QUP5HKB.js} +3 -3
  248. package/dist/{chunk-BHKTJCFD.js.map → chunk-5QUP5HKB.js.map} +1 -1
  249. package/dist/{chunk-SFEU7BMY.mjs → chunk-5SFNRXZB.mjs} +2 -2
  250. package/dist/{chunk-6ALEXGAN.js → chunk-6U4AI5SE.js} +6 -6
  251. package/dist/{chunk-6ALEXGAN.js.map → chunk-6U4AI5SE.js.map} +1 -1
  252. package/dist/{chunk-KYY4U5SN.mjs → chunk-6Z5W5J44.mjs} +3 -3
  253. package/dist/{chunk-XOKBMLW3.js → chunk-7IGUYLSF.js} +3 -3
  254. package/dist/{chunk-XOKBMLW3.js.map → chunk-7IGUYLSF.js.map} +1 -1
  255. package/dist/{chunk-GVYGPJH3.mjs → chunk-AU5M2766.mjs} +2 -2
  256. package/dist/{chunk-2VODGC76.js → chunk-AVEMHDN2.js} +66 -44
  257. package/dist/chunk-AVEMHDN2.js.map +1 -0
  258. package/dist/{chunk-HIIOADV4.js → chunk-AZSRKBYS.js} +63 -71
  259. package/dist/chunk-AZSRKBYS.js.map +1 -0
  260. package/dist/{chunk-CY2VKNCB.js → chunk-BQIBVC6X.js} +5 -5
  261. package/dist/{chunk-CY2VKNCB.js.map → chunk-BQIBVC6X.js.map} +1 -1
  262. package/dist/{chunk-M77TQ5JJ.mjs → chunk-BU32E6BR.mjs} +4 -6
  263. package/dist/{chunk-M77TQ5JJ.mjs.map → chunk-BU32E6BR.mjs.map} +1 -1
  264. package/dist/{chunk-5CQVDUDO.js → chunk-BUNF5POU.js} +5 -5
  265. package/dist/{chunk-5CQVDUDO.js.map → chunk-BUNF5POU.js.map} +1 -1
  266. package/dist/{chunk-Z6UN4ZPW.mjs → chunk-BVHVYC7Q.mjs} +4 -4
  267. package/dist/{chunk-WJENEFDG.js → chunk-CAFVLHDV.js} +3 -3
  268. package/dist/{chunk-WJENEFDG.js.map → chunk-CAFVLHDV.js.map} +1 -1
  269. package/dist/{chunk-BVUPM6EY.js → chunk-CAQ2Q3ON.js} +2 -2
  270. package/dist/chunk-CAQ2Q3ON.js.map +1 -0
  271. package/dist/{chunk-QMPOGLAR.js → chunk-CIASXVWX.js} +3 -3
  272. package/dist/{chunk-QMPOGLAR.js.map → chunk-CIASXVWX.js.map} +1 -1
  273. package/dist/{chunk-APKEYUJ3.js → chunk-CIQLC2ZZ.js} +3 -3
  274. package/dist/{chunk-APKEYUJ3.js.map → chunk-CIQLC2ZZ.js.map} +1 -1
  275. package/dist/{chunk-36XPNLGQ.js → chunk-CW3FCWR4.js} +16 -16
  276. package/dist/{chunk-36XPNLGQ.js.map → chunk-CW3FCWR4.js.map} +1 -1
  277. package/dist/{chunk-J5VEAJN5.mjs → chunk-CWVUGZNK.mjs} +2 -2
  278. package/dist/{chunk-BCMDP6GK.mjs → chunk-DV3N2K3Y.mjs} +4 -4
  279. package/dist/{chunk-PP7SEERV.mjs → chunk-DXYSEBK3.mjs} +9 -3
  280. package/dist/chunk-DXYSEBK3.mjs.map +1 -0
  281. package/dist/{chunk-754M6HQ5.js → chunk-EJN4OP3D.js} +5 -5
  282. package/dist/{chunk-754M6HQ5.js.map → chunk-EJN4OP3D.js.map} +1 -1
  283. package/dist/{chunk-3IM2SBPO.js → chunk-F5K3HMKT.js} +4 -4
  284. package/dist/{chunk-3IM2SBPO.js.map → chunk-F5K3HMKT.js.map} +1 -1
  285. package/dist/{chunk-WMDSGVZ7.mjs → chunk-GCGSAS2Z.mjs} +48 -63
  286. package/dist/chunk-GCGSAS2Z.mjs.map +1 -0
  287. package/dist/{chunk-EXHGEJ4P.mjs → chunk-GKARHTZ2.mjs} +2 -2
  288. package/dist/{chunk-2VDCEEXB.js → chunk-GNKFBVW4.js} +3 -3
  289. package/dist/{chunk-2VDCEEXB.js.map → chunk-GNKFBVW4.js.map} +1 -1
  290. package/dist/{chunk-CDLOMECB.js → chunk-GTBPMNTJ.js} +3 -3
  291. package/dist/{chunk-CDLOMECB.js.map → chunk-GTBPMNTJ.js.map} +1 -1
  292. package/dist/{chunk-YQKAASWM.js → chunk-GXXDSBN2.js} +10 -4
  293. package/dist/chunk-GXXDSBN2.js.map +1 -0
  294. package/dist/{chunk-FASVPU6N.js → chunk-H3F4OCXC.js} +10 -10
  295. package/dist/{chunk-FASVPU6N.js.map → chunk-H3F4OCXC.js.map} +1 -1
  296. package/dist/{chunk-JCFN6KRS.mjs → chunk-HGWDB73S.mjs} +2 -2
  297. package/dist/{chunk-JXXMO7PY.mjs → chunk-HN5RW4C3.mjs} +3 -3
  298. package/dist/{chunk-I2A4EQPH.mjs → chunk-HQ2GXFK5.mjs} +6 -6
  299. package/dist/{chunk-BIPC6F6D.js → chunk-IDJ37MOU.js} +115 -115
  300. package/dist/{chunk-BIPC6F6D.js.map → chunk-IDJ37MOU.js.map} +1 -1
  301. package/dist/{chunk-TBJLNIOY.mjs → chunk-JBLYYTHN.mjs} +2 -2
  302. package/dist/{chunk-G4NK66PM.js → chunk-JTWXQ267.js} +24 -18
  303. package/dist/chunk-JTWXQ267.js.map +1 -0
  304. package/dist/{chunk-V6IC74KH.js → chunk-JXGLDRDC.js} +34 -34
  305. package/dist/{chunk-V6IC74KH.js.map → chunk-JXGLDRDC.js.map} +1 -1
  306. package/dist/{chunk-DDFIRQI5.mjs → chunk-K3E5VEBF.mjs} +56 -34
  307. package/dist/chunk-K3E5VEBF.mjs.map +1 -0
  308. package/dist/{chunk-MSBEWG26.js → chunk-K5O2IOI4.js} +8 -8
  309. package/dist/{chunk-MSBEWG26.js.map → chunk-K5O2IOI4.js.map} +1 -1
  310. package/dist/{chunk-SB5YGKXR.js → chunk-KBMLGQ5J.js} +49 -64
  311. package/dist/chunk-KBMLGQ5J.js.map +1 -0
  312. package/dist/chunk-KCZEKV7M.mjs +81 -0
  313. package/dist/chunk-KCZEKV7M.mjs.map +1 -0
  314. package/dist/{chunk-GRSN76BV.mjs → chunk-KH2R4STU.mjs} +3 -3
  315. package/dist/{chunk-7DQM34JT.js → chunk-KHYSXYPO.js} +23 -23
  316. package/dist/{chunk-7DQM34JT.js.map → chunk-KHYSXYPO.js.map} +1 -1
  317. package/dist/{chunk-V2YHMPRR.js → chunk-KJHBQQYJ.js} +5 -5
  318. package/dist/{chunk-V2YHMPRR.js.map → chunk-KJHBQQYJ.js.map} +1 -1
  319. package/dist/{chunk-ZF5NMQJZ.mjs → chunk-KUKLN3CK.mjs} +4 -4
  320. package/dist/{chunk-6AYB7CZH.js → chunk-KZQVGSR2.js} +2 -2
  321. package/dist/{chunk-6AYB7CZH.js.map → chunk-KZQVGSR2.js.map} +1 -1
  322. package/dist/{chunk-UAKRBNW2.mjs → chunk-L4T76OKM.mjs} +2 -2
  323. package/dist/{chunk-AUCXJ7LG.js → chunk-M3LQH7Y7.js} +3 -3
  324. package/dist/{chunk-AUCXJ7LG.js.map → chunk-M3LQH7Y7.js.map} +1 -1
  325. package/dist/{chunk-FQNJJH7F.js → chunk-MCXRKD56.js} +13 -13
  326. package/dist/{chunk-FQNJJH7F.js.map → chunk-MCXRKD56.js.map} +1 -1
  327. package/dist/{chunk-PY5WCBKN.mjs → chunk-MERKXOSI.mjs} +4 -4
  328. package/dist/{chunk-D3YDZF2G.js → chunk-N472HQPZ.js} +3 -3
  329. package/dist/{chunk-D3YDZF2G.js.map → chunk-N472HQPZ.js.map} +1 -1
  330. package/dist/{chunk-UPMYCGXR.js → chunk-N4K4X34Z.js} +4 -4
  331. package/dist/{chunk-UPMYCGXR.js.map → chunk-N4K4X34Z.js.map} +1 -1
  332. package/dist/{chunk-RU43UMEH.js → chunk-NFCNAFUK.js} +3 -3
  333. package/dist/{chunk-RU43UMEH.js.map → chunk-NFCNAFUK.js.map} +1 -1
  334. package/dist/{chunk-APCB5HWT.mjs → chunk-NLSDZJRR.mjs} +3 -3
  335. package/dist/{chunk-EWYIXCNF.mjs → chunk-NLUTNCLH.mjs} +5 -5
  336. package/dist/{chunk-OP4Q2KDS.mjs → chunk-NMKKMY5P.mjs} +2 -2
  337. package/dist/{chunk-WDPFO4II.mjs → chunk-NMPK336K.mjs} +2 -2
  338. package/dist/{chunk-X6BZ5IEV.mjs → chunk-NU7O6YKR.mjs} +2 -2
  339. package/dist/{chunk-ZABDSRX3.js → chunk-NUZ5K3CB.js} +4 -4
  340. package/dist/{chunk-ZABDSRX3.js.map → chunk-NUZ5K3CB.js.map} +1 -1
  341. package/dist/{chunk-N5ZGFYLA.js → chunk-NZX3BA62.js} +3 -3
  342. package/dist/{chunk-N5ZGFYLA.js.map → chunk-NZX3BA62.js.map} +1 -1
  343. package/dist/{chunk-2TLSEAL2.js → chunk-O4TRDWXJ.js} +3 -3
  344. package/dist/{chunk-2TLSEAL2.js.map → chunk-O4TRDWXJ.js.map} +1 -1
  345. package/dist/{chunk-CBI5F4ME.mjs → chunk-OMSSA4NO.mjs} +2 -2
  346. package/dist/{chunk-YGEEWLGJ.js → chunk-PKKXCX5B.js} +3 -3
  347. package/dist/{chunk-YGEEWLGJ.js.map → chunk-PKKXCX5B.js.map} +1 -1
  348. package/dist/{chunk-GYHD6QEA.mjs → chunk-PQGQ3EH5.mjs} +2 -2
  349. package/dist/{chunk-3LN5GQAC.js → chunk-Q6UIUYNF.js} +6 -8
  350. package/dist/chunk-Q6UIUYNF.js.map +1 -0
  351. package/dist/chunk-QLWBGM7H.js +81 -0
  352. package/dist/chunk-QLWBGM7H.js.map +1 -0
  353. package/dist/{chunk-IF5GW6ID.js → chunk-QZ5DCDZ2.js} +6 -6
  354. package/dist/{chunk-IF5GW6ID.js.map → chunk-QZ5DCDZ2.js.map} +1 -1
  355. package/dist/{chunk-LSUCENYD.mjs → chunk-RBKGHUSR.mjs} +2 -2
  356. package/dist/{chunk-PIZTI5SJ.js → chunk-RMCZ7C2C.js} +3 -3
  357. package/dist/{chunk-PIZTI5SJ.js.map → chunk-RMCZ7C2C.js.map} +1 -1
  358. package/dist/{chunk-LGQNMQOT.mjs → chunk-ROS5XGTQ.mjs} +2 -2
  359. package/dist/chunk-ROS5XGTQ.mjs.map +1 -0
  360. package/dist/{chunk-TEUERRDG.mjs → chunk-RV45XVXE.mjs} +2 -2
  361. package/dist/{chunk-FW6ZI2MC.mjs → chunk-UAFSWXN5.mjs} +2 -2
  362. package/dist/{chunk-QUGKQYAJ.mjs → chunk-ULVFVLFE.mjs} +4 -6
  363. package/dist/{chunk-QUGKQYAJ.mjs.map → chunk-ULVFVLFE.mjs.map} +1 -1
  364. package/dist/{chunk-ANLL2EIX.mjs → chunk-UWCGTH3U.mjs} +2 -2
  365. package/dist/{chunk-6R2LEEEP.mjs → chunk-UZF2D2GG.mjs} +2 -2
  366. package/dist/{chunk-62L3PMYE.mjs → chunk-V3OVMHZD.mjs} +2 -2
  367. package/dist/{chunk-UDITT3N3.mjs → chunk-V6ELDZ2B.mjs} +2 -2
  368. package/dist/{chunk-G7NUCBD3.js → chunk-VDPV24JJ.js} +3 -3
  369. package/dist/{chunk-G7NUCBD3.js.map → chunk-VDPV24JJ.js.map} +1 -1
  370. package/dist/{chunk-IJQOTS5O.mjs → chunk-VJUS3GC4.mjs} +2 -2
  371. package/dist/{chunk-ZUPP7R2K.js → chunk-W7BBVDBI.js} +17 -3
  372. package/dist/chunk-W7BBVDBI.js.map +1 -0
  373. package/dist/{chunk-EHQDQ5RV.js → chunk-XARMPXRN.js} +10 -12
  374. package/dist/chunk-XARMPXRN.js.map +1 -0
  375. package/dist/{chunk-MQEAEU6G.mjs → chunk-XGMRYNER.mjs} +2 -2
  376. package/dist/{chunk-MMQMVVD6.mjs → chunk-XLTD5J74.mjs} +3 -3
  377. package/dist/{chunk-L3ST5GUJ.js → chunk-XQUK7R7L.js} +17 -17
  378. package/dist/{chunk-L3ST5GUJ.js.map → chunk-XQUK7R7L.js.map} +1 -1
  379. package/dist/{chunk-OMBUOOMD.mjs → chunk-XYT542WD.mjs} +2 -2
  380. package/dist/{chunk-IZNABVXE.js → chunk-Y4IGIWP4.js} +3 -3
  381. package/dist/{chunk-IZNABVXE.js.map → chunk-Y4IGIWP4.js.map} +1 -1
  382. package/dist/{chunk-COWOGT7U.mjs → chunk-YZWFDSTC.mjs} +2 -2
  383. package/dist/{chunk-M2FN7CNS.mjs → chunk-Z4L2DWMX.mjs} +17 -3
  384. package/dist/chunk-Z4L2DWMX.mjs.map +1 -0
  385. package/dist/chunk-Z75J66LL.mjs +149 -0
  386. package/dist/chunk-Z75J66LL.mjs.map +1 -0
  387. package/dist/{chunk-CWIJ7RXR.js → chunk-ZHUFICW3.js} +3 -3
  388. package/dist/{chunk-CWIJ7RXR.js.map → chunk-ZHUFICW3.js.map} +1 -1
  389. package/dist/{chunk-Q5XGBTOY.js → chunk-ZNITTMV5.js} +3 -3
  390. package/dist/{chunk-Q5XGBTOY.js.map → chunk-ZNITTMV5.js.map} +1 -1
  391. package/dist/components/EnemMoment/HeaderFilters.d.ts +12 -1
  392. package/dist/components/EnemMoment/HeaderFilters.d.ts.map +1 -1
  393. package/dist/components/EnemMoment/types.d.ts +10 -1
  394. package/dist/components/EnemMoment/types.d.ts.map +1 -1
  395. package/dist/hooks/useAppContent/index.js +48 -49
  396. package/dist/hooks/useAppContent/index.js.map +1 -1
  397. package/dist/hooks/useAppContent/index.mjs +47 -48
  398. package/dist/hooks/useResizableColumns.d.ts +20 -9
  399. package/dist/hooks/useResizableColumns.d.ts.map +1 -1
  400. package/dist/hooks/useScreen/index.js +2 -2
  401. package/dist/hooks/useScreen/index.mjs +1 -1
  402. package/dist/index.js +48 -49
  403. package/dist/index.js.map +1 -1
  404. package/dist/index.mjs +47 -48
  405. package/dist/store/layoutPreferencesStore.d.ts +12 -24
  406. package/dist/store/layoutPreferencesStore.d.ts.map +1 -1
  407. package/package.json +1 -1
  408. package/dist/RichEditorCore-62NIM7PC.js.map +0 -1
  409. package/dist/chunk-2EDRPEYL.mjs +0 -157
  410. package/dist/chunk-2EDRPEYL.mjs.map +0 -1
  411. package/dist/chunk-2VODGC76.js.map +0 -1
  412. package/dist/chunk-3LN5GQAC.js.map +0 -1
  413. package/dist/chunk-BVUPM6EY.js.map +0 -1
  414. package/dist/chunk-CH6BWMSQ.js +0 -17
  415. package/dist/chunk-CH6BWMSQ.js.map +0 -1
  416. package/dist/chunk-DDFIRQI5.mjs.map +0 -1
  417. package/dist/chunk-EHQDQ5RV.js.map +0 -1
  418. package/dist/chunk-G4NK66PM.js.map +0 -1
  419. package/dist/chunk-HIIOADV4.js.map +0 -1
  420. package/dist/chunk-JSH3BQZ7.mjs +0 -17
  421. package/dist/chunk-JSH3BQZ7.mjs.map +0 -1
  422. package/dist/chunk-LGQNMQOT.mjs.map +0 -1
  423. package/dist/chunk-LMDAF6LA.mjs +0 -51
  424. package/dist/chunk-LMDAF6LA.mjs.map +0 -1
  425. package/dist/chunk-M2FN7CNS.mjs.map +0 -1
  426. package/dist/chunk-MUCV5ZWZ.mjs.map +0 -1
  427. package/dist/chunk-PJOBOBNJ.js +0 -51
  428. package/dist/chunk-PJOBOBNJ.js.map +0 -1
  429. package/dist/chunk-PP7SEERV.mjs.map +0 -1
  430. package/dist/chunk-SB5YGKXR.js.map +0 -1
  431. package/dist/chunk-WMDSGVZ7.mjs.map +0 -1
  432. package/dist/chunk-YQKAASWM.js.map +0 -1
  433. package/dist/chunk-ZUPP7R2K.js.map +0 -1
  434. /package/dist/{chunk-EVBQNVQW.mjs.map → chunk-233FSBU7.mjs.map} +0 -0
  435. /package/dist/{chunk-MADPP2PW.mjs.map → chunk-3ZSI2KI5.mjs.map} +0 -0
  436. /package/dist/{chunk-2W7PTFXS.mjs.map → chunk-42XKJV56.mjs.map} +0 -0
  437. /package/dist/{chunk-M6TC6XRQ.mjs.map → chunk-55ESXRRM.mjs.map} +0 -0
  438. /package/dist/{chunk-4MURAKPC.mjs.map → chunk-5DJVOLVX.mjs.map} +0 -0
  439. /package/dist/{chunk-YVT7CT3G.mjs.map → chunk-5P6CBDZ6.mjs.map} +0 -0
  440. /package/dist/{chunk-SFEU7BMY.mjs.map → chunk-5SFNRXZB.mjs.map} +0 -0
  441. /package/dist/{chunk-KYY4U5SN.mjs.map → chunk-6Z5W5J44.mjs.map} +0 -0
  442. /package/dist/{chunk-GVYGPJH3.mjs.map → chunk-AU5M2766.mjs.map} +0 -0
  443. /package/dist/{chunk-Z6UN4ZPW.mjs.map → chunk-BVHVYC7Q.mjs.map} +0 -0
  444. /package/dist/{chunk-J5VEAJN5.mjs.map → chunk-CWVUGZNK.mjs.map} +0 -0
  445. /package/dist/{chunk-BCMDP6GK.mjs.map → chunk-DV3N2K3Y.mjs.map} +0 -0
  446. /package/dist/{chunk-EXHGEJ4P.mjs.map → chunk-GKARHTZ2.mjs.map} +0 -0
  447. /package/dist/{chunk-JCFN6KRS.mjs.map → chunk-HGWDB73S.mjs.map} +0 -0
  448. /package/dist/{chunk-JXXMO7PY.mjs.map → chunk-HN5RW4C3.mjs.map} +0 -0
  449. /package/dist/{chunk-I2A4EQPH.mjs.map → chunk-HQ2GXFK5.mjs.map} +0 -0
  450. /package/dist/{chunk-TBJLNIOY.mjs.map → chunk-JBLYYTHN.mjs.map} +0 -0
  451. /package/dist/{chunk-GRSN76BV.mjs.map → chunk-KH2R4STU.mjs.map} +0 -0
  452. /package/dist/{chunk-ZF5NMQJZ.mjs.map → chunk-KUKLN3CK.mjs.map} +0 -0
  453. /package/dist/{chunk-UAKRBNW2.mjs.map → chunk-L4T76OKM.mjs.map} +0 -0
  454. /package/dist/{chunk-PY5WCBKN.mjs.map → chunk-MERKXOSI.mjs.map} +0 -0
  455. /package/dist/{chunk-APCB5HWT.mjs.map → chunk-NLSDZJRR.mjs.map} +0 -0
  456. /package/dist/{chunk-EWYIXCNF.mjs.map → chunk-NLUTNCLH.mjs.map} +0 -0
  457. /package/dist/{chunk-OP4Q2KDS.mjs.map → chunk-NMKKMY5P.mjs.map} +0 -0
  458. /package/dist/{chunk-WDPFO4II.mjs.map → chunk-NMPK336K.mjs.map} +0 -0
  459. /package/dist/{chunk-X6BZ5IEV.mjs.map → chunk-NU7O6YKR.mjs.map} +0 -0
  460. /package/dist/{chunk-CBI5F4ME.mjs.map → chunk-OMSSA4NO.mjs.map} +0 -0
  461. /package/dist/{chunk-GYHD6QEA.mjs.map → chunk-PQGQ3EH5.mjs.map} +0 -0
  462. /package/dist/{chunk-LSUCENYD.mjs.map → chunk-RBKGHUSR.mjs.map} +0 -0
  463. /package/dist/{chunk-TEUERRDG.mjs.map → chunk-RV45XVXE.mjs.map} +0 -0
  464. /package/dist/{chunk-FW6ZI2MC.mjs.map → chunk-UAFSWXN5.mjs.map} +0 -0
  465. /package/dist/{chunk-ANLL2EIX.mjs.map → chunk-UWCGTH3U.mjs.map} +0 -0
  466. /package/dist/{chunk-6R2LEEEP.mjs.map → chunk-UZF2D2GG.mjs.map} +0 -0
  467. /package/dist/{chunk-62L3PMYE.mjs.map → chunk-V3OVMHZD.mjs.map} +0 -0
  468. /package/dist/{chunk-UDITT3N3.mjs.map → chunk-V6ELDZ2B.mjs.map} +0 -0
  469. /package/dist/{chunk-IJQOTS5O.mjs.map → chunk-VJUS3GC4.mjs.map} +0 -0
  470. /package/dist/{chunk-MQEAEU6G.mjs.map → chunk-XGMRYNER.mjs.map} +0 -0
  471. /package/dist/{chunk-MMQMVVD6.mjs.map → chunk-XLTD5J74.mjs.map} +0 -0
  472. /package/dist/{chunk-OMBUOOMD.mjs.map → chunk-XYT542WD.mjs.map} +0 -0
  473. /package/dist/{chunk-COWOGT7U.mjs.map → chunk-YZWFDSTC.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkYQKAASWMjs = require('./chunk-YQKAASWM.js');
3
+ var _chunkGXXDSBN2js = require('./chunk-GXXDSBN2.js');
4
4
 
5
5
 
6
6
  var _chunkTN3AYOMVjs = require('./chunk-TN3AYOMV.js');
@@ -55,7 +55,7 @@ var CardAccordation = _react.forwardRef.call(void 0,
55
55
  }
56
56
  };
57
57
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
58
- _chunkYQKAASWMjs.CardBase,
58
+ _chunkGXXDSBN2js.CardBase,
59
59
  {
60
60
  ref,
61
61
  layout: "vertical",
@@ -123,4 +123,4 @@ CardAccordation.displayName = "CardAccordation";
123
123
 
124
124
 
125
125
  exports.CardAccordation = CardAccordation;
126
- //# sourceMappingURL=chunk-SFQVZ4KQ.js.map
126
+ //# sourceMappingURL=chunk-2ETPIOCD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-SFQVZ4KQ.js","../src/components/Accordation/Accordation.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACPA;AACE;AAIA;AACA;AACA;AAAA,8BACK;AAEP,uEAA+B;AAqFvB,+CAAA;AApER,IAAM,gBAAA,EAAkB,+BAAA;AAAA,EACtB,CACE;AAAA,IACE,OAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA,EAAkB,KAAA;AAAA,IAClB,QAAA,EAAU,kBAAA;AAAA,IACV,gBAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,KAAA;AAAA,IACX,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,GAAG;AAAA,EACL,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,EAAA,EAAI,6BAAA,eAAwB,CAAA;AACxE,IAAA,MAAM,YAAA,EAAc,0BAAA,CAAM;AAG1B,IAAA,MAAM,UAAA,EAAY,MAAA,EAAQ,CAAA,kBAAA,EAAqB,KAAK,CAAA,EAAA;AAEvB,IAAA;AAIe,IAAA;AACV,IAAA;AAGlB,IAAA;AACI,MAAA;AACsB,QAAA;AACxC,MAAA;AACmC,IAAA;AAEV,IAAA;AACX,MAAA;AAEO,MAAA;AAEF,MAAA;AACc,QAAA;AACjC,MAAA;AAE8B,sBAAA;AAChC,IAAA;AAEmE,IAAA;AACnD,MAAA;AAEkC,MAAA;AACzB,QAAA;AACR,QAAA;AACf,MAAA;AACF,IAAA;AAGE,IAAA;AAAC,MAAA;AAAA,MAAA;AACC,QAAA;AACO,QAAA;AACC,QAAA;AACE,QAAA;AACgC,QAAA;AACtC,QAAA;AAGJ,QAAA;AAAA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACK,cAAA;AACC,cAAA;AACI,cAAA;AACE,cAAA;AACX,cAAA;AACW,cAAA;AACT,gBAAA;AACY,gBAAA;AACZ,gBAAA;AACF,cAAA;AACe,cAAA;AACA,cAAA;AACA,cAAA;AACH,cAAA;AAEX,cAAA;AAAA,gBAAA;AAED,gCAAA;AAAC,kBAAA;AAAA,kBAAA;AACO,oBAAA;AACK,oBAAA;AACT,sBAAA;AAC6B,sBAAA;AACF,sBAAA;AAC7B,oBAAA;AACY,oBAAA;AAAA,kBAAA;AACd,gBAAA;AAAA,cAAA;AAAA,YAAA;AACF,UAAA;AASA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACK,cAAA;AACa,cAAA;AACH,cAAA;AACH,cAAA;AACT,gBAAA;AAC6B,gBAAA;AAC/B,cAAA;AACY,cAAA;AACA,cAAA;AAEP,cAAA;AAAuD,YAAA;AAC9D,UAAA;AAAA,QAAA;AAAA,MAAA;AACF,IAAA;AAEJ,EAAA;AACF;AAE8B;AD5B2B;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-SFQVZ4KQ.js","sourcesContent":[null,"import {\n forwardRef,\n HTMLAttributes,\n KeyboardEvent,\n ReactNode,\n useId,\n useState,\n useEffect,\n} from 'react';\nimport { CardBase } from '../Card/Card';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { cn } from '../../utils/utils';\n\ninterface CardAccordationProps extends HTMLAttributes<HTMLDivElement> {\n trigger: ReactNode;\n children: ReactNode;\n defaultExpanded?: boolean;\n expanded?: boolean;\n onToggleExpanded?: (isExpanded: boolean) => void;\n value?: string;\n disabled?: boolean;\n /** Additional class for the trigger button */\n triggerClassName?: string;\n /** Additional class for the content wrapper */\n contentClassName?: string;\n}\n\nconst CardAccordation = forwardRef<HTMLDivElement, CardAccordationProps>(\n (\n {\n trigger,\n children,\n className,\n defaultExpanded = false,\n expanded: controlledExpanded,\n onToggleExpanded,\n value,\n disabled = false,\n triggerClassName,\n contentClassName,\n ...props\n },\n ref\n ) => {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const generatedId = useId();\n\n // Use value as ID base for better semantics, fallback to generated ID\n const contentId = value ? `accordion-content-${value}` : generatedId;\n const headerId = value\n ? `accordion-header-${value}`\n : `${generatedId}-header`;\n\n // Determine if component is controlled\n const isControlled = controlledExpanded !== undefined;\n const isExpanded = isControlled ? controlledExpanded : internalExpanded;\n\n // Sync internal state when controlled value changes\n useEffect(() => {\n if (isControlled) {\n setInternalExpanded(controlledExpanded);\n }\n }, [isControlled, controlledExpanded]);\n\n const handleToggle = () => {\n if (disabled) return;\n\n const newExpanded = !isExpanded;\n\n if (!isControlled) {\n setInternalExpanded(newExpanded);\n }\n\n onToggleExpanded?.(newExpanded);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <CardBase\n ref={ref}\n layout=\"vertical\"\n padding=\"none\"\n minHeight=\"none\"\n className={cn('overflow-hidden', className)}\n {...props}\n >\n {/* Clickable header */}\n <button\n id={headerId}\n type=\"button\"\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className={cn(\n 'w-full cursor-pointer not-aria-expanded:rounded-xl aria-expanded:rounded-t-xl flex items-center justify-between gap-3 text-left transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-950 focus-visible:ring-inset pl-2 pr-10',\n disabled && 'cursor-not-allowed text-text-400',\n triggerClassName\n )}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n aria-disabled={disabled}\n data-value={value}\n >\n {trigger}\n\n <CaretRightIcon\n size={20}\n className={cn(\n 'transition-transform duration-200 flex-shrink-0',\n disabled ? 'text-gray-400' : 'text-text-700',\n isExpanded ? 'rotate-90' : 'rotate-0'\n )}\n data-testid=\"accordion-caret\"\n />\n </button>\n\n {/*\n Expandable content. `relative` makes this the containing block of\n absolutely positioned descendants (e.g. `sr-only` checkbox inputs):\n otherwise they escape the `max-h-0 overflow-hidden` clip while\n collapsed and inflate the scroll height of the nearest scrollable\n ancestor, leaving a blank, scrollable area below the content.\n */}\n <section\n id={contentId}\n aria-labelledby={headerId}\n aria-hidden={!isExpanded}\n className={cn(\n 'relative transition-all duration-300 ease-in-out overflow-hidden',\n isExpanded ? 'opacity-100' : 'max-h-0 opacity-0'\n )}\n data-testid=\"accordion-content\"\n data-value={value}\n >\n <div className={cn('p-4 pt-0', contentClassName)}>{children}</div>\n </section>\n </CardBase>\n );\n }\n);\n\nCardAccordation.displayName = 'CardAccordation';\n\nexport { CardAccordation };\nexport type { CardAccordationProps };\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-2ETPIOCD.js","../src/components/Accordation/Accordation.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACPA;AACE;AAIA;AACA;AACA;AAAA,8BACK;AAEP,uEAA+B;AAqFvB,+CAAA;AApER,IAAM,gBAAA,EAAkB,+BAAA;AAAA,EACtB,CACE;AAAA,IACE,OAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA,EAAkB,KAAA;AAAA,IAClB,QAAA,EAAU,kBAAA;AAAA,IACV,gBAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,KAAA;AAAA,IACX,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,GAAG;AAAA,EACL,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,EAAA,EAAI,6BAAA,eAAwB,CAAA;AACxE,IAAA,MAAM,YAAA,EAAc,0BAAA,CAAM;AAG1B,IAAA,MAAM,UAAA,EAAY,MAAA,EAAQ,CAAA,kBAAA,EAAqB,KAAK,CAAA,EAAA;AAEvB,IAAA;AAIe,IAAA;AACV,IAAA;AAGlB,IAAA;AACI,MAAA;AACsB,QAAA;AACxC,MAAA;AACmC,IAAA;AAEV,IAAA;AACX,MAAA;AAEO,MAAA;AAEF,MAAA;AACc,QAAA;AACjC,MAAA;AAE8B,sBAAA;AAChC,IAAA;AAEmE,IAAA;AACnD,MAAA;AAEkC,MAAA;AACzB,QAAA;AACR,QAAA;AACf,MAAA;AACF,IAAA;AAGE,IAAA;AAAC,MAAA;AAAA,MAAA;AACC,QAAA;AACO,QAAA;AACC,QAAA;AACE,QAAA;AACgC,QAAA;AACtC,QAAA;AAGJ,QAAA;AAAA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACK,cAAA;AACC,cAAA;AACI,cAAA;AACE,cAAA;AACX,cAAA;AACW,cAAA;AACT,gBAAA;AACY,gBAAA;AACZ,gBAAA;AACF,cAAA;AACe,cAAA;AACA,cAAA;AACA,cAAA;AACH,cAAA;AAEX,cAAA;AAAA,gBAAA;AAED,gCAAA;AAAC,kBAAA;AAAA,kBAAA;AACO,oBAAA;AACK,oBAAA;AACT,sBAAA;AAC6B,sBAAA;AACF,sBAAA;AAC7B,oBAAA;AACY,oBAAA;AAAA,kBAAA;AACd,gBAAA;AAAA,cAAA;AAAA,YAAA;AACF,UAAA;AASA,0BAAA;AAAC,YAAA;AAAA,YAAA;AACK,cAAA;AACa,cAAA;AACH,cAAA;AACH,cAAA;AACT,gBAAA;AAC6B,gBAAA;AAC/B,cAAA;AACY,cAAA;AACA,cAAA;AAEP,cAAA;AAAuD,YAAA;AAC9D,UAAA;AAAA,QAAA;AAAA,MAAA;AACF,IAAA;AAEJ,EAAA;AACF;AAE8B;AD5B2B;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-2ETPIOCD.js","sourcesContent":[null,"import {\n forwardRef,\n HTMLAttributes,\n KeyboardEvent,\n ReactNode,\n useId,\n useState,\n useEffect,\n} from 'react';\nimport { CardBase } from '../Card/Card';\nimport { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';\nimport { cn } from '../../utils/utils';\n\ninterface CardAccordationProps extends HTMLAttributes<HTMLDivElement> {\n trigger: ReactNode;\n children: ReactNode;\n defaultExpanded?: boolean;\n expanded?: boolean;\n onToggleExpanded?: (isExpanded: boolean) => void;\n value?: string;\n disabled?: boolean;\n /** Additional class for the trigger button */\n triggerClassName?: string;\n /** Additional class for the content wrapper */\n contentClassName?: string;\n}\n\nconst CardAccordation = forwardRef<HTMLDivElement, CardAccordationProps>(\n (\n {\n trigger,\n children,\n className,\n defaultExpanded = false,\n expanded: controlledExpanded,\n onToggleExpanded,\n value,\n disabled = false,\n triggerClassName,\n contentClassName,\n ...props\n },\n ref\n ) => {\n const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n const generatedId = useId();\n\n // Use value as ID base for better semantics, fallback to generated ID\n const contentId = value ? `accordion-content-${value}` : generatedId;\n const headerId = value\n ? `accordion-header-${value}`\n : `${generatedId}-header`;\n\n // Determine if component is controlled\n const isControlled = controlledExpanded !== undefined;\n const isExpanded = isControlled ? controlledExpanded : internalExpanded;\n\n // Sync internal state when controlled value changes\n useEffect(() => {\n if (isControlled) {\n setInternalExpanded(controlledExpanded);\n }\n }, [isControlled, controlledExpanded]);\n\n const handleToggle = () => {\n if (disabled) return;\n\n const newExpanded = !isExpanded;\n\n if (!isControlled) {\n setInternalExpanded(newExpanded);\n }\n\n onToggleExpanded?.(newExpanded);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleToggle();\n }\n };\n\n return (\n <CardBase\n ref={ref}\n layout=\"vertical\"\n padding=\"none\"\n minHeight=\"none\"\n className={cn('overflow-hidden', className)}\n {...props}\n >\n {/* Clickable header */}\n <button\n id={headerId}\n type=\"button\"\n onClick={handleToggle}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n className={cn(\n 'w-full cursor-pointer not-aria-expanded:rounded-xl aria-expanded:rounded-t-xl flex items-center justify-between gap-3 text-left transition-colors duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-950 focus-visible:ring-inset pl-2 pr-10',\n disabled && 'cursor-not-allowed text-text-400',\n triggerClassName\n )}\n aria-expanded={isExpanded}\n aria-controls={contentId}\n aria-disabled={disabled}\n data-value={value}\n >\n {trigger}\n\n <CaretRightIcon\n size={20}\n className={cn(\n 'transition-transform duration-200 flex-shrink-0',\n disabled ? 'text-gray-400' : 'text-text-700',\n isExpanded ? 'rotate-90' : 'rotate-0'\n )}\n data-testid=\"accordion-caret\"\n />\n </button>\n\n {/*\n Expandable content. `relative` makes this the containing block of\n absolutely positioned descendants (e.g. `sr-only` checkbox inputs):\n otherwise they escape the `max-h-0 overflow-hidden` clip while\n collapsed and inflate the scroll height of the nearest scrollable\n ancestor, leaving a blank, scrollable area below the content.\n */}\n <section\n id={contentId}\n aria-labelledby={headerId}\n aria-hidden={!isExpanded}\n className={cn(\n 'relative transition-all duration-300 ease-in-out overflow-hidden',\n isExpanded ? 'opacity-100' : 'max-h-0 opacity-0'\n )}\n data-testid=\"accordion-content\"\n data-value={value}\n >\n <div className={cn('p-4 pt-0', contentClassName)}>{children}</div>\n </section>\n </CardBase>\n );\n }\n);\n\nCardAccordation.displayName = 'CardAccordation';\n\nexport { CardAccordation };\nexport type { CardAccordationProps };\n"]}
@@ -3,15 +3,15 @@
3
3
  var _chunkAN62GXF5js = require('./chunk-AN62GXF5.js');
4
4
 
5
5
 
6
- var _chunkBVUPM6EYjs = require('./chunk-BVUPM6EY.js');
6
+ var _chunkCAQ2Q3ONjs = require('./chunk-CAQ2Q3ON.js');
7
7
 
8
8
 
9
9
 
10
10
 
11
- var _chunk2TLSEAL2js = require('./chunk-2TLSEAL2.js');
11
+ var _chunkO4TRDWXJjs = require('./chunk-O4TRDWXJ.js');
12
12
 
13
13
 
14
- var _chunkG4NK66PMjs = require('./chunk-G4NK66PM.js');
14
+ var _chunkJTWXQ267js = require('./chunk-JTWXQ267.js');
15
15
 
16
16
  // src/components/CalendarCard/CalendarCard.tsx
17
17
  var _CalendarBlank = require('@phosphor-icons/react/dist/csr/CalendarBlank');
@@ -42,7 +42,7 @@ var CalendarCard = ({
42
42
  if (isMobile) {
43
43
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
44
44
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
45
- _chunkBVUPM6EYjs.IconButton_default,
45
+ _chunkCAQ2Q3ONjs.IconButton_default,
46
46
  {
47
47
  active: effectiveOpen,
48
48
  onClick: () => handleOpenChange(!effectiveOpen),
@@ -53,7 +53,7 @@ var CalendarCard = ({
53
53
  }
54
54
  ),
55
55
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
56
- _chunkG4NK66PMjs.Modal_default,
56
+ _chunkJTWXQ267js.Modal_default,
57
57
  {
58
58
  isOpen: effectiveOpen,
59
59
  onClose: () => handleOpenChange(false),
@@ -63,14 +63,14 @@ var CalendarCard = ({
63
63
  )
64
64
  ] });
65
65
  }
66
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk2TLSEAL2js.DropdownMenu_default, { open: effectiveOpen, onOpenChange: handleOpenChange, children: [
66
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkO4TRDWXJjs.DropdownMenu_default, { open: effectiveOpen, onOpenChange: handleOpenChange, children: [
67
67
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
68
- _chunk2TLSEAL2js.DropdownMenuTrigger,
68
+ _chunkO4TRDWXJjs.DropdownMenuTrigger,
69
69
  {
70
70
  className: `text-primary cursor-pointer ${_nullishCoalesce(className, () => ( ""))}`,
71
71
  asChild: true,
72
72
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
73
- _chunkBVUPM6EYjs.IconButton_default,
73
+ _chunkCAQ2Q3ONjs.IconButton_default,
74
74
  {
75
75
  active: effectiveOpen,
76
76
  "aria-label": "Calend\xE1rio de atividades",
@@ -80,7 +80,7 @@ var CalendarCard = ({
80
80
  }
81
81
  ),
82
82
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
83
- _chunk2TLSEAL2js.DropdownMenuContent,
83
+ _chunkO4TRDWXJjs.DropdownMenuContent,
84
84
  {
85
85
  role: "dialog",
86
86
  "aria-label": "Calend\xE1rio de atividades",
@@ -98,4 +98,4 @@ var CalendarCard_default = CalendarCard;
98
98
 
99
99
 
100
100
  exports.CalendarCard = CalendarCard; exports.CalendarCard_default = CalendarCard_default;
101
- //# sourceMappingURL=chunk-RCNIBRZY.js.map
101
+ //# sourceMappingURL=chunk-2VTJ2PKF.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-RCNIBRZY.js","../src/components/CalendarCard/CalendarCard.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACfA,6EAAkC;AAElC,8BAAsC;AAiEhB,+CAAA;AA5Bf,IAAM,aAAA,EAAe,CAAC;AAAA,EAC3B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,EAAQ,eAAA;AAAA,EACR;AACF,CAAA,EAAA,GAAyB;AACvB,EAAA,MAAM,EAAE,SAAS,EAAA,EAAI,wCAAA,CAAU;AAC/B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,EAAA,EAAI,6BAAA,KAAc,CAAA;AAEtD,EAAA,MAAM,aAAA,EAAe,OAAA,IAAW,KAAA,CAAA;AAChC,EAAA,MAAM,cAAA,EAAgB,aAAA,EAAe,OAAA,EAAS,YAAA;AAM9C,EAAA,MAAM,iBAAA,EAAmB,gCAAA;AAAA,IACvB,CAAC,IAAA,EAAA,GAAkB;AACjB,MAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AACA,sBAAA,YAAA,wBAAA,CAAe,IAAI,GAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,YAAY;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,UAAA,EAAY,cAAA,EAAgB,mBAAA,EAAqB,cAAA;AACvD,EAAA,MAAM,YAAA,kBAAc,6BAAA,gCAAC,EAAA,EAAkB,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,UAAA,CAAW,CAAA;AAEvE,EAAA,GAAA,CAAI,QAAA,EAAU;AACZ,IAAA,uBACE,8BAAA,oBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,6BAAA;AAAA,QAAC,mCAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,CAAC,aAAa,CAAA;AAAA,UAC9C,YAAA,EAAW,6BAAA;AAAA,UAGX,eAAA,EAAe,aAAA;AAAA,UACf,IAAA,EAAM,WAAA;AAAA,UACN;AAAA,QAAA;AAAA,MACF,CAAA;AAAA,sBACA,6BAAA;AAAA,QAAC,8BAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,UACrC,KAAA;AAAA,UAEA,QAAA,kBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,QAAA,CAAQ;AAAA,QAAA;AAAA,MAChD;AAAA,IAAA,EAAA,CACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,8BAAA,qCAAC,EAAA,EAAa,IAAA,EAAM,aAAA,EAAe,YAAA,EAAc,gBAAA,EAC/C,QAAA,EAAA;AAAA,oBAAA,6BAAA;AAAA,MAAC,oCAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,4BAAA,mBAA+B,SAAA,UAAa,IAAE,CAAA,CAAA;AAClD,QAAA;AAEP,QAAA;AAAC,UAAA;AAAA,UAAA;AACS,YAAA;AACG,YAAA;AACL,YAAA;AAAA,UAAA;AACR,QAAA;AAAA,MAAA;AACF,IAAA;AAGA,oBAAA;AAAC,MAAA;AAAA,MAAA;AACM,QAAA;AACM,QAAA;AACD,QAAA;AACJ,QAAA;AACD,QAAA;AAEJ,QAAA;AAAA,MAAA;AACH,IAAA;AACF,EAAA;AAEJ;AAEe;ADzBmD;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-RCNIBRZY.js","sourcesContent":[null,"import { CalendarBlankIcon } from '@phosphor-icons/react/dist/csr/CalendarBlank';\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '../DropdownMenu/DropdownMenu';\nimport IconButton from '../IconButton/IconButton';\nimport Modal from '../Modal/Modal';\nimport { useMobile } from '../../hooks/useMobile';\n\nexport interface CalendarCardProps {\n /** Content rendered inside the calendar (calendar grid + activities list). */\n content: ReactNode;\n /**\n * Whether the calendar surface is currently open.\n * When provided, the component is **controlled**: the consumer is the source of truth.\n * When omitted, the component manages internal state.\n */\n isOpen?: boolean;\n /**\n * Fired whenever the open state changes (user click, outside click,\n * programmatic close, ESC, etc.).\n */\n onOpenChange?: (open: boolean) => void;\n /** Title displayed in the mobile Modal. Default: \"Calendário\". */\n title?: string;\n /** Optional className applied to the trigger button. */\n className?: string;\n}\n\n/**\n * Calendar widget for the app header. Renders a calendar icon trigger that\n * opens a `DropdownMenu` on tablet/desktop and a `Modal` on mobile (<500px).\n *\n * Pairs naturally with `AppHeader`'s `calendarContent` prop. Use the\n * controlled `isOpen` + `onOpenChange` pair when the consumer needs to close\n * the surface programmatically (e.g. on route change).\n */\nexport const CalendarCard = ({\n content,\n isOpen,\n onOpenChange,\n title = 'Calendário',\n className,\n}: CalendarCardProps) => {\n const { isMobile } = useMobile();\n const [internalOpen, setInternalOpen] = useState(false);\n\n const isControlled = isOpen !== undefined;\n const effectiveOpen = isControlled ? isOpen : internalOpen;\n\n // `useCallback` keeps the reference stable across renders, so the\n // `DropdownMenu`'s `useEffect [open, onOpenChange]` doesn't re-fire on\n // every parent re-render (which is what triggers the infinite update loop\n // observed before).\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!isControlled) {\n setInternalOpen(open);\n }\n onOpenChange?.(open);\n },\n [isControlled, onOpenChange]\n );\n\n const iconColor = effectiveOpen ? 'text-primary-950' : 'text-primary';\n const triggerIcon = <CalendarBlankIcon size={24} className={iconColor} />;\n\n if (isMobile) {\n return (\n <>\n <IconButton\n active={effectiveOpen}\n onClick={() => handleOpenChange(!effectiveOpen)}\n aria-label=\"Calendário de atividades\"\n // No mobile o calendário abre um Modal, não um DropdownMenu, então\n // não há trigger para injetar o estado: ele é declarado aqui.\n aria-expanded={effectiveOpen}\n icon={triggerIcon}\n className={className}\n />\n <Modal\n isOpen={effectiveOpen}\n onClose={() => handleOpenChange(false)}\n title={title}\n >\n <div className=\"flex justify-center\">{content}</div>\n </Modal>\n </>\n );\n }\n\n return (\n <DropdownMenu open={effectiveOpen} onOpenChange={handleOpenChange}>\n <DropdownMenuTrigger\n className={`text-primary cursor-pointer ${className ?? ''}`}\n asChild\n >\n <IconButton\n active={effectiveOpen}\n aria-label=\"Calendário de atividades\"\n icon={triggerIcon}\n />\n </DropdownMenuTrigger>\n {/* A calendar is not a list of actions: as a `menu` without menu items\n it was announced as an empty menu */}\n <DropdownMenuContent\n role=\"dialog\"\n aria-label=\"Calendário de atividades\"\n className=\"w-[320px] max-w-[calc(100vw-16px)] max-h-[80vh] overflow-y-auto\"\n align=\"end\"\n side=\"bottom\"\n >\n {content}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default CalendarCard;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-2VTJ2PKF.js","../src/components/CalendarCard/CalendarCard.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACfA,6EAAkC;AAElC,8BAAsC;AAiEhB,+CAAA;AA5Bf,IAAM,aAAA,EAAe,CAAC;AAAA,EAC3B,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA,EAAQ,eAAA;AAAA,EACR;AACF,CAAA,EAAA,GAAyB;AACvB,EAAA,MAAM,EAAE,SAAS,EAAA,EAAI,wCAAA,CAAU;AAC/B,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,EAAA,EAAI,6BAAA,KAAc,CAAA;AAEtD,EAAA,MAAM,aAAA,EAAe,OAAA,IAAW,KAAA,CAAA;AAChC,EAAA,MAAM,cAAA,EAAgB,aAAA,EAAe,OAAA,EAAS,YAAA;AAM9C,EAAA,MAAM,iBAAA,EAAmB,gCAAA;AAAA,IACvB,CAAC,IAAA,EAAA,GAAkB;AACjB,MAAA,GAAA,CAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,MACtB;AACA,sBAAA,YAAA,wBAAA,CAAe,IAAI,GAAA;AAAA,IACrB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,YAAY;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,UAAA,EAAY,cAAA,EAAgB,mBAAA,EAAqB,cAAA;AACvD,EAAA,MAAM,YAAA,kBAAc,6BAAA,gCAAC,EAAA,EAAkB,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,UAAA,CAAW,CAAA;AAEvE,EAAA,GAAA,CAAI,QAAA,EAAU;AACZ,IAAA,uBACE,8BAAA,oBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,6BAAA;AAAA,QAAC,mCAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,CAAC,aAAa,CAAA;AAAA,UAC9C,YAAA,EAAW,6BAAA;AAAA,UAGX,eAAA,EAAe,aAAA;AAAA,UACf,IAAA,EAAM,WAAA;AAAA,UACN;AAAA,QAAA;AAAA,MACF,CAAA;AAAA,sBACA,6BAAA;AAAA,QAAC,8BAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,aAAA;AAAA,UACR,OAAA,EAAS,CAAA,EAAA,GAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,UACrC,KAAA;AAAA,UAEA,QAAA,kBAAA,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,QAAA,CAAQ;AAAA,QAAA;AAAA,MAChD;AAAA,IAAA,EAAA,CACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,8BAAA,qCAAC,EAAA,EAAa,IAAA,EAAM,aAAA,EAAe,YAAA,EAAc,gBAAA,EAC/C,QAAA,EAAA;AAAA,oBAAA,6BAAA;AAAA,MAAC,oCAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,4BAAA,mBAA+B,SAAA,UAAa,IAAE,CAAA,CAAA;AAClD,QAAA;AAEP,QAAA;AAAC,UAAA;AAAA,UAAA;AACS,YAAA;AACG,YAAA;AACL,YAAA;AAAA,UAAA;AACR,QAAA;AAAA,MAAA;AACF,IAAA;AAGA,oBAAA;AAAC,MAAA;AAAA,MAAA;AACM,QAAA;AACM,QAAA;AACD,QAAA;AACJ,QAAA;AACD,QAAA;AAEJ,QAAA;AAAA,MAAA;AACH,IAAA;AACF,EAAA;AAEJ;AAEe;ADzBmD;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-2VTJ2PKF.js","sourcesContent":[null,"import { CalendarBlankIcon } from '@phosphor-icons/react/dist/csr/CalendarBlank';\nimport type { ReactNode } from 'react';\nimport { useCallback, useState } from 'react';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '../DropdownMenu/DropdownMenu';\nimport IconButton from '../IconButton/IconButton';\nimport Modal from '../Modal/Modal';\nimport { useMobile } from '../../hooks/useMobile';\n\nexport interface CalendarCardProps {\n /** Content rendered inside the calendar (calendar grid + activities list). */\n content: ReactNode;\n /**\n * Whether the calendar surface is currently open.\n * When provided, the component is **controlled**: the consumer is the source of truth.\n * When omitted, the component manages internal state.\n */\n isOpen?: boolean;\n /**\n * Fired whenever the open state changes (user click, outside click,\n * programmatic close, ESC, etc.).\n */\n onOpenChange?: (open: boolean) => void;\n /** Title displayed in the mobile Modal. Default: \"Calendário\". */\n title?: string;\n /** Optional className applied to the trigger button. */\n className?: string;\n}\n\n/**\n * Calendar widget for the app header. Renders a calendar icon trigger that\n * opens a `DropdownMenu` on tablet/desktop and a `Modal` on mobile (<500px).\n *\n * Pairs naturally with `AppHeader`'s `calendarContent` prop. Use the\n * controlled `isOpen` + `onOpenChange` pair when the consumer needs to close\n * the surface programmatically (e.g. on route change).\n */\nexport const CalendarCard = ({\n content,\n isOpen,\n onOpenChange,\n title = 'Calendário',\n className,\n}: CalendarCardProps) => {\n const { isMobile } = useMobile();\n const [internalOpen, setInternalOpen] = useState(false);\n\n const isControlled = isOpen !== undefined;\n const effectiveOpen = isControlled ? isOpen : internalOpen;\n\n // `useCallback` keeps the reference stable across renders, so the\n // `DropdownMenu`'s `useEffect [open, onOpenChange]` doesn't re-fire on\n // every parent re-render (which is what triggers the infinite update loop\n // observed before).\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (!isControlled) {\n setInternalOpen(open);\n }\n onOpenChange?.(open);\n },\n [isControlled, onOpenChange]\n );\n\n const iconColor = effectiveOpen ? 'text-primary-950' : 'text-primary';\n const triggerIcon = <CalendarBlankIcon size={24} className={iconColor} />;\n\n if (isMobile) {\n return (\n <>\n <IconButton\n active={effectiveOpen}\n onClick={() => handleOpenChange(!effectiveOpen)}\n aria-label=\"Calendário de atividades\"\n // No mobile o calendário abre um Modal, não um DropdownMenu, então\n // não há trigger para injetar o estado: ele é declarado aqui.\n aria-expanded={effectiveOpen}\n icon={triggerIcon}\n className={className}\n />\n <Modal\n isOpen={effectiveOpen}\n onClose={() => handleOpenChange(false)}\n title={title}\n >\n <div className=\"flex justify-center\">{content}</div>\n </Modal>\n </>\n );\n }\n\n return (\n <DropdownMenu open={effectiveOpen} onOpenChange={handleOpenChange}>\n <DropdownMenuTrigger\n className={`text-primary cursor-pointer ${className ?? ''}`}\n asChild\n >\n <IconButton\n active={effectiveOpen}\n aria-label=\"Calendário de atividades\"\n icon={triggerIcon}\n />\n </DropdownMenuTrigger>\n {/* A calendar is not a list of actions: as a `menu` without menu items\n it was announced as an empty menu */}\n <DropdownMenuContent\n role=\"dialog\"\n aria-label=\"Calendário de atividades\"\n className=\"w-[320px] max-w-[calc(100vw-16px)] max-h-[80vh] overflow-y-auto\"\n align=\"end\"\n side=\"bottom\"\n >\n {content}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport default CalendarCard;\n"]}
@@ -3,7 +3,7 @@
3
3
 
4
4
 
5
5
 
6
- var _chunk2TLSEAL2js = require('./chunk-2TLSEAL2.js');
6
+ var _chunkO4TRDWXJjs = require('./chunk-O4TRDWXJ.js');
7
7
 
8
8
 
9
9
  var _chunkTN3AYOMVjs = require('./chunk-TN3AYOMV.js');
@@ -78,7 +78,7 @@ var Search = _react.forwardRef.call(void 0,
78
78
  const [dropdownOpen, setDropdownOpen] = _react.useState.call(void 0, false);
79
79
  const [forceClose, setForceClose] = _react.useState.call(void 0, false);
80
80
  const justSelectedRef = _react.useRef.call(void 0, false);
81
- const dropdownStore = _react.useRef.call(void 0, _chunk2TLSEAL2js.createDropdownStore.call(void 0, )).current;
81
+ const dropdownStore = _react.useRef.call(void 0, _chunkO4TRDWXJjs.createDropdownStore.call(void 0, )).current;
82
82
  const dropdownRef = _react.useRef.call(void 0, null);
83
83
  const inputElRef = _react.useRef.call(void 0, null);
84
84
  const debounceTimer = _react.useRef.call(void 0, null);
@@ -273,15 +273,15 @@ var Search = _react.forwardRef.call(void 0,
273
273
  }
274
274
  ) })
275
275
  ] }),
276
- showDropdown && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2TLSEAL2js.DropdownMenu_default, { open: showDropdown, onOpenChange: setDropdownOpen, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
277
- _chunk2TLSEAL2js.DropdownMenuContent,
276
+ showDropdown && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkO4TRDWXJjs.DropdownMenu_default, { open: showDropdown, onOpenChange: setDropdownOpen, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
277
+ _chunkO4TRDWXJjs.DropdownMenuContent,
278
278
  {
279
279
  id: dropdownId,
280
280
  className: "w-full mt-1",
281
281
  style: { maxHeight: dropdownMaxHeight },
282
282
  align: "start",
283
283
  children: hasSuggestions ? filteredOptions.map((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
284
- _chunk2TLSEAL2js.DropdownMenuItem,
284
+ _chunkO4TRDWXJjs.DropdownMenuItem,
285
285
  {
286
286
  onClick: () => handleSelectOption(option),
287
287
  className: "text-text-700 text-base leading-6 cursor-pointer",
@@ -318,4 +318,4 @@ var Search_default = Search;
318
318
 
319
319
 
320
320
  exports.getResultsMessage = getResultsMessage; exports.Search_default = Search_default;
321
- //# sourceMappingURL=chunk-B35D5S4G.js.map
321
+ //# sourceMappingURL=chunk-2ZMGNCMI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-B35D5S4G.js","../src/components/Search/Search.tsx"],"names":["disabled","readOnly"],"mappings":"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","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-B35D5S4G.js","sourcesContent":[null,"import { XIcon } from '@phosphor-icons/react/dist/csr/X';\nimport { MagnifyingGlassIcon } from '@phosphor-icons/react/dist/csr/MagnifyingGlass';\nimport {\n InputHTMLAttributes,\n forwardRef,\n useState,\n useId,\n useMemo,\n useEffect,\n useRef,\n ChangeEvent,\n MouseEvent,\n KeyboardEvent,\n} from 'react';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuItem,\n createDropdownStore,\n} from '../DropdownMenu/DropdownMenu';\nimport { cn } from '../../utils/utils';\n\n/**\n * Search component props interface\n */\ntype SearchProps = {\n /** List of options to show in dropdown */\n options: string[];\n /** Callback when an option is selected from dropdown */\n onSelect?: (value: string) => void;\n /** Callback when search input changes */\n onSearch?: (query: string) => void;\n /** Control dropdown visibility externally */\n showDropdown?: boolean;\n /** Callback when dropdown open state changes */\n onDropdownChange?: (open: boolean) => void;\n /** Maximum height of dropdown in pixels */\n dropdownMaxHeight?: number;\n /** Text to show when no results are found */\n noResultsText?: string;\n /** Debounce delay in ms for onSearch. Default 0 (no debounce). */\n debounceMs?: number;\n /**\n * Quantidade de resultados da busca **atual**. Quando informada, confirmar a\n * busca com Enter anuncia o total num `role=\"status\"` — sem isso o leitor de\n * tela não diz se achou algo.\n *\n * Precisa acompanhar o que está digitado. Todos os consumidores filtram a\n * cada tecla (e não só no Enter), então o valor já chega atualizado; um\n * consumidor que só filtrasse no submit anunciaria a contagem anterior.\n *\n * Omitir mantém o comportamento antigo: o componente só anuncia por conta\n * própria quando ele mesmo filtra, isto é, quando recebe `options`.\n */\n resultsCount?: number;\n /** Additional CSS classes to apply to the input */\n className?: string;\n /** Additional CSS classes to apply to the container */\n containerClassName?: string;\n /**\n * Entrega a decisão de largura para quem posiciona o campo: o container passa\n * a ser só `w-full`, sem o teto de 488px.\n *\n * Existe porque a largura padrão é fixa (`md:w-[488px]`) e largura fixa não se\n * sobrescreve de fora por CSS — um pai não tem como pedir \"ocupe a linha\n * inteira\". Quem usa: linhas de header que já controlam a própria largura por\n * breakpoint, como o `TableHeaderRow`.\n */\n fullWidth?: boolean;\n /** Callback when clear button is clicked */\n onClear?: () => void;\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'onSelect'>;\n\n/**\n * Search component for Analytica Ensino platforms\n *\n * A specialized search input component with dropdown suggestions.\n * Features filtering, keyboard navigation, and customizable options.\n *\n * @param options - Array of search options to display in dropdown\n * @param onSelect - Callback when an option is selected\n * @param onSearch - Callback when search query changes\n * @param placeholder - Placeholder text for the input\n * @param noResultsText - Text to show when no results are found\n * @param resultsCount - Total da busca atual; confirmar com Enter anuncia esse\n * total num `role=\"status\"` (\"3 resultados encontrados\")\n * @param dropdownMaxHeight - Maximum height of dropdown in pixels\n * @param className - Additional CSS classes for the input\n * @param containerClassName - Additional CSS classes for the container\n * @param fullWidth - Container só `w-full`, sem o teto de 488px; a largura passa\n * a ser responsabilidade de quem posiciona o campo\n * @param props - All other standard input HTML attributes\n * @returns A styled search input with dropdown functionality\n *\n * @example\n * ```tsx\n * // Basic search\n * <Search\n * options={['Filosofia', 'Física', 'Matemática']}\n * placeholder=\"Buscar matéria...\"\n * onSelect={(value) => console.log('Selected:', value)}\n * />\n *\n * // With custom filtering\n * <Search\n * options={materias}\n * onSearch={(query) => setFilteredMaterias(filterMaterias(query))}\n * noResultsText=\"Nenhum resultado encontrado\"\n * />\n * ```\n */\n\n/**\n * Filter options based on search query\n */\nconst filterOptions = (options: string[], query: string): string[] => {\n if (!query || query.length < 1) return [];\n\n return options.filter((option) =>\n option.toLowerCase().includes(query.toLowerCase())\n );\n};\n\n/**\n * Frase anunciada ao confirmar a busca. A cópia acompanha o resto da lib:\n * `NoSearchResult` e o `noResultsText` padrão daqui usam o mesmo\n * \"Nenhum resultado encontrado\".\n */\nexport const getResultsMessage = (count: number): string => {\n if (count === 0) return 'Nenhum resultado encontrado';\n if (count === 1) return '1 resultado encontrado';\n return `${count} resultados encontrados`;\n};\n\n/**\n * Updates input value and creates appropriate change event\n */\nconst updateInputValue = (\n value: string,\n ref:\n | { current: HTMLInputElement | null }\n | ((instance: HTMLInputElement | null) => void)\n | null,\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void\n) => {\n if (!onChange) return;\n\n if (ref && 'current' in ref && ref.current) {\n ref.current.value = value;\n const event = new Event('input', { bubbles: true });\n Object.defineProperty(event, 'target', {\n writable: false,\n value: ref.current,\n });\n onChange(event as unknown as ChangeEvent<HTMLInputElement>);\n } else {\n // Fallback for cases where ref is not available\n const event = {\n target: { value },\n currentTarget: { value },\n } as ChangeEvent<HTMLInputElement>;\n onChange(event);\n }\n};\n\nconst Search = forwardRef<HTMLInputElement, SearchProps>(\n (\n {\n options = [],\n onSelect,\n onSearch,\n showDropdown: controlledShowDropdown,\n onDropdownChange,\n dropdownMaxHeight = 240,\n noResultsText = 'Nenhum resultado encontrado',\n className = '',\n containerClassName = '',\n fullWidth = false,\n disabled,\n readOnly,\n id,\n onClear,\n value,\n onChange,\n placeholder = 'Buscar...',\n onKeyDown: userOnKeyDown,\n debounceMs = 0,\n resultsCount,\n ...props\n },\n ref\n ) => {\n // Frase falada ao confirmar a busca.\n const [announcement, setAnnouncement] = useState('');\n const announceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Dropdown state and logic\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [forceClose, setForceClose] = useState(false);\n const justSelectedRef = useRef(false);\n const dropdownStore = useRef(createDropdownStore()).current;\n const dropdownRef = useRef<HTMLDivElement>(null);\n const inputElRef = useRef<HTMLInputElement>(null);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n if (announceTimer.current) clearTimeout(announceTimer.current);\n };\n }, []);\n\n /**\n * Fala a frase na região live.\n *\n * Limpa e repõe o texto num tick separado, em vez de escrever direto. São\n * dois motivos, e os dois aparecem só num leitor de tela de verdade:\n *\n * - O VoiceOver engole a atualização quando ela acontece no mesmo tick do\n * Enter, com o foco dentro do input — a fala da tecla ganha e a região\n * nunca é anunciada.\n * - Região live só dispara quando o conteúdo MUDA. Sem o passo de limpeza,\n * confirmar duas vezes a mesma busca escreveria o mesmo texto e o leitor\n * ficaria mudo na segunda.\n */\n const announce = (message: string) => {\n if (announceTimer.current) clearTimeout(announceTimer.current);\n setAnnouncement('');\n announceTimer.current = setTimeout(() => {\n setAnnouncement(message);\n }, 150);\n };\n\n // Filter options based on input value\n const filteredOptions = useMemo(() => {\n if (!options.length) {\n return [];\n }\n const filtered = filterOptions(options, (value as string) || '');\n return filtered;\n }, [options, value]);\n\n // Control dropdown visibility\n const showDropdown =\n !forceClose &&\n (controlledShowDropdown ??\n (dropdownOpen && value && String(value).length > 0));\n\n /** Se o popup tem sugestões de verdade, ou só a mensagem de vazio. */\n const hasSuggestions = filteredOptions.length > 0;\n\n // Helper to keep all consumers in sync\n const setOpenAndNotify = (open: boolean) => {\n setDropdownOpen(open);\n dropdownStore.setState({ open });\n onDropdownChange?.(open);\n };\n\n // Handle dropdown visibility changes\n useEffect(() => {\n // Don't reopen dropdown if we just selected an option\n if (justSelectedRef.current) {\n justSelectedRef.current = false;\n return;\n }\n // Respect forceClose even if value is non-empty\n if (forceClose) {\n setOpenAndNotify(false);\n return;\n }\n\n const shouldShow = Boolean(value && String(value).length > 0);\n setOpenAndNotify(shouldShow);\n }, [value, forceClose, onDropdownChange, dropdownStore]);\n\n // Handle option selection\n const handleSelectOption = (option: string) => {\n justSelectedRef.current = true; // Prevent immediate dropdown reopen\n setForceClose(true); // Force dropdown to close immediately\n onSelect?.(option);\n setOpenAndNotify(false);\n\n // Update input value if onChange is provided\n updateInputValue(option, ref, onChange);\n };\n\n // Handle click outside dropdown\n useEffect(() => {\n const handleClickOutside = (event: globalThis.MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setOpenAndNotify(false);\n }\n };\n\n if (showDropdown) {\n document.addEventListener('click', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('click', handleClickOutside);\n };\n }, [showDropdown, dropdownStore, onDropdownChange]);\n\n // Generate unique ID if not provided\n const generatedId = useId();\n const inputId = id ?? `search-${generatedId}`;\n const dropdownId = `${inputId}-dropdown`;\n\n // Handle clear button\n const handleClear = () => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n debounceTimer.current = null;\n }\n if (onClear) {\n onClear();\n } else {\n updateInputValue('', ref, onChange);\n }\n // Limpar esconde o próprio botão (`showClearButton` passa a ser false) e\n // ele desmonta. No teclado isso largaria o foco no <body>; no mouse é\n // no-op, porque o `preventDefault` do mousedown já segurou o foco aqui.\n inputElRef.current?.focus();\n };\n\n // O mousedown existe só para o input não perder o foco no clique. A ação\n // fica no click — que é o que Enter e Espaço disparam num botão focado.\n // Prender a ação ao mousedown deixava os dois botões mortos no teclado.\n const preventFocusLoss = (e: MouseEvent) => {\n e.preventDefault();\n };\n\n // Handle clear button click - mantém foco no input\n const handleClearClick = (e: MouseEvent) => {\n e.stopPropagation(); // Para propagação do evento\n handleClear();\n };\n\n // Handle search icon click - focus on input\n const handleSearchIconClick = (e: MouseEvent) => {\n e.stopPropagation();\n inputElRef.current?.focus();\n };\n\n // Handle input change\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setForceClose(false); // Allow dropdown to open when user types\n onChange?.(e);\n if (debounceMs > 0) {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n const value = e.target.value;\n debounceTimer.current = setTimeout(() => {\n onSearch?.(value);\n }, debounceMs);\n } else {\n onSearch?.(e.target.value);\n }\n };\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n // Let consumer run first; if they prevent default, skip our logic\n userOnKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === 'Enter') {\n e.preventDefault();\n\n // If dropdown is open and there are filtered options, select the first one\n if (showDropdown && filteredOptions.length > 0) {\n handleSelectOption(filteredOptions[0]);\n } else if (value) {\n // If no dropdown or no options, execute search\n onSearch?.(String(value));\n setForceClose(true);\n setOpenAndNotify(false);\n\n // Sem `resultsCount` e sem `options`, o componente não sabe quantos\n // resultados existem — anunciar \"Nenhum resultado\" aí seria mentira.\n const count =\n resultsCount ??\n (options.length > 0 ? filteredOptions.length : undefined);\n if (count !== undefined) {\n announce(getResultsMessage(count));\n }\n }\n }\n };\n\n // Helper function for input state classes\n const getInputStateClasses = (disabled?: boolean, readOnly?: boolean) => {\n if (disabled) return 'cursor-not-allowed opacity-40';\n if (readOnly) return 'cursor-default focus:outline-none !text-text-900';\n return 'hover:border-border-400';\n };\n\n // Determine which icon to show\n const hasValue = String(value ?? '').length > 0;\n const showClearButton = hasValue && !disabled && !readOnly;\n const showSearchIcon = !hasValue && !disabled && !readOnly;\n\n // `cn` em vez de concatenação no container: é o que permite a\n // `containerClassName` vencer um conflito com a largura padrão — numa string\n // crua quem ganha é a ordem do CSS gerado, não a ordem escrita.\n return (\n <div\n ref={dropdownRef}\n className={cn(\n fullWidth ? 'w-full' : 'w-full max-w-lg md:w-[488px]',\n containerClassName\n )}\n >\n {/* `aria-atomic` faz o leitor reler a frase inteira, e não só o\n pedaço que mudou. */}\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n >\n {announcement}\n </span>\n\n {/* Search Input Container */}\n <div className=\"relative flex items-center\">\n {/* Search Input Field */}\n <input\n ref={(node) => {\n // Forward to parent\n if (ref) {\n if (typeof ref === 'function') ref(node);\n else\n (ref as { current: HTMLInputElement | null }).current = node;\n }\n // Keep our own handle\n inputElRef.current = node;\n }}\n id={inputId}\n type=\"text\"\n className={`w-full py-0 px-4 pr-10 font-normal text-text-900 focus:outline-primary-950 border rounded-full bg-background focus:bg-primary-50 border-border-300 focus:border-2 focus:border-primary-950 h-10 placeholder:text-text-600 ${getInputStateClasses(disabled, readOnly)} ${className}`}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n // Este campo é uma caixa de busca, e o leitor de tela precisa\n // anunciá-lo assim — é o que `searchbox` faz.\n //\n // Nenhum atributo de combobox entra aqui. Antes havia\n // `role=\"combobox\"` + `aria-haspopup=\"listbox\"`, que rendia\n // \"combinação, pop-up caixa de lista\" e ainda mentia duas vezes: o\n // popup é um `menu` (não um listbox), e o campo não tem navegação\n // por setas nem `aria-activedescendant` — sem isso não existe\n // combobox conforme, só a promessa dele.\n role=\"searchbox\"\n {...props}\n />\n\n {/* Right Icon - Clear Button */}\n {showClearButton && (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n <button\n type=\"button\"\n className=\"p-0 border-0 bg-transparent cursor-pointer\"\n onMouseDown={preventFocusLoss}\n onClick={handleClearClick}\n aria-label=\"Limpar busca\"\n >\n <span className=\"w-6 h-6 text-text-800 flex items-center justify-center hover:text-text-600 transition-colors\">\n <XIcon />\n </span>\n </button>\n </div>\n )}\n\n {/* Right Icon - Search Icon */}\n {showSearchIcon && (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n <button\n type=\"button\"\n className=\"p-0 border-0 bg-transparent cursor-pointer\"\n onMouseDown={preventFocusLoss}\n onClick={handleSearchIconClick}\n aria-label=\"Buscar\"\n >\n <span className=\"w-6 h-6 text-text-800 flex items-center justify-center hover:text-text-600 transition-colors\">\n <MagnifyingGlassIcon />\n </span>\n </button>\n </div>\n )}\n </div>\n\n {/* Search Dropdown */}\n {showDropdown && (\n <DropdownMenu open={showDropdown} onOpenChange={setDropdownOpen}>\n <DropdownMenuContent\n id={dropdownId}\n className=\"w-full mt-1\"\n style={{ maxHeight: dropdownMaxHeight }}\n align=\"start\"\n >\n {hasSuggestions ? (\n filteredOptions.map((option) => (\n <DropdownMenuItem\n key={option}\n onClick={() => handleSelectOption(option)}\n className=\"text-text-700 text-base leading-6 cursor-pointer\"\n >\n {option}\n </DropdownMenuItem>\n ))\n ) : (\n // O contêiner é um `role=\"menu\"`, e um menu sem nenhum\n // `menuitem` é anunciado como menu vazio — a frase dentro dele\n // se perde. Marcar o próprio texto como item desabilitado\n // deixa o menu bem-formado e a mensagem audível, sem precisar\n // trocar o papel do contêiner.\n <div\n role=\"menuitem\"\n aria-disabled=\"true\"\n className=\"px-3 py-3 text-text-700 text-base\"\n >\n {noResultsText}\n </div>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n }\n);\n\nSearch.displayName = 'Search';\n\nexport default Search;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-2ZMGNCMI.js","../src/components/Search/Search.tsx"],"names":["disabled","readOnly"],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACVA,qDAAsB;AACtB,iFAAoC;AACpC;AAEE;AACA;AACA;AACA;AACA;AACA;AAAA,8BAIK;AAmZC,+CAAA;AA9SR,IAAM,cAAA,EAAgB,CAAC,OAAA,EAAmB,KAAA,EAAA,GAA4B;AACpE,EAAA,GAAA,CAAI,CAAC,MAAA,GAAS,KAAA,CAAM,OAAA,EAAS,CAAA,EAAG,OAAO,CAAC,CAAA;AAExC,EAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,IAAO,CAAC,MAAA,EAAA,GACrB,MAAA,CAAO,WAAA,CAAY,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,WAAA,CAAY,CAAC;AAAA,EACnD,CAAA;AACF,CAAA;AAOO,IAAM,kBAAA,EAAoB,CAAC,KAAA,EAAA,GAA0B;AAC1D,EAAA,GAAA,CAAI,MAAA,IAAU,CAAA,EAAG,OAAO,6BAAA;AACxB,EAAA,GAAA,CAAI,MAAA,IAAU,CAAA,EAAG,OAAO,wBAAA;AACxB,EAAA,OAAO,CAAA,EAAA;AACT;AAKM;AAQC,EAAA;AAED,EAAA;AACE,IAAA;AACE,IAAA;AACN,IAAA;AACE,MAAA;AACA,MAAA;AACD,IAAA;AACD,IAAA;AACK,EAAA;AAEC,IAAA;AACJ,MAAA;AACA,MAAA;AACF,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAEM;AAEF,EAAA;AACE,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACG,IAAA;AAEL,EAAA;AAGM,IAAA;AACA,IAAA;AAGA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AAEN,IAAA;AACE,MAAA;AACE,QAAA;AACA,QAAA;AACF,MAAA;AACG,IAAA;AAeC,IAAA;AACA,MAAA;AACJ,MAAA;AACA,MAAA;AACE,QAAA;AACC,MAAA;AACL,IAAA;AAGM,IAAA;AACA,MAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACE,IAAA;AAGE,IAAA;AAMA,IAAA;AAGA,IAAA;AACJ,MAAA;AACA,MAAA;AACA,sBAAA;AACF,IAAA;AAGA,IAAA;AAEM,MAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AAEI,MAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AAEA,MAAA;AACA,MAAA;AACE,IAAA;AAGE,IAAA;AACJ,MAAA;AACA,MAAA;AACA,sBAAA;AACA,MAAA;AAGA,MAAA;AACF,IAAA;AAGA,IAAA;AACE,MAAA;AACE,QAAA;AAIE,UAAA;AACF,QAAA;AACF,MAAA;AAEI,MAAA;AACF,QAAA;AACF,MAAA;AAEA,MAAA;AACE,QAAA;AACF,MAAA;AACE,IAAA;AAGE,IAAA;AACA,IAAA;AACA,IAAA;AAGA,IAAA;AACA,MAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACI,MAAA;AACF,QAAA;AACF,MAAA;AACE,QAAA;AACF,MAAA;AAIA,sBAAA;AACF,IAAA;AAKM,IAAA;AACF,MAAA;AACJ,IAAA;AAGM,IAAA;AACF,MAAA;AACF,MAAA;AACF,IAAA;AAGM,IAAA;AACF,MAAA;AACF,sBAAA;AACF,IAAA;AAGM,IAAA;AACJ,MAAA;AACA,sBAAA;AACI,MAAA;AACF,QAAA;AACA,QAAA;AACA,QAAA;AACE,0BAAA;AACF,QAAA;AACF,MAAA;AACE,wBAAA;AACF,MAAA;AACF,IAAA;AAGM,IAAA;AAEJ,sBAAA;AACI,MAAA;AAEA,MAAA;AACA,QAAA;AAGF,QAAA;AACE,UAAA;AACF,QAAA;AAEE,0BAAA;AACA,UAAA;AACA,UAAA;AAIA,UAAA;AAGA,UAAA;AACE,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AAGM,IAAA;AACAA,MAAAA;AACAC,MAAAA;AACJ,MAAA;AACF,IAAA;AAGM,IAAA;AACA,IAAA;AACA,IAAA;AAKN,IAAA;AACG,MAAA;AAAA,MAAA;AACC,QAAA;AACA,QAAA;AACE,UAAA;AACA,UAAA;AACF,QAAA;AAIA,QAAA;AAAA,0BAAA;AAAA,YAAA;AAAC,YAAA;AAAA,cAAA;AACM,cAAA;AACK,cAAA;AACE,cAAA;AACF,cAAA;AAET,YAAA;AACH,UAAA;AAGA,0BAAA;AAEE,4BAAA;AAAA,cAAA;AAAC,cAAA;AAAA,gBAAA;AAGG,kBAAA;AACE,oBAAA;AAAuC,oBAAA;AAErC,sBAAA;AAAwD,kBAAA;AAG5D,kBAAA;AAAqB,gBAAA;AACvB,gBAAA;AACI,gBAAA;AACC,gBAAA;AACwR,gBAAA;AAC7R,gBAAA;AACU,gBAAA;AACC,gBAAA;AACX,gBAAA;AACA,gBAAA;AACA,gBAAA;AAUK,gBAAA;AACD,cAAA;AAAA,YAAA;AACN,YAAA;AAKI,cAAA;AAAC,cAAA;AAAA,gBAAA;AACM,gBAAA;AACK,gBAAA;AACG,gBAAA;AACJ,gBAAA;AACE,gBAAA;AAIX,cAAA;AAAA,YAAA;AAEJ,YAAA;AAME,cAAA;AAAC,cAAA;AAAA,gBAAA;AACM,gBAAA;AACK,gBAAA;AACG,gBAAA;AACJ,gBAAA;AACE,gBAAA;AAIX,cAAA;AAAA,YAAA;AAEJ,UAAA;AAKH,UAAA;AAEG,YAAA;AAAC,YAAA;AAAA,cAAA;AACK,cAAA;AACM,cAAA;AAC4B,cAAA;AAChC,cAAA;AAIF,gBAAA;AAAC,gBAAA;AAAA,kBAAA;AAEyC,kBAAA;AAC9B,kBAAA;AAET,gBAAA;AAAA,gBAAA;AAJI,cAAA;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAA;AAOD,kBAAA;AAAC,kBAAA;AAAA,oBAAA;AACM,oBAAA;AACS,oBAAA;AACJ,oBAAA;AAET,kBAAA;AAAA,gBAAA;AACH,cAAA;AAAA,YAAA;AAEJ,UAAA;AACF,QAAA;AAAA,MAAA;AAEJ,IAAA;AAEJ,EAAA;AACF;AAEO;AAEA;ADhOG;AACA;AACA;AACA;AACA","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-2ZMGNCMI.js","sourcesContent":[null,"import { XIcon } from '@phosphor-icons/react/dist/csr/X';\nimport { MagnifyingGlassIcon } from '@phosphor-icons/react/dist/csr/MagnifyingGlass';\nimport {\n InputHTMLAttributes,\n forwardRef,\n useState,\n useId,\n useMemo,\n useEffect,\n useRef,\n ChangeEvent,\n MouseEvent,\n KeyboardEvent,\n} from 'react';\nimport DropdownMenu, {\n DropdownMenuContent,\n DropdownMenuItem,\n createDropdownStore,\n} from '../DropdownMenu/DropdownMenu';\nimport { cn } from '../../utils/utils';\n\n/**\n * Search component props interface\n */\ntype SearchProps = {\n /** List of options to show in dropdown */\n options: string[];\n /** Callback when an option is selected from dropdown */\n onSelect?: (value: string) => void;\n /** Callback when search input changes */\n onSearch?: (query: string) => void;\n /** Control dropdown visibility externally */\n showDropdown?: boolean;\n /** Callback when dropdown open state changes */\n onDropdownChange?: (open: boolean) => void;\n /** Maximum height of dropdown in pixels */\n dropdownMaxHeight?: number;\n /** Text to show when no results are found */\n noResultsText?: string;\n /** Debounce delay in ms for onSearch. Default 0 (no debounce). */\n debounceMs?: number;\n /**\n * Quantidade de resultados da busca **atual**. Quando informada, confirmar a\n * busca com Enter anuncia o total num `role=\"status\"` — sem isso o leitor de\n * tela não diz se achou algo.\n *\n * Precisa acompanhar o que está digitado. Todos os consumidores filtram a\n * cada tecla (e não só no Enter), então o valor já chega atualizado; um\n * consumidor que só filtrasse no submit anunciaria a contagem anterior.\n *\n * Omitir mantém o comportamento antigo: o componente só anuncia por conta\n * própria quando ele mesmo filtra, isto é, quando recebe `options`.\n */\n resultsCount?: number;\n /** Additional CSS classes to apply to the input */\n className?: string;\n /** Additional CSS classes to apply to the container */\n containerClassName?: string;\n /**\n * Entrega a decisão de largura para quem posiciona o campo: o container passa\n * a ser só `w-full`, sem o teto de 488px.\n *\n * Existe porque a largura padrão é fixa (`md:w-[488px]`) e largura fixa não se\n * sobrescreve de fora por CSS — um pai não tem como pedir \"ocupe a linha\n * inteira\". Quem usa: linhas de header que já controlam a própria largura por\n * breakpoint, como o `TableHeaderRow`.\n */\n fullWidth?: boolean;\n /** Callback when clear button is clicked */\n onClear?: () => void;\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'onSelect'>;\n\n/**\n * Search component for Analytica Ensino platforms\n *\n * A specialized search input component with dropdown suggestions.\n * Features filtering, keyboard navigation, and customizable options.\n *\n * @param options - Array of search options to display in dropdown\n * @param onSelect - Callback when an option is selected\n * @param onSearch - Callback when search query changes\n * @param placeholder - Placeholder text for the input\n * @param noResultsText - Text to show when no results are found\n * @param resultsCount - Total da busca atual; confirmar com Enter anuncia esse\n * total num `role=\"status\"` (\"3 resultados encontrados\")\n * @param dropdownMaxHeight - Maximum height of dropdown in pixels\n * @param className - Additional CSS classes for the input\n * @param containerClassName - Additional CSS classes for the container\n * @param fullWidth - Container só `w-full`, sem o teto de 488px; a largura passa\n * a ser responsabilidade de quem posiciona o campo\n * @param props - All other standard input HTML attributes\n * @returns A styled search input with dropdown functionality\n *\n * @example\n * ```tsx\n * // Basic search\n * <Search\n * options={['Filosofia', 'Física', 'Matemática']}\n * placeholder=\"Buscar matéria...\"\n * onSelect={(value) => console.log('Selected:', value)}\n * />\n *\n * // With custom filtering\n * <Search\n * options={materias}\n * onSearch={(query) => setFilteredMaterias(filterMaterias(query))}\n * noResultsText=\"Nenhum resultado encontrado\"\n * />\n * ```\n */\n\n/**\n * Filter options based on search query\n */\nconst filterOptions = (options: string[], query: string): string[] => {\n if (!query || query.length < 1) return [];\n\n return options.filter((option) =>\n option.toLowerCase().includes(query.toLowerCase())\n );\n};\n\n/**\n * Frase anunciada ao confirmar a busca. A cópia acompanha o resto da lib:\n * `NoSearchResult` e o `noResultsText` padrão daqui usam o mesmo\n * \"Nenhum resultado encontrado\".\n */\nexport const getResultsMessage = (count: number): string => {\n if (count === 0) return 'Nenhum resultado encontrado';\n if (count === 1) return '1 resultado encontrado';\n return `${count} resultados encontrados`;\n};\n\n/**\n * Updates input value and creates appropriate change event\n */\nconst updateInputValue = (\n value: string,\n ref:\n | { current: HTMLInputElement | null }\n | ((instance: HTMLInputElement | null) => void)\n | null,\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void\n) => {\n if (!onChange) return;\n\n if (ref && 'current' in ref && ref.current) {\n ref.current.value = value;\n const event = new Event('input', { bubbles: true });\n Object.defineProperty(event, 'target', {\n writable: false,\n value: ref.current,\n });\n onChange(event as unknown as ChangeEvent<HTMLInputElement>);\n } else {\n // Fallback for cases where ref is not available\n const event = {\n target: { value },\n currentTarget: { value },\n } as ChangeEvent<HTMLInputElement>;\n onChange(event);\n }\n};\n\nconst Search = forwardRef<HTMLInputElement, SearchProps>(\n (\n {\n options = [],\n onSelect,\n onSearch,\n showDropdown: controlledShowDropdown,\n onDropdownChange,\n dropdownMaxHeight = 240,\n noResultsText = 'Nenhum resultado encontrado',\n className = '',\n containerClassName = '',\n fullWidth = false,\n disabled,\n readOnly,\n id,\n onClear,\n value,\n onChange,\n placeholder = 'Buscar...',\n onKeyDown: userOnKeyDown,\n debounceMs = 0,\n resultsCount,\n ...props\n },\n ref\n ) => {\n // Frase falada ao confirmar a busca.\n const [announcement, setAnnouncement] = useState('');\n const announceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Dropdown state and logic\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const [forceClose, setForceClose] = useState(false);\n const justSelectedRef = useRef(false);\n const dropdownStore = useRef(createDropdownStore()).current;\n const dropdownRef = useRef<HTMLDivElement>(null);\n const inputElRef = useRef<HTMLInputElement>(null);\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n if (announceTimer.current) clearTimeout(announceTimer.current);\n };\n }, []);\n\n /**\n * Fala a frase na região live.\n *\n * Limpa e repõe o texto num tick separado, em vez de escrever direto. São\n * dois motivos, e os dois aparecem só num leitor de tela de verdade:\n *\n * - O VoiceOver engole a atualização quando ela acontece no mesmo tick do\n * Enter, com o foco dentro do input — a fala da tecla ganha e a região\n * nunca é anunciada.\n * - Região live só dispara quando o conteúdo MUDA. Sem o passo de limpeza,\n * confirmar duas vezes a mesma busca escreveria o mesmo texto e o leitor\n * ficaria mudo na segunda.\n */\n const announce = (message: string) => {\n if (announceTimer.current) clearTimeout(announceTimer.current);\n setAnnouncement('');\n announceTimer.current = setTimeout(() => {\n setAnnouncement(message);\n }, 150);\n };\n\n // Filter options based on input value\n const filteredOptions = useMemo(() => {\n if (!options.length) {\n return [];\n }\n const filtered = filterOptions(options, (value as string) || '');\n return filtered;\n }, [options, value]);\n\n // Control dropdown visibility\n const showDropdown =\n !forceClose &&\n (controlledShowDropdown ??\n (dropdownOpen && value && String(value).length > 0));\n\n /** Se o popup tem sugestões de verdade, ou só a mensagem de vazio. */\n const hasSuggestions = filteredOptions.length > 0;\n\n // Helper to keep all consumers in sync\n const setOpenAndNotify = (open: boolean) => {\n setDropdownOpen(open);\n dropdownStore.setState({ open });\n onDropdownChange?.(open);\n };\n\n // Handle dropdown visibility changes\n useEffect(() => {\n // Don't reopen dropdown if we just selected an option\n if (justSelectedRef.current) {\n justSelectedRef.current = false;\n return;\n }\n // Respect forceClose even if value is non-empty\n if (forceClose) {\n setOpenAndNotify(false);\n return;\n }\n\n const shouldShow = Boolean(value && String(value).length > 0);\n setOpenAndNotify(shouldShow);\n }, [value, forceClose, onDropdownChange, dropdownStore]);\n\n // Handle option selection\n const handleSelectOption = (option: string) => {\n justSelectedRef.current = true; // Prevent immediate dropdown reopen\n setForceClose(true); // Force dropdown to close immediately\n onSelect?.(option);\n setOpenAndNotify(false);\n\n // Update input value if onChange is provided\n updateInputValue(option, ref, onChange);\n };\n\n // Handle click outside dropdown\n useEffect(() => {\n const handleClickOutside = (event: globalThis.MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setOpenAndNotify(false);\n }\n };\n\n if (showDropdown) {\n document.addEventListener('click', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('click', handleClickOutside);\n };\n }, [showDropdown, dropdownStore, onDropdownChange]);\n\n // Generate unique ID if not provided\n const generatedId = useId();\n const inputId = id ?? `search-${generatedId}`;\n const dropdownId = `${inputId}-dropdown`;\n\n // Handle clear button\n const handleClear = () => {\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n debounceTimer.current = null;\n }\n if (onClear) {\n onClear();\n } else {\n updateInputValue('', ref, onChange);\n }\n // Limpar esconde o próprio botão (`showClearButton` passa a ser false) e\n // ele desmonta. No teclado isso largaria o foco no <body>; no mouse é\n // no-op, porque o `preventDefault` do mousedown já segurou o foco aqui.\n inputElRef.current?.focus();\n };\n\n // O mousedown existe só para o input não perder o foco no clique. A ação\n // fica no click — que é o que Enter e Espaço disparam num botão focado.\n // Prender a ação ao mousedown deixava os dois botões mortos no teclado.\n const preventFocusLoss = (e: MouseEvent) => {\n e.preventDefault();\n };\n\n // Handle clear button click - mantém foco no input\n const handleClearClick = (e: MouseEvent) => {\n e.stopPropagation(); // Para propagação do evento\n handleClear();\n };\n\n // Handle search icon click - focus on input\n const handleSearchIconClick = (e: MouseEvent) => {\n e.stopPropagation();\n inputElRef.current?.focus();\n };\n\n // Handle input change\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setForceClose(false); // Allow dropdown to open when user types\n onChange?.(e);\n if (debounceMs > 0) {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n const value = e.target.value;\n debounceTimer.current = setTimeout(() => {\n onSearch?.(value);\n }, debounceMs);\n } else {\n onSearch?.(e.target.value);\n }\n };\n\n // Handle keyboard events\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n // Let consumer run first; if they prevent default, skip our logic\n userOnKeyDown?.(e);\n if (e.defaultPrevented) return;\n\n if (e.key === 'Enter') {\n e.preventDefault();\n\n // If dropdown is open and there are filtered options, select the first one\n if (showDropdown && filteredOptions.length > 0) {\n handleSelectOption(filteredOptions[0]);\n } else if (value) {\n // If no dropdown or no options, execute search\n onSearch?.(String(value));\n setForceClose(true);\n setOpenAndNotify(false);\n\n // Sem `resultsCount` e sem `options`, o componente não sabe quantos\n // resultados existem — anunciar \"Nenhum resultado\" aí seria mentira.\n const count =\n resultsCount ??\n (options.length > 0 ? filteredOptions.length : undefined);\n if (count !== undefined) {\n announce(getResultsMessage(count));\n }\n }\n }\n };\n\n // Helper function for input state classes\n const getInputStateClasses = (disabled?: boolean, readOnly?: boolean) => {\n if (disabled) return 'cursor-not-allowed opacity-40';\n if (readOnly) return 'cursor-default focus:outline-none !text-text-900';\n return 'hover:border-border-400';\n };\n\n // Determine which icon to show\n const hasValue = String(value ?? '').length > 0;\n const showClearButton = hasValue && !disabled && !readOnly;\n const showSearchIcon = !hasValue && !disabled && !readOnly;\n\n // `cn` em vez de concatenação no container: é o que permite a\n // `containerClassName` vencer um conflito com a largura padrão — numa string\n // crua quem ganha é a ordem do CSS gerado, não a ordem escrita.\n return (\n <div\n ref={dropdownRef}\n className={cn(\n fullWidth ? 'w-full' : 'w-full max-w-lg md:w-[488px]',\n containerClassName\n )}\n >\n {/* `aria-atomic` faz o leitor reler a frase inteira, e não só o\n pedaço que mudou. */}\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n >\n {announcement}\n </span>\n\n {/* Search Input Container */}\n <div className=\"relative flex items-center\">\n {/* Search Input Field */}\n <input\n ref={(node) => {\n // Forward to parent\n if (ref) {\n if (typeof ref === 'function') ref(node);\n else\n (ref as { current: HTMLInputElement | null }).current = node;\n }\n // Keep our own handle\n inputElRef.current = node;\n }}\n id={inputId}\n type=\"text\"\n className={`w-full py-0 px-4 pr-10 font-normal text-text-900 focus:outline-primary-950 border rounded-full bg-background focus:bg-primary-50 border-border-300 focus:border-2 focus:border-primary-950 h-10 placeholder:text-text-600 ${getInputStateClasses(disabled, readOnly)} ${className}`}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n // Este campo é uma caixa de busca, e o leitor de tela precisa\n // anunciá-lo assim — é o que `searchbox` faz.\n //\n // Nenhum atributo de combobox entra aqui. Antes havia\n // `role=\"combobox\"` + `aria-haspopup=\"listbox\"`, que rendia\n // \"combinação, pop-up caixa de lista\" e ainda mentia duas vezes: o\n // popup é um `menu` (não um listbox), e o campo não tem navegação\n // por setas nem `aria-activedescendant` — sem isso não existe\n // combobox conforme, só a promessa dele.\n role=\"searchbox\"\n {...props}\n />\n\n {/* Right Icon - Clear Button */}\n {showClearButton && (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n <button\n type=\"button\"\n className=\"p-0 border-0 bg-transparent cursor-pointer\"\n onMouseDown={preventFocusLoss}\n onClick={handleClearClick}\n aria-label=\"Limpar busca\"\n >\n <span className=\"w-6 h-6 text-text-800 flex items-center justify-center hover:text-text-600 transition-colors\">\n <XIcon />\n </span>\n </button>\n </div>\n )}\n\n {/* Right Icon - Search Icon */}\n {showSearchIcon && (\n <div className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\n <button\n type=\"button\"\n className=\"p-0 border-0 bg-transparent cursor-pointer\"\n onMouseDown={preventFocusLoss}\n onClick={handleSearchIconClick}\n aria-label=\"Buscar\"\n >\n <span className=\"w-6 h-6 text-text-800 flex items-center justify-center hover:text-text-600 transition-colors\">\n <MagnifyingGlassIcon />\n </span>\n </button>\n </div>\n )}\n </div>\n\n {/* Search Dropdown */}\n {showDropdown && (\n <DropdownMenu open={showDropdown} onOpenChange={setDropdownOpen}>\n <DropdownMenuContent\n id={dropdownId}\n className=\"w-full mt-1\"\n style={{ maxHeight: dropdownMaxHeight }}\n align=\"start\"\n >\n {hasSuggestions ? (\n filteredOptions.map((option) => (\n <DropdownMenuItem\n key={option}\n onClick={() => handleSelectOption(option)}\n className=\"text-text-700 text-base leading-6 cursor-pointer\"\n >\n {option}\n </DropdownMenuItem>\n ))\n ) : (\n // O contêiner é um `role=\"menu\"`, e um menu sem nenhum\n // `menuitem` é anunciado como menu vazio — a frase dentro dele\n // se perde. Marcar o próprio texto como item desabilitado\n // deixa o menu bem-formado e a mensagem audível, sem precisar\n // trocar o papel do contêiner.\n <div\n role=\"menuitem\"\n aria-disabled=\"true\"\n className=\"px-3 py-3 text-text-700 text-base\"\n >\n {noResultsText}\n </div>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n );\n }\n);\n\nSearch.displayName = 'Search';\n\nexport default Search;\n"]}
@@ -10,10 +10,10 @@ var _chunkOITBOOARjs = require('./chunk-OITBOOAR.js');
10
10
  var _chunkYNQTCV4Wjs = require('./chunk-YNQTCV4W.js');
11
11
 
12
12
 
13
- var _chunkPIZTI5SJjs = require('./chunk-PIZTI5SJ.js');
13
+ var _chunkRMCZ7C2Cjs = require('./chunk-RMCZ7C2C.js');
14
14
 
15
15
 
16
- var _chunkFASVPU6Njs = require('./chunk-FASVPU6N.js');
16
+ var _chunkH3F4OCXCjs = require('./chunk-H3F4OCXC.js');
17
17
 
18
18
 
19
19
  var _chunkBWCGUJ6Yjs = require('./chunk-BWCGUJ6Y.js');
@@ -31,11 +31,11 @@ var _chunkKRYBXYOBjs = require('./chunk-KRYBXYOB.js');
31
31
  var _chunk7W6XZZKKjs = require('./chunk-7W6XZZKK.js');
32
32
 
33
33
 
34
- var _chunkSFQVZ4KQjs = require('./chunk-SFQVZ4KQ.js');
34
+ var _chunk2ETPIOCDjs = require('./chunk-2ETPIOCD.js');
35
35
 
36
36
 
37
37
 
38
- var _chunkYQKAASWMjs = require('./chunk-YQKAASWM.js');
38
+ var _chunkGXXDSBN2js = require('./chunk-GXXDSBN2.js');
39
39
 
40
40
 
41
41
  var _chunkVAF3DOVDjs = require('./chunk-VAF3DOVD.js');
@@ -77,7 +77,7 @@ var _chunkCFD6NHL7js = require('./chunk-CFD6NHL7.js');
77
77
  var _chunkBJMKBBN3js = require('./chunk-BJMKBBN3.js');
78
78
 
79
79
 
80
- var _chunkG4NK66PMjs = require('./chunk-G4NK66PM.js');
80
+ var _chunkJTWXQ267js = require('./chunk-JTWXQ267.js');
81
81
 
82
82
 
83
83
  var _chunkRSO6RH5Kjs = require('./chunk-RSO6RH5K.js');
@@ -506,7 +506,7 @@ var QuestionAccordionItem = ({
506
506
  question,
507
507
  index
508
508
  }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
509
- _chunkSFQVZ4KQjs.CardAccordation,
509
+ _chunk2ETPIOCDjs.CardAccordation,
510
510
  {
511
511
  value: question.id,
512
512
  className: "bg-background rounded-xl border border-border-50",
@@ -537,7 +537,7 @@ var QuestionAccordionItem = ({
537
537
  }
538
538
  ),
539
539
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
540
- _chunkSFQVZ4KQjs.CardAccordation,
540
+ _chunk2ETPIOCDjs.CardAccordation,
541
541
  {
542
542
  value: `${question.id}-alternatives`,
543
543
  className: "bg-background rounded-lg border border-border-50",
@@ -559,7 +559,7 @@ var QuestionAccordionItem = ({
559
559
  }
560
560
  );
561
561
  var LessonAccordionItem = ({ lesson }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
562
- _chunkSFQVZ4KQjs.CardAccordation,
562
+ _chunk2ETPIOCDjs.CardAccordation,
563
563
  {
564
564
  value: lesson.id,
565
565
  className: "bg-background rounded-xl border border-border-50",
@@ -692,7 +692,7 @@ var StudentPerformanceModal = ({
692
692
  return null;
693
693
  }
694
694
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
695
- _chunkG4NK66PMjs.Modal_default,
695
+ _chunkJTWXQ267js.Modal_default,
696
696
  {
697
697
  isOpen,
698
698
  onClose,
@@ -1172,7 +1172,7 @@ var StudentActivityPerformanceModal = ({
1172
1172
  const hasLocalSavedCorrection = _optionalChain([localCorrection, 'optionalAccess', _18 => _18.isSaved]) && _optionalChain([localCorrection, 'optionalAccess', _19 => _19.isCorrect]) != null;
1173
1173
  const displayIsCorrect = hasLocalSavedCorrection ? localCorrection.isCorrect : question.isCorrect;
1174
1174
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1175
- _chunkSFQVZ4KQjs.CardAccordation,
1175
+ _chunk2ETPIOCDjs.CardAccordation,
1176
1176
  {
1177
1177
  value: questionKey,
1178
1178
  className: "bg-background rounded-xl border border-border-50",
@@ -1202,7 +1202,7 @@ var StudentActivityPerformanceModal = ({
1202
1202
  }
1203
1203
  ),
1204
1204
  question.alternatives.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1205
- _chunkSFQVZ4KQjs.CardAccordation,
1205
+ _chunk2ETPIOCDjs.CardAccordation,
1206
1206
  {
1207
1207
  value: `${questionKey}-alternatives`,
1208
1208
  className: "bg-background rounded-lg border border-border-50",
@@ -1235,7 +1235,7 @@ var StudentActivityPerformanceModal = ({
1235
1235
  );
1236
1236
  };
1237
1237
  const renderActivityAccordionItem = (activity) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1238
- _chunkSFQVZ4KQjs.CardAccordation,
1238
+ _chunk2ETPIOCDjs.CardAccordation,
1239
1239
  {
1240
1240
  value: activity.id,
1241
1241
  className: "bg-background rounded-xl border border-border-50",
@@ -1340,7 +1340,7 @@ var StudentActivityPerformanceModal = ({
1340
1340
  return null;
1341
1341
  };
1342
1342
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1343
- _chunkG4NK66PMjs.Modal_default,
1343
+ _chunkJTWXQ267js.Modal_default,
1344
1344
  {
1345
1345
  isOpen,
1346
1346
  onClose: handleClose,
@@ -1418,7 +1418,7 @@ var LessonContent = ({
1418
1418
  const hasBoards = boardImages.length > 0;
1419
1419
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4", children: [
1420
1420
  hasVideo ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1421
- _chunkFASVPU6Njs.VideoPlayer_default,
1421
+ _chunkH3F4OCXCjs.VideoPlayer_default,
1422
1422
  {
1423
1423
  src: lesson.urlVideo,
1424
1424
  poster: lesson.urlCover,
@@ -1438,7 +1438,7 @@ var LessonContent = ({
1438
1438
  hasPodcast && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "w-full", children: [
1439
1439
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { size: "md", weight: "bold", className: "pb-2", children: "Podcast" }),
1440
1440
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1441
- _chunkYQKAASWMjs.CardAudio,
1441
+ _chunkGXXDSBN2js.CardAudio,
1442
1442
  {
1443
1443
  src: lesson.urlPodCast,
1444
1444
  title: lesson.podCastTitle || "Podcast da aula"
@@ -1452,7 +1452,7 @@ var LessonContent = ({
1452
1452
  {
1453
1453
  className: "flex flex-row rounded-xl bg-background-50",
1454
1454
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1455
- _chunkPIZTI5SJjs.Whiteboard_default,
1455
+ _chunkRMCZ7C2Cjs.Whiteboard_default,
1456
1456
  {
1457
1457
  images: [image],
1458
1458
  showDownload: true,
@@ -1505,7 +1505,7 @@ var LessonAccordionItem2 = ({
1505
1505
  }
1506
1506
  ),
1507
1507
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1508
- _chunkSFQVZ4KQjs.CardAccordation,
1508
+ _chunk2ETPIOCDjs.CardAccordation,
1509
1509
  {
1510
1510
  trigger,
1511
1511
  expanded: isExpanded,
@@ -1553,7 +1553,7 @@ var RecommendedLessonViewModal = ({
1553
1553
  const badgeAction = _chunk6WDBJAVCjs.getStatusBadgeAction.call(void 0, status);
1554
1554
  const footer = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkXN2HPVVHjs.Button_default, { variant: "outline", onClick: onClose, children: "Fechar" }) });
1555
1555
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1556
- _chunkG4NK66PMjs.Modal_default,
1556
+ _chunkJTWXQ267js.Modal_default,
1557
1557
  {
1558
1558
  isOpen,
1559
1559
  onClose,
@@ -1562,7 +1562,7 @@ var RecommendedLessonViewModal = ({
1562
1562
  footer,
1563
1563
  contentClassName: "max-h-[70vh] overflow-y-auto",
1564
1564
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-6", children: [
1565
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYQKAASWMjs.CardBase, { layout: "vertical", padding: "medium", className: "bg-background", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2", children: [
1565
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGXXDSBN2js.CardBase, { layout: "vertical", padding: "medium", className: "bg-background", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2", children: [
1566
1566
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANT66KVKjs.Text_default, { as: "h2", size: "lg", weight: "bold", className: "text-text-950", children: recommendedClass.title }),
1567
1567
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap items-center gap-2", children: [
1568
1568
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkANT66KVKjs.Text_default, { size: "sm", className: "text-text-600", children: [
@@ -1849,4 +1849,4 @@ var RecommendedLessonDetails_default = RecommendedLessonDetails;
1849
1849
 
1850
1850
 
1851
1851
  exports.StudentPerformanceModal = StudentPerformanceModal; exports.RecommendedLessonDetails_default = RecommendedLessonDetails_default;
1852
- //# sourceMappingURL=chunk-QEPKR6ZF.js.map
1852
+ //# sourceMappingURL=chunk-3KSRDIS2.js.map