analytica-frontend-lib 1.6.0 → 1.6.2

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 (260) hide show
  1. package/dist/Accordation/index.js +5 -3
  2. package/dist/Accordation/index.js.map +1 -1
  3. package/dist/Accordation/index.mjs +4 -2
  4. package/dist/ActivitiesHistory/index.js +38 -37
  5. package/dist/ActivitiesHistory/index.js.map +1 -1
  6. package/dist/ActivitiesHistory/index.mjs +37 -36
  7. package/dist/ActivityCardQuestionBanks/index.js +38 -37
  8. package/dist/ActivityCardQuestionBanks/index.js.map +1 -1
  9. package/dist/ActivityCardQuestionBanks/index.mjs +37 -36
  10. package/dist/ActivityCardQuestionPreview/index.js +38 -37
  11. package/dist/ActivityCardQuestionPreview/index.js.map +1 -1
  12. package/dist/ActivityCardQuestionPreview/index.mjs +37 -36
  13. package/dist/ActivityCreate/index.js +38 -37
  14. package/dist/ActivityCreate/index.js.map +1 -1
  15. package/dist/ActivityCreate/index.mjs +37 -36
  16. package/dist/ActivityDetails/index.js +38 -37
  17. package/dist/ActivityDetails/index.js.map +1 -1
  18. package/dist/ActivityDetails/index.mjs +37 -36
  19. package/dist/ActivityFilters/index.js +38 -37
  20. package/dist/ActivityFilters/index.js.map +1 -1
  21. package/dist/ActivityFilters/index.mjs +37 -36
  22. package/dist/ActivityPageLayout/index.js +38 -37
  23. package/dist/ActivityPageLayout/index.js.map +1 -1
  24. package/dist/ActivityPageLayout/index.mjs +37 -36
  25. package/dist/ActivityPreview/index.js +38 -37
  26. package/dist/ActivityPreview/index.js.map +1 -1
  27. package/dist/ActivityPreview/index.mjs +37 -36
  28. package/dist/AlertManager/index.js +38 -37
  29. package/dist/AlertManager/index.js.map +1 -1
  30. package/dist/AlertManager/index.mjs +37 -36
  31. package/dist/Alternative/index.js +4 -4
  32. package/dist/Alternative/index.mjs +3 -3
  33. package/dist/Card/index.d.ts.map +1 -1
  34. package/dist/Card/index.js +4 -2
  35. package/dist/Card/index.js.map +1 -1
  36. package/dist/Card/index.mjs +3 -1
  37. package/dist/Chatbot/index.js +4 -4
  38. package/dist/Chatbot/index.mjs +3 -3
  39. package/dist/CheckBoxGroup/index.js +38 -37
  40. package/dist/CheckBoxGroup/index.js.map +1 -1
  41. package/dist/CheckBoxGroup/index.mjs +37 -36
  42. package/dist/CorrectActivityModal/index.js +11 -9
  43. package/dist/CorrectActivityModal/index.js.map +1 -1
  44. package/dist/CorrectActivityModal/index.mjs +10 -8
  45. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js +38 -37
  46. package/dist/ExamDetailsLayout/ExamDetailsPage/index.js.map +1 -1
  47. package/dist/ExamDetailsLayout/ExamDetailsPage/index.mjs +37 -36
  48. package/dist/ExamPageLayout/index.js +38 -37
  49. package/dist/ExamPageLayout/index.js.map +1 -1
  50. package/dist/ExamPageLayout/index.mjs +37 -36
  51. package/dist/Forum/index.js +5 -5
  52. package/dist/Forum/index.mjs +4 -4
  53. package/dist/HtmlMathRenderer/index.js +3 -3
  54. package/dist/HtmlMathRenderer/index.mjs +2 -2
  55. package/dist/ModuleProtectedRoute/index.js +1 -1
  56. package/dist/ModuleProtectedRoute/index.mjs +1 -1
  57. package/dist/MultipleChoice/index.js +4 -4
  58. package/dist/MultipleChoice/index.mjs +3 -3
  59. package/dist/PrintableUsersTable/index.js +38 -37
  60. package/dist/PrintableUsersTable/index.js.map +1 -1
  61. package/dist/PrintableUsersTable/index.mjs +37 -36
  62. package/dist/Quiz/QuizResult/index.js +5 -3
  63. package/dist/Quiz/QuizResult/index.js.map +1 -1
  64. package/dist/Quiz/QuizResult/index.mjs +4 -2
  65. package/dist/Quiz/index.js +10 -8
  66. package/dist/Quiz/index.js.map +1 -1
  67. package/dist/Quiz/index.mjs +9 -7
  68. package/dist/RecommendedLessonCreate/index.js +38 -37
  69. package/dist/RecommendedLessonCreate/index.js.map +1 -1
  70. package/dist/RecommendedLessonCreate/index.mjs +37 -36
  71. package/dist/RecommendedLessonDetails/index.js +10 -8
  72. package/dist/RecommendedLessonDetails/index.js.map +1 -1
  73. package/dist/RecommendedLessonDetails/index.mjs +9 -7
  74. package/dist/RecommendedLessonsHistory/index.js +38 -37
  75. package/dist/RecommendedLessonsHistory/index.js.map +1 -1
  76. package/dist/RecommendedLessonsHistory/index.mjs +37 -36
  77. package/dist/RichEditor/index.d.ts +2 -1
  78. package/dist/RichEditor/index.d.ts.map +1 -1
  79. package/dist/RichEditor/index.js +4 -4
  80. package/dist/RichEditor/index.mjs +3 -3
  81. package/dist/{RichEditorCore-M2QXRDYV.js → RichEditorCore-6FQGQTVI.js} +122 -24
  82. package/dist/RichEditorCore-6FQGQTVI.js.map +1 -0
  83. package/dist/{RichEditorCore-66BRHNJA.mjs → RichEditorCore-E5EVYNBP.mjs} +116 -18
  84. package/dist/RichEditorCore-E5EVYNBP.mjs.map +1 -0
  85. package/dist/SendActivityModal/SendActivityModal.js +38 -37
  86. package/dist/SendActivityModal/SendActivityModal.js.map +1 -1
  87. package/dist/SendActivityModal/SendActivityModal.mjs +37 -36
  88. package/dist/SendActivityModal/index.js +38 -37
  89. package/dist/SendActivityModal/index.js.map +1 -1
  90. package/dist/SendActivityModal/index.mjs +37 -36
  91. package/dist/SendLessonModal/index.js +38 -37
  92. package/dist/SendLessonModal/index.js.map +1 -1
  93. package/dist/SendLessonModal/index.mjs +37 -36
  94. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js +38 -37
  95. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.js.map +1 -1
  96. package/dist/SimulatedPerformance/SimulatedPerformanceView/index.mjs +37 -36
  97. package/dist/SimulationsPage/index.js +38 -37
  98. package/dist/SimulationsPage/index.js.map +1 -1
  99. package/dist/SimulationsPage/index.mjs +37 -36
  100. package/dist/StudentLessonProgressModal/index.js +5 -3
  101. package/dist/StudentLessonProgressModal/index.js.map +1 -1
  102. package/dist/StudentLessonProgressModal/index.mjs +4 -2
  103. package/dist/StudentPerformanceDetailsModal/index.js +6 -4
  104. package/dist/StudentPerformanceDetailsModal/index.js.map +1 -1
  105. package/dist/StudentPerformanceDetailsModal/index.mjs +5 -3
  106. package/dist/TableProvider/index.js +38 -37
  107. package/dist/TableProvider/index.js.map +1 -1
  108. package/dist/TableProvider/index.mjs +37 -36
  109. package/dist/TypeSelector/index.js +1 -1
  110. package/dist/TypeSelector/index.mjs +1 -1
  111. package/dist/UnifiedDraftModelPage/index.js +38 -37
  112. package/dist/UnifiedDraftModelPage/index.js.map +1 -1
  113. package/dist/UnifiedDraftModelPage/index.mjs +37 -36
  114. package/dist/UnifiedHistoryPage/index.js +38 -37
  115. package/dist/UnifiedHistoryPage/index.js.map +1 -1
  116. package/dist/UnifiedHistoryPage/index.mjs +37 -36
  117. package/dist/VideoPlayer/index.d.ts.map +1 -1
  118. package/dist/VideoPlayer/index.js +4 -2
  119. package/dist/VideoPlayer/index.js.map +1 -1
  120. package/dist/VideoPlayer/index.mjs +3 -1
  121. package/dist/{chunk-LXVYDVB4.js → chunk-2WW23BFO.js} +3 -3
  122. package/dist/{chunk-LXVYDVB4.js.map → chunk-2WW23BFO.js.map} +1 -1
  123. package/dist/{chunk-K6ZTPEGW.mjs → chunk-4PSADL7G.mjs} +2 -2
  124. package/dist/{chunk-GQAAHUV7.js → chunk-5W7C4GZV.js} +3 -3
  125. package/dist/{chunk-GQAAHUV7.js.map → chunk-5W7C4GZV.js.map} +1 -1
  126. package/dist/{chunk-IVZ4MJTS.mjs → chunk-62LOWUDP.mjs} +26 -22
  127. package/dist/chunk-62LOWUDP.mjs.map +1 -0
  128. package/dist/{chunk-LUQVF43V.mjs → chunk-6W5FFHXZ.mjs} +2 -2
  129. package/dist/{chunk-TJGAKJGH.mjs → chunk-7QLELROP.mjs} +5 -5
  130. package/dist/{chunk-HWXEQIO5.mjs → chunk-A4IPM7UN.mjs} +4 -4
  131. package/dist/{chunk-ZJIIB3AF.js → chunk-AFGF2BO6.js} +4 -4
  132. package/dist/{chunk-ZJIIB3AF.js.map → chunk-AFGF2BO6.js.map} +1 -1
  133. package/dist/{chunk-PHS4IKFZ.js → chunk-B3SCOLZI.js} +22 -7
  134. package/dist/chunk-B3SCOLZI.js.map +1 -0
  135. package/dist/{chunk-2CGJFQBO.js → chunk-B6K3W2ER.js} +7 -7
  136. package/dist/{chunk-2CGJFQBO.js.map → chunk-B6K3W2ER.js.map} +1 -1
  137. package/dist/{chunk-AUPSEAKU.js → chunk-C7VIWNMO.js} +8 -8
  138. package/dist/{chunk-AUPSEAKU.js.map → chunk-C7VIWNMO.js.map} +1 -1
  139. package/dist/{chunk-5J6HR2OT.mjs → chunk-CXAHSTTU.mjs} +6 -6
  140. package/dist/{chunk-IHGMEWKN.js → chunk-DHC7C7MT.js} +2 -1
  141. package/dist/chunk-DHC7C7MT.js.map +1 -0
  142. package/dist/{chunk-JY4S5PVP.mjs → chunk-ET3BKMTB.mjs} +2 -2
  143. package/dist/{chunk-7N3OHQPN.js → chunk-FLQYUE6V.js} +8 -8
  144. package/dist/{chunk-7N3OHQPN.js.map → chunk-FLQYUE6V.js.map} +1 -1
  145. package/dist/{chunk-KSXHQZ4N.mjs → chunk-FNO4DABW.mjs} +4 -4
  146. package/dist/{chunk-RNLEIM3W.js → chunk-FZKNV4QG.js} +4 -4
  147. package/dist/{chunk-RNLEIM3W.js.map → chunk-FZKNV4QG.js.map} +1 -1
  148. package/dist/{chunk-D3YJV3GQ.mjs → chunk-GIMAWKXF.mjs} +2 -2
  149. package/dist/{chunk-MWMSLWU7.js → chunk-GYAH7JEL.js} +20 -20
  150. package/dist/{chunk-MWMSLWU7.js.map → chunk-GYAH7JEL.js.map} +1 -1
  151. package/dist/{chunk-GVELMFVT.js → chunk-GZVTOINL.js} +26 -22
  152. package/dist/chunk-GZVTOINL.js.map +1 -0
  153. package/dist/{chunk-WJRRZZDY.js → chunk-HOEAKVCX.js} +11 -12
  154. package/dist/chunk-HOEAKVCX.js.map +1 -0
  155. package/dist/{chunk-NTEHRL5H.js → chunk-K7JYDENE.js} +4 -4
  156. package/dist/{chunk-NTEHRL5H.js.map → chunk-K7JYDENE.js.map} +1 -1
  157. package/dist/{chunk-U4J2DTFG.mjs → chunk-KDIJ67HD.mjs} +4 -4
  158. package/dist/chunk-KINHGO65.mjs +61 -0
  159. package/dist/chunk-KINHGO65.mjs.map +1 -0
  160. package/dist/{chunk-RQ2HH4HG.mjs → chunk-KKCIJJUI.mjs} +6 -6
  161. package/dist/{chunk-X5IDEPEM.mjs → chunk-L2YGLO5B.mjs} +2 -2
  162. package/dist/{chunk-4V33KV6B.js → chunk-L3MQL34E.js} +4 -4
  163. package/dist/{chunk-4V33KV6B.js.map → chunk-L3MQL34E.js.map} +1 -1
  164. package/dist/{chunk-CRYSMF6H.mjs → chunk-M7MFFKBG.mjs} +2 -2
  165. package/dist/{chunk-HPHBO63L.mjs → chunk-OUNKNXTX.mjs} +3 -3
  166. package/dist/{chunk-OGIVDMYT.mjs → chunk-Q3FBEIZP.mjs} +22 -7
  167. package/dist/chunk-Q3FBEIZP.mjs.map +1 -0
  168. package/dist/{chunk-MGPPRRYA.js → chunk-QGHOHBET.js} +54 -54
  169. package/dist/{chunk-MGPPRRYA.js.map → chunk-QGHOHBET.js.map} +1 -1
  170. package/dist/{chunk-RJ2VSBBL.js → chunk-QH3ICESV.js} +15 -15
  171. package/dist/{chunk-RJ2VSBBL.js.map → chunk-QH3ICESV.js.map} +1 -1
  172. package/dist/{chunk-N6433YZX.js → chunk-RN2GCADE.js} +3 -3
  173. package/dist/{chunk-N6433YZX.js.map → chunk-RN2GCADE.js.map} +1 -1
  174. package/dist/{chunk-5C62S5CH.mjs → chunk-RRID37Y3.mjs} +4 -4
  175. package/dist/{chunk-ISWPT4YS.mjs → chunk-S7JO26PI.mjs} +2 -1
  176. package/dist/{chunk-ISWPT4YS.mjs.map → chunk-S7JO26PI.mjs.map} +1 -1
  177. package/dist/{chunk-OLFRDLQQ.mjs → chunk-TFNQQBW4.mjs} +2 -2
  178. package/dist/chunk-TFNQQBW4.mjs.map +1 -0
  179. package/dist/{chunk-3KINJLXQ.mjs → chunk-TW72FYFR.mjs} +18 -18
  180. package/dist/{chunk-L3AQ2YBN.js → chunk-U5DMZPYF.js} +3 -3
  181. package/dist/{chunk-L3AQ2YBN.js.map → chunk-U5DMZPYF.js.map} +1 -1
  182. package/dist/{chunk-OCNSCJXM.js → chunk-V3ST6IRZ.js} +25 -25
  183. package/dist/{chunk-OCNSCJXM.js.map → chunk-V3ST6IRZ.js.map} +1 -1
  184. package/dist/chunk-VT5CIYRY.js +61 -0
  185. package/dist/chunk-VT5CIYRY.js.map +1 -0
  186. package/dist/{chunk-JD5ZVYX7.js → chunk-WE4BA4BL.js} +3 -3
  187. package/dist/{chunk-JD5ZVYX7.js.map → chunk-WE4BA4BL.js.map} +1 -1
  188. package/dist/{chunk-LHWBFMAD.js → chunk-WPF5CXV2.js} +2 -2
  189. package/dist/chunk-WPF5CXV2.js.map +1 -0
  190. package/dist/{chunk-HF4XZHWB.mjs → chunk-YOYIDCFV.mjs} +11 -12
  191. package/dist/chunk-YOYIDCFV.mjs.map +1 -0
  192. package/dist/{chunk-Y4JK3YPA.mjs → chunk-ZXFFDIHT.mjs} +2 -2
  193. package/dist/components/RichEditor/RichEditor.d.ts +7 -0
  194. package/dist/components/RichEditor/RichEditor.d.ts.map +1 -1
  195. package/dist/components/RichEditor/components/ImageDialog.d.ts +0 -5
  196. package/dist/components/RichEditor/components/ImageDialog.d.ts.map +1 -1
  197. package/dist/components/RichEditor/components/imageSize.d.ts +53 -0
  198. package/dist/components/RichEditor/components/imageSize.d.ts.map +1 -0
  199. package/dist/hooks/useAppContent/index.js +38 -37
  200. package/dist/hooks/useAppContent/index.js.map +1 -1
  201. package/dist/hooks/useAppContent/index.mjs +37 -36
  202. package/dist/hooks/useAppInitialization/index.js +1 -1
  203. package/dist/hooks/useAppInitialization/index.mjs +1 -1
  204. package/dist/hooks/useModules/index.js +1 -1
  205. package/dist/hooks/useModules/index.mjs +1 -1
  206. package/dist/hooks/useProfileLabels/index.js +1 -1
  207. package/dist/hooks/useProfileLabels/index.mjs +1 -1
  208. package/dist/hooks/useSupportFeatureFlag/index.js +1 -1
  209. package/dist/hooks/useSupportFeatureFlag/index.mjs +1 -1
  210. package/dist/index.d.ts +2 -0
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +72 -62
  213. package/dist/index.js.map +1 -1
  214. package/dist/index.mjs +87 -77
  215. package/dist/store/appStore/index.js +1 -1
  216. package/dist/store/appStore/index.mjs +1 -1
  217. package/dist/store/authStore/index.js +1 -1
  218. package/dist/store/authStore/index.mjs +1 -1
  219. package/dist/store/mediaPreferencesStore/index.d.ts +54 -0
  220. package/dist/store/mediaPreferencesStore/index.d.ts.map +1 -0
  221. package/dist/store/mediaPreferencesStore/index.js +14 -0
  222. package/dist/store/mediaPreferencesStore/index.js.map +1 -0
  223. package/dist/store/mediaPreferencesStore/index.mjs +14 -0
  224. package/dist/store/mediaPreferencesStore/index.mjs.map +1 -0
  225. package/dist/store/mediaPreferencesStore.d.ts +54 -0
  226. package/dist/store/mediaPreferencesStore.d.ts.map +1 -0
  227. package/dist/store/userStore/index.js +1 -1
  228. package/dist/store/userStore/index.mjs +1 -1
  229. package/dist/utils/examPackagePages/index.js +3 -3
  230. package/dist/utils/examPackagePages/index.mjs +2 -2
  231. package/dist/utils/keys.d.ts +6 -1
  232. package/dist/utils/keys.d.ts.map +1 -1
  233. package/package.json +8 -1
  234. package/dist/RichEditorCore-66BRHNJA.mjs.map +0 -1
  235. package/dist/RichEditorCore-M2QXRDYV.js.map +0 -1
  236. package/dist/chunk-GVELMFVT.js.map +0 -1
  237. package/dist/chunk-HF4XZHWB.mjs.map +0 -1
  238. package/dist/chunk-IHGMEWKN.js.map +0 -1
  239. package/dist/chunk-IVZ4MJTS.mjs.map +0 -1
  240. package/dist/chunk-LHWBFMAD.js.map +0 -1
  241. package/dist/chunk-OGIVDMYT.mjs.map +0 -1
  242. package/dist/chunk-OLFRDLQQ.mjs.map +0 -1
  243. package/dist/chunk-PHS4IKFZ.js.map +0 -1
  244. package/dist/chunk-WJRRZZDY.js.map +0 -1
  245. /package/dist/{chunk-K6ZTPEGW.mjs.map → chunk-4PSADL7G.mjs.map} +0 -0
  246. /package/dist/{chunk-LUQVF43V.mjs.map → chunk-6W5FFHXZ.mjs.map} +0 -0
  247. /package/dist/{chunk-TJGAKJGH.mjs.map → chunk-7QLELROP.mjs.map} +0 -0
  248. /package/dist/{chunk-HWXEQIO5.mjs.map → chunk-A4IPM7UN.mjs.map} +0 -0
  249. /package/dist/{chunk-5J6HR2OT.mjs.map → chunk-CXAHSTTU.mjs.map} +0 -0
  250. /package/dist/{chunk-JY4S5PVP.mjs.map → chunk-ET3BKMTB.mjs.map} +0 -0
  251. /package/dist/{chunk-KSXHQZ4N.mjs.map → chunk-FNO4DABW.mjs.map} +0 -0
  252. /package/dist/{chunk-D3YJV3GQ.mjs.map → chunk-GIMAWKXF.mjs.map} +0 -0
  253. /package/dist/{chunk-U4J2DTFG.mjs.map → chunk-KDIJ67HD.mjs.map} +0 -0
  254. /package/dist/{chunk-RQ2HH4HG.mjs.map → chunk-KKCIJJUI.mjs.map} +0 -0
  255. /package/dist/{chunk-X5IDEPEM.mjs.map → chunk-L2YGLO5B.mjs.map} +0 -0
  256. /package/dist/{chunk-CRYSMF6H.mjs.map → chunk-M7MFFKBG.mjs.map} +0 -0
  257. /package/dist/{chunk-HPHBO63L.mjs.map → chunk-OUNKNXTX.mjs.map} +0 -0
  258. /package/dist/{chunk-5C62S5CH.mjs.map → chunk-RRID37Y3.mjs.map} +0 -0
  259. /package/dist/{chunk-3KINJLXQ.mjs.map → chunk-TW72FYFR.mjs.map} +0 -0
  260. /package/dist/{chunk-Y4JK3YPA.mjs.map → chunk-ZXFFDIHT.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-WJRRZZDY.js","../src/components/RichEditor/components/ImageDialog.tsx","../src/components/RichEditor/components/imageSize.ts"],"names":[],"mappings":"AAAA;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;AChBA,8BAA8C;AAM9C,2DAAyB;AACzB,2EAAiC;ADajC;AACA;AEbO,IAAM,gBAAA,EAAkB,EAAA;AAOxB,IAAM,iBAAA,EAAmB,EAAA;AAOzB,IAAM,yBAAA,EAA2B,GAAA;AAGxC,IAAM,mBAAA,EAAqB,GAAA;AAS3B,IAAM,aAAA,EAAe,CAAC,KAAA,EAAA,GAAwC;AAC5D,EAAA,GAAA,CAAI,CAAC,KAAA,EAAO,OAAO,IAAA;AAEnB,EAAA,MAAM,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,CAAA;AAE3B,EAAA,MAAM,MAAA,EAAQ,yBAAA,CAA0B,IAAA,CAAK,OAAO,CAAA;AACpD,EAAA,GAAA,CAAI,CAAC,KAAA,EAAO,OAAO,IAAA;AAInB,EAAA,MAAM,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AACtD,EAAA,OAAO,QAAA,EAAU,EAAA,EAAI,QAAA,EAAU,IAAA;AACjC,CAAA;AASO,IAAM,gBAAA,EAAkB,CAAC,OAAA,EAAA,GAAwC;AACtE,EAAA,MAAM,cAAA,EAAgB,YAAA,CAAa,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAC,CAAA;AAChE,EAAA,GAAA,CAAI,cAAA,IAAkB,IAAA,EAAM,OAAO,aAAA;AAKnC,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AACzC,CAAA;AAUO,IAAM,oBAAA,EAAsB,CACjC,GAAA,EACA,UAAA,EAAoB,kBAAA,EAAA,GACO;AAC3B,EAAA,GAAA,CAAI,CAAC,IAAA,GAAO,UAAA,CAAW,MAAA,IAAU,KAAA,CAAA,EAAW;AAC1C,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAA,GAAY;AAC9B,IAAA,MAAM,MAAA,EAAQ,IAAI,UAAA,CAAW,KAAA,CAAM,CAAA;AACnC,IAAA,IAAI,QAAA,EAAU,KAAA;AAEd,IAAA,MAAM,OAAA,EAAS,CAAC,KAAA,EAAA,GAAyB;AACvC,MAAA,GAAA,CAAI,OAAA,EAAS,MAAA;AACb,MAAA,QAAA,EAAU,IAAA;AACV,MAAA,UAAA,CAAW,YAAA,CAAa,SAAS,CAAA;AACjC,MAAA,KAAA,CAAM,OAAA,EAAS,IAAA;AACf,MAAA,KAAA,CAAM,QAAA,EAAU,IAAA;AAChB,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,UAAA,EAAY,UAAA,CAAW,UAAA,CAAW,CAAA,EAAA,GAAM,MAAA,CAAO,IAAI,CAAA,EAAG,SAAS,CAAA;AAErE,IAAA,KAAA,CAAM,OAAA,EAAS,CAAA,EAAA,GAAM,MAAA,CAAO,KAAA,CAAM,aAAA,GAAgB,IAAI,CAAA;AACtD,IAAA,KAAA,CAAM,QAAA,EAAU,CAAA,EAAA,GAAM,MAAA,CAAO,IAAI,CAAA;AACjC,IAAA,KAAA,CAAM,IAAA,EAAM,GAAA;AAAA,EACd,CAAC,CAAA;AACH,CAAA;AFxCA;AACA;AC2GQ,+CAAA;AA1JD,IAAM,eAAA,EAAiB,EAAA,EAAI,KAAA,EAAO,IAAA;AAkBlC,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,6BAAA;AAAA,IAChC,cAAA,EAAgB,OAAA,EAAS;AAAA,EAC3B,CAAA;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,EAAA,EAAI,6BAAA,IAA0B,CAAA;AAClD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,EAAA,EAAI,6BAAA,EAAW,CAAA;AACjC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,EAAA,EAAI,6BAAA,EAAW,CAAA;AACjC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,EAAA,EAAI,6BAAA,KAAc,CAAA;AAMpD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,EAAA,EAAI,6BAAA,KAAc,CAAA;AACpD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,EAAA,EAAI,6BAAA,EAAW,CAAA;AAErC,EAAA,MAAM,eAAA,EAAiB,2BAAA,CAAQ,CAAA;AAE/B,EAAA,MAAM,OAAA,EAAS,YAAA,GAAe,WAAA;AAE9B,EAAA,MAAM,WAAA,EAAa,CAAA,EAAA,GAAM;AACvB,IAAA,YAAA,CAAa,cAAA,EAAgB,OAAA,EAAS,KAAK,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,MAAA,CAAO,EAAE,CAAA;AACT,IAAA,MAAA,CAAO,EAAE,CAAA;AACT,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,YAAA,EAAc,CAAA,EAAA,GAAM;AAIxB,IAAA,cAAA,CAAe,QAAA,GAAW,CAAA;AAC1B,IAAA,UAAA,CAAW,CAAA;AACX,IAAA,OAAA,CAAQ,CAAA;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,iBAAA,EAAmB,CAAC,QAAA,EAAA,GAAmB;AAC3C,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAChB,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AAC5B,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,QAAA,CAAS,qCAAkC,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,gBAAA,EAAkB,CAAA,EAAA,GAAM;AAC5B,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,QAAA,CAAS,2CAAwC,CAAA;AAAA,EACnD,CAAA;AAEA,EAAA,MAAM,WAAA,EAAa,CAAC,IAAA,EAAA,GAAoB;AACtC,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA;AAUA,EAAA,MAAM,mBAAA,EAAqB,MAAA,CACzB,GAAA,EAAA,GACgC;AAChC,IAAA,MAAM,aAAA,EAAe,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAClD,IAAA,OAAO,aAAA,GAAgB,aAAA,EAAe,yBAAA,EAClC,yBAAA,EACA,KAAA,CAAA;AAAA,EACN,CAAA;AAGA,EAAA,MAAM,eAAA,EAAiB,MAAA,CAAO,GAAA,EAAA,GAAgB;AAC5C,IAAA,MAAM,MAAA,EAAQ,cAAA,CAAe,OAAA;AAC7B,IAAA,MAAM,MAAA,EAAQ,MAAM,kBAAA,CAAmB,GAAG,CAAA;AAC1C,IAAA,GAAA,CAAI,MAAA,IAAU,cAAA,CAAe,OAAA,EAAS,MAAA;AACtC,IAAA,QAAA,CAAS,GAAA,EAAK,GAAA,CAAI,IAAA,CAAK,CAAA,EAAG,KAAK,CAAA;AAC/B,IAAA,UAAA,CAAW,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,aAAA,EAAe,MAAA,CAAA,EAAA,GAAY;AAC/B,IAAA,GAAA,CAAI,UAAA,IAAc,KAAA,EAAO;AACvB,MAAA,MAAM,WAAA,EAAa,GAAA,CAAI,IAAA,CAAK,CAAA;AAC5B,MAAA,GAAA,CAAI,CAAC,UAAA,EAAY,MAAA;AAKjB,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,IAAI;AACF,QAAA,MAAM,cAAA,CAAe,UAAU,CAAA;AAAA,MACjC,EAAA,QAAE;AACA,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB;AACA,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,CAAC,aAAA,EAAe,MAAA;AAE7B,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,MAAM,MAAA,EAAQ,cAAA,CAAe,OAAA;AAE7B,IAAA,IAAI;AAGF,MAAA,MAAM,YAAA,EAAc,MAAM,aAAA,CAAc,IAAI,CAAA;AAC5C,MAAA,GAAA,CAAI,MAAA,IAAU,cAAA,CAAe,OAAA,EAAS,MAAA;AACtC,MAAA,MAAM,cAAA,CAAe,WAAW,CAAA;AAAA,IAClC,EAAA,MAAA,CAAS,GAAA,EAAK;AACZ,MAAA,GAAA,CAAI,MAAA,IAAU,cAAA,CAAe,OAAA,EAAS,MAAA;AACtC,MAAA,QAAA,CAAS,IAAA,WAAe,MAAA,EAAQ,GAAA,CAAI,QAAA,EAAU,0BAA0B,CAAA;AAAA,IAC1E,EAAA,QAAE;AACA,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,EAAY,UAAA,IAAc,MAAA,EAAQ,CAAC,CAAC,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,CAAC,CAAC,IAAA;AAEzD,EAAA,uBACE,6BAAA;AAAA,IAAC,8BAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,WAAA;AAAA,MACT,KAAA,EAAM,gBAAA;AAAA,MACN,IAAA,EAAK,IAAA;AAAA,MACL,MAAA,kBACE,8BAAA,oBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,6BAAA;AAAA,UAAC,+BAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,WAAA;AAAA,YACT,QAAA,EAAU,WAAA;AAAA,YACX,QAAA,EAAA;AAAA,UAAA;AAAA,QAED,CAAA;AAAA,wBACA,6BAAA;AAAA,UAAC,+BAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAO,SAAA;AAAA,YACP,OAAA,EAAS,YAAA;AAAA,YACT,QAAA,EAAU,CAAC,UAAA,GAAa,MAAA;AAAA,YAEvB,QAAA,EAAA,YAAA,EAAc,cAAA,EAAgB;AAAA,UAAA;AAAA,QACjC;AAAA,MAAA,EAAA,CACF,CAAA;AAAA,MAGF,QAAA,kBAAA,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,qBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,cAAA,mBACC,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAA,8BAAA;AAAA,YAAC,+BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,UAAA,IAAc,OAAA,EAAS,QAAA,EAAU,SAAA;AAAA,cAC1C,MAAA,EAAO,SAAA;AAAA,cACP,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,CAAA,EAAA,GAAM,UAAA,CAAW,MAAM,CAAA;AAAA,cAChC,SAAA,EAAU,yBAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,6BAAA,8BAAC,EAAA,EAAiB,IAAA,EAAM,GAAA,CAAI,CAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAEhC,CAAA;AAAA,0BACA,8BAAA;AAAA,YAAC,+BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,UAAA,IAAc,MAAA,EAAQ,QAAA,EAAU,SAAA;AAAA,cACzC,MAAA,EAAO,SAAA;AAAA,cACP,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,CAAA,EAAA,GAAM,UAAA,CAAW,KAAK,CAAA;AAAA,cAC/B,SAAA,EAAU,yBAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAA,6BAAA,cAAC,EAAA,EAAS,IAAA,EAAM,GAAA,CAAI,CAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAExB;AAAA,QAAA,EAAA,CACF,CAAA;AAAA,QAGD,UAAA,IAAc,OAAA,GAAU,cAAA,kBACvB,8BAAA,KAAC,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,6BAAA;AAAA,YAAC,4BAAA;AAAA,YAAA;AAAA,cACC,YAAA,EAAc,IAAA;AAAA,cACd,YAAA,EAAc,gBAAA;AAAA,cACd,YAAA,EAAc,CAAA,EAAA,GAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,cAGhC,UAAA,EAAW,oBAAA;AAAA,cACX,OAAA,EAAS,cAAA;AAAA,cACT,WAAA,EAAa,eAAA;AAAA,cACb,WAAA,EAAa,eAAA;AAAA,cACb,QAAA,EAAU;AAAA,YAAA;AAAA,UACZ,CAAA;AAAA,0BACA,6BAAA,6BAAC,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,oBAAA,EAAqB,QAAA,EAAA,sDAAA,CAE/C;AAAA,QAAA,EAAA,CACF,EAAA,kBAEA,8BAAA,KAAC,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,6BAAA,6BAAC,EAAA,EAAK,MAAA,EAAO,QAAA,EAAS,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,gBAAA,CAEnE,CAAA;AAAA,0BACA,6BAAA;AAAA,YAAC,8BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,GAAA;AAAA,cACP,QAAA,EAAU,CAAC,CAAA,EAAA,GACT,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,cAEvB,WAAA,EAAY;AAAA,YAAA;AAAA,UACd;AAAA,QAAA,EAAA,CACF,CAAA;AAAA,wBAGF,8BAAA,KAAC,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,6BAAA,6BAAC,EAAA,EAAK,MAAA,EAAO,QAAA,EAAS,SAAA,EAAU,kCAAA,EAAmC,QAAA,EAAA,+BAAA,CAEnE,CAAA;AAAA,0BACA,6BAAA;AAAA,YAAC,8BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,KAAA,EAAO,GAAA;AAAA,cACP,QAAA,EAAU,CAAC,CAAA,EAAA,GACT,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,cAEvB,WAAA,EAAY,yCAAA;AAAA,cACZ,QAAA,EAAU;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA,EAAA,CACF,CAAA;AAAA,QAEC,MAAA,mBACC,6BAAA,6BAAC,EAAA,EAAK,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,gBAAA,EACvB,QAAA,EAAA,MAAA,CACH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EACF,CAAA;AAEJ;ADhBA;AACA;AACE;AACA;AACA;AACA;AACA;AACF,8MAAC","file":"/home/runner/work/analytica-frontend-lib/analytica-frontend-lib/dist/chunk-WJRRZZDY.js","sourcesContent":[null,"import { useState, useRef, ChangeEvent } from 'react';\nimport Button from '../../Button/Button';\nimport Input from '../../Input/Input';\nimport ImageUpload from '../../ImageUpload/ImageUpload';\nimport Modal from '../../Modal/Modal';\nimport Text from '../../Text/Text';\nimport { LinkIcon } from '@phosphor-icons/react/dist/csr/Link';\nimport { UploadSimpleIcon } from '@phosphor-icons/react/dist/csr/UploadSimple';\nimport { DEFAULT_MAX_INSERT_WIDTH, measureNaturalWidth } from './imageSize';\n\n/**\n * Matches the 5MB cap enforced by the backend pre-signed URL schema.\n * Keeping it here avoids the client accepting files the server will reject.\n */\nexport const MAX_IMAGE_SIZE = 5 * 1024 * 1024;\n\ntype InputMode = 'file' | 'url';\n\ninterface ImageDialogProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly onInsert: (src: string, alt: string, width?: number) => void;\n /**\n * Optional callback to upload an image file and get back its public URL.\n * If provided, the file upload tab is enabled; otherwise only URL input is\n * available. The library stays agnostic of how the consumer uploads.\n * @param file - The image file selected by the user\n * @returns Promise resolving to the public URL of the uploaded image\n */\n readonly onUploadImage?: (file: File) => Promise<string>;\n}\n\nexport function ImageDialog({\n open,\n onClose,\n onInsert,\n onUploadImage,\n}: ImageDialogProps) {\n const [inputMode, setInputMode] = useState<InputMode>(\n onUploadImage ? 'file' : 'url'\n );\n const [file, setFile] = useState<File | null>(null);\n const [url, setUrl] = useState('');\n const [alt, setAlt] = useState('');\n const [isUploading, setIsUploading] = useState(false);\n /**\n * True while the image is being measured. The URL branch has no upload to\n * wait on, so without this the confirm button would stay enabled during the\n * measurement and a second click would insert the same image twice.\n */\n const [isMeasuring, setIsMeasuring] = useState(false);\n const [error, setError] = useState('');\n /** Bumped on close so a resolving upload can tell it has been superseded. */\n const uploadTokenRef = useRef(0);\n\n const isBusy = isUploading || isMeasuring;\n\n const resetState = () => {\n setInputMode(onUploadImage ? 'file' : 'url');\n setFile(null);\n setUrl('');\n setAlt('');\n setIsUploading(false);\n setIsMeasuring(false);\n setError('');\n };\n\n const handleClose = () => {\n // Invalidates any upload still in flight. The Modal closes on Escape and on\n // its X button, so the user can dismiss the dialog mid-upload; without this\n // the promise would resolve afterwards and insert an image they cancelled.\n uploadTokenRef.current += 1;\n resetState();\n onClose();\n };\n\n const handleFileSelect = (selected: File) => {\n setFile(selected);\n setError('');\n };\n\n const handleSizeError = () => {\n setFile(null);\n setError('A imagem deve ter no máximo 5MB.');\n };\n\n const handleTypeError = () => {\n setFile(null);\n setError('Selecione um arquivo de imagem válido.');\n };\n\n const switchMode = (mode: InputMode) => {\n setInputMode(mode);\n setError('');\n };\n\n /**\n * Resolves the width to insert with. Exam board images are uploaded at their\n * original scan resolution, so anything wider than the default cap is clamped\n * up front. Images already within the cap get no width attribute at all,\n * leaving existing content untouched.\n * @param src - Public URL of the image about to be inserted\n * @returns The width in pixels, or undefined when no clamping is needed\n */\n const resolveInsertWidth = async (\n src: string\n ): Promise<number | undefined> => {\n const naturalWidth = await measureNaturalWidth(src);\n return naturalWidth && naturalWidth > DEFAULT_MAX_INSERT_WIDTH\n ? DEFAULT_MAX_INSERT_WIDTH\n : undefined;\n };\n\n /** Inserts an image already available at `src`, measuring it first. */\n const insertMeasured = async (src: string) => {\n const token = uploadTokenRef.current;\n const width = await resolveInsertWidth(src);\n if (token !== uploadTokenRef.current) return;\n onInsert(src, alt.trim(), width);\n resetState();\n };\n\n const handleInsert = async () => {\n if (inputMode === 'url') {\n const trimmedUrl = url.trim();\n if (!trimmedUrl) return;\n\n // Marked busy before the first await so the confirm button is disabled\n // while measuring — otherwise a second click would insert the same image\n // twice, since the URL branch has no upload to keep it disabled.\n setIsMeasuring(true);\n try {\n await insertMeasured(trimmedUrl);\n } finally {\n setIsMeasuring(false);\n }\n return;\n }\n\n if (!file || !onUploadImage) return;\n\n setIsUploading(true);\n setError('');\n const token = uploadTokenRef.current;\n\n try {\n // Upload before inserting so the saved HTML never holds a blob: URL,\n // which would break as soon as the page unloads.\n const uploadedUrl = await onUploadImage(file);\n if (token !== uploadTokenRef.current) return;\n await insertMeasured(uploadedUrl);\n } catch (err) {\n if (token !== uploadTokenRef.current) return;\n setError(err instanceof Error ? err.message : 'Erro ao enviar a imagem.');\n } finally {\n setIsUploading(false);\n }\n };\n\n const canInsert = inputMode === 'url' ? !!url.trim() : !!file;\n\n return (\n <Modal\n isOpen={open}\n onClose={handleClose}\n title=\"Inserir imagem\"\n size=\"md\"\n footer={\n <>\n <Button\n variant=\"outline\"\n onClick={handleClose}\n disabled={isUploading}\n >\n Cancelar\n </Button>\n <Button\n variant=\"solid\"\n action=\"primary\"\n onClick={handleInsert}\n disabled={!canInsert || isBusy}\n >\n {isUploading ? 'Enviando...' : 'Inserir imagem'}\n </Button>\n </>\n }\n >\n <div className=\"flex flex-col gap-4\">\n {onUploadImage && (\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant={inputMode === 'file' ? 'solid' : 'outline'}\n action=\"primary\"\n size=\"small\"\n onClick={() => switchMode('file')}\n className=\"flex items-center gap-1\"\n >\n <UploadSimpleIcon size={14} />\n Enviar arquivo\n </Button>\n <Button\n type=\"button\"\n variant={inputMode === 'url' ? 'solid' : 'outline'}\n action=\"primary\"\n size=\"small\"\n onClick={() => switchMode('url')}\n className=\"flex items-center gap-1\"\n >\n <LinkIcon size={14} />\n Usar URL\n </Button>\n </div>\n )}\n\n {inputMode === 'file' && onUploadImage ? (\n <div>\n <ImageUpload\n selectedFile={file}\n onFileSelect={handleFileSelect}\n onRemoveFile={() => setFile(null)}\n // Defaults to \"Inserir imagem\", which would collide with the\n // dialog's confirm button — same name, different action.\n buttonText=\"Selecionar arquivo\"\n maxSize={MAX_IMAGE_SIZE}\n onSizeError={handleSizeError}\n onTypeError={handleTypeError}\n disabled={isUploading}\n />\n <Text size=\"xs\" className=\"text-text-400 mt-1\">\n Formatos aceitos: PNG, JPG, GIF, WEBP (máx. 5MB)\n </Text>\n </div>\n ) : (\n <div>\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2 block\">\n URL da imagem\n </Text>\n <Input\n type=\"text\"\n value={url}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setUrl(e.target.value)\n }\n placeholder=\"https://exemplo.com/imagem.png\"\n />\n </div>\n )}\n\n <div>\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2 block\">\n Texto alternativo (opcional)\n </Text>\n <Input\n type=\"text\"\n value={alt}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setAlt(e.target.value)\n }\n placeholder=\"Descreva a imagem para leitores de tela\"\n disabled={isUploading}\n />\n </div>\n\n {error && (\n <Text size=\"xs\" className=\"text-error-600\">\n {error}\n </Text>\n )}\n </div>\n </Modal>\n );\n}\n","/**\n * Shared sizing rules for resizable images inside the RichEditor.\n *\n * Both the Tiptap image extension and the image insertion dialog need the same\n * numbers, so they live here instead of being duplicated on each side.\n */\n\n/** Smallest width a resize handle may produce, in pixels. */\nexport const MIN_IMAGE_WIDTH = 48;\n\n/**\n * Smallest height a resize handle may produce, in pixels.\n * Lower than the width floor so wide, short banners can still be shrunk without\n * the height constraint fighting the width.\n */\nexport const MIN_IMAGE_HEIGHT = 24;\n\n/**\n * Width applied on insert when the source image is wider than this.\n * Exam boards upload figures at their original scan resolution, which would\n * otherwise fill the whole statement.\n */\nexport const DEFAULT_MAX_INSERT_WIDTH = 640;\n\n/** Milliseconds to wait for an image to load before giving up on measuring it. */\nconst MEASURE_TIMEOUT_MS = 3000;\n\n/**\n * Converts a raw width value into a usable number of pixels.\n * Percentages and other units are rejected: the resizable node view appends\n * `px` to whatever it is given, so a stored `50%` would become `50%px`.\n * @param value - Raw attribute or style value\n * @returns The width in pixels, or null when it cannot be used\n */\nconst toPixelWidth = (value: string | null): number | null => {\n if (!value) return null;\n\n const trimmed = value.trim();\n // Accepts \"400\" and \"400px\" only. Anything else (%, em, vw, calc) is dropped.\n const match = /^(\\d+(?:\\.\\d+)?)(px)?$/i.exec(trimmed);\n if (!match) return null;\n\n // Rounding is checked instead of the parsed value: `0.4px` is positive but\n // rounds to zero, and a `width=\"0\"` would make the image vanish.\n const rounded = Math.round(Number.parseFloat(match[1]));\n return rounded > 0 ? rounded : null;\n};\n\n/**\n * Reads a usable pixel width from an `<img>` element.\n * The `width` attribute wins; an inline `width: Npx` style is used as fallback\n * so images pasted from other editors keep their intended size.\n * @param element - The image element being parsed by Tiptap\n * @returns The width in pixels, or null when the image has no usable width\n */\nexport const parseImageWidth = (element: HTMLElement): number | null => {\n const fromAttribute = toPixelWidth(element.getAttribute('width'));\n if (fromAttribute !== null) return fromAttribute;\n\n // `element.style.width` is the declaration the browser actually applies, so a\n // duplicated `width: 320px; width: 50%` resolves to `50%` and is rejected —\n // matching the source instead of the first value that happens to parse.\n return toPixelWidth(element.style.width);\n};\n\n/**\n * Loads an image off-DOM to discover its natural width.\n * Never rejects: a broken URL or a slow CDN resolves to null so the caller can\n * insert the image without a width instead of blocking on the network.\n * @param src - Public URL of the image\n * @param timeoutMs - How long to wait before giving up\n * @returns The natural width in pixels, or null when it cannot be measured\n */\nexport const measureNaturalWidth = (\n src: string,\n timeoutMs: number = MEASURE_TIMEOUT_MS\n): Promise<number | null> => {\n if (!src || globalThis.Image === undefined) {\n return Promise.resolve(null);\n }\n\n return new Promise((resolve) => {\n const image = new globalThis.Image();\n let settled = false;\n\n const finish = (width: number | null) => {\n if (settled) return;\n settled = true;\n globalThis.clearTimeout(timeoutId);\n image.onload = null;\n image.onerror = null;\n resolve(width);\n };\n\n const timeoutId = globalThis.setTimeout(() => finish(null), timeoutMs);\n\n image.onload = () => finish(image.naturalWidth || null);\n image.onerror = () => finish(null);\n image.src = src;\n });\n};\n"]}