@mieweb/ui 0.8.0 → 0.9.0-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 (384) hide show
  1. package/README.md +162 -739
  2. package/agent/mieweb-ui.instructions.md +34 -16
  3. package/dist/Animated-Cs-naa2g.d.cts +175 -0
  4. package/dist/Animated-Cs-naa2g.d.ts +175 -0
  5. package/dist/CsvBlock-D7Z6ZCRP.js +6 -0
  6. package/dist/{CsvBlock-PUSTBQ5B.js.map → CsvBlock-D7Z6ZCRP.js.map} +1 -1
  7. package/dist/CsvBlock-QXXZ7ZUM.cjs +15 -0
  8. package/dist/{CsvBlock-OTFG3PYZ.cjs.map → CsvBlock-QXXZ7ZUM.cjs.map} +1 -1
  9. package/dist/HtmlPreviewBlock-AADG7MVB.cjs +15 -0
  10. package/dist/{HtmlPreviewBlock-QHLSIMWJ.cjs.map → HtmlPreviewBlock-AADG7MVB.cjs.map} +1 -1
  11. package/dist/HtmlPreviewBlock-F5VDM2EN.js +6 -0
  12. package/dist/{HtmlPreviewBlock-YF2YVKKX.js.map → HtmlPreviewBlock-F5VDM2EN.js.map} +1 -1
  13. package/dist/MermaidBlock-6PLITRBZ.js +6 -0
  14. package/dist/{MermaidBlock-H3TWNC4D.js.map → MermaidBlock-6PLITRBZ.js.map} +1 -1
  15. package/dist/MermaidBlock-TQ2O5CLV.cjs +15 -0
  16. package/dist/{MermaidBlock-ZLLBO3VY.cjs.map → MermaidBlock-TQ2O5CLV.cjs.map} +1 -1
  17. package/dist/SurveyBlock-OYL3VNU5.cjs +15 -0
  18. package/dist/{SurveyBlock-M2ZRTGVJ.cjs.map → SurveyBlock-OYL3VNU5.cjs.map} +1 -1
  19. package/dist/SurveyBlock-W5PSQ62F.js +6 -0
  20. package/dist/{SurveyBlock-JLHS3YQD.js.map → SurveyBlock-W5PSQ62F.js.map} +1 -1
  21. package/dist/ag-grid.cjs +5 -5
  22. package/dist/ag-grid.js +1 -1
  23. package/dist/brands/index.cjs +7 -7
  24. package/dist/brands/index.js +2 -2
  25. package/dist/{chunk-XS35KPBZ.cjs → chunk-2A2FLQJC.cjs} +1140 -14
  26. package/dist/chunk-2A2FLQJC.cjs.map +1 -0
  27. package/dist/{chunk-OTQ72WX3.js → chunk-2BPIVWAK.js} +3 -3
  28. package/dist/{chunk-OTQ72WX3.js.map → chunk-2BPIVWAK.js.map} +1 -1
  29. package/dist/{chunk-6EWJGRC3.js → chunk-3JWAABYI.js} +6 -6
  30. package/dist/chunk-3JWAABYI.js.map +1 -0
  31. package/dist/{chunk-5JZIDILK.cjs → chunk-3LHICE4I.cjs} +6 -6
  32. package/dist/chunk-3LHICE4I.cjs.map +1 -0
  33. package/dist/{chunk-JHZW3Y62.js → chunk-3RB35GYK.js} +5 -5
  34. package/dist/chunk-3RB35GYK.js.map +1 -0
  35. package/dist/{chunk-BOW7ZGI2.cjs → chunk-4SM3I7WE.cjs} +170 -10
  36. package/dist/chunk-4SM3I7WE.cjs.map +1 -0
  37. package/dist/{chunk-QHTDWIED.js → chunk-5H7SAEQO.js} +5 -5
  38. package/dist/{chunk-QHTDWIED.js.map → chunk-5H7SAEQO.js.map} +1 -1
  39. package/dist/chunk-5VXRKOPR.cjs +735 -0
  40. package/dist/chunk-5VXRKOPR.cjs.map +1 -0
  41. package/dist/{chunk-EMMYFHOT.js → chunk-5WOB4UBD.js} +3 -3
  42. package/dist/{chunk-EMMYFHOT.js.map → chunk-5WOB4UBD.js.map} +1 -1
  43. package/dist/{chunk-4CUFXCC5.cjs → chunk-5Z6UPVGC.cjs} +6 -6
  44. package/dist/{chunk-4CUFXCC5.cjs.map → chunk-5Z6UPVGC.cjs.map} +1 -1
  45. package/dist/{chunk-YIXTGWT4.cjs → chunk-6QKMMKRY.cjs} +5 -5
  46. package/dist/{chunk-YIXTGWT4.cjs.map → chunk-6QKMMKRY.cjs.map} +1 -1
  47. package/dist/{chunk-F57VRLKP.js → chunk-6SAYPXHX.js} +4 -4
  48. package/dist/{chunk-F57VRLKP.js.map → chunk-6SAYPXHX.js.map} +1 -1
  49. package/dist/{chunk-SK7H3Z67.cjs → chunk-6XDPJWSC.cjs} +99 -83
  50. package/dist/chunk-6XDPJWSC.cjs.map +1 -0
  51. package/dist/{chunk-4AE2L6AO.cjs → chunk-7FTBPLA6.cjs} +8 -8
  52. package/dist/chunk-7FTBPLA6.cjs.map +1 -0
  53. package/dist/{chunk-KVE7PQ5P.cjs → chunk-7KN6J7XV.cjs} +20 -20
  54. package/dist/{chunk-KVE7PQ5P.cjs.map → chunk-7KN6J7XV.cjs.map} +1 -1
  55. package/dist/{chunk-K4S4FAYX.cjs → chunk-AHINB2TP.cjs} +11 -11
  56. package/dist/{chunk-K4S4FAYX.cjs.map → chunk-AHINB2TP.cjs.map} +1 -1
  57. package/dist/{chunk-MYFZYUPR.cjs → chunk-AOHJILLU.cjs} +38 -3
  58. package/dist/chunk-AOHJILLU.cjs.map +1 -0
  59. package/dist/chunk-BKSPDTX4.js +3 -0
  60. package/dist/{chunk-3PXOIAF6.js.map → chunk-BKSPDTX4.js.map} +1 -1
  61. package/dist/chunk-BN75TLUN.cjs +163 -0
  62. package/dist/chunk-BN75TLUN.cjs.map +1 -0
  63. package/dist/{chunk-WWJIW2IH.cjs → chunk-BVMABVC4.cjs} +3 -3
  64. package/dist/{chunk-WWJIW2IH.cjs.map → chunk-BVMABVC4.cjs.map} +1 -1
  65. package/dist/{chunk-H7QSGFMZ.cjs → chunk-BZAGP5W6.cjs} +17 -10
  66. package/dist/chunk-BZAGP5W6.cjs.map +1 -0
  67. package/dist/{chunk-RS5VA6QU.cjs → chunk-C3DUS2VE.cjs} +3 -3
  68. package/dist/{chunk-RS5VA6QU.cjs.map → chunk-C3DUS2VE.cjs.map} +1 -1
  69. package/dist/{chunk-NLBT5O2X.js → chunk-CK3KLRNF.js} +3 -3
  70. package/dist/{chunk-NLBT5O2X.js.map → chunk-CK3KLRNF.js.map} +1 -1
  71. package/dist/{chunk-L6D4CKLV.cjs → chunk-CXDMZT45.cjs} +135 -4
  72. package/dist/chunk-CXDMZT45.cjs.map +1 -0
  73. package/dist/{chunk-TXRQQMG5.js → chunk-CYMZ2QS5.js} +2 -2
  74. package/dist/{chunk-TXRQQMG5.js.map → chunk-CYMZ2QS5.js.map} +1 -1
  75. package/dist/{chunk-DX64KLSN.js → chunk-D25WH7MH.js} +7 -7
  76. package/dist/{chunk-DX64KLSN.js.map → chunk-D25WH7MH.js.map} +1 -1
  77. package/dist/{chunk-XBKOZRDO.js → chunk-DFYMIRMW.js} +4 -4
  78. package/dist/{chunk-XBKOZRDO.js.map → chunk-DFYMIRMW.js.map} +1 -1
  79. package/dist/{chunk-AESFOMSH.js → chunk-DGRXAIWK.js} +135 -4
  80. package/dist/chunk-DGRXAIWK.js.map +1 -0
  81. package/dist/{chunk-UZ5NGGMI.js → chunk-EG7XFZ3W.js} +4 -4
  82. package/dist/{chunk-UZ5NGGMI.js.map → chunk-EG7XFZ3W.js.map} +1 -1
  83. package/dist/{chunk-LQHI44OZ.cjs → chunk-FUFBRKOG.cjs} +59 -59
  84. package/dist/{chunk-LQHI44OZ.cjs.map → chunk-FUFBRKOG.cjs.map} +1 -1
  85. package/dist/{chunk-DG7KE4YJ.cjs → chunk-FYAKUU2A.cjs} +38 -21
  86. package/dist/chunk-FYAKUU2A.cjs.map +1 -0
  87. package/dist/{chunk-7L7OPISJ.cjs → chunk-H4AVMUOC.cjs} +12 -6
  88. package/dist/chunk-H4AVMUOC.cjs.map +1 -0
  89. package/dist/{chunk-I2ECTLON.cjs → chunk-HXSA6QC5.cjs} +3 -3
  90. package/dist/{chunk-I2ECTLON.cjs.map → chunk-HXSA6QC5.cjs.map} +1 -1
  91. package/dist/{chunk-DCBMTFLE.js → chunk-HZ4MBUC3.js} +3 -3
  92. package/dist/{chunk-DCBMTFLE.js.map → chunk-HZ4MBUC3.js.map} +1 -1
  93. package/dist/{chunk-X5ZPYYMS.js → chunk-I3DQXUSC.js} +3 -3
  94. package/dist/{chunk-X5ZPYYMS.js.map → chunk-I3DQXUSC.js.map} +1 -1
  95. package/dist/{chunk-FN6VHMLM.cjs → chunk-IB54SKWB.cjs} +8 -8
  96. package/dist/{chunk-FN6VHMLM.cjs.map → chunk-IB54SKWB.cjs.map} +1 -1
  97. package/dist/chunk-IF3X2WZP.js +705 -0
  98. package/dist/chunk-IF3X2WZP.js.map +1 -0
  99. package/dist/{chunk-JP5SGIXA.cjs → chunk-IFDC4TXM.cjs} +4 -4
  100. package/dist/{chunk-JP5SGIXA.cjs.map → chunk-IFDC4TXM.cjs.map} +1 -1
  101. package/dist/{chunk-RDGRKYQ5.cjs → chunk-IINZWUGK.cjs} +58 -6
  102. package/dist/chunk-IINZWUGK.cjs.map +1 -0
  103. package/dist/{chunk-U3JU6BI5.cjs → chunk-JEIW7BSV.cjs} +3 -3
  104. package/dist/{chunk-U3JU6BI5.cjs.map → chunk-JEIW7BSV.cjs.map} +1 -1
  105. package/dist/{chunk-RZJXCI53.js → chunk-KATEJG2F.js} +1138 -14
  106. package/dist/chunk-KATEJG2F.js.map +1 -0
  107. package/dist/{chunk-D2GID3YK.js → chunk-KREUYVMZ.js} +58 -6
  108. package/dist/chunk-KREUYVMZ.js.map +1 -0
  109. package/dist/{chunk-Y6YSJPVC.js → chunk-KRU6IGV7.js} +11 -3
  110. package/dist/chunk-KRU6IGV7.js.map +1 -0
  111. package/dist/{chunk-LZU7YBXG.js → chunk-KU3XRHWA.js} +169 -10
  112. package/dist/chunk-KU3XRHWA.js.map +1 -0
  113. package/dist/{chunk-P2VTQ5AR.cjs → chunk-L52N6BEN.cjs} +39 -23
  114. package/dist/chunk-L52N6BEN.cjs.map +1 -0
  115. package/dist/{chunk-XWYKLEKG.js → chunk-L5W7TJQ5.js} +11 -5
  116. package/dist/chunk-L5W7TJQ5.js.map +1 -0
  117. package/dist/{chunk-PAM5UUBL.cjs → chunk-L7L5S2HO.cjs} +18 -2
  118. package/dist/{chunk-PAM5UUBL.cjs.map → chunk-L7L5S2HO.cjs.map} +1 -1
  119. package/dist/{chunk-SEPYBAML.js → chunk-LAEIVOIY.js} +38 -21
  120. package/dist/chunk-LAEIVOIY.js.map +1 -0
  121. package/dist/{chunk-Z5KFXHDP.cjs → chunk-MM7QKUE3.cjs} +5 -5
  122. package/dist/{chunk-Z5KFXHDP.cjs.map → chunk-MM7QKUE3.cjs.map} +1 -1
  123. package/dist/{chunk-FJ7YPVKV.js → chunk-MUIDWFYJ.js} +3 -3
  124. package/dist/{chunk-FJ7YPVKV.js.map → chunk-MUIDWFYJ.js.map} +1 -1
  125. package/dist/{chunk-YMHOF6WA.cjs → chunk-MYAU2ZUC.cjs} +3 -3
  126. package/dist/{chunk-YMHOF6WA.cjs.map → chunk-MYAU2ZUC.cjs.map} +1 -1
  127. package/dist/{chunk-5J5PEUUA.js → chunk-NHN6A3ZO.js} +6 -6
  128. package/dist/{chunk-5J5PEUUA.js.map → chunk-NHN6A3ZO.js.map} +1 -1
  129. package/dist/{chunk-EPQPUFS6.cjs → chunk-NYJIXR4Y.cjs} +6 -6
  130. package/dist/chunk-NYJIXR4Y.cjs.map +1 -0
  131. package/dist/{chunk-RYQ3S3KO.cjs → chunk-O425FKDI.cjs} +581 -70
  132. package/dist/chunk-O425FKDI.cjs.map +1 -0
  133. package/dist/{chunk-WIYQI35R.cjs → chunk-O7XHHTTP.cjs} +8 -8
  134. package/dist/{chunk-WIYQI35R.cjs.map → chunk-O7XHHTTP.cjs.map} +1 -1
  135. package/dist/{chunk-IILJGFI5.js → chunk-OAZUDUGX.js} +8 -6
  136. package/dist/chunk-OAZUDUGX.js.map +1 -0
  137. package/dist/{chunk-JHGMZX4I.cjs → chunk-OCV33S5Q.cjs} +6 -6
  138. package/dist/{chunk-JHGMZX4I.cjs.map → chunk-OCV33S5Q.cjs.map} +1 -1
  139. package/dist/{chunk-IYXCFIMP.js → chunk-ODYQYLO2.js} +33 -17
  140. package/dist/chunk-ODYQYLO2.js.map +1 -0
  141. package/dist/{chunk-FPVRQCCL.js → chunk-OHDIJOGG.js} +4 -4
  142. package/dist/{chunk-FPVRQCCL.js.map → chunk-OHDIJOGG.js.map} +1 -1
  143. package/dist/{chunk-GQVL2JKQ.cjs → chunk-OHKO5THF.cjs} +3 -3
  144. package/dist/{chunk-GQVL2JKQ.cjs.map → chunk-OHKO5THF.cjs.map} +1 -1
  145. package/dist/{chunk-LMBXJZLG.js → chunk-ON4JULCA.js} +3 -3
  146. package/dist/{chunk-LMBXJZLG.js.map → chunk-ON4JULCA.js.map} +1 -1
  147. package/dist/{chunk-A5YOIJKL.js → chunk-ONNY7UO4.js} +15 -15
  148. package/dist/{chunk-A5YOIJKL.js.map → chunk-ONNY7UO4.js.map} +1 -1
  149. package/dist/{chunk-DWCYEPTT.js → chunk-OSPTA4UR.js} +4 -4
  150. package/dist/{chunk-DWCYEPTT.js.map → chunk-OSPTA4UR.js.map} +1 -1
  151. package/dist/{chunk-FDUA6OGN.js → chunk-PFKRHNYV.js} +8 -8
  152. package/dist/chunk-PFKRHNYV.js.map +1 -0
  153. package/dist/{chunk-XMECP2MD.js → chunk-PHK4XBO5.js} +4 -4
  154. package/dist/{chunk-XMECP2MD.js.map → chunk-PHK4XBO5.js.map} +1 -1
  155. package/dist/{chunk-ZZJ4ZVYR.cjs → chunk-PJ6CC53R.cjs} +3 -3
  156. package/dist/{chunk-ZZJ4ZVYR.cjs.map → chunk-PJ6CC53R.cjs.map} +1 -1
  157. package/dist/{chunk-N3Y43KOB.js → chunk-PYHFVYVZ.js} +12 -5
  158. package/dist/chunk-PYHFVYVZ.js.map +1 -0
  159. package/dist/{chunk-XMCIXHGH.js → chunk-Q7G56ZIO.js} +39 -23
  160. package/dist/chunk-Q7G56ZIO.js.map +1 -0
  161. package/dist/{chunk-4PIW3Y5M.js → chunk-QAKASRE6.js} +34 -26
  162. package/dist/chunk-QAKASRE6.js.map +1 -0
  163. package/dist/{chunk-QGZC43L7.js → chunk-QAQOCS2J.js} +5 -5
  164. package/dist/{chunk-QGZC43L7.js.map → chunk-QAQOCS2J.js.map} +1 -1
  165. package/dist/{chunk-YVIH26FG.cjs → chunk-QKAYRHWP.cjs} +12 -12
  166. package/dist/{chunk-YVIH26FG.cjs.map → chunk-QKAYRHWP.cjs.map} +1 -1
  167. package/dist/{chunk-FDV7EQWH.js → chunk-RPG2ZP2T.js} +575 -68
  168. package/dist/chunk-RPG2ZP2T.js.map +1 -0
  169. package/dist/{chunk-P3JEMF6E.cjs → chunk-RSCA5AZW.cjs} +4 -4
  170. package/dist/{chunk-P3JEMF6E.cjs.map → chunk-RSCA5AZW.cjs.map} +1 -1
  171. package/dist/{chunk-5Y5FSR4N.js → chunk-SCXELRRZ.js} +3 -3
  172. package/dist/{chunk-5Y5FSR4N.js.map → chunk-SCXELRRZ.js.map} +1 -1
  173. package/dist/{chunk-JWTCEWQ4.cjs → chunk-SNEQXSC5.cjs} +2 -2
  174. package/dist/{chunk-JWTCEWQ4.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
  175. package/dist/{chunk-U5TTXN45.cjs → chunk-SRA2L3SQ.cjs} +9 -7
  176. package/dist/chunk-SRA2L3SQ.cjs.map +1 -0
  177. package/dist/{chunk-5U6GETAW.js → chunk-TQDZLRIE.js} +3 -3
  178. package/dist/chunk-TQDZLRIE.js.map +1 -0
  179. package/dist/{chunk-HK3AMH3Q.cjs → chunk-VROIMIHB.cjs} +11 -3
  180. package/dist/chunk-VROIMIHB.cjs.map +1 -0
  181. package/dist/{chunk-3SHLOF4V.cjs → chunk-VTR2KGLY.cjs} +9 -9
  182. package/dist/{chunk-3SHLOF4V.cjs.map → chunk-VTR2KGLY.cjs.map} +1 -1
  183. package/dist/{chunk-XO3WLK65.js → chunk-VVDE4CHU.js} +3 -3
  184. package/dist/{chunk-XO3WLK65.js.map → chunk-VVDE4CHU.js.map} +1 -1
  185. package/dist/{chunk-BOOJDRJO.js → chunk-WSNMQQ4P.js} +38 -3
  186. package/dist/chunk-WSNMQQ4P.js.map +1 -0
  187. package/dist/chunk-WYMO3IIK.js +136 -0
  188. package/dist/chunk-WYMO3IIK.js.map +1 -0
  189. package/dist/{chunk-SPWVKDGC.cjs → chunk-X5QRRMGB.cjs} +35 -27
  190. package/dist/chunk-X5QRRMGB.cjs.map +1 -0
  191. package/dist/{chunk-SH6B4MG5.js → chunk-XBXDUAIM.js} +4 -4
  192. package/dist/{chunk-SH6B4MG5.js.map → chunk-XBXDUAIM.js.map} +1 -1
  193. package/dist/{chunk-56QJHQ5C.cjs → chunk-XEEVDZDK.cjs} +5 -5
  194. package/dist/{chunk-56QJHQ5C.cjs.map → chunk-XEEVDZDK.cjs.map} +1 -1
  195. package/dist/{chunk-GXODR6V4.js → chunk-XOIIUO6O.js} +3 -3
  196. package/dist/{chunk-GXODR6V4.js.map → chunk-XOIIUO6O.js.map} +1 -1
  197. package/dist/{chunk-ELYGV32O.cjs → chunk-XTHMC76F.cjs} +5 -5
  198. package/dist/{chunk-ELYGV32O.cjs.map → chunk-XTHMC76F.cjs.map} +1 -1
  199. package/dist/{chunk-FF235PKY.cjs → chunk-XWZEECEX.cjs} +3 -3
  200. package/dist/chunk-XWZEECEX.cjs.map +1 -0
  201. package/dist/{chunk-TVLZZI5Q.cjs → chunk-YJP6DUFO.cjs} +9 -9
  202. package/dist/{chunk-TVLZZI5Q.cjs.map → chunk-YJP6DUFO.cjs.map} +1 -1
  203. package/dist/{chunk-EHQ77LL5.js → chunk-ZB54MTMQ.js} +3 -3
  204. package/dist/{chunk-EHQ77LL5.js.map → chunk-ZB54MTMQ.js.map} +1 -1
  205. package/dist/components/Accordion/index.cjs +2 -2
  206. package/dist/components/Accordion/index.js +1 -1
  207. package/dist/components/Alert/index.cjs +5 -5
  208. package/dist/components/Alert/index.d.cts +1 -1
  209. package/dist/components/Alert/index.d.ts +1 -1
  210. package/dist/components/Alert/index.js +1 -1
  211. package/dist/components/AlertDialog/index.cjs +6 -5
  212. package/dist/components/AlertDialog/index.js +5 -4
  213. package/dist/components/AudioPlayer/index.cjs +6 -6
  214. package/dist/components/AudioPlayer/index.js +1 -1
  215. package/dist/components/Autocomplete/index.cjs +4 -4
  216. package/dist/components/Autocomplete/index.js +3 -3
  217. package/dist/components/Avatar/index.cjs +5 -5
  218. package/dist/components/Avatar/index.js +1 -1
  219. package/dist/components/Badge/index.d.cts +1 -1
  220. package/dist/components/Badge/index.d.ts +1 -1
  221. package/dist/components/Breadcrumb/index.cjs +3 -3
  222. package/dist/components/Breadcrumb/index.js +1 -1
  223. package/dist/components/Button/index.cjs +3 -3
  224. package/dist/components/Button/index.js +1 -1
  225. package/dist/components/Card/index.d.cts +2 -2
  226. package/dist/components/Card/index.d.ts +2 -2
  227. package/dist/components/CountryCodeDropdown/index.cjs +6 -6
  228. package/dist/components/CountryCodeDropdown/index.d.cts +11 -1
  229. package/dist/components/CountryCodeDropdown/index.d.ts +11 -1
  230. package/dist/components/CountryCodeDropdown/index.js +3 -3
  231. package/dist/components/CustomizableDashboard/index.cjs +11 -11
  232. package/dist/components/CustomizableDashboard/index.js +4 -4
  233. package/dist/components/DateInput/index.cjs +4 -4
  234. package/dist/components/DateInput/index.js +3 -3
  235. package/dist/components/Dropdown/index.cjs +13 -9
  236. package/dist/components/Dropdown/index.d.cts +38 -2
  237. package/dist/components/Dropdown/index.d.ts +38 -2
  238. package/dist/components/Dropdown/index.js +3 -3
  239. package/dist/components/FloatingWindow/index.cjs +4 -4
  240. package/dist/components/FloatingWindow/index.js +2 -2
  241. package/dist/components/GlossaryTooltip/index.cjs +4 -4
  242. package/dist/components/GlossaryTooltip/index.js +3 -3
  243. package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -5
  244. package/dist/components/KeyboardShortcutsOverlay/index.js +4 -3
  245. package/dist/components/Markdown/index.cjs +19 -19
  246. package/dist/components/Markdown/index.js +7 -7
  247. package/dist/components/MediaEditor/index.cjs +15 -14
  248. package/dist/components/MediaEditor/index.js +10 -9
  249. package/dist/components/MediaPlayer/index.cjs +6 -6
  250. package/dist/components/MediaPlayer/index.js +3 -3
  251. package/dist/components/Modal/index.cjs +11 -10
  252. package/dist/components/Modal/index.d.cts +1 -1
  253. package/dist/components/Modal/index.d.ts +1 -1
  254. package/dist/components/Modal/index.js +3 -2
  255. package/dist/components/Pagination/index.cjs +4 -4
  256. package/dist/components/Pagination/index.d.cts +1 -1
  257. package/dist/components/Pagination/index.d.ts +1 -1
  258. package/dist/components/Pagination/index.js +1 -1
  259. package/dist/components/PhoneInput/index.cjs +4 -4
  260. package/dist/components/PhoneInput/index.js +2 -2
  261. package/dist/components/Progress/index.d.cts +1 -1
  262. package/dist/components/Progress/index.d.ts +1 -1
  263. package/dist/components/QuickAction/index.cjs +6 -6
  264. package/dist/components/QuickAction/index.js +1 -1
  265. package/dist/components/RecordButton/index.d.cts +1 -1
  266. package/dist/components/RecordButton/index.d.ts +1 -1
  267. package/dist/components/RichTextEditor/index.cjs +9 -9
  268. package/dist/components/RichTextEditor/index.js +6 -6
  269. package/dist/components/SectionSpyNav/index.cjs +4 -4
  270. package/dist/components/SectionSpyNav/index.js +3 -3
  271. package/dist/components/Select/index.cjs +5 -5
  272. package/dist/components/Select/index.js +3 -3
  273. package/dist/components/Sheet/index.cjs +11 -11
  274. package/dist/components/Sheet/index.js +2 -2
  275. package/dist/components/Slider/index.cjs +5 -5
  276. package/dist/components/Slider/index.d.cts +2 -2
  277. package/dist/components/Slider/index.d.ts +2 -2
  278. package/dist/components/Slider/index.js +1 -1
  279. package/dist/components/SourceTip/index.cjs +4 -4
  280. package/dist/components/SourceTip/index.js +3 -3
  281. package/dist/components/SuperChat/index.cjs +292 -115
  282. package/dist/components/SuperChat/index.cjs.map +1 -1
  283. package/dist/components/SuperChat/index.d.cts +29 -8
  284. package/dist/components/SuperChat/index.d.ts +29 -8
  285. package/dist/components/SuperChat/index.js +284 -107
  286. package/dist/components/SuperChat/index.js.map +1 -1
  287. package/dist/components/SuperChat/plugins/index.cjs +7 -7
  288. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  289. package/dist/components/SuperChat/plugins/index.d.cts +2 -2
  290. package/dist/components/SuperChat/plugins/index.d.ts +2 -2
  291. package/dist/components/SuperChat/plugins/index.js +6 -6
  292. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  293. package/dist/components/Text/index.d.cts +1 -1
  294. package/dist/components/Text/index.d.ts +1 -1
  295. package/dist/components/ThemeProvider/index.cjs +9 -9
  296. package/dist/components/ThemeProvider/index.d.cts +1 -1
  297. package/dist/components/ThemeProvider/index.d.ts +1 -1
  298. package/dist/components/ThemeProvider/index.js +3 -3
  299. package/dist/components/Toggle/index.d.cts +1 -1
  300. package/dist/components/Toggle/index.d.ts +1 -1
  301. package/dist/components/Tooltip/index.cjs +3 -3
  302. package/dist/components/Tooltip/index.js +2 -2
  303. package/dist/components/TranscriptView/index.cjs +3 -3
  304. package/dist/components/TranscriptView/index.js +1 -1
  305. package/dist/datavis.cjs +2 -2
  306. package/dist/datavis.js +1 -1
  307. package/dist/esheet.cjs +15 -14
  308. package/dist/esheet.cjs.map +1 -1
  309. package/dist/esheet.js +12 -11
  310. package/dist/esheet.js.map +1 -1
  311. package/dist/hooks/index.cjs +3 -3
  312. package/dist/hooks/index.d.cts +1 -1
  313. package/dist/hooks/index.d.ts +1 -1
  314. package/dist/hooks/index.js +2 -2
  315. package/dist/index.cjs +2509 -2860
  316. package/dist/index.cjs.map +1 -1
  317. package/dist/index.d.cts +278 -43
  318. package/dist/index.d.ts +278 -43
  319. package/dist/index.js +1305 -1700
  320. package/dist/index.js.map +1 -1
  321. package/dist/motion.cjs +87 -0
  322. package/dist/motion.cjs.map +1 -0
  323. package/dist/motion.d.cts +52 -0
  324. package/dist/motion.d.ts +52 -0
  325. package/dist/motion.js +50 -0
  326. package/dist/motion.js.map +1 -0
  327. package/dist/styles/init.css +25 -0
  328. package/dist/styles.css +1 -1
  329. package/dist/tailwind-preset.cjs +4 -4
  330. package/dist/tailwind-preset.js +1 -1
  331. package/dist/{types-BoTeTPdH.d.ts → types-9vK_YdEb.d.ts} +12 -1
  332. package/dist/{types-DyIB9HYT.d.cts → types-DZDroUW8.d.cts} +12 -1
  333. package/dist/{useAnchoredPosition-C7PNglzD.d.ts → useAnchoredPosition-CKwLSQW8.d.cts} +10 -3
  334. package/dist/{useAnchoredPosition-C7PNglzD.d.cts → useAnchoredPosition-CKwLSQW8.d.ts} +10 -3
  335. package/package.json +21 -2
  336. package/dist/CsvBlock-OTFG3PYZ.cjs +0 -15
  337. package/dist/CsvBlock-PUSTBQ5B.js +0 -6
  338. package/dist/HtmlPreviewBlock-QHLSIMWJ.cjs +0 -15
  339. package/dist/HtmlPreviewBlock-YF2YVKKX.js +0 -6
  340. package/dist/MermaidBlock-H3TWNC4D.js +0 -6
  341. package/dist/MermaidBlock-ZLLBO3VY.cjs +0 -15
  342. package/dist/SurveyBlock-JLHS3YQD.js +0 -6
  343. package/dist/SurveyBlock-M2ZRTGVJ.cjs +0 -15
  344. package/dist/chunk-26DPQUSB.cjs +0 -1177
  345. package/dist/chunk-26DPQUSB.cjs.map +0 -1
  346. package/dist/chunk-3PXOIAF6.js +0 -3
  347. package/dist/chunk-4AE2L6AO.cjs.map +0 -1
  348. package/dist/chunk-4PIW3Y5M.js.map +0 -1
  349. package/dist/chunk-5JZIDILK.cjs.map +0 -1
  350. package/dist/chunk-5U6GETAW.js.map +0 -1
  351. package/dist/chunk-6EWJGRC3.js.map +0 -1
  352. package/dist/chunk-7L7OPISJ.cjs.map +0 -1
  353. package/dist/chunk-AESFOMSH.js.map +0 -1
  354. package/dist/chunk-BOOJDRJO.js.map +0 -1
  355. package/dist/chunk-BOW7ZGI2.cjs.map +0 -1
  356. package/dist/chunk-D2GID3YK.js.map +0 -1
  357. package/dist/chunk-DG7KE4YJ.cjs.map +0 -1
  358. package/dist/chunk-EKRT7K2K.js +0 -1145
  359. package/dist/chunk-EKRT7K2K.js.map +0 -1
  360. package/dist/chunk-EPQPUFS6.cjs.map +0 -1
  361. package/dist/chunk-FDUA6OGN.js.map +0 -1
  362. package/dist/chunk-FDV7EQWH.js.map +0 -1
  363. package/dist/chunk-FF235PKY.cjs.map +0 -1
  364. package/dist/chunk-H7QSGFMZ.cjs.map +0 -1
  365. package/dist/chunk-HK3AMH3Q.cjs.map +0 -1
  366. package/dist/chunk-IILJGFI5.js.map +0 -1
  367. package/dist/chunk-IYXCFIMP.js.map +0 -1
  368. package/dist/chunk-JHZW3Y62.js.map +0 -1
  369. package/dist/chunk-L6D4CKLV.cjs.map +0 -1
  370. package/dist/chunk-LZU7YBXG.js.map +0 -1
  371. package/dist/chunk-MYFZYUPR.cjs.map +0 -1
  372. package/dist/chunk-N3Y43KOB.js.map +0 -1
  373. package/dist/chunk-P2VTQ5AR.cjs.map +0 -1
  374. package/dist/chunk-RDGRKYQ5.cjs.map +0 -1
  375. package/dist/chunk-RYQ3S3KO.cjs.map +0 -1
  376. package/dist/chunk-RZJXCI53.js.map +0 -1
  377. package/dist/chunk-SEPYBAML.js.map +0 -1
  378. package/dist/chunk-SK7H3Z67.cjs.map +0 -1
  379. package/dist/chunk-SPWVKDGC.cjs.map +0 -1
  380. package/dist/chunk-U5TTXN45.cjs.map +0 -1
  381. package/dist/chunk-XMCIXHGH.js.map +0 -1
  382. package/dist/chunk-XS35KPBZ.cjs.map +0 -1
  383. package/dist/chunk-XWYKLEKG.js.map +0 -1
  384. package/dist/chunk-Y6YSJPVC.js.map +0 -1
@@ -1,1145 +0,0 @@
1
- import { useAnchoredPosition } from './chunk-BOOJDRJO.js';
2
- import { cn } from './chunk-TQONQSJO.js';
3
- import * as React2 from 'react';
4
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
- import { createPortal } from 'react-dom';
6
- import { cva } from 'class-variance-authority';
7
-
8
- function getFileType(mimeType) {
9
- if (mimeType.startsWith("image/")) return "image";
10
- if (mimeType.startsWith("video/")) return "video";
11
- if (mimeType.startsWith("audio/")) return "audio";
12
- if (mimeType.includes("pdf") || mimeType.includes("document") || mimeType.includes("text")) {
13
- return "document";
14
- }
15
- return "file";
16
- }
17
- function formatFileSize(bytes) {
18
- if (bytes < 1024) return `${bytes} B`;
19
- if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
20
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
21
- }
22
- function validateFile(file, acceptedTypes, maxSize) {
23
- if (acceptedTypes && acceptedTypes.length > 0) {
24
- const isAccepted = acceptedTypes.some((type) => {
25
- if (type.startsWith(".")) {
26
- return file.name.toLowerCase().endsWith(type.toLowerCase());
27
- }
28
- if (type.endsWith("/*")) {
29
- return file.type.startsWith(type.replace("/*", "/"));
30
- }
31
- return file.type === type;
32
- });
33
- if (!isAccepted) {
34
- return { valid: false, error: "File type not supported" };
35
- }
36
- }
37
- if (maxSize && file.size > maxSize) {
38
- return {
39
- valid: false,
40
- error: `File too large (max ${formatFileSize(maxSize)})`
41
- };
42
- }
43
- return { valid: true };
44
- }
45
- function generateAttachmentId() {
46
- return `attachment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
47
- }
48
- function AttachmentPreviewItem({
49
- attachment,
50
- onRemove,
51
- onRetry,
52
- className
53
- }) {
54
- const { file, previewUrl, type, state, progress } = attachment;
55
- const isImage = type === "image";
56
- const isVideo = type === "video";
57
- const isUploading = state === "uploading";
58
- const isFailed = state === "failed";
59
- return /* @__PURE__ */ jsxs(
60
- "div",
61
- {
62
- className: cn(
63
- "group relative overflow-hidden rounded-lg",
64
- "bg-neutral-100 dark:bg-neutral-800",
65
- "border border-neutral-200 dark:border-neutral-700",
66
- isFailed && "border-red-500",
67
- className
68
- ),
69
- children: [
70
- (isImage || isVideo) && previewUrl ? /* @__PURE__ */ jsxs("div", { className: "relative h-20 w-20", children: [
71
- /* @__PURE__ */ jsx(
72
- "img",
73
- {
74
- src: previewUrl,
75
- alt: file.name,
76
- className: cn(
77
- "h-full w-full object-cover",
78
- (isUploading || isFailed) && "opacity-50"
79
- )
80
- }
81
- ),
82
- isVideo && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx(
83
- "svg",
84
- {
85
- "aria-hidden": "true",
86
- className: "h-6 w-6 text-white drop-shadow",
87
- fill: "currentColor",
88
- viewBox: "0 0 24 24",
89
- children: /* @__PURE__ */ jsx("path", { d: "M8 5v14l11-7z" })
90
- }
91
- ) })
92
- ] }) : (
93
- /* File preview */
94
- /* @__PURE__ */ jsxs("div", { className: "flex h-20 w-20 flex-col items-center justify-center p-2", children: [
95
- /* @__PURE__ */ jsx(
96
- "svg",
97
- {
98
- "aria-hidden": "true",
99
- className: "h-8 w-8 text-neutral-500",
100
- fill: "none",
101
- viewBox: "0 0 24 24",
102
- stroke: "currentColor",
103
- children: /* @__PURE__ */ jsx(
104
- "path",
105
- {
106
- strokeLinecap: "round",
107
- strokeLinejoin: "round",
108
- strokeWidth: 2,
109
- d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
110
- }
111
- )
112
- }
113
- ),
114
- /* @__PURE__ */ jsx("span", { className: "mt-1 max-w-full truncate px-1 text-xs text-neutral-500", children: file.name.split(".").pop()?.toUpperCase() })
115
- ] })
116
- ),
117
- isUploading && progress !== void 0 && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsxs("div", { className: "text-center text-white", children: [
118
- /* @__PURE__ */ jsxs(
119
- "svg",
120
- {
121
- "aria-hidden": "true",
122
- className: "mx-auto h-6 w-6 animate-spin",
123
- fill: "none",
124
- viewBox: "0 0 24 24",
125
- children: [
126
- /* @__PURE__ */ jsx(
127
- "circle",
128
- {
129
- className: "opacity-25",
130
- cx: "12",
131
- cy: "12",
132
- r: "10",
133
- stroke: "currentColor",
134
- strokeWidth: "4"
135
- }
136
- ),
137
- /* @__PURE__ */ jsx(
138
- "path",
139
- {
140
- className: "opacity-75",
141
- fill: "currentColor",
142
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
143
- }
144
- )
145
- ]
146
- }
147
- ),
148
- /* @__PURE__ */ jsxs("span", { className: "mt-1 text-xs", children: [
149
- progress,
150
- "%"
151
- ] })
152
- ] }) }),
153
- isFailed && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
154
- /* @__PURE__ */ jsx(
155
- "svg",
156
- {
157
- "aria-hidden": "true",
158
- className: "mx-auto h-6 w-6 text-red-400",
159
- fill: "none",
160
- viewBox: "0 0 24 24",
161
- stroke: "currentColor",
162
- children: /* @__PURE__ */ jsx(
163
- "path",
164
- {
165
- strokeLinecap: "round",
166
- strokeLinejoin: "round",
167
- strokeWidth: 2,
168
- d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
169
- }
170
- )
171
- }
172
- ),
173
- onRetry && /* @__PURE__ */ jsx(
174
- "button",
175
- {
176
- type: "button",
177
- onClick: onRetry,
178
- className: "mt-1 text-xs text-white underline hover:no-underline",
179
- children: "Retry"
180
- }
181
- )
182
- ] }) }),
183
- /* @__PURE__ */ jsx(
184
- "button",
185
- {
186
- type: "button",
187
- onClick: onRemove,
188
- className: cn(
189
- "absolute -top-1 -right-1 z-10",
190
- "rounded-full p-1",
191
- "bg-neutral-900 text-white",
192
- "opacity-0 group-hover:opacity-100",
193
- "focus:ring-primary-500 focus:opacity-100 focus:ring-2 focus:outline-none",
194
- "transition-opacity"
195
- ),
196
- "aria-label": `Remove ${file.name}`,
197
- children: /* @__PURE__ */ jsx(
198
- "svg",
199
- {
200
- "aria-hidden": "true",
201
- className: "h-3 w-3",
202
- fill: "none",
203
- viewBox: "0 0 24 24",
204
- stroke: "currentColor",
205
- children: /* @__PURE__ */ jsx(
206
- "path",
207
- {
208
- strokeLinecap: "round",
209
- strokeLinejoin: "round",
210
- strokeWidth: 2,
211
- d: "M6 18L18 6M6 6l12 12"
212
- }
213
- )
214
- }
215
- )
216
- }
217
- ),
218
- /* @__PURE__ */ jsx(
219
- "div",
220
- {
221
- className: cn(
222
- "absolute right-0 bottom-0 left-0",
223
- "bg-black/70 px-1 py-0.5",
224
- "opacity-0 group-hover:opacity-100",
225
- "transition-opacity"
226
- ),
227
- children: /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-white", children: file.name })
228
- }
229
- )
230
- ]
231
- }
232
- );
233
- }
234
- AttachmentPreviewItem.displayName = "AttachmentPreviewItem";
235
- var AttachmentPicker = React2.forwardRef(
236
- ({
237
- onFilesSelected,
238
- acceptedTypes = ["image/*", "video/*", ".pdf", ".doc", ".docx"],
239
- maxFileSize = 25 * 1024 * 1024,
240
- // 25MB
241
- maxFiles = 10,
242
- multiple = true,
243
- disabled = false,
244
- onError,
245
- className,
246
- children
247
- }, ref) => {
248
- const inputRef = React2.useRef(null);
249
- React2.useImperativeHandle(ref, () => inputRef.current);
250
- const handleClick = () => {
251
- inputRef.current?.click();
252
- };
253
- const handleChange = (event) => {
254
- const files = Array.from(event.target.files || []);
255
- if (files.length === 0) return;
256
- const validFiles = [];
257
- for (const file of files.slice(0, maxFiles)) {
258
- const validation = validateFile(file, acceptedTypes, maxFileSize);
259
- if (validation.valid) {
260
- validFiles.push(file);
261
- } else if (onError) {
262
- onError(`${file.name}: ${validation.error}`);
263
- }
264
- }
265
- if (files.length > maxFiles && onError) {
266
- onError(`Maximum ${maxFiles} files allowed`);
267
- }
268
- if (validFiles.length > 0) {
269
- onFilesSelected(validFiles);
270
- }
271
- event.target.value = "";
272
- };
273
- return /* @__PURE__ */ jsxs(Fragment, { children: [
274
- /* @__PURE__ */ jsx(
275
- "input",
276
- {
277
- ref: inputRef,
278
- type: "file",
279
- accept: acceptedTypes.join(","),
280
- multiple,
281
- onChange: handleChange,
282
- disabled,
283
- className: "sr-only",
284
- "aria-label": "Select files to attach"
285
- }
286
- ),
287
- /* @__PURE__ */ jsx(
288
- "button",
289
- {
290
- type: "button",
291
- onClick: handleClick,
292
- disabled,
293
- "data-slot": "attachment-picker-button",
294
- className: cn(
295
- "inline-flex items-center justify-center",
296
- "rounded-full p-2",
297
- "text-neutral-500 hover:text-neutral-700",
298
- "dark:text-neutral-400 dark:hover:text-neutral-200",
299
- "hover:bg-neutral-100 dark:hover:bg-neutral-800",
300
- "focus:ring-primary-500 focus:ring-2 focus:outline-none",
301
- "disabled:cursor-not-allowed disabled:opacity-50",
302
- "transition-colors",
303
- className
304
- ),
305
- "aria-label": "Attach files",
306
- children: children || /* @__PURE__ */ jsx(
307
- "svg",
308
- {
309
- "aria-hidden": "true",
310
- className: "h-5 w-5",
311
- fill: "none",
312
- viewBox: "0 0 24 24",
313
- stroke: "currentColor",
314
- children: /* @__PURE__ */ jsx(
315
- "path",
316
- {
317
- strokeLinecap: "round",
318
- strokeLinejoin: "round",
319
- strokeWidth: 2,
320
- d: "M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13"
321
- }
322
- )
323
- }
324
- )
325
- }
326
- )
327
- ] });
328
- }
329
- );
330
- AttachmentPicker.displayName = "AttachmentPicker";
331
- function DragDropZone({
332
- onFilesDropped,
333
- acceptedTypes,
334
- maxFileSize,
335
- maxFiles = 10,
336
- disabled = false,
337
- onError,
338
- children,
339
- className
340
- }) {
341
- const [isDragging, setIsDragging] = React2.useState(false);
342
- const dragCounterRef = React2.useRef(0);
343
- const handleDragEnter = (event) => {
344
- event.preventDefault();
345
- event.stopPropagation();
346
- if (disabled) return;
347
- dragCounterRef.current++;
348
- if (event.dataTransfer.items && event.dataTransfer.items.length > 0) {
349
- setIsDragging(true);
350
- }
351
- };
352
- const handleDragLeave = (event) => {
353
- event.preventDefault();
354
- event.stopPropagation();
355
- if (disabled) return;
356
- dragCounterRef.current--;
357
- if (dragCounterRef.current === 0) {
358
- setIsDragging(false);
359
- }
360
- };
361
- const handleDragOver = (event) => {
362
- event.preventDefault();
363
- event.stopPropagation();
364
- };
365
- const handleDrop = (event) => {
366
- event.preventDefault();
367
- event.stopPropagation();
368
- if (disabled) return;
369
- setIsDragging(false);
370
- dragCounterRef.current = 0;
371
- const files = Array.from(event.dataTransfer.files);
372
- if (files.length === 0) return;
373
- const validFiles = [];
374
- for (const file of files.slice(0, maxFiles)) {
375
- const validation = validateFile(file, acceptedTypes, maxFileSize);
376
- if (validation.valid) {
377
- validFiles.push(file);
378
- } else if (onError) {
379
- onError(`${file.name}: ${validation.error}`);
380
- }
381
- }
382
- if (files.length > maxFiles && onError) {
383
- onError(`Maximum ${maxFiles} files allowed`);
384
- }
385
- if (validFiles.length > 0) {
386
- onFilesDropped(validFiles);
387
- }
388
- };
389
- return /* @__PURE__ */ jsxs(
390
- "div",
391
- {
392
- onDragEnter: handleDragEnter,
393
- onDragLeave: handleDragLeave,
394
- onDragOver: handleDragOver,
395
- onDrop: handleDrop,
396
- className: cn("relative", className),
397
- children: [
398
- children,
399
- isDragging && /* @__PURE__ */ jsx(
400
- "div",
401
- {
402
- className: cn(
403
- "absolute inset-0 z-50",
404
- "flex items-center justify-center",
405
- "bg-primary-50/90 dark:bg-primary-900/90",
406
- "border-primary-500 border-2 border-dashed",
407
- "rounded-lg"
408
- ),
409
- children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
410
- /* @__PURE__ */ jsx(
411
- "svg",
412
- {
413
- "aria-hidden": "true",
414
- className: "text-primary-800 mx-auto h-12 w-12",
415
- fill: "none",
416
- viewBox: "0 0 24 24",
417
- stroke: "currentColor",
418
- children: /* @__PURE__ */ jsx(
419
- "path",
420
- {
421
- strokeLinecap: "round",
422
- strokeLinejoin: "round",
423
- strokeWidth: 2,
424
- d: "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"
425
- }
426
- )
427
- }
428
- ),
429
- /* @__PURE__ */ jsx("p", { className: "text-primary-700 dark:text-primary-300 mt-2 text-sm font-medium", children: "Drop files here" })
430
- ] })
431
- }
432
- )
433
- ]
434
- }
435
- );
436
- }
437
- DragDropZone.displayName = "DragDropZone";
438
- function CameraButton({
439
- onCapture,
440
- useFrontCamera = false,
441
- disabled = false,
442
- className
443
- }) {
444
- const inputRef = React2.useRef(null);
445
- const handleClick = () => {
446
- inputRef.current?.click();
447
- };
448
- const handleChange = (event) => {
449
- const file = event.target.files?.[0];
450
- if (file) {
451
- onCapture(file);
452
- }
453
- event.target.value = "";
454
- };
455
- return /* @__PURE__ */ jsxs(Fragment, { children: [
456
- /* @__PURE__ */ jsx(
457
- "input",
458
- {
459
- ref: inputRef,
460
- type: "file",
461
- accept: "image/*",
462
- capture: useFrontCamera ? "user" : "environment",
463
- onChange: handleChange,
464
- disabled,
465
- className: "sr-only",
466
- "aria-label": "Take a photo"
467
- }
468
- ),
469
- /* @__PURE__ */ jsx(
470
- "button",
471
- {
472
- type: "button",
473
- onClick: handleClick,
474
- disabled,
475
- className: cn(
476
- "inline-flex items-center justify-center",
477
- "rounded-full p-2",
478
- "text-neutral-500 hover:text-neutral-700",
479
- "dark:text-neutral-400 dark:hover:text-neutral-200",
480
- "hover:bg-neutral-100 dark:hover:bg-neutral-800",
481
- "focus:ring-primary-500 focus:ring-2 focus:outline-none",
482
- "disabled:cursor-not-allowed disabled:opacity-50",
483
- "transition-colors",
484
- className
485
- ),
486
- "aria-label": "Take a photo",
487
- children: /* @__PURE__ */ jsxs(
488
- "svg",
489
- {
490
- "aria-hidden": "true",
491
- className: "h-5 w-5",
492
- fill: "none",
493
- viewBox: "0 0 24 24",
494
- stroke: "currentColor",
495
- children: [
496
- /* @__PURE__ */ jsx(
497
- "path",
498
- {
499
- strokeLinecap: "round",
500
- strokeLinejoin: "round",
501
- strokeWidth: 2,
502
- d: "M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"
503
- }
504
- ),
505
- /* @__PURE__ */ jsx(
506
- "path",
507
- {
508
- strokeLinecap: "round",
509
- strokeLinejoin: "round",
510
- strokeWidth: 2,
511
- d: "M15 13a3 3 0 11-6 0 3 3 0 016 0z"
512
- }
513
- )
514
- ]
515
- }
516
- )
517
- }
518
- )
519
- ] });
520
- }
521
- CameraButton.displayName = "CameraButton";
522
- function activeMentionQuery(value, caret) {
523
- const upToCaret = value.slice(0, caret);
524
- const match = /(^|\s)@([^\s@]*)$/.exec(upToCaret);
525
- if (!match) return null;
526
- const query = match[2];
527
- return { query, start: caret - query.length - 1 };
528
- }
529
- function isFileAccepted(file, accepted) {
530
- if (!accepted || accepted.length === 0) return true;
531
- const mime = file.type;
532
- const name = file.name.toLowerCase();
533
- return accepted.some((token) => {
534
- if (token.startsWith(".")) return name.endsWith(token.toLowerCase());
535
- if (token.endsWith("/*")) return mime.startsWith(token.slice(0, -1));
536
- if (token.includes("/")) return mime === token;
537
- return false;
538
- });
539
- }
540
- function CharacterCounter({
541
- current,
542
- max,
543
- showWarningAt = 0.9,
544
- className
545
- }) {
546
- const percentage = current / max;
547
- const isWarning = percentage >= showWarningAt && percentage < 1;
548
- const isOver = current > max;
549
- return /* @__PURE__ */ jsxs(
550
- "span",
551
- {
552
- className: cn(
553
- "text-xs tabular-nums",
554
- isOver ? "font-medium text-red-700 dark:text-red-400" : isWarning ? "text-amber-700 dark:text-amber-400" : "text-neutral-600 dark:text-neutral-400",
555
- className
556
- ),
557
- "aria-live": "polite",
558
- "aria-label": `${current} of ${max} characters`,
559
- children: [
560
- current,
561
- "/",
562
- max
563
- ]
564
- }
565
- );
566
- }
567
- CharacterCounter.displayName = "CharacterCounter";
568
- var sendButtonVariants = cva(
569
- [
570
- "inline-flex items-center justify-center",
571
- "rounded-full p-3 self-start",
572
- "transition-all duration-200",
573
- "focus:outline-none focus:ring-2 focus:ring-primary-500",
574
- "disabled:opacity-50 disabled:cursor-not-allowed"
575
- ],
576
- {
577
- variants: {
578
- variant: {
579
- primary: [
580
- "bg-primary-800 text-white",
581
- "hover:bg-primary-900",
582
- "active:scale-95"
583
- ],
584
- subtle: [
585
- "bg-transparent text-primary-800",
586
- "hover:bg-primary-50 dark:hover:bg-primary-900/20"
587
- ]
588
- },
589
- canSend: {
590
- true: "",
591
- false: "opacity-50 cursor-not-allowed"
592
- }
593
- },
594
- defaultVariants: {
595
- variant: "primary",
596
- canSend: false
597
- }
598
- }
599
- );
600
- var SendButton = React2.forwardRef(
601
- ({ className, variant, canSend, isLoading, disabled, ...props }, ref) => {
602
- return /* @__PURE__ */ jsx(
603
- "button",
604
- {
605
- ref,
606
- type: "submit",
607
- disabled: disabled || !canSend || isLoading,
608
- "data-slot": "composer-send-button",
609
- className: cn(sendButtonVariants({ variant, canSend }), className),
610
- "aria-label": isLoading ? "Sending message" : "Send message",
611
- ...props,
612
- children: isLoading ? /* @__PURE__ */ jsxs(
613
- "svg",
614
- {
615
- "aria-hidden": "true",
616
- className: "h-5 w-5 animate-spin",
617
- fill: "none",
618
- viewBox: "0 0 24 24",
619
- children: [
620
- /* @__PURE__ */ jsx(
621
- "circle",
622
- {
623
- className: "opacity-25",
624
- cx: "12",
625
- cy: "12",
626
- r: "10",
627
- stroke: "currentColor",
628
- strokeWidth: "4"
629
- }
630
- ),
631
- /* @__PURE__ */ jsx(
632
- "path",
633
- {
634
- className: "opacity-75",
635
- fill: "currentColor",
636
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"
637
- }
638
- )
639
- ]
640
- }
641
- ) : /* @__PURE__ */ jsx(
642
- "svg",
643
- {
644
- "aria-hidden": "true",
645
- className: "h-5 w-5",
646
- fill: "none",
647
- viewBox: "0 0 24 24",
648
- stroke: "currentColor",
649
- children: /* @__PURE__ */ jsx(
650
- "path",
651
- {
652
- strokeLinecap: "round",
653
- strokeLinejoin: "round",
654
- strokeWidth: 2,
655
- d: "M12 19l9 2-9-18-9 18 9-2zm0 0v-8"
656
- }
657
- )
658
- }
659
- )
660
- }
661
- );
662
- }
663
- );
664
- SendButton.displayName = "SendButton";
665
- var MessageComposer = React2.forwardRef(
666
- ({
667
- onSend,
668
- onTypingStart,
669
- onTypingStop,
670
- value: controlledValue,
671
- onValueChange,
672
- placeholder = "Type a message...",
673
- maxLength = 1600,
674
- showCharacterCount = false,
675
- disabled = false,
676
- isSending = false,
677
- showAttachmentPicker = true,
678
- showCameraButton = false,
679
- acceptedFileTypes = ["image/*", "video/*", ".pdf", ".doc", ".docx"],
680
- maxFileSize = 25 * 1024 * 1024,
681
- maxAttachments = 10,
682
- onError,
683
- autoFocus = false,
684
- replyTo = null,
685
- onCancelReply,
686
- variant = "default",
687
- inputTrailing,
688
- mentionOptions,
689
- className
690
- }, ref) => {
691
- const textareaRef = React2.useRef(null);
692
- const [internalContent, setInternalContent] = React2.useState("");
693
- const isControlled = controlledValue !== void 0;
694
- const content = isControlled ? controlledValue : internalContent;
695
- const setContent = React2.useCallback(
696
- (val) => {
697
- if (isControlled) {
698
- const newVal = typeof val === "function" ? val(controlledValue) : val;
699
- onValueChange?.(newVal);
700
- } else {
701
- setInternalContent(val);
702
- }
703
- },
704
- [isControlled, controlledValue, onValueChange]
705
- );
706
- const [attachments, setAttachments] = React2.useState(
707
- []
708
- );
709
- const [isTyping, setIsTyping] = React2.useState(false);
710
- const typingTimeoutRef = React2.useRef(null);
711
- React2.useImperativeHandle(ref, () => textareaRef.current);
712
- React2.useEffect(() => {
713
- const textarea = textareaRef.current;
714
- if (textarea) {
715
- textarea.style.height = "auto";
716
- textarea.style.height = `${Math.min(textarea.scrollHeight, 150)}px`;
717
- }
718
- }, [content]);
719
- React2.useEffect(() => {
720
- if (content.length > 0 && !isTyping) {
721
- setIsTyping(true);
722
- onTypingStart?.();
723
- }
724
- if (typingTimeoutRef.current) {
725
- clearTimeout(typingTimeoutRef.current);
726
- }
727
- typingTimeoutRef.current = setTimeout(() => {
728
- if (isTyping) {
729
- setIsTyping(false);
730
- onTypingStop?.();
731
- }
732
- }, 2e3);
733
- return () => {
734
- if (typingTimeoutRef.current) {
735
- clearTimeout(typingTimeoutRef.current);
736
- }
737
- };
738
- }, [content, isTyping, onTypingStart, onTypingStop]);
739
- React2.useEffect(() => {
740
- if (autoFocus) {
741
- textareaRef.current?.focus();
742
- }
743
- }, [autoFocus]);
744
- React2.useEffect(() => {
745
- if (replyTo) {
746
- textareaRef.current?.focus();
747
- }
748
- }, [replyTo]);
749
- const mentionsEnabled = !!mentionOptions && mentionOptions.length > 0;
750
- const [mention, setMention] = React2.useState(null);
751
- const [mentionHighlight, setMentionHighlight] = React2.useState(0);
752
- const mentionListId = React2.useId();
753
- const mentionOptionId = (i) => `${mentionListId}-option-${i}`;
754
- const mentionSuggestions = React2.useMemo(() => {
755
- if (!mention || !mentionOptions) return [];
756
- const q = mention.query.toLowerCase();
757
- return mentionOptions.filter((o) => o.label.toLowerCase().includes(q));
758
- }, [mention, mentionOptions]);
759
- const mentionMenuOpen = mentionsEnabled && mention !== null && mentionSuggestions.length > 0;
760
- const {
761
- anchorRef: mentionAnchorRef,
762
- floatingRef: mentionFloatingRef,
763
- style: mentionStyle
764
- } = useAnchoredPosition({
765
- open: mentionMenuOpen,
766
- placement: "top-start",
767
- maxHeight: 224
768
- });
769
- const clampedMentionHighlight = mentionMenuOpen ? Math.min(mentionHighlight, mentionSuggestions.length - 1) : -1;
770
- const activeMentionOptionId = mentionMenuOpen ? mentionOptionId(clampedMentionHighlight) : void 0;
771
- const syncMention = React2.useCallback(
772
- (value, caret) => {
773
- if (!mentionsEnabled) return;
774
- setMention(activeMentionQuery(value, caret));
775
- setMentionHighlight(0);
776
- },
777
- [mentionsEnabled]
778
- );
779
- const insertMention = (option) => {
780
- if (!mention) return;
781
- const insertValue = option.value ?? option.label.split(" ")[0];
782
- const before = content.slice(0, mention.start);
783
- const after = content.slice(mention.start + 1 + mention.query.length);
784
- const insert = `@${insertValue} `;
785
- setContent(before + insert + after);
786
- setMention(null);
787
- const caret = before.length + insert.length;
788
- requestAnimationFrame(() => {
789
- const el = textareaRef.current;
790
- if (el) {
791
- el.focus();
792
- el.setSelectionRange(caret, caret);
793
- }
794
- });
795
- };
796
- const canSend = (content.trim().length > 0 || attachments.length > 0) && content.length <= maxLength && !disabled && !isSending;
797
- const handleSubmit = async (event) => {
798
- event.preventDefault();
799
- if (!canSend) return;
800
- const message = {
801
- content: content.trim(),
802
- attachments: attachments.map((a) => a.file),
803
- replyToId: replyTo?.id
804
- };
805
- setContent("");
806
- setAttachments([]);
807
- setIsTyping(false);
808
- onTypingStop?.();
809
- try {
810
- await onSend(message);
811
- } catch {
812
- setContent(message.content);
813
- onError?.("Failed to send message");
814
- }
815
- };
816
- const handleKeyDown = (event) => {
817
- if (mentionMenuOpen) {
818
- if (event.key === "ArrowDown") {
819
- event.preventDefault();
820
- setMentionHighlight((h) => (h + 1) % mentionSuggestions.length);
821
- return;
822
- }
823
- if (event.key === "ArrowUp") {
824
- event.preventDefault();
825
- setMentionHighlight(
826
- (h) => (h - 1 + mentionSuggestions.length) % mentionSuggestions.length
827
- );
828
- return;
829
- }
830
- if (event.key === "Enter" || event.key === "Tab") {
831
- event.preventDefault();
832
- const chosen = mentionSuggestions[mentionHighlight] ?? mentionSuggestions[0];
833
- if (chosen) insertMention(chosen);
834
- return;
835
- }
836
- if (event.key === "Escape") {
837
- event.preventDefault();
838
- setMention(null);
839
- return;
840
- }
841
- }
842
- if (event.key === "Enter" && !event.shiftKey) {
843
- event.preventDefault();
844
- if (canSend) {
845
- handleSubmit(event);
846
- }
847
- }
848
- };
849
- const handleFilesSelected = (files) => {
850
- const remainingSlots = maxAttachments - attachments.length;
851
- const filesToAdd = files.slice(0, remainingSlots);
852
- if (files.length > remainingSlots) {
853
- onError?.(`Maximum ${maxAttachments} attachments allowed`);
854
- }
855
- const newAttachments = filesToAdd.map((file) => {
856
- const type = getFileType(file.type);
857
- let previewUrl;
858
- if (type === "image" || type === "video") {
859
- previewUrl = URL.createObjectURL(file);
860
- }
861
- return {
862
- id: generateAttachmentId(),
863
- file,
864
- previewUrl,
865
- type,
866
- state: "pending"
867
- };
868
- });
869
- setAttachments((prev) => [...prev, ...newAttachments]);
870
- };
871
- const handlePaste = (event) => {
872
- if (!showAttachmentPicker || disabled) return;
873
- const pasted = Array.from(event.clipboardData.items).filter((item) => item.kind === "file").map((item) => item.getAsFile()).filter((f) => f !== null).filter((f) => isFileAccepted(f, acceptedFileTypes));
874
- if (pasted.length === 0) return;
875
- event.preventDefault();
876
- handleFilesSelected(pasted);
877
- };
878
- const handleRemoveAttachment = (attachmentId) => {
879
- setAttachments((prev) => {
880
- const attachment = prev.find((a) => a.id === attachmentId);
881
- if (attachment?.previewUrl) {
882
- URL.revokeObjectURL(attachment.previewUrl);
883
- }
884
- return prev.filter((a) => a.id !== attachmentId);
885
- });
886
- };
887
- React2.useEffect(() => {
888
- const currentAttachments = attachments;
889
- return () => {
890
- currentAttachments.forEach((a) => {
891
- if (a.previewUrl) {
892
- URL.revokeObjectURL(a.previewUrl);
893
- }
894
- });
895
- };
896
- }, [attachments]);
897
- return /* @__PURE__ */ jsx(
898
- DragDropZone,
899
- {
900
- onFilesDropped: handleFilesSelected,
901
- acceptedTypes: acceptedFileTypes,
902
- maxFileSize,
903
- maxFiles: maxAttachments - attachments.length,
904
- disabled: disabled || attachments.length >= maxAttachments,
905
- onError,
906
- className: cn("w-full", className),
907
- children: /* @__PURE__ */ jsxs(
908
- "form",
909
- {
910
- onSubmit: handleSubmit,
911
- "data-slot": "message-composer",
912
- className: "w-full",
913
- children: [
914
- replyTo && /* @__PURE__ */ jsxs(
915
- "div",
916
- {
917
- "data-slot": "composer-reply-preview",
918
- className: cn(
919
- "flex items-center gap-2 px-4 py-2",
920
- "bg-neutral-50 dark:bg-neutral-800/50",
921
- "border-primary-500 border-l-4"
922
- ),
923
- children: [
924
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
925
- /* @__PURE__ */ jsxs("span", { className: "text-primary-800 dark:text-primary-400 text-xs font-medium", children: [
926
- "Replying to ",
927
- replyTo.senderName
928
- ] }),
929
- /* @__PURE__ */ jsx("p", { className: "truncate text-sm text-neutral-600 dark:text-neutral-300", children: replyTo.content })
930
- ] }),
931
- /* @__PURE__ */ jsx(
932
- "button",
933
- {
934
- type: "button",
935
- onClick: onCancelReply,
936
- className: cn(
937
- "shrink-0 rounded p-1",
938
- "text-neutral-500 hover:text-neutral-700",
939
- "dark:text-neutral-400 dark:hover:text-neutral-200",
940
- "focus:ring-primary-500 focus:ring-2 focus:outline-none"
941
- ),
942
- "aria-label": "Cancel reply",
943
- children: /* @__PURE__ */ jsx(
944
- "svg",
945
- {
946
- "aria-hidden": "true",
947
- className: "h-4 w-4",
948
- fill: "none",
949
- viewBox: "0 0 24 24",
950
- stroke: "currentColor",
951
- children: /* @__PURE__ */ jsx(
952
- "path",
953
- {
954
- strokeLinecap: "round",
955
- strokeLinejoin: "round",
956
- strokeWidth: 2,
957
- d: "M6 18L18 6M6 6l12 12"
958
- }
959
- )
960
- }
961
- )
962
- }
963
- )
964
- ]
965
- }
966
- ),
967
- attachments.length > 0 && /* @__PURE__ */ jsx(
968
- "div",
969
- {
970
- "data-slot": "composer-attachments",
971
- className: cn(
972
- "flex flex-wrap gap-2 p-3",
973
- "border-t border-neutral-200 dark:border-neutral-700"
974
- ),
975
- children: attachments.map((attachment) => /* @__PURE__ */ jsx(
976
- AttachmentPreviewItem,
977
- {
978
- attachment,
979
- onRemove: () => handleRemoveAttachment(attachment.id)
980
- },
981
- attachment.id
982
- ))
983
- }
984
- ),
985
- /* @__PURE__ */ jsxs(
986
- "div",
987
- {
988
- "data-slot": "composer-input-area",
989
- className: cn(
990
- "flex items-center gap-2 p-3",
991
- "bg-white dark:bg-neutral-900",
992
- variant === "default" && "border-t border-neutral-200 dark:border-neutral-700"
993
- ),
994
- children: [
995
- showAttachmentPicker && /* @__PURE__ */ jsx(
996
- AttachmentPicker,
997
- {
998
- onFilesSelected: handleFilesSelected,
999
- acceptedTypes: acceptedFileTypes,
1000
- maxFileSize,
1001
- maxFiles: maxAttachments - attachments.length,
1002
- disabled: disabled || attachments.length >= maxAttachments,
1003
- onError
1004
- }
1005
- ),
1006
- showCameraButton && /* @__PURE__ */ jsx(
1007
- CameraButton,
1008
- {
1009
- onCapture: (file) => handleFilesSelected([file]),
1010
- disabled: disabled || attachments.length >= maxAttachments
1011
- }
1012
- ),
1013
- /* @__PURE__ */ jsxs(
1014
- "div",
1015
- {
1016
- "data-slot": "composer-input-wrapper",
1017
- className: "relative flex-1",
1018
- ref: mentionAnchorRef,
1019
- children: [
1020
- mentionMenuOpen && createPortal(
1021
- /* @__PURE__ */ jsx(
1022
- "ul",
1023
- {
1024
- ref: mentionFloatingRef,
1025
- style: mentionStyle,
1026
- id: mentionListId,
1027
- role: "listbox",
1028
- "aria-label": "Mention",
1029
- "data-slot": "composer-mention-list",
1030
- className: "w-64 overflow-y-auto rounded-lg border border-neutral-200 bg-white py-1 shadow-lg dark:border-neutral-700 dark:bg-neutral-800",
1031
- children: mentionSuggestions.map((option, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
1032
- "button",
1033
- {
1034
- type: "button",
1035
- id: mentionOptionId(i),
1036
- role: "option",
1037
- "aria-selected": i === clampedMentionHighlight,
1038
- onMouseDown: (e) => {
1039
- e.preventDefault();
1040
- insertMention(option);
1041
- },
1042
- onMouseEnter: () => setMentionHighlight(i),
1043
- className: cn(
1044
- "flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm",
1045
- i === clampedMentionHighlight ? "bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-100" : "text-neutral-700 dark:text-neutral-200"
1046
- ),
1047
- children: [
1048
- option.icon,
1049
- /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1 truncate", children: [
1050
- /* @__PURE__ */ jsx("span", { className: "font-medium", children: option.label }),
1051
- option.description && /* @__PURE__ */ jsx("span", { className: "ml-1 text-xs text-neutral-400", children: option.description })
1052
- ] }),
1053
- option.meta && /* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-400", children: option.meta })
1054
- ]
1055
- }
1056
- ) }, option.id))
1057
- }
1058
- ),
1059
- document.body
1060
- ),
1061
- /* @__PURE__ */ jsx(
1062
- "textarea",
1063
- {
1064
- ref: textareaRef,
1065
- "data-slot": "composer-input",
1066
- value: content,
1067
- onChange: (e) => {
1068
- setContent(e.target.value);
1069
- syncMention(
1070
- e.target.value,
1071
- e.target.selectionStart ?? e.target.value.length
1072
- );
1073
- },
1074
- onClick: (e) => {
1075
- const el = e.currentTarget;
1076
- syncMention(el.value, el.selectionStart ?? el.value.length);
1077
- },
1078
- onKeyDown: handleKeyDown,
1079
- onPaste: handlePaste,
1080
- placeholder,
1081
- disabled: disabled || isSending,
1082
- rows: 1,
1083
- className: cn(
1084
- "w-full resize-none rounded-2xl py-2.5",
1085
- inputTrailing ? "pr-10 pl-4" : "px-4",
1086
- "bg-neutral-100 dark:bg-neutral-800",
1087
- "text-neutral-900 dark:text-neutral-100",
1088
- "placeholder:text-neutral-400 dark:placeholder:text-neutral-500",
1089
- "focus:ring-primary-500 focus:ring-2 focus:outline-none",
1090
- "disabled:cursor-not-allowed disabled:opacity-50",
1091
- "transition-colors",
1092
- "max-h-[150px]"
1093
- ),
1094
- "aria-label": "Message",
1095
- "aria-describedby": showCharacterCount ? "char-count" : void 0,
1096
- ...mentionsEnabled ? {
1097
- "aria-controls": mentionMenuOpen ? mentionListId : void 0,
1098
- "aria-activedescendant": activeMentionOptionId,
1099
- "aria-autocomplete": "list"
1100
- } : {}
1101
- }
1102
- ),
1103
- inputTrailing && /* @__PURE__ */ jsx(
1104
- "div",
1105
- {
1106
- "data-slot": "composer-input-trailing",
1107
- className: "pointer-events-none absolute top-0 right-1 flex h-[44px] items-center [&>*]:pointer-events-auto",
1108
- children: inputTrailing
1109
- }
1110
- ),
1111
- showCharacterCount && /* @__PURE__ */ jsx(
1112
- "div",
1113
- {
1114
- "data-slot": "composer-char-count",
1115
- id: "char-count",
1116
- className: "absolute right-3 bottom-1.5",
1117
- children: /* @__PURE__ */ jsx(CharacterCounter, { current: content.length, max: maxLength })
1118
- }
1119
- )
1120
- ]
1121
- }
1122
- ),
1123
- /* @__PURE__ */ jsx(
1124
- SendButton,
1125
- {
1126
- canSend,
1127
- isLoading: isSending,
1128
- disabled
1129
- }
1130
- )
1131
- ]
1132
- }
1133
- )
1134
- ]
1135
- }
1136
- )
1137
- }
1138
- );
1139
- }
1140
- );
1141
- MessageComposer.displayName = "MessageComposer";
1142
-
1143
- export { AttachmentPicker, AttachmentPreviewItem, CameraButton, CharacterCounter, DragDropZone, MessageComposer, SendButton, generateAttachmentId, getFileType, sendButtonVariants, validateFile };
1144
- //# sourceMappingURL=chunk-EKRT7K2K.js.map
1145
- //# sourceMappingURL=chunk-EKRT7K2K.js.map