@mieweb/ui 0.7.1-dev.1 → 0.7.1-dev.11

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 (418) hide show
  1. package/dist/CsvBlock-LVJARITD.cjs +15 -0
  2. package/dist/{CsvBlock-2A5VEDD3.cjs.map → CsvBlock-LVJARITD.cjs.map} +1 -1
  3. package/dist/CsvBlock-VTYNQ75L.js +6 -0
  4. package/dist/{CsvBlock-D6PWAJ5X.js.map → CsvBlock-VTYNQ75L.js.map} +1 -1
  5. package/dist/HtmlPreviewBlock-F33P37UD.cjs +15 -0
  6. package/dist/{HtmlPreviewBlock-SYXCV5RH.cjs.map → HtmlPreviewBlock-F33P37UD.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-N4PPVJLJ.js +6 -0
  8. package/dist/{HtmlPreviewBlock-PEHTJ6C3.js.map → HtmlPreviewBlock-N4PPVJLJ.js.map} +1 -1
  9. package/dist/MermaidBlock-G5X4FPUN.cjs +15 -0
  10. package/dist/{MermaidBlock-AFXNP5NK.cjs.map → MermaidBlock-G5X4FPUN.cjs.map} +1 -1
  11. package/dist/MermaidBlock-HUT53CRG.js +6 -0
  12. package/dist/{MermaidBlock-7NK3AVK2.js.map → MermaidBlock-HUT53CRG.js.map} +1 -1
  13. package/dist/SurveyBlock-ORTPGA5T.cjs +15 -0
  14. package/dist/{SurveyBlock-6KRNKFH5.cjs.map → SurveyBlock-ORTPGA5T.cjs.map} +1 -1
  15. package/dist/SurveyBlock-PM3ZMWWR.js +6 -0
  16. package/dist/{SurveyBlock-NNDGXGG4.js.map → SurveyBlock-PM3ZMWWR.js.map} +1 -1
  17. package/dist/ag-grid.cjs +8 -8
  18. package/dist/ag-grid.js +1 -1
  19. package/dist/brands/index.cjs +7 -7
  20. package/dist/brands/index.js +2 -2
  21. package/dist/{chunk-4DMZAVB2.js → chunk-23AYDOCH.js} +3 -3
  22. package/dist/{chunk-4DMZAVB2.js.map → chunk-23AYDOCH.js.map} +1 -1
  23. package/dist/{chunk-TRZXK57D.js → chunk-2DW4PUJD.js} +3 -3
  24. package/dist/{chunk-TRZXK57D.js.map → chunk-2DW4PUJD.js.map} +1 -1
  25. package/dist/{chunk-J7Z7467B.js → chunk-34LGPMO4.js} +3 -3
  26. package/dist/{chunk-J7Z7467B.js.map → chunk-34LGPMO4.js.map} +1 -1
  27. package/dist/{chunk-OX2RIVN7.js → chunk-3D4ITDLO.js} +4 -4
  28. package/dist/{chunk-OX2RIVN7.js.map → chunk-3D4ITDLO.js.map} +1 -1
  29. package/dist/{chunk-PJAQDAMZ.cjs → chunk-3IAA3KCE.cjs} +15 -6
  30. package/dist/chunk-3IAA3KCE.cjs.map +1 -0
  31. package/dist/{chunk-Q2EWNXIB.cjs → chunk-3SZQRMHM.cjs} +9 -9
  32. package/dist/{chunk-Q2EWNXIB.cjs.map → chunk-3SZQRMHM.cjs.map} +1 -1
  33. package/dist/{chunk-JLBT76WH.js → chunk-3YSIZ2CK.js} +14 -5
  34. package/dist/chunk-3YSIZ2CK.js.map +1 -0
  35. package/dist/{chunk-NIEIRA5A.cjs → chunk-4AE2L6AO.cjs} +13 -13
  36. package/dist/{chunk-NIEIRA5A.cjs.map → chunk-4AE2L6AO.cjs.map} +1 -1
  37. package/dist/{chunk-IHTRKWBG.js → chunk-4G3NJLQA.js} +4 -4
  38. package/dist/{chunk-IHTRKWBG.js.map → chunk-4G3NJLQA.js.map} +1 -1
  39. package/dist/{chunk-XP6HELVG.cjs → chunk-5IDYOJHO.cjs} +13 -13
  40. package/dist/{chunk-XP6HELVG.cjs.map → chunk-5IDYOJHO.cjs.map} +1 -1
  41. package/dist/{chunk-3CJBUAJ4.js → chunk-5U6GETAW.js} +3 -3
  42. package/dist/{chunk-3CJBUAJ4.js.map → chunk-5U6GETAW.js.map} +1 -1
  43. package/dist/{chunk-HEH3QXOQ.js → chunk-5Y5FSR4N.js} +3 -3
  44. package/dist/{chunk-HEH3QXOQ.js.map → chunk-5Y5FSR4N.js.map} +1 -1
  45. package/dist/{chunk-TN33E2VN.cjs → chunk-62TFTZWT.cjs} +12 -12
  46. package/dist/{chunk-TN33E2VN.cjs.map → chunk-62TFTZWT.cjs.map} +1 -1
  47. package/dist/{chunk-MSRU3XBH.cjs → chunk-6ECKH4DJ.cjs} +7 -7
  48. package/dist/{chunk-MSRU3XBH.cjs.map → chunk-6ECKH4DJ.cjs.map} +1 -1
  49. package/dist/{chunk-PFWHWIXS.cjs → chunk-6ED4RUGM.cjs} +100 -3
  50. package/dist/chunk-6ED4RUGM.cjs.map +1 -0
  51. package/dist/{chunk-MV3MTHWQ.js → chunk-6EWJGRC3.js} +3 -3
  52. package/dist/{chunk-MV3MTHWQ.js.map → chunk-6EWJGRC3.js.map} +1 -1
  53. package/dist/{chunk-PWHK7SWN.cjs → chunk-6K4FCEY4.cjs} +125 -124
  54. package/dist/chunk-6K4FCEY4.cjs.map +1 -0
  55. package/dist/{chunk-7WMSUXOQ.js → chunk-6OCYG6J2.js} +4 -4
  56. package/dist/{chunk-7WMSUXOQ.js.map → chunk-6OCYG6J2.js.map} +1 -1
  57. package/dist/{chunk-JCNPVK74.cjs → chunk-6OQE4ZMG.cjs} +8 -8
  58. package/dist/{chunk-JCNPVK74.cjs.map → chunk-6OQE4ZMG.cjs.map} +1 -1
  59. package/dist/{chunk-KBEKQMVY.cjs → chunk-6QVI6DAO.cjs} +5 -5
  60. package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6QVI6DAO.cjs.map} +1 -1
  61. package/dist/{chunk-5BQE6BEL.js → chunk-6XGESZ4S.js} +3 -3
  62. package/dist/{chunk-5BQE6BEL.js.map → chunk-6XGESZ4S.js.map} +1 -1
  63. package/dist/{chunk-CVC4NWFA.cjs → chunk-7AMOKHTW.cjs} +4 -4
  64. package/dist/{chunk-CVC4NWFA.cjs.map → chunk-7AMOKHTW.cjs.map} +1 -1
  65. package/dist/{chunk-44CK4CT2.cjs → chunk-7EB7665B.cjs} +13 -13
  66. package/dist/{chunk-44CK4CT2.cjs.map → chunk-7EB7665B.cjs.map} +1 -1
  67. package/dist/{chunk-BB4WQ4LV.cjs → chunk-ABAOZASX.cjs} +8 -8
  68. package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-ABAOZASX.cjs.map} +1 -1
  69. package/dist/{chunk-6LFG4JFF.js → chunk-AFGADE3B.js} +3 -3
  70. package/dist/{chunk-6LFG4JFF.js.map → chunk-AFGADE3B.js.map} +1 -1
  71. package/dist/{chunk-UOOH356R.cjs → chunk-AIJAFPGJ.cjs} +5 -5
  72. package/dist/{chunk-UOOH356R.cjs.map → chunk-AIJAFPGJ.cjs.map} +1 -1
  73. package/dist/{chunk-43GBCUSQ.js → chunk-AQ564XO7.js} +6 -6
  74. package/dist/chunk-AQ564XO7.js.map +1 -0
  75. package/dist/{chunk-CYMZ2QS5.js → chunk-BCJFOSZX.js} +2 -2
  76. package/dist/{chunk-CYMZ2QS5.js.map → chunk-BCJFOSZX.js.map} +1 -1
  77. package/dist/{chunk-T3C4RNJ4.js → chunk-BJKAVWED.js} +3 -3
  78. package/dist/{chunk-T3C4RNJ4.js.map → chunk-BJKAVWED.js.map} +1 -1
  79. package/dist/{chunk-T42BCIUA.js → chunk-BMSG4NBH.js} +4 -4
  80. package/dist/{chunk-T42BCIUA.js.map → chunk-BMSG4NBH.js.map} +1 -1
  81. package/dist/{chunk-C2544GKZ.js → chunk-BX5ZODPF.js} +4 -4
  82. package/dist/{chunk-C2544GKZ.js.map → chunk-BX5ZODPF.js.map} +1 -1
  83. package/dist/{chunk-VPNURIAY.cjs → chunk-C2NNNOSU.cjs} +8 -8
  84. package/dist/{chunk-VPNURIAY.cjs.map → chunk-C2NNNOSU.cjs.map} +1 -1
  85. package/dist/{chunk-AES2BKEW.cjs → chunk-C7I3ZGMQ.cjs} +8 -8
  86. package/dist/{chunk-AES2BKEW.cjs.map → chunk-C7I3ZGMQ.cjs.map} +1 -1
  87. package/dist/{chunk-IYIYL2SQ.js → chunk-CEQJGUAS.js} +3 -3
  88. package/dist/{chunk-IYIYL2SQ.js.map → chunk-CEQJGUAS.js.map} +1 -1
  89. package/dist/{chunk-6ZYE6JUK.cjs → chunk-CKRRJO7T.cjs} +11 -11
  90. package/dist/{chunk-6ZYE6JUK.cjs.map → chunk-CKRRJO7T.cjs.map} +1 -1
  91. package/dist/{chunk-ZHBANUBI.cjs → chunk-CPUDOVWH.cjs} +21 -21
  92. package/dist/{chunk-ZHBANUBI.cjs.map → chunk-CPUDOVWH.cjs.map} +1 -1
  93. package/dist/{chunk-WO5CAOAN.js → chunk-DCBMTFLE.js} +3 -3
  94. package/dist/{chunk-WO5CAOAN.js.map → chunk-DCBMTFLE.js.map} +1 -1
  95. package/dist/{chunk-MUYTGWGE.js → chunk-DVOQ3JNO.js} +3 -3
  96. package/dist/{chunk-MUYTGWGE.js.map → chunk-DVOQ3JNO.js.map} +1 -1
  97. package/dist/{chunk-QUUFKGDF.cjs → chunk-EDBGSGUK.cjs} +15 -15
  98. package/dist/{chunk-QUUFKGDF.cjs.map → chunk-EDBGSGUK.cjs.map} +1 -1
  99. package/dist/{chunk-WGPMTW36.cjs → chunk-EPQPUFS6.cjs} +7 -7
  100. package/dist/{chunk-WGPMTW36.cjs.map → chunk-EPQPUFS6.cjs.map} +1 -1
  101. package/dist/{chunk-KL2S36FM.js → chunk-ET5JGGVL.js} +3 -3
  102. package/dist/{chunk-KL2S36FM.js.map → chunk-ET5JGGVL.js.map} +1 -1
  103. package/dist/{chunk-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
  104. package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
  105. package/dist/{chunk-KQAXXJ4G.cjs → chunk-FF235PKY.cjs} +7 -7
  106. package/dist/{chunk-KQAXXJ4G.cjs.map → chunk-FF235PKY.cjs.map} +1 -1
  107. package/dist/{chunk-FZJBFJJR.js → chunk-FJ7YPVKV.js} +3 -3
  108. package/dist/{chunk-FZJBFJJR.js.map → chunk-FJ7YPVKV.js.map} +1 -1
  109. package/dist/{chunk-5MAGWW5X.cjs → chunk-FKLUSYFP.cjs} +11 -11
  110. package/dist/{chunk-5MAGWW5X.cjs.map → chunk-FKLUSYFP.cjs.map} +1 -1
  111. package/dist/{chunk-YZT62IMX.js → chunk-GDBPFHNX.js} +4 -4
  112. package/dist/{chunk-YZT62IMX.js.map → chunk-GDBPFHNX.js.map} +1 -1
  113. package/dist/{chunk-7VF6WO7H.cjs → chunk-GKWWFJDB.cjs} +310 -99
  114. package/dist/chunk-GKWWFJDB.cjs.map +1 -0
  115. package/dist/{chunk-ZGSC2CB2.js → chunk-GTHNWP4P.js} +36 -5
  116. package/dist/chunk-GTHNWP4P.js.map +1 -0
  117. package/dist/{chunk-6AHYYWVB.js → chunk-H3HF36ZL.js} +5 -5
  118. package/dist/{chunk-6AHYYWVB.js.map → chunk-H3HF36ZL.js.map} +1 -1
  119. package/dist/{chunk-BIT27PPD.js → chunk-HS25RPDW.js} +3 -3
  120. package/dist/{chunk-BIT27PPD.js.map → chunk-HS25RPDW.js.map} +1 -1
  121. package/dist/{chunk-MCCO4A23.js → chunk-I2BKK3AQ.js} +256 -45
  122. package/dist/chunk-I2BKK3AQ.js.map +1 -0
  123. package/dist/{chunk-BWYYA3LQ.cjs → chunk-I2ECTLON.cjs} +5 -5
  124. package/dist/{chunk-BWYYA3LQ.cjs.map → chunk-I2ECTLON.cjs.map} +1 -1
  125. package/dist/{chunk-DUPR6FEL.js → chunk-I3WGZPI6.js} +4 -4
  126. package/dist/{chunk-DUPR6FEL.js.map → chunk-I3WGZPI6.js.map} +1 -1
  127. package/dist/{chunk-ZAIEQWRA.js → chunk-IS5PNYR7.js} +4 -4
  128. package/dist/{chunk-ZAIEQWRA.js.map → chunk-IS5PNYR7.js.map} +1 -1
  129. package/dist/{chunk-BT3ZQJGT.cjs → chunk-IUDY6S7I.cjs} +6 -6
  130. package/dist/{chunk-BT3ZQJGT.cjs.map → chunk-IUDY6S7I.cjs.map} +1 -1
  131. package/dist/{chunk-UM6NA7HL.js → chunk-IXWRD4AP.js} +3 -3
  132. package/dist/{chunk-UM6NA7HL.js.map → chunk-IXWRD4AP.js.map} +1 -1
  133. package/dist/{chunk-MKWGKASO.js → chunk-JJNCQMR5.js} +3 -3
  134. package/dist/{chunk-MKWGKASO.js.map → chunk-JJNCQMR5.js.map} +1 -1
  135. package/dist/{chunk-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
  136. package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.cjs.map} +1 -1
  137. package/dist/{chunk-XCLQZ4FV.js → chunk-KFLDXJEE.js} +3 -3
  138. package/dist/{chunk-XCLQZ4FV.js.map → chunk-KFLDXJEE.js.map} +1 -1
  139. package/dist/{chunk-A2QVQF54.cjs → chunk-M26KJKZG.cjs} +4 -4
  140. package/dist/{chunk-A2QVQF54.cjs.map → chunk-M26KJKZG.cjs.map} +1 -1
  141. package/dist/{chunk-JHYFHEHS.js → chunk-MHD5HZ4X.js} +4 -4
  142. package/dist/{chunk-JHYFHEHS.js.map → chunk-MHD5HZ4X.js.map} +1 -1
  143. package/dist/{chunk-UFYXU7KV.js → chunk-MWPPOX6F.js} +4 -4
  144. package/dist/{chunk-UFYXU7KV.js.map → chunk-MWPPOX6F.js.map} +1 -1
  145. package/dist/{chunk-KJ5BSGEO.cjs → chunk-NGPEXCC7.cjs} +11 -11
  146. package/dist/{chunk-KJ5BSGEO.cjs.map → chunk-NGPEXCC7.cjs.map} +1 -1
  147. package/dist/{chunk-FCBQP2U4.cjs → chunk-NPKPCYAT.cjs} +142 -16
  148. package/dist/chunk-NPKPCYAT.cjs.map +1 -0
  149. package/dist/{chunk-T3RWXOCM.js → chunk-NU6QKULE.js} +3 -3
  150. package/dist/{chunk-T3RWXOCM.js.map → chunk-NU6QKULE.js.map} +1 -1
  151. package/dist/{chunk-BYUV3IZV.cjs → chunk-OGPJ3LRF.cjs} +4 -4
  152. package/dist/{chunk-BYUV3IZV.cjs.map → chunk-OGPJ3LRF.cjs.map} +1 -1
  153. package/dist/{chunk-DAPZPT5N.cjs → chunk-OJEXXH5D.cjs} +11 -11
  154. package/dist/{chunk-DAPZPT5N.cjs.map → chunk-OJEXXH5D.cjs.map} +1 -1
  155. package/dist/{chunk-XL7TTKHP.js → chunk-OLFTGCGD.js} +7 -7
  156. package/dist/{chunk-XL7TTKHP.js.map → chunk-OLFTGCGD.js.map} +1 -1
  157. package/dist/{chunk-BX6BTDTR.js → chunk-OQWZYKJM.js} +3 -3
  158. package/dist/{chunk-BX6BTDTR.js.map → chunk-OQWZYKJM.js.map} +1 -1
  159. package/dist/{chunk-JBB25LFB.js → chunk-OTQ72WX3.js} +3 -3
  160. package/dist/{chunk-JBB25LFB.js.map → chunk-OTQ72WX3.js.map} +1 -1
  161. package/dist/{chunk-AFKKJEV5.cjs → chunk-OZOSWBSI.cjs} +4 -4
  162. package/dist/{chunk-AFKKJEV5.cjs.map → chunk-OZOSWBSI.cjs.map} +1 -1
  163. package/dist/{chunk-KJPOFUF5.cjs → chunk-P2VTQ5AR.cjs} +10 -10
  164. package/dist/{chunk-KJPOFUF5.cjs.map → chunk-P2VTQ5AR.cjs.map} +1 -1
  165. package/dist/{chunk-QASIWBXU.cjs → chunk-P7UMS4E6.cjs} +7 -7
  166. package/dist/{chunk-QASIWBXU.cjs.map → chunk-P7UMS4E6.cjs.map} +1 -1
  167. package/dist/{chunk-NVHAQOHH.cjs → chunk-PLMXN23Q.cjs} +10 -10
  168. package/dist/chunk-PLMXN23Q.cjs.map +1 -0
  169. package/dist/{chunk-KOCTIB6U.js → chunk-PS5INHGC.js} +3 -3
  170. package/dist/{chunk-KOCTIB6U.js.map → chunk-PS5INHGC.js.map} +1 -1
  171. package/dist/{chunk-Y2S6QMKU.js → chunk-PTZB2GKL.js} +3 -3
  172. package/dist/{chunk-Y2S6QMKU.js.map → chunk-PTZB2GKL.js.map} +1 -1
  173. package/dist/{chunk-NQME7MCK.js → chunk-QEBVYLI7.js} +188 -204
  174. package/dist/chunk-QEBVYLI7.js.map +1 -0
  175. package/dist/{chunk-EZKRAW2X.js → chunk-QUUBTNMH.js} +3 -3
  176. package/dist/{chunk-EZKRAW2X.js.map → chunk-QUUBTNMH.js.map} +1 -1
  177. package/dist/{chunk-CKD554XR.cjs → chunk-RUEEDOE3.cjs} +5 -5
  178. package/dist/{chunk-CKD554XR.cjs.map → chunk-RUEEDOE3.cjs.map} +1 -1
  179. package/dist/{chunk-RHYIFIT5.js → chunk-RZFSJD67.js} +3 -3
  180. package/dist/{chunk-RHYIFIT5.js.map → chunk-RZFSJD67.js.map} +1 -1
  181. package/dist/{chunk-DFCZPVG4.cjs → chunk-S3MKIDYG.cjs} +8 -8
  182. package/dist/{chunk-DFCZPVG4.cjs.map → chunk-S3MKIDYG.cjs.map} +1 -1
  183. package/dist/chunk-S5RVSXDV.cjs +45 -0
  184. package/dist/chunk-S5RVSXDV.cjs.map +1 -0
  185. package/dist/{chunk-4LVPQ44A.js → chunk-SAJSA4TS.js} +3 -3
  186. package/dist/{chunk-4LVPQ44A.js.map → chunk-SAJSA4TS.js.map} +1 -1
  187. package/dist/{chunk-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
  188. package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
  189. package/dist/chunk-SVSHA7XV.js +487 -0
  190. package/dist/chunk-SVSHA7XV.js.map +1 -0
  191. package/dist/chunk-TQONQSJO.js +42 -0
  192. package/dist/chunk-TQONQSJO.js.map +1 -0
  193. package/dist/{chunk-V25Z5GR6.cjs → chunk-TU36DBH2.cjs} +9 -9
  194. package/dist/{chunk-V25Z5GR6.cjs.map → chunk-TU36DBH2.cjs.map} +1 -1
  195. package/dist/{chunk-6D5F7EDM.js → chunk-TWQHAJ7C.js} +17 -16
  196. package/dist/chunk-TWQHAJ7C.js.map +1 -0
  197. package/dist/{chunk-FQ3UCZUX.cjs → chunk-U3JU6BI5.cjs} +7 -7
  198. package/dist/{chunk-FQ3UCZUX.cjs.map → chunk-U3JU6BI5.cjs.map} +1 -1
  199. package/dist/{chunk-MZPF2QGM.cjs → chunk-U4HA2WHA.cjs} +13 -13
  200. package/dist/{chunk-MZPF2QGM.cjs.map → chunk-U4HA2WHA.cjs.map} +1 -1
  201. package/dist/{chunk-VCO2IZOG.js → chunk-UA7E7PDS.js} +3 -3
  202. package/dist/{chunk-VCO2IZOG.js.map → chunk-UA7E7PDS.js.map} +1 -1
  203. package/dist/{chunk-BLPCYP4D.cjs → chunk-UTCFBBOD.cjs} +29 -29
  204. package/dist/{chunk-BLPCYP4D.cjs.map → chunk-UTCFBBOD.cjs.map} +1 -1
  205. package/dist/{chunk-OOYEHBYJ.js → chunk-UUI7WXI5.js} +142 -16
  206. package/dist/chunk-UUI7WXI5.js.map +1 -0
  207. package/dist/{chunk-FJH7P5WG.js → chunk-UXBRRSJ6.js} +6 -6
  208. package/dist/{chunk-FJH7P5WG.js.map → chunk-UXBRRSJ6.js.map} +1 -1
  209. package/dist/{chunk-IWDQPSJN.cjs → chunk-V3S7QNFF.cjs} +208 -223
  210. package/dist/chunk-V3S7QNFF.cjs.map +1 -0
  211. package/dist/{chunk-SNEQXSC5.cjs → chunk-VA7QN4DX.cjs} +2 -2
  212. package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VA7QN4DX.cjs.map} +1 -1
  213. package/dist/{chunk-I2W24RHW.js → chunk-VE6OUO7X.js} +3 -3
  214. package/dist/{chunk-I2W24RHW.js.map → chunk-VE6OUO7X.js.map} +1 -1
  215. package/dist/{chunk-STPK44AU.js → chunk-VNWJTCBQ.js} +3 -3
  216. package/dist/{chunk-STPK44AU.js.map → chunk-VNWJTCBQ.js.map} +1 -1
  217. package/dist/{chunk-ZNZZCB2M.cjs → chunk-VPIYTQCV.cjs} +9 -9
  218. package/dist/{chunk-ZNZZCB2M.cjs.map → chunk-VPIYTQCV.cjs.map} +1 -1
  219. package/dist/{chunk-DLNJLCNO.cjs → chunk-VTKXM7IE.cjs} +4 -4
  220. package/dist/{chunk-DLNJLCNO.cjs.map → chunk-VTKXM7IE.cjs.map} +1 -1
  221. package/dist/{chunk-EUUQVDXX.cjs → chunk-W4Q4UEXA.cjs} +14 -14
  222. package/dist/{chunk-EUUQVDXX.cjs.map → chunk-W4Q4UEXA.cjs.map} +1 -1
  223. package/dist/{chunk-ZVSW2KS6.js → chunk-WRYZ2752.js} +3 -3
  224. package/dist/{chunk-ZVSW2KS6.js.map → chunk-WRYZ2752.js.map} +1 -1
  225. package/dist/{chunk-U3ABLVYH.cjs → chunk-WUNWHOLA.cjs} +6 -6
  226. package/dist/{chunk-U3ABLVYH.cjs.map → chunk-WUNWHOLA.cjs.map} +1 -1
  227. package/dist/{chunk-RH43XBNV.cjs → chunk-WWJIW2IH.cjs} +4 -4
  228. package/dist/{chunk-RH43XBNV.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
  229. package/dist/chunk-X4LBUPJO.cjs +511 -0
  230. package/dist/chunk-X4LBUPJO.cjs.map +1 -0
  231. package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
  232. package/dist/chunk-XB54G7WS.cjs.map +1 -0
  233. package/dist/{chunk-MAMY5HTT.cjs → chunk-XCVBCY7L.cjs} +20 -20
  234. package/dist/{chunk-MAMY5HTT.cjs.map → chunk-XCVBCY7L.cjs.map} +1 -1
  235. package/dist/{chunk-IUFDGB5O.js → chunk-XMCIXHGH.js} +3 -3
  236. package/dist/{chunk-IUFDGB5O.js.map → chunk-XMCIXHGH.js.map} +1 -1
  237. package/dist/{chunk-KAKH2UZA.js → chunk-XO3WLK65.js} +3 -3
  238. package/dist/{chunk-KAKH2UZA.js.map → chunk-XO3WLK65.js.map} +1 -1
  239. package/dist/{chunk-DEZ7XSTG.cjs → chunk-XXVUHLQN.cjs} +7 -7
  240. package/dist/{chunk-DEZ7XSTG.cjs.map → chunk-XXVUHLQN.cjs.map} +1 -1
  241. package/dist/{chunk-3GGET5LK.cjs → chunk-YGA35Z2P.cjs} +7 -7
  242. package/dist/{chunk-3GGET5LK.cjs.map → chunk-YGA35Z2P.cjs.map} +1 -1
  243. package/dist/{chunk-GOKC4CCZ.cjs → chunk-YMHOF6WA.cjs} +8 -8
  244. package/dist/{chunk-GOKC4CCZ.cjs.map → chunk-YMHOF6WA.cjs.map} +1 -1
  245. package/dist/{chunk-OXYFTCRW.cjs → chunk-YP5T6NZD.cjs} +4 -4
  246. package/dist/{chunk-OXYFTCRW.cjs.map → chunk-YP5T6NZD.cjs.map} +1 -1
  247. package/dist/{chunk-EL2RSQTJ.cjs → chunk-YVL3XATO.cjs} +5 -5
  248. package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-YVL3XATO.cjs.map} +1 -1
  249. package/dist/{chunk-LJ2ZWIX6.js → chunk-YVO5VAGX.js} +100 -3
  250. package/dist/chunk-YVO5VAGX.js.map +1 -0
  251. package/dist/{chunk-PVUDXJAI.js → chunk-YXCE2HSK.js} +4 -4
  252. package/dist/{chunk-PVUDXJAI.js.map → chunk-YXCE2HSK.js.map} +1 -1
  253. package/dist/{chunk-372IIHUA.cjs → chunk-YXHX2DAK.cjs} +53 -53
  254. package/dist/{chunk-372IIHUA.cjs.map → chunk-YXHX2DAK.cjs.map} +1 -1
  255. package/dist/{chunk-ST2RE5UB.cjs → chunk-Z5KFXHDP.cjs} +6 -6
  256. package/dist/{chunk-ST2RE5UB.cjs.map → chunk-Z5KFXHDP.cjs.map} +1 -1
  257. package/dist/{chunk-4Z6ZZKIY.js → chunk-ZIUADGAR.js} +3 -3
  258. package/dist/{chunk-4Z6ZZKIY.js.map → chunk-ZIUADGAR.js.map} +1 -1
  259. package/dist/{chunk-LOTMAKUG.cjs → chunk-ZZJ4ZVYR.cjs} +11 -11
  260. package/dist/{chunk-LOTMAKUG.cjs.map → chunk-ZZJ4ZVYR.cjs.map} +1 -1
  261. package/dist/components/Alert/index.cjs +6 -6
  262. package/dist/components/Alert/index.js +2 -2
  263. package/dist/components/AlertDialog/index.cjs +5 -5
  264. package/dist/components/AlertDialog/index.js +4 -4
  265. package/dist/components/AudioPlayer/index.cjs +7 -7
  266. package/dist/components/AudioPlayer/index.js +2 -2
  267. package/dist/components/AudioRecorder/index.cjs +7 -7
  268. package/dist/components/AudioRecorder/index.js +2 -2
  269. package/dist/components/Autocomplete/index.cjs +4 -4
  270. package/dist/components/Autocomplete/index.js +3 -3
  271. package/dist/components/Avatar/index.cjs +6 -6
  272. package/dist/components/Avatar/index.js +2 -2
  273. package/dist/components/Badge/index.cjs +4 -4
  274. package/dist/components/Badge/index.js +2 -2
  275. package/dist/components/Breadcrumb/index.cjs +4 -4
  276. package/dist/components/Breadcrumb/index.js +2 -2
  277. package/dist/components/Button/index.cjs +4 -4
  278. package/dist/components/Button/index.js +2 -2
  279. package/dist/components/Card/index.cjs +16 -16
  280. package/dist/components/Card/index.js +2 -2
  281. package/dist/components/Checkbox/index.cjs +5 -5
  282. package/dist/components/Checkbox/index.js +2 -2
  283. package/dist/components/CollabStatus/index.cjs +21 -0
  284. package/dist/components/CollabStatus/index.cjs.map +1 -0
  285. package/dist/components/CollabStatus/index.d.cts +222 -0
  286. package/dist/components/CollabStatus/index.d.ts +222 -0
  287. package/dist/components/CollabStatus/index.js +4 -0
  288. package/dist/components/CollabStatus/index.js.map +1 -0
  289. package/dist/components/Collapsible/index.cjs +5 -5
  290. package/dist/components/Collapsible/index.js +2 -2
  291. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  292. package/dist/components/CountryCodeDropdown/index.js +2 -2
  293. package/dist/components/DateInput/index.cjs +4 -4
  294. package/dist/components/DateInput/index.js +3 -3
  295. package/dist/components/Dropdown/index.cjs +9 -9
  296. package/dist/components/Dropdown/index.js +3 -3
  297. package/dist/components/FloatingWindow/index.cjs +5 -5
  298. package/dist/components/FloatingWindow/index.js +3 -3
  299. package/dist/components/Input/index.cjs +4 -4
  300. package/dist/components/Input/index.js +2 -2
  301. package/dist/components/Label/index.cjs +4 -4
  302. package/dist/components/Label/index.js +2 -2
  303. package/dist/components/Markdown/index.cjs +17 -17
  304. package/dist/components/Markdown/index.js +8 -8
  305. package/dist/components/MediaEditor/index.cjs +15 -15
  306. package/dist/components/MediaEditor/index.d.cts +34 -1
  307. package/dist/components/MediaEditor/index.d.ts +34 -1
  308. package/dist/components/MediaEditor/index.js +10 -10
  309. package/dist/components/MediaPlayer/index.cjs +6 -6
  310. package/dist/components/MediaPlayer/index.js +3 -3
  311. package/dist/components/Modal/index.cjs +10 -10
  312. package/dist/components/Modal/index.js +2 -2
  313. package/dist/components/Pagination/index.cjs +5 -5
  314. package/dist/components/Pagination/index.js +2 -2
  315. package/dist/components/PhoneInput/index.cjs +5 -5
  316. package/dist/components/PhoneInput/index.js +3 -3
  317. package/dist/components/Progress/index.cjs +7 -7
  318. package/dist/components/Progress/index.js +2 -2
  319. package/dist/components/QuickAction/index.cjs +7 -7
  320. package/dist/components/QuickAction/index.js +2 -2
  321. package/dist/components/Radio/index.cjs +5 -5
  322. package/dist/components/Radio/index.js +2 -2
  323. package/dist/components/RecordButton/index.cjs +5 -5
  324. package/dist/components/RecordButton/index.js +2 -2
  325. package/dist/components/RichTextEditor/index.cjs +9 -9
  326. package/dist/components/RichTextEditor/index.js +6 -6
  327. package/dist/components/SchedulePicker/index.cjs +11 -11
  328. package/dist/components/SchedulePicker/index.js +2 -2
  329. package/dist/components/ScrollArea/index.cjs +4 -4
  330. package/dist/components/ScrollArea/index.js +2 -2
  331. package/dist/components/Select/index.cjs +4 -4
  332. package/dist/components/Select/index.js +2 -2
  333. package/dist/components/Separator/index.cjs +4 -4
  334. package/dist/components/Separator/index.js +2 -2
  335. package/dist/components/Sheet/index.cjs +11 -11
  336. package/dist/components/Sheet/index.d.cts +1 -1
  337. package/dist/components/Sheet/index.d.ts +1 -1
  338. package/dist/components/Sheet/index.js +2 -2
  339. package/dist/components/Skeleton/index.cjs +7 -7
  340. package/dist/components/Skeleton/index.js +2 -2
  341. package/dist/components/Slider/index.cjs +6 -6
  342. package/dist/components/Slider/index.js +2 -2
  343. package/dist/components/Spinner/index.cjs +6 -6
  344. package/dist/components/Spinner/index.js +2 -2
  345. package/dist/components/SuperChat/index.cjs +45 -45
  346. package/dist/components/SuperChat/index.js +8 -8
  347. package/dist/components/SuperChat/plugins/index.cjs +9 -9
  348. package/dist/components/SuperChat/plugins/index.js +3 -3
  349. package/dist/components/Switch/index.cjs +5 -5
  350. package/dist/components/Switch/index.js +2 -2
  351. package/dist/components/Table/index.cjs +10 -10
  352. package/dist/components/Table/index.js +2 -2
  353. package/dist/components/Tabs/index.cjs +8 -8
  354. package/dist/components/Tabs/index.js +2 -2
  355. package/dist/components/Text/index.cjs +5 -5
  356. package/dist/components/Text/index.d.cts +1 -1
  357. package/dist/components/Text/index.d.ts +1 -1
  358. package/dist/components/Text/index.js +2 -2
  359. package/dist/components/Textarea/index.cjs +4 -4
  360. package/dist/components/Textarea/index.js +2 -2
  361. package/dist/components/ThemeProvider/index.cjs +9 -9
  362. package/dist/components/ThemeProvider/index.js +3 -3
  363. package/dist/components/Toggle/index.cjs +4 -4
  364. package/dist/components/Toggle/index.js +2 -2
  365. package/dist/components/Tooltip/index.cjs +3 -3
  366. package/dist/components/Tooltip/index.js +2 -2
  367. package/dist/datavis.cjs +7 -7
  368. package/dist/datavis.js +3 -3
  369. package/dist/esheet.cjs +16 -16
  370. package/dist/esheet.js +13 -13
  371. package/dist/hooks/index.cjs +32 -20
  372. package/dist/hooks/index.d.cts +30 -2
  373. package/dist/hooks/index.d.ts +30 -2
  374. package/dist/hooks/index.js +2 -2
  375. package/dist/index.cjs +1910 -1726
  376. package/dist/index.cjs.map +1 -1
  377. package/dist/index.d.cts +147 -15
  378. package/dist/index.d.ts +147 -15
  379. package/dist/index.js +244 -93
  380. package/dist/index.js.map +1 -1
  381. package/dist/styles.css +1 -1
  382. package/dist/tailwind-preset.cjs +4 -4
  383. package/dist/tailwind-preset.js +1 -1
  384. package/dist/{useTranscriptEdits-Hy0Vm-H8.d.cts → useTranscriptEdits-CGzlemHT.d.cts} +16 -3
  385. package/dist/{useTranscriptEdits-C2BbMU37.d.ts → useTranscriptEdits-D32bLs0l.d.ts} +16 -3
  386. package/dist/utils/index.cjs +15 -11
  387. package/dist/utils/index.d.cts +6 -1
  388. package/dist/utils/index.d.ts +6 -1
  389. package/dist/utils/index.js +2 -2
  390. package/package.json +4 -1
  391. package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
  392. package/dist/CsvBlock-D6PWAJ5X.js +0 -6
  393. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
  394. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
  395. package/dist/MermaidBlock-7NK3AVK2.js +0 -6
  396. package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
  397. package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
  398. package/dist/SurveyBlock-NNDGXGG4.js +0 -6
  399. package/dist/chunk-43GBCUSQ.js.map +0 -1
  400. package/dist/chunk-4GXECTPS.cjs.map +0 -1
  401. package/dist/chunk-6D5F7EDM.js.map +0 -1
  402. package/dist/chunk-7VF6WO7H.cjs.map +0 -1
  403. package/dist/chunk-F3SOEIN2.js +0 -11
  404. package/dist/chunk-F3SOEIN2.js.map +0 -1
  405. package/dist/chunk-FCBQP2U4.cjs.map +0 -1
  406. package/dist/chunk-IWDQPSJN.cjs.map +0 -1
  407. package/dist/chunk-JLBT76WH.js.map +0 -1
  408. package/dist/chunk-LJ2ZWIX6.js.map +0 -1
  409. package/dist/chunk-MCCO4A23.js.map +0 -1
  410. package/dist/chunk-NQME7MCK.js.map +0 -1
  411. package/dist/chunk-NVHAQOHH.cjs.map +0 -1
  412. package/dist/chunk-OOYEHBYJ.js.map +0 -1
  413. package/dist/chunk-OR5DRJCW.cjs +0 -13
  414. package/dist/chunk-OR5DRJCW.cjs.map +0 -1
  415. package/dist/chunk-PFWHWIXS.cjs.map +0 -1
  416. package/dist/chunk-PJAQDAMZ.cjs.map +0 -1
  417. package/dist/chunk-PWHK7SWN.cjs.map +0 -1
  418. package/dist/chunk-ZGSC2CB2.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-ZVSW2KS6.js';
1
+ import { Button } from './chunk-WRYZ2752.js';
2
2
  import { useMediaTransport } from './chunk-SQHMGT4W.js';
3
3
  import * as React from 'react';
4
4
  import { cva } from 'class-variance-authority';
@@ -139,5 +139,5 @@ var MediaPlayer = React.forwardRef(
139
139
  MediaPlayer.displayName = "MediaPlayer";
140
140
 
141
141
  export { MediaPlayer, inferMediaKind, mediaPlayerVariants };
142
- //# sourceMappingURL=chunk-KOCTIB6U.js.map
143
- //# sourceMappingURL=chunk-KOCTIB6U.js.map
142
+ //# sourceMappingURL=chunk-PS5INHGC.js.map
143
+ //# sourceMappingURL=chunk-PS5INHGC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MediaPlayer/MediaPlayer.tsx"],"names":[],"mappings":"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","file":"chunk-KOCTIB6U.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Button } from '../Button';\nimport { useMediaTransport } from '../../hooks/useMediaTransport';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type MediaPlayerState =\n | 'idle'\n | 'loading'\n | 'playing'\n | 'paused'\n | 'error';\n\nexport type MediaKind = 'video' | 'audio';\n\n/** Ref handle for controlling {@link MediaPlayer} programmatically. */\nexport interface MediaPlayerRef {\n /** Seek to a specific time in milliseconds. */\n seekToMs: (timeMs: number) => void;\n /** Start playback. */\n play: () => void;\n /** Pause playback. */\n pause: () => void;\n /** Get current playback time in milliseconds. */\n getCurrentTimeMs: () => number;\n /** Get total duration in milliseconds. */\n getDurationMs: () => number;\n /** Whether playback is currently paused. */\n isPaused: () => boolean;\n /** Set playback speed multiplier. */\n setPlaybackRate: (rate: number) => void;\n /**\n * The underlying media element.\n * Escape hatch for host integrations (e.g. thumbnail capture); prefer the\n * typed methods above for playback control.\n */\n mediaElement: HTMLVideoElement | HTMLAudioElement | null;\n}\n\nexport interface MediaPlayerProps extends VariantProps<\n typeof mediaPlayerVariants\n> {\n /** Media source URL. */\n src: string;\n /** Force the media kind; when omitted it is inferred from the src extension. */\n kind?: MediaKind;\n /** Whether to show native controls (default `true`). */\n controls?: boolean;\n /** Callback when playback state changes. */\n onStateChange?: (state: MediaPlayerState) => void;\n /** Callback when playback ends. */\n onEnded?: () => void;\n /** Callback when an error occurs. */\n onError?: (error: Error) => void;\n /** Callback on time updates (milliseconds). */\n onTimeUpdate?: (currentTimeMs: number, durationMs: number) => void;\n /** Additional class name. */\n className?: string;\n /** Accessible label for the media element. */\n 'aria-label'?: string;\n /**\n * Transitional: exposes the raw media element to legacy consumers.\n * Prefer {@link MediaPlayerRef} for playback control.\n */\n mediaElementRef?: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst mediaPlayerVariants = cva(\n 'flex h-full w-full items-center justify-center',\n {\n variants: {\n variant: {\n plain: '',\n card: 'rounded-xl border border-border bg-card text-card-foreground p-2',\n },\n },\n defaultVariants: {\n variant: 'plain',\n },\n }\n);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst VIDEO_EXTENSIONS = /\\.(mp4|mov|avi|webm|mkv|m4v)$/i;\n\n/** Infer media kind from a URL's file extension; defaults to audio. */\nexport function inferMediaKind(src: string): MediaKind {\n // Strip any query string / fragment before matching. Testing the extension\n // against the full URL required a trailing `.*`, which backtracks\n // polynomially on crafted inputs (ReDoS); splitting first is linear.\n const path = src.split(/[?#]/, 1)[0];\n return VIDEO_EXTENSIONS.test(path) ? 'video' : 'audio';\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Media playback surface for audio and video with a shared imperative handle.\n *\n * Renders a native `<video>` or `<audio>` element (kind inferred from the src\n * extension unless forced) with themed error/retry handling. Playback state and\n * controls come from the shared {@link useMediaTransport} hook and are exposed\n * through {@link MediaPlayerRef} (all times in milliseconds) — consumers should\n * not reach into the DOM element directly.\n */\nexport const MediaPlayer = React.forwardRef<MediaPlayerRef, MediaPlayerProps>(\n (\n {\n src,\n kind,\n controls = true,\n variant,\n onStateChange,\n onEnded,\n onError,\n onTimeUpdate,\n className,\n 'aria-label': ariaLabel,\n mediaElementRef,\n },\n ref\n ) => {\n const [error, setError] = React.useState<string | null>(null);\n\n // A failed load must not outlive its src: clearing on change lets a host\n // swap in a corrected URL without being trapped on the error surface\n // (which unmounts the media element, so the new src would never load).\n React.useEffect(() => {\n setError(null);\n }, [src]);\n const resolvedKind = kind ?? inferMediaKind(src);\n\n const transport = useMediaTransport({\n onTimeUpdate,\n onStateChange,\n onEnded,\n onError: (err) => {\n setError('Unable to load media. The server may be unavailable.');\n onError?.(err);\n },\n endedState: 'paused',\n errorLabel: `media: ${src}`,\n });\n\n const { setMediaElement, mediaElement } = transport;\n\n const setElement = React.useCallback(\n (el: HTMLVideoElement | HTMLAudioElement | null) => {\n setMediaElement(el);\n if (mediaElementRef) {\n (mediaElementRef as React.MutableRefObject<typeof el>).current = el;\n }\n },\n [setMediaElement, mediaElementRef]\n );\n\n React.useImperativeHandle(\n ref,\n (): MediaPlayerRef => ({\n seekToMs: transport.seekToMs,\n play: transport.play,\n pause: transport.pause,\n getCurrentTimeMs: transport.getCurrentTimeMs,\n getDurationMs: transport.getDurationMs,\n isPaused: transport.isPaused,\n setPlaybackRate: transport.setPlaybackRate,\n get mediaElement() {\n return mediaElement;\n },\n }),\n [transport, mediaElement]\n );\n\n const handleRetry = React.useCallback(() => {\n setError(null);\n mediaElement?.load();\n }, [mediaElement]);\n\n const sharedMediaProps = {\n src,\n controls,\n 'aria-label': ariaLabel,\n };\n\n if (error) {\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n <div\n role=\"alert\"\n className=\"border-destructive/30 bg-destructive/10 flex min-h-36 flex-col items-center justify-center gap-3 rounded-lg border p-8 text-center\"\n >\n {/* destructive-700/300 instead of the base token: #dc2626 on the\n destructive/10 tint is 4.14:1 — below WCAG AA (axe: color-contrast). */}\n <p className=\"text-destructive-700 dark:text-destructive-300 m-0 text-sm\">\n {error}\n </p>\n {/* bg-background: the outline button is transparent, and its text on\n the destructive/10 tint sits exactly at the 4.5:1 AA boundary. */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"bg-background\"\n onClick={handleRetry}\n >\n Retry\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n {resolvedKind === 'video' ? (\n // Generic media surface: caption tracks belong to the consumer's media\n // resource and are supplied via children, not this transport component.\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n ref={setElement as React.Ref<HTMLVideoElement>}\n playsInline\n className=\"h-auto max-h-full w-auto max-w-full object-contain\"\n {...sharedMediaProps}\n />\n ) : (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <audio\n ref={setElement as React.Ref<HTMLAudioElement>}\n className=\"my-4 w-[90%] max-w-lg\"\n {...sharedMediaProps}\n />\n )}\n </div>\n );\n }\n);\n\nMediaPlayer.displayName = 'MediaPlayer';\n\nexport { mediaPlayerVariants };\n"]}
1
+ {"version":3,"sources":["../src/components/MediaPlayer/MediaPlayer.tsx"],"names":[],"mappings":"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","file":"chunk-PS5INHGC.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Button } from '../Button';\nimport { useMediaTransport } from '../../hooks/useMediaTransport';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type MediaPlayerState =\n | 'idle'\n | 'loading'\n | 'playing'\n | 'paused'\n | 'error';\n\nexport type MediaKind = 'video' | 'audio';\n\n/** Ref handle for controlling {@link MediaPlayer} programmatically. */\nexport interface MediaPlayerRef {\n /** Seek to a specific time in milliseconds. */\n seekToMs: (timeMs: number) => void;\n /** Start playback. */\n play: () => void;\n /** Pause playback. */\n pause: () => void;\n /** Get current playback time in milliseconds. */\n getCurrentTimeMs: () => number;\n /** Get total duration in milliseconds. */\n getDurationMs: () => number;\n /** Whether playback is currently paused. */\n isPaused: () => boolean;\n /** Set playback speed multiplier. */\n setPlaybackRate: (rate: number) => void;\n /**\n * The underlying media element.\n * Escape hatch for host integrations (e.g. thumbnail capture); prefer the\n * typed methods above for playback control.\n */\n mediaElement: HTMLVideoElement | HTMLAudioElement | null;\n}\n\nexport interface MediaPlayerProps extends VariantProps<\n typeof mediaPlayerVariants\n> {\n /** Media source URL. */\n src: string;\n /** Force the media kind; when omitted it is inferred from the src extension. */\n kind?: MediaKind;\n /** Whether to show native controls (default `true`). */\n controls?: boolean;\n /** Callback when playback state changes. */\n onStateChange?: (state: MediaPlayerState) => void;\n /** Callback when playback ends. */\n onEnded?: () => void;\n /** Callback when an error occurs. */\n onError?: (error: Error) => void;\n /** Callback on time updates (milliseconds). */\n onTimeUpdate?: (currentTimeMs: number, durationMs: number) => void;\n /** Additional class name. */\n className?: string;\n /** Accessible label for the media element. */\n 'aria-label'?: string;\n /**\n * Transitional: exposes the raw media element to legacy consumers.\n * Prefer {@link MediaPlayerRef} for playback control.\n */\n mediaElementRef?: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst mediaPlayerVariants = cva(\n 'flex h-full w-full items-center justify-center',\n {\n variants: {\n variant: {\n plain: '',\n card: 'rounded-xl border border-border bg-card text-card-foreground p-2',\n },\n },\n defaultVariants: {\n variant: 'plain',\n },\n }\n);\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst VIDEO_EXTENSIONS = /\\.(mp4|mov|avi|webm|mkv|m4v)$/i;\n\n/** Infer media kind from a URL's file extension; defaults to audio. */\nexport function inferMediaKind(src: string): MediaKind {\n // Strip any query string / fragment before matching. Testing the extension\n // against the full URL required a trailing `.*`, which backtracks\n // polynomially on crafted inputs (ReDoS); splitting first is linear.\n const path = src.split(/[?#]/, 1)[0];\n return VIDEO_EXTENSIONS.test(path) ? 'video' : 'audio';\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Media playback surface for audio and video with a shared imperative handle.\n *\n * Renders a native `<video>` or `<audio>` element (kind inferred from the src\n * extension unless forced) with themed error/retry handling. Playback state and\n * controls come from the shared {@link useMediaTransport} hook and are exposed\n * through {@link MediaPlayerRef} (all times in milliseconds) — consumers should\n * not reach into the DOM element directly.\n */\nexport const MediaPlayer = React.forwardRef<MediaPlayerRef, MediaPlayerProps>(\n (\n {\n src,\n kind,\n controls = true,\n variant,\n onStateChange,\n onEnded,\n onError,\n onTimeUpdate,\n className,\n 'aria-label': ariaLabel,\n mediaElementRef,\n },\n ref\n ) => {\n const [error, setError] = React.useState<string | null>(null);\n\n // A failed load must not outlive its src: clearing on change lets a host\n // swap in a corrected URL without being trapped on the error surface\n // (which unmounts the media element, so the new src would never load).\n React.useEffect(() => {\n setError(null);\n }, [src]);\n const resolvedKind = kind ?? inferMediaKind(src);\n\n const transport = useMediaTransport({\n onTimeUpdate,\n onStateChange,\n onEnded,\n onError: (err) => {\n setError('Unable to load media. The server may be unavailable.');\n onError?.(err);\n },\n endedState: 'paused',\n errorLabel: `media: ${src}`,\n });\n\n const { setMediaElement, mediaElement } = transport;\n\n const setElement = React.useCallback(\n (el: HTMLVideoElement | HTMLAudioElement | null) => {\n setMediaElement(el);\n if (mediaElementRef) {\n (mediaElementRef as React.MutableRefObject<typeof el>).current = el;\n }\n },\n [setMediaElement, mediaElementRef]\n );\n\n React.useImperativeHandle(\n ref,\n (): MediaPlayerRef => ({\n seekToMs: transport.seekToMs,\n play: transport.play,\n pause: transport.pause,\n getCurrentTimeMs: transport.getCurrentTimeMs,\n getDurationMs: transport.getDurationMs,\n isPaused: transport.isPaused,\n setPlaybackRate: transport.setPlaybackRate,\n get mediaElement() {\n return mediaElement;\n },\n }),\n [transport, mediaElement]\n );\n\n const handleRetry = React.useCallback(() => {\n setError(null);\n mediaElement?.load();\n }, [mediaElement]);\n\n const sharedMediaProps = {\n src,\n controls,\n 'aria-label': ariaLabel,\n };\n\n if (error) {\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n <div\n role=\"alert\"\n className=\"border-destructive/30 bg-destructive/10 flex min-h-36 flex-col items-center justify-center gap-3 rounded-lg border p-8 text-center\"\n >\n {/* destructive-700/300 instead of the base token: #dc2626 on the\n destructive/10 tint is 4.14:1 — below WCAG AA (axe: color-contrast). */}\n <p className=\"text-destructive-700 dark:text-destructive-300 m-0 text-sm\">\n {error}\n </p>\n {/* bg-background: the outline button is transparent, and its text on\n the destructive/10 tint sits exactly at the 4.5:1 AA boundary. */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"bg-background\"\n onClick={handleRetry}\n >\n Retry\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className={mediaPlayerVariants({ variant, className })}>\n {resolvedKind === 'video' ? (\n // Generic media surface: caption tracks belong to the consumer's media\n // resource and are supplied via children, not this transport component.\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <video\n ref={setElement as React.Ref<HTMLVideoElement>}\n playsInline\n className=\"h-auto max-h-full w-auto max-w-full object-contain\"\n {...sharedMediaProps}\n />\n ) : (\n // eslint-disable-next-line jsx-a11y/media-has-caption\n <audio\n ref={setElement as React.Ref<HTMLAudioElement>}\n className=\"my-4 w-[90%] max-w-lg\"\n {...sharedMediaProps}\n />\n )}\n </div>\n );\n }\n);\n\nMediaPlayer.displayName = 'MediaPlayer';\n\nexport { mediaPlayerVariants };\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-F3SOEIN2.js';
1
+ import { cn } from './chunk-TQONQSJO.js';
2
2
  import * as React from 'react';
3
3
  import { cva } from 'class-variance-authority';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -74,5 +74,5 @@ var Toggle = React.forwardRef(
74
74
  Toggle.displayName = "Toggle";
75
75
 
76
76
  export { Toggle, toggleVariants };
77
- //# sourceMappingURL=chunk-Y2S6QMKU.js.map
78
- //# sourceMappingURL=chunk-Y2S6QMKU.js.map
77
+ //# sourceMappingURL=chunk-PTZB2GKL.js.map
78
+ //# sourceMappingURL=chunk-PTZB2GKL.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Toggle/Toggle.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB;AAAA,IACE,+CAAA;AAAA,IACA,gCAAA;AAAA,IACA,mBAAA;AAAA,IACA,4CAAA;AAAA,IACA,qGAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAuBA,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA;AAAA,EACnB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA,EAAS,iBAAA;AAAA,IACT,cAAA,GAAiB,KAAA;AAAA,IACjB,eAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAC1C,eAAS,cAAc,CAAA;AAE/B,IAAA,MAAM,eAAe,iBAAA,KAAsB,MAAA;AAC3C,IAAA,MAAM,SAAA,GAAY,eAAe,iBAAA,GAAoB,mBAAA;AAErD,IAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAA2C;AAC9D,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,MAAM,OAAO,CAAC,SAAA;AACd,MAAA,IAAI,CAAC,YAAA,EAAc,sBAAA,CAAuB,IAAI,CAAA;AAC9C,MAAA,eAAA,GAAkB,IAAI,CAAA;AACtB,MAAA,OAAA,GAAU,CAAC,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,WAAA,EAAU,QAAA;AAAA,QACV,cAAA,EAAc,SAAA;AAAA,QACd,YAAA,EAAY,YAAY,IAAA,GAAO,KAAA;AAAA,QAC/B,QAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,QACzD,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-Y2S6QMKU.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst toggleVariants = cva(\n [\n 'inline-flex items-center justify-center gap-2',\n 'rounded-md text-sm font-medium',\n 'transition-colors',\n 'hover:bg-muted hover:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'data-[state=on]:bg-primary-800 data-[state=on]:text-primary-foreground',\n ],\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline:\n 'border border-input bg-transparent data-[state=on]:border-transparent',\n },\n size: {\n sm: 'h-8 min-w-8 px-2',\n md: 'h-9 min-w-9 px-2.5',\n lg: 'h-10 min-w-10 px-3',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n);\n\nexport interface ToggleProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'>,\n VariantProps<typeof toggleVariants> {\n /** Controlled pressed state */\n pressed?: boolean;\n /** Default pressed state (uncontrolled) */\n defaultPressed?: boolean;\n /** Callback fired when the pressed state changes */\n onPressedChange?: (pressed: boolean) => void;\n}\n\n/**\n * A two-state toggle button.\n *\n * @example\n * ```tsx\n * <Toggle aria-label=\"Bold\"><BoldIcon /></Toggle>\n * <Toggle pressed={italic} onPressedChange={setItalic}>Italic</Toggle>\n * ```\n */\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n className,\n variant,\n size,\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n disabled,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledPressed, setUncontrolledPressed] =\n React.useState(defaultPressed);\n\n const isControlled = controlledPressed !== undefined;\n const isPressed = isControlled ? controlledPressed : uncontrolledPressed;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n const next = !isPressed;\n if (!isControlled) setUncontrolledPressed(next);\n onPressedChange?.(next);\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"toggle\"\n aria-pressed={isPressed}\n data-state={isPressed ? 'on' : 'off'}\n disabled={disabled}\n onClick={handleClick}\n className={cn(toggleVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n\nexport { Toggle, toggleVariants };\n"]}
1
+ {"version":3,"sources":["../src/components/Toggle/Toggle.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB;AAAA,IACE,+CAAA;AAAA,IACA,gCAAA;AAAA,IACA,mBAAA;AAAA,IACA,4CAAA;AAAA,IACA,qGAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,gBAAA;AAAA,QACT,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,kBAAA;AAAA,QACJ,EAAA,EAAI,oBAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AAuBA,IAAM,MAAA,GAAe,KAAA,CAAA,UAAA;AAAA,EACnB,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA,EAAS,iBAAA;AAAA,IACT,cAAA,GAAiB,KAAA;AAAA,IACjB,eAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAC1C,eAAS,cAAc,CAAA;AAE/B,IAAA,MAAM,eAAe,iBAAA,KAAsB,MAAA;AAC3C,IAAA,MAAM,SAAA,GAAY,eAAe,iBAAA,GAAoB,mBAAA;AAErD,IAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAA2C;AAC9D,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,MAAM,OAAO,CAAC,SAAA;AACd,MAAA,IAAI,CAAC,YAAA,EAAc,sBAAA,CAAuB,IAAI,CAAA;AAC9C,MAAA,eAAA,GAAkB,IAAI,CAAA;AACtB,MAAA,OAAA,GAAU,CAAC,CAAA;AAAA,IACb,CAAA;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,WAAA,EAAU,QAAA;AAAA,QACV,cAAA,EAAc,SAAA;AAAA,QACd,YAAA,EAAY,YAAY,IAAA,GAAO,KAAA;AAAA,QAC/B,QAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW,GAAG,cAAA,CAAe,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,QACzD,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-PTZB2GKL.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst toggleVariants = cva(\n [\n 'inline-flex items-center justify-center gap-2',\n 'rounded-md text-sm font-medium',\n 'transition-colors',\n 'hover:bg-muted hover:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'data-[state=on]:bg-primary-800 data-[state=on]:text-primary-foreground',\n ],\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline:\n 'border border-input bg-transparent data-[state=on]:border-transparent',\n },\n size: {\n sm: 'h-8 min-w-8 px-2',\n md: 'h-9 min-w-9 px-2.5',\n lg: 'h-10 min-w-10 px-3',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n }\n);\n\nexport interface ToggleProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'>,\n VariantProps<typeof toggleVariants> {\n /** Controlled pressed state */\n pressed?: boolean;\n /** Default pressed state (uncontrolled) */\n defaultPressed?: boolean;\n /** Callback fired when the pressed state changes */\n onPressedChange?: (pressed: boolean) => void;\n}\n\n/**\n * A two-state toggle button.\n *\n * @example\n * ```tsx\n * <Toggle aria-label=\"Bold\"><BoldIcon /></Toggle>\n * <Toggle pressed={italic} onPressedChange={setItalic}>Italic</Toggle>\n * ```\n */\nconst Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(\n (\n {\n className,\n variant,\n size,\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n disabled,\n onClick,\n children,\n ...props\n },\n ref\n ) => {\n const [uncontrolledPressed, setUncontrolledPressed] =\n React.useState(defaultPressed);\n\n const isControlled = controlledPressed !== undefined;\n const isPressed = isControlled ? controlledPressed : uncontrolledPressed;\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n const next = !isPressed;\n if (!isControlled) setUncontrolledPressed(next);\n onPressedChange?.(next);\n onClick?.(e);\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"toggle\"\n aria-pressed={isPressed}\n data-state={isPressed ? 'on' : 'off'}\n disabled={disabled}\n onClick={handleClick}\n className={cn(toggleVariants({ variant, size }), className)}\n {...props}\n >\n {children}\n </button>\n );\n }\n);\n\nToggle.displayName = 'Toggle';\n\nexport { Toggle, toggleVariants };\n"]}
@@ -1,7 +1,7 @@
1
- import { AudioPlayer } from './chunk-KAKH2UZA.js';
2
- import { cn } from './chunk-F3SOEIN2.js';
1
+ import { AudioPlayer } from './chunk-XO3WLK65.js';
2
+ import { cn } from './chunk-TQONQSJO.js';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
- import * as React from 'react';
4
+ import * as React2 from 'react';
5
5
  import { cva } from 'class-variance-authority';
6
6
 
7
7
  var sizeClasses = {
@@ -204,6 +204,68 @@ function SpinnerIcon({ className }) {
204
204
  }
205
205
  );
206
206
  }
207
+ function CollapsiblePill({
208
+ label,
209
+ leadingIcon,
210
+ density = "standard",
211
+ defaultOpen = false,
212
+ pillClassName,
213
+ className,
214
+ title,
215
+ children
216
+ }) {
217
+ const hasContent = Boolean(children);
218
+ const [isOpen, setIsOpen] = React2.useState(defaultOpen);
219
+ const contentId = React2.useId();
220
+ React2.useEffect(() => {
221
+ setIsOpen(defaultOpen);
222
+ }, [defaultOpen]);
223
+ const toggle = () => {
224
+ setIsOpen((open) => !open);
225
+ };
226
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "collapsible-pill", className, children: [
227
+ /* @__PURE__ */ jsxs(
228
+ "button",
229
+ {
230
+ type: "button",
231
+ onClick: hasContent ? toggle : void 0,
232
+ "aria-expanded": hasContent ? isOpen : void 0,
233
+ "aria-controls": hasContent ? contentId : void 0,
234
+ title,
235
+ disabled: !hasContent,
236
+ className: cn(
237
+ "focus-visible:ring-ring inline-flex items-center gap-1.5 border font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1",
238
+ density === "condensed" ? "rounded-[8px] px-2 py-0.5 text-[10px]" : "rounded-[10px] px-[11px] py-1 text-[11px]",
239
+ pillClassName
240
+ ),
241
+ children: [
242
+ leadingIcon,
243
+ /* @__PURE__ */ jsx("span", { children: label }),
244
+ hasContent && /* @__PURE__ */ jsx(
245
+ ChevronIcon,
246
+ {
247
+ direction: isOpen ? "down" : "right",
248
+ className: density === "condensed" ? "h-2.5 w-2.5 opacity-60" : "h-3 w-3 opacity-60"
249
+ }
250
+ )
251
+ ]
252
+ }
253
+ ),
254
+ hasContent && /* @__PURE__ */ jsx(
255
+ "div",
256
+ {
257
+ id: contentId,
258
+ "aria-hidden": !isOpen,
259
+ inert: !isOpen || void 0,
260
+ className: cn(
261
+ "overflow-hidden transition-[max-height,opacity] duration-300 ease-in-out",
262
+ isOpen ? "max-h-[500px] overflow-y-auto opacity-100" : "max-h-0 opacity-0"
263
+ ),
264
+ children: /* @__PURE__ */ jsx("div", { className: "mt-1.5", children })
265
+ }
266
+ )
267
+ ] });
268
+ }
207
269
  var statusIconVariants = cva(
208
270
  "flex h-5 w-5 items-center justify-center rounded-full",
209
271
  {
@@ -671,10 +733,8 @@ function ResourceLink({ link, onClick, className }) {
671
733
  function ToolResultDisplay({
672
734
  result,
673
735
  onLinkClick,
674
- showRawData = false,
675
736
  className
676
737
  }) {
677
- const [showJson, setShowJson] = React.useState(false);
678
738
  if (result.type === "error") {
679
739
  return /* @__PURE__ */ jsx(
680
740
  "div",
@@ -687,7 +747,6 @@ function ToolResultDisplay({
687
747
  }
688
748
  );
689
749
  }
690
- const hasRawData = result.type === "json" && result.data !== void 0 && result.data !== null;
691
750
  return /* @__PURE__ */ jsxs("div", { className: cn("space-y-2", className), children: [
692
751
  result.summary && /* @__PURE__ */ jsx("p", { className: "text-sm text-neutral-700 dark:text-neutral-300", children: result.summary }),
693
752
  result.link && /* @__PURE__ */ jsx(ResourceLink, { link: result.link, onClick: onLinkClick }),
@@ -702,67 +761,9 @@ function ToolResultDisplay({
702
761
  onClick: onLinkClick
703
762
  },
704
763
  resource.id
705
- )) }),
706
- hasRawData && showRawData && /* @__PURE__ */ jsxs("div", { className: "mt-2", children: [
707
- /* @__PURE__ */ jsxs(
708
- "button",
709
- {
710
- onClick: () => setShowJson(!showJson),
711
- className: "flex items-center gap-1 text-xs text-neutral-600 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-300",
712
- children: [
713
- /* @__PURE__ */ jsx(
714
- "svg",
715
- {
716
- "aria-hidden": "true",
717
- className: cn(
718
- "h-3 w-3 transition-transform",
719
- showJson && "rotate-90"
720
- ),
721
- fill: "none",
722
- viewBox: "0 0 24 24",
723
- stroke: "currentColor",
724
- strokeWidth: "2",
725
- children: /* @__PURE__ */ jsx(
726
- "path",
727
- {
728
- strokeLinecap: "round",
729
- strokeLinejoin: "round",
730
- d: "M9 5l7 7-7 7"
731
- }
732
- )
733
- }
734
- ),
735
- showJson ? "Hide" : "Show",
736
- " raw data"
737
- ]
738
- }
739
- ),
740
- showJson && /* @__PURE__ */ jsx("pre", { className: "mt-2 max-h-40 overflow-auto rounded-md bg-neutral-100 p-2 text-xs dark:bg-neutral-800", children: JSON.stringify(result.data, null, 2) })
741
- ] })
764
+ )) })
742
765
  ] });
