@mieweb/ui 0.7.1-dev.7 → 0.7.1-dev.9

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 (386) 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/{chunk-4DMZAVB2.js → chunk-23AYDOCH.js} +3 -3
  20. package/dist/{chunk-4DMZAVB2.js.map → chunk-23AYDOCH.js.map} +1 -1
  21. package/dist/{chunk-TRZXK57D.js → chunk-2DW4PUJD.js} +3 -3
  22. package/dist/{chunk-TRZXK57D.js.map → chunk-2DW4PUJD.js.map} +1 -1
  23. package/dist/{chunk-AES2BKEW.cjs → chunk-2GQ7VPCS.cjs} +8 -8
  24. package/dist/{chunk-AES2BKEW.cjs.map → chunk-2GQ7VPCS.cjs.map} +1 -1
  25. package/dist/{chunk-B77UC56R.js → chunk-2YDKLURF.js} +20 -2
  26. package/dist/chunk-2YDKLURF.js.map +1 -0
  27. package/dist/{chunk-J7Z7467B.js → chunk-34LGPMO4.js} +3 -3
  28. package/dist/{chunk-J7Z7467B.js.map → chunk-34LGPMO4.js.map} +1 -1
  29. package/dist/{chunk-T5F565OC.cjs → chunk-3OME4UHL.cjs} +20 -2
  30. package/dist/chunk-3OME4UHL.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-NIEIRA5A.cjs → chunk-4AE2L6AO.cjs} +13 -13
  34. package/dist/{chunk-NIEIRA5A.cjs.map → chunk-4AE2L6AO.cjs.map} +1 -1
  35. package/dist/{chunk-XP6HELVG.cjs → chunk-5IDYOJHO.cjs} +13 -13
  36. package/dist/{chunk-XP6HELVG.cjs.map → chunk-5IDYOJHO.cjs.map} +1 -1
  37. package/dist/{chunk-MSRU3XBH.cjs → chunk-5PHGIWDN.cjs} +6 -6
  38. package/dist/{chunk-MSRU3XBH.cjs.map → chunk-5PHGIWDN.cjs.map} +1 -1
  39. package/dist/{chunk-3CJBUAJ4.js → chunk-5U6GETAW.js} +3 -3
  40. package/dist/{chunk-3CJBUAJ4.js.map → chunk-5U6GETAW.js.map} +1 -1
  41. package/dist/{chunk-HEH3QXOQ.js → chunk-5Y5FSR4N.js} +3 -3
  42. package/dist/{chunk-HEH3QXOQ.js.map → chunk-5Y5FSR4N.js.map} +1 -1
  43. package/dist/{chunk-TN33E2VN.cjs → chunk-62TFTZWT.cjs} +12 -12
  44. package/dist/{chunk-TN33E2VN.cjs.map → chunk-62TFTZWT.cjs.map} +1 -1
  45. package/dist/{chunk-MV3MTHWQ.js → chunk-6EWJGRC3.js} +3 -3
  46. package/dist/{chunk-MV3MTHWQ.js.map → chunk-6EWJGRC3.js.map} +1 -1
  47. package/dist/{chunk-7WMSUXOQ.js → chunk-6OCYG6J2.js} +4 -4
  48. package/dist/{chunk-7WMSUXOQ.js.map → chunk-6OCYG6J2.js.map} +1 -1
  49. package/dist/{chunk-JCNPVK74.cjs → chunk-6OQE4ZMG.cjs} +8 -8
  50. package/dist/{chunk-JCNPVK74.cjs.map → chunk-6OQE4ZMG.cjs.map} +1 -1
  51. package/dist/{chunk-KBEKQMVY.cjs → chunk-6QVI6DAO.cjs} +5 -5
  52. package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6QVI6DAO.cjs.map} +1 -1
  53. package/dist/{chunk-5BQE6BEL.js → chunk-6XGESZ4S.js} +3 -3
  54. package/dist/{chunk-5BQE6BEL.js.map → chunk-6XGESZ4S.js.map} +1 -1
  55. package/dist/{chunk-CVC4NWFA.cjs → chunk-7AMOKHTW.cjs} +4 -4
  56. package/dist/{chunk-CVC4NWFA.cjs.map → chunk-7AMOKHTW.cjs.map} +1 -1
  57. package/dist/{chunk-44CK4CT2.cjs → chunk-7EB7665B.cjs} +13 -13
  58. package/dist/{chunk-44CK4CT2.cjs.map → chunk-7EB7665B.cjs.map} +1 -1
  59. package/dist/{chunk-F3PPRNFI.js → chunk-7OIUA7PW.js} +14 -14
  60. package/dist/{chunk-F3PPRNFI.js.map → chunk-7OIUA7PW.js.map} +1 -1
  61. package/dist/{chunk-JLBT76WH.js → chunk-7V6SUOBV.js} +3 -3
  62. package/dist/{chunk-JLBT76WH.js.map → chunk-7V6SUOBV.js.map} +1 -1
  63. package/dist/{chunk-BB4WQ4LV.cjs → chunk-ABAOZASX.cjs} +8 -8
  64. package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-ABAOZASX.cjs.map} +1 -1
  65. package/dist/{chunk-6LFG4JFF.js → chunk-AFGADE3B.js} +3 -3
  66. package/dist/{chunk-6LFG4JFF.js.map → chunk-AFGADE3B.js.map} +1 -1
  67. package/dist/{chunk-T3C4RNJ4.js → chunk-BJKAVWED.js} +3 -3
  68. package/dist/{chunk-T3C4RNJ4.js.map → chunk-BJKAVWED.js.map} +1 -1
  69. package/dist/{chunk-43GBCUSQ.js → chunk-BS5NOKZD.js} +3 -3
  70. package/dist/{chunk-43GBCUSQ.js.map → chunk-BS5NOKZD.js.map} +1 -1
  71. package/dist/{chunk-C2544GKZ.js → chunk-BX5ZODPF.js} +4 -4
  72. package/dist/{chunk-C2544GKZ.js.map → chunk-BX5ZODPF.js.map} +1 -1
  73. package/dist/{chunk-VPNURIAY.cjs → chunk-C2NNNOSU.cjs} +8 -8
  74. package/dist/{chunk-VPNURIAY.cjs.map → chunk-C2NNNOSU.cjs.map} +1 -1
  75. package/dist/{chunk-IYIYL2SQ.js → chunk-CEQJGUAS.js} +3 -3
  76. package/dist/{chunk-IYIYL2SQ.js.map → chunk-CEQJGUAS.js.map} +1 -1
  77. package/dist/{chunk-6ZYE6JUK.cjs → chunk-CKRRJO7T.cjs} +11 -11
  78. package/dist/{chunk-6ZYE6JUK.cjs.map → chunk-CKRRJO7T.cjs.map} +1 -1
  79. package/dist/{chunk-ZHBANUBI.cjs → chunk-CPUDOVWH.cjs} +21 -21
  80. package/dist/{chunk-ZHBANUBI.cjs.map → chunk-CPUDOVWH.cjs.map} +1 -1
  81. package/dist/{chunk-WO5CAOAN.js → chunk-DCBMTFLE.js} +3 -3
  82. package/dist/{chunk-WO5CAOAN.js.map → chunk-DCBMTFLE.js.map} +1 -1
  83. package/dist/{chunk-YZT62IMX.js → chunk-DKICBJTM.js} +4 -4
  84. package/dist/{chunk-YZT62IMX.js.map → chunk-DKICBJTM.js.map} +1 -1
  85. package/dist/{chunk-MUYTGWGE.js → chunk-DVOQ3JNO.js} +3 -3
  86. package/dist/{chunk-MUYTGWGE.js.map → chunk-DVOQ3JNO.js.map} +1 -1
  87. package/dist/{chunk-EL2RSQTJ.cjs → chunk-EFEKAPS2.cjs} +4 -4
  88. package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-EFEKAPS2.cjs.map} +1 -1
  89. package/dist/{chunk-PVUDXJAI.js → chunk-EJPV3QY3.js} +3 -3
  90. package/dist/{chunk-PVUDXJAI.js.map → chunk-EJPV3QY3.js.map} +1 -1
  91. package/dist/{chunk-WGPMTW36.cjs → chunk-EPQPUFS6.cjs} +7 -7
  92. package/dist/{chunk-WGPMTW36.cjs.map → chunk-EPQPUFS6.cjs.map} +1 -1
  93. package/dist/{chunk-KL2S36FM.js → chunk-ET5JGGVL.js} +3 -3
  94. package/dist/{chunk-KL2S36FM.js.map → chunk-ET5JGGVL.js.map} +1 -1
  95. package/dist/{chunk-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
  96. package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
  97. package/dist/{chunk-KQAXXJ4G.cjs → chunk-FF235PKY.cjs} +7 -7
  98. package/dist/{chunk-KQAXXJ4G.cjs.map → chunk-FF235PKY.cjs.map} +1 -1
  99. package/dist/{chunk-FZJBFJJR.js → chunk-FJ7YPVKV.js} +3 -3
  100. package/dist/{chunk-FZJBFJJR.js.map → chunk-FJ7YPVKV.js.map} +1 -1
  101. package/dist/{chunk-ZAIEQWRA.js → chunk-G45PAVQI.js} +4 -4
  102. package/dist/{chunk-ZAIEQWRA.js.map → chunk-G45PAVQI.js.map} +1 -1
  103. package/dist/{chunk-ZGSC2CB2.js → chunk-GTHNWP4P.js} +36 -5
  104. package/dist/chunk-GTHNWP4P.js.map +1 -0
  105. package/dist/{chunk-6AHYYWVB.js → chunk-H3HF36ZL.js} +5 -5
  106. package/dist/{chunk-6AHYYWVB.js.map → chunk-H3HF36ZL.js.map} +1 -1
  107. package/dist/{chunk-IWDQPSJN.cjs → chunk-HEV52I7A.cjs} +25 -25
  108. package/dist/{chunk-IWDQPSJN.cjs.map → chunk-HEV52I7A.cjs.map} +1 -1
  109. package/dist/{chunk-UOOH356R.cjs → chunk-HIAUNNOW.cjs} +4 -4
  110. package/dist/{chunk-UOOH356R.cjs.map → chunk-HIAUNNOW.cjs.map} +1 -1
  111. package/dist/{chunk-BIT27PPD.js → chunk-HS25RPDW.js} +3 -3
  112. package/dist/{chunk-BIT27PPD.js.map → chunk-HS25RPDW.js.map} +1 -1
  113. package/dist/{chunk-BWYYA3LQ.cjs → chunk-I2ECTLON.cjs} +5 -5
  114. package/dist/{chunk-BWYYA3LQ.cjs.map → chunk-I2ECTLON.cjs.map} +1 -1
  115. package/dist/{chunk-BT3ZQJGT.cjs → chunk-IUDY6S7I.cjs} +6 -6
  116. package/dist/{chunk-BT3ZQJGT.cjs.map → chunk-IUDY6S7I.cjs.map} +1 -1
  117. package/dist/{chunk-FJH7P5WG.js → chunk-IVDIT3TJ.js} +6 -6
  118. package/dist/{chunk-FJH7P5WG.js.map → chunk-IVDIT3TJ.js.map} +1 -1
  119. package/dist/{chunk-UM6NA7HL.js → chunk-IXWRD4AP.js} +3 -3
  120. package/dist/{chunk-UM6NA7HL.js.map → chunk-IXWRD4AP.js.map} +1 -1
  121. package/dist/{chunk-MKWGKASO.js → chunk-JJNCQMR5.js} +3 -3
  122. package/dist/{chunk-MKWGKASO.js.map → chunk-JJNCQMR5.js.map} +1 -1
  123. package/dist/{chunk-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
  124. package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.cjs.map} +1 -1
  125. package/dist/{chunk-NVHAQOHH.cjs → chunk-JY4U2QWO.cjs} +7 -7
  126. package/dist/{chunk-NVHAQOHH.cjs.map → chunk-JY4U2QWO.cjs.map} +1 -1
  127. package/dist/{chunk-XCLQZ4FV.js → chunk-KFLDXJEE.js} +3 -3
  128. package/dist/{chunk-XCLQZ4FV.js.map → chunk-KFLDXJEE.js.map} +1 -1
  129. package/dist/{chunk-IHTRKWBG.js → chunk-KQGGKE36.js} +4 -4
  130. package/dist/{chunk-IHTRKWBG.js.map → chunk-KQGGKE36.js.map} +1 -1
  131. package/dist/{chunk-PJAQDAMZ.cjs → chunk-KZ7QKUJS.cjs} +4 -4
  132. package/dist/{chunk-PJAQDAMZ.cjs.map → chunk-KZ7QKUJS.cjs.map} +1 -1
  133. package/dist/{chunk-A2QVQF54.cjs → chunk-M26KJKZG.cjs} +4 -4
  134. package/dist/{chunk-A2QVQF54.cjs.map → chunk-M26KJKZG.cjs.map} +1 -1
  135. package/dist/{chunk-JHYFHEHS.js → chunk-MHD5HZ4X.js} +4 -4
  136. package/dist/{chunk-JHYFHEHS.js.map → chunk-MHD5HZ4X.js.map} +1 -1
  137. package/dist/{chunk-UFYXU7KV.js → chunk-MWPPOX6F.js} +4 -4
  138. package/dist/{chunk-UFYXU7KV.js.map → chunk-MWPPOX6F.js.map} +1 -1
  139. package/dist/{chunk-KJ5BSGEO.cjs → chunk-NGPEXCC7.cjs} +11 -11
  140. package/dist/{chunk-KJ5BSGEO.cjs.map → chunk-NGPEXCC7.cjs.map} +1 -1
  141. package/dist/{chunk-T3RWXOCM.js → chunk-NU6QKULE.js} +3 -3
  142. package/dist/{chunk-T3RWXOCM.js.map → chunk-NU6QKULE.js.map} +1 -1
  143. package/dist/{chunk-BYUV3IZV.cjs → chunk-OGPJ3LRF.cjs} +4 -4
  144. package/dist/{chunk-BYUV3IZV.cjs.map → chunk-OGPJ3LRF.cjs.map} +1 -1
  145. package/dist/{chunk-DAPZPT5N.cjs → chunk-OJEXXH5D.cjs} +11 -11
  146. package/dist/{chunk-DAPZPT5N.cjs.map → chunk-OJEXXH5D.cjs.map} +1 -1
  147. package/dist/{chunk-XL7TTKHP.js → chunk-OLFTGCGD.js} +7 -7
  148. package/dist/{chunk-XL7TTKHP.js.map → chunk-OLFTGCGD.js.map} +1 -1
  149. package/dist/{chunk-BX6BTDTR.js → chunk-OQWZYKJM.js} +3 -3
  150. package/dist/{chunk-BX6BTDTR.js.map → chunk-OQWZYKJM.js.map} +1 -1
  151. package/dist/{chunk-JBB25LFB.js → chunk-OTQ72WX3.js} +3 -3
  152. package/dist/{chunk-JBB25LFB.js.map → chunk-OTQ72WX3.js.map} +1 -1
  153. package/dist/{chunk-AFKKJEV5.cjs → chunk-OZOSWBSI.cjs} +4 -4
  154. package/dist/{chunk-AFKKJEV5.cjs.map → chunk-OZOSWBSI.cjs.map} +1 -1
  155. package/dist/{chunk-KJPOFUF5.cjs → chunk-P2VTQ5AR.cjs} +10 -10
  156. package/dist/{chunk-KJPOFUF5.cjs.map → chunk-P2VTQ5AR.cjs.map} +1 -1
  157. package/dist/{chunk-QASIWBXU.cjs → chunk-P7UMS4E6.cjs} +7 -7
  158. package/dist/{chunk-QASIWBXU.cjs.map → chunk-P7UMS4E6.cjs.map} +1 -1
  159. package/dist/{chunk-QUUFKGDF.cjs → chunk-PGETZ2FP.cjs} +15 -15
  160. package/dist/{chunk-QUUFKGDF.cjs.map → chunk-PGETZ2FP.cjs.map} +1 -1
  161. package/dist/{chunk-5M2YSPJH.cjs → chunk-PNJAFZDC.cjs} +59 -59
  162. package/dist/{chunk-5M2YSPJH.cjs.map → chunk-PNJAFZDC.cjs.map} +1 -1
  163. package/dist/{chunk-KOCTIB6U.js → chunk-PS5INHGC.js} +3 -3
  164. package/dist/{chunk-KOCTIB6U.js.map → chunk-PS5INHGC.js.map} +1 -1
  165. package/dist/{chunk-Y2S6QMKU.js → chunk-PTZB2GKL.js} +3 -3
  166. package/dist/{chunk-Y2S6QMKU.js.map → chunk-PTZB2GKL.js.map} +1 -1
  167. package/dist/{chunk-NQME7MCK.js → chunk-QKKYMNR2.js} +4 -4
  168. package/dist/{chunk-NQME7MCK.js.map → chunk-QKKYMNR2.js.map} +1 -1
  169. package/dist/{chunk-GOAW2UCP.js → chunk-QNUPTRW7.js} +9 -9
  170. package/dist/{chunk-GOAW2UCP.js.map → chunk-QNUPTRW7.js.map} +1 -1
  171. package/dist/{chunk-EZKRAW2X.js → chunk-QUUBTNMH.js} +3 -3
  172. package/dist/{chunk-EZKRAW2X.js.map → chunk-QUUBTNMH.js.map} +1 -1
  173. package/dist/{chunk-T42BCIUA.js → chunk-REPZI2YO.js} +3 -3
  174. package/dist/{chunk-T42BCIUA.js.map → chunk-REPZI2YO.js.map} +1 -1
  175. package/dist/{chunk-CKD554XR.cjs → chunk-RUEEDOE3.cjs} +5 -5
  176. package/dist/{chunk-CKD554XR.cjs.map → chunk-RUEEDOE3.cjs.map} +1 -1
  177. package/dist/{chunk-RHYIFIT5.js → chunk-RZFSJD67.js} +3 -3
  178. package/dist/{chunk-RHYIFIT5.js.map → chunk-RZFSJD67.js.map} +1 -1
  179. package/dist/{chunk-DFCZPVG4.cjs → chunk-S3MKIDYG.cjs} +8 -8
  180. package/dist/{chunk-DFCZPVG4.cjs.map → chunk-S3MKIDYG.cjs.map} +1 -1
  181. package/dist/chunk-S5RVSXDV.cjs +45 -0
  182. package/dist/chunk-S5RVSXDV.cjs.map +1 -0
  183. package/dist/{chunk-4LVPQ44A.js → chunk-SAJSA4TS.js} +3 -3
  184. package/dist/{chunk-4LVPQ44A.js.map → chunk-SAJSA4TS.js.map} +1 -1
  185. package/dist/{chunk-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
  186. package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
  187. package/dist/{chunk-5MAGWW5X.cjs → chunk-STCRP652.cjs} +11 -11
  188. package/dist/{chunk-5MAGWW5X.cjs.map → chunk-STCRP652.cjs.map} +1 -1
  189. package/dist/{chunk-3MGHTTZW.js → chunk-SVSHA7XV.js} +3 -3
  190. package/dist/{chunk-3MGHTTZW.js.map → chunk-SVSHA7XV.js.map} +1 -1
  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-FQ3UCZUX.cjs → chunk-U3JU6BI5.cjs} +7 -7
  196. package/dist/{chunk-FQ3UCZUX.cjs.map → chunk-U3JU6BI5.cjs.map} +1 -1
  197. package/dist/{chunk-VCO2IZOG.js → chunk-UA7E7PDS.js} +3 -3
  198. package/dist/{chunk-VCO2IZOG.js.map → chunk-UA7E7PDS.js.map} +1 -1
  199. package/dist/{chunk-I2W24RHW.js → chunk-VE6OUO7X.js} +3 -3
  200. package/dist/{chunk-I2W24RHW.js.map → chunk-VE6OUO7X.js.map} +1 -1
  201. package/dist/{chunk-STPK44AU.js → chunk-VNWJTCBQ.js} +3 -3
  202. package/dist/{chunk-STPK44AU.js.map → chunk-VNWJTCBQ.js.map} +1 -1
  203. package/dist/{chunk-ZNZZCB2M.cjs → chunk-VPIYTQCV.cjs} +9 -9
  204. package/dist/{chunk-ZNZZCB2M.cjs.map → chunk-VPIYTQCV.cjs.map} +1 -1
  205. package/dist/{chunk-DLNJLCNO.cjs → chunk-VTKXM7IE.cjs} +4 -4
  206. package/dist/{chunk-DLNJLCNO.cjs.map → chunk-VTKXM7IE.cjs.map} +1 -1
  207. package/dist/{chunk-EUUQVDXX.cjs → chunk-W4Q4UEXA.cjs} +14 -14
  208. package/dist/{chunk-EUUQVDXX.cjs.map → chunk-W4Q4UEXA.cjs.map} +1 -1
  209. package/dist/{chunk-ZVSW2KS6.js → chunk-WRYZ2752.js} +3 -3
  210. package/dist/{chunk-ZVSW2KS6.js.map → chunk-WRYZ2752.js.map} +1 -1
  211. package/dist/{chunk-U3ABLVYH.cjs → chunk-WUNWHOLA.cjs} +6 -6
  212. package/dist/{chunk-U3ABLVYH.cjs.map → chunk-WUNWHOLA.cjs.map} +1 -1
  213. package/dist/{chunk-RH43XBNV.cjs → chunk-WWJIW2IH.cjs} +4 -4
  214. package/dist/{chunk-RH43XBNV.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
  215. package/dist/{chunk-6NXQSQ3A.cjs → chunk-X4LBUPJO.cjs} +10 -10
  216. package/dist/{chunk-6NXQSQ3A.cjs.map → chunk-X4LBUPJO.cjs.map} +1 -1
  217. package/dist/{chunk-O4PGFGUW.cjs → chunk-X732DPW4.cjs} +122 -122
  218. package/dist/{chunk-O4PGFGUW.cjs.map → chunk-X732DPW4.cjs.map} +1 -1
  219. package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
  220. package/dist/chunk-XB54G7WS.cjs.map +1 -0
  221. package/dist/{chunk-MAMY5HTT.cjs → chunk-XCVBCY7L.cjs} +20 -20
  222. package/dist/{chunk-MAMY5HTT.cjs.map → chunk-XCVBCY7L.cjs.map} +1 -1
  223. package/dist/{chunk-BLPCYP4D.cjs → chunk-XD6GRTH2.cjs} +29 -29
  224. package/dist/{chunk-BLPCYP4D.cjs.map → chunk-XD6GRTH2.cjs.map} +1 -1
  225. package/dist/{chunk-IUFDGB5O.js → chunk-XMCIXHGH.js} +3 -3
  226. package/dist/{chunk-IUFDGB5O.js.map → chunk-XMCIXHGH.js.map} +1 -1
  227. package/dist/{chunk-KAKH2UZA.js → chunk-XO3WLK65.js} +3 -3
  228. package/dist/{chunk-KAKH2UZA.js.map → chunk-XO3WLK65.js.map} +1 -1
  229. package/dist/{chunk-DUPR6FEL.js → chunk-XPNKDFRL.js} +3 -3
  230. package/dist/{chunk-DUPR6FEL.js.map → chunk-XPNKDFRL.js.map} +1 -1
  231. package/dist/{chunk-DEZ7XSTG.cjs → chunk-XXVUHLQN.cjs} +7 -7
  232. package/dist/{chunk-DEZ7XSTG.cjs.map → chunk-XXVUHLQN.cjs.map} +1 -1
  233. package/dist/{chunk-MZPF2QGM.cjs → chunk-Y5F2OASC.cjs} +13 -13
  234. package/dist/{chunk-MZPF2QGM.cjs.map → chunk-Y5F2OASC.cjs.map} +1 -1
  235. package/dist/{chunk-3GGET5LK.cjs → chunk-YGA35Z2P.cjs} +7 -7
  236. package/dist/{chunk-3GGET5LK.cjs.map → chunk-YGA35Z2P.cjs.map} +1 -1
  237. package/dist/{chunk-GOKC4CCZ.cjs → chunk-YMHOF6WA.cjs} +8 -8
  238. package/dist/{chunk-GOKC4CCZ.cjs.map → chunk-YMHOF6WA.cjs.map} +1 -1
  239. package/dist/{chunk-OXYFTCRW.cjs → chunk-YP5T6NZD.cjs} +4 -4
  240. package/dist/{chunk-OXYFTCRW.cjs.map → chunk-YP5T6NZD.cjs.map} +1 -1
  241. package/dist/{chunk-OX2RIVN7.js → chunk-YTLTI5Q2.js} +4 -4
  242. package/dist/{chunk-OX2RIVN7.js.map → chunk-YTLTI5Q2.js.map} +1 -1
  243. package/dist/{chunk-372IIHUA.cjs → chunk-YXHX2DAK.cjs} +53 -53
  244. package/dist/{chunk-372IIHUA.cjs.map → chunk-YXHX2DAK.cjs.map} +1 -1
  245. package/dist/{chunk-ST2RE5UB.cjs → chunk-Z5KFXHDP.cjs} +6 -6
  246. package/dist/{chunk-ST2RE5UB.cjs.map → chunk-Z5KFXHDP.cjs.map} +1 -1
  247. package/dist/{chunk-4Z6ZZKIY.js → chunk-ZIUADGAR.js} +3 -3
  248. package/dist/{chunk-4Z6ZZKIY.js.map → chunk-ZIUADGAR.js.map} +1 -1
  249. package/dist/{chunk-LOTMAKUG.cjs → chunk-ZZJ4ZVYR.cjs} +11 -11
  250. package/dist/{chunk-LOTMAKUG.cjs.map → chunk-ZZJ4ZVYR.cjs.map} +1 -1
  251. package/dist/components/Alert/index.cjs +6 -6
  252. package/dist/components/Alert/index.js +2 -2
  253. package/dist/components/AlertDialog/index.cjs +5 -5
  254. package/dist/components/AlertDialog/index.js +4 -4
  255. package/dist/components/AudioPlayer/index.cjs +7 -7
  256. package/dist/components/AudioPlayer/index.js +2 -2
  257. package/dist/components/AudioRecorder/index.cjs +7 -7
  258. package/dist/components/AudioRecorder/index.js +2 -2
  259. package/dist/components/Autocomplete/index.cjs +4 -4
  260. package/dist/components/Autocomplete/index.js +3 -3
  261. package/dist/components/Avatar/index.cjs +6 -6
  262. package/dist/components/Avatar/index.js +2 -2
  263. package/dist/components/Badge/index.cjs +4 -4
  264. package/dist/components/Badge/index.js +2 -2
  265. package/dist/components/Breadcrumb/index.cjs +4 -4
  266. package/dist/components/Breadcrumb/index.js +2 -2
  267. package/dist/components/Button/index.cjs +4 -4
  268. package/dist/components/Button/index.js +2 -2
  269. package/dist/components/Card/index.cjs +16 -16
  270. package/dist/components/Card/index.js +2 -2
  271. package/dist/components/Checkbox/index.cjs +5 -5
  272. package/dist/components/Checkbox/index.js +2 -2
  273. package/dist/components/CollabStatus/index.cjs +5 -5
  274. package/dist/components/CollabStatus/index.js +2 -2
  275. package/dist/components/Collapsible/index.cjs +5 -5
  276. package/dist/components/Collapsible/index.js +2 -2
  277. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  278. package/dist/components/CountryCodeDropdown/index.js +2 -2
  279. package/dist/components/DateInput/index.cjs +4 -4
  280. package/dist/components/DateInput/index.js +3 -3
  281. package/dist/components/Dropdown/index.cjs +9 -9
  282. package/dist/components/Dropdown/index.js +3 -3
  283. package/dist/components/FloatingWindow/index.cjs +5 -5
  284. package/dist/components/FloatingWindow/index.js +3 -3
  285. package/dist/components/Input/index.cjs +4 -4
  286. package/dist/components/Input/index.js +2 -2
  287. package/dist/components/Label/index.cjs +4 -4
  288. package/dist/components/Label/index.js +2 -2
  289. package/dist/components/Markdown/index.cjs +17 -17
  290. package/dist/components/Markdown/index.js +8 -8
  291. package/dist/components/MediaEditor/index.cjs +14 -14
  292. package/dist/components/MediaEditor/index.js +9 -9
  293. package/dist/components/MediaPlayer/index.cjs +6 -6
  294. package/dist/components/MediaPlayer/index.js +3 -3
  295. package/dist/components/Modal/index.cjs +10 -10
  296. package/dist/components/Modal/index.js +2 -2
  297. package/dist/components/Pagination/index.cjs +5 -5
  298. package/dist/components/Pagination/index.js +2 -2
  299. package/dist/components/PhoneInput/index.cjs +5 -5
  300. package/dist/components/PhoneInput/index.js +3 -3
  301. package/dist/components/Progress/index.cjs +7 -7
  302. package/dist/components/Progress/index.js +2 -2
  303. package/dist/components/QuickAction/index.cjs +7 -7
  304. package/dist/components/QuickAction/index.js +2 -2
  305. package/dist/components/Radio/index.cjs +5 -5
  306. package/dist/components/Radio/index.js +2 -2
  307. package/dist/components/RecordButton/index.cjs +5 -5
  308. package/dist/components/RecordButton/index.js +2 -2
  309. package/dist/components/RichTextEditor/index.cjs +9 -9
  310. package/dist/components/RichTextEditor/index.js +6 -6
  311. package/dist/components/SchedulePicker/index.cjs +11 -11
  312. package/dist/components/SchedulePicker/index.js +2 -2
  313. package/dist/components/ScrollArea/index.cjs +4 -4
  314. package/dist/components/ScrollArea/index.js +2 -2
  315. package/dist/components/Select/index.cjs +4 -4
  316. package/dist/components/Select/index.js +2 -2
  317. package/dist/components/Separator/index.cjs +4 -4
  318. package/dist/components/Separator/index.js +2 -2
  319. package/dist/components/Sheet/index.cjs +11 -11
  320. package/dist/components/Sheet/index.d.cts +1 -1
  321. package/dist/components/Sheet/index.d.ts +1 -1
  322. package/dist/components/Sheet/index.js +2 -2
  323. package/dist/components/Skeleton/index.cjs +7 -7
  324. package/dist/components/Skeleton/index.js +2 -2
  325. package/dist/components/Slider/index.cjs +6 -6
  326. package/dist/components/Slider/index.js +2 -2
  327. package/dist/components/Spinner/index.cjs +6 -6
  328. package/dist/components/Spinner/index.js +2 -2
  329. package/dist/components/SuperChat/index.cjs +45 -45
  330. package/dist/components/SuperChat/index.js +8 -8
  331. package/dist/components/SuperChat/plugins/index.cjs +9 -9
  332. package/dist/components/SuperChat/plugins/index.js +3 -3
  333. package/dist/components/Switch/index.cjs +5 -5
  334. package/dist/components/Switch/index.js +2 -2
  335. package/dist/components/Table/index.cjs +10 -10
  336. package/dist/components/Table/index.js +2 -2
  337. package/dist/components/Tabs/index.cjs +8 -8
  338. package/dist/components/Tabs/index.js +2 -2
  339. package/dist/components/Text/index.cjs +5 -5
  340. package/dist/components/Text/index.d.cts +1 -1
  341. package/dist/components/Text/index.d.ts +1 -1
  342. package/dist/components/Text/index.js +2 -2
  343. package/dist/components/Textarea/index.cjs +4 -4
  344. package/dist/components/Textarea/index.js +2 -2
  345. package/dist/components/ThemeProvider/index.cjs +9 -9
  346. package/dist/components/ThemeProvider/index.js +3 -3
  347. package/dist/components/Toggle/index.cjs +4 -4
  348. package/dist/components/Toggle/index.js +2 -2
  349. package/dist/components/Tooltip/index.cjs +3 -3
  350. package/dist/components/Tooltip/index.js +2 -2
  351. package/dist/datavis.cjs +7 -7
  352. package/dist/datavis.js +3 -3
  353. package/dist/esheet.cjs +16 -16
  354. package/dist/esheet.js +13 -13
  355. package/dist/hooks/index.cjs +23 -11
  356. package/dist/hooks/index.d.cts +29 -1
  357. package/dist/hooks/index.d.ts +29 -1
  358. package/dist/hooks/index.js +1 -1
  359. package/dist/index.cjs +1696 -1680
  360. package/dist/index.d.cts +24 -3
  361. package/dist/index.d.ts +24 -3
  362. package/dist/index.js +88 -88
  363. package/dist/styles.css +1 -1
  364. package/dist/tailwind-preset.cjs +4 -4
  365. package/dist/tailwind-preset.js +1 -1
  366. package/dist/utils/index.cjs +6 -2
  367. package/dist/utils/index.d.cts +6 -1
  368. package/dist/utils/index.d.ts +6 -1
  369. package/dist/utils/index.js +1 -1
  370. package/package.json +3 -1
  371. package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
  372. package/dist/CsvBlock-D6PWAJ5X.js +0 -6
  373. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
  374. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
  375. package/dist/MermaidBlock-7NK3AVK2.js +0 -6
  376. package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
  377. package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
  378. package/dist/SurveyBlock-NNDGXGG4.js +0 -6
  379. package/dist/chunk-4GXECTPS.cjs.map +0 -1
  380. package/dist/chunk-B77UC56R.js.map +0 -1
  381. package/dist/chunk-F3SOEIN2.js +0 -11
  382. package/dist/chunk-F3SOEIN2.js.map +0 -1
  383. package/dist/chunk-OR5DRJCW.cjs +0 -13
  384. package/dist/chunk-OR5DRJCW.cjs.map +0 -1
  385. package/dist/chunk-T5F565OC.cjs.map +0 -1
  386. package/dist/chunk-ZGSC2CB2.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { FenceBlock } from './chunk-RHYIFIT5.js';
2
- import { Button } from './chunk-ZVSW2KS6.js';
1
+ import { FenceBlock } from './chunk-RZFSJD67.js';
2
+ import { Button } from './chunk-WRYZ2752.js';
3
3
  import { Code, Eye, Maximize2 } from 'lucide-react';
4
4
  import { useState, useRef, useEffect, useCallback } from 'react';
5
5
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -131,5 +131,5 @@ var HtmlPreviewBlock = ({
131
131
  };
132
132
 
133
133
  export { HtmlPreviewBlock };
134
- //# sourceMappingURL=chunk-UFYXU7KV.js.map
135
- //# sourceMappingURL=chunk-UFYXU7KV.js.map
134
+ //# sourceMappingURL=chunk-MWPPOX6F.js.map
135
+ //# sourceMappingURL=chunk-MWPPOX6F.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/HtmlPreviewBlock.tsx"],"names":[],"mappings":"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","file":"chunk-UFYXU7KV.js","sourcesContent":["/** Sandboxed iframe preview for HTML code blocks. */\nimport { Code, Eye, Maximize2 } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface HtmlPreviewBlockProps {\n code: string;\n id: string;\n}\n\nfunction isFullDocument(html: string): boolean {\n return /<!DOCTYPE|<html/i.test(html);\n}\n\nfunction wrapFragment(html: string): string {\n return `<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"><style>body{margin:0;padding:8px;font-family:system-ui,sans-serif;font-size:14px}</style></head>\n<body>${html}</body>\n</html>`;\n}\n\nexport const HtmlPreviewBlock: React.FC<HtmlPreviewBlockProps> = ({\n code,\n id,\n}) => {\n const [showPreview, setShowPreview] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [iframeHeight, setIframeHeight] = useState(200);\n\n const srcdoc = isFullDocument(code) ? code : wrapFragment(code);\n\n useEffect(() => {\n function handleMessage(event: globalThis.MessageEvent) {\n // Sandboxed srcDoc iframes report origin \"null\"; validate source to prevent spoofing.\n if (event.origin !== 'null' && event.origin !== window.location.origin)\n return;\n if (event.source !== iframeRef.current?.contentWindow) return;\n if (event.data?.type === 'HTML_PREVIEW_RESIZE' && event.data?.id === id) {\n setIframeHeight(Math.min(Math.max(event.data.height, 200), 4000));\n }\n }\n window.addEventListener('message', handleMessage);\n return () => window.removeEventListener('message', handleMessage);\n }, [id]);\n\n useEffect(() => {\n if (!expanded) return;\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setExpanded(false);\n }\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [expanded]);\n\n const togglePreview = useCallback(() => setShowPreview((v) => !v), []);\n\n const headerActions = (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={togglePreview}\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n {showPreview ? (\n <Code className=\"h-3 w-3\" />\n ) : (\n <Eye className=\"h-3 w-3\" />\n )}\n {showPreview ? 'Code' : 'Preview'}\n </Button>\n {showPreview && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(true)}\n className=\"h-7 w-7 p-0\"\n aria-label=\"Expand preview\"\n >\n <Maximize2 className=\"h-3 w-3\" />\n </Button>\n )}\n </>\n );\n\n return (\n <>\n <FenceBlock code={code} language=\"html\" headerActions={headerActions}>\n <div className=\"relative\">\n {showPreview ? (\n <iframe\n ref={iframeRef}\n srcDoc={srcdoc}\n // `allow-scripts` lets previewed HTML run its own JS (charts, demos,\n // and the optional resize-postMessage handshake). It is intentionally\n // NOT paired with `allow-same-origin`, so the content runs in an\n // opaque (null) origin with no access to this page, cookies, or storage.\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"w-full border-0\"\n style={{ height: iframeHeight }}\n title=\"HTML Preview\"\n />\n ) : (\n <pre className=\"overflow-x-auto p-3 text-sm\">\n <code>{code}</code>\n </pre>\n )}\n </div>\n </FenceBlock>\n\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"HTML Preview\"\n >\n <button\n type=\"button\"\n aria-label=\"Close preview\"\n className=\"absolute inset-0 h-full w-full cursor-default border-0 bg-transparent p-0\"\n onClick={() => setExpanded(false)}\n />\n <div className=\"relative h-[90vh] w-[90vw] overflow-hidden rounded-lg bg-white shadow-xl dark:bg-neutral-900\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-4 py-2 dark:border-neutral-700\">\n <span className=\"text-sm font-medium\">HTML Preview</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(false)}\n >\n Close\n </Button>\n </div>\n <iframe\n srcDoc={srcdoc}\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"h-full w-full border-0\"\n title=\"HTML Preview (expanded)\"\n />\n </div>\n </div>\n )}\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/HtmlPreviewBlock.tsx"],"names":[],"mappings":"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","file":"chunk-MWPPOX6F.js","sourcesContent":["/** Sandboxed iframe preview for HTML code blocks. */\nimport { Code, Eye, Maximize2 } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface HtmlPreviewBlockProps {\n code: string;\n id: string;\n}\n\nfunction isFullDocument(html: string): boolean {\n return /<!DOCTYPE|<html/i.test(html);\n}\n\nfunction wrapFragment(html: string): string {\n return `<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"><style>body{margin:0;padding:8px;font-family:system-ui,sans-serif;font-size:14px}</style></head>\n<body>${html}</body>\n</html>`;\n}\n\nexport const HtmlPreviewBlock: React.FC<HtmlPreviewBlockProps> = ({\n code,\n id,\n}) => {\n const [showPreview, setShowPreview] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [iframeHeight, setIframeHeight] = useState(200);\n\n const srcdoc = isFullDocument(code) ? code : wrapFragment(code);\n\n useEffect(() => {\n function handleMessage(event: globalThis.MessageEvent) {\n // Sandboxed srcDoc iframes report origin \"null\"; validate source to prevent spoofing.\n if (event.origin !== 'null' && event.origin !== window.location.origin)\n return;\n if (event.source !== iframeRef.current?.contentWindow) return;\n if (event.data?.type === 'HTML_PREVIEW_RESIZE' && event.data?.id === id) {\n setIframeHeight(Math.min(Math.max(event.data.height, 200), 4000));\n }\n }\n window.addEventListener('message', handleMessage);\n return () => window.removeEventListener('message', handleMessage);\n }, [id]);\n\n useEffect(() => {\n if (!expanded) return;\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setExpanded(false);\n }\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [expanded]);\n\n const togglePreview = useCallback(() => setShowPreview((v) => !v), []);\n\n const headerActions = (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={togglePreview}\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n {showPreview ? (\n <Code className=\"h-3 w-3\" />\n ) : (\n <Eye className=\"h-3 w-3\" />\n )}\n {showPreview ? 'Code' : 'Preview'}\n </Button>\n {showPreview && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(true)}\n className=\"h-7 w-7 p-0\"\n aria-label=\"Expand preview\"\n >\n <Maximize2 className=\"h-3 w-3\" />\n </Button>\n )}\n </>\n );\n\n return (\n <>\n <FenceBlock code={code} language=\"html\" headerActions={headerActions}>\n <div className=\"relative\">\n {showPreview ? (\n <iframe\n ref={iframeRef}\n srcDoc={srcdoc}\n // `allow-scripts` lets previewed HTML run its own JS (charts, demos,\n // and the optional resize-postMessage handshake). It is intentionally\n // NOT paired with `allow-same-origin`, so the content runs in an\n // opaque (null) origin with no access to this page, cookies, or storage.\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"w-full border-0\"\n style={{ height: iframeHeight }}\n title=\"HTML Preview\"\n />\n ) : (\n <pre className=\"overflow-x-auto p-3 text-sm\">\n <code>{code}</code>\n </pre>\n )}\n </div>\n </FenceBlock>\n\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"HTML Preview\"\n >\n <button\n type=\"button\"\n aria-label=\"Close preview\"\n className=\"absolute inset-0 h-full w-full cursor-default border-0 bg-transparent p-0\"\n onClick={() => setExpanded(false)}\n />\n <div className=\"relative h-[90vh] w-[90vw] overflow-hidden rounded-lg bg-white shadow-xl dark:bg-neutral-900\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-4 py-2 dark:border-neutral-700\">\n <span className=\"text-sm font-medium\">HTML Preview</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(false)}\n >\n Close\n </Button>\n </div>\n <iframe\n srcDoc={srcdoc}\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"h-full w-full border-0\"\n title=\"HTML Preview (expanded)\"\n />\n </div>\n </div>\n )}\n </>\n );\n};\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var chunkNNEFAUHV_cjs = require('./chunk-NNEFAUHV.cjs');
4
4
  var chunkFHY3K6PL_cjs = require('./chunk-FHY3K6PL.cjs');
5
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
5
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
6
6
  var React = require('react');
7
7
  var classVarianceAuthority = require('class-variance-authority');
8
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -91,7 +91,7 @@ function Sheet({
91
91
  /* @__PURE__ */ jsxRuntime.jsx(
92
92
  "div",
93
93
  {
94
- className: chunkOR5DRJCW_cjs.cn(sheetOverlayVariants()),
94
+ className: chunkS5RVSXDV_cjs.cn(sheetOverlayVariants()),
95
95
  "data-state": "open",
96
96
  "aria-hidden": "true",
97
97
  onClick: handleOverlayClick
@@ -110,7 +110,7 @@ function Sheet({
110
110
  tabIndex: -1,
111
111
  "data-state": "open",
112
112
  "data-slot": "sheet",
113
- className: chunkOR5DRJCW_cjs.cn(sheetContentVariants({ side }), className),
113
+ className: chunkS5RVSXDV_cjs.cn(sheetContentVariants({ side }), className),
114
114
  children
115
115
  }
116
116
  )
@@ -135,7 +135,7 @@ var SheetHeader = React__namespace.forwardRef(
135
135
  {
136
136
  ref,
137
137
  "data-slot": "sheet-header",
138
- className: chunkOR5DRJCW_cjs.cn(
138
+ className: chunkS5RVSXDV_cjs.cn(
139
139
  "flex shrink-0 items-center justify-between",
140
140
  "border-border border-b px-6 py-4",
141
141
  className
@@ -154,7 +154,7 @@ var SheetTitle = React__namespace.forwardRef(
154
154
  ref,
155
155
  id: `${sheetId}-title`,
156
156
  "data-slot": "sheet-title",
157
- className: chunkOR5DRJCW_cjs.cn(
157
+ className: chunkS5RVSXDV_cjs.cn(
158
158
  "text-lg leading-none font-semibold tracking-tight",
159
159
  className
160
160
  ),
@@ -170,7 +170,7 @@ var SheetDescription = React__namespace.forwardRef(({ className, ...props }, ref
170
170
  {
171
171
  ref,
172
172
  "data-slot": "sheet-description",
173
- className: chunkOR5DRJCW_cjs.cn("text-muted-foreground text-sm", className),
173
+ className: chunkS5RVSXDV_cjs.cn("text-muted-foreground text-sm", className),
174
174
  ...props
175
175
  }
176
176
  ));
@@ -181,7 +181,7 @@ var SheetBody = React__namespace.forwardRef(
181
181
  {
182
182
  ref,
183
183
  "data-slot": "sheet-body",
184
- className: chunkOR5DRJCW_cjs.cn("flex-1 overflow-y-auto px-6 py-4", className),
184
+ className: chunkS5RVSXDV_cjs.cn("flex-1 overflow-y-auto px-6 py-4", className),
185
185
  ...props
186
186
  }
187
187
  )
@@ -193,7 +193,7 @@ var SheetFooter = React__namespace.forwardRef(
193
193
  {
194
194
  ref,
195
195
  "data-slot": "sheet-footer",
196
- className: chunkOR5DRJCW_cjs.cn(
196
+ className: chunkS5RVSXDV_cjs.cn(
197
197
  "flex shrink-0 flex-col-reverse gap-2 sm:flex-row sm:justify-end",
198
198
  "border-border border-t px-6 py-4",
199
199
  className
@@ -217,7 +217,7 @@ var SheetClose = React__namespace.forwardRef(
217
217
  onClose();
218
218
  onClick?.(e);
219
219
  },
220
- className: chunkOR5DRJCW_cjs.cn(
220
+ className: chunkS5RVSXDV_cjs.cn(
221
221
  "text-muted-foreground hover:text-foreground rounded-md",
222
222
  "focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none",
223
223
  "transition-colors",
@@ -254,5 +254,5 @@ exports.SheetHeader = SheetHeader;
254
254
  exports.SheetTitle = SheetTitle;
255
255
  exports.sheetContentVariants = sheetContentVariants;
256
256
  exports.sheetOverlayVariants = sheetOverlayVariants;
257
- //# sourceMappingURL=chunk-KJ5BSGEO.cjs.map
258
- //# sourceMappingURL=chunk-KJ5BSGEO.cjs.map
257
+ //# sourceMappingURL=chunk-NGPEXCC7.cjs.map
258
+ //# sourceMappingURL=chunk-NGPEXCC7.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Sheet/Sheet.tsx"],"names":["cva","React","useFocusTrap","useEscapeKey","jsx","jsxs","cn"],"mappings":"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","file":"chunk-KJ5BSGEO.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\nconst sheetOverlayVariants = cva([\n 'fixed inset-0 z-50',\n 'bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0',\n]);\n\nconst sheetContentVariants = cva(\n [\n 'fixed z-50 flex flex-col gap-4',\n 'bg-card text-card-foreground shadow-lg',\n 'border-border',\n 'focus:outline-none',\n 'transition ease-in-out duration-200',\n ],\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b max-h-dvh',\n bottom: 'inset-x-0 bottom-0 border-t max-h-dvh',\n left: 'inset-y-0 left-0 h-full border-r w-3/4 sm:max-w-sm',\n right: 'inset-y-0 right-0 h-full border-l w-3/4 sm:max-w-sm',\n },\n },\n defaultVariants: {\n side: 'right',\n },\n }\n);\n\nexport interface SheetProps extends VariantProps<typeof sheetContentVariants> {\n /** Whether the sheet is open */\n open: boolean;\n /** Callback when the sheet should close */\n onOpenChange: (open: boolean) => void;\n /** Sheet content */\n children: React.ReactNode;\n /** Close when clicking the overlay (default true) */\n closeOnOverlayClick?: boolean;\n /** Close when pressing Escape (default true) */\n closeOnEscape?: boolean;\n /** Additional class name for the sheet content */\n className?: string;\n /** ID for the sheet, used for accessibility */\n id?: string;\n /** Accessible label for the sheet */\n 'aria-label'?: string;\n /** ID of the element that labels the sheet */\n 'aria-labelledby'?: string;\n /** ID of the element that describes the sheet */\n 'aria-describedby'?: string;\n}\n\n/**\n * A panel that slides in from an edge of the screen.\n *\n * @example\n * ```tsx\n * <Sheet open={open} onOpenChange={setOpen} side=\"right\">\n * <SheetHeader>\n * <SheetTitle>Filters</SheetTitle>\n * </SheetHeader>\n * <SheetBody>...</SheetBody>\n * </Sheet>\n * ```\n */\nfunction Sheet({\n open,\n onOpenChange,\n children,\n side,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n}: SheetProps) {\n const generatedId = React.useId();\n const sheetId = id || generatedId;\n\n const focusTrapRef = useFocusTrap<HTMLDivElement>(open);\n\n useEscapeKey(() => {\n if (closeOnEscape && open) onOpenChange(false);\n }, open);\n\n const handleOverlayClick = React.useCallback(\n (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onOpenChange(false);\n }\n },\n [closeOnOverlayClick, onOpenChange]\n );\n\n if (!open) return null;\n\n return (\n <SheetContext.Provider\n value={{ onClose: () => onOpenChange(false), sheetId }}\n >\n <div className=\"fixed inset-0 z-50\">\n <div\n className={cn(sheetOverlayVariants())}\n data-state=\"open\"\n aria-hidden=\"true\"\n onClick={handleOverlayClick}\n />\n <div\n ref={focusTrapRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy || `${sheetId}-title`}\n aria-describedby={ariaDescribedBy}\n id={sheetId}\n tabIndex={-1}\n data-state=\"open\"\n data-slot=\"sheet\"\n className={cn(sheetContentVariants({ side }), className)}\n >\n {children}\n </div>\n </div>\n </SheetContext.Provider>\n );\n}\n\nSheet.displayName = 'Sheet';\n\ninterface SheetContextValue {\n onClose: () => void;\n sheetId: string;\n}\n\nconst SheetContext = React.createContext<SheetContextValue | undefined>(\n undefined\n);\n\nfunction useSheetContext() {\n const context = React.useContext(SheetContext);\n if (!context) {\n throw new Error('Sheet components must be used within a Sheet');\n }\n return context;\n}\n\nexport type SheetHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetHeader = React.forwardRef<HTMLDivElement, SheetHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"sheet-header\"\n className={cn(\n 'flex shrink-0 items-center justify-between',\n 'border-border border-b px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nSheetHeader.displayName = 'SheetHeader';\n\nexport type SheetTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nconst SheetTitle = React.forwardRef<HTMLHeadingElement, SheetTitleProps>(\n ({ className, children, ...props }, ref) => {\n const { sheetId } = useSheetContext();\n return (\n <h2\n ref={ref}\n id={`${sheetId}-title`}\n data-slot=\"sheet-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h2>\n );\n }\n);\n\nSheetTitle.displayName = 'SheetTitle';\n\nexport type SheetDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;\n\nconst SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n SheetDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\n\nSheetDescription.displayName = 'SheetDescription';\n\nexport type SheetBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetBody = React.forwardRef<HTMLDivElement, SheetBodyProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"sheet-body\"\n className={cn('flex-1 overflow-y-auto px-6 py-4', className)}\n {...props}\n />\n )\n);\n\nSheetBody.displayName = 'SheetBody';\n\nexport type SheetFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetFooter = React.forwardRef<HTMLDivElement, SheetFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"sheet-footer\"\n className={cn(\n 'flex shrink-0 flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n 'border-border border-t px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nSheetFooter.displayName = 'SheetFooter';\n\nexport type SheetCloseProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst SheetClose = React.forwardRef<HTMLButtonElement, SheetCloseProps>(\n ({ className, children, onClick, ...props }, ref) => {\n const { onClose } = useSheetContext();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"sheet-close\"\n aria-label=\"Close\"\n onClick={(e) => {\n onClose();\n onClick?.(e);\n }}\n className={cn(\n 'text-muted-foreground hover:text-foreground rounded-md',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'transition-colors',\n className\n )}\n {...props}\n >\n {children ?? (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n )}\n </button>\n );\n }\n);\n\nSheetClose.displayName = 'SheetClose';\n\nexport {\n Sheet,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n SheetBody,\n SheetFooter,\n SheetClose,\n sheetContentVariants,\n sheetOverlayVariants,\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Sheet/Sheet.tsx"],"names":["cva","React","useFocusTrap","useEscapeKey","jsx","jsxs","cn"],"mappings":"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","file":"chunk-NGPEXCC7.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\nconst sheetOverlayVariants = cva([\n 'fixed inset-0 z-50',\n 'bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=open]:fade-in-0',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0',\n]);\n\nconst sheetContentVariants = cva(\n [\n 'fixed z-50 flex flex-col gap-4',\n 'bg-card text-card-foreground shadow-lg',\n 'border-border',\n 'focus:outline-none',\n 'transition ease-in-out duration-200',\n ],\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b max-h-dvh',\n bottom: 'inset-x-0 bottom-0 border-t max-h-dvh',\n left: 'inset-y-0 left-0 h-full border-r w-3/4 sm:max-w-sm',\n right: 'inset-y-0 right-0 h-full border-l w-3/4 sm:max-w-sm',\n },\n },\n defaultVariants: {\n side: 'right',\n },\n }\n);\n\nexport interface SheetProps extends VariantProps<typeof sheetContentVariants> {\n /** Whether the sheet is open */\n open: boolean;\n /** Callback when the sheet should close */\n onOpenChange: (open: boolean) => void;\n /** Sheet content */\n children: React.ReactNode;\n /** Close when clicking the overlay (default true) */\n closeOnOverlayClick?: boolean;\n /** Close when pressing Escape (default true) */\n closeOnEscape?: boolean;\n /** Additional class name for the sheet content */\n className?: string;\n /** ID for the sheet, used for accessibility */\n id?: string;\n /** Accessible label for the sheet */\n 'aria-label'?: string;\n /** ID of the element that labels the sheet */\n 'aria-labelledby'?: string;\n /** ID of the element that describes the sheet */\n 'aria-describedby'?: string;\n}\n\n/**\n * A panel that slides in from an edge of the screen.\n *\n * @example\n * ```tsx\n * <Sheet open={open} onOpenChange={setOpen} side=\"right\">\n * <SheetHeader>\n * <SheetTitle>Filters</SheetTitle>\n * </SheetHeader>\n * <SheetBody>...</SheetBody>\n * </Sheet>\n * ```\n */\nfunction Sheet({\n open,\n onOpenChange,\n children,\n side,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n className,\n id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n}: SheetProps) {\n const generatedId = React.useId();\n const sheetId = id || generatedId;\n\n const focusTrapRef = useFocusTrap<HTMLDivElement>(open);\n\n useEscapeKey(() => {\n if (closeOnEscape && open) onOpenChange(false);\n }, open);\n\n const handleOverlayClick = React.useCallback(\n (e: React.MouseEvent) => {\n if (closeOnOverlayClick && e.target === e.currentTarget) {\n onOpenChange(false);\n }\n },\n [closeOnOverlayClick, onOpenChange]\n );\n\n if (!open) return null;\n\n return (\n <SheetContext.Provider\n value={{ onClose: () => onOpenChange(false), sheetId }}\n >\n <div className=\"fixed inset-0 z-50\">\n <div\n className={cn(sheetOverlayVariants())}\n data-state=\"open\"\n aria-hidden=\"true\"\n onClick={handleOverlayClick}\n />\n <div\n ref={focusTrapRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy || `${sheetId}-title`}\n aria-describedby={ariaDescribedBy}\n id={sheetId}\n tabIndex={-1}\n data-state=\"open\"\n data-slot=\"sheet\"\n className={cn(sheetContentVariants({ side }), className)}\n >\n {children}\n </div>\n </div>\n </SheetContext.Provider>\n );\n}\n\nSheet.displayName = 'Sheet';\n\ninterface SheetContextValue {\n onClose: () => void;\n sheetId: string;\n}\n\nconst SheetContext = React.createContext<SheetContextValue | undefined>(\n undefined\n);\n\nfunction useSheetContext() {\n const context = React.useContext(SheetContext);\n if (!context) {\n throw new Error('Sheet components must be used within a Sheet');\n }\n return context;\n}\n\nexport type SheetHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetHeader = React.forwardRef<HTMLDivElement, SheetHeaderProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"sheet-header\"\n className={cn(\n 'flex shrink-0 items-center justify-between',\n 'border-border border-b px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nSheetHeader.displayName = 'SheetHeader';\n\nexport type SheetTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nconst SheetTitle = React.forwardRef<HTMLHeadingElement, SheetTitleProps>(\n ({ className, children, ...props }, ref) => {\n const { sheetId } = useSheetContext();\n return (\n <h2\n ref={ref}\n id={`${sheetId}-title`}\n data-slot=\"sheet-title\"\n className={cn(\n 'text-lg leading-none font-semibold tracking-tight',\n className\n )}\n {...props}\n >\n {children}\n </h2>\n );\n }\n);\n\nSheetTitle.displayName = 'SheetTitle';\n\nexport type SheetDescriptionProps = React.HTMLAttributes<HTMLParagraphElement>;\n\nconst SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n SheetDescriptionProps\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n));\n\nSheetDescription.displayName = 'SheetDescription';\n\nexport type SheetBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetBody = React.forwardRef<HTMLDivElement, SheetBodyProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"sheet-body\"\n className={cn('flex-1 overflow-y-auto px-6 py-4', className)}\n {...props}\n />\n )\n);\n\nSheetBody.displayName = 'SheetBody';\n\nexport type SheetFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst SheetFooter = React.forwardRef<HTMLDivElement, SheetFooterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"sheet-footer\"\n className={cn(\n 'flex shrink-0 flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n 'border-border border-t px-6 py-4',\n className\n )}\n {...props}\n />\n )\n);\n\nSheetFooter.displayName = 'SheetFooter';\n\nexport type SheetCloseProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nconst SheetClose = React.forwardRef<HTMLButtonElement, SheetCloseProps>(\n ({ className, children, onClick, ...props }, ref) => {\n const { onClose } = useSheetContext();\n return (\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"sheet-close\"\n aria-label=\"Close\"\n onClick={(e) => {\n onClose();\n onClick?.(e);\n }}\n className={cn(\n 'text-muted-foreground hover:text-foreground rounded-md',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'transition-colors',\n className\n )}\n {...props}\n >\n {children ?? (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n )}\n </button>\n );\n }\n);\n\nSheetClose.displayName = 'SheetClose';\n\nexport {\n Sheet,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n SheetBody,\n SheetFooter,\n SheetClose,\n sheetContentVariants,\n sheetOverlayVariants,\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { FenceBlock } from './chunk-RHYIFIT5.js';
1
+ import { FenceBlock } from './chunk-RZFSJD67.js';
2
2
  import DOMPurify from 'dompurify';
3
3
  import { useState, useMemo, useCallback, useEffect } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -144,5 +144,5 @@ var MermaidBlock = ({ code, id }) => {
144
144
  };
145
145
 
146
146
  export { MermaidBlock };
147
- //# sourceMappingURL=chunk-T3RWXOCM.js.map
148
- //# sourceMappingURL=chunk-T3RWXOCM.js.map
147
+ //# sourceMappingURL=chunk-NU6QKULE.js.map
148
+ //# sourceMappingURL=chunk-NU6QKULE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/MermaidBlock.tsx"],"names":[],"mappings":"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","file":"chunk-T3RWXOCM.js","sourcesContent":["/**\n * MermaidBlock — Renders Mermaid diagrams.\n * Requires `mermaid` to be installed by the consumer (optional peer dependency).\n */\nimport DOMPurify from 'dompurify';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\n\ninterface MermaidBlockProps {\n code: string;\n id: string;\n}\n\ntype MermaidApi = {\n initialize: (config: Record<string, unknown>) => void;\n parse: (text: string) => Promise<unknown>;\n render: (id: string, text: string) => Promise<{ svg: string }>;\n};\n\nlet mermaidInstance: MermaidApi | null = null;\nlet mermaidReady: Promise<MermaidApi> | null = null;\nlet mermaidTheme: 'dark' | 'default' = 'default';\n\nfunction currentTheme(): 'dark' | 'default' {\n return document.documentElement.classList.contains('dark') ||\n document.documentElement.getAttribute('data-theme') === 'dark'\n ? 'dark'\n : 'default';\n}\n\nfunction buildConfig(theme: 'dark' | 'default'): Record<string, unknown> {\n const base: Record<string, unknown> = {\n startOnLoad: false,\n theme,\n securityLevel: 'strict',\n };\n if (theme === 'dark') {\n base.themeVariables = {\n nodeBorder: '#6b7280',\n mainBkg: '#4a4a4a',\n nodeTextColor: '#ffffff',\n clusterBkg: '#374151',\n titleColor: '#ffffff',\n edgeLabelBackground: '#374151',\n lineColor: '#9ca3af',\n };\n }\n return base;\n}\n\nasync function getMermaid(): Promise<MermaidApi> {\n const theme = currentTheme();\n if (mermaidInstance) {\n if (theme !== mermaidTheme) {\n mermaidTheme = theme;\n mermaidInstance.initialize(buildConfig(theme));\n }\n return mermaidInstance;\n }\n if (!mermaidReady) {\n mermaidReady = import(/* @vite-ignore */ 'mermaid').then((mod) => {\n const m = (mod as { default: MermaidApi }).default;\n mermaidTheme = currentTheme();\n m.initialize(buildConfig(mermaidTheme));\n mermaidInstance = m;\n return m;\n });\n }\n return mermaidReady;\n}\n\nfunction sanitiseSvg(svg: string): string {\n return DOMPurify.sanitize(svg, {\n USE_PROFILES: { svg: true, svgFilters: true },\n // Allow <style> so mermaid's embedded CSS applies, and <foreignObject>\n // so node label text renders (mermaid escapes its content in strict mode).\n ADD_TAGS: ['style', 'foreignObject'],\n ADD_ATTR: [\n 'style',\n 'class',\n 'dominant-baseline',\n 'text-anchor',\n 'font-size',\n 'font-family',\n 'marker-end',\n 'marker-start',\n 'marker-mid',\n 'stroke-dasharray',\n 'stroke-width',\n ],\n FORBID_TAGS: ['script'],\n FORBID_ATTR: ['onload', 'onerror', 'onclick', 'onmouseover'],\n }) as string;\n}\n\nexport const MermaidBlock: React.FC<MermaidBlockProps> = ({ code, id }) => {\n const [svg, setSvg] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [loading, setLoading] = useState(true);\n\n // Derive an accessible label from the diagram's declared type (first keyword).\n const diagramLabel = useMemo(() => {\n const firstWord =\n code\n .trim()\n .split(/[\\s\\n]/)[0]\n ?.toLowerCase() ?? '';\n const typeMap: Record<string, string> = {\n graph: 'Flowchart',\n flowchart: 'Flowchart',\n sequencediagram: 'Sequence diagram',\n classdiagram: 'Class diagram',\n statediagram: 'State diagram',\n 'statediagram-v2': 'State diagram',\n erdiagram: 'Entity relationship diagram',\n gantt: 'Gantt chart',\n pie: 'Pie chart',\n journey: 'User journey diagram',\n gitgraph: 'Git graph',\n mindmap: 'Mind map',\n timeline: 'Timeline',\n quadrantchart: 'Quadrant chart',\n };\n return `${typeMap[firstWord] ?? 'Mermaid'} diagram`;\n }, [code]);\n\n const render = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const mermaid = await getMermaid();\n await mermaid.parse(code);\n const { svg: rendered } = await mermaid.render(`mermaid-${id}`, code);\n setSvg(sanitiseSvg(rendered));\n } catch (err) {\n setError((err as Error).message ?? 'Failed to render diagram');\n } finally {\n setLoading(false);\n }\n }, [code, id]);\n\n useEffect(() => {\n void render();\n }, [render]);\n\n // Re-render when the page theme changes (dark ↔ light)\n useEffect(() => {\n const observer = new MutationObserver(() => void render());\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n return () => observer.disconnect();\n }, [render]);\n\n return (\n <FenceBlock\n code={code}\n language=\"mermaid\"\n supportsRawView\n error={error || undefined}\n >\n {loading ? (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"border-primary-500 h-6 w-6 animate-spin rounded-full border-2 border-t-transparent\" />\n </div>\n ) : (\n <div\n className=\"mermaid-svg flex justify-center p-4\"\n role=\"img\"\n aria-label={diagramLabel}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n )}\n </FenceBlock>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/MermaidBlock.tsx"],"names":[],"mappings":"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","file":"chunk-NU6QKULE.js","sourcesContent":["/**\n * MermaidBlock — Renders Mermaid diagrams.\n * Requires `mermaid` to be installed by the consumer (optional peer dependency).\n */\nimport DOMPurify from 'dompurify';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\n\ninterface MermaidBlockProps {\n code: string;\n id: string;\n}\n\ntype MermaidApi = {\n initialize: (config: Record<string, unknown>) => void;\n parse: (text: string) => Promise<unknown>;\n render: (id: string, text: string) => Promise<{ svg: string }>;\n};\n\nlet mermaidInstance: MermaidApi | null = null;\nlet mermaidReady: Promise<MermaidApi> | null = null;\nlet mermaidTheme: 'dark' | 'default' = 'default';\n\nfunction currentTheme(): 'dark' | 'default' {\n return document.documentElement.classList.contains('dark') ||\n document.documentElement.getAttribute('data-theme') === 'dark'\n ? 'dark'\n : 'default';\n}\n\nfunction buildConfig(theme: 'dark' | 'default'): Record<string, unknown> {\n const base: Record<string, unknown> = {\n startOnLoad: false,\n theme,\n securityLevel: 'strict',\n };\n if (theme === 'dark') {\n base.themeVariables = {\n nodeBorder: '#6b7280',\n mainBkg: '#4a4a4a',\n nodeTextColor: '#ffffff',\n clusterBkg: '#374151',\n titleColor: '#ffffff',\n edgeLabelBackground: '#374151',\n lineColor: '#9ca3af',\n };\n }\n return base;\n}\n\nasync function getMermaid(): Promise<MermaidApi> {\n const theme = currentTheme();\n if (mermaidInstance) {\n if (theme !== mermaidTheme) {\n mermaidTheme = theme;\n mermaidInstance.initialize(buildConfig(theme));\n }\n return mermaidInstance;\n }\n if (!mermaidReady) {\n mermaidReady = import(/* @vite-ignore */ 'mermaid').then((mod) => {\n const m = (mod as { default: MermaidApi }).default;\n mermaidTheme = currentTheme();\n m.initialize(buildConfig(mermaidTheme));\n mermaidInstance = m;\n return m;\n });\n }\n return mermaidReady;\n}\n\nfunction sanitiseSvg(svg: string): string {\n return DOMPurify.sanitize(svg, {\n USE_PROFILES: { svg: true, svgFilters: true },\n // Allow <style> so mermaid's embedded CSS applies, and <foreignObject>\n // so node label text renders (mermaid escapes its content in strict mode).\n ADD_TAGS: ['style', 'foreignObject'],\n ADD_ATTR: [\n 'style',\n 'class',\n 'dominant-baseline',\n 'text-anchor',\n 'font-size',\n 'font-family',\n 'marker-end',\n 'marker-start',\n 'marker-mid',\n 'stroke-dasharray',\n 'stroke-width',\n ],\n FORBID_TAGS: ['script'],\n FORBID_ATTR: ['onload', 'onerror', 'onclick', 'onmouseover'],\n }) as string;\n}\n\nexport const MermaidBlock: React.FC<MermaidBlockProps> = ({ code, id }) => {\n const [svg, setSvg] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [loading, setLoading] = useState(true);\n\n // Derive an accessible label from the diagram's declared type (first keyword).\n const diagramLabel = useMemo(() => {\n const firstWord =\n code\n .trim()\n .split(/[\\s\\n]/)[0]\n ?.toLowerCase() ?? '';\n const typeMap: Record<string, string> = {\n graph: 'Flowchart',\n flowchart: 'Flowchart',\n sequencediagram: 'Sequence diagram',\n classdiagram: 'Class diagram',\n statediagram: 'State diagram',\n 'statediagram-v2': 'State diagram',\n erdiagram: 'Entity relationship diagram',\n gantt: 'Gantt chart',\n pie: 'Pie chart',\n journey: 'User journey diagram',\n gitgraph: 'Git graph',\n mindmap: 'Mind map',\n timeline: 'Timeline',\n quadrantchart: 'Quadrant chart',\n };\n return `${typeMap[firstWord] ?? 'Mermaid'} diagram`;\n }, [code]);\n\n const render = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const mermaid = await getMermaid();\n await mermaid.parse(code);\n const { svg: rendered } = await mermaid.render(`mermaid-${id}`, code);\n setSvg(sanitiseSvg(rendered));\n } catch (err) {\n setError((err as Error).message ?? 'Failed to render diagram');\n } finally {\n setLoading(false);\n }\n }, [code, id]);\n\n useEffect(() => {\n void render();\n }, [render]);\n\n // Re-render when the page theme changes (dark ↔ light)\n useEffect(() => {\n const observer = new MutationObserver(() => void render());\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n return () => observer.disconnect();\n }, [render]);\n\n return (\n <FenceBlock\n code={code}\n language=\"mermaid\"\n supportsRawView\n error={error || undefined}\n >\n {loading ? (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"border-primary-500 h-6 w-6 animate-spin rounded-full border-2 border-t-transparent\" />\n </div>\n ) : (\n <div\n className=\"mermaid-svg flex justify-center p-4\"\n role=\"img\"\n aria-label={diagramLabel}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n )}\n </FenceBlock>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkA2QVQF54_cjs = require('./chunk-A2QVQF54.cjs');
3
+ var chunkM26KJKZG_cjs = require('./chunk-M26KJKZG.cjs');
4
4
  var chunkJYZW2PZS_cjs = require('./chunk-JYZW2PZS.cjs');
5
5
  var React = require('react');
6
6
  var classVarianceAuthority = require('class-variance-authority');
@@ -119,7 +119,7 @@ var MediaPlayer = React__namespace.forwardRef(
119
119
  children: [
120
120
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-destructive-700 dark:text-destructive-300 m-0 text-sm", children: error }),
121
121
  /* @__PURE__ */ jsxRuntime.jsx(
122
- chunkA2QVQF54_cjs.Button,
122
+ chunkM26KJKZG_cjs.Button,
123
123
  {
124
124
  variant: "outline",
125
125
  size: "sm",
@@ -163,5 +163,5 @@ MediaPlayer.displayName = "MediaPlayer";
163
163
  exports.MediaPlayer = MediaPlayer;
164
164
  exports.inferMediaKind = inferMediaKind;
165
165
  exports.mediaPlayerVariants = mediaPlayerVariants;
166
- //# sourceMappingURL=chunk-BYUV3IZV.cjs.map
167
- //# sourceMappingURL=chunk-BYUV3IZV.cjs.map
166
+ //# sourceMappingURL=chunk-OGPJ3LRF.cjs.map
167
+ //# sourceMappingURL=chunk-OGPJ3LRF.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/MediaPlayer/MediaPlayer.tsx"],"names":["cva","React","useMediaTransport","jsx","jsxs","Button"],"mappings":"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","file":"chunk-BYUV3IZV.cjs","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":["cva","React","useMediaTransport","jsx","jsxs","Button"],"mappings":"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","file":"chunk-OGPJ3LRF.cjs","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"]}
@@ -3,7 +3,7 @@
3
3
  var chunkFHY3K6PL_cjs = require('./chunk-FHY3K6PL.cjs');
4
4
  var chunkFSGEDDF2_cjs = require('./chunk-FSGEDDF2.cjs');
5
5
  var chunkZDEYV373_cjs = require('./chunk-ZDEYV373.cjs');
6
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
6
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
9
9
  var classVarianceAuthority = require('class-variance-authority');
@@ -293,14 +293,14 @@ function Select({
293
293
  "div",
294
294
  {
295
295
  "data-slot": "select-wrapper",
296
- className: chunkOR5DRJCW_cjs.cn("flex flex-col gap-1.5", className),
296
+ className: chunkS5RVSXDV_cjs.cn("flex flex-col gap-1.5", className),
297
297
  children: [
298
298
  label && /* @__PURE__ */ jsxRuntime.jsx(
299
299
  "label",
300
300
  {
301
301
  "data-slot": "select-label",
302
302
  htmlFor: selectId,
303
- className: chunkOR5DRJCW_cjs.cn(
303
+ className: chunkS5RVSXDV_cjs.cn(
304
304
  "text-foreground text-sm font-medium",
305
305
  hideLabel && "sr-only"
306
306
  ),
@@ -328,14 +328,14 @@ function Select({
328
328
  disabled,
329
329
  onClick: () => setIsOpen(!isOpen),
330
330
  onKeyDown: handleKeyDown,
331
- className: chunkOR5DRJCW_cjs.cn(
331
+ className: chunkS5RVSXDV_cjs.cn(
332
332
  selectTriggerVariants({ size, hasError: hasError || !!error })
333
333
  ),
334
334
  children: [
335
335
  /* @__PURE__ */ jsxRuntime.jsx(
336
336
  "span",
337
337
  {
338
- className: chunkOR5DRJCW_cjs.cn(
338
+ className: chunkS5RVSXDV_cjs.cn(
339
339
  "truncate",
340
340
  !selectedOption && "text-muted-foreground"
341
341
  ),
@@ -345,7 +345,7 @@ function Select({
345
345
  /* @__PURE__ */ jsxRuntime.jsx(
346
346
  ChevronDownIcon,
347
347
  {
348
- className: chunkOR5DRJCW_cjs.cn(
348
+ className: chunkS5RVSXDV_cjs.cn(
349
349
  "text-muted-foreground h-4 w-4 shrink-0 transition-transform",
350
350
  isOpen && "rotate-180"
351
351
  )
@@ -364,7 +364,7 @@ function Select({
364
364
  floatingRef.current = node;
365
365
  },
366
366
  style: dropdownStyle,
367
- className: chunkOR5DRJCW_cjs.cn(
367
+ className: chunkS5RVSXDV_cjs.cn(
368
368
  "border-border bg-card rounded-lg border shadow-lg",
369
369
  "flex flex-col overflow-hidden",
370
370
  "animate-in fade-in zoom-in-95 duration-100"
@@ -384,7 +384,7 @@ function Select({
384
384
  onChange: (e) => setSearchQuery(e.target.value),
385
385
  onKeyDown: handleKeyDown,
386
386
  placeholder: searchPlaceholder,
387
- className: chunkOR5DRJCW_cjs.cn(
387
+ className: chunkS5RVSXDV_cjs.cn(
388
388
  "border-input bg-background w-full rounded-md border px-3 py-2 text-sm",
389
389
  "placeholder:text-muted-foreground",
390
390
  "focus:ring-ring focus:ring-2 focus:outline-none"
@@ -509,7 +509,7 @@ function SelectOptionItem({
509
509
  onClick: option.disabled ? void 0 : onSelect,
510
510
  onKeyDown: handleKeyDown,
511
511
  onMouseEnter: option.disabled ? void 0 : onMouseEnter,
512
- className: chunkOR5DRJCW_cjs.cn(
512
+ className: chunkS5RVSXDV_cjs.cn(
513
513
  "flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm",
514
514
  "transition-colors outline-none",
515
515
  isHighlighted && "bg-muted",
@@ -564,5 +564,5 @@ function CheckIcon({ className }) {
564
564
 
565
565
  exports.Select = Select;
566
566
  exports.selectTriggerVariants = selectTriggerVariants;
567
- //# sourceMappingURL=chunk-DAPZPT5N.cjs.map
568
- //# sourceMappingURL=chunk-DAPZPT5N.cjs.map
567
+ //# sourceMappingURL=chunk-OJEXXH5D.cjs.map
568
+ //# sourceMappingURL=chunk-OJEXXH5D.cjs.map