@mieweb/ui 0.7.1-dev.8 → 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 (378) 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-J7Z7467B.js → chunk-34LGPMO4.js} +3 -3
  26. package/dist/{chunk-J7Z7467B.js.map → chunk-34LGPMO4.js.map} +1 -1
  27. package/dist/{chunk-Q2EWNXIB.cjs → chunk-3SZQRMHM.cjs} +9 -9
  28. package/dist/{chunk-Q2EWNXIB.cjs.map → chunk-3SZQRMHM.cjs.map} +1 -1
  29. package/dist/{chunk-NIEIRA5A.cjs → chunk-4AE2L6AO.cjs} +13 -13
  30. package/dist/{chunk-NIEIRA5A.cjs.map → chunk-4AE2L6AO.cjs.map} +1 -1
  31. package/dist/{chunk-XP6HELVG.cjs → chunk-5IDYOJHO.cjs} +13 -13
  32. package/dist/{chunk-XP6HELVG.cjs.map → chunk-5IDYOJHO.cjs.map} +1 -1
  33. package/dist/{chunk-MSRU3XBH.cjs → chunk-5PHGIWDN.cjs} +6 -6
  34. package/dist/{chunk-MSRU3XBH.cjs.map → chunk-5PHGIWDN.cjs.map} +1 -1
  35. package/dist/{chunk-3CJBUAJ4.js → chunk-5U6GETAW.js} +3 -3
  36. package/dist/{chunk-3CJBUAJ4.js.map → chunk-5U6GETAW.js.map} +1 -1
  37. package/dist/{chunk-HEH3QXOQ.js → chunk-5Y5FSR4N.js} +3 -3
  38. package/dist/{chunk-HEH3QXOQ.js.map → chunk-5Y5FSR4N.js.map} +1 -1
  39. package/dist/{chunk-TN33E2VN.cjs → chunk-62TFTZWT.cjs} +12 -12
  40. package/dist/{chunk-TN33E2VN.cjs.map → chunk-62TFTZWT.cjs.map} +1 -1
  41. package/dist/{chunk-MV3MTHWQ.js → chunk-6EWJGRC3.js} +3 -3
  42. package/dist/{chunk-MV3MTHWQ.js.map → chunk-6EWJGRC3.js.map} +1 -1
  43. package/dist/{chunk-7WMSUXOQ.js → chunk-6OCYG6J2.js} +4 -4
  44. package/dist/{chunk-7WMSUXOQ.js.map → chunk-6OCYG6J2.js.map} +1 -1
  45. package/dist/{chunk-JCNPVK74.cjs → chunk-6OQE4ZMG.cjs} +8 -8
  46. package/dist/{chunk-JCNPVK74.cjs.map → chunk-6OQE4ZMG.cjs.map} +1 -1
  47. package/dist/{chunk-KBEKQMVY.cjs → chunk-6QVI6DAO.cjs} +5 -5
  48. package/dist/{chunk-KBEKQMVY.cjs.map → chunk-6QVI6DAO.cjs.map} +1 -1
  49. package/dist/{chunk-5BQE6BEL.js → chunk-6XGESZ4S.js} +3 -3
  50. package/dist/{chunk-5BQE6BEL.js.map → chunk-6XGESZ4S.js.map} +1 -1
  51. package/dist/{chunk-CVC4NWFA.cjs → chunk-7AMOKHTW.cjs} +4 -4
  52. package/dist/{chunk-CVC4NWFA.cjs.map → chunk-7AMOKHTW.cjs.map} +1 -1
  53. package/dist/{chunk-44CK4CT2.cjs → chunk-7EB7665B.cjs} +13 -13
  54. package/dist/{chunk-44CK4CT2.cjs.map → chunk-7EB7665B.cjs.map} +1 -1
  55. package/dist/{chunk-F3PPRNFI.js → chunk-7OIUA7PW.js} +14 -14
  56. package/dist/{chunk-F3PPRNFI.js.map → chunk-7OIUA7PW.js.map} +1 -1
  57. package/dist/{chunk-JLBT76WH.js → chunk-7V6SUOBV.js} +3 -3
  58. package/dist/{chunk-JLBT76WH.js.map → chunk-7V6SUOBV.js.map} +1 -1
  59. package/dist/{chunk-BB4WQ4LV.cjs → chunk-ABAOZASX.cjs} +8 -8
  60. package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-ABAOZASX.cjs.map} +1 -1
  61. package/dist/{chunk-6LFG4JFF.js → chunk-AFGADE3B.js} +3 -3
  62. package/dist/{chunk-6LFG4JFF.js.map → chunk-AFGADE3B.js.map} +1 -1
  63. package/dist/{chunk-T3C4RNJ4.js → chunk-BJKAVWED.js} +3 -3
  64. package/dist/{chunk-T3C4RNJ4.js.map → chunk-BJKAVWED.js.map} +1 -1
  65. package/dist/{chunk-43GBCUSQ.js → chunk-BS5NOKZD.js} +3 -3
  66. package/dist/{chunk-43GBCUSQ.js.map → chunk-BS5NOKZD.js.map} +1 -1
  67. package/dist/{chunk-C2544GKZ.js → chunk-BX5ZODPF.js} +4 -4
  68. package/dist/{chunk-C2544GKZ.js.map → chunk-BX5ZODPF.js.map} +1 -1
  69. package/dist/{chunk-VPNURIAY.cjs → chunk-C2NNNOSU.cjs} +8 -8
  70. package/dist/{chunk-VPNURIAY.cjs.map → chunk-C2NNNOSU.cjs.map} +1 -1
  71. package/dist/{chunk-IYIYL2SQ.js → chunk-CEQJGUAS.js} +3 -3
  72. package/dist/{chunk-IYIYL2SQ.js.map → chunk-CEQJGUAS.js.map} +1 -1
  73. package/dist/{chunk-6ZYE6JUK.cjs → chunk-CKRRJO7T.cjs} +11 -11
  74. package/dist/{chunk-6ZYE6JUK.cjs.map → chunk-CKRRJO7T.cjs.map} +1 -1
  75. package/dist/{chunk-ZHBANUBI.cjs → chunk-CPUDOVWH.cjs} +21 -21
  76. package/dist/{chunk-ZHBANUBI.cjs.map → chunk-CPUDOVWH.cjs.map} +1 -1
  77. package/dist/{chunk-WO5CAOAN.js → chunk-DCBMTFLE.js} +3 -3
  78. package/dist/{chunk-WO5CAOAN.js.map → chunk-DCBMTFLE.js.map} +1 -1
  79. package/dist/{chunk-YZT62IMX.js → chunk-DKICBJTM.js} +4 -4
  80. package/dist/{chunk-YZT62IMX.js.map → chunk-DKICBJTM.js.map} +1 -1
  81. package/dist/{chunk-MUYTGWGE.js → chunk-DVOQ3JNO.js} +3 -3
  82. package/dist/{chunk-MUYTGWGE.js.map → chunk-DVOQ3JNO.js.map} +1 -1
  83. package/dist/{chunk-EL2RSQTJ.cjs → chunk-EFEKAPS2.cjs} +4 -4
  84. package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-EFEKAPS2.cjs.map} +1 -1
  85. package/dist/{chunk-PVUDXJAI.js → chunk-EJPV3QY3.js} +3 -3
  86. package/dist/{chunk-PVUDXJAI.js.map → chunk-EJPV3QY3.js.map} +1 -1
  87. package/dist/{chunk-WGPMTW36.cjs → chunk-EPQPUFS6.cjs} +7 -7
  88. package/dist/{chunk-WGPMTW36.cjs.map → chunk-EPQPUFS6.cjs.map} +1 -1
  89. package/dist/{chunk-KL2S36FM.js → chunk-ET5JGGVL.js} +3 -3
  90. package/dist/{chunk-KL2S36FM.js.map → chunk-ET5JGGVL.js.map} +1 -1
  91. package/dist/{chunk-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
  92. package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
  93. package/dist/{chunk-KQAXXJ4G.cjs → chunk-FF235PKY.cjs} +7 -7
  94. package/dist/{chunk-KQAXXJ4G.cjs.map → chunk-FF235PKY.cjs.map} +1 -1
  95. package/dist/{chunk-FZJBFJJR.js → chunk-FJ7YPVKV.js} +3 -3
  96. package/dist/{chunk-FZJBFJJR.js.map → chunk-FJ7YPVKV.js.map} +1 -1
  97. package/dist/{chunk-ZAIEQWRA.js → chunk-G45PAVQI.js} +4 -4
  98. package/dist/{chunk-ZAIEQWRA.js.map → chunk-G45PAVQI.js.map} +1 -1
  99. package/dist/{chunk-ZGSC2CB2.js → chunk-GTHNWP4P.js} +36 -5
  100. package/dist/chunk-GTHNWP4P.js.map +1 -0
  101. package/dist/{chunk-6AHYYWVB.js → chunk-H3HF36ZL.js} +5 -5
  102. package/dist/{chunk-6AHYYWVB.js.map → chunk-H3HF36ZL.js.map} +1 -1
  103. package/dist/{chunk-IWDQPSJN.cjs → chunk-HEV52I7A.cjs} +25 -25
  104. package/dist/{chunk-IWDQPSJN.cjs.map → chunk-HEV52I7A.cjs.map} +1 -1
  105. package/dist/{chunk-UOOH356R.cjs → chunk-HIAUNNOW.cjs} +4 -4
  106. package/dist/{chunk-UOOH356R.cjs.map → chunk-HIAUNNOW.cjs.map} +1 -1
  107. package/dist/{chunk-BIT27PPD.js → chunk-HS25RPDW.js} +3 -3
  108. package/dist/{chunk-BIT27PPD.js.map → chunk-HS25RPDW.js.map} +1 -1
  109. package/dist/{chunk-BWYYA3LQ.cjs → chunk-I2ECTLON.cjs} +5 -5
  110. package/dist/{chunk-BWYYA3LQ.cjs.map → chunk-I2ECTLON.cjs.map} +1 -1
  111. package/dist/{chunk-BT3ZQJGT.cjs → chunk-IUDY6S7I.cjs} +6 -6
  112. package/dist/{chunk-BT3ZQJGT.cjs.map → chunk-IUDY6S7I.cjs.map} +1 -1
  113. package/dist/{chunk-FJH7P5WG.js → chunk-IVDIT3TJ.js} +6 -6
  114. package/dist/{chunk-FJH7P5WG.js.map → chunk-IVDIT3TJ.js.map} +1 -1
  115. package/dist/{chunk-UM6NA7HL.js → chunk-IXWRD4AP.js} +3 -3
  116. package/dist/{chunk-UM6NA7HL.js.map → chunk-IXWRD4AP.js.map} +1 -1
  117. package/dist/{chunk-MKWGKASO.js → chunk-JJNCQMR5.js} +3 -3
  118. package/dist/{chunk-MKWGKASO.js.map → chunk-JJNCQMR5.js.map} +1 -1
  119. package/dist/{chunk-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
  120. package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.cjs.map} +1 -1
  121. package/dist/{chunk-NVHAQOHH.cjs → chunk-JY4U2QWO.cjs} +7 -7
  122. package/dist/{chunk-NVHAQOHH.cjs.map → chunk-JY4U2QWO.cjs.map} +1 -1
  123. package/dist/{chunk-XCLQZ4FV.js → chunk-KFLDXJEE.js} +3 -3
  124. package/dist/{chunk-XCLQZ4FV.js.map → chunk-KFLDXJEE.js.map} +1 -1
  125. package/dist/{chunk-IHTRKWBG.js → chunk-KQGGKE36.js} +4 -4
  126. package/dist/{chunk-IHTRKWBG.js.map → chunk-KQGGKE36.js.map} +1 -1
  127. package/dist/{chunk-PJAQDAMZ.cjs → chunk-KZ7QKUJS.cjs} +4 -4
  128. package/dist/{chunk-PJAQDAMZ.cjs.map → chunk-KZ7QKUJS.cjs.map} +1 -1
  129. package/dist/{chunk-A2QVQF54.cjs → chunk-M26KJKZG.cjs} +4 -4
  130. package/dist/{chunk-A2QVQF54.cjs.map → chunk-M26KJKZG.cjs.map} +1 -1
  131. package/dist/{chunk-JHYFHEHS.js → chunk-MHD5HZ4X.js} +4 -4
  132. package/dist/{chunk-JHYFHEHS.js.map → chunk-MHD5HZ4X.js.map} +1 -1
  133. package/dist/{chunk-UFYXU7KV.js → chunk-MWPPOX6F.js} +4 -4
  134. package/dist/{chunk-UFYXU7KV.js.map → chunk-MWPPOX6F.js.map} +1 -1
  135. package/dist/{chunk-KJ5BSGEO.cjs → chunk-NGPEXCC7.cjs} +11 -11
  136. package/dist/{chunk-KJ5BSGEO.cjs.map → chunk-NGPEXCC7.cjs.map} +1 -1
  137. package/dist/{chunk-T3RWXOCM.js → chunk-NU6QKULE.js} +3 -3
  138. package/dist/{chunk-T3RWXOCM.js.map → chunk-NU6QKULE.js.map} +1 -1
  139. package/dist/{chunk-BYUV3IZV.cjs → chunk-OGPJ3LRF.cjs} +4 -4
  140. package/dist/{chunk-BYUV3IZV.cjs.map → chunk-OGPJ3LRF.cjs.map} +1 -1
  141. package/dist/{chunk-DAPZPT5N.cjs → chunk-OJEXXH5D.cjs} +11 -11
  142. package/dist/{chunk-DAPZPT5N.cjs.map → chunk-OJEXXH5D.cjs.map} +1 -1
  143. package/dist/{chunk-XL7TTKHP.js → chunk-OLFTGCGD.js} +7 -7
  144. package/dist/{chunk-XL7TTKHP.js.map → chunk-OLFTGCGD.js.map} +1 -1
  145. package/dist/{chunk-BX6BTDTR.js → chunk-OQWZYKJM.js} +3 -3
  146. package/dist/{chunk-BX6BTDTR.js.map → chunk-OQWZYKJM.js.map} +1 -1
  147. package/dist/{chunk-JBB25LFB.js → chunk-OTQ72WX3.js} +3 -3
  148. package/dist/{chunk-JBB25LFB.js.map → chunk-OTQ72WX3.js.map} +1 -1
  149. package/dist/{chunk-AFKKJEV5.cjs → chunk-OZOSWBSI.cjs} +4 -4
  150. package/dist/{chunk-AFKKJEV5.cjs.map → chunk-OZOSWBSI.cjs.map} +1 -1
  151. package/dist/{chunk-KJPOFUF5.cjs → chunk-P2VTQ5AR.cjs} +10 -10
  152. package/dist/{chunk-KJPOFUF5.cjs.map → chunk-P2VTQ5AR.cjs.map} +1 -1
  153. package/dist/{chunk-QASIWBXU.cjs → chunk-P7UMS4E6.cjs} +7 -7
  154. package/dist/{chunk-QASIWBXU.cjs.map → chunk-P7UMS4E6.cjs.map} +1 -1
  155. package/dist/{chunk-QUUFKGDF.cjs → chunk-PGETZ2FP.cjs} +15 -15
  156. package/dist/{chunk-QUUFKGDF.cjs.map → chunk-PGETZ2FP.cjs.map} +1 -1
  157. package/dist/{chunk-5M2YSPJH.cjs → chunk-PNJAFZDC.cjs} +59 -59
  158. package/dist/{chunk-5M2YSPJH.cjs.map → chunk-PNJAFZDC.cjs.map} +1 -1
  159. package/dist/{chunk-KOCTIB6U.js → chunk-PS5INHGC.js} +3 -3
  160. package/dist/{chunk-KOCTIB6U.js.map → chunk-PS5INHGC.js.map} +1 -1
  161. package/dist/{chunk-Y2S6QMKU.js → chunk-PTZB2GKL.js} +3 -3
  162. package/dist/{chunk-Y2S6QMKU.js.map → chunk-PTZB2GKL.js.map} +1 -1
  163. package/dist/{chunk-NQME7MCK.js → chunk-QKKYMNR2.js} +4 -4
  164. package/dist/{chunk-NQME7MCK.js.map → chunk-QKKYMNR2.js.map} +1 -1
  165. package/dist/{chunk-GOAW2UCP.js → chunk-QNUPTRW7.js} +9 -9
  166. package/dist/{chunk-GOAW2UCP.js.map → chunk-QNUPTRW7.js.map} +1 -1
  167. package/dist/{chunk-EZKRAW2X.js → chunk-QUUBTNMH.js} +3 -3
  168. package/dist/{chunk-EZKRAW2X.js.map → chunk-QUUBTNMH.js.map} +1 -1
  169. package/dist/{chunk-T42BCIUA.js → chunk-REPZI2YO.js} +3 -3
  170. package/dist/{chunk-T42BCIUA.js.map → chunk-REPZI2YO.js.map} +1 -1
  171. package/dist/{chunk-CKD554XR.cjs → chunk-RUEEDOE3.cjs} +5 -5
  172. package/dist/{chunk-CKD554XR.cjs.map → chunk-RUEEDOE3.cjs.map} +1 -1
  173. package/dist/{chunk-RHYIFIT5.js → chunk-RZFSJD67.js} +3 -3
  174. package/dist/{chunk-RHYIFIT5.js.map → chunk-RZFSJD67.js.map} +1 -1
  175. package/dist/{chunk-DFCZPVG4.cjs → chunk-S3MKIDYG.cjs} +8 -8
  176. package/dist/{chunk-DFCZPVG4.cjs.map → chunk-S3MKIDYG.cjs.map} +1 -1
  177. package/dist/chunk-S5RVSXDV.cjs +45 -0
  178. package/dist/chunk-S5RVSXDV.cjs.map +1 -0
  179. package/dist/{chunk-4LVPQ44A.js → chunk-SAJSA4TS.js} +3 -3
  180. package/dist/{chunk-4LVPQ44A.js.map → chunk-SAJSA4TS.js.map} +1 -1
  181. package/dist/{chunk-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
  182. package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
  183. package/dist/{chunk-5MAGWW5X.cjs → chunk-STCRP652.cjs} +11 -11
  184. package/dist/{chunk-5MAGWW5X.cjs.map → chunk-STCRP652.cjs.map} +1 -1
  185. package/dist/{chunk-3MGHTTZW.js → chunk-SVSHA7XV.js} +3 -3
  186. package/dist/{chunk-3MGHTTZW.js.map → chunk-SVSHA7XV.js.map} +1 -1
  187. package/dist/chunk-TQONQSJO.js +42 -0
  188. package/dist/chunk-TQONQSJO.js.map +1 -0
  189. package/dist/{chunk-V25Z5GR6.cjs → chunk-TU36DBH2.cjs} +9 -9
  190. package/dist/{chunk-V25Z5GR6.cjs.map → chunk-TU36DBH2.cjs.map} +1 -1
  191. package/dist/{chunk-FQ3UCZUX.cjs → chunk-U3JU6BI5.cjs} +7 -7
  192. package/dist/{chunk-FQ3UCZUX.cjs.map → chunk-U3JU6BI5.cjs.map} +1 -1
  193. package/dist/{chunk-VCO2IZOG.js → chunk-UA7E7PDS.js} +3 -3
  194. package/dist/{chunk-VCO2IZOG.js.map → chunk-UA7E7PDS.js.map} +1 -1
  195. package/dist/{chunk-I2W24RHW.js → chunk-VE6OUO7X.js} +3 -3
  196. package/dist/{chunk-I2W24RHW.js.map → chunk-VE6OUO7X.js.map} +1 -1
  197. package/dist/{chunk-STPK44AU.js → chunk-VNWJTCBQ.js} +3 -3
  198. package/dist/{chunk-STPK44AU.js.map → chunk-VNWJTCBQ.js.map} +1 -1
  199. package/dist/{chunk-ZNZZCB2M.cjs → chunk-VPIYTQCV.cjs} +9 -9
  200. package/dist/{chunk-ZNZZCB2M.cjs.map → chunk-VPIYTQCV.cjs.map} +1 -1
  201. package/dist/{chunk-DLNJLCNO.cjs → chunk-VTKXM7IE.cjs} +4 -4
  202. package/dist/{chunk-DLNJLCNO.cjs.map → chunk-VTKXM7IE.cjs.map} +1 -1
  203. package/dist/{chunk-EUUQVDXX.cjs → chunk-W4Q4UEXA.cjs} +14 -14
  204. package/dist/{chunk-EUUQVDXX.cjs.map → chunk-W4Q4UEXA.cjs.map} +1 -1
  205. package/dist/{chunk-ZVSW2KS6.js → chunk-WRYZ2752.js} +3 -3
  206. package/dist/{chunk-ZVSW2KS6.js.map → chunk-WRYZ2752.js.map} +1 -1
  207. package/dist/{chunk-U3ABLVYH.cjs → chunk-WUNWHOLA.cjs} +6 -6
  208. package/dist/{chunk-U3ABLVYH.cjs.map → chunk-WUNWHOLA.cjs.map} +1 -1
  209. package/dist/{chunk-RH43XBNV.cjs → chunk-WWJIW2IH.cjs} +4 -4
  210. package/dist/{chunk-RH43XBNV.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
  211. package/dist/{chunk-6NXQSQ3A.cjs → chunk-X4LBUPJO.cjs} +10 -10
  212. package/dist/{chunk-6NXQSQ3A.cjs.map → chunk-X4LBUPJO.cjs.map} +1 -1
  213. package/dist/{chunk-O4PGFGUW.cjs → chunk-X732DPW4.cjs} +122 -122
  214. package/dist/{chunk-O4PGFGUW.cjs.map → chunk-X732DPW4.cjs.map} +1 -1
  215. package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
  216. package/dist/chunk-XB54G7WS.cjs.map +1 -0
  217. package/dist/{chunk-MAMY5HTT.cjs → chunk-XCVBCY7L.cjs} +20 -20
  218. package/dist/{chunk-MAMY5HTT.cjs.map → chunk-XCVBCY7L.cjs.map} +1 -1
  219. package/dist/{chunk-BLPCYP4D.cjs → chunk-XD6GRTH2.cjs} +29 -29
  220. package/dist/{chunk-BLPCYP4D.cjs.map → chunk-XD6GRTH2.cjs.map} +1 -1
  221. package/dist/{chunk-IUFDGB5O.js → chunk-XMCIXHGH.js} +3 -3
  222. package/dist/{chunk-IUFDGB5O.js.map → chunk-XMCIXHGH.js.map} +1 -1
  223. package/dist/{chunk-KAKH2UZA.js → chunk-XO3WLK65.js} +3 -3
  224. package/dist/{chunk-KAKH2UZA.js.map → chunk-XO3WLK65.js.map} +1 -1
  225. package/dist/{chunk-DUPR6FEL.js → chunk-XPNKDFRL.js} +3 -3
  226. package/dist/{chunk-DUPR6FEL.js.map → chunk-XPNKDFRL.js.map} +1 -1
  227. package/dist/{chunk-DEZ7XSTG.cjs → chunk-XXVUHLQN.cjs} +7 -7
  228. package/dist/{chunk-DEZ7XSTG.cjs.map → chunk-XXVUHLQN.cjs.map} +1 -1
  229. package/dist/{chunk-MZPF2QGM.cjs → chunk-Y5F2OASC.cjs} +13 -13
  230. package/dist/{chunk-MZPF2QGM.cjs.map → chunk-Y5F2OASC.cjs.map} +1 -1
  231. package/dist/{chunk-3GGET5LK.cjs → chunk-YGA35Z2P.cjs} +7 -7
  232. package/dist/{chunk-3GGET5LK.cjs.map → chunk-YGA35Z2P.cjs.map} +1 -1
  233. package/dist/{chunk-GOKC4CCZ.cjs → chunk-YMHOF6WA.cjs} +8 -8
  234. package/dist/{chunk-GOKC4CCZ.cjs.map → chunk-YMHOF6WA.cjs.map} +1 -1
  235. package/dist/{chunk-OXYFTCRW.cjs → chunk-YP5T6NZD.cjs} +4 -4
  236. package/dist/{chunk-OXYFTCRW.cjs.map → chunk-YP5T6NZD.cjs.map} +1 -1
  237. package/dist/{chunk-OX2RIVN7.js → chunk-YTLTI5Q2.js} +4 -4
  238. package/dist/{chunk-OX2RIVN7.js.map → chunk-YTLTI5Q2.js.map} +1 -1
  239. package/dist/{chunk-372IIHUA.cjs → chunk-YXHX2DAK.cjs} +53 -53
  240. package/dist/{chunk-372IIHUA.cjs.map → chunk-YXHX2DAK.cjs.map} +1 -1
  241. package/dist/{chunk-ST2RE5UB.cjs → chunk-Z5KFXHDP.cjs} +6 -6
  242. package/dist/{chunk-ST2RE5UB.cjs.map → chunk-Z5KFXHDP.cjs.map} +1 -1
  243. package/dist/{chunk-4Z6ZZKIY.js → chunk-ZIUADGAR.js} +3 -3
  244. package/dist/{chunk-4Z6ZZKIY.js.map → chunk-ZIUADGAR.js.map} +1 -1
  245. package/dist/{chunk-LOTMAKUG.cjs → chunk-ZZJ4ZVYR.cjs} +11 -11
  246. package/dist/{chunk-LOTMAKUG.cjs.map → chunk-ZZJ4ZVYR.cjs.map} +1 -1
  247. package/dist/components/Alert/index.cjs +6 -6
  248. package/dist/components/Alert/index.js +2 -2
  249. package/dist/components/AlertDialog/index.cjs +5 -5
  250. package/dist/components/AlertDialog/index.js +4 -4
  251. package/dist/components/AudioPlayer/index.cjs +7 -7
  252. package/dist/components/AudioPlayer/index.js +2 -2
  253. package/dist/components/AudioRecorder/index.cjs +7 -7
  254. package/dist/components/AudioRecorder/index.js +2 -2
  255. package/dist/components/Autocomplete/index.cjs +4 -4
  256. package/dist/components/Autocomplete/index.js +3 -3
  257. package/dist/components/Avatar/index.cjs +6 -6
  258. package/dist/components/Avatar/index.js +2 -2
  259. package/dist/components/Badge/index.cjs +4 -4
  260. package/dist/components/Badge/index.js +2 -2
  261. package/dist/components/Breadcrumb/index.cjs +4 -4
  262. package/dist/components/Breadcrumb/index.js +2 -2
  263. package/dist/components/Button/index.cjs +4 -4
  264. package/dist/components/Button/index.js +2 -2
  265. package/dist/components/Card/index.cjs +16 -16
  266. package/dist/components/Card/index.js +2 -2
  267. package/dist/components/Checkbox/index.cjs +5 -5
  268. package/dist/components/Checkbox/index.js +2 -2
  269. package/dist/components/CollabStatus/index.cjs +5 -5
  270. package/dist/components/CollabStatus/index.js +2 -2
  271. package/dist/components/Collapsible/index.cjs +5 -5
  272. package/dist/components/Collapsible/index.js +2 -2
  273. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  274. package/dist/components/CountryCodeDropdown/index.js +2 -2
  275. package/dist/components/DateInput/index.cjs +4 -4
  276. package/dist/components/DateInput/index.js +3 -3
  277. package/dist/components/Dropdown/index.cjs +9 -9
  278. package/dist/components/Dropdown/index.js +3 -3
  279. package/dist/components/FloatingWindow/index.cjs +5 -5
  280. package/dist/components/FloatingWindow/index.js +3 -3
  281. package/dist/components/Input/index.cjs +4 -4
  282. package/dist/components/Input/index.js +2 -2
  283. package/dist/components/Label/index.cjs +4 -4
  284. package/dist/components/Label/index.js +2 -2
  285. package/dist/components/Markdown/index.cjs +17 -17
  286. package/dist/components/Markdown/index.js +8 -8
  287. package/dist/components/MediaEditor/index.cjs +14 -14
  288. package/dist/components/MediaEditor/index.js +9 -9
  289. package/dist/components/MediaPlayer/index.cjs +6 -6
  290. package/dist/components/MediaPlayer/index.js +3 -3
  291. package/dist/components/Modal/index.cjs +10 -10
  292. package/dist/components/Modal/index.js +2 -2
  293. package/dist/components/Pagination/index.cjs +5 -5
  294. package/dist/components/Pagination/index.js +2 -2
  295. package/dist/components/PhoneInput/index.cjs +5 -5
  296. package/dist/components/PhoneInput/index.js +3 -3
  297. package/dist/components/Progress/index.cjs +7 -7
  298. package/dist/components/Progress/index.js +2 -2
  299. package/dist/components/QuickAction/index.cjs +7 -7
  300. package/dist/components/QuickAction/index.js +2 -2
  301. package/dist/components/Radio/index.cjs +5 -5
  302. package/dist/components/Radio/index.js +2 -2
  303. package/dist/components/RecordButton/index.cjs +5 -5
  304. package/dist/components/RecordButton/index.js +2 -2
  305. package/dist/components/RichTextEditor/index.cjs +9 -9
  306. package/dist/components/RichTextEditor/index.js +6 -6
  307. package/dist/components/SchedulePicker/index.cjs +11 -11
  308. package/dist/components/SchedulePicker/index.js +2 -2
  309. package/dist/components/ScrollArea/index.cjs +4 -4
  310. package/dist/components/ScrollArea/index.js +2 -2
  311. package/dist/components/Select/index.cjs +4 -4
  312. package/dist/components/Select/index.js +2 -2
  313. package/dist/components/Separator/index.cjs +4 -4
  314. package/dist/components/Separator/index.js +2 -2
  315. package/dist/components/Sheet/index.cjs +11 -11
  316. package/dist/components/Sheet/index.d.cts +1 -1
  317. package/dist/components/Sheet/index.d.ts +1 -1
  318. package/dist/components/Sheet/index.js +2 -2
  319. package/dist/components/Skeleton/index.cjs +7 -7
  320. package/dist/components/Skeleton/index.js +2 -2
  321. package/dist/components/Slider/index.cjs +6 -6
  322. package/dist/components/Slider/index.js +2 -2
  323. package/dist/components/Spinner/index.cjs +6 -6
  324. package/dist/components/Spinner/index.js +2 -2
  325. package/dist/components/SuperChat/index.cjs +45 -45
  326. package/dist/components/SuperChat/index.js +8 -8
  327. package/dist/components/SuperChat/plugins/index.cjs +9 -9
  328. package/dist/components/SuperChat/plugins/index.js +3 -3
  329. package/dist/components/Switch/index.cjs +5 -5
  330. package/dist/components/Switch/index.js +2 -2
  331. package/dist/components/Table/index.cjs +10 -10
  332. package/dist/components/Table/index.js +2 -2
  333. package/dist/components/Tabs/index.cjs +8 -8
  334. package/dist/components/Tabs/index.js +2 -2
  335. package/dist/components/Text/index.cjs +5 -5
  336. package/dist/components/Text/index.d.cts +1 -1
  337. package/dist/components/Text/index.d.ts +1 -1
  338. package/dist/components/Text/index.js +2 -2
  339. package/dist/components/Textarea/index.cjs +4 -4
  340. package/dist/components/Textarea/index.js +2 -2
  341. package/dist/components/ThemeProvider/index.cjs +9 -9
  342. package/dist/components/ThemeProvider/index.js +3 -3
  343. package/dist/components/Toggle/index.cjs +4 -4
  344. package/dist/components/Toggle/index.js +2 -2
  345. package/dist/components/Tooltip/index.cjs +3 -3
  346. package/dist/components/Tooltip/index.js +2 -2
  347. package/dist/datavis.cjs +7 -7
  348. package/dist/datavis.js +3 -3
  349. package/dist/esheet.cjs +16 -16
  350. package/dist/esheet.js +13 -13
  351. package/dist/hooks/index.cjs +23 -11
  352. package/dist/hooks/index.d.cts +29 -1
  353. package/dist/hooks/index.d.ts +29 -1
  354. package/dist/hooks/index.js +1 -1
  355. package/dist/index.cjs +1693 -1677
  356. package/dist/index.d.cts +3 -3
  357. package/dist/index.d.ts +3 -3
  358. package/dist/index.js +87 -87
  359. package/dist/styles.css +1 -1
  360. package/dist/utils/index.cjs +6 -2
  361. package/dist/utils/index.d.cts +6 -1
  362. package/dist/utils/index.d.ts +6 -1
  363. package/dist/utils/index.js +1 -1
  364. package/package.json +3 -1
  365. package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
  366. package/dist/CsvBlock-D6PWAJ5X.js +0 -6
  367. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
  368. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
  369. package/dist/MermaidBlock-7NK3AVK2.js +0 -6
  370. package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
  371. package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
  372. package/dist/SurveyBlock-NNDGXGG4.js +0 -6
  373. package/dist/chunk-4GXECTPS.cjs.map +0 -1
  374. package/dist/chunk-F3SOEIN2.js +0 -11
  375. package/dist/chunk-F3SOEIN2.js.map +0 -1
  376. package/dist/chunk-OR5DRJCW.cjs +0 -13
  377. package/dist/chunk-OR5DRJCW.cjs.map +0 -1
  378. package/dist/chunk-ZGSC2CB2.js.map +0 -1
@@ -4,7 +4,7 @@ require('../chunk-AT732HC6.cjs');
4
4
  var chunkL7YQBSEL_cjs = require('../chunk-L7YQBSEL.cjs');
5
5
  var chunkC7RVKV25_cjs = require('../chunk-C7RVKV25.cjs');
6
6
  var chunkCW75IKA6_cjs = require('../chunk-CW75IKA6.cjs');
7
- var chunkOR5DRJCW_cjs = require('../chunk-OR5DRJCW.cjs');
7
+ var chunkS5RVSXDV_cjs = require('../chunk-S5RVSXDV.cjs');
8
8
  var chunkSCV7C55E_cjs = require('../chunk-SCV7C55E.cjs');
9
9
 
10
10
 
@@ -75,7 +75,11 @@ Object.defineProperty(exports, "parseDateValue", {
75
75
  });
76
76
  Object.defineProperty(exports, "cn", {
77
77
  enumerable: true,
78
- get: function () { return chunkOR5DRJCW_cjs.cn; }
78
+ get: function () { return chunkS5RVSXDV_cjs.cn; }
79
+ });
80
+ Object.defineProperty(exports, "miewebUITwMergeConflicts", {
81
+ enumerable: true,
82
+ get: function () { return chunkS5RVSXDV_cjs.miewebUITwMergeConflicts; }
79
83
  });
80
84
  Object.defineProperty(exports, "isStorybookDocsMode", {
81
85
  enumerable: true,
@@ -1,10 +1,15 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  export { i as isHtmlEmpty, s as stripHtmlTags } from '../html-MdxqSzjD.cjs';
3
3
 
4
+ declare const miewebUITwMergeConflicts: Record<string, string[]>;
4
5
  /**
5
6
  * Utility function to merge Tailwind CSS classes with proper precedence.
6
7
  * Combines clsx for conditional classes with tailwind-merge for deduplication.
7
8
  *
9
+ * Physical and logical directional utilities (e.g. `ml-*` vs `ms-*`) are
10
+ * treated as conflicting, so consumer overrides written with physical classes
11
+ * still replace component-internal logical classes (RTL support).
12
+ *
8
13
  * @example
9
14
  * ```tsx
10
15
  * cn('px-4 py-2', isActive && 'bg-primary-500', className)
@@ -101,4 +106,4 @@ declare function displayFormatToDateString(value: string): string;
101
106
  */
102
107
  declare function isStorybookDocsMode(): boolean;
103
108
 
104
- export { calculateAge, cn, dateToDisplayFormat, displayFormatToDateString, formatDateValue, formatPhoneNumber, isDateEmpty, isDateInFuture, isDateInPast, isPhoneNumberEmpty, isStorybookDocsMode, isValidDate, isValidDrivingAge, isValidPhoneNumber, parseDateValue, unformatPhoneNumber };
109
+ export { calculateAge, cn, dateToDisplayFormat, displayFormatToDateString, formatDateValue, formatPhoneNumber, isDateEmpty, isDateInFuture, isDateInPast, isPhoneNumberEmpty, isStorybookDocsMode, isValidDate, isValidDrivingAge, isValidPhoneNumber, miewebUITwMergeConflicts, parseDateValue, unformatPhoneNumber };
@@ -1,10 +1,15 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  export { i as isHtmlEmpty, s as stripHtmlTags } from '../html-MdxqSzjD.js';
3
3
 
4
+ declare const miewebUITwMergeConflicts: Record<string, string[]>;
4
5
  /**
5
6
  * Utility function to merge Tailwind CSS classes with proper precedence.
6
7
  * Combines clsx for conditional classes with tailwind-merge for deduplication.
7
8
  *
9
+ * Physical and logical directional utilities (e.g. `ml-*` vs `ms-*`) are
10
+ * treated as conflicting, so consumer overrides written with physical classes
11
+ * still replace component-internal logical classes (RTL support).
12
+ *
8
13
  * @example
9
14
  * ```tsx
10
15
  * cn('px-4 py-2', isActive && 'bg-primary-500', className)
@@ -101,4 +106,4 @@ declare function displayFormatToDateString(value: string): string;
101
106
  */
102
107
  declare function isStorybookDocsMode(): boolean;
103
108
 
104
- export { calculateAge, cn, dateToDisplayFormat, displayFormatToDateString, formatDateValue, formatPhoneNumber, isDateEmpty, isDateInFuture, isDateInPast, isPhoneNumberEmpty, isStorybookDocsMode, isValidDate, isValidDrivingAge, isValidPhoneNumber, parseDateValue, unformatPhoneNumber };
109
+ export { calculateAge, cn, dateToDisplayFormat, displayFormatToDateString, formatDateValue, formatPhoneNumber, isDateEmpty, isDateInFuture, isDateInPast, isPhoneNumberEmpty, isStorybookDocsMode, isValidDate, isValidDrivingAge, isValidPhoneNumber, miewebUITwMergeConflicts, parseDateValue, unformatPhoneNumber };
@@ -2,7 +2,7 @@ import '../chunk-7XUN3OQT.js';
2
2
  export { formatPhoneNumber, isPhoneNumberEmpty, isValidPhoneNumber, unformatPhoneNumber } from '../chunk-ZVPJ2MH6.js';
3
3
  export { isHtmlEmpty, stripHtmlTags } from '../chunk-ERLPVXOV.js';
4
4
  export { calculateAge, dateToDisplayFormat, displayFormatToDateString, formatDateValue, isDateEmpty, isDateInFuture, isDateInPast, isValidDate, isValidDrivingAge, parseDateValue } from '../chunk-RC2YMOMS.js';
5
- export { cn } from '../chunk-F3SOEIN2.js';
5
+ export { cn, miewebUITwMergeConflicts } from '../chunk-TQONQSJO.js';
6
6
  export { isStorybookDocsMode } from '../chunk-VSQF22GL.js';
7
7
  //# sourceMappingURL=index.js.map
8
8
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mieweb/ui",
3
- "version": "0.7.1-dev.8",
3
+ "version": "0.7.1-dev.9",
4
4
  "description": "A themeable, accessible React component library built with Tailwind CSS",
5
5
  "author": "Medical Informatics Engineering, Inc.",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -216,6 +216,8 @@
216
216
  "typecheck": "tsc --noEmit",
217
217
  "lint": "eslint \"src/**/*.{ts,tsx}\"",
218
218
  "lint:fix": "eslint \"src/**/*.{ts,tsx}\" --fix",
219
+ "rtl:scan": "node scripts/rtl-scan.mjs",
220
+ "rtl:scan:update": "node scripts/rtl-scan.mjs --update",
219
221
  "format": "prettier --check \"src/**/*.{ts,tsx,css}\"",
220
222
  "format:fix": "prettier --write \"src/**/*.{ts,tsx,css}\"",
221
223
  "test": "vitest run",
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkV25Z5GR6_cjs = require('./chunk-V25Z5GR6.cjs');
4
- require('./chunk-CKD554XR.cjs');
5
- require('./chunk-A2QVQF54.cjs');
6
- require('./chunk-OR5DRJCW.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, "CsvBlock", {
11
- enumerable: true,
12
- get: function () { return chunkV25Z5GR6_cjs.CsvBlock; }
13
- });
14
- //# sourceMappingURL=CsvBlock-2A5VEDD3.cjs.map
15
- //# sourceMappingURL=CsvBlock-2A5VEDD3.cjs.map
@@ -1,6 +0,0 @@
1
- export { CsvBlock } from './chunk-7WMSUXOQ.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=CsvBlock-D6PWAJ5X.js.map
6
- //# sourceMappingURL=CsvBlock-D6PWAJ5X.js.map
@@ -1,6 +0,0 @@
1
- export { HtmlPreviewBlock } from './chunk-UFYXU7KV.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=HtmlPreviewBlock-PEHTJ6C3.js.map
6
- //# sourceMappingURL=HtmlPreviewBlock-PEHTJ6C3.js.map
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkBB4WQ4LV_cjs = require('./chunk-BB4WQ4LV.cjs');
4
- require('./chunk-CKD554XR.cjs');
5
- require('./chunk-A2QVQF54.cjs');
6
- require('./chunk-OR5DRJCW.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, "HtmlPreviewBlock", {
11
- enumerable: true,
12
- get: function () { return chunkBB4WQ4LV_cjs.HtmlPreviewBlock; }
13
- });
14
- //# sourceMappingURL=HtmlPreviewBlock-SYXCV5RH.cjs.map
15
- //# sourceMappingURL=HtmlPreviewBlock-SYXCV5RH.cjs.map
@@ -1,6 +0,0 @@
1
- export { MermaidBlock } from './chunk-T3RWXOCM.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=MermaidBlock-7NK3AVK2.js.map
6
- //# sourceMappingURL=MermaidBlock-7NK3AVK2.js.map
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkCVC4NWFA_cjs = require('./chunk-CVC4NWFA.cjs');
4
- require('./chunk-CKD554XR.cjs');
5
- require('./chunk-A2QVQF54.cjs');
6
- require('./chunk-OR5DRJCW.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, "MermaidBlock", {
11
- enumerable: true,
12
- get: function () { return chunkCVC4NWFA_cjs.MermaidBlock; }
13
- });
14
- //# sourceMappingURL=MermaidBlock-AFXNP5NK.cjs.map
15
- //# sourceMappingURL=MermaidBlock-AFXNP5NK.cjs.map
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkKBEKQMVY_cjs = require('./chunk-KBEKQMVY.cjs');
4
- require('./chunk-CKD554XR.cjs');
5
- require('./chunk-A2QVQF54.cjs');
6
- require('./chunk-OR5DRJCW.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, "SurveyBlock", {
11
- enumerable: true,
12
- get: function () { return chunkKBEKQMVY_cjs.SurveyBlock; }
13
- });
14
- //# sourceMappingURL=SurveyBlock-6KRNKFH5.cjs.map
15
- //# sourceMappingURL=SurveyBlock-6KRNKFH5.cjs.map
@@ -1,6 +0,0 @@
1
- export { SurveyBlock } from './chunk-I2W24RHW.js';
2
- import './chunk-RHYIFIT5.js';
3
- import './chunk-ZVSW2KS6.js';
4
- import './chunk-F3SOEIN2.js';
5
- //# sourceMappingURL=SurveyBlock-NNDGXGG4.js.map
6
- //# sourceMappingURL=SurveyBlock-NNDGXGG4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/useKeyboardShortcut.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useScrollSpy.ts"],"names":["useCallback","useEffect","useState","useRef","entries"],"mappings":"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","file":"chunk-4GXECTPS.cjs","sourcesContent":["import { useEffect, useCallback } from 'react';\n\n/**\n * Options for keyboard shortcut hook\n */\nexport interface KeyboardShortcutOptions {\n /** Whether the shortcut is currently enabled (default: true) */\n enabled?: boolean;\n /** Modifier keys required (default: none) */\n modifiers?: {\n ctrl?: boolean;\n shift?: boolean;\n alt?: boolean;\n meta?: boolean;\n };\n /** Whether to prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n /** Whether to stop event propagation (default: false) */\n stopPropagation?: boolean;\n /** Element types to ignore when the shortcut is pressed (default: ['INPUT', 'TEXTAREA', 'SELECT']) */\n ignoreInputs?: boolean;\n}\n\n/**\n * Hook that triggers a callback when a specific keyboard shortcut is pressed.\n * Supports modifier keys (Ctrl, Shift, Alt, Meta) and ignores input fields by default.\n *\n * @param key - The key to listen for (e.g., 'k', 'Enter', 'Escape', '/')\n * @param callback - Function to call when the shortcut is pressed\n * @param options - Configuration options\n *\n * @example\n * ```tsx\n * // Cmd/Ctrl+K to open search\n * useKeyboardShortcut('k', openSearch, { modifiers: { meta: true, ctrl: true } });\n *\n * // Forward slash to focus search (ignoring when typing)\n * useKeyboardShortcut('/', focusSearch);\n *\n * // Escape to close modal\n * useKeyboardShortcut('Escape', closeModal);\n * ```\n */\nexport function useKeyboardShortcut(\n key: string,\n callback: (event: KeyboardEvent) => void,\n options: KeyboardShortcutOptions = {}\n): void {\n const {\n enabled = true,\n modifiers = {},\n preventDefault = true,\n stopPropagation = false,\n ignoreInputs = true,\n } = options;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n // Check if we should ignore input fields\n if (ignoreInputs) {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toUpperCase();\n if (\n tagName === 'INPUT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SELECT' ||\n target.isContentEditable\n ) {\n return;\n }\n }\n\n // Check modifiers\n const { ctrl, shift, alt, meta } = modifiers;\n\n // For Cmd+K style shortcuts, allow either meta (Mac) or ctrl (Windows/Linux)\n const metaOrCtrl = meta || ctrl;\n if (metaOrCtrl) {\n if (!(event.metaKey || event.ctrlKey)) return;\n } else {\n // If no meta/ctrl modifier specified, ensure neither is pressed\n if (event.metaKey || event.ctrlKey) return;\n }\n\n if (shift && !event.shiftKey) return;\n if (alt && !event.altKey) return;\n\n // Check key match (case-insensitive for letters)\n const eventKey =\n event.key.length === 1 ? event.key.toLowerCase() : event.key;\n const targetKey = key.length === 1 ? key.toLowerCase() : key;\n if (eventKey !== targetKey) return;\n\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n callback(event);\n },\n [key, callback, modifiers, preventDefault, stopPropagation, ignoreInputs]\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown, enabled]);\n}\n\n/**\n * Hook for the common Cmd/Ctrl+K shortcut pattern (command palette, search, etc.)\n *\n * @param callback - Function to call when Cmd/Ctrl+K is pressed\n * @param enabled - Whether the shortcut is active (default: true)\n *\n * @example\n * ```tsx\n * useCommandK(() => setIsOpen(true));\n * ```\n */\nexport function useCommandK(callback: () => void, enabled = true): void {\n useKeyboardShortcut('k', callback, {\n enabled,\n modifiers: { meta: true, ctrl: true },\n ignoreInputs: false, // Cmd+K should work even in inputs\n });\n}\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook that tracks whether a media query matches.\n * Uses the native `matchMedia` API for efficient media query tracking.\n *\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\n * @returns Boolean indicating whether the media query matches\n *\n * @example\n * ```tsx\n * function ResponsiveComponent() {\n * const isMobile = useMediaQuery('(max-width: 767px)');\n * const isTablet = useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n *\n * return (\n * <div>\n * {isMobile && <MobileLayout />}\n * {isTablet && <TabletLayout />}\n * {isDesktop && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n // Initialize with null to indicate SSR/initial state\n const [matches, setMatches] = useState<boolean>(() => {\n // Check if we're in a browser environment\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n // Handler for media query changes\n const handler = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers use addEventListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n\n // Fallback for older browsers\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener(handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Preset breakpoint hooks following common responsive design patterns\n */\n\n/** Returns true when viewport is smaller than 640px (mobile) */\nexport function useIsMobile(): boolean {\n return useMediaQuery('(max-width: 639px)');\n}\n\n/** Returns true when viewport is 640px-767px (large mobile / small tablet) */\nexport function useIsSmallTablet(): boolean {\n return useMediaQuery('(min-width: 640px) and (max-width: 767px)');\n}\n\n/** Returns true when viewport is 768px-1023px (tablet) */\nexport function useIsTablet(): boolean {\n return useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n}\n\n/** Returns true when viewport is 1024px or larger (desktop) */\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 1024px)');\n}\n\n/** Returns true when viewport is 1280px or larger (large desktop) */\nexport function useIsLargeDesktop(): boolean {\n return useMediaQuery('(min-width: 1280px)');\n}\n\n/** Returns true when viewport is smaller than 1024px (mobile/tablet) */\nexport function useIsMobileOrTablet(): boolean {\n return useMediaQuery('(max-width: 1023px)');\n}\n","import { useEffect, useState, useRef, type RefObject } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseScrollSpyOptions {\n /** CSS selector for the elements to observe (e.g. 'h2, h3, h4') */\n selectors?: string;\n /** Explicit list of element IDs to observe (alternative to selectors) */\n ids?: string[];\n /** IntersectionObserver root margin (default: '0px 0px -60% 0px') */\n rootMargin?: string;\n /** IntersectionObserver threshold (default: 0) */\n threshold?: number | number[];\n /** Scroll container element ref. Defaults to document viewport. */\n root?: RefObject<HTMLElement | null>;\n /** Whether the hook is active (default: true) */\n enabled?: boolean;\n}\n\nexport interface UseScrollSpyReturn {\n /** The ID of the currently active (in-view) element */\n activeId: string | null;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Tracks which section is currently in the viewport using IntersectionObserver.\n * Pairs naturally with `TableOfContents` to highlight the active heading.\n *\n * @example\n * ```tsx\n * function DocsPage() {\n * const { activeId } = useScrollSpy({ selectors: 'h2, h3' });\n * return (\n * <aside>\n * <TableOfContents activeId={activeId} />\n * </aside>\n * );\n * }\n * ```\n */\nexport function useScrollSpy({\n selectors,\n ids,\n rootMargin = '0px 0px -60% 0px',\n threshold = 0,\n root,\n enabled = true,\n}: UseScrollSpyOptions = {}): UseScrollSpyReturn {\n const [activeId, setActiveId] = useState<string | null>(null);\n const visibleEntries = useRef<Map<string, IntersectionObserverEntry>>(\n new Map()\n );\n\n // Track root.current so the effect re-runs when the ref attaches\n const rootEl = root?.current ?? null;\n\n useEffect(() => {\n if (!enabled) return;\n\n const container = rootEl ?? document;\n\n // Resolve target elements from the DOM\n function resolveElements(): Element[] {\n let els: Element[] = [];\n if (ids && ids.length > 0) {\n els = ids\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n } else if (selectors) {\n els = Array.from(container.querySelectorAll(selectors));\n }\n return els.filter((el) => el.id);\n }\n\n let intersectionObserver: IntersectionObserver | null = null;\n let mutationObserver: MutationObserver | null = null;\n\n function startObserving(): boolean {\n const elements = resolveElements();\n if (elements.length === 0) return false;\n\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n visibleEntries.current.set(entry.target.id, entry);\n } else {\n visibleEntries.current.delete(entry.target.id);\n }\n }\n\n // Pick the topmost visible heading (by DOM order)\n if (visibleEntries.current.size > 0) {\n let topmost: string | null = null;\n let topmostTop = Infinity;\n\n for (const [id, entry] of visibleEntries.current) {\n const top = entry.boundingClientRect.top;\n if (top < topmostTop) {\n topmostTop = top;\n topmost = id;\n }\n }\n\n if (topmost) {\n setActiveId(topmost);\n }\n }\n },\n {\n root: rootEl,\n rootMargin,\n threshold,\n }\n );\n\n for (const el of elements) {\n intersectionObserver.observe(el);\n }\n\n // Elements found — stop watching for new DOM nodes\n mutationObserver?.disconnect();\n mutationObserver = null;\n return true;\n }\n\n // If target elements don't exist yet (e.g. headings mount after ToC),\n // watch for DOM changes and retry until they appear.\n if (!startObserving()) {\n const watchRoot = rootEl ?? document.body;\n mutationObserver = new MutationObserver(() => {\n startObserving();\n });\n mutationObserver.observe(watchRoot, { childList: true, subtree: true });\n }\n\n const entries = visibleEntries.current;\n return () => {\n mutationObserver?.disconnect();\n intersectionObserver?.disconnect();\n entries.clear();\n };\n }, [selectors, ids, rootMargin, threshold, rootEl, enabled]);\n\n return { activeId };\n}\n"]}
@@ -1,11 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { twMerge } from 'tailwind-merge';
3
-
4
- // src/utils/cn.ts
5
- function cn(...inputs) {
6
- return twMerge(clsx(inputs));
7
- }
8
-
9
- export { cn };
10
- //# sourceMappingURL=chunk-F3SOEIN2.js.map
11
- //# sourceMappingURL=chunk-F3SOEIN2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/cn.ts"],"names":[],"mappings":";;;;AAaO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-F3SOEIN2.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge Tailwind CSS classes with proper precedence.\n * Combines clsx for conditional classes with tailwind-merge for deduplication.\n *\n * @example\n * ```tsx\n * cn('px-4 py-2', isActive && 'bg-primary-500', className)\n * // Properly merges and dedupes Tailwind classes\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- var clsx = require('clsx');
4
- var tailwindMerge = require('tailwind-merge');
5
-
6
- // src/utils/cn.ts
7
- function cn(...inputs) {
8
- return tailwindMerge.twMerge(clsx.clsx(inputs));
9
- }
10
-
11
- exports.cn = cn;
12
- //# sourceMappingURL=chunk-OR5DRJCW.cjs.map
13
- //# sourceMappingURL=chunk-OR5DRJCW.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/cn.ts"],"names":["twMerge","clsx"],"mappings":";;;;;;AAaO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-OR5DRJCW.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge Tailwind CSS classes with proper precedence.\n * Combines clsx for conditional classes with tailwind-merge for deduplication.\n *\n * @example\n * ```tsx\n * cn('px-4 py-2', isActive && 'bg-primary-500', className)\n * // Properly merges and dedupes Tailwind classes\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/useKeyboardShortcut.ts","../src/hooks/useMediaQuery.ts","../src/hooks/useScrollSpy.ts"],"names":["useEffect","useState","entries"],"mappings":"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","file":"chunk-ZGSC2CB2.js","sourcesContent":["import { useEffect, useCallback } from 'react';\n\n/**\n * Options for keyboard shortcut hook\n */\nexport interface KeyboardShortcutOptions {\n /** Whether the shortcut is currently enabled (default: true) */\n enabled?: boolean;\n /** Modifier keys required (default: none) */\n modifiers?: {\n ctrl?: boolean;\n shift?: boolean;\n alt?: boolean;\n meta?: boolean;\n };\n /** Whether to prevent default browser behavior (default: true) */\n preventDefault?: boolean;\n /** Whether to stop event propagation (default: false) */\n stopPropagation?: boolean;\n /** Element types to ignore when the shortcut is pressed (default: ['INPUT', 'TEXTAREA', 'SELECT']) */\n ignoreInputs?: boolean;\n}\n\n/**\n * Hook that triggers a callback when a specific keyboard shortcut is pressed.\n * Supports modifier keys (Ctrl, Shift, Alt, Meta) and ignores input fields by default.\n *\n * @param key - The key to listen for (e.g., 'k', 'Enter', 'Escape', '/')\n * @param callback - Function to call when the shortcut is pressed\n * @param options - Configuration options\n *\n * @example\n * ```tsx\n * // Cmd/Ctrl+K to open search\n * useKeyboardShortcut('k', openSearch, { modifiers: { meta: true, ctrl: true } });\n *\n * // Forward slash to focus search (ignoring when typing)\n * useKeyboardShortcut('/', focusSearch);\n *\n * // Escape to close modal\n * useKeyboardShortcut('Escape', closeModal);\n * ```\n */\nexport function useKeyboardShortcut(\n key: string,\n callback: (event: KeyboardEvent) => void,\n options: KeyboardShortcutOptions = {}\n): void {\n const {\n enabled = true,\n modifiers = {},\n preventDefault = true,\n stopPropagation = false,\n ignoreInputs = true,\n } = options;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n // Check if we should ignore input fields\n if (ignoreInputs) {\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toUpperCase();\n if (\n tagName === 'INPUT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SELECT' ||\n target.isContentEditable\n ) {\n return;\n }\n }\n\n // Check modifiers\n const { ctrl, shift, alt, meta } = modifiers;\n\n // For Cmd+K style shortcuts, allow either meta (Mac) or ctrl (Windows/Linux)\n const metaOrCtrl = meta || ctrl;\n if (metaOrCtrl) {\n if (!(event.metaKey || event.ctrlKey)) return;\n } else {\n // If no meta/ctrl modifier specified, ensure neither is pressed\n if (event.metaKey || event.ctrlKey) return;\n }\n\n if (shift && !event.shiftKey) return;\n if (alt && !event.altKey) return;\n\n // Check key match (case-insensitive for letters)\n const eventKey =\n event.key.length === 1 ? event.key.toLowerCase() : event.key;\n const targetKey = key.length === 1 ? key.toLowerCase() : key;\n if (eventKey !== targetKey) return;\n\n if (preventDefault) {\n event.preventDefault();\n }\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n callback(event);\n },\n [key, callback, modifiers, preventDefault, stopPropagation, ignoreInputs]\n );\n\n useEffect(() => {\n if (!enabled) return;\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown, enabled]);\n}\n\n/**\n * Hook for the common Cmd/Ctrl+K shortcut pattern (command palette, search, etc.)\n *\n * @param callback - Function to call when Cmd/Ctrl+K is pressed\n * @param enabled - Whether the shortcut is active (default: true)\n *\n * @example\n * ```tsx\n * useCommandK(() => setIsOpen(true));\n * ```\n */\nexport function useCommandK(callback: () => void, enabled = true): void {\n useKeyboardShortcut('k', callback, {\n enabled,\n modifiers: { meta: true, ctrl: true },\n ignoreInputs: false, // Cmd+K should work even in inputs\n });\n}\n","import { useState, useEffect } from 'react';\n\n/**\n * Hook that tracks whether a media query matches.\n * Uses the native `matchMedia` API for efficient media query tracking.\n *\n * @param query - CSS media query string (e.g., '(min-width: 768px)')\n * @returns Boolean indicating whether the media query matches\n *\n * @example\n * ```tsx\n * function ResponsiveComponent() {\n * const isMobile = useMediaQuery('(max-width: 767px)');\n * const isTablet = useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n * const isDesktop = useMediaQuery('(min-width: 1024px)');\n *\n * return (\n * <div>\n * {isMobile && <MobileLayout />}\n * {isTablet && <TabletLayout />}\n * {isDesktop && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n // Initialize with null to indicate SSR/initial state\n const [matches, setMatches] = useState<boolean>(() => {\n // Check if we're in a browser environment\n if (typeof window === 'undefined') return false;\n return window.matchMedia(query).matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n // Handler for media query changes\n const handler = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers use addEventListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n }\n\n // Fallback for older browsers\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener(handler);\n }, [query]);\n\n return matches;\n}\n\n/**\n * Preset breakpoint hooks following common responsive design patterns\n */\n\n/** Returns true when viewport is smaller than 640px (mobile) */\nexport function useIsMobile(): boolean {\n return useMediaQuery('(max-width: 639px)');\n}\n\n/** Returns true when viewport is 640px-767px (large mobile / small tablet) */\nexport function useIsSmallTablet(): boolean {\n return useMediaQuery('(min-width: 640px) and (max-width: 767px)');\n}\n\n/** Returns true when viewport is 768px-1023px (tablet) */\nexport function useIsTablet(): boolean {\n return useMediaQuery('(min-width: 768px) and (max-width: 1023px)');\n}\n\n/** Returns true when viewport is 1024px or larger (desktop) */\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 1024px)');\n}\n\n/** Returns true when viewport is 1280px or larger (large desktop) */\nexport function useIsLargeDesktop(): boolean {\n return useMediaQuery('(min-width: 1280px)');\n}\n\n/** Returns true when viewport is smaller than 1024px (mobile/tablet) */\nexport function useIsMobileOrTablet(): boolean {\n return useMediaQuery('(max-width: 1023px)');\n}\n","import { useEffect, useState, useRef, type RefObject } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UseScrollSpyOptions {\n /** CSS selector for the elements to observe (e.g. 'h2, h3, h4') */\n selectors?: string;\n /** Explicit list of element IDs to observe (alternative to selectors) */\n ids?: string[];\n /** IntersectionObserver root margin (default: '0px 0px -60% 0px') */\n rootMargin?: string;\n /** IntersectionObserver threshold (default: 0) */\n threshold?: number | number[];\n /** Scroll container element ref. Defaults to document viewport. */\n root?: RefObject<HTMLElement | null>;\n /** Whether the hook is active (default: true) */\n enabled?: boolean;\n}\n\nexport interface UseScrollSpyReturn {\n /** The ID of the currently active (in-view) element */\n activeId: string | null;\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Tracks which section is currently in the viewport using IntersectionObserver.\n * Pairs naturally with `TableOfContents` to highlight the active heading.\n *\n * @example\n * ```tsx\n * function DocsPage() {\n * const { activeId } = useScrollSpy({ selectors: 'h2, h3' });\n * return (\n * <aside>\n * <TableOfContents activeId={activeId} />\n * </aside>\n * );\n * }\n * ```\n */\nexport function useScrollSpy({\n selectors,\n ids,\n rootMargin = '0px 0px -60% 0px',\n threshold = 0,\n root,\n enabled = true,\n}: UseScrollSpyOptions = {}): UseScrollSpyReturn {\n const [activeId, setActiveId] = useState<string | null>(null);\n const visibleEntries = useRef<Map<string, IntersectionObserverEntry>>(\n new Map()\n );\n\n // Track root.current so the effect re-runs when the ref attaches\n const rootEl = root?.current ?? null;\n\n useEffect(() => {\n if (!enabled) return;\n\n const container = rootEl ?? document;\n\n // Resolve target elements from the DOM\n function resolveElements(): Element[] {\n let els: Element[] = [];\n if (ids && ids.length > 0) {\n els = ids\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n } else if (selectors) {\n els = Array.from(container.querySelectorAll(selectors));\n }\n return els.filter((el) => el.id);\n }\n\n let intersectionObserver: IntersectionObserver | null = null;\n let mutationObserver: MutationObserver | null = null;\n\n function startObserving(): boolean {\n const elements = resolveElements();\n if (elements.length === 0) return false;\n\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n visibleEntries.current.set(entry.target.id, entry);\n } else {\n visibleEntries.current.delete(entry.target.id);\n }\n }\n\n // Pick the topmost visible heading (by DOM order)\n if (visibleEntries.current.size > 0) {\n let topmost: string | null = null;\n let topmostTop = Infinity;\n\n for (const [id, entry] of visibleEntries.current) {\n const top = entry.boundingClientRect.top;\n if (top < topmostTop) {\n topmostTop = top;\n topmost = id;\n }\n }\n\n if (topmost) {\n setActiveId(topmost);\n }\n }\n },\n {\n root: rootEl,\n rootMargin,\n threshold,\n }\n );\n\n for (const el of elements) {\n intersectionObserver.observe(el);\n }\n\n // Elements found — stop watching for new DOM nodes\n mutationObserver?.disconnect();\n mutationObserver = null;\n return true;\n }\n\n // If target elements don't exist yet (e.g. headings mount after ToC),\n // watch for DOM changes and retry until they appear.\n if (!startObserving()) {\n const watchRoot = rootEl ?? document.body;\n mutationObserver = new MutationObserver(() => {\n startObserving();\n });\n mutationObserver.observe(watchRoot, { childList: true, subtree: true });\n }\n\n const entries = visibleEntries.current;\n return () => {\n mutationObserver?.disconnect();\n intersectionObserver?.disconnect();\n entries.clear();\n };\n }, [selectors, ids, rootMargin, threshold, rootEl, enabled]);\n\n return { activeId };\n}\n"]}