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,41 @@
1
+ /**
2
+ * Input — ported from Veryfront Studio (`inputStyles` cva + optional leading
3
+ * icon), semantic classes remapped to veryfront's `[var(--token)]` vocabulary.
4
+ * Studio's `type="date"` DateInput branch is omitted for v1. Private to the
5
+ * chat module.
6
+ *
7
+ * @module react/components/chat/ui/input
8
+ */
9
+ import * as React from "../../../../../react/react.js";
10
+ import { cn } from "../theme.js";
11
+ import { cva } from "./cva.js";
12
+ const inputVariants = cva([
13
+ "flex w-full text-[var(--foreground)]",
14
+ "placeholder:text-[var(--foreground)] placeholder:opacity-25",
15
+ "transition-[background-color,box-shadow,border-color] duration-150 ease-in",
16
+ "focus-visible:outline-none",
17
+ "disabled:cursor-not-allowed disabled:opacity-50",
18
+ "bg-[var(--input-bg)] border border-[var(--background)] dark:border-transparent",
19
+ // veryfront has no --status-error token yet; fall back to --destructive.
20
+ "data-[invalid=true]:border-[var(--destructive)]",
21
+ ], {
22
+ variants: {
23
+ size: {
24
+ sm: "h-[38px] px-3 text-base rounded-md",
25
+ md: "h-[42px] px-3 text-base rounded-md",
26
+ lg: "h-[48px] px-4 text-base rounded-md",
27
+ },
28
+ },
29
+ defaultVariants: { size: "lg" },
30
+ });
31
+ /** Render a text input. */
32
+ export function Input({ className, type, size, icon, ref, "data-invalid": dataInvalid, ...props }) {
33
+ if (icon) {
34
+ const isSm = size === "sm";
35
+ return (React.createElement("div", { className: cn(inputVariants({ size }), "relative flex items-center px-0", isSm ? "pl-3 pr-3" : "pl-3.5 pr-4", "gap-2", className), "data-invalid": dataInvalid },
36
+ React.createElement("span", { className: "shrink-0 pointer-events-none text-[var(--foreground)]" }, icon),
37
+ React.createElement("input", { type: type, className: "flex-1 min-w-0 bg-transparent text-inherit placeholder:text-[var(--foreground)] placeholder:opacity-25 outline-none border-0 p-0 h-full", "data-invalid": dataInvalid, ref: ref, ...props })));
38
+ }
39
+ return (React.createElement("input", { type: type, className: cn(inputVariants({ size }), className), "data-invalid": dataInvalid, ref: ref, ...props }));
40
+ }
41
+ export { inputVariants };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Label — ported 1:1 from Veryfront Studio, `vf-type/vf-weight` utilities
3
+ * remapped to plain Tailwind weights/sizes. Private to the chat module.
4
+ *
5
+ * NOTE: the font-weight lives ONLY in the `weight` variant (default `medium`),
6
+ * never in the base — veryfront's `cn`/`cva` do not Tailwind-merge, so a base
7
+ * `font-medium` would survive alongside a `weight="normal"` `font-normal` and
8
+ * win by source order, making every label bold. Studio can keep it in the base
9
+ * because its `cn` uses tailwind-merge; we cannot.
10
+ *
11
+ * @module react/components/chat/ui/label
12
+ */
13
+ import * as React from "../../../../../react/react.js";
14
+ import { type VariantProps } from "./cva.js";
15
+ declare const labelVariants: (props?: ({
16
+ size?: "default" | "sm" | "xs" | null | undefined;
17
+ weight?: "medium" | "normal" | null | undefined;
18
+ } & {
19
+ class?: import("../../../../utils/clsx.js").ClassValue;
20
+ className?: import("../../../../utils/clsx.js").ClassValue;
21
+ }) | undefined) => string;
22
+ /** Props accepted by `<Label>`. */
23
+ export interface LabelProps extends React.ComponentProps<"label">, VariantProps<typeof labelVariants> {
24
+ ref?: React.Ref<HTMLLabelElement>;
25
+ }
26
+ /** Render a form label. */
27
+ export declare function Label({ className, size, weight, ref, ...props }: LabelProps): React.ReactElement;
28
+ export { labelVariants };
29
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/label.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAEvD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAElD,QAAA,MAAM,aAAa;;;;;;yBAsBlB,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC;IACzE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACnC;AAED,2BAA2B;AAC3B,wBAAgB,KAAK,CACnB,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,GACrD,KAAK,CAAC,YAAY,CAQpB;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Label — ported 1:1 from Veryfront Studio, `vf-type/vf-weight` utilities
3
+ * remapped to plain Tailwind weights/sizes. Private to the chat module.
4
+ *
5
+ * NOTE: the font-weight lives ONLY in the `weight` variant (default `medium`),
6
+ * never in the base — veryfront's `cn`/`cva` do not Tailwind-merge, so a base
7
+ * `font-medium` would survive alongside a `weight="normal"` `font-normal` and
8
+ * win by source order, making every label bold. Studio can keep it in the base
9
+ * because its `cn` uses tailwind-merge; we cannot.
10
+ *
11
+ * @module react/components/chat/ui/label
12
+ */
13
+ import * as React from "../../../../../react/react.js";
14
+ import { cn } from "../theme.js";
15
+ import { cva } from "./cva.js";
16
+ const labelVariants = cva([
17
+ "block leading-none text-[var(--foreground)]",
18
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
19
+ ], {
20
+ variants: {
21
+ size: {
22
+ default: "text-sm",
23
+ sm: "text-sm",
24
+ xs: "text-xs",
25
+ },
26
+ weight: {
27
+ normal: "font-normal",
28
+ medium: "font-medium",
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ size: "default",
33
+ weight: "medium",
34
+ },
35
+ });
36
+ /** Render a form label. */
37
+ export function Label({ className, size, weight, ref, ...props }) {
38
+ return (React.createElement("label", { className: cn(labelVariants({ size, weight }), className), ref: ref, ...props }));
39
+ }
40
+ export { labelVariants };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * List — a lightweight primitive for vertical item lists: sidebars, thread
3
+ * rails, nav groups, command results. Three parts:
4
+ *
5
+ * - `List` — the container (tight vertical rhythm).
6
+ * - `ListLabel` — an uppercase section heading (e.g. date groups: "Today").
7
+ * - `ListItem` — a row with padding / rounded / hover + active states, an
8
+ * optional `description` line, and an optional trailing `action`
9
+ * slot (revealed on hover, e.g. a "…" menu button).
10
+ *
11
+ * Colors use the chrome-surface hover token (`--accent`) — a subtle tint, not a
12
+ * white fill — matching the Studio sidebar. Zero external deps. Built in
13
+ * `chat/ui`; designed for a clean move to a top-level `/ui`.
14
+ *
15
+ * @module react/components/chat/ui/list
16
+ */
17
+ import * as React from "../../../../../react/react.js";
18
+ /** Props accepted by {@link List}. */
19
+ export interface ListProps extends React.HTMLAttributes<HTMLDivElement> {
20
+ ref?: React.Ref<HTMLDivElement>;
21
+ }
22
+ /** Vertical list container. */
23
+ export declare function List({ className, ref, ...props }: ListProps): React.ReactElement;
24
+ /** Props accepted by {@link ListLabel}. */
25
+ export interface ListLabelProps extends React.HTMLAttributes<HTMLDivElement> {
26
+ ref?: React.Ref<HTMLDivElement>;
27
+ }
28
+ /** Section heading — uppercase, faint. Use for date groups etc. */
29
+ export declare function ListLabel({ className, ref, ...props }: ListLabelProps): React.ReactElement;
30
+ /** Props accepted by {@link ListItem}. */
31
+ export interface ListItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
32
+ /** Primary line. Truncates. Omit to render `children` as the body instead. */
33
+ title?: React.ReactNode;
34
+ /** Optional secondary line under the title. Truncates. */
35
+ description?: React.ReactNode;
36
+ /** Highlight as the current/selected row. */
37
+ active?: boolean;
38
+ /**
39
+ * Trailing slot — e.g. a "…" menu button. Hidden until row hover (or when
40
+ * `active`). Its clicks don't bubble to the row's `onClick`.
41
+ */
42
+ action?: React.ReactNode;
43
+ ref?: React.Ref<HTMLDivElement>;
44
+ }
45
+ /** A single list row. */
46
+ export declare function ListItem({ title, description, active, action, className, children, ref, ...props }: ListItemProps): React.ReactElement;
47
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/list.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAGvD,sCAAsC;AACtC,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED,+BAA+B;AAC/B,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,YAAY,CAEhF;AAED,2CAA2C;AAC3C,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC1E,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CACvB,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,GAC3C,KAAK,CAAC,YAAY,CAWpB;AAED,0CAA0C;AAC1C,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACxF,8EAA8E;IAC9E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,6CAA6C;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED,yBAAyB;AACzB,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,WAAW,EACX,MAAc,EACd,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CA4CpC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * List — a lightweight primitive for vertical item lists: sidebars, thread
3
+ * rails, nav groups, command results. Three parts:
4
+ *
5
+ * - `List` — the container (tight vertical rhythm).
6
+ * - `ListLabel` — an uppercase section heading (e.g. date groups: "Today").
7
+ * - `ListItem` — a row with padding / rounded / hover + active states, an
8
+ * optional `description` line, and an optional trailing `action`
9
+ * slot (revealed on hover, e.g. a "…" menu button).
10
+ *
11
+ * Colors use the chrome-surface hover token (`--accent`) — a subtle tint, not a
12
+ * white fill — matching the Studio sidebar. Zero external deps. Built in
13
+ * `chat/ui`; designed for a clean move to a top-level `/ui`.
14
+ *
15
+ * @module react/components/chat/ui/list
16
+ */
17
+ import * as React from "../../../../../react/react.js";
18
+ import { cn } from "../theme.js";
19
+ /** Vertical list container. */
20
+ export function List({ className, ref, ...props }) {
21
+ return React.createElement("div", { ref: ref, className: cn("space-y-0.5", className), ...props });
22
+ }
23
+ /** Section heading — uppercase, faint. Use for date groups etc. */
24
+ export function ListLabel({ className, ref, ...props }) {
25
+ return (React.createElement("div", { ref: ref, className: cn("px-2.5 py-1 text-[11px] font-medium uppercase tracking-wider text-[var(--faint)]", className), ...props }));
26
+ }
27
+ /** A single list row. */
28
+ export function ListItem({ title, description, active = false, action, className, children, ref, ...props }) {
29
+ return (React.createElement("div", { ref: ref, "data-active": active || undefined, className: cn("group/li flex items-center gap-1 rounded-[var(--radius-sm)] px-2.5 py-1.5 transition-colors", props.onClick && "cursor-pointer", active
30
+ ? "bg-[var(--accent)] text-[var(--foreground)]"
31
+ : "text-[var(--soft)] hover:bg-[var(--accent)] hover:text-[var(--foreground)]", className), ...props },
32
+ React.createElement("div", { className: "min-w-0 flex-1" }, title !== undefined
33
+ ? (React.createElement(React.Fragment, null,
34
+ React.createElement("div", { className: "truncate text-[13px] leading-snug" }, title),
35
+ description !== undefined && (React.createElement("div", { className: "truncate text-xs leading-snug text-[var(--faint)]" }, description))))
36
+ : children),
37
+ action !== undefined && (React.createElement("div", { className: cn("shrink-0 transition-opacity", active
38
+ ? "opacity-100"
39
+ : "opacity-0 group-hover/li:opacity-100 focus-within:opacity-100"), onClick: (e) => e.stopPropagation() }, action))));
40
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Pill — ported 1:1 from Veryfront Studio. A filled trigger pill (label +
3
+ * optional icon/chevron) for selection triggers — "click to open / select"
4
+ * rather than "click to act". Surface-paired via the `on` prop, matching
5
+ * Button's surface system. Semantic classes remapped to veryfront's
6
+ * `[var(--token)]` vocabulary; icon glyphs sized a half-step down. Private to
7
+ * the chat module.
8
+ *
9
+ * @module react/components/chat/ui/pill
10
+ */
11
+ import * as React from "../../../../../react/react.js";
12
+ import { type VariantProps } from "./cva.js";
13
+ declare const pillVariants: (props?: ({
14
+ on?: "card" | "chrome" | null | undefined;
15
+ } & {
16
+ class?: import("../../../../utils/clsx.js").ClassValue;
17
+ className?: import("../../../../utils/clsx.js").ClassValue;
18
+ }) | undefined) => string;
19
+ /** Props accepted by `<Pill>`. */
20
+ export interface PillProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "type">, VariantProps<typeof pillVariants> {
21
+ ref?: React.Ref<HTMLButtonElement>;
22
+ }
23
+ /** Render a selection-trigger pill. */
24
+ export declare function Pill({ className, on, ref, ...props }: PillProps): React.ReactElement;
25
+ export { pillVariants };
26
+ //# sourceMappingURL=pill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pill.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/pill.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAEvD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAElD,QAAA,MAAM,YAAY;;;;;yBAuBjB,CAAC;AAEF,kCAAkC;AAClC,MAAM,WAAW,SACf,SACE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,EAC3D,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;CACpC;AAED,uCAAuC;AACvC,wBAAgB,IAAI,CAClB,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,GAC1C,KAAK,CAAC,YAAY,CASpB;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Pill — ported 1:1 from Veryfront Studio. A filled trigger pill (label +
3
+ * optional icon/chevron) for selection triggers — "click to open / select"
4
+ * rather than "click to act". Surface-paired via the `on` prop, matching
5
+ * Button's surface system. Semantic classes remapped to veryfront's
6
+ * `[var(--token)]` vocabulary; icon glyphs sized a half-step down. Private to
7
+ * the chat module.
8
+ *
9
+ * @module react/components/chat/ui/pill
10
+ */
11
+ import * as React from "../../../../../react/react.js";
12
+ import { cn } from "../theme.js";
13
+ import { cva } from "./cva.js";
14
+ const pillVariants = cva([
15
+ "inline-flex h-9 items-center gap-1.5 rounded-full px-3 text-sm font-normal text-[var(--foreground)]",
16
+ "cursor-pointer select-none outline-none transition-colors",
17
+ "focus-visible:bg-[var(--accent)]",
18
+ "[&_svg]:size-3.5 [&_svg]:shrink-0",
19
+ ], {
20
+ variants: {
21
+ /**
22
+ * Surface the pill sits on. `chrome` (default) on the sand background,
23
+ * `card` on a white card surface. Hover is a soft bump, not a polarity
24
+ * flip — pills are passive triggers, not actions.
25
+ */
26
+ on: {
27
+ chrome: "bg-[var(--accent)] hover:bg-[var(--accent)]",
28
+ card: "bg-[var(--tertiary)] hover:bg-[var(--accent)]",
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ on: "chrome",
33
+ },
34
+ });
35
+ /** Render a selection-trigger pill. */
36
+ export function Pill({ className, on, ref, ...props }) {
37
+ return (React.createElement("button", { ref: ref, type: "button", className: cn(pillVariants({ on }), className), ...props }));
38
+ }
39
+ export { pillVariants };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Popover — BASIC fork of @radix-ui/react-popover with the same API shape
3
+ * (Root / Trigger / Content + Title / Body / Footer / Actions section parts).
4
+ * Classes are ported 1:1 from Studio's `Popover` (tokens remapped to
5
+ * veryfront's `[var(--token)]` vocabulary). Anchored below the trigger;
6
+ * dismisses on outside-click and `Escape`.
7
+ *
8
+ * TODO(a11y): focus trap + restore, portal + collision-aware positioning
9
+ * (flip/shift), `aria-controls`/`aria-expanded` wiring on the trigger,
10
+ * `side`/`align` offset variants. Private to the chat module.
11
+ *
12
+ * @module react/components/chat/ui/popover
13
+ */
14
+ import * as React from "../../../../../react/react.js";
15
+ /** Props accepted by `<Popover>`. */
16
+ export interface PopoverProps {
17
+ children: React.ReactNode;
18
+ open?: boolean;
19
+ defaultOpen?: boolean;
20
+ onOpenChange?: (open: boolean) => void;
21
+ }
22
+ /** Popover root — owns open state and the positioning anchor. */
23
+ export declare function Popover({ children, open, defaultOpen, onOpenChange, }: PopoverProps): React.ReactElement;
24
+ /** Trigger — toggles the popover. `asChild` merges onto the child element. */
25
+ export declare function PopoverTrigger({ children, asChild, onClick, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement> & {
26
+ asChild?: boolean;
27
+ }): React.ReactElement;
28
+ /** Props accepted by `<PopoverContent>`. */
29
+ export interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {
30
+ /** Horizontal alignment relative to the trigger. */
31
+ align?: "start" | "end";
32
+ }
33
+ /** Popover surface — rendered below the trigger while open. */
34
+ export declare function PopoverContent({ children, className, align, ...props }: PopoverContentProps): React.ReactElement | null;
35
+ /** Primary heading slot at the top of a popover (Studio: Heading level 4). */
36
+ export declare function PopoverTitle({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.ReactElement;
37
+ /** Small section label inside a popover (Studio: Heading level 5). */
38
+ export declare function PopoverHeader({ className, children, ...props }: React.HTMLAttributes<HTMLHeadingElement>): React.ReactElement;
39
+ /** Body content region (Studio: `px-5 last:pb-5 flex flex-col gap-4`). */
40
+ export declare function PopoverBody({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
41
+ /** Footer region; pass `bordered` for a top divider (Studio). */
42
+ export declare function PopoverFooter({ className, bordered, ...props }: React.HTMLAttributes<HTMLDivElement> & {
43
+ bordered?: boolean;
44
+ }): React.ReactElement;
45
+ /** Right-aligned button row, for use inside a footer. */
46
+ export declare function PopoverActions({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
47
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/popover.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAavD,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED,iEAAiE;AACjE,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,YAAY,GACb,EAAE,YAAY,GAAG,KAAK,CAAC,YAAY,CAgBnC;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,OAAO,EACP,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAiB5F;AAED,4CAA4C;AAC5C,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC/E,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACzB;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,SAAS,EACT,KAAa,EACb,GAAG,KAAK,EACT,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAmBjD;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,YAAY,CAY/D;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,YAAY,CAY/D;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAO3D;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAWpF;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAO3D"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Popover — BASIC fork of @radix-ui/react-popover with the same API shape
3
+ * (Root / Trigger / Content + Title / Body / Footer / Actions section parts).
4
+ * Classes are ported 1:1 from Studio's `Popover` (tokens remapped to
5
+ * veryfront's `[var(--token)]` vocabulary). Anchored below the trigger;
6
+ * dismisses on outside-click and `Escape`.
7
+ *
8
+ * TODO(a11y): focus trap + restore, portal + collision-aware positioning
9
+ * (flip/shift), `aria-controls`/`aria-expanded` wiring on the trigger,
10
+ * `side`/`align` offset variants. Private to the chat module.
11
+ *
12
+ * @module react/components/chat/ui/popover
13
+ */
14
+ import * as React from "../../../../../react/react.js";
15
+ import { cn } from "../theme.js";
16
+ import { Slot } from "./slot.js";
17
+ import { Floating } from "./floating.js";
18
+ const PopoverContext = React.createContext(null);
19
+ /** Popover root — owns open state and the positioning anchor. */
20
+ export function Popover({ children, open, defaultOpen, onOpenChange, }) {
21
+ const [internal, setInternal] = React.useState(defaultOpen ?? false);
22
+ const isControlled = open !== undefined;
23
+ const isOpen = isControlled ? open : internal;
24
+ const setOpen = React.useCallback((next) => {
25
+ if (!isControlled)
26
+ setInternal(next);
27
+ onOpenChange?.(next);
28
+ }, [isControlled, onOpenChange]);
29
+ const anchorRef = React.useRef(null);
30
+ return (React.createElement("span", { ref: anchorRef, className: "relative inline-block" },
31
+ React.createElement(PopoverContext.Provider, { value: { open: isOpen, setOpen, anchorRef } }, children)));
32
+ }
33
+ /** Trigger — toggles the popover. `asChild` merges onto the child element. */
34
+ export function PopoverTrigger({ children, asChild, onClick, ...props }) {
35
+ const ctx = React.useContext(PopoverContext);
36
+ const Comp = asChild ? Slot : "button";
37
+ return (React.createElement(Comp, { ...(asChild ? {} : { type: "button" }), "aria-haspopup": "dialog", "aria-expanded": ctx?.open, onClick: (e) => {
38
+ onClick?.(e);
39
+ ctx?.setOpen(!ctx.open);
40
+ }, ...props }, children));
41
+ }
42
+ /** Popover surface — rendered below the trigger while open. */
43
+ export function PopoverContent({ children, className, align = "end", ...props }) {
44
+ const ctx = React.useContext(PopoverContext);
45
+ if (!ctx)
46
+ return null;
47
+ return (React.createElement(Floating, { anchorRef: ctx.anchorRef, open: ctx.open, align: align, onDismiss: () => ctx.setOpen(false), role: "dialog", className: cn("z-50 min-w-[220px] overflow-hidden rounded-lg bg-[var(--popover)] text-[var(--foreground)] shadow-sm outline-none", className), ...props }, children));
48
+ }
49
+ /** Primary heading slot at the top of a popover (Studio: Heading level 4). */
50
+ export function PopoverTitle({ className, children, ...props }) {
51
+ return (React.createElement("h4", { className: cn("px-5 pt-5 pb-3 text-base font-semibold text-[var(--foreground)]", className), ...props }, children));
52
+ }
53
+ /** Small section label inside a popover (Studio: Heading level 5). */
54
+ export function PopoverHeader({ className, children, ...props }) {
55
+ return (React.createElement("h5", { className: cn("p-5 pb-2 text-sm font-medium text-[var(--foreground)]", className), ...props }, children));
56
+ }
57
+ /** Body content region (Studio: `px-5 last:pb-5 flex flex-col gap-4`). */
58
+ export function PopoverBody({ className, ...props }) {
59
+ return (React.createElement("div", { className: cn("px-5 last:pb-5 flex flex-col gap-4", className), ...props }));
60
+ }
61
+ /** Footer region; pass `bordered` for a top divider (Studio). */
62
+ export function PopoverFooter({ className, bordered, ...props }) {
63
+ return (React.createElement("div", { className: cn("p-5", bordered && "mt-5 border-t border-[var(--separator)]", className), ...props }));
64
+ }
65
+ /** Right-aligned button row, for use inside a footer. */
66
+ export function PopoverActions({ className, ...props }) {
67
+ return (React.createElement("div", { className: cn("flex gap-2.5 justify-end items-center", className), ...props }));
68
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ProgressBar — ported 1:1 from Veryfront Studio. A determinate or
3
+ * indeterminate progress track. The presentation helpers (clamp / accessible
4
+ * name) are inlined; tokens remapped to veryfront's `[var(--token)]`
5
+ * vocabulary. The `progress-indeterminate` keyframes + `.animate-progress-
6
+ * indeterminate` utility ship via chat `theme.ts`. Private to the chat module.
7
+ *
8
+ * @module react/components/chat/ui/progress-bar
9
+ */
10
+ import * as React from "../../../../../react/react.js";
11
+ /** Props accepted by `<ProgressBar>`. */
12
+ export interface ProgressBarProps extends React.ComponentProps<"div"> {
13
+ /** Completion percentage (0–100). */
14
+ percent: number;
15
+ /** Render an indeterminate looping bar instead of a fixed width. */
16
+ indeterminate?: boolean;
17
+ }
18
+ /** Render a progress track. */
19
+ export declare function ProgressBar({ percent, indeterminate, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }: ProgressBarProps): React.ReactElement;
20
+ //# sourceMappingURL=progress-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-bar.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/progress-bar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAmBvD,yCAAyC;AACzC,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IACnE,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+BAA+B;AAC/B,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,aAAqB,EACrB,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,GAAG,KAAK,EACT,EAAE,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAgCvC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ProgressBar — ported 1:1 from Veryfront Studio. A determinate or
3
+ * indeterminate progress track. The presentation helpers (clamp / accessible
4
+ * name) are inlined; tokens remapped to veryfront's `[var(--token)]`
5
+ * vocabulary. The `progress-indeterminate` keyframes + `.animate-progress-
6
+ * indeterminate` utility ship via chat `theme.ts`. Private to the chat module.
7
+ *
8
+ * @module react/components/chat/ui/progress-bar
9
+ */
10
+ import * as React from "../../../../../react/react.js";
11
+ import { cn } from "../theme.js";
12
+ const MIN_PROGRESS = 0;
13
+ const MAX_PROGRESS = 100;
14
+ const DEFAULT_PROGRESS_LABEL = "Progress";
15
+ function clampProgressPercent(percent) {
16
+ if (!Number.isFinite(percent))
17
+ return MIN_PROGRESS;
18
+ return Math.min(MAX_PROGRESS, Math.max(MIN_PROGRESS, percent));
19
+ }
20
+ function getProgressAccessibleName(ariaLabel, ariaLabelledBy) {
21
+ return ariaLabel ?? (ariaLabelledBy ? undefined : DEFAULT_PROGRESS_LABEL);
22
+ }
23
+ /** Render a progress track. */
24
+ export function ProgressBar({ percent, indeterminate = false, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...props }) {
25
+ const clampedPercent = clampProgressPercent(percent);
26
+ const accessibleName = getProgressAccessibleName(ariaLabel, ariaLabelledBy);
27
+ return (React.createElement("div", { ...props, className: cn("w-full bg-[var(--accent)] rounded-full h-2.5 overflow-hidden", className), role: "progressbar", "aria-label": accessibleName, "aria-labelledby": ariaLabelledBy, "aria-valuemin": MIN_PROGRESS, "aria-valuemax": MAX_PROGRESS, "aria-valuenow": indeterminate ? undefined : clampedPercent }, indeterminate
28
+ ? (React.createElement("div", { className: "relative h-full w-full overflow-hidden" },
29
+ React.createElement("div", { className: "h-full w-[32%] rounded-full bg-[var(--primary)] animate-progress-indeterminate" })))
30
+ : (React.createElement("div", { className: "bg-[var(--primary)] h-2.5 rounded-full origin-left transition-all duration-1000 ease-out", style: { width: `${clampedPercent}%` } }))));
31
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Radio — ported 1:1 from Veryfront Studio (which is already a native
3
+ * `<input type="radio">`, so this is a faithful token remap with full native
4
+ * a11y — focus, keyboard, form participation). Plus `RadioField` (label +
5
+ * description) and `RadioGroup`. Private to the chat module.
6
+ *
7
+ * @module react/components/chat/ui/radio
8
+ */
9
+ import * as React from "../../../../../react/react.js";
10
+ /** Props accepted by `<Radio>`. */
11
+ export interface RadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type"> {
12
+ ref?: React.Ref<HTMLInputElement>;
13
+ }
14
+ /** A single radio input. */
15
+ export declare function Radio({ className, ref, ...props }: RadioProps): React.ReactElement;
16
+ /** Props accepted by `<RadioField>`. */
17
+ export interface RadioFieldProps extends RadioProps {
18
+ label: React.ReactNode;
19
+ description?: string;
20
+ }
21
+ /** A radio paired with a clickable label and optional description. */
22
+ export declare function RadioField({ label, description, id, ref, ...props }: RadioFieldProps): React.ReactElement;
23
+ /** Vertical group of radios. */
24
+ export declare function RadioGroup({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
25
+ //# sourceMappingURL=radio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/radio.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AAIvD,mCAAmC;AACnC,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3F,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACnC;AAED,4BAA4B;AAC5B,wBAAgB,KAAK,CACnB,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,GACvC,KAAK,CAAC,YAAY,CAiBpB;AAED,wCAAwC;AACxC,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,EAAE,EACF,GAAG,EACH,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAoBtC;AAED,gCAAgC;AAChC,wBAAgB,UAAU,CACxB,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAC5D,KAAK,CAAC,YAAY,CAQpB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Radio — ported 1:1 from Veryfront Studio (which is already a native
3
+ * `<input type="radio">`, so this is a faithful token remap with full native
4
+ * a11y — focus, keyboard, form participation). Plus `RadioField` (label +
5
+ * description) and `RadioGroup`. Private to the chat module.
6
+ *
7
+ * @module react/components/chat/ui/radio
8
+ */
9
+ import * as React from "../../../../../react/react.js";
10
+ import { cn } from "../theme.js";
11
+ import { Label } from "./label.js";
12
+ /** A single radio input. */
13
+ export function Radio({ className, ref, ...props }) {
14
+ return (React.createElement("input", { ref: ref, type: "radio", className: cn("size-5 shrink-0 appearance-none rounded-full border border-[var(--outline-border)]", "bg-[var(--input-bg)]", "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--edge-medium)]", "disabled:cursor-not-allowed disabled:opacity-50", "checked:border-[var(--primary)] checked:bg-[var(--primary)] checked:shadow-[inset_0_0_0_4px_var(--secondary)]", "transition-colors", className), ...props }));
15
+ }
16
+ /** A radio paired with a clickable label and optional description. */
17
+ export function RadioField({ label, description, id, ref, ...props }) {
18
+ const generatedId = React.useId();
19
+ const fieldId = id || generatedId;
20
+ return (React.createElement(Label, { htmlFor: fieldId, weight: "normal", className: "cursor-pointer flex items-center gap-2.5" },
21
+ React.createElement(Radio, { id: fieldId, ref: ref, ...props }),
22
+ React.createElement("span", { className: "flex flex-col" },
23
+ React.createElement("span", { className: cn(description && "mb-1") }, label),
24
+ description && (React.createElement("span", { className: "text-base font-normal text-[var(--foreground)]" }, description)))));
25
+ }
26
+ /** Vertical group of radios. */
27
+ export function RadioGroup({ className, ...props }) {
28
+ return (React.createElement("div", { role: "radiogroup", className: cn("flex flex-col gap-2", className), ...props }));
29
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ScrollFade — ported 1:1 from Veryfront Studio. A scrollable container that
3
+ * auto-applies edge fade gradients (mask-image) when content overflows or the
4
+ * user scrolls. Self-contained (refs + ResizeObserver, no radix); Studio's
5
+ * `scrollbar-thin` plugin utilities are dropped for the native
6
+ * `[scrollbar-width:thin]`. Veryfront's nearest equivalent to a "ScrollArea".
7
+ * Private to the chat module.
8
+ *
9
+ * @module react/components/chat/ui/scroll-fade
10
+ */
11
+ import * as React from "../../../../../react/react.js";
12
+ /** Props accepted by `<ScrollFade>`. */
13
+ export interface ScrollFadeProps extends React.ComponentProps<"div"> {
14
+ /**
15
+ * Which edges to fade. `both` (default) fades the top when scrolled and the
16
+ * bottom when more content sits below; `bottom` fades only the bottom while
17
+ * content overflows.
18
+ */
19
+ edges?: "both" | "bottom";
20
+ }
21
+ /** A scroll container with auto edge-fade affordances. */
22
+ export declare function ScrollFade({ edges, className, children, ...props }: ScrollFadeProps): React.ReactElement;
23
+ //# sourceMappingURL=scroll-fade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-fade.d.ts","sourceRoot":"","sources":["../../../../../../src/src/react/components/chat/ui/scroll-fade.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,MAAM,+BAA+B,CAAC;AASvD,wCAAwC;AACxC,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IAClE;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC3B;AAED,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,EACzB,KAAc,EACd,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAsCtC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ScrollFade — ported 1:1 from Veryfront Studio. A scrollable container that
3
+ * auto-applies edge fade gradients (mask-image) when content overflows or the
4
+ * user scrolls. Self-contained (refs + ResizeObserver, no radix); Studio's
5
+ * `scrollbar-thin` plugin utilities are dropped for the native
6
+ * `[scrollbar-width:thin]`. Veryfront's nearest equivalent to a "ScrollArea".
7
+ * Private to the chat module.
8
+ *
9
+ * @module react/components/chat/ui/scroll-fade
10
+ */
11
+ import * as React from "../../../../../react/react.js";
12
+ import { cn } from "../theme.js";
13
+ const BOTH_EDGES = "data-[overflow]:not-data-[scrolled]:[mask-image:linear-gradient(to_bottom,black_calc(100%-1.5rem),transparent_100%)] data-[scrolled]:not-data-[overflow]:[mask-image:linear-gradient(to_bottom,transparent_0,black_1.5rem)] data-[overflow]:data-[scrolled]:[mask-image:linear-gradient(to_bottom,transparent_0,black_1.5rem,black_calc(100%-1.5rem),transparent_100%)]";
14
+ const BOTTOM_EDGE = "data-[overflow]:[mask-image:linear-gradient(to_bottom,black_calc(100%-1.5rem),transparent_100%)]";
15
+ /** A scroll container with auto edge-fade affordances. */
16
+ export function ScrollFade({ edges = "both", className, children, ...props }) {
17
+ const ref = React.useRef(null);
18
+ const [hasOverflow, setHasOverflow] = React.useState(false);
19
+ const [hasScrolled, setHasScrolled] = React.useState(false);
20
+ React.useEffect(() => {
21
+ const el = ref.current;
22
+ if (!el)
23
+ return undefined;
24
+ const update = () => {
25
+ setHasOverflow(el.scrollHeight - el.clientHeight - el.scrollTop > 1);
26
+ setHasScrolled(el.scrollTop > 1);
27
+ };
28
+ update();
29
+ el.addEventListener("scroll", update, { passive: true });
30
+ const observer = new ResizeObserver(update);
31
+ observer.observe(el);
32
+ for (const child of Array.from(el.children))
33
+ observer.observe(child);
34
+ return () => {
35
+ el.removeEventListener("scroll", update);
36
+ observer.disconnect();
37
+ };
38
+ }, []);
39
+ return (React.createElement("div", { ref: ref, "data-overflow": hasOverflow || undefined, "data-scrolled": hasScrolled || undefined, className: cn("overflow-auto overscroll-contain [scrollbar-width:thin]", edges === "both" ? BOTH_EDGES : BOTTOM_EDGE, className), ...props }, children));
40
+ }