@tambo-ai/react 0.39.0 → 0.41.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 (85) hide show
  1. package/dist/hooks/use-component-state.js +0 -1
  2. package/dist/hooks/use-component-state.js.map +1 -1
  3. package/dist/mcp/mcp-client.d.ts +15 -15
  4. package/dist/providers/__tests__/tambo-prop-stream-provider.test.js +144 -224
  5. package/dist/providers/__tests__/tambo-prop-stream-provider.test.js.map +1 -1
  6. package/dist/providers/__tests__/tambo-thread-provider.test.js +7 -7
  7. package/dist/providers/__tests__/tambo-thread-provider.test.js.map +1 -1
  8. package/dist/providers/index.d.ts +2 -2
  9. package/dist/providers/index.d.ts.map +1 -1
  10. package/dist/providers/index.js +4 -1
  11. package/dist/providers/index.js.map +1 -1
  12. package/dist/providers/tambo-prop-stream-provider/index.d.ts +19 -0
  13. package/dist/providers/tambo-prop-stream-provider/index.d.ts.map +1 -0
  14. package/dist/providers/tambo-prop-stream-provider/index.js +43 -0
  15. package/dist/providers/tambo-prop-stream-provider/index.js.map +1 -0
  16. package/dist/providers/tambo-prop-stream-provider/pending.d.ts +12 -0
  17. package/dist/providers/tambo-prop-stream-provider/pending.d.ts.map +1 -0
  18. package/dist/providers/tambo-prop-stream-provider/pending.js +31 -0
  19. package/dist/providers/tambo-prop-stream-provider/pending.js.map +1 -0
  20. package/dist/providers/tambo-prop-stream-provider/provider.d.ts +17 -0
  21. package/dist/providers/tambo-prop-stream-provider/provider.d.ts.map +1 -0
  22. package/dist/providers/tambo-prop-stream-provider/provider.js +107 -0
  23. package/dist/providers/tambo-prop-stream-provider/provider.js.map +1 -0
  24. package/dist/providers/tambo-prop-stream-provider/streaming.d.ts +12 -0
  25. package/dist/providers/tambo-prop-stream-provider/streaming.d.ts.map +1 -0
  26. package/dist/providers/tambo-prop-stream-provider/streaming.js +28 -0
  27. package/dist/providers/tambo-prop-stream-provider/streaming.js.map +1 -0
  28. package/dist/providers/tambo-prop-stream-provider/success.d.ts +12 -0
  29. package/dist/providers/tambo-prop-stream-provider/success.d.ts.map +1 -0
  30. package/dist/providers/tambo-prop-stream-provider/success.js +28 -0
  31. package/dist/providers/tambo-prop-stream-provider/success.js.map +1 -0
  32. package/dist/providers/tambo-prop-stream-provider/types.d.ts +25 -0
  33. package/dist/providers/tambo-prop-stream-provider/types.d.ts.map +1 -0
  34. package/dist/providers/tambo-prop-stream-provider/types.js +6 -0
  35. package/dist/providers/tambo-prop-stream-provider/types.js.map +1 -0
  36. package/dist/providers/tambo-thread-provider.d.ts.map +1 -1
  37. package/dist/providers/tambo-thread-provider.js +3 -9
  38. package/dist/providers/tambo-thread-provider.js.map +1 -1
  39. package/esm/hooks/use-component-state.js +0 -1
  40. package/esm/hooks/use-component-state.js.map +1 -1
  41. package/esm/mcp/mcp-client.d.ts +15 -15
  42. package/esm/providers/__tests__/tambo-prop-stream-provider.test.js +144 -224
  43. package/esm/providers/__tests__/tambo-prop-stream-provider.test.js.map +1 -1
  44. package/esm/providers/__tests__/tambo-thread-provider.test.js +7 -7
  45. package/esm/providers/__tests__/tambo-thread-provider.test.js.map +1 -1
  46. package/esm/providers/index.d.ts +2 -2
  47. package/esm/providers/index.d.ts.map +1 -1
  48. package/esm/providers/index.js +1 -1
  49. package/esm/providers/index.js.map +1 -1
  50. package/esm/providers/tambo-prop-stream-provider/index.d.ts +19 -0
  51. package/esm/providers/tambo-prop-stream-provider/index.d.ts.map +1 -0
  52. package/esm/providers/tambo-prop-stream-provider/index.js +22 -0
  53. package/esm/providers/tambo-prop-stream-provider/index.js.map +1 -0
  54. package/esm/providers/tambo-prop-stream-provider/pending.d.ts +12 -0
  55. package/esm/providers/tambo-prop-stream-provider/pending.d.ts.map +1 -0
  56. package/esm/providers/tambo-prop-stream-provider/pending.js +24 -0
  57. package/esm/providers/tambo-prop-stream-provider/pending.js.map +1 -0
  58. package/esm/providers/tambo-prop-stream-provider/provider.d.ts +17 -0
  59. package/esm/providers/tambo-prop-stream-provider/provider.d.ts.map +1 -0
  60. package/esm/providers/tambo-prop-stream-provider/provider.js +70 -0
  61. package/esm/providers/tambo-prop-stream-provider/provider.js.map +1 -0
  62. package/esm/providers/tambo-prop-stream-provider/streaming.d.ts +12 -0
  63. package/esm/providers/tambo-prop-stream-provider/streaming.d.ts.map +1 -0
  64. package/esm/providers/tambo-prop-stream-provider/streaming.js +21 -0
  65. package/esm/providers/tambo-prop-stream-provider/streaming.js.map +1 -0
  66. package/esm/providers/tambo-prop-stream-provider/success.d.ts +12 -0
  67. package/esm/providers/tambo-prop-stream-provider/success.d.ts.map +1 -0
  68. package/esm/providers/tambo-prop-stream-provider/success.js +21 -0
  69. package/esm/providers/tambo-prop-stream-provider/success.js.map +1 -0
  70. package/esm/providers/tambo-prop-stream-provider/types.d.ts +25 -0
  71. package/esm/providers/tambo-prop-stream-provider/types.d.ts.map +1 -0
  72. package/esm/providers/tambo-prop-stream-provider/types.js +3 -0
  73. package/esm/providers/tambo-prop-stream-provider/types.js.map +1 -0
  74. package/esm/providers/tambo-thread-provider.d.ts.map +1 -1
  75. package/esm/providers/tambo-thread-provider.js +3 -9
  76. package/esm/providers/tambo-thread-provider.js.map +1 -1
  77. package/package.json +7 -7
  78. package/dist/providers/tambo-prop-stream-provider.d.ts +0 -96
  79. package/dist/providers/tambo-prop-stream-provider.d.ts.map +0 -1
  80. package/dist/providers/tambo-prop-stream-provider.js +0 -185
  81. package/dist/providers/tambo-prop-stream-provider.js.map +0 -1
  82. package/esm/providers/tambo-prop-stream-provider.d.ts +0 -96
  83. package/esm/providers/tambo-prop-stream-provider.d.ts.map +0 -1
  84. package/esm/providers/tambo-prop-stream-provider.js +0 -148
  85. package/esm/providers/tambo-prop-stream-provider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-prop-stream-provider.test.js","sourceRoot":"","sources":["../../../src/providers/__tests__/tambo-prop-stream-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { render, screen } from \"@testing-library/react\";\nimport React from \"react\";\nimport { StreamStatus } from \"../../hooks/use-tambo-stream-status\";\nimport {\n TamboPropStreamProvider,\n useTamboStream,\n} from \"../tambo-prop-stream-provider\";\n\n// Helper component to test hook usage\nconst TestHookComponent: React.FC<{ testKey?: string }> = ({\n testKey = \"default\",\n}) => {\n const { data, streamStatus, getStatusForKey } = useTamboStream();\n const status = getStatusForKey(testKey);\n\n return (\n <div>\n <div data-testid=\"data\">{JSON.stringify(data)}</div>\n <div data-testid=\"stream-status\">{JSON.stringify(streamStatus)}</div>\n <div data-testid=\"key-status\">{JSON.stringify(status)}</div>\n </div>\n );\n};\n\ndescribe(\"TamboPropStreamProvider\", () => {\n describe(\"Hook Error Handling\", () => {\n it(\"should throw error when useTamboStream is used outside provider\", () => {\n // Suppress console.error for this test\n const originalError = console.error;\n console.error = jest.fn();\n\n expect(() => {\n render(<TestHookComponent />);\n }).toThrow(\n \"useTamboStream must be used within a TamboPropStreamProvider\",\n );\n\n console.error = originalError;\n });\n });\n\n describe(\"Basic Functionality\", () => {\n it(\"should provide data and stream status through context\", () => {\n const testData = { message: \"Hello World\" };\n const testStreamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n streamError: undefined,\n };\n\n render(\n <TamboPropStreamProvider\n data={testData}\n streamStatus={testStreamStatus}\n >\n <TestHookComponent />\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"data\")).toHaveTextContent(\n JSON.stringify(testData),\n );\n expect(screen.getByTestId(\"stream-status\")).toHaveTextContent(\n JSON.stringify(testStreamStatus),\n );\n });\n\n it(\"should use default stream status when none provided\", () => {\n const testData = { message: \"Hello World\" };\n const expectedDefaultStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n streamError: undefined,\n };\n\n render(\n <TamboPropStreamProvider data={testData}>\n <TestHookComponent />\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"stream-status\")).toHaveTextContent(\n JSON.stringify(expectedDefaultStatus),\n );\n });\n });\n\n describe(\"Compound Components\", () => {\n describe(\"Loading Component\", () => {\n it(\"should render loading when isPending is true\", () => {\n const streamStatus: StreamStatus = {\n isPending: true,\n isStreaming: false,\n isSuccess: false,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={null} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Loading>\n <div data-testid=\"loading\">Loading...</div>\n </TamboPropStreamProvider.Loading>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"loading\")).toBeInTheDocument();\n });\n\n it(\"should render loading when isStreaming is true\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: true,\n isSuccess: false,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={null} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Loading>\n <div data-testid=\"loading\">Loading...</div>\n </TamboPropStreamProvider.Loading>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"loading\")).toBeInTheDocument();\n });\n\n it(\"should not render loading when not pending or streaming\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data=\"test\" streamStatus={streamStatus}>\n <TamboPropStreamProvider.Loading>\n <div data-testid=\"loading\">Loading...</div>\n </TamboPropStreamProvider.Loading>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.queryByTestId(\"loading\")).not.toBeInTheDocument();\n });\n });\n\n describe(\"Complete Component\", () => {\n it(\"should render complete when isSuccess is true and data exists\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data=\"test data\" streamStatus={streamStatus}>\n <TamboPropStreamProvider.Complete>\n <div data-testid=\"complete\">Complete!</div>\n </TamboPropStreamProvider.Complete>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"complete\")).toBeInTheDocument();\n });\n\n it(\"should not render complete when data is null\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={null} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Complete>\n <div data-testid=\"complete\">Complete!</div>\n </TamboPropStreamProvider.Complete>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.queryByTestId(\"complete\")).not.toBeInTheDocument();\n });\n\n it(\"should not render complete when data is undefined\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={undefined} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Complete>\n <div data-testid=\"complete\">Complete!</div>\n </TamboPropStreamProvider.Complete>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.queryByTestId(\"complete\")).not.toBeInTheDocument();\n });\n });\n\n describe(\"Empty Component\", () => {\n it(\"should render empty when no data and not loading/streaming/success/error\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: false,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={null} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Empty>\n <div data-testid=\"empty\">No data</div>\n </TamboPropStreamProvider.Empty>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"empty\")).toBeInTheDocument();\n });\n\n it(\"should render empty when data is empty string\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: false,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data=\"\" streamStatus={streamStatus}>\n <TamboPropStreamProvider.Empty>\n <div data-testid=\"empty\">No data</div>\n </TamboPropStreamProvider.Empty>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"empty\")).toBeInTheDocument();\n });\n\n it(\"should not render empty when loading\", () => {\n const streamStatus: StreamStatus = {\n isPending: true,\n isStreaming: false,\n isSuccess: false,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={null} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Empty>\n <div data-testid=\"empty\">No data</div>\n </TamboPropStreamProvider.Empty>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.queryByTestId(\"empty\")).not.toBeInTheDocument();\n });\n\n it(\"should not render empty when successful\", () => {\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={null} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Empty>\n <div data-testid=\"empty\">No data</div>\n </TamboPropStreamProvider.Empty>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.queryByTestId(\"empty\")).not.toBeInTheDocument();\n });\n });\n });\n\n describe(\"Per-Key Status Tracking\", () => {\n it(\"should track status for object keys\", () => {\n const testData = { name: \"John\", age: null };\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={testData} streamStatus={streamStatus}>\n <TestHookComponent testKey=\"name\" />\n </TamboPropStreamProvider>,\n );\n\n const keyStatus = JSON.parse(\n screen.getByTestId(\"key-status\").textContent ?? \"{}\",\n );\n expect(keyStatus.isSuccess).toBe(true); // name has data\n });\n\n it(\"should show loading for keys without data\", () => {\n const testData = { name: \"John\", age: null };\n const streamStatus: StreamStatus = {\n isPending: false,\n isStreaming: false,\n isSuccess: true,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={testData} streamStatus={streamStatus}>\n <TestHookComponent testKey=\"age\" />\n </TamboPropStreamProvider>,\n );\n\n const keyStatus = JSON.parse(\n screen.getByTestId(\"key-status\").textContent ?? \"{}\",\n );\n expect(keyStatus.isPending).toBe(true); // age has no data\n });\n\n it(\"should handle per-key loading states\", () => {\n render(\n <TamboPropStreamProvider data={{ name: \"John\", age: null }}>\n <TamboPropStreamProvider.Loading streamKey=\"name\">\n <div data-testid=\"name-loading\">Name loading...</div>\n </TamboPropStreamProvider.Loading>\n <TamboPropStreamProvider.Loading streamKey=\"age\">\n <div data-testid=\"age-loading\">Age loading...</div>\n </TamboPropStreamProvider.Loading>\n <TamboPropStreamProvider.Complete streamKey=\"name\">\n <div data-testid=\"name-complete\">Name: John</div>\n </TamboPropStreamProvider.Complete>\n </TamboPropStreamProvider>,\n );\n\n // Name should be complete (has data)\n expect(screen.getByTestId(\"name-complete\")).toBeInTheDocument();\n expect(screen.queryByTestId(\"name-loading\")).not.toBeInTheDocument();\n\n // Age should be loading (no data)\n expect(screen.getByTestId(\"age-loading\")).toBeInTheDocument();\n });\n });\n\n describe(\"Edge Cases\", () => {\n it(\"should handle null data gracefully\", () => {\n render(\n <TamboPropStreamProvider data={null}>\n <TestHookComponent />\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"data\")).toHaveTextContent(\"null\");\n });\n\n it(\"should handle undefined data gracefully\", () => {\n render(\n <TamboPropStreamProvider data={undefined}>\n <TestHookComponent />\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"data\")).toHaveTextContent(\"\");\n });\n\n it(\"should handle array data\", () => {\n const arrayData = [\"item1\", \"item2\"];\n render(\n <TamboPropStreamProvider data={arrayData}>\n <TestHookComponent />\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"data\")).toHaveTextContent(\n JSON.stringify(arrayData),\n );\n });\n\n it(\"should handle primitive data types\", () => {\n render(\n <TamboPropStreamProvider data=\"string data\">\n <TestHookComponent />\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"data\")).toHaveTextContent('\"string data\"');\n });\n\n it(\"should fallback to default status for unknown keys\", () => {\n const testData = { name: \"John\" };\n\n render(\n <TamboPropStreamProvider data={testData}>\n <TestHookComponent testKey=\"unknown-key\" />\n </TamboPropStreamProvider>,\n );\n\n const keyStatus = JSON.parse(\n screen.getByTestId(\"key-status\").textContent ?? \"{}\",\n );\n // Should fallback to default status\n expect(keyStatus.isSuccess).toBe(true);\n });\n });\n\n describe(\"Component Attributes\", () => {\n it(\"should add correct data attributes to components\", () => {\n const streamStatus: StreamStatus = {\n isPending: true,\n isStreaming: false,\n isSuccess: false,\n isError: false,\n };\n\n render(\n <TamboPropStreamProvider data={null} streamStatus={streamStatus}>\n <TamboPropStreamProvider.Loading className=\"loading-class\">\n <div>Loading...</div>\n </TamboPropStreamProvider.Loading>\n </TamboPropStreamProvider>,\n );\n\n const loadingElement = screen.getByText(\"Loading...\").parentElement;\n expect(loadingElement).toHaveAttribute(\"data-stream-key\", \"default\");\n expect(loadingElement).toHaveAttribute(\"data-stream-state\", \"loading\");\n expect(loadingElement).toHaveClass(\"loading-class\");\n });\n });\n});\n"]}