743
766
  }
744
- var toolCallVariants = cva(
745
- ["rounded-lg border", "overflow-hidden", "transition-all duration-200"],
746
- {
747
- variants: {
748
- status: {
749
- pending: "border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-800/50",
750
- running: "border-primary-200 bg-primary-50/50 dark:border-primary-800 dark:bg-primary-900/20",
751
- success: "border-green-200 bg-green-50/50 dark:border-green-800 dark:bg-green-900/20",
752
- error: "border-red-200 bg-red-50/50 dark:border-red-800 dark:bg-red-900/20",
753
- cancelled: "border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-800/50 opacity-60"
754
- },
755
- compact: {
756
- true: "p-2",
757
- false: "p-3"
758
- }
759
- },
760
- defaultVariants: {
761
- status: "pending",
762
- compact: false
763
- }
764
- }
765
- );
766
767
  var TOOL_FRIENDLY_NAMES = {
767
768
  create_patient: "Creating patient",
768
769
  get_patient: "Looking up patient",
@@ -827,120 +828,113 @@ function getParameterSummary(toolName, params) {
827
828
  }
828
829
  return null;
829
830
  }
831
+ var statusPillClasses = {
832
+ pending: "bg-neutral-100 border-neutral-200 text-neutral-600 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-400",
833
+ running: "bg-primary-50 border-primary-200 text-primary-800 dark:bg-primary-900/20 dark:border-primary-800 dark:text-primary-300",
834
+ success: "bg-green-50 border-green-200 text-green-700 dark:bg-green-900/20 dark:border-green-800 dark:text-green-300",
835
+ error: "bg-red-50 border-red-200 text-red-700 dark:bg-red-900/20 dark:border-red-800 dark:text-red-300",
836
+ cancelled: "bg-neutral-100 border-neutral-200 text-neutral-400 opacity-60 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-400"
837
+ };
830
838
  function MCPToolCallDisplay({
831
839
  toolCall,
832
840
  showParameters = true,
833
841
  collapsible = true,
834
- defaultCollapsed = true,
842
+ defaultCollapsed,
835
843
  compact,
844
+ hidden = false,
836
845
  onLinkClick,
837
846
  className
838
847
  }) {
839
- const [showDetails, setShowDetails] = React.useState(!defaultCollapsed);
840
848
  const formatDuration = (ms) => {
841
849
  if (!ms) return null;
842
850
  if (ms < 1e3) return `${ms}ms`;
843
851
  return `${(ms / 1e3).toFixed(1)}s`;
844
852
  };
845
853
  const friendlyName = getToolFriendlyName(toolCall.toolName, toolCall.status);
854
+ const durationLabel = formatDuration(toolCall.duration);
846
855
  const paramSummary = getParameterSummary(
847
856
  toolCall.toolName,
848
857
  toolCall.parameters
849
858
  );
850
- return /* @__PURE__ */ jsx(
859
+ const detailBit = toolCall.status === "success" ? durationLabel : paramSummary ?? durationLabel;
860
+ const pillLabel = detailBit ? `${friendlyName} \xB7 ${detailBit}` : friendlyName;
861
+ const hasParams = showParameters && toolCall.parameters.length > 0;
862
+ const hasBoxContent = Boolean(toolCall.result || toolCall.error || hasParams);
863
+ const isCompleted = toolCall.status === "success" || toolCall.status === "error";
864
+ const effectiveDefaultCollapsed = defaultCollapsed ?? !isCompleted;
865
+ if (hidden) return null;
866
+ const box = /* @__PURE__ */ jsxs(
851
867
  "div",
852
868
  {
853
- "data-slot": "ai-tool-call",
854
869
  className: cn(
855
- toolCallVariants({ status: toolCall.status, compact }),
856
- className
870
+ "w-full max-w-md space-y-2 rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-800/50",
871
+ compact ? "p-2" : "p-3"
857
872
  ),
858
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
859
- /* @__PURE__ */ jsx(
873
+ children: [
874
+ toolCall.result && /* @__PURE__ */ jsx("div", { "data-slot": "ai-tool-result", children: /* @__PURE__ */ jsx(
875
+ ToolResultDisplay,
876
+ {
877
+ result: toolCall.result,
878
+ onLinkClick
879
+ }
880
+ ) }),
881
+ toolCall.error && /* @__PURE__ */ jsx("div", { className: "rounded-md bg-red-100 p-2 dark:bg-red-900/30", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-red-700 dark:text-red-300", children: toolCall.error }) }),
882
+ hasParams && /* @__PURE__ */ jsxs(
860
883
  "div",
861
884
  {
862
- "data-slot": "ai-tool-icon",
863
- className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-white/50 text-neutral-600 dark:bg-neutral-700/50 dark:text-neutral-400",
864
- children: getToolIcon(toolCall.toolName)
885
+ "data-slot": "ai-tool-parameters",
886
+ className: "rounded-md bg-neutral-100 p-2 dark:bg-neutral-800",
887
+ children: [
888
+ /* @__PURE__ */ jsx("h4", { className: "mb-1.5 text-xs font-medium tracking-wide text-neutral-600 uppercase dark:text-neutral-400", children: "Parameters" }),
889
+ /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: toolCall.parameters.map((param) => /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 text-xs", children: [
890
+ /* @__PURE__ */ jsxs("span", { className: "font-mono text-neutral-600 dark:text-neutral-400", children: [
891
+ param.name,
892
+ ":"
893
+ ] }),
894
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-neutral-700 dark:text-neutral-300", children: typeof param.value === "string" ? param.value : JSON.stringify(param.value) })
895
+ ] }, param.name)) })
896
+ ]
865
897
  }
866
- ),
867
- /* @__PURE__ */ jsxs("div", { "data-slot": "ai-tool-content", className: "min-w-0 flex-1", children: [
868
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
869
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-neutral-900 dark:text-white", children: friendlyName }),
870
- /* @__PURE__ */ jsx(ToolStatusIcon, { status: toolCall.status }),
871
- toolCall.duration && /* @__PURE__ */ jsx("span", { className: "text-xs text-neutral-600 dark:text-neutral-400", children: formatDuration(toolCall.duration) })
872
- ] }),
873
- paramSummary && toolCall.status !== "success" && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: paramSummary }),
874
- toolCall.result && /* @__PURE__ */ jsx("div", { "data-slot": "ai-tool-result", className: "mt-2", children: /* @__PURE__ */ jsx(
875
- ToolResultDisplay,
876
- {
877
- result: toolCall.result,
878
- onLinkClick,
879
- showRawData: showDetails
880
- }
881
- ) }),
882
- toolCall.error && /* @__PURE__ */ jsx("div", { className: "mt-2 rounded-md bg-red-100 p-2 dark:bg-red-900/30", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-red-700 dark:text-red-300", children: toolCall.error }) }),
883
- collapsible && showParameters && toolCall.parameters.length > 0 && /* @__PURE__ */ jsxs(
884
- "button",
885
- {
886
- onClick: () => setShowDetails(!showDetails),
887
- className: "mt-2 flex items-center gap-1 text-xs text-neutral-600 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-300",
888
- children: [
889
- /* @__PURE__ */ jsx(
890
- "svg",
891
- {
892
- "aria-hidden": "true",
893
- className: cn(
894
- "h-3 w-3 transition-transform",
895
- showDetails && "rotate-90"
896
- ),
897
- fill: "none",
898
- viewBox: "0 0 24 24",
899
- stroke: "currentColor",
900
- strokeWidth: "2",
901
- children: /* @__PURE__ */ jsx(
902
- "path",
903
- {
904
- strokeLinecap: "round",
905
- strokeLinejoin: "round",
906
- d: "M9 5l7 7-7 7"
907
- }
908
- )
909
- }
910
- ),
911
- showDetails ? "Hide" : "Show",
912
- " details"
913
- ]
914
- }
915
- ),
916
- showDetails && showParameters && toolCall.parameters.length > 0 && /* @__PURE__ */ jsxs(
917
- "div",
918
- {
919
- "data-slot": "ai-tool-parameters",
920
- className: "mt-3 rounded-md bg-neutral-100 p-2 dark:bg-neutral-800",
921
- children: [
922
- /* @__PURE__ */ jsx("h4", { className: "mb-1.5 text-xs font-medium tracking-wide text-neutral-600 uppercase dark:text-neutral-400", children: "Parameters" }),
923
- /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: toolCall.parameters.map((param) => /* @__PURE__ */ jsxs(
924
- "div",
925
- {
926
- className: "flex items-start gap-2 text-xs",
927
- children: [
928
- /* @__PURE__ */ jsxs("span", { className: "font-mono text-neutral-600 dark:text-neutral-400", children: [
929
- param.name,
930
- ":"
931
- ] }),
932
- /* @__PURE__ */ jsx("span", { className: "font-mono text-neutral-700 dark:text-neutral-300", children: typeof param.value === "string" ? param.value : JSON.stringify(param.value) })
933
- ]
934
- },
935
- param.name
936
- )) })
937
- ]
938
- }
939
- )
940
- ] })
941
- ] })
898
+ )
899
+ ]
900
+ }
901
+ );
902
+ const staticPill = /* @__PURE__ */ jsxs(
903
+ "span",
904
+ {
905
+ "data-slot": "ai-tool-pill",
906
+ className: cn(
907
+ "inline-flex items-center gap-1.5 border font-medium",
908
+ compact ? "rounded-[8px] px-2 py-0.5 text-[10px]" : "rounded-[10px] px-[11px] py-1 text-[11px]",
909
+ statusPillClasses[toolCall.status]
910
+ ),
911
+ children: [
912
+ /* @__PURE__ */ jsx(ToolStatusIcon, { status: toolCall.status }),
913
+ /* @__PURE__ */ jsx("span", { children: pillLabel })
914
+ ]
942
915
  }
943
916
  );
