@mieweb/ui 0.10.0-dev.4 → 0.10.0-dev.41

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 (811) hide show
  1. package/README.md +4 -4
  2. package/agent/mieweb-ui.instructions.md +90 -1
  3. package/dist/CsvBlock-CFXSDPBI.js +9 -0
  4. package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
  5. package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
  6. package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
  8. package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
  9. package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
  10. package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
  11. package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
  12. package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
  13. package/dist/MermaidBlock-XCAK7IA5.js +9 -0
  14. package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
  15. package/dist/SurveyBlock-KI5JOWCL.js +9 -0
  16. package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
  17. package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
  18. package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
  19. package/dist/ag-grid.d.cts +142 -1
  20. package/dist/ag-grid.d.ts +142 -1
  21. package/dist/brands/bluehive.cjs +3 -3
  22. package/dist/brands/bluehive.css +3 -0
  23. package/dist/brands/bluehive.js +1 -1
  24. package/dist/brands/index.cjs +14 -14
  25. package/dist/brands/index.js +4 -4
  26. package/dist/{chunk-3M7TAXNR.js → chunk-24AFHH4J.js} +3 -3
  27. package/dist/{chunk-3M7TAXNR.js.map → chunk-24AFHH4J.js.map} +1 -1
  28. package/dist/{chunk-JYZW2PZS.cjs → chunk-254QK722.cjs} +7 -7
  29. package/dist/chunk-254QK722.cjs.map +1 -0
  30. package/dist/{chunk-VPIYTQCV.cjs → chunk-2I4IRQQG.cjs} +12 -5
  31. package/dist/chunk-2I4IRQQG.cjs.map +1 -0
  32. package/dist/chunk-2X54ZLT6.js +874 -0
  33. package/dist/chunk-2X54ZLT6.js.map +1 -0
  34. package/dist/{chunk-5MCBWTIF.cjs → chunk-32ZCJOSR.cjs} +4 -4
  35. package/dist/{chunk-5MCBWTIF.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
  36. package/dist/chunk-3YBS4WUQ.js +52 -0
  37. package/dist/chunk-3YBS4WUQ.js.map +1 -0
  38. package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
  39. package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
  40. package/dist/chunk-434L5RYF.js +314 -0
  41. package/dist/chunk-434L5RYF.js.map +1 -0
  42. package/dist/{chunk-TPWKM7JH.js → chunk-43K7OQ3E.js} +3 -3
  43. package/dist/{chunk-TPWKM7JH.js.map → chunk-43K7OQ3E.js.map} +1 -1
  44. package/dist/chunk-47P5QLX4.cjs +42 -0
  45. package/dist/chunk-47P5QLX4.cjs.map +1 -0
  46. package/dist/chunk-4IS3QCOQ.cjs +453 -0
  47. package/dist/chunk-4IS3QCOQ.cjs.map +1 -0
  48. package/dist/chunk-4NCDU5IG.cjs +56 -0
  49. package/dist/chunk-4NCDU5IG.cjs.map +1 -0
  50. package/dist/chunk-4ZB7RSMY.cjs +306 -0
  51. package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
  52. package/dist/chunk-522WJIVI.js +99 -0
  53. package/dist/chunk-522WJIVI.js.map +1 -0
  54. package/dist/chunk-56VTM4OX.js +261 -0
  55. package/dist/chunk-56VTM4OX.js.map +1 -0
  56. package/dist/chunk-5HKZR6UG.js +248 -0
  57. package/dist/chunk-5HKZR6UG.js.map +1 -0
  58. package/dist/chunk-6BNZLN4B.cjs +548 -0
  59. package/dist/chunk-6BNZLN4B.cjs.map +1 -0
  60. package/dist/chunk-6N7NMOSV.js +233 -0
  61. package/dist/chunk-6N7NMOSV.js.map +1 -0
  62. package/dist/chunk-6TTCZY3P.cjs +4 -0
  63. package/dist/chunk-6TTCZY3P.cjs.map +1 -0
  64. package/dist/{chunk-YQDA366U.js → chunk-753ENNB6.js} +2 -2
  65. package/dist/{chunk-YQDA366U.js.map → chunk-753ENNB6.js.map} +1 -1
  66. package/dist/{chunk-N6IY47YA.cjs → chunk-7C5W744U.cjs} +8 -8
  67. package/dist/{chunk-N6IY47YA.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
  68. package/dist/chunk-7E46YDOT.cjs +122 -0
  69. package/dist/chunk-7E46YDOT.cjs.map +1 -0
  70. package/dist/chunk-7HUTR6RX.js +178 -0
  71. package/dist/chunk-7HUTR6RX.js.map +1 -0
  72. package/dist/chunk-7IRTD4JT.cjs +61 -0
  73. package/dist/chunk-7IRTD4JT.cjs.map +1 -0
  74. package/dist/{chunk-KZFBQ7GY.js → chunk-7QW6TU4X.js} +3 -3
  75. package/dist/{chunk-KZFBQ7GY.js.map → chunk-7QW6TU4X.js.map} +1 -1
  76. package/dist/{chunk-MWVW4APN.cjs → chunk-7UTBDFFL.cjs} +4 -4
  77. package/dist/{chunk-MWVW4APN.cjs.map → chunk-7UTBDFFL.cjs.map} +1 -1
  78. package/dist/chunk-7WJ6MBF5.cjs +47 -0
  79. package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
  80. package/dist/{chunk-FJ7YPVKV.js → chunk-7X6R3JIA.js} +3 -3
  81. package/dist/{chunk-FJ7YPVKV.js.map → chunk-7X6R3JIA.js.map} +1 -1
  82. package/dist/chunk-A4W5CSK7.cjs +216 -0
  83. package/dist/chunk-A4W5CSK7.cjs.map +1 -0
  84. package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
  85. package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
  86. package/dist/chunk-AJPFQF3H.cjs +896 -0
  87. package/dist/chunk-AJPFQF3H.cjs.map +1 -0
  88. package/dist/chunk-AMYFRY7K.js +3 -0
  89. package/dist/chunk-AMYFRY7K.js.map +1 -0
  90. package/dist/{chunk-VNYW4C4J.cjs → chunk-ANMX7YDL.cjs} +4 -84
  91. package/dist/chunk-ANMX7YDL.cjs.map +1 -0
  92. package/dist/chunk-ARIJ5OHW.cjs +139 -0
  93. package/dist/chunk-ARIJ5OHW.cjs.map +1 -0
  94. package/dist/{chunk-DVOQ3JNO.js → chunk-B4CKCNWD.js} +16 -8
  95. package/dist/chunk-B4CKCNWD.js.map +1 -0
  96. package/dist/chunk-BJ6ABRSQ.cjs +256 -0
  97. package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
  98. package/dist/chunk-BM35CACB.js +148 -0
  99. package/dist/chunk-BM35CACB.js.map +1 -0
  100. package/dist/{chunk-G3JX3UAU.cjs → chunk-BWSZ2BHJ.cjs} +6 -6
  101. package/dist/{chunk-G3JX3UAU.cjs.map → chunk-BWSZ2BHJ.cjs.map} +1 -1
  102. package/dist/chunk-BXRQ6HEP.cjs +4 -0
  103. package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
  104. package/dist/{chunk-SGFYA22I.cjs → chunk-C77FAR3F.cjs} +8 -8
  105. package/dist/{chunk-SGFYA22I.cjs.map → chunk-C77FAR3F.cjs.map} +1 -1
  106. package/dist/chunk-CBBKWRLG.js +213 -0
  107. package/dist/chunk-CBBKWRLG.js.map +1 -0
  108. package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
  109. package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
  110. package/dist/chunk-CLQW724U.cjs +271 -0
  111. package/dist/chunk-CLQW724U.cjs.map +1 -0
  112. package/dist/chunk-CPDNX3LS.cjs +47 -0
  113. package/dist/chunk-CPDNX3LS.cjs.map +1 -0
  114. package/dist/chunk-CVNPNZMX.js +44 -0
  115. package/dist/chunk-CVNPNZMX.js.map +1 -0
  116. package/dist/{chunk-2YCERQWC.js → chunk-CVXESGXJ.js} +10 -9
  117. package/dist/chunk-CVXESGXJ.js.map +1 -0
  118. package/dist/chunk-DGHS5IVD.js +305 -0
  119. package/dist/chunk-DGHS5IVD.js.map +1 -0
  120. package/dist/chunk-DHGCLPFZ.js +91 -0
  121. package/dist/chunk-DHGCLPFZ.js.map +1 -0
  122. package/dist/{chunk-GD7EBGC4.cjs → chunk-DHU3FFC3.cjs} +49 -19
  123. package/dist/chunk-DHU3FFC3.cjs.map +1 -0
  124. package/dist/chunk-DO2YN46R.cjs +201 -0
  125. package/dist/chunk-DO2YN46R.cjs.map +1 -0
  126. package/dist/chunk-DVDT7TX7.js +151 -0
  127. package/dist/chunk-DVDT7TX7.js.map +1 -0
  128. package/dist/chunk-DXEPYK3I.cjs +92 -0
  129. package/dist/chunk-DXEPYK3I.cjs.map +1 -0
  130. package/dist/{chunk-X4XPNTCZ.cjs → chunk-DZ3JTMKM.cjs} +136 -58
  131. package/dist/chunk-DZ3JTMKM.cjs.map +1 -0
  132. package/dist/chunk-EACNRR3C.cjs +4 -0
  133. package/dist/chunk-EACNRR3C.cjs.map +1 -0
  134. package/dist/{chunk-ZGRCSNPK.js → chunk-EEOGIGIA.js} +4 -4
  135. package/dist/{chunk-ZGRCSNPK.js.map → chunk-EEOGIGIA.js.map} +1 -1
  136. package/dist/chunk-EPCUPHEO.js +193 -0
  137. package/dist/chunk-EPCUPHEO.js.map +1 -0
  138. package/dist/{chunk-7ZXAQTV4.cjs → chunk-ERACGSDY.cjs} +8 -8
  139. package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
  140. package/dist/{chunk-OD47TTAW.cjs → chunk-F2FOG4EG.cjs} +9 -9
  141. package/dist/{chunk-OD47TTAW.cjs.map → chunk-F2FOG4EG.cjs.map} +1 -1
  142. package/dist/chunk-F3EWRDIT.js +312 -0
  143. package/dist/chunk-F3EWRDIT.js.map +1 -0
  144. package/dist/{chunk-XCP454Q6.js → chunk-F4N67NAF.js} +12 -3
  145. package/dist/chunk-F4N67NAF.js.map +1 -0
  146. package/dist/{chunk-WGPLUCBD.js → chunk-F6W62K4J.js} +4 -4
  147. package/dist/{chunk-WGPLUCBD.js.map → chunk-F6W62K4J.js.map} +1 -1
  148. package/dist/chunk-FBCDYTWM.js +385 -0
  149. package/dist/chunk-FBCDYTWM.js.map +1 -0
  150. package/dist/{chunk-V7D3YGUV.js → chunk-FGLIP6YR.js} +4 -4
  151. package/dist/{chunk-V7D3YGUV.js.map → chunk-FGLIP6YR.js.map} +1 -1
  152. package/dist/{chunk-VU6UTJRM.js → chunk-FIKO4WR6.js} +3 -3
  153. package/dist/{chunk-VU6UTJRM.js.map → chunk-FIKO4WR6.js.map} +1 -1
  154. package/dist/chunk-FSGJXCBG.cjs +318 -0
  155. package/dist/chunk-FSGJXCBG.cjs.map +1 -0
  156. package/dist/chunk-FSWHZY3T.cjs +328 -0
  157. package/dist/chunk-FSWHZY3T.cjs.map +1 -0
  158. package/dist/chunk-FTEZNCRI.js +29 -0
  159. package/dist/chunk-FTEZNCRI.js.map +1 -0
  160. package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
  161. package/dist/chunk-GF2BE4FB.cjs.map +1 -0
  162. package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
  163. package/dist/chunk-GKDHMNUA.cjs.map +1 -0
  164. package/dist/chunk-GM32IDVL.cjs +356 -0
  165. package/dist/chunk-GM32IDVL.cjs.map +1 -0
  166. package/dist/chunk-GVM6DTR5.js +90 -0
  167. package/dist/chunk-GVM6DTR5.js.map +1 -0
  168. package/dist/{chunk-SQHMGT4W.js → chunk-GW4RFJZ5.js} +7 -7
  169. package/dist/chunk-GW4RFJZ5.js.map +1 -0
  170. package/dist/chunk-GY5SP4ST.js +3 -0
  171. package/dist/chunk-GY5SP4ST.js.map +1 -0
  172. package/dist/chunk-H2Y7HZV5.js +3 -0
  173. package/dist/chunk-H2Y7HZV5.js.map +1 -0
  174. package/dist/chunk-H3P7POFC.cjs +337 -0
  175. package/dist/chunk-H3P7POFC.cjs.map +1 -0
  176. package/dist/{chunk-JID7AZTO.cjs → chunk-H3ROMJYI.cjs} +4 -4
  177. package/dist/{chunk-JID7AZTO.cjs.map → chunk-H3ROMJYI.cjs.map} +1 -1
  178. package/dist/{chunk-462XSCP3.cjs → chunk-HCIXGFWR.cjs} +4 -4
  179. package/dist/{chunk-462XSCP3.cjs.map → chunk-HCIXGFWR.cjs.map} +1 -1
  180. package/dist/{chunk-H4ZXMQQW.js → chunk-HDY7YQFX.js} +3 -3
  181. package/dist/{chunk-H4ZXMQQW.js.map → chunk-HDY7YQFX.js.map} +1 -1
  182. package/dist/chunk-HNFFFFYH.cjs +114 -0
  183. package/dist/chunk-HNFFFFYH.cjs.map +1 -0
  184. package/dist/chunk-HNXLLDPN.js +25 -0
  185. package/dist/chunk-HNXLLDPN.js.map +1 -0
  186. package/dist/{chunk-NV2CWBI2.cjs → chunk-IEY3ZJIT.cjs} +12 -3
  187. package/dist/chunk-IEY3ZJIT.cjs.map +1 -0
  188. package/dist/{chunk-3QEVGSFG.cjs → chunk-IGDO62KR.cjs} +5 -5
  189. package/dist/{chunk-3QEVGSFG.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
  190. package/dist/chunk-IT775BYG.js +179 -0
  191. package/dist/chunk-IT775BYG.js.map +1 -0
  192. package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
  193. package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
  194. package/dist/chunk-IWRBJHO3.cjs +51 -0
  195. package/dist/chunk-IWRBJHO3.cjs.map +1 -0
  196. package/dist/{chunk-VILW53UZ.js → chunk-JMAZ2GKT.js} +3 -3
  197. package/dist/{chunk-VILW53UZ.js.map → chunk-JMAZ2GKT.js.map} +1 -1
  198. package/dist/{chunk-WWJIW2IH.cjs → chunk-JSXIB6EJ.cjs} +4 -4
  199. package/dist/{chunk-WWJIW2IH.cjs.map → chunk-JSXIB6EJ.cjs.map} +1 -1
  200. package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
  201. package/dist/chunk-JUJGWUAN.js.map +1 -0
  202. package/dist/{chunk-FXO5ARBB.cjs → chunk-KDW6BD4O.cjs} +4 -4
  203. package/dist/{chunk-FXO5ARBB.cjs.map → chunk-KDW6BD4O.cjs.map} +1 -1
  204. package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
  205. package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
  206. package/dist/{chunk-XEAT7XJG.cjs → chunk-KQ6GLYFZ.cjs} +29 -13
  207. package/dist/chunk-KQ6GLYFZ.cjs.map +1 -0
  208. package/dist/chunk-L6K4PRZK.cjs +4 -0
  209. package/dist/chunk-L6K4PRZK.cjs.map +1 -0
  210. package/dist/{chunk-7ZDPD5ZX.cjs → chunk-LC3JL2HB.cjs} +11 -7
  211. package/dist/chunk-LC3JL2HB.cjs.map +1 -0
  212. package/dist/{chunk-P7UMS4E6.cjs → chunk-LC7PVBXH.cjs} +16 -8
  213. package/dist/chunk-LC7PVBXH.cjs.map +1 -0
  214. package/dist/{chunk-Y5HFM7LO.js → chunk-LDBNUJB7.js} +5 -5
  215. package/dist/{chunk-Y5HFM7LO.js.map → chunk-LDBNUJB7.js.map} +1 -1
  216. package/dist/chunk-LRAAJRE7.cjs +2707 -0
  217. package/dist/chunk-LRAAJRE7.cjs.map +1 -0
  218. package/dist/chunk-LUPRGPKP.js +2540 -0
  219. package/dist/chunk-LUPRGPKP.js.map +1 -0
  220. package/dist/chunk-M3VPGJMV.js +283 -0
  221. package/dist/chunk-M3VPGJMV.js.map +1 -0
  222. package/dist/{chunk-VKELAMAZ.js → chunk-N54FYWG6.js} +27 -11
  223. package/dist/chunk-N54FYWG6.js.map +1 -0
  224. package/dist/chunk-N5JDL4VE.js +3 -0
  225. package/dist/chunk-N5JDL4VE.js.map +1 -0
  226. package/dist/{chunk-2QKBTPUC.cjs → chunk-NAH65KPK.cjs} +8 -8
  227. package/dist/{chunk-2QKBTPUC.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
  228. package/dist/{chunk-PYJDVWXM.js → chunk-NUB5HRKS.js} +3 -3
  229. package/dist/{chunk-PYJDVWXM.js.map → chunk-NUB5HRKS.js.map} +1 -1
  230. package/dist/{chunk-WNZAYBVB.cjs → chunk-O6BJMVGT.cjs} +48 -48
  231. package/dist/{chunk-WNZAYBVB.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
  232. package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
  233. package/dist/chunk-O6XDA3SI.js.map +1 -0
  234. package/dist/chunk-OIF34LEN.cjs +425 -0
  235. package/dist/chunk-OIF34LEN.cjs.map +1 -0
  236. package/dist/chunk-OIMXMPH2.cjs +218 -0
  237. package/dist/chunk-OIMXMPH2.cjs.map +1 -0
  238. package/dist/{chunk-J5CSLNCN.cjs → chunk-OODVC2UD.cjs} +2 -2
  239. package/dist/{chunk-J5CSLNCN.cjs.map → chunk-OODVC2UD.cjs.map} +1 -1
  240. package/dist/{chunk-ACCAXVOG.js → chunk-OSTSZDQC.js} +134 -56
  241. package/dist/chunk-OSTSZDQC.js.map +1 -0
  242. package/dist/{chunk-LL6IWKI3.js → chunk-OW3SQJ7P.js} +3 -3
  243. package/dist/{chunk-LL6IWKI3.js.map → chunk-OW3SQJ7P.js.map} +1 -1
  244. package/dist/chunk-P22YCUVM.cjs +4 -0
  245. package/dist/chunk-P22YCUVM.cjs.map +1 -0
  246. package/dist/{chunk-CEQJGUAS.js → chunk-P4E3K3ND.js} +12 -5
  247. package/dist/chunk-P4E3K3ND.js.map +1 -0
  248. package/dist/{chunk-5GUOOLPR.cjs → chunk-P5CMZZRZ.cjs} +5 -5
  249. package/dist/{chunk-5GUOOLPR.cjs.map → chunk-P5CMZZRZ.cjs.map} +1 -1
  250. package/dist/{chunk-TMMVIUUN.js → chunk-P7D7BYFE.js} +4 -4
  251. package/dist/{chunk-TMMVIUUN.js.map → chunk-P7D7BYFE.js.map} +1 -1
  252. package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
  253. package/dist/chunk-PJEL5ZZV.js.map +1 -0
  254. package/dist/chunk-PYI2IWNX.cjs +281 -0
  255. package/dist/chunk-PYI2IWNX.cjs.map +1 -0
  256. package/dist/chunk-Q3YVLO52.cjs +174 -0
  257. package/dist/chunk-Q3YVLO52.cjs.map +1 -0
  258. package/dist/{chunk-WNM7IZJ7.js → chunk-QJ2L5RU6.js} +7 -7
  259. package/dist/{chunk-WNM7IZJ7.js.map → chunk-QJ2L5RU6.js.map} +1 -1
  260. package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
  261. package/dist/chunk-QX6AAVDE.cjs.map +1 -0
  262. package/dist/{chunk-UV2FVNWT.cjs → chunk-RIUQP2QS.cjs} +5 -5
  263. package/dist/{chunk-UV2FVNWT.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
  264. package/dist/chunk-RLVYWUXG.js +115 -0
  265. package/dist/chunk-RLVYWUXG.js.map +1 -0
  266. package/dist/{chunk-22CYDCXA.js → chunk-RM2HPQIC.js} +105 -14
  267. package/dist/chunk-RM2HPQIC.js.map +1 -0
  268. package/dist/{chunk-DEDN5HAG.js → chunk-RSJGTWLM.js} +3 -3
  269. package/dist/{chunk-DEDN5HAG.js.map → chunk-RSJGTWLM.js.map} +1 -1
  270. package/dist/{chunk-6EN3IQQI.cjs → chunk-RV45J2ZT.cjs} +8 -8
  271. package/dist/{chunk-6EN3IQQI.cjs.map → chunk-RV45J2ZT.cjs.map} +1 -1
  272. package/dist/chunk-RZSSQ7AT.js +333 -0
  273. package/dist/chunk-RZSSQ7AT.js.map +1 -0
  274. package/dist/{chunk-ENKFJJZX.js → chunk-S2JZL4JC.js} +6 -6
  275. package/dist/{chunk-ENKFJJZX.js.map → chunk-S2JZL4JC.js.map} +1 -1
  276. package/dist/{chunk-ELPW32ZI.cjs → chunk-S4XCPDEO.cjs} +60 -59
  277. package/dist/chunk-S4XCPDEO.cjs.map +1 -0
  278. package/dist/{chunk-OE5CKRUC.js → chunk-SACHTD7B.js} +34 -4
  279. package/dist/chunk-SACHTD7B.js.map +1 -0
  280. package/dist/{chunk-U42F3HLE.cjs → chunk-SAGJHL2Z.cjs} +275 -5
  281. package/dist/chunk-SAGJHL2Z.cjs.map +1 -0
  282. package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
  283. package/dist/chunk-SHBCUXFS.cjs.map +1 -0
  284. package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
  285. package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
  286. package/dist/{chunk-IX6KFB3K.cjs → chunk-SW2E7XKY.cjs} +9 -9
  287. package/dist/{chunk-IX6KFB3K.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
  288. package/dist/chunk-SZSRGUVO.js +402 -0
  289. package/dist/chunk-SZSRGUVO.js.map +1 -0
  290. package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
  291. package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
  292. package/dist/{chunk-JI244Y7C.js → chunk-T5NOFXOL.js} +275 -5
  293. package/dist/chunk-T5NOFXOL.js.map +1 -0
  294. package/dist/{chunk-2IZLKPUW.js → chunk-THLIL6PY.js} +3 -3
  295. package/dist/{chunk-2IZLKPUW.js.map → chunk-THLIL6PY.js.map} +1 -1
  296. package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
  297. package/dist/chunk-TI3TQQ7F.js.map +1 -0
  298. package/dist/chunk-TVU4KB27.cjs +353 -0
  299. package/dist/chunk-TVU4KB27.cjs.map +1 -0
  300. package/dist/{chunk-5JJ2DAE4.js → chunk-TWQSMUE6.js} +7 -3
  301. package/dist/chunk-TWQSMUE6.js.map +1 -0
  302. package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
  303. package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
  304. package/dist/{chunk-3QGS6CXD.js → chunk-UJDWFDKE.js} +3 -3
  305. package/dist/{chunk-3QGS6CXD.js.map → chunk-UJDWFDKE.js.map} +1 -1
  306. package/dist/chunk-UNFDIBKJ.js +258 -0
  307. package/dist/chunk-UNFDIBKJ.js.map +1 -0
  308. package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
  309. package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
  310. package/dist/chunk-UTIPENPW.cjs +286 -0
  311. package/dist/chunk-UTIPENPW.cjs.map +1 -0
  312. package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
  313. package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
  314. package/dist/chunk-VEE46VTX.js +166 -0
  315. package/dist/chunk-VEE46VTX.js.map +1 -0
  316. package/dist/chunk-VFFV7EMT.cjs +188 -0
  317. package/dist/chunk-VFFV7EMT.cjs.map +1 -0
  318. package/dist/chunk-VINZZQBD.cjs +323 -0
  319. package/dist/chunk-VINZZQBD.cjs.map +1 -0
  320. package/dist/chunk-VPTASZ2O.cjs +171 -0
  321. package/dist/chunk-VPTASZ2O.cjs.map +1 -0
  322. package/dist/{chunk-P2CA3XGI.js → chunk-VSRO4PAI.js} +23 -5
  323. package/dist/chunk-VSRO4PAI.js.map +1 -0
  324. package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
  325. package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
  326. package/dist/{chunk-XI34EGK5.cjs → chunk-VV2U36T6.cjs} +9 -9
  327. package/dist/{chunk-XI34EGK5.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
  328. package/dist/{chunk-VPWJCJCX.cjs → chunk-VXW7D5LR.cjs} +26 -8
  329. package/dist/chunk-VXW7D5LR.cjs.map +1 -0
  330. package/dist/chunk-W3HXHIDO.cjs +2573 -0
  331. package/dist/chunk-W3HXHIDO.cjs.map +1 -0
  332. package/dist/{chunk-GOALNQZ2.js → chunk-WFBUBT54.js} +4 -83
  333. package/dist/chunk-WFBUBT54.js.map +1 -0
  334. package/dist/chunk-WFL4N5PC.js +283 -0
  335. package/dist/chunk-WFL4N5PC.js.map +1 -0
  336. package/dist/chunk-WQHBMZSC.js +295 -0
  337. package/dist/chunk-WQHBMZSC.js.map +1 -0
  338. package/dist/chunk-X3RSNAMX.js +195 -0
  339. package/dist/chunk-X3RSNAMX.js.map +1 -0
  340. package/dist/chunk-X5JOEZVR.js +525 -0
  341. package/dist/chunk-X5JOEZVR.js.map +1 -0
  342. package/dist/chunk-XBAAHOCP.js +3 -0
  343. package/dist/chunk-XBAAHOCP.js.map +1 -0
  344. package/dist/chunk-XDIMTPZU.cjs +202 -0
  345. package/dist/chunk-XDIMTPZU.cjs.map +1 -0
  346. package/dist/chunk-XDU65GLW.js +21 -0
  347. package/dist/chunk-XDU65GLW.js.map +1 -0
  348. package/dist/chunk-XI74P5F2.cjs +424 -0
  349. package/dist/chunk-XI74P5F2.cjs.map +1 -0
  350. package/dist/chunk-XNPDZANN.cjs +238 -0
  351. package/dist/chunk-XNPDZANN.cjs.map +1 -0
  352. package/dist/{chunk-WIAQQNFU.cjs → chunk-XRVMYT5G.cjs} +106 -13
  353. package/dist/chunk-XRVMYT5G.cjs.map +1 -0
  354. package/dist/chunk-XVW5DPPP.js +429 -0
  355. package/dist/chunk-XVW5DPPP.js.map +1 -0
  356. package/dist/chunk-XXA4NZUC.js +3 -0
  357. package/dist/chunk-XXA4NZUC.js.map +1 -0
  358. package/dist/chunk-Y424YL55.js +59 -0
  359. package/dist/chunk-Y424YL55.js.map +1 -0
  360. package/dist/chunk-Y4QNLW7W.js +300 -0
  361. package/dist/chunk-Y4QNLW7W.js.map +1 -0
  362. package/dist/chunk-Y7ZJZLJY.js +2657 -0
  363. package/dist/chunk-Y7ZJZLJY.js.map +1 -0
  364. package/dist/chunk-YGS2TRMP.js +38 -0
  365. package/dist/chunk-YGS2TRMP.js.map +1 -0
  366. package/dist/chunk-YUMOM3KE.js +167 -0
  367. package/dist/chunk-YUMOM3KE.js.map +1 -0
  368. package/dist/chunk-YW2AKBLS.cjs +23 -0
  369. package/dist/chunk-YW2AKBLS.cjs.map +1 -0
  370. package/dist/chunk-ZNUMOJOI.cjs +4 -0
  371. package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
  372. package/dist/chunk-ZSNFL736.cjs +306 -0
  373. package/dist/chunk-ZSNFL736.cjs.map +1 -0
  374. package/dist/components/Accordion/index.cjs +2 -2
  375. package/dist/components/Accordion/index.d.cts +6 -0
  376. package/dist/components/Accordion/index.d.ts +6 -0
  377. package/dist/components/Accordion/index.js +1 -1
  378. package/dist/components/ActionPlan/index.cjs +34 -0
  379. package/dist/components/ActionPlan/index.cjs.map +1 -0
  380. package/dist/components/ActionPlan/index.d.cts +65 -0
  381. package/dist/components/ActionPlan/index.d.ts +65 -0
  382. package/dist/components/ActionPlan/index.js +21 -0
  383. package/dist/components/ActionPlan/index.js.map +1 -0
  384. package/dist/components/ActivityFeed/index.cjs +31 -0
  385. package/dist/components/ActivityFeed/index.cjs.map +1 -0
  386. package/dist/components/ActivityFeed/index.d.cts +99 -0
  387. package/dist/components/ActivityFeed/index.d.ts +99 -0
  388. package/dist/components/ActivityFeed/index.js +18 -0
  389. package/dist/components/ActivityFeed/index.js.map +1 -0
  390. package/dist/components/Alert/index.d.cts +1 -1
  391. package/dist/components/Alert/index.d.ts +1 -1
  392. package/dist/components/AlertDialog/index.cjs +19 -5
  393. package/dist/components/AlertDialog/index.d.cts +94 -16
  394. package/dist/components/AlertDialog/index.d.ts +94 -16
  395. package/dist/components/AlertDialog/index.js +6 -4
  396. package/dist/components/AssociationList/index.cjs +29 -0
  397. package/dist/components/AssociationList/index.cjs.map +1 -0
  398. package/dist/components/AssociationList/index.d.cts +50 -0
  399. package/dist/components/AssociationList/index.d.ts +50 -0
  400. package/dist/components/AssociationList/index.js +16 -0
  401. package/dist/components/AssociationList/index.js.map +1 -0
  402. package/dist/components/AudioRecorder/index.d.cts +2 -2
  403. package/dist/components/AudioRecorder/index.d.ts +2 -2
  404. package/dist/components/Autocomplete/index.d.cts +8 -2
  405. package/dist/components/Autocomplete/index.d.ts +8 -2
  406. package/dist/components/Avatar/index.cjs +9 -7
  407. package/dist/components/Avatar/index.d.cts +46 -15
  408. package/dist/components/Avatar/index.d.ts +46 -15
  409. package/dist/components/Avatar/index.js +3 -1
  410. package/dist/components/AvatarGroup/index.cjs +20 -0
  411. package/dist/components/AvatarGroup/index.cjs.map +1 -0
  412. package/dist/components/AvatarGroup/index.d.cts +57 -0
  413. package/dist/components/AvatarGroup/index.d.ts +57 -0
  414. package/dist/components/AvatarGroup/index.js +7 -0
  415. package/dist/components/AvatarGroup/index.js.map +1 -0
  416. package/dist/components/Badge/index.cjs +3 -3
  417. package/dist/components/Badge/index.d.cts +16 -2
  418. package/dist/components/Badge/index.d.ts +16 -2
  419. package/dist/components/Badge/index.js +1 -1
  420. package/dist/components/BoardView/index.cjs +24 -0
  421. package/dist/components/BoardView/index.cjs.map +1 -0
  422. package/dist/components/BoardView/index.d.cts +41 -0
  423. package/dist/components/BoardView/index.d.ts +41 -0
  424. package/dist/components/BoardView/index.js +7 -0
  425. package/dist/components/BoardView/index.js.map +1 -0
  426. package/dist/components/Button/index.cjs +5 -3
  427. package/dist/components/Button/index.d.cts +2 -1
  428. package/dist/components/Button/index.d.ts +2 -1
  429. package/dist/components/Button/index.js +3 -1
  430. package/dist/components/CalendarHeatmap/index.cjs +18 -0
  431. package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
  432. package/dist/components/CalendarHeatmap/index.d.cts +47 -0
  433. package/dist/components/CalendarHeatmap/index.d.ts +47 -0
  434. package/dist/components/CalendarHeatmap/index.js +5 -0
  435. package/dist/components/CalendarHeatmap/index.js.map +1 -0
  436. package/dist/components/CalendarView/index.cjs +24 -0
  437. package/dist/components/CalendarView/index.cjs.map +1 -0
  438. package/dist/components/CalendarView/index.d.cts +39 -0
  439. package/dist/components/CalendarView/index.d.ts +39 -0
  440. package/dist/components/CalendarView/index.js +11 -0
  441. package/dist/components/CalendarView/index.js.map +1 -0
  442. package/dist/components/Card/index.d.cts +3 -3
  443. package/dist/components/Card/index.d.ts +3 -3
  444. package/dist/components/ClampedText/index.cjs +3 -2
  445. package/dist/components/ClampedText/index.js +2 -1
  446. package/dist/components/CollabStatus/index.cjs +6 -4
  447. package/dist/components/CollabStatus/index.d.cts +11 -0
  448. package/dist/components/CollabStatus/index.d.ts +11 -0
  449. package/dist/components/CollabStatus/index.js +3 -1
  450. package/dist/components/Collapsible/index.cjs +6 -6
  451. package/dist/components/Collapsible/index.d.cts +6 -0
  452. package/dist/components/Collapsible/index.d.ts +6 -0
  453. package/dist/components/Collapsible/index.js +3 -3
  454. package/dist/components/CompletenessMeter/index.cjs +23 -0
  455. package/dist/components/CompletenessMeter/index.cjs.map +1 -0
  456. package/dist/components/CompletenessMeter/index.d.cts +52 -0
  457. package/dist/components/CompletenessMeter/index.d.ts +52 -0
  458. package/dist/components/CompletenessMeter/index.js +6 -0
  459. package/dist/components/CompletenessMeter/index.js.map +1 -0
  460. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  461. package/dist/components/CountryCodeDropdown/index.js +2 -2
  462. package/dist/components/CustomizableDashboard/index.cjs +12 -10
  463. package/dist/components/CustomizableDashboard/index.js +5 -3
  464. package/dist/components/DateInput/index.d.cts +36 -4
  465. package/dist/components/DateInput/index.d.ts +36 -4
  466. package/dist/components/Dropdown/index.cjs +11 -10
  467. package/dist/components/Dropdown/index.d.cts +2 -1
  468. package/dist/components/Dropdown/index.d.ts +2 -1
  469. package/dist/components/Dropdown/index.js +4 -3
  470. package/dist/components/EmailEditor/index.cjs +67 -0
  471. package/dist/components/EmailEditor/index.cjs.map +1 -0
  472. package/dist/components/EmailEditor/index.d.cts +347 -0
  473. package/dist/components/EmailEditor/index.d.ts +347 -0
  474. package/dist/components/EmailEditor/index.js +26 -0
  475. package/dist/components/EmailEditor/index.js.map +1 -0
  476. package/dist/components/FieldHistory/index.cjs +34 -0
  477. package/dist/components/FieldHistory/index.cjs.map +1 -0
  478. package/dist/components/FieldHistory/index.d.cts +66 -0
  479. package/dist/components/FieldHistory/index.d.ts +66 -0
  480. package/dist/components/FieldHistory/index.js +21 -0
  481. package/dist/components/FieldHistory/index.js.map +1 -0
  482. package/dist/components/FloatingWindow/index.cjs +6 -4
  483. package/dist/components/FloatingWindow/index.js +4 -2
  484. package/dist/components/GanttView/index.cjs +20 -0
  485. package/dist/components/GanttView/index.cjs.map +1 -0
  486. package/dist/components/GanttView/index.d.cts +36 -0
  487. package/dist/components/GanttView/index.d.ts +36 -0
  488. package/dist/components/GanttView/index.js +7 -0
  489. package/dist/components/GanttView/index.js.map +1 -0
  490. package/dist/components/GlossaryTooltip/index.cjs +3 -3
  491. package/dist/components/GlossaryTooltip/index.js +2 -2
  492. package/dist/components/InlineEdit/index.cjs +20 -0
  493. package/dist/components/InlineEdit/index.cjs.map +1 -0
  494. package/dist/components/InlineEdit/index.d.cts +56 -0
  495. package/dist/components/InlineEdit/index.d.ts +56 -0
  496. package/dist/components/InlineEdit/index.js +7 -0
  497. package/dist/components/InlineEdit/index.js.map +1 -0
  498. package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
  499. package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
  500. package/dist/components/ListView/index.cjs +24 -0
  501. package/dist/components/ListView/index.cjs.map +1 -0
  502. package/dist/components/ListView/index.d.cts +124 -0
  503. package/dist/components/ListView/index.d.ts +124 -0
  504. package/dist/components/ListView/index.js +11 -0
  505. package/dist/components/ListView/index.js.map +1 -0
  506. package/dist/components/LogoUploader/index.cjs +18 -0
  507. package/dist/components/LogoUploader/index.cjs.map +1 -0
  508. package/dist/components/LogoUploader/index.d.cts +49 -0
  509. package/dist/components/LogoUploader/index.d.ts +49 -0
  510. package/dist/components/LogoUploader/index.js +5 -0
  511. package/dist/components/LogoUploader/index.js.map +1 -0
  512. package/dist/components/Markdown/index.cjs +21 -19
  513. package/dist/components/Markdown/index.js +9 -7
  514. package/dist/components/MediaEditor/index.cjs +16 -14
  515. package/dist/components/MediaEditor/index.d.cts +91 -2
  516. package/dist/components/MediaEditor/index.d.ts +91 -2
  517. package/dist/components/MediaEditor/index.js +11 -9
  518. package/dist/components/MediaFeed/index.cjs +29 -0
  519. package/dist/components/MediaFeed/index.cjs.map +1 -0
  520. package/dist/components/MediaFeed/index.d.cts +104 -0
  521. package/dist/components/MediaFeed/index.d.ts +104 -0
  522. package/dist/components/MediaFeed/index.js +20 -0
  523. package/dist/components/MediaFeed/index.js.map +1 -0
  524. package/dist/components/MediaPlayer/index.cjs +8 -6
  525. package/dist/components/MediaPlayer/index.d.cts +19 -1
  526. package/dist/components/MediaPlayer/index.d.ts +19 -1
  527. package/dist/components/MediaPlayer/index.js +5 -3
  528. package/dist/components/MegaMenu/index.cjs +7 -5
  529. package/dist/components/MegaMenu/index.js +4 -2
  530. package/dist/components/Modal/index.cjs +10 -10
  531. package/dist/components/Modal/index.js +2 -2
  532. package/dist/components/Pagination/index.d.cts +1 -1
  533. package/dist/components/Pagination/index.d.ts +1 -1
  534. package/dist/components/PhiMask/index.cjs +18 -0
  535. package/dist/components/PhiMask/index.cjs.map +1 -0
  536. package/dist/components/PhiMask/index.d.cts +45 -0
  537. package/dist/components/PhiMask/index.d.ts +45 -0
  538. package/dist/components/PhiMask/index.js +5 -0
  539. package/dist/components/PhiMask/index.js.map +1 -0
  540. package/dist/components/Progress/index.cjs +6 -6
  541. package/dist/components/Progress/index.d.cts +8 -2
  542. package/dist/components/Progress/index.d.ts +8 -2
  543. package/dist/components/Progress/index.js +1 -1
  544. package/dist/components/PropertyList/index.cjs +25 -0
  545. package/dist/components/PropertyList/index.cjs.map +1 -0
  546. package/dist/components/PropertyList/index.d.cts +87 -0
  547. package/dist/components/PropertyList/index.d.ts +87 -0
  548. package/dist/components/PropertyList/index.js +12 -0
  549. package/dist/components/PropertyList/index.js.map +1 -0
  550. package/dist/components/Q/index.d.cts +2 -2
  551. package/dist/components/Q/index.d.ts +2 -2
  552. package/dist/components/QuickAction/index.d.cts +1 -1
  553. package/dist/components/QuickAction/index.d.ts +1 -1
  554. package/dist/components/RadialExplorer/index.cjs +7 -5
  555. package/dist/components/RadialExplorer/index.js +6 -4
  556. package/dist/components/Rating/index.cjs +28 -0
  557. package/dist/components/Rating/index.cjs.map +1 -0
  558. package/dist/components/Rating/index.d.cts +85 -0
  559. package/dist/components/Rating/index.d.ts +85 -0
  560. package/dist/components/Rating/index.js +7 -0
  561. package/dist/components/Rating/index.js.map +1 -0
  562. package/dist/components/RecordButton/index.d.cts +1 -1
  563. package/dist/components/RecordButton/index.d.ts +1 -1
  564. package/dist/components/RecordHeader/index.cjs +29 -0
  565. package/dist/components/RecordHeader/index.cjs.map +1 -0
  566. package/dist/components/RecordHeader/index.d.cts +96 -0
  567. package/dist/components/RecordHeader/index.d.ts +96 -0
  568. package/dist/components/RecordHeader/index.js +16 -0
  569. package/dist/components/RecordHeader/index.js.map +1 -0
  570. package/dist/components/RecordLayout/index.cjs +21 -0
  571. package/dist/components/RecordLayout/index.cjs.map +1 -0
  572. package/dist/components/RecordLayout/index.d.cts +40 -0
  573. package/dist/components/RecordLayout/index.d.ts +40 -0
  574. package/dist/components/RecordLayout/index.js +8 -0
  575. package/dist/components/RecordLayout/index.js.map +1 -0
  576. package/dist/components/RichTextEditor/index.cjs +11 -8
  577. package/dist/components/RichTextEditor/index.d.cts +12 -2
  578. package/dist/components/RichTextEditor/index.d.ts +12 -2
  579. package/dist/components/RichTextEditor/index.js +8 -5
  580. package/dist/components/ScrollArea/index.d.cts +1 -1
  581. package/dist/components/ScrollArea/index.d.ts +1 -1
  582. package/dist/components/SectionSpyNav/index.cjs +5 -3
  583. package/dist/components/SectionSpyNav/index.js +4 -2
  584. package/dist/components/Select/index.cjs +4 -4
  585. package/dist/components/Select/index.d.cts +2 -2
  586. package/dist/components/Select/index.d.ts +2 -2
  587. package/dist/components/Select/index.js +2 -2
  588. package/dist/components/Skeleton/index.d.cts +1 -1
  589. package/dist/components/Skeleton/index.d.ts +1 -1
  590. package/dist/components/Slider/index.d.cts +2 -2
  591. package/dist/components/Slider/index.d.ts +2 -2
  592. package/dist/components/SliderCalculator/index.cjs +4 -4
  593. package/dist/components/SliderCalculator/index.js +2 -2
  594. package/dist/components/SourceTip/index.cjs +3 -3
  595. package/dist/components/SourceTip/index.js +2 -2
  596. package/dist/components/Spinner/index.d.cts +2 -2
  597. package/dist/components/Spinner/index.d.ts +2 -2
  598. package/dist/components/SuperChat/index.cjs +1300 -713
  599. package/dist/components/SuperChat/index.cjs.map +1 -1
  600. package/dist/components/SuperChat/index.d.cts +126 -8
  601. package/dist/components/SuperChat/index.d.ts +126 -8
  602. package/dist/components/SuperChat/index.js +1404 -817
  603. package/dist/components/SuperChat/index.js.map +1 -1
  604. package/dist/components/SuperChat/plugins/index.cjs +7 -6
  605. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  606. package/dist/components/SuperChat/plugins/index.d.cts +2 -3
  607. package/dist/components/SuperChat/plugins/index.d.ts +2 -3
  608. package/dist/components/SuperChat/plugins/index.js +6 -5
  609. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  610. package/dist/components/Tabs/index.cjs +9 -7
  611. package/dist/components/Tabs/index.d.cts +12 -1
  612. package/dist/components/Tabs/index.d.ts +12 -1
  613. package/dist/components/Tabs/index.js +3 -1
  614. package/dist/components/TagEditor/index.cjs +22 -0
  615. package/dist/components/TagEditor/index.cjs.map +1 -0
  616. package/dist/components/TagEditor/index.d.cts +46 -0
  617. package/dist/components/TagEditor/index.d.ts +46 -0
  618. package/dist/components/TagEditor/index.js +9 -0
  619. package/dist/components/TagEditor/index.js.map +1 -0
  620. package/dist/components/Text/index.d.cts +3 -3
  621. package/dist/components/Text/index.d.ts +3 -3
  622. package/dist/components/Textarea/index.d.cts +2 -2
  623. package/dist/components/Textarea/index.d.ts +2 -2
  624. package/dist/components/ThemeProvider/index.cjs +9 -9
  625. package/dist/components/ThemeProvider/index.d.cts +3 -1
  626. package/dist/components/ThemeProvider/index.d.ts +3 -1
  627. package/dist/components/ThemeProvider/index.js +3 -3
  628. package/dist/components/Tooltip/index.cjs +3 -3
  629. package/dist/components/Tooltip/index.js +2 -2
  630. package/dist/components/TranscriptView/index.d.cts +85 -4
  631. package/dist/components/TranscriptView/index.d.ts +85 -4
  632. package/dist/components/UserPicker/index.cjs +24 -0
  633. package/dist/components/UserPicker/index.cjs.map +1 -0
  634. package/dist/components/UserPicker/index.d.cts +60 -0
  635. package/dist/components/UserPicker/index.d.ts +60 -0
  636. package/dist/components/UserPicker/index.js +11 -0
  637. package/dist/components/UserPicker/index.js.map +1 -0
  638. package/dist/components/VideoCard/index.cjs +4 -4
  639. package/dist/components/VideoCard/index.js +2 -2
  640. package/dist/components/ViewSet/index.cjs +25 -0
  641. package/dist/components/ViewSet/index.cjs.map +1 -0
  642. package/dist/components/ViewSet/index.d.cts +201 -0
  643. package/dist/components/ViewSet/index.d.ts +201 -0
  644. package/dist/components/ViewSet/index.js +16 -0
  645. package/dist/components/ViewSet/index.js.map +1 -0
  646. package/dist/components/ViewSwitcher/index.cjs +20 -0
  647. package/dist/components/ViewSwitcher/index.cjs.map +1 -0
  648. package/dist/components/ViewSwitcher/index.d.cts +39 -0
  649. package/dist/components/ViewSwitcher/index.d.ts +39 -0
  650. package/dist/components/ViewSwitcher/index.js +7 -0
  651. package/dist/components/ViewSwitcher/index.js.map +1 -0
  652. package/dist/datavis.cjs +6 -4
  653. package/dist/datavis.cjs.map +1 -1
  654. package/dist/datavis.d.cts +167 -13
  655. package/dist/datavis.d.ts +167 -13
  656. package/dist/datavis.js +4 -2
  657. package/dist/datavis.js.map +1 -1
  658. package/dist/deck.cjs +3360 -0
  659. package/dist/deck.cjs.map +1 -0
  660. package/dist/deck.d.cts +712 -0
  661. package/dist/deck.d.ts +712 -0
  662. package/dist/deck.js +3316 -0
  663. package/dist/deck.js.map +1 -0
  664. package/dist/esheet.cjs +19 -16
  665. package/dist/esheet.cjs.map +1 -1
  666. package/dist/esheet.d.cts +183 -1
  667. package/dist/esheet.d.ts +183 -1
  668. package/dist/esheet.js +16 -13
  669. package/dist/esheet.js.map +1 -1
  670. package/dist/globe.cjs +2 -2
  671. package/dist/globe.js +1 -1
  672. package/dist/hooks/index.cjs +94 -35
  673. package/dist/hooks/index.d.cts +680 -36
  674. package/dist/hooks/index.d.ts +680 -36
  675. package/dist/hooks/index.js +10 -7
  676. package/dist/icons-wBacj6BW.d.cts +142 -0
  677. package/dist/icons-wBacj6BW.d.ts +142 -0
  678. package/dist/index.cjs +2215 -1321
  679. package/dist/index.cjs.map +1 -1
  680. package/dist/index.d.cts +10386 -628
  681. package/dist/index.d.ts +10386 -628
  682. package/dist/index.js +805 -360
  683. package/dist/index.js.map +1 -1
  684. package/dist/kerebron.cjs +58 -19
  685. package/dist/kerebron.cjs.map +1 -1
  686. package/dist/kerebron.css +115 -0
  687. package/dist/kerebron.d.cts +37 -0
  688. package/dist/kerebron.d.ts +37 -0
  689. package/dist/kerebron.js +58 -19
  690. package/dist/kerebron.js.map +1 -1
  691. package/dist/maps.cjs +160 -0
  692. package/dist/maps.cjs.map +1 -0
  693. package/dist/maps.d.cts +42 -0
  694. package/dist/maps.d.ts +42 -0
  695. package/dist/maps.js +138 -0
  696. package/dist/maps.js.map +1 -0
  697. package/dist/motion.cjs +7 -7
  698. package/dist/motion.d.cts +186 -2
  699. package/dist/motion.d.ts +186 -2
  700. package/dist/motion.js +2 -2
  701. package/dist/org-chart.cjs +1302 -0
  702. package/dist/org-chart.cjs.map +1 -0
  703. package/dist/org-chart.d.cts +164 -0
  704. package/dist/org-chart.d.ts +164 -0
  705. package/dist/org-chart.js +1277 -0
  706. package/dist/org-chart.js.map +1 -0
  707. package/dist/q.d.cts +25 -3
  708. package/dist/q.d.ts +25 -3
  709. package/dist/styles/effects.css +133 -0
  710. package/dist/styles/init.css +22 -3
  711. package/dist/styles.css +1 -1
  712. package/dist/tailwind-preset.cjs +4 -4
  713. package/dist/tailwind-preset.js +1 -1
  714. package/dist/templates.cjs +156 -0
  715. package/dist/templates.cjs.map +1 -0
  716. package/dist/templates.d.cts +734 -0
  717. package/dist/templates.d.ts +734 -0
  718. package/dist/templates.js +11 -0
  719. package/dist/templates.js.map +1 -0
  720. package/dist/types-CDeBNZiE.d.cts +92 -0
  721. package/dist/types-CDeBNZiE.d.ts +92 -0
  722. package/dist/types-Cx1FHLq2.d.cts +548 -0
  723. package/dist/types-Cx1FHLq2.d.ts +548 -0
  724. package/dist/types-DsdZvEI1.d.cts +92 -0
  725. package/dist/types-DsdZvEI1.d.ts +92 -0
  726. package/dist/utils/index.cjs +9 -9
  727. package/dist/utils/index.d.cts +13 -2
  728. package/dist/utils/index.d.ts +13 -2
  729. package/dist/utils/index.js +1 -1
  730. package/package.json +82 -13
  731. package/dist/Animated-XmH6k8pZ.d.cts +0 -188
  732. package/dist/Animated-XmH6k8pZ.d.ts +0 -188
  733. package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
  734. package/dist/CsvBlock-UWPMTLE2.js +0 -7
  735. package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
  736. package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
  737. package/dist/MedicationEditor-Bp4NLy7y.d.cts +0 -352
  738. package/dist/MedicationEditor-Bp4NLy7y.d.ts +0 -352
  739. package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
  740. package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
  741. package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
  742. package/dist/SurveyBlock-4DO62RBT.js +0 -7
  743. package/dist/chunk-22CYDCXA.js.map +0 -1
  744. package/dist/chunk-2YCERQWC.js.map +0 -1
  745. package/dist/chunk-3T7QGLNB.js.map +0 -1
  746. package/dist/chunk-5JJ2DAE4.js.map +0 -1
  747. package/dist/chunk-6HFFWEM3.cjs +0 -22
  748. package/dist/chunk-6HFFWEM3.cjs.map +0 -1
  749. package/dist/chunk-7ZDPD5ZX.cjs.map +0 -1
  750. package/dist/chunk-7ZVTLTJF.js +0 -109
  751. package/dist/chunk-7ZVTLTJF.js.map +0 -1
  752. package/dist/chunk-ACCAXVOG.js.map +0 -1
  753. package/dist/chunk-BMSG4NBH.js +0 -56
  754. package/dist/chunk-BMSG4NBH.js.map +0 -1
  755. package/dist/chunk-CEQJGUAS.js.map +0 -1
  756. package/dist/chunk-DVOQ3JNO.js.map +0 -1
  757. package/dist/chunk-E4IBHYJ7.cjs +0 -80
  758. package/dist/chunk-E4IBHYJ7.cjs.map +0 -1
  759. package/dist/chunk-ELPW32ZI.cjs.map +0 -1
  760. package/dist/chunk-GD7EBGC4.cjs.map +0 -1
  761. package/dist/chunk-GOALNQZ2.js.map +0 -1
  762. package/dist/chunk-HB7C7NB5.js +0 -20
  763. package/dist/chunk-HB7C7NB5.js.map +0 -1
  764. package/dist/chunk-HZ4MBUC3.js.map +0 -1
  765. package/dist/chunk-JEIW7BSV.cjs.map +0 -1
  766. package/dist/chunk-JHULS3EC.js +0 -130
  767. package/dist/chunk-JHULS3EC.js.map +0 -1
  768. package/dist/chunk-JI244Y7C.js.map +0 -1
  769. package/dist/chunk-JYZW2PZS.cjs.map +0 -1
  770. package/dist/chunk-KRU6IGV7.js.map +0 -1
  771. package/dist/chunk-NV2CWBI2.cjs.map +0 -1
  772. package/dist/chunk-OE5CKRUC.js.map +0 -1
  773. package/dist/chunk-P2CA3XGI.js.map +0 -1
  774. package/dist/chunk-P7UMS4E6.cjs.map +0 -1
  775. package/dist/chunk-SQHMGT4W.js.map +0 -1
  776. package/dist/chunk-SVSHA7XV.js.map +0 -1
  777. package/dist/chunk-U42F3HLE.cjs.map +0 -1
  778. package/dist/chunk-VKELAMAZ.js.map +0 -1
  779. package/dist/chunk-VNYW4C4J.cjs.map +0 -1
  780. package/dist/chunk-VOKVG3ER.js +0 -78
  781. package/dist/chunk-VOKVG3ER.js.map +0 -1
  782. package/dist/chunk-VPIYTQCV.cjs.map +0 -1
  783. package/dist/chunk-VPWJCJCX.cjs.map +0 -1
  784. package/dist/chunk-VROIMIHB.cjs.map +0 -1
  785. package/dist/chunk-WIAQQNFU.cjs.map +0 -1
  786. package/dist/chunk-WNAA6CLE.cjs +0 -143
  787. package/dist/chunk-WNAA6CLE.cjs.map +0 -1
  788. package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
  789. package/dist/chunk-X4LBUPJO.cjs.map +0 -1
  790. package/dist/chunk-X4XPNTCZ.cjs.map +0 -1
  791. package/dist/chunk-XCP454Q6.js.map +0 -1
  792. package/dist/chunk-XEAT7XJG.cjs.map +0 -1
  793. package/dist/chunk-YVL3XATO.cjs +0 -79
  794. package/dist/chunk-YVL3XATO.cjs.map +0 -1
  795. package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
  796. package/dist/html-MdxqSzjD.d.cts +0 -13
  797. package/dist/html-MdxqSzjD.d.ts +0 -13
  798. package/dist/orderRows-BUJYgSc7.d.cts +0 -221
  799. package/dist/orderRows-BUJYgSc7.d.ts +0 -221
  800. package/dist/transcript-Cg7uSW-C.d.cts +0 -84
  801. package/dist/transcript-Cg7uSW-C.d.ts +0 -84
  802. package/dist/types-B97JNRNQ.d.cts +0 -251
  803. package/dist/types-CnPEwzlp.d.cts +0 -254
  804. package/dist/types-CnPEwzlp.d.ts +0 -254
  805. package/dist/types-gZXrfLj6.d.ts +0 -251
  806. package/dist/useAnchoredPosition-CKwLSQW8.d.cts +0 -76
  807. package/dist/useAnchoredPosition-CKwLSQW8.d.ts +0 -76
  808. package/dist/useTheme-B9SWu6ui.d.cts +0 -24
  809. package/dist/useTheme-B9SWu6ui.d.ts +0 -24
  810. package/dist/useTranscriptEdits-CGzlemHT.d.cts +0 -182
  811. package/dist/useTranscriptEdits-D32bLs0l.d.ts +0 -182
@@ -1,29 +1,44 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkJFLC7SHM_cjs = require('../../chunk-JFLC7SHM.cjs');
4
- var chunkWIAQQNFU_cjs = require('../../chunk-WIAQQNFU.cjs');
5
- var chunkX4XPNTCZ_cjs = require('../../chunk-X4XPNTCZ.cjs');
6
- var chunkSGFYA22I_cjs = require('../../chunk-SGFYA22I.cjs');
7
- var chunkJEIW7BSV_cjs = require('../../chunk-JEIW7BSV.cjs');
8
- require('../../chunk-VBWRH4UW.cjs');
4
+ var chunkXRVMYT5G_cjs = require('../../chunk-XRVMYT5G.cjs');
5
+ var chunkDZ3JTMKM_cjs = require('../../chunk-DZ3JTMKM.cjs');
6
+ var chunkAJPFQF3H_cjs = require('../../chunk-AJPFQF3H.cjs');
7
+ require('../../chunk-GLXTVCHN.cjs');
8
+ var chunkKQ6GLYFZ_cjs = require('../../chunk-KQ6GLYFZ.cjs');
9
+ require('../../chunk-ZNUMOJOI.cjs');
10
+ var chunkC77FAR3F_cjs = require('../../chunk-C77FAR3F.cjs');
9
11
  require('../../chunk-PJ6CC53R.cjs');
12
+ require('../../chunk-VBWRH4UW.cjs');
13
+ var chunkVPTASZ2O_cjs = require('../../chunk-VPTASZ2O.cjs');
14
+ require('../../chunk-254QK722.cjs');
15
+ require('../../chunk-P22YCUVM.cjs');
16
+ require('../../chunk-Q3YVLO52.cjs');
17
+ var chunkGKDHMNUA_cjs = require('../../chunk-GKDHMNUA.cjs');
18
+ require('../../chunk-LC3JL2HB.cjs');
10
19
  require('../../chunk-I44YNYI6.cjs');
11
20
  require('../../chunk-Z5S5JEJD.cjs');
21
+ require('../../chunk-NNEFAUHV.cjs');
22
+ require('../../chunk-FHY3K6PL.cjs');
12
23
  require('../../chunk-FSGEDDF2.cjs');
13
24
  require('../../chunk-AOHJILLU.cjs');
14
- require('../../chunk-FHY3K6PL.cjs');
25
+ require('../../chunk-SCV7C55E.cjs');
15
26
  require('../../chunk-L7L5S2HO.cjs');
16
- var chunkYVL3XATO_cjs = require('../../chunk-YVL3XATO.cjs');
17
- require('../../chunk-NV2CWBI2.cjs');
27
+ var chunkYW2AKBLS_cjs = require('../../chunk-YW2AKBLS.cjs');
28
+ var chunk7E46YDOT_cjs = require('../../chunk-7E46YDOT.cjs');
29
+ require('../../chunk-EACNRR3C.cjs');
30
+ var chunkANMX7YDL_cjs = require('../../chunk-ANMX7YDL.cjs');
31
+ require('../../chunk-DXEPYK3I.cjs');
32
+ var chunkIEY3ZJIT_cjs = require('../../chunk-IEY3ZJIT.cjs');
18
33
  var chunkS5RVSXDV_cjs = require('../../chunk-S5RVSXDV.cjs');
19
34
  require('../../chunk-EUAMEVVI.cjs');
20
- var React2 = require('react');
35
+ var React3 = require('react');
36
+ var lucideReact = require('lucide-react');
37
+ var classVarianceAuthority = require('class-variance-authority');
38
+ var jsxRuntime = require('react/jsx-runtime');
21
39
  var Markdown = require('react-markdown');
22
40
  var remarkGfm = require('remark-gfm');
23
41
  var rehypeSanitize = require('rehype-sanitize');
24
- var jsxRuntime = require('react/jsx-runtime');
25
- var classVarianceAuthority = require('class-variance-authority');
26
- var lucideReact = require('lucide-react');
27
42
  var reactVirtual = require('@tanstack/react-virtual');
28
43
 
29
44
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -46,399 +61,204 @@ function _interopNamespace(e) {
46
61
  return Object.freeze(n);
47
62
  }
48
63
 
49
- var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
64
+ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
50
65
  var Markdown__default = /*#__PURE__*/_interopDefault(Markdown);
51
66
  var remarkGfm__default = /*#__PURE__*/_interopDefault(remarkGfm);
52
67
  var rehypeSanitize__default = /*#__PURE__*/_interopDefault(rehypeSanitize);
53
68
 
54
- function remarkPreserveLineBreaks() {
55
- const splitNode = (node) => {
56
- if (!node.children) return;
57
- const next = [];
58
- for (const child of node.children) {
59
- if (child.type === "text" && child.value && child.value.includes("\n")) {
60
- const segments = child.value.split("\n");
61
- segments.forEach((segment, i) => {
62
- if (i > 0) next.push({ type: "break" });
63
- if (segment) next.push({ type: "text", value: segment });
64
- });
65
- } else {
66
- splitNode(child);
67
- next.push(child);
68
- }
69
+ function MessageMedia({
70
+ attachment,
71
+ onOpen,
72
+ openLabel,
73
+ playLabel,
74
+ errorLabel,
75
+ retryLabel,
76
+ launchId
77
+ }) {
78
+ const playable = attachment.kind !== "image";
79
+ const actionLabel = playable ? playLabel : openLabel;
80
+ return /* @__PURE__ */ jsxRuntime.jsxs(
81
+ "div",
82
+ {
83
+ "data-slot": "superchat-message-media",
84
+ className: "mt-3 flex w-72 max-w-full flex-col gap-2",
85
+ children: [
86
+ attachment.title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: attachment.title }),
87
+ attachment.kind === "image" && attachment.src ? /* @__PURE__ */ jsxRuntime.jsx(
88
+ "img",
89
+ {
90
+ src: attachment.src,
91
+ alt: attachment.alt ?? attachment.title ?? "",
92
+ loading: "lazy",
93
+ className: "max-h-72 w-full rounded-lg object-contain"
94
+ }
95
+ ) : (attachment.kind === "video" || attachment.kind === "audio") && attachment.src ? (
96
+ // An opaque themed surface: the player's semi-transparent states
97
+ // (error, loading) must never compose onto a colored chat bubble.
98
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-background overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
99
+ chunkKQ6GLYFZ_cjs.MediaPlayer,
100
+ {
101
+ src: attachment.src,
102
+ kind: attachment.kind,
103
+ poster: attachment.poster,
104
+ "aria-label": attachment.alt ?? attachment.title ?? openLabel,
105
+ controls: !onOpen,
106
+ preload: "metadata",
107
+ labels: { error: errorLabel, retry: retryLabel },
108
+ className: "max-h-72"
109
+ }
110
+ ) })
111
+ ) : attachment.poster ? /* @__PURE__ */ jsxRuntime.jsx(
112
+ "img",
113
+ {
114
+ src: attachment.poster,
115
+ alt: attachment.alt ?? attachment.title ?? "",
116
+ loading: "lazy",
117
+ className: "max-h-72 w-full rounded-lg object-contain"
118
+ }
119
+ ) : null,
120
+ attachment.caption && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: attachment.caption }),
121
+ onOpen && /* @__PURE__ */ jsxRuntime.jsx(chunkXRVMYT5G_cjs.ButtonGroup, { children: /* @__PURE__ */ jsxRuntime.jsx(
122
+ chunkANMX7YDL_cjs.Button,
123
+ {
124
+ "data-media-launch-id": launchId,
125
+ variant: "secondary",
126
+ size: "sm",
127
+ leftIcon: playable ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Play, { className: "size-4", "aria-hidden": "true" }) : void 0,
128
+ "aria-label": playable && attachment.title ? `${playLabel} ${attachment.title}` : actionLabel,
129
+ onClick: () => onOpen(playable),
130
+ children: actionLabel
131
+ }
132
+ ) })
133
+ ]
69
134
  }
70
- node.children = next;
71
- };
72
- return (tree) => splitNode(tree);
135
+ );
73
136
  }
74
- function baseSanitizeSchema() {
75
- const schema = JSON.parse(JSON.stringify(rehypeSanitize.defaultSchema));
76
- const attributes = schema.attributes ?? {};
77
- const allowClass = (tag) => {
78
- const existing = attributes[tag] ?? [];
79
- const withoutClass = existing.filter(
80
- (a) => !(Array.isArray(a) && a[0] === "className")
81
- );
82
- attributes[tag] = [...withoutClass, "className"];
83
- };
84
- allowClass("code");
85
- allowClass("pre");
86
- allowClass("span");
87
- allowClass("div");
88
- schema.attributes = attributes;
89
- return schema;
137
+ function formatTime(time) {
138
+ return new Date(time).toLocaleTimeString(void 0, {
139
+ hour: "numeric",
140
+ minute: "2-digit"
141
+ });
90
142
  }
91
- function mergeSanitizeSchema(base, extra) {
92
- if (!extra) return base;
93
- const out = { ...base };
94
- if (Array.isArray(extra.tagNames)) {
95
- const a = base.tagNames ?? [];
96
- out.tagNames = Array.from(/* @__PURE__ */ new Set([...a, ...extra.tagNames]));
143
+ function byTime(a, b) {
144
+ return new Date(a.time).getTime() - new Date(b.time).getTime();
145
+ }
146
+ function lastActivityOf(c) {
147
+ if (c.lastActivity) return new Date(c.lastActivity).getTime();
148
+ const last = lastMessageByTime(c.thread);
149
+ return last ? new Date(last.time).getTime() : 0;
150
+ }
151
+ function escapeRegExp(value) {
152
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
153
+ }
154
+ function detectMentions(text, participants) {
155
+ const ids = [];
156
+ for (const p of participants) {
157
+ if (p.kind === "system") continue;
158
+ const token = "@" + p.name.split(" ")[0];
159
+ const pattern = new RegExp(
160
+ `(?<![\\w@])${escapeRegExp(token)}(?![\\w])`,
161
+ "i"
162
+ );
163
+ if (pattern.test(text)) ids.push(p.id);
97
164
  }
98
- if (extra.attributes && typeof extra.attributes === "object") {
99
- const baseAttrs = {
100
- ...base.attributes ?? {}
101
- };
102
- for (const [tag, attrs] of Object.entries(
103
- extra.attributes
104
- )) {
105
- baseAttrs[tag] = [...baseAttrs[tag] ?? [], ...attrs];
165
+ return ids;
166
+ }
167
+ function lastMessageByTime(thread) {
168
+ let latest;
169
+ let latestTime = -Infinity;
170
+ for (const message of thread) {
171
+ const t = new Date(message.time).getTime();
172
+ if (t >= latestTime) {
173
+ latest = message;
174
+ latestTime = t;
106
175
  }
107
- out.attributes = baseAttrs;
108
176
  }
109
- if (extra.protocols && typeof extra.protocols === "object") {
110
- const baseProtocols = {
111
- ...base.protocols ?? {}
112
- };
113
- for (const [attr, protocols] of Object.entries(
114
- extra.protocols
115
- )) {
116
- baseProtocols[attr] = Array.from(
117
- /* @__PURE__ */ new Set([...baseProtocols[attr] ?? [], ...protocols])
118
- );
177
+ return latest;
178
+ }
179
+ function parseHexColor(value) {
180
+ const hex = value.trim();
181
+ if (!/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(hex)) return null;
182
+ const normalized = hex.length === 4 ? "#" + [...hex.slice(1)].map((char) => char + char).join("") : hex;
183
+ return [1, 3, 5].map(
184
+ (start) => parseInt(normalized.slice(start, start + 2), 16)
185
+ );
186
+ }
187
+ function relativeLuminanceChannel(channel) {
188
+ const normalized = channel / 255;
189
+ return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
190
+ }
191
+ function relativeLuminance(value) {
192
+ const rgb = parseHexColor(value);
193
+ if (!rgb) return null;
194
+ const [red, green, blue] = rgb;
195
+ return 0.2126 * relativeLuminanceChannel(red) + 0.7152 * relativeLuminanceChannel(green) + 0.0722 * relativeLuminanceChannel(blue);
196
+ }
197
+ function contrastRatio(foreground, background) {
198
+ const foregroundLuminance = relativeLuminance(foreground);
199
+ const backgroundLuminance = relativeLuminance(background);
200
+ if (foregroundLuminance === null || backgroundLuminance === null) return null;
201
+ const lighter = Math.max(foregroundLuminance, backgroundLuminance);
202
+ const darker = Math.min(foregroundLuminance, backgroundLuminance);
203
+ return (lighter + 0.05) / (darker + 0.05);
204
+ }
205
+ function minimumContrastRatio(value, backgrounds) {
206
+ const contrasts = backgrounds.map((background) => contrastRatio(value, background)).filter((contrast) => contrast !== null);
207
+ if (contrasts.length !== backgrounds.length) return null;
208
+ return Math.min(...contrasts);
209
+ }
210
+ function accessibleAccentTextColor(value) {
211
+ if (!value) return void 0;
212
+ const contrast = minimumContrastRatio(value, ["#f5f5f5", "#262626"]);
213
+ if (contrast === null) return value;
214
+ return contrast < 4.5 ? void 0 : value;
215
+ }
216
+ function ParticipantAvatar({
217
+ participant
218
+ }) {
219
+ const isAgent = participant?.kind === "agent";
220
+ const backgroundColor = participant?.color ?? (isAgent ? "var(--mieweb-primary-700, #1f2937)" : "#64748b");
221
+ return /* @__PURE__ */ jsxRuntime.jsx(
222
+ chunkGKDHMNUA_cjs.Avatar,
223
+ {
224
+ size: "xs",
225
+ src: participant?.avatar,
226
+ alt: "",
227
+ name: participant?.name ?? "?",
228
+ fallback: isAgent ? /* @__PURE__ */ jsxRuntime.jsx(chunkXRVMYT5G_cjs.SparklesIcon, { size: "sm" }) : void 0,
229
+ style: { backgroundColor },
230
+ "aria-hidden": "true",
231
+ className: "shrink-0"
119
232
  }
120
- out.protocols = baseProtocols;
121
- }
122
- for (const [k, v] of Object.entries(extra)) {
123
- if (k === "tagNames" || k === "attributes" || k === "protocols") continue;
124
- out[k] = v;
125
- }
126
- return out;
233
+ );
127
234
  }
128
- function baseComponents() {
129
- return {
130
- a: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
131
- "a",
235
+ function ReferenceChip({
236
+ reference,
237
+ linkBuilder,
238
+ onReferenceClick
239
+ }) {
240
+ const href = linkBuilder?.(reference);
241
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
242
+ /* @__PURE__ */ jsxRuntime.jsx(
243
+ chunk7E46YDOT_cjs.Badge,
132
244
  {
133
- ...props,
134
- className: chunkS5RVSXDV_cjs.cn(
135
- "text-primary-800 hover:text-primary-900 dark:text-primary-300 underline underline-offset-2",
136
- props.className
137
- ),
138
- target: props.target ?? "_blank",
139
- rel: props.rel ?? "noopener noreferrer",
140
- children
245
+ variant: "default",
246
+ size: "sm",
247
+ className: "rounded px-1.5 text-[10px] font-semibold tracking-wide uppercase",
248
+ children: reference.refType
141
249
  }
142
250
  ),
143
- pre: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
144
- "pre",
251
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: reference.title })
252
+ ] });
253
+ const className = "inline-flex max-w-full items-center gap-2 rounded-lg border border-neutral-200 bg-white px-3 py-1.5 text-sm text-neutral-700 hover:border-primary-300 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-200";
254
+ if (href) {
255
+ return /* @__PURE__ */ jsxRuntime.jsx(
256
+ "a",
145
257
  {
146
- ...props,
147
- tabIndex: 0,
148
- className: chunkS5RVSXDV_cjs.cn(
149
- "overflow-x-auto rounded-lg bg-neutral-900 p-3 text-sm text-neutral-100 dark:bg-neutral-950",
150
- props.className
151
- )
152
- }
153
- ),
154
- code: ({ node: _node, ...props }) => {
155
- const isBlock = typeof props.className === "string" && props.className.includes("language-");
156
- return /* @__PURE__ */ jsxRuntime.jsx(
157
- "code",
158
- {
159
- ...props,
160
- className: chunkS5RVSXDV_cjs.cn(
161
- !isBlock && "rounded bg-neutral-200 px-1 py-0.5 text-[0.85em] text-neutral-800 dark:bg-neutral-700 dark:text-neutral-100",
162
- props.className
163
- )
164
- }
165
- );
166
- },
167
- input: ({ node: _node, ...props }) => {
168
- if (props.type === "checkbox") {
169
- return /* @__PURE__ */ jsxRuntime.jsx(
170
- "input",
171
- {
172
- ...props,
173
- "aria-label": props["aria-label"] ?? (props["aria-labelledby"] ? void 0 : "Task list item")
174
- }
175
- );
176
- }
177
- return /* @__PURE__ */ jsxRuntime.jsx("input", { ...props });
178
- },
179
- table: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "my-2 overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
180
- "table",
181
- {
182
- ...props,
183
- className: chunkS5RVSXDV_cjs.cn(
184
- "w-full border-collapse text-sm [&_td]:border [&_td]:border-neutral-200 [&_td]:px-2 [&_td]:py-1 dark:[&_td]:border-neutral-700 [&_th]:border [&_th]:border-neutral-200 [&_th]:px-2 [&_th]:py-1 [&_th]:text-start dark:[&_th]:border-neutral-700",
185
- props.className
186
- )
187
- }
188
- ) }),
189
- // Tailwind's preflight resets list markers/padding; restore them explicitly
190
- // so bullets/numbers show without depending on the typography plugin.
191
- ul: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("ul", { ...props, className: chunkS5RVSXDV_cjs.cn("list-disc ps-5", props.className) }),
192
- ol: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("ol", { ...props, className: chunkS5RVSXDV_cjs.cn("list-decimal ps-5", props.className) }),
193
- li: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("li", { ...props, className: chunkS5RVSXDV_cjs.cn("ps-1", props.className) }),
194
- // Preflight also flattens headings to body size/weight; restore a sensible
195
- // hierarchy without depending on the typography plugin.
196
- h1: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
197
- "h1",
198
- {
199
- ...props,
200
- className: chunkS5RVSXDV_cjs.cn("mt-3 mb-1 text-xl font-semibold", props.className),
201
- children
202
- }
203
- ),
204
- h2: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
205
- "h2",
206
- {
207
- ...props,
208
- className: chunkS5RVSXDV_cjs.cn("mt-3 mb-1 text-lg font-semibold", props.className),
209
- children
210
- }
211
- ),
212
- h3: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
213
- "h3",
214
- {
215
- ...props,
216
- className: chunkS5RVSXDV_cjs.cn("mt-2 mb-1 text-base font-semibold", props.className),
217
- children
218
- }
219
- ),
220
- h4: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
221
- "h4",
222
- {
223
- ...props,
224
- className: chunkS5RVSXDV_cjs.cn("mt-2 mb-1 text-sm font-semibold", props.className),
225
- children
226
- }
227
- ),
228
- h5: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
229
- "h5",
230
- {
231
- ...props,
232
- className: chunkS5RVSXDV_cjs.cn("mt-2 mb-1 text-sm font-semibold", props.className),
233
- children
234
- }
235
- ),
236
- h6: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
237
- "h6",
238
- {
239
- ...props,
240
- className: chunkS5RVSXDV_cjs.cn(
241
- "mt-2 mb-1 text-xs font-semibold tracking-wide uppercase",
242
- props.className
243
- ),
244
- children
245
- }
246
- ),
247
- hr: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
248
- "hr",
249
- {
250
- ...props,
251
- className: chunkS5RVSXDV_cjs.cn(
252
- "my-2 border-neutral-300 dark:border-neutral-600",
253
- props.className
254
- )
255
- }
256
- )
257
- };
258
- }
259
- function createMarkdownRenderer(options = {}) {
260
- const { plugins = [], trusted = false } = options;
261
- const remarkPlugins = [
262
- remarkGfm__default.default,
263
- remarkPreserveLineBreaks,
264
- ...plugins.flatMap((p) => p.remarkPlugins ?? [])
265
- ];
266
- const pluginRehype = plugins.flatMap(
267
- (p) => p.rehypePlugins ?? []
268
- );
269
- const sanitizeSchema = plugins.reduce(
270
- (acc, p) => mergeSanitizeSchema(acc, p.sanitizeSchema),
271
- baseSanitizeSchema()
272
- );
273
- const rehypePlugins = trusted ? pluginRehype : [...pluginRehype, [rehypeSanitize__default.default, sanitizeSchema]];
274
- const components = plugins.reduce(
275
- (acc, p) => ({ ...acc, ...p.components }),
276
- baseComponents()
277
- );
278
- const MarkdownRenderer = (text, ctx) => /* @__PURE__ */ jsxRuntime.jsx(
279
- MarkdownContent,
280
- {
281
- text,
282
- messageId: ctx.messageId,
283
- streaming: ctx.streaming,
284
- remarkPlugins,
285
- rehypePlugins,
286
- components
287
- },
288
- ctx.messageId
289
- );
290
- return MarkdownRenderer;
291
- }
292
- var transformUrl = (url, key, node) => {
293
- if (key === "src" && node.tagName === "img" && (/^data:image\//i.test(url) || /^blob:/i.test(url))) {
294
- return url;
295
- }
296
- return Markdown.defaultUrlTransform(url);
297
- };
298
- var MarkdownContent = React2__namespace.memo(function MarkdownContent2({
299
- text,
300
- messageId,
301
- streaming,
302
- remarkPlugins,
303
- rehypePlugins,
304
- components
305
- }) {
306
- return /* @__PURE__ */ jsxRuntime.jsx(chunkJFLC7SHM_cjs.TextRenderContext.Provider, { value: { messageId, streaming }, children: /* @__PURE__ */ jsxRuntime.jsx(
307
- Markdown__default.default,
308
- {
309
- remarkPlugins,
310
- rehypePlugins,
311
- urlTransform: transformUrl,
312
- components,
313
- children: text
314
- }
315
- ) });
316
- });
317
- function formatTime(time) {
318
- return new Date(time).toLocaleTimeString(void 0, {
319
- hour: "numeric",
320
- minute: "2-digit"
321
- });
322
- }
323
- function byTime(a, b) {
324
- return new Date(a.time).getTime() - new Date(b.time).getTime();
325
- }
326
- function lastActivityOf(c) {
327
- if (c.lastActivity) return new Date(c.lastActivity).getTime();
328
- const last = lastMessageByTime(c.thread);
329
- return last ? new Date(last.time).getTime() : 0;
330
- }
331
- function escapeRegExp(value) {
332
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
333
- }
334
- function detectMentions(text, participants) {
335
- const ids = [];
336
- for (const p of participants) {
337
- if (p.kind === "system") continue;
338
- const token = "@" + p.name.split(" ")[0];
339
- const pattern = new RegExp(
340
- `(?<![\\w@])${escapeRegExp(token)}(?![\\w])`,
341
- "i"
342
- );
343
- if (pattern.test(text)) ids.push(p.id);
344
- }
345
- return ids;
346
- }
347
- function lastMessageByTime(thread) {
348
- let latest;
349
- let latestTime = -Infinity;
350
- for (const message of thread) {
351
- const t = new Date(message.time).getTime();
352
- if (t >= latestTime) {
353
- latest = message;
354
- latestTime = t;
355
- }
356
- }
357
- return latest;
358
- }
359
- function parseHexColor(value) {
360
- const hex = value.trim();
361
- if (!/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(hex)) return null;
362
- const normalized = hex.length === 4 ? "#" + [...hex.slice(1)].map((char) => char + char).join("") : hex;
363
- return [1, 3, 5].map(
364
- (start) => parseInt(normalized.slice(start, start + 2), 16)
365
- );
366
- }
367
- function relativeLuminanceChannel(channel) {
368
- const normalized = channel / 255;
369
- return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
370
- }
371
- function relativeLuminance(value) {
372
- const rgb = parseHexColor(value);
373
- if (!rgb) return null;
374
- const [red, green, blue] = rgb;
375
- return 0.2126 * relativeLuminanceChannel(red) + 0.7152 * relativeLuminanceChannel(green) + 0.0722 * relativeLuminanceChannel(blue);
376
- }
377
- function contrastRatio(foreground, background) {
378
- const foregroundLuminance = relativeLuminance(foreground);
379
- const backgroundLuminance = relativeLuminance(background);
380
- if (foregroundLuminance === null || backgroundLuminance === null) return null;
381
- const lighter = Math.max(foregroundLuminance, backgroundLuminance);
382
- const darker = Math.min(foregroundLuminance, backgroundLuminance);
383
- return (lighter + 0.05) / (darker + 0.05);
384
- }
385
- function minimumContrastRatio(value, backgrounds) {
386
- const contrasts = backgrounds.map((background) => contrastRatio(value, background)).filter((contrast) => contrast !== null);
387
- if (contrasts.length !== backgrounds.length) return null;
388
- return Math.min(...contrasts);
389
- }
390
- function accessibleAccentTextColor(value) {
391
- if (!value) return void 0;
392
- const contrast = minimumContrastRatio(value, ["#f5f5f5", "#262626"]);
393
- if (contrast === null) return value;
394
- return contrast < 4.5 ? void 0 : value;
395
- }
396
- function ParticipantAvatar({
397
- participant
398
- }) {
399
- const isAgent = participant?.kind === "agent";
400
- const backgroundColor = participant?.color ?? (isAgent ? "var(--mieweb-primary-700, #1f2937)" : "#64748b");
401
- return /* @__PURE__ */ jsxRuntime.jsx(
402
- chunkJEIW7BSV_cjs.Avatar,
403
- {
404
- size: "xs",
405
- src: participant?.avatar,
406
- alt: "",
407
- name: participant?.name ?? "?",
408
- fallback: isAgent ? /* @__PURE__ */ jsxRuntime.jsx(chunkWIAQQNFU_cjs.SparklesIcon, { size: "sm" }) : void 0,
409
- style: { backgroundColor },
410
- "aria-hidden": "true",
411
- className: "shrink-0"
412
- }
413
- );
414
- }
415
- function ReferenceChip({
416
- reference,
417
- linkBuilder,
418
- onReferenceClick
419
- }) {
420
- const href = linkBuilder?.(reference);
421
- const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
422
- /* @__PURE__ */ jsxRuntime.jsx(
423
- chunkYVL3XATO_cjs.Badge,
424
- {
425
- variant: "default",
426
- size: "sm",
427
- className: "rounded px-1.5 text-[10px] font-semibold tracking-wide uppercase",
428
- children: reference.refType
429
- }
430
- ),
431
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: reference.title })
432
- ] });
433
- const className = "inline-flex max-w-full items-center gap-2 rounded-lg border border-neutral-200 bg-white px-3 py-1.5 text-sm text-neutral-700 hover:border-primary-300 dark:border-neutral-700 dark:bg-neutral-800 dark:text-neutral-200";
434
- if (href) {
435
- return /* @__PURE__ */ jsxRuntime.jsx(
436
- "a",
437
- {
438
- href,
439
- className,
440
- onClick: () => onReferenceClick?.(reference),
441
- children: content
258
+ href,
259
+ className,
260
+ onClick: () => onReferenceClick?.(reference),
261
+ children: content
442
262
  }
443
263
  );
444
264
  }
