veryfront 0.1.996 → 0.1.998

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 (380) hide show
  1. package/esm/cli/templates/manifest.js +1 -1
  2. package/esm/deno.d.ts +8 -0
  3. package/esm/deno.js +12 -3
  4. package/esm/deps/esm.sh/react-dom@19.2.4.d.ts +2 -0
  5. package/esm/deps/esm.sh/react-dom@19.2.4.d.ts.map +1 -0
  6. package/esm/deps/esm.sh/react-dom@19.2.4.js +3 -0
  7. package/esm/react/react-dom.d.ts +3 -0
  8. package/esm/react/react-dom.d.ts.map +1 -0
  9. package/esm/react/react-dom.js +2 -0
  10. package/esm/src/agent/ag-ui/host-support.d.ts.map +1 -1
  11. package/esm/src/agent/ag-ui/host-support.js +12 -0
  12. package/esm/src/agent/react/index.d.ts +4 -2
  13. package/esm/src/agent/react/index.d.ts.map +1 -1
  14. package/esm/src/agent/react/index.js +2 -1
  15. package/esm/src/agent/react/use-agent-metadata.d.ts +5 -0
  16. package/esm/src/agent/react/use-agent-metadata.d.ts.map +1 -1
  17. package/esm/src/agent/react/use-agent-metadata.js +18 -9
  18. package/esm/src/agent/react/use-agents.d.ts +33 -0
  19. package/esm/src/agent/react/use-agents.d.ts.map +1 -0
  20. package/esm/src/agent/react/use-agents.js +72 -0
  21. package/esm/src/agent/react/use-chat/index.d.ts +1 -1
  22. package/esm/src/agent/react/use-chat/index.d.ts.map +1 -1
  23. package/esm/src/agent/react/use-chat/types.d.ts +3 -2
  24. package/esm/src/agent/react/use-chat/types.d.ts.map +1 -1
  25. package/esm/src/agent/react/use-chat/use-chat.d.ts +12 -1
  26. package/esm/src/agent/react/use-chat/use-chat.d.ts.map +1 -1
  27. package/esm/src/agent/react/use-chat/use-chat.js +47 -7
  28. package/esm/src/agent/react/use-chat/utils.d.ts.map +1 -1
  29. package/esm/src/agent/react/use-chat/utils.js +4 -0
  30. package/esm/src/agent/runtime/message-adapter.d.ts.map +1 -1
  31. package/esm/src/agent/runtime/message-adapter.js +3 -1
  32. package/esm/src/agent/runtime/text-generation-runtime-message-converter.d.ts.map +1 -1
  33. package/esm/src/agent/runtime/text-generation-runtime-message-converter.js +6 -2
  34. package/esm/src/chat/index.d.ts +17 -7
  35. package/esm/src/chat/index.d.ts.map +1 -1
  36. package/esm/src/chat/index.js +33 -7
  37. package/esm/src/chat/protocol.d.ts +13 -1
  38. package/esm/src/chat/protocol.d.ts.map +1 -1
  39. package/esm/src/chat/upload-handler.d.ts +55 -0
  40. package/esm/src/chat/upload-handler.d.ts.map +1 -0
  41. package/esm/src/chat/upload-handler.js +180 -0
  42. package/esm/src/discovery/import-rewriter.d.ts +1 -1
  43. package/esm/src/discovery/import-rewriter.d.ts.map +1 -1
  44. package/esm/src/discovery/import-rewriter.js +2 -0
  45. package/esm/src/discovery/transpiler.d.ts.map +1 -1
  46. package/esm/src/discovery/transpiler.js +2 -0
  47. package/esm/src/react/components/chat/agent-card.d.ts +84 -11
  48. package/esm/src/react/components/chat/agent-card.d.ts.map +1 -1
  49. package/esm/src/react/components/chat/agent-card.js +151 -57
  50. package/esm/src/react/components/chat/agent-picker.d.ts +166 -0
  51. package/esm/src/react/components/chat/agent-picker.d.ts.map +1 -0
  52. package/esm/src/react/components/chat/agent-picker.js +183 -0
  53. package/esm/src/react/components/chat/chat/components/animations.js +1 -1
  54. package/esm/src/react/components/chat/chat/components/attachment-pill.d.ts +125 -3
  55. package/esm/src/react/components/chat/chat/components/attachment-pill.d.ts.map +1 -1
  56. package/esm/src/react/components/chat/chat/components/attachment-pill.js +209 -25
  57. package/esm/src/react/components/chat/chat/components/attachments-panel.d.ts +149 -0
  58. package/esm/src/react/components/chat/chat/components/attachments-panel.d.ts.map +1 -0
  59. package/esm/src/react/components/chat/chat/components/attachments-panel.js +187 -0
  60. package/esm/src/react/components/chat/chat/components/branch-picker.d.ts +13 -2
  61. package/esm/src/react/components/chat/chat/components/branch-picker.d.ts.map +1 -1
  62. package/esm/src/react/components/chat/chat/components/branch-picker.js +6 -8
  63. package/esm/src/react/components/chat/chat/components/chat-messages-skeleton.d.ts +20 -0
  64. package/esm/src/react/components/chat/chat/components/chat-messages-skeleton.d.ts.map +1 -0
  65. package/esm/src/react/components/chat/chat/components/chat-messages-skeleton.js +31 -0
  66. package/esm/src/react/components/chat/chat/components/code-block.d.ts +9 -1
  67. package/esm/src/react/components/chat/chat/components/code-block.d.ts.map +1 -1
  68. package/esm/src/react/components/chat/chat/components/code-block.js +14 -6
  69. package/esm/src/react/components/chat/chat/components/drop-zone.d.ts +11 -4
  70. package/esm/src/react/components/chat/chat/components/drop-zone.d.ts.map +1 -1
  71. package/esm/src/react/components/chat/chat/components/drop-zone.js +10 -8
  72. package/esm/src/react/components/chat/chat/components/empty-state.d.ts +2 -1
  73. package/esm/src/react/components/chat/chat/components/empty-state.d.ts.map +1 -1
  74. package/esm/src/react/components/chat/chat/components/empty-state.js +7 -8
  75. package/esm/src/react/components/chat/chat/components/inference-badge.d.ts +6 -2
  76. package/esm/src/react/components/chat/chat/components/inference-badge.d.ts.map +1 -1
  77. package/esm/src/react/components/chat/chat/components/inference-badge.js +5 -4
  78. package/esm/src/react/components/chat/chat/components/inline-citation.d.ts +9 -1
  79. package/esm/src/react/components/chat/chat/components/inline-citation.d.ts.map +1 -1
  80. package/esm/src/react/components/chat/chat/components/inline-citation.js +19 -20
  81. package/esm/src/react/components/chat/chat/components/message-actions.d.ts +28 -5
  82. package/esm/src/react/components/chat/chat/components/message-actions.d.ts.map +1 -1
  83. package/esm/src/react/components/chat/chat/components/message-actions.js +24 -36
  84. package/esm/src/react/components/chat/chat/components/message-edit-form.d.ts +7 -2
  85. package/esm/src/react/components/chat/chat/components/message-edit-form.d.ts.map +1 -1
  86. package/esm/src/react/components/chat/chat/components/message-edit-form.js +5 -5
  87. package/esm/src/react/components/chat/chat/components/message-feedback.d.ts +11 -1
  88. package/esm/src/react/components/chat/chat/components/message-feedback.d.ts.map +1 -1
  89. package/esm/src/react/components/chat/chat/components/message-feedback.js +9 -11
  90. package/esm/src/react/components/chat/chat/components/quick-actions.d.ts.map +1 -1
  91. package/esm/src/react/components/chat/chat/components/quick-actions.js +3 -1
  92. package/esm/src/react/components/chat/chat/components/reasoning.d.ts +66 -3
  93. package/esm/src/react/components/chat/chat/components/reasoning.d.ts.map +1 -1
  94. package/esm/src/react/components/chat/chat/components/reasoning.js +95 -21
  95. package/esm/src/react/components/chat/chat/components/sidebar.d.ts +178 -12
  96. package/esm/src/react/components/chat/chat/components/sidebar.d.ts.map +1 -1
  97. package/esm/src/react/components/chat/chat/components/sidebar.js +228 -45
  98. package/esm/src/react/components/chat/chat/components/skill-badge.d.ts +6 -1
  99. package/esm/src/react/components/chat/chat/components/skill-badge.d.ts.map +1 -1
  100. package/esm/src/react/components/chat/chat/components/skill-badge.js +6 -5
  101. package/esm/src/react/components/chat/chat/components/skill-tool.d.ts +37 -0
  102. package/esm/src/react/components/chat/chat/components/skill-tool.d.ts.map +1 -0
  103. package/esm/src/react/components/chat/chat/components/skill-tool.js +46 -0
  104. package/esm/src/react/components/chat/chat/components/sources.d.ts +55 -3
  105. package/esm/src/react/components/chat/chat/components/sources.d.ts.map +1 -1
  106. package/esm/src/react/components/chat/chat/components/sources.js +50 -16
  107. package/esm/src/react/components/chat/chat/components/step-indicator.d.ts +42 -3
  108. package/esm/src/react/components/chat/chat/components/step-indicator.d.ts.map +1 -1
  109. package/esm/src/react/components/chat/chat/components/step-indicator.js +55 -12
  110. package/esm/src/react/components/chat/chat/components/tab-switcher.d.ts +1 -1
  111. package/esm/src/react/components/chat/chat/components/tab-switcher.d.ts.map +1 -1
  112. package/esm/src/react/components/chat/chat/components/tab-switcher.js +3 -3
  113. package/esm/src/react/components/chat/chat/components/tool-ui.d.ts +96 -3
  114. package/esm/src/react/components/chat/chat/components/tool-ui.d.ts.map +1 -1
  115. package/esm/src/react/components/chat/chat/components/tool-ui.js +158 -36
  116. package/esm/src/react/components/chat/chat/composition/api.d.ts +4 -2
  117. package/esm/src/react/components/chat/chat/composition/api.d.ts.map +1 -1
  118. package/esm/src/react/components/chat/chat/composition/api.js +4 -2
  119. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts +112 -5
  120. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts.map +1 -1
  121. package/esm/src/react/components/chat/chat/composition/chat-composer.js +251 -61
  122. package/esm/src/react/components/chat/chat/composition/chat-empty-state.d.ts +78 -0
  123. package/esm/src/react/components/chat/chat/composition/chat-empty-state.d.ts.map +1 -0
  124. package/esm/src/react/components/chat/chat/composition/chat-empty-state.js +63 -0
  125. package/esm/src/react/components/chat/chat/composition/chat-empty.d.ts +4 -1
  126. package/esm/src/react/components/chat/chat/composition/chat-empty.d.ts.map +1 -1
  127. package/esm/src/react/components/chat/chat/composition/chat-empty.js +11 -10
  128. package/esm/src/react/components/chat/chat/composition/chat-message-list.d.ts +11 -3
  129. package/esm/src/react/components/chat/chat/composition/chat-message-list.d.ts.map +1 -1
  130. package/esm/src/react/components/chat/chat/composition/chat-message-list.js +81 -111
  131. package/esm/src/react/components/chat/chat/composition/chat-root.d.ts +4 -0
  132. package/esm/src/react/components/chat/chat/composition/chat-root.d.ts.map +1 -1
  133. package/esm/src/react/components/chat/chat/composition/chat-root.js +3 -1
  134. package/esm/src/react/components/chat/chat/composition/error-banner.d.ts +4 -0
  135. package/esm/src/react/components/chat/chat/composition/error-banner.d.ts.map +1 -1
  136. package/esm/src/react/components/chat/chat/composition/error-banner.js +10 -7
  137. package/esm/src/react/components/chat/chat/composition/message.d.ts +123 -5
  138. package/esm/src/react/components/chat/chat/composition/message.d.ts.map +1 -1
  139. package/esm/src/react/components/chat/chat/composition/message.js +332 -53
  140. package/esm/src/react/components/chat/chat/composition/model-avatar.d.ts +6 -1
  141. package/esm/src/react/components/chat/chat/composition/model-avatar.d.ts.map +1 -1
  142. package/esm/src/react/components/chat/chat/composition/model-avatar.js +3 -4
  143. package/esm/src/react/components/chat/chat/composition/pending-message.d.ts +31 -0
  144. package/esm/src/react/components/chat/chat/composition/pending-message.d.ts.map +1 -0
  145. package/esm/src/react/components/chat/chat/composition/pending-message.js +31 -0
  146. package/esm/src/react/components/chat/chat/contexts/chat-context.d.ts +4 -0
  147. package/esm/src/react/components/chat/chat/contexts/chat-context.d.ts.map +1 -1
  148. package/esm/src/react/components/chat/chat/contexts/composer-context.d.ts +1 -0
  149. package/esm/src/react/components/chat/chat/contexts/composer-context.d.ts.map +1 -1
  150. package/esm/src/react/components/chat/chat/contexts/conversations-context.d.ts +29 -0
  151. package/esm/src/react/components/chat/chat/contexts/conversations-context.d.ts.map +1 -0
  152. package/esm/src/react/components/chat/chat/contexts/conversations-context.js +39 -0
  153. package/esm/src/react/components/chat/chat/contexts/index.d.ts +1 -1
  154. package/esm/src/react/components/chat/chat/contexts/index.d.ts.map +1 -1
  155. package/esm/src/react/components/chat/chat/contexts/index.js +1 -1
  156. package/esm/src/react/components/chat/chat/contexts/message-context.d.ts +2 -0
  157. package/esm/src/react/components/chat/chat/contexts/message-context.d.ts.map +1 -1
  158. package/esm/src/react/components/chat/chat/hooks/use-clipboard.d.ts +10 -0
  159. package/esm/src/react/components/chat/chat/hooks/use-clipboard.d.ts.map +1 -0
  160. package/esm/src/react/components/chat/chat/hooks/use-clipboard.js +34 -0
  161. package/esm/src/react/components/chat/chat/hooks/use-conversation.d.ts +21 -0
  162. package/esm/src/react/components/chat/chat/hooks/use-conversation.d.ts.map +1 -0
  163. package/esm/src/react/components/chat/chat/hooks/use-conversation.js +54 -0
  164. package/esm/src/react/components/chat/chat/hooks/use-conversations.d.ts +67 -0
  165. package/esm/src/react/components/chat/chat/hooks/use-conversations.d.ts.map +1 -0
  166. package/esm/src/react/components/chat/chat/hooks/use-conversations.js +317 -0
  167. package/esm/src/react/components/chat/chat/hooks/use-drop-zone.d.ts +27 -0
  168. package/esm/src/react/components/chat/chat/hooks/use-drop-zone.d.ts.map +1 -0
  169. package/esm/src/react/components/chat/chat/hooks/use-drop-zone.js +50 -0
  170. package/esm/src/react/components/chat/chat/hooks/use-stick-to-bottom.d.ts +49 -0
  171. package/esm/src/react/components/chat/chat/hooks/use-stick-to-bottom.d.ts.map +1 -0
  172. package/esm/src/react/components/chat/chat/hooks/use-stick-to-bottom.js +120 -0
  173. package/esm/src/react/components/chat/chat/hooks/use-upload.d.ts +34 -0
  174. package/esm/src/react/components/chat/chat/hooks/use-upload.d.ts.map +1 -0
  175. package/esm/src/react/components/chat/chat/hooks/use-upload.js +147 -0
  176. package/esm/src/react/components/chat/chat/hooks/use-uploads-registry.d.ts +37 -0
  177. package/esm/src/react/components/chat/chat/hooks/use-uploads-registry.d.ts.map +1 -0
  178. package/esm/src/react/components/chat/chat/hooks/use-uploads-registry.js +178 -0
  179. package/esm/src/react/components/chat/chat/index.d.ts +171 -31
  180. package/esm/src/react/components/chat/chat/index.d.ts.map +1 -1
  181. package/esm/src/react/components/chat/chat/index.js +371 -77
  182. package/esm/src/react/components/chat/chat/persistence/conversation-store.d.ts +63 -0
  183. package/esm/src/react/components/chat/chat/persistence/conversation-store.d.ts.map +1 -0
  184. package/esm/src/react/components/chat/chat/persistence/conversation-store.js +1 -0
  185. package/esm/src/react/components/chat/chat/persistence/local-conversation-store.d.ts +13 -0
  186. package/esm/src/react/components/chat/chat/persistence/local-conversation-store.d.ts.map +1 -0
  187. package/esm/src/react/components/chat/chat/persistence/local-conversation-store.js +102 -0
  188. package/esm/src/react/components/chat/chat/persistence/memory-conversation-store.d.ts +11 -0
  189. package/esm/src/react/components/chat/chat/persistence/memory-conversation-store.d.ts.map +1 -0
  190. package/esm/src/react/components/chat/chat/persistence/memory-conversation-store.js +33 -0
  191. package/esm/src/react/components/chat/chat/utils/message-parts.d.ts +4 -1
  192. package/esm/src/react/components/chat/chat/utils/message-parts.d.ts.map +1 -1
  193. package/esm/src/react/components/chat/chat/utils/message-parts.js +4 -0
  194. package/esm/src/react/components/chat/chat-actions.d.ts +164 -0
  195. package/esm/src/react/components/chat/chat-actions.d.ts.map +1 -0
  196. package/esm/src/react/components/chat/chat-actions.js +191 -0
  197. package/esm/src/react/components/chat/chat-agent-picker.d.ts +50 -0
  198. package/esm/src/react/components/chat/chat-agent-picker.d.ts.map +1 -0
  199. package/esm/src/react/components/chat/chat-agent-picker.js +40 -0
  200. package/esm/src/react/components/chat/chat-theme-scope.d.ts +26 -0
  201. package/esm/src/react/components/chat/chat-theme-scope.d.ts.map +1 -0
  202. package/esm/src/react/components/chat/chat-theme-scope.js +27 -0
  203. package/esm/src/react/components/chat/chat-tokens-style.d.ts +21 -0
  204. package/esm/src/react/components/chat/chat-tokens-style.d.ts.map +1 -0
  205. package/esm/src/react/components/chat/chat-tokens-style.js +24 -0
  206. package/esm/src/react/components/chat/chat.d.ts +5 -5
  207. package/esm/src/react/components/chat/chat.d.ts.map +1 -1
  208. package/esm/src/react/components/chat/chat.js +5 -5
  209. package/esm/src/react/components/chat/color-mode.d.ts +46 -0
  210. package/esm/src/react/components/chat/color-mode.d.ts.map +1 -0
  211. package/esm/src/react/components/chat/color-mode.js +123 -0
  212. package/esm/src/react/components/chat/error-boundary.js +2 -2
  213. package/esm/src/react/components/chat/icons/index.d.ts +8 -0
  214. package/esm/src/react/components/chat/icons/index.d.ts.map +1 -1
  215. package/esm/src/react/components/chat/icons/index.js +64 -0
  216. package/esm/src/react/components/chat/markdown.d.ts +24 -1
  217. package/esm/src/react/components/chat/markdown.d.ts.map +1 -1
  218. package/esm/src/react/components/chat/markdown.js +122 -38
  219. package/esm/src/react/components/chat/model-selector.d.ts +130 -8
  220. package/esm/src/react/components/chat/model-selector.d.ts.map +1 -1
  221. package/esm/src/react/components/chat/model-selector.js +148 -121
  222. package/esm/src/react/components/chat/theme.d.ts +9 -12
  223. package/esm/src/react/components/chat/theme.d.ts.map +1 -1
  224. package/esm/src/react/components/chat/theme.js +149 -93
  225. package/esm/src/react/components/chat/ui/alert.d.ts +30 -0
  226. package/esm/src/react/components/chat/ui/alert.d.ts.map +1 -0
  227. package/esm/src/react/components/chat/ui/alert.js +35 -0
  228. package/esm/src/react/components/chat/ui/app-shell.d.ts +155 -0
  229. package/esm/src/react/components/chat/ui/app-shell.d.ts.map +1 -0
  230. package/esm/src/react/components/chat/ui/app-shell.js +276 -0
  231. package/esm/src/react/components/chat/ui/avatar.d.ts +24 -0
  232. package/esm/src/react/components/chat/ui/avatar.d.ts.map +1 -0
  233. package/esm/src/react/components/chat/ui/avatar.js +44 -0
  234. package/esm/src/react/components/chat/ui/badge.d.ts +24 -0
  235. package/esm/src/react/components/chat/ui/badge.d.ts.map +1 -0
  236. package/esm/src/react/components/chat/ui/badge.js +30 -0
  237. package/esm/src/react/components/chat/ui/button.d.ts +44 -0
  238. package/esm/src/react/components/chat/ui/button.d.ts.map +1 -0
  239. package/esm/src/react/components/chat/ui/button.js +108 -0
  240. package/esm/src/react/components/chat/ui/card.d.ts +42 -0
  241. package/esm/src/react/components/chat/ui/card.d.ts.map +1 -0
  242. package/esm/src/react/components/chat/ui/card.js +55 -0
  243. package/esm/src/react/components/chat/ui/checkbox.d.ts +28 -0
  244. package/esm/src/react/components/chat/ui/checkbox.d.ts.map +1 -0
  245. package/esm/src/react/components/chat/ui/checkbox.js +36 -0
  246. package/esm/src/react/components/chat/ui/code-block.d.ts +89 -0
  247. package/esm/src/react/components/chat/ui/code-block.d.ts.map +1 -0
  248. package/esm/src/react/components/chat/ui/code-block.js +277 -0
  249. package/esm/src/react/components/chat/ui/collapsible.d.ts +30 -0
  250. package/esm/src/react/components/chat/ui/collapsible.d.ts.map +1 -0
  251. package/esm/src/react/components/chat/ui/collapsible.js +44 -0
  252. package/esm/src/react/components/chat/ui/command.d.ts +65 -0
  253. package/esm/src/react/components/chat/ui/command.d.ts.map +1 -0
  254. package/esm/src/react/components/chat/ui/command.js +121 -0
  255. package/esm/src/react/components/chat/ui/cva.d.ts +36 -0
  256. package/esm/src/react/components/chat/ui/cva.d.ts.map +1 -0
  257. package/esm/src/react/components/chat/ui/cva.js +45 -0
  258. package/esm/src/react/components/chat/ui/dialog.d.ts +55 -0
  259. package/esm/src/react/components/chat/ui/dialog.d.ts.map +1 -0
  260. package/esm/src/react/components/chat/ui/dialog.js +116 -0
  261. package/esm/src/react/components/chat/ui/drawer.d.ts +41 -0
  262. package/esm/src/react/components/chat/ui/drawer.d.ts.map +1 -0
  263. package/esm/src/react/components/chat/ui/drawer.js +92 -0
  264. package/esm/src/react/components/chat/ui/dropdown-menu.d.ts +63 -0
  265. package/esm/src/react/components/chat/ui/dropdown-menu.d.ts.map +1 -0
  266. package/esm/src/react/components/chat/ui/dropdown-menu.js +76 -0
  267. package/esm/src/react/components/chat/ui/file-type.d.ts +26 -0
  268. package/esm/src/react/components/chat/ui/file-type.d.ts.map +1 -0
  269. package/esm/src/react/components/chat/ui/file-type.js +235 -0
  270. package/esm/src/react/components/chat/ui/floating.d.ts +29 -0
  271. package/esm/src/react/components/chat/ui/floating.d.ts.map +1 -0
  272. package/esm/src/react/components/chat/ui/floating.js +90 -0
  273. package/esm/src/react/components/chat/ui/icon-button.d.ts +19 -0
  274. package/esm/src/react/components/chat/ui/icon-button.d.ts.map +1 -0
  275. package/esm/src/react/components/chat/ui/icon-button.js +20 -0
  276. package/esm/src/react/components/chat/ui/index.d.ts +43 -0
  277. package/esm/src/react/components/chat/ui/index.d.ts.map +1 -0
  278. package/esm/src/react/components/chat/ui/index.js +42 -0
  279. package/esm/src/react/components/chat/ui/input.d.ts +27 -0
  280. package/esm/src/react/components/chat/ui/input.d.ts.map +1 -0
  281. package/esm/src/react/components/chat/ui/input.js +41 -0
  282. package/esm/src/react/components/chat/ui/label.d.ts +29 -0
  283. package/esm/src/react/components/chat/ui/label.d.ts.map +1 -0
  284. package/esm/src/react/components/chat/ui/label.js +40 -0
  285. package/esm/src/react/components/chat/ui/list.d.ts +47 -0
  286. package/esm/src/react/components/chat/ui/list.d.ts.map +1 -0
  287. package/esm/src/react/components/chat/ui/list.js +40 -0
  288. package/esm/src/react/components/chat/ui/pill.d.ts +26 -0
  289. package/esm/src/react/components/chat/ui/pill.d.ts.map +1 -0
  290. package/esm/src/react/components/chat/ui/pill.js +39 -0
  291. package/esm/src/react/components/chat/ui/popover.d.ts +47 -0
  292. package/esm/src/react/components/chat/ui/popover.d.ts.map +1 -0
  293. package/esm/src/react/components/chat/ui/popover.js +68 -0
  294. package/esm/src/react/components/chat/ui/progress-bar.d.ts +20 -0
  295. package/esm/src/react/components/chat/ui/progress-bar.d.ts.map +1 -0
  296. package/esm/src/react/components/chat/ui/progress-bar.js +31 -0
  297. package/esm/src/react/components/chat/ui/radio.d.ts +25 -0
  298. package/esm/src/react/components/chat/ui/radio.d.ts.map +1 -0
  299. package/esm/src/react/components/chat/ui/radio.js +29 -0
  300. package/esm/src/react/components/chat/ui/scroll-fade.d.ts +23 -0
  301. package/esm/src/react/components/chat/ui/scroll-fade.d.ts.map +1 -0
  302. package/esm/src/react/components/chat/ui/scroll-fade.js +40 -0
  303. package/esm/src/react/components/chat/ui/select.d.ts +64 -0
  304. package/esm/src/react/components/chat/ui/select.d.ts.map +1 -0
  305. package/esm/src/react/components/chat/ui/select.js +148 -0
  306. package/esm/src/react/components/chat/ui/shimmer.d.ts +25 -0
  307. package/esm/src/react/components/chat/ui/shimmer.d.ts.map +1 -0
  308. package/esm/src/react/components/chat/ui/shimmer.js +24 -0
  309. package/esm/src/react/components/chat/ui/skeleton.d.ts +14 -0
  310. package/esm/src/react/components/chat/ui/skeleton.d.ts.map +1 -0
  311. package/esm/src/react/components/chat/ui/skeleton.js +12 -0
  312. package/esm/src/react/components/chat/ui/slot.d.ts +21 -0
  313. package/esm/src/react/components/chat/ui/slot.d.ts.map +1 -0
  314. package/esm/src/react/components/chat/ui/slot.js +70 -0
  315. package/esm/src/react/components/chat/ui/status.d.ts +28 -0
  316. package/esm/src/react/components/chat/ui/status.d.ts.map +1 -0
  317. package/esm/src/react/components/chat/ui/status.js +23 -0
  318. package/esm/src/react/components/chat/ui/switch.d.ts +34 -0
  319. package/esm/src/react/components/chat/ui/switch.d.ts.map +1 -0
  320. package/esm/src/react/components/chat/ui/switch.js +58 -0
  321. package/esm/src/react/components/chat/ui/tabs.d.ts +44 -0
  322. package/esm/src/react/components/chat/ui/tabs.d.ts.map +1 -0
  323. package/esm/src/react/components/chat/ui/tabs.js +51 -0
  324. package/esm/src/react/components/chat/ui/tag.d.ts +22 -0
  325. package/esm/src/react/components/chat/ui/tag.d.ts.map +1 -0
  326. package/esm/src/react/components/chat/ui/tag.js +27 -0
  327. package/esm/src/react/components/chat/ui/textarea.d.ts +22 -0
  328. package/esm/src/react/components/chat/ui/textarea.d.ts.map +1 -0
  329. package/esm/src/react/components/chat/ui/textarea.js +35 -0
  330. package/esm/src/react/components/chat/ui/tooltip.d.ts +40 -0
  331. package/esm/src/react/components/chat/ui/tooltip.d.ts.map +1 -0
  332. package/esm/src/react/components/chat/ui/tooltip.js +132 -0
  333. package/esm/src/react/primitives/input-box.d.ts.map +1 -1
  334. package/esm/src/react/primitives/input-box.js +17 -4
  335. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  336. package/esm/src/server/handlers/dev/framework-candidates.generated.js +9437 -1064
  337. package/esm/src/server/handlers/dev/projects/html-shell.d.ts +1 -1
  338. package/esm/src/server/handlers/dev/projects/html-shell.d.ts.map +1 -1
  339. package/esm/src/server/handlers/dev/projects/html-shell.js +1 -12
  340. package/esm/src/server/handlers/request/public-agents-list.handler.d.ts +18 -0
  341. package/esm/src/server/handlers/request/public-agents-list.handler.d.ts.map +1 -0
  342. package/esm/src/server/handlers/request/public-agents-list.handler.js +44 -0
  343. package/esm/src/server/runtime-handler/index.d.ts +1 -1
  344. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  345. package/esm/src/server/runtime-handler/index.js +3 -0
  346. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts +1 -1
  347. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
  348. package/esm/src/studio/bridge/bridge-bundle.generated.js +3 -2
  349. package/esm/src/task/discovery.d.ts +95 -0
  350. package/esm/src/task/discovery.d.ts.map +1 -0
  351. package/esm/src/task/discovery.js +192 -0
  352. package/esm/src/task/index.d.ts +27 -0
  353. package/esm/src/task/index.d.ts.map +1 -0
  354. package/esm/src/task/index.js +22 -0
  355. package/esm/src/utils/version-constant.d.ts +1 -1
  356. package/esm/src/utils/version-constant.js +1 -1
  357. package/esm/src/workflow/blob/local-storage.d.ts +32 -0
  358. package/esm/src/workflow/blob/local-storage.d.ts.map +1 -0
  359. package/esm/src/workflow/blob/local-storage.js +179 -0
  360. package/esm/src/workflow/blob/types.d.ts +5 -0
  361. package/esm/src/workflow/blob/types.d.ts.map +1 -1
  362. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts +11 -0
  363. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts.map +1 -1
  364. package/esm/src/workflow/blob/veryfront-cloud-storage.js +36 -0
  365. package/package.json +9 -1
  366. package/esm/src/react/components/chat/chat/components/uploads-panel.d.ts +0 -20
  367. package/esm/src/react/components/chat/chat/components/uploads-panel.d.ts.map +0 -1
  368. package/esm/src/react/components/chat/chat/components/uploads-panel.js +0 -49
  369. package/esm/src/react/components/chat/chat/contexts/thread-list-context.d.ts +0 -28
  370. package/esm/src/react/components/chat/chat/contexts/thread-list-context.d.ts.map +0 -1
  371. package/esm/src/react/components/chat/chat/contexts/thread-list-context.js +0 -27
  372. package/esm/src/react/components/chat/chat/hooks/use-threads.d.ts +0 -28
  373. package/esm/src/react/components/chat/chat/hooks/use-threads.d.ts.map +0 -1
  374. package/esm/src/react/components/chat/chat/hooks/use-threads.js +0 -151
  375. package/esm/src/react/components/chat/chat-with-sidebar.d.ts +0 -110
  376. package/esm/src/react/components/chat/chat-with-sidebar.d.ts.map +0 -1
  377. package/esm/src/react/components/chat/chat-with-sidebar.js +0 -167
  378. package/esm/src/react/components/chat/message.d.ts +0 -42
  379. package/esm/src/react/components/chat/message.d.ts.map +0 -1
  380. package/esm/src/react/components/chat/message.js +0 -69
