@tambo-ai/react 0.75.0 → 1.0.0-rc.4

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 (613) hide show
  1. package/dist/hoc/with-tambo-interactable.d.ts.map +1 -1
  2. package/dist/hoc/with-tambo-interactable.js +13 -13
  3. package/dist/hoc/with-tambo-interactable.js.map +1 -1
  4. package/dist/hoc/with-tambo-interactable.test.js +3 -3
  5. package/dist/hoc/with-tambo-interactable.test.js.map +1 -1
  6. package/dist/index.d.ts +7 -25
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +7 -59
  9. package/dist/index.js.map +1 -1
  10. package/dist/mcp/mcp-hooks.js +5 -5
  11. package/dist/mcp/mcp-hooks.js.map +1 -1
  12. package/dist/model/component-metadata.d.ts +4 -4
  13. package/dist/model/component-metadata.js.map +1 -1
  14. package/dist/providers/tambo-client-provider.d.ts +6 -0
  15. package/dist/providers/tambo-client-provider.d.ts.map +1 -1
  16. package/dist/providers/tambo-client-provider.js +4 -2
  17. package/dist/providers/tambo-client-provider.js.map +1 -1
  18. package/dist/providers/tambo-interactable-provider.d.ts +1 -1
  19. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js +2 -10
  20. package/dist/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  21. package/dist/providers/tambo-interactables-additional-context.test.js +3 -19
  22. package/dist/providers/tambo-interactables-additional-context.test.js.map +1 -1
  23. package/dist/providers/tambo-mcp-token-provider.d.ts +8 -17
  24. package/dist/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  25. package/dist/providers/tambo-mcp-token-provider.js +20 -97
  26. package/dist/providers/tambo-mcp-token-provider.js.map +1 -1
  27. package/dist/testing/tools.d.ts +3 -3
  28. package/dist/testing/tools.d.ts.map +1 -1
  29. package/dist/testing/tools.js.map +1 -1
  30. package/dist/util/registry-validators.js +1 -1
  31. package/dist/util/registry-validators.js.map +1 -1
  32. package/dist/v1/__tests__/v1-interactables.test.js +1 -1
  33. package/dist/v1/__tests__/v1-interactables.test.js.map +1 -1
  34. package/dist/v1/components/v1-component-renderer.d.ts +9 -9
  35. package/dist/v1/components/v1-component-renderer.d.ts.map +1 -1
  36. package/dist/v1/components/v1-component-renderer.js +13 -13
  37. package/dist/v1/components/v1-component-renderer.js.map +1 -1
  38. package/dist/v1/components/v1-component-renderer.test.js +15 -15
  39. package/dist/v1/components/v1-component-renderer.test.js.map +1 -1
  40. package/{esm/hooks/use-current-message.d.ts → dist/v1/hooks/use-tambo-current-message.d.ts} +30 -9
  41. package/dist/v1/hooks/use-tambo-current-message.d.ts.map +1 -0
  42. package/dist/{hooks/use-current-message.js → v1/hooks/use-tambo-current-message.js} +13 -8
  43. package/dist/v1/hooks/use-tambo-current-message.js.map +1 -0
  44. package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts +5 -5
  45. package/dist/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
  46. package/dist/v1/hooks/use-tambo-v1-auth-state.js +8 -8
  47. package/dist/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
  48. package/dist/v1/hooks/use-tambo-v1-auth-state.test.js +12 -12
  49. package/dist/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -1
  50. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts +7 -6
  51. package/dist/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
  52. package/dist/v1/hooks/use-tambo-v1-component-state.js +50 -24
  53. package/dist/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
  54. package/dist/v1/hooks/use-tambo-v1-component-state.test.js +60 -35
  55. package/dist/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
  56. package/dist/v1/hooks/use-tambo-v1-messages.d.ts +9 -9
  57. package/dist/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -1
  58. package/dist/v1/hooks/use-tambo-v1-messages.js +4 -4
  59. package/dist/v1/hooks/use-tambo-v1-messages.js.map +1 -1
  60. package/dist/v1/hooks/use-tambo-v1-messages.test.js +7 -7
  61. package/dist/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
  62. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts +3 -3
  63. package/dist/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  64. package/dist/v1/hooks/use-tambo-v1-send-message.js +20 -22
  65. package/dist/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  66. package/dist/v1/hooks/use-tambo-v1-send-message.test.js +51 -51
  67. package/dist/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  68. package/dist/v1/hooks/use-tambo-v1-stream-status.d.ts +5 -5
  69. package/dist/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
  70. package/dist/v1/hooks/use-tambo-v1-stream-status.js +12 -14
  71. package/dist/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
  72. package/dist/v1/hooks/use-tambo-v1-stream-status.test.js +19 -19
  73. package/dist/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
  74. package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts +7 -7
  75. package/dist/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -1
  76. package/dist/v1/hooks/use-tambo-v1-suggestions.js +9 -9
  77. package/dist/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
  78. package/dist/v1/hooks/use-tambo-v1-suggestions.test.js +44 -44
  79. package/dist/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -1
  80. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts +3 -3
  81. package/dist/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -1
  82. package/dist/v1/hooks/use-tambo-v1-thread-input.js +4 -4
  83. package/dist/v1/hooks/use-tambo-v1-thread-input.js.map +1 -1
  84. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js +29 -29
  85. package/dist/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
  86. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts +4 -4
  87. package/dist/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
  88. package/dist/v1/hooks/use-tambo-v1-thread-list.js +5 -5
  89. package/dist/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
  90. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js +13 -17
  91. package/dist/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
  92. package/dist/v1/hooks/use-tambo-v1-thread.d.ts +3 -3
  93. package/dist/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
  94. package/dist/v1/hooks/use-tambo-v1-thread.js +4 -4
  95. package/dist/v1/hooks/use-tambo-v1-thread.js.map +1 -1
  96. package/dist/v1/hooks/use-tambo-v1-thread.test.js +5 -5
  97. package/dist/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
  98. package/dist/v1/hooks/use-tambo-v1.d.ts +16 -7
  99. package/dist/v1/hooks/use-tambo-v1.d.ts.map +1 -1
  100. package/dist/v1/hooks/use-tambo-v1.js +41 -10
  101. package/dist/v1/hooks/use-tambo-v1.js.map +1 -1
  102. package/dist/v1/hooks/use-tambo-v1.test.js +176 -48
  103. package/dist/v1/hooks/use-tambo-v1.test.js.map +1 -1
  104. package/dist/v1/index.d.ts +31 -27
  105. package/dist/v1/index.d.ts.map +1 -1
  106. package/dist/v1/index.js +45 -35
  107. package/dist/v1/index.js.map +1 -1
  108. package/dist/v1/providers/tambo-v1-provider.d.ts +20 -20
  109. package/dist/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  110. package/dist/v1/providers/tambo-v1-provider.js +32 -32
  111. package/dist/v1/providers/tambo-v1-provider.js.map +1 -1
  112. package/dist/v1/providers/tambo-v1-provider.test.js +22 -22
  113. package/dist/v1/providers/tambo-v1-provider.test.js.map +1 -1
  114. package/dist/v1/providers/tambo-v1-stream-context.d.ts +15 -15
  115. package/dist/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  116. package/dist/v1/providers/tambo-v1-stream-context.js +17 -17
  117. package/dist/v1/providers/tambo-v1-stream-context.js.map +1 -1
  118. package/dist/v1/providers/tambo-v1-stream-context.test.js +9 -9
  119. package/dist/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  120. package/dist/v1/providers/tambo-v1-stub-provider.d.ts +9 -9
  121. package/dist/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
  122. package/dist/v1/providers/tambo-v1-stub-provider.js +7 -7
  123. package/dist/v1/providers/tambo-v1-stub-provider.js.map +1 -1
  124. package/dist/v1/providers/tambo-v1-stub-provider.test.js +25 -25
  125. package/dist/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
  126. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts +9 -9
  127. package/dist/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
  128. package/dist/v1/providers/tambo-v1-thread-input-provider.js +16 -16
  129. package/dist/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
  130. package/dist/v1/types/auth.d.ts +2 -2
  131. package/dist/v1/types/auth.d.ts.map +1 -1
  132. package/dist/v1/types/auth.js.map +1 -1
  133. package/dist/v1/types/component.d.ts +3 -3
  134. package/dist/v1/types/component.d.ts.map +1 -1
  135. package/dist/v1/types/component.js +2 -2
  136. package/dist/v1/types/component.js.map +1 -1
  137. package/dist/v1/types/event.d.ts +1 -1
  138. package/dist/v1/types/event.js +1 -1
  139. package/dist/v1/types/event.js.map +1 -1
  140. package/dist/v1/types/message.d.ts +17 -24
  141. package/dist/v1/types/message.d.ts.map +1 -1
  142. package/dist/v1/types/message.js +1 -1
  143. package/dist/v1/types/message.js.map +1 -1
  144. package/dist/v1/types/thread.d.ts +10 -8
  145. package/dist/v1/types/thread.d.ts.map +1 -1
  146. package/dist/v1/types/thread.js +1 -1
  147. package/dist/v1/types/thread.js.map +1 -1
  148. package/dist/v1/types/tool-choice.d.ts +1 -1
  149. package/dist/v1/types/tool-choice.js.map +1 -1
  150. package/dist/v1/utils/component-renderer.d.ts +11 -5
  151. package/dist/v1/utils/component-renderer.d.ts.map +1 -1
  152. package/dist/v1/utils/component-renderer.js +16 -7
  153. package/dist/v1/utils/component-renderer.js.map +1 -1
  154. package/dist/v1/utils/component-renderer.test.js +7 -7
  155. package/dist/v1/utils/component-renderer.test.js.map +1 -1
  156. package/dist/v1/utils/event-accumulator.d.ts +13 -13
  157. package/dist/v1/utils/event-accumulator.d.ts.map +1 -1
  158. package/dist/v1/utils/event-accumulator.js +26 -15
  159. package/dist/v1/utils/event-accumulator.js.map +1 -1
  160. package/dist/v1/utils/event-accumulator.test.js +54 -19
  161. package/dist/v1/utils/event-accumulator.test.js.map +1 -1
  162. package/dist/v1/utils/registry-conversion.d.ts +18 -18
  163. package/dist/v1/utils/registry-conversion.js +23 -23
  164. package/dist/v1/utils/registry-conversion.js.map +1 -1
  165. package/dist/v1/utils/stream-handler.d.ts +1 -1
  166. package/dist/v1/utils/stream-handler.js +1 -1
  167. package/dist/v1/utils/stream-handler.js.map +1 -1
  168. package/dist/v1/utils/thread-utils.d.ts +2 -2
  169. package/dist/v1/utils/thread-utils.d.ts.map +1 -1
  170. package/dist/v1/utils/thread-utils.js.map +1 -1
  171. package/dist/v1/utils/tool-call-tracker.d.ts +1 -1
  172. package/dist/v1/utils/tool-call-tracker.js +1 -1
  173. package/dist/v1/utils/tool-call-tracker.js.map +1 -1
  174. package/dist/v1/utils/tool-executor.d.ts +1 -1
  175. package/dist/v1/utils/tool-executor.js +2 -2
  176. package/dist/v1/utils/tool-executor.js.map +1 -1
  177. package/esm/hoc/with-tambo-interactable.d.ts.map +1 -1
  178. package/esm/hoc/with-tambo-interactable.js +13 -13
  179. package/esm/hoc/with-tambo-interactable.js.map +1 -1
  180. package/esm/hoc/with-tambo-interactable.test.js +1 -1
  181. package/esm/hoc/with-tambo-interactable.test.js.map +1 -1
  182. package/esm/index.d.ts +7 -25
  183. package/esm/index.d.ts.map +1 -1
  184. package/esm/index.js +7 -21
  185. package/esm/index.js.map +1 -1
  186. package/esm/mcp/mcp-hooks.js +1 -1
  187. package/esm/mcp/mcp-hooks.js.map +1 -1
  188. package/esm/model/component-metadata.d.ts +4 -4
  189. package/esm/model/component-metadata.js.map +1 -1
  190. package/esm/providers/tambo-client-provider.d.ts +6 -0
  191. package/esm/providers/tambo-client-provider.d.ts.map +1 -1
  192. package/esm/providers/tambo-client-provider.js +4 -2
  193. package/esm/providers/tambo-client-provider.js.map +1 -1
  194. package/esm/providers/tambo-interactable-provider.d.ts +1 -1
  195. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js +2 -10
  196. package/esm/providers/tambo-interactables-additional-context-edge-cases.test.js.map +1 -1
  197. package/esm/providers/tambo-interactables-additional-context.test.js +3 -19
  198. package/esm/providers/tambo-interactables-additional-context.test.js.map +1 -1
  199. package/esm/providers/tambo-mcp-token-provider.d.ts +8 -17
  200. package/esm/providers/tambo-mcp-token-provider.d.ts.map +1 -1
  201. package/esm/providers/tambo-mcp-token-provider.js +20 -97
  202. package/esm/providers/tambo-mcp-token-provider.js.map +1 -1
  203. package/esm/testing/tools.d.ts +3 -3
  204. package/esm/testing/tools.d.ts.map +1 -1
  205. package/esm/testing/tools.js.map +1 -1
  206. package/esm/util/registry-validators.js +1 -1
  207. package/esm/util/registry-validators.js.map +1 -1
  208. package/esm/v1/__tests__/v1-interactables.test.js +1 -1
  209. package/esm/v1/__tests__/v1-interactables.test.js.map +1 -1
  210. package/esm/v1/components/v1-component-renderer.d.ts +9 -9
  211. package/esm/v1/components/v1-component-renderer.d.ts.map +1 -1
  212. package/esm/v1/components/v1-component-renderer.js +12 -12
  213. package/esm/v1/components/v1-component-renderer.js.map +1 -1
  214. package/esm/v1/components/v1-component-renderer.test.js +16 -16
  215. package/esm/v1/components/v1-component-renderer.test.js.map +1 -1
  216. package/{dist/hooks/use-current-message.d.ts → esm/v1/hooks/use-tambo-current-message.d.ts} +30 -9
  217. package/esm/v1/hooks/use-tambo-current-message.d.ts.map +1 -0
  218. package/esm/{hooks/use-current-message.js → v1/hooks/use-tambo-current-message.js} +13 -8
  219. package/esm/v1/hooks/use-tambo-current-message.js.map +1 -0
  220. package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts +5 -5
  221. package/esm/v1/hooks/use-tambo-v1-auth-state.d.ts.map +1 -1
  222. package/esm/v1/hooks/use-tambo-v1-auth-state.js +8 -8
  223. package/esm/v1/hooks/use-tambo-v1-auth-state.js.map +1 -1
  224. package/esm/v1/hooks/use-tambo-v1-auth-state.test.js +14 -14
  225. package/esm/v1/hooks/use-tambo-v1-auth-state.test.js.map +1 -1
  226. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts +7 -6
  227. package/esm/v1/hooks/use-tambo-v1-component-state.d.ts.map +1 -1
  228. package/esm/v1/hooks/use-tambo-v1-component-state.js +50 -24
  229. package/esm/v1/hooks/use-tambo-v1-component-state.js.map +1 -1
  230. package/esm/v1/hooks/use-tambo-v1-component-state.test.js +62 -37
  231. package/esm/v1/hooks/use-tambo-v1-component-state.test.js.map +1 -1
  232. package/esm/v1/hooks/use-tambo-v1-messages.d.ts +9 -9
  233. package/esm/v1/hooks/use-tambo-v1-messages.d.ts.map +1 -1
  234. package/esm/v1/hooks/use-tambo-v1-messages.js +3 -3
  235. package/esm/v1/hooks/use-tambo-v1-messages.js.map +1 -1
  236. package/esm/v1/hooks/use-tambo-v1-messages.test.js +9 -9
  237. package/esm/v1/hooks/use-tambo-v1-messages.test.js.map +1 -1
  238. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts +3 -3
  239. package/esm/v1/hooks/use-tambo-v1-send-message.d.ts.map +1 -1
  240. package/esm/v1/hooks/use-tambo-v1-send-message.js +21 -23
  241. package/esm/v1/hooks/use-tambo-v1-send-message.js.map +1 -1
  242. package/esm/v1/hooks/use-tambo-v1-send-message.test.js +54 -54
  243. package/esm/v1/hooks/use-tambo-v1-send-message.test.js.map +1 -1
  244. package/esm/v1/hooks/use-tambo-v1-stream-status.d.ts +5 -5
  245. package/esm/v1/hooks/use-tambo-v1-stream-status.d.ts.map +1 -1
  246. package/esm/v1/hooks/use-tambo-v1-stream-status.js +12 -14
  247. package/esm/v1/hooks/use-tambo-v1-stream-status.js.map +1 -1
  248. package/esm/v1/hooks/use-tambo-v1-stream-status.test.js +21 -21
  249. package/esm/v1/hooks/use-tambo-v1-stream-status.test.js.map +1 -1
  250. package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts +7 -7
  251. package/esm/v1/hooks/use-tambo-v1-suggestions.d.ts.map +1 -1
  252. package/esm/v1/hooks/use-tambo-v1-suggestions.js +11 -11
  253. package/esm/v1/hooks/use-tambo-v1-suggestions.js.map +1 -1
  254. package/esm/v1/hooks/use-tambo-v1-suggestions.test.js +48 -48
  255. package/esm/v1/hooks/use-tambo-v1-suggestions.test.js.map +1 -1
  256. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts +3 -3
  257. package/esm/v1/hooks/use-tambo-v1-thread-input.d.ts.map +1 -1
  258. package/esm/v1/hooks/use-tambo-v1-thread-input.js +3 -3
  259. package/esm/v1/hooks/use-tambo-v1-thread-input.js.map +1 -1
  260. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js +32 -32
  261. package/esm/v1/hooks/use-tambo-v1-thread-input.test.js.map +1 -1
  262. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts +4 -4
  263. package/esm/v1/hooks/use-tambo-v1-thread-list.d.ts.map +1 -1
  264. package/esm/v1/hooks/use-tambo-v1-thread-list.js +6 -6
  265. package/esm/v1/hooks/use-tambo-v1-thread-list.js.map +1 -1
  266. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js +15 -19
  267. package/esm/v1/hooks/use-tambo-v1-thread-list.test.js.map +1 -1
  268. package/esm/v1/hooks/use-tambo-v1-thread.d.ts +3 -3
  269. package/esm/v1/hooks/use-tambo-v1-thread.d.ts.map +1 -1
  270. package/esm/v1/hooks/use-tambo-v1-thread.js +4 -4
  271. package/esm/v1/hooks/use-tambo-v1-thread.js.map +1 -1
  272. package/esm/v1/hooks/use-tambo-v1-thread.test.js +6 -6
  273. package/esm/v1/hooks/use-tambo-v1-thread.test.js.map +1 -1
  274. package/esm/v1/hooks/use-tambo-v1.d.ts +16 -7
  275. package/esm/v1/hooks/use-tambo-v1.d.ts.map +1 -1
  276. package/esm/v1/hooks/use-tambo-v1.js +43 -12
  277. package/esm/v1/hooks/use-tambo-v1.js.map +1 -1
  278. package/esm/v1/hooks/use-tambo-v1.test.js +178 -50
  279. package/esm/v1/hooks/use-tambo-v1.test.js.map +1 -1
  280. package/esm/v1/index.d.ts +31 -27
  281. package/esm/v1/index.d.ts.map +1 -1
  282. package/esm/v1/index.js +38 -33
  283. package/esm/v1/index.js.map +1 -1
  284. package/esm/v1/providers/tambo-v1-provider.d.ts +20 -20
  285. package/esm/v1/providers/tambo-v1-provider.d.ts.map +1 -1
  286. package/esm/v1/providers/tambo-v1-provider.js +32 -32
  287. package/esm/v1/providers/tambo-v1-provider.js.map +1 -1
  288. package/esm/v1/providers/tambo-v1-provider.test.js +23 -23
  289. package/esm/v1/providers/tambo-v1-provider.test.js.map +1 -1
  290. package/esm/v1/providers/tambo-v1-stream-context.d.ts +15 -15
  291. package/esm/v1/providers/tambo-v1-stream-context.d.ts.map +1 -1
  292. package/esm/v1/providers/tambo-v1-stream-context.js +17 -17
  293. package/esm/v1/providers/tambo-v1-stream-context.js.map +1 -1
  294. package/esm/v1/providers/tambo-v1-stream-context.test.js +10 -10
  295. package/esm/v1/providers/tambo-v1-stream-context.test.js.map +1 -1
  296. package/esm/v1/providers/tambo-v1-stub-provider.d.ts +9 -9
  297. package/esm/v1/providers/tambo-v1-stub-provider.d.ts.map +1 -1
  298. package/esm/v1/providers/tambo-v1-stub-provider.js +9 -9
  299. package/esm/v1/providers/tambo-v1-stub-provider.js.map +1 -1
  300. package/esm/v1/providers/tambo-v1-stub-provider.test.js +28 -28
  301. package/esm/v1/providers/tambo-v1-stub-provider.test.js.map +1 -1
  302. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts +9 -9
  303. package/esm/v1/providers/tambo-v1-thread-input-provider.d.ts.map +1 -1
  304. package/esm/v1/providers/tambo-v1-thread-input-provider.js +15 -15
  305. package/esm/v1/providers/tambo-v1-thread-input-provider.js.map +1 -1
  306. package/esm/v1/types/auth.d.ts +2 -2
  307. package/esm/v1/types/auth.d.ts.map +1 -1
  308. package/esm/v1/types/auth.js.map +1 -1
  309. package/esm/v1/types/component.d.ts +3 -3
  310. package/esm/v1/types/component.d.ts.map +1 -1
  311. package/esm/v1/types/component.js +2 -2
  312. package/esm/v1/types/component.js.map +1 -1
  313. package/esm/v1/types/event.d.ts +1 -1
  314. package/esm/v1/types/event.js +1 -1
  315. package/esm/v1/types/event.js.map +1 -1
  316. package/esm/v1/types/message.d.ts +17 -24
  317. package/esm/v1/types/message.d.ts.map +1 -1
  318. package/esm/v1/types/message.js +1 -1
  319. package/esm/v1/types/message.js.map +1 -1
  320. package/esm/v1/types/thread.d.ts +10 -8
  321. package/esm/v1/types/thread.d.ts.map +1 -1
  322. package/esm/v1/types/thread.js +1 -1
  323. package/esm/v1/types/thread.js.map +1 -1
  324. package/esm/v1/types/tool-choice.d.ts +1 -1
  325. package/esm/v1/types/tool-choice.js.map +1 -1
  326. package/esm/v1/utils/component-renderer.d.ts +11 -5
  327. package/esm/v1/utils/component-renderer.d.ts.map +1 -1
  328. package/esm/v1/utils/component-renderer.js +13 -5
  329. package/esm/v1/utils/component-renderer.js.map +1 -1
  330. package/esm/v1/utils/component-renderer.test.js +8 -8
  331. package/esm/v1/utils/component-renderer.test.js.map +1 -1
  332. package/esm/v1/utils/event-accumulator.d.ts +13 -13
  333. package/esm/v1/utils/event-accumulator.d.ts.map +1 -1
  334. package/esm/v1/utils/event-accumulator.js +26 -15
  335. package/esm/v1/utils/event-accumulator.js.map +1 -1
  336. package/esm/v1/utils/event-accumulator.test.js +54 -19
  337. package/esm/v1/utils/event-accumulator.test.js.map +1 -1
  338. package/esm/v1/utils/registry-conversion.d.ts +18 -18
  339. package/esm/v1/utils/registry-conversion.js +23 -23
  340. package/esm/v1/utils/registry-conversion.js.map +1 -1
  341. package/esm/v1/utils/stream-handler.d.ts +1 -1
  342. package/esm/v1/utils/stream-handler.js +1 -1
  343. package/esm/v1/utils/stream-handler.js.map +1 -1
  344. package/esm/v1/utils/thread-utils.d.ts +2 -2
  345. package/esm/v1/utils/thread-utils.d.ts.map +1 -1
  346. package/esm/v1/utils/thread-utils.js.map +1 -1
  347. package/esm/v1/utils/tool-call-tracker.d.ts +1 -1
  348. package/esm/v1/utils/tool-call-tracker.js +1 -1
  349. package/esm/v1/utils/tool-call-tracker.js.map +1 -1
  350. package/esm/v1/utils/tool-executor.d.ts +1 -1
  351. package/esm/v1/utils/tool-executor.js +2 -2
  352. package/esm/v1/utils/tool-executor.js.map +1 -1
  353. package/package.json +4 -9
  354. package/dist/hooks/index.d.ts +0 -9
  355. package/dist/hooks/index.d.ts.map +0 -1
  356. package/dist/hooks/index.js +0 -34
  357. package/dist/hooks/index.js.map +0 -1
  358. package/dist/hooks/use-component-state.d.ts +0 -30
  359. package/dist/hooks/use-component-state.d.ts.map +0 -1
  360. package/dist/hooks/use-component-state.js +0 -139
  361. package/dist/hooks/use-component-state.js.map +0 -1
  362. package/dist/hooks/use-component-state.test.d.ts +0 -2
  363. package/dist/hooks/use-component-state.test.d.ts.map +0 -1
  364. package/dist/hooks/use-component-state.test.js +0 -406
  365. package/dist/hooks/use-component-state.test.js.map +0 -1
  366. package/dist/hooks/use-current-message.d.ts.map +0 -1
  367. package/dist/hooks/use-current-message.js.map +0 -1
  368. package/dist/hooks/use-current-message.test.d.ts +0 -2
  369. package/dist/hooks/use-current-message.test.d.ts.map +0 -1
  370. package/dist/hooks/use-current-message.test.js +0 -269
  371. package/dist/hooks/use-current-message.test.js.map +0 -1
  372. package/dist/hooks/use-streaming-props.d.ts +0 -11
  373. package/dist/hooks/use-streaming-props.d.ts.map +0 -1
  374. package/dist/hooks/use-streaming-props.js +0 -37
  375. package/dist/hooks/use-streaming-props.js.map +0 -1
  376. package/dist/hooks/use-suggestions.d.ts +0 -46
  377. package/dist/hooks/use-suggestions.d.ts.map +0 -1
  378. package/dist/hooks/use-suggestions.js +0 -118
  379. package/dist/hooks/use-suggestions.js.map +0 -1
  380. package/dist/hooks/use-suggestions.test.d.ts +0 -2
  381. package/dist/hooks/use-suggestions.test.d.ts.map +0 -1
  382. package/dist/hooks/use-suggestions.test.js +0 -247
  383. package/dist/hooks/use-suggestions.test.js.map +0 -1
  384. package/dist/hooks/use-tambo-stream-status.d.ts +0 -90
  385. package/dist/hooks/use-tambo-stream-status.d.ts.map +0 -1
  386. package/dist/hooks/use-tambo-stream-status.js +0 -213
  387. package/dist/hooks/use-tambo-stream-status.js.map +0 -1
  388. package/dist/hooks/use-tambo-stream-status.test.d.ts +0 -2
  389. package/dist/hooks/use-tambo-stream-status.test.d.ts.map +0 -1
  390. package/dist/hooks/use-tambo-stream-status.test.js +0 -378
  391. package/dist/hooks/use-tambo-stream-status.test.js.map +0 -1
  392. package/dist/hooks/use-tambo-threads.d.ts +0 -158
  393. package/dist/hooks/use-tambo-threads.d.ts.map +0 -1
  394. package/dist/hooks/use-tambo-threads.js +0 -45
  395. package/dist/hooks/use-tambo-threads.js.map +0 -1
  396. package/dist/hooks/use-tambo-threads.test.d.ts +0 -2
  397. package/dist/hooks/use-tambo-threads.test.d.ts.map +0 -1
  398. package/dist/hooks/use-tambo-threads.test.js +0 -214
  399. package/dist/hooks/use-tambo-threads.test.js.map +0 -1
  400. package/dist/model/generate-component-response.d.ts +0 -37
  401. package/dist/model/generate-component-response.d.ts.map +0 -1
  402. package/dist/model/generate-component-response.js +0 -29
  403. package/dist/model/generate-component-response.js.map +0 -1
  404. package/dist/model/tambo-thread.d.ts +0 -15
  405. package/dist/model/tambo-thread.d.ts.map +0 -1
  406. package/dist/model/tambo-thread.js +0 -3
  407. package/dist/model/tambo-thread.js.map +0 -1
  408. package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts +0 -2
  409. package/dist/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +0 -1
  410. package/dist/providers/__tests__/thread-input-resource-resolution.test.js +0 -592
  411. package/dist/providers/__tests__/thread-input-resource-resolution.test.js.map +0 -1
  412. package/dist/providers/index.d.ts +0 -13
  413. package/dist/providers/index.d.ts.map +0 -1
  414. package/dist/providers/index.js +0 -41
  415. package/dist/providers/index.js.map +0 -1
  416. package/dist/providers/tambo-component-provider.d.ts +0 -23
  417. package/dist/providers/tambo-component-provider.d.ts.map +0 -1
  418. package/dist/providers/tambo-component-provider.js +0 -88
  419. package/dist/providers/tambo-component-provider.js.map +0 -1
  420. package/dist/providers/tambo-prop-stream-provider/index.d.ts +0 -19
  421. package/dist/providers/tambo-prop-stream-provider/index.d.ts.map +0 -1
  422. package/dist/providers/tambo-prop-stream-provider/index.js +0 -43
  423. package/dist/providers/tambo-prop-stream-provider/index.js.map +0 -1
  424. package/dist/providers/tambo-prop-stream-provider/pending.d.ts +0 -12
  425. package/dist/providers/tambo-prop-stream-provider/pending.d.ts.map +0 -1
  426. package/dist/providers/tambo-prop-stream-provider/pending.js +0 -31
  427. package/dist/providers/tambo-prop-stream-provider/pending.js.map +0 -1
  428. package/dist/providers/tambo-prop-stream-provider/provider.d.ts +0 -17
  429. package/dist/providers/tambo-prop-stream-provider/provider.d.ts.map +0 -1
  430. package/dist/providers/tambo-prop-stream-provider/provider.js +0 -107
  431. package/dist/providers/tambo-prop-stream-provider/provider.js.map +0 -1
  432. package/dist/providers/tambo-prop-stream-provider/streaming.d.ts +0 -12
  433. package/dist/providers/tambo-prop-stream-provider/streaming.d.ts.map +0 -1
  434. package/dist/providers/tambo-prop-stream-provider/streaming.js +0 -28
  435. package/dist/providers/tambo-prop-stream-provider/streaming.js.map +0 -1
  436. package/dist/providers/tambo-prop-stream-provider/success.d.ts +0 -12
  437. package/dist/providers/tambo-prop-stream-provider/success.d.ts.map +0 -1
  438. package/dist/providers/tambo-prop-stream-provider/success.js +0 -28
  439. package/dist/providers/tambo-prop-stream-provider/success.js.map +0 -1
  440. package/dist/providers/tambo-prop-stream-provider/types.d.ts +0 -25
  441. package/dist/providers/tambo-prop-stream-provider/types.d.ts.map +0 -1
  442. package/dist/providers/tambo-prop-stream-provider/types.js +0 -6
  443. package/dist/providers/tambo-prop-stream-provider/types.js.map +0 -1
  444. package/dist/providers/tambo-prop-stream-provider.test.d.ts +0 -2
  445. package/dist/providers/tambo-prop-stream-provider.test.d.ts.map +0 -1
  446. package/dist/providers/tambo-prop-stream-provider.test.js +0 -275
  447. package/dist/providers/tambo-prop-stream-provider.test.js.map +0 -1
  448. package/dist/providers/tambo-provider.d.ts +0 -53
  449. package/dist/providers/tambo-provider.d.ts.map +0 -1
  450. package/dist/providers/tambo-provider.js +0 -133
  451. package/dist/providers/tambo-provider.js.map +0 -1
  452. package/dist/providers/tambo-stubs.d.ts +0 -89
  453. package/dist/providers/tambo-stubs.d.ts.map +0 -1
  454. package/dist/providers/tambo-stubs.js +0 -279
  455. package/dist/providers/tambo-stubs.js.map +0 -1
  456. package/dist/providers/tambo-stubs.test.d.ts +0 -2
  457. package/dist/providers/tambo-stubs.test.d.ts.map +0 -1
  458. package/dist/providers/tambo-stubs.test.js +0 -97
  459. package/dist/providers/tambo-stubs.test.js.map +0 -1
  460. package/dist/providers/tambo-thread-input-provider.d.ts +0 -65
  461. package/dist/providers/tambo-thread-input-provider.d.ts.map +0 -1
  462. package/dist/providers/tambo-thread-input-provider.js +0 -179
  463. package/dist/providers/tambo-thread-input-provider.js.map +0 -1
  464. package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts +0 -2
  465. package/dist/providers/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  466. package/dist/providers/tambo-thread-provider-initial-messages.test.js +0 -278
  467. package/dist/providers/tambo-thread-provider-initial-messages.test.js.map +0 -1
  468. package/dist/providers/tambo-thread-provider.d.ts +0 -126
  469. package/dist/providers/tambo-thread-provider.d.ts.map +0 -1
  470. package/dist/providers/tambo-thread-provider.js +0 -931
  471. package/dist/providers/tambo-thread-provider.js.map +0 -1
  472. package/dist/providers/tambo-thread-provider.test.d.ts +0 -2
  473. package/dist/providers/tambo-thread-provider.test.d.ts.map +0 -1
  474. package/dist/providers/tambo-thread-provider.test.js +0 -1591
  475. package/dist/providers/tambo-thread-provider.test.js.map +0 -1
  476. package/dist/util/generate-component.d.ts +0 -12
  477. package/dist/util/generate-component.d.ts.map +0 -1
  478. package/dist/util/generate-component.js +0 -58
  479. package/dist/util/generate-component.js.map +0 -1
  480. package/dist/util/generate-component.test.d.ts +0 -2
  481. package/dist/util/generate-component.test.d.ts.map +0 -1
  482. package/dist/util/generate-component.test.js +0 -340
  483. package/dist/util/generate-component.test.js.map +0 -1
  484. package/esm/hooks/index.d.ts +0 -9
  485. package/esm/hooks/index.d.ts.map +0 -1
  486. package/esm/hooks/index.js +0 -10
  487. package/esm/hooks/index.js.map +0 -1
  488. package/esm/hooks/use-component-state.d.ts +0 -30
  489. package/esm/hooks/use-component-state.d.ts.map +0 -1
  490. package/esm/hooks/use-component-state.js +0 -136
  491. package/esm/hooks/use-component-state.js.map +0 -1
  492. package/esm/hooks/use-component-state.test.d.ts +0 -2
  493. package/esm/hooks/use-component-state.test.d.ts.map +0 -1
  494. package/esm/hooks/use-component-state.test.js +0 -401
  495. package/esm/hooks/use-component-state.test.js.map +0 -1
  496. package/esm/hooks/use-current-message.d.ts.map +0 -1
  497. package/esm/hooks/use-current-message.js.map +0 -1
  498. package/esm/hooks/use-current-message.test.d.ts +0 -2
  499. package/esm/hooks/use-current-message.test.d.ts.map +0 -1
  500. package/esm/hooks/use-current-message.test.js +0 -264
  501. package/esm/hooks/use-current-message.test.js.map +0 -1
  502. package/esm/hooks/use-streaming-props.d.ts +0 -11
  503. package/esm/hooks/use-streaming-props.d.ts.map +0 -1
  504. package/esm/hooks/use-streaming-props.js +0 -34
  505. package/esm/hooks/use-streaming-props.js.map +0 -1
  506. package/esm/hooks/use-suggestions.d.ts +0 -46
  507. package/esm/hooks/use-suggestions.d.ts.map +0 -1
  508. package/esm/hooks/use-suggestions.js +0 -115
  509. package/esm/hooks/use-suggestions.js.map +0 -1
  510. package/esm/hooks/use-suggestions.test.d.ts +0 -2
  511. package/esm/hooks/use-suggestions.test.d.ts.map +0 -1
  512. package/esm/hooks/use-suggestions.test.js +0 -245
  513. package/esm/hooks/use-suggestions.test.js.map +0 -1
  514. package/esm/hooks/use-tambo-stream-status.d.ts +0 -90
  515. package/esm/hooks/use-tambo-stream-status.d.ts.map +0 -1
  516. package/esm/hooks/use-tambo-stream-status.js +0 -210
  517. package/esm/hooks/use-tambo-stream-status.js.map +0 -1
  518. package/esm/hooks/use-tambo-stream-status.test.d.ts +0 -2
  519. package/esm/hooks/use-tambo-stream-status.test.d.ts.map +0 -1
  520. package/esm/hooks/use-tambo-stream-status.test.js +0 -376
  521. package/esm/hooks/use-tambo-stream-status.test.js.map +0 -1
  522. package/esm/hooks/use-tambo-threads.d.ts +0 -158
  523. package/esm/hooks/use-tambo-threads.d.ts.map +0 -1
  524. package/esm/hooks/use-tambo-threads.js +0 -42
  525. package/esm/hooks/use-tambo-threads.js.map +0 -1
  526. package/esm/hooks/use-tambo-threads.test.d.ts +0 -2
  527. package/esm/hooks/use-tambo-threads.test.d.ts.map +0 -1
  528. package/esm/hooks/use-tambo-threads.test.js +0 -212
  529. package/esm/hooks/use-tambo-threads.test.js.map +0 -1
  530. package/esm/model/generate-component-response.d.ts +0 -37
  531. package/esm/model/generate-component-response.d.ts.map +0 -1
  532. package/esm/model/generate-component-response.js +0 -25
  533. package/esm/model/generate-component-response.js.map +0 -1
  534. package/esm/model/tambo-thread.d.ts +0 -15
  535. package/esm/model/tambo-thread.d.ts.map +0 -1
  536. package/esm/model/tambo-thread.js +0 -2
  537. package/esm/model/tambo-thread.js.map +0 -1
  538. package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts +0 -2
  539. package/esm/providers/__tests__/thread-input-resource-resolution.test.d.ts.map +0 -1
  540. package/esm/providers/__tests__/thread-input-resource-resolution.test.js +0 -587
  541. package/esm/providers/__tests__/thread-input-resource-resolution.test.js.map +0 -1
  542. package/esm/providers/index.d.ts +0 -13
  543. package/esm/providers/index.d.ts.map +0 -1
  544. package/esm/providers/index.js +0 -11
  545. package/esm/providers/index.js.map +0 -1
  546. package/esm/providers/tambo-component-provider.d.ts +0 -23
  547. package/esm/providers/tambo-component-provider.d.ts.map +0 -1
  548. package/esm/providers/tambo-component-provider.js +0 -50
  549. package/esm/providers/tambo-component-provider.js.map +0 -1
  550. package/esm/providers/tambo-prop-stream-provider/index.d.ts +0 -19
  551. package/esm/providers/tambo-prop-stream-provider/index.d.ts.map +0 -1
  552. package/esm/providers/tambo-prop-stream-provider/index.js +0 -22
  553. package/esm/providers/tambo-prop-stream-provider/index.js.map +0 -1
  554. package/esm/providers/tambo-prop-stream-provider/pending.d.ts +0 -12
  555. package/esm/providers/tambo-prop-stream-provider/pending.d.ts.map +0 -1
  556. package/esm/providers/tambo-prop-stream-provider/pending.js +0 -24
  557. package/esm/providers/tambo-prop-stream-provider/pending.js.map +0 -1
  558. package/esm/providers/tambo-prop-stream-provider/provider.d.ts +0 -17
  559. package/esm/providers/tambo-prop-stream-provider/provider.d.ts.map +0 -1
  560. package/esm/providers/tambo-prop-stream-provider/provider.js +0 -70
  561. package/esm/providers/tambo-prop-stream-provider/provider.js.map +0 -1
  562. package/esm/providers/tambo-prop-stream-provider/streaming.d.ts +0 -12
  563. package/esm/providers/tambo-prop-stream-provider/streaming.d.ts.map +0 -1
  564. package/esm/providers/tambo-prop-stream-provider/streaming.js +0 -21
  565. package/esm/providers/tambo-prop-stream-provider/streaming.js.map +0 -1
  566. package/esm/providers/tambo-prop-stream-provider/success.d.ts +0 -12
  567. package/esm/providers/tambo-prop-stream-provider/success.d.ts.map +0 -1
  568. package/esm/providers/tambo-prop-stream-provider/success.js +0 -21
  569. package/esm/providers/tambo-prop-stream-provider/success.js.map +0 -1
  570. package/esm/providers/tambo-prop-stream-provider/types.d.ts +0 -25
  571. package/esm/providers/tambo-prop-stream-provider/types.d.ts.map +0 -1
  572. package/esm/providers/tambo-prop-stream-provider/types.js +0 -3
  573. package/esm/providers/tambo-prop-stream-provider/types.js.map +0 -1
  574. package/esm/providers/tambo-prop-stream-provider.test.d.ts +0 -2
  575. package/esm/providers/tambo-prop-stream-provider.test.d.ts.map +0 -1
  576. package/esm/providers/tambo-prop-stream-provider.test.js +0 -270
  577. package/esm/providers/tambo-prop-stream-provider.test.js.map +0 -1
  578. package/esm/providers/tambo-provider.d.ts +0 -53
  579. package/esm/providers/tambo-provider.d.ts.map +0 -1
  580. package/esm/providers/tambo-provider.js +0 -94
  581. package/esm/providers/tambo-provider.js.map +0 -1
  582. package/esm/providers/tambo-stubs.d.ts +0 -89
  583. package/esm/providers/tambo-stubs.d.ts.map +0 -1
  584. package/esm/providers/tambo-stubs.js +0 -242
  585. package/esm/providers/tambo-stubs.js.map +0 -1
  586. package/esm/providers/tambo-stubs.test.d.ts +0 -2
  587. package/esm/providers/tambo-stubs.test.d.ts.map +0 -1
  588. package/esm/providers/tambo-stubs.test.js +0 -62
  589. package/esm/providers/tambo-stubs.test.js.map +0 -1
  590. package/esm/providers/tambo-thread-input-provider.d.ts +0 -65
  591. package/esm/providers/tambo-thread-input-provider.d.ts.map +0 -1
  592. package/esm/providers/tambo-thread-input-provider.js +0 -141
  593. package/esm/providers/tambo-thread-input-provider.js.map +0 -1
  594. package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts +0 -2
  595. package/esm/providers/tambo-thread-provider-initial-messages.test.d.ts.map +0 -1
  596. package/esm/providers/tambo-thread-provider-initial-messages.test.js +0 -273
  597. package/esm/providers/tambo-thread-provider-initial-messages.test.js.map +0 -1
  598. package/esm/providers/tambo-thread-provider.d.ts +0 -126
  599. package/esm/providers/tambo-thread-provider.d.ts.map +0 -1
  600. package/esm/providers/tambo-thread-provider.js +0 -891
  601. package/esm/providers/tambo-thread-provider.js.map +0 -1
  602. package/esm/providers/tambo-thread-provider.test.d.ts +0 -2
  603. package/esm/providers/tambo-thread-provider.test.d.ts.map +0 -1
  604. package/esm/providers/tambo-thread-provider.test.js +0 -1553
  605. package/esm/providers/tambo-thread-provider.test.js.map +0 -1
  606. package/esm/util/generate-component.d.ts +0 -12
  607. package/esm/util/generate-component.d.ts.map +0 -1
  608. package/esm/util/generate-component.js +0 -52
  609. package/esm/util/generate-component.js.map +0 -1
  610. package/esm/util/generate-component.test.d.ts +0 -2
  611. package/esm/util/generate-component.test.d.ts.map +0 -1
  612. package/esm/util/generate-component.test.js +0 -302
  613. package/esm/util/generate-component.test.js.map +0 -1
