@tambo-ai/react 0.65.2 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (710) hide show
  1. package/README.md +174 -81
  2. package/dist/context-helpers/context-helpers-provider.test.d.ts.map +1 -0
  3. package/dist/context-helpers/{__tests__/context-helpers-provider.test.js → context-helpers-provider.test.js} +2 -2
  4. package/dist/context-helpers/context-helpers-provider.test.js.map +1 -0
  5. package/dist/context-helpers/context-helpers.test.d.ts.map +1 -0
  6. package/dist/context-helpers/{__tests__/context-helpers.test.js → context-helpers.test.js} +1 -1
  7. package/dist/context-helpers/context-helpers.test.js.map +1 -0
  8. package/{esm/providers → dist}/hoc/with-tambo-interactable.d.ts +2 -2
  9. package/dist/hoc/with-tambo-interactable.d.ts.map +1 -0
  10. package/dist/{providers/hoc → hoc}/with-tambo-interactable.js +29 -2
  11. package/dist/hoc/with-tambo-interactable.js.map +1 -0
  12. package/dist/hoc/with-tambo-interactable.test.d.ts +2 -0
  13. package/dist/hoc/with-tambo-interactable.test.d.ts.map +1 -0
  14. package/dist/hoc/with-tambo-interactable.test.js +192 -0
  15. package/dist/hoc/with-tambo-interactable.test.js.map +1 -0
  16. package/dist/hooks/index.d.ts +1 -1
  17. package/dist/hooks/index.d.ts.map +1 -1
  18. package/dist/hooks/index.js +2 -1
  19. package/dist/hooks/index.js.map +1 -1
  20. package/dist/hooks/use-component-state.d.ts +11 -24
  21. package/dist/hooks/use-component-state.d.ts.map +1 -1
  22. package/dist/hooks/use-component-state.js +14 -5
  23. package/dist/hooks/use-component-state.js.map +1 -1
  24. package/dist/hooks/use-component-state.test.d.ts.map +1 -0
  25. package/dist/hooks/{__tests__/use-component-state.test.js → use-component-state.test.js} +7 -7
  26. package/dist/hooks/use-component-state.test.js.map +1 -0
  27. package/dist/hooks/use-current-message.d.ts +51 -7
  28. package/dist/hooks/use-current-message.d.ts.map +1 -1
  29. package/dist/hooks/use-current-message.js +50 -6
  30. package/dist/hooks/use-current-message.js.map +1 -1
  31. package/dist/hooks/use-current-message.test.d.ts +2 -0
  32. package/dist/hooks/use-current-message.test.d.ts.map +1 -0
  33. package/dist/hooks/use-current-message.test.js +264 -0
  34. package/dist/hooks/use-current-message.test.js.map +1 -0
  35. package/dist/hooks/use-message-images.test.d.ts.map +1 -0
  36. package/dist/hooks/{__tests__/use-message-images.test.js → use-message-images.test.js} +1 -1
  37. package/dist/hooks/use-message-images.test.js.map +1 -0
  38. package/dist/hooks/use-streaming-props.d.ts +7 -19
  39. package/dist/hooks/use-streaming-props.d.ts.map +1 -1
  40. package/dist/hooks/use-streaming-props.js +7 -19
  41. package/dist/hooks/use-streaming-props.js.map +1 -1
  42. package/dist/hooks/use-suggestions.d.ts +1 -1
  43. package/dist/hooks/use-suggestions.d.ts.map +1 -1
  44. package/dist/hooks/use-suggestions.js.map +1 -1
  45. package/dist/hooks/use-suggestions.test.d.ts.map +1 -0
  46. package/dist/hooks/{__tests__/use-suggestions.test.js → use-suggestions.test.js} +36 -29
  47. package/dist/hooks/use-suggestions.test.js.map +1 -0
  48. package/dist/hooks/use-tambo-stream-status.d.ts +9 -8
  49. package/dist/hooks/use-tambo-stream-status.d.ts.map +1 -1
  50. package/dist/hooks/use-tambo-stream-status.js +9 -8
  51. package/dist/hooks/use-tambo-stream-status.js.map +1 -1
  52. package/dist/hooks/use-tambo-stream-status.test.d.ts.map +1 -0
  53. package/dist/hooks/{__tests__/use-tambo-stream-status.test.js → use-tambo-stream-status.test.js} +6 -6
  54. package/dist/hooks/use-tambo-stream-status.test.js.map +1 -0
  55. package/dist/hooks/use-tambo-threads.test.d.ts.map +1 -0
  56. package/dist/hooks/{__tests__/use-tambo-threads.test.js → use-tambo-threads.test.js} +3 -3
  57. package/dist/hooks/use-tambo-threads.test.js.map +1 -0
  58. package/dist/index.d.ts +10 -8
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +7 -3
  61. package/dist/index.js.map +1 -1
  62. package/dist/mcp/elicitation.d.ts +10 -2
  63. package/dist/mcp/elicitation.d.ts.map +1 -1
  64. package/dist/mcp/elicitation.js +19 -1
  65. package/dist/mcp/elicitation.js.map +1 -1
  66. package/dist/mcp/elicitation.test.d.ts.map +1 -0
  67. package/dist/mcp/{__tests__/elicitation.test.js → elicitation.test.js} +1 -1
  68. package/dist/mcp/elicitation.test.js.map +1 -0
  69. package/dist/mcp/index.d.ts +11 -2
  70. package/dist/mcp/index.d.ts.map +1 -1
  71. package/dist/mcp/index.js +11 -1
  72. package/dist/mcp/index.js.map +1 -1
  73. package/dist/mcp/mcp-client.d.ts +29 -10
  74. package/dist/mcp/mcp-client.d.ts.map +1 -1
  75. package/dist/mcp/mcp-client.test.d.ts.map +1 -0
  76. package/dist/mcp/{__tests__/mcp-client.test.js → mcp-client.test.js} +1 -1
  77. package/dist/mcp/mcp-client.test.js.map +1 -0
  78. package/dist/mcp/mcp-hooks.d.ts +129 -25
  79. package/dist/mcp/mcp-hooks.d.ts.map +1 -1
  80. package/dist/mcp/mcp-hooks.js +104 -40
  81. package/dist/mcp/mcp-hooks.js.map +1 -1
  82. package/dist/mcp/mcp-hooks.test.d.ts.map +1 -0
  83. package/dist/mcp/{__tests__/mcp-hooks.test.js → mcp-hooks.test.js} +90 -51
  84. package/dist/mcp/mcp-hooks.test.js.map +1 -0
  85. package/dist/mcp/tambo-mcp-provider.d.ts +2 -0
  86. package/dist/mcp/tambo-mcp-provider.d.ts.map +1 -1
  87. package/dist/mcp/tambo-mcp-provider.js +60 -13
  88. package/dist/mcp/tambo-mcp-provider.js.map +1 -1
  89. package/dist/mcp/tambo-mcp-provider.test.d.ts.map +1 -0
  90. package/dist/mcp/{__tests__/tambo-mcp-provider.test.js → tambo-mcp-provider.test.js} +9 -25
  91. package/dist/mcp/tambo-mcp-provider.test.js.map +1 -0
  92. package/dist/mcp/use-mcp-servers.test.d.ts.map +1 -0
  93. package/dist/mcp/{__tests__/use-mcp-servers.test.js → use-mcp-servers.test.js} +5 -11
  94. package/dist/mcp/use-mcp-servers.test.js.map +1 -0
  95. package/dist/model/component-metadata.d.ts +444 -14
  96. package/dist/model/component-metadata.d.ts.map +1 -1
  97. package/dist/model/component-metadata.js.map +1 -1
  98. package/dist/model/generate-component-response.d.ts +12 -1
  99. package/dist/model/generate-component-response.d.ts.map +1 -1
  100. package/dist/model/generate-component-response.js.map +1 -1
  101. package/dist/model/mcp-server-info.d.ts +3 -1
  102. package/dist/model/mcp-server-info.d.ts.map +1 -1
  103. package/dist/model/mcp-server-info.js.map +1 -1
  104. package/dist/model/resource-info.d.ts +55 -0
  105. package/dist/model/resource-info.d.ts.map +1 -0
  106. package/dist/model/resource-info.js +3 -0
  107. package/dist/model/resource-info.js.map +1 -0
  108. package/dist/model/tambo-thread.d.ts +6 -1
  109. package/dist/model/tambo-thread.d.ts.map +1 -1
  110. package/dist/model/tambo-thread.js.map +1 -1
  111. package/dist/providers/hooks/use-tambo-session-token.test.d.ts.map +1 -0
  112. package/dist/providers/hooks/{__tests__/use-tambo-session-token.test.js → use-tambo-session-token.test.js} +1 -1
  113. package/dist/providers/hooks/use-tambo-session-token.test.js.map +1 -0
  114. package/dist/providers/index.d.ts +1 -1
  115. package/dist/providers/index.d.ts.map +1 -1
  116. package/dist/providers/index.js.map +1 -1
  117. package/dist/providers/tambo-client-provider.d.ts +0 -4
  118. package/dist/providers/tambo-client-provider.d.ts.map +1 -1
  119. package/dist/providers/tambo-client-provider.js +0 -3
  120. package/dist/providers/tambo-client-provider.js.map +1 -1
  121. package/dist/providers/tambo-component-provider.d.ts +4 -4
  122. package/dist/providers/tambo-component-provider.d.ts.map +1 -1
  123. package/dist/providers/tambo-component-provider.js.map +1 -1
  124. package/dist/providers/tambo-context-attachment-provider.test.d.ts.map +1 -0
  125. package/dist/providers/{__tests__/tambo-context-attachment-provider.test.js → tambo-context-attachment-provider.test.js} +2 -2
  126. package/dist/providers/tambo-context-attachment-provider.test.js.map +1 -0
  127. package/dist/providers/tambo-context-helpers-provider.test.d.ts.map +1 -0
  128. package/dist/providers/{__tests__/tambo-context-helpers-provider.test.js → tambo-context-helpers-provider.test.js} +2 -2
  129. package/dist/providers/tambo-context-helpers-provider.test.js.map +1 -0
  130. package/dist/providers/tambo-interactable-provider-partial-updates.test.d.ts.map +1 -0
  131. package/dist/providers/{__tests__/tambo-interactable-provider-partial-updates.test.js → tambo-interactable-provider-partial-updates.test.js} +91 -91
  132. package/dist/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -0
  133. package/dist/providers/tambo-interactable-provider.d.ts +2 -3
  134. package/dist/providers/tambo-interactable-provider.d.ts.map +1 -1
  135. package/dist/providers/tambo-interactable-provider.js +47 -41
  136. package/dist/providers/tambo-interactable-provider.js.map +1 -1
  137. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.d.ts.map +1 -0
  138. package/dist/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.js → tambo-interactables-additional-context-edge-cases.test.js} +17 -17
  139. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -0
  140. package/dist/providers/tambo-interactables-additional-context.test.d.ts.map +1 -0
  141. package/dist/providers/{__tests__/tambo-interactables-additional-context.test.js → tambo-interactables-additional-context.test.js} +19 -19
  142. package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -0
  143. package/dist/providers/tambo-mcp-token-provider.d.ts +20 -13
  144. package/dist/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  145. package/dist/providers/tambo-mcp-token-provider.js +122 -10
  146. package/dist/providers/tambo-mcp-token-provider.js.map +1 -1
  147. package/dist/providers/tambo-prop-stream-provider.test.d.ts.map +1 -0
  148. package/dist/providers/{__tests__/tambo-prop-stream-provider.test.js → tambo-prop-stream-provider.test.js} +32 -25
  149. package/dist/providers/tambo-prop-stream-provider.test.js.map +1 -0
  150. package/dist/providers/tambo-provider.d.ts +2 -2
  151. package/dist/providers/tambo-provider.d.ts.map +1 -1
  152. package/dist/providers/tambo-provider.js +5 -7
  153. package/dist/providers/tambo-provider.js.map +1 -1
  154. package/dist/providers/tambo-registry-provider.d.ts +28 -7
  155. package/dist/providers/tambo-registry-provider.d.ts.map +1 -1
  156. package/dist/providers/tambo-registry-provider.js +70 -181
  157. package/dist/providers/tambo-registry-provider.js.map +1 -1
  158. package/dist/providers/tambo-registry-provider.test.d.ts.map +1 -0
  159. package/dist/providers/{__tests__/tambo-registry-provider.test.js → tambo-registry-provider.test.js} +153 -31
  160. package/dist/providers/tambo-registry-provider.test.js.map +1 -0
  161. package/dist/providers/tambo-registry-schema-compat.test.d.ts +2 -0
  162. package/dist/providers/tambo-registry-schema-compat.test.d.ts.map +1 -0
  163. package/dist/providers/tambo-registry-schema-compat.test.js +616 -0
  164. package/dist/providers/tambo-registry-schema-compat.test.js.map +1 -0
  165. package/dist/providers/tambo-stubs.d.ts +2 -2
  166. package/dist/providers/tambo-stubs.d.ts.map +1 -1
  167. package/dist/providers/tambo-stubs.js +9 -2
  168. package/dist/providers/tambo-stubs.js.map +1 -1
  169. package/dist/providers/tambo-stubs.test.d.ts.map +1 -0
  170. package/dist/providers/{__tests__/tambo-stubs.test.js → tambo-stubs.test.js} +2 -2
  171. package/dist/providers/tambo-stubs.test.js.map +1 -0
  172. package/dist/providers/tambo-thread-input-provider.d.ts +2 -1
  173. package/dist/providers/tambo-thread-input-provider.d.ts.map +1 -1
  174. package/dist/providers/tambo-thread-input-provider.js +3 -3
  175. package/dist/providers/tambo-thread-input-provider.js.map +1 -1
  176. package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts.map +1 -0
  177. package/dist/providers/{__tests__/tambo-thread-provider-initial-messages.test.js → tambo-thread-provider-initial-messages.test.js} +7 -9
  178. package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +1 -0
  179. package/dist/providers/tambo-thread-provider.d.ts +8 -0
  180. package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
  181. package/dist/providers/tambo-thread-provider.js +82 -19
  182. package/dist/providers/tambo-thread-provider.js.map +1 -1
  183. package/dist/providers/tambo-thread-provider.test.d.ts.map +1 -0
  184. package/dist/providers/{__tests__/tambo-thread-provider.test.js → tambo-thread-provider.test.js} +42 -78
  185. package/dist/providers/tambo-thread-provider.test.js.map +1 -0
  186. package/dist/schema/index.d.ts +6 -0
  187. package/dist/schema/index.d.ts.map +1 -0
  188. package/dist/schema/index.js +18 -0
  189. package/dist/schema/index.js.map +1 -0
  190. package/dist/schema/json-schema.d.ts +35 -0
  191. package/dist/schema/json-schema.d.ts.map +1 -0
  192. package/dist/schema/json-schema.js +103 -0
  193. package/dist/schema/json-schema.js.map +1 -0
  194. package/dist/schema/schema.d.ts +66 -0
  195. package/dist/schema/schema.d.ts.map +1 -0
  196. package/dist/schema/schema.js +192 -0
  197. package/dist/schema/schema.js.map +1 -0
  198. package/dist/schema/schema.test.d.ts +2 -0
  199. package/dist/schema/schema.test.d.ts.map +1 -0
  200. package/dist/schema/schema.test.js +41 -0
  201. package/dist/schema/schema.test.js.map +1 -0
  202. package/dist/schema/standard-schema.d.ts +21 -0
  203. package/dist/schema/standard-schema.d.ts.map +1 -0
  204. package/dist/schema/standard-schema.js +37 -0
  205. package/dist/schema/standard-schema.js.map +1 -0
  206. package/dist/schema/validate.d.ts +14 -0
  207. package/dist/schema/validate.d.ts.map +1 -0
  208. package/dist/schema/validate.js +148 -0
  209. package/dist/schema/validate.js.map +1 -0
  210. package/dist/schema/validate.test.d.ts +2 -0
  211. package/dist/schema/validate.test.d.ts.map +1 -0
  212. package/dist/schema/validate.test.js +128 -0
  213. package/dist/schema/validate.test.js.map +1 -0
  214. package/dist/schema/zod.d.ts +54 -0
  215. package/dist/schema/zod.d.ts.map +1 -0
  216. package/dist/schema/zod.js +135 -0
  217. package/dist/schema/zod.js.map +1 -0
  218. package/dist/testing/tools.d.ts +29 -15
  219. package/dist/testing/tools.d.ts.map +1 -1
  220. package/dist/testing/tools.js +64 -19
  221. package/dist/testing/tools.js.map +1 -1
  222. package/dist/util/content-parts.test.d.ts.map +1 -0
  223. package/dist/util/{__tests__/content-parts.test.js → content-parts.test.js} +1 -1
  224. package/dist/util/content-parts.test.js.map +1 -0
  225. package/dist/util/generate-component.d.ts.map +1 -1
  226. package/dist/util/generate-component.js +3 -3
  227. package/dist/util/generate-component.js.map +1 -1
  228. package/dist/util/mcp-server-utils.d.ts +23 -0
  229. package/dist/util/mcp-server-utils.d.ts.map +1 -0
  230. package/dist/util/mcp-server-utils.js +107 -0
  231. package/dist/util/mcp-server-utils.js.map +1 -0
  232. package/dist/util/mcp-server-utils.test.d.ts +2 -0
  233. package/dist/util/mcp-server-utils.test.d.ts.map +1 -0
  234. package/dist/util/mcp-server-utils.test.js +287 -0
  235. package/dist/util/mcp-server-utils.test.js.map +1 -0
  236. package/dist/util/message-builder.d.ts +4 -3
  237. package/dist/util/message-builder.d.ts.map +1 -1
  238. package/dist/util/message-builder.js +83 -8
  239. package/dist/util/message-builder.js.map +1 -1
  240. package/dist/util/message-builder.test.d.ts.map +1 -0
  241. package/dist/util/message-builder.test.js +678 -0
  242. package/dist/util/message-builder.test.js.map +1 -0
  243. package/dist/util/query-utils.d.ts.map +1 -1
  244. package/dist/util/query-utils.js +49 -31
  245. package/dist/util/query-utils.js.map +1 -1
  246. package/dist/util/registry-validators.d.ts +26 -0
  247. package/dist/util/registry-validators.d.ts.map +1 -0
  248. package/dist/util/registry-validators.js +105 -0
  249. package/dist/util/registry-validators.js.map +1 -0
  250. package/dist/util/registry-validators.test.d.ts +2 -0
  251. package/dist/util/registry-validators.test.d.ts.map +1 -0
  252. package/dist/util/registry-validators.test.js +235 -0
  253. package/dist/util/registry-validators.test.js.map +1 -0
  254. package/dist/util/registry.d.ts +35 -7
  255. package/dist/util/registry.d.ts.map +1 -1
  256. package/dist/util/registry.js +60 -77
  257. package/dist/util/registry.js.map +1 -1
  258. package/dist/util/registry.test.d.ts +2 -0
  259. package/dist/util/registry.test.d.ts.map +1 -0
  260. package/dist/util/registry.test.js +204 -0
  261. package/dist/util/registry.test.js.map +1 -0
  262. package/dist/util/resource-validators.d.ts +16 -0
  263. package/dist/util/resource-validators.d.ts.map +1 -0
  264. package/dist/util/resource-validators.js +34 -0
  265. package/dist/util/resource-validators.js.map +1 -0
  266. package/dist/util/tool-caller.d.ts +2 -2
  267. package/dist/util/tool-caller.d.ts.map +1 -1
  268. package/dist/util/tool-caller.js +12 -4
  269. package/dist/util/tool-caller.js.map +1 -1
  270. package/esm/context-helpers/context-helpers-provider.test.d.ts.map +1 -0
  271. package/esm/context-helpers/{__tests__/context-helpers-provider.test.js → context-helpers-provider.test.js} +2 -2
  272. package/esm/context-helpers/context-helpers-provider.test.js.map +1 -0
  273. package/esm/context-helpers/context-helpers.test.d.ts.map +1 -0
  274. package/esm/context-helpers/{__tests__/context-helpers.test.js → context-helpers.test.js} +1 -1
  275. package/esm/context-helpers/context-helpers.test.js.map +1 -0
  276. package/{dist/providers → esm}/hoc/with-tambo-interactable.d.ts +2 -2
  277. package/esm/hoc/with-tambo-interactable.d.ts.map +1 -0
  278. package/esm/{providers/hoc → hoc}/with-tambo-interactable.js +29 -2
  279. package/esm/hoc/with-tambo-interactable.js.map +1 -0
  280. package/esm/hoc/with-tambo-interactable.test.d.ts +2 -0
  281. package/esm/hoc/with-tambo-interactable.test.d.ts.map +1 -0
  282. package/esm/hoc/with-tambo-interactable.test.js +187 -0
  283. package/esm/hoc/with-tambo-interactable.test.js.map +1 -0
  284. package/esm/hooks/index.d.ts +1 -1
  285. package/esm/hooks/index.d.ts.map +1 -1
  286. package/esm/hooks/index.js +1 -1
  287. package/esm/hooks/index.js.map +1 -1
  288. package/esm/hooks/use-component-state.d.ts +11 -24
  289. package/esm/hooks/use-component-state.d.ts.map +1 -1
  290. package/esm/hooks/use-component-state.js +14 -5
  291. package/esm/hooks/use-component-state.js.map +1 -1
  292. package/esm/hooks/use-component-state.test.d.ts.map +1 -0
  293. package/esm/hooks/{__tests__/use-component-state.test.js → use-component-state.test.js} +7 -7
  294. package/esm/hooks/use-component-state.test.js.map +1 -0
  295. package/esm/hooks/use-current-message.d.ts +51 -7
  296. package/esm/hooks/use-current-message.d.ts.map +1 -1
  297. package/esm/hooks/use-current-message.js +48 -5
  298. package/esm/hooks/use-current-message.js.map +1 -1
  299. package/esm/hooks/use-current-message.test.d.ts +2 -0
  300. package/esm/hooks/use-current-message.test.d.ts.map +1 -0
  301. package/esm/hooks/use-current-message.test.js +259 -0
  302. package/esm/hooks/use-current-message.test.js.map +1 -0
  303. package/esm/hooks/use-message-images.test.d.ts.map +1 -0
  304. package/esm/hooks/{__tests__/use-message-images.test.js → use-message-images.test.js} +1 -1
  305. package/esm/hooks/use-message-images.test.js.map +1 -0
  306. package/esm/hooks/use-streaming-props.d.ts +7 -19
  307. package/esm/hooks/use-streaming-props.d.ts.map +1 -1
  308. package/esm/hooks/use-streaming-props.js +7 -19
  309. package/esm/hooks/use-streaming-props.js.map +1 -1
  310. package/esm/hooks/use-suggestions.d.ts +1 -1
  311. package/esm/hooks/use-suggestions.d.ts.map +1 -1
  312. package/esm/hooks/use-suggestions.js.map +1 -1
  313. package/esm/hooks/use-suggestions.test.d.ts.map +1 -0
  314. package/esm/hooks/{__tests__/use-suggestions.test.js → use-suggestions.test.js} +36 -29
  315. package/esm/hooks/use-suggestions.test.js.map +1 -0
  316. package/esm/hooks/use-tambo-stream-status.d.ts +9 -8
  317. package/esm/hooks/use-tambo-stream-status.d.ts.map +1 -1
  318. package/esm/hooks/use-tambo-stream-status.js +9 -8
  319. package/esm/hooks/use-tambo-stream-status.js.map +1 -1
  320. package/esm/hooks/use-tambo-stream-status.test.d.ts.map +1 -0
  321. package/esm/hooks/{__tests__/use-tambo-stream-status.test.js → use-tambo-stream-status.test.js} +6 -6
  322. package/esm/hooks/use-tambo-stream-status.test.js.map +1 -0
  323. package/esm/hooks/use-tambo-threads.test.d.ts.map +1 -0
  324. package/esm/hooks/{__tests__/use-tambo-threads.test.js → use-tambo-threads.test.js} +3 -3
  325. package/esm/hooks/use-tambo-threads.test.js.map +1 -0
  326. package/esm/index.d.ts +10 -8
  327. package/esm/index.d.ts.map +1 -1
  328. package/esm/index.js +4 -2
  329. package/esm/index.js.map +1 -1
  330. package/esm/mcp/elicitation.d.ts +10 -2
  331. package/esm/mcp/elicitation.d.ts.map +1 -1
  332. package/esm/mcp/elicitation.js +19 -1
  333. package/esm/mcp/elicitation.js.map +1 -1
  334. package/esm/mcp/elicitation.test.d.ts.map +1 -0
  335. package/esm/mcp/{__tests__/elicitation.test.js → elicitation.test.js} +1 -1
  336. package/esm/mcp/elicitation.test.js.map +1 -0
  337. package/esm/mcp/index.d.ts +11 -2
  338. package/esm/mcp/index.d.ts.map +1 -1
  339. package/esm/mcp/index.js +10 -1
  340. package/esm/mcp/index.js.map +1 -1
  341. package/esm/mcp/mcp-client.d.ts +29 -10
  342. package/esm/mcp/mcp-client.d.ts.map +1 -1
  343. package/esm/mcp/mcp-client.test.d.ts.map +1 -0
  344. package/esm/mcp/{__tests__/mcp-client.test.js → mcp-client.test.js} +1 -1
  345. package/esm/mcp/mcp-client.test.js.map +1 -0
  346. package/esm/mcp/mcp-hooks.d.ts +129 -25
  347. package/esm/mcp/mcp-hooks.d.ts.map +1 -1
  348. package/esm/mcp/mcp-hooks.js +103 -40
  349. package/esm/mcp/mcp-hooks.js.map +1 -1
  350. package/esm/mcp/mcp-hooks.test.d.ts.map +1 -0
  351. package/esm/mcp/{__tests__/mcp-hooks.test.js → mcp-hooks.test.js} +90 -51
  352. package/esm/mcp/mcp-hooks.test.js.map +1 -0
  353. package/esm/mcp/tambo-mcp-provider.d.ts +2 -0
  354. package/esm/mcp/tambo-mcp-provider.d.ts.map +1 -1
  355. package/esm/mcp/tambo-mcp-provider.js +60 -13
  356. package/esm/mcp/tambo-mcp-provider.js.map +1 -1
  357. package/esm/mcp/tambo-mcp-provider.test.d.ts.map +1 -0
  358. package/esm/mcp/{__tests__/tambo-mcp-provider.test.js → tambo-mcp-provider.test.js} +9 -25
  359. package/esm/mcp/tambo-mcp-provider.test.js.map +1 -0
  360. package/esm/mcp/use-mcp-servers.test.d.ts.map +1 -0
  361. package/esm/mcp/{__tests__/use-mcp-servers.test.js → use-mcp-servers.test.js} +5 -11
  362. package/esm/mcp/use-mcp-servers.test.js.map +1 -0
  363. package/esm/model/component-metadata.d.ts +444 -14
  364. package/esm/model/component-metadata.d.ts.map +1 -1
  365. package/esm/model/component-metadata.js.map +1 -1
  366. package/esm/model/generate-component-response.d.ts +12 -1
  367. package/esm/model/generate-component-response.d.ts.map +1 -1
  368. package/esm/model/generate-component-response.js.map +1 -1
  369. package/esm/model/mcp-server-info.d.ts +3 -1
  370. package/esm/model/mcp-server-info.d.ts.map +1 -1
  371. package/esm/model/mcp-server-info.js.map +1 -1
  372. package/esm/model/resource-info.d.ts +55 -0
  373. package/esm/model/resource-info.d.ts.map +1 -0
  374. package/esm/model/resource-info.js +2 -0
  375. package/esm/model/resource-info.js.map +1 -0
  376. package/esm/model/tambo-thread.d.ts +6 -1
  377. package/esm/model/tambo-thread.d.ts.map +1 -1
  378. package/esm/model/tambo-thread.js.map +1 -1
  379. package/esm/providers/hooks/use-tambo-session-token.test.d.ts.map +1 -0
  380. package/esm/providers/hooks/{__tests__/use-tambo-session-token.test.js → use-tambo-session-token.test.js} +1 -1
  381. package/esm/providers/hooks/use-tambo-session-token.test.js.map +1 -0
  382. package/esm/providers/index.d.ts +1 -1
  383. package/esm/providers/index.d.ts.map +1 -1
  384. package/esm/providers/index.js.map +1 -1
  385. package/esm/providers/tambo-client-provider.d.ts +0 -4
  386. package/esm/providers/tambo-client-provider.d.ts.map +1 -1
  387. package/esm/providers/tambo-client-provider.js +0 -3
  388. package/esm/providers/tambo-client-provider.js.map +1 -1
  389. package/esm/providers/tambo-component-provider.d.ts +4 -4
  390. package/esm/providers/tambo-component-provider.d.ts.map +1 -1
  391. package/esm/providers/tambo-component-provider.js.map +1 -1
  392. package/esm/providers/tambo-context-attachment-provider.test.d.ts.map +1 -0
  393. package/esm/providers/{__tests__/tambo-context-attachment-provider.test.js → tambo-context-attachment-provider.test.js} +2 -2
  394. package/esm/providers/tambo-context-attachment-provider.test.js.map +1 -0
  395. package/esm/providers/tambo-context-helpers-provider.test.d.ts.map +1 -0
  396. package/esm/providers/{__tests__/tambo-context-helpers-provider.test.js → tambo-context-helpers-provider.test.js} +2 -2
  397. package/esm/providers/tambo-context-helpers-provider.test.js.map +1 -0
  398. package/esm/providers/tambo-interactable-provider-partial-updates.test.d.ts.map +1 -0
  399. package/esm/providers/{__tests__/tambo-interactable-provider-partial-updates.test.js → tambo-interactable-provider-partial-updates.test.js} +5 -5
  400. package/esm/providers/tambo-interactable-provider-partial-updates.test.js.map +1 -0
  401. package/esm/providers/tambo-interactable-provider.d.ts +2 -3
  402. package/esm/providers/tambo-interactable-provider.d.ts.map +1 -1
  403. package/esm/providers/tambo-interactable-provider.js +44 -38
  404. package/esm/providers/tambo-interactable-provider.js.map +1 -1
  405. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.d.ts.map +1 -0
  406. package/esm/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.js → tambo-interactables-additional-context-edge-cases.test.js} +10 -10
  407. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -0
  408. package/esm/providers/tambo-interactables-additional-context.test.d.ts.map +1 -0
  409. package/esm/providers/{__tests__/tambo-interactables-additional-context.test.js → tambo-interactables-additional-context.test.js} +10 -10
  410. package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -0
  411. package/esm/providers/tambo-mcp-token-provider.d.ts +20 -13
  412. package/esm/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  413. package/esm/providers/tambo-mcp-token-provider.js +123 -11
  414. package/esm/providers/tambo-mcp-token-provider.js.map +1 -1
  415. package/esm/providers/tambo-prop-stream-provider.test.d.ts.map +1 -0
  416. package/esm/providers/{__tests__/tambo-prop-stream-provider.test.js → tambo-prop-stream-provider.test.js} +32 -25
  417. package/esm/providers/tambo-prop-stream-provider.test.js.map +1 -0
  418. package/esm/providers/tambo-provider.d.ts +2 -2
  419. package/esm/providers/tambo-provider.d.ts.map +1 -1
  420. package/esm/providers/tambo-provider.js +5 -7
  421. package/esm/providers/tambo-provider.js.map +1 -1
  422. package/esm/providers/tambo-registry-provider.d.ts +28 -7
  423. package/esm/providers/tambo-registry-provider.d.ts.map +1 -1
  424. package/esm/providers/tambo-registry-provider.js +67 -175
  425. package/esm/providers/tambo-registry-provider.js.map +1 -1
  426. package/esm/providers/tambo-registry-provider.test.d.ts.map +1 -0
  427. package/esm/providers/{__tests__/tambo-registry-provider.test.js → tambo-registry-provider.test.js} +149 -27
  428. package/esm/providers/tambo-registry-provider.test.js.map +1 -0
  429. package/esm/providers/tambo-registry-schema-compat.test.d.ts +2 -0
  430. package/esm/providers/tambo-registry-schema-compat.test.d.ts.map +1 -0
  431. package/esm/providers/tambo-registry-schema-compat.test.js +578 -0
  432. package/esm/providers/tambo-registry-schema-compat.test.js.map +1 -0
  433. package/esm/providers/tambo-stubs.d.ts +2 -2
  434. package/esm/providers/tambo-stubs.d.ts.map +1 -1
  435. package/esm/providers/tambo-stubs.js +9 -2
  436. package/esm/providers/tambo-stubs.js.map +1 -1
  437. package/esm/providers/tambo-stubs.test.d.ts.map +1 -0
  438. package/esm/providers/{__tests__/tambo-stubs.test.js → tambo-stubs.test.js} +2 -2
  439. package/esm/providers/tambo-stubs.test.js.map +1 -0
  440. package/esm/providers/tambo-thread-input-provider.d.ts +2 -1
  441. package/esm/providers/tambo-thread-input-provider.d.ts.map +1 -1
  442. package/esm/providers/tambo-thread-input-provider.js +3 -3
  443. package/esm/providers/tambo-thread-input-provider.js.map +1 -1
  444. package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts.map +1 -0
  445. package/esm/providers/{__tests__/tambo-thread-provider-initial-messages.test.js → tambo-thread-provider-initial-messages.test.js} +7 -9
  446. package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +1 -0
  447. package/esm/providers/tambo-thread-provider.d.ts +8 -0
  448. package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
  449. package/esm/providers/tambo-thread-provider.js +82 -19
  450. package/esm/providers/tambo-thread-provider.js.map +1 -1
  451. package/esm/providers/tambo-thread-provider.test.d.ts.map +1 -0
  452. package/esm/providers/{__tests__/tambo-thread-provider.test.js → tambo-thread-provider.test.js} +34 -70
  453. package/esm/providers/tambo-thread-provider.test.js.map +1 -0
  454. package/esm/schema/index.d.ts +6 -0
  455. package/esm/schema/index.d.ts.map +1 -0
  456. package/esm/schema/index.js +6 -0
  457. package/esm/schema/index.js.map +1 -0
  458. package/esm/schema/json-schema.d.ts +35 -0
  459. package/esm/schema/json-schema.d.ts.map +1 -0
  460. package/esm/schema/json-schema.js +98 -0
  461. package/esm/schema/json-schema.js.map +1 -0
  462. package/esm/schema/schema.d.ts +66 -0
  463. package/esm/schema/schema.d.ts.map +1 -0
  464. package/esm/schema/schema.js +185 -0
  465. package/esm/schema/schema.js.map +1 -0
  466. package/esm/schema/schema.test.d.ts +2 -0
  467. package/esm/schema/schema.test.d.ts.map +1 -0
  468. package/esm/schema/schema.test.js +39 -0
  469. package/esm/schema/schema.test.js.map +1 -0
  470. package/esm/schema/standard-schema.d.ts +21 -0
  471. package/esm/schema/standard-schema.d.ts.map +1 -0
  472. package/esm/schema/standard-schema.js +34 -0
  473. package/esm/schema/standard-schema.js.map +1 -0
  474. package/esm/schema/validate.d.ts +14 -0
  475. package/esm/schema/validate.d.ts.map +1 -0
  476. package/esm/schema/validate.js +145 -0
  477. package/esm/schema/validate.js.map +1 -0
  478. package/esm/schema/validate.test.d.ts +2 -0
  479. package/esm/schema/validate.test.d.ts.map +1 -0
  480. package/esm/schema/validate.test.js +126 -0
  481. package/esm/schema/validate.test.js.map +1 -0
  482. package/esm/schema/zod.d.ts +54 -0
  483. package/esm/schema/zod.d.ts.map +1 -0
  484. package/esm/schema/zod.js +124 -0
  485. package/esm/schema/zod.js.map +1 -0
  486. package/esm/testing/tools.d.ts +29 -15
  487. package/esm/testing/tools.d.ts.map +1 -1
  488. package/esm/testing/tools.js +62 -16
  489. package/esm/testing/tools.js.map +1 -1
  490. package/esm/util/content-parts.test.d.ts.map +1 -0
  491. package/esm/util/{__tests__/content-parts.test.js → content-parts.test.js} +1 -1
  492. package/esm/util/content-parts.test.js.map +1 -0
  493. package/esm/util/generate-component.d.ts.map +1 -1
  494. package/esm/util/generate-component.js +3 -3
  495. package/esm/util/generate-component.js.map +1 -1
  496. package/esm/util/mcp-server-utils.d.ts +23 -0
  497. package/esm/util/mcp-server-utils.d.ts.map +1 -0
  498. package/esm/util/mcp-server-utils.js +102 -0
  499. package/esm/util/mcp-server-utils.js.map +1 -0
  500. package/esm/util/mcp-server-utils.test.d.ts +2 -0
  501. package/esm/util/mcp-server-utils.test.d.ts.map +1 -0
  502. package/esm/util/mcp-server-utils.test.js +285 -0
  503. package/esm/util/mcp-server-utils.test.js.map +1 -0
  504. package/esm/util/message-builder.d.ts +4 -3
  505. package/esm/util/message-builder.d.ts.map +1 -1
  506. package/esm/util/message-builder.js +83 -8
  507. package/esm/util/message-builder.js.map +1 -1
  508. package/esm/util/message-builder.test.d.ts.map +1 -0
  509. package/esm/util/message-builder.test.js +676 -0
  510. package/esm/util/message-builder.test.js.map +1 -0
  511. package/esm/util/query-utils.d.ts.map +1 -1
  512. package/esm/util/query-utils.js +49 -31
  513. package/esm/util/query-utils.js.map +1 -1
  514. package/esm/util/registry-validators.d.ts +26 -0
  515. package/esm/util/registry-validators.d.ts.map +1 -0
  516. package/esm/util/registry-validators.js +100 -0
  517. package/esm/util/registry-validators.js.map +1 -0
  518. package/esm/util/registry-validators.test.d.ts +2 -0
  519. package/esm/util/registry-validators.test.d.ts.map +1 -0
  520. package/esm/util/registry-validators.test.js +233 -0
  521. package/esm/util/registry-validators.test.js.map +1 -0
  522. package/esm/util/registry.d.ts +35 -7
  523. package/esm/util/registry.d.ts.map +1 -1
  524. package/esm/util/registry.js +57 -73
  525. package/esm/util/registry.js.map +1 -1
  526. package/esm/util/registry.test.d.ts +2 -0
  527. package/esm/util/registry.test.d.ts.map +1 -0
  528. package/esm/util/registry.test.js +169 -0
  529. package/esm/util/registry.test.js.map +1 -0
  530. package/esm/util/resource-validators.d.ts +16 -0
  531. package/esm/util/resource-validators.d.ts.map +1 -0
  532. package/esm/util/resource-validators.js +30 -0
  533. package/esm/util/resource-validators.js.map +1 -0
  534. package/esm/util/tool-caller.d.ts +2 -2
  535. package/esm/util/tool-caller.d.ts.map +1 -1
  536. package/esm/util/tool-caller.js +12 -4
  537. package/esm/util/tool-caller.js.map +1 -1
  538. package/package.json +30 -11
  539. package/dist/__tests__/util/validate-zod-schema.test.d.ts +0 -2
  540. package/dist/__tests__/util/validate-zod-schema.test.d.ts.map +0 -1
  541. package/dist/__tests__/util/validate-zod-schema.test.js +0 -96
  542. package/dist/__tests__/util/validate-zod-schema.test.js.map +0 -1
  543. package/dist/context-helpers/__tests__/context-helpers-provider.test.d.ts.map +0 -1
  544. package/dist/context-helpers/__tests__/context-helpers-provider.test.js.map +0 -1
  545. package/dist/context-helpers/__tests__/context-helpers.test.d.ts.map +0 -1
  546. package/dist/context-helpers/__tests__/context-helpers.test.js.map +0 -1
  547. package/dist/hooks/__tests__/use-component-state.test.d.ts.map +0 -1
  548. package/dist/hooks/__tests__/use-component-state.test.js.map +0 -1
  549. package/dist/hooks/__tests__/use-message-images.test.d.ts.map +0 -1
  550. package/dist/hooks/__tests__/use-message-images.test.js.map +0 -1
  551. package/dist/hooks/__tests__/use-suggestions.test.d.ts.map +0 -1
  552. package/dist/hooks/__tests__/use-suggestions.test.js.map +0 -1
  553. package/dist/hooks/__tests__/use-tambo-stream-status.test.d.ts.map +0 -1
  554. package/dist/hooks/__tests__/use-tambo-stream-status.test.js.map +0 -1
  555. package/dist/hooks/__tests__/use-tambo-threads.test.d.ts.map +0 -1
  556. package/dist/hooks/__tests__/use-tambo-threads.test.js.map +0 -1
  557. package/dist/mcp/__tests__/elicitation.test.d.ts.map +0 -1
  558. package/dist/mcp/__tests__/elicitation.test.js.map +0 -1
  559. package/dist/mcp/__tests__/mcp-client.test.d.ts.map +0 -1
  560. package/dist/mcp/__tests__/mcp-client.test.js.map +0 -1
  561. package/dist/mcp/__tests__/mcp-hooks.test.d.ts.map +0 -1
  562. package/dist/mcp/__tests__/mcp-hooks.test.js.map +0 -1
  563. package/dist/mcp/__tests__/tambo-mcp-provider.test.d.ts.map +0 -1
  564. package/dist/mcp/__tests__/tambo-mcp-provider.test.js.map +0 -1
  565. package/dist/mcp/__tests__/use-mcp-servers.test.d.ts.map +0 -1
  566. package/dist/mcp/__tests__/use-mcp-servers.test.js.map +0 -1
  567. package/dist/providers/__tests__/tambo-context-attachment-provider.test.d.ts.map +0 -1
  568. package/dist/providers/__tests__/tambo-context-attachment-provider.test.js.map +0 -1
  569. package/dist/providers/__tests__/tambo-context-helpers-provider.test.d.ts.map +0 -1
  570. package/dist/providers/__tests__/tambo-context-helpers-provider.test.js.map +0 -1
  571. package/dist/providers/__tests__/tambo-interactable-provider-partial-updates.test.d.ts.map +0 -1
  572. package/dist/providers/__tests__/tambo-interactable-provider-partial-updates.test.js.map +0 -1
  573. package/dist/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts.map +0 -1
  574. package/dist/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.js.map +0 -1
  575. package/dist/providers/__tests__/tambo-interactables-additional-context.test.d.ts.map +0 -1
  576. package/dist/providers/__tests__/tambo-interactables-additional-context.test.js.map +0 -1
  577. package/dist/providers/__tests__/tambo-prop-stream-provider.test.d.ts.map +0 -1
  578. package/dist/providers/__tests__/tambo-prop-stream-provider.test.js.map +0 -1
  579. package/dist/providers/__tests__/tambo-registry-provider.test.d.ts.map +0 -1
  580. package/dist/providers/__tests__/tambo-registry-provider.test.js.map +0 -1
  581. package/dist/providers/__tests__/tambo-stubs.test.d.ts.map +0 -1
  582. package/dist/providers/__tests__/tambo-stubs.test.js.map +0 -1
  583. package/dist/providers/__tests__/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  584. package/dist/providers/__tests__/tambo-thread-provider-initial-messages.test.js.map +0 -1
  585. package/dist/providers/__tests__/tambo-thread-provider.test.d.ts.map +0 -1
  586. package/dist/providers/__tests__/tambo-thread-provider.test.js.map +0 -1
  587. package/dist/providers/hoc/with-tambo-interactable.d.ts.map +0 -1
  588. package/dist/providers/hoc/with-tambo-interactable.js.map +0 -1
  589. package/dist/providers/hooks/__tests__/use-tambo-session-token.test.d.ts.map +0 -1
  590. package/dist/providers/hooks/__tests__/use-tambo-session-token.test.js.map +0 -1
  591. package/dist/util/__tests__/content-parts.test.d.ts.map +0 -1
  592. package/dist/util/__tests__/content-parts.test.js.map +0 -1
  593. package/dist/util/__tests__/message-builder.test.d.ts.map +0 -1
  594. package/dist/util/__tests__/message-builder.test.js +0 -191
  595. package/dist/util/__tests__/message-builder.test.js.map +0 -1
  596. package/dist/util/validate-zod-schema.d.ts +0 -10
  597. package/dist/util/validate-zod-schema.d.ts.map +0 -1
  598. package/dist/util/validate-zod-schema.js +0 -100
  599. package/dist/util/validate-zod-schema.js.map +0 -1
  600. package/esm/__tests__/util/validate-zod-schema.test.d.ts +0 -2
  601. package/esm/__tests__/util/validate-zod-schema.test.d.ts.map +0 -1
  602. package/esm/__tests__/util/validate-zod-schema.test.js +0 -94
  603. package/esm/__tests__/util/validate-zod-schema.test.js.map +0 -1
  604. package/esm/context-helpers/__tests__/context-helpers-provider.test.d.ts.map +0 -1
  605. package/esm/context-helpers/__tests__/context-helpers-provider.test.js.map +0 -1
  606. package/esm/context-helpers/__tests__/context-helpers.test.d.ts.map +0 -1
  607. package/esm/context-helpers/__tests__/context-helpers.test.js.map +0 -1
  608. package/esm/hooks/__tests__/use-component-state.test.d.ts.map +0 -1
  609. package/esm/hooks/__tests__/use-component-state.test.js.map +0 -1
  610. package/esm/hooks/__tests__/use-message-images.test.d.ts.map +0 -1
  611. package/esm/hooks/__tests__/use-message-images.test.js.map +0 -1
  612. package/esm/hooks/__tests__/use-suggestions.test.d.ts.map +0 -1
  613. package/esm/hooks/__tests__/use-suggestions.test.js.map +0 -1
  614. package/esm/hooks/__tests__/use-tambo-stream-status.test.d.ts.map +0 -1
  615. package/esm/hooks/__tests__/use-tambo-stream-status.test.js.map +0 -1
  616. package/esm/hooks/__tests__/use-tambo-threads.test.d.ts.map +0 -1
  617. package/esm/hooks/__tests__/use-tambo-threads.test.js.map +0 -1
  618. package/esm/mcp/__tests__/elicitation.test.d.ts.map +0 -1
  619. package/esm/mcp/__tests__/elicitation.test.js.map +0 -1
  620. package/esm/mcp/__tests__/mcp-client.test.d.ts.map +0 -1
  621. package/esm/mcp/__tests__/mcp-client.test.js.map +0 -1
  622. package/esm/mcp/__tests__/mcp-hooks.test.d.ts.map +0 -1
  623. package/esm/mcp/__tests__/mcp-hooks.test.js.map +0 -1
  624. package/esm/mcp/__tests__/tambo-mcp-provider.test.d.ts.map +0 -1
  625. package/esm/mcp/__tests__/tambo-mcp-provider.test.js.map +0 -1
  626. package/esm/mcp/__tests__/use-mcp-servers.test.d.ts.map +0 -1
  627. package/esm/mcp/__tests__/use-mcp-servers.test.js.map +0 -1
  628. package/esm/providers/__tests__/tambo-context-attachment-provider.test.d.ts.map +0 -1
  629. package/esm/providers/__tests__/tambo-context-attachment-provider.test.js.map +0 -1
  630. package/esm/providers/__tests__/tambo-context-helpers-provider.test.d.ts.map +0 -1
  631. package/esm/providers/__tests__/tambo-context-helpers-provider.test.js.map +0 -1
  632. package/esm/providers/__tests__/tambo-interactable-provider-partial-updates.test.d.ts.map +0 -1
  633. package/esm/providers/__tests__/tambo-interactable-provider-partial-updates.test.js.map +0 -1
  634. package/esm/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts.map +0 -1
  635. package/esm/providers/__tests__/tambo-interactables-additional-context-edge-cases.test.js.map +0 -1
  636. package/esm/providers/__tests__/tambo-interactables-additional-context.test.d.ts.map +0 -1
  637. package/esm/providers/__tests__/tambo-interactables-additional-context.test.js.map +0 -1
  638. package/esm/providers/__tests__/tambo-prop-stream-provider.test.d.ts.map +0 -1
  639. package/esm/providers/__tests__/tambo-prop-stream-provider.test.js.map +0 -1
  640. package/esm/providers/__tests__/tambo-registry-provider.test.d.ts.map +0 -1
  641. package/esm/providers/__tests__/tambo-registry-provider.test.js.map +0 -1
  642. package/esm/providers/__tests__/tambo-stubs.test.d.ts.map +0 -1
  643. package/esm/providers/__tests__/tambo-stubs.test.js.map +0 -1
  644. package/esm/providers/__tests__/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  645. package/esm/providers/__tests__/tambo-thread-provider-initial-messages.test.js.map +0 -1
  646. package/esm/providers/__tests__/tambo-thread-provider.test.d.ts.map +0 -1
  647. package/esm/providers/__tests__/tambo-thread-provider.test.js.map +0 -1
  648. package/esm/providers/hoc/with-tambo-interactable.d.ts.map +0 -1
  649. package/esm/providers/hoc/with-tambo-interactable.js.map +0 -1
  650. package/esm/providers/hooks/__tests__/use-tambo-session-token.test.d.ts.map +0 -1
  651. package/esm/providers/hooks/__tests__/use-tambo-session-token.test.js.map +0 -1
  652. package/esm/util/__tests__/content-parts.test.d.ts.map +0 -1
  653. package/esm/util/__tests__/content-parts.test.js.map +0 -1
  654. package/esm/util/__tests__/message-builder.test.d.ts.map +0 -1
  655. package/esm/util/__tests__/message-builder.test.js +0 -189
  656. package/esm/util/__tests__/message-builder.test.js.map +0 -1
  657. package/esm/util/validate-zod-schema.d.ts +0 -10
  658. package/esm/util/validate-zod-schema.d.ts.map +0 -1
  659. package/esm/util/validate-zod-schema.js +0 -97
  660. package/esm/util/validate-zod-schema.js.map +0 -1
  661. /package/dist/context-helpers/{__tests__/context-helpers-provider.test.d.ts → context-helpers-provider.test.d.ts} +0 -0
  662. /package/dist/context-helpers/{__tests__/context-helpers.test.d.ts → context-helpers.test.d.ts} +0 -0
  663. /package/dist/hooks/{__tests__/use-component-state.test.d.ts → use-component-state.test.d.ts} +0 -0
  664. /package/dist/hooks/{__tests__/use-message-images.test.d.ts → use-message-images.test.d.ts} +0 -0
  665. /package/dist/hooks/{__tests__/use-suggestions.test.d.ts → use-suggestions.test.d.ts} +0 -0
  666. /package/dist/hooks/{__tests__/use-tambo-stream-status.test.d.ts → use-tambo-stream-status.test.d.ts} +0 -0
  667. /package/dist/hooks/{__tests__/use-tambo-threads.test.d.ts → use-tambo-threads.test.d.ts} +0 -0
  668. /package/dist/mcp/{__tests__/elicitation.test.d.ts → elicitation.test.d.ts} +0 -0
  669. /package/dist/mcp/{__tests__/mcp-client.test.d.ts → mcp-client.test.d.ts} +0 -0
  670. /package/dist/mcp/{__tests__/mcp-hooks.test.d.ts → mcp-hooks.test.d.ts} +0 -0
  671. /package/dist/mcp/{__tests__/tambo-mcp-provider.test.d.ts → tambo-mcp-provider.test.d.ts} +0 -0
  672. /package/dist/mcp/{__tests__/use-mcp-servers.test.d.ts → use-mcp-servers.test.d.ts} +0 -0
  673. /package/dist/providers/hooks/{__tests__/use-tambo-session-token.test.d.ts → use-tambo-session-token.test.d.ts} +0 -0
  674. /package/dist/providers/{__tests__/tambo-context-attachment-provider.test.d.ts → tambo-context-attachment-provider.test.d.ts} +0 -0
  675. /package/dist/providers/{__tests__/tambo-context-helpers-provider.test.d.ts → tambo-context-helpers-provider.test.d.ts} +0 -0
  676. /package/dist/providers/{__tests__/tambo-interactable-provider-partial-updates.test.d.ts → tambo-interactable-provider-partial-updates.test.d.ts} +0 -0
  677. /package/dist/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts → tambo-interactables-additional-context-edge-cases.test.d.ts} +0 -0
  678. /package/dist/providers/{__tests__/tambo-interactables-additional-context.test.d.ts → tambo-interactables-additional-context.test.d.ts} +0 -0
  679. /package/dist/providers/{__tests__/tambo-prop-stream-provider.test.d.ts → tambo-prop-stream-provider.test.d.ts} +0 -0
  680. /package/dist/providers/{__tests__/tambo-registry-provider.test.d.ts → tambo-registry-provider.test.d.ts} +0 -0
  681. /package/dist/providers/{__tests__/tambo-stubs.test.d.ts → tambo-stubs.test.d.ts} +0 -0
  682. /package/dist/providers/{__tests__/tambo-thread-provider-initial-messages.test.d.ts → tambo-thread-provider-initial-messages.test.d.ts} +0 -0
  683. /package/dist/providers/{__tests__/tambo-thread-provider.test.d.ts → tambo-thread-provider.test.d.ts} +0 -0
  684. /package/dist/util/{__tests__/content-parts.test.d.ts → content-parts.test.d.ts} +0 -0
  685. /package/dist/util/{__tests__/message-builder.test.d.ts → message-builder.test.d.ts} +0 -0
  686. /package/esm/context-helpers/{__tests__/context-helpers-provider.test.d.ts → context-helpers-provider.test.d.ts} +0 -0
  687. /package/esm/context-helpers/{__tests__/context-helpers.test.d.ts → context-helpers.test.d.ts} +0 -0
  688. /package/esm/hooks/{__tests__/use-component-state.test.d.ts → use-component-state.test.d.ts} +0 -0
  689. /package/esm/hooks/{__tests__/use-message-images.test.d.ts → use-message-images.test.d.ts} +0 -0
  690. /package/esm/hooks/{__tests__/use-suggestions.test.d.ts → use-suggestions.test.d.ts} +0 -0
  691. /package/esm/hooks/{__tests__/use-tambo-stream-status.test.d.ts → use-tambo-stream-status.test.d.ts} +0 -0
  692. /package/esm/hooks/{__tests__/use-tambo-threads.test.d.ts → use-tambo-threads.test.d.ts} +0 -0
  693. /package/esm/mcp/{__tests__/elicitation.test.d.ts → elicitation.test.d.ts} +0 -0
  694. /package/esm/mcp/{__tests__/mcp-client.test.d.ts → mcp-client.test.d.ts} +0 -0
  695. /package/esm/mcp/{__tests__/mcp-hooks.test.d.ts → mcp-hooks.test.d.ts} +0 -0
  696. /package/esm/mcp/{__tests__/tambo-mcp-provider.test.d.ts → tambo-mcp-provider.test.d.ts} +0 -0
  697. /package/esm/mcp/{__tests__/use-mcp-servers.test.d.ts → use-mcp-servers.test.d.ts} +0 -0
  698. /package/esm/providers/hooks/{__tests__/use-tambo-session-token.test.d.ts → use-tambo-session-token.test.d.ts} +0 -0
  699. /package/esm/providers/{__tests__/tambo-context-attachment-provider.test.d.ts → tambo-context-attachment-provider.test.d.ts} +0 -0
  700. /package/esm/providers/{__tests__/tambo-context-helpers-provider.test.d.ts → tambo-context-helpers-provider.test.d.ts} +0 -0
  701. /package/esm/providers/{__tests__/tambo-interactable-provider-partial-updates.test.d.ts → tambo-interactable-provider-partial-updates.test.d.ts} +0 -0
  702. /package/esm/providers/{__tests__/tambo-interactables-additional-context-edge-cases.test.d.ts → tambo-interactables-additional-context-edge-cases.test.d.ts} +0 -0
  703. /package/esm/providers/{__tests__/tambo-interactables-additional-context.test.d.ts → tambo-interactables-additional-context.test.d.ts} +0 -0
  704. /package/esm/providers/{__tests__/tambo-prop-stream-provider.test.d.ts → tambo-prop-stream-provider.test.d.ts} +0 -0
  705. /package/esm/providers/{__tests__/tambo-registry-provider.test.d.ts → tambo-registry-provider.test.d.ts} +0 -0
  706. /package/esm/providers/{__tests__/tambo-stubs.test.d.ts → tambo-stubs.test.d.ts} +0 -0
  707. /package/esm/providers/{__tests__/tambo-thread-provider-initial-messages.test.d.ts → tambo-thread-provider-initial-messages.test.d.ts} +0 -0
  708. /package/esm/providers/{__tests__/tambo-thread-provider.test.d.ts → tambo-thread-provider.test.d.ts} +0 -0
  709. /package/esm/util/{__tests__/content-parts.test.d.ts → content-parts.test.d.ts} +0 -0
  710. /package/esm/util/{__tests__/message-builder.test.d.ts → message-builder.test.d.ts} +0 -0