@@ -498,11 +318,11 @@ function useMessageCopy({
498
318
  getText,
499
319
  defaultFormat
500
320
  }) {
501
- const [copied, setCopied] = React2__namespace.useState(false);
502
- const copiedTimer = React2__namespace.useRef(
321
+ const [copied, setCopied] = React3__namespace.useState(false);
322
+ const copiedTimer = React3__namespace.useRef(
503
323
  void 0
504
324
  );
505
- React2__namespace.useEffect(() => () => window.clearTimeout(copiedTimer.current), []);
325
+ React3__namespace.useEffect(() => () => window.clearTimeout(copiedTimer.current), []);
506
326
  const flash = () => {
507
327
  setCopied(true);
508
328
  window.clearTimeout(copiedTimer.current);
@@ -546,7 +366,7 @@ function ActionMenuItem({
546
366
  item,
547
367
  onSelect
548
368
  }) {
549
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSGFYA22I_cjs.DropdownItem, { onClick: () => onSelect(item.onSelect), children: item.description ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col items-start", children: [
369
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkC77FAR3F_cjs.DropdownItem, { onClick: () => onSelect(item.onSelect), children: item.description ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col items-start", children: [
550
370
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label }),
551
371
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-normal text-neutral-400", children: item.description })
552
372
  ] }) : item.label });
