@assistant-ui/react 0.10.24 → 0.10.26

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 (267) hide show
  1. package/dist/api/{ContentPartRuntime.d.ts → MessagePartRuntime.d.ts} +14 -14
  2. package/dist/api/{ContentPartRuntime.d.ts.map → MessagePartRuntime.d.ts.map} +1 -1
  3. package/dist/api/{ContentPartRuntime.js → MessagePartRuntime.js} +6 -6
  4. package/dist/api/{ContentPartRuntime.js.map → MessagePartRuntime.js.map} +1 -1
  5. package/dist/api/MessageRuntime.d.ts +8 -8
  6. package/dist/api/MessageRuntime.js +17 -17
  7. package/dist/api/MessageRuntime.js.map +1 -1
  8. package/dist/api/RuntimePathTypes.d.ts +2 -2
  9. package/dist/api/ThreadListRuntime.d.ts +3 -0
  10. package/dist/api/ThreadListRuntime.d.ts.map +1 -1
  11. package/dist/api/ThreadListRuntime.js +5 -1
  12. package/dist/api/ThreadListRuntime.js.map +1 -1
  13. package/dist/api/ThreadRuntime.d.ts +5 -0
  14. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  15. package/dist/api/ThreadRuntime.js +1 -0
  16. package/dist/api/ThreadRuntime.js.map +1 -1
  17. package/dist/api/index.d.ts +2 -1
  18. package/dist/api/index.d.ts.map +1 -1
  19. package/dist/cloud/auiV0.d.ts +2 -2
  20. package/dist/cloud/auiV0.js +1 -1
  21. package/dist/cloud/auiV0.js.map +1 -1
  22. package/dist/context/providers/MessagePartRuntimeProvider.d.ts +9 -0
  23. package/dist/context/providers/{ContentPartRuntimeProvider.d.ts.map → MessagePartRuntimeProvider.d.ts.map} +1 -1
  24. package/dist/context/providers/{ContentPartRuntimeProvider.js → MessagePartRuntimeProvider.js} +9 -9
  25. package/dist/context/providers/MessagePartRuntimeProvider.js.map +1 -0
  26. package/dist/context/providers/{TextContentPartProvider.d.ts → TextMessagePartProvider.d.ts} +3 -3
  27. package/dist/context/providers/{TextContentPartProvider.d.ts.map → TextMessagePartProvider.d.ts.map} +1 -1
  28. package/dist/context/providers/{TextContentPartProvider.js → TextMessagePartProvider.js} +19 -19
  29. package/dist/context/providers/{TextContentPartProvider.js.map → TextMessagePartProvider.js.map} +1 -1
  30. package/dist/context/providers/index.d.ts +2 -1
  31. package/dist/context/providers/index.d.ts.map +1 -1
  32. package/dist/context/providers/index.js +4 -2
  33. package/dist/context/providers/index.js.map +1 -1
  34. package/dist/context/react/AttachmentContext.d.ts +72 -72
  35. package/dist/context/react/MessagePartContext.d.ts +41 -0
  36. package/dist/context/react/{ContentPartContext.d.ts.map → MessagePartContext.d.ts.map} +1 -1
  37. package/dist/context/react/MessagePartContext.js +25 -0
  38. package/dist/context/react/MessagePartContext.js.map +1 -0
  39. package/dist/context/react/index.d.ts +1 -1
  40. package/dist/context/react/index.js +3 -3
  41. package/dist/context/react/index.js.map +1 -1
  42. package/dist/context/stores/AssistantToolUIs.d.ts +3 -3
  43. package/dist/context/stores/AssistantToolUIs.js.map +1 -1
  44. package/dist/model-context/useAssistantTool.d.ts +2 -2
  45. package/dist/model-context/useAssistantTool.js.map +1 -1
  46. package/dist/model-context/useAssistantToolUI.d.ts +2 -2
  47. package/dist/model-context/useAssistantToolUI.js.map +1 -1
  48. package/dist/model-context/useInlineRender.d.ts +2 -2
  49. package/dist/model-context/useInlineRender.js.map +1 -1
  50. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +2 -0
  51. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  52. package/dist/primitives/assistantModal/AssistantModalContent.js +2 -1
  53. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  54. package/dist/primitives/index.d.ts +12 -6
  55. package/dist/primitives/index.d.ts.map +1 -1
  56. package/dist/primitives/index.js +23 -11
  57. package/dist/primitives/index.js.map +1 -1
  58. package/dist/primitives/message/MessageParts.d.ts +116 -0
  59. package/dist/primitives/message/MessageParts.d.ts.map +1 -0
  60. package/dist/primitives/message/MessageParts.js +208 -0
  61. package/dist/primitives/message/MessageParts.js.map +1 -0
  62. package/dist/primitives/message/index.d.ts +2 -1
  63. package/dist/primitives/message/index.d.ts.map +1 -1
  64. package/dist/primitives/message/index.js +4 -2
  65. package/dist/primitives/message/index.js.map +1 -1
  66. package/dist/primitives/{contentPart/ContentPartImage.d.ts → messagePart/MessagePartImage.d.ts} +8 -8
  67. package/dist/primitives/{contentPart/ContentPartImage.d.ts.map → messagePart/MessagePartImage.d.ts.map} +1 -1
  68. package/dist/primitives/messagePart/MessagePartImage.js +16 -0
  69. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -0
  70. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +6 -0
  71. package/dist/primitives/{contentPart/ContentPartInProgress.d.ts.map → messagePart/MessagePartInProgress.d.ts.map} +1 -1
  72. package/dist/primitives/messagePart/MessagePartInProgress.js +13 -0
  73. package/dist/primitives/messagePart/MessagePartInProgress.js.map +1 -0
  74. package/dist/primitives/{contentPart/ContentPartText.d.ts → messagePart/MessagePartText.d.ts} +6 -6
  75. package/dist/primitives/{contentPart/ContentPartText.d.ts.map → messagePart/MessagePartText.d.ts.map} +1 -1
  76. package/dist/primitives/messagePart/MessagePartText.js +18 -0
  77. package/dist/primitives/{contentPart/ContentPartText.js.map → messagePart/MessagePartText.js.map} +1 -1
  78. package/dist/primitives/messagePart/index.d.ts +4 -0
  79. package/dist/primitives/{contentPart → messagePart}/index.d.ts.map +1 -1
  80. package/dist/primitives/messagePart/index.js +10 -0
  81. package/dist/primitives/messagePart/index.js.map +1 -0
  82. package/dist/primitives/messagePart/useMessagePartFile.d.ts +5 -0
  83. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -0
  84. package/dist/primitives/messagePart/useMessagePartFile.js +18 -0
  85. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -0
  86. package/dist/primitives/messagePart/useMessagePartImage.d.ts +5 -0
  87. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -0
  88. package/dist/primitives/messagePart/useMessagePartImage.js +18 -0
  89. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -0
  90. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +5 -0
  91. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -0
  92. package/dist/primitives/messagePart/useMessagePartReasoning.js +18 -0
  93. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -0
  94. package/dist/primitives/messagePart/useMessagePartSource.d.ts +5 -0
  95. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -0
  96. package/dist/primitives/messagePart/useMessagePartSource.js +18 -0
  97. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -0
  98. package/dist/primitives/messagePart/useMessagePartText.d.ts +7 -0
  99. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -0
  100. package/dist/primitives/messagePart/useMessagePartText.js +18 -0
  101. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -0
  102. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts +1 -0
  103. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts.map +1 -1
  104. package/dist/runtimes/core/BaseThreadRuntimeCore.js.map +1 -1
  105. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +1 -0
  106. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
  107. package/dist/runtimes/core/ThreadRuntimeCore.d.ts +1 -0
  108. package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
  109. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +2 -0
  110. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  111. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +1 -0
  112. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
  113. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +3 -0
  114. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
  115. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +1 -0
  116. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
  117. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +3 -8
  118. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
  119. package/dist/runtimes/external-store/ThreadMessageLike.d.ts +3 -3
  120. package/dist/runtimes/external-store/ThreadMessageLike.js +4 -4
  121. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  122. package/dist/runtimes/external-store/createMessageConverter.js +3 -3
  123. package/dist/runtimes/external-store/createMessageConverter.js.map +1 -1
  124. package/dist/runtimes/external-store/external-message-converter.js.map +1 -1
  125. package/dist/runtimes/local/ChatModelAdapter.d.ts +4 -4
  126. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +1 -0
  127. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
  128. package/dist/runtimes/local/LocalThreadListRuntimeCore.js +3 -0
  129. package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
  130. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +2 -0
  131. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  132. package/dist/runtimes/local/LocalThreadRuntimeCore.js +12 -1
  133. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  134. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -1
  135. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +1 -0
  136. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -1
  137. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -0
  138. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  139. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +3 -0
  140. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  141. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +3 -0
  142. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  143. package/dist/runtimes/utils/MessageRepository.js +1 -1
  144. package/dist/runtimes/utils/MessageRepository.js.map +1 -1
  145. package/dist/tests/setup.js +8 -8
  146. package/dist/tests/setup.js.map +1 -1
  147. package/dist/types/AssistantTypes.d.ts +15 -15
  148. package/dist/types/AttachmentTypes.d.ts +3 -3
  149. package/dist/types/MessagePartComponentTypes.d.ts +25 -0
  150. package/dist/types/{ContentPartComponentTypes.d.ts.map → MessagePartComponentTypes.d.ts.map} +1 -1
  151. package/dist/types/MessagePartComponentTypes.js +1 -0
  152. package/dist/types/index.d.ts +4 -2
  153. package/dist/types/index.d.ts.map +1 -1
  154. package/dist/utils/getThreadMessageText.js.map +1 -1
  155. package/dist/utils/smooth/SmoothContext.js +3 -3
  156. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  157. package/dist/utils/smooth/useSmooth.d.ts +3 -3
  158. package/dist/utils/smooth/useSmooth.js.map +1 -1
  159. package/dist/utils/useToolArgsFieldStatus.js +3 -3
  160. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  161. package/package.json +8 -8
  162. package/src/api/{ContentPartRuntime.ts → MessagePartRuntime.ts} +20 -20
  163. package/src/api/MessageRuntime.ts +32 -32
  164. package/src/api/RuntimePathTypes.ts +2 -2
  165. package/src/api/ThreadListRuntime.ts +8 -0
  166. package/src/api/ThreadRuntime.ts +6 -0
  167. package/src/api/index.ts +11 -3
  168. package/src/cloud/auiV0.ts +3 -3
  169. package/src/context/providers/MessagePartRuntimeProvider.tsx +42 -0
  170. package/src/context/providers/{TextContentPartProvider.tsx → TextMessagePartProvider.tsx} +27 -27
  171. package/src/context/providers/index.ts +4 -1
  172. package/src/context/react/MessagePartContext.ts +37 -0
  173. package/src/context/react/index.ts +1 -1
  174. package/src/context/stores/AssistantToolUIs.ts +4 -4
  175. package/src/model-context/useAssistantTool.tsx +2 -2
  176. package/src/model-context/useAssistantToolUI.tsx +2 -2
  177. package/src/model-context/useInlineRender.tsx +3 -3
  178. package/src/primitives/assistantModal/AssistantModalContent.tsx +5 -1
  179. package/src/primitives/index.ts +14 -6
  180. package/src/primitives/message/MessageParts.tsx +423 -0
  181. package/src/primitives/message/index.ts +2 -1
  182. package/src/primitives/messagePart/MessagePartImage.tsx +39 -0
  183. package/src/primitives/messagePart/MessagePartInProgress.tsx +19 -0
  184. package/src/primitives/{contentPart/ContentPartText.tsx → messagePart/MessagePartText.tsx} +10 -10
  185. package/src/primitives/messagePart/index.ts +3 -0
  186. package/src/primitives/messagePart/useMessagePartFile.tsx +18 -0
  187. package/src/primitives/messagePart/useMessagePartImage.tsx +18 -0
  188. package/src/primitives/messagePart/useMessagePartReasoning.tsx +18 -0
  189. package/src/primitives/messagePart/useMessagePartSource.tsx +18 -0
  190. package/src/primitives/messagePart/useMessagePartText.tsx +18 -0
  191. package/src/runtimes/core/BaseThreadRuntimeCore.tsx +1 -0
  192. package/src/runtimes/core/ThreadListRuntimeCore.tsx +1 -0
  193. package/src/runtimes/core/ThreadRuntimeCore.tsx +1 -0
  194. package/src/runtimes/external-store/ExternalStoreAdapter.tsx +2 -0
  195. package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +4 -0
  196. package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +3 -8
  197. package/src/runtimes/external-store/ThreadMessageLike.tsx +21 -21
  198. package/src/runtimes/external-store/createMessageConverter.tsx +3 -3
  199. package/src/runtimes/external-store/external-message-converter.tsx +2 -2
  200. package/src/runtimes/local/ChatModelAdapter.tsx +13 -13
  201. package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +4 -0
  202. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +30 -15
  203. package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +1 -0
  204. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +4 -0
  205. package/src/runtimes/utils/MessageRepository.tsx +1 -1
  206. package/src/tests/MessageRepository.test.ts +6 -6
  207. package/src/types/AssistantTypes.ts +24 -24
  208. package/src/types/AttachmentTypes.ts +3 -3
  209. package/src/types/MessagePartComponentTypes.tsx +52 -0
  210. package/src/types/index.ts +69 -28
  211. package/src/utils/getThreadMessageText.tsx +2 -2
  212. package/src/utils/smooth/SmoothContext.tsx +7 -7
  213. package/src/utils/smooth/useSmooth.tsx +7 -7
  214. package/src/utils/useToolArgsFieldStatus.tsx +3 -3
  215. package/dist/context/providers/ContentPartRuntimeProvider.d.ts +0 -9
  216. package/dist/context/providers/ContentPartRuntimeProvider.js.map +0 -1
  217. package/dist/context/react/ContentPartContext.d.ts +0 -41
  218. package/dist/context/react/ContentPartContext.js +0 -25
  219. package/dist/context/react/ContentPartContext.js.map +0 -1
  220. package/dist/primitives/contentPart/ContentPartImage.js +0 -16
  221. package/dist/primitives/contentPart/ContentPartImage.js.map +0 -1
  222. package/dist/primitives/contentPart/ContentPartInProgress.d.ts +0 -6
  223. package/dist/primitives/contentPart/ContentPartInProgress.js +0 -13
  224. package/dist/primitives/contentPart/ContentPartInProgress.js.map +0 -1
  225. package/dist/primitives/contentPart/ContentPartText.js +0 -18
  226. package/dist/primitives/contentPart/index.d.ts +0 -4
  227. package/dist/primitives/contentPart/index.js +0 -10
  228. package/dist/primitives/contentPart/index.js.map +0 -1
  229. package/dist/primitives/contentPart/useContentPartFile.d.ts +0 -5
  230. package/dist/primitives/contentPart/useContentPartFile.d.ts.map +0 -1
  231. package/dist/primitives/contentPart/useContentPartFile.js +0 -18
  232. package/dist/primitives/contentPart/useContentPartFile.js.map +0 -1
  233. package/dist/primitives/contentPart/useContentPartImage.d.ts +0 -5
  234. package/dist/primitives/contentPart/useContentPartImage.d.ts.map +0 -1
  235. package/dist/primitives/contentPart/useContentPartImage.js +0 -18
  236. package/dist/primitives/contentPart/useContentPartImage.js.map +0 -1
  237. package/dist/primitives/contentPart/useContentPartReasoning.d.ts +0 -5
  238. package/dist/primitives/contentPart/useContentPartReasoning.d.ts.map +0 -1
  239. package/dist/primitives/contentPart/useContentPartReasoning.js +0 -18
  240. package/dist/primitives/contentPart/useContentPartReasoning.js.map +0 -1
  241. package/dist/primitives/contentPart/useContentPartSource.d.ts +0 -5
  242. package/dist/primitives/contentPart/useContentPartSource.d.ts.map +0 -1
  243. package/dist/primitives/contentPart/useContentPartSource.js +0 -18
  244. package/dist/primitives/contentPart/useContentPartSource.js.map +0 -1
  245. package/dist/primitives/contentPart/useContentPartText.d.ts +0 -7
  246. package/dist/primitives/contentPart/useContentPartText.d.ts.map +0 -1
  247. package/dist/primitives/contentPart/useContentPartText.js +0 -18
  248. package/dist/primitives/contentPart/useContentPartText.js.map +0 -1
  249. package/dist/primitives/message/MessageContent.d.ts +0 -64
  250. package/dist/primitives/message/MessageContent.d.ts.map +0 -1
  251. package/dist/primitives/message/MessageContent.js +0 -141
  252. package/dist/primitives/message/MessageContent.js.map +0 -1
  253. package/dist/types/ContentPartComponentTypes.d.ts +0 -25
  254. package/dist/types/ContentPartComponentTypes.js +0 -1
  255. package/src/context/providers/ContentPartRuntimeProvider.tsx +0 -42
  256. package/src/context/react/ContentPartContext.ts +0 -37
  257. package/src/primitives/contentPart/ContentPartImage.tsx +0 -39
  258. package/src/primitives/contentPart/ContentPartInProgress.tsx +0 -19
  259. package/src/primitives/contentPart/index.ts +0 -3
  260. package/src/primitives/contentPart/useContentPartFile.tsx +0 -18
  261. package/src/primitives/contentPart/useContentPartImage.tsx +0 -18
  262. package/src/primitives/contentPart/useContentPartReasoning.tsx +0 -18
  263. package/src/primitives/contentPart/useContentPartSource.tsx +0 -18
  264. package/src/primitives/contentPart/useContentPartText.tsx +0 -18
  265. package/src/primitives/message/MessageContent.tsx +0 -277
  266. package/src/types/ContentPartComponentTypes.tsx +0 -52
  267. /package/dist/types/{ContentPartComponentTypes.js.map → MessagePartComponentTypes.js.map} +0 -0
