veryfront 0.1.997 → 0.1.999

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 (386) hide show
  1. package/esm/cli/templates/manifest.d.ts +1 -1
  2. package/esm/cli/templates/manifest.js +15 -15
  3. package/esm/deno.d.ts +7 -0
  4. package/esm/deno.js +11 -3
  5. package/esm/deps/esm.sh/react-dom@19.2.4.d.ts +2 -0
  6. package/esm/deps/esm.sh/react-dom@19.2.4.d.ts.map +1 -0
  7. package/esm/deps/esm.sh/react-dom@19.2.4.js +3 -0
  8. package/esm/react/react-dom.d.ts +3 -0
  9. package/esm/react/react-dom.d.ts.map +1 -0
  10. package/esm/react/react-dom.js +2 -0
  11. package/esm/src/agent/ag-ui/host-support.d.ts.map +1 -1
  12. package/esm/src/agent/ag-ui/host-support.js +12 -0
  13. package/esm/src/agent/react/index.d.ts +4 -2
  14. package/esm/src/agent/react/index.d.ts.map +1 -1
  15. package/esm/src/agent/react/index.js +2 -1
  16. package/esm/src/agent/react/use-agent-metadata.d.ts +5 -0
  17. package/esm/src/agent/react/use-agent-metadata.d.ts.map +1 -1
  18. package/esm/src/agent/react/use-agent-metadata.js +18 -9
  19. package/esm/src/agent/react/use-agents.d.ts +33 -0
  20. package/esm/src/agent/react/use-agents.d.ts.map +1 -0
  21. package/esm/src/agent/react/use-agents.js +72 -0
  22. package/esm/src/agent/react/use-chat/index.d.ts +1 -1
  23. package/esm/src/agent/react/use-chat/index.d.ts.map +1 -1
  24. package/esm/src/agent/react/use-chat/types.d.ts +3 -2
  25. package/esm/src/agent/react/use-chat/types.d.ts.map +1 -1
  26. package/esm/src/agent/react/use-chat/use-chat.d.ts +12 -1
  27. package/esm/src/agent/react/use-chat/use-chat.d.ts.map +1 -1
  28. package/esm/src/agent/react/use-chat/use-chat.js +47 -7
  29. package/esm/src/agent/react/use-chat/utils.d.ts.map +1 -1
  30. package/esm/src/agent/react/use-chat/utils.js +4 -0
  31. package/esm/src/agent/runtime/message-adapter.d.ts.map +1 -1
  32. package/esm/src/agent/runtime/message-adapter.js +3 -1
  33. package/esm/src/agent/runtime/text-generation-runtime-message-converter.d.ts.map +1 -1
  34. package/esm/src/agent/runtime/text-generation-runtime-message-converter.js +6 -2
  35. package/esm/src/chat/index.d.ts +17 -7
  36. package/esm/src/chat/index.d.ts.map +1 -1
  37. package/esm/src/chat/index.js +33 -7
  38. package/esm/src/chat/protocol.d.ts +13 -1
  39. package/esm/src/chat/protocol.d.ts.map +1 -1
  40. package/esm/src/chat/upload-handler.d.ts +55 -0
  41. package/esm/src/chat/upload-handler.d.ts.map +1 -0
  42. package/esm/src/chat/upload-handler.js +180 -0
  43. package/esm/src/discovery/import-rewriter.d.ts +1 -1
  44. package/esm/src/discovery/import-rewriter.d.ts.map +1 -1
  45. package/esm/src/discovery/import-rewriter.js +2 -0
  46. package/esm/src/discovery/transpiler.d.ts.map +1 -1
  47. package/esm/src/discovery/transpiler.js +2 -0
  48. package/esm/src/embedding/index.d.ts +0 -2
  49. package/esm/src/embedding/index.d.ts.map +1 -1
  50. package/esm/src/embedding/index.js +0 -1
  51. package/esm/src/embedding/upload-handler.d.ts +2 -13
  52. package/esm/src/embedding/upload-handler.d.ts.map +1 -1
  53. package/esm/src/embedding/upload-handler.js +24 -17
  54. package/esm/src/modules/import-map/default-import-map.d.ts.map +1 -1
  55. package/esm/src/modules/import-map/default-import-map.js +0 -5
  56. package/esm/src/react/components/chat/agent-card.d.ts +84 -11
  57. package/esm/src/react/components/chat/agent-card.d.ts.map +1 -1
  58. package/esm/src/react/components/chat/agent-card.js +151 -57
  59. package/esm/src/react/components/chat/agent-picker.d.ts +166 -0
  60. package/esm/src/react/components/chat/agent-picker.d.ts.map +1 -0
  61. package/esm/src/react/components/chat/agent-picker.js +183 -0
  62. package/esm/src/react/components/chat/chat/components/animations.js +1 -1
  63. package/esm/src/react/components/chat/chat/components/attachment-pill.d.ts +125 -3
  64. package/esm/src/react/components/chat/chat/components/attachment-pill.d.ts.map +1 -1
  65. package/esm/src/react/components/chat/chat/components/attachment-pill.js +209 -25
  66. package/esm/src/react/components/chat/chat/components/attachments-panel.d.ts +149 -0
  67. package/esm/src/react/components/chat/chat/components/attachments-panel.d.ts.map +1 -0
  68. package/esm/src/react/components/chat/chat/components/attachments-panel.js +187 -0
  69. package/esm/src/react/components/chat/chat/components/branch-picker.d.ts +13 -2
  70. package/esm/src/react/components/chat/chat/components/branch-picker.d.ts.map +1 -1
  71. package/esm/src/react/components/chat/chat/components/branch-picker.js +6 -8
  72. package/esm/src/react/components/chat/chat/components/chat-messages-skeleton.d.ts +20 -0
  73. package/esm/src/react/components/chat/chat/components/chat-messages-skeleton.d.ts.map +1 -0
  74. package/esm/src/react/components/chat/chat/components/chat-messages-skeleton.js +31 -0
  75. package/esm/src/react/components/chat/chat/components/code-block.d.ts +9 -1
  76. package/esm/src/react/components/chat/chat/components/code-block.d.ts.map +1 -1
  77. package/esm/src/react/components/chat/chat/components/code-block.js +14 -6
  78. package/esm/src/react/components/chat/chat/components/drop-zone.d.ts +11 -4
  79. package/esm/src/react/components/chat/chat/components/drop-zone.d.ts.map +1 -1
  80. package/esm/src/react/components/chat/chat/components/drop-zone.js +10 -8
  81. package/esm/src/react/components/chat/chat/components/empty-state.d.ts +2 -1
  82. package/esm/src/react/components/chat/chat/components/empty-state.d.ts.map +1 -1
  83. package/esm/src/react/components/chat/chat/components/empty-state.js +7 -8
  84. package/esm/src/react/components/chat/chat/components/inference-badge.d.ts +6 -2
  85. package/esm/src/react/components/chat/chat/components/inference-badge.d.ts.map +1 -1
  86. package/esm/src/react/components/chat/chat/components/inference-badge.js +5 -4
  87. package/esm/src/react/components/chat/chat/components/inline-citation.d.ts +9 -1
  88. package/esm/src/react/components/chat/chat/components/inline-citation.d.ts.map +1 -1
  89. package/esm/src/react/components/chat/chat/components/inline-citation.js +19 -20
  90. package/esm/src/react/components/chat/chat/components/message-actions.d.ts +28 -5
  91. package/esm/src/react/components/chat/chat/components/message-actions.d.ts.map +1 -1
  92. package/esm/src/react/components/chat/chat/components/message-actions.js +24 -36
  93. package/esm/src/react/components/chat/chat/components/message-edit-form.d.ts +7 -2
  94. package/esm/src/react/components/chat/chat/components/message-edit-form.d.ts.map +1 -1
  95. package/esm/src/react/components/chat/chat/components/message-edit-form.js +5 -5
  96. package/esm/src/react/components/chat/chat/components/message-feedback.d.ts +11 -1
  97. package/esm/src/react/components/chat/chat/components/message-feedback.d.ts.map +1 -1
  98. package/esm/src/react/components/chat/chat/components/message-feedback.js +9 -11
  99. package/esm/src/react/components/chat/chat/components/quick-actions.d.ts.map +1 -1
  100. package/esm/src/react/components/chat/chat/components/quick-actions.js +3 -1
  101. package/esm/src/react/components/chat/chat/components/reasoning.d.ts +66 -3
  102. package/esm/src/react/components/chat/chat/components/reasoning.d.ts.map +1 -1
  103. package/esm/src/react/components/chat/chat/components/reasoning.js +95 -21
  104. package/esm/src/react/components/chat/chat/components/sidebar.d.ts +178 -12
  105. package/esm/src/react/components/chat/chat/components/sidebar.d.ts.map +1 -1
  106. package/esm/src/react/components/chat/chat/components/sidebar.js +228 -45
  107. package/esm/src/react/components/chat/chat/components/skill-badge.d.ts +6 -1
  108. package/esm/src/react/components/chat/chat/components/skill-badge.d.ts.map +1 -1
  109. package/esm/src/react/components/chat/chat/components/skill-badge.js +6 -5
  110. package/esm/src/react/components/chat/chat/components/skill-tool.d.ts +37 -0
  111. package/esm/src/react/components/chat/chat/components/skill-tool.d.ts.map +1 -0
  112. package/esm/src/react/components/chat/chat/components/skill-tool.js +46 -0
  113. package/esm/src/react/components/chat/chat/components/sources.d.ts +55 -3
  114. package/esm/src/react/components/chat/chat/components/sources.d.ts.map +1 -1
  115. package/esm/src/react/components/chat/chat/components/sources.js +50 -16
  116. package/esm/src/react/components/chat/chat/components/step-indicator.d.ts +42 -3
  117. package/esm/src/react/components/chat/chat/components/step-indicator.d.ts.map +1 -1
  118. package/esm/src/react/components/chat/chat/components/step-indicator.js +55 -12
  119. package/esm/src/react/components/chat/chat/components/tab-switcher.d.ts +1 -1
  120. package/esm/src/react/components/chat/chat/components/tab-switcher.d.ts.map +1 -1
  121. package/esm/src/react/components/chat/chat/components/tab-switcher.js +3 -3
  122. package/esm/src/react/components/chat/chat/components/tool-ui.d.ts +96 -3
  123. package/esm/src/react/components/chat/chat/components/tool-ui.d.ts.map +1 -1
  124. package/esm/src/react/components/chat/chat/components/tool-ui.js +158 -36
  125. package/esm/src/react/components/chat/chat/composition/api.d.ts +4 -2
  126. package/esm/src/react/components/chat/chat/composition/api.d.ts.map +1 -1
  127. package/esm/src/react/components/chat/chat/composition/api.js +4 -2
  128. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts +112 -5
  129. package/esm/src/react/components/chat/chat/composition/chat-composer.d.ts.map +1 -1
  130. package/esm/src/react/components/chat/chat/composition/chat-composer.js +251 -61
  131. package/esm/src/react/components/chat/chat/composition/chat-empty-state.d.ts +78 -0
  132. package/esm/src/react/components/chat/chat/composition/chat-empty-state.d.ts.map +1 -0
  133. package/esm/src/react/components/chat/chat/composition/chat-empty-state.js +63 -0
  134. package/esm/src/react/components/chat/chat/composition/chat-empty.d.ts +4 -1
  135. package/esm/src/react/components/chat/chat/composition/chat-empty.d.ts.map +1 -1
  136. package/esm/src/react/components/chat/chat/composition/chat-empty.js +11 -10
  137. package/esm/src/react/components/chat/chat/composition/chat-message-list.d.ts +11 -3
  138. package/esm/src/react/components/chat/chat/composition/chat-message-list.d.ts.map +1 -1
  139. package/esm/src/react/components/chat/chat/composition/chat-message-list.js +81 -111
  140. package/esm/src/react/components/chat/chat/composition/chat-root.d.ts +4 -0
  141. package/esm/src/react/components/chat/chat/composition/chat-root.d.ts.map +1 -1
  142. package/esm/src/react/components/chat/chat/composition/chat-root.js +3 -1
  143. package/esm/src/react/components/chat/chat/composition/error-banner.d.ts +4 -0
  144. package/esm/src/react/components/chat/chat/composition/error-banner.d.ts.map +1 -1
  145. package/esm/src/react/components/chat/chat/composition/error-banner.js +10 -7
  146. package/esm/src/react/components/chat/chat/composition/message.d.ts +123 -5
  147. package/esm/src/react/components/chat/chat/composition/message.d.ts.map +1 -1
  148. package/esm/src/react/components/chat/chat/composition/message.js +332 -53
  149. package/esm/src/react/components/chat/chat/composition/model-avatar.d.ts +6 -1
  150. package/esm/src/react/components/chat/chat/composition/model-avatar.d.ts.map +1 -1
  151. package/esm/src/react/components/chat/chat/composition/model-avatar.js +3 -4
  152. package/esm/src/react/components/chat/chat/composition/pending-message.d.ts +31 -0
  153. package/esm/src/react/components/chat/chat/composition/pending-message.d.ts.map +1 -0
  154. package/esm/src/react/components/chat/chat/composition/pending-message.js +31 -0
  155. package/esm/src/react/components/chat/chat/contexts/chat-context.d.ts +4 -0
  156. package/esm/src/react/components/chat/chat/contexts/chat-context.d.ts.map +1 -1
  157. package/esm/src/react/components/chat/chat/contexts/composer-context.d.ts +1 -0
  158. package/esm/src/react/components/chat/chat/contexts/composer-context.d.ts.map +1 -1
  159. package/esm/src/react/components/chat/chat/contexts/conversations-context.d.ts +29 -0
  160. package/esm/src/react/components/chat/chat/contexts/conversations-context.d.ts.map +1 -0
  161. package/esm/src/react/components/chat/chat/contexts/conversations-context.js +39 -0
  162. package/esm/src/react/components/chat/chat/contexts/index.d.ts +1 -1
  163. package/esm/src/react/components/chat/chat/contexts/index.d.ts.map +1 -1
  164. package/esm/src/react/components/chat/chat/contexts/index.js +1 -1
  165. package/esm/src/react/components/chat/chat/contexts/message-context.d.ts +2 -0
  166. package/esm/src/react/components/chat/chat/contexts/message-context.d.ts.map +1 -1
  167. package/esm/src/react/components/chat/chat/hooks/use-clipboard.d.ts +10 -0
  168. package/esm/src/react/components/chat/chat/hooks/use-clipboard.d.ts.map +1 -0
  169. package/esm/src/react/components/chat/chat/hooks/use-clipboard.js +34 -0
  170. package/esm/src/react/components/chat/chat/hooks/use-conversation.d.ts +21 -0
  171. package/esm/src/react/components/chat/chat/hooks/use-conversation.d.ts.map +1 -0
  172. package/esm/src/react/components/chat/chat/hooks/use-conversation.js +54 -0
  173. package/esm/src/react/components/chat/chat/hooks/use-conversations.d.ts +67 -0
  174. package/esm/src/react/components/chat/chat/hooks/use-conversations.d.ts.map +1 -0
  175. package/esm/src/react/components/chat/chat/hooks/use-conversations.js +317 -0
  176. package/esm/src/react/components/chat/chat/hooks/use-drop-zone.d.ts +27 -0
  177. package/esm/src/react/components/chat/chat/hooks/use-drop-zone.d.ts.map +1 -0
  178. package/esm/src/react/components/chat/chat/hooks/use-drop-zone.js +50 -0
  179. package/esm/src/react/components/chat/chat/hooks/use-stick-to-bottom.d.ts +49 -0
  180. package/esm/src/react/components/chat/chat/hooks/use-stick-to-bottom.d.ts.map +1 -0
  181. package/esm/src/react/components/chat/chat/hooks/use-stick-to-bottom.js +120 -0
  182. package/esm/src/react/components/chat/chat/hooks/use-upload.d.ts +34 -0
  183. package/esm/src/react/components/chat/chat/hooks/use-upload.d.ts.map +1 -0
  184. package/esm/src/react/components/chat/chat/hooks/use-upload.js +147 -0
  185. package/esm/src/react/components/chat/chat/hooks/use-uploads-registry.d.ts +37 -0
  186. package/esm/src/react/components/chat/chat/hooks/use-uploads-registry.d.ts.map +1 -0
  187. package/esm/src/react/components/chat/chat/hooks/use-uploads-registry.js +178 -0
  188. package/esm/src/react/components/chat/chat/index.d.ts +171 -31
  189. package/esm/src/react/components/chat/chat/index.d.ts.map +1 -1
  190. package/esm/src/react/components/chat/chat/index.js +371 -77
  191. package/esm/src/react/components/chat/chat/persistence/conversation-store.d.ts +63 -0
  192. package/esm/src/react/components/chat/chat/persistence/conversation-store.d.ts.map +1 -0
  193. package/esm/src/react/components/chat/chat/persistence/conversation-store.js +1 -0
  194. package/esm/src/react/components/chat/chat/persistence/local-conversation-store.d.ts +13 -0
  195. package/esm/src/react/components/chat/chat/persistence/local-conversation-store.d.ts.map +1 -0
  196. package/esm/src/react/components/chat/chat/persistence/local-conversation-store.js +102 -0
  197. package/esm/src/react/components/chat/chat/persistence/memory-conversation-store.d.ts +11 -0
  198. package/esm/src/react/components/chat/chat/persistence/memory-conversation-store.d.ts.map +1 -0
  199. package/esm/src/react/components/chat/chat/persistence/memory-conversation-store.js +33 -0
  200. package/esm/src/react/components/chat/chat/utils/message-parts.d.ts +4 -1
  201. package/esm/src/react/components/chat/chat/utils/message-parts.d.ts.map +1 -1
  202. package/esm/src/react/components/chat/chat/utils/message-parts.js +4 -0
  203. package/esm/src/react/components/chat/chat-actions.d.ts +164 -0
  204. package/esm/src/react/components/chat/chat-actions.d.ts.map +1 -0
  205. package/esm/src/react/components/chat/chat-actions.js +191 -0
  206. package/esm/src/react/components/chat/chat-agent-picker.d.ts +50 -0
  207. package/esm/src/react/components/chat/chat-agent-picker.d.ts.map +1 -0
  208. package/esm/src/react/components/chat/chat-agent-picker.js +40 -0
  209. package/esm/src/react/components/chat/chat-theme-scope.d.ts +26 -0
  210. package/esm/src/react/components/chat/chat-theme-scope.d.ts.map +1 -0
  211. package/esm/src/react/components/chat/chat-theme-scope.js +27 -0
  212. package/esm/src/react/components/chat/chat-tokens-style.d.ts +21 -0
  213. package/esm/src/react/components/chat/chat-tokens-style.d.ts.map +1 -0
  214. package/esm/src/react/components/chat/chat-tokens-style.js +24 -0
  215. package/esm/src/react/components/chat/chat.d.ts +5 -5
  216. package/esm/src/react/components/chat/chat.d.ts.map +1 -1
  217. package/esm/src/react/components/chat/chat.js +5 -5
  218. package/esm/src/react/components/chat/color-mode.d.ts +46 -0
  219. package/esm/src/react/components/chat/color-mode.d.ts.map +1 -0
  220. package/esm/src/react/components/chat/color-mode.js +123 -0
  221. package/esm/src/react/components/chat/error-boundary.js +2 -2
  222. package/esm/src/react/components/chat/icons/index.d.ts +8 -0
  223. package/esm/src/react/components/chat/icons/index.d.ts.map +1 -1
  224. package/esm/src/react/components/chat/icons/index.js +64 -0
  225. package/esm/src/react/components/chat/markdown.d.ts +24 -1
  226. package/esm/src/react/components/chat/markdown.d.ts.map +1 -1
  227. package/esm/src/react/components/chat/markdown.js +122 -38
  228. package/esm/src/react/components/chat/model-selector.d.ts +130 -8
  229. package/esm/src/react/components/chat/model-selector.d.ts.map +1 -1
  230. package/esm/src/react/components/chat/model-selector.js +148 -121
  231. package/esm/src/react/components/chat/theme.d.ts +9 -12
  232. package/esm/src/react/components/chat/theme.d.ts.map +1 -1
  233. package/esm/src/react/components/chat/theme.js +149 -93
  234. package/esm/src/react/components/chat/ui/alert.d.ts +30 -0
  235. package/esm/src/react/components/chat/ui/alert.d.ts.map +1 -0
  236. package/esm/src/react/components/chat/ui/alert.js +35 -0
  237. package/esm/src/react/components/chat/ui/app-shell.d.ts +155 -0
  238. package/esm/src/react/components/chat/ui/app-shell.d.ts.map +1 -0
  239. package/esm/src/react/components/chat/ui/app-shell.js +276 -0
  240. package/esm/src/react/components/chat/ui/avatar.d.ts +24 -0
  241. package/esm/src/react/components/chat/ui/avatar.d.ts.map +1 -0
  242. package/esm/src/react/components/chat/ui/avatar.js +44 -0
  243. package/esm/src/react/components/chat/ui/badge.d.ts +24 -0
  244. package/esm/src/react/components/chat/ui/badge.d.ts.map +1 -0
  245. package/esm/src/react/components/chat/ui/badge.js +30 -0
  246. package/esm/src/react/components/chat/ui/button.d.ts +44 -0
  247. package/esm/src/react/components/chat/ui/button.d.ts.map +1 -0
  248. package/esm/src/react/components/chat/ui/button.js +108 -0
  249. package/esm/src/react/components/chat/ui/card.d.ts +42 -0
  250. package/esm/src/react/components/chat/ui/card.d.ts.map +1 -0
  251. package/esm/src/react/components/chat/ui/card.js +55 -0
  252. package/esm/src/react/components/chat/ui/checkbox.d.ts +28 -0
  253. package/esm/src/react/components/chat/ui/checkbox.d.ts.map +1 -0
  254. package/esm/src/react/components/chat/ui/checkbox.js +36 -0
  255. package/esm/src/react/components/chat/ui/code-block.d.ts +89 -0
  256. package/esm/src/react/components/chat/ui/code-block.d.ts.map +1 -0
  257. package/esm/src/react/components/chat/ui/code-block.js +277 -0
  258. package/esm/src/react/components/chat/ui/collapsible.d.ts +30 -0
  259. package/esm/src/react/components/chat/ui/collapsible.d.ts.map +1 -0
  260. package/esm/src/react/components/chat/ui/collapsible.js +44 -0
  261. package/esm/src/react/components/chat/ui/command.d.ts +65 -0
  262. package/esm/src/react/components/chat/ui/command.d.ts.map +1 -0
  263. package/esm/src/react/components/chat/ui/command.js +121 -0
  264. package/esm/src/react/components/chat/ui/cva.d.ts +36 -0
  265. package/esm/src/react/components/chat/ui/cva.d.ts.map +1 -0
  266. package/esm/src/react/components/chat/ui/cva.js +45 -0
  267. package/esm/src/react/components/chat/ui/dialog.d.ts +55 -0
  268. package/esm/src/react/components/chat/ui/dialog.d.ts.map +1 -0
  269. package/esm/src/react/components/chat/ui/dialog.js +116 -0
  270. package/esm/src/react/components/chat/ui/drawer.d.ts +41 -0
  271. package/esm/src/react/components/chat/ui/drawer.d.ts.map +1 -0
  272. package/esm/src/react/components/chat/ui/drawer.js +92 -0
  273. package/esm/src/react/components/chat/ui/dropdown-menu.d.ts +63 -0
  274. package/esm/src/react/components/chat/ui/dropdown-menu.d.ts.map +1 -0
  275. package/esm/src/react/components/chat/ui/dropdown-menu.js +76 -0
  276. package/esm/src/react/components/chat/ui/file-type.d.ts +26 -0
  277. package/esm/src/react/components/chat/ui/file-type.d.ts.map +1 -0
  278. package/esm/src/react/components/chat/ui/file-type.js +235 -0
  279. package/esm/src/react/components/chat/ui/floating.d.ts +29 -0
  280. package/esm/src/react/components/chat/ui/floating.d.ts.map +1 -0
  281. package/esm/src/react/components/chat/ui/floating.js +90 -0
  282. package/esm/src/react/components/chat/ui/icon-button.d.ts +19 -0
  283. package/esm/src/react/components/chat/ui/icon-button.d.ts.map +1 -0
  284. package/esm/src/react/components/chat/ui/icon-button.js +20 -0
  285. package/esm/src/react/components/chat/ui/index.d.ts +43 -0
  286. package/esm/src/react/components/chat/ui/index.d.ts.map +1 -0
  287. package/esm/src/react/components/chat/ui/index.js +42 -0
  288. package/esm/src/react/components/chat/ui/input.d.ts +27 -0
  289. package/esm/src/react/components/chat/ui/input.d.ts.map +1 -0
  290. package/esm/src/react/components/chat/ui/input.js +41 -0
  291. package/esm/src/react/components/chat/ui/label.d.ts +29 -0
  292. package/esm/src/react/components/chat/ui/label.d.ts.map +1 -0
  293. package/esm/src/react/components/chat/ui/label.js +40 -0
  294. package/esm/src/react/components/chat/ui/list.d.ts +47 -0
  295. package/esm/src/react/components/chat/ui/list.d.ts.map +1 -0
  296. package/esm/src/react/components/chat/ui/list.js +40 -0
  297. package/esm/src/react/components/chat/ui/pill.d.ts +26 -0
  298. package/esm/src/react/components/chat/ui/pill.d.ts.map +1 -0
  299. package/esm/src/react/components/chat/ui/pill.js +39 -0
  300. package/esm/src/react/components/chat/ui/popover.d.ts +47 -0
  301. package/esm/src/react/components/chat/ui/popover.d.ts.map +1 -0
  302. package/esm/src/react/components/chat/ui/popover.js +68 -0
  303. package/esm/src/react/components/chat/ui/progress-bar.d.ts +20 -0
  304. package/esm/src/react/components/chat/ui/progress-bar.d.ts.map +1 -0
  305. package/esm/src/react/components/chat/ui/progress-bar.js +31 -0
  306. package/esm/src/react/components/chat/ui/radio.d.ts +25 -0
  307. package/esm/src/react/components/chat/ui/radio.d.ts.map +1 -0
  308. package/esm/src/react/components/chat/ui/radio.js +29 -0
  309. package/esm/src/react/components/chat/ui/scroll-fade.d.ts +23 -0
  310. package/esm/src/react/components/chat/ui/scroll-fade.d.ts.map +1 -0
  311. package/esm/src/react/components/chat/ui/scroll-fade.js +40 -0
  312. package/esm/src/react/components/chat/ui/select.d.ts +64 -0
  313. package/esm/src/react/components/chat/ui/select.d.ts.map +1 -0
  314. package/esm/src/react/components/chat/ui/select.js +148 -0
  315. package/esm/src/react/components/chat/ui/shimmer.d.ts +25 -0
  316. package/esm/src/react/components/chat/ui/shimmer.d.ts.map +1 -0
  317. package/esm/src/react/components/chat/ui/shimmer.js +24 -0
  318. package/esm/src/react/components/chat/ui/skeleton.d.ts +14 -0
  319. package/esm/src/react/components/chat/ui/skeleton.d.ts.map +1 -0
  320. package/esm/src/react/components/chat/ui/skeleton.js +12 -0
  321. package/esm/src/react/components/chat/ui/slot.d.ts +21 -0
  322. package/esm/src/react/components/chat/ui/slot.d.ts.map +1 -0
  323. package/esm/src/react/components/chat/ui/slot.js +70 -0
  324. package/esm/src/react/components/chat/ui/status.d.ts +28 -0
  325. package/esm/src/react/components/chat/ui/status.d.ts.map +1 -0
  326. package/esm/src/react/components/chat/ui/status.js +23 -0
  327. package/esm/src/react/components/chat/ui/switch.d.ts +34 -0
  328. package/esm/src/react/components/chat/ui/switch.d.ts.map +1 -0
  329. package/esm/src/react/components/chat/ui/switch.js +58 -0
  330. package/esm/src/react/components/chat/ui/tabs.d.ts +44 -0
  331. package/esm/src/react/components/chat/ui/tabs.d.ts.map +1 -0
  332. package/esm/src/react/components/chat/ui/tabs.js +51 -0
  333. package/esm/src/react/components/chat/ui/tag.d.ts +22 -0
  334. package/esm/src/react/components/chat/ui/tag.d.ts.map +1 -0
  335. package/esm/src/react/components/chat/ui/tag.js +27 -0
  336. package/esm/src/react/components/chat/ui/textarea.d.ts +22 -0
  337. package/esm/src/react/components/chat/ui/textarea.d.ts.map +1 -0
  338. package/esm/src/react/components/chat/ui/textarea.js +35 -0
  339. package/esm/src/react/components/chat/ui/tooltip.d.ts +40 -0
  340. package/esm/src/react/components/chat/ui/tooltip.d.ts.map +1 -0
  341. package/esm/src/react/components/chat/ui/tooltip.js +132 -0
  342. package/esm/src/react/primitives/input-box.d.ts.map +1 -1
  343. package/esm/src/react/primitives/input-box.js +17 -4
  344. package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
  345. package/esm/src/server/handlers/dev/framework-candidates.generated.js +9437 -1064
  346. package/esm/src/server/handlers/dev/projects/html-shell.d.ts +1 -1
  347. package/esm/src/server/handlers/dev/projects/html-shell.d.ts.map +1 -1
  348. package/esm/src/server/handlers/dev/projects/html-shell.js +1 -12
  349. package/esm/src/server/handlers/request/public-agents-list.handler.d.ts +18 -0
  350. package/esm/src/server/handlers/request/public-agents-list.handler.d.ts.map +1 -0
  351. package/esm/src/server/handlers/request/public-agents-list.handler.js +44 -0
  352. package/esm/src/server/runtime-handler/index.d.ts +1 -1
  353. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  354. package/esm/src/server/runtime-handler/index.js +3 -0
  355. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts +1 -1
  356. package/esm/src/studio/bridge/bridge-bundle.generated.d.ts.map +1 -1
  357. package/esm/src/studio/bridge/bridge-bundle.generated.js +3 -2
  358. package/esm/src/utils/version-constant.d.ts +1 -1
  359. package/esm/src/utils/version-constant.js +1 -1
  360. package/esm/src/workflow/blob/local-storage.d.ts +32 -0
  361. package/esm/src/workflow/blob/local-storage.d.ts.map +1 -0
  362. package/esm/src/workflow/blob/local-storage.js +179 -0
  363. package/esm/src/workflow/blob/types.d.ts +5 -0
  364. package/esm/src/workflow/blob/types.d.ts.map +1 -1
  365. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts +11 -0
  366. package/esm/src/workflow/blob/veryfront-cloud-storage.d.ts.map +1 -1
  367. package/esm/src/workflow/blob/veryfront-cloud-storage.js +36 -0
  368. package/package.json +5 -1
  369. package/esm/src/embedding/react/use-uploads.d.ts +0 -33
  370. package/esm/src/embedding/react/use-uploads.d.ts.map +0 -1
  371. package/esm/src/embedding/react/use-uploads.js +0 -76
  372. package/esm/src/react/components/chat/chat/components/uploads-panel.d.ts +0 -20
  373. package/esm/src/react/components/chat/chat/components/uploads-panel.d.ts.map +0 -1
  374. package/esm/src/react/components/chat/chat/components/uploads-panel.js +0 -49
  375. package/esm/src/react/components/chat/chat/contexts/thread-list-context.d.ts +0 -28
  376. package/esm/src/react/components/chat/chat/contexts/thread-list-context.d.ts.map +0 -1
  377. package/esm/src/react/components/chat/chat/contexts/thread-list-context.js +0 -27
  378. package/esm/src/react/components/chat/chat/hooks/use-threads.d.ts +0 -28
  379. package/esm/src/react/components/chat/chat/hooks/use-threads.d.ts.map +0 -1
  380. package/esm/src/react/components/chat/chat/hooks/use-threads.js +0 -151
  381. package/esm/src/react/components/chat/chat-with-sidebar.d.ts +0 -110
  382. package/esm/src/react/components/chat/chat-with-sidebar.d.ts.map +0 -1
  383. package/esm/src/react/components/chat/chat-with-sidebar.js +0 -167
  384. package/esm/src/react/components/chat/message.d.ts +0 -42
  385. package/esm/src/react/components/chat/message.d.ts.map +0 -1
  386. package/esm/src/react/components/chat/message.js +0 -69