@@ -555,7 +375,7 @@ function FooterActionButton({
555
375
  action,
556
376
  isSelf
557
377
  }) {
558
- const [open, setOpen] = React2__namespace.useState(false);
378
+ const [open, setOpen] = React3__namespace.useState(false);
559
379
  const onClickCapture = action.submenu ? (e) => {
560
380
  if (e.metaKey || e.ctrlKey) {
561
381
  e.preventDefault();
@@ -578,7 +398,7 @@ function FooterActionButton({
578
398
  );
579
399
  if (!action.submenu) return button;
580
400
  return /* @__PURE__ */ jsxRuntime.jsx(
581
- chunkSGFYA22I_cjs.Dropdown,
401
+ chunkC77FAR3F_cjs.Dropdown,
582
402
  {
583
403
  open,
584
404
  onOpenChange: setOpen,
@@ -598,17 +418,13 @@ function FooterActionButton({
598
418
  }
599
419
  );
600
420
  }
601
- var MessageActionsBar = React2__namespace.forwardRef(function MessageActionsBar2({ actions, isSelf }, ref) {
421
+ var MessageActionsBar = React3__namespace.forwardRef(function MessageActionsBar2({ actions, isSelf }, ref) {
602
422
  return /* @__PURE__ */ jsxRuntime.jsx(
603
423
  "div",
604
424
  {
605
425
  ref,
606
426
  "data-slot": "superchat-message-actions",
607
- className: chunkS5RVSXDV_cjs.cn(
608
- "flex items-center gap-0.5",
609
- isSelf && "justify-end",
610
- actionRevealClass
611
- ),
427
+ className: chunkS5RVSXDV_cjs.cn("flex flex-col items-center gap-0.5", actionRevealClass),
612
428
  children: actions.map((action) => /* @__PURE__ */ jsxRuntime.jsx(FooterActionButton, { action, isSelf }, action.id))
613
429
  }
614
430
  );
@@ -618,7 +434,7 @@ function MessageOverflowMenu({
618
434
  actions,
619
435
  footerVisible
620
436
  }) {
621
- const [open, setOpen] = React2__namespace.useState(false);
437
+ const [open, setOpen] = React3__namespace.useState(false);
622
438
  const select = (fn) => {
623
439
  setOpen(false);
624
440
  fn();
@@ -627,7 +443,7 @@ function MessageOverflowMenu({
627
443
  "div",
628
444
  {
629
445
  className: chunkS5RVSXDV_cjs.cn(
630
- "sticky bottom-2 shrink-0 self-end transition-opacity",
446
+ "sticky bottom-2 mt-auto shrink-0 transition-opacity",
631
447
  // Rich content (e.g. NITRO tables) layers internals up to z-50, so the
632
448
  // open menu's stacking context must clear that.
633
449
  open ? "z-[60]" : "z-10",
@@ -637,7 +453,7 @@ function MessageOverflowMenu({
637
453
  footerVisible && !open && "pointer-events-none invisible opacity-0"
638
454
  ),
639
455
  children: /* @__PURE__ */ jsxRuntime.jsx(
640
- chunkSGFYA22I_cjs.Dropdown,
456
+ chunkC77FAR3F_cjs.Dropdown,
641
457
  {
642
458
  open,
643
459
  onOpenChange: setOpen,
@@ -656,9 +472,9 @@ function MessageOverflowMenu({
656
472
  (action) => action.submenu ? (
657
473
  // Actions with variants collapse to just their submenu — a
658
474
  // top-level default item would duplicate the flyout's options.
659
- /* @__PURE__ */ jsxRuntime.jsx(chunkSGFYA22I_cjs.DropdownSubmenu, { label: action.submenu.label, children: action.submenu.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(ActionMenuItem, { item, onSelect: select }, item.id)) }, action.id)
475
+ /* @__PURE__ */ jsxRuntime.jsx(chunkC77FAR3F_cjs.DropdownSubmenu, { label: action.submenu.label, children: action.submenu.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(ActionMenuItem, { item, onSelect: select }, item.id)) }, action.id)
660
476
  ) : /* @__PURE__ */ jsxRuntime.jsx(
661
- chunkSGFYA22I_cjs.DropdownItem,
477
+ chunkC77FAR3F_cjs.DropdownItem,
662
478
  {
663
479
  onClick: () => select(action.onSelect),
664
480
  children: action.label
@@ -671,7 +487,7 @@ function MessageOverflowMenu({
671
487
  }
672
488
  );
673
489
  }
674
- var MessageRow = React2__namespace.memo(function MessageRow2({
490
+ var MessageRow = React3__namespace.memo(function MessageRow2({
675
491
  message,
676
492
  participant,
677
493
  isSelf,
@@ -680,21 +496,27 @@ var MessageRow = React2__namespace.memo(function MessageRow2({
680
496
  onReferenceClick,
681
497
  editable,
682
498
  onMessageEdited,
683
- defaultCopyFormat = "rich"
499
+ defaultCopyFormat = "rich",
500
+ onOpenMedia,
501
+ openMediaLabel = "Open in media feed",
502
+ playMediaLabel = "Play",
503
+ mediaErrorLabel,
504
+ mediaRetryLabel
684
505
  }) {
685
506
  const streaming = message.status === "streaming";
686
- const hasBody = !!message.text || (message.content?.length ?? 0) > 0;
687
- const [isEditing, setIsEditing] = React2__namespace.useState(false);
688
- const [draft, setDraft] = React2__namespace.useState(message.text ?? "");
689
- const editRef = React2__namespace.useRef(null);
690
- const bubbleRef = React2__namespace.useRef(null);
691
- const autosize = React2__namespace.useCallback(() => {
507
+ const hasBody = !!message.text || (message.content?.length ?? 0) > 0 || (message.media?.length ?? 0) > 0;
508
+ const [isEditing, setIsEditing] = React3__namespace.useState(false);
509
+ const [draft, setDraft] = React3__namespace.useState(message.text ?? "");
510
+ const [editMinWidth, setEditMinWidth] = React3__namespace.useState();
511
+ const editRef = React3__namespace.useRef(null);
512
+ const bubbleRef = React3__namespace.useRef(null);
513
+ const autosize = React3__namespace.useCallback(() => {
692
514
  const el = editRef.current;
693
515
  if (!el) return;
694
516
  el.style.height = "auto";
695
517
  el.style.height = `${el.scrollHeight}px`;
696
518
  }, []);
697
- React2__namespace.useEffect(() => {
519
+ React3__namespace.useEffect(() => {
698
520
  if (!isEditing) return;
699
521
  const el = editRef.current;
700
522
  if (!el) return;
@@ -715,16 +537,19 @@ ${block.text}
715
537
  return "";
716
538
  }).filter(Boolean).join("\n\n") ?? "";
717
539
  const canCopy = !isEditing && (!!message.content?.length || typeof message.text === "string" && message.text.length > 0);
718
- const hasActions = canCopy || canEdit && !isEditing;
540
+ const showEditAction = canEdit && !isEditing;
541
+ const actionCount = (canCopy ? 1 : 0) + (showEditAction ? 1 : 0);
542
+ const hasActions = actionCount > 0;
543
+ const collapseToMenu = actionCount > 1;
719
544
  const copy = useMessageCopy({
720
545
  markdown: markdownSource,
721
546
  getHtml: () => bubbleRef.current?.innerHTML ?? "",
722
547
  getText: () => bubbleRef.current?.textContent ?? "",
723
548
  defaultFormat: defaultCopyFormat
724
549
  });
725
- const actionsBarRef = React2__namespace.useRef(null);
726
- const [footerVisible, setFooterVisible] = React2__namespace.useState(true);
727
- React2__namespace.useEffect(() => {
550
+ const actionsBarRef = React3__namespace.useRef(null);
551
+ const [footerVisible, setFooterVisible] = React3__namespace.useState(true);
552
+ React3__namespace.useEffect(() => {
728
553
  const el = actionsBarRef.current;
729
554
  if (!el || typeof globalThis.IntersectionObserver === "undefined") return;
730
555
  const observer = new globalThis.IntersectionObserver(([entry]) => {
@@ -732,7 +557,7 @@ ${block.text}
732
557
  });
733
558
  observer.observe(el);
734
559
  return () => observer.disconnect();
735
- }, [hasActions]);
560
+ }, [hasActions, collapseToMenu]);
736
561
  if (message.type === "system") {
737
562
  return /* @__PURE__ */ jsxRuntime.jsx(
738
563
  "div",
@@ -765,6 +590,12 @@ ${block.text}
765
590
  const accentTextColor = accessibleAccentTextColor(accent);
766
591
  const authorName = participant?.name ?? "Unknown";
767
592
  const startEdit = () => {
593
+ const el = bubbleRef.current;
594
+ if (el) {
595
+ const cs = getComputedStyle(el);
596
+ const contentWidth = el.clientWidth - parseFloat(cs.paddingLeft) - parseFloat(cs.paddingRight);
597
+ setEditMinWidth(contentWidth > 0 ? contentWidth : void 0);
598
+ }
768
599
  setDraft(message.text ?? "");
769
600
  setIsEditing(true);
770
601
  };
@@ -837,209 +668,525 @@ ${block.text}
837
668
  ]
838
669
  }
839
670
  }
840
- ] : [],
841
- ...canEdit && !isEditing ? [
671
+ ] : [],
672
+ ...showEditAction ? [
673
+ {
674
+ id: "edit",
675
+ label: "Edit message",
676
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { size: 14, "aria-hidden": "true" }),
677
+ onSelect: startEdit
678
+ }
679
+ ] : []
680
+ ];
681
+ return /* @__PURE__ */ jsxRuntime.jsxs(
682
+ "div",
683
+ {
684
+ "data-slot": "superchat-message",
685
+ role: "article",
686
+ "aria-label": `${authorName}, ${formatTime(message.time)}`,
687
+ className: chunkS5RVSXDV_cjs.cn(
688
+ "group flex gap-2",
689
+ isSelf ? "flex-row-reverse" : "flex-row"
690
+ ),
691
+ children: [
692
+ /* @__PURE__ */ jsxRuntime.jsxs(
693
+ "div",
694
+ {
695
+ "data-slot": "superchat-message-gutter",
696
+ className: "flex shrink-0 flex-col items-center gap-1",
697
+ children: [
698
+ /* @__PURE__ */ jsxRuntime.jsx(ParticipantAvatar, { participant }),
699
+ hasActions && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
700
+ /* @__PURE__ */ jsxRuntime.jsx(
701
+ MessageOverflowMenu,
702
+ {
703
+ isSelf,
704
+ actions,
705
+ footerVisible: collapseToMenu ? false : footerVisible
706
+ }
707
+ ),
708
+ !collapseToMenu && /* @__PURE__ */ jsxRuntime.jsx(
709
+ MessageActionsBar,
710
+ {
711
+ ref: actionsBarRef,
712
+ actions,
713
+ isSelf
714
+ }
715
+ )
716
+ ] })
717
+ ]
718
+ }
719
+ ),
720
+ /* @__PURE__ */ jsxRuntime.jsxs(
721
+ "div",
722
+ {
723
+ className: chunkS5RVSXDV_cjs.cn(
724
+ "flex min-w-0 flex-1 flex-col gap-1",
725
+ isSelf && "items-end"
726
+ ),
727
+ children: [
728
+ /* @__PURE__ */ jsxRuntime.jsxs(
729
+ "div",
730
+ {
731
+ "data-slot": "superchat-message-meta",
732
+ className: "flex items-baseline gap-2",
733
+ children: [
734
+ /* @__PURE__ */ jsxRuntime.jsx(
735
+ "span",
736
+ {
737
+ className: "text-xs font-medium",
738
+ style: accentTextColor ? { color: accentTextColor } : void 0,
739
+ children: authorName
740
+ }
741
+ ),
742
+ participant?.role && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: participant.role }),
743
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: formatTime(message.time) }),
744
+ message.editedAt && /* @__PURE__ */ jsxRuntime.jsx(
745
+ "span",
746
+ {
747
+ "data-slot": "superchat-edited-indicator",
748
+ className: "text-[10px] text-neutral-500 dark:text-neutral-400",
749
+ title: `Edited ${formatTime(message.editedAt)}`,
750
+ children: "(edited)"
751
+ }
752
+ )
753
+ ]
754
+ }
755
+ ),
756
+ /* @__PURE__ */ jsxRuntime.jsx(
757
+ "div",
758
+ {
759
+ className: chunkS5RVSXDV_cjs.cn(
760
+ "flex w-full items-center gap-1",
761
+ isSelf ? "flex-row-reverse" : "flex-row"
762
+ ),
763
+ children: /* @__PURE__ */ jsxRuntime.jsx(
764
+ chunkXRVMYT5G_cjs.ChatBubble,
765
+ {
766
+ ref: bubbleRef,
767
+ "data-slot": "superchat-bubble",
768
+ variant: isSelf ? "user" : "assistant",
769
+ hasError: message.status === "error",
770
+ className: "text-sm has-[[data-slot=superchat-nitro-table]]:w-full has-[[data-slot=superchat-nitro-table]]:max-w-full",
771
+ children: isEditing ? /* @__PURE__ */ jsxRuntime.jsxs(
772
+ "div",
773
+ {
774
+ "data-slot": "superchat-message-editor",
775
+ className: "flex w-80 max-w-full flex-col gap-2",
776
+ style: editMinWidth ? { minWidth: editMinWidth } : void 0,
777
+ children: [
778
+ /* @__PURE__ */ jsxRuntime.jsx(
779
+ "textarea",
780
+ {
781
+ value: draft,
782
+ ref: editRef,
783
+ rows: 2,
784
+ onChange: (e) => {
785
+ setDraft(e.target.value);
786
+ autosize();
787
+ },
788
+ onPaste: handleEditPaste,
789
+ onKeyDown: (e) => {
790
+ if (e.key === "Enter" && !e.shiftKey) {
791
+ e.preventDefault();
792
+ saveEdit();
793
+ } else if (e.key === "Escape") {
794
+ e.preventDefault();
795
+ cancelEdit();
796
+ }
797
+ },
798
+ "aria-label": "Edit message",
799
+ className: "focus:ring-primary-500 max-h-60 min-h-16 w-full resize-none rounded-lg border border-neutral-300 bg-white px-3 py-2 text-sm text-neutral-900 focus:ring-1 focus:outline-none dark:border-neutral-600 dark:bg-neutral-900 dark:text-white"
800
+ }
801
+ ),
802
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2", children: [
803
+ /* @__PURE__ */ jsxRuntime.jsx(
804
+ "button",
805
+ {
806
+ type: "button",
807
+ onClick: cancelEdit,
808
+ className: "rounded-md px-2.5 py-1 text-xs font-medium text-neutral-200 hover:bg-white/10",
809
+ children: "Cancel"
810
+ }
811
+ ),
812
+ /* @__PURE__ */ jsxRuntime.jsx(
813
+ "button",
814
+ {
815
+ type: "button",
816
+ onClick: saveEdit,
817
+ disabled: !draft.trim() || draft.trim() === message.text,
818
+ className: "rounded-md bg-white px-2.5 py-1 text-xs font-medium text-neutral-900 hover:bg-neutral-100 disabled:opacity-40",
819
+ children: "Save"
820
+ }
821
+ )
822
+ ] })
823
+ ]
824
+ }
825
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
826
+ message.content?.map((block, i) => {
827
+ if (block.type === "tool_use" && block.toolCall) {
828
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkXRVMYT5G_cjs.MCPToolCallDisplay, { toolCall: block.toolCall }, i);
829
+ }
830
+ if ((block.type === "text" || block.type === "thinking") && block.text) {
831
+ return /* @__PURE__ */ jsxRuntime.jsx(
832
+ "div",
833
+ {
834
+ className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
835
+ children: renderText(block.text, {
836
+ messageId: message.id,
837
+ streaming,
838
+ role: participant?.kind === "human" ? "user" : "assistant"
839
+ })
840
+ },
841
+ i
842
+ );
843
+ }
844
+ if (block.type === "code" && block.text) {
845
+ const fenced = `\`\`\`${block.language ?? ""}
846
+ ${block.text}
847
+ \`\`\``;
848
+ return /* @__PURE__ */ jsxRuntime.jsx(
849
+ "div",
850
+ {
851
+ className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
852
+ children: renderText(fenced, {
853
+ messageId: message.id,
854
+ streaming,
855
+ role: participant?.kind === "human" ? "user" : "assistant"
856
+ })
857
+ },
858
+ i
859
+ );
860
+ }
861
+ return null;
862
+ }),
863
+ message.text && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word", children: renderText(message.text, {
864
+ messageId: message.id,
865
+ streaming,
866
+ role: participant?.kind === "human" ? "user" : "assistant"
867
+ }) }),
868
+ message.media?.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(
869
+ MessageMedia,
870
+ {
871
+ attachment,
872
+ openLabel: openMediaLabel,
873
+ playLabel: playMediaLabel,
874
+ errorLabel: mediaErrorLabel,
875
+ retryLabel: mediaRetryLabel,
876
+ launchId: JSON.stringify([message.id, attachment.id]),
877
+ onOpen: onOpenMedia ? (play) => onOpenMedia(message.id, attachment.id, play) : void 0
878
+ },
879
+ attachment.id
880
+ )),
881
+ streaming && !hasBody && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXRVMYT5G_cjs.AITypingIndicator, {}) })
882
+ ] })
883
+ }
884
+ )
885
+ }
886
+ )
887
+ ]
888
+ }
889
+ )
890
+ ]
891
+ }
892
+ );
893
+ });
894
+ var sidebarItem = classVarianceAuthority.cva(
895
+ "flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors",
896
+ {
897
+ variants: {
898
+ active: {
899
+ true: "bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-100",
900
+ false: "text-neutral-700 hover:bg-neutral-100 dark:text-neutral-200 dark:hover:bg-neutral-800"
901
+ }
902
+ },
903
+ defaultVariants: { active: false }
904
+ }
905
+ );
906
+
907
+ // src/components/SuperChat/media.ts
908
+ function getConversationMediaItems(conversation) {
909
+ const participants = new Map(
910
+ conversation.participants.map((participant) => [
911
+ participant.id,
912
+ participant
913
+ ])
914
+ );
915
+ return [...conversation.thread].sort(byTime).flatMap(
916
+ (message) => (message.media ?? []).map((attachment) => ({
917
+ // Tuple encoding prevents collisions when ids themselves contain a
918
+ // delimiter. Including the conversation keeps selection scoped to it.
919
+ id: JSON.stringify([conversation.id, message.id, attachment.id]),
920
+ conversationId: conversation.id,
921
+ message,
922
+ attachment,
923
+ participant: participants.get(message.participantId)
924
+ }))
925
+ );
926
+ }
927
+ function remarkPreserveLineBreaks() {
928
+ const splitNode = (node) => {
929
+ if (!node.children) return;
930
+ const next = [];
931
+ for (const child of node.children) {
932
+ if (child.type === "text" && child.value && child.value.includes("\n")) {
933
+ const segments = child.value.split("\n");
934
+ segments.forEach((segment, i) => {
935
+ if (i > 0) next.push({ type: "break" });
936
+ if (segment) next.push({ type: "text", value: segment });
937
+ });
938
+ } else {
939
+ splitNode(child);
940
+ next.push(child);
941
+ }
942
+ }
943
+ node.children = next;
944
+ };
945
+ return (tree) => splitNode(tree);
946
+ }
947
+ function baseSanitizeSchema() {
948
+ const schema = JSON.parse(JSON.stringify(rehypeSanitize.defaultSchema));
949
+ const attributes = schema.attributes ?? {};
950
+ const allowClass = (tag) => {
951
+ const existing = attributes[tag] ?? [];
952
+ const withoutClass = existing.filter(
953
+ (a) => !(Array.isArray(a) && a[0] === "className")
954
+ );
955
+ attributes[tag] = [...withoutClass, "className"];
956
+ };
957
+ allowClass("code");
958
+ allowClass("pre");
959
+ allowClass("span");
960
+ allowClass("div");
961
+ schema.attributes = attributes;
962
+ return schema;
963
+ }
964
+ function mergeSanitizeSchema(base, extra) {
965
+ if (!extra) return base;
966
+ const out = { ...base };
967
+ if (Array.isArray(extra.tagNames)) {
968
+ const a = base.tagNames ?? [];
969
+ out.tagNames = Array.from(/* @__PURE__ */ new Set([...a, ...extra.tagNames]));
970
+ }
971
+ if (extra.attributes && typeof extra.attributes === "object") {
972
+ const baseAttrs = {
973
+ ...base.attributes ?? {}
974
+ };
975
+ for (const [tag, attrs] of Object.entries(
976
+ extra.attributes
977
+ )) {
978
+ baseAttrs[tag] = [...baseAttrs[tag] ?? [], ...attrs];
979
+ }
980
+ out.attributes = baseAttrs;
981
+ }
982
+ if (extra.protocols && typeof extra.protocols === "object") {
983
+ const baseProtocols = {
984
+ ...base.protocols ?? {}
985
+ };
986
+ for (const [attr, protocols] of Object.entries(
987
+ extra.protocols
988
+ )) {
989
+ baseProtocols[attr] = Array.from(
990
+ /* @__PURE__ */ new Set([...baseProtocols[attr] ?? [], ...protocols])
991
+ );
992
+ }
993
+ out.protocols = baseProtocols;
994
+ }
995
+ for (const [k, v] of Object.entries(extra)) {
996
+ if (k === "tagNames" || k === "attributes" || k === "protocols") continue;
997
+ out[k] = v;
998
+ }
999
+ return out;
1000
+ }
1001
+ function baseComponents() {
1002
+ return {
1003
+ a: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1004
+ "a",
1005
+ {
1006
+ ...props,
1007
+ className: chunkS5RVSXDV_cjs.cn(
1008
+ "text-primary-800 hover:text-primary-900 dark:text-primary-300 underline underline-offset-2",
1009
+ props.className
1010
+ ),
1011
+ target: props.target ?? "_blank",
1012
+ rel: props.rel ?? "noopener noreferrer",
1013
+ children
1014
+ }
1015
+ ),
1016
+ pre: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1017
+ "pre",
1018
+ {
1019
+ ...props,
1020
+ tabIndex: 0,
1021
+ className: chunkS5RVSXDV_cjs.cn(
1022
+ "overflow-x-auto rounded-lg bg-neutral-900 p-3 text-sm text-neutral-100 dark:bg-neutral-950",
1023
+ props.className
1024
+ )
1025
+ }
1026
+ ),
1027
+ code: ({ node: _node, ...props }) => {
1028
+ const isBlock = typeof props.className === "string" && props.className.includes("language-");
1029
+ return /* @__PURE__ */ jsxRuntime.jsx(
1030
+ "code",
1031
+ {
1032
+ ...props,
1033
+ className: chunkS5RVSXDV_cjs.cn(
1034
+ !isBlock && "rounded bg-neutral-200 px-1 py-0.5 text-[0.85em] text-neutral-800 dark:bg-neutral-700 dark:text-neutral-100",
1035
+ props.className
1036
+ )
1037
+ }
1038
+ );
1039
+ },
1040
+ input: ({ node: _node, ...props }) => {
1041
+ if (props.type === "checkbox") {
1042
+ return /* @__PURE__ */ jsxRuntime.jsx(
1043
+ "input",
1044
+ {
1045
+ ...props,
1046
+ "aria-label": props["aria-label"] ?? (props["aria-labelledby"] ? void 0 : "Task list item")
1047
+ }
1048
+ );
1049
+ }
1050
+ return /* @__PURE__ */ jsxRuntime.jsx("input", { ...props });
1051
+ },
1052
+ table: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "my-2 overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
1053
+ "table",
1054
+ {
1055
+ ...props,
1056
+ className: chunkS5RVSXDV_cjs.cn(
1057
+ "w-full border-collapse text-sm [&_td]:border [&_td]:border-neutral-200 [&_td]:px-2 [&_td]:py-1 dark:[&_td]:border-neutral-700 [&_th]:border [&_th]:border-neutral-200 [&_th]:px-2 [&_th]:py-1 [&_th]:text-start dark:[&_th]:border-neutral-700",
1058
+ props.className
1059
+ )
1060
+ }
1061
+ ) }),
1062
+ // Tailwind's preflight resets list markers/padding; restore them explicitly
1063
+ // so bullets/numbers show without depending on the typography plugin.
1064
+ ul: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("ul", { ...props, className: chunkS5RVSXDV_cjs.cn("list-disc ps-5", props.className) }),
1065
+ ol: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("ol", { ...props, className: chunkS5RVSXDV_cjs.cn("list-decimal ps-5", props.className) }),
1066
+ li: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("li", { ...props, className: chunkS5RVSXDV_cjs.cn("ps-1", props.className) }),
1067
+ // Preflight also flattens headings to body size/weight; restore a sensible
1068
+ // hierarchy without depending on the typography plugin.
1069
+ h1: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1070
+ "h1",
1071
+ {
1072
+ ...props,
1073
+ className: chunkS5RVSXDV_cjs.cn("mt-3 mb-1 text-xl font-semibold", props.className),
1074
+ children
1075
+ }
1076
+ ),
1077
+ h2: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1078
+ "h2",
1079
+ {
1080
+ ...props,
1081
+ className: chunkS5RVSXDV_cjs.cn("mt-3 mb-1 text-lg font-semibold", props.className),
1082
+ children
1083
+ }
1084
+ ),
1085
+ h3: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1086
+ "h3",
1087
+ {
1088
+ ...props,
1089
+ className: chunkS5RVSXDV_cjs.cn("mt-2 mb-1 text-base font-semibold", props.className),
1090
+ children
1091
+ }
1092
+ ),
1093
+ h4: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1094
+ "h4",
1095
+ {
1096
+ ...props,
1097
+ className: chunkS5RVSXDV_cjs.cn("mt-2 mb-1 text-sm font-semibold", props.className),
1098
+ children
1099
+ }
1100
+ ),
1101
+ h5: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1102
+ "h5",
842
1103
  {
843
- id: "edit",
844
- label: "Edit message",
845
- icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { size: 14, "aria-hidden": "true" }),
846
- onSelect: startEdit
1104
+ ...props,
1105
+ className: chunkS5RVSXDV_cjs.cn("mt-2 mb-1 text-sm font-semibold", props.className),
1106
+ children
847
1107
  }