@@ -1,277 +0,0 @@
1
- "use client";
2
-
3
- import { type ComponentType, type FC, memo, useMemo } from "react";
4
- import {
5
- TextContentPartProvider,
6
- useContentPart,
7
- useContentPartRuntime,
8
- useToolUIs,
9
- } from "../../context";
10
- import {
11
- useMessage,
12
- useMessageRuntime,
13
- } from "../../context/react/MessageContext";
14
- import { ContentPartRuntimeProvider } from "../../context/providers/ContentPartRuntimeProvider";
15
- import { ContentPartPrimitiveText } from "../contentPart/ContentPartText";
16
- import { ContentPartPrimitiveImage } from "../contentPart/ContentPartImage";
17
- import type {
18
- Unstable_AudioContentPartComponent,
19
- EmptyContentPartComponent,
20
- TextContentPartComponent,
21
- ImageContentPartComponent,
22
- SourceContentPartComponent,
23
- ToolCallContentPartComponent,
24
- ToolCallContentPartProps,
25
- FileContentPartComponent,
26
- ReasoningContentPartComponent,
27
- } from "../../types/ContentPartComponentTypes";
28
- import { ContentPartPrimitiveInProgress } from "../contentPart/ContentPartInProgress";
29
- import { ContentPartStatus } from "../../types/AssistantTypes";
30
-
31
- export namespace MessagePrimitiveContent {
32
- export type Props = {
33
- /**
34
- * Component configuration for rendering different types of message content.
35
- *
36
- * You can provide custom components for each content type (text, image, file, etc.)
37
- * and configure tool rendering behavior. If not provided, default components will be used.
38
- */
39
- components?:
40
- | {
41
- /** Component for rendering empty messages */
42
- Empty?: EmptyContentPartComponent | undefined;
43
- /** Component for rendering text content */
44
- Text?: TextContentPartComponent | undefined;
45
- /** Component for rendering reasoning content (typically hidden) */
46
- Reasoning?: ReasoningContentPartComponent | undefined;
47
- /** Component for rendering source content */
48
- Source?: SourceContentPartComponent | undefined;
49
- /** Component for rendering image content */
50
- Image?: ImageContentPartComponent | undefined;
51
- /** Component for rendering file content */
52
- File?: FileContentPartComponent | undefined;
53
- /** Component for rendering audio content (experimental) */
54
- Unstable_Audio?: Unstable_AudioContentPartComponent | undefined;
55
- /** Configuration for tool call rendering */
56
- tools?:
57
- | {
58
- /** Map of tool names to their specific components */
59
- by_name?:
60
- | Record<string, ToolCallContentPartComponent | undefined>
61
- | undefined;
62
- /** Fallback component for unregistered tools */
63
- Fallback?: ComponentType<ToolCallContentPartProps> | undefined;
64
- }
65
- | {
66
- /** Override component that handles all tool calls */
67
- Override: ComponentType<ToolCallContentPartProps>;
68
- }
69
- | undefined;
70
- }
71
- | undefined;
72
- };
73
- }
74
-
75
- const ToolUIDisplay = ({
76
- Fallback,
77
- ...props
78
- }: {
79
- Fallback: ToolCallContentPartComponent | undefined;
80
- } & ToolCallContentPartProps) => {
81
- const Render = useToolUIs((s) => s.getToolUI(props.toolName)) ?? Fallback;
82
- if (!Render) return null;
83
- return <Render {...props} />;
84
- };
85
-
86
- const defaultComponents = {
87
- Text: () => (
88
- <p style={{ whiteSpace: "pre-line" }}>
89
- <ContentPartPrimitiveText />
90
- <ContentPartPrimitiveInProgress>
91
- <span style={{ fontFamily: "revert" }}>{" \u25CF"}</span>
92
- </ContentPartPrimitiveInProgress>
93
- </p>
94
- ),
95
- Reasoning: () => null,
96
- Source: () => null,
97
- Image: () => <ContentPartPrimitiveImage />,
98
- File: () => null,
99
- Unstable_Audio: () => null,
100
- } satisfies MessagePrimitiveContent.Props["components"];
101
-
102
- type MessageContentPartComponentProps = {
103
- components: MessagePrimitiveContent.Props["components"];
104
- };
105
-
106
- const MessageContentPartComponent: FC<MessageContentPartComponentProps> = ({
107
- components: {
108
- Text = defaultComponents.Text,
109
- Reasoning = defaultComponents.Reasoning,
110
- Image = defaultComponents.Image,
111
- Source = defaultComponents.Source,
112
- File = defaultComponents.File,
113
- Unstable_Audio: Audio = defaultComponents.Unstable_Audio,
114
- tools = {},
115
- } = {},
116
- }) => {
117
- const contentPartRuntime = useContentPartRuntime();
118
-
119
- const part = useContentPart();
120
-
121
- const type = part.type;
122
- if (type === "tool-call") {
123
- const addResult = (result: any) => contentPartRuntime.addToolResult(result);
124
- if ("Override" in tools)
125
- return <tools.Override {...part} addResult={addResult} />;
126
- const Tool = tools.by_name?.[part.toolName] ?? tools.Fallback;
127
- return <ToolUIDisplay {...part} Fallback={Tool} addResult={addResult} />;
128
- }
129
-
130
- if (part.status.type === "requires-action")
131
- throw new Error("Encountered unexpected requires-action status");
132
-
133
- switch (type) {
134
- case "text":
135
- return <Text {...part} />;
136
-
137
- case "reasoning":
138
- return <Reasoning {...part} />;
139
-
140
- case "source":
141
- return <Source {...part} />;
142
-
143
- case "image":
144
- // eslint-disable-next-line jsx-a11y/alt-text
145
- return <Image {...part} />;
146
-
147
- case "file":
148
- return <File {...part} />;
149
-
150
- case "audio":
151
- return <Audio {...part} />;
152
-
153
- default:
154
- const unhandledType: never = type;
155
- throw new Error(`Unknown content part type: ${unhandledType}`);
156
- }
157
- };
158
-
159
- type MessageContentPartProps = {
160
- partIndex: number;
161
- components: MessagePrimitiveContent.Props["components"];
162
- };
163
-
164
- const MessageContentPartImpl: FC<MessageContentPartProps> = ({
165
- partIndex,
166
- components,
167
- }) => {
168
- const messageRuntime = useMessageRuntime();
169
- const runtime = useMemo(
170
- () => messageRuntime.getContentPartByIndex(partIndex),
171
- [messageRuntime, partIndex],
172
- );
173
-
174
- return (
175
- <ContentPartRuntimeProvider runtime={runtime}>
176
- <MessageContentPartComponent components={components} />
177
- </ContentPartRuntimeProvider>
178
- );
179
- };
180
-
181
- const MessageContentPart = memo(
182
- MessageContentPartImpl,
183
- (prev, next) =>
184
- prev.partIndex === next.partIndex &&
185
- prev.components?.Text === next.components?.Text &&
186
- prev.components?.Reasoning === next.components?.Reasoning &&
187
- prev.components?.Source === next.components?.Source &&
188
- prev.components?.Image === next.components?.Image &&
189
- prev.components?.File === next.components?.File &&
190
- prev.components?.Unstable_Audio === next.components?.Unstable_Audio &&
191
- prev.components?.tools === next.components?.tools,
192
- );
193
-
194
- const COMPLETE_STATUS: ContentPartStatus = Object.freeze({
195
- type: "complete",
196
- });
197
-
198
- const EmptyContentFallback: FC<{
199
- status: ContentPartStatus;
200
- component: TextContentPartComponent;
201
- }> = ({ status, component: Component }) => {
202
- return (
203
- <TextContentPartProvider text="" isRunning={status.type === "running"}>
204
- <Component type="text" text="" status={status} />
205
- </TextContentPartProvider>
206
- );
207
- };
208
-
209
- const EmptyContentImpl: FC<MessageContentPartComponentProps> = ({
210
- components,
211
- }) => {
212
- const status =
213
- useMessage((s) => s.status as ContentPartStatus) ?? COMPLETE_STATUS;
214
-
215
- if (components?.Empty) return <components.Empty status={status} />;
216
-
217
- return (
218
- <EmptyContentFallback
219
- status={status}
220
- component={components?.Text ?? defaultComponents.Text}
221
- />
222
- );
223
- };
224
-
225
- const EmptyContent = memo(
226
- EmptyContentImpl,
227
- (prev, next) =>
228
- prev.components?.Empty === next.components?.Empty &&
229
- prev.components?.Text === next.components?.Text,
230
- );
231
-
232
- /**
233
- * Renders the content of a message with support for multiple content types.
234
- *
235
- * This component automatically handles different types of message content including
236
- * text, images, files, tool calls, and more. It provides a flexible component
237
- * system for customizing how each content type is rendered.
238
- *
239
- * @example
240
- * ```tsx
241
- * <MessagePrimitive.Content
242
- * components={{
243
- * Text: ({ text }) => <p className="message-text">{text}</p>,
244
- * Image: ({ image }) => <img src={image} alt="Message image" />,
245
- * tools: {
246
- * by_name: {
247
- * calculator: CalculatorTool,
248
- * weather: WeatherTool,
249
- * },
250
- * Fallback: DefaultToolComponent
251
- * }
252
- * }}
253
- * />
254
- * ```
255
- */
256
- export const MessagePrimitiveContent: FC<MessagePrimitiveContent.Props> = ({
257
- components,
258
- }) => {
259
- const contentLength = useMessage((s) => s.content.length);
260
-
261
- const contentElements = useMemo(() => {
262
- if (contentLength === 0) {
263
- return <EmptyContent components={components} />;
264
- }
265
- return Array.from({ length: contentLength }, (_, index) => (
266
- <MessageContentPart
267
- key={index}
268
- partIndex={index}
269
- components={components}
270
- />
271
- ));
272
- }, [contentLength, components]);
273
-
274
- return <>{contentElements}</>;
275
- };
276
-
277
- MessagePrimitiveContent.displayName = "MessagePrimitive.Content";
@@ -1,52 +0,0 @@
1
- import type { ComponentType } from "react";
2
- import type {
3
- ContentPartStatus,
4
- FileContentPart,
5
- ImageContentPart,
6
- ReasoningContentPart,
7
- SourceContentPart,
8
- TextContentPart,
9
- ToolCallContentPart,
10
- Unstable_AudioContentPart,
11
- } from "./AssistantTypes";
12
- import { ContentPartState } from "../api/ContentPartRuntime";
13
- import { ToolResponse } from "assistant-stream";
14
-
15
- export type EmptyContentPartProps = {
16
- status: ContentPartStatus;
17
- };
18
- export type EmptyContentPartComponent = ComponentType<EmptyContentPartProps>;
19
-
20
- export type TextContentPartProps = ContentPartState & TextContentPart;
21
- export type TextContentPartComponent = ComponentType<TextContentPartProps>;
22
-
23
- export type ReasoningContentPartProps = ContentPartState & ReasoningContentPart;
24
- export type ReasoningContentPartComponent =
25
- ComponentType<ReasoningContentPartProps>;
26
-
27
- export type SourceContentPartProps = ContentPartState & SourceContentPart;
28
- export type SourceContentPartComponent = ComponentType<SourceContentPartProps>;
29
-
30
- export type ImageContentPartProps = ContentPartState & ImageContentPart;
31
- export type ImageContentPartComponent = ComponentType<ImageContentPartProps>;
32
-
33
- export type FileContentPartProps = ContentPartState & FileContentPart;
34
- export type FileContentPartComponent = ComponentType<FileContentPartProps>;
35
-
36
- export type Unstable_AudioContentPartProps = ContentPartState &
37
- Unstable_AudioContentPart;
38
- export type Unstable_AudioContentPartComponent =
39
- ComponentType<Unstable_AudioContentPartProps>;
40
-
41
- export type ToolCallContentPartProps<
42
- TArgs = any,
43
- TResult = unknown,
44
- > = ContentPartState &
45
- ToolCallContentPart<TArgs, TResult> & {
46
- addResult: (result: TResult | ToolResponse<TResult>) => void;
47
- };
48
-
49
- export type ToolCallContentPartComponent<
50
- TArgs = any,
51
- TResult = any,
52
- > = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;