@@ -1,6 +1,23 @@
1
1
  import React from "react";
2
- import { InteractableMetadata, TamboThreadMessage } from "../model/generate-component-response";
3
- export declare const TamboMessageContext: React.Context<TamboThreadMessage | null>;
2
+ import type { InteractableConfig } from "../../hoc/with-tambo-interactable.js";
3
+ import type { TamboThreadMessage } from "../types/message.js";
4
+ /**
5
+ * Metadata for interactable components.
6
+ * Used when a component is wrapped with withTamboInteractable.
7
+ */
8
+ export interface InteractableMetadata extends InteractableConfig {
9
+ /** Unique identifier for this interactable instance */
10
+ id: string;
11
+ }
12
+ /**
13
+ * Message with optional interactable metadata merged in by the provider.
14
+ * Used as the context type so consumers can access both the message and
15
+ * any interactable information attached by withTamboInteractable.
16
+ */
17
+ type MessageWithMetadata = TamboThreadMessage & {
18
+ interactableMetadata?: InteractableMetadata;
19
+ };
20
+ export declare const TamboMessageContext: React.Context<MessageWithMetadata | null>;
4
21
  export interface TamboMessageProviderProps {
5
22
  children: React.ReactNode;
6
23
  message: TamboThreadMessage;
@@ -8,9 +25,9 @@ export interface TamboMessageProviderProps {
8
25
  interactableMetadata?: InteractableMetadata;
9
26
  }
10
27
  /**
11
- * Wraps all components, so that they can find what message they are in.
28
+ * Wraps all components so that they can find what message they are in.
12
29
  * Also supports optional interactable metadata for components wrapped with withInteractable.
13
- * @param props - props for the TamboMessageProvider
30
+ * @param props - Props for the TamboMessageProvider
14
31
  * @param props.children - The children to wrap
15
32
  * @param props.message - The message object
16
33
  * @param props.interactableMetadata - Optional interactable component metadata
@@ -19,7 +36,7 @@ export interface TamboMessageProviderProps {
19
36
  export declare const TamboMessageProvider: React.FC<TamboMessageProviderProps>;
20
37
  /**
21
38
  * Wraps a component with a TamboMessageProvider - this allows the provider
22
- * to be used outside of a TSX file
39
+ * to be used outside of a TSX file.
23
40
  * @param children - The children to wrap
24
41
  * @param message - The message object
25
42
  * @param interactableMetadata - Optional interactable metadata
@@ -31,7 +48,7 @@ export declare function wrapWithTamboMessageProvider(children: React.ReactNode,
31
48
  * the current message.
32
49
  * @returns The current message that is used to render the component
33
50
  */
34
- export declare const useTamboCurrentMessage: () => TamboThreadMessage;
51
+ export declare const useTamboCurrentMessage: () => MessageWithMetadata;
35
52
  /**
36
53
  * Component info extracted from the current message and interactable context.
37
54
  * Provides a unified interface for accessing component metadata.
@@ -40,18 +57,21 @@ export interface TamboCurrentComponent {
40
57
  /** Component name from the message */
41
58
  componentName?: string;
42
59
  /** Component props from the message */
43
- props?: Record<string, any>;
60
+ props?: Record<string, unknown>;
44
61
  /** Interactable ID (only present for components wrapped with withInteractable) */
45
62
  interactableId?: string;
46
63
  /** Description (only present for components wrapped with withInteractable) */
47
64
  description?: string;
48
- /** Thread ID from the message (only present when the component is part of a thread) */
65
+ /** Thread ID (not available on messages directly) */
49
66
  threadId?: string;
50
67
  }