1
+ {"version":3,"file":"tambo-prop-stream-provider.test.js","sourceRoot":"","sources":["../../../src/providers/__tests__/tambo-prop-stream-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import { render, screen } from \"@testing-library/react\";\nimport React from \"react\";\nimport { useTamboCurrentMessage } from \"../../hooks/use-current-message\";\nimport {\n GenerationStage,\n TamboThreadMessage,\n} from \"../../model/generate-component-response\";\nimport {\n TamboThreadContextProps,\n useTamboThread,\n} from \"../../providers/tambo-thread-provider\";\nimport {\n TamboPropStreamProvider,\n useTamboStream,\n} from \"../tambo-prop-stream-provider\";\n\n// Mock the required providers\njest.mock(\"../../providers/tambo-thread-provider\", () => ({\n useTamboThread: jest.fn(),\n}));\n\njest.mock(\"../../hooks/use-current-message\", () => ({\n useTamboCurrentMessage: jest.fn(),\n}));\n\n// Mock window for SSR tests\nconst originalWindow = global.window;\n\n// Helper function to create mock ComponentDecisionV2\nconst createMockComponent = (props: Record<string, unknown> = {}): any => ({\n componentName: \"TestComponent\",\n componentState: {},\n message: \"Component generated\",\n props,\n reasoning: \"Test reasoning\",\n});\n\n// Helper function to create mock TamboThreadMessage\nconst createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n): TamboThreadMessage => ({\n id: \"test-message\",\n componentState: {},\n content: [{ type: \"text\", text: \"test content\" }],\n createdAt: new Date().toISOString(),\n role: \"assistant\",\n threadId: \"test-thread\",\n ...overrides,\n});\n\n// Helper component to test hook usage\nconst TestHookComponent: React.FC<{ testKey?: string }> = ({\n testKey = \"default\",\n}) => {\n const { streamStatus, getStatusForKey } = useTamboStream();\n const status = getStatusForKey(testKey);\n\n return (\n <div>\n <div data-testid=\"stream-status\">{JSON.stringify(streamStatus)}</div>\n <div data-testid=\"key-status\">{JSON.stringify(status)}</div>\n </div>\n );\n};\n\ndescribe(\"TamboPropStreamProvider\", () => {\n beforeEach(() => {\n // Restore window for client-side tests\n global.window = originalWindow;\n\n // Default mock implementations\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.IDLE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue({\n id: \"test-message\",\n component: {\n props: {},\n },\n } as TamboThreadMessage);\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe(\"Hook Error Handling\", () => {\n it(\"should throw error when useTamboStream is used outside provider\", () => {\n // Suppress console.error for this test\n const originalError = console.error;\n console.error = jest.fn();\n\n expect(() => {\n render(<TestHookComponent />);\n }).toThrow(\n \"useTamboStream must be used within a TamboPropStreamProvider\",\n );\n\n console.error = originalError;\n });\n });\n\n describe(\"Compound Components\", () => {\n describe(\"Streaming Component\", () => {\n it(\"should render streaming when isPending is true\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.IDLE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({ title: \"\" }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TamboPropStreamProvider.Streaming>\n <div data-testid=\"loading\">Loading...</div>\n </TamboPropStreamProvider.Streaming>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"loading\")).toBeInTheDocument();\n });\n\n it(\"should render streaming when isStreaming is true\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.STREAMING_RESPONSE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({ title: \"Partial\" }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TamboPropStreamProvider.Streaming>\n <div data-testid=\"loading\">Loading...</div>\n </TamboPropStreamProvider.Streaming>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"loading\")).toBeInTheDocument();\n });\n });\n\n describe(\"Success Component\", () => {\n it(\"should not render success when isSuccess is false\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.IDLE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({ title: \"\" }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TamboPropStreamProvider.Success>\n <div data-testid=\"complete\">Complete!</div>\n </TamboPropStreamProvider.Success>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.queryByTestId(\"complete\")).not.toBeInTheDocument();\n });\n });\n\n describe(\"Pending Component\", () => {\n it(\"should render pending when no active status\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.IDLE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({ title: \"\" }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TamboPropStreamProvider.Pending>\n <div data-testid=\"empty\">Empty!</div>\n </TamboPropStreamProvider.Pending>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.getByTestId(\"empty\")).toBeInTheDocument();\n });\n\n it(\"should not render pending when isPending is true\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.STREAMING_RESPONSE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({ title: \"Partial\" }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TamboPropStreamProvider.Pending>\n <div data-testid=\"empty\">Empty!</div>\n </TamboPropStreamProvider.Pending>\n </TamboPropStreamProvider>,\n );\n\n expect(screen.queryByTestId(\"empty\")).not.toBeInTheDocument();\n });\n });\n });\n\n describe(\"Key-based Status\", () => {\n it(\"should provide status for keys not in propStatus\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.COMPLETE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({ name: \"John\" }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TestHookComponent testKey=\"nonexistent\" />\n </TamboPropStreamProvider>,\n );\n\n const keyStatus = JSON.parse(\n screen.getByTestId(\"key-status\").textContent!,\n );\n expect(keyStatus.isPending).toBe(true);\n });\n });\n\n describe(\"Compound Components with Keys\", () => {\n it(\"should render loading for specific key when pending\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.STREAMING_RESPONSE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({\n name: \"Partial\",\n age: 25,\n }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TamboPropStreamProvider.Streaming streamKey=\"name\">\n <div data-testid=\"name-loading\">Name Loading...</div>\n </TamboPropStreamProvider.Streaming>\n <TamboPropStreamProvider.Streaming streamKey=\"age\">\n <div data-testid=\"age-loading\">Age Loading...</div>\n </TamboPropStreamProvider.Streaming>\n <TamboPropStreamProvider.Success streamKey=\"name\">\n <div data-testid=\"name-complete\">Name Complete!</div>\n </TamboPropStreamProvider.Success>\n </TamboPropStreamProvider>,\n );\n\n // Both props should be loading since they're in streaming stage\n expect(screen.getByTestId(\"name-loading\")).toBeInTheDocument();\n expect(screen.getByTestId(\"age-loading\")).toBeInTheDocument();\n expect(screen.queryByTestId(\"name-complete\")).not.toBeInTheDocument();\n });\n });\n\n describe(\"Styling\", () => {\n it(\"should apply className to loading component\", () => {\n jest.mocked(useTamboThread).mockReturnValue({\n generationStage: GenerationStage.STREAMING_RESPONSE,\n } as TamboThreadContextProps);\n\n jest.mocked(useTamboCurrentMessage).mockReturnValue(\n createMockMessage({\n component: createMockComponent({ title: \"Partial\" }),\n }),\n );\n\n render(\n <TamboPropStreamProvider>\n <TamboPropStreamProvider.Streaming className=\"loading-class\">\n <div data-testid=\"loading\">Loading...</div>\n </TamboPropStreamProvider.Streaming>\n </TamboPropStreamProvider>,\n );\n\n const loadingElement = screen.getByTestId(\"loading\").parentElement;\n expect(loadingElement).toHaveClass(\"loading-class\");\n });\n });\n});\n"]}
@@ -228,12 +228,12 @@ describe("TamboThreadProvider", () => {
228
228
  messageToAppend: {
229
229
  content: [{ type: "text", text: "Hello" }],
230
230
  role: "user",
231
+ additionalContext: mockCombinedContext,
231
232
  },
232
233
  availableComponents: (0, tools_1.serializeRegistry)(mockRegistry),
233
234
  contextKey: undefined,
234
235
  clientTools: [],
235
236
  toolCallCounts: {},
236
- additionalContext: mockCombinedContext,
237
237
  });