917
+ return /* @__PURE__ */ jsx("div", { "data-slot": "ai-tool-call", className, children: !hasBoxContent ? staticPill : collapsible ? (
918
+ // Pill click reveals the whole box (result + params) in one go.
919
+ /* @__PURE__ */ jsx(
920
+ CollapsiblePill,
921
+ {
922
+ label: pillLabel,
923
+ leadingIcon: /* @__PURE__ */ jsx(ToolStatusIcon, { status: toolCall.status }),
924
+ density: compact ? "condensed" : "standard",
925
+ defaultOpen: !effectiveDefaultCollapsed,
926
+ pillClassName: statusPillClasses[toolCall.status],
927
+ title: "Toggle details",
928
+ children: box
929
+ }
930
+ )
931
+ ) : (
932
+ // Non-collapsible: pill + box always visible.
933
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
934
+ staticPill,
935
+ box
936
+ ] })
937
+ ) });
944
938
  }
945
939
  var avatarVariants = cva(
946
940
  "flex shrink-0 items-center justify-center rounded-full",
@@ -1075,6 +1069,39 @@ function AITypingIndicator({ className }) {
1075
1069
  }
1076
1070
  );
1077
1071
  }
1072
+ function ThinkingBlock({
1073
+ text,
1074
+ streaming,
1075
+ defaultCollapsed = false
1076
+ }) {
1077
+ const startedAt = React2.useRef(Date.now());
1078
+ const [elapsed, setElapsed] = React2.useState(null);
1079
+ const prevStreaming = React2.useRef(streaming);
1080
+ React2.useEffect(() => {
1081
+ if (prevStreaming.current && !streaming) {
1082
+ setElapsed(Math.round((Date.now() - startedAt.current) / 1e3));
1083
+ }
1084
+ prevStreaming.current = streaming;
1085
+ }, [streaming]);
1086
+ const label = streaming ? "Thinking" : elapsed !== null && elapsed > 0 ? `Thought for ${elapsed}s` : "Thought";
1087
+ const dot = streaming ? /* @__PURE__ */ jsx(
1088
+ "span",
1089
+ {
1090
+ "aria-hidden": "true",
1091
+ className: "inline-block h-1.5 w-1.5 animate-pulse rounded-full bg-violet-500 dark:bg-violet-400"
1092
+ }
1093
+ ) : null;
1094
+ return /* @__PURE__ */ jsx("div", { "data-slot": "ai-message-thinking", children: /* @__PURE__ */ jsx(
1095
+ CollapsiblePill,
1096
+ {
1097
+ label,
1098
+ leadingIcon: dot,
1099
+ defaultOpen: !defaultCollapsed,
1100
+ pillClassName: "bg-violet-50 border-violet-200 text-violet-600 hover:bg-violet-100 dark:bg-violet-950/30 dark:border-violet-800 dark:text-violet-400 dark:hover:bg-violet-950/50 focus-visible:ring-violet-500",
1101
+ children: /* @__PURE__ */ jsx("div", { className: "border-s-2 border-violet-200 ps-3 text-[13px] leading-relaxed text-neutral-600 italic dark:border-violet-700 dark:text-neutral-400", children: text })
1102
+ }
1103
+ ) });
1104
+ }
1078
1105
  function ContentBlock({
1079
1106
  content,
1080
1107
  onLinkClick,
@@ -1083,9 +1110,6 @@ function ContentBlock({
1083
1110
  role,
1084
1111
  renderTextContent
1085
1112
  }) {
1086
- const [isCollapsed, setIsCollapsed] = React.useState(
1087
- content.collapsed ?? false
1088
- );
1089
1113
  if (content.type === "text" && content.text) {
1090
1114
  if (renderTextContent) {
1091
1115
  return /* @__PURE__ */ jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none", children: renderTextContent(content.text, { messageId, streaming, role }) });
@@ -1103,52 +1127,12 @@ function ContentBlock({
1103
1127
  );
1104
1128
  }
1105
1129
  if (content.type === "thinking" && content.text) {
1106
- return /* @__PURE__ */ jsxs(
1107
- "div",
1130
+ return /* @__PURE__ */ jsx(
1131
+ ThinkingBlock,
1108
1132
  {
1109
- "data-slot": "ai-message-thinking",
1110
- className: "rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-neutral-800/50",
1111
- children: [
1112
- /* @__PURE__ */ jsxs(
1113
- "button",
1114
- {
1115
- onClick: () => setIsCollapsed(!isCollapsed),
1116
- className: "flex w-full items-center justify-between px-3 py-2 text-left",
1117
- children: [
1118
- /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground flex items-center gap-2 text-sm", children: [
1119
- /* @__PURE__ */ jsx(
1120
- "svg",
1121
- {
1122
- "aria-hidden": "true",
1123
- className: "h-4 w-4",
1124
- fill: "none",
1125
- viewBox: "0 0 24 24",
1126
- stroke: "currentColor",
1127
- strokeWidth: "1.5",
1128
- children: /* @__PURE__ */ jsx(
1129
- "path",
1130
- {
1131
- strokeLinecap: "round",
1132
- strokeLinejoin: "round",
1133
- d: "M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 00-2.456 2.456zM16.894 20.567L16.5 21.75l-.394-1.183a2.25 2.25 0 00-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 001.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 001.423 1.423l1.183.394-1.183.394a2.25 2.25 0 00-1.423 1.423z"
1134
- }
1135
- )
1136
- }
1137
- ),
1138
- "Thinking..."
1139
- ] }),
1140
- /* @__PURE__ */ jsx(
1141
- ChevronIcon,
1142
- {
1143
- direction: isCollapsed ? "right" : "down",
1144
- className: "text-neutral-400"
1145
- }
1146
- )
1147
- ]
1148
- }
1149
- ),
1150
- !isCollapsed && /* @__PURE__ */ jsx("div", { className: "border-t border-neutral-200 px-3 py-2 dark:border-neutral-700", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-neutral-600 italic dark:text-neutral-400", children: content.text }) })
1151
- ]
1133
+ text: content.text,
1134
+ streaming,
1135
+ defaultCollapsed: content.collapsed ?? false
1152
1136
  }
1153
1137
  );
1154
1138
  }
@@ -1297,7 +1281,7 @@ var bubbleVariants = cva("rounded-2xl px-4 py-2.5 w-fit max-w-[85%]", {
1297
1281
  variant: "assistant"
1298
1282
  }
1299
1283
  });
1300
- var ChatBubble = React.forwardRef(
1284
+ var ChatBubble = React2.forwardRef(
1301
1285
  ({ className, variant, hasError, accent, style, children, ...props }, ref) => {
1302
1286
  return /* @__PURE__ */ jsx(
1303
1287
  "div",
@@ -1411,6 +1395,6 @@ function AIMessageDisplay({
1411
1395
  );
1412
1396
  }
1413
1397
 
1414
- export { AILogoIcon, AIMessageDisplay, AITypingIndicator, ChatBubble, ChevronIcon, CloseIcon, MCPToolCallDisplay, MessageAvatar, RefreshIcon, ResourceLink, SendIcon, SparklesIcon, SpinnerIcon, ToolStatusIcon, getToolIcon };
1415
- //# sourceMappingURL=chunk-NQME7MCK.js.map
1416
- //# sourceMappingURL=chunk-NQME7MCK.js.map
1398
+ export { AILogoIcon, AIMessageDisplay, AITypingIndicator, ChatBubble, ChevronIcon, CloseIcon, CollapsiblePill, MCPToolCallDisplay, MessageAvatar, RefreshIcon, ResourceLink, SendIcon, SparklesIcon, SpinnerIcon, ToolStatusIcon, getToolIcon };
1399
+ //# sourceMappingURL=chunk-QEBVYLI7.js.map
1400
+ //# sourceMappingURL=chunk-QEBVYLI7.js.map