51
68
  /**
52
69
  * Hook to access the current component information from the message context.
53
70
  * Provides a unified interface for both AI-generated and interactable components.
54
71
  *
72
+ * Component info is derived from content blocks rather than
73
+ * top-level message fields.
74
+ *
55
75
  * **Use this hook when you need component metadata regardless of the context.**
56
76
  * @returns Component info including name, props, and interactable metadata if available, or null if used outside TamboMessageProvider
57
77
  * @example
@@ -71,4 +91,5 @@ export interface TamboCurrentComponent {
71
91
  * ```
72
92
  */
73
93
  export declare const useTamboCurrentComponent: () => TamboCurrentComponent | null;
74
- //# sourceMappingURL=use-current-message.d.ts.map
94
+ export {};
95
+ //# sourceMappingURL=use-tambo-current-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-current-message.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-current-message.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;GAIG;AACH,KAAK,mBAAmB,GAAG,kBAAkB,GAAG;IAC9C,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,mBAAmB,2CAE/B,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAkBpE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,KAAK,CAAC,SAAS,EACzB,OAAO,EAAE,kBAAkB,EAC3B,oBAAoB,CAAC,EAAE,oBAAoB,qBAU5C;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,2BAQlC,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,wBAAwB,QAAO,qBAAqB,GAAG,IAsBnE,CAAC"}
@@ -2,9 +2,9 @@
2
2
  import React, { createContext, useContext } from "react";