848
- ] : []
1108
+ ),
1109
+ h6: ({ node: _node, children, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1110
+ "h6",
1111
+ {
1112
+ ...props,
1113
+ className: chunkS5RVSXDV_cjs.cn(
1114
+ "mt-2 mb-1 text-xs font-semibold tracking-wide uppercase",
1115
+ props.className
1116
+ ),
1117
+ children
1118
+ }
1119
+ ),
1120
+ hr: ({ node: _node, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
1121
+ "hr",
1122
+ {
1123
+ ...props,
1124
+ className: chunkS5RVSXDV_cjs.cn(
1125
+ "my-2 border-neutral-300 dark:border-neutral-600",
1126
+ props.className
1127
+ )
1128
+ }
1129
+ )
1130
+ };
1131
+ }
1132
+ function createMarkdownRenderer(options = {}) {
1133
+ const { plugins = [], trusted = false } = options;
1134
+ const remarkPlugins = [
1135
+ remarkGfm__default.default,
1136
+ remarkPreserveLineBreaks,
1137
+ ...plugins.flatMap((p) => p.remarkPlugins ?? [])
849
1138
  ];
850
- return /* @__PURE__ */ jsxRuntime.jsxs(
851
- "div",
852
- {
853
- "data-slot": "superchat-message",
854
- role: "article",
855
- "aria-label": `${authorName}, ${formatTime(message.time)}`,
856
- className: chunkS5RVSXDV_cjs.cn(
857
- "group flex gap-2",
858
- isSelf ? "flex-row-reverse" : "flex-row"
859
- ),
860
- children: [
861
- /* @__PURE__ */ jsxRuntime.jsx(ParticipantAvatar, { participant }),
862
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkS5RVSXDV_cjs.cn("flex min-w-0 flex-col gap-1", isSelf && "items-end"), children: [
863
- /* @__PURE__ */ jsxRuntime.jsxs(
864
- "div",
865
- {
866
- "data-slot": "superchat-message-meta",
867
- className: "flex items-baseline gap-2",
868
- children: [
869
- /* @__PURE__ */ jsxRuntime.jsx(
870
- "span",
871
- {
872
- className: "text-xs font-medium",
873
- style: accentTextColor ? { color: accentTextColor } : void 0,
874
- children: authorName
875
- }
876
- ),
877
- participant?.role && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: participant.role }),
878
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] text-neutral-500 dark:text-neutral-400", children: formatTime(message.time) }),
879
- message.editedAt && /* @__PURE__ */ jsxRuntime.jsx(
880
- "span",
881
- {
882
- "data-slot": "superchat-edited-indicator",
883
- className: "text-[10px] text-neutral-500 dark:text-neutral-400",
884
- title: `Edited ${formatTime(message.editedAt)}`,
885
- children: "(edited)"
886
- }
887
- )
888
- ]
889
- }
890
- ),
891
- /* @__PURE__ */ jsxRuntime.jsxs(
892
- "div",
893
- {
894
- className: chunkS5RVSXDV_cjs.cn(
895
- "flex items-center gap-1",
896
- isSelf ? "flex-row-reverse" : "flex-row"
897
- ),
898
- children: [
899
- hasActions && /* @__PURE__ */ jsxRuntime.jsx(
900
- MessageOverflowMenu,
901
- {
902
- isSelf,
903
- actions,
904
- footerVisible
905
- }
906
- ),
907
- /* @__PURE__ */ jsxRuntime.jsx(
908
- chunkWIAQQNFU_cjs.ChatBubble,
909
- {
910
- ref: bubbleRef,
911
- "data-slot": "superchat-bubble",
912
- variant: isSelf ? "user" : "assistant",
913
- hasError: message.status === "error",
914
- className: "text-sm has-[[data-slot=superchat-nitro-table]]:w-full has-[[data-slot=superchat-nitro-table]]:max-w-full",
915
- children: isEditing ? /* @__PURE__ */ jsxRuntime.jsxs(
916
- "div",
917
- {
918
- "data-slot": "superchat-message-editor",
919
- className: "flex w-80 max-w-full flex-col gap-2",
920
- children: [
921
- /* @__PURE__ */ jsxRuntime.jsx(
922
- "textarea",
923
- {
924
- value: draft,
925
- ref: editRef,
926
- rows: 2,
927
- onChange: (e) => {
928
- setDraft(e.target.value);
929
- autosize();
930
- },
931
- onPaste: handleEditPaste,
932
- onKeyDown: (e) => {
933
- if (e.key === "Enter" && !e.shiftKey) {
934
- e.preventDefault();
935
- saveEdit();
936
- } else if (e.key === "Escape") {
937
- e.preventDefault();
938
- cancelEdit();
939
- }
940
- },
941
- "aria-label": "Edit message",
942
- className: "focus:ring-primary-500 max-h-60 min-h-16 w-full resize-none rounded-lg border border-neutral-300 bg-white px-3 py-2 text-sm text-neutral-900 focus:ring-1 focus:outline-none dark:border-neutral-600 dark:bg-neutral-900 dark:text-white"
943
- }
944
- ),
945
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2", children: [
946
- /* @__PURE__ */ jsxRuntime.jsx(
947
- "button",
948
- {
949
- type: "button",
950
- onClick: cancelEdit,
951
- className: "rounded-md px-2.5 py-1 text-xs font-medium text-neutral-200 hover:bg-white/10",
952
- children: "Cancel"
953
- }
954
- ),
955
- /* @__PURE__ */ jsxRuntime.jsx(
956
- "button",
957
- {
958
- type: "button",
959
- onClick: saveEdit,
960
- disabled: !draft.trim() || draft.trim() === message.text,
961
- className: "rounded-md bg-white px-2.5 py-1 text-xs font-medium text-neutral-900 hover:bg-neutral-100 disabled:opacity-40",
962
- children: "Save"
963
- }
964
- )
965
- ] })
966
- ]
967
- }
968
- ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
969
- message.content?.map((block, i) => {
970
- if (block.type === "tool_use" && block.toolCall) {
971
- return /* @__PURE__ */ jsxRuntime.jsx(chunkWIAQQNFU_cjs.MCPToolCallDisplay, { toolCall: block.toolCall }, i);
972
- }
973
- if ((block.type === "text" || block.type === "thinking") && block.text) {
974
- return /* @__PURE__ */ jsxRuntime.jsx(
975
- "div",
976
- {
977
- className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
978
- children: renderText(block.text, {
979
- messageId: message.id,
980
- streaming,
981
- role: participant?.kind === "human" ? "user" : "assistant"
982
- })
983
- },
984
- i
985
- );
986
- }
987
- if (block.type === "code" && block.text) {
988
- const fenced = `\`\`\`${block.language ?? ""}
989
- ${block.text}
990
- \`\`\``;
991
- return /* @__PURE__ */ jsxRuntime.jsx(
992
- "div",
993
- {
994
- className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word",
995
- children: renderText(fenced, {
996
- messageId: message.id,
997
- streaming,
998
- role: participant?.kind === "human" ? "user" : "assistant"
999
- })
1000
- },
1001
- i
1002
- );
1003
- }
1004
- return null;
1005
- }),
1006
- message.text && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none **:wrap-break-word", children: renderText(message.text, {
1007
- messageId: message.id,
1008
- streaming,
1009
- role: participant?.kind === "human" ? "user" : "assistant"
1010
- }) }),
1011
- streaming && !hasBody && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkWIAQQNFU_cjs.AITypingIndicator, {}) })
1012
- ] })
1013
- }
1014
- )
1015
- ]
1016
- }
1017
- ),
1018
- hasActions && /* @__PURE__ */ jsxRuntime.jsx(
1019
- MessageActionsBar,
1020
- {
1021
- ref: actionsBarRef,
1022
- actions,
1023
- isSelf
1024
- }
1025
- )
1026
- ] })
1027
- ]
1028
- }
1139
+ const pluginRehype = plugins.flatMap(
1140
+ (p) => p.rehypePlugins ?? []
1029
1141
  );