@@ -11,73 +11,91 @@ import { clsx } from "../../../utils/clsx.js";
11
11
  // CSS Custom Property tokens
12
12
  // ---------------------------------------------------------------------------
13
13
  /**
14
- * Light-mode defaults that match the Veryfront Studio `:root` values.
15
- * Uses OKLch for perceptual uniformity.
14
+ * Light-mode defaults copied from Veryfront Studio `styles/styles.css`.
15
+ * Keep these values aligned with Studio so standalone chat renders with the
16
+ * same surface, edge, and text hierarchy before a host app provides tokens.
16
17
  */
17
18
  const TOKENS_LIGHT = {
18
- "--background": "oklch(0.9512 0.008 98.88)",
19
- "--foreground": "oklch(0.2768 0 0)",
20
- "--card": "oklch(1 0 0)",
21
- "--card-foreground": "oklch(0.2768 0 0)",
22
- "--popover": "oklch(1 0 0)",
23
- "--popover-foreground": "oklch(0.2768 0 0)",
24
- "--primary": "oklch(0.2768 0 0)",
25
- "--primary-foreground": "oklch(1 0 0)",
26
- "--muted": "oklch(0.9422 0.0081 98.88)",
27
- "--muted-foreground": "oklch(0.55 0.005 95.11)",
28
- "--accent": "oklch(0.93 0 0)",
29
- "--accent-foreground": "oklch(0.15 0 0)",
30
- "--destructive": "oklch(0.55 0.22 27)",
31
- "--destructive-foreground": "oklch(1 0 0)",
32
- "--border": "oklch(0.84 0.0055 95.11)",
33
- "--input": "oklch(1 0 0)",
34
- "--input-border": "oklch(0.88 0 0)",
35
- "--input-placeholder": "oklch(0.7025 0 0)",
36
- "--ring": "oklch(0.2768 0 0 / 0.3)",
37
- "--success": "oklch(0.52 0.15 145)",
38
- "--chat-bubble": "oklch(0.2768 0 0)",
39
- "--chat-bubble-foreground": "oklch(1 0 0)",
40
- "--tab-background": "oklch(1 0 0)",
41
- "--tab-foreground": "oklch(0.7025 0 0)",
42
- "--tab-active-background": "oklch(0.9422 0.0081 98.88)",
43
- "--tab-active-foreground": "oklch(0.2768 0 0)",
44
- "--sidebar-background": "oklch(0.9512 0.008 98.88)",
45
- "--sidebar-foreground": "oklch(0.07 0 0)",
46
- "--sidebar-border": "oklch(0.9 0.006 98.88)",
19
+ "--background": "#F0EFE9",
20
+ "--foreground": "#010101",
21
+ "--primary": "#282828",
22
+ "--secondary": "#FFFFFF",
23
+ "--tertiary": "#F0EFE9",
24
+ "--accent": "#E8E6DB",
25
+ "--muted": "#F7F6F4",
26
+ "--destructive": "#D40C1A",
27
+ "--outline-border": "#DCDAD0",
28
+ "--status-neutral": "#9F9F9F",
29
+ "--status-info": "#0071DF",
30
+ "--status-success": "#098926",
31
+ "--status-warning": "#F99100",
32
+ "--status-error": "#D40924",
33
+ "--alert-warning-bg": "#F1E3CD",
34
+ "--alert-error-bg": "#ECD3D1",
35
+ "--alert-success-bg": "#D4E2D2",
36
+ "--alert-info-bg": "#E6E6E0",
37
+ "--faint": "oklch(from var(--foreground) l c h / 0.25)",
38
+ "--soft": "oklch(from var(--foreground) l c h / 0.7)",
39
+ "--tint": "oklch(from var(--foreground) l c h / 0.04)",
40
+ "--edge": "oklch(from var(--foreground) l c h / 0.06)",
41
+ "--edge-medium": "oklch(from var(--foreground) l c h / 0.1)",
42
+ "--separator": "#EEEEED",
43
+ "--shadow-sm": "0 1.5px 3px rgba(0, 0, 0, 0.08)",
44
+ "--code-bg": "var(--secondary)",
45
+ "--input-bg": "var(--secondary)",
46
+ "--popover": "var(--secondary)",
47
+ "--dialog": "var(--background)",
48
+ "--drawer": "var(--background)",
49
+ "--overlay": "rgba(0, 0, 0, 0.5)",
50
+ "--card": "var(--secondary)",
51
+ "--card-foreground": "var(--foreground)",
52
+ "--popover-foreground": "var(--foreground)",
53
+ "--primary-foreground": "var(--secondary)",
54
+ "--muted-foreground": "var(--faint)",
55
+ "--accent-foreground": "var(--foreground)",
56
+ "--destructive-foreground": "#FFFFFF",
57
+ "--border": "var(--outline-border)",
58
+ "--input": "var(--input-bg)",
59
+ "--input-border": "var(--edge-medium)",
60
+ "--input-placeholder": "var(--faint)",
61
+ "--ring": "var(--edge-medium)",
62
+ "--success": "var(--status-success)",
63
+ "--chat-bubble": "var(--primary)",
64
+ "--chat-bubble-foreground": "var(--secondary)",
65
+ "--tab-background": "var(--secondary)",
66
+ "--tab-foreground": "var(--faint)",
67
+ "--tab-active-background": "var(--accent)",
68
+ "--tab-active-foreground": "var(--foreground)",
69
+ "--sidebar-background": "var(--background)",
70
+ "--sidebar-foreground": "var(--foreground)",
71
+ "--sidebar-border": "var(--edge-medium)",
72
+ "--radius-xs": "4px",
73
+ "--radius-sm": "8px",
74
+ "--radius-md": "12px",
75
+ "--radius-lg": "20px",
76
+ "--radius-xl": "35px",
77
+ "--font-weight-normal": "400",
78
+ "--font-weight-medium": "500",
47
79
  };
