veryfront 0.1.997 → 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 (374) hide show
  1. package/esm/cli/templates/manifest.js +1 -1
  2. package/esm/deno.d.ts +7 -0
  3. package/esm/deno.js +11 -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/utils/version-constant.d.ts +1 -1
  350. package/esm/src/utils/version-constant.js +1 -1
  351. package/esm/src/workflow/blob/local-storage.d.ts +32 -0
  352. package/esm/src/workflow/blob/local-storage.d.ts.map +1 -0
  353. package/esm/src/workflow/blob/local-storage.js +179 -0
  354. package/esm/src/workflow/blob/types.d.ts +5 -0
  355. package/esm/src/workflow/blob/types.d.ts.map +1 -1
  356. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts +11 -0
  357. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts.map +1 -1
  358. package/esm/src/workflow/blob/veryfront-cloud-storage.js +36 -0
  359. package/package.json +5 -1
  360. package/esm/src/react/components/chat/chat/components/uploads-panel.d.ts +0 -20
  361. package/esm/src/react/components/chat/chat/components/uploads-panel.d.ts.map +0 -1
  362. package/esm/src/react/components/chat/chat/components/uploads-panel.js +0 -49
  363. package/esm/src/react/components/chat/chat/contexts/thread-list-context.d.ts +0 -28
  364. package/esm/src/react/components/chat/chat/contexts/thread-list-context.d.ts.map +0 -1
  365. package/esm/src/react/components/chat/chat/contexts/thread-list-context.js +0 -27
  366. package/esm/src/react/components/chat/chat/hooks/use-threads.d.ts +0 -28
  367. package/esm/src/react/components/chat/chat/hooks/use-threads.d.ts.map +0 -1
  368. package/esm/src/react/components/chat/chat/hooks/use-threads.js +0 -151
  369. package/esm/src/react/components/chat/chat-with-sidebar.d.ts +0 -110
  370. package/esm/src/react/components/chat/chat-with-sidebar.d.ts.map +0 -1
  371. package/esm/src/react/components/chat/chat-with-sidebar.js +0 -167
  372. package/esm/src/react/components/chat/message.d.ts +0 -42
  373. package/esm/src/react/components/chat/message.d.ts.map +0 -1
  374. package/esm/src/react/components/chat/message.js +0 -69