238
238
  expect(result.current.generationStage).toBe(generate_component_response_1.GenerationStage.COMPLETE);
239
239
  });
@@ -359,13 +359,13 @@ describe("TamboThreadProvider", () => {
359
359
  messageToAppend: {
360
360
  content: [{ type: "text", text: "Hello streaming" }],
361
361
  role: "user",
362
+ additionalContext: mockCombinedContext,
362
363
  },
363
364
  availableComponents: (0, tools_1.serializeRegistry)(mockRegistry),
364
365
  contextKey: undefined,
365
366
  clientTools: [],
366
367
  forceToolChoice: undefined,
367
368
  toolCallCounts: {},
368
- additionalContext: mockCombinedContext,
369
369
  }, "test-thread-1");
370
370
  // Should not call advance or advanceById
371
371
  expect(mockThreadsApi.advance).not.toHaveBeenCalled();
@@ -393,13 +393,13 @@ describe("TamboThreadProvider", () => {
393
393
  messageToAppend: {
394
394
  content: [{ type: "text", text: "Hello non-streaming" }],
395
395
  role: "user",
396
+ additionalContext: mockCombinedContext,
396
397
  },
397
398
  availableComponents: (0, tools_1.serializeRegistry)(mockRegistry),
398
399
  contextKey: undefined,
399
400
  clientTools: [],
400
401
  forceToolChoice: undefined,
401
402
  toolCallCounts: {},
402
- additionalContext: mockCombinedContext,
403
403
  });
