@mieweb/ui 0.6.1 → 0.7.0-dev.178

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 (450) hide show
  1. package/README.md +90 -53
  2. package/dist/CsvBlock-2A5VEDD3.cjs +15 -0
  3. package/dist/CsvBlock-2A5VEDD3.cjs.map +1 -0
  4. package/dist/CsvBlock-D6PWAJ5X.js +6 -0
  5. package/dist/CsvBlock-D6PWAJ5X.js.map +1 -0
  6. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +6 -0
  7. package/dist/HtmlPreviewBlock-PEHTJ6C3.js.map +1 -0
  8. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +15 -0
  9. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs.map +1 -0
  10. package/dist/MedicationEditor-Bp4NLy7y.d.cts +352 -0
  11. package/dist/MedicationEditor-Bp4NLy7y.d.ts +352 -0
  12. package/dist/MermaidBlock-7NK3AVK2.js +6 -0
  13. package/dist/MermaidBlock-7NK3AVK2.js.map +1 -0
  14. package/dist/MermaidBlock-AFXNP5NK.cjs +15 -0
  15. package/dist/MermaidBlock-AFXNP5NK.cjs.map +1 -0
  16. package/dist/SurveyBlock-6KRNKFH5.cjs +15 -0
  17. package/dist/SurveyBlock-6KRNKFH5.cjs.map +1 -0
  18. package/dist/SurveyBlock-NNDGXGG4.js +6 -0
  19. package/dist/SurveyBlock-NNDGXGG4.js.map +1 -0
  20. package/dist/ag-grid.cjs +6 -6
  21. package/dist/ag-grid.cjs.map +1 -1
  22. package/dist/ag-grid.js +2 -2
  23. package/dist/ag-grid.js.map +1 -1
  24. package/dist/brands/index.cjs +17 -17
  25. package/dist/brands/index.js +4 -4
  26. package/dist/chunk-372IIHUA.cjs +2017 -0
  27. package/dist/chunk-372IIHUA.cjs.map +1 -0
  28. package/dist/{chunk-2DS3RJ2D.js → chunk-3TERETXH.js} +112 -3
  29. package/dist/chunk-3TERETXH.js.map +1 -0
  30. package/dist/chunk-44CK4CT2.cjs +336 -0
  31. package/dist/chunk-44CK4CT2.cjs.map +1 -0
  32. package/dist/{chunk-FSBFQBNE.cjs → chunk-4GXECTPS.cjs} +2 -2
  33. package/dist/{chunk-FSBFQBNE.cjs.map → chunk-4GXECTPS.cjs.map} +1 -1
  34. package/dist/chunk-4LVPQ44A.js +228 -0
  35. package/dist/chunk-4LVPQ44A.js.map +1 -0
  36. package/dist/{chunk-6555OYRU.js → chunk-5BQE6BEL.js} +2 -2
  37. package/dist/{chunk-6555OYRU.js.map → chunk-5BQE6BEL.js.map} +1 -1
  38. package/dist/chunk-62ZOA6PX.js +31 -0
  39. package/dist/chunk-62ZOA6PX.js.map +1 -0
  40. package/dist/chunk-63KVQHGQ.cjs +1802 -0
  41. package/dist/chunk-63KVQHGQ.cjs.map +1 -0
  42. package/dist/chunk-6AHYYWVB.js +78 -0
  43. package/dist/chunk-6AHYYWVB.js.map +1 -0
  44. package/dist/chunk-6I7IDZ4A.js +51 -0
  45. package/dist/chunk-6I7IDZ4A.js.map +1 -0
  46. package/dist/chunk-6ZYE6JUK.cjs +80 -0
  47. package/dist/chunk-6ZYE6JUK.cjs.map +1 -0
  48. package/dist/chunk-7QXG5BBB.cjs +164 -0
  49. package/dist/chunk-7QXG5BBB.cjs.map +1 -0
  50. package/dist/chunk-7WMSUXOQ.js +182 -0
  51. package/dist/chunk-7WMSUXOQ.js.map +1 -0
  52. package/dist/chunk-7XUN3OQT.js +3 -0
  53. package/dist/{chunk-V2DF2GUE.js.map → chunk-7XUN3OQT.js.map} +1 -1
  54. package/dist/chunk-7ZVTLTJF.js +109 -0
  55. package/dist/chunk-7ZVTLTJF.js.map +1 -0
  56. package/dist/chunk-AES2BKEW.cjs +229 -0
  57. package/dist/chunk-AES2BKEW.cjs.map +1 -0
  58. package/dist/chunk-AFKKJEV5.cjs +72 -0
  59. package/dist/chunk-AFKKJEV5.cjs.map +1 -0
  60. package/dist/chunk-AT732HC6.cjs +4 -0
  61. package/dist/{chunk-74K3RRU7.cjs.map → chunk-AT732HC6.cjs.map} +1 -1
  62. package/dist/chunk-BB4WQ4LV.cjs +137 -0
  63. package/dist/chunk-BB4WQ4LV.cjs.map +1 -0
  64. package/dist/chunk-BIT27PPD.js +49 -0
  65. package/dist/chunk-BIT27PPD.js.map +1 -0
  66. package/dist/chunk-BLPCYP4D.cjs +537 -0
  67. package/dist/chunk-BLPCYP4D.cjs.map +1 -0
  68. package/dist/chunk-BT3ZQJGT.cjs +130 -0
  69. package/dist/chunk-BT3ZQJGT.cjs.map +1 -0
  70. package/dist/chunk-BX6BTDTR.js +34 -0
  71. package/dist/chunk-BX6BTDTR.js.map +1 -0
  72. package/dist/chunk-C2544GKZ.js +313 -0
  73. package/dist/chunk-C2544GKZ.js.map +1 -0
  74. package/dist/chunk-C7RVKV25.cjs +25 -0
  75. package/dist/chunk-C7RVKV25.cjs.map +1 -0
  76. package/dist/chunk-CKD554XR.cjs +100 -0
  77. package/dist/chunk-CKD554XR.cjs.map +1 -0
  78. package/dist/chunk-CVC4NWFA.cjs +154 -0
  79. package/dist/chunk-CVC4NWFA.cjs.map +1 -0
  80. package/dist/{chunk-K3IVCUPP.js → chunk-CYMZ2QS5.js} +2 -2
  81. package/dist/{chunk-K3IVCUPP.js.map → chunk-CYMZ2QS5.js.map} +1 -1
  82. package/dist/{chunk-FRT6RQND.cjs → chunk-DAPZPT5N.cjs} +92 -56
  83. package/dist/chunk-DAPZPT5N.cjs.map +1 -0
  84. package/dist/chunk-DHKYGVP7.js +3 -0
  85. package/dist/{chunk-LEMY57MI.js.map → chunk-DHKYGVP7.js.map} +1 -1
  86. package/dist/chunk-DLNJLCNO.cjs +101 -0
  87. package/dist/chunk-DLNJLCNO.cjs.map +1 -0
  88. package/dist/chunk-DUPR6FEL.js +43 -0
  89. package/dist/chunk-DUPR6FEL.js.map +1 -0
  90. package/dist/{chunk-4FALCEJI.cjs → chunk-EL2RSQTJ.cjs} +2 -2
  91. package/dist/{chunk-4FALCEJI.cjs.map → chunk-EL2RSQTJ.cjs.map} +1 -1
  92. package/dist/chunk-ERLPVXOV.js +22 -0
  93. package/dist/chunk-ERLPVXOV.js.map +1 -0
  94. package/dist/chunk-FIWKHLWY.js +197 -0
  95. package/dist/chunk-FIWKHLWY.js.map +1 -0
  96. package/dist/chunk-FJH7P5WG.js +513 -0
  97. package/dist/chunk-FJH7P5WG.js.map +1 -0
  98. package/dist/chunk-FSGEDDF2.cjs +33 -0
  99. package/dist/chunk-FSGEDDF2.cjs.map +1 -0
  100. package/dist/chunk-GLXTVCHN.cjs +4 -0
  101. package/dist/{chunk-4ZU53GNR.cjs.map → chunk-GLXTVCHN.cjs.map} +1 -1
  102. package/dist/chunk-HRS6W74P.js +1568 -0
  103. package/dist/chunk-HRS6W74P.js.map +1 -0
  104. package/dist/chunk-I2W24RHW.js +196 -0
  105. package/dist/chunk-I2W24RHW.js.map +1 -0
  106. package/dist/chunk-I6CY5C6A.js +12 -0
  107. package/dist/chunk-I6CY5C6A.js.map +1 -0
  108. package/dist/chunk-IQ4KQJAO.js +3 -0
  109. package/dist/chunk-IQ4KQJAO.js.map +1 -0
  110. package/dist/chunk-IWDQPSJN.cjs +1452 -0
  111. package/dist/chunk-IWDQPSJN.cjs.map +1 -0
  112. package/dist/chunk-J7KWQJOB.js +14 -0
  113. package/dist/chunk-J7KWQJOB.js.map +1 -0
  114. package/dist/{chunk-R25H4N4Z.js → chunk-J7Z7467B.js} +92 -56
  115. package/dist/chunk-J7Z7467B.js.map +1 -0
  116. package/dist/{chunk-NINI4WVS.cjs → chunk-JC6Y3LGF.cjs} +297 -84
  117. package/dist/chunk-JC6Y3LGF.cjs.map +1 -0
  118. package/dist/chunk-JCNPVK74.cjs +347 -0
  119. package/dist/chunk-JCNPVK74.cjs.map +1 -0
  120. package/dist/chunk-JFLC7SHM.cjs +35 -0
  121. package/dist/chunk-JFLC7SHM.cjs.map +1 -0
  122. package/dist/chunk-JHYFHEHS.js +1967 -0
  123. package/dist/chunk-JHYFHEHS.js.map +1 -0
  124. package/dist/{chunk-IBZXDX4L.cjs → chunk-JQEY53SH.cjs} +112 -3
  125. package/dist/chunk-JQEY53SH.cjs.map +1 -0
  126. package/dist/chunk-JTBQNOSL.cjs +1605 -0
  127. package/dist/chunk-JTBQNOSL.cjs.map +1 -0
  128. package/dist/chunk-JYZW2PZS.cjs +166 -0
  129. package/dist/chunk-JYZW2PZS.cjs.map +1 -0
  130. package/dist/chunk-KBEKQMVY.cjs +198 -0
  131. package/dist/chunk-KBEKQMVY.cjs.map +1 -0
  132. package/dist/chunk-KJ5BSGEO.cjs +258 -0
  133. package/dist/chunk-KJ5BSGEO.cjs.map +1 -0
  134. package/dist/{chunk-DNPRRYPQ.js → chunk-KL2S36FM.js} +2 -2
  135. package/dist/chunk-KL2S36FM.js.map +1 -0
  136. package/dist/chunk-LIH3IZYK.js +689 -0
  137. package/dist/chunk-LIH3IZYK.js.map +1 -0
  138. package/dist/chunk-MAMY5HTT.cjs +1177 -0
  139. package/dist/chunk-MAMY5HTT.cjs.map +1 -0
  140. package/dist/{chunk-WFS6R2F5.js → chunk-MKWGKASO.js} +114 -101
  141. package/dist/chunk-MKWGKASO.js.map +1 -0
  142. package/dist/{chunk-CV4CVGLO.cjs → chunk-MZPF2QGM.cjs} +95 -74
  143. package/dist/chunk-MZPF2QGM.cjs.map +1 -0
  144. package/dist/chunk-NQME7MCK.js +1416 -0
  145. package/dist/chunk-NQME7MCK.js.map +1 -0
  146. package/dist/chunk-NTYGCBCL.js +543 -0
  147. package/dist/chunk-NTYGCBCL.js.map +1 -0
  148. package/dist/chunk-OF7NTZ2I.js +3 -0
  149. package/dist/chunk-OF7NTZ2I.js.map +1 -0
  150. package/dist/chunk-OXYFTCRW.cjs +57 -0
  151. package/dist/chunk-OXYFTCRW.cjs.map +1 -0
  152. package/dist/chunk-QA6ZDHFP.js +117 -0
  153. package/dist/chunk-QA6ZDHFP.js.map +1 -0
  154. package/dist/chunk-RHNPILZQ.cjs +4 -0
  155. package/dist/chunk-RHNPILZQ.cjs.map +1 -0
  156. package/dist/chunk-RHYIFIT5.js +98 -0
  157. package/dist/chunk-RHYIFIT5.js.map +1 -0
  158. package/dist/chunk-RI56YPED.cjs +201 -0
  159. package/dist/chunk-RI56YPED.cjs.map +1 -0
  160. package/dist/chunk-RISZWWEQ.js +3 -0
  161. package/dist/chunk-RISZWWEQ.js.map +1 -0
  162. package/dist/chunk-S6Z3KDEM.js +140 -0
  163. package/dist/chunk-S6Z3KDEM.js.map +1 -0
  164. package/dist/chunk-S7JQ3FV5.cjs +16 -0
  165. package/dist/chunk-S7JQ3FV5.cjs.map +1 -0
  166. package/dist/{chunk-OXGUG57G.cjs → chunk-SNEQXSC5.cjs} +2 -2
  167. package/dist/{chunk-OXGUG57G.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
  168. package/dist/chunk-SQHMGT4W.js +164 -0
  169. package/dist/chunk-SQHMGT4W.js.map +1 -0
  170. package/dist/{chunk-JHPFOG2N.cjs → chunk-ST2RE5UB.cjs} +30 -18
  171. package/dist/chunk-ST2RE5UB.cjs.map +1 -0
  172. package/dist/{chunk-QVJBUWJQ.js → chunk-STPK44AU.js} +46 -12
  173. package/dist/chunk-STPK44AU.js.map +1 -0
  174. package/dist/chunk-T3C4RNJ4.js +106 -0
  175. package/dist/chunk-T3C4RNJ4.js.map +1 -0
  176. package/dist/chunk-T3RWXOCM.js +148 -0
  177. package/dist/chunk-T3RWXOCM.js.map +1 -0
  178. package/dist/{chunk-DCER2QQB.js → chunk-T42BCIUA.js} +2 -2
  179. package/dist/{chunk-DCER2QQB.js.map → chunk-T42BCIUA.js.map} +1 -1
  180. package/dist/{chunk-OYKS2JBB.cjs → chunk-TN33E2VN.cjs} +2 -2
  181. package/dist/chunk-TN33E2VN.cjs.map +1 -0
  182. package/dist/{chunk-K7IGBNZA.cjs → chunk-TR2OJKQ4.cjs} +46 -12
  183. package/dist/chunk-TR2OJKQ4.cjs.map +1 -0
  184. package/dist/chunk-UFYXU7KV.js +135 -0
  185. package/dist/chunk-UFYXU7KV.js.map +1 -0
  186. package/dist/chunk-UM6NA7HL.js +1145 -0
  187. package/dist/chunk-UM6NA7HL.js.map +1 -0
  188. package/dist/chunk-UO3KEUYK.cjs +220 -0
  189. package/dist/chunk-UO3KEUYK.cjs.map +1 -0
  190. package/dist/chunk-UOOH356R.cjs +66 -0
  191. package/dist/chunk-UOOH356R.cjs.map +1 -0
  192. package/dist/{chunk-4ZU53GNR.cjs → chunk-UTYUT5YY.cjs} +62 -2
  193. package/dist/chunk-UTYUT5YY.cjs.map +1 -0
  194. package/dist/chunk-UVSODK6V.cjs +53 -0
  195. package/dist/chunk-UVSODK6V.cjs.map +1 -0
  196. package/dist/chunk-V25Z5GR6.cjs +184 -0
  197. package/dist/chunk-V25Z5GR6.cjs.map +1 -0
  198. package/dist/chunk-VBWRH4UW.cjs +4 -0
  199. package/dist/chunk-VBWRH4UW.cjs.map +1 -0
  200. package/dist/chunk-VJOVJTFP.cjs +370 -0
  201. package/dist/chunk-VJOVJTFP.cjs.map +1 -0
  202. package/dist/{chunk-7BARESXI.cjs → chunk-VPNURIAY.cjs} +114 -101
  203. package/dist/chunk-VPNURIAY.cjs.map +1 -0
  204. package/dist/{chunk-I56VBDSC.js → chunk-XDFDVF2O.js} +30 -18
  205. package/dist/chunk-XDFDVF2O.js.map +1 -0
  206. package/dist/chunk-XL7TTKHP.js +327 -0
  207. package/dist/chunk-XL7TTKHP.js.map +1 -0
  208. package/dist/chunk-Y2S6QMKU.js +78 -0
  209. package/dist/chunk-Y2S6QMKU.js.map +1 -0
  210. package/dist/chunk-Y4ESBDQ5.cjs +552 -0
  211. package/dist/chunk-Y4ESBDQ5.cjs.map +1 -0
  212. package/dist/chunk-Y5KEFV5O.js +192 -0
  213. package/dist/chunk-Y5KEFV5O.js.map +1 -0
  214. package/dist/chunk-YBLIDESO.js +365 -0
  215. package/dist/chunk-YBLIDESO.js.map +1 -0
  216. package/dist/chunk-YVLP3ATI.js +1776 -0
  217. package/dist/chunk-YVLP3ATI.js.map +1 -0
  218. package/dist/chunk-YVPC65ZJ.cjs +134 -0
  219. package/dist/chunk-YVPC65ZJ.cjs.map +1 -0
  220. package/dist/{chunk-MPOWJVV4.js → chunk-YZT62IMX.js} +95 -74
  221. package/dist/chunk-YZT62IMX.js.map +1 -0
  222. package/dist/chunk-ZAIEQWRA.js +207 -0
  223. package/dist/chunk-ZAIEQWRA.js.map +1 -0
  224. package/dist/chunk-ZDEYV373.cjs +139 -0
  225. package/dist/chunk-ZDEYV373.cjs.map +1 -0
  226. package/dist/{chunk-Q7NBJFEB.js → chunk-ZGSC2CB2.js} +2 -2
  227. package/dist/{chunk-Q7NBJFEB.js.map → chunk-ZGSC2CB2.js.map} +1 -1
  228. package/dist/{chunk-3M4P2KMG.cjs → chunk-ZHBANUBI.cjs} +2 -2
  229. package/dist/{chunk-3M4P2KMG.cjs.map → chunk-ZHBANUBI.cjs.map} +1 -1
  230. package/dist/components/AlertDialog/index.cjs +18 -0
  231. package/dist/components/AlertDialog/index.cjs.map +1 -0
  232. package/dist/components/AlertDialog/index.d.cts +56 -0
  233. package/dist/components/AlertDialog/index.d.ts +56 -0
  234. package/dist/components/AlertDialog/index.js +9 -0
  235. package/dist/components/AlertDialog/index.js.map +1 -0
  236. package/dist/components/AudioRecorder/index.d.cts +1 -1
  237. package/dist/components/AudioRecorder/index.d.ts +1 -1
  238. package/dist/components/Autocomplete/index.cjs +16 -0
  239. package/dist/components/Autocomplete/index.cjs.map +1 -0
  240. package/dist/components/Autocomplete/index.d.cts +77 -0
  241. package/dist/components/Autocomplete/index.d.ts +77 -0
  242. package/dist/components/Autocomplete/index.js +7 -0
  243. package/dist/components/Autocomplete/index.js.map +1 -0
  244. package/dist/components/Badge/index.cjs +4 -3
  245. package/dist/components/Badge/index.js +2 -1
  246. package/dist/components/Card/index.cjs +16 -15
  247. package/dist/components/Card/index.js +2 -1
  248. package/dist/components/Collapsible/index.cjs +21 -0
  249. package/dist/components/Collapsible/index.cjs.map +1 -0
  250. package/dist/components/Collapsible/index.d.cts +33 -0
  251. package/dist/components/Collapsible/index.d.ts +33 -0
  252. package/dist/components/Collapsible/index.js +4 -0
  253. package/dist/components/Collapsible/index.js.map +1 -0
  254. package/dist/components/CountryCodeDropdown/index.cjs +6 -5
  255. package/dist/components/CountryCodeDropdown/index.js +3 -2
  256. package/dist/components/DateInput/index.cjs +2 -2
  257. package/dist/components/DateInput/index.d.cts +8 -2
  258. package/dist/components/DateInput/index.d.ts +8 -2
  259. package/dist/components/DateInput/index.js +1 -1
  260. package/dist/components/Dropdown/index.cjs +9 -8
  261. package/dist/components/Dropdown/index.d.cts +2 -1
  262. package/dist/components/Dropdown/index.d.ts +2 -1
  263. package/dist/components/Dropdown/index.js +3 -2
  264. package/dist/components/FloatingWindow/index.cjs +18 -0
  265. package/dist/components/FloatingWindow/index.cjs.map +1 -0
  266. package/dist/components/FloatingWindow/index.d.cts +64 -0
  267. package/dist/components/FloatingWindow/index.d.ts +64 -0
  268. package/dist/components/FloatingWindow/index.js +5 -0
  269. package/dist/components/FloatingWindow/index.js.map +1 -0
  270. package/dist/components/Label/index.cjs +17 -0
  271. package/dist/components/Label/index.cjs.map +1 -0
  272. package/dist/components/Label/index.d.cts +23 -0
  273. package/dist/components/Label/index.d.ts +23 -0
  274. package/dist/components/Label/index.js +4 -0
  275. package/dist/components/Label/index.js.map +1 -0
  276. package/dist/components/Markdown/index.cjs +51 -0
  277. package/dist/components/Markdown/index.cjs.map +1 -0
  278. package/dist/components/Markdown/index.css +331 -0
  279. package/dist/components/Markdown/index.css.map +1 -0
  280. package/dist/components/Markdown/index.d.cts +82 -0
  281. package/dist/components/Markdown/index.d.ts +82 -0
  282. package/dist/components/Markdown/index.js +10 -0
  283. package/dist/components/Markdown/index.js.map +1 -0
  284. package/dist/components/Markdown/styles.css +354 -0
  285. package/dist/components/MediaEditor/index.cjs +44 -0
  286. package/dist/components/MediaEditor/index.cjs.map +1 -0
  287. package/dist/components/MediaEditor/index.d.cts +151 -0
  288. package/dist/components/MediaEditor/index.d.ts +151 -0
  289. package/dist/components/MediaEditor/index.js +19 -0
  290. package/dist/components/MediaEditor/index.js.map +1 -0
  291. package/dist/components/MediaPlayer/index.cjs +24 -0
  292. package/dist/components/MediaPlayer/index.cjs.map +1 -0
  293. package/dist/components/MediaPlayer/index.d.cts +71 -0
  294. package/dist/components/MediaPlayer/index.d.ts +71 -0
  295. package/dist/components/MediaPlayer/index.js +7 -0
  296. package/dist/components/MediaPlayer/index.js.map +1 -0
  297. package/dist/components/RecordButton/index.cjs +4 -4
  298. package/dist/components/RecordButton/index.js +1 -1
  299. package/dist/components/RichTextEditor/index.cjs +33 -0
  300. package/dist/components/RichTextEditor/index.cjs.map +1 -0
  301. package/dist/components/RichTextEditor/index.d.cts +62 -0
  302. package/dist/components/RichTextEditor/index.d.ts +62 -0
  303. package/dist/components/RichTextEditor/index.js +12 -0
  304. package/dist/components/RichTextEditor/index.js.map +1 -0
  305. package/dist/components/ScrollArea/index.cjs +17 -0
  306. package/dist/components/ScrollArea/index.cjs.map +1 -0
  307. package/dist/components/ScrollArea/index.d.cts +22 -0
  308. package/dist/components/ScrollArea/index.d.ts +22 -0
  309. package/dist/components/ScrollArea/index.js +4 -0
  310. package/dist/components/ScrollArea/index.js.map +1 -0
  311. package/dist/components/Select/index.cjs +5 -3
  312. package/dist/components/Select/index.js +3 -1
  313. package/dist/components/Separator/index.cjs +17 -0
  314. package/dist/components/Separator/index.cjs.map +1 -0
  315. package/dist/components/Separator/index.d.cts +27 -0
  316. package/dist/components/Separator/index.d.ts +27 -0
  317. package/dist/components/Separator/index.js +4 -0
  318. package/dist/components/Separator/index.js.map +1 -0
  319. package/dist/components/Sheet/index.cjs +48 -0
  320. package/dist/components/Sheet/index.cjs.map +1 -0
  321. package/dist/components/Sheet/index.d.cts +62 -0
  322. package/dist/components/Sheet/index.d.ts +62 -0
  323. package/dist/components/Sheet/index.js +7 -0
  324. package/dist/components/Sheet/index.js.map +1 -0
  325. package/dist/components/SuperChat/index.cjs +1373 -0
  326. package/dist/components/SuperChat/index.cjs.map +1 -0
  327. package/dist/components/SuperChat/index.d.cts +189 -0
  328. package/dist/components/SuperChat/index.d.ts +189 -0
  329. package/dist/components/SuperChat/index.js +1336 -0
  330. package/dist/components/SuperChat/index.js.map +1 -0
  331. package/dist/components/SuperChat/plugins/index.cjs +1292 -0
  332. package/dist/components/SuperChat/plugins/index.cjs.map +1 -0
  333. package/dist/components/SuperChat/plugins/index.d.cts +233 -0
  334. package/dist/components/SuperChat/plugins/index.d.ts +233 -0
  335. package/dist/components/SuperChat/plugins/index.js +1252 -0
  336. package/dist/components/SuperChat/plugins/index.js.map +1 -0
  337. package/dist/components/Table/index.cjs +9 -9
  338. package/dist/components/Table/index.d.cts +4 -0
  339. package/dist/components/Table/index.d.ts +4 -0
  340. package/dist/components/Table/index.js +1 -1
  341. package/dist/components/ThemeProvider/index.cjs +7 -7
  342. package/dist/components/ThemeProvider/index.js +1 -1
  343. package/dist/components/Toggle/index.cjs +17 -0
  344. package/dist/components/Toggle/index.cjs.map +1 -0
  345. package/dist/components/Toggle/index.d.cts +28 -0
  346. package/dist/components/Toggle/index.d.ts +28 -0
  347. package/dist/components/Toggle/index.js +4 -0
  348. package/dist/components/Toggle/index.js.map +1 -0
  349. package/dist/components/TranscriptView/index.cjs +21 -0
  350. package/dist/components/TranscriptView/index.cjs.map +1 -0
  351. package/dist/components/TranscriptView/index.d.cts +55 -0
  352. package/dist/components/TranscriptView/index.d.ts +55 -0
  353. package/dist/components/TranscriptView/index.js +4 -0
  354. package/dist/components/TranscriptView/index.js.map +1 -0
  355. package/dist/datavis.cjs +268 -227
  356. package/dist/datavis.cjs.map +1 -1
  357. package/dist/datavis.d.cts +83 -9
  358. package/dist/datavis.d.ts +83 -9
  359. package/dist/datavis.js +235 -229
  360. package/dist/datavis.js.map +1 -1
  361. package/dist/esheet.cjs +184 -0
  362. package/dist/esheet.cjs.map +1 -1
  363. package/dist/esheet.d.cts +117 -0
  364. package/dist/esheet.d.ts +117 -0
  365. package/dist/esheet.js +163 -0
  366. package/dist/esheet.js.map +1 -1
  367. package/dist/hey-buddy-CLUVAY2X.cjs +1133 -0
  368. package/dist/hey-buddy-CLUVAY2X.cjs.map +1 -0
  369. package/dist/hey-buddy-NMSWZ4TN.js +1131 -0
  370. package/dist/hey-buddy-NMSWZ4TN.js.map +1 -0
  371. package/dist/hooks/index.cjs +76 -16
  372. package/dist/hooks/index.d.cts +151 -2
  373. package/dist/hooks/index.d.ts +151 -2
  374. package/dist/hooks/index.js +6 -2
  375. package/dist/html-MdxqSzjD.d.cts +13 -0
  376. package/dist/html-MdxqSzjD.d.ts +13 -0
  377. package/dist/index.cjs +10394 -6565
  378. package/dist/index.cjs.map +1 -1
  379. package/dist/index.css +331 -0
  380. package/dist/index.css.map +1 -0
  381. package/dist/index.d.cts +2020 -249
  382. package/dist/index.d.ts +2020 -249
  383. package/dist/index.js +9223 -5969
  384. package/dist/index.js.map +1 -1
  385. package/dist/kerebron.cjs +119 -0
  386. package/dist/kerebron.cjs.map +1 -0
  387. package/dist/kerebron.css +11 -0
  388. package/dist/kerebron.d.cts +23 -0
  389. package/dist/kerebron.d.ts +23 -0
  390. package/dist/kerebron.js +116 -0
  391. package/dist/kerebron.js.map +1 -0
  392. package/dist/nitroTableGrid-3J2GY6CK.cjs +47 -0
  393. package/dist/nitroTableGrid-3J2GY6CK.cjs.map +1 -0
  394. package/dist/nitroTableGrid-SIMT7635.js +25 -0
  395. package/dist/nitroTableGrid-SIMT7635.js.map +1 -0
  396. package/dist/orderRows-BUJYgSc7.d.cts +221 -0
  397. package/dist/orderRows-BUJYgSc7.d.ts +221 -0
  398. package/dist/speaker-verify-5GTWAN5Y.cjs +357 -0
  399. package/dist/speaker-verify-5GTWAN5Y.cjs.map +1 -0
  400. package/dist/speaker-verify-R67P433H.js +355 -0
  401. package/dist/speaker-verify-R67P433H.js.map +1 -0
  402. package/dist/styles/init.css +5 -0
  403. package/dist/styles.css +1 -1
  404. package/dist/tailwind-preset.cjs +4 -4
  405. package/dist/tailwind-preset.js +1 -1
  406. package/dist/transcript-oaWqY3yr.d.cts +81 -0
  407. package/dist/transcript-oaWqY3yr.d.ts +81 -0
  408. package/dist/types-BYnLjEFg.d.cts +248 -0
  409. package/dist/types-BYnLjEFg.d.ts +248 -0
  410. package/dist/types-CBh8Zlje.d.cts +240 -0
  411. package/dist/types-CyCwYBlr.d.ts +240 -0
  412. package/dist/useAnchoredPosition-nXdSFKHf.d.cts +65 -0
  413. package/dist/useAnchoredPosition-nXdSFKHf.d.ts +65 -0
  414. package/dist/useTranscriptEdits-BUylQFg0.d.cts +168 -0
  415. package/dist/useTranscriptEdits-CWYnjbGP.d.ts +168 -0
  416. package/dist/utils/index.cjs +27 -18
  417. package/dist/utils/index.d.cts +1 -0
  418. package/dist/utils/index.d.ts +1 -0
  419. package/dist/utils/index.js +3 -2
  420. package/package.json +180 -55
  421. package/dist/chunk-2DS3RJ2D.js.map +0 -1
  422. package/dist/chunk-74K3RRU7.cjs +0 -4
  423. package/dist/chunk-7BARESXI.cjs.map +0 -1
  424. package/dist/chunk-CV4CVGLO.cjs.map +0 -1
  425. package/dist/chunk-DNPRRYPQ.js.map +0 -1
  426. package/dist/chunk-FRT6RQND.cjs.map +0 -1
  427. package/dist/chunk-HYEJLKXI.js +0 -476
  428. package/dist/chunk-HYEJLKXI.js.map +0 -1
  429. package/dist/chunk-I56VBDSC.js.map +0 -1
  430. package/dist/chunk-IBZXDX4L.cjs.map +0 -1
  431. package/dist/chunk-IKMR2ADM.cjs +0 -25
  432. package/dist/chunk-IKMR2ADM.cjs.map +0 -1
  433. package/dist/chunk-JHPFOG2N.cjs.map +0 -1
  434. package/dist/chunk-K7IGBNZA.cjs.map +0 -1
  435. package/dist/chunk-LEMY57MI.js +0 -3
  436. package/dist/chunk-MPOWJVV4.js.map +0 -1
  437. package/dist/chunk-NINI4WVS.cjs.map +0 -1
  438. package/dist/chunk-OKBR6PX4.js +0 -23
  439. package/dist/chunk-OKBR6PX4.js.map +0 -1
  440. package/dist/chunk-OYKS2JBB.cjs.map +0 -1
  441. package/dist/chunk-QVJBUWJQ.js.map +0 -1
  442. package/dist/chunk-R25H4N4Z.js.map +0 -1
  443. package/dist/chunk-V2DF2GUE.js +0 -3
  444. package/dist/chunk-WFS6R2F5.js.map +0 -1
  445. package/dist/ozwell.cjs +0 -385
  446. package/dist/ozwell.cjs.map +0 -1
  447. package/dist/ozwell.d.cts +0 -15
  448. package/dist/ozwell.d.ts +0 -15
  449. package/dist/ozwell.js +0 -360
  450. package/dist/ozwell.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Messaging/AttachmentPicker.tsx","../src/components/Messaging/MessageComposer.tsx"],"names":["React","jsxs","jsx"],"mappings":"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","file":"chunk-UM6NA7HL.js","sourcesContent":["import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport type { AttachmentType, AttachmentState } from './types';\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Get file type from MIME type.\n */\nfunction getFileType(mimeType: string): AttachmentType {\n if (mimeType.startsWith('image/')) return 'image';\n if (mimeType.startsWith('video/')) return 'video';\n if (mimeType.startsWith('audio/')) return 'audio';\n if (\n mimeType.includes('pdf') ||\n mimeType.includes('document') ||\n mimeType.includes('text')\n ) {\n return 'document';\n }\n return 'file';\n}\n\n/**\n * Format file size in human-readable format.\n */\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Validate file type and size.\n */\nfunction validateFile(\n file: File,\n acceptedTypes?: string[],\n maxSize?: number\n): { valid: boolean; error?: string } {\n if (acceptedTypes && acceptedTypes.length > 0) {\n const isAccepted = acceptedTypes.some((type) => {\n if (type.startsWith('.')) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.replace('/*', '/'));\n }\n return file.type === type;\n });\n if (!isAccepted) {\n return { valid: false, error: 'File type not supported' };\n }\n }\n\n if (maxSize && file.size > maxSize) {\n return {\n valid: false,\n error: `File too large (max ${formatFileSize(maxSize)})`,\n };\n }\n\n return { valid: true };\n}\n\n/**\n * Generate a unique ID for attachments.\n */\nfunction generateAttachmentId(): string {\n return `attachment-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n// ============================================================================\n// Attachment Preview Item Component\n// ============================================================================\n\nexport interface AttachmentPreviewItemProps {\n /** The attachment to preview */\n attachment: {\n id: string;\n file: File;\n previewUrl?: string;\n type: AttachmentType;\n state: AttachmentState;\n progress?: number;\n error?: string;\n };\n /** Called when remove is clicked */\n onRemove: () => void;\n /** Called when retry is clicked */\n onRetry?: () => void;\n className?: string;\n}\n\n/**\n * Preview item for a pending attachment.\n */\nfunction AttachmentPreviewItem({\n attachment,\n onRemove,\n onRetry,\n className,\n}: AttachmentPreviewItemProps) {\n const { file, previewUrl, type, state, progress } = attachment;\n const isImage = type === 'image';\n const isVideo = type === 'video';\n const isUploading = state === 'uploading';\n const isFailed = state === 'failed';\n\n return (\n <div\n className={cn(\n 'group relative overflow-hidden rounded-lg',\n 'bg-neutral-100 dark:bg-neutral-800',\n 'border border-neutral-200 dark:border-neutral-700',\n isFailed && 'border-red-500',\n className\n )}\n >\n {/* Image/Video preview */}\n {(isImage || isVideo) && previewUrl ? (\n <div className=\"relative h-20 w-20\">\n <img\n src={previewUrl}\n alt={file.name}\n className={cn(\n 'h-full w-full object-cover',\n (isUploading || isFailed) && 'opacity-50'\n )}\n />\n {isVideo && (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <svg\n aria-hidden=\"true\"\n className=\"h-6 w-6 text-white drop-shadow\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </div>\n )}\n </div>\n ) : (\n /* File preview */\n <div className=\"flex h-20 w-20 flex-col items-center justify-center p-2\">\n <svg\n aria-hidden=\"true\"\n className=\"h-8 w-8 text-neutral-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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\"\n />\n </svg>\n <span className=\"mt-1 max-w-full truncate px-1 text-xs text-neutral-500\">\n {file.name.split('.').pop()?.toUpperCase()}\n </span>\n </div>\n )}\n\n {/* Upload progress overlay */}\n {isUploading && progress !== undefined && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/50\">\n <div className=\"text-center text-white\">\n <svg\n aria-hidden=\"true\"\n className=\"mx-auto h-6 w-6 animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n <span className=\"mt-1 text-xs\">{progress}%</span>\n </div>\n </div>\n )}\n\n {/* Error overlay */}\n {isFailed && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/50\">\n <div className=\"text-center\">\n <svg\n aria-hidden=\"true\"\n className=\"mx-auto h-6 w-6 text-red-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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\"\n />\n </svg>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-1 text-xs text-white underline hover:no-underline\"\n >\n Retry\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={onRemove}\n className={cn(\n 'absolute -top-1 -right-1 z-10',\n 'rounded-full p-1',\n 'bg-neutral-900 text-white',\n 'opacity-0 group-hover:opacity-100',\n 'focus:ring-primary-500 focus:opacity-100 focus:ring-2 focus:outline-none',\n 'transition-opacity'\n )}\n aria-label={`Remove ${file.name}`}\n >\n <svg\n aria-hidden=\"true\"\n className=\"h-3 w-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n\n {/* File name tooltip on hover */}\n <div\n className={cn(\n 'absolute right-0 bottom-0 left-0',\n 'bg-black/70 px-1 py-0.5',\n 'opacity-0 group-hover:opacity-100',\n 'transition-opacity'\n )}\n >\n <p className=\"truncate text-xs text-white\">{file.name}</p>\n </div>\n </div>\n );\n}\n\nAttachmentPreviewItem.displayName = 'AttachmentPreviewItem';\n\n// ============================================================================\n// Attachment Picker Component\n// ============================================================================\n\nexport interface AttachmentPickerProps {\n /** Called when files are selected */\n onFilesSelected: (files: File[]) => void;\n /** Accepted file types (MIME types or extensions) */\n acceptedTypes?: string[];\n /** Maximum file size in bytes */\n maxFileSize?: number;\n /** Maximum number of files */\n maxFiles?: number;\n /** Whether multiple files can be selected */\n multiple?: boolean;\n /** Whether the picker is disabled */\n disabled?: boolean;\n /** Called when an error occurs */\n onError?: (error: string) => void;\n className?: string;\n children?: React.ReactNode;\n}\n\n/**\n * A button/trigger component for selecting attachments.\n */\nconst AttachmentPicker = React.forwardRef<\n HTMLInputElement,\n AttachmentPickerProps\n>(\n (\n {\n onFilesSelected,\n acceptedTypes = ['image/*', 'video/*', '.pdf', '.doc', '.docx'],\n maxFileSize = 25 * 1024 * 1024, // 25MB\n maxFiles = 10,\n multiple = true,\n disabled = false,\n onError,\n className,\n children,\n },\n ref\n ) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n const handleClick = () => {\n inputRef.current?.click();\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n if (files.length === 0) return;\n\n // Validate files\n const validFiles: File[] = [];\n for (const file of files.slice(0, maxFiles)) {\n const validation = validateFile(file, acceptedTypes, maxFileSize);\n if (validation.valid) {\n validFiles.push(file);\n } else if (onError) {\n onError(`${file.name}: ${validation.error}`);\n }\n }\n\n if (files.length > maxFiles && onError) {\n onError(`Maximum ${maxFiles} files allowed`);\n }\n\n if (validFiles.length > 0) {\n onFilesSelected(validFiles);\n }\n\n // Reset input\n event.target.value = '';\n };\n\n return (\n <>\n <input\n ref={inputRef}\n type=\"file\"\n accept={acceptedTypes.join(',')}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"sr-only\"\n aria-label=\"Select files to attach\"\n />\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n data-slot=\"attachment-picker-button\"\n className={cn(\n 'inline-flex items-center justify-center',\n 'rounded-full p-2',\n 'text-neutral-500 hover:text-neutral-700',\n 'dark:text-neutral-400 dark:hover:text-neutral-200',\n 'hover:bg-neutral-100 dark:hover:bg-neutral-800',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n className\n )}\n aria-label=\"Attach files\"\n >\n {children || (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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\"\n />\n </svg>\n )}\n </button>\n </>\n );\n }\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n\n// ============================================================================\n// Drag Drop Zone Component\n// ============================================================================\n\nexport interface DragDropZoneProps {\n /** Called when files are dropped */\n onFilesDropped: (files: File[]) => void;\n /** Accepted file types */\n acceptedTypes?: string[];\n /** Maximum file size */\n maxFileSize?: number;\n /** Maximum number of files */\n maxFiles?: number;\n /** Whether the zone is disabled */\n disabled?: boolean;\n /** Called when an error occurs */\n onError?: (error: string) => void;\n /** Children to render inside the zone */\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * A wrapper component that accepts drag-and-drop files.\n */\nfunction DragDropZone({\n onFilesDropped,\n acceptedTypes,\n maxFileSize,\n maxFiles = 10,\n disabled = false,\n onError,\n children,\n className,\n}: DragDropZoneProps) {\n const [isDragging, setIsDragging] = React.useState(false);\n const dragCounterRef = React.useRef(0);\n\n const handleDragEnter = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (disabled) return;\n\n dragCounterRef.current++;\n if (event.dataTransfer.items && event.dataTransfer.items.length > 0) {\n setIsDragging(true);\n }\n };\n\n const handleDragLeave = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (disabled) return;\n\n dragCounterRef.current--;\n if (dragCounterRef.current === 0) {\n setIsDragging(false);\n }\n };\n\n const handleDragOver = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleDrop = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (disabled) return;\n\n setIsDragging(false);\n dragCounterRef.current = 0;\n\n const files = Array.from(event.dataTransfer.files);\n if (files.length === 0) return;\n\n // Validate files\n const validFiles: File[] = [];\n for (const file of files.slice(0, maxFiles)) {\n const validation = validateFile(file, acceptedTypes, maxFileSize);\n if (validation.valid) {\n validFiles.push(file);\n } else if (onError) {\n onError(`${file.name}: ${validation.error}`);\n }\n }\n\n if (files.length > maxFiles && onError) {\n onError(`Maximum ${maxFiles} files allowed`);\n }\n\n if (validFiles.length > 0) {\n onFilesDropped(validFiles);\n }\n };\n\n return (\n <div\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n className={cn('relative', className)}\n >\n {children}\n\n {/* Drag overlay */}\n {isDragging && (\n <div\n className={cn(\n 'absolute inset-0 z-50',\n 'flex items-center justify-center',\n 'bg-primary-50/90 dark:bg-primary-900/90',\n 'border-primary-500 border-2 border-dashed',\n 'rounded-lg'\n )}\n >\n <div className=\"text-center\">\n <svg\n aria-hidden=\"true\"\n className=\"text-primary-800 mx-auto h-12 w-12\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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\"\n />\n </svg>\n <p className=\"text-primary-700 dark:text-primary-300 mt-2 text-sm font-medium\">\n Drop files here\n </p>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nDragDropZone.displayName = 'DragDropZone';\n\n// ============================================================================\n// Camera Button Component (Mobile)\n// ============================================================================\n\nexport interface CameraButtonProps {\n /** Called when a photo is captured */\n onCapture: (file: File) => void;\n /** Whether to use front camera */\n useFrontCamera?: boolean;\n /** Whether the button is disabled */\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Button to capture photos from camera (mobile).\n */\nfunction CameraButton({\n onCapture,\n useFrontCamera = false,\n disabled = false,\n className,\n}: CameraButtonProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const handleClick = () => {\n inputRef.current?.click();\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (file) {\n onCapture(file);\n }\n event.target.value = '';\n };\n\n return (\n <>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"image/*\"\n capture={useFrontCamera ? 'user' : 'environment'}\n onChange={handleChange}\n disabled={disabled}\n className=\"sr-only\"\n aria-label=\"Take a photo\"\n />\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n className={cn(\n 'inline-flex items-center justify-center',\n 'rounded-full p-2',\n 'text-neutral-500 hover:text-neutral-700',\n 'dark:text-neutral-400 dark:hover:text-neutral-200',\n 'hover:bg-neutral-100 dark:hover:bg-neutral-800',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n className\n )}\n aria-label=\"Take a photo\"\n >\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 13a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n </button>\n </>\n );\n}\n\nCameraButton.displayName = 'CameraButton';\n\nexport {\n AttachmentPicker,\n AttachmentPreviewItem,\n DragDropZone,\n CameraButton,\n getFileType,\n formatFileSize,\n validateFile,\n generateAttachmentId,\n};\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport type { AttachmentType, NewMessage } from './types';\nimport {\n AttachmentPicker,\n AttachmentPreviewItem,\n CameraButton,\n DragDropZone,\n getFileType,\n generateAttachmentId,\n} from './AttachmentPicker';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface PendingAttachment {\n id: string;\n file: File;\n previewUrl?: string;\n type: AttachmentType;\n state: 'pending' | 'uploading' | 'uploaded' | 'failed';\n progress?: number;\n error?: string;\n}\n\n/**\n * A candidate for the composer's `@mention` autocomplete. Generic so any\n * surface (multi-party chat, agent picker, …) can supply its own list.\n */\nexport interface MentionOption {\n /** Stable id (returned to the host so it can map a selection back). */\n id: string;\n /** Display name shown in the suggestion list. */\n label: string;\n /** Text inserted after `@` on selection. Defaults to the first word of `label`. */\n value?: string;\n /** Optional secondary text shown after the label. */\n description?: string;\n /** Optional leading node (e.g. an avatar). */\n icon?: React.ReactNode;\n /** Optional trailing meta text (e.g. a kind tag). */\n meta?: string;\n}\n\n/**\n * Find the active `@query` immediately before the caret, if any. The `@` must\n * start the string or follow whitespace, and the token must contain no spaces\n * or further `@`.\n */\nfunction activeMentionQuery(\n value: string,\n caret: number\n): { query: string; start: number } | null {\n const upToCaret = value.slice(0, caret);\n const match = /(^|\\s)@([^\\s@]*)$/.exec(upToCaret);\n if (!match) return null;\n const query = match[2];\n return { query, start: caret - query.length - 1 };\n}\n\n/**\n * Whether a file satisfies one of the accepted `<input accept>` tokens.\n * Supports `type/*` wildcards, exact `type/subtype` tokens, and `.ext`\n * extension tokens (matched against the file name, mirroring the native\n * `<input accept>` behavior used by the picker and drag-and-drop).\n */\nfunction isFileAccepted(file: File, accepted: string[]): boolean {\n if (!accepted || accepted.length === 0) return true;\n const mime = file.type;\n const name = file.name.toLowerCase();\n return accepted.some((token) => {\n if (token.startsWith('.')) return name.endsWith(token.toLowerCase());\n if (token.endsWith('/*')) return mime.startsWith(token.slice(0, -1));\n if (token.includes('/')) return mime === token;\n return false;\n });\n}\n\n// ============================================================================\n// Character Counter Component\n// ============================================================================\n\nexport interface CharacterCounterProps {\n current: number;\n max: number;\n showWarningAt?: number;\n className?: string;\n}\n\n/**\n * Displays character count with warning colors.\n */\nfunction CharacterCounter({\n current,\n max,\n showWarningAt = 0.9,\n className,\n}: CharacterCounterProps) {\n const percentage = current / max;\n const isWarning = percentage >= showWarningAt && percentage < 1;\n const isOver = current > max;\n\n return (\n <span\n className={cn(\n 'text-xs tabular-nums',\n isOver\n ? 'font-medium text-red-700 dark:text-red-400'\n : isWarning\n ? 'text-amber-700 dark:text-amber-400'\n : 'text-neutral-600 dark:text-neutral-400',\n className\n )}\n aria-live=\"polite\"\n aria-label={`${current} of ${max} characters`}\n >\n {current}/{max}\n </span>\n );\n}\n\nCharacterCounter.displayName = 'CharacterCounter';\n\n// ============================================================================\n// Send Button Component\n// ============================================================================\n\nconst sendButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-full p-3 self-start',\n 'transition-all duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'bg-primary-800 text-white',\n 'hover:bg-primary-900',\n 'active:scale-95',\n ],\n subtle: [\n 'bg-transparent text-primary-800',\n 'hover:bg-primary-50 dark:hover:bg-primary-900/20',\n ],\n },\n canSend: {\n true: '',\n false: 'opacity-50 cursor-not-allowed',\n },\n },\n defaultVariants: {\n variant: 'primary',\n canSend: false,\n },\n }\n);\n\nexport interface SendButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof sendButtonVariants> {\n isLoading?: boolean;\n}\n\n/**\n * Send button with loading state.\n */\nconst SendButton = React.forwardRef<HTMLButtonElement, SendButtonProps>(\n ({ className, variant, canSend, isLoading, disabled, ...props }, ref) => {\n return (\n <button\n ref={ref}\n type=\"submit\"\n disabled={disabled || !canSend || isLoading}\n data-slot=\"composer-send-button\"\n className={cn(sendButtonVariants({ variant, canSend }), className)}\n aria-label={isLoading ? 'Sending message' : 'Send message'}\n {...props}\n >\n {isLoading ? (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5 animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n />\n </svg>\n ) : (\n <svg\n aria-hidden=\"true\"\n className=\"h-5 w-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\"\n />\n </svg>\n )}\n </button>\n );\n }\n);\n\nSendButton.displayName = 'SendButton';\n\n// ============================================================================\n// Message Composer Component\n// ============================================================================\n\nexport interface MessageComposerProps {\n /** Called when a message is sent */\n onSend: (message: NewMessage) => void | Promise<void>;\n /** Called when the user starts typing */\n onTypingStart?: () => void;\n /** Called when the user stops typing */\n onTypingStop?: () => void;\n /** Controlled value for the textarea */\n value?: string;\n /** Callback when value changes (for controlled mode) */\n onValueChange?: (value: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Maximum message length */\n maxLength?: number;\n /** Show character count */\n showCharacterCount?: boolean;\n /** Whether the composer is disabled */\n disabled?: boolean;\n /** Whether a message is currently being sent */\n isSending?: boolean;\n /** Show attachment picker */\n showAttachmentPicker?: boolean;\n /** Show camera button (mobile) */\n showCameraButton?: boolean;\n /** Accepted file types */\n acceptedFileTypes?: string[];\n /** Maximum file size */\n maxFileSize?: number;\n /** Maximum number of attachments */\n maxAttachments?: number;\n /** Called when an error occurs */\n onError?: (error: string) => void;\n /** Auto-focus the input */\n autoFocus?: boolean;\n /** Reply-to message reference */\n replyTo?: {\n id: string;\n content: string;\n senderName: string;\n } | null;\n /** Called when reply is cancelled */\n onCancelReply?: () => void;\n /** Visual variant - 'default' shows border-t, 'minimal' has no border */\n variant?: 'default' | 'minimal';\n /** Content to render inside the input wrapper (e.g. a mic button) */\n inputTrailing?: React.ReactNode;\n /**\n * Candidates for `@mention` autocomplete. When provided (non-empty), typing\n * `@` opens a picker. Omit to disable mentions entirely (default).\n */\n mentionOptions?: MentionOption[];\n /** Additional class name */\n className?: string;\n}\n\n/**\n * A message input component with attachment support and send button.\n *\n * @example\n * ```tsx\n * <MessageComposer\n * onSend={handleSend}\n * placeholder=\"Type a message...\"\n * showAttachmentPicker\n * maxLength={1600}\n * />\n * ```\n */\nconst MessageComposer = React.forwardRef<\n HTMLTextAreaElement,\n MessageComposerProps\n>(\n (\n {\n onSend,\n onTypingStart,\n onTypingStop,\n value: controlledValue,\n onValueChange,\n placeholder = 'Type a message...',\n maxLength = 1600,\n showCharacterCount = false,\n disabled = false,\n isSending = false,\n showAttachmentPicker = true,\n showCameraButton = false,\n acceptedFileTypes = ['image/*', 'video/*', '.pdf', '.doc', '.docx'],\n maxFileSize = 25 * 1024 * 1024,\n maxAttachments = 10,\n onError,\n autoFocus = false,\n replyTo = null,\n onCancelReply,\n variant = 'default',\n inputTrailing,\n mentionOptions,\n className,\n },\n ref\n ) => {\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const [internalContent, setInternalContent] = React.useState('');\n const isControlled = controlledValue !== undefined;\n const content = isControlled ? controlledValue : internalContent;\n const setContent = React.useCallback(\n (val: string | ((prev: string) => string)) => {\n if (isControlled) {\n const newVal = typeof val === 'function' ? val(controlledValue) : val;\n onValueChange?.(newVal);\n } else {\n setInternalContent(val);\n }\n },\n [isControlled, controlledValue, onValueChange]\n );\n const [attachments, setAttachments] = React.useState<PendingAttachment[]>(\n []\n );\n const [isTyping, setIsTyping] = React.useState(false);\n const typingTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n\n // Combine refs\n React.useImperativeHandle(ref, () => textareaRef.current!);\n\n // Auto-resize textarea\n React.useEffect(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, 150)}px`;\n }\n }, [content]);\n\n // Handle typing indicators\n React.useEffect(() => {\n if (content.length > 0 && !isTyping) {\n setIsTyping(true);\n onTypingStart?.();\n }\n\n // Clear previous timeout\n if (typingTimeoutRef.current) {\n clearTimeout(typingTimeoutRef.current);\n }\n\n // Set timeout to stop typing indicator\n typingTimeoutRef.current = setTimeout(() => {\n if (isTyping) {\n setIsTyping(false);\n onTypingStop?.();\n }\n }, 2000);\n\n return () => {\n if (typingTimeoutRef.current) {\n clearTimeout(typingTimeoutRef.current);\n }\n };\n }, [content, isTyping, onTypingStart, onTypingStop]);\n\n // Focus on mount if autoFocus\n React.useEffect(() => {\n if (autoFocus) {\n textareaRef.current?.focus();\n }\n }, [autoFocus]);\n\n // Focus when reply is set\n React.useEffect(() => {\n if (replyTo) {\n textareaRef.current?.focus();\n }\n }, [replyTo]);\n\n // --- @mention autocomplete (opt-in via `mentionOptions`) ---\n const mentionsEnabled = !!mentionOptions && mentionOptions.length > 0;\n const [mention, setMention] = React.useState<{\n query: string;\n start: number;\n } | null>(null);\n const [mentionHighlight, setMentionHighlight] = React.useState(0);\n const mentionListId = React.useId();\n const mentionOptionId = (i: number) => `${mentionListId}-option-${i}`;\n\n const mentionSuggestions = React.useMemo(() => {\n if (!mention || !mentionOptions) return [];\n const q = mention.query.toLowerCase();\n return mentionOptions.filter((o) => o.label.toLowerCase().includes(q));\n }, [mention, mentionOptions]);\n\n const mentionMenuOpen =\n mentionsEnabled && mention !== null && mentionSuggestions.length > 0;\n\n // Portal + fixed positioning so the mention menu escapes overflow-hidden\n // ancestors.\n const {\n anchorRef: mentionAnchorRef,\n floatingRef: mentionFloatingRef,\n style: mentionStyle,\n } = useAnchoredPosition<HTMLDivElement, HTMLUListElement>({\n open: mentionMenuOpen,\n placement: 'top-start',\n maxHeight: 224,\n });\n // Clamp the highlight to the current suggestion range so the active option\n // never points at a stale/out-of-range index (the list can shrink while the\n // menu is open as the query narrows). The same clamped index drives\n // `aria-activedescendant`, `aria-selected`, and the visual highlight so they\n // can never disagree.\n const clampedMentionHighlight = mentionMenuOpen\n ? Math.min(mentionHighlight, mentionSuggestions.length - 1)\n : -1;\n const activeMentionOptionId = mentionMenuOpen\n ? mentionOptionId(clampedMentionHighlight)\n : undefined;\n\n const syncMention = React.useCallback(\n (value: string, caret: number) => {\n if (!mentionsEnabled) return;\n setMention(activeMentionQuery(value, caret));\n setMentionHighlight(0);\n },\n [mentionsEnabled]\n );\n\n const insertMention = (option: MentionOption) => {\n if (!mention) return;\n const insertValue = option.value ?? option.label.split(' ')[0];\n const before = content.slice(0, mention.start);\n const after = content.slice(mention.start + 1 + mention.query.length);\n const insert = `@${insertValue} `;\n setContent(before + insert + after);\n setMention(null);\n // Restore caret just after the inserted mention.\n const caret = before.length + insert.length;\n requestAnimationFrame(() => {\n const el = textareaRef.current;\n if (el) {\n el.focus();\n el.setSelectionRange(caret, caret);\n }\n });\n };\n\n const canSend =\n (content.trim().length > 0 || attachments.length > 0) &&\n content.length <= maxLength &&\n !disabled &&\n !isSending;\n\n const handleSubmit = async (event: React.FormEvent) => {\n event.preventDefault();\n if (!canSend) return;\n\n const message: NewMessage = {\n content: content.trim(),\n attachments: attachments.map((a) => a.file),\n replyToId: replyTo?.id,\n };\n\n // Clear state before sending for optimistic UI\n setContent('');\n setAttachments([]);\n setIsTyping(false);\n onTypingStop?.();\n\n try {\n await onSend(message);\n } catch {\n // Restore content on failure\n setContent(message.content);\n // Note: attachments would need to be re-added manually\n onError?.('Failed to send message');\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // @mention menu navigation takes priority over send.\n if (mentionMenuOpen) {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setMentionHighlight((h) => (h + 1) % mentionSuggestions.length);\n return;\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n setMentionHighlight(\n (h) =>\n (h - 1 + mentionSuggestions.length) % mentionSuggestions.length\n );\n return;\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n // `mentionHighlight` can fall out of range if the list shrank while\n // the menu was open; fall back to the first suggestion.\n const chosen =\n mentionSuggestions[mentionHighlight] ?? mentionSuggestions[0];\n if (chosen) insertMention(chosen);\n return;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n setMention(null);\n return;\n }\n }\n // Send on Enter (without Shift)\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n if (canSend) {\n handleSubmit(event);\n }\n }\n };\n\n const handleFilesSelected = (files: File[]) => {\n const remainingSlots = maxAttachments - attachments.length;\n const filesToAdd = files.slice(0, remainingSlots);\n\n if (files.length > remainingSlots) {\n onError?.(`Maximum ${maxAttachments} attachments allowed`);\n }\n\n const newAttachments: PendingAttachment[] = filesToAdd.map((file) => {\n const type = getFileType(file.type);\n let previewUrl: string | undefined;\n\n if (type === 'image' || type === 'video') {\n previewUrl = URL.createObjectURL(file);\n }\n\n return {\n id: generateAttachmentId(),\n file,\n previewUrl,\n type,\n state: 'pending' as const,\n };\n });\n\n setAttachments((prev) => [...prev, ...newAttachments]);\n };\n\n // Paste-to-attach: route pasted files through the same path as the picker.\n const handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (!showAttachmentPicker || disabled) return;\n const pasted = Array.from(event.clipboardData.items)\n .filter((item) => item.kind === 'file')\n .map((item) => item.getAsFile())\n .filter((f): f is File => f !== null)\n .filter((f) => isFileAccepted(f, acceptedFileTypes));\n if (pasted.length === 0) return;\n // We're attaching the file ourselves; don't also paste a blob/path.\n event.preventDefault();\n handleFilesSelected(pasted);\n };\n\n const handleRemoveAttachment = (attachmentId: string) => {\n setAttachments((prev) => {\n const attachment = prev.find((a) => a.id === attachmentId);\n if (attachment?.previewUrl) {\n URL.revokeObjectURL(attachment.previewUrl);\n }\n return prev.filter((a) => a.id !== attachmentId);\n });\n };\n\n // Cleanup preview URLs on unmount\n React.useEffect(() => {\n // Capture current attachments for cleanup\n const currentAttachments = attachments;\n return () => {\n currentAttachments.forEach((a) => {\n if (a.previewUrl) {\n URL.revokeObjectURL(a.previewUrl);\n }\n });\n };\n }, [attachments]);\n\n return (\n <DragDropZone\n onFilesDropped={handleFilesSelected}\n acceptedTypes={acceptedFileTypes}\n maxFileSize={maxFileSize}\n maxFiles={maxAttachments - attachments.length}\n disabled={disabled || attachments.length >= maxAttachments}\n onError={onError}\n className={cn('w-full', className)}\n >\n <form\n onSubmit={handleSubmit}\n data-slot=\"message-composer\"\n className=\"w-full\"\n >\n {/* Reply preview */}\n {replyTo && (\n <div\n data-slot=\"composer-reply-preview\"\n className={cn(\n 'flex items-center gap-2 px-4 py-2',\n 'bg-neutral-50 dark:bg-neutral-800/50',\n 'border-primary-500 border-l-4'\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <span className=\"text-primary-800 dark:text-primary-400 text-xs font-medium\">\n Replying to {replyTo.senderName}\n </span>\n <p className=\"truncate text-sm text-neutral-600 dark:text-neutral-300\">\n {replyTo.content}\n </p>\n </div>\n <button\n type=\"button\"\n onClick={onCancelReply}\n className={cn(\n 'shrink-0 rounded p-1',\n 'text-neutral-500 hover:text-neutral-700',\n 'dark:text-neutral-400 dark:hover:text-neutral-200',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Cancel reply\"\n >\n <svg\n aria-hidden=\"true\"\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n )}\n\n {/* Attachment previews */}\n {attachments.length > 0 && (\n <div\n data-slot=\"composer-attachments\"\n className={cn(\n 'flex flex-wrap gap-2 p-3',\n 'border-t border-neutral-200 dark:border-neutral-700'\n )}\n >\n {attachments.map((attachment) => (\n <AttachmentPreviewItem\n key={attachment.id}\n attachment={attachment}\n onRemove={() => handleRemoveAttachment(attachment.id)}\n />\n ))}\n </div>\n )}\n\n {/* Input area */}\n <div\n data-slot=\"composer-input-area\"\n className={cn(\n 'flex items-center gap-2 p-3',\n 'bg-white dark:bg-neutral-900',\n variant === 'default' &&\n 'border-t border-neutral-200 dark:border-neutral-700'\n )}\n >\n {/* Attachment buttons */}\n {showAttachmentPicker && (\n <AttachmentPicker\n onFilesSelected={handleFilesSelected}\n acceptedTypes={acceptedFileTypes}\n maxFileSize={maxFileSize}\n maxFiles={maxAttachments - attachments.length}\n disabled={disabled || attachments.length >= maxAttachments}\n onError={onError}\n />\n )}\n\n {showCameraButton && (\n <CameraButton\n onCapture={(file) => handleFilesSelected([file])}\n disabled={disabled || attachments.length >= maxAttachments}\n />\n )}\n\n {/* Text input */}\n <div\n data-slot=\"composer-input-wrapper\"\n className=\"relative flex-1\"\n ref={mentionAnchorRef}\n >\n {mentionMenuOpen &&\n createPortal(\n <ul\n ref={mentionFloatingRef}\n style={mentionStyle}\n id={mentionListId}\n role=\"listbox\"\n aria-label=\"Mention\"\n data-slot=\"composer-mention-list\"\n 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\"\n >\n {mentionSuggestions.map((option, i) => (\n <li key={option.id}>\n <button\n type=\"button\"\n id={mentionOptionId(i)}\n role=\"option\"\n aria-selected={i === clampedMentionHighlight}\n // onMouseDown (not onClick) so the textarea keeps focus.\n onMouseDown={(e) => {\n e.preventDefault();\n insertMention(option);\n }}\n onMouseEnter={() => setMentionHighlight(i)}\n className={cn(\n 'flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm',\n i === clampedMentionHighlight\n ? 'bg-primary-100 text-primary-900 dark:bg-primary-900/40 dark:text-primary-100'\n : 'text-neutral-700 dark:text-neutral-200'\n )}\n >\n {option.icon}\n <span className=\"min-w-0 flex-1 truncate\">\n <span className=\"font-medium\">{option.label}</span>\n {option.description && (\n <span className=\"ml-1 text-xs text-neutral-400\">\n {option.description}\n </span>\n )}\n </span>\n {option.meta && (\n <span className=\"text-[10px] text-neutral-400\">\n {option.meta}\n </span>\n )}\n </button>\n </li>\n ))}\n </ul>,\n document.body\n )}\n <textarea\n ref={textareaRef}\n data-slot=\"composer-input\"\n value={content}\n onChange={(e) => {\n setContent(e.target.value);\n syncMention(\n e.target.value,\n e.target.selectionStart ?? e.target.value.length\n );\n }}\n onClick={(e) => {\n const el = e.currentTarget;\n syncMention(el.value, el.selectionStart ?? el.value.length);\n }}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n disabled={disabled || isSending}\n rows={1}\n className={cn(\n 'w-full resize-none rounded-2xl py-2.5',\n inputTrailing ? 'pr-10 pl-4' : 'px-4',\n 'bg-neutral-100 dark:bg-neutral-800',\n 'text-neutral-900 dark:text-neutral-100',\n 'placeholder:text-neutral-400 dark:placeholder:text-neutral-500',\n 'focus:ring-primary-500 focus:ring-2 focus:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'transition-colors',\n 'max-h-[150px]'\n )}\n aria-label=\"Message\"\n aria-describedby={showCharacterCount ? 'char-count' : undefined}\n {...(mentionsEnabled\n ? {\n 'aria-controls': mentionMenuOpen\n ? mentionListId\n : undefined,\n 'aria-activedescendant': activeMentionOptionId,\n 'aria-autocomplete': 'list' as const,\n }\n : {})}\n />\n\n {/* Trailing content (e.g. record button) */}\n {inputTrailing && (\n <div\n data-slot=\"composer-input-trailing\"\n className=\"pointer-events-none absolute top-0 right-1 flex h-[44px] items-center [&>*]:pointer-events-auto\"\n >\n {inputTrailing}\n </div>\n )}\n\n {/* Character count */}\n {showCharacterCount && (\n <div\n data-slot=\"composer-char-count\"\n id=\"char-count\"\n className=\"absolute right-3 bottom-1.5\"\n >\n <CharacterCounter current={content.length} max={maxLength} />\n </div>\n )}\n </div>\n\n {/* Send button */}\n <SendButton\n canSend={canSend}\n isLoading={isSending}\n disabled={disabled}\n />\n </div>\n </form>\n </DragDropZone>\n );\n }\n);\n\nMessageComposer.displayName = 'MessageComposer';\n\nexport { MessageComposer, CharacterCounter, SendButton, sendButtonVariants };\n"]}
@@ -0,0 +1,220 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var classVarianceAuthority = require('class-variance-authority');
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/components/TranscriptView/TranscriptView.tsx
28
+ var transcriptViewVariants = classVarianceAuthority.cva("flex flex-col text-foreground", {
29
+ variants: {
30
+ variant: {
31
+ plain: "",
32
+ card: "rounded-xl border border-border bg-card text-card-foreground p-3"
33
+ }
34
+ },
35
+ defaultVariants: {
36
+ variant: "plain"
37
+ }
38
+ });
39
+ function formatTimestampMs(ms) {
40
+ const totalSeconds = Math.floor(ms / 1e3);
41
+ const minutes = Math.floor(totalSeconds / 60);
42
+ const seconds = totalSeconds % 60;
43
+ return `${minutes}:${String(seconds).padStart(2, "0")}`;
44
+ }
45
+ function resolveSpeakerLabel(speakerId, speakerLabels, transcript) {
46
+ if (!speakerId) return void 0;
47
+ return speakerLabels?.[speakerId] ?? transcript.speakers?.find((s) => s.id === speakerId)?.name ?? speakerId;
48
+ }
49
+ function buildSegmentRows(segments, merge) {
50
+ const rows = [];
51
+ for (const segment of segments) {
52
+ const text = segment.text.trim();
53
+ if (!text) continue;
54
+ const prev = rows[rows.length - 1];
55
+ if (merge && prev && prev.speakerId === segment.speakerId) {
56
+ prev.text += " " + text;
57
+ prev.endMs = segment.endMs;
58
+ } else {
59
+ rows.push({
60
+ text,
61
+ startMs: segment.startMs,
62
+ endMs: segment.endMs,
63
+ speakerId: segment.speakerId
64
+ });
65
+ }
66
+ }
67
+ return rows;
68
+ }
69
+ function findActiveIndex(items, timeMs) {
70
+ if (timeMs === void 0) return -1;
71
+ return items.findIndex(
72
+ (item) => timeMs >= item.startMs && timeMs < item.endMs
73
+ );
74
+ }
75
+ function activationProps(onActivate) {
76
+ return {
77
+ onClick: onActivate,
78
+ onKeyDown: (e) => {
79
+ if (e.key === "Enter" || e.key === " ") {
80
+ e.preventDefault();
81
+ onActivate();
82
+ }
83
+ }
84
+ };
85
+ }
86
+ var TranscriptView = React__namespace.forwardRef(
87
+ ({
88
+ transcript,
89
+ granularity,
90
+ currentTimeMs,
91
+ onSeek,
92
+ followPlayback = true,
93
+ speakerLabels,
94
+ mergeSameSpeaker = false,
95
+ showTimestamps = true,
96
+ actions,
97
+ variant,
98
+ className,
99
+ "aria-label": ariaLabel = "Transcript"
100
+ }, ref) => {
101
+ const contentRef = React__namespace.useRef(null);
102
+ const isHoveringRef = React__namespace.useRef(false);
103
+ const resolvedGranularity = granularity ?? (transcript.segments && transcript.segments.length > 0 ? "segment" : "word");
104
+ const segmentRows = React__namespace.useMemo(
105
+ () => resolvedGranularity === "segment" ? buildSegmentRows(transcript.segments ?? [], mergeSameSpeaker) : [],
106
+ [resolvedGranularity, transcript.segments, mergeSameSpeaker]
107
+ );
108
+ const activeIndex = resolvedGranularity === "segment" ? findActiveIndex(segmentRows, currentTimeMs) : findActiveIndex(transcript.words, currentTimeMs);
109
+ React__namespace.useEffect(() => {
110
+ if (!followPlayback || activeIndex < 0 || isHoveringRef.current) return;
111
+ const el = contentRef.current?.querySelector(
112
+ `[data-transcript-index="${activeIndex}"]`
113
+ );
114
+ el?.scrollIntoView({ block: "nearest", behavior: "smooth" });
115
+ }, [followPlayback, activeIndex]);
116
+ const seekTo = (timeMs) => onSeek?.(timeMs);
117
+ const renderWord = (word, index) => {
118
+ const isActive = index === activeIndex;
119
+ const wordType = word.wordType ?? "word";
120
+ const durationSec = ((word.endMs - word.startMs) / 1e3).toFixed(1);
121
+ if (wordType === "silence-newline") {
122
+ return /* @__PURE__ */ jsxRuntime.jsx(
123
+ "span",
124
+ {
125
+ "data-transcript-index": index,
126
+ role: "button",
127
+ tabIndex: 0,
128
+ "aria-current": isActive ? "true" : void 0,
129
+ "aria-label": `Silence, ${durationSec} seconds`,
130
+ className: `hover:bg-muted focus-visible:ring-ring block h-3 cursor-pointer rounded transition-colors focus-visible:ring-2 focus-visible:outline-none ${isActive ? "bg-primary-500/20" : ""}`,
131
+ ...activationProps(() => seekTo(word.startMs))
132
+ },
133
+ index
134
+ );
135
+ }
136
+ if (wordType === "silence") {
137
+ return /* @__PURE__ */ jsxRuntime.jsx(
138
+ "span",
139
+ {
140
+ "data-transcript-index": index,
141
+ role: "button",
142
+ tabIndex: 0,
143
+ "aria-current": isActive ? "true" : void 0,
144
+ "aria-label": `Silence, ${durationSec} seconds`,
145
+ className: `text-muted-foreground/60 hover:bg-muted focus-visible:ring-ring cursor-pointer rounded px-0.5 transition-colors focus-visible:ring-2 focus-visible:outline-none ${isActive ? "bg-primary-500/20" : ""}`,
146
+ ...activationProps(() => seekTo(word.startMs)),
147
+ children: "\xB7 "
148
+ },
149
+ index
150
+ );
151
+ }
152
+ return /* @__PURE__ */ jsxRuntime.jsxs(
153
+ "span",
154
+ {
155
+ "data-transcript-index": index,
156
+ role: "button",
157
+ tabIndex: 0,
158
+ "aria-current": isActive ? "true" : void 0,
159
+ className: `hover:bg-muted focus-visible:ring-ring cursor-pointer rounded px-0.5 transition-colors focus-visible:ring-2 focus-visible:outline-none ${isActive ? "bg-primary-500/20 text-foreground" : ""}`,
160
+ ...activationProps(() => seekTo(word.startMs)),
161
+ children: [
162
+ word.text,
163
+ " "
164
+ ]
165
+ },
166
+ index
167
+ );
168
+ };
169
+ const renderSegmentRow = (row, index) => {
170
+ const isActive = index === activeIndex;
171
+ const speaker = resolveSpeakerLabel(
172
+ row.speakerId,
173
+ speakerLabels,
174
+ transcript
175
+ );
176
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { role: "listitem", children: /* @__PURE__ */ jsxRuntime.jsxs(
177
+ "button",
178
+ {
179
+ type: "button",
180
+ "data-transcript-index": index,
181
+ "aria-current": isActive ? "true" : void 0,
182
+ className: `hover:bg-muted focus-visible:ring-ring flex w-full cursor-pointer gap-3 rounded px-2 py-1 text-left text-sm transition-colors focus-visible:ring-2 focus-visible:outline-none ${isActive ? "bg-primary-500/20" : ""}`,
183
+ ...activationProps(() => seekTo(row.startMs)),
184
+ children: [
185
+ showTimestamps && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground w-12 shrink-0 font-mono", children: formatTimestampMs(row.startMs) }),
186
+ speaker && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-primary-900 w-24 shrink-0 font-semibold", children: [
187
+ speaker,
188
+ ":"
189
+ ] }),
190
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: row.text })
191
+ ]
192
+ }
193
+ ) }, index);
194
+ };
195
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, className: transcriptViewVariants({ variant, className }), children: [
196
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-border mb-2 flex items-center justify-end gap-2 border-b pb-2", children: actions }),
197
+ /* @__PURE__ */ jsxRuntime.jsx(
198
+ "div",
199
+ {
200
+ ref: contentRef,
201
+ "aria-label": ariaLabel,
202
+ onMouseEnter: () => {
203
+ isHoveringRef.current = true;
204
+ },
205
+ onMouseLeave: () => {
206
+ isHoveringRef.current = false;
207
+ },
208
+ ...resolvedGranularity === "segment" ? { role: "list", className: "space-y-2" } : { className: "text-sm leading-relaxed" },
209
+ children: resolvedGranularity === "segment" ? segmentRows.map(renderSegmentRow) : transcript.words.map(renderWord)
210
+ }
211
+ )
212
+ ] });
213
+ }
214
+ );
215
+ TranscriptView.displayName = "TranscriptView";
216
+
217
+ exports.TranscriptView = TranscriptView;
218
+ exports.formatTimestampMs = formatTimestampMs;
219
+ //# sourceMappingURL=chunk-UO3KEUYK.cjs.map
220
+ //# sourceMappingURL=chunk-UO3KEUYK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/TranscriptView/TranscriptView.tsx"],"names":["cva","React","jsx","jsxs"],"mappings":"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","file":"chunk-UO3KEUYK.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type {\n Transcript,\n TranscriptSegment,\n TranscriptWord,\n} from './transcript';\n\n// ============================================================================\n// Types & Interfaces\n// ============================================================================\n\nexport type TranscriptGranularity = 'word' | 'segment';\n\nexport interface TranscriptViewProps extends VariantProps<\n typeof transcriptViewVariants\n> {\n /** The transcript to render */\n transcript: Transcript;\n /**\n * Rendering granularity. Defaults to 'segment' when the transcript has\n * segments, otherwise 'word'.\n */\n granularity?: TranscriptGranularity;\n /** Controlled playback position (ms); the matching word/segment is highlighted */\n currentTimeMs?: number;\n /** Called with the start time (ms) of a clicked word/segment; the host performs the seek/play */\n onSeek?: (timeMs: number) => void;\n /** Auto-scroll the active word/segment into view (default true) */\n followPlayback?: boolean;\n /**\n * Maps Speaker.id to a display label (e.g. Clinician/Patient). Falls back to\n * Speaker.name from transcript.speakers, then the raw id.\n */\n speakerLabels?: Record<string, string>;\n /** Segment mode: merge consecutive same-speaker segments into one row (default false) */\n mergeSameSpeaker?: boolean;\n /** Segment mode: show mm:ss timestamps (default true) */\n showTimestamps?: boolean;\n /** Rendered in a header row (host supplies copy/re-transcribe/remove buttons) */\n actions?: React.ReactNode;\n /** Additional class name */\n className?: string;\n /** Accessible label for the transcript container (default 'Transcript') */\n 'aria-label'?: string;\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst transcriptViewVariants = cva('flex flex-col text-foreground', {\n variants: {\n variant: {\n plain: '',\n card: 'rounded-xl border border-border bg-card text-card-foreground p-3',\n },\n },\n defaultVariants: {\n variant: 'plain',\n },\n});\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/** Format milliseconds as m:ss (osheet timestamp style) */\nexport function formatTimestampMs(ms: number): string {\n const totalSeconds = Math.floor(ms / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${minutes}:${String(seconds).padStart(2, '0')}`;\n}\n\n/** Resolve a speaker id to its display label */\nfunction resolveSpeakerLabel(\n speakerId: string | undefined,\n speakerLabels: Record<string, string> | undefined,\n transcript: Transcript\n): string | undefined {\n if (!speakerId) return undefined;\n return (\n speakerLabels?.[speakerId] ??\n transcript.speakers?.find((s) => s.id === speakerId)?.name ??\n speakerId\n );\n}\n\n/** A display row in segment mode (possibly the merge of several source segments) */\ninterface SegmentRow {\n text: string;\n startMs: number;\n endMs: number;\n speakerId?: string;\n}\n\n/**\n * Build segment display rows, optionally merging consecutive same-speaker\n * segments (osheet formatTranscriptText behavior). Empty segments are skipped.\n */\nfunction buildSegmentRows(\n segments: TranscriptSegment[],\n merge: boolean\n): SegmentRow[] {\n const rows: SegmentRow[] = [];\n for (const segment of segments) {\n const text = segment.text.trim();\n if (!text) continue;\n const prev = rows[rows.length - 1];\n if (merge && prev && prev.speakerId === segment.speakerId) {\n prev.text += ' ' + text;\n prev.endMs = segment.endMs;\n } else {\n rows.push({\n text,\n startMs: segment.startMs,\n endMs: segment.endMs,\n speakerId: segment.speakerId,\n });\n }\n }\n return rows;\n}\n\n/** Index of the item whose [startMs, endMs) range contains timeMs, or -1 */\nfunction findActiveIndex(\n items: ReadonlyArray<{ startMs: number; endMs: number }>,\n timeMs: number | undefined\n): number {\n if (timeMs === undefined) return -1;\n return items.findIndex(\n (item) => timeMs >= item.startMs && timeMs < item.endMs\n );\n}\n\n/** Run onActivate for click and Enter/Space keyboard activation */\nfunction activationProps(onActivate: () => void) {\n return {\n onClick: onActivate,\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onActivate();\n }\n },\n };\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Read-only transcript viewer with word-level and segment-level (diarized)\n * rendering modes.\n *\n * Controlled and persistence-agnostic: the host owns playback and passes the\n * position via `currentTimeMs`; clicking a word/segment reports the target\n * time through `onSeek`. Segment mode matches the osheet artifact-viewer row\n * UX (timestamp | speaker | text, click to seek + play). Editing lives in\n * MediaEditor, not here.\n */\nexport const TranscriptView = React.forwardRef<\n HTMLDivElement,\n TranscriptViewProps\n>(\n (\n {\n transcript,\n granularity,\n currentTimeMs,\n onSeek,\n followPlayback = true,\n speakerLabels,\n mergeSameSpeaker = false,\n showTimestamps = true,\n actions,\n variant,\n className,\n 'aria-label': ariaLabel = 'Transcript',\n },\n ref\n ) => {\n const contentRef = React.useRef<HTMLDivElement>(null);\n const isHoveringRef = React.useRef(false);\n\n const resolvedGranularity: TranscriptGranularity =\n granularity ??\n (transcript.segments && transcript.segments.length > 0\n ? 'segment'\n : 'word');\n\n const segmentRows = React.useMemo(\n () =>\n resolvedGranularity === 'segment'\n ? buildSegmentRows(transcript.segments ?? [], mergeSameSpeaker)\n : [],\n [resolvedGranularity, transcript.segments, mergeSameSpeaker]\n );\n\n const activeIndex =\n resolvedGranularity === 'segment'\n ? findActiveIndex(segmentRows, currentTimeMs)\n : findActiveIndex(transcript.words, currentTimeMs);\n\n // Auto-scroll the active item into view, unless the user is hovering\n React.useEffect(() => {\n if (!followPlayback || activeIndex < 0 || isHoveringRef.current) return;\n const el = contentRef.current?.querySelector(\n `[data-transcript-index=\"${activeIndex}\"]`\n );\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }, [followPlayback, activeIndex]);\n\n const seekTo = (timeMs: number) => onSeek?.(timeMs);\n\n // ------------------------------------------------------------------\n // Word mode rendering\n // ------------------------------------------------------------------\n const renderWord = (word: TranscriptWord, index: number) => {\n const isActive = index === activeIndex;\n const wordType = word.wordType ?? 'word';\n const durationSec = ((word.endMs - word.startMs) / 1000).toFixed(1);\n\n if (wordType === 'silence-newline') {\n // Longer pause: force a line break (block element inside inline flow)\n return (\n <span\n key={index}\n data-transcript-index={index}\n role=\"button\"\n tabIndex={0}\n aria-current={isActive ? 'true' : undefined}\n aria-label={`Silence, ${durationSec} seconds`}\n className={`hover:bg-muted focus-visible:ring-ring block h-3 cursor-pointer rounded transition-colors focus-visible:ring-2 focus-visible:outline-none ${\n isActive ? 'bg-primary-500/20' : ''\n }`}\n {...activationProps(() => seekTo(word.startMs))}\n />\n );\n }\n\n if (wordType === 'silence') {\n // Short gap: subtle interpunct\n return (\n <span\n key={index}\n data-transcript-index={index}\n role=\"button\"\n tabIndex={0}\n aria-current={isActive ? 'true' : undefined}\n aria-label={`Silence, ${durationSec} seconds`}\n className={`text-muted-foreground/60 hover:bg-muted focus-visible:ring-ring cursor-pointer rounded px-0.5 transition-colors focus-visible:ring-2 focus-visible:outline-none ${\n isActive ? 'bg-primary-500/20' : ''\n }`}\n {...activationProps(() => seekTo(word.startMs))}\n >\n {'\\u00B7 '}\n </span>\n );\n }\n\n return (\n <span\n key={index}\n data-transcript-index={index}\n role=\"button\"\n tabIndex={0}\n aria-current={isActive ? 'true' : undefined}\n className={`hover:bg-muted focus-visible:ring-ring cursor-pointer rounded px-0.5 transition-colors focus-visible:ring-2 focus-visible:outline-none ${\n isActive ? 'bg-primary-500/20 text-foreground' : ''\n }`}\n {...activationProps(() => seekTo(word.startMs))}\n >\n {word.text}{' '}\n </span>\n );\n };\n\n // ------------------------------------------------------------------\n // Segment mode rendering (osheet artifact-viewer row parity)\n // ------------------------------------------------------------------\n const renderSegmentRow = (row: SegmentRow, index: number) => {\n const isActive = index === activeIndex;\n const speaker = resolveSpeakerLabel(\n row.speakerId,\n speakerLabels,\n transcript\n );\n\n return (\n <div key={index} role=\"listitem\">\n <button\n type=\"button\"\n data-transcript-index={index}\n aria-current={isActive ? 'true' : undefined}\n className={`hover:bg-muted focus-visible:ring-ring flex w-full cursor-pointer gap-3 rounded px-2 py-1 text-left text-sm transition-colors focus-visible:ring-2 focus-visible:outline-none ${\n isActive ? 'bg-primary-500/20' : ''\n }`}\n {...activationProps(() => seekTo(row.startMs))}\n >\n {showTimestamps && (\n <span className=\"text-muted-foreground w-12 shrink-0 font-mono\">\n {formatTimestampMs(row.startMs)}\n </span>\n )}\n {speaker && (\n <span className=\"text-primary-900 w-24 shrink-0 font-semibold\">\n {speaker}:\n </span>\n )}\n <span className=\"text-foreground\">{row.text}</span>\n </button>\n </div>\n );\n };\n\n return (\n <div ref={ref} className={transcriptViewVariants({ variant, className })}>\n {actions && (\n <div className=\"border-border mb-2 flex items-center justify-end gap-2 border-b pb-2\">\n {actions}\n </div>\n )}\n <div\n ref={contentRef}\n aria-label={ariaLabel}\n onMouseEnter={() => {\n isHoveringRef.current = true;\n }}\n onMouseLeave={() => {\n isHoveringRef.current = false;\n }}\n {...(resolvedGranularity === 'segment'\n ? { role: 'list', className: 'space-y-2' }\n : { className: 'text-sm leading-relaxed' })}\n >\n {resolvedGranularity === 'segment'\n ? segmentRows.map(renderSegmentRow)\n : transcript.words.map(renderWord)}\n </div>\n </div>\n );\n }\n);\n\nTranscriptView.displayName = 'TranscriptView';\n"]}
@@ -0,0 +1,66 @@
1
+ 'use strict';
2
+
3
+ var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
4
+ var React = require('react');
5
+ var classVarianceAuthority = require('class-variance-authority');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function _interopNamespace(e) {
9
+ if (e && e.__esModule) return e;
10
+ var n = Object.create(null);
11
+ if (e) {
12
+ Object.keys(e).forEach(function (k) {
13
+ if (k !== 'default') {
14
+ var d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: function () { return e[k]; }
18
+ });
19
+ }
20
+ });
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
27
+
28
+ var labelVariants = classVarianceAuthority.cva(
29
+ [
30
+ "text-foreground font-medium leading-none select-none",
31
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
32
+ ],
33
+ {
34
+ variants: {
35
+ size: {
36
+ sm: "text-xs",
37
+ md: "text-sm",
38
+ lg: "text-base"
39
+ }
40
+ },
41
+ defaultVariants: {
42
+ size: "md"
43
+ }
44
+ }
45
+ );
46
+ var Label = React__namespace.forwardRef(
47
+ ({ className, size, required, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
48
+ "label",
49
+ {
50
+ ref,
51
+ "data-slot": "label",
52
+ className: chunkOR5DRJCW_cjs.cn(labelVariants({ size }), className),
53
+ ...props,
54
+ children: [
55
+ children,
56
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive ml-0.5", children: "*" })
57
+ ]
58
+ }
59
+ )
60
+ );
61
+ Label.displayName = "Label";
62
+
63
+ exports.Label = Label;
64
+ exports.labelVariants = labelVariants;
65
+ //# sourceMappingURL=chunk-UOOH356R.cjs.map
66
+ //# sourceMappingURL=chunk-UOOH356R.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Label/Label.tsx"],"names":["cva","React","jsxs","cn","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,aAAA,GAAgBA,0BAAA;AAAA,EACpB;AAAA,IACE,sDAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,IAAA,EAAM;AAAA;AACR;AAEJ;AAmBA,IAAM,KAAA,GAAcC,gBAAA,CAAA,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,UAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAClDC,eAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,OAAA;AAAA,MACV,WAAWC,oBAAA,CAAG,aAAA,CAAc,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC/C,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,4BACCC,cAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,2BAA0B,QAAA,EAAA,GAAA,EAE7D;AAAA;AAAA;AAAA;AAIR;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA","file":"chunk-UOOH356R.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst labelVariants = cva(\n [\n 'text-foreground font-medium leading-none select-none',\n 'peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport interface LabelProps\n extends\n React.LabelHTMLAttributes<HTMLLabelElement>,\n VariantProps<typeof labelVariants> {\n /** Marks the associated field as required, rendering an asterisk */\n required?: boolean;\n}\n\n/**\n * An accessible form label that associates text with a form control via `htmlFor`.\n *\n * @example\n * ```tsx\n * <Label htmlFor=\"email\" required>Email</Label>\n * <input id=\"email\" type=\"email\" />\n * ```\n */\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, size, required, children, ...props }, ref) => (\n <label\n ref={ref}\n data-slot=\"label\"\n className={cn(labelVariants({ size }), className)}\n {...props}\n >\n {children}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive ml-0.5\">\n *\n </span>\n )}\n </label>\n )\n);\n\nLabel.displayName = 'Label';\n\nexport { Label, labelVariants };\n"]}
@@ -8,10 +8,18 @@ Object.defineProperty(exports, "AlertCircle", {
8
8
  enumerable: true,
9
9
  get: function () { return lucideReact.AlertCircle; }
10
10
  });
11
+ Object.defineProperty(exports, "AlertTriangle", {
12
+ enumerable: true,
13
+ get: function () { return lucideReact.AlertTriangle; }
14
+ });
11
15
  Object.defineProperty(exports, "ArrowLeft", {
12
16
  enumerable: true,
13
17
  get: function () { return lucideReact.ArrowLeft; }
14
18
  });
19
+ Object.defineProperty(exports, "Ban", {
20
+ enumerable: true,
21
+ get: function () { return lucideReact.Ban; }
22
+ });
15
23
  Object.defineProperty(exports, "Bell", {
16
24
  enumerable: true,
17
25
  get: function () { return lucideReact.Bell; }
@@ -20,6 +28,10 @@ Object.defineProperty(exports, "Calendar", {
20
28
  enumerable: true,
21
29
  get: function () { return lucideReact.Calendar; }
22
30
  });
31
+ Object.defineProperty(exports, "CalendarCheck", {
32
+ enumerable: true,
33
+ get: function () { return lucideReact.CalendarCheck; }
34
+ });
23
35
  Object.defineProperty(exports, "Camera", {
24
36
  enumerable: true,
25
37
  get: function () { return lucideReact.Camera; }
@@ -36,6 +48,14 @@ Object.defineProperty(exports, "ChevronDown", {
36
48
  enumerable: true,
37
49
  get: function () { return lucideReact.ChevronDown; }
38
50
  });
51
+ Object.defineProperty(exports, "ChevronRight", {
52
+ enumerable: true,
53
+ get: function () { return lucideReact.ChevronRight; }
54
+ });
55
+ Object.defineProperty(exports, "ChevronUp", {
56
+ enumerable: true,
57
+ get: function () { return lucideReact.ChevronUp; }
58
+ });
39
59
  Object.defineProperty(exports, "ClipboardCheck", {
40
60
  enumerable: true,
41
61
  get: function () { return lucideReact.ClipboardCheck; }
@@ -84,14 +104,38 @@ Object.defineProperty(exports, "Globe", {
84
104
  enumerable: true,
85
105
  get: function () { return lucideReact.Globe; }
86
106
  });
107
+ Object.defineProperty(exports, "GripVertical", {
108
+ enumerable: true,
109
+ get: function () { return lucideReact.GripVertical; }
110
+ });
111
+ Object.defineProperty(exports, "HandMetal", {
112
+ enumerable: true,
113
+ get: function () { return lucideReact.HandMetal; }
114
+ });
87
115
  Object.defineProperty(exports, "HeartPulse", {
88
116
  enumerable: true,
89
117
  get: function () { return lucideReact.HeartPulse; }
90
118
  });
119
+ Object.defineProperty(exports, "HelpCircle", {
120
+ enumerable: true,
121
+ get: function () { return lucideReact.HelpCircle; }
122
+ });
123
+ Object.defineProperty(exports, "History", {
124
+ enumerable: true,
125
+ get: function () { return lucideReact.History; }
126
+ });
91
127
  Object.defineProperty(exports, "Image", {
92
128
  enumerable: true,
93
129
  get: function () { return lucideReact.Image; }
94
130
  });
131
+ Object.defineProperty(exports, "Info", {
132
+ enumerable: true,
133
+ get: function () { return lucideReact.Info; }
134
+ });
135
+ Object.defineProperty(exports, "Link", {
136
+ enumerable: true,
137
+ get: function () { return lucideReact.Link; }
138
+ });
95
139
  Object.defineProperty(exports, "Mail", {
96
140
  enumerable: true,
97
141
  get: function () { return lucideReact.Mail; }
@@ -152,6 +196,22 @@ Object.defineProperty(exports, "Stethoscope", {
152
196
  enumerable: true,
153
197
  get: function () { return lucideReact.Stethoscope; }
154
198
  });
199
+ Object.defineProperty(exports, "StickyNote", {
200
+ enumerable: true,
201
+ get: function () { return lucideReact.StickyNote; }
202
+ });
203
+ Object.defineProperty(exports, "TestTube2", {
204
+ enumerable: true,
205
+ get: function () { return lucideReact.TestTube2; }
206
+ });
207
+ Object.defineProperty(exports, "ThumbsDown", {
208
+ enumerable: true,
209
+ get: function () { return lucideReact.ThumbsDown; }
210
+ });
211
+ Object.defineProperty(exports, "ThumbsUp", {
212
+ enumerable: true,
213
+ get: function () { return lucideReact.ThumbsUp; }
214
+ });
155
215
  Object.defineProperty(exports, "Trash2", {
156
216
  enumerable: true,
157
217
  get: function () { return lucideReact.Trash2; }
@@ -176,5 +236,5 @@ Object.defineProperty(exports, "X", {
176
236
  enumerable: true,
177
237
  get: function () { return lucideReact.X; }
178
238
  });
179
- //# sourceMappingURL=chunk-4ZU53GNR.cjs.map
180
- //# sourceMappingURL=chunk-4ZU53GNR.cjs.map
239
+ //# sourceMappingURL=chunk-UTYUT5YY.cjs.map
240
+ //# sourceMappingURL=chunk-UTYUT5YY.cjs.map