48
80
  /**
49
- * Dark-mode defaults that match the Studio `[data-theme="dark"]` values.
81
+ * Dark-mode defaults copied from Studio `[data-theme="dark"]`.
50
82
  */
51
83
  const TOKENS_DARK = {
52
- "--background": "oklch(0.2768 0 0)",
53
- "--foreground": "oklch(0.9512 0.008 98.88)",
54
- "--card": "oklch(0.3211 0 0)",
55
- "--card-foreground": "oklch(0.9512 0.008 98.88)",
56
- "--popover": "oklch(0.21 0.01 220)",
57
- "--popover-foreground": "oklch(0.9512 0.008 98.88)",
58
- "--primary": "oklch(0.9512 0.008 98.88)",
59
- "--primary-foreground": "oklch(0.2768 0 0)",
60
- "--muted": "oklch(0.5338 0.0046 106.55)",
61
- "--muted-foreground": "oklch(0.9512 0.008 98.88)",
62
- "--accent": "oklch(0.25 0.01 220)",
63
- "--accent-foreground": "oklch(1 0 0)",
64
- "--destructive": "oklch(0.55 0.22 27)",
65
- "--destructive-foreground": "oklch(1 0 0)",
66
- "--border": "oklch(0.42 0.0017 106.48)",
67
- "--input": "oklch(0.3211 0 0)",
68
- "--input-border": "oklch(0.38 0.01 220)",
69
- "--input-placeholder": "oklch(0.8975 0 0)",
70
- "--ring": "oklch(0.6 0.01 220 / 0.5)",
71
- "--success": "oklch(0.52 0.14 143)",
72
- "--chat-bubble": "oklch(0.9512 0.008 98.88)",
73
- "--chat-bubble-foreground": "oklch(0.2768 0 0)",
74
- "--tab-background": "oklch(0.3211 0 0)",
75
- "--tab-foreground": "oklch(0.8975 0 0)",
76
- "--tab-active-background": "oklch(0.5338 0.0046 106.55)",
77
- "--tab-active-foreground": "oklch(0.9512 0.008 98.88)",
78
- "--sidebar-background": "oklch(0.18 0.01 220)",
79
- "--sidebar-foreground": "oklch(0.9512 0.008 98.88)",
80
- "--sidebar-border": "oklch(0.3 0.01 220)",
84
+ ...TOKENS_LIGHT,
85
+ "--background": "#282828",
86
+ "--foreground": "#F0EFE9",
87
+ "--primary": "#F1F0EA",
88
+ "--secondary": "#333333",
89
+ "--tertiary": "#262626",
90
+ "--accent": "#303030",
91
+ "--muted": "#0D1315",
92
+ "--outline-border": "#3A3A3A",
93
+ "--separator": "oklch(from var(--foreground) l c h / 0.06)",
94
+ "--code-bg": "oklch(0.08 0.005 280)",
95
+ "--input-bg": "#40403F",
96
+ "--primary-foreground": "var(--secondary)",
97
+ "--chat-bubble": "var(--primary)",
98
+ "--chat-bubble-foreground": "var(--secondary)",
81
99
  };