@@ -34,22 +34,28 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  };
35
35
  })();
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.useTamboCurrentMessage = exports.TamboMessageProvider = void 0;
37
+ exports.useTamboCurrentComponent = exports.useTamboCurrentMessage = exports.TamboMessageProvider = void 0;
38
38
  exports.wrapWithTamboMessageProvider = wrapWithTamboMessageProvider;
39
39
  const react_1 = __importStar(require("react"));
40
40
  const TamboMessageContext = (0, react_1.createContext)(null);
41
41
  /**
42
- * Wraps all components, so that they can find what message they are in
42
+ * Wraps all components, so that they can find what message they are in.
43
+ * Also supports optional interactable metadata for components wrapped with withInteractable.
43
44
  * @param props - props for the TamboMessageProvider
44
45
  * @param props.children - The children to wrap
45
46
  * @param props.message - The message object
47
+ * @param props.interactableMetadata - Optional interactable component metadata
46
48
  * @returns The wrapped component
47
49
  */
48
- const TamboMessageProvider = ({ children, message }) => {
50
+ const TamboMessageProvider = ({ children, message, interactableMetadata, }) => {
51
+ // Merge interactable metadata into message if provided
52
+ const enhancedMessage = interactableMetadata
53
+ ? { ...message, interactableMetadata }
54
+ : message;
49
55
  // Use a unique key={...} to force a re-render when the message changes - this
50
56
  // make sure that if the rendered component is swapped into a tree (like if
51
57
  // you always show the last rendered component) then the state/etc is correct
52
- return (react_1.default.createElement(TamboMessageContext.Provider, { value: message, key: message.id }, children));
58
+ return (react_1.default.createElement(TamboMessageContext.Provider, { value: enhancedMessage, key: message.id }, children));
53
59
  };
54
60
  exports.TamboMessageProvider = TamboMessageProvider;
55
61
  /**
@@ -57,10 +63,11 @@ exports.TamboMessageProvider = TamboMessageProvider;
57
63
  * to be used outside of a TSX file
58
64
  * @param children - The children to wrap
59
65
  * @param message - The message object
66
+ * @param interactableMetadata - Optional interactable metadata
60
67
  * @returns The wrapped component
61
68
  */
62
- function wrapWithTamboMessageProvider(children, message) {
63
- return (react_1.default.createElement(exports.TamboMessageProvider, { message: message }, children));
69
+ function wrapWithTamboMessageProvider(children, message, interactableMetadata) {
70
+ return (react_1.default.createElement(exports.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
64
71
  }
65
72
  /**
66
73
  * Hook used inside a component wrapped with TamboMessageProvider, to get
@@ -75,4 +82,41 @@ const useTamboCurrentMessage = () => {
75
82
  return message;
76
83
  };
77
84
  exports.useTamboCurrentMessage = useTamboCurrentMessage;
85
+ /**
86
+ * Hook to access the current component information from the message context.
87
+ * Provides a unified interface for both AI-generated and interactable components.
88
+ *
89
+ * **Use this hook when you need component metadata regardless of the context.**
90
+ * @returns Component info including name, props, and interactable metadata if available, or null if used outside TamboMessageProvider
91
+ * @example
92
+ * ```tsx
93
+ * function MyInlineEditor() {
94
+ * const component = useTamboCurrentComponent();
95
+ *
96
+ * if (!component) return null; // Not inside a component
97
+ *
98
+ * return (
99
+ * <div>
100
+ * Editing: {component.componentName}
101
+ * {component.interactableId && <span>ID: {component.interactableId}</span>}
102
+ * </div>
103
+ * );
104
+ * }
105
+ * ```
106
+ */
107
+ const useTamboCurrentComponent = () => {
108
+ const message = (0, react_1.useContext)(TamboMessageContext);
109
+ if (!message) {
110
+ return null;
111
+ }
112
+ return {
113
+ componentName: message.interactableMetadata?.componentName ??
114
+ message.component?.componentName ??
115
+ undefined,
116
+ props: message.component?.props,
117
+ interactableId: message.interactableMetadata?.id ?? undefined,
118
+ description: message.interactableMetadata?.description ?? undefined,
119
+ };
120
+ };
121
+ exports.useTamboCurrentComponent = useTamboCurrentComponent;
78
122
  //# sourceMappingURL=use-current-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-current-message.js","sourceRoot":"","sources":["../../src/hooks/use-current-message.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCb,oEAOC;AAvCD,+CAA4E;AAG5E,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAA4B,IAAI,CAAC,CAAC;AAE3E;;;;;;GAMG;AACI,MAAM,oBAAoB,GAE7B,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5B,8EAA8E;IAC9E,2EAA2E;IAC3E,6EAA6E;IAC7E,OAAO,CACL,8BAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,IAC1D,QAAQ,CACoB,CAChC,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,oBAAoB,wBAW/B;AAEF;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAC1C,QAAyB,EACzB,OAA2B;IAE3B,OAAO,CACL,8BAAC,4BAAoB,IAAC,OAAO,EAAE,OAAO,IAAG,QAAQ,CAAwB,CAC1E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,mBAAmB,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AARW,QAAA,sBAAsB,0BAQjC","sourcesContent":["\"use client\";\nimport React, { createContext, PropsWithChildren, useContext } from \"react\";\nimport { TamboThreadMessage } from \"../model/generate-component-response\";\n\nconst TamboMessageContext = createContext<TamboThreadMessage | null>(null);\n\n/**\n * Wraps all components, so that they can find what message they are in\n * @param props - props for the TamboMessageProvider\n * @param props.children - The children to wrap\n * @param props.message - The message object\n * @returns The wrapped component\n */\nexport const TamboMessageProvider: React.FC<\n PropsWithChildren<{ message: TamboThreadMessage }>\n> = ({ children, message }) => {\n // Use a unique key={...} to force a re-render when the message changes - this\n // make sure that if the rendered component is swapped into a tree (like if\n // you always show the last rendered component) then the state/etc is correct\n return (\n <TamboMessageContext.Provider value={message} key={message.id}>\n {children}\n </TamboMessageContext.Provider>\n );\n};\n\n/**\n * Wraps a component with a TamboMessageProvider - this allows the provider\n * to be used outside of a TSX file\n * @param children - The children to wrap\n * @param message - The message object\n * @returns The wrapped component\n */\nexport function wrapWithTamboMessageProvider(\n children: React.ReactNode,\n message: TamboThreadMessage,\n) {\n return (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n}\n\n/**\n * Hook used inside a component wrapped with TamboMessageProvider, to get\n * the current message.\n * @returns The current message that is used to render the component\n */\nexport const useTamboCurrentMessage = () => {\n const message = useContext(TamboMessageContext);\n if (!message) {\n throw new Error(\n \"useTamboCurrentMessage must be used within a TamboMessageProvider\",\n );\n }\n return message;\n};\n"]}
1
+ {"version":3,"file":"use-current-message.js","sourceRoot":"","sources":["../../src/hooks/use-current-message.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqDb,oEAaC;AAjED,+CAAyD;AAMzD,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAA4B,IAAI,CAAC,CAAC;AAS3E;;;;;;;;GAQG;AACI,MAAM,oBAAoB,GAAwC,CAAC,EACxE,QAAQ,EACR,OAAO,EACP,oBAAoB,GACrB,EAAE,EAAE;IACH,uDAAuD;IACvD,MAAM,eAAe,GAAuB,oBAAoB;QAC9D,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,oBAAoB,EAAE;QACtC,CAAC,CAAC,OAAO,CAAC;IAEZ,8EAA8E;IAC9E,2EAA2E;IAC3E,6EAA6E;IAC7E,OAAO,CACL,8BAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,IAClE,QAAQ,CACoB,CAChC,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B;AAEF;;;;;;;GAOG;AACH,SAAgB,4BAA4B,CAC1C,QAAyB,EACzB,OAA2B,EAC3B,oBAA2C;IAE3C,OAAO,CACL,8BAAC,4BAAoB,IACnB,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,oBAAoB,IAEzC,QAAQ,CACY,CACxB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACI,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,mBAAmB,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AARW,QAAA,sBAAsB,0BAQjC;AAiBF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACI,MAAM,wBAAwB,GAAG,GAAiC,EAAE;IACzE,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,mBAAmB,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,aAAa,EACX,OAAO,CAAC,oBAAoB,EAAE,aAAa;YAC3C,OAAO,CAAC,SAAS,EAAE,aAAa;YAChC,SAAS;QACX,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAwC;QAClE,cAAc,EAAE,OAAO,CAAC,oBAAoB,EAAE,EAAE,IAAI,SAAS;QAC7D,WAAW,EAAE,OAAO,CAAC,oBAAoB,EAAE,WAAW,IAAI,SAAS;KACpE,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,wBAAwB,4BAgBnC","sourcesContent":["\"use client\";\nimport React, { createContext, useContext } from \"react\";\nimport {\n InteractableMetadata,\n TamboThreadMessage,\n} from \"../model/generate-component-response\";\n\nconst TamboMessageContext = createContext<TamboThreadMessage | null>(null);\n\nexport interface TamboMessageProviderProps {\n children: React.ReactNode;\n message: TamboThreadMessage;\n /** Optional interactable metadata for components wrapped with withInteractable */\n interactableMetadata?: InteractableMetadata;\n}\n\n/**\n * Wraps all components, so that they can find what message they are in.\n * Also supports optional interactable metadata for components wrapped with withInteractable.\n * @param props - props for the TamboMessageProvider\n * @param props.children - The children to wrap\n * @param props.message - The message object\n * @param props.interactableMetadata - Optional interactable component metadata\n * @returns The wrapped component\n */\nexport const TamboMessageProvider: React.FC<TamboMessageProviderProps> = ({\n children,\n message,\n interactableMetadata,\n}) => {\n // Merge interactable metadata into message if provided\n const enhancedMessage: TamboThreadMessage = interactableMetadata\n ? { ...message, interactableMetadata }\n : message;\n\n // Use a unique key={...} to force a re-render when the message changes - this\n // make sure that if the rendered component is swapped into a tree (like if\n // you always show the last rendered component) then the state/etc is correct\n return (\n <TamboMessageContext.Provider value={enhancedMessage} key={message.id}>\n {children}\n </TamboMessageContext.Provider>\n );\n};\n\n/**\n * Wraps a component with a TamboMessageProvider - this allows the provider\n * to be used outside of a TSX file\n * @param children - The children to wrap\n * @param message - The message object\n * @param interactableMetadata - Optional interactable metadata\n * @returns The wrapped component\n */\nexport function wrapWithTamboMessageProvider(\n children: React.ReactNode,\n message: TamboThreadMessage,\n interactableMetadata?: InteractableMetadata,\n) {\n return (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n}\n\n/**\n * Hook used inside a component wrapped with TamboMessageProvider, to get\n * the current message.\n * @returns The current message that is used to render the component\n */\nexport const useTamboCurrentMessage = () => {\n const message = useContext(TamboMessageContext);\n if (!message) {\n throw new Error(\n \"useTamboCurrentMessage must be used within a TamboMessageProvider\",\n );\n }\n return message;\n};\n\n/**\n * Component info extracted from the current message and interactable context.\n * Provides a unified interface for accessing component metadata.\n */\nexport interface TamboCurrentComponent {\n /** Component name from the message */\n componentName?: string;\n /** Component props from the message */\n props?: Record<string, any>;\n /** Interactable ID (only present for components wrapped with withInteractable) */\n interactableId?: string;\n /** Description (only present for components wrapped with withInteractable) */\n description?: string;\n}\n\n/**\n * Hook to access the current component information from the message context.\n * Provides a unified interface for both AI-generated and interactable components.\n *\n * **Use this hook when you need component metadata regardless of the context.**\n * @returns Component info including name, props, and interactable metadata if available, or null if used outside TamboMessageProvider\n * @example\n * ```tsx\n * function MyInlineEditor() {\n * const component = useTamboCurrentComponent();\n *\n * if (!component) return null; // Not inside a component\n *\n * return (\n * <div>\n * Editing: {component.componentName}\n * {component.interactableId && <span>ID: {component.interactableId}</span>}\n * </div>\n * );\n * }\n * ```\n */\nexport const useTamboCurrentComponent = (): TamboCurrentComponent | null => {\n const message = useContext(TamboMessageContext);\n\n if (!message) {\n return null;\n }\n\n return {\n componentName:\n message.interactableMetadata?.componentName ??\n message.component?.componentName ??\n undefined,\n props: message.component?.props as Record<string, any> | undefined,\n interactableId: message.interactableMetadata?.id ?? undefined,\n description: message.interactableMetadata?.description ?? undefined,\n };\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=use-current-message.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-current-message.test.d.ts","sourceRoot":"","sources":["../../src/hooks/use-current-message.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = require("@testing-library/react");
7
+ const react_2 = __importDefault(require("react"));
8
+ const use_current_message_1 = require("./use-current-message");
9
+ describe("TamboMessageProvider", () => {
10
+ const createMockMessage = (overrides = {}) => ({
11
+ id: "test-message-id",
12
+ threadId: "test-thread-id",
13
+ componentState: {},
14
+ content: [{ type: "text", text: "Test message" }],
15
+ createdAt: new Date().toISOString(),
16
+ role: "assistant",
17
+ ...overrides,
18
+ });
19
+ it("should provide message context to children", () => {
20
+ const message = createMockMessage();
21
+ const TestComponent = () => {
22
+ const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
23
+ return react_2.default.createElement("div", null, currentMessage.id);
24
+ };
25
+ (0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message },
26
+ react_2.default.createElement(TestComponent, null)));
27
+ expect(react_1.screen.getByText("test-message-id")).toBeInTheDocument();
28
+ });
29
+ it("should merge interactable metadata into message", () => {
30
+ const message = createMockMessage();
31
+ const interactableMetadata = {
32
+ id: "interactable-123",
33
+ componentName: "TestComponent",
34
+ description: "Test description",
35
+ };
36
+ const TestComponent = () => {
37
+ const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
38
+ return (react_2.default.createElement("div", null,
39
+ react_2.default.createElement("span", { "data-testid": "message-id" }, currentMessage.id),
40
+ react_2.default.createElement("span", { "data-testid": "interactable-id" }, currentMessage.interactableMetadata?.id)));
41
+ };
42
+ (0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata },
43
+ react_2.default.createElement(TestComponent, null)));
44
+ expect(react_1.screen.getByTestId("message-id")).toHaveTextContent("test-message-id");
45
+ expect(react_1.screen.getByTestId("interactable-id")).toHaveTextContent("interactable-123");
46
+ });
47
+ it("should work without interactable metadata", () => {
48
+ const message = createMockMessage();
49
+ const TestComponent = () => {
50
+ const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
51
+ return (react_2.default.createElement("div", null,
52
+ react_2.default.createElement("span", { "data-testid": "has-metadata" }, currentMessage.interactableMetadata ? "yes" : "no")));
53
+ };
54
+ (0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message },
55
+ react_2.default.createElement(TestComponent, null)));
56
+ expect(react_1.screen.getByTestId("has-metadata")).toHaveTextContent("no");
57
+ });
58
+ it("should use message.id as key for re-renders", () => {
59
+ const message1 = createMockMessage({ id: "message-1" });
60
+ const message2 = createMockMessage({ id: "message-2" });
61
+ let renderCount = 0;
62
+ const TestComponent = () => {
63
+ renderCount++;
64
+ const currentMessage = (0, use_current_message_1.useTamboCurrentMessage)();
65
+ return react_2.default.createElement("div", null, currentMessage.id);
66
+ };
67
+ const { rerender } = (0, react_1.render)(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message1 },
68
+ react_2.default.createElement(TestComponent, null)));
69
+ expect(renderCount).toBe(1);
70
+ expect(react_1.screen.getByText("message-1")).toBeInTheDocument();
71
+ // Change to new message - should force re-render due to key change
72
+ rerender(react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message2 },
73
+ react_2.default.createElement(TestComponent, null)));
74
+ expect(renderCount).toBe(2);
75
+ expect(react_1.screen.getByText("message-2")).toBeInTheDocument();
76
+ });
77
+ });
78
+ describe("useTamboCurrentMessage", () => {
79
+ const createMockMessage = (overrides = {}) => ({
80
+ id: "test-message-id",
81
+ threadId: "test-thread-id",
82
+ componentState: {},
83
+ content: [{ type: "text", text: "Test message" }],
84
+ createdAt: new Date().toISOString(),
85
+ role: "assistant",
86
+ ...overrides,
87
+ });
88
+ it("should throw error when used outside TamboMessageProvider", () => {
89
+ // Suppress console.error for this test
90
+ const consoleSpy = jest.spyOn(console, "error").mockImplementation();
91
+ expect(() => {
92
+ (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentMessage)());
93
+ }).toThrow("useTamboCurrentMessage must be used within a TamboMessageProvider");
94
+ consoleSpy.mockRestore();
95
+ });
96
+ it("should return the current message", () => {
97
+ const message = createMockMessage();
98
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
99
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentMessage)(), { wrapper });
100
+ expect(result.current).toEqual(expect.objectContaining({
101
+ id: "test-message-id",
102
+ threadId: "test-thread-id",
103
+ }));
104
+ });
105
+ it("should return message with interactable metadata when provided", () => {
106
+ const message = createMockMessage();
107
+ const interactableMetadata = {
108
+ id: "interactable-123",
109
+ componentName: "TestComponent",
110
+ description: "Test description",
111
+ };
112
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
113
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentMessage)(), { wrapper });
114
+ expect(result.current.interactableMetadata).toEqual(interactableMetadata);
115
+ });
116
+ });
117
+ describe("useTamboCurrentComponent", () => {
118
+ const createMockMessage = (overrides = {}) => ({
119
+ id: "test-message-id",
120
+ threadId: "test-thread-id",
121
+ componentState: {},
122
+ content: [{ type: "text", text: "Test message" }],
123
+ createdAt: new Date().toISOString(),
124
+ role: "assistant",
125
+ ...overrides,
126
+ });
127
+ it("should return null when used outside TamboMessageProvider", () => {
128
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)());
129
+ expect(result.current).toBeNull();
130
+ });
131
+ it("should return component info from message.component", () => {
132
+ const message = createMockMessage({
133
+ component: {
134
+ componentName: "WeatherCard",
135
+ componentState: {},
136
+ message: "",
137
+ props: {
138
+ city: "San Francisco",
139
+ temperature: 72,
140
+ },
141
+ },
142
+ });
143
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
144
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
145
+ wrapper,
146
+ });
147
+ expect(result.current).toEqual({
148
+ componentName: "WeatherCard",
149
+ props: {
150
+ city: "San Francisco",
151
+ temperature: 72,
152
+ },
153
+ interactableId: undefined,
154
+ description: undefined,
155
+ });
156
+ });
157
+ it("should return interactable metadata when provided", () => {
158
+ const message = createMockMessage({
159
+ component: {
160
+ componentName: "WeatherCard",
161
+ componentState: {},
162
+ message: "",
163
+ props: {
164
+ city: "San Francisco",
165
+ temperature: 72,
166
+ },
167
+ },
168
+ });
169
+ const interactableMetadata = {
170
+ id: "interactable-456",
171
+ componentName: "WeatherCard",
172
+ description: "Shows current weather",
173
+ };
174
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
175
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
176
+ wrapper,
177
+ });
178
+ expect(result.current).toEqual({
179
+ componentName: "WeatherCard",
180
+ props: {
181
+ city: "San Francisco",
182
+ temperature: 72,
183
+ },
184
+ interactableId: "interactable-456",
185
+ description: "Shows current weather",
186
+ });
187
+ });
188
+ it("should prioritize interactableMetadata.componentName over message.component.componentName", () => {
189
+ const message = createMockMessage({
190
+ component: {
191
+ componentName: "OldComponentName",
192
+ componentState: {},
193
+ message: "",
194
+ props: {},
195
+ },
196
+ });
197
+ const interactableMetadata = {
198
+ id: "interactable-789",
199
+ componentName: "NewComponentName",
200
+ description: "New description",
201
+ };
202
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
203
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
204
+ wrapper,
205
+ });
206
+ expect(result.current?.componentName).toBe("NewComponentName");
207
+ });
208
+ it("should handle message with only interactable metadata (no component)", () => {
209
+ const message = createMockMessage(); // No component field
210
+ const interactableMetadata = {
211
+ id: "interactable-only",
212
+ componentName: "InteractableComponent",
213
+ description: "Interactable only",
214
+ };
215
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message, interactableMetadata: interactableMetadata }, children));
216
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
217
+ wrapper,
218
+ });
219
+ expect(result.current).toEqual({
220
+ componentName: "InteractableComponent",
221
+ props: undefined,
222
+ interactableId: "interactable-only",
223
+ description: "Interactable only",
224
+ });
225
+ });
226
+ it("should handle message with component but no interactable metadata", () => {
227
+ const message = createMockMessage({
228
+ component: {
229
+ componentName: "SimpleComponent",
230
+ componentState: {},
231
+ message: "",
232
+ props: {
233
+ title: "Hello",
234
+ },
235
+ },
236
+ });
237
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
238
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
239
+ wrapper,
240
+ });
241
+ expect(result.current).toEqual({
242
+ componentName: "SimpleComponent",
243
+ props: {
244
+ title: "Hello",
245
+ },
246
+ interactableId: undefined,
247
+ description: undefined,
248
+ });
249
+ });
250
+ it("should return undefined for all fields when message has neither component nor interactable metadata", () => {
251
+ const message = createMockMessage(); // Minimal message with no component or interactable data
252
+ const wrapper = ({ children }) => (react_2.default.createElement(use_current_message_1.TamboMessageProvider, { message: message }, children));
253
+ const { result } = (0, react_1.renderHook)(() => (0, use_current_message_1.useTamboCurrentComponent)(), {
254
+ wrapper,
255
+ });
256
+ expect(result.current).toEqual({
257
+ componentName: undefined,
258
+ props: undefined,
259
+ interactableId: undefined,
260
+ description: undefined,
261
+ });
262
+ });
263
+ });
264
+ //# sourceMappingURL=use-current-message.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-current-message.test.js","sourceRoot":"","sources":["../../src/hooks/use-current-message.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { render, renderHook, screen } from \"@testing-library/react\";\nimport React from \"react\";\nimport {\n InteractableMetadata,\n TamboThreadMessage,\n} from \"../model/generate-component-response\";\nimport {\n TamboMessageProvider,\n useTamboCurrentComponent,\n useTamboCurrentMessage,\n} from \"./use-current-message\";\n\ndescribe(\"TamboMessageProvider\", () => {\n const createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n ): TamboThreadMessage => ({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n componentState: {},\n content: [{ type: \"text\", text: \"Test message\" }],\n createdAt: new Date().toISOString(),\n role: \"assistant\",\n ...overrides,\n });\n\n it(\"should provide message context to children\", () => {\n const message = createMockMessage();\n\n const TestComponent = () => {\n const currentMessage = useTamboCurrentMessage();\n return <div>{currentMessage.id}</div>;\n };\n\n render(\n <TamboMessageProvider message={message}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(screen.getByText(\"test-message-id\")).toBeInTheDocument();\n });\n\n it(\"should merge interactable metadata into message\", () => {\n const message = createMockMessage();\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-123\",\n componentName: \"TestComponent\",\n description: \"Test description\",\n };\n\n const TestComponent = () => {\n const currentMessage = useTamboCurrentMessage();\n return (\n <div>\n <span data-testid=\"message-id\">{currentMessage.id}</span>\n <span data-testid=\"interactable-id\">\n {currentMessage.interactableMetadata?.id}\n </span>\n </div>\n );\n };\n\n render(\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(screen.getByTestId(\"message-id\")).toHaveTextContent(\n \"test-message-id\",\n );\n expect(screen.getByTestId(\"interactable-id\")).toHaveTextContent(\n \"interactable-123\",\n );\n });\n\n it(\"should work without interactable metadata\", () => {\n const message = createMockMessage();\n\n const TestComponent = () => {\n const currentMessage = useTamboCurrentMessage();\n return (\n <div>\n <span data-testid=\"has-metadata\">\n {currentMessage.interactableMetadata ? \"yes\" : \"no\"}\n </span>\n </div>\n );\n };\n\n render(\n <TamboMessageProvider message={message}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(screen.getByTestId(\"has-metadata\")).toHaveTextContent(\"no\");\n });\n\n it(\"should use message.id as key for re-renders\", () => {\n const message1 = createMockMessage({ id: \"message-1\" });\n const message2 = createMockMessage({ id: \"message-2\" });\n\n let renderCount = 0;\n const TestComponent = () => {\n renderCount++;\n const currentMessage = useTamboCurrentMessage();\n return <div>{currentMessage.id}</div>;\n };\n\n const { rerender } = render(\n <TamboMessageProvider message={message1}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(renderCount).toBe(1);\n expect(screen.getByText(\"message-1\")).toBeInTheDocument();\n\n // Change to new message - should force re-render due to key change\n rerender(\n <TamboMessageProvider message={message2}>\n <TestComponent />\n </TamboMessageProvider>,\n );\n\n expect(renderCount).toBe(2);\n expect(screen.getByText(\"message-2\")).toBeInTheDocument();\n });\n});\n\ndescribe(\"useTamboCurrentMessage\", () => {\n const createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n ): TamboThreadMessage => ({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n componentState: {},\n content: [{ type: \"text\", text: \"Test message\" }],\n createdAt: new Date().toISOString(),\n role: \"assistant\",\n ...overrides,\n });\n\n it(\"should throw error when used outside TamboMessageProvider\", () => {\n // Suppress console.error for this test\n const consoleSpy = jest.spyOn(console, \"error\").mockImplementation();\n\n expect(() => {\n renderHook(() => useTamboCurrentMessage());\n }).toThrow(\n \"useTamboCurrentMessage must be used within a TamboMessageProvider\",\n );\n\n consoleSpy.mockRestore();\n });\n\n it(\"should return the current message\", () => {\n const message = createMockMessage();\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentMessage(), { wrapper });\n\n expect(result.current).toEqual(\n expect.objectContaining({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n }),\n );\n });\n\n it(\"should return message with interactable metadata when provided\", () => {\n const message = createMockMessage();\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-123\",\n componentName: \"TestComponent\",\n description: \"Test description\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentMessage(), { wrapper });\n\n expect(result.current.interactableMetadata).toEqual(interactableMetadata);\n });\n});\n\ndescribe(\"useTamboCurrentComponent\", () => {\n const createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n ): TamboThreadMessage => ({\n id: \"test-message-id\",\n threadId: \"test-thread-id\",\n componentState: {},\n content: [{ type: \"text\", text: \"Test message\" }],\n createdAt: new Date().toISOString(),\n role: \"assistant\",\n ...overrides,\n });\n\n it(\"should return null when used outside TamboMessageProvider\", () => {\n const { result } = renderHook(() => useTamboCurrentComponent());\n\n expect(result.current).toBeNull();\n });\n\n it(\"should return component info from message.component\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"WeatherCard\",\n componentState: {},\n message: \"\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n },\n });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"WeatherCard\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n interactableId: undefined,\n description: undefined,\n });\n });\n\n it(\"should return interactable metadata when provided\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"WeatherCard\",\n componentState: {},\n message: \"\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n },\n });\n\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-456\",\n componentName: \"WeatherCard\",\n description: \"Shows current weather\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"WeatherCard\",\n props: {\n city: \"San Francisco\",\n temperature: 72,\n },\n interactableId: \"interactable-456\",\n description: \"Shows current weather\",\n });\n });\n\n it(\"should prioritize interactableMetadata.componentName over message.component.componentName\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"OldComponentName\",\n componentState: {},\n message: \"\",\n props: {},\n },\n });\n\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-789\",\n componentName: \"NewComponentName\",\n description: \"New description\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current?.componentName).toBe(\"NewComponentName\");\n });\n\n it(\"should handle message with only interactable metadata (no component)\", () => {\n const message = createMockMessage(); // No component field\n\n const interactableMetadata: InteractableMetadata = {\n id: \"interactable-only\",\n componentName: \"InteractableComponent\",\n description: \"Interactable only\",\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider\n message={message}\n interactableMetadata={interactableMetadata}\n >\n {children}\n </TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"InteractableComponent\",\n props: undefined,\n interactableId: \"interactable-only\",\n description: \"Interactable only\",\n });\n });\n\n it(\"should handle message with component but no interactable metadata\", () => {\n const message = createMockMessage({\n component: {\n componentName: \"SimpleComponent\",\n componentState: {},\n message: \"\",\n props: {\n title: \"Hello\",\n },\n },\n });\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: \"SimpleComponent\",\n props: {\n title: \"Hello\",\n },\n interactableId: undefined,\n description: undefined,\n });\n });\n\n it(\"should return undefined for all fields when message has neither component nor interactable metadata\", () => {\n const message = createMockMessage(); // Minimal message with no component or interactable data\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboMessageProvider message={message}>{children}</TamboMessageProvider>\n );\n\n const { result } = renderHook(() => useTamboCurrentComponent(), {\n wrapper,\n });\n\n expect(result.current).toEqual({\n componentName: undefined,\n props: undefined,\n interactableId: undefined,\n description: undefined,\n });\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-message-images.test.d.ts","sourceRoot":"","sources":["../../src/hooks/use-message-images.test.ts"],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const react_1 = require("@testing-library/react");
4
- const use_message_images_1 = require("../use-message-images");
4
+ const use_message_images_1 = require("./use-message-images");
5
5
  // Mock crypto.randomUUID