1030
- });
1031
- var sidebarItem = classVarianceAuthority.cva(
1032
- "flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors",
1033
- {
1034
- variants: {
1035
- active: {
1036
- true: "bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-100",
1037
- false: "text-neutral-700 hover:bg-neutral-100 dark:text-neutral-200 dark:hover:bg-neutral-800"
1038
- }
1142
+ const sanitizeSchema = plugins.reduce(
1143
+ (acc, p) => mergeSanitizeSchema(acc, p.sanitizeSchema),
1144
+ baseSanitizeSchema()
1145
+ );
1146
+ const rehypePlugins = trusted ? pluginRehype : [...pluginRehype, [rehypeSanitize__default.default, sanitizeSchema]];
1147
+ const components = plugins.reduce(
1148
+ (acc, p) => ({ ...acc, ...p.components }),
1149
+ baseComponents()
1150
+ );
1151
+ const MarkdownRenderer = (text, ctx) => /* @__PURE__ */ jsxRuntime.jsx(
1152
+ MarkdownContent,
1153
+ {
1154
+ text,
1155
+ messageId: ctx.messageId,
1156
+ streaming: ctx.streaming,
1157
+ remarkPlugins,
1158
+ rehypePlugins,
1159
+ components
1039
1160
  },
1040
- defaultVariants: { active: false }
1161
+ ctx.messageId
1162
+ );
1163
+ return MarkdownRenderer;
1164
+ }
1165
+ var transformUrl = (url, key, node) => {
1166
+ if (key === "src" && node.tagName === "img" && (/^data:image\//i.test(url) || /^blob:/i.test(url))) {
1167
+ return url;
1041
1168
  }
1042
- );
1169
+ return Markdown.defaultUrlTransform(url);
1170
+ };
1171
+ var MarkdownContent = React3__namespace.memo(function MarkdownContent2({
1172
+ text,
1173
+ messageId,
1174
+ streaming,
1175
+ remarkPlugins,
1176
+ rehypePlugins,
1177
+ components
1178
+ }) {
1179
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkJFLC7SHM_cjs.TextRenderContext.Provider, { value: { messageId, streaming }, children: /* @__PURE__ */ jsxRuntime.jsx(
1180
+ Markdown__default.default,
1181
+ {
1182
+ remarkPlugins,
1183
+ rehypePlugins,
1184
+ urlTransform: transformUrl,
1185
+ components,
1186
+ children: text
1187
+ }
1188
+ ) });
1189
+ });
1043
1190
  function VirtualThread({
1044
1191
  items,
1045
1192
  participantById,
@@ -1050,32 +1197,28 @@ function VirtualThread({
1050
1197
  editable,
1051
1198
  onMessageEdited,
1052
1199
  defaultCopyFormat,
1053
- order,
1054
- conversationId,
1200
+ onOpenMedia,
1201
+ openMediaLabel,
1202
+ playMediaLabel,
1203
+ mediaErrorLabel,
1204
+ mediaRetryLabel,
1205
+ scrollRef,
1206
+ contentRef,
1055
1207
  containerProps
1056
1208
  }) {
1057
- const parentRef = React2__namespace.useRef(null);
1058
1209
  const virtualizer = reactVirtual.useVirtualizer({
1059
1210
  count: items.length,
1060
- getScrollElement: () => parentRef.current,
1211
+ getScrollElement: () => scrollRef.current,
1061
1212
  // Rough first guess; real heights are measured via measureElement.
1062
1213
  estimateSize: () => 88,
1063
1214
  overscan: 10,
1064
1215
  getItemKey: (index) => items[index]?.id ?? index
1065
1216
  });
1066
- const count = items.length;
1067
- React2__namespace.useEffect(() => {
1068
- if (count === 0) return;
1069
- if (order === "desc") {
1070
- virtualizer.scrollToIndex(0, { align: "start" });
1071
- } else {
1072
- virtualizer.scrollToIndex(count - 1, { align: "end" });
1073
- }
1074
- }, [count, conversationId, order]);
1075
1217
  const virtualItems = virtualizer.getVirtualItems();
1076
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ...containerProps, ref: parentRef, children: /* @__PURE__ */ jsxRuntime.jsx(
1218
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...containerProps, ref: scrollRef, children: /* @__PURE__ */ jsxRuntime.jsx(
1077
1219
  "div",
1078
1220
  {
1221
+ ref: contentRef,
1079
1222
  style: {
1080
1223
  height: virtualizer.getTotalSize(),
1081
1224
  position: "relative",
@@ -1107,7 +1250,12 @@ function VirtualThread({
1107
1250
  onReferenceClick,
1108
1251
  editable,
1109
1252
  onMessageEdited,
1110
- defaultCopyFormat
1253
+ defaultCopyFormat,
1254
+ onOpenMedia,
1255
+ openMediaLabel,
1256
+ playMediaLabel,
1257
+ mediaErrorLabel,
1258
+ mediaRetryLabel
1111
1259
  }
1112
1260
  ) })
1113
1261
  },
@@ -1119,6 +1267,11 @@ function VirtualThread({
1119
1267
  }
1120
1268
  function SuperChat({
1121
1269
  conversation,
1270
+ view,
1271
+ defaultView = "thread",
1272
+ onViewChange,
1273
+ mediaFeedProps,
1274
+ mediaLabels,
1122
1275
  currentParticipantId,
1123
1276
  renderPlugins,
1124
1277
  renderTextContent,
@@ -1130,44 +1283,366 @@ function SuperChat({
1130
1283
  linkBuilder,
1131
1284
  defaultCopyFormat,
1132
1285
  className,
1286
+ showHeader = true,
1287
+ placeholder,
1288
+ allowAttachments,
1289
+ agents,
1290
+ selectedAgent,
1291
+ onAgentChange,
1292
+ agentSelectorLabel,
1293
+ modelSelectorProps,
1294
+ isStreaming,
1295
+ onStop,
1296
+ stopLabel,
1133
1297
  onMessageSent,
1134
1298
  onMessageEdited,
1135
1299
  onConversationClosed,
1136
1300
  onReferenceClick,
1137
1301
  onBack
1138
1302
  }) {
1139
- const headingId = React2__namespace.useId();
1140
- React2__namespace.useEffect(() => {
1141
- chunkX4XPNTCZ_cjs.notifyComposerMigrationOnce("SuperChat");
1303
+ const headingId = React3__namespace.useId();
1304
+ const [internalView, setInternalView] = React3__namespace.useState({
1305
+ conversationId: conversation.id,
1306
+ view: defaultView
1307
+ });
1308
+ const activeView = view ?? (internalView.conversationId === conversation.id ? internalView.view : "thread");
1309
+ const labels = {
1310
+ backToConversation: "Back to conversation",
1311
+ openMedia: "Open in media feed",
1312
+ playMedia: "Play",
1313
+ unknownAuthor: "Unknown",
1314
+ ...mediaLabels
1315
+ };
1316
+ const mediaItems = React3__namespace.useMemo(() => {
1317
+ const items = getConversationMediaItems(conversation);
1318
+ return order === "desc" ? items.reverse() : items;
1319
+ }, [conversation, order]);
1320
+ const [mediaSelection, setMediaSelection] = React3__namespace.useState();
1321
+ const [manualPlaybackRequest, setManualPlaybackRequest] = React3__namespace.useState();
1322
+ const playbackRequestCounter = React3__namespace.useRef(0);
1323
+ const mediaFeedRef = React3__namespace.useRef(null);
1324
+ const backToConversationRef = React3__namespace.useRef(null);
1325
+ const focusMediaOnOpenRef = React3__namespace.useRef(false);
1326
+ const focusThreadOnBackRef = React3__namespace.useRef(false);
1327
+ const mediaReturnTargetRef = React3__namespace.useRef(void 0);
1328
+ const mediaContextRef = React3__namespace.useRef({
1329
+ conversation,
1330
+ view,
1331
+ onViewChange,
1332
+ mediaFeedProps,
1333
+ mediaItems
1334
+ });
1335
+ mediaContextRef.current = {
1336
+ conversation,
1337
+ view,
1338
+ onViewChange,
1339
+ mediaFeedProps,
1340
+ mediaItems
1341
+ };
1342
+ const setView = React3__namespace.useCallback((next) => {
1343
+ const context = mediaContextRef.current;
1344
+ if (context.view === void 0)
1345
+ setInternalView({ conversationId: context.conversation.id, view: next });
1346
+ context.onViewChange?.(next, { conversation: context.conversation });
1347
+ }, []);
1348
+ const handleMediaSelection = React3__namespace.useCallback((item) => {
1349
+ setMediaSelection({ conversationId: item.conversationId, itemId: item.id });
1350
+ mediaContextRef.current.mediaFeedProps?.onActiveItemChange?.(item);
1351
+ }, []);
1352
+ const handleOpenMedia = React3__namespace.useCallback(
1353
+ (messageId, attachmentId, play = false) => {
1354
+ const item = mediaContextRef.current.mediaItems.find(
1355
+ (candidate) => candidate.message.id === messageId && candidate.attachment.id === attachmentId
1356
+ );
1357
+ if (!item) return;
1358
+ handleMediaSelection(item);
1359
+ mediaReturnTargetRef.current = {
1360
+ conversationId: item.conversationId,
1361
+ messageId,
1362
+ attachmentId
1363
+ };
1364
+ focusMediaOnOpenRef.current = true;
1365
+ setManualPlaybackRequest(
1366
+ play ? {
1367
+ conversationId: item.conversationId,
1368
+ itemId: item.id,
1369
+ requestId: ++playbackRequestCounter.current
1370
+ } : void 0
1371
+ );
1372
+ setView("media");
1373
+ },
1374
+ [handleMediaSelection, setView]
1375
+ );
1376
+ const handleBackToConversation = React3__namespace.useCallback(() => {
1377
+ focusMediaOnOpenRef.current = false;
1378
+ focusThreadOnBackRef.current = true;
1379
+ setManualPlaybackRequest(void 0);
1380
+ setView("thread");
1381
+ }, [setView]);
1382
+ const hostPlaybackRequest = mediaFeedProps?.playbackRequest;
1383
+ const hostPlaybackKey = hostPlaybackRequest ? `${hostPlaybackRequest.itemId}\0${hostPlaybackRequest.requestId}` : void 0;
1384
+ React3__namespace.useEffect(() => {
1385
+ if (hostPlaybackKey === void 0) return;
1386
+ setManualPlaybackRequest(void 0);
1387
+ }, [hostPlaybackKey]);
1388
+ React3__namespace.useEffect(() => {
1389
+ if (internalView.conversationId !== conversation.id) {
1390
+ setInternalView({ conversationId: conversation.id, view: "thread" });
1391
+ }
1392
+ if (mediaReturnTargetRef.current?.conversationId !== conversation.id) {
1393
+ mediaReturnTargetRef.current = void 0;
1394
+ focusMediaOnOpenRef.current = false;
1395
+ focusThreadOnBackRef.current = false;
1396
+ setManualPlaybackRequest(void 0);
1397
+ }
1398
+ }, [conversation.id, internalView.conversationId]);
1399
+ React3__namespace.useEffect(() => {
1400
+ if (activeView !== "media" || !focusMediaOnOpenRef.current) return;
1401
+ const target = mediaFeedRef.current?.querySelector(
1402
+ 'article[tabindex="0"]'
1403
+ ) ?? mediaFeedRef.current?.querySelector('[role="feed"]');
1404
+ if (target) focusMediaOnOpenRef.current = false;
1405
+ (target ?? backToConversationRef.current)?.focus({ preventScroll: true });
1406
+ }, [
1407
+ activeView,
1408
+ mediaFeedProps?.loading,
1409
+ mediaFeedProps?.error,
1410
+ mediaItems.length
1411
+ ]);
1412
+ React3__namespace.useEffect(() => {
1413
+ chunkDZ3JTMKM_cjs.notifyComposerMigrationOnce("SuperChat");
1142
1414
  }, []);
1143
- const renderText = React2__namespace.useMemo(
1415
+ const renderText = React3__namespace.useMemo(
1144
1416
  () => renderTextContent ?? createMarkdownRenderer({
1145
1417
  plugins: renderPlugins,
1146
1418
  trusted: trustedContent
1147
1419
  }),
1148
1420
  [renderTextContent, renderPlugins, trustedContent]
1149
1421
  );
1150
- const threadRef = React2__namespace.useRef(null);
1151
- React2__namespace.useEffect(() => {
1152
- if (virtualized) return;
1153
- const el = threadRef.current;
1154
- if (!el) return;
1155
- el.scrollTop = order === "desc" ? 0 : el.scrollHeight;
1156
- }, [conversation.thread.length, conversation.id, order, virtualized]);
1157
- const participantById = React2__namespace.useMemo(() => {
1422
+ const prefersReducedMotion = chunkYW2AKBLS_cjs.usePrefersReducedMotion();
1423
+ const {
1424
+ containerRef: threadRef,
1425
+ contentRef: threadContentRef,
1426
+ isAtBottom,
1427
+ scrollToBottom,
1428
+ anchorToTurnStart,
1429
+ followIfPinned,
1430
+ stopFollowing
1431
+ } = chunkVPTASZ2O_cjs.useStickToBottom({
1432
+ disabled: order === "desc" || activeView === "media"
1433
+ });
1434
+ React3__namespace.useEffect(() => {
1435
+ if (activeView !== "thread") return;
1436
+ setManualPlaybackRequest(void 0);
1437
+ if (!focusThreadOnBackRef.current) return;
1438
+ focusThreadOnBackRef.current = false;
1439
+ const source = mediaReturnTargetRef.current;
1440
+ const launchId = source ? JSON.stringify([source.messageId, source.attachmentId]) : void 0;
1441
+ const launcher = source?.conversationId === conversation.id ? Array.from(
1442
+ threadRef.current?.querySelectorAll(
1443
+ "[data-media-launch-id]"
1444
+ ) ?? []
1445
+ ).find((button) => button.dataset.mediaLaunchId === launchId) : void 0;
1446
+ (launcher ?? threadRef.current)?.focus({ preventScroll: true });
1447
+ }, [activeView, conversation.id, threadRef]);
1448
+ const [hasNewBelow, setHasNewBelow] = React3__namespace.useState(false);
1449
+ const [turnStartId, setTurnStartId] = React3__namespace.useState(null);
1450
+ const [turnMinHeight, setTurnMinHeight] = React3__namespace.useState();
1451
+ const anchoredTurnRef = React3__namespace.useRef(null);
1452
+ const threadSnapshotRef = React3__namespace.useRef(void 0);
1453
+ const atBottomRef = React3__namespace.useRef(isAtBottom);
1454
+ atBottomRef.current = isAtBottom;
1455
+ const pendingMediaOwnSendRef = React3__namespace.useRef(false);
1456
+ const pendingMediaAppendRef = React3__namespace.useRef(false);
1457
+ React3__namespace.useEffect(() => {
1458
+ threadSnapshotRef.current = void 0;
1459
+ pendingMediaOwnSendRef.current = false;
1460
+ pendingMediaAppendRef.current = false;
1461
+ setTurnStartId(null);
1462
+ anchoredTurnRef.current = null;
1463
+ if (order === "desc") {
1464
+ const el = threadRef.current;
1465
+ if (el) el.scrollTop = 0;
1466
+ } else {
1467
+ scrollToBottom("auto");
1468
+ }
1469
+ setHasNewBelow(false);
1470
+ }, [conversation.id, order]);
1471
+ const threadLength = conversation.thread.length;
1472
+ const prevThreadLengthRef = React3__namespace.useRef(threadLength);
1473
+ const prevMessageIdsRef = React3__namespace.useRef(
1474
+ new Set(conversation.thread.map((message) => message.id))
1475
+ );
1476
+ const policyConversationRef = React3__namespace.useRef(conversation.id);
1477
+ const policyBaselinedRef = React3__namespace.useRef(false);
1478
+ React3__namespace.useEffect(() => {
1479
+ if (!policyBaselinedRef.current || policyConversationRef.current !== conversation.id) {
1480
+ policyBaselinedRef.current = true;
1481
+ policyConversationRef.current = conversation.id;
1482
+ prevThreadLengthRef.current = threadLength;
1483
+ prevMessageIdsRef.current = new Set(
1484
+ conversation.thread.map((message) => message.id)
1485
+ );
1486
+ if (order !== "desc" && [...conversation.thread].sort(byTime).at(-1)?.status === "streaming") {
1487
+ stopFollowing();
1488
+ }
1489
+ return;
1490
+ }
1491
+ if (threadLength === prevThreadLengthRef.current) return;
1492
+ const grew = threadLength > prevThreadLengthRef.current;
1493
+ prevThreadLengthRef.current = threadLength;
1494
+ if (grew && activeView === "media") pendingMediaAppendRef.current = true;
1495
+ if (order === "desc") {
1496
+ const el = threadRef.current;
1497
+ if (el) el.scrollTop = 0;
1498
+ return;
1499
+ }
1500
+ const prevIds = prevMessageIdsRef.current;
1501
+ let turnStart;
1502
+ if (grew && currentParticipantId) {
1503
+ for (const message of [...conversation.thread].sort(byTime)) {
1504
+ if (!prevIds.has(message.id) && message.participantId === currentParticipantId) {
1505
+ turnStart = message.id;
1506
+ }
1507
+ }
1508
+ }
1509
+ if (turnStart) {
1510
+ if (activeView === "media") pendingMediaOwnSendRef.current = true;
1511
+ if (virtualized) {
1512
+ scrollToBottom("auto");
1513
+ } else {
1514
+ setTurnStartId(turnStart);
1515
+ }
1516
+ } else if (grew) {
1517
+ const newest = [...conversation.thread].sort(byTime).at(-1);
1518
+ if (newest?.status === "streaming") {
1519
+ followIfPinned("auto");
1520
+ stopFollowing();
1521
+ } else if (!followIfPinned("auto")) {
1522
+ setHasNewBelow(true);
1523
+ }
1524
+ } else {
1525
+ followIfPinned("auto");
1526
+ }
1527
+ }, [threadLength, order, isAtBottom, conversation.id, activeView]);
1528
+ React3__namespace.useLayoutEffect(() => {
1529
+ if (activeView !== "thread") return;
1530
+ const container = threadRef.current;
1531
+ if (!container) return;
1532
+ const snapshot = threadSnapshotRef.current;
1533
+ const sameThread = snapshot?.conversationId === conversation.id && snapshot.order === order;
1534
+ const ownSend = pendingMediaOwnSendRef.current;
1535
+ const appended = pendingMediaAppendRef.current;
1536
+ pendingMediaOwnSendRef.current = false;
1537
+ pendingMediaAppendRef.current = false;
1538
+ if (order === "desc") {
1539
+ container.scrollTop = sameThread && !appended ? snapshot.scrollTop : 0;
1540
+ } else if (ownSend && !virtualized) ; else if (sameThread && !ownSend && (!snapshot.atBottom || !appended)) {
1541
+ container.scrollTop = snapshot.scrollTop;
1542
+ if (!snapshot.atBottom) stopFollowing();
1543
+ } else {
1544
+ scrollToBottom("auto");
1545
+ if ([...conversation.thread].sort(byTime).at(-1)?.status === "streaming")
1546
+ stopFollowing();
1547
+ }
1548
+ return () => {
1549
+ threadSnapshotRef.current = {
1550
+ conversationId: conversation.id,
1551
+ order,
1552
+ scrollTop: container.scrollTop,
1553
+ atBottom: atBottomRef.current
1554
+ };
1555
+ };
1556
+ }, [conversation.id, order, activeView, virtualized]);
1557
+ React3__namespace.useLayoutEffect(() => {
1558
+ if (!turnStartId || anchoredTurnRef.current === turnStartId) return;
1559
+ const container = threadRef.current;
1560
+ if (!container) return;
1561
+ const reserve = Math.max(0, container.clientHeight - 32);
1562
+ if (turnMinHeight !== reserve) {
1563
+ setTurnMinHeight(reserve);
1564
+ return;
1565
+ }
1566
+ const target = container.querySelector(
1567
+ '[data-slot="superchat-turn"]'
1568
+ );
1569
+ if (target) {
1570
+ anchorToTurnStart(target, prefersReducedMotion ? "auto" : "smooth");
1571
+ anchoredTurnRef.current = turnStartId;
1572
+ }
1573
+ }, [
1574
+ turnStartId,
1575
+ turnMinHeight,
1576
+ anchorToTurnStart,
1577
+ prefersReducedMotion,
1578
+ threadRef,
1579
+ activeView
1580
+ ]);
1581
+ React3__namespace.useEffect(() => {
1582
+ prevMessageIdsRef.current = new Set(
1583
+ conversation.thread.map((message) => message.id)
1584
+ );
1585
+ });
1586
+ React3__namespace.useEffect(() => {
1587
+ if (isAtBottom) setHasNewBelow(false);
1588
+ }, [isAtBottom]);
1589
+ const newestMessage = React3__namespace.useMemo(
1590
+ () => [...conversation.thread].sort(byTime).at(-1),
1591
+ [conversation]
1592
+ );
1593
+ const raiseNewBelow = React3__namespace.useCallback(() => {
1594
+ if (order !== "desc") setHasNewBelow(true);
1595
+ }, [order]);
1596
+ const resumeFollowing = React3__namespace.useCallback(() => {
1597
+ if (order !== "desc") scrollToBottom("auto");
1598
+ }, [order, scrollToBottom]);
1599
+ chunkVPTASZ2O_cjs.useStreamEndedBelowFold(
1600
+ newestMessage,
1601
+ isAtBottom,
1602
+ raiseNewBelow,
1603
+ resumeFollowing
1604
+ );
1605
+ const handleJumpToBottom = React3__namespace.useCallback(() => {
1606
+ scrollToBottom(prefersReducedMotion ? "auto" : "smooth");
1607
+ }, [scrollToBottom, prefersReducedMotion]);
1608
+ const participantById = React3__namespace.useMemo(() => {
1158
1609
  const map = /* @__PURE__ */ new Map();
1159
1610
  conversation.participants.forEach((p) => map.set(p.id, p));
1160
1611
  return map;
1161
1612
  }, [conversation]);
1162
- const orderedThread = React2__namespace.useMemo(() => {
1613
+ const orderedThread = React3__namespace.useMemo(() => {
1163
1614
  const sorted = [...conversation.thread].sort(byTime);
1164
1615
  return order === "desc" ? sorted.reverse() : sorted;
1165
1616
  }, [conversation, order]);
1166
- const onMessageEditedRef = React2__namespace.useRef(onMessageEdited);
1617
+ const turnIndex = React3__namespace.useMemo(
1618
+ () => turnStartId && order !== "desc" ? orderedThread.findIndex((message) => message.id === turnStartId) : -1,
1619
+ [orderedThread, turnStartId, order]
1620
+ );
1621
+ const renderMessageRow = (m) => /* @__PURE__ */ jsxRuntime.jsx(
1622
+ MessageRow,
1623
+ {
1624
+ message: m,
1625
+ participant: participantById.get(m.participantId),
1626
+ isSelf: !!currentParticipantId && m.participantId === currentParticipantId,
1627
+ renderText,
1628
+ linkBuilder,
1629
+ onReferenceClick,
1630
+ editable,
1631
+ onMessageEdited: handleMessageEdited,
1632
+ defaultCopyFormat,
1633
+ onOpenMedia: handleOpenMedia,
1634
+ openMediaLabel: labels.openMedia,
1635
+ playMediaLabel: labels.playMedia,
1636
+ mediaErrorLabel: mediaFeedProps?.labels?.mediaError,
1637
+ mediaRetryLabel: mediaFeedProps?.labels?.retry
1638
+ },
1639
+ m.id
1640
+ );
1641
+ const onMessageEditedRef = React3__namespace.useRef(onMessageEdited);
1167
1642
  onMessageEditedRef.current = onMessageEdited;
1168
- const conversationRef = React2__namespace.useRef(conversation);
1643
+ const conversationRef = React3__namespace.useRef(conversation);
1169
1644
  conversationRef.current = conversation;
1170
- const handleMessageEdited = React2__namespace.useCallback(
1645
+ const handleMessageEdited = React3__namespace.useCallback(
1171
1646
  (messageId, text) => {
1172
1647
  onMessageEditedRef.current?.(messageId, text, {
1173
1648
  conversation: conversationRef.current
@@ -1176,7 +1651,7 @@ function SuperChat({
1176
1651
  []
1177
1652
  );
1178
1653
  const editable = !readOnly && !!onMessageEdited;
1179
- const mentionOptions = React2__namespace.useMemo(
1654
+ const mentionOptions = React3__namespace.useMemo(
1180
1655
  () => conversation.participants.filter((p) => p.kind !== "system").map((p) => ({
1181
1656
  id: p.id,
1182
1657
  label: p.name,
@@ -1186,17 +1661,17 @@ function SuperChat({
1186
1661
  })),
1187
1662
  [conversation.participants]
1188
1663
  );
1189
- const composerAccept = React2__namespace.useMemo(
1664
+ const composerAccept = React3__namespace.useMemo(
1190
1665
  () => acceptTokensFor(acceptedFileTypes),
1191
1666
  [acceptedFileTypes]
1192
1667
  );
1193
- const [draft, setDraft] = React2__namespace.useState("");
1194
- const draftEpochRef = React2__namespace.useRef(0);
1195
- const handleDraftChange = React2__namespace.useCallback((value) => {
1668
+ const [draft, setDraft] = React3__namespace.useState("");
1669
+ const draftEpochRef = React3__namespace.useRef(0);
1670
+ const handleDraftChange = React3__namespace.useCallback((value) => {
1196
1671
  draftEpochRef.current += 1;
1197
1672
  setDraft(value);
1198
1673
  }, []);
1199
- const handleComposerSend = React2__namespace.useCallback(
1674
+ const handleComposerSend = React3__namespace.useCallback(
1200
1675
  async (message) => {
1201
1676
  const epoch = draftEpochRef.current;
1202
1677
  try {
@@ -1227,7 +1702,7 @@ function SuperChat({
1227
1702
  className
1228
1703
  ),
1229
1704
  children: [
1230
- /* @__PURE__ */ jsxRuntime.jsxs(
1705
+ showHeader ? /* @__PURE__ */ jsxRuntime.jsxs(
1231
1706
  "header",
1232
1707
  {
1233
1708
  "data-slot": "superchat-header",
@@ -1286,77 +1761,165 @@ function SuperChat({
1286
1761
  onClick: () => onConversationClosed(conversation),
1287
1762
  "aria-label": "Close conversation",
1288
1763
  className: "rounded-md p-1 text-neutral-400 hover:bg-neutral-100 dark:hover:bg-neutral-800",
1289
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkWIAQQNFU_cjs.CloseIcon, {})
1764
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkXRVMYT5G_cjs.CloseIcon, {})
1290
1765
  }
1291
1766
  )
1292
1767
  ]
1293
1768
  }
1769
+ ) : (
1770
+ // Keeps the panel's aria-labelledby reference valid without a visible header.
1771
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { id: headingId, className: "sr-only", children: conversation.title })
1294
1772
  ),
1295
- virtualized ? /* @__PURE__ */ jsxRuntime.jsx(
1296
- VirtualThread,
1773
+ activeView === "media" ? /* @__PURE__ */ jsxRuntime.jsxs(
1774
+ "div",
1297
1775
  {
1298
- items: orderedThread,
1299
- participantById,
1300
- currentParticipantId,
1301
- renderText,
1302
- linkBuilder,
1303
- onReferenceClick,
1304
- editable,
1305
- onMessageEdited: handleMessageEdited,
1306
- defaultCopyFormat,
1307
- order,
1308
- conversationId: conversation.id,
1309
- containerProps: {
1310
- "data-slot": "superchat-thread",
1311
- role: "log",
1312
- "aria-label": "Messages",
1313
- "aria-live": "polite",
1314
- // Focusable so keyboard-only users can scroll the message history.
1315
- tabIndex: 0,
1316
- className: "flex-1 overflow-y-auto p-4"
1317
- }
1776
+ "data-slot": "superchat-media-view",
1777
+ className: "flex min-h-0 flex-1 flex-col",
1778
+ children: [
1779
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pt-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXRVMYT5G_cjs.ButtonGroup, { className: "justify-start", children: /* @__PURE__ */ jsxRuntime.jsx(
1780
+ chunkANMX7YDL_cjs.Button,
1781
+ {
1782
+ ref: backToConversationRef,
1783
+ variant: "ghost",
1784
+ size: "sm",
1785
+ leftIcon: /* @__PURE__ */ jsxRuntime.jsx(
1786
+ lucideReact.ArrowLeft,
1787
+ {
1788
+ className: "size-4 rtl:rotate-180",
1789
+ "aria-hidden": "true"
1790
+ }
1791
+ ),
1792
+ onClick: handleBackToConversation,
1793
+ children: labels.backToConversation
1794
+ }
1795
+ ) }) }),
1796
+ /* @__PURE__ */ React3.createElement(
1797
+ chunkAJPFQF3H_cjs.MediaFeed,
1798
+ {
1799
+ ...mediaFeedProps,
1800
+ ref: mediaFeedRef,
1801
+ key: conversation.id,
1802
+ items: mediaItems,
1803
+ getId: (item) => item.id,
1804
+ getMedia: (item) => item.attachment,
1805
+ getTitle: (item) => item.attachment.title ?? "",
1806
+ getCaption: (item) => item.attachment.caption ?? item.message.text,
1807
+ getAuthor: (item) => ({
1808
+ name: item.participant?.name ?? labels.unknownAuthor,
1809
+ avatar: item.participant?.avatar
1810
+ }),
1811
+ activeItemId: mediaFeedProps?.activeItemId ?? (mediaSelection?.conversationId === conversation.id ? mediaSelection.itemId : void 0),
1812
+ onActiveItemChange: handleMediaSelection,
1813
+ playbackRequest: manualPlaybackRequest?.conversationId === conversation.id ? manualPlaybackRequest : mediaFeedProps?.playbackRequest,
1814
+ className: chunkS5RVSXDV_cjs.cn("min-h-0 flex-1", mediaFeedProps?.className)
1815
+ }
1816
+ )
1817
+ ]
1318
1818
  }
1319
- ) : /* @__PURE__ */ jsxRuntime.jsx(
1819
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(
1320
1820
  "div",
1321
1821
  {
1322
- "data-slot": "superchat-thread",
1323
- ref: threadRef,
1324
- role: "log",
1325
- "aria-label": "Messages",
1326
- "aria-live": "polite",
1327
- tabIndex: 0,
1328
- className: "flex-1 space-y-4 overflow-y-auto p-4",
1329
- children: orderedThread.map((m) => /* @__PURE__ */ jsxRuntime.jsx(
1330
- MessageRow,
1331
- {
1332
- message: m,
1333
- participant: participantById.get(m.participantId),
1334
- isSelf: !!currentParticipantId && m.participantId === currentParticipantId,
1335
- renderText,
1336
- linkBuilder,
1337
- onReferenceClick,
1338
- editable,
1339
- onMessageEdited: handleMessageEdited,
1340
- defaultCopyFormat
1341
- },
1342
- m.id
1343
- ))
1822
+ "data-slot": "superchat-thread-viewport",
1823
+ className: "relative flex min-h-0 flex-1 flex-col",
1824
+ children: [
1825
+ virtualized ? /* @__PURE__ */ jsxRuntime.jsx(
1826
+ VirtualThread,
1827
+ {
1828
+ items: orderedThread,
1829
+ participantById,
1830
+ currentParticipantId,
1831
+ renderText,
1832
+ linkBuilder,
1833
+ onReferenceClick,
1834
+ editable,
1835
+ onMessageEdited: handleMessageEdited,
1836
+ defaultCopyFormat,
1837
+ onOpenMedia: handleOpenMedia,
1838
+ openMediaLabel: labels.openMedia,
1839
+ playMediaLabel: labels.playMedia,
1840
+ mediaErrorLabel: mediaFeedProps?.labels?.mediaError,
1841
+ mediaRetryLabel: mediaFeedProps?.labels?.retry,
1842
+ scrollRef: threadRef,
1843
+ contentRef: threadContentRef,
1844
+ containerProps: {
1845
+ "data-slot": "superchat-thread",
1846
+ role: "log",
1847
+ "aria-label": "Messages",
1848
+ "aria-live": "polite",
1849
+ // Focusable so keyboard-only users can scroll the message history.
1850
+ tabIndex: 0,
1851
+ className: "flex-1 overflow-y-auto p-4"
1852
+ }
1853
+ }
1854
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1855
+ "div",
1856
+ {
1857
+ "data-slot": "superchat-thread",
1858
+ ref: threadRef,
1859
+ role: "log",
1860
+ "aria-label": "Messages",
1861
+ "aria-live": "polite",
1862
+ tabIndex: 0,
1863
+ className: "flex-1 overflow-y-auto p-4",
1864
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: threadContentRef, className: "space-y-4", children: [
1865
+ (turnIndex === -1 ? orderedThread : orderedThread.slice(0, turnIndex)).map(renderMessageRow),
1866
+ turnIndex !== -1 && /* @__PURE__ */ jsxRuntime.jsx(
1867
+ "div",
1868
+ {
1869
+ "data-slot": "superchat-turn",
1870
+ className: "space-y-4",
1871
+ style: { minHeight: turnMinHeight },
1872
+ children: orderedThread.slice(turnIndex).map(renderMessageRow)
1873
+ }
1874
+ )
1875
+ ] })
1876
+ }
1877
+ ),
1878
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIEY3ZJIT_cjs.AnimatedPresence, { children: order !== "desc" && !isAtBottom && /* @__PURE__ */ jsxRuntime.jsx(
1879
+ chunkIEY3ZJIT_cjs.Animated,
1880
+ {
1881
+ preset: "fade",
1882
+ mode: "presence",
1883
+ className: "absolute inset-x-0 bottom-0 z-20",
1884
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1885
+ chunkXRVMYT5G_cjs.JumpToBottomButton,
1886
+ {
1887
+ dataSlot: "superchat-jump-to-bottom",
1888
+ hasNewMessages: hasNewBelow,
1889
+ onClick: handleJumpToBottom
1890
+ }
1891
+ )
1892
+ },
1893
+ "jump-to-bottom"
1894
+ ) })
1895
+ ]
1344
1896
  }
1345
1897
  ),
1346
1898
  /* @__PURE__ */ jsxRuntime.jsx(
1347
- chunkX4XPNTCZ_cjs.ChatComposer,
1899
+ chunkDZ3JTMKM_cjs.ChatComposer,
1348
1900
  {
1349
1901
  value: draft,
1350
1902
  onValueChange: handleDraftChange,
1351
1903
  onSend: handleComposerSend,
1352
1904
  disabled: readOnly,
1353
- placeholder: readOnly ? "Read-only conversation" : "Type a message\u2026 use @ to address an agent",
1905
+ className: "px-4 pb-4",
1906
+ placeholder: readOnly ? "Read-only conversation" : placeholder ?? "Type a message\u2026 use @ to address an agent",
1354
1907
  mentionOptions,
1355
- allowAttachments: !readOnly,
1908
+ allowAttachments: !readOnly && (allowAttachments ?? true),
1356
1909
  acceptedFileTypes: composerAccept,
1357
1910
  maxFileSize: 25 * 1024 * 1024,
1358
1911
  maxLength: 1e5,
1359
- inputLabel: "Message"
1912
+ inputLabel: "Message",
1913
+ showAgentSelector: !!agents?.length,
1914
+ agents,
1915
+ selectedAgent,
1916
+ onAgentChange,
1917
+ agentSelectorLabel,
1918
+ showModelSelector: !!modelSelectorProps,
1919
+ modelSelectorProps,
1920
+ isStreaming,
1921
+ onStop,
1922
+ stopLabel
1360
1923
  }
1361
1924
  )
1362
1925
  ]
@@ -1371,12 +1934,14 @@ function SuperChatConversations({
1371
1934
  onConversationOpened,
1372
1935
  onNewConversation
1373
1936
  }) {
1374
- const [internalActive, setInternalActive] = React2__namespace.useState(
1937
+ const [internalActive, setInternalActive] = React3__namespace.useState(
1375
1938
  defaultActiveConversationId ?? conversations[0]?.id
1376
1939
  );
1940
+ const [hasMounted, setHasMounted] = React3__namespace.useState(false);
1941
+ React3__namespace.useEffect(() => setHasMounted(true), []);
1377
1942
  const requestedId = activeConversationId ?? internalActive;
1378
1943
  const activeId = conversations.some((c) => c.id === requestedId) ? requestedId : conversations[0]?.id;
1379
- const sortedConversations = React2__namespace.useMemo(
1944
+ const sortedConversations = React3__namespace.useMemo(
1380
1945
  () => [...conversations].sort((a, b) => lastActivityOf(b) - lastActivityOf(a)),
1381
1946
  [conversations]
1382
1947
  );
@@ -1428,10 +1993,21 @@ function SuperChatConversations({
1428
1993
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate font-medium", children: c.title }),
1429
1994
  last?.text && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-xs text-neutral-600 dark:text-neutral-400", children: last.text })
1430
1995
  ] }),
1431
- !!c.unread && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "bg-primary-600 ms-1 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-[10px] font-semibold text-white", children: [
1432
- c.unread,
1433
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: " unread messages" })
1434
- ] })
1996
+ /* @__PURE__ */ jsxRuntime.jsx(chunkIEY3ZJIT_cjs.AnimatedPresence, { initial: hasMounted, children: !!c.unread && /* @__PURE__ */ jsxRuntime.jsxs(
1997
+ chunkIEY3ZJIT_cjs.Animated,
1998
+ {
1999
+ as: "span",
2000
+ preset: "pop",
2001
+ mode: "presence",
2002
+ "data-slot": "superchat-unread-badge",
2003
+ className: "bg-primary-600 ms-1 inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-[10px] font-semibold text-white",
2004
+ children: [
2005
+ c.unread,
2006
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: " unread messages" })
2007
+ ]
2008
+ },
2009
+ "unread"
2010
+ ) })
1435
2011
  ]
1436
2012
  }
1437
2013
  ) }, c.id);
@@ -1444,6 +2020,11 @@ function SuperChatConversations({
1444
2020
  }
1445
2021
  function SuperChatInbox({
1446
2022
  conversations,
2023
+ view,
2024
+ defaultView,
2025
+ onViewChange,
2026
+ mediaFeedProps,
2027
+ mediaLabels,
1447
2028
  activeConversationId,
1448
2029
  defaultActiveConversationId,
1449
2030
  currentParticipantId,
@@ -1465,13 +2046,13 @@ function SuperChatInbox({
1465
2046
  onNewConversation,
1466
2047
  onReferenceClick
1467
2048
  }) {
1468
- const [internalActive, setInternalActive] = React2__namespace.useState(
2049
+ const [internalActive, setInternalActive] = React3__namespace.useState(
1469
2050
  defaultActiveConversationId ?? conversations[0]?.id
1470
2051
  );
1471
2052
  const requestedId = activeConversationId ?? internalActive;
1472
2053
  const active = conversations.find((c) => c.id === requestedId) ?? conversations[0];
1473
2054
  const activeId = active?.id;
1474
- const [mobileView, setMobileView] = React2__namespace.useState("list");
2055
+ const [mobileView, setMobileView] = React3__namespace.useState("list");
1475
2056
  const handleOpen = (c) => {
1476
2057
  if (activeConversationId === void 0) setInternalActive(c.id);
1477
2058
  setMobileView("chat");
@@ -1505,6 +2086,11 @@ function SuperChatInbox({
1505
2086
  SuperChat,
1506
2087
  {
1507
2088
  conversation: active,
2089
+ view,
2090
+ defaultView,
2091
+ onViewChange,
2092
+ mediaFeedProps,
2093
+ mediaLabels,
1508
2094
  currentParticipantId,
1509
2095
  renderPlugins,
1510
2096
  renderTextContent,
@@ -1552,5 +2138,6 @@ exports.SuperChat = SuperChat;
1552
2138
  exports.SuperChatConversations = SuperChatConversations;
1553
2139
  exports.SuperChatInbox = SuperChatInbox;
1554
2140
  exports.createMarkdownRenderer = createMarkdownRenderer;
2141
+ exports.getConversationMediaItems = getConversationMediaItems;
1555
2142
  //# sourceMappingURL=index.cjs.map
1556
2143
  //# sourceMappingURL=index.cjs.map