404
404
  // Should not call advance or advanceStream
405
405
  expect(mockThreadsApi.advance).not.toHaveBeenCalled();
@@ -427,13 +427,13 @@ describe("TamboThreadProvider", () => {
427
427
  messageToAppend: {
428
428
  content: [{ type: "text", text: "Hello default" }],
429
429
  role: "user",
430
+ additionalContext: mockCombinedContext,
430
431
  },
431
432
  availableComponents: (0, tools_1.serializeRegistry)(mockRegistry),
432
433
  contextKey: undefined,
433
434
  clientTools: [],
434
435
  forceToolChoice: undefined,
435
436
  toolCallCounts: {},
436
- additionalContext: mockCombinedContext,
437
437
  });
438
438
  // Should not call advance or advanceStream
439
439
  expect(mockThreadsApi.advance).not.toHaveBeenCalled();
@@ -480,13 +480,13 @@ describe("TamboThreadProvider", () => {
480
480
  messageToAppend: {
481
481
  content: [{ type: "text", text: "Hello default streaming" }],
482
482
  role: "user",
483
+ additionalContext: mockCombinedContext,
483
484
  },
484
485
  availableComponents: (0, tools_1.serializeRegistry)(mockRegistry),
485
486
  contextKey: undefined,
486
487
  clientTools: [],
487
488
  forceToolChoice: undefined,
488
489
  toolCallCounts: {},
489
- additionalContext: mockCombinedContext,
490
490
  }, "test-thread-1");
491
491
  // Should not call advance or advanceById
492
492
  expect(mockThreadsApi.advance).not.toHaveBeenCalled();
@@ -516,13 +516,13 @@ describe("TamboThreadProvider", () => {
516
516
  messageToAppend: {
517
517
  content: [{ type: "text", text: "Hello new thread" }],
518
518
  role: "user",
519
+ additionalContext: mockCombinedContext,
519
520
  },
520
521
  availableComponents: (0, tools_1.serializeRegistry)(mockRegistry),
521
522
  contextKey: undefined,
522
523
  clientTools: [],
523
524
  forceToolChoice: undefined,
524
525
  toolCallCounts: {},
525
- additionalContext: mockCombinedContext,
526
526
  });
527
527
  // Should not call advanceById or advanceStream
528
528
  expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();
@@ -571,13 +571,13 @@ describe("TamboThreadProvider", () => {
571
571
  messageToAppend: {
572
572
  content: [{ type: "text", text: "Hello streaming new thread" }],
573
573
  role: "user",
574
+ additionalContext: mockCombinedContext,
574
575
  },
575
576
  availableComponents: (0, tools_1.serializeRegistry)(mockRegistry),
576
577
  contextKey: undefined,
577
578
  clientTools: [],
578
579
  forceToolChoice: undefined,
579
580
  toolCallCounts: {},
580
- additionalContext: mockCombinedContext,
581
581
  }, undefined);
582
582
  // Should not call advance or advanceById
583
583
  expect(mockThreadsApi.advance).not.toHaveBeenCalled();
