@mieweb/ui 0.10.0-dev.2 → 0.10.0-dev.20

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 (398) hide show
  1. package/agent/mieweb-ui.instructions.md +13 -1
  2. package/dist/CsvBlock-FX5YNGNE.cjs +17 -0
  3. package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-FX5YNGNE.cjs.map} +1 -1
  4. package/dist/CsvBlock-VLMG7GUO.js +8 -0
  5. package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-VLMG7GUO.js.map} +1 -1
  6. package/dist/HtmlPreviewBlock-5JE7L3GR.js +8 -0
  7. package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-5JE7L3GR.js.map} +1 -1
  8. package/dist/HtmlPreviewBlock-UO37JQ3K.cjs +17 -0
  9. package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-UO37JQ3K.cjs.map} +1 -1
  10. package/dist/Input-yN516s5_.d.cts +3 -0
  11. package/dist/Input-yN516s5_.d.ts +3 -0
  12. package/dist/MermaidBlock-3XHFBAMV.js +8 -0
  13. package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-3XHFBAMV.js.map} +1 -1
  14. package/dist/MermaidBlock-RZ75RPZA.cjs +17 -0
  15. package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-RZ75RPZA.cjs.map} +1 -1
  16. package/dist/SurveyBlock-MUVJ3JUI.js +8 -0
  17. package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-MUVJ3JUI.js.map} +1 -1
  18. package/dist/SurveyBlock-VH47YXZC.cjs +17 -0
  19. package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-VH47YXZC.cjs.map} +1 -1
  20. package/dist/ag-grid.d.cts +142 -1
  21. package/dist/ag-grid.d.ts +142 -1
  22. package/dist/{chunk-ACCAXVOG.js → chunk-2ABWFQQH.js} +133 -55
  23. package/dist/chunk-2ABWFQQH.js.map +1 -0
  24. package/dist/{chunk-Y5HFM7LO.js → chunk-2BARVD4C.js} +3 -3
  25. package/dist/{chunk-Y5HFM7LO.js.map → chunk-2BARVD4C.js.map} +1 -1
  26. package/dist/{chunk-G3JX3UAU.cjs → chunk-3KPDQG5O.cjs} +5 -5
  27. package/dist/{chunk-G3JX3UAU.cjs.map → chunk-3KPDQG5O.cjs.map} +1 -1
  28. package/dist/chunk-3YBS4WUQ.js +52 -0
  29. package/dist/chunk-3YBS4WUQ.js.map +1 -0
  30. package/dist/chunk-4HC2IBOX.js +258 -0
  31. package/dist/chunk-4HC2IBOX.js.map +1 -0
  32. package/dist/chunk-4IS3QCOQ.cjs +453 -0
  33. package/dist/chunk-4IS3QCOQ.cjs.map +1 -0
  34. package/dist/chunk-4NCDU5IG.cjs +56 -0
  35. package/dist/chunk-4NCDU5IG.cjs.map +1 -0
  36. package/dist/{chunk-E4IBHYJ7.cjs → chunk-6N6LIAUJ.cjs} +9 -9
  37. package/dist/{chunk-E4IBHYJ7.cjs.map → chunk-6N6LIAUJ.cjs.map} +1 -1
  38. package/dist/chunk-74ENCTIK.js +162 -0
  39. package/dist/chunk-74ENCTIK.js.map +1 -0
  40. package/dist/{chunk-GOALNQZ2.js → chunk-7YO7DNUV.js} +4 -83
  41. package/dist/chunk-7YO7DNUV.js.map +1 -0
  42. package/dist/{chunk-VILW53UZ.js → chunk-BIQ7GSO2.js} +3 -3
  43. package/dist/{chunk-VILW53UZ.js.map → chunk-BIQ7GSO2.js.map} +1 -1
  44. package/dist/chunk-BM35CACB.js +148 -0
  45. package/dist/chunk-BM35CACB.js.map +1 -0
  46. package/dist/{chunk-XI34EGK5.cjs → chunk-CPPUT74P.cjs} +9 -9
  47. package/dist/{chunk-XI34EGK5.cjs.map → chunk-CPPUT74P.cjs.map} +1 -1
  48. package/dist/{chunk-WNM7IZJ7.js → chunk-DSB4DKWG.js} +7 -7
  49. package/dist/{chunk-WNM7IZJ7.js.map → chunk-DSB4DKWG.js.map} +1 -1
  50. package/dist/chunk-DXEPYK3I.cjs +92 -0
  51. package/dist/chunk-DXEPYK3I.cjs.map +1 -0
  52. package/dist/{chunk-JI244Y7C.js → chunk-EK3BCET6.js} +57 -4
  53. package/dist/chunk-EK3BCET6.js.map +1 -0
  54. package/dist/{chunk-5JJ2DAE4.js → chunk-ENMXHZNE.js} +3 -3
  55. package/dist/{chunk-5JJ2DAE4.js.map → chunk-ENMXHZNE.js.map} +1 -1
  56. package/dist/{chunk-XCP454Q6.js → chunk-F4N67NAF.js} +12 -3
  57. package/dist/chunk-F4N67NAF.js.map +1 -0
  58. package/dist/{chunk-VKELAMAZ.js → chunk-FBLVPM2K.js} +3 -3
  59. package/dist/{chunk-VKELAMAZ.js.map → chunk-FBLVPM2K.js.map} +1 -1
  60. package/dist/{chunk-VU6UTJRM.js → chunk-FIKO4WR6.js} +3 -3
  61. package/dist/{chunk-VU6UTJRM.js.map → chunk-FIKO4WR6.js.map} +1 -1
  62. package/dist/{chunk-DEDN5HAG.js → chunk-FZURBQJ2.js} +3 -3
  63. package/dist/{chunk-DEDN5HAG.js.map → chunk-FZURBQJ2.js.map} +1 -1
  64. package/dist/{chunk-ENKFJJZX.js → chunk-G45FBKKV.js} +5 -5
  65. package/dist/{chunk-ENKFJJZX.js.map → chunk-G45FBKKV.js.map} +1 -1
  66. package/dist/{chunk-JHULS3EC.js → chunk-GBUVIGD5.js} +89 -3
  67. package/dist/chunk-GBUVIGD5.js.map +1 -0
  68. package/dist/chunk-GU5OS7JJ.cjs +281 -0
  69. package/dist/chunk-GU5OS7JJ.cjs.map +1 -0
  70. package/dist/{chunk-V7D3YGUV.js → chunk-GVLNXPJX.js} +4 -4
  71. package/dist/{chunk-V7D3YGUV.js.map → chunk-GVLNXPJX.js.map} +1 -1
  72. package/dist/chunk-GVM6DTR5.js +90 -0
  73. package/dist/chunk-GVM6DTR5.js.map +1 -0
  74. package/dist/{chunk-3QEVGSFG.cjs → chunk-GYXUS65N.cjs} +5 -5
  75. package/dist/{chunk-3QEVGSFG.cjs.map → chunk-GYXUS65N.cjs.map} +1 -1
  76. package/dist/{chunk-WGPLUCBD.js → chunk-H2IAMSHK.js} +3 -3
  77. package/dist/{chunk-WGPLUCBD.js.map → chunk-H2IAMSHK.js.map} +1 -1
  78. package/dist/{chunk-7ZXAQTV4.cjs → chunk-HIZWOAWY.cjs} +8 -8
  79. package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-HIZWOAWY.cjs.map} +1 -1
  80. package/dist/{chunk-ELPW32ZI.cjs → chunk-HQ4CGVWX.cjs} +41 -41
  81. package/dist/{chunk-ELPW32ZI.cjs.map → chunk-HQ4CGVWX.cjs.map} +1 -1
  82. package/dist/{chunk-6EN3IQQI.cjs → chunk-I4LXSHKO.cjs} +4 -4
  83. package/dist/{chunk-6EN3IQQI.cjs.map → chunk-I4LXSHKO.cjs.map} +1 -1
  84. package/dist/{chunk-NV2CWBI2.cjs → chunk-IEY3ZJIT.cjs} +12 -3
  85. package/dist/chunk-IEY3ZJIT.cjs.map +1 -0
  86. package/dist/{chunk-2YCERQWC.js → chunk-IH55BEB3.js} +4 -4
  87. package/dist/{chunk-2YCERQWC.js.map → chunk-IH55BEB3.js.map} +1 -1
  88. package/dist/chunk-IT775BYG.js +179 -0
  89. package/dist/chunk-IT775BYG.js.map +1 -0
  90. package/dist/chunk-IYWG72DM.js +166 -0
  91. package/dist/chunk-IYWG72DM.js.map +1 -0
  92. package/dist/{chunk-IX6KFB3K.cjs → chunk-JELTRRR5.cjs} +9 -9
  93. package/dist/{chunk-IX6KFB3K.cjs.map → chunk-JELTRRR5.cjs.map} +1 -1
  94. package/dist/{chunk-FXO5ARBB.cjs → chunk-KDW6BD4O.cjs} +4 -4
  95. package/dist/{chunk-FXO5ARBB.cjs.map → chunk-KDW6BD4O.cjs.map} +1 -1
  96. package/dist/chunk-KHSFJTEX.js +1924 -0
  97. package/dist/chunk-KHSFJTEX.js.map +1 -0
  98. package/dist/{chunk-UV2FVNWT.cjs → chunk-LFPJ3OUM.cjs} +5 -5
  99. package/dist/{chunk-UV2FVNWT.cjs.map → chunk-LFPJ3OUM.cjs.map} +1 -1
  100. package/dist/{chunk-WNAA6CLE.cjs → chunk-LHBWRMNC.cjs} +94 -2
  101. package/dist/chunk-LHBWRMNC.cjs.map +1 -0
  102. package/dist/{chunk-X4XPNTCZ.cjs → chunk-LJZKEMAH.cjs} +135 -57
  103. package/dist/chunk-LJZKEMAH.cjs.map +1 -0
  104. package/dist/{chunk-2QKBTPUC.cjs → chunk-MQPG3KVK.cjs} +8 -8
  105. package/dist/{chunk-2QKBTPUC.cjs.map → chunk-MQPG3KVK.cjs.map} +1 -1
  106. package/dist/{chunk-WIAQQNFU.cjs → chunk-MYHV2ND3.cjs} +37 -3
  107. package/dist/chunk-MYHV2ND3.cjs.map +1 -0
  108. package/dist/{chunk-OE5CKRUC.js → chunk-MZNCLXXU.js} +4 -4
  109. package/dist/{chunk-OE5CKRUC.js.map → chunk-MZNCLXXU.js.map} +1 -1
  110. package/dist/{chunk-XEAT7XJG.cjs → chunk-N2CJJHHB.cjs} +4 -4
  111. package/dist/{chunk-XEAT7XJG.cjs.map → chunk-N2CJJHHB.cjs.map} +1 -1
  112. package/dist/chunk-N7C4OEP7.cjs +356 -0
  113. package/dist/chunk-N7C4OEP7.cjs.map +1 -0
  114. package/dist/chunk-OGNADPM4.cjs +170 -0
  115. package/dist/chunk-OGNADPM4.cjs.map +1 -0
  116. package/dist/{chunk-5GUOOLPR.cjs → chunk-P5CMZZRZ.cjs} +5 -5
  117. package/dist/{chunk-5GUOOLPR.cjs.map → chunk-P5CMZZRZ.cjs.map} +1 -1
  118. package/dist/{chunk-U42F3HLE.cjs → chunk-QNDP6PE5.cjs} +57 -4
  119. package/dist/chunk-QNDP6PE5.cjs.map +1 -0
  120. package/dist/{chunk-H4ZXMQQW.js → chunk-QOVJ6Z6R.js} +3 -3
  121. package/dist/{chunk-H4ZXMQQW.js.map → chunk-QOVJ6Z6R.js.map} +1 -1
  122. package/dist/{chunk-GD7EBGC4.cjs → chunk-R2O72G6Z.cjs} +19 -19
  123. package/dist/{chunk-GD7EBGC4.cjs.map → chunk-R2O72G6Z.cjs.map} +1 -1
  124. package/dist/{chunk-TMMVIUUN.js → chunk-R6KPWIGO.js} +4 -4
  125. package/dist/{chunk-TMMVIUUN.js.map → chunk-R6KPWIGO.js.map} +1 -1
  126. package/dist/{chunk-VPWJCJCX.cjs → chunk-S45EERW3.cjs} +5 -5
  127. package/dist/{chunk-VPWJCJCX.cjs.map → chunk-S45EERW3.cjs.map} +1 -1
  128. package/dist/{chunk-WNZAYBVB.cjs → chunk-SQ2D7AON.cjs} +45 -45
  129. package/dist/{chunk-WNZAYBVB.cjs.map → chunk-SQ2D7AON.cjs.map} +1 -1
  130. package/dist/{chunk-P2CA3XGI.js → chunk-SYRLCTDV.js} +3 -3
  131. package/dist/{chunk-P2CA3XGI.js.map → chunk-SYRLCTDV.js.map} +1 -1
  132. package/dist/{chunk-7ZDPD5ZX.cjs → chunk-T4L7Q5FA.cjs} +7 -7
  133. package/dist/{chunk-7ZDPD5ZX.cjs.map → chunk-T4L7Q5FA.cjs.map} +1 -1
  134. package/dist/{chunk-ZGRCSNPK.js → chunk-TF7YWJHU.js} +3 -3
  135. package/dist/{chunk-ZGRCSNPK.js.map → chunk-TF7YWJHU.js.map} +1 -1
  136. package/dist/{chunk-2IZLKPUW.js → chunk-THLIL6PY.js} +3 -3
  137. package/dist/{chunk-2IZLKPUW.js.map → chunk-THLIL6PY.js.map} +1 -1
  138. package/dist/{chunk-N6IY47YA.cjs → chunk-TTSSUOEV.cjs} +8 -8
  139. package/dist/{chunk-N6IY47YA.cjs.map → chunk-TTSSUOEV.cjs.map} +1 -1
  140. package/dist/{chunk-5MCBWTIF.cjs → chunk-TYE5K5WV.cjs} +4 -4
  141. package/dist/{chunk-5MCBWTIF.cjs.map → chunk-TYE5K5WV.cjs.map} +1 -1
  142. package/dist/{chunk-22CYDCXA.js → chunk-TZJQB4P2.js} +37 -4
  143. package/dist/chunk-TZJQB4P2.js.map +1 -0
  144. package/dist/{chunk-VOKVG3ER.js → chunk-UBSH27C2.js} +4 -4
  145. package/dist/{chunk-VOKVG3ER.js.map → chunk-UBSH27C2.js.map} +1 -1
  146. package/dist/chunk-VINZZQBD.cjs +323 -0
  147. package/dist/chunk-VINZZQBD.cjs.map +1 -0
  148. package/dist/chunk-VPTASZ2O.cjs +171 -0
  149. package/dist/chunk-VPTASZ2O.cjs.map +1 -0
  150. package/dist/{chunk-SGFYA22I.cjs → chunk-VYPPQPSZ.cjs} +7 -7
  151. package/dist/{chunk-SGFYA22I.cjs.map → chunk-VYPPQPSZ.cjs.map} +1 -1
  152. package/dist/chunk-WCDJFMZO.cjs +1967 -0
  153. package/dist/chunk-WCDJFMZO.cjs.map +1 -0
  154. package/dist/{chunk-VNYW4C4J.cjs → chunk-X6A27RGO.cjs} +4 -84
  155. package/dist/chunk-X6A27RGO.cjs.map +1 -0
  156. package/dist/chunk-XBTKZCZF.js +333 -0
  157. package/dist/chunk-XBTKZCZF.js.map +1 -0
  158. package/dist/chunk-XDIMTPZU.cjs +202 -0
  159. package/dist/chunk-XDIMTPZU.cjs.map +1 -0
  160. package/dist/chunk-XVW5DPPP.js +429 -0
  161. package/dist/chunk-XVW5DPPP.js.map +1 -0
  162. package/dist/chunk-Y4E2WRUR.cjs +188 -0
  163. package/dist/chunk-Y4E2WRUR.cjs.map +1 -0
  164. package/dist/chunk-Y4QNLW7W.js +300 -0
  165. package/dist/chunk-Y4QNLW7W.js.map +1 -0
  166. package/dist/{chunk-KZFBQ7GY.js → chunk-YU55JD35.js} +3 -3
  167. package/dist/{chunk-KZFBQ7GY.js.map → chunk-YU55JD35.js.map} +1 -1
  168. package/dist/{chunk-OD47TTAW.cjs → chunk-Z4JR23IB.cjs} +9 -9
  169. package/dist/{chunk-OD47TTAW.cjs.map → chunk-Z4JR23IB.cjs.map} +1 -1
  170. package/dist/{chunk-3M7TAXNR.js → chunk-ZTW4KODY.js} +3 -3
  171. package/dist/{chunk-3M7TAXNR.js.map → chunk-ZTW4KODY.js.map} +1 -1
  172. package/dist/{chunk-3QGS6CXD.js → chunk-ZYL4SNOR.js} +3 -3
  173. package/dist/{chunk-3QGS6CXD.js.map → chunk-ZYL4SNOR.js.map} +1 -1
  174. package/dist/components/Alert/index.d.cts +1 -1
  175. package/dist/components/Alert/index.d.ts +1 -1
  176. package/dist/components/AlertDialog/index.cjs +6 -5
  177. package/dist/components/AlertDialog/index.d.cts +28 -3
  178. package/dist/components/AlertDialog/index.d.ts +28 -3
  179. package/dist/components/AlertDialog/index.js +5 -4
  180. package/dist/components/AudioRecorder/index.d.cts +2 -2
  181. package/dist/components/AudioRecorder/index.d.ts +2 -2
  182. package/dist/components/Autocomplete/index.d.cts +8 -2
  183. package/dist/components/Autocomplete/index.d.ts +8 -2
  184. package/dist/components/Avatar/index.d.cts +1 -1
  185. package/dist/components/Avatar/index.d.ts +1 -1
  186. package/dist/components/Badge/index.d.cts +1 -1
  187. package/dist/components/Badge/index.d.ts +1 -1
  188. package/dist/components/BoardView/index.cjs +24 -0
  189. package/dist/components/BoardView/index.cjs.map +1 -0
  190. package/dist/components/BoardView/index.d.cts +129 -0
  191. package/dist/components/BoardView/index.d.ts +129 -0
  192. package/dist/components/BoardView/index.js +7 -0
  193. package/dist/components/BoardView/index.js.map +1 -0
  194. package/dist/components/Button/index.cjs +4 -3
  195. package/dist/components/Button/index.d.cts +2 -1
  196. package/dist/components/Button/index.d.ts +2 -1
  197. package/dist/components/Button/index.js +2 -1
  198. package/dist/components/CalendarView/index.cjs +23 -0
  199. package/dist/components/CalendarView/index.cjs.map +1 -0
  200. package/dist/components/CalendarView/index.d.cts +39 -0
  201. package/dist/components/CalendarView/index.d.ts +39 -0
  202. package/dist/components/CalendarView/index.js +10 -0
  203. package/dist/components/CalendarView/index.js.map +1 -0
  204. package/dist/components/Card/index.d.cts +3 -3
  205. package/dist/components/Card/index.d.ts +3 -3
  206. package/dist/components/Collapsible/index.cjs +5 -5
  207. package/dist/components/Collapsible/index.js +2 -2
  208. package/dist/components/CustomizableDashboard/index.cjs +10 -9
  209. package/dist/components/CustomizableDashboard/index.js +3 -2
  210. package/dist/components/Dropdown/index.cjs +9 -9
  211. package/dist/components/Dropdown/index.d.cts +2 -1
  212. package/dist/components/Dropdown/index.d.ts +2 -1
  213. package/dist/components/Dropdown/index.js +2 -2
  214. package/dist/components/FloatingWindow/index.cjs +5 -4
  215. package/dist/components/FloatingWindow/index.js +3 -2
  216. package/dist/components/GanttView/index.cjs +20 -0
  217. package/dist/components/GanttView/index.cjs.map +1 -0
  218. package/dist/components/GanttView/index.d.cts +36 -0
  219. package/dist/components/GanttView/index.d.ts +36 -0
  220. package/dist/components/GanttView/index.js +7 -0
  221. package/dist/components/GanttView/index.js.map +1 -0
  222. package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
  223. package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
  224. package/dist/components/ListView/index.cjs +23 -0
  225. package/dist/components/ListView/index.cjs.map +1 -0
  226. package/dist/components/ListView/index.d.cts +124 -0
  227. package/dist/components/ListView/index.d.ts +124 -0
  228. package/dist/components/ListView/index.js +10 -0
  229. package/dist/components/ListView/index.js.map +1 -0
  230. package/dist/components/Markdown/index.cjs +20 -19
  231. package/dist/components/Markdown/index.js +8 -7
  232. package/dist/components/MediaEditor/index.cjs +11 -10
  233. package/dist/components/MediaEditor/index.d.cts +91 -2
  234. package/dist/components/MediaEditor/index.d.ts +91 -2
  235. package/dist/components/MediaEditor/index.js +6 -5
  236. package/dist/components/MediaPlayer/index.cjs +6 -5
  237. package/dist/components/MediaPlayer/index.d.cts +1 -1
  238. package/dist/components/MediaPlayer/index.d.ts +1 -1
  239. package/dist/components/MediaPlayer/index.js +3 -2
  240. package/dist/components/MegaMenu/index.cjs +6 -5
  241. package/dist/components/MegaMenu/index.js +3 -2
  242. package/dist/components/Modal/index.cjs +10 -10
  243. package/dist/components/Modal/index.js +2 -2
  244. package/dist/components/Pagination/index.d.cts +1 -1
  245. package/dist/components/Pagination/index.d.ts +1 -1
  246. package/dist/components/PhoneInput/index.d.cts +36 -3
  247. package/dist/components/PhoneInput/index.d.ts +36 -3
  248. package/dist/components/Progress/index.d.cts +1 -1
  249. package/dist/components/Progress/index.d.ts +1 -1
  250. package/dist/components/Q/index.d.cts +2 -2
  251. package/dist/components/Q/index.d.ts +2 -2
  252. package/dist/components/QuickAction/index.d.cts +1 -1
  253. package/dist/components/QuickAction/index.d.ts +1 -1
  254. package/dist/components/RadialExplorer/index.cjs +4 -3
  255. package/dist/components/RadialExplorer/index.js +3 -2
  256. package/dist/components/RecordButton/index.d.cts +1 -1
  257. package/dist/components/RecordButton/index.d.ts +1 -1
  258. package/dist/components/RichTextEditor/index.cjs +8 -7
  259. package/dist/components/RichTextEditor/index.d.cts +7 -2
  260. package/dist/components/RichTextEditor/index.d.ts +7 -2
  261. package/dist/components/RichTextEditor/index.js +5 -4
  262. package/dist/components/ScrollArea/index.d.cts +1 -1
  263. package/dist/components/ScrollArea/index.d.ts +1 -1
  264. package/dist/components/SectionSpyNav/index.cjs +4 -3
  265. package/dist/components/SectionSpyNav/index.js +3 -2
  266. package/dist/components/Select/index.d.cts +1 -2
  267. package/dist/components/Select/index.d.ts +1 -2
  268. package/dist/components/Skeleton/index.d.cts +1 -1
  269. package/dist/components/Skeleton/index.d.ts +1 -1
  270. package/dist/components/Slider/index.d.cts +2 -2
  271. package/dist/components/Slider/index.d.ts +2 -2
  272. package/dist/components/Spinner/index.d.cts +2 -2
  273. package/dist/components/Spinner/index.d.ts +2 -2
  274. package/dist/components/SuperChat/index.cjs +478 -281
  275. package/dist/components/SuperChat/index.cjs.map +1 -1
  276. package/dist/components/SuperChat/index.d.cts +2 -4
  277. package/dist/components/SuperChat/index.d.ts +2 -4
  278. package/dist/components/SuperChat/index.js +468 -271
  279. package/dist/components/SuperChat/index.js.map +1 -1
  280. package/dist/components/SuperChat/plugins/index.cjs +5 -5
  281. package/dist/components/SuperChat/plugins/index.d.cts +2 -3
  282. package/dist/components/SuperChat/plugins/index.d.ts +2 -3
  283. package/dist/components/SuperChat/plugins/index.js +4 -4
  284. package/dist/components/Text/index.d.cts +3 -3
  285. package/dist/components/Text/index.d.ts +3 -3
  286. package/dist/components/Textarea/index.d.cts +1 -2
  287. package/dist/components/Textarea/index.d.ts +1 -2
  288. package/dist/components/ThemeProvider/index.d.cts +3 -1
  289. package/dist/components/ThemeProvider/index.d.ts +3 -1
  290. package/dist/components/TranscriptView/index.d.cts +85 -4
  291. package/dist/components/TranscriptView/index.d.ts +85 -4
  292. package/dist/components/ViewSet/index.cjs +24 -0
  293. package/dist/components/ViewSet/index.cjs.map +1 -0
  294. package/dist/components/ViewSet/index.d.cts +300 -0
  295. package/dist/components/ViewSet/index.d.ts +300 -0
  296. package/dist/components/ViewSet/index.js +15 -0
  297. package/dist/components/ViewSet/index.js.map +1 -0
  298. package/dist/components/ViewSwitcher/index.cjs +20 -0
  299. package/dist/components/ViewSwitcher/index.cjs.map +1 -0
  300. package/dist/components/ViewSwitcher/index.d.cts +57 -0
  301. package/dist/components/ViewSwitcher/index.d.ts +57 -0
  302. package/dist/components/ViewSwitcher/index.js +7 -0
  303. package/dist/components/ViewSwitcher/index.js.map +1 -0
  304. package/dist/datavis.cjs +3 -2
  305. package/dist/datavis.cjs.map +1 -1
  306. package/dist/datavis.d.cts +167 -13
  307. package/dist/datavis.d.ts +167 -13
  308. package/dist/datavis.js +2 -1
  309. package/dist/datavis.js.map +1 -1
  310. package/dist/esheet.cjs +9 -8
  311. package/dist/esheet.cjs.map +1 -1
  312. package/dist/esheet.d.cts +183 -1
  313. package/dist/esheet.d.ts +183 -1
  314. package/dist/esheet.js +6 -5
  315. package/dist/esheet.js.map +1 -1
  316. package/dist/hooks/index.cjs +49 -16
  317. package/dist/hooks/index.d.cts +590 -31
  318. package/dist/hooks/index.d.ts +590 -31
  319. package/dist/hooks/index.js +3 -2
  320. package/dist/index.cjs +1375 -1088
  321. package/dist/index.cjs.map +1 -1
  322. package/dist/index.d.cts +8596 -683
  323. package/dist/index.d.ts +8596 -683
  324. package/dist/index.js +433 -340
  325. package/dist/index.js.map +1 -1
  326. package/dist/kerebron.cjs +58 -19
  327. package/dist/kerebron.cjs.map +1 -1
  328. package/dist/kerebron.d.cts +37 -0
  329. package/dist/kerebron.d.ts +37 -0
  330. package/dist/kerebron.js +58 -19
  331. package/dist/kerebron.js.map +1 -1
  332. package/dist/motion.cjs +7 -7
  333. package/dist/motion.d.cts +186 -2
  334. package/dist/motion.d.ts +186 -2
  335. package/dist/motion.js +2 -2
  336. package/dist/q.d.cts +25 -3
  337. package/dist/q.d.ts +25 -3
  338. package/dist/{speaker-verify-5GTWAN5Y.cjs → speaker-verify-4NEJAK6C.cjs} +57 -90
  339. package/dist/speaker-verify-4NEJAK6C.cjs.map +1 -0
  340. package/dist/{speaker-verify-R67P433H.js → speaker-verify-AWSKI6DI.js} +57 -90
  341. package/dist/speaker-verify-AWSKI6DI.js.map +1 -0
  342. package/dist/styles/effects.css +33 -0
  343. package/dist/styles.css +1 -1
  344. package/dist/tailwind-preset.cjs +4 -4
  345. package/dist/tailwind-preset.js +1 -1
  346. package/dist/templates.cjs +103 -0
  347. package/dist/templates.cjs.map +1 -0
  348. package/dist/templates.d.cts +560 -0
  349. package/dist/templates.d.ts +560 -0
  350. package/dist/templates.js +10 -0
  351. package/dist/templates.js.map +1 -0
  352. package/dist/types-C3HQe74F.d.cts +86 -0
  353. package/dist/types-C3HQe74F.d.ts +86 -0
  354. package/dist/{types-B97JNRNQ.d.cts → types-DOxdTwmq.d.cts} +170 -2
  355. package/dist/{types-gZXrfLj6.d.ts → types-DOxdTwmq.d.ts} +170 -2
  356. package/dist/utils/index.d.cts +13 -2
  357. package/dist/utils/index.d.ts +13 -2
  358. package/package.json +21 -4
  359. package/dist/Animated-XmH6k8pZ.d.cts +0 -188
  360. package/dist/Animated-XmH6k8pZ.d.ts +0 -188
  361. package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
  362. package/dist/CsvBlock-UWPMTLE2.js +0 -7
  363. package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
  364. package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
  365. package/dist/MedicationEditor-Bp4NLy7y.d.cts +0 -352
  366. package/dist/MedicationEditor-Bp4NLy7y.d.ts +0 -352
  367. package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
  368. package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
  369. package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
  370. package/dist/SurveyBlock-4DO62RBT.js +0 -7
  371. package/dist/chunk-22CYDCXA.js.map +0 -1
  372. package/dist/chunk-ACCAXVOG.js.map +0 -1
  373. package/dist/chunk-GOALNQZ2.js.map +0 -1
  374. package/dist/chunk-JHULS3EC.js.map +0 -1
  375. package/dist/chunk-JI244Y7C.js.map +0 -1
  376. package/dist/chunk-NV2CWBI2.cjs.map +0 -1
  377. package/dist/chunk-U42F3HLE.cjs.map +0 -1
  378. package/dist/chunk-VNYW4C4J.cjs.map +0 -1
  379. package/dist/chunk-WIAQQNFU.cjs.map +0 -1
  380. package/dist/chunk-WNAA6CLE.cjs.map +0 -1
  381. package/dist/chunk-X4XPNTCZ.cjs.map +0 -1
  382. package/dist/chunk-XCP454Q6.js.map +0 -1
  383. package/dist/html-MdxqSzjD.d.cts +0 -13
  384. package/dist/html-MdxqSzjD.d.ts +0 -13
  385. package/dist/orderRows-BUJYgSc7.d.cts +0 -221
  386. package/dist/orderRows-BUJYgSc7.d.ts +0 -221
  387. package/dist/speaker-verify-5GTWAN5Y.cjs.map +0 -1
  388. package/dist/speaker-verify-R67P433H.js.map +0 -1
  389. package/dist/transcript-Cg7uSW-C.d.cts +0 -84
  390. package/dist/transcript-Cg7uSW-C.d.ts +0 -84
  391. package/dist/types-CnPEwzlp.d.cts +0 -254
  392. package/dist/types-CnPEwzlp.d.ts +0 -254
  393. package/dist/useAnchoredPosition-CKwLSQW8.d.cts +0 -76
  394. package/dist/useAnchoredPosition-CKwLSQW8.d.ts +0 -76
  395. package/dist/useTheme-B9SWu6ui.d.cts +0 -24
  396. package/dist/useTheme-B9SWu6ui.d.ts +0 -24
  397. package/dist/useTranscriptEdits-CGzlemHT.d.cts +0 -182
  398. package/dist/useTranscriptEdits-D32bLs0l.d.ts +0 -182
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/AI/ComposerModelSelector.tsx","../src/components/Messaging/AttachmentPicker.tsx","../src/components/Messaging/useMentionAutocomplete.tsx","../src/components/ChatComposer/ChatComposer.tsx","../src/components/ChatComposer/migration-notice.ts"],"names":["React","useAnchoredPosition","value","useClickOutside","useEscapeKey","jsxs","Fragment","cn","jsx","ChevronUp","createPortal","Check","ChevronRight","ChevronLeft","React2","React3","React4","ChatComposer","AlertTriangle","X","Dropdown","Plus","DropdownItem","Paperclip","DropdownSeparator","Mic","Square","Loader2","ArrowUp","Bot"],"mappings":"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","file":"chunk-X4XPNTCZ.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { Check, ChevronLeft, ChevronRight, ChevronUp } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\n\nexport type ProviderModelValue = {\n provider: string;\n model: string;\n};\n\nexport type ProviderModelOption = ProviderModelValue & {\n label?: string;\n providerLabel?: string;\n id?: string;\n};\n\n/** A reasoning-effort level offered alongside the model. */\nexport type ComposerEffortOption = {\n value: string;\n label: string;\n /** Optional secondary line, e.g. a caveat about cost or latency. */\n description?: string;\n};\n\ntype ComposerModelSelectorBaseProps = {\n models: ProviderModelOption[];\n value: ProviderModelValue | null;\n onChange: (value: ProviderModelValue) => void;\n disabled?: boolean;\n /**\n * Trigger appearance: 'default' is the bordered pill; 'ghost' is a quiet\n * text trigger that matches ChatComposer's selector-row controls.\n */\n variant?: 'default' | 'ghost';\n className?: string;\n boundaryRef?: React.RefObject<HTMLElement | null>;\n placeholder?: string;\n anyLabel?: string;\n emptyLabel?: string;\n ariaLabel?: string;\n /**\n * Reasoning-effort levels for the selected model. Omit or pass an empty\n * array to hide the effort row entirely, which is what a model that cannot\n * reason should resolve to — the levels are provider-specific, so the caller\n * owns deciding which apply.\n */\n effortOptions?: ComposerEffortOption[];\n /** Currently selected effort. */\n effort?: string | null;\n /** Effort marked with a \"default\" badge in the list. */\n defaultEffort?: string;\n onEffortChange?: (value: string) => void;\n effortLabel?: string;\n effortHint?: string;\n defaultBadgeLabel?: string;\n backLabel?: string;\n};\n\ntype ControlledProviderFilterProps = {\n providerFilter: string | null;\n onProviderFilterChange: (provider: string | null) => void;\n};\n\ntype UncontrolledProviderFilterProps = {\n providerFilter?: undefined;\n onProviderFilterChange?: (provider: string | null) => void;\n};\n\nexport type ComposerModelSelectorProps = ComposerModelSelectorBaseProps &\n (ControlledProviderFilterProps | UncontrolledProviderFilterProps);\n\nconst MENU_OFFSET_PX = 6;\nconst MENU_MAX_HEIGHT_PX = 320;\n\nfunction optionKey(option: ProviderModelValue) {\n return `${option.provider}\\u0000${option.model}`;\n}\n\nfunction renderedOptionKey(option: ProviderModelOption, index: number) {\n return `${option.id ?? optionKey(option)}\\u0000${index}`;\n}\n\ntype RenderedModelOption = {\n option: ProviderModelOption;\n index: number;\n key: string;\n};\n\nfunction groupByProvider(models: ProviderModelOption[]) {\n const groups = new Map<string, ProviderModelOption[]>();\n\n for (const model of models) {\n const group = groups.get(model.provider);\n if (group) {\n group.push(model);\n } else {\n groups.set(model.provider, [model]);\n }\n }\n\n return Array.from(groups, ([provider, options]) => ({ provider, options }));\n}\n\nfunction getProviderLabel(models: ProviderModelOption[], provider: string) {\n return (\n models.find((model) => model.provider === provider && model.providerLabel)\n ?.providerLabel ?? provider\n );\n}\n\nexport function ComposerModelSelector({\n models,\n value,\n providerFilter,\n onProviderFilterChange,\n onChange,\n disabled = false,\n variant = 'default',\n className,\n boundaryRef,\n placeholder = 'Model',\n anyLabel = 'Any',\n emptyLabel = 'No models',\n ariaLabel = 'Model',\n effortOptions,\n effort = null,\n defaultEffort,\n onEffortChange,\n effortLabel = 'Effort',\n effortHint,\n defaultBadgeLabel = 'Default',\n backLabel = 'Back',\n}: ComposerModelSelectorProps) {\n const [open, setOpen] = React.useState(false);\n // The menu drills down rather than opening a side panel: one anchored\n // surface is far less fragile near the viewport edge, which is exactly where\n // a composer sits.\n const [view, setView] = React.useState<'models' | 'effort'>('models');\n const [effortHighlight, setEffortHighlight] = React.useState(0);\n const [internalProviderFilter, setInternalProviderFilter] = React.useState<\n string | null\n >(null);\n const [highlightedIndex, setHighlightedIndex] = React.useState(0);\n const listRef = React.useRef<HTMLDivElement>(null);\n const effortListRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n const {\n anchorRef: triggerRef,\n floatingRef: menuRef,\n style: menuStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open,\n placement: 'top-start',\n offset: MENU_OFFSET_PX,\n matchMinWidth: true,\n maxHeight: MENU_MAX_HEIGHT_PX,\n allowFlip: false,\n boundaryRef,\n });\n\n const activeProviderFilter =\n providerFilter === undefined ? internalProviderFilter : providerFilter;\n const selectedKey = value ? optionKey(value) : null;\n const selectedOption = models.find(\n (model) => optionKey(model) === selectedKey\n );\n const providers = React.useMemo(\n () => Array.from(new Set(models.map((model) => model.provider))),\n [models]\n );\n const providerLabels = React.useMemo(\n () =>\n new Map(\n providers.map((provider) => [\n provider,\n getProviderLabel(models, provider),\n ])\n ),\n [models, providers]\n );\n const filteredModels = React.useMemo(\n () =>\n activeProviderFilter === null\n ? models\n : models.filter((model) => model.provider === activeProviderFilter),\n [activeProviderFilter, models]\n );\n const groupedModels = React.useMemo(\n () => groupByProvider(filteredModels),\n [filteredModels]\n );\n const groupedRenderedModels = React.useMemo(() => {\n let index = 0;\n return groupedModels.map((group) => ({\n provider: group.provider,\n options: group.options.map((option) => {\n const rendered: RenderedModelOption = {\n option,\n index,\n key: renderedOptionKey(option, index),\n };\n index += 1;\n return rendered;\n }),\n }));\n }, [groupedModels]);\n const renderedModels = React.useMemo(\n () => groupedRenderedModels.flatMap((group) => group.options),\n [groupedRenderedModels]\n );\n const getOptionId = React.useCallback(\n (index: number) => `${menuId}-option-${index}`,\n [menuId]\n );\n // The two views are mutually exclusive, so both listboxes carry `menuId` and\n // the trigger's `aria-controls` stays pointed at whichever one is rendered.\n // Option ids are namespaced per view so they cannot collide.\n const getEffortOptionId = React.useCallback(\n (index: number) => `${menuId}-effort-option-${index}`,\n [menuId]\n );\n const activeOptionId =\n open && renderedModels[highlightedIndex]\n ? getOptionId(highlightedIndex)\n : undefined;\n const selectedRenderedIndex = React.useMemo(\n () =>\n selectedKey\n ? renderedModels.findIndex(\n (renderedModel) => optionKey(renderedModel.option) === selectedKey\n )\n : -1,\n [renderedModels, selectedKey]\n );\n\n const setProvider = React.useCallback(\n (provider: string | null) => {\n if (providerFilter === undefined) {\n setInternalProviderFilter(provider);\n }\n onProviderFilterChange?.(provider);\n },\n [onProviderFilterChange, providerFilter]\n );\n\n const close = React.useCallback(\n (restoreFocus = true) => {\n setOpen(false);\n if (restoreFocus) {\n triggerRef.current?.focus({ preventScroll: true });\n }\n },\n [triggerRef]\n );\n\n const selectModel = React.useCallback(\n (model: ProviderModelOption) => {\n onChange({ provider: model.provider, model: model.model });\n close();\n },\n [close, onChange]\n );\n\n const efforts = React.useMemo(() => effortOptions ?? [], [effortOptions]);\n const activeEffortOptionId =\n open && efforts[effortHighlight]\n ? getEffortOptionId(effortHighlight)\n : undefined;\n const selectedEffortOption = efforts.find(\n (option) => option.value === effort\n );\n\n const selectEffort = React.useCallback(\n (value: string) => {\n onEffortChange?.(value);\n close();\n },\n [close, onEffortChange]\n );\n\n const handleEffortKeyDown = (event: React.KeyboardEvent) => {\n if (efforts.length === 0) return;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setEffortHighlight((current) => (current + 1) % efforts.length);\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n setEffortHighlight(\n (current) => (current - 1 + efforts.length) % efforts.length\n );\n }\n if (event.key === 'Home') {\n event.preventDefault();\n setEffortHighlight(0);\n }\n if (event.key === 'End') {\n event.preventDefault();\n setEffortHighlight(efforts.length - 1);\n }\n // Left/Backspace mirrors the drill-down affordance so keyboard users can\n // get back to the model list without reaching for the mouse.\n if (event.key === 'ArrowLeft' || event.key === 'Backspace') {\n event.preventDefault();\n setView('models');\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n const highlighted = efforts[effortHighlight];\n if (highlighted) selectEffort(highlighted.value);\n }\n };\n\n const outsideRefs = React.useMemo(\n () => [triggerRef, menuRef],\n [triggerRef, menuRef]\n );\n\n useClickOutside(outsideRefs, () => close(false), open);\n\n useEscapeKey(close, open);\n\n React.useEffect(() => {\n if (!open) return;\n setHighlightedIndex(selectedRenderedIndex >= 0 ? selectedRenderedIndex : 0);\n }, [activeProviderFilter, open, selectedRenderedIndex]);\n\n // Every open starts on the model list. Deliberately keyed on `open` alone:\n // callers commonly derive `effortOptions` from the selected model, so the\n // array identity changes on every parent render, and folding that into this\n // effect would drop the user back to the model list mid-interaction.\n React.useEffect(() => {\n if (!open) return;\n setView('models');\n }, [open]);\n\n // The effort list starts on the current value so Enter is a no-op rather\n // than a surprise change.\n React.useEffect(() => {\n if (!open) return;\n const current = efforts.findIndex((option) => option.value === effort);\n setEffortHighlight(current >= 0 ? current : 0);\n }, [effort, efforts, open]);\n\n React.useEffect(() => {\n if (!open) return;\n setHighlightedIndex((current) =>\n Math.min(current, Math.max(renderedModels.length - 1, 0))\n );\n }, [open, renderedModels.length]);\n\n React.useEffect(() => {\n if (!open) return;\n requestAnimationFrame(() => {\n const target =\n view === 'effort' ? effortListRef.current : listRef.current;\n target?.focus({ preventScroll: true });\n });\n }, [open, view]);\n\n const handleTriggerKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setOpen(true);\n }\n };\n\n const handleMenuKeyDown = (event: React.KeyboardEvent) => {\n if (renderedModels.length === 0) return;\n\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setHighlightedIndex((current) => (current + 1) % renderedModels.length);\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n setHighlightedIndex(\n (current) =>\n (current - 1 + renderedModels.length) % renderedModels.length\n );\n }\n if (event.key === 'Home') {\n event.preventDefault();\n setHighlightedIndex(0);\n }\n if (event.key === 'End') {\n event.preventDefault();\n setHighlightedIndex(renderedModels.length - 1);\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n const highlightedModel = renderedModels[highlightedIndex]?.option;\n if (highlightedModel) {\n selectModel(highlightedModel);\n }\n }\n };\n\n return (\n <>\n <button\n ref={triggerRef}\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n onClick={() => setOpen((current) => !current)}\n onKeyDown={handleTriggerKeyDown}\n data-slot=\"composer-model-selector-trigger\"\n className={cn(\n variant === 'ghost'\n ? [\n 'inline-flex max-w-full min-w-0 items-center gap-1 rounded-md px-2 py-1 text-xs',\n 'text-neutral-600 dark:text-neutral-400',\n 'transition-colors duration-150',\n 'hover:bg-neutral-100 hover:text-neutral-900 dark:hover:bg-neutral-700 dark:hover:text-white',\n 'focus-visible:ring-primary-500 focus-visible:ring-2 focus-visible:outline-none',\n 'disabled:pointer-events-none disabled:opacity-40',\n ]\n : [\n 'inline-flex h-8 max-w-full items-center gap-1.5 rounded-full border px-2.5 text-sm font-medium',\n 'border-border bg-background text-foreground shadow-sm',\n 'hover:bg-muted/50',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n className\n )}\n >\n <span className=\"min-w-0 truncate\">\n {selectedOption?.label ?? selectedOption?.model ?? placeholder}\n </span>\n {selectedEffortOption && (\n <span\n data-slot=\"composer-model-selector-trigger-effort\"\n className=\"text-muted-foreground min-w-0 truncate font-normal\"\n >\n {selectedEffortOption.label}\n </span>\n )}\n <ChevronUp\n aria-hidden=\"true\"\n className={cn(\n 'shrink-0',\n variant === 'ghost' ? 'h-3 w-3' : 'h-3.5 w-3.5'\n )}\n />\n </button>\n\n {open &&\n createPortal(\n <div\n ref={menuRef}\n style={menuStyle}\n data-slot=\"composer-model-selector-menu\"\n className={cn(\n 'border-border bg-card text-card-foreground flex w-80 max-w-full flex-col rounded-lg border shadow-lg',\n 'animate-in fade-in overflow-hidden duration-100'\n )}\n >\n {view === 'models' && (\n <>\n <div\n data-slot=\"composer-model-selector-provider-filter\"\n className=\"border-border flex min-h-9 items-center gap-1 overflow-x-auto overflow-y-hidden border-b p-2\"\n >\n {[null, ...providers].map((provider) => {\n const selected = activeProviderFilter === provider;\n return (\n <button\n key={provider ?? 'all-providers'}\n type=\"button\"\n aria-pressed={selected}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => setProvider(provider)}\n className={cn(\n 'inline-flex h-6 shrink-0 items-center justify-center rounded-full px-2.5 text-xs font-medium whitespace-nowrap transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n selected\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground'\n )}\n >\n {provider === null\n ? anyLabel\n : (providerLabels.get(provider) ?? provider)}\n </button>\n );\n })}\n </div>\n\n <div\n ref={listRef}\n id={menuId}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-activedescendant={activeOptionId}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n className=\"min-h-0 flex-1 overflow-y-auto p-1\"\n >\n {groupedModels.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-4 text-center text-sm\">\n {emptyLabel}\n </div>\n ) : (\n groupedRenderedModels.map((group) => (\n <div\n key={group.provider}\n role=\"group\"\n aria-label={\n providerLabels.get(group.provider) ?? group.provider\n }\n >\n <div className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold uppercase\">\n {providerLabels.get(group.provider) ?? group.provider}\n </div>\n {group.options.map((renderedModel) => {\n const { index, key, option: model } = renderedModel;\n\n const selected = optionKey(model) === selectedKey;\n const highlighted = index === highlightedIndex;\n\n return (\n <button\n key={key}\n id={getOptionId(index)}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => selectModel(model)}\n onMouseEnter={() => setHighlightedIndex(index)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-start text-sm',\n 'focus-visible:ring-ring transition-colors focus-visible:ring-2 focus-visible:outline-none',\n highlighted && 'bg-muted',\n selected && 'bg-primary/10 text-primary'\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">\n {model.label ?? model.model}\n </span>\n {selected && (\n <Check\n aria-hidden=\"true\"\n className=\"text-primary h-4 w-4 shrink-0\"\n />\n )}\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n\n {efforts.length > 0 && (\n <div className=\"border-border border-t p-1\">\n <button\n type=\"button\"\n data-slot=\"composer-model-selector-effort-row\"\n aria-haspopup=\"listbox\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => setView('effort')}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-start text-sm',\n 'hover:bg-muted transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none'\n )}\n >\n <span className=\"min-w-0 flex-1 truncate\">\n {effortLabel}\n </span>\n {selectedEffortOption && (\n <span className=\"text-muted-foreground min-w-0 truncate\">\n {selectedEffortOption.label}\n </span>\n )}\n <ChevronRight\n aria-hidden=\"true\"\n className=\"text-muted-foreground h-4 w-4 shrink-0 rtl:-scale-x-100\"\n />\n </button>\n </div>\n )}\n </>\n )}\n\n {view === 'effort' && (\n <>\n <div className=\"border-border flex items-center gap-1 border-b p-2\">\n <button\n type=\"button\"\n data-slot=\"composer-model-selector-effort-back\"\n aria-label={backLabel}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => setView('models')}\n className={cn(\n 'inline-flex h-6 shrink-0 items-center gap-1 rounded-full px-2 text-xs font-medium',\n 'text-muted-foreground hover:bg-muted hover:text-foreground transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none'\n )}\n >\n <ChevronLeft\n aria-hidden=\"true\"\n className=\"h-3.5 w-3.5 rtl:-scale-x-100\"\n />\n {effortLabel}\n </button>\n </div>\n\n {effortHint && (\n <p className=\"text-muted-foreground px-3 pt-2 text-xs\">\n {effortHint}\n </p>\n )}\n\n <div\n ref={effortListRef}\n id={menuId}\n role=\"listbox\"\n aria-label={effortLabel}\n aria-activedescendant={activeEffortOptionId}\n tabIndex={-1}\n onKeyDown={handleEffortKeyDown}\n className=\"min-h-0 flex-1 overflow-y-auto p-1\"\n >\n {efforts.map((option, index) => {\n const selected = option.value === effort;\n const highlighted = index === effortHighlight;\n\n return (\n <button\n key={option.value}\n id={getEffortOptionId(index)}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => selectEffort(option.value)}\n onMouseEnter={() => setEffortHighlight(index)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-start text-sm',\n 'focus-visible:ring-ring transition-colors focus-visible:ring-2 focus-visible:outline-none',\n highlighted && 'bg-muted',\n selected && 'bg-primary/10 text-primary'\n )}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{option.label}</span>\n {option.description && (\n <span className=\"text-muted-foreground block truncate text-xs\">\n {option.description}\n </span>\n )}\n </span>\n {option.value === defaultEffort && (\n <span className=\"bg-muted text-muted-foreground shrink-0 rounded px-1.5 py-0.5 text-xs\">\n {defaultBadgeLabel}\n </span>\n )}\n {selected && (\n <Check\n aria-hidden=\"true\"\n className=\"text-primary h-4 w-4 shrink-0\"\n />\n )}\n </button>\n );\n })}\n </div>\n </>\n )}\n </div>,\n document.body\n )}\n </>\n );\n}\n\nComposerModelSelector.displayName = 'ComposerModelSelector';\n","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 * MessageComposer's historical attachment validation defaults. Shared so\n * hosts that mount `ChatComposer` (which leaves file types and size\n * unrestricted) can apply the same limits — `MessageThread` does, and\n * `AIChat` does for legacy `composerProps` consumers.\n */\nconst DEFAULT_ACCEPTED_FILE_TYPES = [\n 'image/*',\n 'video/*',\n '.pdf',\n '.doc',\n '.docx',\n];\nconst DEFAULT_MAX_FILE_SIZE = 25 * 1024 * 1024;\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 /** Disables the remove/retry actions. */\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Preview item for a pending attachment.\n */\nfunction AttachmentPreviewItem({\n attachment,\n onRemove,\n onRetry,\n disabled = false,\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 {isVideo ? (\n <video\n src={previewUrl}\n aria-label={file.name}\n muted\n playsInline\n preload=\"metadata\"\n className={cn(\n 'h-full w-full object-cover',\n (isUploading || isFailed) && 'opacity-50'\n )}\n />\n ) : (\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 )}\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-600 dark:text-neutral-400\">\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 disabled={disabled}\n className=\"mt-1 text-xs text-white underline hover:no-underline disabled:no-underline disabled:opacity-50\"\n >\n Retry\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Remove button */}\n <button\n type=\"button\"\n onClick={onRemove}\n disabled={disabled}\n className={cn(\n 'absolute -end-1 -top-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 'disabled:cursor-not-allowed disabled:group-hover:opacity-0'\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 start-0 end-0 bottom-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 = DEFAULT_ACCEPTED_FILE_TYPES,\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\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 /** Overlay text shown while dragging files over the zone. @default 'Drop files here' */\n overlayLabel?: string;\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 overlayLabel = 'Drop files here',\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 {overlayLabel}\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 DEFAULT_ACCEPTED_FILE_TYPES,\n DEFAULT_MAX_FILE_SIZE,\n getFileType,\n formatFileSize,\n validateFile,\n generateAttachmentId,\n};\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\n\n// ============================================================================\n// @mention autocomplete — consumed by ChatComposer (and, before its\n// retirement in 0.10.0, MessageComposer — it was extracted verbatim from it:\n// query detection, keyboard navigation, insertion, ARIA combobox wiring,\n// listbox rendering). Do not change semantics here without running\n// ChatComposer's test suite plus the SuperChat/AIChat consumer suites.\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 unique key for the suggestion list. */\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 */\nexport function 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\nexport interface UseMentionAutocompleteOptions {\n /** Mention candidates. Mentions are disabled when undefined or empty. */\n options?: MentionOption[];\n /** Current composer text. */\n value: string;\n /** Write the composer text (host handles controlled/uncontrolled). */\n setValue: (next: string) => void;\n /** The composer textarea, for caret restore after insertion. */\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n}\n\nexport interface MentionAutocomplete {\n /** Whether mention support is active (options provided and non-empty). */\n enabled: boolean;\n /** Whether the suggestion menu is currently open. */\n menuOpen: boolean;\n /** Suggestions matching the active query. */\n suggestions: MentionOption[];\n /** Clamped highlight index (`-1` while the menu is closed). */\n highlight: number;\n /** id of the listbox element. */\n listId: string;\n /** id for the option at `index`. */\n optionId: (index: number) => string;\n /** Ref for the element the menu anchors to (the input wrapper). */\n anchorRef: React.RefObject<HTMLDivElement | null>;\n /** Ref for the floating listbox. */\n floatingRef: React.RefObject<HTMLUListElement | null>;\n /** Fixed-position style for the floating listbox. */\n menuStyle: React.CSSProperties;\n /** Re-derive the active query from the value and caret position. */\n sync: (value: string, caret: number) => void;\n /** Insert the given option at the active query and restore the caret. */\n insert: (option: MentionOption) => void;\n /** Move the highlight (mouse hover). */\n setHighlight: (index: number) => void;\n /**\n * Menu keyboard navigation. Returns `true` when the event was consumed\n * (callers must skip their own key handling, e.g. Enter-to-send).\n */\n handleKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement>) => boolean;\n /** ARIA combobox attributes to spread onto the textarea. */\n inputProps: React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n}\n\n/**\n * State machine for `@mention` autocomplete in a composer textarea. Pair with\n * {@link MentionMenu} for the floating listbox.\n */\nexport function useMentionAutocomplete({\n options,\n value,\n setValue,\n textareaRef,\n}: UseMentionAutocompleteOptions): MentionAutocomplete {\n const enabled = !!options && options.length > 0;\n const [mention, setMention] = React.useState<{\n query: string;\n start: number;\n } | null>(null);\n const [highlight, setHighlight] = React.useState(0);\n const listId = React.useId();\n const optionId = React.useCallback(\n (index: number) => `${listId}-option-${index}`,\n [listId]\n );\n\n const suggestions = React.useMemo(() => {\n if (!mention || !options) return [];\n const q = mention.query.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(q));\n }, [mention, options]);\n\n const menuOpen = enabled && mention !== null && suggestions.length > 0;\n\n // Portal + fixed positioning so the mention menu escapes overflow-hidden\n // ancestors.\n const {\n anchorRef,\n floatingRef,\n style: menuStyle,\n } = useAnchoredPosition<HTMLDivElement, HTMLUListElement>({\n open: menuOpen,\n placement: 'top-start',\n maxHeight: 224,\n });\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 clampedHighlight = menuOpen\n ? Math.min(highlight, suggestions.length - 1)\n : -1;\n const activeOptionId = menuOpen ? optionId(clampedHighlight) : undefined;\n\n const sync = React.useCallback(\n (nextValue: string, caret: number) => {\n if (!enabled) return;\n setMention(activeMentionQuery(nextValue, caret));\n setHighlight(0);\n },\n [enabled]\n );\n\n const insert = (option: MentionOption) => {\n if (!mention) return;\n const insertValue = option.value ?? option.label.split(' ')[0];\n const before = value.slice(0, mention.start);\n const after = value.slice(mention.start + 1 + mention.query.length);\n const insertText = `@${insertValue} `;\n setValue(before + insertText + after);\n setMention(null);\n // Restore caret just after the inserted mention.\n const caret = before.length + insertText.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 handleKeyDown = (\n event: React.KeyboardEvent<HTMLTextAreaElement>\n ): boolean => {\n if (!menuOpen) return false;\n // All keyboard branches index with the clamped highlight so keyboard\n // behavior always agrees with the visible/ARIA selection, even when the\n // list shrank while the menu was open (e.g. the host swapped `options`\n // asynchronously).\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setHighlight(\n (h) => (Math.min(h, suggestions.length - 1) + 1) % suggestions.length\n );\n return true;\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n setHighlight(\n (h) =>\n (Math.min(h, suggestions.length - 1) - 1 + suggestions.length) %\n suggestions.length\n );\n return true;\n }\n if (event.key === 'Enter' || event.key === 'Tab') {\n event.preventDefault();\n const chosen = suggestions[clampedHighlight];\n if (chosen) insert(chosen);\n return true;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n setMention(null);\n return true;\n }\n return false;\n };\n\n const inputProps: React.TextareaHTMLAttributes<HTMLTextAreaElement> = enabled\n ? {\n 'aria-controls': menuOpen ? listId : undefined,\n 'aria-activedescendant': activeOptionId,\n 'aria-autocomplete': 'list' as const,\n }\n : {};\n\n return {\n enabled,\n menuOpen,\n suggestions,\n highlight: clampedHighlight,\n listId,\n optionId,\n anchorRef,\n floatingRef,\n menuStyle,\n sync,\n insert,\n setHighlight,\n handleKeyDown,\n inputProps,\n };\n}\n\nexport interface MentionMenuProps {\n /** State returned by {@link useMentionAutocomplete}. */\n mention: MentionAutocomplete;\n /** Accessible label for the listbox. @default 'Mention' */\n label?: string;\n /** `data-slot` for the listbox. @default 'composer-mention-list' */\n dataSlot?: string;\n}\n\n/**\n * The floating `@mention` suggestion listbox. Rendered in a portal so it\n * escapes overflow-hidden ancestors; renders nothing while closed.\n */\nexport function MentionMenu({\n mention,\n label = 'Mention',\n dataSlot = 'composer-mention-list',\n}: MentionMenuProps) {\n if (!mention.menuOpen) return null;\n return createPortal(\n <ul\n ref={mention.floatingRef}\n style={mention.menuStyle}\n id={mention.listId}\n role=\"listbox\"\n aria-label={label}\n data-slot={dataSlot}\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 {mention.suggestions.map((option, i) => (\n <li key={option.id}>\n <button\n type=\"button\"\n id={mention.optionId(i)}\n role=\"option\"\n aria-selected={i === mention.highlight}\n // onMouseDown (not onClick) so the textarea keeps focus.\n onMouseDown={(e) => {\n e.preventDefault();\n mention.insert(option);\n }}\n onMouseEnter={() => mention.setHighlight(i)}\n className={cn(\n 'flex w-full items-center gap-2 px-3 py-1.5 text-start text-sm',\n i === mention.highlight\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=\"ms-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}\n\nMentionMenu.displayName = 'MentionMenu';\n","import * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Dropdown, DropdownItem, DropdownSeparator } from '../Dropdown';\nimport {\n ComposerModelSelector,\n type ComposerModelSelectorProps,\n} from '../AI/ComposerModelSelector';\nimport {\n AttachmentPreviewItem,\n DragDropZone,\n getFileType,\n validateFile,\n generateAttachmentId,\n} from '../Messaging/AttachmentPicker';\nimport {\n MentionMenu,\n useMentionAutocomplete,\n type MentionOption,\n} from '../Messaging/useMentionAutocomplete';\nimport type { AttachmentType, NewMessage } from '../Messaging/types';\nimport {\n AlertTriangleIcon,\n ArrowUpIcon,\n BotIcon,\n CheckIcon,\n ChevronUpIcon,\n LoaderIcon,\n MicIcon,\n PaperclipIcon,\n PlusIcon,\n StopIcon,\n XIcon,\n} from '../Icons';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** A file staged for sending, with preview metadata. */\ninterface StagedAttachment {\n id: string;\n file: File;\n previewUrl?: string;\n type: AttachmentType;\n}\n\n/** An entry in the composer's `+` menu. */\nexport interface ChatComposerMenuItem {\n /** Stable id (used as the React key). */\n id: string;\n /** Display label. */\n label: React.ReactNode;\n /** Optional leading icon. */\n icon?: React.ReactNode;\n /** Whether the item is disabled. */\n disabled?: boolean;\n /**\n * Toggle state. When set (true or false) the item renders as a\n * `menuitemcheckbox` with `aria-checked` and a leading checkbox.\n */\n checked?: boolean;\n /** Danger styling for destructive actions. */\n variant?: 'default' | 'danger';\n /** Called when the item is selected. */\n onSelect?: () => void;\n}\n\n/** An agent shown in the composer's agent selector. */\nexport interface ChatComposerAgentOption {\n /** Stable id (returned via `onAgentChange`). */\n id: string;\n /** Display label. */\n label: string;\n /** Optional leading icon (defaults to a bot glyph in the trigger). */\n icon?: React.ReactNode;\n /** Optional secondary text shown in the menu. */\n description?: string;\n}\n\n/** Imperative handle exposed via `ref` for host-level integrations. */\nexport interface ChatComposerHandle {\n /**\n * Stage files programmatically (e.g. from a page-level drop zone or a\n * camera capture in `micSlot`). Deliberately NOT gated by\n * `allowAttachments` — that prop only hides the composer's own attach\n * affordances (the + button, paste, internal drop zone). Imperative calls\n * are explicit host actions; validation and `onError` still apply.\n */\n addFiles: (files: File[]) => void;\n /** Focus the text input. */\n focus: () => void;\n /**\n * The underlying textarea element, for host integrations that need caret\n * access (e.g. mention insertion via `setSelectionRange`).\n */\n getTextarea: () => HTMLTextAreaElement | null;\n}\n\n/** Structured context passed to `onError` so hosts can localize by reason. */\nexport interface ChatComposerError {\n reason: 'file-type' | 'file-size' | 'attachment-limit' | 'send-failed';\n /** The rejected file, when the error concerns a single file. */\n file?: File;\n}\n\nexport interface ChatComposerProps {\n /** Called when the user sends a message. */\n onSend?: (message: NewMessage) => void | Promise<void>;\n /** Controlled input value. Leave undefined for uncontrolled usage. */\n value?: string;\n /** Called when the input value changes. */\n onValueChange?: (value: string) => void;\n /** Placeholder text for the input. */\n placeholder?: string;\n /**\n * Disables all built-in interaction. Custom content (`micSlot`,\n * `addMenuItems` icons) is rendered as-is — hosts must disable their own\n * controls when they disable the composer.\n */\n disabled?: boolean;\n /** Shows the send button in a busy state and prevents duplicate sends. */\n isSending?: boolean;\n /** Autofocus the input on mount. */\n autoFocus?: boolean;\n /** Maximum message length. Sends are blocked while over the limit. */\n maxLength?: number;\n /** Show a character counter (requires `maxLength`). */\n showCharacterCount?: boolean;\n /**\n * Allow sending while the composer itself is empty (e.g. when the host\n * stages attachments outside the composer). The host receives a message\n * with empty `content` and no attachments and owns any further guarding.\n * @default false\n */\n canSendWhenEmpty?: boolean;\n /**\n * Maximum height of the auto-growing input: a pixel number or any CSS\n * length (e.g. `'40vh'`).\n * @default 160\n */\n maxHeight?: number | string;\n /**\n * Extra props spread onto the underlying textarea. Event handlers run\n * before the composer's built-in handlers; call `event.preventDefault()`\n * in `onKeyDown` / `onPaste` to claim that event (e.g. for a mention\n * menu's arrow/Enter navigation). `className` and `style` are merged\n * with the composer's own.\n */\n textareaProps?: Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'value' | 'defaultValue'\n >;\n\n /** Extra entries for the `+` menu, rendered after the built-in items. */\n addMenuItems?: ChatComposerMenuItem[];\n /** Enable file attachments (built-in \"Attach files\" menu item, paste-to-attach, drag-and-drop, chips). @default true */\n allowAttachments?: boolean;\n /** Accepted file types for the picker/paste validation (native `accept` tokens). */\n acceptedFileTypes?: string[];\n /** Maximum file size in bytes. */\n maxFileSize?: number;\n /** Maximum number of staged attachments. @default 10 */\n maxAttachments?: number;\n\n /**\n * Candidates for `@mention` autocomplete. When provided (non-empty), typing\n * `@` opens a suggestion listbox (same behavior as `MessageComposer`).\n * Omit to disable mentions entirely (default).\n */\n mentionOptions?: MentionOption[];\n\n /**\n * Message being replied to. When set, a dismissible preview row renders at\n * the top of the card, the input is focused, and the sent `NewMessage`\n * carries `replyToId`. The host owns the state: sending does not clear it\n * (clear it in `onSend`), and the preview's close button only calls\n * `onCancelReply`. Same contract as `MessageComposer`.\n */\n replyTo?: {\n id: string;\n content: string;\n senderName: string;\n } | null;\n /** Called when the reply preview's cancel button is clicked. */\n onCancelReply?: () => void;\n\n /** Show the built-in mic button. @default false */\n showMic?: boolean;\n /** Called when the built-in mic button is clicked. */\n onMicClick?: () => void;\n /**\n * Custom node rendered in place of the built-in mic button (e.g.\n * `RecordButton`). The slot is wrapped in a 32px-tall (`h-8`) flex row so it\n * aligns with the other composer controls; taller content overflows and\n * stays vertically centered without inflating the row. Interaction state is\n * not managed: pass your own disabled state when the composer is `disabled`.\n */\n micSlot?: React.ReactNode;\n /** When to show the mic: always, or only while the composer is empty. @default 'always' */\n micBehavior?: 'always' | 'whenEmpty';\n\n /** While true, the send button becomes a stop button (requires `onStop`). */\n isStreaming?: boolean;\n /** Called when the stop button is clicked during streaming. */\n onStop?: () => void;\n\n /** Show the agent selector in the bottom row. @default false */\n showAgentSelector?: boolean;\n /** Agents available in the agent selector. */\n agents?: ChatComposerAgentOption[];\n /** Selected agent id (controlled). */\n selectedAgent?: string | null;\n /** Called when an agent is selected. */\n onAgentChange?: (agentId: string) => void;\n\n /** Show the model selector in the bottom row. @default false */\n showModelSelector?: boolean;\n /** Props passed through to the embedded `ComposerModelSelector`. */\n modelSelectorProps?: ComposerModelSelectorProps;\n\n /** Replaces the composer with a read-only notice. */\n readOnly?: boolean;\n /** Notice text shown when `readOnly` is set. */\n readOnlyMessage?: string;\n\n /**\n * Called when a file is rejected or a send fails. `message` is a default\n * English string; `context.reason` lets hosts substitute localized copy.\n */\n onError?: (message: string, context?: ChatComposerError) => void;\n\n /** Message reported when the attachment limit is hit. Overrides the English default. */\n attachmentLimitLabel?: string;\n /** Message reported when an async `onSend` rejects. @default 'Failed to send message' */\n sendFailedLabel?: string;\n /** Accessible label for the send button while `isSending`. @default 'Sending message…' */\n sendingLabel?: string;\n\n /** Accessible label for the text input. @default 'Message input' */\n inputLabel?: string;\n /** Accessible label for the `+` menu trigger. @default 'Add to message' */\n addMenuLabel?: string;\n /** Label for the built-in attach menu item. @default 'Attach files' */\n attachFilesLabel?: string;\n /** Accessible label for the built-in mic button. @default 'Start voice input' */\n micLabel?: string;\n /** Accessible label for the send button. @default 'Send message' */\n sendLabel?: string;\n /** Accessible label for the stop button. @default 'Stop generating' */\n stopLabel?: string;\n /** Accessible label / empty-state text for the agent selector. @default 'Select agent' */\n agentSelectorLabel?: string;\n /** Accessible label for the `@mention` suggestion listbox. @default 'Mention' */\n mentionListLabel?: string;\n /** Overlay text shown while dragging files over the composer. @default 'Drop files here' */\n dropFilesLabel?: string;\n /** Prefix shown before the sender name in the reply preview. @default 'Replying to' */\n replyingToLabel?: string;\n /** Accessible label for the reply preview's cancel button. @default 'Cancel reply' */\n cancelReplyLabel?: string;\n\n className?: string;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst iconButtonClasses = cn(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-lg',\n 'text-neutral-500 dark:text-neutral-400',\n 'transition-colors duration-150',\n 'hover:bg-neutral-100 hover:text-neutral-900 dark:hover:bg-neutral-700 dark:hover:text-white',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500',\n 'disabled:pointer-events-none disabled:opacity-40'\n);\n\nconst selectorTriggerClasses = cn(\n 'flex min-w-0 items-center gap-1 rounded-md px-2 py-1 text-xs',\n 'text-neutral-600 dark:text-neutral-400',\n 'transition-colors duration-150',\n 'hover:bg-neutral-100 hover:text-neutral-900 dark:hover:bg-neutral-700 dark:hover:text-white',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500',\n 'disabled:pointer-events-none disabled:opacity-40'\n);\n\nconst MAX_INPUT_HEIGHT = 160;\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * Standardized chat input. At `md+` it renders as a single-row pill — `+`\n * menu, text input and actions (mic, send/stop) side by side; below `md` the\n * input stacks above the icon row. The optional agent/model selector row\n * hangs below the card on the page background.\n */\nexport const ChatComposer = React.forwardRef<\n ChatComposerHandle,\n ChatComposerProps\n>(function ChatComposer(\n {\n onSend,\n value: controlledValue,\n onValueChange,\n placeholder = 'Type a message…',\n disabled = false,\n isSending = false,\n autoFocus = false,\n maxLength,\n showCharacterCount = false,\n canSendWhenEmpty = false,\n maxHeight = MAX_INPUT_HEIGHT,\n textareaProps,\n addMenuItems,\n allowAttachments = true,\n acceptedFileTypes,\n maxFileSize,\n maxAttachments = 10,\n mentionOptions,\n replyTo = null,\n onCancelReply,\n showMic = false,\n onMicClick,\n micSlot,\n micBehavior = 'always',\n isStreaming = false,\n onStop,\n showAgentSelector = false,\n agents = [],\n selectedAgent = null,\n onAgentChange,\n showModelSelector = false,\n modelSelectorProps,\n readOnly = false,\n readOnlyMessage = 'You have read-only access and cannot send messages.',\n onError,\n attachmentLimitLabel,\n sendFailedLabel = 'Failed to send message',\n sendingLabel = 'Sending message…',\n inputLabel = 'Message input',\n addMenuLabel = 'Add to message',\n attachFilesLabel = 'Attach files',\n micLabel = 'Start voice input',\n sendLabel = 'Send message',\n stopLabel = 'Stop generating',\n agentSelectorLabel = 'Select agent',\n mentionListLabel = 'Mention',\n dropFilesLabel = 'Drop files here',\n replyingToLabel = 'Replying to',\n cancelReplyLabel = 'Cancel reply',\n className,\n },\n ref\n) {\n const [internalValue, setInternalValue] = React.useState('');\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const [attachments, setAttachments] = React.useState<StagedAttachment[]>([]);\n const attachmentsRef = React.useRef(attachments);\n attachmentsRef.current = attachments;\n\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n const [addMenuOpen, setAddMenuOpen] = React.useState(false);\n const [agentMenuOpen, setAgentMenuOpen] = React.useState(false);\n\n // Focus the input when a reply target is set (MessageComposer parity).\n // Keyed on the id, not the object: hosts often build `replyTo` inline, so\n // an object dependency would re-steal focus (and reset the caret) on every\n // parent render while the user is typing.\n const replyToId = replyTo?.id;\n React.useEffect(() => {\n if (replyToId !== undefined) {\n textareaRef.current?.focus();\n }\n }, [replyToId]);\n\n const hasText = value.trim().length > 0;\n const hasContent = hasText || attachments.length > 0;\n const isOverLimit = maxLength !== undefined && value.length > maxLength;\n // Without an onSend handler, sending would silently discard the draft.\n const canSend =\n (hasContent || canSendWhenEmpty) &&\n onSend !== undefined &&\n !disabled &&\n !isSending &&\n !isStreaming &&\n !isOverLimit;\n\n // --------------------------------------------------------------------\n // Input handling\n // --------------------------------------------------------------------\n\n const setValue = React.useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange]\n );\n\n // @mention autocomplete (opt-in via `mentionOptions`) — shared with\n // MessageComposer so both composers behave identically.\n const mention = useMentionAutocomplete({\n options: mentionOptions,\n value,\n setValue,\n textareaRef,\n });\n\n // Auto-grow the textarea. The cap is enforced with CSS max-height so it\n // can be any CSS length (e.g. '40vh'), not just a pixel number.\n const resizeTextarea = React.useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n textarea.style.height = 'auto';\n // While the textarea is not laid out (hidden container, e.g. a\n // just-mounted Storybook story or a closed panel) scrollHeight is 0 —\n // keep height auto and let the ResizeObserver below re-measure once\n // the element becomes visible.\n if (textarea.scrollHeight === 0) return;\n textarea.style.height = `${textarea.scrollHeight}px`;\n }, []);\n\n React.useLayoutEffect(resizeTextarea, [resizeTextarea, value]);\n\n // Re-measure when the textarea's box changes for reasons other than\n // typing: the container becoming visible, width changes, font loading,\n // or crossing the md breakpoint (different paddings).\n React.useEffect(() => {\n const textarea = textareaRef.current;\n if (!textarea || typeof ResizeObserver === 'undefined') return;\n // Defer the re-measure to the next frame: mutating the observed\n // element's height synchronously inside the observer callback triggers\n // the browser's \"ResizeObserver loop completed with undelivered\n // notifications\" error, which dev overlays surface as a runtime error.\n let frame = 0;\n const observer = new ResizeObserver(() => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(resizeTextarea);\n });\n observer.observe(textarea);\n return () => {\n cancelAnimationFrame(frame);\n observer.disconnect();\n };\n }, [resizeTextarea]);\n\n // --------------------------------------------------------------------\n // Attachments\n // --------------------------------------------------------------------\n\n const addFiles = React.useCallback(\n (files: File[]) => {\n // No `allowAttachments` gate here: every user-facing entry point\n // (paste handler, + button, internal drop zone) is gated separately,\n // so this only opens the imperative `ref.addFiles()` path for hosts\n // (e.g. MessageThread's camera capture with the picker disabled).\n if (files.length === 0) return;\n // Staging happens outside the state updater so object-URL creation,\n // id generation and onError stay out of a function React may re-invoke.\n const limitMessage =\n attachmentLimitLabel ??\n `Attachment limit reached (max ${maxAttachments})`;\n const room = maxAttachments - attachmentsRef.current.length;\n if (files.length > room) {\n onError?.(limitMessage, { reason: 'attachment-limit' });\n if (room <= 0) return;\n }\n const staged: StagedAttachment[] = [];\n for (const file of files.slice(0, Math.max(room, 0))) {\n const typeCheck = validateFile(file, acceptedFileTypes, undefined);\n if (!typeCheck.valid) {\n onError?.(`${file.name}: ${typeCheck.error}`, {\n reason: 'file-type',\n file,\n });\n continue;\n }\n const sizeCheck = validateFile(file, undefined, maxFileSize);\n if (!sizeCheck.valid) {\n onError?.(`${file.name}: ${sizeCheck.error}`, {\n reason: 'file-size',\n file,\n });\n continue;\n }\n const type = getFileType(file.type);\n staged.push({\n id: generateAttachmentId(),\n file,\n type,\n previewUrl:\n type === 'image' || type === 'video'\n ? URL.createObjectURL(file)\n : undefined,\n });\n }\n if (staged.length > 0) {\n // Reserve slots synchronously: a second addFiles call in the same\n // React batch reads attachmentsRef before re-render, so without this\n // both calls could see the same free room and overshoot the cap.\n attachmentsRef.current = [...attachmentsRef.current, ...staged];\n setAttachments((current) => [...current, ...staged]);\n }\n },\n [\n maxAttachments,\n acceptedFileTypes,\n maxFileSize,\n onError,\n attachmentLimitLabel,\n ]\n );\n\n const removeAttachment = React.useCallback((id: string) => {\n // Same discipline as addFiles: revoke and update the ref synchronously,\n // keep the state updater pure (StrictMode may re-invoke it).\n const target = attachmentsRef.current.find(\n (attachment) => attachment.id === id\n );\n if (target?.previewUrl) URL.revokeObjectURL(target.previewUrl);\n attachmentsRef.current = attachmentsRef.current.filter(\n (attachment) => attachment.id !== id\n );\n setAttachments((current) =>\n current.filter((attachment) => attachment.id !== id)\n );\n }, []);\n\n // Revoke any outstanding preview URLs on unmount.\n React.useEffect(() => {\n return () => {\n for (const attachment of attachmentsRef.current) {\n if (attachment.previewUrl) URL.revokeObjectURL(attachment.previewUrl);\n }\n };\n }, []);\n\n const handleFileInputChange = (\n event: React.ChangeEvent<HTMLInputElement>\n ) => {\n const files = Array.from(event.target.files ?? []);\n addFiles(files);\n event.target.value = '';\n };\n\n const handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (!allowAttachments) return;\n const files = Array.from(event.clipboardData.files);\n if (files.length > 0) {\n event.preventDefault();\n addFiles(files);\n }\n };\n\n React.useImperativeHandle(\n ref,\n () => ({\n addFiles,\n focus: () => textareaRef.current?.focus(),\n getTextarea: () => textareaRef.current,\n }),\n [addFiles]\n );\n\n // --------------------------------------------------------------------\n // Sending\n // --------------------------------------------------------------------\n\n const handleSend = () => {\n if (!canSend || !onSend) return;\n const message: NewMessage = {\n content: value.trim(),\n attachments: attachments.map((attachment) => attachment.file),\n // Only add the key when replying — hosts may key-check the payload.\n ...(replyTo ? { replyToId: replyTo.id } : {}),\n };\n for (const attachment of attachments) {\n if (attachment.previewUrl) URL.revokeObjectURL(attachment.previewUrl);\n }\n // Clear the ref alongside the state: the unmount cleanup reads the ref,\n // so if onSend unmounts the composer synchronously it must not see (and\n // re-revoke) the already-revoked preview URLs.\n attachmentsRef.current = [];\n setAttachments([]);\n setValue('');\n // The draft is cleared optimistically; hosts own retry/restore. Both a\n // synchronous throw and a rejected promise surface through onError\n // instead of being swallowed.\n try {\n Promise.resolve(onSend(message)).catch(() => {\n onError?.(sendFailedLabel, { reason: 'send-failed' });\n });\n } catch {\n onError?.(sendFailedLabel, { reason: 'send-failed' });\n }\n textareaRef.current?.focus();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // @mention menu navigation takes priority over send.\n if (mention.handleKeyDown(event)) return;\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n handleSend();\n }\n };\n\n // --------------------------------------------------------------------\n // Render\n // --------------------------------------------------------------------\n\n if (readOnly) {\n return (\n <div\n data-slot=\"chat-composer\"\n // A live status region (implicit aria-live=\"polite\"): readOnly can\n // flip at runtime (e.g. after permissions resolve), and screen-reader\n // users must be told the input became read-only.\n role=\"status\"\n className={cn(\n 'flex items-center gap-2 rounded-xl border px-4 py-3 text-sm',\n 'border-amber-300 bg-amber-50 text-amber-900',\n 'dark:border-amber-700 dark:bg-amber-950 dark:text-amber-200',\n className\n )}\n >\n <AlertTriangleIcon className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n <span data-slot=\"chat-composer-readonly\">{readOnlyMessage}</span>\n </div>\n );\n }\n\n const showAddMenu =\n allowAttachments || (addMenuItems && addMenuItems.length > 0);\n const micVisible =\n (showMic || onMicClick !== undefined || micSlot !== undefined) &&\n (micBehavior === 'always' || !hasContent);\n const showSelectorRow = showAgentSelector || showModelSelector;\n const selectedAgentOption =\n agents.find((agent) => agent.id === selectedAgent) ?? null;\n\n // One responsive grid: below `md` the input sits on row 1 spanning all\n // columns with the `+`/actions on row 2; at `md+` the `+`, input and\n // actions sit side by side on row 1 as a single pill (actions pin to the\n // bottom via self-end as the input grows).\n const cells = {\n input:\n 'col-span-3 col-start-1 row-start-1 px-1 pt-1 md:col-span-1 md:col-start-2 md:self-end md:px-0 md:py-1.5',\n textarea: 'px-2 pt-2 pb-1 md:py-1.5',\n add: 'col-start-1 row-start-2 pb-2 ps-2 md:row-start-1 md:self-end md:p-1.5 md:pe-0.5',\n actions:\n 'col-start-3 row-start-2 flex items-center gap-1 pb-2 pe-2 md:row-start-1 md:self-end md:gap-0.5 md:p-1.5 md:ps-0.5',\n };\n\n const composerCard = (\n <>\n {replyTo && (\n <div\n data-slot=\"chat-composer-reply-preview\"\n className={cn(\n 'flex items-center gap-2 rounded-t-2xl px-4 py-2',\n 'bg-neutral-50 dark:bg-neutral-800/50',\n 'border-b border-neutral-200 dark:border-neutral-700',\n 'border-s-primary-500 border-s-4'\n )}\n >\n {/* role=\"status\" politely announces the reply target to screen readers\n when the row is inserted (focus jumps to the textarea, so the text\n would otherwise be skipped). The cancel button stays outside it. */}\n <div role=\"status\" className=\"min-w-0 flex-1\">\n <span className=\"text-primary-800 dark:text-primary-400 block text-xs font-medium\">\n {replyingToLabel} {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 data-slot=\"chat-composer-cancel-reply\"\n aria-label={cancelReplyLabel}\n disabled={disabled}\n onClick={onCancelReply}\n className={iconButtonClasses}\n >\n <XIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n </div>\n )}\n\n {attachments.length > 0 && (\n <div\n data-slot=\"chat-composer-attachments\"\n className=\"flex flex-wrap gap-2 px-3 pt-3\"\n >\n {attachments.map((attachment) => (\n <AttachmentPreviewItem\n key={attachment.id}\n attachment={{ ...attachment, state: 'pending' }}\n onRemove={() => removeAttachment(attachment.id)}\n disabled={disabled}\n />\n ))}\n </div>\n )}\n\n <div className=\"grid grid-cols-[auto_minmax(0,1fr)_auto]\">\n {/* Inset cell: the textarea sits inside the card with a matching\n inner radius so focus outlines / a11y highlights render as a\n clean nested rounded rect instead of stacking on the card's\n border. The padding split (cell + textarea) keeps the text in\n place using only standard utilities. */}\n <div className={cells.input} ref={mention.anchorRef}>\n <MentionMenu\n mention={mention}\n label={mentionListLabel}\n dataSlot=\"chat-composer-mention-list\"\n />\n <textarea\n {...textareaProps}\n ref={textareaRef}\n data-slot=\"chat-composer-input\"\n value={value}\n onChange={(event) => {\n textareaProps?.onChange?.(event);\n setValue(event.target.value);\n mention.sync(\n event.target.value,\n event.target.selectionStart ?? event.target.value.length\n );\n }}\n // Host handlers run first; preventDefault() opts out of the\n // built-in behavior (mention menu, Enter-to-send,\n // paste-to-attach).\n onKeyDown={(event) => {\n textareaProps?.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n handleKeyDown(event);\n }}\n onClick={(event) => {\n textareaProps?.onClick?.(event);\n if (event.defaultPrevented) return;\n const el = event.currentTarget;\n mention.sync(el.value, el.selectionStart ?? el.value.length);\n }}\n onPaste={(event) => {\n textareaProps?.onPaste?.(event);\n if (event.defaultPrevented) return;\n handlePaste(event);\n }}\n placeholder={placeholder}\n disabled={disabled}\n // Host-opt-in only; off by default.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n rows={1}\n aria-label={inputLabel}\n {...mention.inputProps}\n style={{\n ...textareaProps?.style,\n maxHeight:\n typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight,\n }}\n className={cn(\n 'block w-full resize-none bg-transparent',\n 'rounded-lg text-sm',\n cells.textarea,\n 'text-neutral-900 placeholder:text-neutral-400 dark:text-white dark:placeholder:text-neutral-500',\n // Ring the input itself on focus rather than the whole shell.\n 'focus:ring-primary-500 focus:ring-1 focus:outline-none',\n 'disabled:cursor-not-allowed',\n textareaProps?.className\n )}\n />\n </div>\n\n {showAddMenu && (\n <div className={cells.add}>\n <Dropdown\n placement=\"top-start\"\n open={addMenuOpen}\n onOpenChange={setAddMenuOpen}\n trigger={\n <button\n type=\"button\"\n data-slot=\"chat-composer-add-button\"\n aria-label={addMenuLabel}\n disabled={disabled}\n className={iconButtonClasses}\n >\n <PlusIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n }\n >\n {allowAttachments && (\n <DropdownItem\n icon={\n <PaperclipIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n }\n onClick={() => {\n setAddMenuOpen(false);\n fileInputRef.current?.click();\n }}\n >\n {attachFilesLabel}\n </DropdownItem>\n )}\n {allowAttachments && addMenuItems && addMenuItems.length > 0 && (\n <DropdownSeparator />\n )}\n {addMenuItems?.map((item) => (\n <DropdownItem\n key={item.id}\n icon={item.icon}\n disabled={item.disabled}\n variant={item.variant}\n checked={item.checked}\n onClick={() => {\n setAddMenuOpen(false);\n item.onSelect?.();\n }}\n >\n <span className=\"min-w-0 truncate\">{item.label}</span>\n </DropdownItem>\n ))}\n </Dropdown>\n </div>\n )}\n\n {allowAttachments && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptedFileTypes?.join(',')}\n onChange={handleFileInputChange}\n className=\"hidden\"\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n )}\n\n <div className={cells.actions}>\n {showCharacterCount && maxLength !== undefined && (\n <span\n data-slot=\"chat-composer-char-count\"\n aria-live=\"polite\"\n className={cn(\n 'pe-1 text-xs tabular-nums',\n isOverLimit\n ? 'font-medium text-red-700 dark:text-red-400'\n : 'text-neutral-500 dark:text-neutral-400'\n )}\n >\n {value.length}/{maxLength}\n </span>\n )}\n\n {micVisible &&\n (micSlot != null ? (\n // Normalize slot content (e.g. a RecordButton) to the 32px\n // control row: taller content overflow-centers instead of\n // inflating the pill and pushing the other cells apart. A div\n // so block-level slot content stays valid HTML.\n <div\n data-slot=\"chat-composer-mic-slot\"\n className=\"flex h-8 shrink-0 items-center\"\n >\n {micSlot}\n </div>\n ) : (\n <button\n type=\"button\"\n data-slot=\"chat-composer-mic-button\"\n aria-label={micLabel}\n disabled={disabled}\n onClick={onMicClick}\n className={iconButtonClasses}\n >\n <MicIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n </button>\n ))}\n\n {isStreaming && onStop ? (\n <button\n type=\"button\"\n data-slot=\"chat-composer-stop-button\"\n aria-label={stopLabel}\n disabled={disabled}\n onClick={onStop}\n className={cn(\n iconButtonClasses,\n 'text-neutral-700 dark:text-neutral-200'\n )}\n >\n <StopIcon\n className=\"h-3.5 w-3.5 fill-current\"\n aria-hidden=\"true\"\n />\n </button>\n ) : (\n <button\n type=\"button\"\n data-slot=\"chat-composer-send-button\"\n aria-label={isSending ? sendingLabel : sendLabel}\n aria-busy={isSending || undefined}\n disabled={!canSend}\n onClick={handleSend}\n className={cn(\n iconButtonClasses,\n canSend &&\n 'bg-primary-800 hover:bg-primary-700 dark:bg-primary-600 dark:hover:bg-primary-500 text-white hover:text-white dark:hover:text-white'\n )}\n >\n {isSending ? (\n <LoaderIcon\n className=\"h-4 w-4 animate-spin\"\n aria-hidden=\"true\"\n />\n ) : (\n <ArrowUpIcon className=\"h-4 w-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </div>\n </div>\n </>\n );\n\n const selectorsRow = showSelectorRow && (\n <div\n data-slot=\"chat-composer-selectors\"\n className=\"flex items-center justify-between gap-2 px-2 pt-1\"\n >\n {showAgentSelector ? (\n <Dropdown\n placement=\"top-start\"\n open={agentMenuOpen}\n onOpenChange={setAgentMenuOpen}\n trigger={\n <button\n type=\"button\"\n data-slot=\"chat-composer-agent-trigger\"\n aria-label={\n selectedAgentOption\n ? `${agentSelectorLabel}: ${selectedAgentOption.label}`\n : agentSelectorLabel\n }\n disabled={disabled}\n className={selectorTriggerClasses}\n >\n {selectedAgentOption?.icon ?? (\n <BotIcon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n )}\n <span className=\"min-w-0 truncate\">\n {selectedAgentOption?.label ?? agentSelectorLabel}\n </span>\n <ChevronUpIcon className=\"h-3 w-3 shrink-0\" aria-hidden=\"true\" />\n </button>\n }\n >\n {agents.map((agent) => (\n <DropdownItem\n key={agent.id}\n icon={agent.icon}\n role=\"menuitemradio\"\n aria-checked={agent.id === selectedAgent}\n onClick={() => {\n setAgentMenuOpen(false);\n onAgentChange?.(agent.id);\n }}\n >\n <span className=\"flex w-full items-center justify-between gap-2\">\n <span className=\"min-w-0\">\n <span className=\"block truncate\">{agent.label}</span>\n {agent.description && (\n <span className=\"block truncate text-xs text-neutral-500 dark:text-neutral-400\">\n {agent.description}\n </span>\n )}\n </span>\n {agent.id === selectedAgent && (\n <CheckIcon\n className=\"text-primary-600 dark:text-primary-400 h-4 w-4 shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n </span>\n </DropdownItem>\n ))}\n </Dropdown>\n ) : (\n <span aria-hidden=\"true\" />\n )}\n\n {showModelSelector && modelSelectorProps && (\n <ComposerModelSelector\n variant=\"ghost\"\n {...modelSelectorProps}\n disabled={disabled || modelSelectorProps.disabled}\n />\n )}\n </div>\n );\n\n // The bordered card holds only the input row(s); the selector row hangs\n // below it on the page background. When attachments are enabled the card\n // doubles as a drop target; all dropped files run through `addFiles` so\n // validation and structured `onError` reporting stay in one place (the\n // zone itself does not validate).\n const card = (\n <div\n data-slot=\"chat-composer-card\"\n className={cn(\n 'rounded-2xl border border-neutral-200 bg-white shadow-sm',\n 'dark:border-[#2e2e30] dark:bg-[#1c1c1e]'\n )}\n >\n {composerCard}\n </div>\n );\n\n return (\n <div\n data-slot=\"chat-composer\"\n className={cn(\n 'flex w-full flex-col',\n disabled && 'opacity-60',\n className\n )}\n >\n {allowAttachments ? (\n <DragDropZone\n onFilesDropped={addFiles}\n maxFiles={Number.MAX_SAFE_INTEGER}\n disabled={disabled}\n overlayLabel={dropFilesLabel}\n >\n {card}\n </DragDropZone>\n ) : (\n card\n )}\n {selectorsRow}\n </div>\n );\n});\n\nChatComposer.displayName = 'ChatComposer';\n","// Dev-only, one-time notice that the chat surfaces now mount ChatComposer in\n// place of the retired MessageComposer (mieweb/ui#465, 0.10.0). Bundlers\n// replace `process.env.NODE_ENV` at build time, so the whole branch is\n// dead-code-eliminated from production bundles.\n// TODO(0.11.0): remove this notice one release after the retirement ships.\nlet didNotify = false;\n\n/** Log a one-time dev pointer to the ChatComposer migration guide. */\nexport function notifyComposerMigrationOnce(surface: string): void {\n if (process.env.NODE_ENV === 'production' || didNotify) return;\n didNotify = true;\n console.warn(\n `[@mieweb/ui] ${surface} renders the shared ChatComposer — the standalone ` +\n 'MessageComposer was retired in 0.10.0. If your CSS or tests reach into ' +\n 'composer internals, see MIGRATION.md#chat-composer ' +\n '(https://github.com/mieweb/ui/blob/main/MIGRATION.md#chat-composer). ' +\n 'This dev-only notice will be removed in 0.11.0.'\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/motion/presets.ts","../src/motion/runtime.ts","../src/motion/Animated.tsx"],"names":["React2","Animated"],"mappings":"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","file":"chunk-XCP454Q6.js","sourcesContent":["/**\n * Motion presets — the shared vocabulary of animations.\n *\n * This module is intentionally **free of any `motion` import**. It ships in the\n * main `@mieweb/ui` entry so components can describe *what* they animate\n * without pulling in a runtime to actually do it. The `@mieweb/ui/motion` entry\n * is what turns these descriptions into real animations.\n *\n * Every preset is expressed as an open/closed variant pair so the same\n * definition serves both usages:\n *\n * - **toggle** — the element stays mounted and animates between `open` and\n * `closed` (a drawer sliding in and out).\n * - **presence** — the element mounts and unmounts, entering on `open` and\n * exiting back to `closed` (a modal).\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Named animation recipes shared by components. */\nexport type MotionPreset =\n | 'drawerStart'\n | 'overlay'\n | 'modalContent'\n | 'sidebarLabel'\n | 'menu'\n | 'collapse'\n | 'toast'\n | 'fade'\n | 'pop';\n\n/**\n * A physical edge, already resolved from any logical (`start`/`end`) position\n * and from writing direction.\n *\n * Presets that move an element along an axis take one of these as `custom`.\n * Resolution is the component's job, not the preset's: only the component knows\n * whether its `end` means right or left, and — for anything anchored — which\n * side it actually landed on after flipping away from a viewport edge.\n */\nexport type MotionEdge = 'top' | 'bottom' | 'left' | 'right';\n\n/** Offset along the axis implied by `edge`, in px. */\nfunction offsetFromEdge(\n edge: unknown,\n distance: number\n): { x: number; y: number } {\n switch (edge) {\n case 'top':\n return { x: 0, y: -distance };\n case 'bottom':\n return { x: 0, y: distance };\n case 'left':\n return { x: -distance, y: 0 };\n default:\n return { x: distance, y: 0 };\n }\n}\n\n/**\n * A variant value. Either a plain target object or a function of the element's\n * `custom` value — the latter lets a single preset adapt to context, e.g. a\n * drawer flipping its off-canvas direction in RTL.\n */\nexport type MotionVariant =\n | Record<string, unknown>\n | ((custom: unknown) => Record<string, unknown>);\n\nexport interface MotionPresetDefinition {\n variants: {\n open: MotionVariant;\n closed: MotionVariant;\n };\n transition: Record<string, unknown>;\n}\n\n// =============================================================================\n// Presets\n// =============================================================================\n\n/**\n * `custom` contract per preset:\n *\n * - `drawerStart` — `boolean`, whether the document direction is RTL.\n * - `menu`, `toast` — a {@link MotionEdge}, already resolved from logical\n * position and writing direction by the component.\n * - `overlay`, `modalContent`, `sidebarLabel`, `collapse`, `fade`, `pop` —\n * unused.\n */\nexport const motionPresets: Record<MotionPreset, MotionPresetDefinition> = {\n /**\n * Off-canvas panel pinned to the inline-start edge. Animates `x` only, which\n * the compositor can handle without layout or paint.\n */\n drawerStart: {\n variants: {\n open: { x: '0%' },\n // Off-canvas direction follows writing direction, mirroring the\n // `-translate-x-full rtl:translate-x-full` CSS fallback.\n closed: (isRtl: unknown) => ({ x: isRtl ? '100%' : '-100%' }),\n },\n transition: { type: 'spring', stiffness: 400, damping: 40, mass: 1 },\n },\n\n /** Scrim behind a drawer or modal. */\n overlay: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.2, ease: 'easeOut' },\n },\n\n /** Centered dialog surface — rises and settles rather than popping. */\n modalContent: {\n variants: {\n open: { opacity: 1, scale: 1, y: 0 },\n closed: { opacity: 0, scale: 0.96, y: 8 },\n },\n transition: { type: 'spring', stiffness: 500, damping: 40, mass: 0.8 },\n },\n\n /**\n * Text that disappears as its container narrows — sidebar labels on collapse.\n *\n * Opacity only, and deliberately so. An inline-axis slide would read slightly\n * better but would make every label direction-aware, and resolving direction\n * per nav item is a disproportionate amount of plumbing for an 8px nudge.\n * Fading also degrades to itself under reduced motion instead of becoming a\n * different animation.\n *\n * Short because it runs on many elements at once and has to finish inside the\n * container's own width transition, or labels are still fading after the rail\n * has stopped moving.\n */\n sidebarLabel: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.15, ease: 'easeOut' },\n },\n\n /**\n * Anchored popup surface — dropdown, select, autocomplete, command palette.\n *\n * `custom` is the side of the anchor the menu actually occupies, so the\n * closed state nudges back *toward* the trigger and the menu reads as coming\n * out of the control that opened it. Pass the post-flip side, not the\n * requested placement: a menu asked for `bottom` that flipped to `top` for\n * want of room must animate from the top, or it moves the wrong way.\n *\n * `transform-origin` is deliberately left to CSS (`origin-top` and friends).\n * It is static per side and never animates, so making it a variant would put\n * a second owner on a property motion has no reason to touch.\n *\n * Snappier than `modalContent`: a menu is a transient response to a click and\n * should feel instant, where a dialog is a context switch and can afford to\n * settle.\n */\n menu: {\n variants: {\n open: { opacity: 1, scale: 1, x: 0, y: 0 },\n closed: (edge: unknown) => ({\n opacity: 0,\n scale: 0.95,\n ...offsetFromEdge(edge, -4),\n }),\n },\n transition: { type: 'spring', stiffness: 600, damping: 40, mass: 0.6 },\n },\n\n /**\n * Disclosure content that expands and collapses — `Collapsible`, `Accordion`.\n *\n * The one preset that earns its keep on capability rather than polish:\n * `height: auto` is not interpolable in CSS, so the alternative is a\n * hard-coded max-height that either clips tall content or eases against dead\n * space on short content. Motion measures the real height instead.\n *\n * Animating `height` costs layout on every frame, unlike the transform and\n * opacity work everywhere else in this file. That is the price of the\n * capability; keep the duration short and don't reach for this preset when a\n * transform would do.\n *\n * Consumers must clip the element (`overflow-hidden`) or content spills past\n * the shrinking box mid-animation.\n *\n * Note that `MotionConfig reducedMotion=\"user\"` does **not** cover this:\n * it drops transform and layout animations, and `height` is a plain value\n * animation to motion. Components using this preset are responsible for\n * honoring the preference themselves — see `usePrefersReducedMotion`.\n */\n collapse: {\n variants: {\n open: { height: 'auto', opacity: 1 },\n closed: { height: 0, opacity: 0 },\n },\n transition: { duration: 0.2, ease: 'easeOut' },\n },\n\n /**\n * Transient notification entering and leaving a stack.\n *\n * `custom` is the physical edge the toast lives against, so it enters from\n * the screen edge nearest it rather than always from the right — which is\n * what the `animate-slide-in-right` fallback does regardless of position.\n *\n * Scale is near-imperceptible on purpose: it softens the arrival without\n * making a message that may carry an error read as playful.\n */\n toast: {\n variants: {\n open: { opacity: 1, scale: 1, x: 0, y: 0 },\n closed: (edge: unknown) => ({\n opacity: 0,\n scale: 0.98,\n ...offsetFromEdge(edge, 24),\n }),\n },\n transition: { type: 'spring', stiffness: 400, damping: 36, mass: 0.8 },\n },\n\n /**\n * Generic presence fade, for surfaces with no meaningful direction —\n * drag overlays, connectivity banners, skeleton-to-content swaps.\n *\n * Survives `reducedMotion=\"user\"` intact, since opacity is the one thing that\n * setting keeps. Prefer it over a transform preset wherever the movement is\n * decorative rather than explanatory.\n */\n fade: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.15, ease: 'easeOut' },\n },\n\n /**\n * Small element arriving with emphasis — a count badge, a status pill.\n *\n * Overshoots past full size and settles back (`1 → 1.1 → 1`) so the arrival\n * is legible on an element too small for movement to register. Reserve it\n * for things that appear in response to an event worth noticing; on anything\n * large it reads as a bounce.\n *\n * The overshoot is a keyframe rather than a spring because the resting open\n * state has to be `scale: 1`. Expressing the emphasis as a spring target\n * would leave a mounted consumer parked at 1.1 — permanently 10% oversized —\n * since the open variant is also the at-rest state.\n */\n pop: {\n variants: {\n open: { opacity: 1, scale: [1, 1.1, 1] },\n closed: { opacity: 0, scale: 1 },\n },\n // `times` front-loads the overshoot so it reads as a pop rather than an\n // even swell. Keyframe arrays need a duration-based tween; a spring has no\n // way to run through intermediate values.\n transition: { duration: 0.28, ease: 'easeOut', times: [0, 0.45, 1] },\n },\n};\n","/**\n * Motion runtime — the seam between components and an optional animation library.\n *\n * Components in the main entry never import `motion`. They ask this module for\n * a runtime; if an app has opted in by rendering `<MotionProvider>` from\n * `@mieweb/ui/motion`, they get one and animate. If not, `useMotionRuntime()`\n * returns `null` and they fall back to their existing CSS transitions. That is\n * what keeps `motion` out of the bundle of every app that hasn't asked for it —\n * the opt-in is resolved in the *module graph*, not by a prop.\n *\n * Like `presets`, this module must stay free of any `motion` import.\n */\n\nimport * as React from 'react';\nimport { motionPresets, type MotionPreset } from './presets';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface MotionPresenceProps {\n children?: React.ReactNode;\n /** Suppress the initial mount animation. */\n initial?: boolean;\n /**\n * Fires once every exiting child has finished and been removed.\n *\n * Needed by anything that guards the DOM while it is open — a focus trap, a\n * scroll lock — because those guards must outlive `open` for as long as the\n * subtree is still on screen. Never fires when no runtime is active, since\n * there is no exit to wait for.\n */\n onExitComplete?: () => void;\n}\n\n/**\n * The capabilities a motion library must supply. Deliberately small: element\n * factories, a presence wrapper, and prop builders. Components depend on this\n * interface, never on a concrete library, so swapping or dropping the library\n * stays a one-file change.\n */\nexport interface MotionRuntime {\n /**\n * Whether animations should actually run.\n *\n * A disabled provider still supplies a runtime rather than `null` so that\n * consumers can tell \"disabled\" apart from \"never opted in\": `Modal` uses it\n * to decide whether an exit animation will ever report completion, and\n * `AnimatedPresence` keeps its wrapper element stable across the flip.\n * `Animated` itself renders the plain fallback tag whenever this is false —\n * withholding animation props from a mounted motion component corrupts\n * `toggle`-mode elements, so the swap (and the remount it implies) is the\n * correct behaviour. See the render branches in `Animated`.\n */\n enabled: boolean;\n /** Animated `div`. */\n Div: React.ElementType;\n /** Animated `nav`. */\n Nav: React.ElementType;\n /** Animated `span`, for inline content that must not become a block. */\n Span: React.ElementType;\n /** Enables exit animations for conditionally rendered children. */\n Presence: React.ComponentType<MotionPresenceProps>;\n /**\n * Props for an element that stays mounted and animates between states.\n * Skips the initial animation so a closed drawer doesn't slide out on load.\n */\n toggle: (\n preset: MotionPreset,\n open: boolean,\n custom?: unknown\n ) => Record<string, unknown>;\n /** Props for an element that mounts and unmounts inside `Presence`. */\n presence: (preset: MotionPreset, custom?: unknown) => Record<string, unknown>;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\n/**\n * The context is stashed on `globalThis` under a registered symbol rather than\n * held in a module-local `const`.\n *\n * `@mieweb/ui` and `@mieweb/ui/motion` are separate bundle entries, and CJS\n * builds cannot code-split. Without this, the provider and the components\n * would each get their own copy of the context object and the provider would\n * silently never be seen — animations would simply never turn on, with no\n * error to explain why. A duplicated install of the package causes the same\n * failure. Keying off the global symbol registry makes the context a true\n * singleton in every one of those cases.\n *\n * The key is versioned. Two copies of this package sharing one page share\n * whatever lives under the key, so the `v1` suffix is a compatibility\n * contract: bump it if the `MotionRuntime` interface ever changes shape,\n * or an old provider will hand a new component a runtime it cannot use.\n */\nconst CONTEXT_KEY = Symbol.for('@mieweb/ui.motionRuntimeContext.v1');\n\ntype GlobalWithMotionContext = typeof globalThis & {\n [CONTEXT_KEY]?: React.Context<MotionRuntime | null>;\n};\n\nfunction getMotionRuntimeContext(): React.Context<MotionRuntime | null> {\n const globalScope = globalThis as GlobalWithMotionContext;\n if (!globalScope[CONTEXT_KEY]) {\n globalScope[CONTEXT_KEY] = React.createContext<MotionRuntime | null>(null);\n }\n return globalScope[CONTEXT_KEY];\n}\n\n/** @internal Consumed by `<MotionProvider>` in the `@mieweb/ui/motion` entry. */\nexport const MotionRuntimeContext = getMotionRuntimeContext();\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\n/**\n * The active motion runtime, or `null` when the app has not opted in.\n *\n * Components must treat `null` as the normal case and keep a CSS path that\n * looks good on its own — motion is an enhancement, never a requirement.\n */\nexport function useMotionRuntime(): MotionRuntime | null {\n return React.useContext(MotionRuntimeContext);\n}\n\n// =============================================================================\n// Prop builders\n// =============================================================================\n\n/**\n * Builds the `toggle`/`presence` prop builders around a library-agnostic core.\n * Exported so `<MotionProvider>` can assemble a runtime without restating the\n * preset lookup.\n *\n * @internal\n */\nexport function createPresetPropBuilders(): Pick<\n MotionRuntime,\n 'toggle' | 'presence'\n> {\n return {\n toggle(preset, open, custom) {\n const { variants, transition } = motionPresets[preset];\n return {\n variants,\n transition,\n custom,\n // `false` pins the element to its current variant on mount instead of\n // animating into it.\n initial: false,\n animate: open ? 'open' : 'closed',\n };\n },\n\n presence(preset, custom) {\n const { variants, transition } = motionPresets[preset];\n return {\n variants,\n transition,\n custom,\n initial: 'closed',\n animate: 'open',\n exit: 'closed',\n };\n },\n };\n}\n","/**\n * `Animated` / `AnimatedPresence` — the ergonomic layer components use.\n *\n * These exist so an individual component never has to branch on whether motion\n * is available. It declares the preset it wants and the CSS classes that stand\n * in when motion is absent; this module picks the element to render.\n *\n * Adding motion to a further component should be a matter of swapping its\n * root `<div>` for an `<Animated>` and naming a preset — no new imports, no\n * new dependency, and no behavior change for apps that have not opted in.\n */\n\nimport * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { useMotionRuntime, type MotionPresenceProps } from './runtime';\nimport type { MotionPreset } from './presets';\n\n// =============================================================================\n// Animated\n// =============================================================================\n\nexport interface AnimatedProps extends React.HTMLAttributes<HTMLElement> {\n /** Intrinsic element to render. */\n as?: 'div' | 'nav' | 'span';\n /** Which shared animation recipe to use. */\n preset: MotionPreset;\n /**\n * - `toggle` — element stays mounted and animates between open and closed.\n * - `presence` — element mounts and unmounts; wrap it in `<AnimatedPresence>`\n * so the exit animation gets a chance to run.\n */\n mode: 'toggle' | 'presence';\n /** Current state. Only read in `toggle` mode. */\n open?: boolean;\n /** Per-preset context value — see the `custom` contract in `presets.ts`. */\n custom?: unknown;\n /**\n * Classes applied whenever this element is **not** animating — no provider,\n * a disabled provider, or `enabled={false}`. This is where a component's\n * existing CSS transition lives, so the two paths never both try to drive\n * the same property.\n */\n fallbackClassName?: string;\n /**\n * Set `false` to stop this element animating even when a runtime is active.\n *\n * For states where an animated element would be wrong rather than merely\n * unnecessary. Motion writes a `transform` to hold an element at its resting\n * position, and a transformed ancestor becomes the containing block for any\n * `position: fixed` descendant — so an element that is only sometimes\n * animated should opt out the rest of the time.\n *\n * Flipping this (or the provider's `disabled`) swaps the element back to a\n * plain tag, which **remounts** it — deliberately. See the note on the\n * render branches below.\n */\n enabled?: boolean;\n}\n\nexport const Animated = React.forwardRef<HTMLElement, AnimatedProps>(\n function Animated(\n {\n as = 'div',\n preset,\n mode,\n open = false,\n custom,\n className,\n fallbackClassName,\n enabled = true,\n children,\n ...rest\n },\n ref\n ) {\n const runtime = useMotionRuntime();\n\n /*\n * Anything not animating renders the plain tag with the CSS fallback —\n * no provider, a disabled provider, or `enabled={false}` alike.\n *\n * Crossing between this branch and the motion one changes the element\n * type, which remounts the subtree. That is deliberate. The obvious\n * alternative — keeping the motion component mounted and only withholding\n * its animation props — corrupts `toggle`-mode elements in both\n * directions, because motion only writes variant styles at mount or in\n * response to an animation:\n *\n * - props added in place (a drawer crossing into its mobile breakpoint\n * while closed) never get the `closed` transform, so the drawer sits\n * fully visible over the page;\n * - props removed in place strand whatever inline `transform` motion last\n * wrote, so a sidebar returning to desktop stays off-canvas.\n *\n * Fresh mounts are correct in both worlds, so remounting at the flip is\n * the fix. The flips are rare — a breakpoint cross, a test toggling the\n * provider — and a remount that resets local state beats a stale\n * transform that removes the navigation.\n */\n if (!runtime || !runtime.enabled || !enabled) {\n const Tag = as as React.ElementType;\n return (\n <Tag ref={ref} className={cn(fallbackClassName, className)} {...rest}>\n {children}\n </Tag>\n );\n }\n\n const Component =\n as === 'nav' ? runtime.Nav : as === 'span' ? runtime.Span : runtime.Div;\n\n const motionProps =\n mode === 'toggle'\n ? runtime.toggle(preset, open, custom)\n : runtime.presence(preset, custom);\n\n return (\n <Component ref={ref} className={className} {...motionProps} {...rest}>\n {children}\n </Component>\n );\n }\n);\n\nAnimated.displayName = 'Animated';\n\n// =============================================================================\n// AnimatedPresence\n// =============================================================================\n\n/**\n * Keeps unmounting children on screen long enough to animate out.\n *\n * Without a runtime this is a pass-through, so children disappear immediately —\n * which is exactly what they do today. Children rendered conditionally inside\n * it need a stable `key`.\n */\nexport function AnimatedPresence({\n children,\n initial,\n onExitComplete,\n}: MotionPresenceProps): React.JSX.Element {\n const runtime = useMotionRuntime();\n\n if (!runtime) {\n return <>{children}</>;\n }\n\n const { Presence } = runtime;\n return (\n <Presence initial={initial} onExitComplete={onExitComplete}>\n {children}\n </Presence>\n );\n}\n\nAnimatedPresence.displayName = 'AnimatedPresence';\n"]}
@@ -1,13 +0,0 @@
1
- /**
2
- * Extracts visible text from an HTML string without using regex.
3
- * Uses a simple character-by-character state machine to skip tags.
4
- * This avoids CodeQL false-positives associated with regex-based tag stripping.
5
- */
6
- declare function stripHtmlTags(html: string): string;
7
- /**
8
- * Returns true when an HTML string has no visible text content.
9
- * This is a visibility check, not a sanitizer — do NOT use for XSS prevention.
10
- */
11
- declare function isHtmlEmpty(html: string): boolean;
12
-
13
- export { isHtmlEmpty as i, stripHtmlTags as s };
@@ -1,13 +0,0 @@
1
- /**
2
- * Extracts visible text from an HTML string without using regex.
3
- * Uses a simple character-by-character state machine to skip tags.
4
- * This avoids CodeQL false-positives associated with regex-based tag stripping.
5
- */
6
- declare function stripHtmlTags(html: string): string;
7
- /**
8
- * Returns true when an HTML string has no visible text content.
9
- * This is a visibility check, not a sanitizer — do NOT use for XSS prevention.
10
- */
11
- declare function isHtmlEmpty(html: string): boolean;
12
-
13
- export { isHtmlEmpty as i, stripHtmlTags as s };