@mieweb/ui 0.8.0-dev.9 → 0.9.0-dev.0

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 (311) hide show
  1. package/dist/Animated-Cs-naa2g.d.cts +175 -0
  2. package/dist/Animated-Cs-naa2g.d.ts +175 -0
  3. package/dist/CsvBlock-D7Z6ZCRP.js +6 -0
  4. package/dist/{CsvBlock-RPGHFTVD.js.map → CsvBlock-D7Z6ZCRP.js.map} +1 -1
  5. package/dist/CsvBlock-QXXZ7ZUM.cjs +15 -0
  6. package/dist/{CsvBlock-HMAZ7YK5.cjs.map → CsvBlock-QXXZ7ZUM.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-AADG7MVB.cjs +15 -0
  8. package/dist/{HtmlPreviewBlock-QHLSIMWJ.cjs.map → HtmlPreviewBlock-AADG7MVB.cjs.map} +1 -1
  9. package/dist/HtmlPreviewBlock-F5VDM2EN.js +6 -0
  10. package/dist/{HtmlPreviewBlock-YF2YVKKX.js.map → HtmlPreviewBlock-F5VDM2EN.js.map} +1 -1
  11. package/dist/MermaidBlock-6PLITRBZ.js +6 -0
  12. package/dist/{MermaidBlock-H3TWNC4D.js.map → MermaidBlock-6PLITRBZ.js.map} +1 -1
  13. package/dist/MermaidBlock-TQ2O5CLV.cjs +15 -0
  14. package/dist/{MermaidBlock-ZLLBO3VY.cjs.map → MermaidBlock-TQ2O5CLV.cjs.map} +1 -1
  15. package/dist/SurveyBlock-OYL3VNU5.cjs +15 -0
  16. package/dist/{SurveyBlock-K6HKI7AD.cjs.map → SurveyBlock-OYL3VNU5.cjs.map} +1 -1
  17. package/dist/SurveyBlock-W5PSQ62F.js +6 -0
  18. package/dist/{SurveyBlock-ID55AT3R.js.map → SurveyBlock-W5PSQ62F.js.map} +1 -1
  19. package/dist/ag-grid.cjs +5 -5
  20. package/dist/ag-grid.js +1 -1
  21. package/dist/brands/index.cjs +7 -7
  22. package/dist/brands/index.js +2 -2
  23. package/dist/{chunk-5JZIDILK.cjs → chunk-3LHICE4I.cjs} +6 -6
  24. package/dist/chunk-3LHICE4I.cjs.map +1 -0
  25. package/dist/{chunk-JHZW3Y62.js → chunk-3RB35GYK.js} +5 -5
  26. package/dist/chunk-3RB35GYK.js.map +1 -0
  27. package/dist/{chunk-JMZF7ZHF.cjs → chunk-4SM3I7WE.cjs} +4 -4
  28. package/dist/{chunk-JMZF7ZHF.cjs.map → chunk-4SM3I7WE.cjs.map} +1 -1
  29. package/dist/{chunk-ZONEAWPR.cjs → chunk-5BVFVXHN.cjs} +218 -151
  30. package/dist/chunk-5BVFVXHN.cjs.map +1 -0
  31. package/dist/{chunk-CAN3A3DC.js → chunk-5H7SAEQO.js} +4 -4
  32. package/dist/{chunk-CAN3A3DC.js.map → chunk-5H7SAEQO.js.map} +1 -1
  33. package/dist/{chunk-EMMYFHOT.js → chunk-5WOB4UBD.js} +3 -3
  34. package/dist/{chunk-EMMYFHOT.js.map → chunk-5WOB4UBD.js.map} +1 -1
  35. package/dist/{chunk-JIU6CVPF.cjs → chunk-5Z6UPVGC.cjs} +5 -5
  36. package/dist/{chunk-JIU6CVPF.cjs.map → chunk-5Z6UPVGC.cjs.map} +1 -1
  37. package/dist/{chunk-YIXTGWT4.cjs → chunk-6QKMMKRY.cjs} +5 -5
  38. package/dist/{chunk-YIXTGWT4.cjs.map → chunk-6QKMMKRY.cjs.map} +1 -1
  39. package/dist/{chunk-F57VRLKP.js → chunk-6SAYPXHX.js} +4 -4
  40. package/dist/{chunk-F57VRLKP.js.map → chunk-6SAYPXHX.js.map} +1 -1
  41. package/dist/{chunk-5EKRH4KE.cjs → chunk-6XDPJWSC.cjs} +93 -77
  42. package/dist/chunk-6XDPJWSC.cjs.map +1 -0
  43. package/dist/{chunk-4AE2L6AO.cjs → chunk-7FTBPLA6.cjs} +8 -8
  44. package/dist/chunk-7FTBPLA6.cjs.map +1 -0
  45. package/dist/{chunk-AGYNCPJ2.cjs → chunk-7KN6J7XV.cjs} +19 -19
  46. package/dist/{chunk-AGYNCPJ2.cjs.map → chunk-7KN6J7XV.cjs.map} +1 -1
  47. package/dist/{chunk-SNSA6NWD.cjs → chunk-AHINB2TP.cjs} +9 -9
  48. package/dist/{chunk-SNSA6NWD.cjs.map → chunk-AHINB2TP.cjs.map} +1 -1
  49. package/dist/chunk-BKSPDTX4.js +3 -0
  50. package/dist/{chunk-3PXOIAF6.js.map → chunk-BKSPDTX4.js.map} +1 -1
  51. package/dist/chunk-BN75TLUN.cjs +163 -0
  52. package/dist/chunk-BN75TLUN.cjs.map +1 -0
  53. package/dist/{chunk-WWJIW2IH.cjs → chunk-BVMABVC4.cjs} +3 -3
  54. package/dist/{chunk-WWJIW2IH.cjs.map → chunk-BVMABVC4.cjs.map} +1 -1
  55. package/dist/{chunk-VKNCQIVN.cjs → chunk-BZAGP5W6.cjs} +8 -8
  56. package/dist/{chunk-VKNCQIVN.cjs.map → chunk-BZAGP5W6.cjs.map} +1 -1
  57. package/dist/{chunk-RS5VA6QU.cjs → chunk-C3DUS2VE.cjs} +3 -3
  58. package/dist/{chunk-RS5VA6QU.cjs.map → chunk-C3DUS2VE.cjs.map} +1 -1
  59. package/dist/{chunk-NLBT5O2X.js → chunk-CK3KLRNF.js} +3 -3
  60. package/dist/{chunk-NLBT5O2X.js.map → chunk-CK3KLRNF.js.map} +1 -1
  61. package/dist/{chunk-4J4FDVPS.cjs → chunk-CXDMZT45.cjs} +36 -3
  62. package/dist/chunk-CXDMZT45.cjs.map +1 -0
  63. package/dist/{chunk-TXRQQMG5.js → chunk-CYMZ2QS5.js} +2 -2
  64. package/dist/{chunk-TXRQQMG5.js.map → chunk-CYMZ2QS5.js.map} +1 -1
  65. package/dist/{chunk-CLQUCPV6.js → chunk-D25WH7MH.js} +7 -7
  66. package/dist/{chunk-CLQUCPV6.js.map → chunk-D25WH7MH.js.map} +1 -1
  67. package/dist/{chunk-ATOWMVZH.js → chunk-DFYMIRMW.js} +3 -3
  68. package/dist/{chunk-ATOWMVZH.js.map → chunk-DFYMIRMW.js.map} +1 -1
  69. package/dist/{chunk-ZJ5KAZLW.js → chunk-DGRXAIWK.js} +36 -3
  70. package/dist/chunk-DGRXAIWK.js.map +1 -0
  71. package/dist/{chunk-UZ5NGGMI.js → chunk-EG7XFZ3W.js} +4 -4
  72. package/dist/{chunk-UZ5NGGMI.js.map → chunk-EG7XFZ3W.js.map} +1 -1
  73. package/dist/{chunk-D6UXVOPS.cjs → chunk-FQBTGS3E.cjs} +5 -5
  74. package/dist/{chunk-D6UXVOPS.cjs.map → chunk-FQBTGS3E.cjs.map} +1 -1
  75. package/dist/{chunk-7SFGEE4M.cjs → chunk-FUFBRKOG.cjs} +48 -48
  76. package/dist/{chunk-7SFGEE4M.cjs.map → chunk-FUFBRKOG.cjs.map} +1 -1
  77. package/dist/{chunk-VA3WQ5KJ.cjs → chunk-FYAKUU2A.cjs} +37 -20
  78. package/dist/chunk-FYAKUU2A.cjs.map +1 -0
  79. package/dist/{chunk-JR4QIU54.cjs → chunk-H4AVMUOC.cjs} +10 -4
  80. package/dist/chunk-H4AVMUOC.cjs.map +1 -0
  81. package/dist/{chunk-I2ECTLON.cjs → chunk-HXSA6QC5.cjs} +3 -3
  82. package/dist/{chunk-I2ECTLON.cjs.map → chunk-HXSA6QC5.cjs.map} +1 -1
  83. package/dist/{chunk-X5ZPYYMS.js → chunk-I3DQXUSC.js} +3 -3
  84. package/dist/{chunk-X5ZPYYMS.js.map → chunk-I3DQXUSC.js.map} +1 -1
  85. package/dist/{chunk-FN6VHMLM.cjs → chunk-IB54SKWB.cjs} +8 -8
  86. package/dist/{chunk-FN6VHMLM.cjs.map → chunk-IB54SKWB.cjs.map} +1 -1
  87. package/dist/{chunk-JP5SGIXA.cjs → chunk-IFDC4TXM.cjs} +4 -4
  88. package/dist/{chunk-JP5SGIXA.cjs.map → chunk-IFDC4TXM.cjs.map} +1 -1
  89. package/dist/{chunk-RDGRKYQ5.cjs → chunk-IINZWUGK.cjs} +58 -6
  90. package/dist/chunk-IINZWUGK.cjs.map +1 -0
  91. package/dist/{chunk-D2GID3YK.js → chunk-KREUYVMZ.js} +58 -6
  92. package/dist/chunk-KREUYVMZ.js.map +1 -0
  93. package/dist/{chunk-Y6YSJPVC.js → chunk-KRU6IGV7.js} +11 -3
  94. package/dist/chunk-KRU6IGV7.js.map +1 -0
  95. package/dist/{chunk-K52C5UBS.js → chunk-KU3XRHWA.js} +4 -4
  96. package/dist/{chunk-K52C5UBS.js.map → chunk-KU3XRHWA.js.map} +1 -1
  97. package/dist/{chunk-P2VTQ5AR.cjs → chunk-L52N6BEN.cjs} +39 -23
  98. package/dist/chunk-L52N6BEN.cjs.map +1 -0
  99. package/dist/{chunk-6GKX36JX.js → chunk-L5W7TJQ5.js} +10 -4
  100. package/dist/chunk-L5W7TJQ5.js.map +1 -0
  101. package/dist/{chunk-PAM5UUBL.cjs → chunk-L7L5S2HO.cjs} +18 -2
  102. package/dist/{chunk-PAM5UUBL.cjs.map → chunk-L7L5S2HO.cjs.map} +1 -1
  103. package/dist/{chunk-RVGTI4F6.js → chunk-LAEIVOIY.js} +37 -20
  104. package/dist/chunk-LAEIVOIY.js.map +1 -0
  105. package/dist/{chunk-Z5KFXHDP.cjs → chunk-MM7QKUE3.cjs} +5 -5
  106. package/dist/{chunk-Z5KFXHDP.cjs.map → chunk-MM7QKUE3.cjs.map} +1 -1
  107. package/dist/{chunk-FJ7YPVKV.js → chunk-MUIDWFYJ.js} +3 -3
  108. package/dist/{chunk-FJ7YPVKV.js.map → chunk-MUIDWFYJ.js.map} +1 -1
  109. package/dist/{chunk-GPZDP2IA.js → chunk-MXQ7J4BB.js} +3 -3
  110. package/dist/{chunk-GPZDP2IA.js.map → chunk-MXQ7J4BB.js.map} +1 -1
  111. package/dist/{chunk-4KFVGIY6.js → chunk-NHN6A3ZO.js} +4 -4
  112. package/dist/{chunk-4KFVGIY6.js.map → chunk-NHN6A3ZO.js.map} +1 -1
  113. package/dist/{chunk-KLLRTTC5.js → chunk-O6GJ4IYS.js} +216 -151
  114. package/dist/chunk-O6GJ4IYS.js.map +1 -0
  115. package/dist/{chunk-4SIGL6QC.cjs → chunk-O7XHHTTP.cjs} +8 -8
  116. package/dist/{chunk-4SIGL6QC.cjs.map → chunk-O7XHHTTP.cjs.map} +1 -1
  117. package/dist/{chunk-7L4SY5YY.js → chunk-OAZUDUGX.js} +6 -4
  118. package/dist/chunk-OAZUDUGX.js.map +1 -0
  119. package/dist/{chunk-NFKX6QJP.cjs → chunk-OCV33S5Q.cjs} +3 -3
  120. package/dist/{chunk-NFKX6QJP.cjs.map → chunk-OCV33S5Q.cjs.map} +1 -1
  121. package/dist/{chunk-MUUB35XB.js → chunk-ODYQYLO2.js} +27 -11
  122. package/dist/chunk-ODYQYLO2.js.map +1 -0
  123. package/dist/{chunk-FPVRQCCL.js → chunk-OHDIJOGG.js} +4 -4
  124. package/dist/{chunk-FPVRQCCL.js.map → chunk-OHDIJOGG.js.map} +1 -1
  125. package/dist/{chunk-GQVL2JKQ.cjs → chunk-OHKO5THF.cjs} +3 -3
  126. package/dist/{chunk-GQVL2JKQ.cjs.map → chunk-OHKO5THF.cjs.map} +1 -1
  127. package/dist/{chunk-LMBXJZLG.js → chunk-ON4JULCA.js} +3 -3
  128. package/dist/{chunk-LMBXJZLG.js.map → chunk-ON4JULCA.js.map} +1 -1
  129. package/dist/{chunk-4KZIXV2J.js → chunk-ONNY7UO4.js} +6 -6
  130. package/dist/{chunk-4KZIXV2J.js.map → chunk-ONNY7UO4.js.map} +1 -1
  131. package/dist/{chunk-XNU4NTVE.js → chunk-OSPTA4UR.js} +3 -3
  132. package/dist/{chunk-XNU4NTVE.js.map → chunk-OSPTA4UR.js.map} +1 -1
  133. package/dist/{chunk-FDUA6OGN.js → chunk-PFKRHNYV.js} +8 -8
  134. package/dist/chunk-PFKRHNYV.js.map +1 -0
  135. package/dist/{chunk-KFEN2SRZ.js → chunk-PHK4XBO5.js} +3 -3
  136. package/dist/{chunk-KFEN2SRZ.js.map → chunk-PHK4XBO5.js.map} +1 -1
  137. package/dist/{chunk-Q4NRKKIW.js → chunk-PYHFVYVZ.js} +3 -3
  138. package/dist/{chunk-Q4NRKKIW.js.map → chunk-PYHFVYVZ.js.map} +1 -1
  139. package/dist/{chunk-XMCIXHGH.js → chunk-Q7G56ZIO.js} +39 -23
  140. package/dist/chunk-Q7G56ZIO.js.map +1 -0
  141. package/dist/{chunk-CLRWVJOD.js → chunk-QAKASRE6.js} +32 -24
  142. package/dist/chunk-QAKASRE6.js.map +1 -0
  143. package/dist/{chunk-UBOVDAD7.js → chunk-QAQOCS2J.js} +3 -3
  144. package/dist/{chunk-UBOVDAD7.js.map → chunk-QAQOCS2J.js.map} +1 -1
  145. package/dist/{chunk-YVIH26FG.cjs → chunk-QKAYRHWP.cjs} +12 -12
  146. package/dist/{chunk-YVIH26FG.cjs.map → chunk-QKAYRHWP.cjs.map} +1 -1
  147. package/dist/{chunk-P3JEMF6E.cjs → chunk-RSCA5AZW.cjs} +4 -4
  148. package/dist/{chunk-P3JEMF6E.cjs.map → chunk-RSCA5AZW.cjs.map} +1 -1
  149. package/dist/{chunk-5Y5FSR4N.js → chunk-SCXELRRZ.js} +3 -3
  150. package/dist/{chunk-5Y5FSR4N.js.map → chunk-SCXELRRZ.js.map} +1 -1
  151. package/dist/{chunk-JWTCEWQ4.cjs → chunk-SNEQXSC5.cjs} +2 -2
  152. package/dist/{chunk-JWTCEWQ4.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
  153. package/dist/{chunk-ZPZAZQW4.cjs → chunk-SRA2L3SQ.cjs} +6 -4
  154. package/dist/chunk-SRA2L3SQ.cjs.map +1 -0
  155. package/dist/{chunk-HK3AMH3Q.cjs → chunk-VROIMIHB.cjs} +11 -3
  156. package/dist/chunk-VROIMIHB.cjs.map +1 -0
  157. package/dist/{chunk-3SHLOF4V.cjs → chunk-VTR2KGLY.cjs} +9 -9
  158. package/dist/{chunk-3SHLOF4V.cjs.map → chunk-VTR2KGLY.cjs.map} +1 -1
  159. package/dist/chunk-WYMO3IIK.js +136 -0
  160. package/dist/chunk-WYMO3IIK.js.map +1 -0
  161. package/dist/{chunk-ABTO4RD6.cjs → chunk-X5QRRMGB.cjs} +32 -24
  162. package/dist/chunk-X5QRRMGB.cjs.map +1 -0
  163. package/dist/{chunk-SH6B4MG5.js → chunk-XBXDUAIM.js} +4 -4
  164. package/dist/{chunk-SH6B4MG5.js.map → chunk-XBXDUAIM.js.map} +1 -1
  165. package/dist/{chunk-K5GQPTTA.cjs → chunk-XEEVDZDK.cjs} +3 -3
  166. package/dist/{chunk-K5GQPTTA.cjs.map → chunk-XEEVDZDK.cjs.map} +1 -1
  167. package/dist/{chunk-GXODR6V4.js → chunk-XOIIUO6O.js} +3 -3
  168. package/dist/{chunk-GXODR6V4.js.map → chunk-XOIIUO6O.js.map} +1 -1
  169. package/dist/{chunk-AHHFFXJR.cjs → chunk-XTHMC76F.cjs} +3 -3
  170. package/dist/{chunk-AHHFFXJR.cjs.map → chunk-XTHMC76F.cjs.map} +1 -1
  171. package/dist/{chunk-TVLZZI5Q.cjs → chunk-YJP6DUFO.cjs} +9 -9
  172. package/dist/{chunk-TVLZZI5Q.cjs.map → chunk-YJP6DUFO.cjs.map} +1 -1
  173. package/dist/{chunk-EHQ77LL5.js → chunk-ZB54MTMQ.js} +3 -3
  174. package/dist/{chunk-EHQ77LL5.js.map → chunk-ZB54MTMQ.js.map} +1 -1
  175. package/dist/components/Accordion/index.cjs +2 -2
  176. package/dist/components/Accordion/index.js +1 -1
  177. package/dist/components/Alert/index.d.cts +1 -1
  178. package/dist/components/Alert/index.d.ts +1 -1
  179. package/dist/components/AlertDialog/index.cjs +6 -5
  180. package/dist/components/AlertDialog/index.js +5 -4
  181. package/dist/components/Autocomplete/index.cjs +3 -3
  182. package/dist/components/Autocomplete/index.js +2 -2
  183. package/dist/components/Badge/index.d.cts +1 -1
  184. package/dist/components/Badge/index.d.ts +1 -1
  185. package/dist/components/Breadcrumb/index.cjs +3 -3
  186. package/dist/components/Breadcrumb/index.js +1 -1
  187. package/dist/components/Button/index.cjs +3 -3
  188. package/dist/components/Button/index.js +1 -1
  189. package/dist/components/Card/index.d.cts +2 -2
  190. package/dist/components/Card/index.d.ts +2 -2
  191. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  192. package/dist/components/CountryCodeDropdown/index.d.cts +11 -1
  193. package/dist/components/CountryCodeDropdown/index.d.ts +11 -1
  194. package/dist/components/CountryCodeDropdown/index.js +2 -2
  195. package/dist/components/CustomizableDashboard/index.cjs +11 -11
  196. package/dist/components/CustomizableDashboard/index.js +4 -4
  197. package/dist/components/DateInput/index.cjs +4 -4
  198. package/dist/components/DateInput/index.js +3 -3
  199. package/dist/components/Dropdown/index.cjs +9 -9
  200. package/dist/components/Dropdown/index.js +2 -2
  201. package/dist/components/FloatingWindow/index.cjs +4 -4
  202. package/dist/components/FloatingWindow/index.js +2 -2
  203. package/dist/components/GlossaryTooltip/index.cjs +3 -3
  204. package/dist/components/GlossaryTooltip/index.js +2 -2
  205. package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -5
  206. package/dist/components/KeyboardShortcutsOverlay/index.js +4 -3
  207. package/dist/components/Markdown/index.cjs +19 -19
  208. package/dist/components/Markdown/index.js +7 -7
  209. package/dist/components/MediaEditor/index.cjs +13 -12
  210. package/dist/components/MediaEditor/index.js +8 -7
  211. package/dist/components/MediaPlayer/index.cjs +6 -6
  212. package/dist/components/MediaPlayer/index.js +3 -3
  213. package/dist/components/Modal/index.cjs +11 -10
  214. package/dist/components/Modal/index.d.cts +1 -1
  215. package/dist/components/Modal/index.d.ts +1 -1
  216. package/dist/components/Modal/index.js +3 -2
  217. package/dist/components/Pagination/index.cjs +4 -4
  218. package/dist/components/Pagination/index.d.cts +1 -1
  219. package/dist/components/Pagination/index.d.ts +1 -1
  220. package/dist/components/Pagination/index.js +1 -1
  221. package/dist/components/PhoneInput/index.cjs +4 -4
  222. package/dist/components/PhoneInput/index.js +2 -2
  223. package/dist/components/Progress/index.d.cts +1 -1
  224. package/dist/components/Progress/index.d.ts +1 -1
  225. package/dist/components/RecordButton/index.d.cts +1 -1
  226. package/dist/components/RecordButton/index.d.ts +1 -1
  227. package/dist/components/RichTextEditor/index.cjs +8 -8
  228. package/dist/components/RichTextEditor/index.js +5 -5
  229. package/dist/components/SectionSpyNav/index.cjs +4 -4
  230. package/dist/components/SectionSpyNav/index.js +3 -3
  231. package/dist/components/Select/index.cjs +4 -4
  232. package/dist/components/Select/index.js +2 -2
  233. package/dist/components/Sheet/index.cjs +11 -11
  234. package/dist/components/Sheet/index.js +2 -2
  235. package/dist/components/Slider/index.d.cts +2 -2
  236. package/dist/components/Slider/index.d.ts +2 -2
  237. package/dist/components/SourceTip/index.cjs +3 -3
  238. package/dist/components/SourceTip/index.js +2 -2
  239. package/dist/components/SuperChat/index.cjs +10 -10
  240. package/dist/components/SuperChat/index.js +4 -4
  241. package/dist/components/SuperChat/plugins/index.cjs +4 -4
  242. package/dist/components/SuperChat/plugins/index.js +3 -3
  243. package/dist/components/Text/index.d.cts +1 -1
  244. package/dist/components/Text/index.d.ts +1 -1
  245. package/dist/components/ThemeProvider/index.cjs +9 -9
  246. package/dist/components/ThemeProvider/index.d.cts +1 -1
  247. package/dist/components/ThemeProvider/index.d.ts +1 -1
  248. package/dist/components/ThemeProvider/index.js +3 -3
  249. package/dist/components/Toggle/index.d.cts +1 -1
  250. package/dist/components/Toggle/index.d.ts +1 -1
  251. package/dist/components/Tooltip/index.cjs +3 -3
  252. package/dist/components/Tooltip/index.js +2 -2
  253. package/dist/components/TranscriptView/index.cjs +3 -3
  254. package/dist/components/TranscriptView/index.js +1 -1
  255. package/dist/datavis.cjs +2 -2
  256. package/dist/datavis.js +1 -1
  257. package/dist/esheet.cjs +14 -13
  258. package/dist/esheet.cjs.map +1 -1
  259. package/dist/esheet.js +11 -10
  260. package/dist/esheet.js.map +1 -1
  261. package/dist/hooks/index.cjs +1 -1
  262. package/dist/hooks/index.js +1 -1
  263. package/dist/index.cjs +1850 -1123
  264. package/dist/index.cjs.map +1 -1
  265. package/dist/index.d.cts +227 -29
  266. package/dist/index.d.ts +227 -29
  267. package/dist/index.js +826 -131
  268. package/dist/index.js.map +1 -1
  269. package/dist/motion.cjs +87 -0
  270. package/dist/motion.cjs.map +1 -0
  271. package/dist/motion.d.cts +52 -0
  272. package/dist/motion.d.ts +52 -0
  273. package/dist/motion.js +50 -0
  274. package/dist/motion.js.map +1 -0
  275. package/dist/styles.css +1 -1
  276. package/dist/tailwind-preset.cjs +4 -4
  277. package/dist/tailwind-preset.js +1 -1
  278. package/package.json +17 -1
  279. package/dist/CsvBlock-HMAZ7YK5.cjs +0 -15
  280. package/dist/CsvBlock-RPGHFTVD.js +0 -6
  281. package/dist/HtmlPreviewBlock-QHLSIMWJ.cjs +0 -15
  282. package/dist/HtmlPreviewBlock-YF2YVKKX.js +0 -6
  283. package/dist/MermaidBlock-H3TWNC4D.js +0 -6
  284. package/dist/MermaidBlock-ZLLBO3VY.cjs +0 -15
  285. package/dist/SurveyBlock-ID55AT3R.js +0 -6
  286. package/dist/SurveyBlock-K6HKI7AD.cjs +0 -15
  287. package/dist/chunk-3PXOIAF6.js +0 -3
  288. package/dist/chunk-4AE2L6AO.cjs.map +0 -1
  289. package/dist/chunk-4J4FDVPS.cjs.map +0 -1
  290. package/dist/chunk-5EKRH4KE.cjs.map +0 -1
  291. package/dist/chunk-5JZIDILK.cjs.map +0 -1
  292. package/dist/chunk-6GKX36JX.js.map +0 -1
  293. package/dist/chunk-7L4SY5YY.js.map +0 -1
  294. package/dist/chunk-ABTO4RD6.cjs.map +0 -1
  295. package/dist/chunk-CLRWVJOD.js.map +0 -1
  296. package/dist/chunk-D2GID3YK.js.map +0 -1
  297. package/dist/chunk-FDUA6OGN.js.map +0 -1
  298. package/dist/chunk-HK3AMH3Q.cjs.map +0 -1
  299. package/dist/chunk-JHZW3Y62.js.map +0 -1
  300. package/dist/chunk-JR4QIU54.cjs.map +0 -1
  301. package/dist/chunk-KLLRTTC5.js.map +0 -1
  302. package/dist/chunk-MUUB35XB.js.map +0 -1
  303. package/dist/chunk-P2VTQ5AR.cjs.map +0 -1
  304. package/dist/chunk-RDGRKYQ5.cjs.map +0 -1
  305. package/dist/chunk-RVGTI4F6.js.map +0 -1
  306. package/dist/chunk-VA3WQ5KJ.cjs.map +0 -1
  307. package/dist/chunk-XMCIXHGH.js.map +0 -1
  308. package/dist/chunk-Y6YSJPVC.js.map +0 -1
  309. package/dist/chunk-ZJ5KAZLW.js.map +0 -1
  310. package/dist/chunk-ZONEAWPR.cjs.map +0 -1
  311. package/dist/chunk-ZPZAZQW4.cjs.map +0 -1
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkYP5T6NZD_cjs = require('./chunk-YP5T6NZD.cjs');
4
- var chunkJMZF7ZHF_cjs = require('./chunk-JMZF7ZHF.cjs');
5
- var chunkRDGRKYQ5_cjs = require('./chunk-RDGRKYQ5.cjs');
4
+ var chunk4SM3I7WE_cjs = require('./chunk-4SM3I7WE.cjs');
6
5
  var chunkC7RVKV25_cjs = require('./chunk-C7RVKV25.cjs');
6
+ var chunkIINZWUGK_cjs = require('./chunk-IINZWUGK.cjs');
7
7
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
8
8
  var React = require('react');
9
9
  var lucideReact = require('lucide-react');
@@ -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
- chunkRDGRKYQ5_cjs.Button,
306
+ chunkIINZWUGK_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
- chunkRDGRKYQ5_cjs.Button,
320
+ chunkIINZWUGK_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
- chunkRDGRKYQ5_cjs.Button,
334
+ chunkIINZWUGK_cjs.Button,
335
335
  {
336
336
  type: "button",
337
337
  variant: "ghost",
@@ -346,7 +346,7 @@ var RichTextEditor = React__namespace.forwardRef(
346
346
  ),
347
347
  /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
348
348
  /* @__PURE__ */ jsxRuntime.jsx(
349
- chunkRDGRKYQ5_cjs.Button,
349
+ chunkIINZWUGK_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
- chunkRDGRKYQ5_cjs.Button,
363
+ chunkIINZWUGK_cjs.Button,
364
364
  {
365
365
  type: "button",
366
366
  variant: "ghost",
@@ -375,7 +375,7 @@ var RichTextEditor = React__namespace.forwardRef(
375
375
  ),
376
376
  /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
377
377
  /* @__PURE__ */ jsxRuntime.jsx(
378
- chunkRDGRKYQ5_cjs.Button,
378
+ chunkIINZWUGK_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
- chunkRDGRKYQ5_cjs.Button,
392
+ chunkIINZWUGK_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
- chunkRDGRKYQ5_cjs.Button,
406
+ chunkIINZWUGK_cjs.Button,
407
407
  {
408
408
  type: "button",
409
409
  variant: "ghost",
@@ -419,7 +419,7 @@ var RichTextEditor = React__namespace.forwardRef(
419
419
  hasVariables && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
420
420
  /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
421
421
  /* @__PURE__ */ jsxRuntime.jsx(
422
- chunkJMZF7ZHF_cjs.Dropdown,
422
+ chunk4SM3I7WE_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
- chunkRDGRKYQ5_cjs.Button,
431
+ chunkIINZWUGK_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(chunkJMZF7ZHF_cjs.DropdownSeparator, {}),
447
- /* @__PURE__ */ jsxRuntime.jsx(chunkJMZF7ZHF_cjs.DropdownLabel, { children: group.label }),
446
+ groupIndex > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunk4SM3I7WE_cjs.DropdownSeparator, {}),
447
+ /* @__PURE__ */ jsxRuntime.jsx(chunk4SM3I7WE_cjs.DropdownLabel, { children: group.label }),
448
448
  group.variables.map((variable) => /* @__PURE__ */ jsxRuntime.jsx(
449
- chunkJMZF7ZHF_cjs.DropdownItem,
449
+ chunk4SM3I7WE_cjs.DropdownItem,
450
450
  {
451
451
  onClick: () => insertVariable(variable),
452
452
  children: variable.label
@@ -458,7 +458,7 @@ var RichTextEditor = React__namespace.forwardRef(
458
458
  ),
459
459
  /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
460
460
  /* @__PURE__ */ jsxRuntime.jsxs(
461
- chunkRDGRKYQ5_cjs.Button,
461
+ chunkIINZWUGK_cjs.Button,
462
462
  {
463
463
  type: "button",
464
464
  variant: "ghost",
@@ -477,7 +477,7 @@ var RichTextEditor = React__namespace.forwardRef(
477
477
  enableDictation && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
478
478
  /* @__PURE__ */ jsxRuntime.jsx(chunkYP5T6NZD_cjs.Separator, { orientation: "vertical", className: "mx-1 h-6" }),
479
479
  /* @__PURE__ */ jsxRuntime.jsxs(
480
- chunkRDGRKYQ5_cjs.Button,
480
+ chunkIINZWUGK_cjs.Button,
481
481
  {
482
482
  type: "button",
483
483
  variant: isListening ? "danger" : "ghost",
@@ -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-AGYNCPJ2.cjs.map
537
- //# sourceMappingURL=chunk-AGYNCPJ2.cjs.map
536
+ //# sourceMappingURL=chunk-7KN6J7XV.cjs.map
537
+ //# sourceMappingURL=chunk-7KN6J7XV.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-AGYNCPJ2.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 start-0 top-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-7KN6J7XV.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 start-0 top-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,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkYIXTGWT4_cjs = require('./chunk-YIXTGWT4.cjs');
4
- var chunkRDGRKYQ5_cjs = require('./chunk-RDGRKYQ5.cjs');
3
+ var chunk6QKMMKRY_cjs = require('./chunk-6QKMMKRY.cjs');
4
+ var chunkIINZWUGK_cjs = require('./chunk-IINZWUGK.cjs');
5
5
  var lucideReact = require('lucide-react');
6
6
  var react = require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -99,15 +99,15 @@ var CsvBlock = ({ code, id }) => {
99
99
  setTimeout(() => URL.revokeObjectURL(url), 100);
100
100
  }, [sortedRows, id, papa]);
101
101
  if (loadError) {
102
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYIXTGWT4_cjs.FenceBlock, { code, language: "csv", error: loadError, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
102
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6QKMMKRY_cjs.FenceBlock, { code, language: "csv", error: loadError, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
103
103
  }
104
104
  if (!papa) {
105
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYIXTGWT4_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-6 text-sm text-neutral-500", children: "Loading CSV parser\u2026" }) });
105
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6QKMMKRY_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-6 text-sm text-neutral-500", children: "Loading CSV parser\u2026" }) });
106
106
  }
107
107
  if (parsed.error) {
108
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYIXTGWT4_cjs.FenceBlock, { code, language: "csv", error: parsed.error, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
108
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6QKMMKRY_cjs.FenceBlock, { code, language: "csv", error: parsed.error, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
109
109
  }
110
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYIXTGWT4_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
110
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6QKMMKRY_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
111
111
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700", children: [
112
112
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-neutral-500 dark:text-neutral-400", children: [
113
113
  sortedRows.length,
@@ -120,7 +120,7 @@ var CsvBlock = ({ code, id }) => {
120
120
  parsed.headers.length !== 1 ? "s" : ""
121
121
  ] }),
122
122
  /* @__PURE__ */ jsxRuntime.jsxs(
123
- chunkRDGRKYQ5_cjs.Button,
123
+ chunkIINZWUGK_cjs.Button,
124
124
  {
125
125
  variant: "ghost",
126
126
  size: "sm",
@@ -180,5 +180,5 @@ var CsvBlock = ({ code, id }) => {
180
180
  };
181
181
 
182
182
  exports.CsvBlock = CsvBlock;
183
- //# sourceMappingURL=chunk-SNSA6NWD.cjs.map
184
- //# sourceMappingURL=chunk-SNSA6NWD.cjs.map
183
+ //# sourceMappingURL=chunk-AHINB2TP.cjs.map
184
+ //# sourceMappingURL=chunk-AHINB2TP.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":["useState","useEffect","useMemo","useCallback","jsx","FenceBlock","jsxs","Button","Download"],"mappings":"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","file":"chunk-SNSA6NWD.cjs","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-start text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-start font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":["useState","useEffect","useMemo","useCallback","jsx","FenceBlock","jsxs","Button","Download"],"mappings":"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","file":"chunk-AHINB2TP.cjs","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-start text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-start font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
@@ -0,0 +1,3 @@
1
+ export { Accessibility, Activity, AlertCircle, AlertTriangle, Ambulance, ArrowLeft, ArrowRight, ArrowUp, ArrowUpDown, AtSign, Baby, BadgeAlert, BadgeCheck, BadgeMinus, BadgePlus, BadgeX, Ban, Bandage, BarChart3, Bed, BedDouble, BedSingle, Bell, BellOff, Biohazard, Bone, BookOpen, BookOpenCheck, Bookmark, Bot, Brain, Briefcase, BriefcaseMedical, Building, Calendar, CalendarCheck, Camera, Cannabis, Check, CheckCircle, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Cigarette, CigaretteOff, CircleDot, CircleDotDashed, CircleUser, CircleUserRound, Clipboard, ClipboardCheck, ClipboardList, ClipboardPlus, Clock, Cog, Columns, Copy, CreditCard, Cross, Dna, DollarSign, Download, Droplet, Droplets, Ear, ExternalLink, Eye, EyeOff, File, FileCheck, FileCheck2, FileHeart, FilePlus, FilePlus2, FileText, Filter, Fingerprint, Flag, FlaskConical, FlaskRound, Folder, FolderOpen, Footprints, Glasses, Globe, GripVertical, Hand, HandMetal, Hash, Heart, HeartOff, HeartPulse, HelpCircle, History, Home, Hospital, Image, Info, Key, LayoutGrid, Link, List, Loader2, Lock, LogIn, LogOut, Mail, MapPin, Maximize, Menu, MessageSquare, Mic, Microscope, Minimize, Minus, Monitor, Moon, MoreHorizontal, MoreVertical, NotebookPen, Palette, Paperclip, Pencil, Phone, PieChart, Pill, Plus, Printer, Radiation, RefreshCw, Ruler, Save, Scale, Scaling, Scan, ScanEye, ScanLine, Search, Send, Settings, Share, Shield, ShieldCheck, ShieldPlus, Sliders, Sparkle, Square, Star, Stethoscope, StickyNote, Sun, Syringe, Table, Tablets, Tag, TestTube2, TestTubes, Thermometer, ThermometerSun, ThumbsDown, ThumbsUp, Timer, Trash2, TrendingDown, TrendingUp, Truck, Unlock, Upload, User, UserCheck, UserMinus, UserPlus, UserRound, UserRoundCheck, UserRoundMinus, UserRoundPlus, UserRoundX, Users, Weight, Wheat, WheatOff, Wrench, X, X as X2, XCircle, Zap } from 'lucide-react';
2
+ //# sourceMappingURL=chunk-BKSPDTX4.js.map
3
+ //# sourceMappingURL=chunk-BKSPDTX4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-3PXOIAF6.js","sourcesContent":[]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-BKSPDTX4.js","sourcesContent":[]}
@@ -0,0 +1,163 @@
1
+ 'use strict';
2
+
3
+ var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
4
+ var React = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ // src/motion/presets.ts
28
+ var motionPresets = {
29
+ /**
30
+ * Off-canvas panel pinned to the inline-start edge. Animates `x` only, which
31
+ * the compositor can handle without layout or paint.
32
+ */
33
+ drawerStart: {
34
+ variants: {
35
+ open: { x: "0%" },
36
+ // Off-canvas direction follows writing direction, mirroring the
37
+ // `-translate-x-full rtl:translate-x-full` CSS fallback.
38
+ closed: (isRtl) => ({ x: isRtl ? "100%" : "-100%" })
39
+ },
40
+ transition: { type: "spring", stiffness: 400, damping: 40, mass: 1 }
41
+ },
42
+ /** Scrim behind a drawer or modal. */
43
+ overlay: {
44
+ variants: {
45
+ open: { opacity: 1 },
46
+ closed: { opacity: 0 }
47
+ },
48
+ transition: { duration: 0.2, ease: "easeOut" }
49
+ },
50
+ /** Centered dialog surface — rises and settles rather than popping. */
51
+ modalContent: {
52
+ variants: {
53
+ open: { opacity: 1, scale: 1, y: 0 },
54
+ closed: { opacity: 0, scale: 0.96, y: 8 }
55
+ },
56
+ transition: { type: "spring", stiffness: 500, damping: 40, mass: 0.8 }
57
+ },
58
+ /**
59
+ * Text that disappears as its container narrows — sidebar labels on collapse.
60
+ *
61
+ * Opacity only, and deliberately so. An inline-axis slide would read slightly
62
+ * better but would make every label direction-aware, and resolving direction
63
+ * per nav item is a disproportionate amount of plumbing for an 8px nudge.
64
+ * Fading also degrades to itself under reduced motion instead of becoming a
65
+ * different animation.
66
+ *
67
+ * Short because it runs on many elements at once and has to finish inside the
68
+ * container's own width transition, or labels are still fading after the rail
69
+ * has stopped moving.
70
+ */
71
+ sidebarLabel: {
72
+ variants: {
73
+ open: { opacity: 1 },
74
+ closed: { opacity: 0 }
75
+ },
76
+ transition: { duration: 0.15, ease: "easeOut" }
77
+ }
78
+ };
79
+ var CONTEXT_KEY = /* @__PURE__ */ Symbol.for("@mieweb/ui.motionRuntimeContext.v1");
80
+ function getMotionRuntimeContext() {
81
+ const globalScope = globalThis;
82
+ if (!globalScope[CONTEXT_KEY]) {
83
+ globalScope[CONTEXT_KEY] = React__namespace.createContext(null);
84
+ }
85
+ return globalScope[CONTEXT_KEY];
86
+ }
87
+ var MotionRuntimeContext = getMotionRuntimeContext();
88
+ function useMotionRuntime() {
89
+ return React__namespace.useContext(MotionRuntimeContext);
90
+ }
91
+ function createPresetPropBuilders() {
92
+ return {
93
+ toggle(preset, open, custom) {
94
+ const { variants, transition } = motionPresets[preset];
95
+ return {
96
+ variants,
97
+ transition,
98
+ custom,
99
+ // `false` pins the element to its current variant on mount instead of
100
+ // animating into it.
101
+ initial: false,
102
+ animate: open ? "open" : "closed"
103
+ };
104
+ },
105
+ presence(preset, custom) {
106
+ const { variants, transition } = motionPresets[preset];
107
+ return {
108
+ variants,
109
+ transition,
110
+ custom,
111
+ initial: "closed",
112
+ animate: "open",
113
+ exit: "closed"
114
+ };
115
+ }
116
+ };
117
+ }
118
+ var Animated = React__namespace.forwardRef(
119
+ function Animated2({
120
+ as = "div",
121
+ preset,
122
+ mode,
123
+ open = false,
124
+ custom,
125
+ className,
126
+ fallbackClassName,
127
+ enabled = true,
128
+ children,
129
+ ...rest
130
+ }, ref) {
131
+ const runtime = useMotionRuntime();
132
+ if (!runtime || !runtime.enabled || !enabled) {
133
+ const Tag = as;
134
+ return /* @__PURE__ */ jsxRuntime.jsx(Tag, { ref, className: chunkS5RVSXDV_cjs.cn(fallbackClassName, className), ...rest, children });
135
+ }
136
+ const Component = as === "nav" ? runtime.Nav : as === "span" ? runtime.Span : runtime.Div;
137
+ const motionProps = mode === "toggle" ? runtime.toggle(preset, open, custom) : runtime.presence(preset, custom);
138
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className, ...motionProps, ...rest, children });
139
+ }
140
+ );
141
+ Animated.displayName = "Animated";
142
+ function AnimatedPresence({
143
+ children,
144
+ initial,
145
+ onExitComplete
146
+ }) {
147
+ const runtime = useMotionRuntime();
148
+ if (!runtime) {
149
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
150
+ }
151
+ const { Presence } = runtime;
152
+ return /* @__PURE__ */ jsxRuntime.jsx(Presence, { initial, onExitComplete, children });
153
+ }
154
+ AnimatedPresence.displayName = "AnimatedPresence";
155
+
156
+ exports.Animated = Animated;
157
+ exports.AnimatedPresence = AnimatedPresence;
158
+ exports.MotionRuntimeContext = MotionRuntimeContext;
159
+ exports.createPresetPropBuilders = createPresetPropBuilders;
160
+ exports.motionPresets = motionPresets;
161
+ exports.useMotionRuntime = useMotionRuntime;
162
+ //# sourceMappingURL=chunk-BN75TLUN.cjs.map
163
+ //# sourceMappingURL=chunk-BN75TLUN.cjs.map