6
6
  global.crypto = {
7
7
  randomUUID: jest.fn(() => "mock-uuid-" + Math.random()),
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-message-images.test.js","sourceRoot":"","sources":["../../src/hooks/use-message-images.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { act, renderHook } from \"@testing-library/react\";\nimport { useMessageImages } from \"./use-message-images\";\n\n// Mock crypto.randomUUID\nglobal.crypto = {\n randomUUID: jest.fn(() => \"mock-uuid-\" + Math.random()),\n} as any;\n\n// Mock FileReader\nconst mockFileReader = {\n readAsDataURL: jest.fn(),\n onload: null as any,\n onerror: null as any,\n result: \"data:image/png;base64,mock-data\",\n};\n\n(global as any).FileReader = jest.fn(() => {\n const reader = { ...mockFileReader };\n reader.readAsDataURL = jest.fn(() => {\n setTimeout(() => {\n if (reader.onload) {\n reader.onload({} as any);\n }\n }, 0);\n });\n return reader;\n});\n\ndescribe(\"useMessageImages\", () => {\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n it(\"should initialize with empty images array\", () => {\n const { result } = renderHook(() => useMessageImages());\n expect(result.current.images).toEqual([]);\n });\n\n it(\"should reject non-image files\", async () => {\n const { result } = renderHook(() => useMessageImages());\n const mockFile = new File([\"test\"], \"test-document.pdf\", {\n type: \"application/pdf\",\n });\n\n await expect(result.current.addImage(mockFile)).rejects.toThrow(\n \"Only image files are allowed\",\n );\n });\n\n it(\"should clear all images\", () => {\n const { result } = renderHook(() => useMessageImages());\n\n act(() => {\n result.current.clearImages();\n });\n\n expect(result.current.images).toHaveLength(0);\n });\n\n it(\"should handle image validation correctly\", () => {\n const { result } = renderHook(() => useMessageImages());\n\n // Test that hooks are available\n expect(typeof result.current.addImage).toBe(\"function\");\n expect(typeof result.current.addImages).toBe(\"function\");\n expect(typeof result.current.removeImage).toBe(\"function\");\n expect(typeof result.current.clearImages).toBe(\"function\");\n });\n\n it(\"should reject when no valid image files provided to addImages\", async () => {\n const { result } = renderHook(() => useMessageImages());\n const mockFiles = [\n new File([\"test\"], \"document.pdf\", { type: \"application/pdf\" }),\n new File([\"test\"], \"text.txt\", { type: \"text/plain\" }),\n ];\n\n await expect(result.current.addImages(mockFiles)).rejects.toThrow(\n \"No valid image files provided\",\n );\n });\n});\n"]}
@@ -1,23 +1,11 @@
1
1
  /**
2
- * A helper hook that automatically updates Tambo component state when specified props change.
3
- *
4
- * This hook streamlines the common pattern of updating component state when receiving new
5
- * streamed values from Tambo, eliminating the need to write repetitive useEffect code.
6
- * @param currentState - The current state object from useTamboComponentState
7
- * @param setState - The setState function from useTamboComponentState
8
- * @param streamingProps - An object mapping state keys to prop values that should update the state
9
- * @example
10
- * ```tsx
11
- * // Instead of writing a complex useEffect:
12
- * const [emailState, setEmailState] = useTamboComponentState("email", initialState);
13
- *
14
- * // Simply use:
15
- * useTamboStreamingProps(emailState, setEmailState, {
16
- * subject: aiGeneratedSubject,
17
- * body: aiGeneratedBody,
18
- * usersEmail: usersEmail
19
- * });
20
- * ```
2
+ * Low-level helper that merges streamed props into state.
3
+ * @deprecated Use `useTamboComponentState` with `setFromProp` instead.
4
+ * This hook will be removed in 1.0.0.
5
+ * @see {@link https://docs.tambo.co/concepts/streaming/streaming-props}
6
+ * @param currentState - Current state object
7
+ * @param setState - State setter function
8
+ * @param streamingProps - Props to merge into state when they change
21
9
  */
