@mieweb/ui 0.7.1 → 0.7.2-dev.1

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 (464) hide show
  1. package/dist/CsvBlock-OTFG3PYZ.cjs +15 -0
  2. package/dist/{CsvBlock-2A5VEDD3.cjs.map → CsvBlock-OTFG3PYZ.cjs.map} +1 -1
  3. package/dist/CsvBlock-PUSTBQ5B.js +6 -0
  4. package/dist/{CsvBlock-D6PWAJ5X.js.map → CsvBlock-PUSTBQ5B.js.map} +1 -1
  5. package/dist/HtmlPreviewBlock-QHLSIMWJ.cjs +15 -0
  6. package/dist/{HtmlPreviewBlock-SYXCV5RH.cjs.map → HtmlPreviewBlock-QHLSIMWJ.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-YF2YVKKX.js +6 -0
  8. package/dist/{HtmlPreviewBlock-PEHTJ6C3.js.map → HtmlPreviewBlock-YF2YVKKX.js.map} +1 -1
  9. package/dist/MermaidBlock-H3TWNC4D.js +6 -0
  10. package/dist/{MermaidBlock-7NK3AVK2.js.map → MermaidBlock-H3TWNC4D.js.map} +1 -1
  11. package/dist/MermaidBlock-ZLLBO3VY.cjs +15 -0
  12. package/dist/{MermaidBlock-AFXNP5NK.cjs.map → MermaidBlock-ZLLBO3VY.cjs.map} +1 -1
  13. package/dist/SurveyBlock-JLHS3YQD.js +6 -0
  14. package/dist/{SurveyBlock-NNDGXGG4.js.map → SurveyBlock-JLHS3YQD.js.map} +1 -1
  15. package/dist/SurveyBlock-M2ZRTGVJ.cjs +15 -0
  16. package/dist/{SurveyBlock-6KRNKFH5.cjs.map → SurveyBlock-M2ZRTGVJ.cjs.map} +1 -1
  17. package/dist/ag-grid.cjs +13 -13
  18. package/dist/ag-grid.js +2 -2
  19. package/dist/brands/index.cjs +7 -7
  20. package/dist/brands/index.js +2 -2
  21. package/dist/{chunk-4DMZAVB2.js → chunk-23AYDOCH.js} +3 -3
  22. package/dist/{chunk-4DMZAVB2.js.map → chunk-23AYDOCH.js.map} +1 -1
  23. package/dist/{chunk-MAMY5HTT.cjs → chunk-26DPQUSB.cjs} +22 -22
  24. package/dist/{chunk-MAMY5HTT.cjs.map → chunk-26DPQUSB.cjs.map} +1 -1
  25. package/dist/{chunk-TRZXK57D.js → chunk-2DW4PUJD.js} +3 -3
  26. package/dist/{chunk-TRZXK57D.js.map → chunk-2DW4PUJD.js.map} +1 -1
  27. package/dist/{chunk-OX2RIVN7.js → chunk-3D4ITDLO.js} +4 -4
  28. package/dist/{chunk-OX2RIVN7.js.map → chunk-3D4ITDLO.js.map} +1 -1
  29. package/dist/{chunk-PJAQDAMZ.cjs → chunk-3IAA3KCE.cjs} +15 -6
  30. package/dist/chunk-3IAA3KCE.cjs.map +1 -0
  31. package/dist/chunk-3PXOIAF6.js +3 -0
  32. package/dist/{chunk-DHKYGVP7.js.map → chunk-3PXOIAF6.js.map} +1 -1
  33. package/dist/{chunk-Q2EWNXIB.cjs → chunk-3SZQRMHM.cjs} +9 -9
  34. package/dist/{chunk-Q2EWNXIB.cjs.map → chunk-3SZQRMHM.cjs.map} +1 -1
  35. package/dist/{chunk-JLBT76WH.js → chunk-3YSIZ2CK.js} +14 -5
  36. package/dist/chunk-3YSIZ2CK.js.map +1 -0
  37. package/dist/{chunk-NIEIRA5A.cjs → chunk-4AE2L6AO.cjs} +13 -13
  38. package/dist/{chunk-NIEIRA5A.cjs.map → chunk-4AE2L6AO.cjs.map} +1 -1
  39. package/dist/{chunk-KBEKQMVY.cjs → chunk-4CUFXCC5.cjs} +5 -5
  40. package/dist/{chunk-KBEKQMVY.cjs.map → chunk-4CUFXCC5.cjs.map} +1 -1
  41. package/dist/{chunk-PFWHWIXS.cjs → chunk-54OW6ZPL.cjs} +124 -3
  42. package/dist/chunk-54OW6ZPL.cjs.map +1 -0
  43. package/dist/{chunk-XP6HELVG.cjs → chunk-5IDYOJHO.cjs} +13 -13
  44. package/dist/{chunk-XP6HELVG.cjs.map → chunk-5IDYOJHO.cjs.map} +1 -1
  45. package/dist/{chunk-7WMSUXOQ.js → chunk-5J5PEUUA.js} +4 -4
  46. package/dist/{chunk-7WMSUXOQ.js.map → chunk-5J5PEUUA.js.map} +1 -1
  47. package/dist/{chunk-3CJBUAJ4.js → chunk-5U6GETAW.js} +3 -3
  48. package/dist/{chunk-3CJBUAJ4.js.map → chunk-5U6GETAW.js.map} +1 -1
  49. package/dist/{chunk-HEH3QXOQ.js → chunk-5Y5FSR4N.js} +3 -3
  50. package/dist/{chunk-HEH3QXOQ.js.map → chunk-5Y5FSR4N.js.map} +1 -1
  51. package/dist/{chunk-MSRU3XBH.cjs → chunk-6ECKH4DJ.cjs} +7 -7
  52. package/dist/{chunk-MSRU3XBH.cjs.map → chunk-6ECKH4DJ.cjs.map} +1 -1
  53. package/dist/{chunk-MV3MTHWQ.js → chunk-6EWJGRC3.js} +3 -3
  54. package/dist/{chunk-MV3MTHWQ.js.map → chunk-6EWJGRC3.js.map} +1 -1
  55. package/dist/{chunk-AES2BKEW.cjs → chunk-6J7UGYT5.cjs} +10 -10
  56. package/dist/{chunk-AES2BKEW.cjs.map → chunk-6J7UGYT5.cjs.map} +1 -1
  57. package/dist/{chunk-6LFG4JFF.js → chunk-AFGADE3B.js} +3 -3
  58. package/dist/{chunk-6LFG4JFF.js.map → chunk-AFGADE3B.js.map} +1 -1
  59. package/dist/{chunk-UOOH356R.cjs → chunk-AIJAFPGJ.cjs} +5 -5
  60. package/dist/{chunk-UOOH356R.cjs.map → chunk-AIJAFPGJ.cjs.map} +1 -1
  61. package/dist/{chunk-43GBCUSQ.js → chunk-AQ564XO7.js} +6 -6
  62. package/dist/chunk-AQ564XO7.js.map +1 -0
  63. package/dist/{chunk-CYMZ2QS5.js → chunk-BCJFOSZX.js} +2 -2
  64. package/dist/{chunk-CYMZ2QS5.js.map → chunk-BCJFOSZX.js.map} +1 -1
  65. package/dist/{chunk-T3C4RNJ4.js → chunk-BJKAVWED.js} +3 -3
  66. package/dist/{chunk-T3C4RNJ4.js.map → chunk-BJKAVWED.js.map} +1 -1
  67. package/dist/{chunk-MKWGKASO.js → chunk-BMRQ4VME.js} +4 -4
  68. package/dist/{chunk-MKWGKASO.js.map → chunk-BMRQ4VME.js.map} +1 -1
  69. package/dist/{chunk-T42BCIUA.js → chunk-BMSG4NBH.js} +4 -4
  70. package/dist/{chunk-T42BCIUA.js.map → chunk-BMSG4NBH.js.map} +1 -1
  71. package/dist/{chunk-QA6ZDHFP.js → chunk-BOOJDRJO.js} +35 -11
  72. package/dist/chunk-BOOJDRJO.js.map +1 -0
  73. package/dist/{chunk-IYIYL2SQ.js → chunk-CEQJGUAS.js} +3 -3
  74. package/dist/{chunk-IYIYL2SQ.js.map → chunk-CEQJGUAS.js.map} +1 -1
  75. package/dist/{chunk-ZVSW2KS6.js → chunk-D2GID3YK.js} +30 -7
  76. package/dist/chunk-D2GID3YK.js.map +1 -0
  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-J7Z7467B.js → chunk-DLBV42JD.js} +4 -4
  80. package/dist/{chunk-J7Z7467B.js.map → chunk-DLBV42JD.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-I2W24RHW.js → chunk-DWCYEPTT.js} +3 -3
  84. package/dist/{chunk-I2W24RHW.js.map → chunk-DWCYEPTT.js.map} +1 -1
  85. package/dist/{chunk-LJ2ZWIX6.js → chunk-DWIF6VXZ.js} +124 -3
  86. package/dist/chunk-DWIF6VXZ.js.map +1 -0
  87. package/dist/{chunk-IHTRKWBG.js → chunk-EGWWTIWS.js} +119 -75
  88. package/dist/chunk-EGWWTIWS.js.map +1 -0
  89. package/dist/{chunk-T3RWXOCM.js → chunk-EHQ77LL5.js} +3 -3
  90. package/dist/{chunk-T3RWXOCM.js.map → chunk-EHQ77LL5.js.map} +1 -1
  91. package/dist/{chunk-UM6NA7HL.js → chunk-EKRT7K2K.js} +4 -4
  92. package/dist/{chunk-UM6NA7HL.js.map → chunk-EKRT7K2K.js.map} +1 -1
  93. package/dist/{chunk-KOCTIB6U.js → chunk-EMMYFHOT.js} +3 -3
  94. package/dist/{chunk-KOCTIB6U.js.map → chunk-EMMYFHOT.js.map} +1 -1
  95. package/dist/{chunk-WGPMTW36.cjs → chunk-EPQPUFS6.cjs} +7 -7
  96. package/dist/{chunk-WGPMTW36.cjs.map → chunk-EPQPUFS6.cjs.map} +1 -1
  97. package/dist/{chunk-J3BU3JBX.js → chunk-FDUA6OGN.js} +3 -3
  98. package/dist/{chunk-J3BU3JBX.js.map → chunk-FDUA6OGN.js.map} +1 -1
  99. package/dist/{chunk-JHYFHEHS.js → chunk-FDV7EQWH.js} +4 -4
  100. package/dist/{chunk-JHYFHEHS.js.map → chunk-FDV7EQWH.js.map} +1 -1
  101. package/dist/{chunk-KQAXXJ4G.cjs → chunk-FF235PKY.cjs} +7 -7
  102. package/dist/{chunk-KQAXXJ4G.cjs.map → chunk-FF235PKY.cjs.map} +1 -1
  103. package/dist/{chunk-FZJBFJJR.js → chunk-FJ7YPVKV.js} +3 -3
  104. package/dist/{chunk-FZJBFJJR.js.map → chunk-FJ7YPVKV.js.map} +1 -1
  105. package/dist/{chunk-5MAGWW5X.cjs → chunk-FKLUSYFP.cjs} +11 -11
  106. package/dist/{chunk-5MAGWW5X.cjs.map → chunk-FKLUSYFP.cjs.map} +1 -1
  107. package/dist/{chunk-BB4WQ4LV.cjs → chunk-FN6VHMLM.cjs} +8 -8
  108. package/dist/{chunk-BB4WQ4LV.cjs.map → chunk-FN6VHMLM.cjs.map} +1 -1
  109. package/dist/{chunk-6AHYYWVB.js → chunk-FPVRQCCL.js} +5 -5
  110. package/dist/{chunk-6AHYYWVB.js.map → chunk-FPVRQCCL.js.map} +1 -1
  111. package/dist/{chunk-FJH7P5WG.js → chunk-FTRGZOVJ.js} +6 -6
  112. package/dist/{chunk-FJH7P5WG.js.map → chunk-FTRGZOVJ.js.map} +1 -1
  113. package/dist/{chunk-ZGSC2CB2.js → chunk-GTHNWP4P.js} +36 -5
  114. package/dist/chunk-GTHNWP4P.js.map +1 -0
  115. package/dist/{chunk-44CK4CT2.cjs → chunk-H7QSGFMZ.cjs} +13 -13
  116. package/dist/{chunk-44CK4CT2.cjs.map → chunk-H7QSGFMZ.cjs.map} +1 -1
  117. package/dist/{chunk-YZT62IMX.js → chunk-HIDV32ZX.js} +5 -5
  118. package/dist/{chunk-YZT62IMX.js.map → chunk-HIDV32ZX.js.map} +1 -1
  119. package/dist/{chunk-BIT27PPD.js → chunk-HS25RPDW.js} +3 -3
  120. package/dist/{chunk-BIT27PPD.js.map → chunk-HS25RPDW.js.map} +1 -1
  121. package/dist/{chunk-BWYYA3LQ.cjs → chunk-I2ECTLON.cjs} +5 -5
  122. package/dist/{chunk-BWYYA3LQ.cjs.map → chunk-I2ECTLON.cjs.map} +1 -1
  123. package/dist/{chunk-DUPR6FEL.js → chunk-I3WGZPI6.js} +4 -4
  124. package/dist/{chunk-DUPR6FEL.js.map → chunk-I3WGZPI6.js.map} +1 -1
  125. package/dist/{chunk-TN33E2VN.cjs → chunk-IJYTASQQ.cjs} +15 -15
  126. package/dist/{chunk-TN33E2VN.cjs.map → chunk-IJYTASQQ.cjs.map} +1 -1
  127. package/dist/{chunk-BT3ZQJGT.cjs → chunk-IUDY6S7I.cjs} +6 -6
  128. package/dist/{chunk-BT3ZQJGT.cjs.map → chunk-IUDY6S7I.cjs.map} +1 -1
  129. package/dist/{chunk-BYUV3IZV.cjs → chunk-JP5SGIXA.cjs} +4 -4
  130. package/dist/{chunk-BYUV3IZV.cjs.map → chunk-JP5SGIXA.cjs.map} +1 -1
  131. package/dist/{chunk-TR2OJKQ4.cjs → chunk-JTSKPDPH.cjs} +8 -8
  132. package/dist/{chunk-TR2OJKQ4.cjs.map → chunk-JTSKPDPH.cjs.map} +1 -1
  133. package/dist/{chunk-V25Z5GR6.cjs → chunk-K4S4FAYX.cjs} +9 -9
  134. package/dist/{chunk-V25Z5GR6.cjs.map → chunk-K4S4FAYX.cjs.map} +1 -1
  135. package/dist/{chunk-XCLQZ4FV.js → chunk-KFLDXJEE.js} +3 -3
  136. package/dist/{chunk-XCLQZ4FV.js.map → chunk-KFLDXJEE.js.map} +1 -1
  137. package/dist/{chunk-6D5F7EDM.js → chunk-KRGKPUJH.js} +18 -17
  138. package/dist/chunk-KRGKPUJH.js.map +1 -0
  139. package/dist/{chunk-MCCO4A23.js → chunk-LC7YHZXM.js} +256 -45
  140. package/dist/chunk-LC7YHZXM.js.map +1 -0
  141. package/dist/{chunk-JCNPVK74.cjs → chunk-LJBWCUKP.cjs} +8 -8
  142. package/dist/{chunk-JCNPVK74.cjs.map → chunk-LJBWCUKP.cjs.map} +1 -1
  143. package/dist/{chunk-4LVPQ44A.js → chunk-LMBXJZLG.js} +9 -5
  144. package/dist/chunk-LMBXJZLG.js.map +1 -0
  145. package/dist/{chunk-ZHBANUBI.cjs → chunk-MJWFNV3L.cjs} +31 -27
  146. package/dist/chunk-MJWFNV3L.cjs.map +1 -0
  147. package/dist/{chunk-ZDEYV373.cjs → chunk-MYFZYUPR.cjs} +35 -11
  148. package/dist/chunk-MYFZYUPR.cjs.map +1 -0
  149. package/dist/{chunk-C2544GKZ.js → chunk-N3Y43KOB.js} +4 -4
  150. package/dist/{chunk-C2544GKZ.js.map → chunk-N3Y43KOB.js.map} +1 -1
  151. package/dist/{chunk-RHYIFIT5.js → chunk-NLBT5O2X.js} +3 -3
  152. package/dist/{chunk-RHYIFIT5.js.map → chunk-NLBT5O2X.js.map} +1 -1
  153. package/dist/{chunk-FCBQP2U4.cjs → chunk-NPKPCYAT.cjs} +142 -16
  154. package/dist/chunk-NPKPCYAT.cjs.map +1 -0
  155. package/dist/{chunk-PWHK7SWN.cjs → chunk-NQ2D2V6O.cjs} +150 -149
  156. package/dist/chunk-NQ2D2V6O.cjs.map +1 -0
  157. package/dist/{chunk-QUUFKGDF.cjs → chunk-OAHORW4N.cjs} +130 -86
  158. package/dist/chunk-OAHORW4N.cjs.map +1 -0
  159. package/dist/{chunk-BX6BTDTR.js → chunk-OQWZYKJM.js} +3 -3
  160. package/dist/{chunk-BX6BTDTR.js.map → chunk-OQWZYKJM.js.map} +1 -1
  161. package/dist/{chunk-JBB25LFB.js → chunk-OTQ72WX3.js} +3 -3
  162. package/dist/{chunk-JBB25LFB.js.map → chunk-OTQ72WX3.js.map} +1 -1
  163. package/dist/{chunk-AFKKJEV5.cjs → chunk-OZOSWBSI.cjs} +4 -4
  164. package/dist/{chunk-AFKKJEV5.cjs.map → chunk-OZOSWBSI.cjs.map} +1 -1
  165. package/dist/{chunk-KJPOFUF5.cjs → chunk-P2VTQ5AR.cjs} +10 -10
  166. package/dist/{chunk-KJPOFUF5.cjs.map → chunk-P2VTQ5AR.cjs.map} +1 -1
  167. package/dist/{chunk-CVC4NWFA.cjs → chunk-P3JEMF6E.cjs} +4 -4
  168. package/dist/{chunk-CVC4NWFA.cjs.map → chunk-P3JEMF6E.cjs.map} +1 -1
  169. package/dist/{chunk-ZAIEQWRA.js → chunk-P6L74SKG.js} +5 -5
  170. package/dist/{chunk-ZAIEQWRA.js.map → chunk-P6L74SKG.js.map} +1 -1
  171. package/dist/{chunk-QASIWBXU.cjs → chunk-P7UMS4E6.cjs} +7 -7
  172. package/dist/{chunk-QASIWBXU.cjs.map → chunk-P7UMS4E6.cjs.map} +1 -1
  173. package/dist/chunk-PAM5UUBL.cjs +740 -0
  174. package/dist/{chunk-UTYUT5YY.cjs.map → chunk-PAM5UUBL.cjs.map} +1 -1
  175. package/dist/{chunk-NVHAQOHH.cjs → chunk-PLMXN23Q.cjs} +10 -10
  176. package/dist/chunk-PLMXN23Q.cjs.map +1 -0
  177. package/dist/{chunk-Y2S6QMKU.js → chunk-PTZB2GKL.js} +3 -3
  178. package/dist/{chunk-Y2S6QMKU.js.map → chunk-PTZB2GKL.js.map} +1 -1
  179. package/dist/{chunk-EZKRAW2X.js → chunk-QUUBTNMH.js} +3 -3
  180. package/dist/{chunk-EZKRAW2X.js.map → chunk-QUUBTNMH.js.map} +1 -1
  181. package/dist/{chunk-5BQE6BEL.js → chunk-QYSUYB3S.js} +13 -9
  182. package/dist/chunk-QYSUYB3S.js.map +1 -0
  183. package/dist/{chunk-MZPF2QGM.cjs → chunk-RBS3GHDZ.cjs} +15 -15
  184. package/dist/{chunk-MZPF2QGM.cjs.map → chunk-RBS3GHDZ.cjs.map} +1 -1
  185. package/dist/{chunk-A2QVQF54.cjs → chunk-RDGRKYQ5.cjs} +31 -8
  186. package/dist/chunk-RDGRKYQ5.cjs.map +1 -0
  187. package/dist/{chunk-KJ5BSGEO.cjs → chunk-RS5VA6QU.cjs} +17 -13
  188. package/dist/chunk-RS5VA6QU.cjs.map +1 -0
  189. package/dist/{chunk-372IIHUA.cjs → chunk-RYQ3S3KO.cjs} +53 -53
  190. package/dist/{chunk-372IIHUA.cjs.map → chunk-RYQ3S3KO.cjs.map} +1 -1
  191. package/dist/{chunk-NQME7MCK.js → chunk-RZJXCI53.js} +191 -204
  192. package/dist/chunk-RZJXCI53.js.map +1 -0
  193. package/dist/{chunk-DFCZPVG4.cjs → chunk-S3MKIDYG.cjs} +8 -8
  194. package/dist/{chunk-DFCZPVG4.cjs.map → chunk-S3MKIDYG.cjs.map} +1 -1
  195. package/dist/chunk-S5RVSXDV.cjs +45 -0
  196. package/dist/chunk-S5RVSXDV.cjs.map +1 -0
  197. package/dist/{chunk-XDFDVF2O.js → chunk-SH6B4MG5.js} +4 -4
  198. package/dist/{chunk-XDFDVF2O.js.map → chunk-SH6B4MG5.js.map} +1 -1
  199. package/dist/chunk-SVSHA7XV.js +487 -0
  200. package/dist/chunk-SVSHA7XV.js.map +1 -0
  201. package/dist/{chunk-7VF6WO7H.cjs → chunk-SYIFEJSF.cjs} +310 -99
  202. package/dist/chunk-SYIFEJSF.cjs.map +1 -0
  203. package/dist/{chunk-KL2S36FM.js → chunk-TNUL4LGG.js} +6 -6
  204. package/dist/{chunk-KL2S36FM.js.map → chunk-TNUL4LGG.js.map} +1 -1
  205. package/dist/chunk-TQONQSJO.js +42 -0
  206. package/dist/chunk-TQONQSJO.js.map +1 -0
  207. package/dist/{chunk-6ZYE6JUK.cjs → chunk-TVLZZI5Q.cjs} +11 -11
  208. package/dist/{chunk-6ZYE6JUK.cjs.map → chunk-TVLZZI5Q.cjs.map} +1 -1
  209. package/dist/{chunk-FQ3UCZUX.cjs → chunk-U3JU6BI5.cjs} +7 -7
  210. package/dist/{chunk-FQ3UCZUX.cjs.map → chunk-U3JU6BI5.cjs.map} +1 -1
  211. package/dist/{chunk-VCO2IZOG.js → chunk-UA7E7PDS.js} +3 -3
  212. package/dist/{chunk-VCO2IZOG.js.map → chunk-UA7E7PDS.js.map} +1 -1
  213. package/dist/{chunk-BLPCYP4D.cjs → chunk-URHXR5SC.cjs} +29 -29
  214. package/dist/{chunk-BLPCYP4D.cjs.map → chunk-URHXR5SC.cjs.map} +1 -1
  215. package/dist/{chunk-OOYEHBYJ.js → chunk-UUI7WXI5.js} +142 -16
  216. package/dist/chunk-UUI7WXI5.js.map +1 -0
  217. package/dist/{chunk-UFYXU7KV.js → chunk-UZ5NGGMI.js} +4 -4
  218. package/dist/{chunk-UFYXU7KV.js.map → chunk-UZ5NGGMI.js.map} +1 -1
  219. package/dist/{chunk-SNEQXSC5.cjs → chunk-VA7QN4DX.cjs} +2 -2
  220. package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VA7QN4DX.cjs.map} +1 -1
  221. package/dist/{chunk-STPK44AU.js → chunk-VNWJTCBQ.js} +3 -3
  222. package/dist/{chunk-STPK44AU.js.map → chunk-VNWJTCBQ.js.map} +1 -1
  223. package/dist/{chunk-ZNZZCB2M.cjs → chunk-VPIYTQCV.cjs} +9 -9
  224. package/dist/{chunk-ZNZZCB2M.cjs.map → chunk-VPIYTQCV.cjs.map} +1 -1
  225. package/dist/{chunk-DLNJLCNO.cjs → chunk-VTKXM7IE.cjs} +4 -4
  226. package/dist/{chunk-DLNJLCNO.cjs.map → chunk-VTKXM7IE.cjs.map} +1 -1
  227. package/dist/{chunk-VPNURIAY.cjs → chunk-VVI32P7L.cjs} +10 -10
  228. package/dist/{chunk-VPNURIAY.cjs.map → chunk-VVI32P7L.cjs.map} +1 -1
  229. package/dist/{chunk-EUUQVDXX.cjs → chunk-W4Q4UEXA.cjs} +14 -14
  230. package/dist/{chunk-EUUQVDXX.cjs.map → chunk-W4Q4UEXA.cjs.map} +1 -1
  231. package/dist/{chunk-U3ABLVYH.cjs → chunk-WUNWHOLA.cjs} +6 -6
  232. package/dist/{chunk-U3ABLVYH.cjs.map → chunk-WUNWHOLA.cjs.map} +1 -1
  233. package/dist/{chunk-RH43XBNV.cjs → chunk-WWJIW2IH.cjs} +4 -4
  234. package/dist/{chunk-RH43XBNV.cjs.map → chunk-WWJIW2IH.cjs.map} +1 -1
  235. package/dist/chunk-X4LBUPJO.cjs +511 -0
  236. package/dist/chunk-X4LBUPJO.cjs.map +1 -0
  237. package/dist/{chunk-4GXECTPS.cjs → chunk-XB54G7WS.cjs} +37 -3
  238. package/dist/chunk-XB54G7WS.cjs.map +1 -0
  239. package/dist/{chunk-IUFDGB5O.js → chunk-XMCIXHGH.js} +3 -3
  240. package/dist/{chunk-IUFDGB5O.js.map → chunk-XMCIXHGH.js.map} +1 -1
  241. package/dist/{chunk-KAKH2UZA.js → chunk-XO3WLK65.js} +3 -3
  242. package/dist/{chunk-KAKH2UZA.js.map → chunk-XO3WLK65.js.map} +1 -1
  243. package/dist/{chunk-IWDQPSJN.cjs → chunk-XS35KPBZ.cjs} +211 -223
  244. package/dist/chunk-XS35KPBZ.cjs.map +1 -0
  245. package/dist/{chunk-DEZ7XSTG.cjs → chunk-XXVUHLQN.cjs} +7 -7
  246. package/dist/{chunk-DEZ7XSTG.cjs.map → chunk-XXVUHLQN.cjs.map} +1 -1
  247. package/dist/{chunk-3GGET5LK.cjs → chunk-YGA35Z2P.cjs} +7 -7
  248. package/dist/{chunk-3GGET5LK.cjs.map → chunk-YGA35Z2P.cjs.map} +1 -1
  249. package/dist/{chunk-CKD554XR.cjs → chunk-YIXTGWT4.cjs} +5 -5
  250. package/dist/{chunk-CKD554XR.cjs.map → chunk-YIXTGWT4.cjs.map} +1 -1
  251. package/dist/{chunk-GOKC4CCZ.cjs → chunk-YMHOF6WA.cjs} +8 -8
  252. package/dist/{chunk-GOKC4CCZ.cjs.map → chunk-YMHOF6WA.cjs.map} +1 -1
  253. package/dist/{chunk-OXYFTCRW.cjs → chunk-YP5T6NZD.cjs} +4 -4
  254. package/dist/{chunk-OXYFTCRW.cjs.map → chunk-YP5T6NZD.cjs.map} +1 -1
  255. package/dist/{chunk-EL2RSQTJ.cjs → chunk-YVL3XATO.cjs} +5 -5
  256. package/dist/{chunk-EL2RSQTJ.cjs.map → chunk-YVL3XATO.cjs.map} +1 -1
  257. package/dist/{chunk-PVUDXJAI.js → chunk-YXCE2HSK.js} +4 -4
  258. package/dist/{chunk-PVUDXJAI.js.map → chunk-YXCE2HSK.js.map} +1 -1
  259. package/dist/{chunk-XL7TTKHP.js → chunk-Z4PECE5S.js} +7 -7
  260. package/dist/{chunk-XL7TTKHP.js.map → chunk-Z4PECE5S.js.map} +1 -1
  261. package/dist/{chunk-ST2RE5UB.cjs → chunk-Z5KFXHDP.cjs} +6 -6
  262. package/dist/{chunk-ST2RE5UB.cjs.map → chunk-Z5KFXHDP.cjs.map} +1 -1
  263. package/dist/{chunk-DAPZPT5N.cjs → chunk-ZBI52NP2.cjs} +13 -13
  264. package/dist/{chunk-DAPZPT5N.cjs.map → chunk-ZBI52NP2.cjs.map} +1 -1
  265. package/dist/{chunk-4Z6ZZKIY.js → chunk-ZIUADGAR.js} +3 -3
  266. package/dist/{chunk-4Z6ZZKIY.js.map → chunk-ZIUADGAR.js.map} +1 -1
  267. package/dist/{chunk-LOTMAKUG.cjs → chunk-ZZJ4ZVYR.cjs} +11 -11
  268. package/dist/{chunk-LOTMAKUG.cjs.map → chunk-ZZJ4ZVYR.cjs.map} +1 -1
  269. package/dist/collabKit-QZL4P5T5.js +48 -0
  270. package/dist/collabKit-QZL4P5T5.js.map +1 -0
  271. package/dist/collabKit-UF7E6V3N.cjs +72 -0
  272. package/dist/collabKit-UF7E6V3N.cjs.map +1 -0
  273. package/dist/components/Alert/index.cjs +6 -6
  274. package/dist/components/Alert/index.js +2 -2
  275. package/dist/components/AlertDialog/index.cjs +5 -5
  276. package/dist/components/AlertDialog/index.js +4 -4
  277. package/dist/components/AudioPlayer/index.cjs +7 -7
  278. package/dist/components/AudioPlayer/index.js +2 -2
  279. package/dist/components/AudioRecorder/index.cjs +7 -7
  280. package/dist/components/AudioRecorder/index.js +2 -2
  281. package/dist/components/Autocomplete/index.cjs +5 -5
  282. package/dist/components/Autocomplete/index.js +4 -4
  283. package/dist/components/Avatar/index.cjs +6 -6
  284. package/dist/components/Avatar/index.js +2 -2
  285. package/dist/components/Badge/index.cjs +4 -4
  286. package/dist/components/Badge/index.js +2 -2
  287. package/dist/components/Breadcrumb/index.cjs +4 -4
  288. package/dist/components/Breadcrumb/index.js +2 -2
  289. package/dist/components/Button/index.cjs +4 -4
  290. package/dist/components/Button/index.js +2 -2
  291. package/dist/components/Card/index.cjs +16 -16
  292. package/dist/components/Card/index.d.cts +8 -3
  293. package/dist/components/Card/index.d.ts +8 -3
  294. package/dist/components/Card/index.js +2 -2
  295. package/dist/components/Checkbox/index.cjs +5 -5
  296. package/dist/components/Checkbox/index.js +2 -2
  297. package/dist/components/CollabStatus/index.cjs +21 -0
  298. package/dist/components/CollabStatus/index.cjs.map +1 -0
  299. package/dist/components/CollabStatus/index.d.cts +222 -0
  300. package/dist/components/CollabStatus/index.d.ts +222 -0
  301. package/dist/components/CollabStatus/index.js +4 -0
  302. package/dist/components/CollabStatus/index.js.map +1 -0
  303. package/dist/components/Collapsible/index.cjs +5 -5
  304. package/dist/components/Collapsible/index.js +2 -2
  305. package/dist/components/CountryCodeDropdown/index.cjs +6 -6
  306. package/dist/components/CountryCodeDropdown/index.js +3 -3
  307. package/dist/components/DateInput/index.cjs +5 -5
  308. package/dist/components/DateInput/index.d.cts +3 -1
  309. package/dist/components/DateInput/index.d.ts +3 -1
  310. package/dist/components/DateInput/index.js +4 -4
  311. package/dist/components/Dropdown/index.cjs +10 -10
  312. package/dist/components/Dropdown/index.d.cts +1 -1
  313. package/dist/components/Dropdown/index.d.ts +1 -1
  314. package/dist/components/Dropdown/index.js +4 -4
  315. package/dist/components/FloatingWindow/index.cjs +5 -5
  316. package/dist/components/FloatingWindow/index.js +3 -3
  317. package/dist/components/Input/index.cjs +4 -4
  318. package/dist/components/Input/index.js +2 -2
  319. package/dist/components/Label/index.cjs +4 -4
  320. package/dist/components/Label/index.js +2 -2
  321. package/dist/components/Markdown/index.cjs +17 -17
  322. package/dist/components/Markdown/index.js +8 -8
  323. package/dist/components/MediaEditor/index.cjs +16 -16
  324. package/dist/components/MediaEditor/index.d.cts +34 -1
  325. package/dist/components/MediaEditor/index.d.ts +34 -1
  326. package/dist/components/MediaEditor/index.js +11 -11
  327. package/dist/components/MediaPlayer/index.cjs +6 -6
  328. package/dist/components/MediaPlayer/index.js +3 -3
  329. package/dist/components/Modal/index.cjs +10 -10
  330. package/dist/components/Modal/index.js +2 -2
  331. package/dist/components/Pagination/index.cjs +5 -5
  332. package/dist/components/Pagination/index.js +2 -2
  333. package/dist/components/PhoneInput/index.cjs +5 -5
  334. package/dist/components/PhoneInput/index.js +3 -3
  335. package/dist/components/Progress/index.cjs +7 -7
  336. package/dist/components/Progress/index.js +2 -2
  337. package/dist/components/QuickAction/index.cjs +7 -7
  338. package/dist/components/QuickAction/index.js +2 -2
  339. package/dist/components/Radio/index.cjs +5 -5
  340. package/dist/components/Radio/index.js +2 -2
  341. package/dist/components/RecordButton/index.cjs +5 -5
  342. package/dist/components/RecordButton/index.js +2 -2
  343. package/dist/components/RichTextEditor/index.cjs +10 -10
  344. package/dist/components/RichTextEditor/index.js +7 -7
  345. package/dist/components/SchedulePicker/index.cjs +11 -11
  346. package/dist/components/SchedulePicker/index.js +2 -2
  347. package/dist/components/ScrollArea/index.cjs +4 -4
  348. package/dist/components/ScrollArea/index.js +2 -2
  349. package/dist/components/Select/index.cjs +5 -5
  350. package/dist/components/Select/index.js +3 -3
  351. package/dist/components/Separator/index.cjs +4 -4
  352. package/dist/components/Separator/index.js +2 -2
  353. package/dist/components/Sheet/index.cjs +11 -11
  354. package/dist/components/Sheet/index.d.cts +1 -1
  355. package/dist/components/Sheet/index.d.ts +1 -1
  356. package/dist/components/Sheet/index.js +2 -2
  357. package/dist/components/Skeleton/index.cjs +7 -7
  358. package/dist/components/Skeleton/index.js +2 -2
  359. package/dist/components/Slider/index.cjs +6 -6
  360. package/dist/components/Slider/index.js +2 -2
  361. package/dist/components/Spinner/index.cjs +6 -6
  362. package/dist/components/Spinner/index.js +2 -2
  363. package/dist/components/SuperChat/index.cjs +46 -46
  364. package/dist/components/SuperChat/index.d.cts +4 -4
  365. package/dist/components/SuperChat/index.d.ts +4 -4
  366. package/dist/components/SuperChat/index.js +9 -9
  367. package/dist/components/SuperChat/plugins/index.cjs +10 -10
  368. package/dist/components/SuperChat/plugins/index.d.cts +3 -3
  369. package/dist/components/SuperChat/plugins/index.d.ts +3 -3
  370. package/dist/components/SuperChat/plugins/index.js +4 -4
  371. package/dist/components/Switch/index.cjs +5 -5
  372. package/dist/components/Switch/index.js +2 -2
  373. package/dist/components/Table/index.cjs +10 -10
  374. package/dist/components/Table/index.js +2 -2
  375. package/dist/components/Tabs/index.cjs +8 -8
  376. package/dist/components/Tabs/index.js +2 -2
  377. package/dist/components/Text/index.cjs +5 -5
  378. package/dist/components/Text/index.d.cts +1 -1
  379. package/dist/components/Text/index.d.ts +1 -1
  380. package/dist/components/Text/index.js +2 -2
  381. package/dist/components/Textarea/index.cjs +4 -4
  382. package/dist/components/Textarea/index.js +2 -2
  383. package/dist/components/ThemeProvider/index.cjs +9 -9
  384. package/dist/components/ThemeProvider/index.js +3 -3
  385. package/dist/components/Toggle/index.cjs +4 -4
  386. package/dist/components/Toggle/index.js +2 -2
  387. package/dist/components/Tooltip/index.cjs +3 -3
  388. package/dist/components/Tooltip/index.js +2 -2
  389. package/dist/datavis.cjs +7 -7
  390. package/dist/datavis.js +3 -3
  391. package/dist/esheet.cjs +18 -18
  392. package/dist/esheet.js +15 -15
  393. package/dist/hooks/index.cjs +34 -22
  394. package/dist/hooks/index.d.cts +31 -3
  395. package/dist/hooks/index.d.ts +31 -3
  396. package/dist/hooks/index.js +3 -3
  397. package/dist/index.cjs +3481 -1875
  398. package/dist/index.cjs.map +1 -1
  399. package/dist/index.d.cts +245 -22
  400. package/dist/index.d.ts +245 -22
  401. package/dist/index.js +976 -124
  402. package/dist/index.js.map +1 -1
  403. package/dist/kerebron.cjs +60 -17
  404. package/dist/kerebron.cjs.map +1 -1
  405. package/dist/kerebron.d.cts +39 -1
  406. package/dist/kerebron.d.ts +39 -1
  407. package/dist/kerebron.js +60 -17
  408. package/dist/kerebron.js.map +1 -1
  409. package/dist/styles.css +1 -1
  410. package/dist/tailwind-preset.cjs +4 -4
  411. package/dist/tailwind-preset.js +1 -1
  412. package/dist/{types-BYnLjEFg.d.ts → types-B2RLmdVd.d.cts} +3 -1
  413. package/dist/{types-BYnLjEFg.d.cts → types-B2RLmdVd.d.ts} +3 -1
  414. package/dist/{types-CyCwYBlr.d.ts → types-BoTeTPdH.d.ts} +1 -1
  415. package/dist/{types-CBh8Zlje.d.cts → types-DyIB9HYT.d.cts} +1 -1
  416. package/dist/{useAnchoredPosition-nXdSFKHf.d.cts → useAnchoredPosition-C7PNglzD.d.cts} +6 -2
  417. package/dist/{useAnchoredPosition-nXdSFKHf.d.ts → useAnchoredPosition-C7PNglzD.d.ts} +6 -2
  418. package/dist/{useTranscriptEdits-Hy0Vm-H8.d.cts → useTranscriptEdits-CGzlemHT.d.cts} +16 -3
  419. package/dist/{useTranscriptEdits-C2BbMU37.d.ts → useTranscriptEdits-D32bLs0l.d.ts} +16 -3
  420. package/dist/utils/index.cjs +15 -11
  421. package/dist/utils/index.d.cts +6 -1
  422. package/dist/utils/index.d.ts +6 -1
  423. package/dist/utils/index.js +2 -2
  424. package/package.json +30 -12
  425. package/dist/CsvBlock-2A5VEDD3.cjs +0 -15
  426. package/dist/CsvBlock-D6PWAJ5X.js +0 -6
  427. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +0 -6
  428. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +0 -15
  429. package/dist/MermaidBlock-7NK3AVK2.js +0 -6
  430. package/dist/MermaidBlock-AFXNP5NK.cjs +0 -15
  431. package/dist/SurveyBlock-6KRNKFH5.cjs +0 -15
  432. package/dist/SurveyBlock-NNDGXGG4.js +0 -6
  433. package/dist/chunk-43GBCUSQ.js.map +0 -1
  434. package/dist/chunk-4GXECTPS.cjs.map +0 -1
  435. package/dist/chunk-4LVPQ44A.js.map +0 -1
  436. package/dist/chunk-5BQE6BEL.js.map +0 -1
  437. package/dist/chunk-6D5F7EDM.js.map +0 -1
  438. package/dist/chunk-7VF6WO7H.cjs.map +0 -1
  439. package/dist/chunk-A2QVQF54.cjs.map +0 -1
  440. package/dist/chunk-DHKYGVP7.js +0 -3
  441. package/dist/chunk-F3SOEIN2.js +0 -11
  442. package/dist/chunk-F3SOEIN2.js.map +0 -1
  443. package/dist/chunk-FCBQP2U4.cjs.map +0 -1
  444. package/dist/chunk-IHTRKWBG.js.map +0 -1
  445. package/dist/chunk-IWDQPSJN.cjs.map +0 -1
  446. package/dist/chunk-JLBT76WH.js.map +0 -1
  447. package/dist/chunk-KJ5BSGEO.cjs.map +0 -1
  448. package/dist/chunk-LJ2ZWIX6.js.map +0 -1
  449. package/dist/chunk-MCCO4A23.js.map +0 -1
  450. package/dist/chunk-NQME7MCK.js.map +0 -1
  451. package/dist/chunk-NVHAQOHH.cjs.map +0 -1
  452. package/dist/chunk-OOYEHBYJ.js.map +0 -1
  453. package/dist/chunk-OR5DRJCW.cjs +0 -13
  454. package/dist/chunk-OR5DRJCW.cjs.map +0 -1
  455. package/dist/chunk-PFWHWIXS.cjs.map +0 -1
  456. package/dist/chunk-PJAQDAMZ.cjs.map +0 -1
  457. package/dist/chunk-PWHK7SWN.cjs.map +0 -1
  458. package/dist/chunk-QA6ZDHFP.js.map +0 -1
  459. package/dist/chunk-QUUFKGDF.cjs.map +0 -1
  460. package/dist/chunk-UTYUT5YY.cjs +0 -240
  461. package/dist/chunk-ZDEYV373.cjs.map +0 -1
  462. package/dist/chunk-ZGSC2CB2.js.map +0 -1
  463. package/dist/chunk-ZHBANUBI.cjs.map +0 -1
  464. package/dist/chunk-ZVSW2KS6.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkKJPOFUF5_cjs = require('./chunk-KJPOFUF5.cjs');
