@epicbagel/saas-kit 0.0.0-stage → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (659) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +108 -2
  3. package/THIRD_PARTY_NOTICES.md +53 -0
  4. package/dist/chunk-23UMHZ4S.cjs +124 -0
  5. package/dist/chunk-2AU7ZRGX.cjs +96 -0
  6. package/dist/chunk-2BHI5ZWJ.cjs +117 -0
  7. package/dist/chunk-2BTDBZYN.cjs +154 -0
  8. package/dist/chunk-2HTYXBDU.cjs +34 -0
  9. package/dist/chunk-2HV2KKOE.cjs +38 -0
  10. package/dist/chunk-2KFZQJH5.cjs +29 -0
  11. package/dist/chunk-2XDFTB2W.cjs +35 -0
  12. package/dist/chunk-32Q4XOTU.cjs +204 -0
  13. package/dist/chunk-35YMAIEL.js +135 -0
  14. package/dist/chunk-373W6VAD.cjs +82 -0
  15. package/dist/chunk-3BZ4CQHW.js +94 -0
  16. package/dist/chunk-3OWGL4Q2.js +65 -0
  17. package/dist/chunk-3QT5VYZ3.js +141 -0
  18. package/dist/chunk-42RTTHND.js +29 -0
  19. package/dist/chunk-4HWCNRK4.js +117 -0
  20. package/dist/chunk-4LXN6GLZ.cjs +44 -0
  21. package/dist/chunk-4NN7EA3W.js +222 -0
  22. package/dist/chunk-62UTAG2C.js +152 -0
  23. package/dist/chunk-667ZCM4X.cjs +72 -0
  24. package/dist/chunk-6FC65AZQ.js +38 -0
  25. package/dist/chunk-6RVPQGYS.js +181 -0
  26. package/dist/chunk-6T2EULKN.cjs +42 -0
  27. package/dist/chunk-6V4XMQ6D.js +118 -0
  28. package/dist/chunk-7CRDYV3C.js +137 -0
  29. package/dist/chunk-B765DSRG.cjs +66 -0
  30. package/dist/chunk-BEJJN2SY.cjs +73 -0
  31. package/dist/chunk-BGLGRUPP.cjs +31 -0
  32. package/dist/chunk-CS7DM3NV.js +98 -0
  33. package/dist/chunk-CTYOW3V2.cjs +59 -0
  34. package/dist/chunk-D4ZL2OEQ.js +61 -0
  35. package/dist/chunk-DFB4ILN6.cjs +137 -0
  36. package/dist/chunk-E2TQMDO7.js +34 -0
  37. package/dist/chunk-EIY5LLSP.js +82 -0
  38. package/dist/chunk-EJP2L5QV.cjs +74 -0
  39. package/dist/chunk-ELPV44S6.cjs +44 -0
  40. package/dist/chunk-EOUO3ORO.cjs +244 -0
  41. package/dist/chunk-EZCKWTH7.js +204 -0
  42. package/dist/chunk-F366BHWH.js +116 -0
  43. package/dist/chunk-F73ONTCK.js +73 -0
  44. package/dist/chunk-F7JHSZNT.js +73 -0
  45. package/dist/chunk-FJLINIC6.js +48 -0
  46. package/dist/chunk-FLPYZNWZ.js +124 -0
  47. package/dist/chunk-FNDBM67K.cjs +61 -0
  48. package/dist/chunk-G54TQV2R.cjs +222 -0
  49. package/dist/chunk-G6SRSWXB.js +32 -0
  50. package/dist/chunk-G76JANB4.js +138 -0
  51. package/dist/chunk-GFG2R5BZ.js +132 -0
  52. package/dist/chunk-GL5CV4FF.js +59 -0
  53. package/dist/chunk-GMJWBGTJ.js +34 -0
  54. package/dist/chunk-GRZMUGT6.cjs +94 -0
  55. package/dist/chunk-GXHGMI3Z.cjs +48 -0
  56. package/dist/chunk-H2O6NMLZ.js +52 -0
  57. package/dist/chunk-H2UFRLLN.cjs +100 -0
  58. package/dist/chunk-H7TETFLB.js +39 -0
  59. package/dist/chunk-HAC32ALJ.js +244 -0
  60. package/dist/chunk-HQRWRRZJ.js +179 -0
  61. package/dist/chunk-HRLP4BHJ.js +510 -0
  62. package/dist/chunk-HYSWE75T.js +67 -0
  63. package/dist/chunk-HYTILYE5.js +31 -0
  64. package/dist/chunk-I5UQSBBZ.cjs +118 -0
  65. package/dist/chunk-I6GUOEBO.cjs +61 -0
  66. package/dist/chunk-IH3COANJ.cjs +510 -0
  67. package/dist/chunk-INNGGLMZ.js +44 -0
  68. package/dist/chunk-IQZLUT2Y.cjs +34 -0
  69. package/dist/chunk-IW4ZIXXG.js +66 -0
  70. package/dist/chunk-J3GQXM37.js +61 -0
  71. package/dist/chunk-J6NXDZR5.js +145 -0
  72. package/dist/chunk-JH4GAGOQ.cjs +34 -0
  73. package/dist/chunk-JZOBIPFC.js +96 -0
  74. package/dist/chunk-KENBU3NV.cjs +27 -0
  75. package/dist/chunk-KGFL3VWY.cjs +62 -0
  76. package/dist/chunk-KN4RPX35.js +36 -0
  77. package/dist/chunk-KWLSBTB2.cjs +34 -0
  78. package/dist/chunk-L4DH72UF.cjs +179 -0
  79. package/dist/chunk-LELBCBDT.cjs +52 -0
  80. package/dist/chunk-LELFPLTE.js +55 -0
  81. package/dist/chunk-LI5EOSQG.js +171 -0
  82. package/dist/chunk-LIE6W3QT.js +42 -0
  83. package/dist/chunk-MHYAVXOE.js +159 -0
  84. package/dist/chunk-MLHNYRFX.js +411 -0
  85. package/dist/chunk-NBUWGRQO.js +31 -0
  86. package/dist/chunk-NE3ZVJ6G.cjs +67 -0
  87. package/dist/chunk-NQK5ZWC7.cjs +31 -0
  88. package/dist/chunk-NW3OWKBN.js +57 -0
  89. package/dist/chunk-OICAYRVH.js +34 -0
  90. package/dist/chunk-PIU5SSUV.js +25 -0
  91. package/dist/chunk-PNWNU6JW.cjs +171 -0
  92. package/dist/chunk-PPX2VPGI.cjs +138 -0
  93. package/dist/chunk-PQUSJEXL.cjs +51 -0
  94. package/dist/chunk-QD63LB2F.js +62 -0
  95. package/dist/chunk-QMA3WVB7.js +51 -0
  96. package/dist/chunk-QNZYQLNP.js +125 -0
  97. package/dist/chunk-R35FT53G.cjs +25 -0
  98. package/dist/chunk-R3DQS6U4.cjs +135 -0
  99. package/dist/chunk-R4AIM3BQ.js +72 -0
  100. package/dist/chunk-R5L4CM6V.cjs +202 -0
  101. package/dist/chunk-RIWLAMME.cjs +159 -0
  102. package/dist/chunk-RRRD5EUI.js +202 -0
  103. package/dist/chunk-RSFEKQDR.cjs +181 -0
  104. package/dist/chunk-SGW4FWBX.cjs +411 -0
  105. package/dist/chunk-SUB4BAYE.cjs +73 -0
  106. package/dist/chunk-T2ZFSPE4.cjs +36 -0
  107. package/dist/chunk-THWIJG5C.js +73 -0
  108. package/dist/chunk-U2NES7VR.cjs +32 -0
  109. package/dist/chunk-V4LE2HWP.js +166 -0
  110. package/dist/chunk-V4YWTRLD.cjs +116 -0
  111. package/dist/chunk-V5SPFLKW.cjs +145 -0
  112. package/dist/chunk-V7542UGX.js +31 -0
  113. package/dist/chunk-VBPPFC7X.cjs +66 -0
  114. package/dist/chunk-VGTINL5Q.cjs +39 -0
  115. package/dist/chunk-VKIGJNJR.cjs +57 -0
  116. package/dist/chunk-VY5U4VGV.js +27 -0
  117. package/dist/chunk-W5HPHEE7.cjs +31 -0
  118. package/dist/chunk-W5I4FN7G.cjs +78 -0
  119. package/dist/chunk-WABCLRBR.cjs +65 -0
  120. package/dist/chunk-WDXEJDMO.cjs +141 -0
  121. package/dist/chunk-WNXVGUBF.cjs +40 -0
  122. package/dist/chunk-WQJKUKBL.cjs +125 -0
  123. package/dist/chunk-XABXUP6L.cjs +132 -0
  124. package/dist/chunk-XAPPU3MD.js +35 -0
  125. package/dist/chunk-XLIAY56V.cjs +55 -0
  126. package/dist/chunk-YEW65ASC.js +66 -0
  127. package/dist/chunk-YG7FBJRM.js +40 -0
  128. package/dist/chunk-YWAQRAXP.js +78 -0
  129. package/dist/chunk-YYFVG5A6.cjs +152 -0
  130. package/dist/chunk-Z45YKVAM.js +154 -0
  131. package/dist/chunk-ZAITUDYD.cjs +166 -0
  132. package/dist/chunk-ZRLUUZHK.js +32 -0
  133. package/dist/chunk-ZWZAAGQF.js +44 -0
  134. package/dist/hooks/use-copy-to-clipboard.cjs +7 -0
  135. package/dist/hooks/use-copy-to-clipboard.d.cts +12 -0
  136. package/dist/hooks/use-copy-to-clipboard.d.ts +12 -0
  137. package/dist/hooks/use-copy-to-clipboard.js +7 -0
  138. package/dist/hooks/use-layout-preference.cjs +51 -0
  139. package/dist/hooks/use-layout-preference.d.cts +10 -0
  140. package/dist/hooks/use-layout-preference.d.ts +10 -0
  141. package/dist/hooks/use-layout-preference.js +51 -0
  142. package/dist/hooks/use-mobile.cjs +7 -0
  143. package/dist/hooks/use-mobile.d.cts +3 -0
  144. package/dist/hooks/use-mobile.d.ts +3 -0
  145. package/dist/hooks/use-mobile.js +7 -0
  146. package/dist/lib/date-utils.cjs +15 -0
  147. package/dist/lib/date-utils.d.cts +16 -0
  148. package/dist/lib/date-utils.d.ts +16 -0
  149. package/dist/lib/date-utils.js +14 -0
  150. package/dist/lib/filter-types.cjs +161 -0
  151. package/dist/lib/filter-types.d.cts +60 -0
  152. package/dist/lib/filter-types.d.ts +60 -0
  153. package/dist/lib/filter-types.js +160 -0
  154. package/dist/lib/neutral-theme.cjs +238 -0
  155. package/dist/lib/neutral-theme.d.cts +92 -0
  156. package/dist/lib/neutral-theme.d.ts +92 -0
  157. package/dist/lib/neutral-theme.js +236 -0
  158. package/dist/lib/status-colors.cjs +18 -0
  159. package/dist/lib/status-colors.d.cts +76 -0
  160. package/dist/lib/status-colors.d.ts +76 -0
  161. package/dist/lib/status-colors.js +17 -0
  162. package/dist/lib/utils.cjs +9 -0
  163. package/dist/lib/utils.d.cts +9 -0
  164. package/dist/lib/utils.d.ts +9 -0
  165. package/dist/lib/utils.js +8 -0
  166. package/dist/primitives/action-dock.cjs +8 -0
  167. package/dist/primitives/action-dock.d.cts +10 -0
  168. package/dist/primitives/action-dock.d.ts +10 -0
  169. package/dist/primitives/action-dock.js +8 -0
  170. package/dist/primitives/activity-feed.cjs +177 -0
  171. package/dist/primitives/activity-feed.d.cts +78 -0
  172. package/dist/primitives/activity-feed.d.ts +78 -0
  173. package/dist/primitives/activity-feed.js +177 -0
  174. package/dist/primitives/activity-log.cjs +79 -0
  175. package/dist/primitives/activity-log.d.cts +55 -0
  176. package/dist/primitives/activity-log.d.ts +55 -0
  177. package/dist/primitives/activity-log.js +79 -0
  178. package/dist/primitives/agent-comment.cjs +39 -0
  179. package/dist/primitives/agent-comment.d.cts +33 -0
  180. package/dist/primitives/agent-comment.d.ts +33 -0
  181. package/dist/primitives/agent-comment.js +39 -0
  182. package/dist/primitives/alert-dialog.cjs +30 -0
  183. package/dist/primitives/alert-dialog.d.cts +23 -0
  184. package/dist/primitives/alert-dialog.d.ts +23 -0
  185. package/dist/primitives/alert-dialog.js +30 -0
  186. package/dist/primitives/alert.cjs +12 -0
  187. package/dist/primitives/alert.d.cts +26 -0
  188. package/dist/primitives/alert.d.ts +26 -0
  189. package/dist/primitives/alert.js +12 -0
  190. package/dist/primitives/anchor-target.cjs +13 -0
  191. package/dist/primitives/anchor-target.d.cts +7 -0
  192. package/dist/primitives/anchor-target.d.ts +7 -0
  193. package/dist/primitives/anchor-target.js +13 -0
  194. package/dist/primitives/anchor.cjs +35 -0
  195. package/dist/primitives/anchor.d.cts +16 -0
  196. package/dist/primitives/anchor.d.ts +16 -0
  197. package/dist/primitives/anchor.js +35 -0
  198. package/dist/primitives/archive-confirmation-dialog.cjs +50 -0
  199. package/dist/primitives/archive-confirmation-dialog.d.cts +12 -0
  200. package/dist/primitives/archive-confirmation-dialog.d.ts +12 -0
  201. package/dist/primitives/archive-confirmation-dialog.js +50 -0
  202. package/dist/primitives/aspect-ratio.cjs +8 -0
  203. package/dist/primitives/aspect-ratio.d.cts +6 -0
  204. package/dist/primitives/aspect-ratio.d.ts +6 -0
  205. package/dist/primitives/aspect-ratio.js +8 -0
  206. package/dist/primitives/attachment.cjs +25 -0
  207. package/dist/primitives/attachment.d.cts +28 -0
  208. package/dist/primitives/attachment.d.ts +28 -0
  209. package/dist/primitives/attachment.js +25 -0
  210. package/dist/primitives/avatar.cjs +12 -0
  211. package/dist/primitives/avatar.d.cts +22 -0
  212. package/dist/primitives/avatar.d.ts +22 -0
  213. package/dist/primitives/avatar.js +12 -0
  214. package/dist/primitives/badge.cjs +10 -0
  215. package/dist/primitives/badge.d.cts +27 -0
  216. package/dist/primitives/badge.d.ts +27 -0
  217. package/dist/primitives/badge.js +10 -0
  218. package/dist/primitives/board-view-internals.cjs +16 -0
  219. package/dist/primitives/board-view-internals.d.cts +33 -0
  220. package/dist/primitives/board-view-internals.d.ts +33 -0
  221. package/dist/primitives/board-view-internals.js +16 -0
  222. package/dist/primitives/board-view.cjs +108 -0
  223. package/dist/primitives/board-view.d.cts +39 -0
  224. package/dist/primitives/board-view.d.ts +39 -0
  225. package/dist/primitives/board-view.js +108 -0
  226. package/dist/primitives/browser-preview.cjs +62 -0
  227. package/dist/primitives/browser-preview.d.cts +41 -0
  228. package/dist/primitives/browser-preview.d.ts +41 -0
  229. package/dist/primitives/browser-preview.js +62 -0
  230. package/dist/primitives/bubble.cjs +14 -0
  231. package/dist/primitives/bubble.d.cts +21 -0
  232. package/dist/primitives/bubble.d.ts +21 -0
  233. package/dist/primitives/bubble.js +14 -0
  234. package/dist/primitives/button.cjs +10 -0
  235. package/dist/primitives/button.d.cts +32 -0
  236. package/dist/primitives/button.d.ts +32 -0
  237. package/dist/primitives/button.js +10 -0
  238. package/dist/primitives/calendar.cjs +11 -0
  239. package/dist/primitives/calendar.d.cts +13 -0
  240. package/dist/primitives/calendar.d.ts +13 -0
  241. package/dist/primitives/calendar.js +11 -0
  242. package/dist/primitives/call-card.cjs +195 -0
  243. package/dist/primitives/call-card.d.cts +86 -0
  244. package/dist/primitives/call-card.d.ts +86 -0
  245. package/dist/primitives/call-card.js +195 -0
  246. package/dist/primitives/callout.cjs +8 -0
  247. package/dist/primitives/callout.d.cts +41 -0
  248. package/dist/primitives/callout.d.ts +41 -0
  249. package/dist/primitives/callout.js +8 -0
  250. package/dist/primitives/card.cjs +18 -0
  251. package/dist/primitives/card.d.cts +55 -0
  252. package/dist/primitives/card.d.ts +55 -0
  253. package/dist/primitives/card.js +18 -0
  254. package/dist/primitives/chat.cjs +864 -0
  255. package/dist/primitives/chat.d.cts +326 -0
  256. package/dist/primitives/chat.d.ts +326 -0
  257. package/dist/primitives/chat.js +864 -0
  258. package/dist/primitives/checkbox.cjs +8 -0
  259. package/dist/primitives/checkbox.d.cts +20 -0
  260. package/dist/primitives/checkbox.d.ts +20 -0
  261. package/dist/primitives/checkbox.js +8 -0
  262. package/dist/primitives/chip-tabs.cjs +10 -0
  263. package/dist/primitives/chip-tabs.d.cts +39 -0
  264. package/dist/primitives/chip-tabs.d.ts +39 -0
  265. package/dist/primitives/chip-tabs.js +10 -0
  266. package/dist/primitives/code-block.cjs +56 -0
  267. package/dist/primitives/code-block.d.cts +35 -0
  268. package/dist/primitives/code-block.d.ts +35 -0
  269. package/dist/primitives/code-block.js +56 -0
  270. package/dist/primitives/collapsible-section.cjs +69 -0
  271. package/dist/primitives/collapsible-section.d.cts +24 -0
  272. package/dist/primitives/collapsible-section.d.ts +24 -0
  273. package/dist/primitives/collapsible-section.js +69 -0
  274. package/dist/primitives/collapsible.cjs +12 -0
  275. package/dist/primitives/collapsible.d.cts +14 -0
  276. package/dist/primitives/collapsible.d.ts +14 -0
  277. package/dist/primitives/collapsible.js +12 -0
  278. package/dist/primitives/compact-app-shell.cjs +40 -0
  279. package/dist/primitives/compact-app-shell.d.cts +12 -0
  280. package/dist/primitives/compact-app-shell.d.ts +12 -0
  281. package/dist/primitives/compact-app-shell.js +40 -0
  282. package/dist/primitives/compact-log.cjs +39 -0
  283. package/dist/primitives/compact-log.d.cts +19 -0
  284. package/dist/primitives/compact-log.d.ts +19 -0
  285. package/dist/primitives/compact-log.js +39 -0
  286. package/dist/primitives/confirm-bar.cjs +101 -0
  287. package/dist/primitives/confirm-bar.d.cts +60 -0
  288. package/dist/primitives/confirm-bar.d.ts +60 -0
  289. package/dist/primitives/confirm-bar.js +101 -0
  290. package/dist/primitives/connection-status-bar.cjs +243 -0
  291. package/dist/primitives/connection-status-bar.d.cts +52 -0
  292. package/dist/primitives/connection-status-bar.d.ts +52 -0
  293. package/dist/primitives/connection-status-bar.js +243 -0
  294. package/dist/primitives/connection.cjs +206 -0
  295. package/dist/primitives/connection.d.cts +126 -0
  296. package/dist/primitives/connection.d.ts +126 -0
  297. package/dist/primitives/connection.js +206 -0
  298. package/dist/primitives/contact-header.cjs +60 -0
  299. package/dist/primitives/contact-header.d.cts +54 -0
  300. package/dist/primitives/contact-header.d.ts +54 -0
  301. package/dist/primitives/contact-header.js +60 -0
  302. package/dist/primitives/copy-button.cjs +10 -0
  303. package/dist/primitives/copy-button.d.cts +21 -0
  304. package/dist/primitives/copy-button.d.ts +21 -0
  305. package/dist/primitives/copy-button.js +10 -0
  306. package/dist/primitives/count-badge.cjs +9 -0
  307. package/dist/primitives/count-badge.d.cts +21 -0
  308. package/dist/primitives/count-badge.d.ts +21 -0
  309. package/dist/primitives/count-badge.js +9 -0
  310. package/dist/primitives/decision-actions.cjs +66 -0
  311. package/dist/primitives/decision-actions.d.cts +31 -0
  312. package/dist/primitives/decision-actions.d.ts +31 -0
  313. package/dist/primitives/decision-actions.js +66 -0
  314. package/dist/primitives/definition-list.cjs +65 -0
  315. package/dist/primitives/definition-list.d.cts +23 -0
  316. package/dist/primitives/definition-list.d.ts +23 -0
  317. package/dist/primitives/definition-list.js +65 -0
  318. package/dist/primitives/delete-confirmation-dialog.cjs +11 -0
  319. package/dist/primitives/delete-confirmation-dialog.d.cts +23 -0
  320. package/dist/primitives/delete-confirmation-dialog.d.ts +23 -0
  321. package/dist/primitives/delete-confirmation-dialog.js +11 -0
  322. package/dist/primitives/dialog.cjs +26 -0
  323. package/dist/primitives/dialog.d.cts +44 -0
  324. package/dist/primitives/dialog.d.ts +44 -0
  325. package/dist/primitives/dialog.js +26 -0
  326. package/dist/primitives/drawer.cjs +26 -0
  327. package/dist/primitives/drawer.d.cts +36 -0
  328. package/dist/primitives/drawer.d.ts +36 -0
  329. package/dist/primitives/drawer.js +26 -0
  330. package/dist/primitives/dropdown-menu.cjs +36 -0
  331. package/dist/primitives/dropdown-menu.d.cts +34 -0
  332. package/dist/primitives/dropdown-menu.d.ts +34 -0
  333. package/dist/primitives/dropdown-menu.js +36 -0
  334. package/dist/primitives/editable-list.cjs +108 -0
  335. package/dist/primitives/editable-list.d.cts +23 -0
  336. package/dist/primitives/editable-list.d.ts +23 -0
  337. package/dist/primitives/editable-list.js +108 -0
  338. package/dist/primitives/empty-state.cjs +9 -0
  339. package/dist/primitives/empty-state.d.cts +54 -0
  340. package/dist/primitives/empty-state.d.ts +54 -0
  341. package/dist/primitives/empty-state.js +9 -0
  342. package/dist/primitives/eyebrow.cjs +8 -0
  343. package/dist/primitives/eyebrow.d.cts +21 -0
  344. package/dist/primitives/eyebrow.d.ts +21 -0
  345. package/dist/primitives/eyebrow.js +8 -0
  346. package/dist/primitives/feature-empty-state.cjs +133 -0
  347. package/dist/primitives/feature-empty-state.d.cts +42 -0
  348. package/dist/primitives/feature-empty-state.d.ts +42 -0
  349. package/dist/primitives/feature-empty-state.js +133 -0
  350. package/dist/primitives/field.cjs +260 -0
  351. package/dist/primitives/field.d.cts +43 -0
  352. package/dist/primitives/field.d.ts +43 -0
  353. package/dist/primitives/field.js +260 -0
  354. package/dist/primitives/file-dropzone.cjs +12 -0
  355. package/dist/primitives/file-dropzone.d.cts +36 -0
  356. package/dist/primitives/file-dropzone.d.ts +36 -0
  357. package/dist/primitives/file-dropzone.js +12 -0
  358. package/dist/primitives/filter-bar.cjs +20 -0
  359. package/dist/primitives/filter-bar.d.cts +25 -0
  360. package/dist/primitives/filter-bar.d.ts +25 -0
  361. package/dist/primitives/filter-bar.js +20 -0
  362. package/dist/primitives/flex-item.cjs +34 -0
  363. package/dist/primitives/flex-item.d.cts +18 -0
  364. package/dist/primitives/flex-item.d.ts +18 -0
  365. package/dist/primitives/flex-item.js +34 -0
  366. package/dist/primitives/grid.cjs +47 -0
  367. package/dist/primitives/grid.d.cts +18 -0
  368. package/dist/primitives/grid.d.ts +18 -0
  369. package/dist/primitives/grid.js +47 -0
  370. package/dist/primitives/heading.cjs +8 -0
  371. package/dist/primitives/heading.d.cts +28 -0
  372. package/dist/primitives/heading.d.ts +28 -0
  373. package/dist/primitives/heading.js +8 -0
  374. package/dist/primitives/hidden-control.cjs +13 -0
  375. package/dist/primitives/hidden-control.d.cts +7 -0
  376. package/dist/primitives/hidden-control.d.ts +7 -0
  377. package/dist/primitives/hidden-control.js +13 -0
  378. package/dist/primitives/icon.cjs +8 -0
  379. package/dist/primitives/icon.d.cts +22 -0
  380. package/dist/primitives/icon.d.ts +22 -0
  381. package/dist/primitives/icon.js +8 -0
  382. package/dist/primitives/image.cjs +52 -0
  383. package/dist/primitives/image.d.cts +21 -0
  384. package/dist/primitives/image.d.ts +21 -0
  385. package/dist/primitives/image.js +52 -0
  386. package/dist/primitives/inline-code.cjs +34 -0
  387. package/dist/primitives/inline-code.d.cts +15 -0
  388. package/dist/primitives/inline-code.d.ts +15 -0
  389. package/dist/primitives/inline-code.js +34 -0
  390. package/dist/primitives/input-group.cjs +21 -0
  391. package/dist/primitives/input-group.d.cts +20 -0
  392. package/dist/primitives/input-group.d.ts +20 -0
  393. package/dist/primitives/input-group.js +21 -0
  394. package/dist/primitives/input.cjs +8 -0
  395. package/dist/primitives/input.d.cts +23 -0
  396. package/dist/primitives/input.d.ts +23 -0
  397. package/dist/primitives/input.js +8 -0
  398. package/dist/primitives/inset.cjs +20 -0
  399. package/dist/primitives/inset.d.cts +12 -0
  400. package/dist/primitives/inset.d.ts +12 -0
  401. package/dist/primitives/inset.js +20 -0
  402. package/dist/primitives/interactive-card.cjs +11 -0
  403. package/dist/primitives/interactive-card.d.cts +68 -0
  404. package/dist/primitives/interactive-card.d.ts +68 -0
  405. package/dist/primitives/interactive-card.js +11 -0
  406. package/dist/primitives/item.cjs +197 -0
  407. package/dist/primitives/item.d.cts +28 -0
  408. package/dist/primitives/item.d.ts +28 -0
  409. package/dist/primitives/item.js +197 -0
  410. package/dist/primitives/label.cjs +8 -0
  411. package/dist/primitives/label.d.cts +12 -0
  412. package/dist/primitives/label.d.ts +12 -0
  413. package/dist/primitives/label.js +8 -0
  414. package/dist/primitives/lazy-markdown.cjs +10 -0
  415. package/dist/primitives/lazy-markdown.d.cts +20 -0
  416. package/dist/primitives/lazy-markdown.d.ts +20 -0
  417. package/dist/primitives/lazy-markdown.js +10 -0
  418. package/dist/primitives/line-break.cjs +10 -0
  419. package/dist/primitives/line-break.d.cts +6 -0
  420. package/dist/primitives/line-break.d.ts +6 -0
  421. package/dist/primitives/line-break.js +10 -0
  422. package/dist/primitives/list.cjs +68 -0
  423. package/dist/primitives/list.d.cts +35 -0
  424. package/dist/primitives/list.d.ts +35 -0
  425. package/dist/primitives/list.js +68 -0
  426. package/dist/primitives/load-more-button.cjs +10 -0
  427. package/dist/primitives/load-more-button.d.cts +42 -0
  428. package/dist/primitives/load-more-button.d.ts +42 -0
  429. package/dist/primitives/load-more-button.js +10 -0
  430. package/dist/primitives/loading.cjs +10 -0
  431. package/dist/primitives/loading.d.cts +5 -0
  432. package/dist/primitives/loading.d.ts +5 -0
  433. package/dist/primitives/loading.js +10 -0
  434. package/dist/primitives/markdown.cjs +17 -0
  435. package/dist/primitives/markdown.d.cts +32 -0
  436. package/dist/primitives/markdown.d.ts +32 -0
  437. package/dist/primitives/markdown.js +17 -0
  438. package/dist/primitives/marker.cjs +14 -0
  439. package/dist/primitives/marker.d.cts +15 -0
  440. package/dist/primitives/marker.d.ts +15 -0
  441. package/dist/primitives/marker.js +14 -0
  442. package/dist/primitives/message-scroller.cjs +26 -0
  443. package/dist/primitives/message-scroller.d.cts +16 -0
  444. package/dist/primitives/message-scroller.d.ts +16 -0
  445. package/dist/primitives/message-scroller.js +26 -0
  446. package/dist/primitives/message.cjs +18 -0
  447. package/dist/primitives/message.d.cts +13 -0
  448. package/dist/primitives/message.d.ts +13 -0
  449. package/dist/primitives/message.js +18 -0
  450. package/dist/primitives/native-select.cjs +33 -0
  451. package/dist/primitives/native-select.d.cts +15 -0
  452. package/dist/primitives/native-select.d.ts +15 -0
  453. package/dist/primitives/native-select.js +33 -0
  454. package/dist/primitives/page-header-actions.cjs +11 -0
  455. package/dist/primitives/page-header-actions.d.cts +49 -0
  456. package/dist/primitives/page-header-actions.d.ts +49 -0
  457. package/dist/primitives/page-header-actions.js +11 -0
  458. package/dist/primitives/page-header.cjs +72 -0
  459. package/dist/primitives/page-header.d.cts +40 -0
  460. package/dist/primitives/page-header.d.ts +40 -0
  461. package/dist/primitives/page-header.js +72 -0
  462. package/dist/primitives/page-shell.cjs +46 -0
  463. package/dist/primitives/page-shell.d.cts +44 -0
  464. package/dist/primitives/page-shell.d.ts +44 -0
  465. package/dist/primitives/page-shell.js +46 -0
  466. package/dist/primitives/page-tabs.cjs +63 -0
  467. package/dist/primitives/page-tabs.d.cts +28 -0
  468. package/dist/primitives/page-tabs.d.ts +28 -0
  469. package/dist/primitives/page-tabs.js +63 -0
  470. package/dist/primitives/panel-section.cjs +52 -0
  471. package/dist/primitives/panel-section.d.cts +20 -0
  472. package/dist/primitives/panel-section.d.ts +20 -0
  473. package/dist/primitives/panel-section.js +52 -0
  474. package/dist/primitives/person-avatar.cjs +57 -0
  475. package/dist/primitives/person-avatar.d.cts +33 -0
  476. package/dist/primitives/person-avatar.d.ts +33 -0
  477. package/dist/primitives/person-avatar.js +57 -0
  478. package/dist/primitives/phone.cjs +69 -0
  479. package/dist/primitives/phone.d.cts +50 -0
  480. package/dist/primitives/phone.d.ts +50 -0
  481. package/dist/primitives/phone.js +69 -0
  482. package/dist/primitives/popover.cjs +12 -0
  483. package/dist/primitives/popover.d.cts +14 -0
  484. package/dist/primitives/popover.d.ts +14 -0
  485. package/dist/primitives/popover.js +12 -0
  486. package/dist/primitives/progress.cjs +31 -0
  487. package/dist/primitives/progress.d.cts +6 -0
  488. package/dist/primitives/progress.d.ts +6 -0
  489. package/dist/primitives/progress.js +31 -0
  490. package/dist/primitives/quick-filters.cjs +10 -0
  491. package/dist/primitives/quick-filters.d.cts +36 -0
  492. package/dist/primitives/quick-filters.d.ts +36 -0
  493. package/dist/primitives/quick-filters.js +10 -0
  494. package/dist/primitives/radio-group.cjs +46 -0
  495. package/dist/primitives/radio-group.d.cts +7 -0
  496. package/dist/primitives/radio-group.d.ts +7 -0
  497. package/dist/primitives/radio-group.js +46 -0
  498. package/dist/primitives/resource-card.cjs +104 -0
  499. package/dist/primitives/resource-card.d.cts +93 -0
  500. package/dist/primitives/resource-card.d.ts +93 -0
  501. package/dist/primitives/resource-card.js +104 -0
  502. package/dist/primitives/resource-list.cjs +28 -0
  503. package/dist/primitives/resource-list.d.cts +103 -0
  504. package/dist/primitives/resource-list.d.ts +103 -0
  505. package/dist/primitives/resource-list.js +28 -0
  506. package/dist/primitives/responsive-dialog.cjs +142 -0
  507. package/dist/primitives/responsive-dialog.d.cts +56 -0
  508. package/dist/primitives/responsive-dialog.d.ts +56 -0
  509. package/dist/primitives/responsive-dialog.js +142 -0
  510. package/dist/primitives/responsive-view.cjs +29 -0
  511. package/dist/primitives/responsive-view.d.cts +10 -0
  512. package/dist/primitives/responsive-view.d.ts +10 -0
  513. package/dist/primitives/responsive-view.js +29 -0
  514. package/dist/primitives/rich-text.cjs +8 -0
  515. package/dist/primitives/rich-text.d.cts +14 -0
  516. package/dist/primitives/rich-text.d.ts +14 -0
  517. package/dist/primitives/rich-text.js +8 -0
  518. package/dist/primitives/scroll-area.cjs +10 -0
  519. package/dist/primitives/scroll-area.d.cts +13 -0
  520. package/dist/primitives/scroll-area.d.ts +13 -0
  521. package/dist/primitives/scroll-area.js +10 -0
  522. package/dist/primitives/section-header.cjs +51 -0
  523. package/dist/primitives/section-header.d.cts +22 -0
  524. package/dist/primitives/section-header.d.ts +22 -0
  525. package/dist/primitives/section-header.js +51 -0
  526. package/dist/primitives/section.cjs +39 -0
  527. package/dist/primitives/section.d.cts +22 -0
  528. package/dist/primitives/section.d.ts +22 -0
  529. package/dist/primitives/section.js +39 -0
  530. package/dist/primitives/select.cjs +26 -0
  531. package/dist/primitives/select.d.cts +25 -0
  532. package/dist/primitives/select.d.ts +25 -0
  533. package/dist/primitives/select.js +26 -0
  534. package/dist/primitives/selection-overlay.cjs +24 -0
  535. package/dist/primitives/selection-overlay.d.cts +7 -0
  536. package/dist/primitives/selection-overlay.d.ts +7 -0
  537. package/dist/primitives/selection-overlay.js +24 -0
  538. package/dist/primitives/sentiment-dot.cjs +15 -0
  539. package/dist/primitives/sentiment-dot.d.cts +42 -0
  540. package/dist/primitives/sentiment-dot.d.ts +42 -0
  541. package/dist/primitives/sentiment-dot.js +15 -0
  542. package/dist/primitives/separator.cjs +8 -0
  543. package/dist/primitives/separator.d.cts +9 -0
  544. package/dist/primitives/separator.d.ts +9 -0
  545. package/dist/primitives/separator.js +8 -0
  546. package/dist/primitives/sheet.cjs +27 -0
  547. package/dist/primitives/sheet.d.cts +48 -0
  548. package/dist/primitives/sheet.d.ts +48 -0
  549. package/dist/primitives/sheet.js +27 -0
  550. package/dist/primitives/skeleton.cjs +8 -0
  551. package/dist/primitives/skeleton.d.cts +15 -0
  552. package/dist/primitives/skeleton.d.ts +15 -0
  553. package/dist/primitives/skeleton.js +8 -0
  554. package/dist/primitives/spacer.cjs +20 -0
  555. package/dist/primitives/spacer.d.cts +11 -0
  556. package/dist/primitives/spacer.d.ts +11 -0
  557. package/dist/primitives/spacer.js +20 -0
  558. package/dist/primitives/spinner.cjs +23 -0
  559. package/dist/primitives/spinner.d.cts +6 -0
  560. package/dist/primitives/spinner.d.ts +6 -0
  561. package/dist/primitives/spinner.js +23 -0
  562. package/dist/primitives/split-action-button.cjs +95 -0
  563. package/dist/primitives/split-action-button.d.cts +41 -0
  564. package/dist/primitives/split-action-button.d.ts +41 -0
  565. package/dist/primitives/split-action-button.js +95 -0
  566. package/dist/primitives/stack.cjs +8 -0
  567. package/dist/primitives/stack.d.cts +63 -0
  568. package/dist/primitives/stack.d.ts +63 -0
  569. package/dist/primitives/stack.js +8 -0
  570. package/dist/primitives/status-badge.cjs +9 -0
  571. package/dist/primitives/status-badge.d.cts +20 -0
  572. package/dist/primitives/status-badge.d.ts +20 -0
  573. package/dist/primitives/status-badge.js +9 -0
  574. package/dist/primitives/status-icon-tile.cjs +32 -0
  575. package/dist/primitives/status-icon-tile.d.cts +12 -0
  576. package/dist/primitives/status-icon-tile.d.ts +12 -0
  577. package/dist/primitives/status-icon-tile.js +32 -0
  578. package/dist/primitives/status-icon.cjs +8 -0
  579. package/dist/primitives/status-icon.d.cts +18 -0
  580. package/dist/primitives/status-icon.d.ts +18 -0
  581. package/dist/primitives/status-icon.js +8 -0
  582. package/dist/primitives/status-panel.cjs +83 -0
  583. package/dist/primitives/status-panel.d.cts +25 -0
  584. package/dist/primitives/status-panel.d.ts +25 -0
  585. package/dist/primitives/status-panel.js +83 -0
  586. package/dist/primitives/suggestion.cjs +11 -0
  587. package/dist/primitives/suggestion.d.cts +19 -0
  588. package/dist/primitives/suggestion.d.ts +19 -0
  589. package/dist/primitives/suggestion.js +11 -0
  590. package/dist/primitives/switch-field.cjs +44 -0
  591. package/dist/primitives/switch-field.d.cts +17 -0
  592. package/dist/primitives/switch-field.d.ts +17 -0
  593. package/dist/primitives/switch-field.js +44 -0
  594. package/dist/primitives/switch.cjs +8 -0
  595. package/dist/primitives/switch.d.cts +6 -0
  596. package/dist/primitives/switch.d.ts +6 -0
  597. package/dist/primitives/switch.js +8 -0
  598. package/dist/primitives/tabs.cjs +14 -0
  599. package/dist/primitives/tabs.d.cts +36 -0
  600. package/dist/primitives/tabs.d.ts +36 -0
  601. package/dist/primitives/tabs.js +14 -0
  602. package/dist/primitives/tag-input.cjs +90 -0
  603. package/dist/primitives/tag-input.d.cts +13 -0
  604. package/dist/primitives/tag-input.d.ts +13 -0
  605. package/dist/primitives/tag-input.js +90 -0
  606. package/dist/primitives/text.cjs +8 -0
  607. package/dist/primitives/text.d.cts +51 -0
  608. package/dist/primitives/text.d.ts +51 -0
  609. package/dist/primitives/text.js +8 -0
  610. package/dist/primitives/textarea.cjs +8 -0
  611. package/dist/primitives/textarea.d.cts +12 -0
  612. package/dist/primitives/textarea.d.ts +12 -0
  613. package/dist/primitives/textarea.js +8 -0
  614. package/dist/primitives/thinking-screen.cjs +87 -0
  615. package/dist/primitives/thinking-screen.d.cts +46 -0
  616. package/dist/primitives/thinking-screen.d.ts +46 -0
  617. package/dist/primitives/thinking-screen.js +87 -0
  618. package/dist/primitives/timeline.cjs +13 -0
  619. package/dist/primitives/timeline.d.cts +54 -0
  620. package/dist/primitives/timeline.d.ts +54 -0
  621. package/dist/primitives/timeline.js +13 -0
  622. package/dist/primitives/toggle-group.cjs +51 -0
  623. package/dist/primitives/toggle-group.d.cts +18 -0
  624. package/dist/primitives/toggle-group.d.ts +18 -0
  625. package/dist/primitives/toggle-group.js +51 -0
  626. package/dist/primitives/toggle.cjs +10 -0
  627. package/dist/primitives/toggle.d.cts +15 -0
  628. package/dist/primitives/toggle.d.ts +15 -0
  629. package/dist/primitives/toggle.js +10 -0
  630. package/dist/primitives/tooltip.cjs +14 -0
  631. package/dist/primitives/tooltip.d.cts +9 -0
  632. package/dist/primitives/tooltip.d.ts +9 -0
  633. package/dist/primitives/tooltip.js +14 -0
  634. package/dist/primitives/trace.cjs +23 -0
  635. package/dist/primitives/trace.d.cts +22 -0
  636. package/dist/primitives/trace.d.ts +22 -0
  637. package/dist/primitives/trace.js +23 -0
  638. package/dist/primitives/voice-dictation-button.cjs +10 -0
  639. package/dist/primitives/voice-dictation-button.d.cts +41 -0
  640. package/dist/primitives/voice-dictation-button.d.ts +41 -0
  641. package/dist/primitives/voice-dictation-button.js +10 -0
  642. package/package.json +1366 -3
  643. package/src/styles/components/attachment.css +61 -0
  644. package/src/styles/components/bubble.css +81 -0
  645. package/src/styles/components/marker.css +27 -0
  646. package/src/styles/components/message-scroller.css +11 -0
  647. package/src/styles/components/message.css +29 -0
  648. package/src/styles/components.css +6 -0
  649. package/src/styles/globals.css +10 -0
  650. package/src/styles/keyframes.css +26 -0
  651. package/src/styles/palette.gen.css +150 -0
  652. package/src/styles/shadcn.css +631 -0
  653. package/src/styles/source.css +4 -0
  654. package/src/styles/tokens/base.css +36 -0
  655. package/src/styles/tokens/container.css +9 -0
  656. package/src/styles/tokens/forms.css +61 -0
  657. package/src/styles/tokens/theme.css +93 -0
  658. package/src/styles/tokens.css +17 -0
  659. package/src/styles/utilities.css +10 -0