@@ -1,18 +1,140 @@
1
1
  import * as React from "../../../../../../react/react.js";
2
+ /** Upload lifecycle state (shadcn-style). Drives the icon, label, and treatment. */
3
+ export type AttachmentState = "selected" | "uploading" | "processing" | "uploaded" | "error";
2
4
  /** Public API contract for attachment info. */
3
5
  export interface AttachmentInfo {
4
6
  id: string;
5
7
  name: string;
8
+ /** Legacy two-value status; prefer `state` for the full lifecycle. */
6
9
  status?: "uploading" | "ready";
10
+ /** Upload lifecycle state — sets the icon, label, and container treatment. */
11
+ state?: AttachmentState;
12
+ /** Upload progress (0–100), shown in the `uploading` label. */
13
+ progress?: number;
7
14
  type?: string;
8
15
  size?: number;
9
16
  preview?: string;
17
+ /** Resolved URL once the file has finished uploading. */
18
+ url?: string;
19
+ }
20
+ /** Icon overrides for {@link AttachmentPill}. Each defaults to its glyph. */
21
+ export interface AttachmentPillIcons {
22
+ /** Override the remove (✕) glyph. */
23
+ remove?: React.ReactNode;
24
+ /** Override the retry glyph. */
25
+ retry?: React.ReactNode;
10
26
  }