3
3
  export const TamboMessageContext = createContext(null);
4
4
  /**
5
- * Wraps all components, so that they can find what message they are in.
5
+ * Wraps all components so that they can find what message they are in.
6
6
  * Also supports optional interactable metadata for components wrapped with withInteractable.
7
- * @param props - props for the TamboMessageProvider
7
+ * @param props - Props for the TamboMessageProvider
8
8
  * @param props.children - The children to wrap
9
9
  * @param props.message - The message object
10
10
  * @param props.interactableMetadata - Optional interactable component metadata
@@ -16,13 +16,13 @@ export const TamboMessageProvider = ({ children, message, interactableMetadata,
16
16
  ? { ...message, interactableMetadata }
17
17
  : message;
18
18
  // Use a unique key={...} to force a re-render when the message changes - this
19
- // make sure that if the rendered component is swapped into a tree (like if
19
+ // makes sure that if the rendered component is swapped into a tree (like if
20
20
  // you always show the last rendered component) then the state/etc is correct
21
21
  return (React.createElement(TamboMessageContext.Provider, { value: enhancedMessage, key: message.id }, children));
22
22
  };
23
23
  /**
24
24
  * Wraps a component with a TamboMessageProvider - this allows the provider
25
- * to be used outside of a TSX file
25
+ * to be used outside of a TSX file.
26
26
  * @param children - The children to wrap
27
27
  * @param message - The message object
28
28
  * @param interactableMetadata - Optional interactable metadata
@@ -47,6 +47,9 @@ export const useTamboCurrentMessage = () => {
47
47
  * Hook to access the current component information from the message context.
48
48
  * Provides a unified interface for both AI-generated and interactable components.
49
49
  *
50
+ * Component info is derived from content blocks rather than
51
+ * top-level message fields.
52
+ *
50
53
  * **Use this hook when you need component metadata regardless of the context.**
51
54
  * @returns Component info including name, props, and interactable metadata if available, or null if used outside TamboMessageProvider
52
55
  * @example
@@ -70,14 +73,16 @@ export const useTamboCurrentComponent = () => {
70
73
  if (!message) {
71
74
  return null;
72
75
  }
76
+ // Find first component content block
77
+ const componentContent = message.content.find((c) => c.type === "component");
73
78
  return {
74
79
  componentName: message.interactableMetadata?.componentName ??
75
- message.component?.componentName ??
80
+ componentContent?.name ??
76
81
  undefined,
77
- props: message.component?.props,
82
+ props: componentContent?.props,
78
83
  interactableId: message.interactableMetadata?.id ?? undefined,
79
84
  description: message.interactableMetadata?.description ?? undefined,
80
- threadId: message.threadId,
85
+ threadId: undefined, // Messages don't carry threadId
81
86
  };
82
87
  };
83
- //# sourceMappingURL=use-current-message.js.map
88
+ //# sourceMappingURL=use-tambo-current-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tambo-current-message.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-current-message.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAyBzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAC9C,IAAI,CACL,CAAC;AASF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EACxE,QAAQ,EACR,OAAO,EACP,oBAAoB,GACrB,EAAE,EAAE;IACH,uDAAuD;IACvD,MAAM,eAAe,GAAwB,oBAAoB;QAC/D,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,oBAAoB,EAAE;QACtC,CAAC,CAAC,OAAO,CAAC;IAEZ,8EAA8E;IAC9E,4EAA4E;IAC5E,6EAA6E;IAC7E,OAAO,CACL,oBAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,IAClE,QAAQ,CACoB,CAChC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAyB,EACzB,OAA2B,EAC3B,oBAA2C;IAE3C,OAAO,CACL,oBAAC,oBAAoB,IACnB,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,oBAAoB,IAEzC,QAAQ,CACY,CACxB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,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;AAmBF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAiC,EAAE;IACzE,MAAM,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAC3C,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAC1D,CAAC;IAEF,OAAO;QACL,aAAa,EACX,OAAO,CAAC,oBAAoB,EAAE,aAAa;YAC3C,gBAAgB,EAAE,IAAI;YACtB,SAAS;QACX,KAAK,EAAE,gBAAgB,EAAE,KAA4C;QACrE,cAAc,EAAE,OAAO,CAAC,oBAAoB,EAAE,EAAE,IAAI,SAAS;QAC7D,WAAW,EAAE,OAAO,CAAC,oBAAoB,EAAE,WAAW,IAAI,SAAS;QACnE,QAAQ,EAAE,SAAS,EAAE,gCAAgC;KACtD,CAAC;AACJ,CAAC,CAAC","sourcesContent":["\"use client\";\nimport React, { createContext, useContext } from \"react\";\nimport type { InteractableConfig } from \"../../hoc/with-tambo-interactable\";\nimport type {\n TamboThreadMessage,\n TamboComponentContent,\n} from \"../types/message\";\n\n/**\n * Metadata for interactable components.\n * Used when a component is wrapped with withTamboInteractable.\n */\nexport interface InteractableMetadata extends InteractableConfig {\n /** Unique identifier for this interactable instance */\n id: string;\n}\n\n/**\n * Message with optional interactable metadata merged in by the provider.\n * Used as the context type so consumers can access both the message and\n * any interactable information attached by withTamboInteractable.\n */\ntype MessageWithMetadata = TamboThreadMessage & {\n interactableMetadata?: InteractableMetadata;\n};\n\nexport const TamboMessageContext = createContext<MessageWithMetadata | null>(\n null,\n);\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: MessageWithMetadata = interactableMetadata\n ? { ...message, interactableMetadata }\n : message;\n\n // Use a unique key={...} to force a re-render when the message changes - this\n // makes 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, unknown>;\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 /** Thread ID (not available on messages directly) */\n threadId?: 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 * Component info is derived from content blocks rather than\n * top-level message fields.\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 // Find first component content block\n const componentContent = message.content.find(\n (c): c is TamboComponentContent => c.type === \"component\",\n );\n\n return {\n componentName:\n message.interactableMetadata?.componentName ??\n componentContent?.name ??\n undefined,\n props: componentContent?.props as Record<string, unknown> | undefined,\n interactableId: message.interactableMetadata?.id ?? undefined,\n description: message.interactableMetadata?.description ?? undefined,\n threadId: undefined, // Messages don't carry threadId\n };\n};\n"]}
@@ -1,11 +1,11 @@
1
- import type { TamboV1AuthState } from "../types/auth.js";
1
+ import type { TamboAuthState } from "../types/auth.js";
2
2
  /**
3
- * Hook to compute the current authentication state for the v1 SDK.
3
+ * Hook to compute the current authentication state for the SDK.
4
4
  *
5
- * Reads from TamboClientContext and TamboV1ConfigContext to determine
5
+ * Reads from TamboClientContext and TamboConfigContext to determine
6
6
  * whether the SDK is ready to make API calls.
7
7
  * @returns The current auth state as a discriminated union
8
- * @throws {Error} If used outside TamboV1Provider
8
+ * @throws {Error} If used outside TamboProvider
9
9
  */