82
100
  function tokensToCSS(tokens) {
83
101
  return Object.entries(tokens).map(([k, v]) => `${k}:${v}`).join(";");
@@ -94,38 +112,66 @@ function tokensToCSS(tokens) {
94
112
  *
95
113
  * Dark mode: supports prefers-color-scheme, .dark, and [data-theme="dark"].
96
114
  */
115
+ /**
116
+ * Animation CSS for the chat UI primitives (Spinner, Shimmer, ProgressBar,
117
+ * LoadingButton). Copied from Studio `styles/animations.css`. Since
118
+ * `veryfront/chat` ships as a self-contained npm package, it carries both the
119
+ * `@keyframes` AND the named `animate-*` utility classes itself — components
120
+ * use Studio's clean class names (`animate-bounce-spin`) without requiring the
121
+ * consumer's Tailwind to register them. `shimmer-sweep` stays an arbitrary
122
+ * `animate-[…]` utility (its duration is set inline), so only its keyframes are
123
+ * needed here. Keep in sync with `storybook/.storybook/preview.css`.
124
+ */
125
+ const ANIMATION_CSS = "@keyframes bounce-spin{0%,100%{transform:translateY(0) rotate(0deg);animation-timing-function:ease-in-out}25%{transform:translateY(-30%) rotate(90deg);animation-timing-function:ease-in}50%{transform:translateY(0) rotate(180deg);animation-timing-function:ease-out}75%{transform:translateY(-15%) rotate(270deg);animation-timing-function:ease-in}}" +
126
+ "@keyframes button-loading{0%,100%{opacity:1}50%{opacity:.55}}" +
127
+ "@keyframes shimmer-sweep{0%{background-position:100% center}100%{background-position:0% center}}" +
128
+ "@keyframes progress-indeterminate{0%{transform:translateX(-120%)}100%{transform:translateX(320%)}}" +
129
+ ".animate-bounce-spin{animation:bounce-spin 2.5s cubic-bezier(0.25,1,0.5,1) infinite}" +
130
+ ".animate-button-loading{animation:button-loading 1.4s cubic-bezier(0.4,0,0.2,1) infinite}" +
131
+ ".animate-progress-indeterminate{animation:progress-indeterminate 1.2s ease-in-out infinite}";
97
132
  export function generateTokenCSS() {
98
133
  const light = tokensToCSS(TOKENS_LIGHT);
99
134
  const dark = tokensToCSS(TOKENS_DARK);
135
+ // The design tokens stay scoped to `[data-vf-chat]`, never `:root`: the
136
+ // names (`--primary`, `--background`, `--accent`, …) are the same generic
137
+ // convention host apps use for their own themes, and these style tags render
138
+ // in the body — after a host's <head> stylesheets — so a `:root` rule here
139
+ // would override the host's tokens page-wide (and the dark media query would
140
+ // repaint light-only host pages for OS-dark users). Surfaces that render
141
+ // *outside* `<Chat>` (`<ChatSidebar>`, `<AttachmentsPanel>`, `<AppShell>`)
142
+ // establish their own `data-vf-chat` scope and inject `<ChatTokens>`;
143
+ // portalled content re-anchors via `closest("[data-vf-chat]")`.
100
144
  return [
101
- `@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap');`,
102
- `[data-vf-chat]{font-family:'Inter',ui-sans-serif,system-ui,sans-serif;${light}}`,
145
+ `[data-vf-chat]{font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-weight:var(--font-weight-normal);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;${light}}`,
103
146
  `[data-vf-chat] button{cursor:pointer;}`,
104
147
  `@media(prefers-color-scheme:dark){[data-vf-chat]:not([data-vf-theme]){${dark}}}`,
105
- `.dark [data-vf-chat]:not([data-vf-theme]),[data-theme="dark"] [data-vf-chat]:not([data-vf-theme]){${dark}}`,
148
+ `.dark [data-vf-chat]:not([data-vf-theme]),[data-theme="dark"] [data-vf-chat]:not([data-vf-theme]),.dark[data-vf-chat]:not([data-vf-theme]),[data-theme="dark"][data-vf-chat]:not([data-vf-theme]){${dark}}`,
149
+ ANIMATION_CSS,
106
150
  ].join("");
107
151
  }
108
152
  /**
109
153
  * Default theme using CSS custom properties from the design system.
110
154
  */
111
155
  export const defaultChatTheme = {
112
- container: "flex flex-col h-full overflow-hidden bg-[var(--background)]",
156
+ container: "flex flex-col h-full overflow-hidden bg-[var(--background)] text-[var(--foreground)]",
113
157
  message: {
114
- user: "bg-[var(--chat-bubble)] text-[var(--chat-bubble-foreground)] rounded-[22px] px-5 py-3 max-w-[80%] shadow-sm",
115
- assistant: "text-[var(--card-foreground)] max-w-none",
116
- system: "text-[var(--muted-foreground)] text-sm mx-auto text-center py-2",
117
- tool: "bg-[var(--card)] text-[var(--card-foreground)] rounded-xl px-3 py-2 text-sm font-mono border border-[var(--border)]",
158
+ // Plain right-aligned user turn (no bubble) the Root handles alignment +
159
+ // max-width. A consumer can opt into a bubble via `theme.message.user`.
160
+ user: "text-[15px] leading-relaxed text-[var(--foreground)]",
161
+ assistant: "max-w-none text-[var(--foreground)] [overflow-wrap:anywhere]",
162
+ system: "text-[var(--faint)] text-sm mx-auto text-center py-2",
163
+ tool: "rounded-[var(--radius-md)] border border-[var(--outline-border)] bg-transparent px-4 py-3 text-sm font-mono text-[var(--foreground)]",
118
164
  },
119
- input: "w-full bg-transparent border-none focus:outline-none focus:ring-0 text-[var(--foreground)] placeholder:text-[var(--input-placeholder)] text-[15px] leading-normal",
120
- button: "size-9 shrink-0 flex items-center justify-center rounded-full transition-all bg-[var(--foreground)] text-[var(--background)] hover:bg-[var(--card)] hover:text-[var(--foreground)] active:scale-95 disabled:opacity-100",
121
- loading: "size-2 bg-[var(--border)] rounded-full animate-pulse",
165
+ input: "w-full bg-transparent border-none text-[15px] leading-6 text-[var(--foreground)] placeholder:text-[var(--faint)] focus:outline-none focus:ring-0",
166
+ button: "flex size-8 shrink-0 items-center justify-center rounded-full bg-[var(--primary)] text-[var(--secondary)] transition-[background-color,color] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",
167
+ loading: "size-2 bg-[var(--edge-medium)] rounded-full animate-pulse",
122
168
  };
123
169
  export const defaultAgentTheme = {
124
- container: "border border-[var(--border)] rounded-2xl p-6 space-y-4 bg-[var(--card)]",
125
- status: "inline-flex items-center px-3 py-1.5 rounded-full text-sm font-medium",
126
- thinking: "bg-amber-500/10 rounded-xl px-4 py-3 italic text-[var(--foreground)] border border-amber-500/20",
127
- tool: "rounded-xl px-4 py-3 bg-blue-500/10 border border-blue-500/20",
128
- toolResult: "mt-2 p-3 bg-[var(--accent)] rounded-xl font-mono text-sm overflow-x-auto",
170
+ container: "space-y-4 rounded-[var(--radius-lg)] bg-[var(--secondary)] p-5 text-[var(--foreground)]",
171
+ status: "inline-flex items-center rounded-full px-2.5 py-1 text-xs font-medium",
172
+ thinking: "rounded-[var(--radius-md)] border border-[var(--outline-border)] bg-transparent px-4 py-3 text-sm text-[var(--foreground)]",
173
+ tool: "rounded-[var(--radius-md)] border border-[var(--outline-border)] bg-transparent px-4 py-3",
174
+ toolResult: "mt-2 overflow-x-auto rounded-[var(--radius-sm)] bg-[var(--tertiary)] p-3 font-mono text-xs",
129
175
  };
130
176
  function isPlainObject(value) {
131
177
  return !!value && typeof value === "object" && !Array.isArray(value);
@@ -154,6 +200,14 @@ export function mergeThemes(defaultTheme, userTheme) {
154
200
  }
155
201
  /**
156
202
  * Utility to combine class names.
203
+ *
204
+ * NOTE: this is `clsx` only — it does NOT tailwind-merge. A `className` passed by
205
+ * a consumer is *appended*, not deduped, so it does not automatically beat a base
206
+ * utility of the same property (both end up in the class list, last-wins by
207
+ * CSS-source order, which is usually the base). To override a base utility from
208
+ * userland, use the `!` important suffix — e.g. `px-8!`, `rounded-xl!`, `size-6!`.
209
+ * Every cva-based primitive (Button, Card, Input, Textarea, Badge, Pill, Select,
210
+ * Tabs) inherits this behaviour.
157
211
  */
158
212
  export function cn(...inputs) {
159
213
  return clsx(inputs);
@@ -177,10 +231,10 @@ function variantClasses(base, config) {
177
231
  export const messageVariants = variantClasses("", {
178
232
  variants: {
179
233
  role: {
180
- user: "bg-[var(--chat-bubble)] text-[var(--chat-bubble-foreground)] rounded-[22px] px-5 py-3 max-w-[80%] shadow-sm",
181
- assistant: "text-[var(--card-foreground)] max-w-none",
182
- system: "text-[var(--muted-foreground)] text-sm mx-auto text-center py-2",
183
- tool: "bg-[var(--card)] text-[var(--card-foreground)] rounded-xl px-3 py-2 text-sm font-mono border border-[var(--border)]",
234
+ user: "max-w-[80%] rounded-[var(--radius-lg)] bg-[var(--chat-bubble)] px-4 py-3 text-base leading-relaxed text-[var(--chat-bubble-foreground)] shadow-sm",
235
+ assistant: "max-w-none text-[var(--foreground)] [overflow-wrap:anywhere]",
236
+ system: "text-[var(--faint)] text-sm mx-auto text-center py-2",
237
+ tool: "rounded-[var(--radius-md)] border border-[var(--outline-border)] bg-transparent px-4 py-3 text-sm font-mono text-[var(--foreground)]",
184
238
  },
185
239
  },
186
240
  defaultVariants: {
@@ -188,25 +242,27 @@ export const messageVariants = variantClasses("", {
188
242
  },
189
243
  });
190
244
  export const chatButtonVariants = variantClasses([
245
+ "relative",
191
246
  "inline-flex items-center justify-center gap-2 whitespace-nowrap",
192
- "font-medium rounded-full transition-all duration-150",
193
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",
194
- "disabled:pointer-events-none disabled:opacity-50",
247
+ "font-normal rounded-full transition-[background-color,color,border-color] duration-150 ease-in",
248
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--edge-medium)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--background)]",
249
+ "disabled:pointer-events-none",
195
250
  "[&_svg]:shrink-0",
196
251
  ], {
197
252
  variants: {
198
253
  variant: {
199
- primary: "bg-[var(--primary)] text-[var(--primary-foreground)] hover:opacity-90 active:scale-95",
200
- ghost: "bg-transparent text-[var(--foreground)] hover:bg-[var(--foreground)]/5",
201
- outline: "border border-[var(--border)] bg-transparent text-[var(--foreground)] hover:bg-[var(--foreground)]/5",
202
- "icon-ghost": "bg-transparent text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--foreground)]/5 !p-0 !gap-0",
254
+ primary: "bg-[var(--primary)] text-[var(--secondary)] shadow-sm hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",
255
+ ghost: "bg-transparent text-[var(--foreground)] hover:bg-[var(--accent)]",
256
+ outline: "border border-[var(--outline-border)] bg-transparent text-[var(--foreground)] hover:border-transparent hover:bg-[var(--accent)]",
257
+ "icon-ghost": "bg-transparent text-[var(--foreground)] hover:bg-[var(--accent)] !p-0 !gap-0",
203
258
  },
204
259
  size: {
205
- sm: "h-[38px] px-4 text-sm [&_svg]:size-4",
206
- default: "h-[42px] px-5 text-base [&_svg]:size-5",
260
+ sm: "h-[32px] px-3.5 text-sm [&_svg]:size-4",
261
+ default: "h-[38px] px-[1.125rem] text-base [&_svg]:size-4",
207
262
  "icon-xs": "size-7 [&_svg]:size-4",
208
- "icon-sm": "size-9 [&_svg]:size-5",
209
- "icon-default": "size-10 [&_svg]:size-5",
263
+ "icon-sm": "size-7 [&_svg]:size-4",
264
+ "icon-default": "size-8 [&_svg]:size-[1.125rem]",
265
+ "icon-lg": "size-9 [&_svg]:size-5",
210
266
  },
211
267
  },
212
268
  defaultVariants: {
@@ -219,7 +275,7 @@ export const chatContainerVariants = variantClasses("flex flex-col overflow-hidd
219
275
  variant: {
220
276
  default: "h-full bg-[var(--background)]",
221
277
  embedded: "h-full bg-transparent",
222
- floating: "h-[600px] w-[400px] rounded-2xl border border-[var(--border)] bg-[var(--background)] shadow-xl",
278
+ floating: "h-[600px] w-[400px] rounded-[var(--radius-lg)] border border-[var(--outline-border)] bg-[var(--background)] shadow-sm",
223
279
  },
224
280
  },
225
281
  defaultVariants: {
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Alert — soft-fill status callout, forked dependency-light from Veryfront
3
+ * Studio's `Alert`. Studio uses `--alert-{variant}-bg` + `--alert-{variant}-border`
4
+ * tokens; we only ship the `-bg` tokens, so the 1px border is derived from the
5
+ * fill via `color-mix` (no new tokens needed). The fill is a mode-invariant light
6
+ * pastel, so text stays dark in both themes (`dark:text-[var(--background)]`).
7
+ *
8
+ * @module react/components/chat/ui/alert
9
+ */
10
+ import * as React from "../../../../../react/react.js";
11
+ declare const alertVariants: {
12
+ readonly default: "bg-[var(--alert-info-bg)] border-[color-mix(in_oklch,var(--alert-info-bg),black_10%)]";
13
+ readonly warning: "bg-[var(--alert-warning-bg)] border-[color-mix(in_oklch,var(--alert-warning-bg),black_10%)]";
14
+ readonly error: "bg-[var(--alert-error-bg)] border-[color-mix(in_oklch,var(--alert-error-bg),black_10%)]";
15
+ readonly success: "bg-[var(--alert-success-bg)] border-[color-mix(in_oklch,var(--alert-success-bg),black_10%)]";
16
+ };
17
+ /** Props accepted by `<Alert>`. */
18
+ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
19
+ /** Colour scheme. @default "default" */
20
+ variant?: keyof typeof alertVariants;
21
+ }
22
+ export declare function Alert({ children, className, variant, ...props }: AlertProps): React.ReactElement;
23
+ /** Leading icon slot for `<Alert>` (size-4 recommended). */
24
+ export declare function AlertIcon({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
25
+ /** Message body for `<Alert>`. */
26
+ export declare function AlertContent({ children, className, ...props }: React.HTMLAttributes<HTMLParagraphElement>): React.ReactElement;
27
+ /** Trailing action slot for `<Alert>` (button or link). */
28
+ export declare function AlertAction({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
29
+ export {};
30
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/alert.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAGvD,QAAA,MAAM,aAAa;;;;;CAOT,CAAC;AAEX,mCAAmC;AACnC,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACtE,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,OAAO,aAAa,CAAC;CACtC;AAED,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,SAAS,EACT,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,UAAU,GAAG,KAAK,CAAC,YAAY,CAejC;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAY3D;AAED,kCAAkC;AAClC,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,YAAY,CAYjE;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAS3D"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Alert — soft-fill status callout, forked dependency-light from Veryfront
3
+ * Studio's `Alert`. Studio uses `--alert-{variant}-bg` + `--alert-{variant}-border`
4
+ * tokens; we only ship the `-bg` tokens, so the 1px border is derived from the
5
+ * fill via `color-mix` (no new tokens needed). The fill is a mode-invariant light
6
+ * pastel, so text stays dark in both themes (`dark:text-[var(--background)]`).
7
+ *
8
+ * @module react/components/chat/ui/alert
9
+ */
10
+ import * as React from "../../../../../react/react.js";
11
+ import { cn } from "../theme.js";
12
+ const alertVariants = {
13
+ default: "bg-[var(--alert-info-bg)] border-[color-mix(in_oklch,var(--alert-info-bg),black_10%)]",
14
+ warning: "bg-[var(--alert-warning-bg)] border-[color-mix(in_oklch,var(--alert-warning-bg),black_10%)]",
15
+ error: "bg-[var(--alert-error-bg)] border-[color-mix(in_oklch,var(--alert-error-bg),black_10%)]",
16
+ success: "bg-[var(--alert-success-bg)] border-[color-mix(in_oklch,var(--alert-success-bg),black_10%)]",
17
+ };
18
+ export function Alert({ children, className, variant = "default", ...props }) {
19
+ return (React.createElement("div", { className: cn(
20
+ // 14px: Inter renders larger than Studio's Söhne, so `vf-type-base`
21
+ // (16px) reads too big here — step down to `text-sm`.
22
+ "flex items-center gap-3 rounded-md border px-4 py-2.5 text-sm text-[var(--foreground)] dark:text-[var(--background)]", alertVariants[variant], className), ...props }, children));
23
+ }
24
+ /** Leading icon slot for `<Alert>` (size-4 recommended). */
25
+ export function AlertIcon({ children, className, ...props }) {
26
+ return (React.createElement("div", { className: cn("shrink-0 text-[var(--foreground)] dark:text-[var(--background)]", className), ...props }, children));
27
+ }
28
+ /** Message body for `<Alert>`. */
29
+ export function AlertContent({ children, className, ...props }) {
30
+ return (React.createElement("p", { className: cn("flex-1 text-sm text-[var(--foreground)] dark:text-[var(--background)]", className), ...props }, children));
31
+ }
32
+ /** Trailing action slot for `<Alert>` (button or link). */
33
+ export function AlertAction({ children, className, ...props }) {
34
+ return (React.createElement("div", { className: cn("-my-1 -mr-1 flex shrink-0 items-center", className), ...props }, children));
35
+ }
@@ -0,0 +1,155 @@
1
+ /**
2
+ * AppShell — a chat-independent layout primitive modeled on the shadcn sidebar
3
+ * (https://ui.shadcn.com/blocks). It owns the *layout + sidebar visibility*;
4
+ * everything else is slots. The sidebar is binary — visible or hidden (no
5
+ * collapse/icon-rail mode). Supports a left AND a right sidebar, each with its
6
+ * own toggle and persisted state.
7
+ *
8
+ * Desktop: sidebars are inline flex columns (mounted only while open).
9
+ * Mobile (< sm): sidebars become a focus-trapped off-canvas overlay + backdrop
10
+ * that slides in from the relevant edge, with Escape-to-close, scroll-lock, and
11
+ * focus restore.
12
+ *
13
+ * Purely structural: it injects no theme/token CSS — the host owns theming.
14
+ * Zero external deps (uses the local `cn` + `ui/button`). Built in `chat/ui`
15
+ * for now; designed for a clean `git mv` to a top-level `/ui`.
16
+ *
17
+ * @module react/components/chat/ui/app-shell
18
+ */
19
+ import * as React from "../../../../../react/react.js";
20
+ import { type ButtonProps } from "./button.js";
21
+ /** Which edge a sidebar docks to. */
22
+ export type AppShellSide = "left" | "right";
23
+ interface AppShellContextValue {
24
+ /** Viewport is below the `sm` breakpoint (< 640px). */
25
+ isMobile: boolean;
26
+ /** Effective visibility of a side for the current viewport. */
27
+ isOpen: (side: AppShellSide) => boolean;
28
+ /** Flip a side's visibility. */
29
+ toggle: (side: AppShellSide) => void;
30
+ /** Set a side's visibility explicitly. */
31
+ setOpen: (side: AppShellSide, open: boolean) => void;
32
+ /** Stable DOM id for a side's sidebar (for `aria-controls`). */
33
+ sidebarId: (side: AppShellSide) => string;
34
+ }
35
+ /** Access the enclosing {@link AppShell}'s state (external triggers, etc.). */
36
+ export declare function useAppShell(): AppShellContextValue;
37
+ /** Per-side visibility map. */
38
+ export interface AppShellOpenState {
39
+ left?: boolean;
40
+ right?: boolean;
41
+ }
42
+ /** Props accepted by {@link AppShell}. */
43
+ export interface AppShellProps extends React.HTMLAttributes<HTMLDivElement> {
44
+ /** Controlled desktop visibility per side. Omit a side to leave it uncontrolled. */
45
+ open?: AppShellOpenState;
46
+ /** Uncontrolled initial desktop visibility. Defaults: left `true`, right `false`. */
47
+ defaultOpen?: AppShellOpenState;
48
+ /** Fires when a side is toggled (desktop). Receives the requested next value. */
49
+ onOpenChange?: (side: AppShellSide, open: boolean) => void;
50
+ /** localStorage key prefix for persisting uncontrolled desktop visibility. */
51
+ storageKey?: string;
52
+ /** Toggle the left sidebar with ⌘/Ctrl+B. Default `true`. */
53
+ keyboardShortcut?: boolean;
54
+ ref?: React.Ref<HTMLDivElement>;
55
+ }
56
+ /** Root — provides sidebar state and the flex layout container. */
57
+ declare function AppShellRoot({ open, defaultOpen, onOpenChange, storageKey, keyboardShortcut, className, children, ref, ...props }: AppShellProps): React.ReactElement;
58
+ declare namespace AppShellRoot {
59
+ var displayName: string;
60
+ }
61
+ /** Props accepted by {@link AppShellSidebar}. */
62
+ export interface AppShellSidebarProps extends React.HTMLAttributes<HTMLElement> {
63
+ /** Edge to dock to. Default `left`. */
64
+ side?: AppShellSide;
65
+ /** Sidebar width in px (desktop column + mobile overlay panel). Default `240`. */
66
+ width?: number;
67
+ }
68
+ /** A dockable sidebar. Renders inline on desktop, as an overlay on mobile. */
69
+ declare function AppShellSidebar({ side, width, className, children, ...props }: AppShellSidebarProps): React.ReactElement | null;
70
+ declare namespace AppShellSidebar {
71
+ var displayName: string;
72
+ }
73
+ /** Optional border-carrying section. */
74
+ interface BorderedProps extends React.HTMLAttributes<HTMLDivElement> {
75
+ /** Draw a divider on the section's inner edge. Default `false`. */
76
+ border?: boolean;
77
+ }
78
+ /** Sidebar header slot — optional bottom border. */
79
+ declare function AppShellSidebarHeader({ border, className, ...props }: BorderedProps): React.ReactElement;
80
+ declare namespace AppShellSidebarHeader {
81
+ var displayName: string;
82
+ }
83
+ /** Sidebar scroll region — grows to fill and scrolls. */
84
+ declare function AppShellSidebarContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
85
+ declare namespace AppShellSidebarContent {
86
+ var displayName: string;
87
+ }
88
+ /** Sidebar footer slot — optional top border. */
89
+ declare function AppShellSidebarFooter({ border, className, ...props }: BorderedProps): React.ReactElement;
90
+ declare namespace AppShellSidebarFooter {
91
+ var displayName: string;
92
+ }
93
+ /** The main content column, between/beside the sidebars. */
94
+ declare function AppShellMain({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
95
+ declare namespace AppShellMain {
96
+ var displayName: string;
97
+ }
98
+ /** Props accepted by {@link AppShellHeader}. */
99
+ export interface AppShellHeaderProps extends React.HTMLAttributes<HTMLElement> {
100
+ /** Draw a bottom divider. Default `false`. */
101
+ border?: boolean;
102
+ }
103
+ /** Optional top bar inside the main column — with or without a bottom border. */
104
+ declare function AppShellHeader({ border, className, ...props }: AppShellHeaderProps): React.ReactElement;
105
+ declare namespace AppShellHeader {
106
+ var displayName: string;
107
+ }
108
+ /** The main content region — grows to fill, host owns overflow. */
109
+ declare function AppShellContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
110
+ declare namespace AppShellContent {
111
+ var displayName: string;
112
+ }
113
+ /** Props accepted by {@link AppShellTrigger}. */
114
+ export interface AppShellTriggerProps extends ButtonProps {
115
+ /** Which sidebar to toggle. Default `left`. */
116
+ side?: AppShellSide;
117
+ /** Override the default panel icon (`PanelLeft` / `PanelRight`). */
118
+ icon?: React.ReactNode;
119
+ }
120
+ /** Toggle button — built on the shared `Button`, defaults its icon by `side`. */
121
+ declare function AppShellTrigger({ side, icon, variant, size, className, onClick, "aria-label": ariaLabel, ...props }: AppShellTriggerProps): React.ReactElement;
122
+ declare namespace AppShellTrigger {
123
+ var displayName: string;
124
+ }
125
+ /**
126
+ * Compound AppShell. Compose:
127
+ *
128
+ * ```tsx
129
+ * <AppShell storageKey="vf-shell">
130
+ * <AppShell.Sidebar side="left">
131
+ * <AppShell.SidebarHeader border>…</AppShell.SidebarHeader>
132
+ * <AppShell.SidebarContent>…</AppShell.SidebarContent>
133
+ * </AppShell.Sidebar>
134
+ * <AppShell.Main>
135
+ * <AppShell.Header border>
136
+ * <AppShell.Trigger side="left" />
137
+ * </AppShell.Header>
138
+ * <AppShell.Content>…</AppShell.Content>
139
+ * </AppShell.Main>
140
+ * <AppShell.Sidebar side="right">…</AppShell.Sidebar>
141
+ * </AppShell>
142
+ * ```
143
+ */
144
+ export declare const AppShell: typeof AppShellRoot & {
145
+ Sidebar: typeof AppShellSidebar;
146
+ SidebarHeader: typeof AppShellSidebarHeader;
147
+ SidebarContent: typeof AppShellSidebarContent;
148
+ SidebarFooter: typeof AppShellSidebarFooter;
149
+ Main: typeof AppShellMain;
150
+ Header: typeof AppShellHeader;
151
+ Content: typeof AppShellContent;
152
+ Trigger: typeof AppShellTrigger;
153
+ };
154
+ export {};
155
+ //# sourceMappingURL=app-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/app-shell.tsx"],"names":[],"mappings":"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"}