11
27
  /** Props accepted by attachment pill. */
12
- export interface AttachmentPillProps {
28
+ export interface AttachmentPillProps extends React.HTMLAttributes<HTMLDivElement> {
13
29
  attachment: AttachmentInfo;
14
30
  onRemove?: (id: string) => void;
31
+ /** Retry handler — surfaces a retry button in the `error` state. */
32
+ onRetry?: (id: string) => void;
33
+ /** Override the remove / retry button icons. */
34
+ icons?: AttachmentPillIcons;
35
+ /**
36
+ * Draw the outline + surrounding box. `false` gives a flat, borderless row
37
+ * (e.g. `AttachmentsPanel`, where the pills are a plain list). @default true
38
+ */
39
+ bordered?: boolean;
40
+ /** Compose your own pill; when omitted, the default anatomy is rendered. */
41
+ children?: React.ReactNode;
42
+ }
43
+ /** Derived per-pill view state shared with `AttachmentPill.*` sub-parts. */
44
+ export interface AttachmentPillContextValue {
45
+ attachment: AttachmentInfo;
46
+ onRemove?: (id: string) => void;
47
+ onRetry?: (id: string) => void;
48
+ icons?: AttachmentPillIcons;
49
+ /** File extension (from the name, falling back to the media type). */
50
+ ext: string;
51
+ /** Tailwind color pair for the default (no-state) icon box. */
52
+ colorClass: string;
53
+ /** Whether the attachment resolves to an image. */
54
+ isImage: boolean;
55
+ /** The image `src` to show in the thumbnail (preview → url). */
56
+ imageSrc?: string;
57
+ /** Whether the current state is `error`. */
58
+ isError: boolean;
59
+ /** Whether a spinner overlay should show (uploading / processing). */
60
+ isBusy: boolean;
61
+ /** Whether the title should shimmer (uploading / processing). */
62
+ shimmerTitle: boolean;
63
+ /** The secondary label line for the current state. */
64
+ label: string;
65
+ /** Legacy dimming for the old `status="uploading"` API. */
66
+ legacyUploading: boolean;
67
+ /** Whether the remove control should render. */
68
+ showRemove: boolean;
69
+ /** The state glyph for the icon box (null → render the extension text). */
70
+ stateGlyph: React.ReactNode;
71
+ /** Tailwind classes for the icon box background/foreground. */
72
+ boxClass: string;
73
+ }
74
+ /**
75
+ * Read the enclosing `AttachmentPill` state. Throws when used outside an
76
+ * `AttachmentPill`.
77
+ */
78
+ export declare function useAttachmentPill(): AttachmentPillContextValue;
79
+ /**
80
+ * `AttachmentPill.Thumbnail` — the image square (with a busy overlay). Renders
81
+ * only when the attachment resolves to a non-error image with a source.
82
+ */
83
+ declare function AttachmentPillThumbnail({ className }: {
84
+ className?: string;
85
+ }): React.JSX.Element | null;
86
+ declare namespace AttachmentPillThumbnail {
87
+ var displayName: string;
88
+ }
89
+ /**
90
+ * `AttachmentPill.Icon` — the state-glyph / file-extension square shown when
91
+ * there is no image thumbnail.
92
+ */
93
+ declare function AttachmentPillIcon({ className }: {
94
+ className?: string;
95
+ }): React.JSX.Element;
96
+ declare namespace AttachmentPillIcon {
97
+ var displayName: string;
98
+ }
99
+ /** `AttachmentPill.Label` — the name + secondary state-line column. */
100
+ declare function AttachmentPillLabel({ className }: {
101
+ className?: string;
102
+ }): React.JSX.Element;
103
+ declare namespace AttachmentPillLabel {
104
+ var displayName: string;
105
+ }
106
+ /**
107
+ * `AttachmentPill.Retry` — the retry control. Renders only in the `error` state
108
+ * when an `onRetry` handler is provided.
109
+ */
110
+ declare function AttachmentPillRetry({ className }: {
111
+ className?: string;
112
+ }): React.JSX.Element | null;
113
+ declare namespace AttachmentPillRetry {
114
+ var displayName: string;
115
+ }
116
+ /**
117
+ * `AttachmentPill.Remove` — the remove (✕) control. Renders only when an
118
+ * `onRemove` handler is provided and the pill isn't a legacy uploading pill.
119
+ */
120
+ declare function AttachmentPillRemove({ className }: {
121
+ className?: string;
122
+ }): React.JSX.Element | null;
123
+ declare namespace AttachmentPillRemove {
124
+ var displayName: string;
15
125
  }
16
- /** Render attachment pill. */
17
- export declare function AttachmentPill({ attachment, onRemove, }: AttachmentPillProps): React.ReactElement;
126
+ /**
127
+ * AttachmentPill — render `<AttachmentPill attachment={…} />` for the default
128
+ * chip, or compose `AttachmentPill.Root` + `.Thumbnail` / `.Icon` / `.Label` /
129
+ * `.Retry` / `.Remove` for a custom layout. Publicly aliased as `Attachment`.
130
+ */
131
+ export declare const AttachmentPill: React.ForwardRefExoticComponent<AttachmentPillProps & React.RefAttributes<HTMLDivElement>> & {
132
+ Root: React.ForwardRefExoticComponent<AttachmentPillProps & React.RefAttributes<HTMLDivElement>>;
133
+ Thumbnail: typeof AttachmentPillThumbnail;
134
+ Icon: typeof AttachmentPillIcon;
135
+ Label: typeof AttachmentPillLabel;
136
+ Retry: typeof AttachmentPillRetry;
137
+ Remove: typeof AttachmentPillRemove;
138
+ };
139
+ export {};
18
140
  //# sourceMappingURL=attachment-pill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-pill.d.ts","sourceRoot":"","sources":["../../../../../../../src/src/react/components/chat/chat/components/attachment-pill.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,kCAAkC,CAAC;AAG1D,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,yCAAyC;AACzC,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAsBD,8BAA8B;AAC9B,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,GACT,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAqE1C"}
1
+ {"version":3,"file":"attachment-pill.d.ts","sourceRoot":"","sources":["../../../../../../../src/src/react/components/chat/chat/components/attachment-pill.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
1
  import * as React from "../../../../../../react/react.js";
2
2
  import { cn } from "../../theme.js";
3
+ import { CheckIcon, ClockIcon, FileTextIcon, RefreshCwIcon } from "../../icons/index.js";
4
+ import { Button } from "../../ui/button.js";
5
+ import { Shimmer } from "./animations.js";
6
+ import { COMPONENT_ERROR } from "../../../../../errors/error-registry.js";
3
7
  const FILE_TYPE_COLORS = {
4
- pdf: "text-red-500 bg-red-500/10",
5
- docx: "text-blue-500 bg-blue-500/10",
6
- csv: "text-emerald-500 bg-emerald-500/10",
7
- txt: "text-neutral-500 bg-neutral-500/10",
8
- md: "text-purple-500 bg-purple-500/10",
9
- mdx: "text-purple-500 bg-purple-500/10",
8
+ pdf: "text-red-700 bg-red-100",
9
+ docx: "text-blue-700 bg-blue-100",
10
+ csv: "text-emerald-700 bg-emerald-100",
11
+ txt: "text-[var(--faint)] bg-[var(--tertiary)]",
12
+ md: "text-purple-700 bg-purple-100",
13
+ mdx: "text-purple-700 bg-purple-100",
10
14
  };
11
15
  function getExtension(name) {
12
16
  const dot = name.lastIndexOf(".");
@@ -19,23 +23,203 @@ function formatSize(bytes) {
19
23
  return `${(bytes / 1024).toFixed(0)} KB`;
20
24
  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
21
25
  }
22
- /** Render attachment pill. */
23
- export function AttachmentPill({ attachment, onRemove, }) {
24
- const [showPreview, setShowPreview] = React.useState(false);
25
- const ext = attachment.type ?? getExtension(attachment.name);
26
- const colorClass = FILE_TYPE_COLORS[ext] ?? "text-neutral-400 bg-neutral-400/10";
27
- return (React.createElement("span", { className: "relative inline-flex items-center gap-1.5 rounded-lg bg-[var(--card)] py-1 pl-2.5 pr-1.5 text-xs text-[var(--card-foreground)] shadow-sm", onMouseEnter: () => setShowPreview(true), onMouseLeave: () => setShowPreview(false) },
28
- React.createElement("span", { className: cn("inline-flex items-center justify-center rounded px-1 py-0.5 text-[9px] font-bold uppercase leading-none", colorClass) }, ext || "?"),
29
- React.createElement("span", { className: "truncate max-w-[120px]" }, attachment.name),
30
- attachment.size != null && (React.createElement("span", { className: "text-[10px] text-[var(--input-placeholder)] shrink-0" }, formatSize(attachment.size))),
31
- attachment.status === "uploading"
32
- ? (React.createElement("span", { className: "size-3 shrink-0 rounded-full border-2 border-neutral-400 border-t-transparent animate-spin" }))
33
- : onRemove && (React.createElement("button", { type: "button", onClick: () => onRemove(attachment.id), "aria-label": `Remove ${attachment.name}`, className: "size-4 shrink-0 flex items-center justify-center rounded-full hover:bg-[var(--accent)] text-[var(--input-placeholder)] hover:text-[var(--foreground)] transition-colors" },
34
- React.createElement("svg", { className: "size-3", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" },
35
- React.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
36
- React.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })))),
37
- showPreview && attachment.preview && (React.createElement("div", { className: "absolute bottom-full left-0 mb-2 z-50 w-64 pointer-events-none" },
38
- React.createElement("div", { className: "bg-[var(--card)] border border-[var(--border)] rounded-xl shadow-lg p-3 text-left" },
39
- React.createElement("p", { className: "text-[10px] font-medium text-[var(--muted-foreground)] uppercase mb-1" }, "Preview"),
40
- React.createElement("p", { className: "text-xs text-[var(--card-foreground)] line-clamp-4 whitespace-pre-wrap" }, attachment.preview))))));
26
+ function getTypeLabel(attachment, ext, mediaType) {
27
+ if (attachment.status === "uploading")
28
+ return "Uploading";
29
+ if (attachment.size != null)
30
+ return formatSize(attachment.size);
31
+ return ext ? ext.toUpperCase() : (mediaType || "File");
41
32
  }
33
+ /** Secondary line for the current lifecycle state. */
34
+ function getStateLabel(attachment, ext, mediaType) {
35
+ switch (attachment.state) {
36
+ case "selected":
37
+ return "Ready to upload";
38
+ case "uploading":
39
+ return attachment.progress != null
40
+ ? `Uploading · ${Math.round(attachment.progress)}%`
41
+ : "Uploading";
42
+ case "processing":
43
+ return "Processing document";
44
+ case "uploaded":
45
+ return attachment.size != null ? `Uploaded · ${formatSize(attachment.size)}` : "Uploaded";
46
+ case "error":
47
+ return "Upload failed. Try again.";
48
+ default:
49
+ return getTypeLabel(attachment, ext, mediaType);
50
+ }
51
+ }
52
+ /** A rounded spinner used while uploading. */
53
+ function Spinner() {
54
+ return (React.createElement("span", { className: "size-4.5 animate-spin rounded-full border-2 border-[var(--faint)] border-t-transparent" }));
55
+ }
56
+ /** Alert glyph for the error state (no dedicated icon in the barrel). */
57
+ function AlertGlyph() {
58
+ return (React.createElement("svg", { viewBox: "0 0 24 24", className: "size-4.5", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" },
59
+ React.createElement("circle", { cx: "12", cy: "12", r: "9" }),
60
+ React.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12.5" }),
61
+ React.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })));
62
+ }
63
+ const AttachmentPillContext = React.createContext(null);
64
+ /**
65
+ * Read the enclosing `AttachmentPill` state. Throws when used outside an
66
+ * `AttachmentPill`.
67
+ */
68
+ export function useAttachmentPill() {
69
+ const ctx = React.useContext(AttachmentPillContext);
70
+ if (!ctx) {
71
+ throw COMPONENT_ERROR.create({
72
+ detail: "useAttachmentPill must be used within a AttachmentPill",
73
+ });
74
+ }
75
+ return ctx;
76
+ }
77
+ /**
78
+ * `AttachmentPill.Root` — context provider + the chip wrapper. No children
79
+ * renders the default anatomy; pass children to recompose.
80
+ */
81
+ const AttachmentPillRoot = React.forwardRef(function AttachmentPill({ attachment, onRemove, onRetry, icons, bordered = true, className, children, ...props }, ref) {
82
+ const mediaType = attachment.type ?? "";
83
+ const ext = getExtension(attachment.name) ||
84
+ mediaType.split("/").pop()?.toLowerCase() || "";
85
+ const colorClass = FILE_TYPE_COLORS[ext] ??
86
+ "text-[var(--faint)] bg-[var(--tertiary)]";
87
+ const isImage = mediaType.startsWith("image/") ||
88
+ /\.(avif|gif|jpe?g|png|webp)$/i.test(attachment.name);
89
+ const state = attachment.state;
90
+ const isError = state === "error";
91
+ // Prefer the local object-URL `preview`; fall back to the resolved `url`
92
+ // (set on sent-message pills) so an uploaded image still shows a thumbnail.
93
+ const imageSrc = isImage ? (attachment.preview ?? attachment.url) : undefined;
94
+ const isBusy = state === "uploading" || state === "processing" ||
95
+ attachment.status === "uploading";
96
+ const shimmerTitle = state === "uploading" || state === "processing";
97
+ const label = getStateLabel(attachment, ext, mediaType);
98
+ // Legacy dimming only applies to the old `status` API (new states stay solid).
99
+ const legacyUploading = !state && attachment.status === "uploading";
100
+ const showRemove = Boolean(onRemove) &&
101
+ (Boolean(state) || attachment.status !== "uploading");
102
+ // The left box shows a state glyph when a lifecycle `state` is set, otherwise
103
+ // the file-type extension badge (default behaviour).
104
+ const stateGlyph = state === "selected"
105
+ ? React.createElement(ClockIcon, { className: "size-4.5 text-[var(--faint)]" })
106
+ : state === "uploading"
107
+ ? React.createElement(Spinner, null)
108
+ : state === "processing"
109
+ ? React.createElement(FileTextIcon, { className: "size-4.5 text-[var(--faint)]" })
110
+ : state === "uploaded"
111
+ ? React.createElement(CheckIcon, { className: "size-4.5 text-[var(--foreground)]" })
112
+ : isError
113
+ ? React.createElement(AlertGlyph, null)
114
+ : null;
115
+ const boxClass = isError
116
+ ? "bg-[color-mix(in_oklch,var(--destructive),transparent_86%)] text-[var(--destructive)]"
117
+ : state
118
+ ? "bg-[var(--tertiary)] text-[var(--foreground)]"
119
+ : colorClass;
120
+ const context = {
121
+ attachment,
122
+ onRemove,
123
+ onRetry,
124
+ icons,
125
+ ext,
126
+ colorClass,
127
+ isImage,
128
+ imageSrc,
129
+ isError,
130
+ isBusy,
131
+ shimmerTitle,
132
+ label,
133
+ legacyUploading,
134
+ showRemove,
135
+ stateGlyph,
136
+ boxClass,
137
+ };
138
+ return (React.createElement(AttachmentPillContext.Provider, { value: context },
139
+ React.createElement("div", { ...props, ref: ref, className: cn(
140
+ // No width here on purpose — width is the container's decision
141
+ // (composer uses a fixed chip, AttachmentsPanel fills the row).
142
+ "group relative flex items-center gap-3 rounded-[var(--radius-md)] bg-[var(--secondary)] py-1 pl-1 pr-2 text-[var(--foreground)]", bordered && "border", bordered && (state === "selected"
143
+ ? "border-dashed border-[var(--edge-medium)]"
144
+ : isError
145
+ ? "border-[var(--destructive)] bg-[color-mix(in_oklch,var(--destructive),transparent_94%)]"
146
+ : "border-[var(--edge-medium)]"), legacyUploading && "opacity-70", className) }, children ?? (React.createElement(React.Fragment, null,
147
+ imageSrc && !isError ? React.createElement(AttachmentPillThumbnail, null) : React.createElement(AttachmentPillIcon, null),
148
+ React.createElement(AttachmentPillLabel, null),
149
+ React.createElement(AttachmentPillRetry, null),
150
+ React.createElement(AttachmentPillRemove, null))))));
151
+ });
152
+ AttachmentPillRoot.displayName = "AttachmentPill.Root";
153
+ /**
154
+ * `AttachmentPill.Thumbnail` — the image square (with a busy overlay). Renders
155
+ * only when the attachment resolves to a non-error image with a source.
156
+ */
157
+ function AttachmentPillThumbnail({ className }) {
158
+ const { imageSrc, isError, isBusy } = useAttachmentPill();
159
+ if (!imageSrc || isError)
160
+ return null;
161
+ return (React.createElement("div", { className: cn("relative size-10 shrink-0 overflow-hidden rounded-[var(--radius-sm)] bg-[var(--tertiary)]", className) },
162
+ React.createElement("img", { alt: "", className: "size-full object-cover", src: imageSrc }),
163
+ isBusy && (React.createElement("div", { className: "absolute inset-0 flex items-center justify-center rounded-[var(--radius-sm)] bg-[var(--overlay)]" },
164
+ React.createElement("span", { className: "size-4 animate-spin rounded-full border-2 border-white border-t-transparent" })))));
165
+ }
166
+ AttachmentPillThumbnail.displayName = "AttachmentPill.Thumbnail";
167
+ /**
168
+ * `AttachmentPill.Icon` — the state-glyph / file-extension square shown when
169
+ * there is no image thumbnail.
170
+ */
171
+ function AttachmentPillIcon({ className }) {
172
+ const { boxClass, stateGlyph, ext, legacyUploading } = useAttachmentPill();
173
+ return (React.createElement("div", { className: cn("relative flex size-10 shrink-0 items-center justify-center rounded-[var(--radius-sm)] text-[10px] font-medium uppercase leading-none", boxClass, className) },
174
+ stateGlyph ?? ext ?? "file",
175
+ legacyUploading && (React.createElement("div", { className: "absolute inset-0 flex items-center justify-center rounded-[var(--radius-sm)] bg-[var(--overlay)]" },
176
+ React.createElement("span", { className: "size-4 animate-spin rounded-full border-2 border-white border-t-transparent" })))));
177
+ }
178
+ AttachmentPillIcon.displayName = "AttachmentPill.Icon";
179
+ /** `AttachmentPill.Label` — the name + secondary state-line column. */
180
+ function AttachmentPillLabel({ className }) {
181
+ const { attachment, shimmerTitle, isError, label } = useAttachmentPill();
182
+ return (React.createElement("div", { className: cn("flex min-w-0 flex-1 flex-col gap-0.5", className) },
183
+ React.createElement("p", { className: "truncate text-sm font-medium leading-tight" }, shimmerTitle
184
+ ? React.createElement(Shimmer, null, attachment.name || "Attachment")
185
+ : (attachment.name || "Attachment")),
186
+ React.createElement("p", { className: cn("truncate text-xs leading-tight", isError ? "text-[var(--destructive)]" : "text-[var(--faint)]") }, label)));
187
+ }
188
+ AttachmentPillLabel.displayName = "AttachmentPill.Label";
189
+ /**
190
+ * `AttachmentPill.Retry` — the retry control. Renders only in the `error` state
191
+ * when an `onRetry` handler is provided.
192
+ */
193
+ function AttachmentPillRetry({ className }) {
194
+ const { attachment, isError, onRetry, icons } = useAttachmentPill();
195
+ if (!isError || !onRetry)
196
+ return null;
197
+ return (React.createElement(Button, { type: "button", variant: "icon-ghost", size: "icon-xs", on: "card", onClick: () => onRetry(attachment.id), "aria-label": `Retry ${attachment.name}`, className: cn("shrink-0", className) }, icons?.retry ?? React.createElement(RefreshCwIcon, null)));
198
+ }
199
+ AttachmentPillRetry.displayName = "AttachmentPill.Retry";
200
+ /**
201
+ * `AttachmentPill.Remove` — the remove (✕) control. Renders only when an
202
+ * `onRemove` handler is provided and the pill isn't a legacy uploading pill.
203
+ */
204
+ function AttachmentPillRemove({ className }) {
205
+ const { attachment, showRemove, onRemove, icons } = useAttachmentPill();
206
+ if (!showRemove)
207
+ return null;
208
+ return (React.createElement(Button, { type: "button", variant: "icon-ghost", size: "icon-xs", on: "card", onClick: () => onRemove?.(attachment.id), "aria-label": `Remove ${attachment.name}`, className: cn("shrink-0 opacity-100 md:opacity-0 md:group-hover:opacity-100", className) }, icons?.remove ?? (React.createElement("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" },
209
+ React.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
210
+ React.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })))));
211
+ }
212
+ AttachmentPillRemove.displayName = "AttachmentPill.Remove";
213
+ /**
214
+ * AttachmentPill — render `<AttachmentPill attachment={…} />` for the default
215
+ * chip, or compose `AttachmentPill.Root` + `.Thumbnail` / `.Icon` / `.Label` /
216
+ * `.Retry` / `.Remove` for a custom layout. Publicly aliased as `Attachment`.
217
+ */
218
+ export const AttachmentPill = Object.assign(AttachmentPillRoot, {
219
+ Root: AttachmentPillRoot,
220
+ Thumbnail: AttachmentPillThumbnail,
221
+ Icon: AttachmentPillIcon,
222
+ Label: AttachmentPillLabel,
223
+ Retry: AttachmentPillRetry,
224
+ Remove: AttachmentPillRemove,
225
+ });
@@ -0,0 +1,149 @@
1
+ import * as React from "../../../../../../react/react.js";
2
+ /** Public API contract for uploaded file. */
3
+ export interface UploadedFile {
4
+ id: string;
5
+ name: string;
6
+ size?: number;
7
+ type?: string;
8
+ url?: string;
9
+ }
10
+ /** Per-panel state shared with `AttachmentsPanel.*` sub-parts. */
11
+ export interface AttachmentsPanelContextValue {
12
+ uploads: UploadedFile[];
13
+ /** `true` while the initial list is loading; shows the placeholder state. */
14
+ loading?: boolean;
15
+ onRemoveUpload?: (id: string) => void;
16
+ onAttach?: (files: FileList) => void;
17
+ attachAccept?: string;
18
+ /** Dismisses the panel; enables the close button when set. */
19
+ onClose?: () => void;
20
+ /** Opens the native file picker (wired to the hidden input in `Root`). */
21
+ triggerAttach: () => void;
22
+ }
23
+ /**
24
+ * Read the enclosing `AttachmentsPanel` state. Throws when used outside an
25
+ * `AttachmentsPanel`.
26
+ */
27
+ export declare function useAttachmentsPanel(): AttachmentsPanelContextValue;
28
+ /** Props accepted by `AttachmentsPanel` / `AttachmentsPanel.Root`. */
29
+ export interface AttachmentsPanelProps {
30
+ uploads?: UploadedFile[];
31
+ /**
32
+ * `true` while the initial list is still loading. When set and there are no
33
+ * uploads yet, the panel shows the `Loading` placeholder instead of `Empty`.
34
+ */
35
+ loading?: boolean;
36
+ onRemoveUpload?: (id: string) => void;
37
+ onAttach?: (files: FileList) => void;
38
+ attachAccept?: string;
39
+ /** Called to dismiss the panel; renders the header close button when set. */
40
+ onClose?: () => void;
41
+ className?: string;
42
+ /** Compose your own panel; when omitted, the default anatomy is rendered. */
43
+ children?: React.ReactNode;
44
+ }
45
+ /** Props for `AttachmentsPanel.Header` — the title row + close button. */
46
+ export interface AttachmentsPanelHeaderProps {
47
+ className?: string;
48
+ /** Compose your own header; when omitted, the "Attachments" title + close. */
49
+ children?: React.ReactNode;
50
+ }
51
+ /**
52
+ * The panel header: an "Attachments" title with a close `Button` on the right.
53
+ * The close button only appears when `onClose` is set on the panel.
54
+ */
55
+ declare function AttachmentsPanelHeader({ className, children }: AttachmentsPanelHeaderProps): React.JSX.Element;
56
+ declare namespace AttachmentsPanelHeader {
57
+ var displayName: string;
58
+ }
59
+ /** Props for `AttachmentsPanel.List` — the scrollable list of file rows. */
60
+ export interface AttachmentsPanelListProps {
61
+ className?: string;
62
+ /** Compose your own rows; when omitted, one `AttachmentsPanel.Item` per upload. */
63
+ children?: React.ReactNode;
64
+ }
65
+ /**
66
+ * The attachment list — a flex-gap column of `AttachmentsPanel.Item` cards
67
+ * (one per upload) plus the "Upload files" `AttachmentsPanel.Action` underneath
68
+ * when `onAttach` is set.
69
+ */
70
+ declare function AttachmentsPanelList({ className, children }: AttachmentsPanelListProps): React.JSX.Element;
71
+ declare namespace AttachmentsPanelList {
72
+ var displayName: string;
73
+ }
74
+ /** Props accepted by an individual `AttachmentsPanel.Item` (attachment card). */
75
+ export interface AttachmentsPanelItemProps {
76
+ file: UploadedFile;
77
+ className?: string;
78
+ }
79
+ /**
80
+ * A single attachment row — the shared `Attachment` (`AttachmentPill`) card,
81
+ * stretched full-width. This *composes* `AttachmentPill` (rather than rendering
82
+ * its default anatomy) to swap the trailing remove (✕) for an overflow (⋯) menu
83
+ * with Open / Delete — a live test of how composable `Attachment` is.
84
+ */
85
+ declare function AttachmentsPanelItem({ file: doc, className }: AttachmentsPanelItemProps): React.JSX.Element;
86
+ declare namespace AttachmentsPanelItem {
87
+ var displayName: string;
88
+ }
89
+ /** Props for `AttachmentsPanel.Loading` — the initial-fetch placeholder. */
90
+ export interface AttachmentsPanelLoadingProps {
91
+ className?: string;
92
+ /** How many skeleton rows to render. Default `3`. */
93
+ count?: number;
94
+ }
95
+ /**
96
+ * The loading state: skeleton rows shaped like `AttachmentsPanel.Item` cards,
97
+ * shown while the initial list is fetched so the panel doesn't flash `Empty`.
98
+ */
99
+ declare function AttachmentsPanelLoading({ className, count }: AttachmentsPanelLoadingProps): React.JSX.Element;
100
+ declare namespace AttachmentsPanelLoading {
101
+ var displayName: string;
102
+ }
103
+ /** Props for `AttachmentsPanel.Empty` — the no-files state. */
104
+ export interface AttachmentsPanelEmptyProps {
105
+ className?: string;
106
+ /** Compose your own empty state; when omitted, the default copy + action. */
107
+ children?: React.ReactNode;
108
+ }
109
+ /** The empty state: heading, hint, and the upload `AttachmentsPanel.Action`. */
110
+ declare function AttachmentsPanelEmpty({ className, children }: AttachmentsPanelEmptyProps): React.JSX.Element;
111
+ declare namespace AttachmentsPanelEmpty {
112
+ var displayName: string;
113
+ }
114
+ /** Props for `AttachmentsPanel.Action` — the upload/attach button. */
115
+ export interface AttachmentsPanelActionProps {
116
+ /**
117
+ * Presentation only: `empty` is the pill button in the empty state, `more` is
118
+ * the centered "add more" button below the list. Both render a `<Button>`
119
+ * labelled "Upload files". Defaults to `empty`.
120
+ */
121
+ variant?: "empty" | "more";
122
+ className?: string;
123
+ /** Button contents; defaults to "Upload files". */
124
+ children?: React.ReactNode;
125
+ /** Called after opening the native picker. */
126
+ onClick?: () => void;
127
+ }
128
+ /** The upload/attach button. Opens the native file picker wired in `Root`. */
129
+ declare function AttachmentsPanelAction({ variant, className, children, onClick }: AttachmentsPanelActionProps): React.JSX.Element;
130
+ declare namespace AttachmentsPanelAction {
131
+ var displayName: string;
132
+ }
133
+ /**
134
+ * AttachmentsPanel — render `<AttachmentsPanel uploads={…} />` for the default panel, or
135
+ * compose `AttachmentsPanel.Root` + `List` / `Item` / `Empty` / `Action` for a
136
+ * custom layout. Mirrors the `ToolCall` / `Sources` compounds: render it, or
137
+ * compose it.
138
+ */
139
+ export declare const AttachmentsPanel: React.ForwardRefExoticComponent<AttachmentsPanelProps & React.RefAttributes<HTMLDivElement>> & {
140
+ Root: React.ForwardRefExoticComponent<AttachmentsPanelProps & React.RefAttributes<HTMLDivElement>>;
141
+ Header: typeof AttachmentsPanelHeader;
142
+ List: typeof AttachmentsPanelList;
143
+ Item: typeof AttachmentsPanelItem;
144
+ Loading: typeof AttachmentsPanelLoading;
145
+ Empty: typeof AttachmentsPanelEmpty;
146
+ Action: typeof AttachmentsPanelAction;
147
+ };
148
+ export {};
149
+ //# sourceMappingURL=attachments-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments-panel.d.ts","sourceRoot":"","sources":["../../../../../../../src/src/react/components/chat/chat/components/attachments-panel.tsx"],"names":[],"mappings":"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"}