@@ -1 +1 @@
1
- {"version":3,"file":"tambo-thread-provider.test.js","sourceRoot":"","sources":["../../../src/providers/__tests__/tambo-thread-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import TamboAI, { advanceStream } from \"@tambo-ai/typescript-sdk\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport React from \"react\";\nimport { DeepPartial } from \"ts-essentials\";\nimport { z } from \"zod\";\nimport { TamboComponent } from \"../../model/component-metadata\";\nimport {\n GenerationStage,\n TamboThreadMessage,\n} from \"../../model/generate-component-response\";\nimport { serializeRegistry } from \"../../testing/tools\";\nimport { useTamboClient } from \"../tambo-client-provider\";\nimport { TamboRegistryProvider } from \"../tambo-registry-provider\";\nimport { TamboThreadProvider, useTamboThread } from \"../tambo-thread-provider\";\n\ntype PartialTamboAI = DeepPartial<TamboAI>;\n\n// Mock crypto.randomUUID\nObject.defineProperty(global, \"crypto\", {\n value: {\n randomUUID: jest.fn().mockReturnValue(\"test-uuid\"),\n },\n});\n\n// Mock the required providers\njest.mock(\"../tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n}));\njest.mock(\"@tambo-ai/typescript-sdk\", () => ({\n advanceStream: jest.fn(),\n}));\n\n// Mock the system context and getCustomContext\njest.mock(\"../../util/registry\", () => ({\n ...jest.requireActual(\"../../util/registry\"),\n getSystemContext: () => ({\n localTime: \"7/24/2025, 6:26:21 PM\",\n timezone: \"America/New_York\",\n }),\n getCustomContext: () => ({\n message: \"additional instructions\",\n }),\n}));\n\n// Mock the combined context which includes the system context and the custom context\nconst mockCombinedContext = {\n system: {\n localTime: \"7/24/2025, 6:26:21 PM\",\n timezone: \"America/New_York\",\n },\n ...{\n custom: {\n message: \"additional instructions\",\n },\n },\n};\n\n// Test utilities\nconst createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n): TamboThreadMessage => ({\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n ...overrides,\n});\n\nconst createMockThread = (\n overrides: Partial<TamboAI.Beta.Threads.Thread> = {},\n) => ({\n id: \"test-thread-1\",\n messages: [],\n createdAt: \"2024-01-01T00:00:00Z\",\n projectId: \"test-project\",\n updatedAt: \"2024-01-01T00:00:00Z\",\n metadata: {},\n ...overrides,\n});\n\nconst createMockAdvanceResponse = (\n overrides: Partial<TamboAI.Beta.Threads.ThreadAdvanceResponse> = {},\n): TamboAI.Beta.Threads.ThreadAdvanceResponse => ({\n responseMessageDto: {\n id: \"test-uuid\",\n content: [{ type: \"text\" as const, text: \"Default response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n ...overrides,\n});\n\ndescribe(\"TamboThreadProvider\", () => {\n const mockThread = createMockThread();\n\n const mockThreadsApi = {\n messages: {\n create: jest.fn(),\n },\n retrieve: jest.fn(),\n advance: jest.fn(),\n advanceById: jest.fn(),\n } satisfies DeepPartial<\n TamboAI[\"beta\"][\"threads\"]\n > as unknown as TamboAI.Beta.Threads;\n\n const mockBeta = {\n threads: mockThreadsApi,\n } satisfies PartialTamboAI[\"beta\"];\n\n const mockTamboAI = {\n apiKey: \"\",\n beta: mockBeta,\n } satisfies PartialTamboAI as unknown as TamboAI;\n\n const mockRegistry: TamboComponent[] = [\n {\n name: \"TestOnly\",\n component: () => <div>TestOnly</div>,\n description: \"TestOnly\",\n propsSchema: z.object({\n test: z.string(),\n }),\n associatedTools: [\n {\n name: \"test-tool\",\n tool: jest.fn().mockResolvedValue(\"test-tool\"),\n description: \"test-tool\",\n toolSchema: z\n .function()\n .args(z.string().describe(\"test-param-description\"))\n .returns(z.string()),\n },\n ],\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={false}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n beforeEach(() => {\n jest.clearAllMocks();\n jest.mocked(mockThreadsApi.retrieve).mockResolvedValue(mockThread);\n jest\n .mocked(mockThreadsApi.messages.create)\n .mockResolvedValue(createMockMessage());\n jest\n .mocked(mockThreadsApi.advance)\n .mockResolvedValue(createMockAdvanceResponse());\n jest\n .mocked(mockThreadsApi.advanceById)\n .mockResolvedValue(createMockAdvanceResponse());\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n });\n\n it(\"should initialize with placeholder thread\", () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n expect(result.current.thread.id).toBe(\"placeholder\");\n expect(result.current.isIdle).toBe(true);\n expect(result.current.generationStage).toBe(GenerationStage.IDLE);\n });\n\n it(\"should switch to a new thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n expect(mockThreadsApi.retrieve).toHaveBeenCalledWith(\"test-thread-1\", {\n includeInternal: true,\n });\n expect(result.current.thread.id).toBe(\"test-thread-1\");\n });\n\n it(\"should start a new thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n result.current.startNewThread();\n });\n\n expect(result.current.thread.id).toBe(\"placeholder\");\n expect(result.current.isIdle).toBe(true);\n });\n\n it(\"should add a message to the thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n const testMessage: TamboThreadMessage = {\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n };\n\n await act(async () => {\n await result.current.addThreadMessage(testMessage, true);\n });\n\n expect(mockThreadsApi.messages.create).toHaveBeenCalledWith(\n \"test-thread-1\",\n {\n content: testMessage.content,\n role: testMessage.role,\n },\n );\n });\n\n it(\"should update a message in the thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n const testMessage: TamboThreadMessage = {\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Updated message\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n };\n\n await act(async () => {\n await result.current.updateThreadMessage(\n \"test-message-1\",\n testMessage,\n true,\n );\n });\n\n expect(mockThreadsApi.messages.create).toHaveBeenCalledWith(\n \"test-thread-1\",\n {\n content: testMessage.content,\n role: testMessage.role,\n },\n );\n });\n\n it(\"should send a message and update thread state\", async () => {\n const mockAdvanceResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"response-1\",\n content: [{ type: \"text\", text: \"Response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n jest\n .mocked(mockThreadsApi.advanceById)\n .mockResolvedValue(mockAdvanceResponse);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: false,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advanceById).toHaveBeenCalledWith(\"test-thread-1\", {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n toolCallCounts: {},\n additionalContext: mockCombinedContext,\n });\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n });\n\n it(\"should handle input value changes\", () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n act(() => {\n result.current.setInputValue(\"New input\");\n });\n\n expect(result.current.inputValue).toBe(\"New input\");\n });\n\n it(\"should handle streaming responses\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-1\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Create an async iterator mock\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n // Mock advanceStream to return our async iterator\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n });\n\n it(\"should handle tool calls during message processing.\", async () => {\n const mockToolCallResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"tool-call-1\",\n content: [{ type: \"text\", text: \"Tool response\" }],\n role: \"tool\",\n threadId: \"test-thread-1\",\n toolCallRequest: {\n toolName: \"test-tool\",\n parameters: [{ parameterName: \"test\", parameterValue: \"test\" }],\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n jest\n .mocked(mockThreadsApi.advanceById)\n .mockResolvedValueOnce(mockToolCallResponse)\n .mockResolvedValueOnce({\n responseMessageDto: {\n id: \"advance-response2\",\n content: [{ type: \"text\", text: \"response 2\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n });\n\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Use tool\", {\n threadId: \"test-thread-1\",\n streamResponse: false,\n });\n });\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n expect(mockRegistry[0]?.associatedTools?.[0]?.tool).toHaveBeenCalledWith(\n \"test\",\n );\n });\n\n describe(\"streaming behavior\", () => {\n it(\"should call advanceStream when streamResponse=true\", async () => {\n // Use wrapper with streaming=true to show that explicit streamResponse=true works\n const wrapperWithStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={true}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello streaming\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello streaming\" }],\n role: \"user\",\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n additionalContext: mockCombinedContext,\n },\n \"test-thread-1\",\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceById when streamResponse=false for existing thread\", async () => {\n // Use wrapper with streaming=true to show that explicit streamResponse=false overrides provider setting\n const wrapperWithStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={true}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello non-streaming\", {\n threadId: \"test-thread-1\",\n streamResponse: false,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advanceById).toHaveBeenCalledWith(\"test-thread-1\", {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello non-streaming\" }],\n role: \"user\",\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n additionalContext: mockCombinedContext,\n });\n\n // Should not call advance or advanceStream\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(advanceStream).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceById when streamResponse is undefined and provider streaming=false\", async () => {\n // Use wrapper with streaming=false to test that undefined streamResponse respects provider setting\n const wrapperWithoutStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={false}>\n {children}\n </TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithoutStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello default\", {\n threadId: \"test-thread-1\",\n // streamResponse is undefined, should use provider's streaming=false\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advanceById).toHaveBeenCalledWith(\"test-thread-1\", {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello default\" }],\n role: \"user\",\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n additionalContext: mockCombinedContext,\n });\n\n // Should not call advance or advanceStream\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(advanceStream).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceStream when streamResponse is undefined and provider streaming=true (default)\", async () => {\n // Use wrapper with streaming=true (default) to test that undefined streamResponse respects provider setting\n const wrapperWithDefaultStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithDefaultStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello default streaming\", {\n threadId: \"test-thread-1\",\n // streamResponse is undefined, should use provider's streaming=true (default)\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello default streaming\" }],\n role: \"user\",\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n additionalContext: mockCombinedContext,\n },\n \"test-thread-1\",\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n });\n\n it(\"should call advance when streamResponse=false for placeholder thread\", async () => {\n // Use wrapper with streaming=true to show that explicit streamResponse=false overrides provider setting\n const wrapperWithStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={true}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithStreaming,\n });\n\n // Start with placeholder thread (which is the default state)\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello new thread\", {\n threadId: \"placeholder\",\n streamResponse: false,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advance).toHaveBeenCalledWith({\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello new thread\" }],\n role: \"user\",\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n additionalContext: mockCombinedContext,\n });\n\n // Should not call advanceById or advanceStream\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n expect(advanceStream).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceStream when streamResponse=true for placeholder thread\", async () => {\n // Use wrapper with streaming=false to show that explicit streamResponse=true overrides provider setting\n const wrapperWithoutStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={false}>\n {children}\n </TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"new-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithoutStreaming,\n });\n\n // Start with placeholder thread (which is the default state)\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello streaming new thread\", {\n threadId: \"placeholder\",\n streamResponse: true,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello streaming new thread\" }],\n role: \"user\",\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n additionalContext: mockCombinedContext,\n },\n undefined, // threadId is undefined for placeholder thread\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n });\n });\n});\n"]}
1
+ {"version":3,"file":"tambo-thread-provider.test.js","sourceRoot":"","sources":["../../../src/providers/__tests__/tambo-thread-provider.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import TamboAI, { advanceStream } from \"@tambo-ai/typescript-sdk\";\nimport { act, renderHook } from \"@testing-library/react\";\nimport React from \"react\";\nimport { DeepPartial } from \"ts-essentials\";\nimport { z } from \"zod\";\nimport { TamboComponent } from \"../../model/component-metadata\";\nimport {\n GenerationStage,\n TamboThreadMessage,\n} from \"../../model/generate-component-response\";\nimport { serializeRegistry } from \"../../testing/tools\";\nimport { useTamboClient } from \"../tambo-client-provider\";\nimport { TamboRegistryProvider } from \"../tambo-registry-provider\";\nimport { TamboThreadProvider, useTamboThread } from \"../tambo-thread-provider\";\n\ntype PartialTamboAI = DeepPartial<TamboAI>;\n\n// Mock crypto.randomUUID\nObject.defineProperty(global, \"crypto\", {\n value: {\n randomUUID: jest.fn().mockReturnValue(\"test-uuid\"),\n },\n});\n\n// Mock the required providers\njest.mock(\"../tambo-client-provider\", () => ({\n useTamboClient: jest.fn(),\n}));\njest.mock(\"@tambo-ai/typescript-sdk\", () => ({\n advanceStream: jest.fn(),\n}));\n\n// Mock the system context and getCustomContext\njest.mock(\"../../util/registry\", () => ({\n ...jest.requireActual(\"../../util/registry\"),\n getSystemContext: () => ({\n localTime: \"7/24/2025, 6:26:21 PM\",\n timezone: \"America/New_York\",\n }),\n getCustomContext: () => ({\n message: \"additional instructions\",\n }),\n}));\n\n// Mock the combined context which includes the system context and the custom context\nconst mockCombinedContext = {\n system: {\n localTime: \"7/24/2025, 6:26:21 PM\",\n timezone: \"America/New_York\",\n },\n ...{\n custom: {\n message: \"additional instructions\",\n },\n },\n};\n\n// Test utilities\nconst createMockMessage = (\n overrides: Partial<TamboThreadMessage> = {},\n): TamboThreadMessage => ({\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n ...overrides,\n});\n\nconst createMockThread = (\n overrides: Partial<TamboAI.Beta.Threads.Thread> = {},\n) => ({\n id: \"test-thread-1\",\n messages: [],\n createdAt: \"2024-01-01T00:00:00Z\",\n projectId: \"test-project\",\n updatedAt: \"2024-01-01T00:00:00Z\",\n metadata: {},\n ...overrides,\n});\n\nconst createMockAdvanceResponse = (\n overrides: Partial<TamboAI.Beta.Threads.ThreadAdvanceResponse> = {},\n): TamboAI.Beta.Threads.ThreadAdvanceResponse => ({\n responseMessageDto: {\n id: \"test-uuid\",\n content: [{ type: \"text\" as const, text: \"Default response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n ...overrides,\n});\n\ndescribe(\"TamboThreadProvider\", () => {\n const mockThread = createMockThread();\n\n const mockThreadsApi = {\n messages: {\n create: jest.fn(),\n },\n retrieve: jest.fn(),\n advance: jest.fn(),\n advanceById: jest.fn(),\n } satisfies DeepPartial<\n TamboAI[\"beta\"][\"threads\"]\n > as unknown as TamboAI.Beta.Threads;\n\n const mockBeta = {\n threads: mockThreadsApi,\n } satisfies PartialTamboAI[\"beta\"];\n\n const mockTamboAI = {\n apiKey: \"\",\n beta: mockBeta,\n } satisfies PartialTamboAI as unknown as TamboAI;\n\n const mockRegistry: TamboComponent[] = [\n {\n name: \"TestOnly\",\n component: () => <div>TestOnly</div>,\n description: \"TestOnly\",\n propsSchema: z.object({\n test: z.string(),\n }),\n associatedTools: [\n {\n name: \"test-tool\",\n tool: jest.fn().mockResolvedValue(\"test-tool\"),\n description: \"test-tool\",\n toolSchema: z\n .function()\n .args(z.string().describe(\"test-param-description\"))\n .returns(z.string()),\n },\n ],\n },\n ];\n\n const wrapper = ({ children }: { children: React.ReactNode }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={false}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n beforeEach(() => {\n jest.clearAllMocks();\n jest.mocked(mockThreadsApi.retrieve).mockResolvedValue(mockThread);\n jest\n .mocked(mockThreadsApi.messages.create)\n .mockResolvedValue(createMockMessage());\n jest\n .mocked(mockThreadsApi.advance)\n .mockResolvedValue(createMockAdvanceResponse());\n jest\n .mocked(mockThreadsApi.advanceById)\n .mockResolvedValue(createMockAdvanceResponse());\n jest.mocked(useTamboClient).mockReturnValue(mockTamboAI);\n });\n\n it(\"should initialize with placeholder thread\", () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n expect(result.current.thread.id).toBe(\"placeholder\");\n expect(result.current.isIdle).toBe(true);\n expect(result.current.generationStage).toBe(GenerationStage.IDLE);\n });\n\n it(\"should switch to a new thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.switchCurrentThread(\"test-thread-1\");\n });\n\n expect(mockThreadsApi.retrieve).toHaveBeenCalledWith(\"test-thread-1\", {\n includeInternal: true,\n });\n expect(result.current.thread.id).toBe(\"test-thread-1\");\n });\n\n it(\"should start a new thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n result.current.startNewThread();\n });\n\n expect(result.current.thread.id).toBe(\"placeholder\");\n expect(result.current.isIdle).toBe(true);\n });\n\n it(\"should add a message to the thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n const testMessage: TamboThreadMessage = {\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n };\n\n await act(async () => {\n await result.current.addThreadMessage(testMessage, true);\n });\n\n expect(mockThreadsApi.messages.create).toHaveBeenCalledWith(\n \"test-thread-1\",\n {\n content: testMessage.content,\n role: testMessage.role,\n },\n );\n });\n\n it(\"should update a message in the thread\", async () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n const testMessage: TamboThreadMessage = {\n id: \"test-message-1\",\n content: [{ type: \"text\", text: \"Updated message\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n createdAt: new Date().toISOString(),\n componentState: {},\n };\n\n await act(async () => {\n await result.current.updateThreadMessage(\n \"test-message-1\",\n testMessage,\n true,\n );\n });\n\n expect(mockThreadsApi.messages.create).toHaveBeenCalledWith(\n \"test-thread-1\",\n {\n content: testMessage.content,\n role: testMessage.role,\n },\n );\n });\n\n it(\"should send a message and update thread state\", async () => {\n const mockAdvanceResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"response-1\",\n content: [{ type: \"text\", text: \"Response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n jest\n .mocked(mockThreadsApi.advanceById)\n .mockResolvedValue(mockAdvanceResponse);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: false,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advanceById).toHaveBeenCalledWith(\"test-thread-1\", {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello\" }],\n role: \"user\",\n additionalContext: mockCombinedContext,\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n toolCallCounts: {},\n });\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n });\n\n it(\"should handle input value changes\", () => {\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n act(() => {\n result.current.setInputValue(\"New input\");\n });\n\n expect(result.current.inputValue).toBe(\"New input\");\n });\n\n it(\"should handle streaming responses\", async () => {\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-1\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n // Create an async iterator mock\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n // Mock advanceStream to return our async iterator\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n });\n });\n\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n });\n\n it(\"should handle tool calls during message processing.\", async () => {\n const mockToolCallResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"tool-call-1\",\n content: [{ type: \"text\", text: \"Tool response\" }],\n role: \"tool\",\n threadId: \"test-thread-1\",\n toolCallRequest: {\n toolName: \"test-tool\",\n parameters: [{ parameterName: \"test\", parameterValue: \"test\" }],\n },\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n jest\n .mocked(mockThreadsApi.advanceById)\n .mockResolvedValueOnce(mockToolCallResponse)\n .mockResolvedValueOnce({\n responseMessageDto: {\n id: \"advance-response2\",\n content: [{ type: \"text\", text: \"response 2\" }],\n role: \"user\",\n threadId: \"test-thread-1\",\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n });\n\n const { result } = renderHook(() => useTamboThread(), { wrapper });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Use tool\", {\n threadId: \"test-thread-1\",\n streamResponse: false,\n });\n });\n expect(result.current.generationStage).toBe(GenerationStage.COMPLETE);\n expect(mockRegistry[0]?.associatedTools?.[0]?.tool).toHaveBeenCalledWith(\n \"test\",\n );\n });\n\n describe(\"streaming behavior\", () => {\n it(\"should call advanceStream when streamResponse=true\", async () => {\n // Use wrapper with streaming=true to show that explicit streamResponse=true works\n const wrapperWithStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={true}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello streaming\", {\n threadId: \"test-thread-1\",\n streamResponse: true,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello streaming\" }],\n role: \"user\",\n additionalContext: mockCombinedContext,\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n },\n \"test-thread-1\",\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceById when streamResponse=false for existing thread\", async () => {\n // Use wrapper with streaming=true to show that explicit streamResponse=false overrides provider setting\n const wrapperWithStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={true}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello non-streaming\", {\n threadId: \"test-thread-1\",\n streamResponse: false,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advanceById).toHaveBeenCalledWith(\"test-thread-1\", {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello non-streaming\" }],\n role: \"user\",\n additionalContext: mockCombinedContext,\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n });\n\n // Should not call advance or advanceStream\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(advanceStream).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceById when streamResponse is undefined and provider streaming=false\", async () => {\n // Use wrapper with streaming=false to test that undefined streamResponse respects provider setting\n const wrapperWithoutStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={false}>\n {children}\n </TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithoutStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello default\", {\n threadId: \"test-thread-1\",\n // streamResponse is undefined, should use provider's streaming=false\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advanceById).toHaveBeenCalledWith(\"test-thread-1\", {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello default\" }],\n role: \"user\",\n additionalContext: mockCombinedContext,\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n });\n\n // Should not call advance or advanceStream\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(advanceStream).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceStream when streamResponse is undefined and provider streaming=true (default)\", async () => {\n // Use wrapper with streaming=true (default) to test that undefined streamResponse respects provider setting\n const wrapperWithDefaultStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"test-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithDefaultStreaming,\n });\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello default streaming\", {\n threadId: \"test-thread-1\",\n // streamResponse is undefined, should use provider's streaming=true (default)\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello default streaming\" }],\n role: \"user\",\n additionalContext: mockCombinedContext,\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n },\n \"test-thread-1\",\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n });\n\n it(\"should call advance when streamResponse=false for placeholder thread\", async () => {\n // Use wrapper with streaming=true to show that explicit streamResponse=false overrides provider setting\n const wrapperWithStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={true}>{children}</TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithStreaming,\n });\n\n // Start with placeholder thread (which is the default state)\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello new thread\", {\n threadId: \"placeholder\",\n streamResponse: false,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(mockThreadsApi.advance).toHaveBeenCalledWith({\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello new thread\" }],\n role: \"user\",\n additionalContext: mockCombinedContext,\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n });\n\n // Should not call advanceById or advanceStream\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n expect(advanceStream).not.toHaveBeenCalled();\n });\n\n it(\"should call advanceStream when streamResponse=true for placeholder thread\", async () => {\n // Use wrapper with streaming=false to show that explicit streamResponse=true overrides provider setting\n const wrapperWithoutStreaming = ({\n children,\n }: {\n children: React.ReactNode;\n }) => (\n <TamboRegistryProvider components={mockRegistry}>\n <TamboThreadProvider streaming={false}>\n {children}\n </TamboThreadProvider>\n </TamboRegistryProvider>\n );\n\n const mockStreamResponse: TamboAI.Beta.Threads.ThreadAdvanceResponse = {\n responseMessageDto: {\n id: \"stream-response\",\n content: [{ type: \"text\", text: \"Streaming response\" }],\n role: \"assistant\",\n threadId: \"new-thread-1\",\n component: undefined,\n componentState: {},\n createdAt: new Date().toISOString(),\n },\n generationStage: GenerationStage.COMPLETE,\n mcpAccessToken: \"test-mcp-access-token\",\n };\n\n const mockAsyncIterator = {\n [Symbol.asyncIterator]: async function* () {\n yield mockStreamResponse;\n },\n };\n\n jest.mocked(advanceStream).mockResolvedValue(mockAsyncIterator);\n\n const { result } = renderHook(() => useTamboThread(), {\n wrapper: wrapperWithoutStreaming,\n });\n\n // Start with placeholder thread (which is the default state)\n expect(result.current.thread.id).toBe(\"placeholder\");\n\n await act(async () => {\n await result.current.sendThreadMessage(\"Hello streaming new thread\", {\n threadId: \"placeholder\",\n streamResponse: true,\n additionalContext: {\n custom: {\n message: \"additional instructions\",\n },\n },\n });\n });\n\n expect(advanceStream).toHaveBeenCalledWith(\n mockTamboAI,\n {\n messageToAppend: {\n content: [{ type: \"text\", text: \"Hello streaming new thread\" }],\n role: \"user\",\n additionalContext: mockCombinedContext,\n },\n availableComponents: serializeRegistry(mockRegistry),\n contextKey: undefined,\n clientTools: [],\n forceToolChoice: undefined,\n toolCallCounts: {},\n },\n undefined, // threadId is undefined for placeholder thread\n );\n\n // Should not call advance or advanceById\n expect(mockThreadsApi.advance).not.toHaveBeenCalled();\n expect(mockThreadsApi.advanceById).not.toHaveBeenCalled();\n });\n });\n});\n"]}
@@ -1,8 +1,8 @@
1
1
  export type { TamboComponent, TamboTool } from "../model/component-metadata";