4
- var chunkA2QVQF54_cjs = require('./chunk-A2QVQF54.cjs');
5
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
3
+ var chunkP2VTQ5AR_cjs = require('./chunk-P2VTQ5AR.cjs');
4
+ var chunkRDGRKYQ5_cjs = require('./chunk-RDGRKYQ5.cjs');
5
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
 
8
8
  function AlertDialog({
@@ -28,7 +28,7 @@ function AlertDialog({
28
28
  onAction?.();
29
29
  };
30
30
  return /* @__PURE__ */ jsxRuntime.jsxs(
31
- chunkKJPOFUF5_cjs.Modal,
31
+ chunkP2VTQ5AR_cjs.Modal,
32
32
  {
33
33
  open,
34
34
  onOpenChange,
@@ -38,7 +38,7 @@ function AlertDialog({
38
38
  className,
39
39
  "aria-label": typeof title === "string" ? title : void 0,
40
40
  children: [
41
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKJPOFUF5_cjs.ModalBody, { className: "px-6 py-5", children: [
41
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkP2VTQ5AR_cjs.ModalBody, { className: "px-6 py-5", children: [
42
42
  /* @__PURE__ */ jsxRuntime.jsx(
43
43
  "h2",
44
44
  {
@@ -51,16 +51,16 @@ function AlertDialog({
51
51
  "p",
52
52
  {
53
53
  "data-slot": "alert-dialog-description",
54
- className: chunkOR5DRJCW_cjs.cn("text-muted-foreground mt-2 text-sm"),
54
+ className: chunkS5RVSXDV_cjs.cn("text-muted-foreground mt-2 text-sm"),
55
55
  children: description
56
56
  }
57
57
  ),
58
58
  children
59
59
  ] }),
60
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKJPOFUF5_cjs.ModalFooter, { children: [
61
- !hideCancel && /* @__PURE__ */ jsxRuntime.jsx(chunkA2QVQF54_cjs.Button, { variant: "secondary", onClick: handleCancel, children: cancelLabel }),
60
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkP2VTQ5AR_cjs.ModalFooter, { children: [
61
+ !hideCancel && /* @__PURE__ */ jsxRuntime.jsx(chunkRDGRKYQ5_cjs.Button, { variant: "secondary", onClick: handleCancel, children: cancelLabel }),
62
62
  /* @__PURE__ */ jsxRuntime.jsx(
63
- chunkA2QVQF54_cjs.Button,
63
+ chunkRDGRKYQ5_cjs.Button,
64
64
  {
65
65
  variant: variant === "destructive" ? "danger" : "primary",
66
66
  onClick: handleAction,
@@ -76,5 +76,5 @@ function AlertDialog({
76
76
  AlertDialog.displayName = "AlertDialog";
77
77
 
78
78
  exports.AlertDialog = AlertDialog;
79
- //# sourceMappingURL=chunk-6ZYE6JUK.cjs.map
80
- //# sourceMappingURL=chunk-6ZYE6JUK.cjs.map
79
+ //# sourceMappingURL=chunk-TVLZZI5Q.cjs.map
80
+ //# sourceMappingURL=chunk-TVLZZI5Q.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/AlertDialog/AlertDialog.tsx"],"names":["jsxs","Modal","ModalBody","jsx","cn","ModalFooter","Button"],"mappings":";;;;;;;AAqDA,SAAS,WAAA,CAAY;AAAA,EACnB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,WAAA,GAAc,UAAA;AAAA,EACd,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,cAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,IAAW;AACX,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,IAAW;AAAA,EACb,CAAA;AAEA,EAAA,uBACEA,eAAA;AAAA,IAACC,uBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,mBAAA,EAAqB,KAAA;AAAA,MACrB,aAAA,EAAe,KAAA;AAAA,MACf,SAAA;AAAA,MACA,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAAA,MAEhD,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAACE,2BAAA,EAAA,EAAU,WAAU,WAAA,EACnB,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,oBAAA;AAAA,cACV,SAAA,EAAU,sCAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UACC,WAAA,oBACCA,cAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,0BAAA;AAAA,cACV,SAAA,EAAWC,qBAAG,oCAAoC,CAAA;AAAA,cAEjD,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAED;AAAA,SAAA,EACH,CAAA;AAAA,wCACCC,6BAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,CAAC,8BACAF,cAAA,CAACG,wBAAA,EAAA,EAAO,SAAQ,WAAA,EAAY,OAAA,EAAS,cAClC,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,0BAEFH,cAAA;AAAA,YAACG,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,OAAA,KAAY,aAAA,GAAgB,QAAA,GAAW,SAAA;AAAA,cAChD,OAAA,EAAS,YAAA;AAAA,cACT,QAAA,EAAU,cAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA;AACH,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-6ZYE6JUK.cjs","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Modal, ModalBody, ModalFooter, type ModalProps } from '../Modal';\nimport { Button } from '../Button';\n\nexport interface AlertDialogProps extends Pick<\n ModalProps,\n 'open' | 'onOpenChange'\n> {\n /** Dialog title */\n title: React.ReactNode;\n /** Optional descriptive body text */\n description?: React.ReactNode;\n /** Custom body content (rendered below the description) */\n children?: React.ReactNode;\n /** Label for the cancel button (default \"Cancel\") */\n cancelLabel?: React.ReactNode;\n /** Label for the confirm/action button (default \"Continue\") */\n actionLabel?: React.ReactNode;\n /** Called when the action button is clicked */\n onAction?: () => void;\n /** Called when the cancel button is clicked */\n onCancel?: () => void;\n /** Visual emphasis for the action button */\n variant?: 'default' | 'destructive';\n /** Disables the action button */\n actionDisabled?: boolean;\n /** Hides the cancel button */\n hideCancel?: boolean;\n /** Additional class name for the dialog content */\n className?: string;\n}\n\n/**\n * A modal dialog that interrupts the user with important content and expects\n * a response. Built on top of {@link Modal}.\n *\n * Unlike a regular Modal, it does not close on overlay click or Escape by\n * default — the user must explicitly choose an action.\n *\n * @example\n * ```tsx\n * <AlertDialog\n * open={open}\n * onOpenChange={setOpen}\n * title=\"Delete case?\"\n * description=\"This action cannot be undone.\"\n * variant=\"destructive\"\n * actionLabel=\"Delete\"\n * onAction={handleDelete}\n * />\n * ```\n */\nfunction AlertDialog({\n open,\n onOpenChange,\n title,\n description,\n children,\n cancelLabel = 'Cancel',\n actionLabel = 'Continue',\n onAction,\n onCancel,\n variant = 'default',\n actionDisabled,\n hideCancel,\n className,\n}: AlertDialogProps) {\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleAction = () => {\n onAction?.();\n };\n\n return (\n <Modal\n open={open}\n onOpenChange={onOpenChange}\n size=\"sm\"\n closeOnOverlayClick={false}\n closeOnEscape={false}\n className={className}\n aria-label={typeof title === 'string' ? title : undefined}\n >\n <ModalBody className=\"px-6 py-5\">\n <h2\n data-slot=\"alert-dialog-title\"\n className=\"text-lg font-semibold tracking-tight\"\n >\n {title}\n </h2>\n {description && (\n <p\n data-slot=\"alert-dialog-description\"\n className={cn('text-muted-foreground mt-2 text-sm')}\n >\n {description}\n </p>\n )}\n {children}\n </ModalBody>\n <ModalFooter>\n {!hideCancel && (\n <Button variant=\"secondary\" onClick={handleCancel}>\n {cancelLabel}\n </Button>\n )}\n <Button\n variant={variant === 'destructive' ? 'danger' : 'primary'}\n onClick={handleAction}\n disabled={actionDisabled}\n >\n {actionLabel}\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n\nAlertDialog.displayName = 'AlertDialog';\n\nexport { AlertDialog };\n"]}
1
+ {"version":3,"sources":["../src/components/AlertDialog/AlertDialog.tsx"],"names":["jsxs","Modal","ModalBody","jsx","cn","ModalFooter","Button"],"mappings":";;;;;;;AAqDA,SAAS,WAAA,CAAY;AAAA,EACnB,IAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,WAAA,GAAc,UAAA;AAAA,EACd,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,cAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,IAAW;AACX,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,QAAA,IAAW;AAAA,EACb,CAAA;AAEA,EAAA,uBACEA,eAAA;AAAA,IAACC,uBAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,YAAA;AAAA,MACA,IAAA,EAAK,IAAA;AAAA,MACL,mBAAA,EAAqB,KAAA;AAAA,MACrB,aAAA,EAAe,KAAA;AAAA,MACf,SAAA;AAAA,MACA,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,MAAA;AAAA,MAEhD,QAAA,EAAA;AAAA,wBAAAD,eAAA,CAACE,2BAAA,EAAA,EAAU,WAAU,WAAA,EACnB,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,oBAAA;AAAA,cACV,SAAA,EAAU,sCAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UACC,WAAA,oBACCA,cAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,WAAA,EAAU,0BAAA;AAAA,cACV,SAAA,EAAWC,qBAAG,oCAAoC,CAAA;AAAA,cAEjD,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAED;AAAA,SAAA,EACH,CAAA;AAAA,wCACCC,6BAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,CAAC,8BACAF,cAAA,CAACG,wBAAA,EAAA,EAAO,SAAQ,WAAA,EAAY,OAAA,EAAS,cAClC,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,0BAEFH,cAAA;AAAA,YAACG,wBAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,OAAA,KAAY,aAAA,GAAgB,QAAA,GAAW,SAAA;AAAA,cAChD,OAAA,EAAS,YAAA;AAAA,cACT,QAAA,EAAU,cAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA;AACH,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-TVLZZI5Q.cjs","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Modal, ModalBody, ModalFooter, type ModalProps } from '../Modal';\nimport { Button } from '../Button';\n\nexport interface AlertDialogProps extends Pick<\n ModalProps,\n 'open' | 'onOpenChange'\n> {\n /** Dialog title */\n title: React.ReactNode;\n /** Optional descriptive body text */\n description?: React.ReactNode;\n /** Custom body content (rendered below the description) */\n children?: React.ReactNode;\n /** Label for the cancel button (default \"Cancel\") */\n cancelLabel?: React.ReactNode;\n /** Label for the confirm/action button (default \"Continue\") */\n actionLabel?: React.ReactNode;\n /** Called when the action button is clicked */\n onAction?: () => void;\n /** Called when the cancel button is clicked */\n onCancel?: () => void;\n /** Visual emphasis for the action button */\n variant?: 'default' | 'destructive';\n /** Disables the action button */\n actionDisabled?: boolean;\n /** Hides the cancel button */\n hideCancel?: boolean;\n /** Additional class name for the dialog content */\n className?: string;\n}\n\n/**\n * A modal dialog that interrupts the user with important content and expects\n * a response. Built on top of {@link Modal}.\n *\n * Unlike a regular Modal, it does not close on overlay click or Escape by\n * default — the user must explicitly choose an action.\n *\n * @example\n * ```tsx\n * <AlertDialog\n * open={open}\n * onOpenChange={setOpen}\n * title=\"Delete case?\"\n * description=\"This action cannot be undone.\"\n * variant=\"destructive\"\n * actionLabel=\"Delete\"\n * onAction={handleDelete}\n * />\n * ```\n */\nfunction AlertDialog({\n open,\n onOpenChange,\n title,\n description,\n children,\n cancelLabel = 'Cancel',\n actionLabel = 'Continue',\n onAction,\n onCancel,\n variant = 'default',\n actionDisabled,\n hideCancel,\n className,\n}: AlertDialogProps) {\n const handleCancel = () => {\n onCancel?.();\n onOpenChange(false);\n };\n\n const handleAction = () => {\n onAction?.();\n };\n\n return (\n <Modal\n open={open}\n onOpenChange={onOpenChange}\n size=\"sm\"\n closeOnOverlayClick={false}\n closeOnEscape={false}\n className={className}\n aria-label={typeof title === 'string' ? title : undefined}\n >\n <ModalBody className=\"px-6 py-5\">\n <h2\n data-slot=\"alert-dialog-title\"\n className=\"text-lg font-semibold tracking-tight\"\n >\n {title}\n </h2>\n {description && (\n <p\n data-slot=\"alert-dialog-description\"\n className={cn('text-muted-foreground mt-2 text-sm')}\n >\n {description}\n </p>\n )}\n {children}\n </ModalBody>\n <ModalFooter>\n {!hideCancel && (\n <Button variant=\"secondary\" onClick={handleCancel}>\n {cancelLabel}\n </Button>\n )}\n <Button\n variant={variant === 'destructive' ? 'danger' : 'primary'}\n onClick={handleAction}\n disabled={actionDisabled}\n >\n {actionLabel}\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n\nAlertDialog.displayName = 'AlertDialog';\n\nexport { AlertDialog };\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
3
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
4
4
  var React = require('react');
5
5
  var classVarianceAuthority = require('class-variance-authority');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -67,7 +67,7 @@ var Avatar = React__namespace.forwardRef(
67
67
  {
68
68
  ref,
69
69
  "data-slot": "avatar",
70
- className: chunkOR5DRJCW_cjs.cn(avatarVariants({ size, ring }), className),
70
+ className: chunkS5RVSXDV_cjs.cn(avatarVariants({ size, ring }), className),
71
71
  ...props,
72
72
  children: showImage ? /* @__PURE__ */ jsxRuntime.jsx(
73
73
  "img",
@@ -102,7 +102,7 @@ var AvatarGroup = React__namespace.forwardRef(
102
102
  {
103
103
  ref,
104
104
  "data-slot": "avatar-group",
105
- className: chunkOR5DRJCW_cjs.cn("flex -space-x-2", className),
105
+ className: chunkS5RVSXDV_cjs.cn("flex -space-x-2", className),
106
106
  ...props,
107
107
  children: [
108
108
  visibleChildren.map((child, index) => {
@@ -112,7 +112,7 @@ var AvatarGroup = React__namespace.forwardRef(
112
112
  {
113
113
  key: index,
114
114
  size,
115
- className: chunkOR5DRJCW_cjs.cn(
115
+ className: chunkS5RVSXDV_cjs.cn(
116
116
  "ring-2 ring-white dark:ring-neutral-900",
117
117
  child.props.className
118
118
  )
@@ -124,7 +124,7 @@ var AvatarGroup = React__namespace.forwardRef(
124
124
  remainingCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
125
125
  "div",
126
126
  {
127
- className: chunkOR5DRJCW_cjs.cn(
127
+ className: chunkS5RVSXDV_cjs.cn(
128
128
  avatarVariants({ size }),
129
129
  "bg-neutral-200 text-neutral-600 dark:bg-neutral-700 dark:text-neutral-300",
130
130
  "ring-2 ring-white dark:ring-neutral-900"
@@ -146,5 +146,5 @@ exports.Avatar = Avatar;
146
146
  exports.AvatarGroup = AvatarGroup;
147
147
  exports.avatarVariants = avatarVariants;
148
148
  exports.getInitials = getInitials;
149
- //# sourceMappingURL=chunk-FQ3UCZUX.cjs.map
150
- //# sourceMappingURL=chunk-FQ3UCZUX.cjs.map
149
+ //# sourceMappingURL=chunk-U3JU6BI5.cjs.map
150
+ //# sourceMappingURL=chunk-U3JU6BI5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Avatar/Avatar.tsx"],"names":["cva","React","jsx","cn","jsxs"],"mappings":"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","file":"chunk-FQ3UCZUX.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Avatar Component\n// ============================================================================\n\nconst avatarVariants = cva(\n [\n 'relative inline-flex items-center justify-center',\n 'rounded-full overflow-hidden',\n 'bg-primary-800 text-white font-semibold',\n ],\n {\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n xl: 'h-16 w-16 text-lg',\n },\n ring: {\n true: 'ring-2 ring-primary-400/30',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n ring: false,\n },\n }\n);\n\nexport interface AvatarProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof avatarVariants> {\n /** Image URL for the avatar */\n src?: string | null;\n /** Alt text for the avatar image */\n alt?: string;\n /** Name to generate initials from (used as fallback when no src) */\n name?: string;\n /** Custom fallback content (overrides name initials) */\n fallback?: React.ReactElement | null;\n}\n\n/**\n * Get initials from a name string.\n */\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n}\n\n/**\n * An avatar component for displaying user profile images with fallback to initials.\n *\n * @example\n * ```tsx\n * // With image\n * <Avatar src=\"/user.jpg\" alt=\"John Doe\" />\n *\n * // With initials fallback\n * <Avatar name=\"John Doe\" />\n *\n * // With custom fallback\n * <Avatar fallback={<UserIcon />} />\n * ```\n */\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, src, alt, name, fallback, size, ring, ...props }, ref) => {\n const [imageError, setImageError] = React.useState(false);\n\n // Reset error state when src changes\n React.useEffect(() => {\n setImageError(false);\n }, [src]);\n\n const showImage = src && !imageError;\n const initials = name ? getInitials(name) : null;\n\n return (\n <div\n ref={ref}\n data-slot=\"avatar\"\n className={cn(avatarVariants({ size, ring }), className)}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt !== undefined ? alt : name || 'Avatar'}\n className=\"h-full w-full object-cover\"\n onError={() => setImageError(true)}\n />\n ) : React.isValidElement(fallback) ? (\n fallback\n ) : initials ? (\n initials\n ) : (\n <svg\n aria-hidden=\"true\"\n className=\"h-[60%] w-[60%] text-white/80\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n\n// ============================================================================\n// Avatar Group Component\n// ============================================================================\n\nexport interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Maximum number of avatars to show before +N indicator */\n max?: number;\n /** Size of avatars in the group */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Children should be Avatar components */\n children: React.ReactNode;\n}\n\n/**\n * A component for displaying a group of overlapping avatars.\n *\n * @example\n * ```tsx\n * <AvatarGroup max={3}>\n * <Avatar name=\"John Doe\" />\n * <Avatar name=\"Jane Smith\" />\n * <Avatar name=\"Bob Wilson\" />\n * <Avatar name=\"Alice Brown\" />\n * </AvatarGroup>\n * ```\n */\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, max, size = 'md', children, ...props }, ref) => {\n const childrenArray = React.Children.toArray(children);\n const visibleChildren = max ? childrenArray.slice(0, max) : childrenArray;\n const remainingCount = max ? Math.max(0, childrenArray.length - max) : 0;\n\n return (\n <div\n ref={ref}\n data-slot=\"avatar-group\"\n className={cn('flex -space-x-2', className)}\n {...props}\n >\n {visibleChildren.map((child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(\n child as React.ReactElement<AvatarProps>,\n {\n key: index,\n size,\n className: cn(\n 'ring-2 ring-white dark:ring-neutral-900',\n (child as React.ReactElement<AvatarProps>).props.className\n ),\n }\n );\n }\n return child;\n })}\n {remainingCount > 0 && (\n <div\n className={cn(\n avatarVariants({ size }),\n 'bg-neutral-200 text-neutral-600 dark:bg-neutral-700 dark:text-neutral-300',\n 'ring-2 ring-white dark:ring-neutral-900'\n )}\n >\n +{remainingCount}\n </div>\n )}\n </div>\n );\n }\n);\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nexport { Avatar, AvatarGroup, avatarVariants, getInitials };\n"]}
1
+ {"version":3,"sources":["../src/components/Avatar/Avatar.tsx"],"names":["cva","React","jsx","cn","jsxs"],"mappings":"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","file":"chunk-U3JU6BI5.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// Avatar Component\n// ============================================================================\n\nconst avatarVariants = cva(\n [\n 'relative inline-flex items-center justify-center',\n 'rounded-full overflow-hidden',\n 'bg-primary-800 text-white font-semibold',\n ],\n {\n variants: {\n size: {\n xs: 'h-6 w-6 text-xs',\n sm: 'h-8 w-8 text-sm',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n xl: 'h-16 w-16 text-lg',\n },\n ring: {\n true: 'ring-2 ring-primary-400/30',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n ring: false,\n },\n }\n);\n\nexport interface AvatarProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof avatarVariants> {\n /** Image URL for the avatar */\n src?: string | null;\n /** Alt text for the avatar image */\n alt?: string;\n /** Name to generate initials from (used as fallback when no src) */\n name?: string;\n /** Custom fallback content (overrides name initials) */\n fallback?: React.ReactElement | null;\n}\n\n/**\n * Get initials from a name string.\n */\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n}\n\n/**\n * An avatar component for displaying user profile images with fallback to initials.\n *\n * @example\n * ```tsx\n * // With image\n * <Avatar src=\"/user.jpg\" alt=\"John Doe\" />\n *\n * // With initials fallback\n * <Avatar name=\"John Doe\" />\n *\n * // With custom fallback\n * <Avatar fallback={<UserIcon />} />\n * ```\n */\nconst Avatar = React.forwardRef<HTMLDivElement, AvatarProps>(\n ({ className, src, alt, name, fallback, size, ring, ...props }, ref) => {\n const [imageError, setImageError] = React.useState(false);\n\n // Reset error state when src changes\n React.useEffect(() => {\n setImageError(false);\n }, [src]);\n\n const showImage = src && !imageError;\n const initials = name ? getInitials(name) : null;\n\n return (\n <div\n ref={ref}\n data-slot=\"avatar\"\n className={cn(avatarVariants({ size, ring }), className)}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt !== undefined ? alt : name || 'Avatar'}\n className=\"h-full w-full object-cover\"\n onError={() => setImageError(true)}\n />\n ) : React.isValidElement(fallback) ? (\n fallback\n ) : initials ? (\n initials\n ) : (\n <svg\n aria-hidden=\"true\"\n className=\"h-[60%] w-[60%] text-white/80\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n )}\n </div>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n\n// ============================================================================\n// Avatar Group Component\n// ============================================================================\n\nexport interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Maximum number of avatars to show before +N indicator */\n max?: number;\n /** Size of avatars in the group */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** Children should be Avatar components */\n children: React.ReactNode;\n}\n\n/**\n * A component for displaying a group of overlapping avatars.\n *\n * @example\n * ```tsx\n * <AvatarGroup max={3}>\n * <Avatar name=\"John Doe\" />\n * <Avatar name=\"Jane Smith\" />\n * <Avatar name=\"Bob Wilson\" />\n * <Avatar name=\"Alice Brown\" />\n * </AvatarGroup>\n * ```\n */\nconst AvatarGroup = React.forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ className, max, size = 'md', children, ...props }, ref) => {\n const childrenArray = React.Children.toArray(children);\n const visibleChildren = max ? childrenArray.slice(0, max) : childrenArray;\n const remainingCount = max ? Math.max(0, childrenArray.length - max) : 0;\n\n return (\n <div\n ref={ref}\n data-slot=\"avatar-group\"\n className={cn('flex -space-x-2', className)}\n {...props}\n >\n {visibleChildren.map((child, index) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(\n child as React.ReactElement<AvatarProps>,\n {\n key: index,\n size,\n className: cn(\n 'ring-2 ring-white dark:ring-neutral-900',\n (child as React.ReactElement<AvatarProps>).props.className\n ),\n }\n );\n }\n return child;\n })}\n {remainingCount > 0 && (\n <div\n className={cn(\n avatarVariants({ size }),\n 'bg-neutral-200 text-neutral-600 dark:bg-neutral-700 dark:text-neutral-300',\n 'ring-2 ring-white dark:ring-neutral-900'\n )}\n >\n +{remainingCount}\n </div>\n )}\n </div>\n );\n }\n);\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nexport { Avatar, AvatarGroup, avatarVariants, getInitials };\n"]}
@@ -1,4 +1,4 @@
1
- import { cn } from './chunk-F3SOEIN2.js';
1
+ import { cn } from './chunk-TQONQSJO.js';
2
2
  import { cva } from 'class-variance-authority';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
@@ -110,5 +110,5 @@ function FullPageSpinner({
110
110
  FullPageSpinner.displayName = "FullPageSpinner";
111
111
 
112
112
  export { FullPageSpinner, Spinner, SpinnerWithLabel, spinnerVariants };
113
- //# sourceMappingURL=chunk-VCO2IZOG.js.map
114
- //# sourceMappingURL=chunk-VCO2IZOG.js.map
113
+ //# sourceMappingURL=chunk-UA7E7PDS.js.map
114
+ //# sourceMappingURL=chunk-UA7E7PDS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Spinner/Spinner.tsx"],"names":[],"mappings":";;;;AAIA,IAAM,eAAA,GAAkB,GAAA;AAAA,EACtB,CAAC,wEAAwE,CAAA;AAAA,EACzE;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA,OACN;AAAA,MACA,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,kBAAA;AAAA,QACT,KAAA,EAAO,uBAAA;AAAA,QACP,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX;AAEJ;AAoBA,SAAS,OAAA,CAAQ;AAAA,EACf,SAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,GAAG,eAAA,CAAgB,EAAE,MAAM,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,GACnC;AAEJ;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA;AAsBtB,SAAS,gBAAA,CAAiB;AAAA,EACxB,KAAA;AAAA,EACA,aAAA,GAAgB,QAAA;AAAA,EAChB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,GAAA,EAAK,kBAAA;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,IAAA,EAAM,kBAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,+CAAA;AAAA,QACA,gBAAgB,aAAa,CAAA;AAAA,QAC7B;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,SAAA;AAAA,YACV,WAAW,EAAA,CAAG,eAAA,CAAgB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAC,CAAA;AAAA,YAChD,aAAA,EAAY;AAAA;AAAA,SACd;AAAA,4BACC,MAAA,EAAA,EAAK,WAAA,EAAU,eAAA,EAAgB,SAAA,EAAU,iCACvC,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AAsB/B,SAAS,eAAA,CAAgB;AAAA,EACvB,QAAA,GAAW,IAAA;AAAA,EACX,IAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAyB;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA,QAAA,IAAY;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AAAA,QAC/B,wBACC,GAAA,CAAC,GAAA,EAAA,EAAE,aAAU,eAAA,EAAgB,SAAA,EAAU,iCACpC,QAAA,EAAA,IAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA","file":"chunk-VCO2IZOG.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst spinnerVariants = cva(\n ['animate-spin rounded-full border-2 border-current border-t-transparent'],\n {\n variants: {\n size: {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-8 w-8',\n xl: 'h-12 w-12',\n },\n variant: {\n default: 'text-primary-800',\n muted: 'text-muted-foreground',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nexport interface SpinnerProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof spinnerVariants> {\n /** Accessible label for the spinner */\n label?: string;\n}\n\n/**\n * A loading spinner component.\n *\n * @example\n * ```tsx\n * <Spinner />\n * <Spinner size=\"lg\" label=\"Loading data...\" />\n * <Spinner variant=\"white\" /> // For use on dark backgrounds\n * ```\n */\nfunction Spinner({\n className,\n size,\n variant,\n label = 'Loading',\n ...props\n}: SpinnerProps) {\n return (\n <div\n data-slot=\"spinner\"\n role=\"status\"\n aria-label={label}\n className={cn(spinnerVariants({ size, variant }), className)}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n\nSpinner.displayName = 'Spinner';\n\n// ============================================================================\n// Spinner with Label\n// ============================================================================\n\nexport interface SpinnerWithLabelProps extends SpinnerProps {\n /** Label text to display */\n label: string;\n /** Position of the label */\n labelPosition?: 'top' | 'bottom' | 'left' | 'right';\n}\n\n/**\n * A spinner with a visible label.\n *\n * @example\n * ```tsx\n * <SpinnerWithLabel label=\"Loading...\" />\n * <SpinnerWithLabel label=\"Processing\" labelPosition=\"right\" />\n * ```\n */\nfunction SpinnerWithLabel({\n label,\n labelPosition = 'bottom',\n size,\n variant,\n className,\n ...props\n}: SpinnerWithLabelProps) {\n const positionClasses = {\n top: 'flex-col-reverse',\n bottom: 'flex-col',\n left: 'flex-row-reverse',\n right: 'flex-row',\n };\n\n return (\n <div\n data-slot=\"spinner-with-label\"\n role=\"status\"\n aria-label={label}\n className={cn(\n 'inline-flex items-center justify-center gap-2',\n positionClasses[labelPosition],\n className\n )}\n {...props}\n >\n <div\n data-slot=\"spinner\"\n className={cn(spinnerVariants({ size, variant }))}\n aria-hidden=\"true\"\n />\n <span data-slot=\"spinner-label\" className=\"text-muted-foreground text-sm\">\n {label}\n </span>\n </div>\n );\n}\n\nSpinnerWithLabel.displayName = 'SpinnerWithLabel';\n\n// ============================================================================\n// Full Page Spinner\n// ============================================================================\n\nexport interface FullPageSpinnerProps extends SpinnerProps {\n /** Whether to show a backdrop */\n backdrop?: boolean;\n /** Text to display below the spinner */\n text?: string;\n}\n\n/**\n * A full-page loading spinner with optional backdrop.\n *\n * @example\n * ```tsx\n * <FullPageSpinner />\n * <FullPageSpinner backdrop text=\"Loading your data...\" />\n * ```\n */\nfunction FullPageSpinner({\n backdrop = true,\n text,\n size = 'xl',\n ...props\n}: FullPageSpinnerProps) {\n return (\n <div\n data-slot=\"full-page-spinner\"\n className={cn(\n 'fixed inset-0 z-50 flex flex-col items-center justify-center gap-4',\n backdrop && 'bg-background/80 backdrop-blur-sm'\n )}\n >\n <Spinner size={size} {...props} />\n {text && (\n <p data-slot=\"spinner-label\" className=\"text-muted-foreground text-sm\">\n {text}\n </p>\n )}\n </div>\n );\n}\n\nFullPageSpinner.displayName = 'FullPageSpinner';\n\nexport { Spinner, SpinnerWithLabel, FullPageSpinner, spinnerVariants };\n"]}
1
+ {"version":3,"sources":["../src/components/Spinner/Spinner.tsx"],"names":[],"mappings":"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","file":"chunk-UA7E7PDS.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst spinnerVariants = cva(\n ['animate-spin rounded-full border-2 border-current border-t-transparent'],\n {\n variants: {\n size: {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-6 w-6',\n lg: 'h-8 w-8',\n xl: 'h-12 w-12',\n },\n variant: {\n default: 'text-primary-800',\n muted: 'text-muted-foreground',\n white: 'text-white',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nexport interface SpinnerProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof spinnerVariants> {\n /** Accessible label for the spinner */\n label?: string;\n}\n\n/**\n * A loading spinner component.\n *\n * @example\n * ```tsx\n * <Spinner />\n * <Spinner size=\"lg\" label=\"Loading data...\" />\n * <Spinner variant=\"white\" /> // For use on dark backgrounds\n * ```\n */\nfunction Spinner({\n className,\n size,\n variant,\n label = 'Loading',\n ...props\n}: SpinnerProps) {\n return (\n <div\n data-slot=\"spinner\"\n role=\"status\"\n aria-label={label}\n className={cn(spinnerVariants({ size, variant }), className)}\n {...props}\n >\n <span className=\"sr-only\">{label}</span>\n </div>\n );\n}\n\nSpinner.displayName = 'Spinner';\n\n// ============================================================================\n// Spinner with Label\n// ============================================================================\n\nexport interface SpinnerWithLabelProps extends SpinnerProps {\n /** Label text to display */\n label: string;\n /** Position of the label */\n labelPosition?: 'top' | 'bottom' | 'left' | 'right';\n}\n\n/**\n * A spinner with a visible label.\n *\n * @example\n * ```tsx\n * <SpinnerWithLabel label=\"Loading...\" />\n * <SpinnerWithLabel label=\"Processing\" labelPosition=\"right\" />\n * ```\n */\nfunction SpinnerWithLabel({\n label,\n labelPosition = 'bottom',\n size,\n variant,\n className,\n ...props\n}: SpinnerWithLabelProps) {\n const positionClasses = {\n top: 'flex-col-reverse',\n bottom: 'flex-col',\n left: 'flex-row-reverse',\n right: 'flex-row',\n };\n\n return (\n <div\n data-slot=\"spinner-with-label\"\n role=\"status\"\n aria-label={label}\n className={cn(\n 'inline-flex items-center justify-center gap-2',\n positionClasses[labelPosition],\n className\n )}\n {...props}\n >\n <div\n data-slot=\"spinner\"\n className={cn(spinnerVariants({ size, variant }))}\n aria-hidden=\"true\"\n />\n <span data-slot=\"spinner-label\" className=\"text-muted-foreground text-sm\">\n {label}\n </span>\n </div>\n );\n}\n\nSpinnerWithLabel.displayName = 'SpinnerWithLabel';\n\n// ============================================================================\n// Full Page Spinner\n// ============================================================================\n\nexport interface FullPageSpinnerProps extends SpinnerProps {\n /** Whether to show a backdrop */\n backdrop?: boolean;\n /** Text to display below the spinner */\n text?: string;\n}\n\n/**\n * A full-page loading spinner with optional backdrop.\n *\n * @example\n * ```tsx\n * <FullPageSpinner />\n * <FullPageSpinner backdrop text=\"Loading your data...\" />\n * ```\n */\nfunction FullPageSpinner({\n backdrop = true,\n text,\n size = 'xl',\n ...props\n}: FullPageSpinnerProps) {\n return (\n <div\n data-slot=\"full-page-spinner\"\n className={cn(\n 'fixed inset-0 z-50 flex flex-col items-center justify-center gap-4',\n backdrop && 'bg-background/80 backdrop-blur-sm'\n )}\n >\n <Spinner size={size} {...props} />\n {text && (\n <p data-slot=\"spinner-label\" className=\"text-muted-foreground text-sm\">\n {text}\n </p>\n )}\n </div>\n );\n}\n\nFullPageSpinner.displayName = 'FullPageSpinner';\n\nexport { Spinner, SpinnerWithLabel, FullPageSpinner, spinnerVariants };\n"]}
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkOXYFTCRW_cjs = require('./chunk-OXYFTCRW.cjs');
4
- var chunkMZPF2QGM_cjs = require('./chunk-MZPF2QGM.cjs');
5
- var chunkA2QVQF54_cjs = require('./chunk-A2QVQF54.cjs');
3
+ var chunkYP5T6NZD_cjs = require('./chunk-YP5T6NZD.cjs');
4
+ var chunkRBS3GHDZ_cjs = require('./chunk-RBS3GHDZ.cjs');
5
+ var chunkRDGRKYQ5_cjs = require('./chunk-RDGRKYQ5.cjs');
6
6
  var chunkC7RVKV25_cjs = require('./chunk-C7RVKV25.cjs');
7
- var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
7
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
8
8
  var React = require('react');
9
9
  var lucideReact = require('lucide-react');
10
10
  var jsxRuntime = require('react/jsx-runtime');
@@ -291,7 +291,7 @@ var RichTextEditor = React__namespace.forwardRef(
291
291
  "div",
292
292
  {
293
293
  "data-slot": "rich-text-editor",
294
- className: chunkOR5DRJCW_cjs.cn(
294
+ className: chunkS5RVSXDV_cjs.cn(
295
295
  "border-border bg-background flex flex-col overflow-hidden rounded-lg border",
296
296
  className
297
297
  ),
@@ -303,7 +303,7 @@ var RichTextEditor = React__namespace.forwardRef(
303
303
  className: "border-border bg-muted/30 sticky top-0 z-10 flex flex-wrap items-center gap-1 border-b p-2",
304
304
  children: [
305
305
  /* @__PURE__ */ jsxRuntime.jsx(
306
- chunkA2QVQF54_cjs.Button,
306
+ chunkRDGRKYQ5_cjs.Button,
307
307
  {
308
308
  type: "button",
309
309
  variant: "ghost",
@@ -317,7 +317,7 @@ var RichTextEditor = React__namespace.forwardRef(
317
317
  }
318
318
  ),
319
319
  /* @__PURE__ */ jsxRuntime.jsx(
320
- chunkA2QVQF54_cjs.Button,
320
+ chunkRDGRKYQ5_cjs.Button,
321
321
  {
322
322
  type: "button",
323
323
  variant: "ghost",
@@ -331,7 +331,7 @@ var RichTextEditor = React__namespace.forwardRef(
331
331
  }
332
332
  ),
333
333
  /* @__PURE__ */ jsxRuntime.jsx(
334
- chunkA2QVQF54_cjs.Button,
334
+ chunkRDGRKYQ5_cjs.Button,
335
335
  {
336
336
  type: "button",
337
337
  variant: "ghost",
@@ -344,9 +344,9 @@ var RichTextEditor = React__namespace.forwardRef(
344
344
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Underline, { className: "h-4 w-4" })
345
345
  }
346
346
  ),
347
- /* @__PURE__ */ jsxRuntime.jsx(chunkOXYFTCRW_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
347
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
348
348
  /* @__PURE__ */ jsxRuntime.jsx(
349
- chunkA2QVQF54_cjs.Button,
349
+ chunkRDGRKYQ5_cjs.Button,
350
350
  {
351
351
  type: "button",
352
352
  variant: "ghost",
@@ -360,7 +360,7 @@ var RichTextEditor = React__namespace.forwardRef(
360
360
  }
361
361
  ),
362
362
  /* @__PURE__ */ jsxRuntime.jsx(
363
- chunkA2QVQF54_cjs.Button,
363
+ chunkRDGRKYQ5_cjs.Button,
364
364
  {
365
365
  type: "button",
366
366
  variant: "ghost",
@@ -373,9 +373,9 @@ var RichTextEditor = React__namespace.forwardRef(
373
373
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListOrdered, { className: "h-4 w-4" })
374
374
  }
375
375
  ),
376
- /* @__PURE__ */ jsxRuntime.jsx(chunkOXYFTCRW_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
376
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
377
377
  /* @__PURE__ */ jsxRuntime.jsx(
378
- chunkA2QVQF54_cjs.Button,
378
+ chunkRDGRKYQ5_cjs.Button,
379
379
  {
380
380
  type: "button",
381
381
  variant: "ghost",
@@ -389,7 +389,7 @@ var RichTextEditor = React__namespace.forwardRef(
389
389
  }
390
390
  ),
391
391
  /* @__PURE__ */ jsxRuntime.jsx(
392
- chunkA2QVQF54_cjs.Button,
392
+ chunkRDGRKYQ5_cjs.Button,
393
393
  {
394
394
  type: "button",
395
395
  variant: "ghost",
@@ -403,7 +403,7 @@ var RichTextEditor = React__namespace.forwardRef(
403
403
  }
404
404
  ),
405
405
  /* @__PURE__ */ jsxRuntime.jsx(
406
- chunkA2QVQF54_cjs.Button,
406
+ chunkRDGRKYQ5_cjs.Button,
407
407
  {
408
408
  type: "button",
409
409
  variant: "ghost",
@@ -417,9 +417,9 @@ var RichTextEditor = React__namespace.forwardRef(
417
417
  }
418
418
  ),
419
419
  hasVariables && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
420
- /* @__PURE__ */ jsxRuntime.jsx(chunkOXYFTCRW_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
420
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
421
421
  /* @__PURE__ */ jsxRuntime.jsx(
422
- chunkMZPF2QGM_cjs.Dropdown,
422
+ chunkRBS3GHDZ_cjs.Dropdown,
423
423
  {
424
424
  placement: "bottom-start",
425
425
  width: 240,
@@ -428,7 +428,7 @@ var RichTextEditor = React__namespace.forwardRef(
428
428
  searchAriaLabel: "Search template variables",
429
429
  disabled,
430
430
  trigger: /* @__PURE__ */ jsxRuntime.jsxs(
431
- chunkA2QVQF54_cjs.Button,
431
+ chunkRDGRKYQ5_cjs.Button,
432
432
  {
433
433
  type: "button",
434
434
  variant: "ghost",
@@ -443,10 +443,10 @@ var RichTextEditor = React__namespace.forwardRef(
443
443
  }
444
444
  ),
445
445
  children: variableGroups.map((group, groupIndex) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
446
- groupIndex > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkMZPF2QGM_cjs.DropdownSeparator, {}),
447
- /* @__PURE__ */ jsxRuntime.jsx(chunkMZPF2QGM_cjs.DropdownLabel, { children: group.label }),
446
+ groupIndex > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkRBS3GHDZ_cjs.DropdownSeparator, {}),
447
+ /* @__PURE__ */ jsxRuntime.jsx(chunkRBS3GHDZ_cjs.DropdownLabel, { children: group.label }),
448
448
  group.variables.map((variable) => /* @__PURE__ */ jsxRuntime.jsx(
449
- chunkMZPF2QGM_cjs.DropdownItem,
449
+ chunkRBS3GHDZ_cjs.DropdownItem,
450
450
  {
451
451
  onClick: () => insertVariable(variable),
452
452
  children: variable.label
@@ -456,9 +456,9 @@ var RichTextEditor = React__namespace.forwardRef(
456
456
  ] }, group.label))
457
457
  }
458
458
  ),
459
- /* @__PURE__ */ jsxRuntime.jsx(chunkOXYFTCRW_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
459
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
460
460
  /* @__PURE__ */ jsxRuntime.jsxs(
461
- chunkA2QVQF54_cjs.Button,
461
+ chunkRDGRKYQ5_cjs.Button,
462
462
  {
463
463
  type: "button",
464
464
  variant: "ghost",
@@ -475,16 +475,16 @@ var RichTextEditor = React__namespace.forwardRef(
475
475
  )
476
476
  ] }),
477
477
  enableDictation && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
478
- /* @__PURE__ */ jsxRuntime.jsx(chunkOXYFTCRW_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
478
+ /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
479
479
  /* @__PURE__ */ jsxRuntime.jsxs(
480
- chunkA2QVQF54_cjs.Button,
480
+ chunkRDGRKYQ5_cjs.Button,
481
481
  {
482
482
  type: "button",
483
483
  variant: isListening ? "danger" : "ghost",
484
484
  size: "sm",
485
485
  onClick: toggleDictation,
486
486
  disabled: disabled || !speechSupported,
487
- className: chunkOR5DRJCW_cjs.cn("h-8 gap-1 px-2", isListening && "animate-pulse"),
487
+ className: chunkS5RVSXDV_cjs.cn("h-8 gap-1 px-2", isListening && "animate-pulse"),
488
488
  title: !speechSupported ? "Speech recognition not supported in this browser" : isListening ? "Stop dictation" : "Start dictation",
489
489
  children: [
490
490
  isListening ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MicOff, { className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mic, { className: "h-4 w-4" }),
@@ -514,7 +514,7 @@ var RichTextEditor = React__namespace.forwardRef(
514
514
  "aria-label": ariaLabel ?? placeholder,
515
515
  contentEditable: !disabled,
516
516
  onInput: updateContent,
517
- className: chunkOR5DRJCW_cjs.cn(
517
+ className: chunkS5RVSXDV_cjs.cn(
518
518
  "min-h-[250px] overflow-y-auto p-4 focus:outline-none",
519
519
  "prose prose-sm max-w-none",
520
520
  disabled && "bg-muted/20 cursor-not-allowed text-neutral-700 dark:text-neutral-300"
@@ -533,5 +533,5 @@ RichTextEditor.displayName = "RichTextEditor";
533
533
  exports.RichTextEditor = RichTextEditor;
534
534
  exports.convertAngleBracketsToMustache = convertAngleBracketsToMustache;
535
535
  exports.processDictation = processDictation;
536
- //# sourceMappingURL=chunk-BLPCYP4D.cjs.map
537
- //# sourceMappingURL=chunk-BLPCYP4D.cjs.map
536
+ //# sourceMappingURL=chunk-URHXR5SC.cjs.map
537
+ //# sourceMappingURL=chunk-URHXR5SC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/RichTextEditor/processDictation.ts","../src/components/RichTextEditor/RichTextEditor.tsx"],"names":["React","isHtmlEmpty","jsxs","cn","jsx","Button","Bold","Italic","Underline","Separator","List","ListOrdered","AlignLeft","AlignCenter","AlignRight","Fragment","Dropdown","Braces","DropdownSeparator","DropdownLabel","DropdownItem","Replace","MicOff","Mic"],"mappings":"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","file":"chunk-BLPCYP4D.cjs","sourcesContent":["/**\n * Converts spoken punctuation words (e.g. \"period\", \"comma\") into the\n * corresponding characters, using lightweight context heuristics so that words\n * like \"time period\" or \"the colon\" are left intact. Pure and side-effect free\n * so it can be unit tested independently of the editor.\n */\nexport function processDictation(text: string): string {\n let result = text;\n\n // \"period\" as a word vs. as punctuation.\n result = result.replace(\n /\\b(the|a|this|that|each|every|same|time|grace|trial|waiting|probationary|pay|billing|accounting)\\s+period\\b/gi,\n '$1 period'\n );\n result = result.replace(\n /\\bperiod\\s+(of|in|for|from|to|during|between|after|before|when|where|is|was|will|has|had)\\b/gi,\n 'period $1'\n );\n result = result.replace(/\\s+period(\\s*$)/gi, '.$1');\n result = result.replace(/\\s+period\\s+(?=[A-Z])/g, '. ');\n\n // \"comma\"\n result = result.replace(/\\bcomma\\s+(separated|delimited)/gi, 'comma $1');\n result = result.replace(/\\s+comma\\b/gi, ',');\n\n // \"colon\"\n result = result.replace(\n /\\b(the|a|my|your|his|her|their|semicolon|ascending|descending|transverse|sigmoid)\\s+colon\\b/gi,\n '$1 colon'\n );\n result = result.replace(\n /\\bcolon\\s+(cancer|surgery|health|polyp|scope|oscopy)/gi,\n 'colon $1'\n );\n result = result.replace(/\\s+colon\\b/gi, ':');\n\n // \"dash\"\n result = result.replace(\n /\\b(yard|meter|hundred|mad|quick|wild)\\s+dash\\b/gi,\n '$1 dash'\n );\n result = result.replace(/\\bdash\\s+(to|for|of)\\b/gi, 'dash $1');\n result = result.replace(/\\s+dash\\b/gi, ' -');\n\n const simplePunctuation: Record<string, string> = {\n ' full stop': '.',\n ' question mark': '?',\n ' exclamation point': '!',\n ' exclamation mark': '!',\n ' semicolon': ';',\n ' semi colon': ';',\n ' hyphen': '-',\n ' open parenthesis': ' (',\n ' close parenthesis': ')',\n ' open bracket': ' [',\n ' close bracket': ']',\n ' open quote': ' \"',\n ' close quote': '\"',\n ' quote': '\"',\n ' apostrophe': \"'\",\n ' new line': '\\n',\n ' newline': '\\n',\n ' new paragraph': '\\n\\n',\n ' tab': '\\t',\n };\n\n for (const [spoken, punctuation] of Object.entries(simplePunctuation)) {\n const regex = new RegExp(spoken, 'gi');\n result = result.replace(regex, punctuation);\n }\n\n // Capitalize after sentence-ending punctuation.\n result = result.replace(\n /([.!?])\\s+([a-z])/g,\n (_match, punct: string, letter: string) =>\n `${punct} ${letter.toUpperCase()}`\n );\n\n return result;\n}\n\n/**\n * Converts `<<field>>` (and the HTML-encoded `&lt;&lt;field&gt;&gt;`) syntax\n * into mustache `{{field}}` syntax. Pure helper operating on an HTML string.\n */\nexport function convertAngleBracketsToMustache(html: string): string {\n return html\n .replace(\n /&lt;&lt;([^&]*)&gt;&gt;/g,\n (_m, field: string) => `{{${field.trim()}}}`\n )\n .replace(/<<([^>]*)>>/g, (_m, field: string) => `{{${field.trim()}}}`);\n}\n\n/**\n * Returns true when an HTML string has no visible text content.\n * Note: This is a visibility check, not a sanitizer. It strips tags to inspect\n * remaining text — do NOT use this for XSS prevention.\n */\nexport { isHtmlEmpty } from '../../utils/html';\n","import * as React from 'react';\nimport {\n Bold,\n Italic,\n Underline,\n List,\n ListOrdered,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Braces,\n Replace,\n Mic,\n MicOff,\n} from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Separator } from '../Separator';\nimport {\n Dropdown,\n DropdownItem,\n DropdownLabel,\n DropdownSeparator,\n} from '../Dropdown';\nimport {\n processDictation,\n convertAngleBracketsToMustache,\n isHtmlEmpty,\n} from './processDictation';\n\nexport interface RichTextVariable {\n /** Human-readable label shown in the variable menu. */\n label: string;\n /** The token displayed for the variable (e.g. `{{employee.name}}`). */\n value: string;\n /** Optional text inserted instead of `value` (e.g. an expanded group). */\n insertValue?: string;\n}\n\nexport interface RichTextVariableGroup {\n /** Group heading shown in the variable menu. */\n label: string;\n /** Variables belonging to the group. */\n variables: RichTextVariable[];\n}\n\nexport interface RichTextEditorProps {\n /** Current HTML value of the editor. */\n value: string;\n /** Called with the updated HTML whenever the content changes. */\n onChange: (value: string) => void;\n /** Placeholder shown when the editor is empty. */\n placeholder?: string;\n /** Additional class for the editor wrapper. */\n className?: string;\n /**\n * Variable groups for the \"Insert variable\" menu. When omitted the variable\n * menu and the `<< >>` → `{{ }}` convert button are hidden.\n */\n variableGroups?: RichTextVariableGroup[];\n /** Enable the speech-to-text dictation button. Defaults to true. */\n enableDictation?: boolean;\n /** Called when dictation cannot start (replaces native alerts). */\n onDictationError?: (message: string) => void;\n /** Disable editing and toolbar actions. */\n disabled?: boolean;\n /** Accessible label for the editable region. */\n 'aria-label'?: string;\n}\n\n// --- Minimal Web Speech API typings (absent from the standard DOM lib) ---\ninterface SpeechRecognitionAlternativeLike {\n transcript: string;\n}\ninterface SpeechRecognitionResultLike {\n isFinal: boolean;\n [index: number]: SpeechRecognitionAlternativeLike;\n}\ninterface SpeechRecognitionResultListLike {\n length: number;\n [index: number]: SpeechRecognitionResultLike;\n}\ninterface SpeechRecognitionEventLike {\n resultIndex: number;\n results: SpeechRecognitionResultListLike;\n}\ninterface SpeechRecognitionErrorEventLike {\n error: string;\n}\ninterface SpeechRecognitionLike {\n continuous: boolean;\n interimResults: boolean;\n lang: string;\n maxAlternatives: number;\n onstart: (() => void) | null;\n onresult: ((event: SpeechRecognitionEventLike) => void) | null;\n onerror: ((event: SpeechRecognitionErrorEventLike) => void) | null;\n onend: (() => void) | null;\n start: () => void;\n stop: () => void;\n}\ntype SpeechRecognitionCtor = new () => SpeechRecognitionLike;\ninterface SpeechWindow {\n SpeechRecognition?: SpeechRecognitionCtor;\n webkitSpeechRecognition?: SpeechRecognitionCtor;\n}\n\nfunction getSpeechRecognition(): SpeechRecognitionCtor | undefined {\n const w = window as unknown as SpeechWindow;\n return w.SpeechRecognition || w.webkitSpeechRecognition;\n}\n\n/**\n * A presentational rich-text editor with formatting, template-variable\n * insertion and optional speech-to-text dictation. Content is supplied and\n * surfaced via `value`/`onChange` so it can be wired to any store. The variable\n * menu is data-agnostic — pass `variableGroups` to populate it.\n */\nconst RichTextEditor = React.forwardRef<HTMLDivElement, RichTextEditorProps>(\n (\n {\n value,\n onChange,\n placeholder,\n className,\n variableGroups,\n enableDictation = true,\n onDictationError,\n disabled = false,\n 'aria-label': ariaLabel,\n },\n ref\n ) => {\n const editorRef = React.useRef<HTMLDivElement>(null);\n const [isListening, setIsListening] = React.useState(false);\n const [speechSupported, setSpeechSupported] = React.useState(false);\n const recognitionRef = React.useRef<SpeechRecognitionLike | null>(null);\n const isListeningRef = React.useRef(false);\n const shouldRestartRef = React.useRef(false);\n\n const hasVariables = Boolean(variableGroups && variableGroups.length > 0);\n const isEmpty = isHtmlEmpty(value);\n\n React.useImperativeHandle(ref, () => editorRef.current as HTMLDivElement);\n\n React.useEffect(() => {\n setSpeechSupported(Boolean(getSpeechRecognition()));\n }, []);\n\n React.useEffect(() => {\n return () => {\n if (recognitionRef.current) {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n recognitionRef.current.stop();\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (editorRef.current && editorRef.current.innerHTML !== value) {\n editorRef.current.innerHTML = value;\n }\n }, [value]);\n\n const updateContent = () => {\n if (editorRef.current) onChange(editorRef.current.innerHTML);\n };\n\n const execCommand = (command: string) => {\n if (disabled) return;\n document.execCommand(command, false);\n editorRef.current?.focus();\n updateContent();\n };\n\n const handleConvertToMustache = () => {\n if (disabled || !editorRef.current) return;\n editorRef.current.innerHTML = convertAngleBracketsToMustache(\n editorRef.current.innerHTML\n );\n updateContent();\n };\n\n const insertVariable = (variable: RichTextVariable) => {\n if (disabled || !editorRef.current) return;\n editorRef.current.focus();\n const textToInsert = variable.insertValue ?? variable.value;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n if (textToInsert.includes('\\n')) {\n const fragment = document.createDocumentFragment();\n const lines = textToInsert.split('\\n');\n lines.forEach((line, index) => {\n fragment.appendChild(document.createTextNode(line));\n if (index < lines.length - 1) {\n fragment.appendChild(document.createElement('br'));\n }\n });\n range.insertNode(fragment);\n range.collapse(false);\n } else {\n const textNode = document.createTextNode(textToInsert);\n range.insertNode(textNode);\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n } else {\n editorRef.current.innerHTML += textToInsert.replace(/\\n/g, '<br>');\n }\n updateContent();\n };\n\n const reportError = (message: string) => {\n if (onDictationError) onDictationError(message);\n else if (typeof console !== 'undefined') console.warn(message);\n };\n\n const toggleDictation = async () => {\n const SpeechRecognition = getSpeechRecognition();\n if (!SpeechRecognition) return;\n\n if (isListening && recognitionRef.current) {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n recognitionRef.current.stop();\n setIsListening(false);\n return;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: true,\n });\n stream.getTracks().forEach((track) => track.stop());\n } catch {\n reportError(\n 'Microphone access is required for dictation. Please allow microphone access in your browser settings and try again.'\n );\n return;\n }\n\n const recognition = new SpeechRecognition();\n recognition.continuous = true;\n recognition.interimResults = true;\n recognition.lang = 'en-US';\n recognition.maxAlternatives = 1;\n\n recognition.onstart = () => {\n setIsListening(true);\n isListeningRef.current = true;\n shouldRestartRef.current = true;\n };\n\n recognition.onresult = (event) => {\n let finalTranscript = '';\n for (let i = event.resultIndex; i < event.results.length; i++) {\n const result = event.results[i];\n if (result.isFinal) finalTranscript += result[0].transcript;\n }\n\n if (finalTranscript && editorRef.current) {\n const processedText = processDictation(finalTranscript);\n editorRef.current.focus();\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n const textNode = document.createTextNode(processedText + ' ');\n range.insertNode(textNode);\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n selection.removeAllRanges();\n selection.addRange(range);\n } else {\n editorRef.current.innerHTML += processedText + ' ';\n }\n updateContent();\n }\n };\n\n recognition.onerror = (event) => {\n if (event.error === 'no-speech' || event.error === 'aborted') return;\n if (event.error === 'not-allowed') {\n reportError(\n 'Microphone access was denied. Please allow microphone access in your browser settings and try again.'\n );\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n return;\n }\n if (event.error === 'network') return;\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n };\n\n recognition.onend = () => {\n if (shouldRestartRef.current && isListeningRef.current) {\n setTimeout(() => {\n if (shouldRestartRef.current && isListeningRef.current) {\n try {\n recognition.start();\n } catch {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n }\n }\n }, 100);\n } else {\n setIsListening(false);\n }\n };\n\n recognitionRef.current = recognition;\n try {\n recognition.start();\n } catch {\n reportError('Failed to start speech recognition. Please try again.');\n }\n };\n\n const iconButtonClass = 'h-8 w-8 p-0';\n\n return (\n <div\n data-slot=\"rich-text-editor\"\n className={cn(\n 'border-border bg-background flex flex-col overflow-hidden rounded-lg border',\n className\n )}\n >\n <div\n data-slot=\"rich-text-editor-toolbar\"\n className=\"border-border bg-muted/30 sticky top-0 z-10 flex flex-wrap items-center gap-1 border-b p-2\"\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('bold')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Bold\"\n title=\"Bold\"\n >\n <Bold className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('italic')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Italic\"\n title=\"Italic\"\n >\n <Italic className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('underline')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Underline\"\n title=\"Underline\"\n >\n <Underline className=\"h-4 w-4\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('insertUnorderedList')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Bullet list\"\n title=\"Bullet list\"\n >\n <List className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('insertOrderedList')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Numbered list\"\n title=\"Numbered list\"\n >\n <ListOrdered className=\"h-4 w-4\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyLeft')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align left\"\n title=\"Align left\"\n >\n <AlignLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyCenter')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align center\"\n title=\"Align center\"\n >\n <AlignCenter className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyRight')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align right\"\n title=\"Align right\"\n >\n <AlignRight className=\"h-4 w-4\" />\n </Button>\n\n {hasVariables && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Dropdown\n placement=\"bottom-start\"\n width={240}\n searchable\n searchPlaceholder=\"Search variables…\"\n searchAriaLabel=\"Search template variables\"\n disabled={disabled}\n trigger={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2\"\n disabled={disabled}\n title=\"Insert variable\"\n >\n <Braces className=\"h-4 w-4\" />\n <span className=\"text-xs\">Variables</span>\n </Button>\n }\n >\n {variableGroups!.map((group, groupIndex) => (\n <React.Fragment key={group.label}>\n {groupIndex > 0 && <DropdownSeparator />}\n <DropdownLabel>{group.label}</DropdownLabel>\n {group.variables.map((variable) => (\n <DropdownItem\n key={variable.value}\n onClick={() => insertVariable(variable)}\n >\n {variable.label}\n </DropdownItem>\n ))}\n </React.Fragment>\n ))}\n </Dropdown>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleConvertToMustache}\n disabled={disabled}\n className=\"h-8 gap-1 px-2\"\n title=\"Convert <<field>> to {{field}}\"\n >\n <Replace className=\"h-4 w-4\" />\n <span className=\"text-xs\">{'<< >> to {{ }}'}</span>\n </Button>\n </>\n )}\n\n {enableDictation && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant={isListening ? 'danger' : 'ghost'}\n size=\"sm\"\n onClick={toggleDictation}\n disabled={disabled || !speechSupported}\n className={cn('h-8 gap-1 px-2', isListening && 'animate-pulse')}\n title={\n !speechSupported\n ? 'Speech recognition not supported in this browser'\n : isListening\n ? 'Stop dictation'\n : 'Start dictation'\n }\n >\n {isListening ? (\n <MicOff className=\"h-4 w-4\" />\n ) : (\n <Mic className=\"h-4 w-4\" />\n )}\n <span className=\"text-xs\">\n {isListening ? 'Stop' : 'Dictate'}\n </span>\n </Button>\n </>\n )}\n </div>\n\n <div className=\"relative flex-1\">\n {isEmpty && placeholder && (\n <div\n aria-hidden=\"true\"\n className=\"text-muted-foreground pointer-events-none absolute top-0 left-0 p-4\"\n >\n {placeholder}\n </div>\n )}\n <div\n ref={editorRef}\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={ariaLabel ?? placeholder}\n contentEditable={!disabled}\n onInput={updateContent}\n className={cn(\n 'min-h-[250px] overflow-y-auto p-4 focus:outline-none',\n 'prose prose-sm max-w-none',\n disabled &&\n 'bg-muted/20 cursor-not-allowed text-neutral-700 dark:text-neutral-300'\n )}\n suppressContentEditableWarning\n />\n </div>\n </div>\n );\n }\n);\n\nRichTextEditor.displayName = 'RichTextEditor';\n\nexport { RichTextEditor };\n"]}
1
+ {"version":3,"sources":["../src/components/RichTextEditor/processDictation.ts","../src/components/RichTextEditor/RichTextEditor.tsx"],"names":["React","isHtmlEmpty","jsxs","cn","jsx","Button","Bold","Italic","Underline","Separator","List","ListOrdered","AlignLeft","AlignCenter","AlignRight","Fragment","Dropdown","Braces","DropdownSeparator","DropdownLabel","DropdownItem","Replace","MicOff","Mic"],"mappings":"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","file":"chunk-URHXR5SC.cjs","sourcesContent":["/**\n * Converts spoken punctuation words (e.g. \"period\", \"comma\") into the\n * corresponding characters, using lightweight context heuristics so that words\n * like \"time period\" or \"the colon\" are left intact. Pure and side-effect free\n * so it can be unit tested independently of the editor.\n */\nexport function processDictation(text: string): string {\n let result = text;\n\n // \"period\" as a word vs. as punctuation.\n result = result.replace(\n /\\b(the|a|this|that|each|every|same|time|grace|trial|waiting|probationary|pay|billing|accounting)\\s+period\\b/gi,\n '$1 period'\n );\n result = result.replace(\n /\\bperiod\\s+(of|in|for|from|to|during|between|after|before|when|where|is|was|will|has|had)\\b/gi,\n 'period $1'\n );\n result = result.replace(/\\s+period(\\s*$)/gi, '.$1');\n result = result.replace(/\\s+period\\s+(?=[A-Z])/g, '. ');\n\n // \"comma\"\n result = result.replace(/\\bcomma\\s+(separated|delimited)/gi, 'comma $1');\n result = result.replace(/\\s+comma\\b/gi, ',');\n\n // \"colon\"\n result = result.replace(\n /\\b(the|a|my|your|his|her|their|semicolon|ascending|descending|transverse|sigmoid)\\s+colon\\b/gi,\n '$1 colon'\n );\n result = result.replace(\n /\\bcolon\\s+(cancer|surgery|health|polyp|scope|oscopy)/gi,\n 'colon $1'\n );\n result = result.replace(/\\s+colon\\b/gi, ':');\n\n // \"dash\"\n result = result.replace(\n /\\b(yard|meter|hundred|mad|quick|wild)\\s+dash\\b/gi,\n '$1 dash'\n );\n result = result.replace(/\\bdash\\s+(to|for|of)\\b/gi, 'dash $1');\n result = result.replace(/\\s+dash\\b/gi, ' -');\n\n const simplePunctuation: Record<string, string> = {\n ' full stop': '.',\n ' question mark': '?',\n ' exclamation point': '!',\n ' exclamation mark': '!',\n ' semicolon': ';',\n ' semi colon': ';',\n ' hyphen': '-',\n ' open parenthesis': ' (',\n ' close parenthesis': ')',\n ' open bracket': ' [',\n ' close bracket': ']',\n ' open quote': ' \"',\n ' close quote': '\"',\n ' quote': '\"',\n ' apostrophe': \"'\",\n ' new line': '\\n',\n ' newline': '\\n',\n ' new paragraph': '\\n\\n',\n ' tab': '\\t',\n };\n\n for (const [spoken, punctuation] of Object.entries(simplePunctuation)) {\n const regex = new RegExp(spoken, 'gi');\n result = result.replace(regex, punctuation);\n }\n\n // Capitalize after sentence-ending punctuation.\n result = result.replace(\n /([.!?])\\s+([a-z])/g,\n (_match, punct: string, letter: string) =>\n `${punct} ${letter.toUpperCase()}`\n );\n\n return result;\n}\n\n/**\n * Converts `<<field>>` (and the HTML-encoded `&lt;&lt;field&gt;&gt;`) syntax\n * into mustache `{{field}}` syntax. Pure helper operating on an HTML string.\n */\nexport function convertAngleBracketsToMustache(html: string): string {\n return html\n .replace(\n /&lt;&lt;([^&]*)&gt;&gt;/g,\n (_m, field: string) => `{{${field.trim()}}}`\n )\n .replace(/<<([^>]*)>>/g, (_m, field: string) => `{{${field.trim()}}}`);\n}\n\n/**\n * Returns true when an HTML string has no visible text content.\n * Note: This is a visibility check, not a sanitizer. It strips tags to inspect\n * remaining text — do NOT use this for XSS prevention.\n */\nexport { isHtmlEmpty } from '../../utils/html';\n","import * as React from 'react';\nimport {\n Bold,\n Italic,\n Underline,\n List,\n ListOrdered,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Braces,\n Replace,\n Mic,\n MicOff,\n} from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Separator } from '../Separator';\nimport {\n Dropdown,\n DropdownItem,\n DropdownLabel,\n DropdownSeparator,\n} from '../Dropdown';\nimport {\n processDictation,\n convertAngleBracketsToMustache,\n isHtmlEmpty,\n} from './processDictation';\n\nexport interface RichTextVariable {\n /** Human-readable label shown in the variable menu. */\n label: string;\n /** The token displayed for the variable (e.g. `{{employee.name}}`). */\n value: string;\n /** Optional text inserted instead of `value` (e.g. an expanded group). */\n insertValue?: string;\n}\n\nexport interface RichTextVariableGroup {\n /** Group heading shown in the variable menu. */\n label: string;\n /** Variables belonging to the group. */\n variables: RichTextVariable[];\n}\n\nexport interface RichTextEditorProps {\n /** Current HTML value of the editor. */\n value: string;\n /** Called with the updated HTML whenever the content changes. */\n onChange: (value: string) => void;\n /** Placeholder shown when the editor is empty. */\n placeholder?: string;\n /** Additional class for the editor wrapper. */\n className?: string;\n /**\n * Variable groups for the \"Insert variable\" menu. When omitted the variable\n * menu and the `<< >>` → `{{ }}` convert button are hidden.\n */\n variableGroups?: RichTextVariableGroup[];\n /** Enable the speech-to-text dictation button. Defaults to true. */\n enableDictation?: boolean;\n /** Called when dictation cannot start (replaces native alerts). */\n onDictationError?: (message: string) => void;\n /** Disable editing and toolbar actions. */\n disabled?: boolean;\n /** Accessible label for the editable region. */\n 'aria-label'?: string;\n}\n\n// --- Minimal Web Speech API typings (absent from the standard DOM lib) ---\ninterface SpeechRecognitionAlternativeLike {\n transcript: string;\n}\ninterface SpeechRecognitionResultLike {\n isFinal: boolean;\n [index: number]: SpeechRecognitionAlternativeLike;\n}\ninterface SpeechRecognitionResultListLike {\n length: number;\n [index: number]: SpeechRecognitionResultLike;\n}\ninterface SpeechRecognitionEventLike {\n resultIndex: number;\n results: SpeechRecognitionResultListLike;\n}\ninterface SpeechRecognitionErrorEventLike {\n error: string;\n}\ninterface SpeechRecognitionLike {\n continuous: boolean;\n interimResults: boolean;\n lang: string;\n maxAlternatives: number;\n onstart: (() => void) | null;\n onresult: ((event: SpeechRecognitionEventLike) => void) | null;\n onerror: ((event: SpeechRecognitionErrorEventLike) => void) | null;\n onend: (() => void) | null;\n start: () => void;\n stop: () => void;\n}\ntype SpeechRecognitionCtor = new () => SpeechRecognitionLike;\ninterface SpeechWindow {\n SpeechRecognition?: SpeechRecognitionCtor;\n webkitSpeechRecognition?: SpeechRecognitionCtor;\n}\n\nfunction getSpeechRecognition(): SpeechRecognitionCtor | undefined {\n const w = window as unknown as SpeechWindow;\n return w.SpeechRecognition || w.webkitSpeechRecognition;\n}\n\n/**\n * A presentational rich-text editor with formatting, template-variable\n * insertion and optional speech-to-text dictation. Content is supplied and\n * surfaced via `value`/`onChange` so it can be wired to any store. The variable\n * menu is data-agnostic — pass `variableGroups` to populate it.\n */\nconst RichTextEditor = React.forwardRef<HTMLDivElement, RichTextEditorProps>(\n (\n {\n value,\n onChange,\n placeholder,\n className,\n variableGroups,\n enableDictation = true,\n onDictationError,\n disabled = false,\n 'aria-label': ariaLabel,\n },\n ref\n ) => {\n const editorRef = React.useRef<HTMLDivElement>(null);\n const [isListening, setIsListening] = React.useState(false);\n const [speechSupported, setSpeechSupported] = React.useState(false);\n const recognitionRef = React.useRef<SpeechRecognitionLike | null>(null);\n const isListeningRef = React.useRef(false);\n const shouldRestartRef = React.useRef(false);\n\n const hasVariables = Boolean(variableGroups && variableGroups.length > 0);\n const isEmpty = isHtmlEmpty(value);\n\n React.useImperativeHandle(ref, () => editorRef.current as HTMLDivElement);\n\n React.useEffect(() => {\n setSpeechSupported(Boolean(getSpeechRecognition()));\n }, []);\n\n React.useEffect(() => {\n return () => {\n if (recognitionRef.current) {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n recognitionRef.current.stop();\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (editorRef.current && editorRef.current.innerHTML !== value) {\n editorRef.current.innerHTML = value;\n }\n }, [value]);\n\n const updateContent = () => {\n if (editorRef.current) onChange(editorRef.current.innerHTML);\n };\n\n const execCommand = (command: string) => {\n if (disabled) return;\n document.execCommand(command, false);\n editorRef.current?.focus();\n updateContent();\n };\n\n const handleConvertToMustache = () => {\n if (disabled || !editorRef.current) return;\n editorRef.current.innerHTML = convertAngleBracketsToMustache(\n editorRef.current.innerHTML\n );\n updateContent();\n };\n\n const insertVariable = (variable: RichTextVariable) => {\n if (disabled || !editorRef.current) return;\n editorRef.current.focus();\n const textToInsert = variable.insertValue ?? variable.value;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n if (textToInsert.includes('\\n')) {\n const fragment = document.createDocumentFragment();\n const lines = textToInsert.split('\\n');\n lines.forEach((line, index) => {\n fragment.appendChild(document.createTextNode(line));\n if (index < lines.length - 1) {\n fragment.appendChild(document.createElement('br'));\n }\n });\n range.insertNode(fragment);\n range.collapse(false);\n } else {\n const textNode = document.createTextNode(textToInsert);\n range.insertNode(textNode);\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n } else {\n editorRef.current.innerHTML += textToInsert.replace(/\\n/g, '<br>');\n }\n updateContent();\n };\n\n const reportError = (message: string) => {\n if (onDictationError) onDictationError(message);\n else if (typeof console !== 'undefined') console.warn(message);\n };\n\n const toggleDictation = async () => {\n const SpeechRecognition = getSpeechRecognition();\n if (!SpeechRecognition) return;\n\n if (isListening && recognitionRef.current) {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n recognitionRef.current.stop();\n setIsListening(false);\n return;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: true,\n });\n stream.getTracks().forEach((track) => track.stop());\n } catch {\n reportError(\n 'Microphone access is required for dictation. Please allow microphone access in your browser settings and try again.'\n );\n return;\n }\n\n const recognition = new SpeechRecognition();\n recognition.continuous = true;\n recognition.interimResults = true;\n recognition.lang = 'en-US';\n recognition.maxAlternatives = 1;\n\n recognition.onstart = () => {\n setIsListening(true);\n isListeningRef.current = true;\n shouldRestartRef.current = true;\n };\n\n recognition.onresult = (event) => {\n let finalTranscript = '';\n for (let i = event.resultIndex; i < event.results.length; i++) {\n const result = event.results[i];\n if (result.isFinal) finalTranscript += result[0].transcript;\n }\n\n if (finalTranscript && editorRef.current) {\n const processedText = processDictation(finalTranscript);\n editorRef.current.focus();\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n const textNode = document.createTextNode(processedText + ' ');\n range.insertNode(textNode);\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n selection.removeAllRanges();\n selection.addRange(range);\n } else {\n editorRef.current.innerHTML += processedText + ' ';\n }\n updateContent();\n }\n };\n\n recognition.onerror = (event) => {\n if (event.error === 'no-speech' || event.error === 'aborted') return;\n if (event.error === 'not-allowed') {\n reportError(\n 'Microphone access was denied. Please allow microphone access in your browser settings and try again.'\n );\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n return;\n }\n if (event.error === 'network') return;\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n };\n\n recognition.onend = () => {\n if (shouldRestartRef.current && isListeningRef.current) {\n setTimeout(() => {\n if (shouldRestartRef.current && isListeningRef.current) {\n try {\n recognition.start();\n } catch {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n }\n }\n }, 100);\n } else {\n setIsListening(false);\n }\n };\n\n recognitionRef.current = recognition;\n try {\n recognition.start();\n } catch {\n reportError('Failed to start speech recognition. Please try again.');\n }\n };\n\n const iconButtonClass = 'h-8 w-8 p-0';\n\n return (\n <div\n data-slot=\"rich-text-editor\"\n className={cn(\n 'border-border bg-background flex flex-col overflow-hidden rounded-lg border',\n className\n )}\n >\n <div\n data-slot=\"rich-text-editor-toolbar\"\n className=\"border-border bg-muted/30 sticky top-0 z-10 flex flex-wrap items-center gap-1 border-b p-2\"\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('bold')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Bold\"\n title=\"Bold\"\n >\n <Bold className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('italic')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Italic\"\n title=\"Italic\"\n >\n <Italic className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('underline')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Underline\"\n title=\"Underline\"\n >\n <Underline className=\"h-4 w-4\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('insertUnorderedList')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Bullet list\"\n title=\"Bullet list\"\n >\n <List className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('insertOrderedList')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Numbered list\"\n title=\"Numbered list\"\n >\n <ListOrdered className=\"h-4 w-4\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyLeft')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align left\"\n title=\"Align left\"\n >\n <AlignLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyCenter')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align center\"\n title=\"Align center\"\n >\n <AlignCenter className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyRight')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align right\"\n title=\"Align right\"\n >\n <AlignRight className=\"h-4 w-4\" />\n </Button>\n\n {hasVariables && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Dropdown\n placement=\"bottom-start\"\n width={240}\n searchable\n searchPlaceholder=\"Search variables…\"\n searchAriaLabel=\"Search template variables\"\n disabled={disabled}\n trigger={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2\"\n disabled={disabled}\n title=\"Insert variable\"\n >\n <Braces className=\"h-4 w-4\" />\n <span className=\"text-xs\">Variables</span>\n </Button>\n }\n >\n {variableGroups!.map((group, groupIndex) => (\n <React.Fragment key={group.label}>\n {groupIndex > 0 && <DropdownSeparator />}\n <DropdownLabel>{group.label}</DropdownLabel>\n {group.variables.map((variable) => (\n <DropdownItem\n key={variable.value}\n onClick={() => insertVariable(variable)}\n >\n {variable.label}\n </DropdownItem>\n ))}\n </React.Fragment>\n ))}\n </Dropdown>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleConvertToMustache}\n disabled={disabled}\n className=\"h-8 gap-1 px-2\"\n title=\"Convert <<field>> to {{field}}\"\n >\n <Replace className=\"h-4 w-4\" />\n <span className=\"text-xs\">{'<< >> to {{ }}'}</span>\n </Button>\n </>\n )}\n\n {enableDictation && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant={isListening ? 'danger' : 'ghost'}\n size=\"sm\"\n onClick={toggleDictation}\n disabled={disabled || !speechSupported}\n className={cn('h-8 gap-1 px-2', isListening && 'animate-pulse')}\n title={\n !speechSupported\n ? 'Speech recognition not supported in this browser'\n : isListening\n ? 'Stop dictation'\n : 'Start dictation'\n }\n >\n {isListening ? (\n <MicOff className=\"h-4 w-4\" />\n ) : (\n <Mic className=\"h-4 w-4\" />\n )}\n <span className=\"text-xs\">\n {isListening ? 'Stop' : 'Dictate'}\n </span>\n </Button>\n </>\n )}\n </div>\n\n <div className=\"relative flex-1\">\n {isEmpty && placeholder && (\n <div\n aria-hidden=\"true\"\n className=\"text-muted-foreground pointer-events-none absolute top-0 left-0 p-4\"\n >\n {placeholder}\n </div>\n )}\n <div\n ref={editorRef}\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={ariaLabel ?? placeholder}\n contentEditable={!disabled}\n onInput={updateContent}\n className={cn(\n 'min-h-[250px] overflow-y-auto p-4 focus:outline-none',\n 'prose prose-sm max-w-none',\n disabled &&\n 'bg-muted/20 cursor-not-allowed text-neutral-700 dark:text-neutral-300'\n )}\n suppressContentEditableWarning\n />\n </div>\n </div>\n );\n }\n);\n\nRichTextEditor.displayName = 'RichTextEditor';\n\nexport { RichTextEditor };\n"]}