22
10
  export declare function useTamboStreamingProps<T extends Record<string, any>>(currentState: T | undefined, setState: (state: T) => void, streamingProps: Partial<T>): void;
23
11
  //# sourceMappingURL=use-streaming-props.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-streaming-props.d.ts","sourceRoot":"","sources":["../../src/hooks/use-streaming-props.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClE,YAAY,EAAE,CAAC,GAAG,SAAS,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC5B,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,QAwB3B"}
1
+ {"version":3,"file":"use-streaming-props.d.ts","sourceRoot":"","sources":["../../src/hooks/use-streaming-props.tsx"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClE,YAAY,EAAE,CAAC,GAAG,SAAS,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC5B,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,QAwB3B"}
@@ -4,25 +4,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.useTamboStreamingProps = useTamboStreamingProps;
5
5
  const react_1 = require("react");
6
6
  /**
7
- * A helper hook that automatically updates Tambo component state when specified props change.
8
- *
9
- * This hook streamlines the common pattern of updating component state when receiving new
10
- * streamed values from Tambo, eliminating the need to write repetitive useEffect code.
11
- * @param currentState - The current state object from useTamboComponentState
12
- * @param setState - The setState function from useTamboComponentState
13
- * @param streamingProps - An object mapping state keys to prop values that should update the state
14
- * @example
15
- * ```tsx
16
- * // Instead of writing a complex useEffect:
17
- * const [emailState, setEmailState] = useTamboComponentState("email", initialState);
18
- *
19
- * // Simply use:
20
- * useTamboStreamingProps(emailState, setEmailState, {
21
- * subject: aiGeneratedSubject,
22
- * body: aiGeneratedBody,
23
- * usersEmail: usersEmail
24
- * });
25
- * ```
7
+ * Low-level helper that merges streamed props into state.
8
+ * @deprecated Use `useTamboComponentState` with `setFromProp` instead.
9
+ * This hook will be removed in 1.0.0.
10
+ * @see {@link https://docs.tambo.co/concepts/streaming/streaming-props}
11
+ * @param currentState - Current state object
12
+ * @param setState - State setter function
13
+ * @param streamingProps - Props to merge into state when they change
26
14
  */
27
15
  function useTamboStreamingProps(currentState, setState, streamingProps) {
28
16
  (0, react_1.useEffect)(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"use-streaming-props.js","sourceRoot":"","sources":["../../src/hooks/use-streaming-props.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAwBb,wDA2BC;AAlDD,iCAAkC;AAElC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,sBAAsB,CACpC,YAA2B,EAC3B,QAA4B,EAC5B,cAA0B;IAE1B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,MAAM,OAAO,GAAe,EAAE,CAAC;YAE/B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,YAAY,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,GAAc,CAAC,GAAG,KAAmB,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,YAAY,EAAE,CAAC;gBACjB,QAAQ,CAAC;oBACP,GAAG,YAAY;oBACf,GAAG,OAAO;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,uDAAuD;IACzD,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC","sourcesContent":["\"use client\";\nimport { useEffect } from \"react\";\n\n/**\n * A helper hook that automatically updates Tambo component state when specified props change.\n *\n * This hook streamlines the common pattern of updating component state when receiving new\n * streamed values from Tambo, eliminating the need to write repetitive useEffect code.\n * @param currentState - The current state object from useTamboComponentState\n * @param setState - The setState function from useTamboComponentState\n * @param streamingProps - An object mapping state keys to prop values that should update the state\n * @example\n * ```tsx\n * // Instead of writing a complex useEffect:\n * const [emailState, setEmailState] = useTamboComponentState(\"email\", initialState);\n *\n * // Simply use:\n * useTamboStreamingProps(emailState, setEmailState, {\n * subject: aiGeneratedSubject,\n * body: aiGeneratedBody,\n * usersEmail: usersEmail\n * });\n * ```\n */\nexport function useTamboStreamingProps<T extends Record<string, any>>(\n currentState: T | undefined,\n setState: (state: T) => void,\n streamingProps: Partial<T>,\n) {\n useEffect(() => {\n if (currentState) {\n let shouldUpdate = false;\n const updates: Partial<T> = {};\n\n Object.entries(streamingProps).forEach(([key, value]) => {\n if (value !== undefined && value !== currentState[key]) {\n shouldUpdate = true;\n updates[key as keyof T] = value as T[keyof T];\n }\n });\n\n if (shouldUpdate) {\n setState({\n ...currentState,\n ...updates,\n });\n }\n }\n // Only run when streamingProps change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [...Object.values(streamingProps)]);\n}\n"]}
1
+ {"version":3,"file":"use-streaming-props.js","sourceRoot":"","sources":["../../src/hooks/use-streaming-props.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAab,wDA2BC;AAtCD,iCAAkC;AAElC;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CACpC,YAA2B,EAC3B,QAA4B,EAC5B,cAA0B;IAE1B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,MAAM,OAAO,GAAe,EAAE,CAAC;YAE/B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,YAAY,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,GAAc,CAAC,GAAG,KAAmB,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,YAAY,EAAE,CAAC;gBACjB,QAAQ,CAAC;oBACP,GAAG,YAAY;oBACf,GAAG,OAAO;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,sCAAsC;QACtC,uDAAuD;IACzD,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC","sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\n\n/**\n * Low-level helper that merges streamed props into state.\n * @deprecated Use `useTamboComponentState` with `setFromProp` instead.\n * This hook will be removed in 1.0.0.\n * @see {@link https://docs.tambo.co/concepts/streaming/streaming-props}\n * @param currentState - Current state object\n * @param setState - State setter function\n * @param streamingProps - Props to merge into state when they change\n */\nexport function useTamboStreamingProps<T extends Record<string, any>>(\n currentState: T | undefined,\n setState: (state: T) => void,\n streamingProps: Partial<T>,\n) {\n useEffect(() => {\n if (currentState) {\n let shouldUpdate = false;\n const updates: Partial<T> = {};\n\n Object.entries(streamingProps).forEach(([key, value]) => {\n if (value !== undefined && value !== currentState[key]) {\n shouldUpdate = true;\n updates[key as keyof T] = value as T[keyof T];\n }\n });\n\n if (shouldUpdate) {\n setState({\n ...currentState,\n ...updates,\n });\n }\n }\n // Only run when streamingProps change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [...Object.values(streamingProps)]);\n}\n"]}
@@ -33,7 +33,7 @@ export interface useTamboSuggestionsResultInternal {
33
33
  /** Result and network state for generating suggestions */
34
34
  generateResult: UseTamboMutationResult<TamboAI.Beta.Threads.Suggestions.SuggestionGenerateResponse | undefined, Error, AbortController>;
35
35
  /** The full suggestions query object from React Query */
36
- suggestionsResult: UseTamboQueryResult<TamboAI.Beta.Threads.Suggestions.SuggestionGenerateResponse | undefined, Error>;
36
+ suggestionsResult: UseTamboQueryResult<TamboAI.Beta.Threads.Suggestions.SuggestionGenerateResponse | undefined>;
37
37
  }
38
38
  type useTamboSuggestionsResult = CombinedMutationResult<any, Error> & useTamboSuggestionsResultInternal;
39
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"use-suggestions.d.ts","sourceRoot":"","sources":["../../src/hooks/use-suggestions.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAY/C,OAAO,EACL,sBAAsB,EAEvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAC/C,8CAA8C;IAC9C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,MAAM,EAAE,CAAC,aAAa,EAAE;QACtB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB,0DAA0D;IAC1D,YAAY,EAAE,sBAAsB,CAClC,IAAI,EACJ,KAAK,EACL;QAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CACxE,CAAC;IAEF,0DAA0D;IAC1D,cAAc,EAAE,sBAAsB,CACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,GAAG,SAAS,EACvE,KAAK,EACL,eAAe,CAChB,CAAC;IAEF,yDAAyD;IACzD,iBAAiB,EAAE,mBAAmB,CACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,GAAG,SAAS,EACvE,KAAK,CACN,CAAC;CACH;AAED,KAAK,yBAAyB,GAAG,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,GACjE,iCAAiC,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CAsI3B"}
1
+ {"version":3,"file":"use-suggestions.d.ts","sourceRoot":"","sources":["../../src/hooks/use-suggestions.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAY/C,OAAO,EACL,sBAAsB,EAEvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,4EAA4E;IAC5E,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAC/C,8CAA8C;IAC9C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,MAAM,EAAE,CAAC,aAAa,EAAE;QACtB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpB,0DAA0D;IAC1D,YAAY,EAAE,sBAAsB,CAClC,IAAI,EACJ,KAAK,EACL;QAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CACxE,CAAC;IAEF,0DAA0D;IAC1D,cAAc,EAAE,sBAAsB,CACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,GAAG,SAAS,EACvE,KAAK,EACL,eAAe,CAChB,CAAC;IAEF,yDAAyD;IACzD,iBAAiB,EAAE,mBAAmB,CACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,0BAA0B,GAAG,SAAS,CACxE,CAAC;CACH;AAED,KAAK,yBAAyB,GAAG,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,GACjE,iCAAiC,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CAsI3B"}