2
2
  export { TamboClientProvider, useTamboClient } from "./tambo-client-provider";
3
3
  export { TamboComponentProvider, useTamboComponent, } from "./tambo-component-provider";
4
- export { TamboPropStreamProvider, useTamboStream, } from "./tambo-prop-stream-provider";
5
- export type { TamboPropStreamProviderProps, LoadingProps, EmptyProps, CompleteProps, } from "./tambo-prop-stream-provider";
4
+ export { Pending, Streaming, Success, TamboPropStreamProvider, useTamboStream, } from "./tambo-prop-stream-provider";
5
+ export type { StreamStateComponentProps, StreamStatus, TamboPropStreamContextValue, } from "./tambo-prop-stream-provider";
6
6
  export { TamboContext, TamboProvider, useTambo } from "./tambo-provider";
7
7
  export { TamboRegistryProvider, useTamboRegistry, type TamboRegistryContext, } from "./tambo-registry-provider";
8
8
  export { TamboStubProvider, type TamboStubProviderProps } from "./tambo-stubs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,4BAA4B,EAC5B,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,OAAO,EACP,SAAS,EACT,OAAO,EACP,uBAAuB,EACvB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,yBAAyB,EACzB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,yBAAyB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useTamboThread = exports.TamboThreadProvider = exports.TamboThreadContext = exports.TamboStubProvider = exports.useTamboRegistry = exports.TamboRegistryProvider = exports.useTambo = exports.TamboProvider = exports.TamboContext = exports.useTamboStream = exports.TamboPropStreamProvider = exports.useTamboComponent = exports.TamboComponentProvider = exports.useTamboClient = exports.TamboClientProvider = void 0;