@@ -0,0 +1,276 @@
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 { cn } from "../theme.js";
21
+ import { ChatTokens } from "../chat-tokens-style.js";
22
+ import { PanelLeftIcon, PanelRightIcon } from "../icons/index.js";
23
+ import { Button } from "./button.js";
24
+ const FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
25
+ const AppShellContext = React.createContext(null);
26
+ /** Access the enclosing {@link AppShell}'s state (external triggers, etc.). */
27
+ export function useAppShell() {
28
+ const ctx = React.useContext(AppShellContext);
29
+ if (!ctx)
30
+ throw new Error("AppShell parts must be used within <AppShell>");
31
+ return ctx;
32
+ }
33
+ /** Reactive `< sm` viewport check (matches Tailwind `max-sm`). SSR-safe. */
34
+ function useIsMobile() {
35
+ const [isMobile, setIsMobile] = React.useState(false);
36
+ React.useEffect(() => {
37
+ if (typeof globalThis.matchMedia !== "function")
38
+ return;
39
+ const mql = globalThis.matchMedia("(max-width: 639.98px)");
40
+ const update = () => setIsMobile(mql.matches);
41
+ update();
42
+ mql.addEventListener("change", update);
43
+ return () => mql.removeEventListener("change", update);
44
+ }, []);
45
+ return isMobile;
46
+ }
47
+ function readStored(storageKey, side, fallback) {
48
+ if (!storageKey || typeof localStorage === "undefined")
49
+ return fallback;
50
+ try {
51
+ const raw = localStorage.getItem(`${storageKey}-${side}`);
52
+ if (raw === "true")
53
+ return true;
54
+ if (raw === "false")
55
+ return false;
56
+ }
57
+ catch (_) { /* expected: unavailable/blocked storage */ }
58
+ return fallback;
59
+ }
60
+ function writeStored(storageKey, side, value) {
61
+ if (!storageKey || typeof localStorage === "undefined")
62
+ return;
63
+ try {
64
+ localStorage.setItem(`${storageKey}-${side}`, String(value));
65
+ }
66
+ catch (_) { /* expected: unavailable/blocked storage */ }
67
+ }
68
+ /** Root — provides sidebar state and the flex layout container. */
69
+ function AppShellRoot({ open, defaultOpen, onOpenChange, storageKey, keyboardShortcut = true, className, children, ref, ...props }) {
70
+ const isMobile = useIsMobile();
71
+ const baseId = React.useId();
72
+ const isControlledLeft = open?.left !== undefined;
73
+ const isControlledRight = open?.right !== undefined;
74
+ const [leftDesktop, setLeftDesktop] = React.useState(() => readStored(storageKey, "left", defaultOpen?.left ?? true));
75
+ const [rightDesktop, setRightDesktop] = React.useState(() => readStored(storageKey, "right", defaultOpen?.right ?? false));
76
+ const [leftMobile, setLeftMobile] = React.useState(false);
77
+ const [rightMobile, setRightMobile] = React.useState(false);
78
+ // Returning to a wider viewport drops any open mobile overlays.
79
+ React.useEffect(() => {
80
+ if (!isMobile) {
81
+ setLeftMobile(false);
82
+ setRightMobile(false);
83
+ }
84
+ }, [isMobile]);
85
+ const desktopOpen = {
86
+ left: isControlledLeft ? open.left : leftDesktop,
87
+ right: isControlledRight ? open.right : rightDesktop,
88
+ };
89
+ const mobileOpen = {
90
+ left: leftMobile,
91
+ right: rightMobile,
92
+ };
93
+ const setOpen = React.useCallback((side, value) => {
94
+ if (isMobile) {
95
+ (side === "left" ? setLeftMobile : setRightMobile)(value);
96
+ return;
97
+ }
98
+ const controlled = side === "left" ? isControlledLeft : isControlledRight;
99
+ if (!controlled) {
100
+ (side === "left" ? setLeftDesktop : setRightDesktop)(value);
101
+ writeStored(storageKey, side, value);
102
+ }
103
+ onOpenChange?.(side, value);
104
+ }, [isMobile, isControlledLeft, isControlledRight, storageKey, onOpenChange]);
105
+ const value = React.useMemo(() => {
106
+ const isOpen = (side) => isMobile ? mobileOpen[side] : desktopOpen[side];
107
+ return {
108
+ isMobile,
109
+ isOpen,
110
+ setOpen,
111
+ toggle: (side) => setOpen(side, !isOpen(side)),
112
+ sidebarId: (side) => `${baseId}-sidebar-${side}`,
113
+ };
114
+ // eslint-disable-next-line react-hooks/exhaustive-deps
115
+ }, [
116
+ isMobile,
117
+ setOpen,
118
+ baseId,
119
+ desktopOpen.left,
120
+ desktopOpen.right,
121
+ mobileOpen.left,
122
+ mobileOpen.right,
123
+ ]);
124
+ // ⌘/Ctrl+B toggles the left sidebar (shadcn parity).
125
+ React.useEffect(() => {
126
+ if (!keyboardShortcut)
127
+ return;
128
+ const onKeyDown = (e) => {
129
+ if ((e.metaKey || e.ctrlKey) && (e.key === "b" || e.key === "B")) {
130
+ e.preventDefault();
131
+ value.toggle("left");
132
+ }
133
+ };
134
+ document.addEventListener("keydown", onKeyDown);
135
+ return () => document.removeEventListener("keydown", onKeyDown);
136
+ }, [keyboardShortcut, value]);
137
+ return (React.createElement(AppShellContext.Provider, { value: value },
138
+ React.createElement(ChatTokens, null),
139
+ React.createElement("div", { ref: ref, className: cn("flex h-full w-full", className), "data-vf-appshell": "", "data-vf-chat": "", ...props }, children)));
140
+ }
141
+ /** Focus-trapped off-canvas overlay used on mobile. */
142
+ function SidebarOverlay({ side, width, id, className, children, ...props }) {
143
+ const ctx = useAppShell();
144
+ const panelRef = React.useRef(null);
145
+ const [entered, setEntered] = React.useState(false);
146
+ React.useEffect(() => {
147
+ const panel = panelRef.current;
148
+ const previouslyFocused = document.activeElement;
149
+ const prevOverflow = document.body.style.overflow;
150
+ document.body.style.overflow = "hidden";
151
+ const raf = requestAnimationFrame(() => setEntered(true));
152
+ const focusables = () => Array.from(panel?.querySelectorAll(FOCUSABLE_SELECTOR) ?? []);
153
+ (focusables()[0] ?? panel)?.focus();
154
+ const onKeyDown = (e) => {
155
+ if (e.key === "Escape") {
156
+ ctx.setOpen(side ?? "left", false);
157
+ return;
158
+ }
159
+ if (e.key !== "Tab")
160
+ return;
161
+ const els = focusables();
162
+ const first = els[0];
163
+ const last = els[els.length - 1];
164
+ if (!first || !last) {
165
+ e.preventDefault();
166
+ return;
167
+ }
168
+ if (e.shiftKey && document.activeElement === first) {
169
+ e.preventDefault();
170
+ last.focus();
171
+ }
172
+ else if (!e.shiftKey && document.activeElement === last) {
173
+ e.preventDefault();
174
+ first.focus();
175
+ }
176
+ };
177
+ document.addEventListener("keydown", onKeyDown);
178
+ return () => {
179
+ document.removeEventListener("keydown", onKeyDown);
180
+ document.body.style.overflow = prevOverflow;
181
+ cancelAnimationFrame(raf);
182
+ previouslyFocused?.focus?.();
183
+ };
184
+ // eslint-disable-next-line react-hooks/exhaustive-deps
185
+ }, []);
186
+ const hiddenTransform = side === "right" ? "translateX(100%)" : "translateX(-100%)";
187
+ return (React.createElement("div", { className: "fixed inset-0 z-50 sm:hidden" },
188
+ React.createElement("div", { className: "absolute inset-0 bg-[var(--overlay)] transition-opacity duration-200 motion-reduce:transition-none", style: { opacity: entered ? 1 : 0 }, onClick: () => ctx.setOpen(side ?? "left", false) }),
189
+ React.createElement("aside", { ref: panelRef, id: id, role: "dialog", "aria-modal": "true", "aria-label": props["aria-label"] ?? "Sidebar", tabIndex: -1, className: cn("absolute inset-y-0 z-50 flex h-full flex-col bg-[var(--background)] shadow-xl outline-none", "transition-transform duration-200 ease-out motion-reduce:transition-none", side === "right" ? "right-0" : "left-0", className), style: { width, transform: entered ? "translateX(0)" : hiddenTransform }, ...props }, children)));
190
+ }
191
+ /** A dockable sidebar. Renders inline on desktop, as an overlay on mobile. */
192
+ function AppShellSidebar({ side = "left", width = 240, className, children, ...props }) {
193
+ const ctx = useAppShell();
194
+ const id = ctx.sidebarId(side);
195
+ if (!ctx.isOpen(side))
196
+ return null;
197
+ if (ctx.isMobile) {
198
+ return (React.createElement(SidebarOverlay, { side: side, width: width, id: id, className: className, ...props }, children));
199
+ }
200
+ return (React.createElement("aside", { id: id, "aria-label": props["aria-label"] ?? "Sidebar", className: cn("flex h-full shrink-0 flex-col", className), style: { width }, ...props }, children));
201
+ }
202
+ /** Sidebar header slot — optional bottom border. */
203
+ function AppShellSidebarHeader({ border = false, className, ...props }) {
204
+ return (React.createElement("div", { className: cn("shrink-0", border && "border-b border-[var(--outline-border)]", className), ...props }));
205
+ }
206
+ /** Sidebar scroll region — grows to fill and scrolls. */
207
+ function AppShellSidebarContent({ className, ...props }) {
208
+ return React.createElement("div", { className: cn("min-h-0 flex-1 overflow-y-auto", className), ...props });
209
+ }
210
+ /** Sidebar footer slot — optional top border. */
211
+ function AppShellSidebarFooter({ border = false, className, ...props }) {
212
+ return (React.createElement("div", { className: cn("shrink-0", border && "border-t border-[var(--outline-border)]", className), ...props }));
213
+ }
214
+ /** The main content column, between/beside the sidebars. */
215
+ function AppShellMain({ className, ...props }) {
216
+ return (React.createElement("div", { className: cn("flex min-w-0 flex-1 flex-col", className), ...props }));
217
+ }
218
+ /** Optional top bar inside the main column — with or without a bottom border. */
219
+ function AppShellHeader({ border = false, className, ...props }) {
220
+ return (React.createElement("header", { className: cn("flex shrink-0 items-center gap-1 px-3 py-2", border && "border-b border-[var(--outline-border)]", className), ...props }));
221
+ }
222
+ /** The main content region — grows to fill, host owns overflow. */
223
+ function AppShellContent({ className, ...props }) {
224
+ return React.createElement("div", { className: cn("min-h-0 flex-1", className), ...props });
225
+ }
226
+ /** Toggle button — built on the shared `Button`, defaults its icon by `side`. */
227
+ function AppShellTrigger({ side = "left", icon, variant = "icon-ghost", size = "icon-default", className, onClick, "aria-label": ariaLabel, ...props }) {
228
+ const ctx = useAppShell();
229
+ const open = ctx.isOpen(side);
230
+ const defaultIcon = side === "right"
231
+ ? React.createElement(PanelRightIcon, { className: "size-[18px]" })
232
+ : React.createElement(PanelLeftIcon, { className: "size-[18px]" });
233
+ return (React.createElement(Button, { variant: variant, size: size, className: className, "aria-expanded": open, "aria-controls": ctx.sidebarId(side), "aria-label": ariaLabel ??
234
+ `${open ? "Close" : "Open"} ${side} sidebar`, onClick: (e) => {
235
+ onClick?.(e);
236
+ ctx.toggle(side);
237
+ }, ...props }, icon ?? defaultIcon));
238
+ }
239
+ /**
240
+ * Compound AppShell. Compose:
241
+ *
242
+ * ```tsx
243
+ * <AppShell storageKey="vf-shell">
244
+ * <AppShell.Sidebar side="left">
245
+ * <AppShell.SidebarHeader border>…</AppShell.SidebarHeader>
246
+ * <AppShell.SidebarContent>…</AppShell.SidebarContent>
247
+ * </AppShell.Sidebar>
248
+ * <AppShell.Main>
249
+ * <AppShell.Header border>
250
+ * <AppShell.Trigger side="left" />
251
+ * </AppShell.Header>
252
+ * <AppShell.Content>…</AppShell.Content>
253
+ * </AppShell.Main>
254
+ * <AppShell.Sidebar side="right">…</AppShell.Sidebar>
255
+ * </AppShell>
256
+ * ```
257
+ */
258
+ export const AppShell = Object.assign(AppShellRoot, {
259
+ Sidebar: AppShellSidebar,
260
+ SidebarHeader: AppShellSidebarHeader,
261
+ SidebarContent: AppShellSidebarContent,
262
+ SidebarFooter: AppShellSidebarFooter,
263
+ Main: AppShellMain,
264
+ Header: AppShellHeader,
265
+ Content: AppShellContent,
266
+ Trigger: AppShellTrigger,
267
+ });
268
+ AppShellRoot.displayName = "AppShell";
269
+ AppShellSidebar.displayName = "AppShell.Sidebar";
270
+ AppShellSidebarHeader.displayName = "AppShell.SidebarHeader";
271
+ AppShellSidebarContent.displayName = "AppShell.SidebarContent";
272
+ AppShellSidebarFooter.displayName = "AppShell.SidebarFooter";
273
+ AppShellMain.displayName = "AppShell.Main";
274
+ AppShellHeader.displayName = "AppShell.Header";
275
+ AppShellContent.displayName = "AppShell.Content";
276
+ AppShellTrigger.displayName = "AppShell.Trigger";
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Avatar — ported 1:1 from Veryfront Studio's `UserAvatar`. The one generic
3
+ * avatar for users, agents, and entities: shows an image when available, else
4
+ * initials (two-letter for `primary` tone, single capital for `muted`).
5
+ * Studio's `vf-avatar-initial` container-query sizing is simplified to a fixed
6
+ * `text-xs` for v1. Private to the chat module.
7
+ *
8
+ * @module react/components/chat/ui/avatar
9
+ */
10
+ import * as React from "../../../../../react/react.js";
11
+ /** Props accepted by `<Avatar>`. */
12
+ export interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
13
+ name: string;
14
+ avatarSrc?: string;
15
+ accentColor?: string;
16
+ /** `filled` fills with accent (default); `bordered` shows an accent ring. */
17
+ variant?: "filled" | "bordered";
18
+ /** `primary` brand bg + two-letter initials; `muted` grey bg + one letter. */
19
+ tone?: "primary" | "muted";
20
+ ref?: React.Ref<HTMLDivElement>;
21
+ }
22
+ /** Render a user / agent / entity avatar. */
23
+ export declare function Avatar({ className, style, name, avatarSrc, accentColor, variant, tone, ref, ...props }: AvatarProps): React.ReactElement;
24
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/avatar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAcvD,oCAAoC;AACpC,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC,8EAA8E;IAC9E,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED,6CAA6C;AAC7C,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,KAAK,EACL,IAAI,EACJ,SAAS,EACT,WAAW,EACX,OAAkB,EAClB,IAAgB,EAChB,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAuDlC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Avatar — ported 1:1 from Veryfront Studio's `UserAvatar`. The one generic
3
+ * avatar for users, agents, and entities: shows an image when available, else
4
+ * initials (two-letter for `primary` tone, single capital for `muted`).
5
+ * Studio's `vf-avatar-initial` container-query sizing is simplified to a fixed
6
+ * `text-xs` for v1. Private to the chat module.
7
+ *
8
+ * @module react/components/chat/ui/avatar
9
+ */
10
+ import * as React from "../../../../../react/react.js";
11
+ import { cn } from "../theme.js";
12
+ function getInitials(name) {
13
+ if (!name)
14
+ return "?";
15
+ const [firstName, lastName] = name.split(" ");
16
+ return [firstName?.charAt(0), lastName?.charAt(0)].filter(Boolean).join("");
17
+ }
18
+ function getSingleInitial(name) {
19
+ const trimmed = name?.trim?.() ?? "";
20
+ return trimmed.length > 0 ? trimmed.charAt(0).toUpperCase() : "?";
21
+ }
22
+ /** Render a user / agent / entity avatar. */
23
+ export function Avatar({ className, style, name, avatarSrc, accentColor, variant = "filled", tone = "primary", ref, ...props }) {
24
+ const isBordered = variant === "bordered";
25
+ const isMuted = tone === "muted" && !accentColor;
26
+ const [imageFailed, setImageFailed] = React.useState(false);
27
+ React.useEffect(() => {
28
+ setImageFailed(false);
29
+ }, [avatarSrc]);
30
+ const showImage = Boolean(avatarSrc) && !imageFailed;
31
+ const accentStyle = accentColor
32
+ ? isBordered
33
+ ? { borderColor: accentColor }
34
+ : { backgroundColor: accentColor, borderColor: accentColor }
35
+ : undefined;
36
+ return (React.createElement("div", { ref: ref, className: cn("@container rounded-full size-8 shrink-0 flex items-center justify-center overflow-hidden", isMuted ? "bg-[var(--accent)]" : "bg-[var(--primary)]", accentColor && "border", className), style: { ...accentStyle, ...style }, ...props }, showImage
37
+ ? (React.createElement("img", { src: avatarSrc, alt: name, referrerPolicy: "no-referrer", onError: () => setImageFailed(true), className: "w-full h-full rounded-full object-cover" }))
38
+ : (React.createElement("span", { className: cn(
39
+ // Scale the initial to the avatar via container-query units, so it
40
+ // fills small pills AND large empty-state avatars (Studio parity).
41
+ "w-full h-full flex items-center justify-center font-medium capitalize leading-none", isMuted
42
+ ? "text-[length:44cqw] text-[var(--foreground)]"
43
+ : "text-[length:34cqw] text-white") }, isMuted ? getSingleInitial(name) : getInitials(name)))));
44
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Badge — ported 1:1 from Veryfront Studio, semantic classes remapped to
3
+ * veryfront's `[var(--token)]` vocabulary. The status fill tokens
4
+ * (`--alert-*-bg`) and `--status-*` text tokens are defined in `theme.ts`, so
5
+ * every variant renders with its proper fill. Private to the chat module.
6
+ *
7
+ * @module react/components/chat/ui/badge
8
+ */
9
+ import * as React from "../../../../../react/react.js";
10
+ import { type VariantProps } from "./cva.js";
11
+ declare const badgeVariants: (props?: ({
12
+ variant?: "default" | "warning" | "success" | "outline" | "destructive" | null | undefined;
13
+ } & {
14
+ class?: import("../../../../utils/clsx.js").ClassValue;
15
+ className?: import("../../../../utils/clsx.js").ClassValue;
16
+ }) | undefined) => string;
17
+ /** Props accepted by `<Badge>`. */
18
+ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
19
+ children?: React.ReactNode;
20
+ }
21
+ /** Render a badge. */
22
+ export declare function Badge({ className, variant, ...props }: BadgeProps): React.ReactElement;
23
+ export { badgeVariants };
24
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/badge.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAEvD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAElD,QAAA,MAAM,aAAa;;;;;yBAgBlB,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC;IACjF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,sBAAsB;AACtB,wBAAgB,KAAK,CACnB,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,GAC3C,KAAK,CAAC,YAAY,CAEpB;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Badge — ported 1:1 from Veryfront Studio, semantic classes remapped to
3
+ * veryfront's `[var(--token)]` vocabulary. The status fill tokens
4
+ * (`--alert-*-bg`) and `--status-*` text tokens are defined in `theme.ts`, so
5
+ * every variant renders with its proper fill. Private to the chat module.
6
+ *
7
+ * @module react/components/chat/ui/badge
8
+ */
9
+ import * as React from "../../../../../react/react.js";
10
+ import { cn } from "../theme.js";
11
+ import { cva } from "./cva.js";
12
+ const badgeVariants = cva("inline-flex items-center px-2 py-0.5 text-xs font-medium rounded-full", {
13
+ variants: {
14
+ variant: {
15
+ default: "bg-[var(--foreground)] text-[var(--background)]",
16
+ success: "bg-[var(--alert-success-bg)] text-[var(--status-success)]",
17
+ warning: "bg-[var(--alert-warning-bg)] text-[var(--status-warning)]",
18
+ destructive: "bg-[var(--alert-error-bg)] text-[var(--status-error)]",
19
+ outline: "border border-[var(--outline-border)] text-[var(--foreground)]",
20
+ },
21
+ },
22
+ defaultVariants: {
23
+ variant: "default",
24
+ },
25
+ });
26
+ /** Render a badge. */
27
+ export function Badge({ className, variant, ...props }) {
28
+ return React.createElement("span", { className: cn(badgeVariants({ variant }), className), ...props });
29
+ }
30
+ export { badgeVariants };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Button — ported 1:1 from the Veryfront Studio `Button` primitive. Studio's
3
+ * semantic Tailwind classes (`bg-primary`, `vf-type-base`, `vf-weight-normal`)
4
+ * are mechanically remapped to veryfront's arbitrary-value vocabulary
5
+ * (`bg-[var(--primary)]`, `text-base`, `font-normal`) — a deterministic token
6
+ * mapping, not a redesign. Private to the chat module.
7
+ *
8
+ * Hover rule: every variant converges to primary/secondary on hover; primary
9
+ * inverts the other way; destructive deepens; outline drops its border; link
10
+ * drops underline. Loading keeps the label, sets `aria-busy` + `disabled`, and
11
+ * applies a subtle opacity pulse.
12
+ *
13
+ * @module react/components/chat/ui/button
14
+ */
15
+ import * as React from "../../../../../react/react.js";
16
+ import { type VariantProps } from "./cva.js";
17
+ declare const buttonVariants: (props?: ({
18
+ variant?: "link" | "text" | "primary" | "outline" | "destructive" | "ghost" | "icon-ghost" | "icon-primary" | "icon-secondary" | "icon-tertiary" | "secondary" | "secondary-to-link" | "tertiary" | null | undefined;
19
+ on?: "card" | "chrome" | null | undefined;
20
+ iconAfter?: "true" | null | undefined;
21
+ size?: "default" | "icon-default" | "icon-lg" | "icon-sm" | "icon-xl" | "icon-xs" | "lg" | "lg-to-default" | "sm" | null | undefined;
22
+ } & {
23
+ class?: import("../../../../utils/clsx.js").ClassValue;
24
+ className?: import("../../../../utils/clsx.js").ClassValue;
25
+ }) | undefined) => string;
26
+ /** Props accepted by `<Button>`. */
27
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
28
+ /** Render as a Radix-style Slot, merging props onto the child element. */
29
+ asChild?: boolean;
30
+ /** Slide the icon right on hover. */
31
+ animateIcon?: boolean;
32
+ ref?: React.Ref<HTMLButtonElement>;
33
+ }
34
+ /** Render an action button. */
35
+ export declare function Button({ className, variant, size, iconAfter, on, asChild, animateIcon, type, ref, ...props }: ButtonProps): React.ReactElement;
36
+ /** Props accepted by `<LoadingButton>`. */
37
+ export interface LoadingButtonProps extends ButtonProps {
38
+ /** Pending state — applies the opacity pulse, sets `aria-busy`, disables. */
39
+ isLoading: boolean;
40
+ }
41
+ /** Button that pulses subtly while pending and blocks double-submits. */
42
+ export declare function LoadingButton({ children, isLoading, disabled, className, ref, ...props }: LoadingButtonProps): React.ReactElement;
43
+ export { buttonVariants };
44
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/button.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAEvD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAGlD,QAAA,MAAM,cAAc;;;;;;;;yBA6FnB,CAAC;AAEF,oCAAoC;AACpC,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1F,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;CACpC;AAED,+BAA+B;AAC/B,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,SAAS,EACT,EAAE,EACF,OAAe,EACf,WAAmB,EACnB,IAAI,EACJ,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,KAAK,CAAC,YAAY,CAclC;AAED,2CAA2C;AAC3C,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACT,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAYzC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Button — ported 1:1 from the Veryfront Studio `Button` primitive. Studio's
3
+ * semantic Tailwind classes (`bg-primary`, `vf-type-base`, `vf-weight-normal`)
4
+ * are mechanically remapped to veryfront's arbitrary-value vocabulary
5
+ * (`bg-[var(--primary)]`, `text-base`, `font-normal`) — a deterministic token
6
+ * mapping, not a redesign. Private to the chat module.
7
+ *
8
+ * Hover rule: every variant converges to primary/secondary on hover; primary
9
+ * inverts the other way; destructive deepens; outline drops its border; link
10
+ * drops underline. Loading keeps the label, sets `aria-busy` + `disabled`, and
11
+ * applies a subtle opacity pulse.
12
+ *
13
+ * @module react/components/chat/ui/button
14
+ */
15
+ import * as React from "../../../../../react/react.js";
16
+ import { cn } from "../theme.js";
17
+ import { cva } from "./cva.js";
18
+ import { Slot } from "./slot.js";
19
+ const buttonVariants = cva([
20
+ "relative inline-flex items-center justify-center gap-1.5 whitespace-nowrap",
21
+ "font-normal rounded-full",
22
+ "transition-[background-color,color,border-color] duration-150 ease-in",
23
+ "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)]",
24
+ "[&_svg]:shrink-0",
25
+ ], {
26
+ variants: {
27
+ variant: {
28
+ primary: "bg-[var(--primary)] text-[var(--secondary)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)]",
29
+ secondary: "bg-[var(--secondary)] text-[var(--foreground)] hover:bg-[var(--primary)] hover:text-[var(--secondary)]",
30
+ tertiary: "text-[var(--foreground)] hover:bg-[var(--primary)] hover:text-[var(--secondary)]",
31
+ outline: "border border-[var(--outline-border)] dark:border-[var(--faint)] bg-transparent text-[var(--foreground)] hover:bg-[var(--accent)] hover:border-transparent",
32
+ destructive: "bg-[var(--destructive)] text-white hover:bg-[color-mix(in_oklch,var(--destructive),black_18%)]",
33
+ link: "text-[var(--foreground)] underline underline-offset-4 hover:no-underline !px-0 !gap-2",
34
+ ghost: "bg-transparent text-[var(--foreground)]",
35
+ text: "bg-transparent text-[var(--foreground)] hover:text-[var(--foreground)] !h-auto !w-auto !p-0 !justify-start !gap-1.5 [&_svg]:!mr-0",
36
+ "secondary-to-link": "bg-[var(--secondary)] text-[var(--foreground)] hover:bg-[var(--primary)] hover:text-[var(--secondary)] md:bg-transparent md:text-[var(--foreground)] md:hover:bg-transparent md:hover:text-[var(--foreground)] md:underline md:underline-offset-4 md:hover:no-underline md:!px-0 md:!gap-2",
37
+ "icon-primary": "bg-[var(--primary)] text-[var(--secondary)] hover:bg-[var(--secondary)] hover:text-[var(--foreground)] !p-0 !gap-0 !justify-center",
38
+ "icon-ghost": "bg-transparent text-[var(--foreground)] !p-0 !gap-0 !justify-center",
39
+ "icon-secondary": "bg-[var(--secondary)] text-[var(--foreground)] hover:bg-[var(--primary)] hover:text-[var(--secondary)] !p-0 !gap-0 !justify-center",
40
+ "icon-tertiary": "text-[var(--foreground)] hover:bg-[var(--primary)] hover:text-[var(--secondary)] !p-0 !gap-0 !justify-center",
41
+ },
42
+ /**
43
+ * Surface the button sits on — drives surface-paired hover for ghost /
44
+ * icon-ghost / primary / icon-primary via compound variants. Default
45
+ * `chrome`; pass `card` inside white card surfaces.
46
+ */
47
+ on: {
48
+ chrome: "",
49
+ card: "",
50
+ },
51
+ iconAfter: {
52
+ true: "[&_svg]:ml-3.5 has-[svg]:justify-between",
53
+ },
54
+ size: {
55
+ sm: "h-[32px] px-3.5 text-sm [&_svg]:size-3.5",
56
+ default: "h-[38px] px-4.5 text-base [&_svg]:size-3.5",
57
+ lg: "h-[48px] px-6 text-base [&_svg]:size-4.5",
58
+ "lg-to-default": "h-[48px] px-6 text-base [&_svg]:size-4.5 md:h-[38px] md:px-4.5 md:text-base md:[&_svg]:size-3.5",
59
+ "icon-xs": "size-5 [&_svg]:size-3",
60
+ "icon-sm": "size-7 [&_svg]:size-3.5",
61
+ "icon-default": "size-8 [&_svg]:size-3.5",
62
+ "icon-lg": "size-9 [&_svg]:size-4.5",
63
+ "icon-xl": "size-[38px] [&_svg]:size-3.5",
64
+ },
65
+ },
66
+ compoundVariants: [
67
+ { variant: "tertiary", on: "chrome", class: "bg-[var(--accent)]" },
68
+ { variant: "icon-tertiary", on: "chrome", class: "bg-[var(--accent)]" },
69
+ { variant: "ghost", on: "chrome", class: "hover:bg-[var(--accent)]" },
70
+ { variant: "ghost", on: "card", class: "hover:bg-[var(--tertiary)]" },
71
+ {
72
+ variant: "icon-ghost",
73
+ on: "chrome",
74
+ class: "hover:bg-[var(--accent)]",
75
+ },
76
+ {
77
+ variant: "icon-ghost",
78
+ on: "card",
79
+ class: "hover:bg-[var(--tertiary)]",
80
+ },
81
+ {
82
+ variant: "primary",
83
+ on: "card",
84
+ class: "hover:bg-[var(--tertiary)] hover:text-[var(--foreground)]",
85
+ },
86
+ {
87
+ variant: "icon-primary",
88
+ on: "card",
89
+ class: "hover:bg-[var(--tertiary)] hover:text-[var(--foreground)]",
90
+ },
91
+ ],
92
+ defaultVariants: {
93
+ variant: "primary",
94
+ on: "chrome",
95
+ size: "default",
96
+ },
97
+ });
98
+ /** Render an action button. */
99
+ export function Button({ className, variant, size, iconAfter, on, asChild = false, animateIcon = false, type, ref, ...props }) {
100
+ const Comp = asChild ? Slot : "button";
101
+ return (React.createElement(Comp, { className: cn(buttonVariants({ variant, size, iconAfter, on, className }), animateIcon &&
102
+ "group [&_svg]:transition-transform [&_svg]:group-hover:translate-x-0.5"), ref: ref, type: asChild ? type : (type ?? "button"), ...props }));
103
+ }
104
+ /** Button that pulses subtly while pending and blocks double-submits. */
105
+ export function LoadingButton({ children, isLoading, disabled, className, ref, ...props }) {
106
+ return (React.createElement(Button, { ref: ref, disabled: isLoading || disabled, "aria-busy": isLoading || undefined, className: cn(isLoading && "animate-button-loading", className), ...props }, children));
107
+ }
108
+ export { buttonVariants };
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Card — flat surface primitive, forked dependency-light from Veryfront
3
+ * Studio's `Card` (studio/components/Card). Solid (`bg-secondary`, no border,
4
+ * no shadow) for interactive content; outline (`border-outline-border`, no bg)
5
+ * for layout / non-interactive content. Both flat, radius baked in.
6
+ *
7
+ * Studio deps (cva/class-variance-authority, Heading/Text) are swapped for our
8
+ * private `cva` and plain elements. Private to the chat module.
9
+ *
10
+ * @module react/components/chat/ui/card
11
+ */
12
+ import * as React from "../../../../../react/react.js";
13
+ import { type VariantProps } from "./cva.js";
14
+ declare const cardVariants: (props?: ({
15
+ surface?: "outline" | "solid" | null | undefined;
16
+ padding?: "none" | "md" | "lg" | "sm" | null | undefined;
17
+ radius?: "default" | "sm" | null | undefined;
18
+ } & {
19
+ class?: import("../../../../utils/clsx.js").ClassValue;
20
+ className?: import("../../../../utils/clsx.js").ClassValue;
21
+ }) | undefined) => string;
22
+ /** Props accepted by `<Card>`. */
23
+ export interface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {
24
+ ref?: React.Ref<HTMLDivElement>;
25
+ }
26
+ /** A flat card surface (Studio `Card`). */
27
+ export declare function Card({ className, surface, padding, radius, ref, ...props }: CardProps): React.ReactElement;
28
+ export declare namespace Card {
29
+ var displayName: string;
30
+ }
31
+ /** Card header row — a flex row (Studio composes these inline). */
32
+ export declare function CardHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
33
+ export declare namespace CardHeader {
34
+ var displayName: string;
35
+ }
36
+ /** Card body region — vertical stack. */
37
+ export declare function CardContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
38
+ export declare namespace CardContent {
39
+ var displayName: string;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/card.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAEvD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAElD,QAAA,MAAM,YAAY;;;;;;;yBAyBhB,CAAC;AAEH,kCAAkC;AAClC,MAAM,WAAW,SACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,OAAO,YAAY,CAAC;IAC/E,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED,2CAA2C;AAC3C,wBAAgB,IAAI,CAClB,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,GAChE,KAAK,CAAC,YAAY,CAQpB;yBAVe,IAAI;;;AAapB,mEAAmE;AACnE,wBAAgB,UAAU,CACxB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAC5D,KAAK,CAAC,YAAY,CAOpB;yBATe,UAAU;;;AAY1B,yCAAyC;AACzC,wBAAgB,WAAW,CACzB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAC5D,KAAK,CAAC,YAAY,CAEpB;yBAJe,WAAW"}