10
- export declare function useTamboV1AuthState(): TamboV1AuthState;
10
+ export declare function useTamboAuthState(): TamboAuthState;
11
11
  //# sourceMappingURL=use-tambo-v1-auth-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-tambo-v1-auth-state.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-auth-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAqCtD"}
1
+ {"version":3,"file":"use-tambo-v1-auth-state.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-auth-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAqClD"}
@@ -1,23 +1,23 @@
1
1
  "use client";
2
2
  import { useContext } from "react";
3
3
  import { TamboClientContext } from "../../providers/tambo-client-provider.js";
4
- import { TamboV1ConfigContext } from "../providers/tambo-v1-provider.js";
4
+ import { TamboConfigContext } from "../providers/tambo-v1-provider.js";
5
5
  /**
6
- * Hook to compute the current authentication state for the v1 SDK.
6
+ * Hook to compute the current authentication state for the SDK.
7
7
  *
8
- * Reads from TamboClientContext and TamboV1ConfigContext to determine
8
+ * Reads from TamboClientContext and TamboConfigContext to determine
9
9
  * whether the SDK is ready to make API calls.
10
10
  * @returns The current auth state as a discriminated union
11
- * @throws {Error} If used outside TamboV1Provider
11
+ * @throws {Error} If used outside TamboProvider
12
12
  */