3
+ exports.useTamboThread = exports.TamboThreadProvider = exports.TamboThreadContext = exports.TamboStubProvider = exports.useTamboRegistry = exports.TamboRegistryProvider = exports.useTambo = exports.TamboProvider = exports.TamboContext = exports.useTamboStream = exports.TamboPropStreamProvider = exports.Success = exports.Streaming = exports.Pending = exports.useTamboComponent = exports.TamboComponentProvider = exports.useTamboClient = exports.TamboClientProvider = void 0;
4
4
  var tambo_client_provider_1 = require("./tambo-client-provider");
5
5
  Object.defineProperty(exports, "TamboClientProvider", { enumerable: true, get: function () { return tambo_client_provider_1.TamboClientProvider; } });
6
6
  Object.defineProperty(exports, "useTamboClient", { enumerable: true, get: function () { return tambo_client_provider_1.useTamboClient; } });
@@ -8,6 +8,9 @@ var tambo_component_provider_1 = require("./tambo-component-provider");
8
8
  Object.defineProperty(exports, "TamboComponentProvider", { enumerable: true, get: function () { return tambo_component_provider_1.TamboComponentProvider; } });
9
9
  Object.defineProperty(exports, "useTamboComponent", { enumerable: true, get: function () { return tambo_component_provider_1.useTamboComponent; } });
10
10
  var tambo_prop_stream_provider_1 = require("./tambo-prop-stream-provider");
11
+ Object.defineProperty(exports, "Pending", { enumerable: true, get: function () { return tambo_prop_stream_provider_1.Pending; } });
12
+ Object.defineProperty(exports, "Streaming", { enumerable: true, get: function () { return tambo_prop_stream_provider_1.Streaming; } });
13
+ Object.defineProperty(exports, "Success", { enumerable: true, get: function () { return tambo_prop_stream_provider_1.Success; } });
11
14
  Object.defineProperty(exports, "TamboPropStreamProvider", { enumerable: true, get: function () { return tambo_prop_stream_provider_1.TamboPropStreamProvider; } });
12
15
  Object.defineProperty(exports, "useTamboStream", { enumerable: true, get: function () { return tambo_prop_stream_provider_1.useTamboStream; } });