@@ -0,0 +1,326 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
3
+ import { ReactNode } from 'react';
4
+ import { MarkdownComponents } from './markdown.cjs';
5
+ import 'react-markdown';
6
+ import './rich-text.cjs';
7
+
8
+ type ChatRole = "user" | "assistant";
9
+ type ChatAttachment = {
10
+ id: string;
11
+ name: string;
12
+ mediaType?: string;
13
+ size?: number;
14
+ url?: string;
15
+ state?: "idle" | "uploading" | "processing" | "error" | "done";
16
+ };
17
+ /** What opening a file on a message does: open it (a preview, a new tab) or download it. */
18
+ type ChatAttachmentAction = "open" | "download";
19
+ type ChatMessage = {
20
+ /**
21
+ * Stable for the life of the turn. A user turn under an id the thread hasn't
22
+ * seen counts as just arrived and is scrolled into view, so when an
23
+ * optimistic turn is replaced by its stored copy, keep the optimistic id.
24
+ */
25
+ id: string;
26
+ role: ChatRole;
27
+ /** Controls whether rich content hugs its contents or occupies the transcript width. */
28
+ width?: "content" | "full";
29
+ /** When this persisted turn was created. Enables grouped relative-time separators. */
30
+ createdAt?: string | number | Date;
31
+ /** Markdown body. Use `content` for custom rich children if you need them. */
32
+ text?: string;
33
+ /** Rich children — takes precedence over `text` for rendering. */
34
+ content?: ReactNode;
35
+ /** Files that belong to this turn. */
36
+ attachments?: ReadonlyArray<ChatAttachment>;
37
+ };
38
+ interface ChatThreadProps {
39
+ messages: ChatMessage[];
40
+ /** Show a running line (`pendingLabel`) at the end of the thread. */
41
+ pending?: boolean;
42
+ /** The running line while a reply is pending. Defaults to "Thinking…". */
43
+ pendingLabel?: string;
44
+ /** Accessible name of the scroll-to-latest button. Defaults to "Scroll to latest message". */
45
+ scrollButtonLabel?: string;
46
+ /** Shown on a message's file while it is still uploading. Defaults to "Uploading…". */
47
+ uploadingLabel?: string;
48
+ /** Max height for the scrollable thread. Defaults to "46vh". */
49
+ maxHeight?: string;
50
+ /** `workspace` uses a restrained central transcript with unboxed assistant turns. */
51
+ appearance?: "bubbles" | "workspace";
52
+ /** Rich content rendered as the final assistant artifact in the transcript. */
53
+ footer?: ReactNode;
54
+ /**
55
+ * Per-element overrides for Markdown message text (`h1`, `a`, `code`, …),
56
+ * such as a display treatment for document titles. Messages that pass rich
57
+ * `content` are unaffected.
58
+ */
59
+ markdownComponents?: MarkdownComponents;
60
+ /**
61
+ * Makes each file on a message a control: called with the file the reader
62
+ * picked, to fetch it, start a download or open a preview. Without it a
63
+ * message's files are listed but inert. Files staged in the composer are
64
+ * unaffected.
65
+ */
66
+ onOpenAttachment?: (attachment: ChatAttachment) => void;
67
+ /** What opening a message's file does, for its label and icon. Defaults to `"open"`. */
68
+ attachmentAction?: ChatAttachmentAction;
69
+ className?: string;
70
+ }
71
+ /**
72
+ * Scrollable message thread, built on shadcn's headless `MessageScroller`
73
+ * (streaming-aware auto-scroll, anchored turns) + the `Message`/`Bubble`
74
+ * primitives. Pass `messages` + `pending`.
75
+ *
76
+ * Every row is a `MessageScrollerItem` directly under the content, which is
77
+ * the one live log (`role="log"`): the scroller measures, anchors and tracks
78
+ * only its direct children. A user turn that arrives settles near the top with
79
+ * the end of the previous exchange peeking above it, and a scroll-to-latest
80
+ * button appears whenever the reader is away from the end. Turns with a
81
+ * `createdAt` are grouped under relative-time markers ("2 days ago"), and a
82
+ * pending reply shows as a running trace line, which the log announces as it
83
+ * appears.
84
+ */
85
+ declare const ChatThread: React$1.ForwardRefExoticComponent<ChatThreadProps & React$1.RefAttributes<HTMLDivElement>>;
86
+ interface ChatInputProps {
87
+ value: string;
88
+ onChange: (next: string) => void;
89
+ onSend: (text: string, attachments?: ReadonlyArray<ChatAttachment>) => void;
90
+ pending?: boolean;
91
+ disabled?: boolean;
92
+ placeholder?: string;
93
+ /**
94
+ * How tall the empty textarea starts: `sm` a single line (3rem), `md` a
95
+ * couple of lines (4.5rem), `lg` a short paragraph (8rem). It grows with its
96
+ * text from there, up to 12rem, then scrolls. Defaults to `md`.
97
+ */
98
+ size?: "sm" | "md" | "lg";
99
+ /** Shown on a staged file while it is still uploading. Defaults to "Uploading…". */
100
+ uploadingLabel?: string;
101
+ /** Show the inline voice dictation button. Defaults to true. */
102
+ voice?: boolean;
103
+ /** Title shown inside the voice overlay. */
104
+ voiceTitle?: string;
105
+ /** Language tag for voice dictation. */
106
+ voiceLang?: string;
107
+ /**
108
+ * Label for the submit button. When set, the button renders as a labelled
109
+ * primary action (`{label} →`) instead of the default icon-only send — use
110
+ * it to name the outcome, e.g. "Propose 3 times", "Create link", "Send".
111
+ */
112
+ submitLabel?: ReactNode;
113
+ /** Auto-focus the textarea on mount. */
114
+ autoFocus?: boolean;
115
+ /** Classes for the composer surface (the bordered input group). */
116
+ className?: string;
117
+ /** Imperative ref handle to focus the underlying textarea. */
118
+ inputRef?: React.RefObject<HTMLTextAreaElement | null>;
119
+ /** Files currently staged in the composer. */
120
+ attachments?: ReadonlyArray<ChatAttachment>;
121
+ /** Enables the `+` action menu and receives files selected by the user. */
122
+ onFilesSelected?: (files: File[]) => void | Promise<void>;
123
+ /** Removes a staged attachment. */
124
+ onRemoveAttachment?: (attachment: ChatAttachment) => void;
125
+ /** Native file-picker accept list. */
126
+ accept?: string;
127
+ /** Whether more than one file may be selected. Defaults to true. */
128
+ multiple?: boolean;
129
+ /** Label in the composer action menu. */
130
+ addFilesLabel?: string;
131
+ /** Visual density for the complete composer surface. */
132
+ appearance?: "default" | "spacious";
133
+ /** Quiet contextual copy between the composer controls. */
134
+ helperText?: ReactNode;
135
+ /** Privacy or visibility reassurance rendered below the composer. */
136
+ privacyNote?: ReactNode;
137
+ }
138
+ /**
139
+ * Compact text input: a form around one bordered input group, with any
140
+ * staged files on top, a textarea that grows with its text, then an action
141
+ * bar (the file menu and voice mic on the left, the submit button on the
142
+ * right). Always text-first; voice is a secondary affordance. Enter sends;
143
+ * Shift+Enter newlines, and Enter that commits an IME candidate never sends.
144
+ *
145
+ * The submit button is icon-only by default; pass `submitLabel` to name the
146
+ * outcome ("Propose 3 times", "Create link") — it then renders as a labelled
147
+ * primary action with a trailing arrow.
148
+ *
149
+ * For the "voice-first hero" empty state on mobile, the higher-level `<Chat>`
150
+ * primitive switches to a different layout (see VoiceHero below) — use
151
+ * `<Chat>` instead of composing `<ChatInput>` directly if you want
152
+ * device-aware default modes.
153
+ */
154
+ declare function ChatInput({ value, onChange, onSend, pending, disabled, placeholder, size, uploadingLabel, voice, voiceTitle, voiceLang, submitLabel, autoFocus, className, inputRef, attachments, onFilesSelected, onRemoveAttachment, accept, multiple, addFilesLabel, appearance, helperText, privacyNote, }: ChatInputProps): react_jsx_runtime.JSX.Element;
155
+ interface ChatProps {
156
+ /** Conversation messages. */
157
+ messages: ChatMessage[];
158
+ /**
159
+ * Fired when the user submits the input (or commits voice). The composer
160
+ * clears at once; if the returned promise rejects, Chat puts the text back
161
+ * so nothing is lost, then hands the rejection to `onSendError`. Reject only
162
+ * when the turn wasn't stored: a rejection invites the user to send again.
163
+ */
164
+ onSend: (text: string, attachments?: ReadonlyArray<ChatAttachment>) => void | Promise<void>;
165
+ /**
166
+ * Called with the reason when `onSend` rejects, after the text is back in
167
+ * the composer. Without it Chat reports the rejection through the global
168
+ * `reportError` (the console, and any monitoring listening for `error`
169
+ * events), so a failed send is never silent. Pass it when the app shows the
170
+ * failure itself, with `error`.
171
+ */
172
+ onSendError?: (error: unknown) => void;
173
+ /** Whether an in-flight request is pending. Disables input and shows a running line (`pendingLabel`). */
174
+ pending?: boolean;
175
+ /** The running line while a reply is pending. Defaults to "Thinking…". */
176
+ pendingLabel?: string;
177
+ /**
178
+ * Replaces the empty composer while its first message is in flight. Use for
179
+ * a deliberate handoff animation instead of leaving a disabled form behind.
180
+ */
181
+ emptyPendingContent?: ReactNode;
182
+ /** Inline error to surface below the input. */
183
+ error?: string | null;
184
+ /** Headline shown in the empty state. None by default. */
185
+ emptyTitle?: ReactNode;
186
+ /** Subheadline shown under the headline. */
187
+ emptySubtitle?: ReactNode;
188
+ /** Optional list of suggested starter prompts. Click → sends. */
189
+ examplePrompts?: ReadonlyArray<string>;
190
+ /** Label above the example prompts. Defaults to "Try". */
191
+ examplePromptsLabel?: string;
192
+ /**
193
+ * `chips` (the default) wrap onto as many lines as they need; `row` is one
194
+ * line that scrolls sideways, for a few short prompts where height is
195
+ * scarce; `cards` is a two-column grid of wrapping cards for longer prompts.
196
+ */
197
+ examplePromptsVariant?: "chips" | "row" | "cards";
198
+ /**
199
+ * Render an inline loading state (a running caption over placeholder
200
+ * suggestions) instead of the prompts. Use while async-fetching
201
+ * tailored suggestions so the user sees deliberate progress rather
202
+ * than placeholder copy that then swaps.
203
+ */
204
+ examplePromptsLoading?: boolean;
205
+ /**
206
+ * Caption shown in the loading state. Pass a single string for static,
207
+ * an array to rotate through. Defaults to "Loading suggestions…".
208
+ */
209
+ examplePromptsLoadingLabel?: string | ReadonlyArray<string>;
210
+ /** Render the empty state inline rather than as a hero block. */
211
+ compactEmptyState?: boolean;
212
+ /**
213
+ * Force the empty-state input mode. By default, mobile devices get
214
+ * the voice-first hero and desktop devices get the compact text
215
+ * input. Pass `"text"` to always start in text mode, or `"voice"` to
216
+ * always start in voice-first mode.
217
+ */
218
+ defaultMode?: "voice" | "text";
219
+ /** Placeholder text for the empty-state input. */
220
+ placeholder?: string;
221
+ /** Placeholder text once the conversation has started. */
222
+ activePlaceholder?: string;
223
+ /**
224
+ * Label for the submit button (empty-state input). When set, the button
225
+ * names the outcome (`{label} →`) instead of the icon-only send — e.g.
226
+ * "Propose 3 times". Once the conversation is active the input reverts to
227
+ * the compact icon send.
228
+ */
229
+ submitLabel?: ReactNode;
230
+ /** Files currently staged in the composer. */
231
+ attachments?: ReadonlyArray<ChatAttachment>;
232
+ /** Enables file selection from the composer action menu. */
233
+ onFilesSelected?: (files: File[]) => void | Promise<void>;
234
+ /** Removes a staged attachment. */
235
+ onRemoveAttachment?: (attachment: ChatAttachment) => void;
236
+ /** Native file-picker accept list. */
237
+ attachmentAccept?: string;
238
+ /** Label used for the file action in the composer menu. */
239
+ addFilesLabel?: string;
240
+ /** Shown on a file, staged or on a message, while it is still uploading. Defaults to "Uploading…". */
241
+ uploadingLabel?: string;
242
+ /** Visual treatment for both empty and active text composers. */
243
+ composerAppearance?: ChatInputProps["appearance"];
244
+ /** Quiet contextual copy inside the composer action row. */
245
+ composerHelperText?: ReactNode;
246
+ /** Privacy or visibility reassurance below the composer. */
247
+ composerPrivacyNote?: ReactNode;
248
+ /** Show a prominent file drop target before the empty-state composer. */
249
+ emptyFileDropzone?: boolean;
250
+ /** Primary copy inside the empty-state file drop target. */
251
+ emptyFileDropzoneLabel?: ReactNode;
252
+ /** Supporting file type or workflow copy inside the drop target. */
253
+ emptyFileDropzoneDescription?: ReactNode;
254
+ /** Enable voice dictation. Defaults to true. */
255
+ voice?: boolean;
256
+ /** Title shown inside the voice overlay. */
257
+ voiceTitle?: string;
258
+ /** Title shown inside the voice overlay in the active state. */
259
+ activeVoiceTitle?: string;
260
+ /** Language tag for voice dictation. */
261
+ voiceLang?: string;
262
+ /** Under the mic of the voice-first empty state. Defaults to "Tap to speak". */
263
+ voiceHeroLabel?: ReactNode;
264
+ /** The voice-first empty state's switch to the text composer. Defaults to "or type instead". */
265
+ voiceHeroSwitchLabel?: ReactNode;
266
+ /** Max height of the message thread once active. Defaults to "46vh". */
267
+ threadMaxHeight?: string;
268
+ /** Accessible name of the thread's scroll-to-latest button. Defaults to "Scroll to latest message". */
269
+ scrollButtonLabel?: string;
270
+ /** Alignment for the empty chat introduction. */
271
+ emptyAlign?: "start" | "center";
272
+ /** Optional visual above the empty chat title. */
273
+ emptyIcon?: ReactNode;
274
+ /** Supporting content shown after the empty-state composer. */
275
+ emptyFooter?: ReactNode;
276
+ /**
277
+ * `embedded` (the default) sits in a panel, a card or a drawer.
278
+ * `application` is embedded on desktop, but on a phone fills the viewport
279
+ * below a 4rem app header, with the composer docked at the bottom.
280
+ * `workspace` makes the conversation the whole surface on every screen,
281
+ * with a centred transcript and a bottom composer.
282
+ */
283
+ layout?: "embedded" | "application" | "workspace";
284
+ /** Rich assistant artifact rendered after the message transcript. */
285
+ threadFooter?: ReactNode;
286
+ /**
287
+ * Per-element overrides for Markdown message text in the thread (`h1`,
288
+ * `a`, `code`, …), such as a display treatment for document titles.
289
+ */
290
+ markdownComponents?: MarkdownComponents;
291
+ /**
292
+ * Makes each file on a message a control: called with the file the reader
293
+ * picked, to fetch it, start a download or open a preview. Without it a
294
+ * message's files are listed but inert.
295
+ */
296
+ onOpenAttachment?: (attachment: ChatAttachment) => void;
297
+ /** What opening a message's file does, for its label and icon. Defaults to `"open"`. */
298
+ attachmentAction?: ChatAttachmentAction;
299
+ className?: string;
300
+ }
301
+ interface ChatHandle {
302
+ /** Focus the input. */
303
+ focusInput: () => void;
304
+ /** Clear the input value. */
305
+ clearInput: () => void;
306
+ }
307
+ /**
308
+ * A conversational composer.
309
+ *
310
+ * **Empty state** — device-biased:
311
+ * - On mobile (`<md` viewport), defaults to a voice-first hero: a big
312
+ * tap-to-speak button and a small "or type instead" switcher.
313
+ * - On desktop, defaults to a compact text input with the mic as an
314
+ * accessory icon.
315
+ * - Users can switch modes via the small link.
316
+ * - Optional example prompts render as suggestions below the input.
317
+ *
318
+ * **Active state** (messages exist) — always the compact text input;
319
+ * the mic stays as an accessory icon.
320
+ *
321
+ * Stateless w.r.t. the conversation — pass `messages` and handle
322
+ * `onSend` from the parent. The input text is managed internally.
323
+ */
324
+ declare const Chat: React$1.ForwardRefExoticComponent<ChatProps & React$1.RefAttributes<ChatHandle>>;
325
+
326
+ export { Chat, type ChatAttachment, type ChatAttachmentAction, type ChatHandle, ChatInput, type ChatInputProps, type ChatMessage, type ChatProps, type ChatRole, ChatThread, type ChatThreadProps };
@@ -0,0 +1,326 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
3
+ import { ReactNode } from 'react';
4
+ import { MarkdownComponents } from './markdown.js';
5
+ import 'react-markdown';
6
+ import './rich-text.js';
7
+
8
+ type ChatRole = "user" | "assistant";
9
+ type ChatAttachment = {
10
+ id: string;
11
+ name: string;
12
+ mediaType?: string;
13
+ size?: number;
14
+ url?: string;
15
+ state?: "idle" | "uploading" | "processing" | "error" | "done";
16
+ };
17
+ /** What opening a file on a message does: open it (a preview, a new tab) or download it. */
18
+ type ChatAttachmentAction = "open" | "download";
19
+ type ChatMessage = {
20
+ /**
21
+ * Stable for the life of the turn. A user turn under an id the thread hasn't
22
+ * seen counts as just arrived and is scrolled into view, so when an
23
+ * optimistic turn is replaced by its stored copy, keep the optimistic id.
24
+ */
25
+ id: string;
26
+ role: ChatRole;
27
+ /** Controls whether rich content hugs its contents or occupies the transcript width. */
28
+ width?: "content" | "full";
29
+ /** When this persisted turn was created. Enables grouped relative-time separators. */
30
+ createdAt?: string | number | Date;
31
+ /** Markdown body. Use `content` for custom rich children if you need them. */
32
+ text?: string;
33
+ /** Rich children — takes precedence over `text` for rendering. */
34
+ content?: ReactNode;
35
+ /** Files that belong to this turn. */
36
+ attachments?: ReadonlyArray<ChatAttachment>;
37
+ };
38
+ interface ChatThreadProps {
39
+ messages: ChatMessage[];
40
+ /** Show a running line (`pendingLabel`) at the end of the thread. */
41
+ pending?: boolean;
42
+ /** The running line while a reply is pending. Defaults to "Thinking…". */
43
+ pendingLabel?: string;
44
+ /** Accessible name of the scroll-to-latest button. Defaults to "Scroll to latest message". */
45
+ scrollButtonLabel?: string;
46
+ /** Shown on a message's file while it is still uploading. Defaults to "Uploading…". */
47
+ uploadingLabel?: string;
48
+ /** Max height for the scrollable thread. Defaults to "46vh". */
49
+ maxHeight?: string;
50
+ /** `workspace` uses a restrained central transcript with unboxed assistant turns. */
51
+ appearance?: "bubbles" | "workspace";
52
+ /** Rich content rendered as the final assistant artifact in the transcript. */
53
+ footer?: ReactNode;
54
+ /**
55
+ * Per-element overrides for Markdown message text (`h1`, `a`, `code`, …),
56
+ * such as a display treatment for document titles. Messages that pass rich
57
+ * `content` are unaffected.
58
+ */
59
+ markdownComponents?: MarkdownComponents;
60
+ /**
61
+ * Makes each file on a message a control: called with the file the reader
62
+ * picked, to fetch it, start a download or open a preview. Without it a
63
+ * message's files are listed but inert. Files staged in the composer are
64
+ * unaffected.
65
+ */
66
+ onOpenAttachment?: (attachment: ChatAttachment) => void;
67
+ /** What opening a message's file does, for its label and icon. Defaults to `"open"`. */
68
+ attachmentAction?: ChatAttachmentAction;
69
+ className?: string;
70
+ }
71
+ /**
72
+ * Scrollable message thread, built on shadcn's headless `MessageScroller`
73
+ * (streaming-aware auto-scroll, anchored turns) + the `Message`/`Bubble`
74
+ * primitives. Pass `messages` + `pending`.
75
+ *
76
+ * Every row is a `MessageScrollerItem` directly under the content, which is
77
+ * the one live log (`role="log"`): the scroller measures, anchors and tracks
78
+ * only its direct children. A user turn that arrives settles near the top with
79
+ * the end of the previous exchange peeking above it, and a scroll-to-latest
80
+ * button appears whenever the reader is away from the end. Turns with a
81
+ * `createdAt` are grouped under relative-time markers ("2 days ago"), and a
82
+ * pending reply shows as a running trace line, which the log announces as it
83
+ * appears.
84
+ */
85
+ declare const ChatThread: React$1.ForwardRefExoticComponent<ChatThreadProps & React$1.RefAttributes<HTMLDivElement>>;
86
+ interface ChatInputProps {
87
+ value: string;
88
+ onChange: (next: string) => void;
89
+ onSend: (text: string, attachments?: ReadonlyArray<ChatAttachment>) => void;
90
+ pending?: boolean;
91
+ disabled?: boolean;
92
+ placeholder?: string;
93
+ /**
94
+ * How tall the empty textarea starts: `sm` a single line (3rem), `md` a
95
+ * couple of lines (4.5rem), `lg` a short paragraph (8rem). It grows with its
96
+ * text from there, up to 12rem, then scrolls. Defaults to `md`.
97
+ */
98
+ size?: "sm" | "md" | "lg";
99
+ /** Shown on a staged file while it is still uploading. Defaults to "Uploading…". */
100
+ uploadingLabel?: string;
101
+ /** Show the inline voice dictation button. Defaults to true. */
102
+ voice?: boolean;
103
+ /** Title shown inside the voice overlay. */
104
+ voiceTitle?: string;
105
+ /** Language tag for voice dictation. */
106
+ voiceLang?: string;
107
+ /**
108
+ * Label for the submit button. When set, the button renders as a labelled
109
+ * primary action (`{label} →`) instead of the default icon-only send — use
110
+ * it to name the outcome, e.g. "Propose 3 times", "Create link", "Send".
111
+ */
112
+ submitLabel?: ReactNode;
113
+ /** Auto-focus the textarea on mount. */
114
+ autoFocus?: boolean;
115
+ /** Classes for the composer surface (the bordered input group). */
116
+ className?: string;
117
+ /** Imperative ref handle to focus the underlying textarea. */
118
+ inputRef?: React.RefObject<HTMLTextAreaElement | null>;
119
+ /** Files currently staged in the composer. */
120
+ attachments?: ReadonlyArray<ChatAttachment>;
121
+ /** Enables the `+` action menu and receives files selected by the user. */
122
+ onFilesSelected?: (files: File[]) => void | Promise<void>;
123
+ /** Removes a staged attachment. */
124
+ onRemoveAttachment?: (attachment: ChatAttachment) => void;
125
+ /** Native file-picker accept list. */
126
+ accept?: string;
127
+ /** Whether more than one file may be selected. Defaults to true. */
128
+ multiple?: boolean;
129
+ /** Label in the composer action menu. */
130
+ addFilesLabel?: string;
131
+ /** Visual density for the complete composer surface. */
132
+ appearance?: "default" | "spacious";
133
+ /** Quiet contextual copy between the composer controls. */
134
+ helperText?: ReactNode;
135
+ /** Privacy or visibility reassurance rendered below the composer. */
136
+ privacyNote?: ReactNode;
137
+ }
138
+ /**
139
+ * Compact text input: a form around one bordered input group, with any
140
+ * staged files on top, a textarea that grows with its text, then an action
141
+ * bar (the file menu and voice mic on the left, the submit button on the
142
+ * right). Always text-first; voice is a secondary affordance. Enter sends;
143
+ * Shift+Enter newlines, and Enter that commits an IME candidate never sends.
144
+ *
145
+ * The submit button is icon-only by default; pass `submitLabel` to name the
146
+ * outcome ("Propose 3 times", "Create link") — it then renders as a labelled
147
+ * primary action with a trailing arrow.
148
+ *
149
+ * For the "voice-first hero" empty state on mobile, the higher-level `<Chat>`
150
+ * primitive switches to a different layout (see VoiceHero below) — use
151
+ * `<Chat>` instead of composing `<ChatInput>` directly if you want
152
+ * device-aware default modes.
153
+ */
154
+ declare function ChatInput({ value, onChange, onSend, pending, disabled, placeholder, size, uploadingLabel, voice, voiceTitle, voiceLang, submitLabel, autoFocus, className, inputRef, attachments, onFilesSelected, onRemoveAttachment, accept, multiple, addFilesLabel, appearance, helperText, privacyNote, }: ChatInputProps): react_jsx_runtime.JSX.Element;
155
+ interface ChatProps {
156
+ /** Conversation messages. */
157
+ messages: ChatMessage[];
158
+ /**
159
+ * Fired when the user submits the input (or commits voice). The composer
160
+ * clears at once; if the returned promise rejects, Chat puts the text back
161
+ * so nothing is lost, then hands the rejection to `onSendError`. Reject only
162
+ * when the turn wasn't stored: a rejection invites the user to send again.
163
+ */
164
+ onSend: (text: string, attachments?: ReadonlyArray<ChatAttachment>) => void | Promise<void>;
165
+ /**
166
+ * Called with the reason when `onSend` rejects, after the text is back in
167
+ * the composer. Without it Chat reports the rejection through the global
168
+ * `reportError` (the console, and any monitoring listening for `error`
169
+ * events), so a failed send is never silent. Pass it when the app shows the
170
+ * failure itself, with `error`.
171
+ */
172
+ onSendError?: (error: unknown) => void;
173
+ /** Whether an in-flight request is pending. Disables input and shows a running line (`pendingLabel`). */
174
+ pending?: boolean;
175
+ /** The running line while a reply is pending. Defaults to "Thinking…". */
176
+ pendingLabel?: string;
177
+ /**
178
+ * Replaces the empty composer while its first message is in flight. Use for
179
+ * a deliberate handoff animation instead of leaving a disabled form behind.
180
+ */
181
+ emptyPendingContent?: ReactNode;
182
+ /** Inline error to surface below the input. */
183
+ error?: string | null;
184
+ /** Headline shown in the empty state. None by default. */
185
+ emptyTitle?: ReactNode;
186
+ /** Subheadline shown under the headline. */
187
+ emptySubtitle?: ReactNode;
188
+ /** Optional list of suggested starter prompts. Click → sends. */
189
+ examplePrompts?: ReadonlyArray<string>;
190
+ /** Label above the example prompts. Defaults to "Try". */
191
+ examplePromptsLabel?: string;
192
+ /**
193
+ * `chips` (the default) wrap onto as many lines as they need; `row` is one
194
+ * line that scrolls sideways, for a few short prompts where height is
195
+ * scarce; `cards` is a two-column grid of wrapping cards for longer prompts.
196
+ */
197
+ examplePromptsVariant?: "chips" | "row" | "cards";
198
+ /**
199
+ * Render an inline loading state (a running caption over placeholder
200
+ * suggestions) instead of the prompts. Use while async-fetching
201
+ * tailored suggestions so the user sees deliberate progress rather
202
+ * than placeholder copy that then swaps.
203
+ */
204
+ examplePromptsLoading?: boolean;
205
+ /**
206
+ * Caption shown in the loading state. Pass a single string for static,
207
+ * an array to rotate through. Defaults to "Loading suggestions…".
208
+ */
209
+ examplePromptsLoadingLabel?: string | ReadonlyArray<string>;
210
+ /** Render the empty state inline rather than as a hero block. */
211
+ compactEmptyState?: boolean;
212
+ /**
213
+ * Force the empty-state input mode. By default, mobile devices get
214
+ * the voice-first hero and desktop devices get the compact text
215
+ * input. Pass `"text"` to always start in text mode, or `"voice"` to
216
+ * always start in voice-first mode.
217
+ */
218
+ defaultMode?: "voice" | "text";
219
+ /** Placeholder text for the empty-state input. */
220
+ placeholder?: string;
221
+ /** Placeholder text once the conversation has started. */
222
+ activePlaceholder?: string;
223
+ /**
224
+ * Label for the submit button (empty-state input). When set, the button
225
+ * names the outcome (`{label} →`) instead of the icon-only send — e.g.
226
+ * "Propose 3 times". Once the conversation is active the input reverts to
227
+ * the compact icon send.
228
+ */
229
+ submitLabel?: ReactNode;
230
+ /** Files currently staged in the composer. */
231
+ attachments?: ReadonlyArray<ChatAttachment>;
232
+ /** Enables file selection from the composer action menu. */
233
+ onFilesSelected?: (files: File[]) => void | Promise<void>;
234
+ /** Removes a staged attachment. */
235
+ onRemoveAttachment?: (attachment: ChatAttachment) => void;
236
+ /** Native file-picker accept list. */
237
+ attachmentAccept?: string;
238
+ /** Label used for the file action in the composer menu. */
239
+ addFilesLabel?: string;
240
+ /** Shown on a file, staged or on a message, while it is still uploading. Defaults to "Uploading…". */
241
+ uploadingLabel?: string;
242
+ /** Visual treatment for both empty and active text composers. */
243
+ composerAppearance?: ChatInputProps["appearance"];
244
+ /** Quiet contextual copy inside the composer action row. */
245
+ composerHelperText?: ReactNode;
246
+ /** Privacy or visibility reassurance below the composer. */
247
+ composerPrivacyNote?: ReactNode;
248
+ /** Show a prominent file drop target before the empty-state composer. */
249
+ emptyFileDropzone?: boolean;
250
+ /** Primary copy inside the empty-state file drop target. */
251
+ emptyFileDropzoneLabel?: ReactNode;
252
+ /** Supporting file type or workflow copy inside the drop target. */
253
+ emptyFileDropzoneDescription?: ReactNode;
254
+ /** Enable voice dictation. Defaults to true. */
255
+ voice?: boolean;
256
+ /** Title shown inside the voice overlay. */
257
+ voiceTitle?: string;
258
+ /** Title shown inside the voice overlay in the active state. */
259
+ activeVoiceTitle?: string;
260
+ /** Language tag for voice dictation. */
261
+ voiceLang?: string;
262
+ /** Under the mic of the voice-first empty state. Defaults to "Tap to speak". */
263
+ voiceHeroLabel?: ReactNode;
264
+ /** The voice-first empty state's switch to the text composer. Defaults to "or type instead". */
265
+ voiceHeroSwitchLabel?: ReactNode;
266
+ /** Max height of the message thread once active. Defaults to "46vh". */
267
+ threadMaxHeight?: string;
268
+ /** Accessible name of the thread's scroll-to-latest button. Defaults to "Scroll to latest message". */
269
+ scrollButtonLabel?: string;
270
+ /** Alignment for the empty chat introduction. */
271
+ emptyAlign?: "start" | "center";
272
+ /** Optional visual above the empty chat title. */
273
+ emptyIcon?: ReactNode;
274
+ /** Supporting content shown after the empty-state composer. */
275
+ emptyFooter?: ReactNode;
276
+ /**
277
+ * `embedded` (the default) sits in a panel, a card or a drawer.
278
+ * `application` is embedded on desktop, but on a phone fills the viewport
279
+ * below a 4rem app header, with the composer docked at the bottom.
280
+ * `workspace` makes the conversation the whole surface on every screen,
281
+ * with a centred transcript and a bottom composer.
282
+ */
283
+ layout?: "embedded" | "application" | "workspace";
284
+ /** Rich assistant artifact rendered after the message transcript. */
285
+ threadFooter?: ReactNode;
286
+ /**
287
+ * Per-element overrides for Markdown message text in the thread (`h1`,
288
+ * `a`, `code`, …), such as a display treatment for document titles.
289
+ */
290
+ markdownComponents?: MarkdownComponents;
291
+ /**
292
+ * Makes each file on a message a control: called with the file the reader
293
+ * picked, to fetch it, start a download or open a preview. Without it a
294
+ * message's files are listed but inert.
295
+ */
296
+ onOpenAttachment?: (attachment: ChatAttachment) => void;
297
+ /** What opening a message's file does, for its label and icon. Defaults to `"open"`. */
298
+ attachmentAction?: ChatAttachmentAction;
299
+ className?: string;
300
+ }
301
+ interface ChatHandle {
302
+ /** Focus the input. */
303
+ focusInput: () => void;
304
+ /** Clear the input value. */
305
+ clearInput: () => void;
306
+ }
307
+ /**
308
+ * A conversational composer.
309
+ *
310
+ * **Empty state** — device-biased:
311
+ * - On mobile (`<md` viewport), defaults to a voice-first hero: a big
312
+ * tap-to-speak button and a small "or type instead" switcher.
313
+ * - On desktop, defaults to a compact text input with the mic as an
314
+ * accessory icon.
315
+ * - Users can switch modes via the small link.
316
+ * - Optional example prompts render as suggestions below the input.
317
+ *
318
+ * **Active state** (messages exist) — always the compact text input;
319
+ * the mic stays as an accessory icon.
320
+ *
321
+ * Stateless w.r.t. the conversation — pass `messages` and handle
322
+ * `onSend` from the parent. The input text is managed internally.
323
+ */
324
+ declare const Chat: React$1.ForwardRefExoticComponent<ChatProps & React$1.RefAttributes<ChatHandle>>;
325
+
326
+ export { Chat, type ChatAttachment, type ChatAttachmentAction, type ChatHandle, ChatInput, type ChatInputProps, type ChatMessage, type ChatProps, type ChatRole, ChatThread, type ChatThreadProps };