13
- export function useTamboV1AuthState() {
13
+ export function useTamboAuthState() {
14
14
  const clientContext = useContext(TamboClientContext);
15
15
  if (!clientContext) {
16
- throw new Error("useTamboV1AuthState must be used within TamboV1Provider");
16
+ throw new Error("useTamboAuthState must be used within TamboProvider");
17
17
  }
18
- const config = useContext(TamboV1ConfigContext);
18
+ const config = useContext(TamboConfigContext);
19
19
  if (!config) {
20
- throw new Error("useTamboV1AuthState must be used within TamboV1Provider");
20
+ throw new Error("useTamboAuthState must be used within TamboProvider");
21
21
  }
22
22
  const { tokenExchangeError, userToken, hasValidToken } = clientContext;
23
23
  const { userKey } = config;
@@ -1 +1 @@
1
- {"version":3,"file":"use-tambo-v1-auth-state.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-auth-state.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC;IACvE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE3B,+CAA+C;IAC/C,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrD,CAAC;IAED,2BAA2B;IAC3B,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,mBAAmB;IACnB,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC","sourcesContent":["\"use client\";\n\nimport { useContext } from \"react\";\nimport { TamboClientContext } from \"../../providers/tambo-client-provider\";\nimport { TamboV1ConfigContext } from \"../providers/tambo-v1-provider\";\nimport type { TamboV1AuthState } from \"../types/auth\";\n\n/**\n * Hook to compute the current authentication state for the v1 SDK.\n *\n * Reads from TamboClientContext and TamboV1ConfigContext to determine\n * whether the SDK is ready to make API calls.\n * @returns The current auth state as a discriminated union\n * @throws {Error} If used outside TamboV1Provider\n */\nexport function useTamboV1AuthState(): TamboV1AuthState {\n const clientContext = useContext(TamboClientContext);\n if (!clientContext) {\n throw new Error(\"useTamboV1AuthState must be used within TamboV1Provider\");\n }\n\n const config = useContext(TamboV1ConfigContext);\n if (!config) {\n throw new Error(\"useTamboV1AuthState must be used within TamboV1Provider\");\n }\n\n const { tokenExchangeError, userToken, hasValidToken } = clientContext;\n const { userKey } = config;\n\n // Invalid: both userKey AND userToken provided\n if (userKey && userToken) {\n return { status: \"invalid\" };\n }\n\n // Identified via userKey\n if (userKey) {\n return { status: \"identified\", source: \"userKey\" };\n }\n\n // Token exchange scenarios\n if (userToken) {\n if (tokenExchangeError) {\n return { status: \"error\", error: tokenExchangeError };\n }\n if (hasValidToken) {\n return { status: \"identified\", source: \"tokenExchange\" };\n }\n return { status: \"exchanging\" };\n }\n\n // Neither provided\n return { status: \"unauthenticated\" };\n}\n"]}
1
+ {"version":3,"file":"use-tambo-v1-auth-state.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-auth-state.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGpE;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC;IACvE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE3B,+CAA+C;IAC/C,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrD,CAAC;IAED,2BAA2B;IAC3B,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,mBAAmB;IACnB,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC","sourcesContent":["\"use client\";\n\nimport { useContext } from \"react\";\nimport { TamboClientContext } from \"../../providers/tambo-client-provider\";\nimport { TamboConfigContext } from \"../providers/tambo-v1-provider\";\nimport type { TamboAuthState } from \"../types/auth\";\n\n/**\n * Hook to compute the current authentication state for the SDK.\n *\n * Reads from TamboClientContext and TamboConfigContext to determine\n * whether the SDK is ready to make API calls.\n * @returns The current auth state as a discriminated union\n * @throws {Error} If used outside TamboProvider\n */\nexport function useTamboAuthState(): TamboAuthState {\n const clientContext = useContext(TamboClientContext);\n if (!clientContext) {\n throw new Error(\"useTamboAuthState must be used within TamboProvider\");\n }\n\n const config = useContext(TamboConfigContext);\n if (!config) {\n throw new Error(\"useTamboAuthState must be used within TamboProvider\");\n }\n\n const { tokenExchangeError, userToken, hasValidToken } = clientContext;\n const { userKey } = config;\n\n // Invalid: both userKey AND userToken provided\n if (userKey && userToken) {\n return { status: \"invalid\" };\n }\n\n // Identified via userKey\n if (userKey) {\n return { status: \"identified\", source: \"userKey\" };\n }\n\n // Token exchange scenarios\n if (userToken) {\n if (tokenExchangeError) {\n return { status: \"error\", error: tokenExchangeError };\n }\n if (hasValidToken) {\n return { status: \"identified\", source: \"tokenExchange\" };\n }\n return { status: \"exchanging\" };\n }\n\n // Neither provided\n return { status: \"unauthenticated\" };\n}\n"]}
@@ -2,8 +2,8 @@ import { renderHook } from "@testing-library/react";
2
2
  import React from "react";
3
3
  import { QueryClient } from "@tanstack/react-query";
4
4
  import { TamboClientContext } from "../../providers/tambo-client-provider.js";
5
- import { TamboV1ConfigContext, } from "../providers/tambo-v1-provider.js";
6
- import { useTamboV1AuthState } from "./use-tambo-v1-auth-state.js";
5
+ import { TamboConfigContext, } from "../providers/tambo-v1-provider.js";
6
+ import { useTamboAuthState } from "./use-tambo-v1-auth-state.js";
7
7
  function createWrapper(clientOverrides, configOverrides = {}) {
8
8
  const clientContext = {
9
9
  client: {},
@@ -19,13 +19,13 @@ function createWrapper(clientOverrides, configOverrides = {}) {
19
19
  ...configOverrides,
20
20
  };
21
21
  function Wrapper({ children }) {
22
- return React.createElement(TamboClientContext.Provider, { value: clientContext }, React.createElement(TamboV1ConfigContext.Provider, { value: config }, children));
22
+ return React.createElement(TamboClientContext.Provider, { value: clientContext }, React.createElement(TamboConfigContext.Provider, { value: config }, children));
23
23
  }
24
24
  return Wrapper;
25
25
  }
26
- describe("useTamboV1AuthState", () => {
26
+ describe("useTamboAuthState", () => {
27
27
  it("returns 'identified' with source 'userKey' when only userKey is provided", () => {
28
- const { result } = renderHook(() => useTamboV1AuthState(), {
28
+ const { result } = renderHook(() => useTamboAuthState(), {
29
29
  wrapper: createWrapper({}, { userKey: "user_123" }),
30
30
  });
31
31
  expect(result.current).toEqual({
@@ -34,7 +34,7 @@ describe("useTamboV1AuthState", () => {
34
34
  });
35
35
  });
36
36
  it("returns 'identified' with source 'tokenExchange' when token exchange succeeded", () => {
37
- const { result } = renderHook(() => useTamboV1AuthState(), {
37
+ const { result } = renderHook(() => useTamboAuthState(), {
38
38
  wrapper: createWrapper({
39
39
  userToken: "oauth_token",
40
40
  hasValidToken: true,
@@ -46,7 +46,7 @@ describe("useTamboV1AuthState", () => {
46
46
  });
47
47
  });
48
48
  it("returns 'exchanging' when userToken provided but exchange not yet complete", () => {
49
- const { result } = renderHook(() => useTamboV1AuthState(), {
49
+ const { result } = renderHook(() => useTamboAuthState(), {
50
50
  wrapper: createWrapper({
51
51
  userToken: "oauth_token",
52
52
  hasValidToken: false,
@@ -56,7 +56,7 @@ describe("useTamboV1AuthState", () => {
56
56
  });
57
57
  it("returns 'error' when token exchange failed", () => {
58
58
  const exchangeError = new Error("Token exchange failed");
59
- const { result } = renderHook(() => useTamboV1AuthState(), {
59
+ const { result } = renderHook(() => useTamboAuthState(), {
60
60
  wrapper: createWrapper({
61
61
  userToken: "oauth_token",
62
62
  tokenExchangeError: exchangeError,
@@ -69,22 +69,22 @@ describe("useTamboV1AuthState", () => {
69
69
  });
70
70
  });
71
71
  it("returns 'invalid' when both userKey and userToken are provided", () => {
72
- const { result } = renderHook(() => useTamboV1AuthState(), {
72
+ const { result } = renderHook(() => useTamboAuthState(), {
73
73
  wrapper: createWrapper({ userToken: "oauth_token" }, { userKey: "user_123" }),
74
74
  });
75
75
  expect(result.current).toEqual({ status: "invalid" });
76
76
  });
77
77
  it("returns 'unauthenticated' when neither userKey nor userToken is provided", () => {
78
- const { result } = renderHook(() => useTamboV1AuthState(), {
78
+ const { result } = renderHook(() => useTamboAuthState(), {
79
79
  wrapper: createWrapper({}),
80
80
  });
81
81
  expect(result.current).toEqual({ status: "unauthenticated" });
82
82
  });
83
83
  it("throws when used outside TamboClientContext", () => {
84
- const wrapper = ({ children }) => React.createElement(TamboV1ConfigContext.Provider, { value: { userKey: "x" } }, children);
85
- expect(() => renderHook(() => useTamboV1AuthState(), { wrapper })).toThrow("useTamboV1AuthState must be used within TamboV1Provider");
84
+ const wrapper = ({ children }) => React.createElement(TamboConfigContext.Provider, { value: { userKey: "x" } }, children);
85
+ expect(() => renderHook(() => useTamboAuthState(), { wrapper })).toThrow("useTamboAuthState must be used within TamboProvider");
86
86
  });
87
- it("throws when used outside TamboV1ConfigContext", () => {
87
+ it("throws when used outside TamboConfigContext", () => {
88
88
  const clientContext = {
89
89
  client: {},
90
90
  queryClient: new QueryClient(),
@@ -94,7 +94,7 @@ describe("useTamboV1AuthState", () => {
94
94
  hasValidToken: false,
95
95
  };
96
96
  const wrapper = ({ children }) => React.createElement(TamboClientContext.Provider, { value: clientContext }, children);
97
- expect(() => renderHook(() => useTamboV1AuthState(), { wrapper })).toThrow("useTamboV1AuthState must be used within TamboV1Provider");
97
+ expect(() => renderHook(() => useTamboAuthState(), { wrapper })).toThrow("useTamboAuthState must be used within TamboProvider");
98
98
  });
99
99
  });
100
100
  //# sourceMappingURL=use-tambo-v1-auth-state.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-tambo-v1-auth-state.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-auth-state.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { renderHook } from \"@testing-library/react\";\nimport React from \"react\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { TamboClientContext } from \"../../providers/tambo-client-provider\";\nimport type { TamboClientContextProps } from \"../../providers/tambo-client-provider\";\nimport {\n TamboV1ConfigContext,\n type TamboV1Config,\n} from \"../providers/tambo-v1-provider\";\nimport { useTamboV1AuthState } from \"./use-tambo-v1-auth-state\";\n\nfunction createWrapper(\n clientOverrides: Partial<TamboClientContextProps>,\n configOverrides: Partial<TamboV1Config> = {},\n) {\n const clientContext: TamboClientContextProps = {\n client: {} as TamboAI,\n queryClient: new QueryClient(),\n isUpdatingToken: false,\n tokenExchangeError: null,\n userToken: undefined,\n hasValidToken: false,\n ...clientOverrides,\n };\n\n const config: TamboV1Config = {\n userKey: undefined,\n ...configOverrides,\n };\n\n function Wrapper({ children }: { children: React.ReactNode }) {\n return React.createElement(\n TamboClientContext.Provider,\n { value: clientContext },\n React.createElement(\n TamboV1ConfigContext.Provider,\n { value: config },\n children,\n ),\n );\n }\n return Wrapper;\n}\n\ndescribe(\"useTamboV1AuthState\", () => {\n it(\"returns 'identified' with source 'userKey' when only userKey is provided\", () => {\n const { result } = renderHook(() => useTamboV1AuthState(), {\n wrapper: createWrapper({}, { userKey: \"user_123\" }),\n });\n\n expect(result.current).toEqual({\n status: \"identified\",\n source: \"userKey\",\n });\n });\n\n it(\"returns 'identified' with source 'tokenExchange' when token exchange succeeded\", () => {\n const { result } = renderHook(() => useTamboV1AuthState(), {\n wrapper: createWrapper({\n userToken: \"oauth_token\",\n hasValidToken: true,\n }),\n });\n\n expect(result.current).toEqual({\n status: \"identified\",\n source: \"tokenExchange\",\n });\n });\n\n it(\"returns 'exchanging' when userToken provided but exchange not yet complete\", () => {\n const { result } = renderHook(() => useTamboV1AuthState(), {\n wrapper: createWrapper({\n userToken: \"oauth_token\",\n hasValidToken: false,\n }),\n });\n\n expect(result.current).toEqual({ status: \"exchanging\" });\n });\n\n it(\"returns 'error' when token exchange failed\", () => {\n const exchangeError = new Error(\"Token exchange failed\");\n const { result } = renderHook(() => useTamboV1AuthState(), {\n wrapper: createWrapper({\n userToken: \"oauth_token\",\n tokenExchangeError: exchangeError,\n hasValidToken: false,\n }),\n });\n\n expect(result.current).toEqual({\n status: \"error\",\n error: exchangeError,\n });\n });\n\n it(\"returns 'invalid' when both userKey and userToken are provided\", () => {\n const { result } = renderHook(() => useTamboV1AuthState(), {\n wrapper: createWrapper(\n { userToken: \"oauth_token\" },\n { userKey: \"user_123\" },\n ),\n });\n\n expect(result.current).toEqual({ status: \"invalid\" });\n });\n\n it(\"returns 'unauthenticated' when neither userKey nor userToken is provided\", () => {\n const { result } = renderHook(() => useTamboV1AuthState(), {\n wrapper: createWrapper({}),\n });\n\n expect(result.current).toEqual({ status: \"unauthenticated\" });\n });\n\n it(\"throws when used outside TamboClientContext\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) =>\n React.createElement(\n TamboV1ConfigContext.Provider,\n { value: { userKey: \"x\" } },\n children,\n );\n\n expect(() => renderHook(() => useTamboV1AuthState(), { wrapper })).toThrow(\n \"useTamboV1AuthState must be used within TamboV1Provider\",\n );\n });\n\n it(\"throws when used outside TamboV1ConfigContext\", () => {\n const clientContext: TamboClientContextProps = {\n client: {} as TamboAI,\n queryClient: new QueryClient(),\n isUpdatingToken: false,\n tokenExchangeError: null,\n userToken: undefined,\n hasValidToken: false,\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) =>\n React.createElement(\n TamboClientContext.Provider,\n { value: clientContext },\n children,\n );\n\n expect(() => renderHook(() => useTamboV1AuthState(), { wrapper })).toThrow(\n \"useTamboV1AuthState must be used within TamboV1Provider\",\n );\n });\n});\n"]}
1
+ {"version":3,"file":"use-tambo-v1-auth-state.test.js","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-auth-state.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { renderHook } from \"@testing-library/react\";\nimport React from \"react\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport TamboAI from \"@tambo-ai/typescript-sdk\";\nimport { TamboClientContext } from \"../../providers/tambo-client-provider\";\nimport type { TamboClientContextProps } from \"../../providers/tambo-client-provider\";\nimport {\n TamboConfigContext,\n type TamboConfig,\n} from \"../providers/tambo-v1-provider\";\nimport { useTamboAuthState } from \"./use-tambo-v1-auth-state\";\n\nfunction createWrapper(\n clientOverrides: Partial<TamboClientContextProps>,\n configOverrides: Partial<TamboConfig> = {},\n) {\n const clientContext: TamboClientContextProps = {\n client: {} as TamboAI,\n queryClient: new QueryClient(),\n isUpdatingToken: false,\n tokenExchangeError: null,\n userToken: undefined,\n hasValidToken: false,\n ...clientOverrides,\n };\n\n const config: TamboConfig = {\n userKey: undefined,\n ...configOverrides,\n };\n\n function Wrapper({ children }: { children: React.ReactNode }) {\n return React.createElement(\n TamboClientContext.Provider,\n { value: clientContext },\n React.createElement(\n TamboConfigContext.Provider,\n { value: config },\n children,\n ),\n );\n }\n return Wrapper;\n}\n\ndescribe(\"useTamboAuthState\", () => {\n it(\"returns 'identified' with source 'userKey' when only userKey is provided\", () => {\n const { result } = renderHook(() => useTamboAuthState(), {\n wrapper: createWrapper({}, { userKey: \"user_123\" }),\n });\n\n expect(result.current).toEqual({\n status: \"identified\",\n source: \"userKey\",\n });\n });\n\n it(\"returns 'identified' with source 'tokenExchange' when token exchange succeeded\", () => {\n const { result } = renderHook(() => useTamboAuthState(), {\n wrapper: createWrapper({\n userToken: \"oauth_token\",\n hasValidToken: true,\n }),\n });\n\n expect(result.current).toEqual({\n status: \"identified\",\n source: \"tokenExchange\",\n });\n });\n\n it(\"returns 'exchanging' when userToken provided but exchange not yet complete\", () => {\n const { result } = renderHook(() => useTamboAuthState(), {\n wrapper: createWrapper({\n userToken: \"oauth_token\",\n hasValidToken: false,\n }),\n });\n\n expect(result.current).toEqual({ status: \"exchanging\" });\n });\n\n it(\"returns 'error' when token exchange failed\", () => {\n const exchangeError = new Error(\"Token exchange failed\");\n const { result } = renderHook(() => useTamboAuthState(), {\n wrapper: createWrapper({\n userToken: \"oauth_token\",\n tokenExchangeError: exchangeError,\n hasValidToken: false,\n }),\n });\n\n expect(result.current).toEqual({\n status: \"error\",\n error: exchangeError,\n });\n });\n\n it(\"returns 'invalid' when both userKey and userToken are provided\", () => {\n const { result } = renderHook(() => useTamboAuthState(), {\n wrapper: createWrapper(\n { userToken: \"oauth_token\" },\n { userKey: \"user_123\" },\n ),\n });\n\n expect(result.current).toEqual({ status: \"invalid\" });\n });\n\n it(\"returns 'unauthenticated' when neither userKey nor userToken is provided\", () => {\n const { result } = renderHook(() => useTamboAuthState(), {\n wrapper: createWrapper({}),\n });\n\n expect(result.current).toEqual({ status: \"unauthenticated\" });\n });\n\n it(\"throws when used outside TamboClientContext\", () => {\n const wrapper = ({ children }: { children: React.ReactNode }) =>\n React.createElement(\n TamboConfigContext.Provider,\n { value: { userKey: \"x\" } },\n children,\n );\n\n expect(() => renderHook(() => useTamboAuthState(), { wrapper })).toThrow(\n \"useTamboAuthState must be used within TamboProvider\",\n );\n });\n\n it(\"throws when used outside TamboConfigContext\", () => {\n const clientContext: TamboClientContextProps = {\n client: {} as TamboAI,\n queryClient: new QueryClient(),\n isUpdatingToken: false,\n tokenExchangeError: null,\n userToken: undefined,\n hasValidToken: false,\n };\n\n const wrapper = ({ children }: { children: React.ReactNode }) =>\n React.createElement(\n TamboClientContext.Provider,\n { value: clientContext },\n children,\n );\n\n expect(() => renderHook(() => useTamboAuthState(), { wrapper })).toThrow(\n \"useTamboAuthState must be used within TamboProvider\",\n );\n });\n});\n"]}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Return type for useTamboV1ComponentState hook.
2
+ * Return type for useTamboComponentState hook.
3
3
  * Similar to useState but with additional metadata.
4
4
  */
5
- export type UseTamboV1ComponentStateReturn<S> = [
5
+ export type UseTamboComponentStateReturn<S> = [
6
6
  currentState: S,
7
7
  setState: (newState: S | ((prev: S) => S)) => void,
8
8
  meta: {
@@ -18,7 +18,8 @@ export type UseTamboV1ComponentStateReturn<S> = [
18
18
  * to the Tambo backend. Server-side state updates are also reflected
19
19
  * in the component.
20
20
  *
21
- * Must be used within a component rendered via the component renderer.
21
+ * Can be used within rendered components, interactable components, or
22
+ * components awaiting provider context (acts as plain useState until context is available).
22
23
  * @param keyName - The unique key to identify this state value within the component's state
23
24
  * @param initialValue - Initial value for the state (used if no server state exists)
24
25
  * @param debounceTime - Debounce time in milliseconds (default: 500ms)
@@ -26,7 +27,7 @@ export type UseTamboV1ComponentStateReturn<S> = [
26
27
  * @example
27
28
  * ```tsx
28
29
  * function Counter() {
29
- * const [count, setCount, { isPending }] = useTamboV1ComponentState('count', 0);
30
+ * const [count, setCount, { isPending }] = useTamboComponentState('count', 0);
30
31
  *
31
32
  * return (
32
33
  * <div>
@@ -39,6 +40,6 @@ export type UseTamboV1ComponentStateReturn<S> = [
39
40
  * }
40
41
  * ```
41
42
  */
42
- export declare function useTamboV1ComponentState<S = undefined>(keyName: string, initialValue?: S, debounceTime?: number): UseTamboV1ComponentStateReturn<S | undefined>;
43
- export declare function useTamboV1ComponentState<S>(keyName: string, initialValue: S, debounceTime?: number): UseTamboV1ComponentStateReturn<S>;
43
+ export declare function useTamboComponentState<S = undefined>(keyName: string, initialValue?: S, debounceTime?: number): UseTamboComponentStateReturn<S | undefined>;
44
+ export declare function useTamboComponentState<S>(keyName: string, initialValue: S, debounceTime?: number): UseTamboComponentStateReturn<S>;
44
45
  //# sourceMappingURL=use-tambo-v1-component-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-tambo-v1-component-state.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-component-state.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAAI;IAC9C,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;IAClD,IAAI,EAAE;QACJ,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,GAAG,SAAS,EACpD,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,CAAC,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,8BAA8B,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AACjD,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,8BAA8B,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"use-tambo-v1-component-state.d.ts","sourceRoot":"","sources":["../../../src/v1/hooks/use-tambo-v1-component-state.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,MAAM,MAAM,4BAA4B,CAAC,CAAC,IAAI;IAC5C,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;IAClD,IAAI,EAAE;QACJ,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,KAAK,EAAE,MAAM,IAAI,CAAC;KACnB;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,GAAG,SAAS,EAClD,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,CAAC,EAChB,YAAY,CAAC,EAAE,MAAM,GACpB,4BAA4B,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAC/C,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,4BAA4B,CAAC,CAAC,CAAC,CAAC"}
@@ -1,33 +1,47 @@
1
1
  "use client";
2
2
  /**
3
- * useTamboV1ComponentState - Component State Hook for v1 API
3
+ * useTamboComponentState - Component State Hook
4
4
  *
5
5
  * Provides bidirectional state synchronization between React components
6
6
  * and the Tambo backend. State changes are debounced before syncing to
7
7
  * the server, and server state updates are reflected in the component.
8
8
  *
9
- * Must be used within a component rendered via the component renderer.
9
+ * Works in three modes:
10
+ * - **Rendered components**: syncs state bidirectionally with the server
11
+ * - **Interactable components**: syncs state via the interactable provider
12
+ * - **No context yet**: acts as plain useState (no side effects) until a
13
+ * provider wraps the component (e.g., first render before withTamboInteractable)
10
14
  */
11
15
  import { useCallback, useEffect, useState, useRef } from "react";
12
16
  import { useDebouncedCallback } from "use-debounce";
13
17
  import { deepEqual } from "fast-equals";
14
18
  import { useTamboClient } from "../../providers/tambo-client-provider.js";
15
19
  import { useTamboInteractable } from "../../providers/tambo-interactable-provider.js";
16
- import { useV1ComponentContent } from "../utils/component-renderer.js";
20
+ import { useComponentContentOptional } from "../utils/component-renderer.js";
21
+ import { useTamboConfig } from "../providers/tambo-v1-provider.js";
17
22
  import { useStreamState } from "../providers/tambo-v1-stream-context.js";
18
23
  import { findComponentContent } from "../utils/thread-utils.js";
19
- export function useTamboV1ComponentState(keyName, initialValue, debounceTime = 500) {
24
+ export function useTamboComponentState(keyName, initialValue, debounceTime = 500) {
20
25
  const client = useTamboClient();
21
- const { componentId, threadId } = useV1ComponentContent();
26
+ const { userKey } = useTamboConfig();
27
+ const componentContent = useComponentContentOptional();
22
28
  const streamState = useStreamState();
23
29
  const { setInteractableState, getInteractableComponentState } = useTamboInteractable();
24
- // Interactable components use threadId="" (set by withTamboInteractable)
25
- const isInteractable = threadId === "";
26
- // Find the component content to get server state (only for v1-rendered components)
27
- const componentContent = isInteractable
30
+ // componentContent is null on the first render of interactable components
31
+ // (before withTamboInteractable sets the interactableId and wraps with provider).
32
+ // When null, we act as plain useState with no side effects.
33
+ const isContextAvailable = componentContent !== null;
34
+ const componentId = componentContent?.componentId ?? "";
35
+ const threadId = componentContent?.threadId ?? "";
36
+ // Only treat as interactable when we have real context with threadId=""
37
+ // (set by withTamboInteractable). When context is missing entirely,
38
+ // neither interactable nor server-sync paths should run.
39
+ const isInteractable = isContextAvailable && threadId === "";
40
+ // Find the component content to get server state (only for rendered components)
41
+ const renderedContent = isInteractable
28
42
  ? undefined
29
43
  : findComponentContent(streamState, threadId, componentId);
30
- const serverState = componentContent?.state;
44
+ const serverState = renderedContent?.state;
31
45
  const serverValue = serverState?.[keyName];
32
46
  // For interactable components, read state from the interactable provider
33
47
  const interactableState = isInteractable
@@ -44,9 +58,9 @@ export function useTamboV1ComponentState(keyName, initialValue, debounceTime = 5
44
58
  const hasPendingLocalChangeRef = useRef(false);
45
59
  // Track in-flight sync requests to avoid stale completions clearing pending state
46
60
  const syncSeqRef = useRef(0);
47
- // Debounced function to sync state to server (only used for v1-rendered components)
61
+ // Debounced function to sync state to server (only used for rendered components)
48
62
  const syncToServer = useDebouncedCallback(async (newState) => {
49
- if (isInteractable)
63
+ if (!isContextAvailable || isInteractable)
50
64
  return;
51
65
  const seq = ++syncSeqRef.current;
52
66
  setIsPending(true);
@@ -56,6 +70,7 @@ export function useTamboV1ComponentState(keyName, initialValue, debounceTime = 5
56
70
  await client.threads.state.updateState(componentId, {
57
71
  threadId,
58
72
  state: { [keyName]: newState },
73
+ userKey,
59
74
  });
60
75
  // Clear pending flag after successful sync
61
76
  hasPendingLocalChangeRef.current = false;
@@ -65,7 +80,7 @@ export function useTamboV1ComponentState(keyName, initialValue, debounceTime = 5
65
80
  hasPendingLocalChangeRef.current = false;
66
81
  const syncError = err instanceof Error ? err : new Error(String(err));
67
82
  setError(syncError);
68
- console.error(`[useTamboV1ComponentState] Failed to sync state for ${componentId}:`, syncError);
83
+ console.error(`[useTamboComponentState] Failed to sync state for ${componentId}:`, syncError);
69
84
  }
70
85
  finally {
71
86
  // Only clear isPending if this is the most recent request
@@ -80,18 +95,29 @@ export function useTamboV1ComponentState(keyName, initialValue, debounceTime = 5
80
95
  const nextState = typeof newState === "function"
81
96
  ? newState(prev)
82
97
  : newState;
98
+ // No side effects when context isn't available yet (local-only update)
99
+ if (!isContextAvailable) {
100
+ return nextState;
101
+ }
83
102
  if (isInteractable) {
84
103
  // For interactable components, update the interactable provider's state
85
104
  setInteractableState(componentId, keyName, nextState);
86
105
  }
87
106
  else {
88
- // For v1-rendered components, trigger debounced sync to server
107
+ // For rendered components, trigger debounced sync to server
89
108
  hasPendingLocalChangeRef.current = true;
90
109
  void syncToServer(nextState);
91
110
  }
92
111
  return nextState;
93
112
  });
94
- }, [isInteractable, syncToServer, setInteractableState, componentId, keyName]);
113
+ }, [
114
+ isContextAvailable,
115
+ isInteractable,
116
+ syncToServer,
117
+ setInteractableState,
118
+ componentId,
119
+ keyName,
120
+ ]);
95
121
  // Set initial value in interactable state on mount if no existing state
96
122
  const existingInteractableState = isInteractable
97
123
  ? getInteractableComponentState(componentId)?.[keyName]
@@ -118,9 +144,9 @@ export function useTamboV1ComponentState(keyName, initialValue, debounceTime = 5
118
144
  return;
119
145
  setLocalState((prev) => deepEqual(prev, interactableState) ? prev : interactableState);
120
146
  }, [isInteractable, interactableState]);
121
- // Sync from server state when it changes (e.g., from streaming events) - v1-rendered only
147
+ // Sync from server state when it changes (e.g., from streaming events) - rendered components only
122
148
  useEffect(() => {
123
- if (isInteractable)
149
+ if (!isContextAvailable || isInteractable)
124
150
  return;
125
151
  if (serverValue === undefined)
126
152
  return;
@@ -135,21 +161,21 @@ export function useTamboV1ComponentState(keyName, initialValue, debounceTime = 5
135
161
  }
136
162
  // Use functional update to avoid localState in deps
137
163
  setLocalState((prev) => deepEqual(serverValue, prev) ? prev : serverValue);
138
- }, [isInteractable, serverValue]);
139
- // Flush pending updates on unmount (only for v1-rendered components)
164
+ }, [isContextAvailable, isInteractable, serverValue]);
165
+ // Flush pending updates on unmount (only for rendered components)
140
166
  useEffect(() => {
141
- if (isInteractable)
167
+ if (!isContextAvailable || isInteractable)
142
168
  return;
143
169
  return () => {
144
170
  void syncToServer.flush();
145
171
  };
146
- }, [isInteractable, syncToServer]);
147
- // Flush function for immediate sync (noop for interactable)
172
+ }, [isContextAvailable, isInteractable, syncToServer]);
173
+ // Flush function for immediate sync (noop when context is unavailable or interactable)
148
174
  const flush = useCallback(() => {
149
- if (isInteractable)
175
+ if (!isContextAvailable || isInteractable)
150
176
  return;
151
177
  void syncToServer.flush();
152
- }, [isInteractable, syncToServer]);
178
+ }, [isContextAvailable, isInteractable, syncToServer]);
153
179
  return [localState, setState, { isPending, error, flush }];
154
180
  }
155
181
  //# sourceMappingURL=use-tambo-v1-component-state.js.map