13
16
  var tambo_provider_1 = require("./tambo-provider");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;AACA,iEAA8E;AAArE,4HAAA,mBAAmB,OAAA;AAAE,uHAAA,cAAc,OAAA;AAC5C,uEAGoC;AAFlC,kIAAA,sBAAsB,OAAA;AACtB,6HAAA,iBAAiB,OAAA;AAEnB,2EAGsC;AAFpC,qIAAA,uBAAuB,OAAA;AACvB,4HAAA,cAAc,OAAA;AAQhB,mDAAyE;AAAhE,8GAAA,YAAY,OAAA;AAAE,+GAAA,aAAa,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC9C,qEAImC;AAHjC,gIAAA,qBAAqB,OAAA;AACrB,2HAAA,gBAAgB,OAAA;AAGlB,6CAA+E;AAAtE,gHAAA,iBAAiB,OAAA;AAC1B,iEAIiC;AAH/B,2HAAA,kBAAkB,OAAA;AAClB,4HAAA,mBAAmB,OAAA;AACnB,uHAAA,cAAc,OAAA","sourcesContent":["export type { TamboComponent, TamboTool } from \"../model/component-metadata\";\nexport { TamboClientProvider, useTamboClient } from \"./tambo-client-provider\";\nexport {\n TamboComponentProvider,\n useTamboComponent,\n} from \"./tambo-component-provider\";\nexport {\n TamboPropStreamProvider,\n useTamboStream,\n} from \"./tambo-prop-stream-provider\";\nexport type {\n TamboPropStreamProviderProps,\n LoadingProps,\n EmptyProps,\n CompleteProps,\n} from \"./tambo-prop-stream-provider\";\nexport { TamboContext, TamboProvider, useTambo } from \"./tambo-provider\";\nexport {\n TamboRegistryProvider,\n useTamboRegistry,\n type TamboRegistryContext,\n} from \"./tambo-registry-provider\";\nexport { TamboStubProvider, type TamboStubProviderProps } from \"./tambo-stubs\";\nexport {\n TamboThreadContext,\n TamboThreadProvider,\n useTamboThread,\n} from \"./tambo-thread-provider\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;AACA,iEAA8E;AAArE,4HAAA,mBAAmB,OAAA;AAAE,uHAAA,cAAc,OAAA;AAC5C,uEAGoC;AAFlC,kIAAA,sBAAsB,OAAA;AACtB,6HAAA,iBAAiB,OAAA;AAEnB,2EAMsC;AALpC,qHAAA,OAAO,OAAA;AACP,uHAAA,SAAS,OAAA;AACT,qHAAA,OAAO,OAAA;AACP,qIAAA,uBAAuB,OAAA;AACvB,4HAAA,cAAc,OAAA;AAOhB,mDAAyE;AAAhE,8GAAA,YAAY,OAAA;AAAE,+GAAA,aAAa,OAAA;AAAE,0GAAA,QAAQ,OAAA;AAC9C,qEAImC;AAHjC,gIAAA,qBAAqB,OAAA;AACrB,2HAAA,gBAAgB,OAAA;AAGlB,6CAA+E;AAAtE,gHAAA,iBAAiB,OAAA;AAC1B,iEAIiC;AAH/B,2HAAA,kBAAkB,OAAA;AAClB,4HAAA,mBAAmB,OAAA;AACnB,uHAAA,cAAc,OAAA","sourcesContent":["export type { TamboComponent, TamboTool } from \"../model/component-metadata\";\nexport { TamboClientProvider, useTamboClient } from \"./tambo-client-provider\";\nexport {\n TamboComponentProvider,\n useTamboComponent,\n} from \"./tambo-component-provider\";\nexport {\n Pending,\n Streaming,\n Success,\n TamboPropStreamProvider,\n useTamboStream,\n} from \"./tambo-prop-stream-provider\";\nexport type {\n StreamStateComponentProps,\n StreamStatus,\n TamboPropStreamContextValue,\n} from \"./tambo-prop-stream-provider\";\nexport { TamboContext, TamboProvider, useTambo } from \"./tambo-provider\";\nexport {\n TamboRegistryProvider,\n useTamboRegistry,\n type TamboRegistryContext,\n} from \"./tambo-registry-provider\";\nexport { TamboStubProvider, type TamboStubProviderProps } from \"./tambo-stubs\";\nexport {\n TamboThreadContext,\n TamboThreadProvider,\n useTamboThread,\n} from \"./tambo-thread-provider\";\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The TamboPropsStreamProvider provides a context for managing stream states
3
+ * with compound components for Pending, Streaming, and Success states.
4
+ * @param children - The children to wrap
5
+ * @returns The TamboPropStreamProvider component
6
+ */
7
+ export declare const TamboPropStreamProvider: import("react").FC<{
8
+ children?: import("react").ReactNode | undefined;
9
+ }> & {
10
+ Streaming: import("react").FC<import("./types").StreamStateComponentProps>;
11
+ Pending: import("react").FC<import("./types").StreamStateComponentProps>;
12
+ Success: import("react").FC<import("./types").StreamStateComponentProps>;
13
+ };
14
+ export { Pending } from "./pending";
15
+ export { useTamboStream } from "./provider";
16
+ export { Streaming } from "./streaming";
17
+ export { Success } from "./success";
18
+ export * from "./types";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/tambo-prop-stream-provider/index.tsx"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB;;;;;;CAOnC,CAAC;AAGF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Success = exports.Streaming = exports.useTamboStream = exports.Pending = exports.TamboPropStreamProvider = void 0;
18
+ const pending_1 = require("./pending");
19
+ const provider_1 = require("./provider");
20
+ const streaming_1 = require("./streaming");
21
+ const success_1 = require("./success");
22
+ /**
23
+ * The TamboPropsStreamProvider provides a context for managing stream states
24
+ * with compound components for Pending, Streaming, and Success states.
25
+ * @param children - The children to wrap
26
+ * @returns The TamboPropStreamProvider component
27
+ */
28
+ exports.TamboPropStreamProvider = Object.assign(provider_1.TamboPropStreamProviderComponent, {
29
+ Streaming: streaming_1.Streaming,
30
+ Pending: pending_1.Pending,
31
+ Success: success_1.Success,
32
+ });
33
+ // Re-export components for individual use
34
+ var pending_2 = require("./pending");
35
+ Object.defineProperty(exports, "Pending", { enumerable: true, get: function () { return pending_2.Pending; } });
36
+ var provider_2 = require("./provider");
37
+ Object.defineProperty(exports, "useTamboStream", { enumerable: true, get: function () { return provider_2.useTamboStream; } });
38
+ var streaming_2 = require("./streaming");
39
+ Object.defineProperty(exports, "Streaming", { enumerable: true, get: function () { return streaming_2.Streaming; } });
40
+ var success_2 = require("./success");
41
+ Object.defineProperty(exports, "Success", { enumerable: true, get: function () { return success_2.Success; } });
42
+ __exportStar(require("./types"), exports);
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/tambo-prop-stream-provider/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uCAAoC;AACpC,yCAA8D;AAC9D,2CAAwC;AACxC,uCAAoC;AAEpC;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAClD,2CAAgC,EAChC;IACE,SAAS,EAAT,qBAAS;IACT,OAAO,EAAP,iBAAO;IACP,OAAO,EAAP,iBAAO;CACR,CACF,CAAC;AAEF,0CAA0C;AAC1C,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,0CAAwB","sourcesContent":["import { Pending } from \"./pending\";\nimport { TamboPropStreamProviderComponent } from \"./provider\";\nimport { Streaming } from \"./streaming\";\nimport { Success } from \"./success\";\n\n/**\n * The TamboPropsStreamProvider provides a context for managing stream states\n * with compound components for Pending, Streaming, and Success states.\n * @param children - The children to wrap\n * @returns The TamboPropStreamProvider component\n */\nexport const TamboPropStreamProvider = Object.assign(\n TamboPropStreamProviderComponent,\n {\n Streaming,\n Pending,\n Success,\n },\n);\n\n// Re-export components for individual use\nexport { Pending } from \"./pending\";\nexport { useTamboStream } from \"./provider\";\nexport { Streaming } from \"./streaming\";\nexport { Success } from \"./success\";\nexport * from \"./types\";\n"]}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import { StreamStateComponentProps } from "./types";
3
+ /**
4
+ * Pending component that renders children when the stream has no data
5
+ * @param props - The props for the Pending component
6
+ * @param props.streamKey - The key to identify this pending state
7
+ * @param props.children - The children to render when pending
8
+ * @param props.className - Optional className for styling
9
+ * @returns The Pending component
10
+ */
11
+ export declare const Pending: React.FC<StreamStateComponentProps>;
12
+ //# sourceMappingURL=pending.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending.d.ts","sourceRoot":"","sources":["../../../src/providers/tambo-prop-stream-provider/pending.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAsB,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAExE;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA0BvD,CAAC"}
@@ -0,0 +1,31 @@
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
+ exports.Pending = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const provider_1 = require("./provider");
9
+ const types_1 = require("./types");
10
+ /**
11
+ * Pending component that renders children when the stream has no data
12
+ * @param props - The props for the Pending component
13
+ * @param props.streamKey - The key to identify this pending state
14
+ * @param props.children - The children to render when pending
15
+ * @param props.className - Optional className for styling
16
+ * @returns The Pending component
17
+ */
18
+ const Pending = ({ streamKey = types_1.DEFAULT_STREAM_KEY, children, className, }) => {
19
+ const { getStatusForKey } = (0, provider_1.useTamboStream)();
20
+ const status = getStatusForKey(streamKey);
21
+ // Show pending state when no active status (prop doesn't exist or is pending)
22
+ const hasActiveStatus = status.isStreaming || status.isSuccess || status.isError;
23
+ const shouldShowPending = !hasActiveStatus;
24
+ if (!shouldShowPending) {
25
+ return null;
26
+ }
27
+ return (react_1.default.createElement("div", { className: className, "data-stream-key": streamKey, "data-stream-state": "pending" }, children));
28
+ };
29
+ exports.Pending = Pending;
30
+ exports.Pending.displayName = "TamboPropStreamProvider.Pending";
31
+ //# sourceMappingURL=pending.js.map