stream-chat-react-native-core 9.12.1 → 9.14.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 (939) hide show
  1. package/a2ui/package.json +6 -0
  2. package/ai-components/conversation/package.json +6 -0
  3. package/lib/commonjs/a11y/a11yUtils.js.map +1 -1
  4. package/lib/commonjs/a11y/hooks/useResolvedModalAccessibilityProps.js.map +1 -1
  5. package/lib/commonjs/a2ui/A2UIContexts.js +8 -0
  6. package/lib/commonjs/a2ui/A2UIContexts.js.map +1 -0
  7. package/lib/commonjs/a2ui/A2UIInstructions.js +49 -0
  8. package/lib/commonjs/a2ui/A2UIInstructions.js.map +1 -0
  9. package/lib/commonjs/a2ui/A2UIPlaceholder.js +37 -0
  10. package/lib/commonjs/a2ui/A2UIPlaceholder.js.map +1 -0
  11. package/lib/commonjs/a2ui/A2UIRenderer.js +363 -0
  12. package/lib/commonjs/a2ui/A2UIRenderer.js.map +1 -0
  13. package/lib/commonjs/a2ui/A2UIStream.js +91 -0
  14. package/lib/commonjs/a2ui/A2UIStream.js.map +1 -0
  15. package/lib/commonjs/a2ui/A2UISurface.js +237 -0
  16. package/lib/commonjs/a2ui/A2UISurface.js.map +1 -0
  17. package/lib/commonjs/a2ui/basicCatalog.json +1206 -0
  18. package/lib/commonjs/a2ui/basicFunctions.js +398 -0
  19. package/lib/commonjs/a2ui/basicFunctions.js.map +1 -0
  20. package/lib/commonjs/a2ui/catalogDocument.js +80 -0
  21. package/lib/commonjs/a2ui/catalogDocument.js.map +1 -0
  22. package/lib/commonjs/a2ui/catalogs.js +105 -0
  23. package/lib/commonjs/a2ui/catalogs.js.map +1 -0
  24. package/lib/commonjs/a2ui/components/DateTimeInput.js +445 -0
  25. package/lib/commonjs/a2ui/components/DateTimeInput.js.map +1 -0
  26. package/lib/commonjs/a2ui/components/Media.js +316 -0
  27. package/lib/commonjs/a2ui/components/Media.js.map +1 -0
  28. package/lib/commonjs/a2ui/components/basicComponents.js +975 -0
  29. package/lib/commonjs/a2ui/components/basicComponents.js.map +1 -0
  30. package/lib/commonjs/a2ui/components/iconPaths.js +66 -0
  31. package/lib/commonjs/a2ui/components/iconPaths.js.map +1 -0
  32. package/lib/commonjs/a2ui/components/types.js +4 -0
  33. package/lib/commonjs/a2ui/components/types.js.map +1 -0
  34. package/lib/commonjs/a2ui/index.js +70 -0
  35. package/lib/commonjs/a2ui/index.js.map +1 -0
  36. package/lib/commonjs/a2ui/instructions.js +268 -0
  37. package/lib/commonjs/a2ui/instructions.js.map +1 -0
  38. package/lib/commonjs/a2ui/secrets.js +169 -0
  39. package/lib/commonjs/a2ui/secrets.js.map +1 -0
  40. package/lib/commonjs/a2ui/useReplyState.js +35 -0
  41. package/lib/commonjs/a2ui/useReplyState.js.map +1 -0
  42. package/lib/commonjs/ai-components/AITypingIndicatorView.js +8 -18
  43. package/lib/commonjs/ai-components/AITypingIndicatorView.js.map +1 -1
  44. package/lib/commonjs/ai-components/README.md +64 -3
  45. package/lib/commonjs/ai-components/StreamingMessageView.js +26 -0
  46. package/lib/commonjs/ai-components/StreamingMessageView.js.map +1 -1
  47. package/lib/commonjs/ai-components/charts/components/PieLegend.js +2 -1
  48. package/lib/commonjs/ai-components/charts/components/PieLegend.js.map +1 -1
  49. package/lib/commonjs/ai-components/charts/components/VictoryChart.js +7 -2
  50. package/lib/commonjs/ai-components/charts/components/VictoryChart.js.map +1 -1
  51. package/lib/commonjs/ai-components/charts/utils/format-time-label.js +15 -0
  52. package/lib/commonjs/ai-components/charts/utils/format-time-label.js.map +1 -0
  53. package/lib/commonjs/ai-components/charts/vega-lite/schema.js +17 -2
  54. package/lib/commonjs/ai-components/charts/vega-lite/schema.js.map +1 -1
  55. package/lib/commonjs/ai-components/contexts/composer-context.js +13 -6
  56. package/lib/commonjs/ai-components/contexts/composer-context.js.map +1 -1
  57. package/lib/commonjs/ai-components/contexts/index.js +11 -0
  58. package/lib/commonjs/ai-components/contexts/index.js.map +1 -1
  59. package/lib/commonjs/ai-components/contexts/theme-context.js +33 -2
  60. package/lib/commonjs/ai-components/contexts/theme-context.js.map +1 -1
  61. package/lib/commonjs/ai-components/contexts/translation-context.js +29 -0
  62. package/lib/commonjs/ai-components/contexts/translation-context.js.map +1 -0
  63. package/lib/commonjs/ai-components/conversation/AIConversation.js +374 -0
  64. package/lib/commonjs/ai-components/conversation/AIConversation.js.map +1 -0
  65. package/lib/commonjs/ai-components/conversation/entries.js +98 -0
  66. package/lib/commonjs/ai-components/conversation/entries.js.map +1 -0
  67. package/lib/commonjs/ai-components/conversation/index.js +15 -0
  68. package/lib/commonjs/ai-components/conversation/index.js.map +1 -0
  69. package/lib/commonjs/ai-components/conversation/list/AIChatList.js +224 -0
  70. package/lib/commonjs/ai-components/conversation/list/AIChatList.js.map +1 -0
  71. package/lib/commonjs/ai-components/conversation/list/useChatListController.js +78 -0
  72. package/lib/commonjs/ai-components/conversation/list/useChatListController.js.map +1 -0
  73. package/lib/commonjs/ai-components/conversation/list/useEndInView.js +51 -0
  74. package/lib/commonjs/ai-components/conversation/list/useEndInView.js.map +1 -0
  75. package/lib/commonjs/ai-components/conversation/list/useKeyboardOverlap.js +53 -0
  76. package/lib/commonjs/ai-components/conversation/list/useKeyboardOverlap.js.map +1 -0
  77. package/lib/commonjs/ai-components/conversation/list/useLoadOlder.js +73 -0
  78. package/lib/commonjs/ai-components/conversation/list/useLoadOlder.js.map +1 -0
  79. package/lib/commonjs/ai-components/conversation/list/usePinnedAnchor.js +84 -0
  80. package/lib/commonjs/ai-components/conversation/list/usePinnedAnchor.js.map +1 -0
  81. package/lib/commonjs/ai-components/conversation/useConversationRows.js +117 -0
  82. package/lib/commonjs/ai-components/conversation/useConversationRows.js.map +1 -0
  83. package/lib/commonjs/ai-components/conversation-state/controller/AIAgentError.js +13 -0
  84. package/lib/commonjs/ai-components/conversation-state/controller/AIAgentError.js.map +1 -0
  85. package/lib/commonjs/ai-components/conversation-state/controller/AIConversationController.js +431 -0
  86. package/lib/commonjs/ai-components/conversation-state/controller/AIConversationController.js.map +1 -0
  87. package/lib/commonjs/ai-components/conversation-state/controller/AIConversationExchange.js +89 -0
  88. package/lib/commonjs/ai-components/conversation-state/controller/AIConversationExchange.js.map +1 -0
  89. package/lib/commonjs/ai-components/conversation-state/controller/index.js +48 -0
  90. package/lib/commonjs/ai-components/conversation-state/controller/index.js.map +1 -0
  91. package/lib/commonjs/ai-components/conversation-state/controller/offers.js +35 -0
  92. package/lib/commonjs/ai-components/conversation-state/controller/offers.js.map +1 -0
  93. package/lib/commonjs/ai-components/conversation-state/controller/types.js +13 -0
  94. package/lib/commonjs/ai-components/conversation-state/controller/types.js.map +1 -0
  95. package/lib/commonjs/ai-components/conversation-state/controller/useAIConversationState.js +8 -0
  96. package/lib/commonjs/ai-components/conversation-state/controller/useAIConversationState.js.map +1 -0
  97. package/lib/commonjs/ai-components/conversation-state/fromStreamMessage.js +67 -0
  98. package/lib/commonjs/ai-components/conversation-state/fromStreamMessage.js.map +1 -0
  99. package/lib/commonjs/ai-components/conversation-state/index.js +37 -0
  100. package/lib/commonjs/ai-components/conversation-state/index.js.map +1 -0
  101. package/lib/commonjs/ai-components/conversation-state/types.js +4 -0
  102. package/lib/commonjs/ai-components/conversation-state/types.js.map +1 -0
  103. package/lib/commonjs/ai-components/generative-ui/AIUIAction.js +30 -0
  104. package/lib/commonjs/ai-components/generative-ui/AIUIAction.js.map +1 -0
  105. package/lib/commonjs/ai-components/generative-ui/AIUIArguments.js +128 -0
  106. package/lib/commonjs/ai-components/generative-ui/AIUIArguments.js.map +1 -0
  107. package/lib/commonjs/ai-components/generative-ui/AIUIComponent.js +50 -0
  108. package/lib/commonjs/ai-components/generative-ui/AIUIComponent.js.map +1 -0
  109. package/lib/commonjs/ai-components/generative-ui/AIUIComponentDefinition.js +134 -0
  110. package/lib/commonjs/ai-components/generative-ui/AIUIComponentDefinition.js.map +1 -0
  111. package/lib/commonjs/ai-components/generative-ui/AIUIDocument.js +32 -0
  112. package/lib/commonjs/ai-components/generative-ui/AIUIDocument.js.map +1 -0
  113. package/lib/commonjs/ai-components/generative-ui/AIUIEntrance.js +197 -0
  114. package/lib/commonjs/ai-components/generative-ui/AIUIEntrance.js.map +1 -0
  115. package/lib/commonjs/ai-components/generative-ui/AIUIErrorBoundary.js +30 -0
  116. package/lib/commonjs/ai-components/generative-ui/AIUIErrorBoundary.js.map +1 -0
  117. package/lib/commonjs/ai-components/generative-ui/AIUIHelpers.js +54 -0
  118. package/lib/commonjs/ai-components/generative-ui/AIUIHelpers.js.map +1 -0
  119. package/lib/commonjs/ai-components/generative-ui/AIUIHost.js +259 -0
  120. package/lib/commonjs/ai-components/generative-ui/AIUIHost.js.map +1 -0
  121. package/lib/commonjs/ai-components/generative-ui/AIUIMedia.js +24 -0
  122. package/lib/commonjs/ai-components/generative-ui/AIUIMedia.js.map +1 -0
  123. package/lib/commonjs/ai-components/generative-ui/AIUIRenderer.js +10 -0
  124. package/lib/commonjs/ai-components/generative-ui/AIUIRenderer.js.map +1 -0
  125. package/lib/commonjs/ai-components/generative-ui/AIUIView.js +57 -0
  126. package/lib/commonjs/ai-components/generative-ui/AIUIView.js.map +1 -0
  127. package/lib/commonjs/ai-components/generative-ui/index.js +181 -0
  128. package/lib/commonjs/ai-components/generative-ui/index.js.map +1 -0
  129. package/lib/commonjs/ai-components/icons.js +44 -0
  130. package/lib/commonjs/ai-components/icons.js.map +1 -0
  131. package/lib/commonjs/ai-components/index.js +96 -0
  132. package/lib/commonjs/ai-components/index.js.map +1 -1
  133. package/lib/commonjs/ai-components/internal/Shimmer.js +36 -0
  134. package/lib/commonjs/ai-components/internal/Shimmer.js.map +1 -0
  135. package/lib/commonjs/ai-components/internal/format.js +66 -0
  136. package/lib/commonjs/ai-components/internal/format.js.map +1 -0
  137. package/lib/commonjs/ai-components/internal/hooks/useBottomSafeArea.js +12 -0
  138. package/lib/commonjs/ai-components/internal/hooks/useBottomSafeArea.js.map +1 -0
  139. package/lib/commonjs/ai-components/internal/icons/AgentIcons.js +74 -0
  140. package/lib/commonjs/ai-components/internal/icons/AgentIcons.js.map +1 -0
  141. package/lib/commonjs/ai-components/internal/keyboard.js +40 -0
  142. package/lib/commonjs/ai-components/internal/keyboard.js.map +1 -0
  143. package/lib/commonjs/ai-components/internal/tokens.js +11 -0
  144. package/lib/commonjs/ai-components/internal/tokens.js.map +1 -0
  145. package/lib/commonjs/ai-components/internal/uuid.js +21 -0
  146. package/lib/commonjs/ai-components/internal/uuid.js.map +1 -0
  147. package/lib/commonjs/ai-components/markdown/components/CodeBlock.js +4 -2
  148. package/lib/commonjs/ai-components/markdown/components/CodeBlock.js.map +1 -1
  149. package/lib/commonjs/ai-components/markdown/components/InlineCode.js +1 -0
  150. package/lib/commonjs/ai-components/markdown/components/InlineCode.js.map +1 -1
  151. package/lib/commonjs/ai-components/markdown/components/Text.js +11 -2
  152. package/lib/commonjs/ai-components/markdown/components/Text.js.map +1 -1
  153. package/lib/commonjs/ai-components/markdown/styles.js +27 -29
  154. package/lib/commonjs/ai-components/markdown/styles.js.map +1 -1
  155. package/lib/commonjs/ai-components/message/AIAssistantMessage.js +64 -0
  156. package/lib/commonjs/ai-components/message/AIAssistantMessage.js.map +1 -0
  157. package/lib/commonjs/ai-components/message/AIMessageAttachment.js +189 -0
  158. package/lib/commonjs/ai-components/message/AIMessageAttachment.js.map +1 -0
  159. package/lib/commonjs/ai-components/message/AIReplyActions.js +132 -0
  160. package/lib/commonjs/ai-components/message/AIReplyActions.js.map +1 -0
  161. package/lib/commonjs/ai-components/message/AIUserMessage.js +104 -0
  162. package/lib/commonjs/ai-components/message/AIUserMessage.js.map +1 -0
  163. package/lib/commonjs/ai-components/message/UserMessageMenu.js +150 -0
  164. package/lib/commonjs/ai-components/message/UserMessageMenu.js.map +1 -0
  165. package/lib/commonjs/ai-components/message/index.js +48 -0
  166. package/lib/commonjs/ai-components/message/index.js.map +1 -0
  167. package/lib/commonjs/ai-components/message-composer/ActionButton.js +4 -2
  168. package/lib/commonjs/ai-components/message-composer/ActionButton.js.map +1 -1
  169. package/lib/commonjs/ai-components/message-composer/ActionSheet.js +22 -6
  170. package/lib/commonjs/ai-components/message-composer/ActionSheet.js.map +1 -1
  171. package/lib/commonjs/ai-components/message-composer/AttachmentButton.js +5 -1
  172. package/lib/commonjs/ai-components/message-composer/AttachmentButton.js.map +1 -1
  173. package/lib/commonjs/ai-components/message-composer/ChatOptions.js +147 -0
  174. package/lib/commonjs/ai-components/message-composer/ChatOptions.js.map +1 -0
  175. package/lib/commonjs/ai-components/message-composer/ComposerView.js +146 -20
  176. package/lib/commonjs/ai-components/message-composer/ComposerView.js.map +1 -1
  177. package/lib/commonjs/ai-components/message-composer/EditingMessageChip.js +81 -0
  178. package/lib/commonjs/ai-components/message-composer/EditingMessageChip.js.map +1 -0
  179. package/lib/commonjs/ai-components/message-composer/MediaPreviewList.js +26 -1
  180. package/lib/commonjs/ai-components/message-composer/MediaPreviewList.js.map +1 -1
  181. package/lib/commonjs/ai-components/message-composer/index.js +11 -0
  182. package/lib/commonjs/ai-components/message-composer/index.js.map +1 -1
  183. package/lib/commonjs/ai-components/message-parts/AIMessageParts.js +133 -0
  184. package/lib/commonjs/ai-components/message-parts/AIMessageParts.js.map +1 -0
  185. package/lib/commonjs/ai-components/message-parts/AIToolApproval.js +197 -0
  186. package/lib/commonjs/ai-components/message-parts/AIToolApproval.js.map +1 -0
  187. package/lib/commonjs/ai-components/message-parts/AIToolAuthorization.js +250 -0
  188. package/lib/commonjs/ai-components/message-parts/AIToolAuthorization.js.map +1 -0
  189. package/lib/commonjs/ai-components/message-parts/AIToolCall.js +159 -0
  190. package/lib/commonjs/ai-components/message-parts/AIToolCall.js.map +1 -0
  191. package/lib/commonjs/ai-components/message-parts/callStates.js +54 -0
  192. package/lib/commonjs/ai-components/message-parts/callStates.js.map +1 -0
  193. package/lib/commonjs/ai-components/message-parts/index.js +70 -0
  194. package/lib/commonjs/ai-components/message-parts/index.js.map +1 -0
  195. package/lib/commonjs/ai-components/message-parts/parseMessageParts.js +126 -0
  196. package/lib/commonjs/ai-components/message-parts/parseMessageParts.js.map +1 -0
  197. package/lib/commonjs/ai-components/message-parts/types.js +2 -0
  198. package/lib/commonjs/ai-components/message-parts/types.js.map +1 -0
  199. package/lib/commonjs/ai-components/native-specs/NativeAIAgent.js +7 -0
  200. package/lib/commonjs/ai-components/native-specs/NativeAIAgent.js.map +1 -0
  201. package/lib/commonjs/ai-components/reasoning/AIReasoning.js +401 -0
  202. package/lib/commonjs/ai-components/reasoning/AIReasoning.js.map +1 -0
  203. package/lib/commonjs/ai-components/reasoning/index.js +26 -0
  204. package/lib/commonjs/ai-components/reasoning/index.js.map +1 -0
  205. package/lib/commonjs/ai-components/reasoning/thinkingClock.js +63 -0
  206. package/lib/commonjs/ai-components/reasoning/thinkingClock.js.map +1 -0
  207. package/lib/commonjs/ai-components/services/clipboard-service/expo.js +7 -2
  208. package/lib/commonjs/ai-components/services/clipboard-service/expo.js.map +1 -1
  209. package/lib/commonjs/ai-components/store/composer/store.js.map +1 -1
  210. package/lib/commonjs/ai-components/store/composer/useComposerChatOption.js +18 -0
  211. package/lib/commonjs/ai-components/store/composer/useComposerChatOption.js.map +1 -0
  212. package/lib/commonjs/ai-components/store/composer/useComposerIsEditing.js +18 -0
  213. package/lib/commonjs/ai-components/store/composer/useComposerIsEditing.js.map +1 -0
  214. package/lib/commonjs/ai-components/store/index.js +22 -0
  215. package/lib/commonjs/ai-components/store/index.js.map +1 -1
  216. package/lib/commonjs/ai-components/suggestions/AISuggestions.js +66 -0
  217. package/lib/commonjs/ai-components/suggestions/AISuggestions.js.map +1 -0
  218. package/lib/commonjs/ai-components/suggestions/index.js +15 -0
  219. package/lib/commonjs/ai-components/suggestions/index.js.map +1 -0
  220. package/lib/commonjs/ai-components/syntax-highlighting/utils/flatten-nodes.js +2 -1
  221. package/lib/commonjs/ai-components/syntax-highlighting/utils/flatten-nodes.js.map +1 -1
  222. package/lib/commonjs/ai-components/syntax-highlighting/utils/renderer.js +3 -2
  223. package/lib/commonjs/ai-components/syntax-highlighting/utils/renderer.js.map +1 -1
  224. package/lib/commonjs/ai-components/theme.js +137 -1
  225. package/lib/commonjs/ai-components/theme.js.map +1 -1
  226. package/lib/commonjs/ai-components/tool-calls/AIClientIdentity.js +22 -0
  227. package/lib/commonjs/ai-components/tool-calls/AIClientIdentity.js.map +1 -0
  228. package/lib/commonjs/ai-components/tool-calls/AIClientToolRunner.js +109 -0
  229. package/lib/commonjs/ai-components/tool-calls/AIClientToolRunner.js.map +1 -0
  230. package/lib/commonjs/ai-components/tool-calls/AIToolApprover.js +23 -0
  231. package/lib/commonjs/ai-components/tool-calls/AIToolApprover.js.map +1 -0
  232. package/lib/commonjs/ai-components/tool-calls/authSessionAuthorizer.js +88 -0
  233. package/lib/commonjs/ai-components/tool-calls/authSessionAuthorizer.js.map +1 -0
  234. package/lib/commonjs/ai-components/tool-calls/index.js +48 -0
  235. package/lib/commonjs/ai-components/tool-calls/index.js.map +1 -0
  236. package/lib/commonjs/ai-components/voice-visualization/glowShader.js.map +1 -1
  237. package/lib/commonjs/components/Accessibility/useAccessibilityAnnouncer.js.map +1 -1
  238. package/lib/commonjs/components/Message/MessageItemView/utils/renderText.js.map +1 -1
  239. package/lib/commonjs/contexts/translationContext/TranslationContext.js +2 -2
  240. package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
  241. package/lib/commonjs/i18n/ar.json +40 -1
  242. package/lib/commonjs/i18n/en.json +40 -1
  243. package/lib/commonjs/i18n/es.json +40 -1
  244. package/lib/commonjs/i18n/fr.json +40 -1
  245. package/lib/commonjs/i18n/he.json +40 -1
  246. package/lib/commonjs/i18n/hi.json +40 -1
  247. package/lib/commonjs/i18n/it.json +40 -1
  248. package/lib/commonjs/i18n/ja.json +40 -1
  249. package/lib/commonjs/i18n/ko.json +40 -1
  250. package/lib/commonjs/i18n/nl.json +40 -1
  251. package/lib/commonjs/i18n/pt-br.json +40 -1
  252. package/lib/commonjs/i18n/ru.json +40 -1
  253. package/lib/commonjs/i18n/tr.json +40 -1
  254. package/lib/commonjs/mock-builders/a2ui/ohrid.js +84 -0
  255. package/lib/commonjs/mock-builders/a2ui/ohrid.js.map +1 -0
  256. package/lib/commonjs/utils/i18n/Streami18n.js +9 -4
  257. package/lib/commonjs/utils/i18n/Streami18n.js.map +1 -1
  258. package/lib/commonjs/utils/i18n/utils.js +7 -0
  259. package/lib/commonjs/utils/i18n/utils.js.map +1 -0
  260. package/lib/commonjs/version.json +1 -1
  261. package/lib/module/a11y/a11yUtils.js.map +1 -1
  262. package/lib/module/a11y/hooks/useResolvedModalAccessibilityProps.js.map +1 -1
  263. package/lib/module/a2ui/A2UIContexts.js +8 -0
  264. package/lib/module/a2ui/A2UIContexts.js.map +1 -0
  265. package/lib/module/a2ui/A2UIInstructions.js +49 -0
  266. package/lib/module/a2ui/A2UIInstructions.js.map +1 -0
  267. package/lib/module/a2ui/A2UIPlaceholder.js +37 -0
  268. package/lib/module/a2ui/A2UIPlaceholder.js.map +1 -0
  269. package/lib/module/a2ui/A2UIRenderer.js +363 -0
  270. package/lib/module/a2ui/A2UIRenderer.js.map +1 -0
  271. package/lib/module/a2ui/A2UIStream.js +91 -0
  272. package/lib/module/a2ui/A2UIStream.js.map +1 -0
  273. package/lib/module/a2ui/A2UISurface.js +237 -0
  274. package/lib/module/a2ui/A2UISurface.js.map +1 -0
  275. package/lib/module/a2ui/basicCatalog.json +1206 -0
  276. package/lib/module/a2ui/basicFunctions.js +398 -0
  277. package/lib/module/a2ui/basicFunctions.js.map +1 -0
  278. package/lib/module/a2ui/catalogDocument.js +80 -0
  279. package/lib/module/a2ui/catalogDocument.js.map +1 -0
  280. package/lib/module/a2ui/catalogs.js +105 -0
  281. package/lib/module/a2ui/catalogs.js.map +1 -0
  282. package/lib/module/a2ui/components/DateTimeInput.js +445 -0
  283. package/lib/module/a2ui/components/DateTimeInput.js.map +1 -0
  284. package/lib/module/a2ui/components/Media.js +316 -0
  285. package/lib/module/a2ui/components/Media.js.map +1 -0
  286. package/lib/module/a2ui/components/basicComponents.js +975 -0
  287. package/lib/module/a2ui/components/basicComponents.js.map +1 -0
  288. package/lib/module/a2ui/components/iconPaths.js +66 -0
  289. package/lib/module/a2ui/components/iconPaths.js.map +1 -0
  290. package/lib/module/a2ui/components/types.js +4 -0
  291. package/lib/module/a2ui/components/types.js.map +1 -0
  292. package/lib/module/a2ui/index.js +70 -0
  293. package/lib/module/a2ui/index.js.map +1 -0
  294. package/lib/module/a2ui/instructions.js +268 -0
  295. package/lib/module/a2ui/instructions.js.map +1 -0
  296. package/lib/module/a2ui/secrets.js +169 -0
  297. package/lib/module/a2ui/secrets.js.map +1 -0
  298. package/lib/module/a2ui/useReplyState.js +35 -0
  299. package/lib/module/a2ui/useReplyState.js.map +1 -0
  300. package/lib/module/ai-components/AITypingIndicatorView.js +8 -18
  301. package/lib/module/ai-components/AITypingIndicatorView.js.map +1 -1
  302. package/lib/module/ai-components/README.md +64 -3
  303. package/lib/module/ai-components/StreamingMessageView.js +26 -0
  304. package/lib/module/ai-components/StreamingMessageView.js.map +1 -1
  305. package/lib/module/ai-components/charts/components/PieLegend.js +2 -1
  306. package/lib/module/ai-components/charts/components/PieLegend.js.map +1 -1
  307. package/lib/module/ai-components/charts/components/VictoryChart.js +7 -2
  308. package/lib/module/ai-components/charts/components/VictoryChart.js.map +1 -1
  309. package/lib/module/ai-components/charts/utils/format-time-label.js +15 -0
  310. package/lib/module/ai-components/charts/utils/format-time-label.js.map +1 -0
  311. package/lib/module/ai-components/charts/vega-lite/schema.js +17 -2
  312. package/lib/module/ai-components/charts/vega-lite/schema.js.map +1 -1
  313. package/lib/module/ai-components/contexts/composer-context.js +13 -6
  314. package/lib/module/ai-components/contexts/composer-context.js.map +1 -1
  315. package/lib/module/ai-components/contexts/index.js +11 -0
  316. package/lib/module/ai-components/contexts/index.js.map +1 -1
  317. package/lib/module/ai-components/contexts/theme-context.js +33 -2
  318. package/lib/module/ai-components/contexts/theme-context.js.map +1 -1
  319. package/lib/module/ai-components/contexts/translation-context.js +29 -0
  320. package/lib/module/ai-components/contexts/translation-context.js.map +1 -0
  321. package/lib/module/ai-components/conversation/AIConversation.js +374 -0
  322. package/lib/module/ai-components/conversation/AIConversation.js.map +1 -0
  323. package/lib/module/ai-components/conversation/entries.js +98 -0
  324. package/lib/module/ai-components/conversation/entries.js.map +1 -0
  325. package/lib/module/ai-components/conversation/index.js +15 -0
  326. package/lib/module/ai-components/conversation/index.js.map +1 -0
  327. package/lib/module/ai-components/conversation/list/AIChatList.js +224 -0
  328. package/lib/module/ai-components/conversation/list/AIChatList.js.map +1 -0
  329. package/lib/module/ai-components/conversation/list/useChatListController.js +78 -0
  330. package/lib/module/ai-components/conversation/list/useChatListController.js.map +1 -0
  331. package/lib/module/ai-components/conversation/list/useEndInView.js +51 -0
  332. package/lib/module/ai-components/conversation/list/useEndInView.js.map +1 -0
  333. package/lib/module/ai-components/conversation/list/useKeyboardOverlap.js +53 -0
  334. package/lib/module/ai-components/conversation/list/useKeyboardOverlap.js.map +1 -0
  335. package/lib/module/ai-components/conversation/list/useLoadOlder.js +73 -0
  336. package/lib/module/ai-components/conversation/list/useLoadOlder.js.map +1 -0
  337. package/lib/module/ai-components/conversation/list/usePinnedAnchor.js +84 -0
  338. package/lib/module/ai-components/conversation/list/usePinnedAnchor.js.map +1 -0
  339. package/lib/module/ai-components/conversation/useConversationRows.js +117 -0
  340. package/lib/module/ai-components/conversation/useConversationRows.js.map +1 -0
  341. package/lib/module/ai-components/conversation-state/controller/AIAgentError.js +13 -0
  342. package/lib/module/ai-components/conversation-state/controller/AIAgentError.js.map +1 -0
  343. package/lib/module/ai-components/conversation-state/controller/AIConversationController.js +431 -0
  344. package/lib/module/ai-components/conversation-state/controller/AIConversationController.js.map +1 -0
  345. package/lib/module/ai-components/conversation-state/controller/AIConversationExchange.js +89 -0
  346. package/lib/module/ai-components/conversation-state/controller/AIConversationExchange.js.map +1 -0
  347. package/lib/module/ai-components/conversation-state/controller/index.js +48 -0
  348. package/lib/module/ai-components/conversation-state/controller/index.js.map +1 -0
  349. package/lib/module/ai-components/conversation-state/controller/offers.js +35 -0
  350. package/lib/module/ai-components/conversation-state/controller/offers.js.map +1 -0
  351. package/lib/module/ai-components/conversation-state/controller/types.js +13 -0
  352. package/lib/module/ai-components/conversation-state/controller/types.js.map +1 -0
  353. package/lib/module/ai-components/conversation-state/controller/useAIConversationState.js +8 -0
  354. package/lib/module/ai-components/conversation-state/controller/useAIConversationState.js.map +1 -0
  355. package/lib/module/ai-components/conversation-state/fromStreamMessage.js +67 -0
  356. package/lib/module/ai-components/conversation-state/fromStreamMessage.js.map +1 -0
  357. package/lib/module/ai-components/conversation-state/index.js +37 -0
  358. package/lib/module/ai-components/conversation-state/index.js.map +1 -0
  359. package/lib/module/ai-components/conversation-state/types.js +4 -0
  360. package/lib/module/ai-components/conversation-state/types.js.map +1 -0
  361. package/lib/module/ai-components/generative-ui/AIUIAction.js +30 -0
  362. package/lib/module/ai-components/generative-ui/AIUIAction.js.map +1 -0
  363. package/lib/module/ai-components/generative-ui/AIUIArguments.js +128 -0
  364. package/lib/module/ai-components/generative-ui/AIUIArguments.js.map +1 -0
  365. package/lib/module/ai-components/generative-ui/AIUIComponent.js +50 -0
  366. package/lib/module/ai-components/generative-ui/AIUIComponent.js.map +1 -0
  367. package/lib/module/ai-components/generative-ui/AIUIComponentDefinition.js +134 -0
  368. package/lib/module/ai-components/generative-ui/AIUIComponentDefinition.js.map +1 -0
  369. package/lib/module/ai-components/generative-ui/AIUIDocument.js +32 -0
  370. package/lib/module/ai-components/generative-ui/AIUIDocument.js.map +1 -0
  371. package/lib/module/ai-components/generative-ui/AIUIEntrance.js +197 -0
  372. package/lib/module/ai-components/generative-ui/AIUIEntrance.js.map +1 -0
  373. package/lib/module/ai-components/generative-ui/AIUIErrorBoundary.js +30 -0
  374. package/lib/module/ai-components/generative-ui/AIUIErrorBoundary.js.map +1 -0
  375. package/lib/module/ai-components/generative-ui/AIUIHelpers.js +54 -0
  376. package/lib/module/ai-components/generative-ui/AIUIHelpers.js.map +1 -0
  377. package/lib/module/ai-components/generative-ui/AIUIHost.js +259 -0
  378. package/lib/module/ai-components/generative-ui/AIUIHost.js.map +1 -0
  379. package/lib/module/ai-components/generative-ui/AIUIMedia.js +24 -0
  380. package/lib/module/ai-components/generative-ui/AIUIMedia.js.map +1 -0
  381. package/lib/module/ai-components/generative-ui/AIUIRenderer.js +10 -0
  382. package/lib/module/ai-components/generative-ui/AIUIRenderer.js.map +1 -0
  383. package/lib/module/ai-components/generative-ui/AIUIView.js +57 -0
  384. package/lib/module/ai-components/generative-ui/AIUIView.js.map +1 -0
  385. package/lib/module/ai-components/generative-ui/index.js +181 -0
  386. package/lib/module/ai-components/generative-ui/index.js.map +1 -0
  387. package/lib/module/ai-components/icons.js +44 -0
  388. package/lib/module/ai-components/icons.js.map +1 -0
  389. package/lib/module/ai-components/index.js +96 -0
  390. package/lib/module/ai-components/index.js.map +1 -1
  391. package/lib/module/ai-components/internal/Shimmer.js +36 -0
  392. package/lib/module/ai-components/internal/Shimmer.js.map +1 -0
  393. package/lib/module/ai-components/internal/format.js +66 -0
  394. package/lib/module/ai-components/internal/format.js.map +1 -0
  395. package/lib/module/ai-components/internal/hooks/useBottomSafeArea.js +12 -0
  396. package/lib/module/ai-components/internal/hooks/useBottomSafeArea.js.map +1 -0
  397. package/lib/module/ai-components/internal/icons/AgentIcons.js +74 -0
  398. package/lib/module/ai-components/internal/icons/AgentIcons.js.map +1 -0
  399. package/lib/module/ai-components/internal/keyboard.js +40 -0
  400. package/lib/module/ai-components/internal/keyboard.js.map +1 -0
  401. package/lib/module/ai-components/internal/tokens.js +11 -0
  402. package/lib/module/ai-components/internal/tokens.js.map +1 -0
  403. package/lib/module/ai-components/internal/uuid.js +21 -0
  404. package/lib/module/ai-components/internal/uuid.js.map +1 -0
  405. package/lib/module/ai-components/markdown/components/CodeBlock.js +4 -2
  406. package/lib/module/ai-components/markdown/components/CodeBlock.js.map +1 -1
  407. package/lib/module/ai-components/markdown/components/InlineCode.js +1 -0
  408. package/lib/module/ai-components/markdown/components/InlineCode.js.map +1 -1
  409. package/lib/module/ai-components/markdown/components/Text.js +11 -2
  410. package/lib/module/ai-components/markdown/components/Text.js.map +1 -1
  411. package/lib/module/ai-components/markdown/styles.js +27 -29
  412. package/lib/module/ai-components/markdown/styles.js.map +1 -1
  413. package/lib/module/ai-components/message/AIAssistantMessage.js +64 -0
  414. package/lib/module/ai-components/message/AIAssistantMessage.js.map +1 -0
  415. package/lib/module/ai-components/message/AIMessageAttachment.js +189 -0
  416. package/lib/module/ai-components/message/AIMessageAttachment.js.map +1 -0
  417. package/lib/module/ai-components/message/AIReplyActions.js +132 -0
  418. package/lib/module/ai-components/message/AIReplyActions.js.map +1 -0
  419. package/lib/module/ai-components/message/AIUserMessage.js +104 -0
  420. package/lib/module/ai-components/message/AIUserMessage.js.map +1 -0
  421. package/lib/module/ai-components/message/UserMessageMenu.js +150 -0
  422. package/lib/module/ai-components/message/UserMessageMenu.js.map +1 -0
  423. package/lib/module/ai-components/message/index.js +48 -0
  424. package/lib/module/ai-components/message/index.js.map +1 -0
  425. package/lib/module/ai-components/message-composer/ActionButton.js +4 -2
  426. package/lib/module/ai-components/message-composer/ActionButton.js.map +1 -1
  427. package/lib/module/ai-components/message-composer/ActionSheet.js +22 -6
  428. package/lib/module/ai-components/message-composer/ActionSheet.js.map +1 -1
  429. package/lib/module/ai-components/message-composer/AttachmentButton.js +5 -1
  430. package/lib/module/ai-components/message-composer/AttachmentButton.js.map +1 -1
  431. package/lib/module/ai-components/message-composer/ChatOptions.js +147 -0
  432. package/lib/module/ai-components/message-composer/ChatOptions.js.map +1 -0
  433. package/lib/module/ai-components/message-composer/ComposerView.js +146 -20
  434. package/lib/module/ai-components/message-composer/ComposerView.js.map +1 -1
  435. package/lib/module/ai-components/message-composer/EditingMessageChip.js +81 -0
  436. package/lib/module/ai-components/message-composer/EditingMessageChip.js.map +1 -0
  437. package/lib/module/ai-components/message-composer/MediaPreviewList.js +26 -1
  438. package/lib/module/ai-components/message-composer/MediaPreviewList.js.map +1 -1
  439. package/lib/module/ai-components/message-composer/index.js +11 -0
  440. package/lib/module/ai-components/message-composer/index.js.map +1 -1
  441. package/lib/module/ai-components/message-parts/AIMessageParts.js +133 -0
  442. package/lib/module/ai-components/message-parts/AIMessageParts.js.map +1 -0
  443. package/lib/module/ai-components/message-parts/AIToolApproval.js +197 -0
  444. package/lib/module/ai-components/message-parts/AIToolApproval.js.map +1 -0
  445. package/lib/module/ai-components/message-parts/AIToolAuthorization.js +250 -0
  446. package/lib/module/ai-components/message-parts/AIToolAuthorization.js.map +1 -0
  447. package/lib/module/ai-components/message-parts/AIToolCall.js +159 -0
  448. package/lib/module/ai-components/message-parts/AIToolCall.js.map +1 -0
  449. package/lib/module/ai-components/message-parts/callStates.js +54 -0
  450. package/lib/module/ai-components/message-parts/callStates.js.map +1 -0
  451. package/lib/module/ai-components/message-parts/index.js +70 -0
  452. package/lib/module/ai-components/message-parts/index.js.map +1 -0
  453. package/lib/module/ai-components/message-parts/parseMessageParts.js +126 -0
  454. package/lib/module/ai-components/message-parts/parseMessageParts.js.map +1 -0
  455. package/lib/module/ai-components/message-parts/types.js +2 -0
  456. package/lib/module/ai-components/message-parts/types.js.map +1 -0
  457. package/lib/module/ai-components/native-specs/NativeAIAgent.js +7 -0
  458. package/lib/module/ai-components/native-specs/NativeAIAgent.js.map +1 -0
  459. package/lib/module/ai-components/reasoning/AIReasoning.js +401 -0
  460. package/lib/module/ai-components/reasoning/AIReasoning.js.map +1 -0
  461. package/lib/module/ai-components/reasoning/index.js +26 -0
  462. package/lib/module/ai-components/reasoning/index.js.map +1 -0
  463. package/lib/module/ai-components/reasoning/thinkingClock.js +63 -0
  464. package/lib/module/ai-components/reasoning/thinkingClock.js.map +1 -0
  465. package/lib/module/ai-components/services/clipboard-service/expo.js +7 -2
  466. package/lib/module/ai-components/services/clipboard-service/expo.js.map +1 -1
  467. package/lib/module/ai-components/store/composer/store.js.map +1 -1
  468. package/lib/module/ai-components/store/composer/useComposerChatOption.js +18 -0
  469. package/lib/module/ai-components/store/composer/useComposerChatOption.js.map +1 -0
  470. package/lib/module/ai-components/store/composer/useComposerIsEditing.js +18 -0
  471. package/lib/module/ai-components/store/composer/useComposerIsEditing.js.map +1 -0
  472. package/lib/module/ai-components/store/index.js +22 -0
  473. package/lib/module/ai-components/store/index.js.map +1 -1
  474. package/lib/module/ai-components/suggestions/AISuggestions.js +66 -0
  475. package/lib/module/ai-components/suggestions/AISuggestions.js.map +1 -0
  476. package/lib/module/ai-components/suggestions/index.js +15 -0
  477. package/lib/module/ai-components/suggestions/index.js.map +1 -0
  478. package/lib/module/ai-components/syntax-highlighting/utils/flatten-nodes.js +2 -1
  479. package/lib/module/ai-components/syntax-highlighting/utils/flatten-nodes.js.map +1 -1
  480. package/lib/module/ai-components/syntax-highlighting/utils/renderer.js +3 -2
  481. package/lib/module/ai-components/syntax-highlighting/utils/renderer.js.map +1 -1
  482. package/lib/module/ai-components/theme.js +137 -1
  483. package/lib/module/ai-components/theme.js.map +1 -1
  484. package/lib/module/ai-components/tool-calls/AIClientIdentity.js +22 -0
  485. package/lib/module/ai-components/tool-calls/AIClientIdentity.js.map +1 -0
  486. package/lib/module/ai-components/tool-calls/AIClientToolRunner.js +109 -0
  487. package/lib/module/ai-components/tool-calls/AIClientToolRunner.js.map +1 -0
  488. package/lib/module/ai-components/tool-calls/AIToolApprover.js +23 -0
  489. package/lib/module/ai-components/tool-calls/AIToolApprover.js.map +1 -0
  490. package/lib/module/ai-components/tool-calls/authSessionAuthorizer.js +88 -0
  491. package/lib/module/ai-components/tool-calls/authSessionAuthorizer.js.map +1 -0
  492. package/lib/module/ai-components/tool-calls/index.js +48 -0
  493. package/lib/module/ai-components/tool-calls/index.js.map +1 -0
  494. package/lib/module/ai-components/voice-visualization/glowShader.js.map +1 -1
  495. package/lib/module/components/Accessibility/useAccessibilityAnnouncer.js.map +1 -1
  496. package/lib/module/components/Message/MessageItemView/utils/renderText.js.map +1 -1
  497. package/lib/module/contexts/translationContext/TranslationContext.js +2 -2
  498. package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
  499. package/lib/module/i18n/ar.json +40 -1
  500. package/lib/module/i18n/en.json +40 -1
  501. package/lib/module/i18n/es.json +40 -1
  502. package/lib/module/i18n/fr.json +40 -1
  503. package/lib/module/i18n/he.json +40 -1
  504. package/lib/module/i18n/hi.json +40 -1
  505. package/lib/module/i18n/it.json +40 -1
  506. package/lib/module/i18n/ja.json +40 -1
  507. package/lib/module/i18n/ko.json +40 -1
  508. package/lib/module/i18n/nl.json +40 -1
  509. package/lib/module/i18n/pt-br.json +40 -1
  510. package/lib/module/i18n/ru.json +40 -1
  511. package/lib/module/i18n/tr.json +40 -1
  512. package/lib/module/mock-builders/a2ui/ohrid.js +84 -0
  513. package/lib/module/mock-builders/a2ui/ohrid.js.map +1 -0
  514. package/lib/module/utils/i18n/Streami18n.js +9 -4
  515. package/lib/module/utils/i18n/Streami18n.js.map +1 -1
  516. package/lib/module/utils/i18n/utils.js +7 -0
  517. package/lib/module/utils/i18n/utils.js.map +1 -0
  518. package/lib/module/version.json +1 -1
  519. package/lib/typescript/a11y/a11yUtils.d.ts +0 -1
  520. package/lib/typescript/a11y/a11yUtils.d.ts.map +1 -1
  521. package/lib/typescript/a11y/hooks/useResolvedModalAccessibilityProps.d.ts +2 -3
  522. package/lib/typescript/a11y/hooks/useResolvedModalAccessibilityProps.d.ts.map +1 -1
  523. package/lib/typescript/a2ui/A2UIContexts.d.ts +9 -0
  524. package/lib/typescript/a2ui/A2UIContexts.d.ts.map +1 -0
  525. package/lib/typescript/a2ui/A2UIInstructions.d.ts +47 -0
  526. package/lib/typescript/a2ui/A2UIInstructions.d.ts.map +1 -0
  527. package/lib/typescript/a2ui/A2UIPlaceholder.d.ts +4 -0
  528. package/lib/typescript/a2ui/A2UIPlaceholder.d.ts.map +1 -0
  529. package/lib/typescript/a2ui/A2UIRenderer.d.ts +130 -0
  530. package/lib/typescript/a2ui/A2UIRenderer.d.ts.map +1 -0
  531. package/lib/typescript/a2ui/A2UIStream.d.ts +23 -0
  532. package/lib/typescript/a2ui/A2UIStream.d.ts.map +1 -0
  533. package/lib/typescript/a2ui/A2UISurface.d.ts +19 -0
  534. package/lib/typescript/a2ui/A2UISurface.d.ts.map +1 -0
  535. package/lib/typescript/a2ui/basicFunctions.d.ts +10 -0
  536. package/lib/typescript/a2ui/basicFunctions.d.ts.map +1 -0
  537. package/lib/typescript/a2ui/catalogDocument.d.ts +56 -0
  538. package/lib/typescript/a2ui/catalogDocument.d.ts.map +1 -0
  539. package/lib/typescript/a2ui/catalogs.d.ts +42 -0
  540. package/lib/typescript/a2ui/catalogs.d.ts.map +1 -0
  541. package/lib/typescript/a2ui/components/DateTimeInput.d.ts +44 -0
  542. package/lib/typescript/a2ui/components/DateTimeInput.d.ts.map +1 -0
  543. package/lib/typescript/a2ui/components/Media.d.ts +27 -0
  544. package/lib/typescript/a2ui/components/Media.d.ts.map +1 -0
  545. package/lib/typescript/a2ui/components/basicComponents.d.ts +4 -0
  546. package/lib/typescript/a2ui/components/basicComponents.d.ts.map +1 -0
  547. package/lib/typescript/a2ui/components/iconPaths.d.ts +2 -0
  548. package/lib/typescript/a2ui/components/iconPaths.d.ts.map +1 -0
  549. package/lib/typescript/a2ui/components/types.d.ts +23 -0
  550. package/lib/typescript/a2ui/components/types.d.ts.map +1 -0
  551. package/lib/typescript/a2ui/index.d.ts +8 -0
  552. package/lib/typescript/a2ui/index.d.ts.map +1 -0
  553. package/lib/typescript/a2ui/instructions.d.ts +39 -0
  554. package/lib/typescript/a2ui/instructions.d.ts.map +1 -0
  555. package/lib/typescript/a2ui/secrets.d.ts +20 -0
  556. package/lib/typescript/a2ui/secrets.d.ts.map +1 -0
  557. package/lib/typescript/a2ui/useReplyState.d.ts +4 -0
  558. package/lib/typescript/a2ui/useReplyState.d.ts.map +1 -0
  559. package/lib/typescript/ai-components/AITypingIndicatorView.d.ts.map +1 -1
  560. package/lib/typescript/ai-components/StreamingMessageView.d.ts +4 -1
  561. package/lib/typescript/ai-components/StreamingMessageView.d.ts.map +1 -1
  562. package/lib/typescript/ai-components/charts/components/PieLegend.d.ts.map +1 -1
  563. package/lib/typescript/ai-components/charts/components/VictoryChart.d.ts.map +1 -1
  564. package/lib/typescript/ai-components/charts/utils/format-time-label.d.ts +7 -0
  565. package/lib/typescript/ai-components/charts/utils/format-time-label.d.ts.map +1 -0
  566. package/lib/typescript/ai-components/charts/vega-lite/schema.d.ts +8 -8
  567. package/lib/typescript/ai-components/charts/vega-lite/schema.d.ts.map +1 -1
  568. package/lib/typescript/ai-components/contexts/composer-context.d.ts +3 -0
  569. package/lib/typescript/ai-components/contexts/composer-context.d.ts.map +1 -1
  570. package/lib/typescript/ai-components/contexts/index.d.ts +1 -0
  571. package/lib/typescript/ai-components/contexts/index.d.ts.map +1 -1
  572. package/lib/typescript/ai-components/contexts/theme-context.d.ts.map +1 -1
  573. package/lib/typescript/ai-components/contexts/translation-context.d.ts +19 -0
  574. package/lib/typescript/ai-components/contexts/translation-context.d.ts.map +1 -0
  575. package/lib/typescript/ai-components/conversation/AIConversation.d.ts +133 -0
  576. package/lib/typescript/ai-components/conversation/AIConversation.d.ts.map +1 -0
  577. package/lib/typescript/ai-components/conversation/entries.d.ts +47 -0
  578. package/lib/typescript/ai-components/conversation/entries.d.ts.map +1 -0
  579. package/lib/typescript/ai-components/conversation/index.d.ts +3 -0
  580. package/lib/typescript/ai-components/conversation/index.d.ts.map +1 -0
  581. package/lib/typescript/ai-components/conversation/list/AIChatList.d.ts +30 -0
  582. package/lib/typescript/ai-components/conversation/list/AIChatList.d.ts.map +1 -0
  583. package/lib/typescript/ai-components/conversation/list/useChatListController.d.ts +45 -0
  584. package/lib/typescript/ai-components/conversation/list/useChatListController.d.ts.map +1 -0
  585. package/lib/typescript/ai-components/conversation/list/useEndInView.d.ts +26 -0
  586. package/lib/typescript/ai-components/conversation/list/useEndInView.d.ts.map +1 -0
  587. package/lib/typescript/ai-components/conversation/list/useKeyboardOverlap.d.ts +17 -0
  588. package/lib/typescript/ai-components/conversation/list/useKeyboardOverlap.d.ts.map +1 -0
  589. package/lib/typescript/ai-components/conversation/list/useLoadOlder.d.ts +24 -0
  590. package/lib/typescript/ai-components/conversation/list/useLoadOlder.d.ts.map +1 -0
  591. package/lib/typescript/ai-components/conversation/list/usePinnedAnchor.d.ts +26 -0
  592. package/lib/typescript/ai-components/conversation/list/usePinnedAnchor.d.ts.map +1 -0
  593. package/lib/typescript/ai-components/conversation/useConversationRows.d.ts +66 -0
  594. package/lib/typescript/ai-components/conversation/useConversationRows.d.ts.map +1 -0
  595. package/lib/typescript/ai-components/conversation-state/controller/AIAgentError.d.ts +10 -0
  596. package/lib/typescript/ai-components/conversation-state/controller/AIAgentError.d.ts.map +1 -0
  597. package/lib/typescript/ai-components/conversation-state/controller/AIConversationController.d.ts +173 -0
  598. package/lib/typescript/ai-components/conversation-state/controller/AIConversationController.d.ts.map +1 -0
  599. package/lib/typescript/ai-components/conversation-state/controller/AIConversationExchange.d.ts +23 -0
  600. package/lib/typescript/ai-components/conversation-state/controller/AIConversationExchange.d.ts.map +1 -0
  601. package/lib/typescript/ai-components/conversation-state/controller/index.d.ts +5 -0
  602. package/lib/typescript/ai-components/conversation-state/controller/index.d.ts.map +1 -0
  603. package/lib/typescript/ai-components/conversation-state/controller/offers.d.ts +25 -0
  604. package/lib/typescript/ai-components/conversation-state/controller/offers.d.ts.map +1 -0
  605. package/lib/typescript/ai-components/conversation-state/controller/types.d.ts +142 -0
  606. package/lib/typescript/ai-components/conversation-state/controller/types.d.ts.map +1 -0
  607. package/lib/typescript/ai-components/conversation-state/controller/useAIConversationState.d.ts +9 -0
  608. package/lib/typescript/ai-components/conversation-state/controller/useAIConversationState.d.ts.map +1 -0
  609. package/lib/typescript/ai-components/conversation-state/fromStreamMessage.d.ts +25 -0
  610. package/lib/typescript/ai-components/conversation-state/fromStreamMessage.d.ts.map +1 -0
  611. package/lib/typescript/ai-components/conversation-state/index.d.ts +4 -0
  612. package/lib/typescript/ai-components/conversation-state/index.d.ts.map +1 -0
  613. package/lib/typescript/ai-components/conversation-state/types.d.ts +55 -0
  614. package/lib/typescript/ai-components/conversation-state/types.d.ts.map +1 -0
  615. package/lib/typescript/ai-components/generative-ui/AIUIAction.d.ts +48 -0
  616. package/lib/typescript/ai-components/generative-ui/AIUIAction.d.ts.map +1 -0
  617. package/lib/typescript/ai-components/generative-ui/AIUIArguments.d.ts +15 -0
  618. package/lib/typescript/ai-components/generative-ui/AIUIArguments.d.ts.map +1 -0
  619. package/lib/typescript/ai-components/generative-ui/AIUIComponent.d.ts +51 -0
  620. package/lib/typescript/ai-components/generative-ui/AIUIComponent.d.ts.map +1 -0
  621. package/lib/typescript/ai-components/generative-ui/AIUIComponentDefinition.d.ts +84 -0
  622. package/lib/typescript/ai-components/generative-ui/AIUIComponentDefinition.d.ts.map +1 -0
  623. package/lib/typescript/ai-components/generative-ui/AIUIDocument.d.ts +50 -0
  624. package/lib/typescript/ai-components/generative-ui/AIUIDocument.d.ts.map +1 -0
  625. package/lib/typescript/ai-components/generative-ui/AIUIEntrance.d.ts +76 -0
  626. package/lib/typescript/ai-components/generative-ui/AIUIEntrance.d.ts.map +1 -0
  627. package/lib/typescript/ai-components/generative-ui/AIUIErrorBoundary.d.ts +26 -0
  628. package/lib/typescript/ai-components/generative-ui/AIUIErrorBoundary.d.ts.map +1 -0
  629. package/lib/typescript/ai-components/generative-ui/AIUIHelpers.d.ts +23 -0
  630. package/lib/typescript/ai-components/generative-ui/AIUIHelpers.d.ts.map +1 -0
  631. package/lib/typescript/ai-components/generative-ui/AIUIHost.d.ts +160 -0
  632. package/lib/typescript/ai-components/generative-ui/AIUIHost.d.ts.map +1 -0
  633. package/lib/typescript/ai-components/generative-ui/AIUIMedia.d.ts +22 -0
  634. package/lib/typescript/ai-components/generative-ui/AIUIMedia.d.ts.map +1 -0
  635. package/lib/typescript/ai-components/generative-ui/AIUIRenderer.d.ts +53 -0
  636. package/lib/typescript/ai-components/generative-ui/AIUIRenderer.d.ts.map +1 -0
  637. package/lib/typescript/ai-components/generative-ui/AIUIView.d.ts +35 -0
  638. package/lib/typescript/ai-components/generative-ui/AIUIView.d.ts.map +1 -0
  639. package/lib/typescript/ai-components/generative-ui/index.d.ts +11 -0
  640. package/lib/typescript/ai-components/generative-ui/index.d.ts.map +1 -0
  641. package/lib/typescript/ai-components/icons.d.ts +66 -0
  642. package/lib/typescript/ai-components/icons.d.ts.map +1 -0
  643. package/lib/typescript/ai-components/index.d.ts +8 -0
  644. package/lib/typescript/ai-components/index.d.ts.map +1 -1
  645. package/lib/typescript/ai-components/internal/Shimmer.d.ts +14 -0
  646. package/lib/typescript/ai-components/internal/Shimmer.d.ts.map +1 -0
  647. package/lib/typescript/ai-components/internal/format.d.ts +7 -0
  648. package/lib/typescript/ai-components/internal/format.d.ts.map +1 -0
  649. package/lib/typescript/ai-components/internal/hooks/useBottomSafeArea.d.ts +3 -0
  650. package/lib/typescript/ai-components/internal/hooks/useBottomSafeArea.d.ts.map +1 -0
  651. package/lib/typescript/ai-components/internal/icons/AgentIcons.d.ts +31 -0
  652. package/lib/typescript/ai-components/internal/icons/AgentIcons.d.ts.map +1 -0
  653. package/lib/typescript/ai-components/internal/keyboard.d.ts +9 -0
  654. package/lib/typescript/ai-components/internal/keyboard.d.ts.map +1 -0
  655. package/lib/typescript/ai-components/internal/tokens.d.ts +2 -0
  656. package/lib/typescript/ai-components/internal/tokens.d.ts.map +1 -0
  657. package/lib/typescript/ai-components/internal/uuid.d.ts +2 -0
  658. package/lib/typescript/ai-components/internal/uuid.d.ts.map +1 -0
  659. package/lib/typescript/ai-components/markdown/components/CodeBlock.d.ts.map +1 -1
  660. package/lib/typescript/ai-components/markdown/components/InlineCode.d.ts.map +1 -1
  661. package/lib/typescript/ai-components/markdown/components/Text.d.ts.map +1 -1
  662. package/lib/typescript/ai-components/markdown/styles.d.ts +23 -4
  663. package/lib/typescript/ai-components/markdown/styles.d.ts.map +1 -1
  664. package/lib/typescript/ai-components/markdown/types.d.ts +1 -0
  665. package/lib/typescript/ai-components/markdown/types.d.ts.map +1 -1
  666. package/lib/typescript/ai-components/message/AIAssistantMessage.d.ts +40 -0
  667. package/lib/typescript/ai-components/message/AIAssistantMessage.d.ts.map +1 -0
  668. package/lib/typescript/ai-components/message/AIMessageAttachment.d.ts +33 -0
  669. package/lib/typescript/ai-components/message/AIMessageAttachment.d.ts.map +1 -0
  670. package/lib/typescript/ai-components/message/AIReplyActions.d.ts +19 -0
  671. package/lib/typescript/ai-components/message/AIReplyActions.d.ts.map +1 -0
  672. package/lib/typescript/ai-components/message/AIUserMessage.d.ts +17 -0
  673. package/lib/typescript/ai-components/message/AIUserMessage.d.ts.map +1 -0
  674. package/lib/typescript/ai-components/message/UserMessageMenu.d.ts +31 -0
  675. package/lib/typescript/ai-components/message/UserMessageMenu.d.ts.map +1 -0
  676. package/lib/typescript/ai-components/message/index.d.ts +5 -0
  677. package/lib/typescript/ai-components/message/index.d.ts.map +1 -0
  678. package/lib/typescript/ai-components/message-composer/ActionButton.d.ts +1 -1
  679. package/lib/typescript/ai-components/message-composer/ActionButton.d.ts.map +1 -1
  680. package/lib/typescript/ai-components/message-composer/ActionSheet.d.ts +2 -2
  681. package/lib/typescript/ai-components/message-composer/ActionSheet.d.ts.map +1 -1
  682. package/lib/typescript/ai-components/message-composer/AttachmentButton.d.ts.map +1 -1
  683. package/lib/typescript/ai-components/message-composer/ChatOptions.d.ts +35 -0
  684. package/lib/typescript/ai-components/message-composer/ChatOptions.d.ts.map +1 -0
  685. package/lib/typescript/ai-components/message-composer/ComposerView.d.ts +39 -3
  686. package/lib/typescript/ai-components/message-composer/ComposerView.d.ts.map +1 -1
  687. package/lib/typescript/ai-components/message-composer/EditingMessageChip.d.ts +7 -0
  688. package/lib/typescript/ai-components/message-composer/EditingMessageChip.d.ts.map +1 -0
  689. package/lib/typescript/ai-components/message-composer/MediaPreviewList.d.ts.map +1 -1
  690. package/lib/typescript/ai-components/message-composer/index.d.ts +1 -0
  691. package/lib/typescript/ai-components/message-composer/index.d.ts.map +1 -1
  692. package/lib/typescript/ai-components/message-parts/AIMessageParts.d.ts +40 -0
  693. package/lib/typescript/ai-components/message-parts/AIMessageParts.d.ts.map +1 -0
  694. package/lib/typescript/ai-components/message-parts/AIToolApproval.d.ts +38 -0
  695. package/lib/typescript/ai-components/message-parts/AIToolApproval.d.ts.map +1 -0
  696. package/lib/typescript/ai-components/message-parts/AIToolAuthorization.d.ts +48 -0
  697. package/lib/typescript/ai-components/message-parts/AIToolAuthorization.d.ts.map +1 -0
  698. package/lib/typescript/ai-components/message-parts/AIToolCall.d.ts +11 -0
  699. package/lib/typescript/ai-components/message-parts/AIToolCall.d.ts.map +1 -0
  700. package/lib/typescript/ai-components/message-parts/callStates.d.ts +9 -0
  701. package/lib/typescript/ai-components/message-parts/callStates.d.ts.map +1 -0
  702. package/lib/typescript/ai-components/message-parts/index.d.ts +7 -0
  703. package/lib/typescript/ai-components/message-parts/index.d.ts.map +1 -0
  704. package/lib/typescript/ai-components/message-parts/parseMessageParts.d.ts +47 -0
  705. package/lib/typescript/ai-components/message-parts/parseMessageParts.d.ts.map +1 -0
  706. package/lib/typescript/ai-components/message-parts/types.d.ts +137 -0
  707. package/lib/typescript/ai-components/message-parts/types.d.ts.map +1 -0
  708. package/lib/typescript/ai-components/native-specs/NativeAIAgent.d.ts +22 -0
  709. package/lib/typescript/ai-components/native-specs/NativeAIAgent.d.ts.map +1 -0
  710. package/lib/typescript/ai-components/reasoning/AIReasoning.d.ts +63 -0
  711. package/lib/typescript/ai-components/reasoning/AIReasoning.d.ts.map +1 -0
  712. package/lib/typescript/ai-components/reasoning/index.d.ts +3 -0
  713. package/lib/typescript/ai-components/reasoning/index.d.ts.map +1 -0
  714. package/lib/typescript/ai-components/reasoning/thinkingClock.d.ts +29 -0
  715. package/lib/typescript/ai-components/reasoning/thinkingClock.d.ts.map +1 -0
  716. package/lib/typescript/ai-components/services/clipboard-service/expo.d.ts.map +1 -1
  717. package/lib/typescript/ai-components/store/composer/store.d.ts +8 -0
  718. package/lib/typescript/ai-components/store/composer/store.d.ts.map +1 -1
  719. package/lib/typescript/ai-components/store/composer/useComposerChatOption.d.ts +5 -0
  720. package/lib/typescript/ai-components/store/composer/useComposerChatOption.d.ts.map +1 -0
  721. package/lib/typescript/ai-components/store/composer/useComposerIsEditing.d.ts +5 -0
  722. package/lib/typescript/ai-components/store/composer/useComposerIsEditing.d.ts.map +1 -0
  723. package/lib/typescript/ai-components/store/index.d.ts +2 -0
  724. package/lib/typescript/ai-components/store/index.d.ts.map +1 -1
  725. package/lib/typescript/ai-components/suggestions/AISuggestions.d.ts +13 -0
  726. package/lib/typescript/ai-components/suggestions/AISuggestions.d.ts.map +1 -0
  727. package/lib/typescript/ai-components/suggestions/index.d.ts +2 -0
  728. package/lib/typescript/ai-components/suggestions/index.d.ts.map +1 -0
  729. package/lib/typescript/ai-components/syntax-highlighting/utils/flatten-nodes.d.ts.map +1 -1
  730. package/lib/typescript/ai-components/syntax-highlighting/utils/renderer.d.ts +1 -1
  731. package/lib/typescript/ai-components/syntax-highlighting/utils/renderer.d.ts.map +1 -1
  732. package/lib/typescript/ai-components/theme.d.ts +200 -0
  733. package/lib/typescript/ai-components/theme.d.ts.map +1 -1
  734. package/lib/typescript/ai-components/tool-calls/AIClientIdentity.d.ts +14 -0
  735. package/lib/typescript/ai-components/tool-calls/AIClientIdentity.d.ts.map +1 -0
  736. package/lib/typescript/ai-components/tool-calls/AIClientToolRunner.d.ts +109 -0
  737. package/lib/typescript/ai-components/tool-calls/AIClientToolRunner.d.ts.map +1 -0
  738. package/lib/typescript/ai-components/tool-calls/AIToolApprover.d.ts +48 -0
  739. package/lib/typescript/ai-components/tool-calls/AIToolApprover.d.ts.map +1 -0
  740. package/lib/typescript/ai-components/tool-calls/authSessionAuthorizer.d.ts +57 -0
  741. package/lib/typescript/ai-components/tool-calls/authSessionAuthorizer.d.ts.map +1 -0
  742. package/lib/typescript/ai-components/tool-calls/index.d.ts +5 -0
  743. package/lib/typescript/ai-components/tool-calls/index.d.ts.map +1 -0
  744. package/lib/typescript/ai-components/voice-visualization/glowShader.d.ts.map +1 -1
  745. package/lib/typescript/ai-components/voice-visualization/simplex.d.ts +1 -1
  746. package/lib/typescript/components/Accessibility/NotificationAnnouncer.d.ts +5 -5
  747. package/lib/typescript/components/Accessibility/hooks/useIncomingMessageAnnouncements.d.ts +1 -1
  748. package/lib/typescript/components/Accessibility/useAccessibilityAnnouncer.d.ts +0 -2
  749. package/lib/typescript/components/Accessibility/useAccessibilityAnnouncer.d.ts.map +1 -1
  750. package/lib/typescript/components/Message/MessageItemView/utils/renderText.d.ts.map +1 -1
  751. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts +1 -1
  752. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts.map +1 -1
  753. package/lib/typescript/i18n/ar.json +40 -1
  754. package/lib/typescript/i18n/en.json +40 -1
  755. package/lib/typescript/i18n/es.json +40 -1
  756. package/lib/typescript/i18n/fr.json +40 -1
  757. package/lib/typescript/i18n/he.json +40 -1
  758. package/lib/typescript/i18n/hi.json +40 -1
  759. package/lib/typescript/i18n/it.json +40 -1
  760. package/lib/typescript/i18n/ja.json +40 -1
  761. package/lib/typescript/i18n/ko.json +40 -1
  762. package/lib/typescript/i18n/nl.json +40 -1
  763. package/lib/typescript/i18n/pt-br.json +40 -1
  764. package/lib/typescript/i18n/ru.json +40 -1
  765. package/lib/typescript/i18n/tr.json +40 -1
  766. package/lib/typescript/utils/i18n/Streami18n.d.ts +41 -2
  767. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  768. package/lib/typescript/utils/i18n/utils.d.ts +3 -0
  769. package/lib/typescript/utils/i18n/utils.d.ts.map +1 -0
  770. package/package.json +10 -2
  771. package/src/a11y/a11yUtils.ts +0 -1
  772. package/src/a11y/hooks/useResolvedModalAccessibilityProps.ts +2 -3
  773. package/src/a2ui/A2UIContexts.ts +15 -0
  774. package/src/a2ui/A2UIInstructions.ts +102 -0
  775. package/src/a2ui/A2UIPlaceholder.tsx +24 -0
  776. package/src/a2ui/A2UIRenderer.tsx +504 -0
  777. package/src/a2ui/A2UIStream.ts +105 -0
  778. package/src/a2ui/A2UISurface.tsx +270 -0
  779. package/src/a2ui/__tests__/A2UIInstructions.test.ts +233 -0
  780. package/src/a2ui/__tests__/A2UIRenderer.test.tsx +1559 -0
  781. package/src/a2ui/__tests__/conformance.test.ts +579 -0
  782. package/src/a2ui/basicCatalog.json +1206 -0
  783. package/src/a2ui/basicFunctions.ts +429 -0
  784. package/src/a2ui/catalogDocument.ts +119 -0
  785. package/src/a2ui/catalogs.ts +185 -0
  786. package/src/a2ui/components/DateTimeInput.tsx +381 -0
  787. package/src/a2ui/components/Media.tsx +278 -0
  788. package/src/a2ui/components/basicComponents.tsx +832 -0
  789. package/src/a2ui/components/iconPaths.ts +116 -0
  790. package/src/a2ui/components/types.ts +24 -0
  791. package/src/a2ui/index.ts +18 -0
  792. package/src/a2ui/instructions.ts +341 -0
  793. package/src/a2ui/secrets.ts +154 -0
  794. package/src/a2ui/useReplyState.ts +26 -0
  795. package/src/ai-components/AITypingIndicatorView.tsx +6 -22
  796. package/src/ai-components/README.md +64 -3
  797. package/src/ai-components/StreamingMessageView.tsx +27 -3
  798. package/src/ai-components/__tests__/ComposerView.test.tsx +247 -2
  799. package/src/ai-components/__tests__/Markdown.test.tsx +13 -0
  800. package/src/ai-components/__tests__/StreamingMessageView.test.tsx +69 -0
  801. package/src/ai-components/__tests__/charts.test.ts +75 -0
  802. package/src/ai-components/__tests__/clientToolRunner.test.ts +239 -0
  803. package/src/ai-components/__tests__/conversation.test.tsx +787 -0
  804. package/src/ai-components/__tests__/conversationController.test.ts +1561 -0
  805. package/src/ai-components/__tests__/conversationExchange.test.ts +187 -0
  806. package/src/ai-components/__tests__/conversationRows.test.ts +207 -0
  807. package/src/ai-components/__tests__/conversationUI.test.tsx +606 -0
  808. package/src/ai-components/__tests__/format.test.ts +32 -0
  809. package/src/ai-components/__tests__/generativeUI.test.ts +634 -0
  810. package/src/ai-components/__tests__/keyboard.test.ts +14 -0
  811. package/src/ai-components/__tests__/messagePartViews.test.tsx +385 -0
  812. package/src/ai-components/__tests__/messageParts.test.ts +336 -0
  813. package/src/ai-components/__tests__/messageViews.test.tsx +321 -0
  814. package/src/ai-components/__tests__/signIn.test.tsx +324 -0
  815. package/src/ai-components/__tests__/theme.test.tsx +18 -0
  816. package/src/ai-components/__tests__/translation.test.tsx +85 -0
  817. package/src/ai-components/__tests__/voiceDriver.test.ts +0 -3
  818. package/src/ai-components/__tests__/voicePalette.test.ts +1 -1
  819. package/src/ai-components/__tests__/withoutKeyboardController.test.tsx +60 -0
  820. package/src/ai-components/charts/components/PieLegend.tsx +2 -1
  821. package/src/ai-components/charts/components/VictoryChart.tsx +10 -2
  822. package/src/ai-components/charts/utils/format-time-label.ts +18 -0
  823. package/src/ai-components/charts/vega-lite/schema.ts +19 -2
  824. package/src/ai-components/contexts/composer-context.tsx +13 -5
  825. package/src/ai-components/contexts/index.ts +1 -0
  826. package/src/ai-components/contexts/theme-context.tsx +19 -4
  827. package/src/ai-components/contexts/translation-context.tsx +44 -0
  828. package/src/ai-components/conversation/AIConversation.tsx +612 -0
  829. package/src/ai-components/conversation/entries.ts +177 -0
  830. package/src/ai-components/conversation/index.ts +2 -0
  831. package/src/ai-components/conversation/list/AIChatList.tsx +227 -0
  832. package/src/ai-components/conversation/list/useChatListController.ts +91 -0
  833. package/src/ai-components/conversation/list/useEndInView.ts +61 -0
  834. package/src/ai-components/conversation/list/useKeyboardOverlap.ts +52 -0
  835. package/src/ai-components/conversation/list/useLoadOlder.ts +97 -0
  836. package/src/ai-components/conversation/list/usePinnedAnchor.ts +113 -0
  837. package/src/ai-components/conversation/useConversationRows.ts +231 -0
  838. package/src/ai-components/conversation-state/controller/AIAgentError.ts +14 -0
  839. package/src/ai-components/conversation-state/controller/AIConversationController.ts +628 -0
  840. package/src/ai-components/conversation-state/controller/AIConversationExchange.ts +132 -0
  841. package/src/ai-components/conversation-state/controller/index.ts +4 -0
  842. package/src/ai-components/conversation-state/controller/offers.ts +53 -0
  843. package/src/ai-components/conversation-state/controller/types.ts +154 -0
  844. package/src/ai-components/conversation-state/controller/useAIConversationState.ts +21 -0
  845. package/src/ai-components/conversation-state/fromStreamMessage.ts +89 -0
  846. package/src/ai-components/conversation-state/index.ts +3 -0
  847. package/src/ai-components/conversation-state/types.ts +57 -0
  848. package/src/ai-components/generative-ui/AIUIAction.ts +73 -0
  849. package/src/ai-components/generative-ui/AIUIArguments.ts +117 -0
  850. package/src/ai-components/generative-ui/AIUIComponent.tsx +106 -0
  851. package/src/ai-components/generative-ui/AIUIComponentDefinition.ts +163 -0
  852. package/src/ai-components/generative-ui/AIUIDocument.ts +77 -0
  853. package/src/ai-components/generative-ui/AIUIEntrance.tsx +229 -0
  854. package/src/ai-components/generative-ui/AIUIErrorBoundary.tsx +39 -0
  855. package/src/ai-components/generative-ui/AIUIHelpers.ts +86 -0
  856. package/src/ai-components/generative-ui/AIUIHost.ts +358 -0
  857. package/src/ai-components/generative-ui/AIUIMedia.ts +45 -0
  858. package/src/ai-components/generative-ui/AIUIRenderer.ts +60 -0
  859. package/src/ai-components/generative-ui/AIUIView.tsx +87 -0
  860. package/src/ai-components/generative-ui/index.ts +48 -0
  861. package/src/ai-components/icons.ts +101 -0
  862. package/src/ai-components/index.ts +10 -0
  863. package/src/ai-components/internal/Shimmer.tsx +40 -0
  864. package/src/ai-components/internal/format.ts +69 -0
  865. package/src/ai-components/internal/hooks/useBottomSafeArea.ts +6 -0
  866. package/src/ai-components/internal/icons/AgentIcons.tsx +138 -0
  867. package/src/ai-components/internal/keyboard.tsx +34 -0
  868. package/src/ai-components/internal/tokens.ts +4 -0
  869. package/src/ai-components/internal/uuid.ts +17 -0
  870. package/src/ai-components/markdown/components/CodeBlock.tsx +13 -2
  871. package/src/ai-components/markdown/components/InlineCode.tsx +1 -0
  872. package/src/ai-components/markdown/components/Text.tsx +7 -2
  873. package/src/ai-components/markdown/styles.ts +29 -27
  874. package/src/ai-components/markdown/types.ts +1 -0
  875. package/src/ai-components/message/AIAssistantMessage.tsx +100 -0
  876. package/src/ai-components/message/AIMessageAttachment.tsx +245 -0
  877. package/src/ai-components/message/AIReplyActions.tsx +139 -0
  878. package/src/ai-components/message/AIUserMessage.tsx +121 -0
  879. package/src/ai-components/message/UserMessageMenu.tsx +149 -0
  880. package/src/ai-components/message/index.ts +4 -0
  881. package/src/ai-components/message-composer/ActionButton.tsx +10 -5
  882. package/src/ai-components/message-composer/ActionSheet.tsx +28 -6
  883. package/src/ai-components/message-composer/AttachmentButton.tsx +9 -1
  884. package/src/ai-components/message-composer/ChatOptions.tsx +144 -0
  885. package/src/ai-components/message-composer/ComposerView.tsx +194 -30
  886. package/src/ai-components/message-composer/EditingMessageChip.tsx +62 -0
  887. package/src/ai-components/message-composer/MediaPreviewList.tsx +34 -8
  888. package/src/ai-components/message-composer/index.ts +1 -0
  889. package/src/ai-components/message-parts/AIMessageParts.tsx +145 -0
  890. package/src/ai-components/message-parts/AIToolApproval.tsx +196 -0
  891. package/src/ai-components/message-parts/AIToolAuthorization.tsx +279 -0
  892. package/src/ai-components/message-parts/AIToolCall.tsx +117 -0
  893. package/src/ai-components/message-parts/callStates.ts +44 -0
  894. package/src/ai-components/message-parts/index.ts +6 -0
  895. package/src/ai-components/message-parts/parseMessageParts.ts +195 -0
  896. package/src/ai-components/message-parts/types.ts +157 -0
  897. package/src/ai-components/native-specs/NativeAIAgent.ts +25 -0
  898. package/src/ai-components/reasoning/AIReasoning.tsx +509 -0
  899. package/src/ai-components/reasoning/index.ts +2 -0
  900. package/src/ai-components/reasoning/thinkingClock.ts +109 -0
  901. package/src/ai-components/services/clipboard-service/expo.ts +18 -4
  902. package/src/ai-components/store/composer/store.ts +9 -0
  903. package/src/ai-components/store/composer/useComposerChatOption.ts +15 -0
  904. package/src/ai-components/store/composer/useComposerIsEditing.ts +15 -0
  905. package/src/ai-components/store/index.ts +2 -0
  906. package/src/ai-components/suggestions/AISuggestions.tsx +73 -0
  907. package/src/ai-components/suggestions/index.ts +1 -0
  908. package/src/ai-components/syntax-highlighting/utils/flatten-nodes.ts +2 -1
  909. package/src/ai-components/syntax-highlighting/utils/renderer.tsx +4 -2
  910. package/src/ai-components/theme.ts +334 -0
  911. package/src/ai-components/tool-calls/AIClientIdentity.ts +33 -0
  912. package/src/ai-components/tool-calls/AIClientToolRunner.ts +200 -0
  913. package/src/ai-components/tool-calls/AIToolApprover.tsx +60 -0
  914. package/src/ai-components/tool-calls/authSessionAuthorizer.ts +137 -0
  915. package/src/ai-components/tool-calls/index.ts +4 -0
  916. package/src/ai-components/voice-visualization/glowShader.ts +1 -3
  917. package/src/ai-components/voice-visualization/simplex.ts +1 -1
  918. package/src/components/Accessibility/NotificationAnnouncer.tsx +5 -5
  919. package/src/components/Accessibility/hooks/useIncomingMessageAnnouncements.ts +1 -1
  920. package/src/components/Accessibility/useAccessibilityAnnouncer.ts +0 -2
  921. package/src/components/Message/MessageItemView/utils/renderText.tsx +1 -2
  922. package/src/contexts/translationContext/TranslationContext.tsx +2 -2
  923. package/src/i18n/ar.json +40 -1
  924. package/src/i18n/en.json +40 -1
  925. package/src/i18n/es.json +40 -1
  926. package/src/i18n/fr.json +40 -1
  927. package/src/i18n/he.json +40 -1
  928. package/src/i18n/hi.json +40 -1
  929. package/src/i18n/it.json +40 -1
  930. package/src/i18n/ja.json +40 -1
  931. package/src/i18n/ko.json +40 -1
  932. package/src/i18n/nl.json +40 -1
  933. package/src/i18n/pt-br.json +40 -1
  934. package/src/i18n/ru.json +40 -1
  935. package/src/i18n/tr.json +40 -1
  936. package/src/mock-builders/a2ui/ohrid.ts +106 -0
  937. package/src/utils/i18n/Streami18n.ts +4 -1
  938. package/src/utils/i18n/utils.ts +3 -0
  939. package/src/version.json +1 -1
@@ -0,0 +1,177 @@
1
+ import type { AIMessage, AIPendingMessage } from '../conversation-state/types';
2
+
3
+ import type { AIUIDocument } from '../generative-ui/AIUIDocument';
4
+ import type { AIMessageAttachmentData } from '../message/AIMessageAttachment';
5
+ import { isToolCallFinished } from '../message-parts/parseMessageParts';
6
+
7
+ /** A row of the conversation: a message, or a message the person sent that is on its way. */
8
+ export type AIConversationEntry = {
9
+ /** The message's id, or, for the copy of a message that was on its way, that message's. */
10
+ id: string;
11
+ isFromUser: boolean;
12
+ /** Whether it is a reply that ends the conversation. */
13
+ isLatestReply: boolean;
14
+ /** The message, or `undefined` for one on its way. */
15
+ message?: AIMessage;
16
+ /** The message on its way, until its copy arrives. */
17
+ pending?: AIPendingMessage;
18
+ /** What the person sent with a message on its way, which its copy shows rather than load it again. */
19
+ sentAttachments: AIMessageAttachmentData[];
20
+ };
21
+
22
+ /** The person's message and the replies to it. */
23
+ export type AIConversationTurn = { entries: AIConversationEntry[]; id: string };
24
+
25
+ /** Whether a reply's generated UI shows, such as `AIUIHost.canShow`. */
26
+ export type AIConversationCanShowUI = (document: AIUIDocument) => boolean;
27
+
28
+ const showsNoUI: AIConversationCanShowUI = () => false;
29
+
30
+ // A reply the agent has started but that has nothing to show yet: no text, steps or attachments,
31
+ // and no UI that `canShowUI` says shows.
32
+ const showsNothing = (message: AIMessage, canShowUI: AIConversationCanShowUI) =>
33
+ message.role !== 'user' &&
34
+ message.text === '' &&
35
+ !message.parts?.length &&
36
+ !message.attachments?.length &&
37
+ !(message.uiDocument && canShowUI(message.uiDocument));
38
+
39
+ // Whether a step is over: a round of reasoning that stopped streaming, or a call that finished.
40
+ // A step of a kind this SDK doesn't know counts as over, since it can't say otherwise.
41
+ const isStepOver = ({ reasoning, toolCall }: NonNullable<AIMessage['parts']>[number]) =>
42
+ reasoning
43
+ ? reasoning.status !== 'streaming'
44
+ : toolCall
45
+ ? isToolCallFinished(toolCall.status)
46
+ : true;
47
+
48
+ /**
49
+ * Whether the reply is being written, took steps that are all over, and shows no UI: once its
50
+ * answer stops growing, the agent is thinking again, between its steps. An agent's backend can
51
+ * write a round of reasoning as a step only once it is done, so nothing would show meanwhile. A
52
+ * step still going, such as a call waiting for the person, shows itself instead.
53
+ */
54
+ export const hasFinishedSteps = (
55
+ message: AIMessage | undefined,
56
+ canShowUI: AIConversationCanShowUI = showsNoUI,
57
+ ): message is AIMessage =>
58
+ !!message &&
59
+ message.role !== 'user' &&
60
+ !!message.isGenerating &&
61
+ !!message.parts?.length &&
62
+ message.parts.every(isStepOver) &&
63
+ !(message.uiDocument && canShowUI(message.uiDocument));
64
+
65
+ /** Groups the rows into turns, each starting with one of the person's messages. */
66
+ export const turnsOf = (entries: AIConversationEntry[]) =>
67
+ entries.reduce<AIConversationTurn[]>((turns, entry) => {
68
+ const last = turns[turns.length - 1];
69
+ if (!last || entry.isFromUser) turns.push({ entries: [entry], id: entry.id });
70
+ else last.entries.push(entry);
71
+ return turns;
72
+ }, []);
73
+
74
+ /**
75
+ * Follows a message the person sent until its copy arrives in the messages, so the copy takes
76
+ * over its row (and its key) without a flicker, and tells whether the agent is surely about to
77
+ * answer.
78
+ */
79
+ export class AIPendingMessageTracker {
80
+ // The person's messages each pending message's copy cannot be: those there were when it was
81
+ // first seen, and those that arrived since without being its copy, such as older ones.
82
+ private seen = new Map<string, Set<string>>();
83
+ // The pending message each copy took over, by the copy's id.
84
+ private copies = new Map<string, AIPendingMessage>();
85
+ // The pending message of the last update, whose copy can arrive in the update that stops
86
+ // passing it.
87
+ private lastPending?: AIPendingMessage;
88
+
89
+ // The rows of a conversation: its messages, apart from replies with nothing to show yet, and
90
+ // a message on its way until its copy arrives. A reply's UI shows when `canShowUI` says.
91
+ entries(
92
+ messages: AIMessage[],
93
+ pending?: AIPendingMessage | null,
94
+ canShowUI: AIConversationCanShowUI = showsNoUI,
95
+ ): AIConversationEntry[] {
96
+ let showsPending = !!pending;
97
+ // A copy that arrives in the update that stops passing its pending message still takes over
98
+ // its row. Only then: a message sent later is not the copy of one that failed.
99
+ const awaited = pending ?? this.lastPending;
100
+ if (awaited) {
101
+ const sent = messages.filter((message) => message.role === 'user');
102
+ const ids = new Set(sent.map((message) => message.id));
103
+ const known = this.seen.get(awaited.id) ?? ids;
104
+ const matched = [...this.copies].find(
105
+ ([copyId, original]) => original.id === awaited.id && ids.has(copyId),
106
+ )?.[0];
107
+ const copy = matched ?? this.copyOf(awaited, sent, known);
108
+ if (copy !== undefined) {
109
+ if (!this.copies.has(copy)) this.copies.set(copy, awaited);
110
+ showsPending = false;
111
+ } else {
112
+ this.seen.set(awaited.id, new Set([...known, ...ids]));
113
+ }
114
+ }
115
+ this.lastPending = pending ?? undefined;
116
+
117
+ const entries: AIConversationEntry[] = messages
118
+ .filter((message) => !showsNothing(message, canShowUI))
119
+ .map((message) => {
120
+ const taken = this.copies.get(message.id);
121
+ return {
122
+ id: taken?.id ?? message.id,
123
+ isFromUser: message.role === 'user',
124
+ isLatestReply: false,
125
+ message,
126
+ sentAttachments: taken?.attachments ?? [],
127
+ };
128
+ });
129
+ if (showsPending && pending) {
130
+ entries.push({
131
+ id: pending.id,
132
+ isFromUser: true,
133
+ isLatestReply: false,
134
+ pending,
135
+ sentAttachments: [],
136
+ });
137
+ }
138
+ const last = entries[entries.length - 1];
139
+ if (last && !last.isFromUser) last.isLatestReply = true;
140
+ return entries;
141
+ }
142
+
143
+ // The copy of a message that was on its way: the person's message with its id, when the app
144
+ // knew it. Otherwise their first after those known, which older messages loading above cannot
145
+ // be. With none of theirs known, it is their latest, when that is the only new one or says the
146
+ // same.
147
+ private copyOf(pending: AIPendingMessage, sent: AIMessage[], known: Set<string>) {
148
+ const ids = sent.map((message) => message.id);
149
+ if (ids.includes(pending.id)) return pending.id;
150
+ let lastKnown = -1;
151
+ ids.forEach((id, index) => {
152
+ if (known.has(id)) lastKnown = index;
153
+ });
154
+ if (lastKnown >= 0) return ids[lastKnown + 1];
155
+ const fresh = sent.filter((message) => !known.has(message.id));
156
+ const latest = fresh[fresh.length - 1];
157
+ if (!latest || (fresh.length !== 1 && latest.text !== pending.text)) return undefined;
158
+ return latest.id;
159
+ }
160
+
161
+ // Whether the latest message is surely waiting for a reply that shows nothing yet: it is on its
162
+ // way, it is the copy of the one on its way, or its reply is being written but shows nothing.
163
+ // Call it after `entries`, which matches the copies.
164
+ isAwaitingReply(
165
+ messages: AIMessage[],
166
+ pending?: AIPendingMessage | null,
167
+ canShowUI: AIConversationCanShowUI = showsNoUI,
168
+ ) {
169
+ const last = messages[messages.length - 1];
170
+ if (last && last.role !== 'user' && last.isGenerating && showsNothing(last, canShowUI))
171
+ return true;
172
+ if (!pending) return false;
173
+ const copy = [...this.copies].find(([, original]) => original.id === pending.id)?.[0];
174
+ if (copy === undefined) return true;
175
+ return last?.id === copy;
176
+ }
177
+ }
@@ -0,0 +1,2 @@
1
+ export * from './AIConversation';
2
+ export type { AIConversationCanShowUI, AIConversationEntry, AIConversationTurn } from './entries';
@@ -0,0 +1,227 @@
1
+ import React, { type ReactNode, useMemo, useRef } from 'react';
2
+ import { ActivityIndicator, Pressable, StyleSheet, View } from 'react-native';
3
+ import Animated, { Easing, Keyframe, useAnimatedStyle } from 'react-native-reanimated';
4
+
5
+ import { KeyboardAwareLegendList } from '@legendapp/list/keyboard';
6
+ import type { LegendListRef, LegendListRenderItemProps } from '@legendapp/list/react-native';
7
+
8
+ import { useChatListController } from './useChatListController';
9
+ import { keyboardOverlapOf } from './useKeyboardOverlap';
10
+
11
+ import { useAITranslation, useTheme } from '../../contexts';
12
+ import { useAIIcons } from '../../icons';
13
+ import { useBottomSafeArea } from '../../internal/hooks/useBottomSafeArea';
14
+ import { primitives } from '../../internal/tokens';
15
+
16
+ export type AIChatListProps<T> = {
17
+ /** The key of the row to pin to the top of what is visible, such as the latest question's. */
18
+ anchorKey: string | undefined;
19
+ data: T[];
20
+ getItemType: (item: T) => string;
21
+ keyExtractor: (item: T) => string;
22
+ renderItem: (props: LegendListRenderItemProps<T>) => ReactNode;
23
+ /** The room for a composer floating over the bottom of the list. */
24
+ bottomInset?: number;
25
+ /** What shows while there are no rows, centered. */
26
+ emptyContent?: ReactNode;
27
+ /**
28
+ * How far above the bottom of the screen the composer sits, such as above a tab bar: the
29
+ * keyboard covers the list only as far as it rises past that. Defaults to the bottom safe area.
30
+ */
31
+ keyboardOffset?: number;
32
+ /** Loads the rows before the first one. `undefined` once there are none left. */
33
+ loadOlderMessages?: () => Promise<void> | void;
34
+ testID?: string;
35
+ };
36
+
37
+ const LoadingOlder = () => {
38
+ const { t } = useAITranslation();
39
+ const {
40
+ theme: { colors, conversation },
41
+ } = useTheme();
42
+ return (
43
+ <View
44
+ accessibilityLabel={t('Loading older messages')}
45
+ accessibilityRole='progressbar'
46
+ accessible
47
+ style={[styles.loadingOlder, conversation?.loadingOlder]}
48
+ >
49
+ <ActivityIndicator color={conversation?.loadingIndicator ?? colors.grey} />
50
+ </View>
51
+ );
52
+ };
53
+
54
+ // How far past what is visible rows are laid out, each way. Replies run from a line to several
55
+ // screens, so a row the list reuses for another is placed by an estimate until it is measured: far
56
+ // enough out, that happens off screen even in a fast fling, rather than as rows briefly showing
57
+ // what they held before or overlapping. LegendList's default is 250.
58
+ const DRAW_DISTANCE = 1000;
59
+
60
+ const SCROLL_BUTTON_IN = new Keyframe({
61
+ 0: { opacity: 0, transform: [{ scale: 0.8 }] },
62
+ 100: { easing: Easing.inOut(Easing.ease), opacity: 1, transform: [{ scale: 1 }] },
63
+ }).duration(200);
64
+ const SCROLL_BUTTON_OUT = new Keyframe({
65
+ 0: { opacity: 1, transform: [{ scale: 1 }] },
66
+ 100: { easing: Easing.inOut(Easing.ease), opacity: 0, transform: [{ scale: 0.8 }] },
67
+ }).duration(200);
68
+
69
+ const ScrollToLatestButton = ({ onPress }: { onPress: () => void }) => {
70
+ const { t } = useAITranslation();
71
+ const {
72
+ theme: { colors, conversation },
73
+ } = useTheme();
74
+ const { ArrowDown } = useAIIcons();
75
+ return (
76
+ <Pressable
77
+ accessibilityLabel={t('Scroll to latest')}
78
+ accessibilityRole='button'
79
+ hitSlop={4}
80
+ onPress={onPress}
81
+ style={({ pressed }) => [
82
+ styles.scrollButton,
83
+ {
84
+ backgroundColor: conversation?.scrollButtonBackground ?? colors.white,
85
+ borderColor: conversation?.scrollButtonBorder ?? colors.grey_gainsboro,
86
+ opacity: pressed ? 0.7 : 1,
87
+ },
88
+ conversation?.scrollButton,
89
+ ]}
90
+ >
91
+ <ArrowDown color={conversation?.scrollButtonIcon ?? colors.black} size={20} />
92
+ </Pressable>
93
+ );
94
+ };
95
+
96
+ /**
97
+ * The list of a chat with an agent: virtualised on Reanimated LegendList, reusing the views of
98
+ * rows scrolled out of sight. It pins `anchorKey`'s row to the top of what is visible, opens at the
99
+ * end, loads older rows as the person scrolls to the start, and offers a button back to the latest
100
+ * row when the end is out of view. What the rows are is the caller's.
101
+ */
102
+ export const AIChatList = <T,>({
103
+ anchorKey,
104
+ bottomInset = 0,
105
+ data,
106
+ emptyContent,
107
+ getItemType,
108
+ keyboardOffset: keyboardOffsetProp,
109
+ keyExtractor,
110
+ loadOlderMessages,
111
+ renderItem,
112
+ testID,
113
+ }: AIChatListProps<T>) => {
114
+ const {
115
+ theme: { conversation },
116
+ } = useTheme();
117
+ const listRef = useRef<LegendListRef>(null);
118
+ const isEmpty = data.length === 0;
119
+ const { isEndInView, keyboard, keyboardOffset, listProps, loadsOlder, scrollToEnd } =
120
+ useChatListController({
121
+ anchorKey,
122
+ bottomInset,
123
+ data,
124
+ keyExtractor,
125
+ listRef,
126
+ loadOlderMessages: isEmpty ? undefined : loadOlderMessages,
127
+ });
128
+
129
+ const contentContainerStyle = useMemo(
130
+ () =>
131
+ StyleSheet.flatten([
132
+ { paddingBottom: primitives.spacingMd + bottomInset },
133
+ conversation?.content,
134
+ ]),
135
+ [bottomInset, conversation?.content],
136
+ );
137
+
138
+ const bottomSafeArea = useBottomSafeArea();
139
+ const offset = keyboardOffsetProp ?? bottomSafeArea;
140
+ keyboardOffset.current = offset;
141
+
142
+ // The button rides the keyboard, so it stays in sight above it.
143
+ const buttonLift = useAnimatedStyle(() => ({
144
+ transform: [{ translateY: -keyboardOverlapOf(keyboard.value, offset) }],
145
+ }));
146
+ // What shows while there are no rows stays centered in what the keyboard leaves of the list.
147
+ const emptyLift = useAnimatedStyle(() => ({
148
+ paddingBottom: bottomInset + keyboardOverlapOf(keyboard.value, offset),
149
+ }));
150
+
151
+ return (
152
+ <View style={[styles.container, conversation?.container]} testID={testID}>
153
+ {/* Mounted even while there are no rows: the list follows the keyboard only from its next
154
+ move, so one mounted while the keyboard is up would leave the first turn under it. The
155
+ keyboard comes up over the list, which makes room for it below the latest turn: the room
156
+ the pinned question leaves takes it first. */}
157
+ <KeyboardAwareLegendList
158
+ {...listProps}
159
+ contentContainerStyle={contentContainerStyle}
160
+ data={data}
161
+ drawDistance={DRAW_DISTANCE}
162
+ getItemType={getItemType}
163
+ initialScrollAtEnd
164
+ keyboardOffset={offset}
165
+ keyboardShouldPersistTaps='handled'
166
+ keyExtractor={keyExtractor}
167
+ ListHeaderComponent={loadsOlder ? LoadingOlder : null}
168
+ maintainVisibleContentPosition
169
+ recycleItems
170
+ ref={listRef}
171
+ renderItem={renderItem}
172
+ testID={testID && `${testID}-list`}
173
+ />
174
+ {isEmpty ? (
175
+ <Animated.View
176
+ pointerEvents='box-none'
177
+ style={[styles.empty, emptyLift, conversation?.empty]}
178
+ testID={testID && `${testID}-empty`}
179
+ >
180
+ {emptyContent}
181
+ </Animated.View>
182
+ ) : null}
183
+ {!isEndInView && !isEmpty ? (
184
+ <Animated.View
185
+ pointerEvents='box-none'
186
+ style={[
187
+ styles.scrollButtonContainer,
188
+ { bottom: bottomInset + primitives.spacingXs },
189
+ buttonLift,
190
+ ]}
191
+ >
192
+ <Animated.View entering={SCROLL_BUTTON_IN} exiting={SCROLL_BUTTON_OUT}>
193
+ <ScrollToLatestButton onPress={scrollToEnd} />
194
+ </Animated.View>
195
+ </Animated.View>
196
+ ) : null}
197
+ </View>
198
+ );
199
+ };
200
+
201
+ const styles = StyleSheet.create({
202
+ container: { flex: 1 },
203
+ empty: {
204
+ alignItems: 'center',
205
+ bottom: 0,
206
+ justifyContent: 'center',
207
+ left: 0,
208
+ position: 'absolute',
209
+ right: 0,
210
+ top: 0,
211
+ },
212
+ loadingOlder: { alignItems: 'center', paddingTop: primitives.spacingMd },
213
+ scrollButton: {
214
+ alignItems: 'center',
215
+ borderRadius: 20,
216
+ borderWidth: 1,
217
+ elevation: 2,
218
+ height: 40,
219
+ justifyContent: 'center',
220
+ shadowColor: '#000000',
221
+ shadowOffset: { height: 2, width: 0 },
222
+ shadowOpacity: 0.14,
223
+ shadowRadius: 3,
224
+ width: 40,
225
+ },
226
+ scrollButtonContainer: { alignItems: 'center', left: 0, position: 'absolute', right: 0 },
227
+ });
@@ -0,0 +1,91 @@
1
+ import { type RefObject, useCallback, useRef } from 'react';
2
+
3
+ import { useKeyboardScrollToEnd } from '@legendapp/list/keyboard';
4
+ import type { LegendListRef } from '@legendapp/list/react-native';
5
+
6
+ import { useEndInView } from './useEndInView';
7
+ import { useKeyboardFrame } from './useKeyboardOverlap';
8
+ import { useLoadOlder } from './useLoadOlder';
9
+ import { usePinnedAnchor } from './usePinnedAnchor';
10
+
11
+ import { useReduceMotion } from '../../voice-visualization/useReduceMotion';
12
+
13
+ export type ChatListControllerOptions<T> = {
14
+ /** The key of the row to pin to the top, such as the latest question's. */
15
+ anchorKey: string | undefined;
16
+ /** The room for a composer floating over the bottom of the list. */
17
+ bottomInset: number;
18
+ data: readonly T[];
19
+ keyExtractor: (item: T) => string;
20
+ listRef: RefObject<LegendListRef | null>;
21
+ /** Loads the rows before the first one. `undefined` once there are none left. */
22
+ loadOlderMessages?: () => Promise<void> | void;
23
+ };
24
+
25
+ /**
26
+ * How a chat list behaves, apart from how it looks: the row to pin, whether the end is in view,
27
+ * and loading older rows. Renders nothing: `listProps` go on a LegendList given `listRef`, and
28
+ * the rest is for the views around it. Any LegendList that keeps `anchoredEndSpace` works.
29
+ */
30
+ export const useChatListController = <T>({
31
+ anchorKey,
32
+ bottomInset,
33
+ data,
34
+ keyExtractor,
35
+ listRef,
36
+ loadOlderMessages,
37
+ }: ChatListControllerOptions<T>) => {
38
+ const reduceMotion = useReduceMotion();
39
+ // The list's positions leave its header out: the spinner while older messages load.
40
+ const headerSize = useRef(0);
41
+
42
+ // How far above the bottom of the screen the list ends, which the keyboard reaches past.
43
+ const keyboardOffset = useRef(0);
44
+ const checkEnd = useRef<() => void>(undefined);
45
+ const keyboard = useKeyboardFrame(() => checkEnd.current?.());
46
+ const { isEndInView, scheduleCheckEnd } = useEndInView({
47
+ bottomInset,
48
+ headerSize,
49
+ keyboard,
50
+ keyboardOffset,
51
+ listRef,
52
+ });
53
+ checkEnd.current = scheduleCheckEnd;
54
+ const { anchoredEndSpace, onMetricsChange } = usePinnedAnchor({
55
+ anchorKey,
56
+ data,
57
+ headerSize,
58
+ keyExtractor,
59
+ listRef,
60
+ onAnchorLayout: scheduleCheckEnd,
61
+ });
62
+ const loadOlder = useLoadOlder({ listRef, loadOlderMessages });
63
+
64
+ // Holds the keyboard's own adjustments of the list still while it scrolls, so they don't stop it
65
+ // short of the end above the keyboard.
66
+ const { freeze, scrollMessageToEnd } = useKeyboardScrollToEnd({ listRef });
67
+ const scrollToEnd = useCallback(() => {
68
+ void scrollMessageToEnd({ animated: !reduceMotion, closeKeyboard: false });
69
+ }, [reduceMotion, scrollMessageToEnd]);
70
+
71
+ return {
72
+ isEndInView,
73
+ /** The keyboard, for views that ride it, such as the button back to the latest row. */
74
+ keyboard,
75
+ /** How far above the bottom of the screen the list ends; the list's view sets it. */
76
+ keyboardOffset,
77
+ /** Whether older rows load as the list nears its start, so it shows that they are loading. */
78
+ loadsOlder: !!loadOlder,
79
+ listProps: {
80
+ anchoredEndSpace,
81
+ freeze,
82
+ // The list growing or shrinking, such as under a taller composer, can bring its end in or out of view.
83
+ onLayout: scheduleCheckEnd,
84
+ onItemSizeChanged: scheduleCheckEnd,
85
+ onMetricsChange,
86
+ onScroll: scheduleCheckEnd,
87
+ ...loadOlder,
88
+ },
89
+ scrollToEnd,
90
+ };
91
+ };
@@ -0,0 +1,61 @@
1
+ import { type RefObject, useCallback, useEffect, useRef, useState } from 'react';
2
+
3
+ import type { SharedValue } from 'react-native-reanimated';
4
+
5
+ import type { LegendListRef } from '@legendapp/list/react-native';
6
+
7
+ import { type KeyboardFrame, keyboardOverlapOf } from './useKeyboardOverlap';
8
+
9
+ // How far from the end still counts as at the end.
10
+ const END_SLACK = 32;
11
+
12
+ export type UseEndInViewOptions = {
13
+ /** The room for a composer floating over the bottom of the list, which is not in view. */
14
+ bottomInset: number;
15
+ /** The height of the list's header, which its positions leave out. */
16
+ headerSize: RefObject<number>;
17
+ /** The keyboard, which covers the bottom of the list by as much as it reaches over it. */
18
+ keyboard: SharedValue<KeyboardFrame>;
19
+ /** How far above the bottom of the screen the list ends. */
20
+ keyboardOffset: RefObject<number>;
21
+ listRef: RefObject<LegendListRef | null>;
22
+ };
23
+
24
+ /**
25
+ * Whether the end of the last row's content is in view: not the room the anchored latest turn
26
+ * leaves under a short reply, nor the room for the floating composer. Call `scheduleCheckEnd`
27
+ * whenever that may have changed: a scroll, or a row changing size without one, such as an answer
28
+ * typing out, or the keyboard moving. It checks once a frame at most.
29
+ */
30
+ export const useEndInView = ({
31
+ bottomInset,
32
+ headerSize,
33
+ keyboard,
34
+ keyboardOffset,
35
+ listRef,
36
+ }: UseEndInViewOptions) => {
37
+ const [isEndInView, setIsEndInView] = useState(true);
38
+ const bottomInsetRef = useRef(bottomInset);
39
+ bottomInsetRef.current = bottomInset;
40
+ const checkEnd = useCallback(() => {
41
+ const state = listRef.current?.getState();
42
+ const last = (state?.data.length ?? 0) - 1;
43
+ if (!state || last < 0) return;
44
+ const end = headerSize.current + state.positionAtIndex(last) + state.sizeAtIndex(last);
45
+ const covered = keyboardOverlapOf(keyboard.value, keyboardOffset.current);
46
+ const visibleEnd = state.scroll + state.scrollLength - bottomInsetRef.current - covered;
47
+ setIsEndInView(end <= visibleEnd + END_SLACK);
48
+ }, [headerSize, keyboard, keyboardOffset, listRef]);
49
+
50
+ const checkFrame = useRef<number | undefined>(undefined);
51
+ const scheduleCheckEnd = useCallback(() => {
52
+ if (checkFrame.current !== undefined) return;
53
+ checkFrame.current = requestAnimationFrame(() => {
54
+ checkFrame.current = undefined;
55
+ checkEnd();
56
+ });
57
+ }, [checkEnd]);
58
+ useEffect(() => () => cancelAnimationFrame(checkFrame.current ?? 0), []);
59
+
60
+ return { isEndInView, scheduleCheckEnd };
61
+ };
@@ -0,0 +1,52 @@
1
+ import { useRef } from 'react';
2
+ import { runOnJS, type SharedValue, useSharedValue } from 'react-native-reanimated';
3
+
4
+ import { keyboardHeight, useKeyboardHandler } from '../../internal/keyboard';
5
+
6
+ export type KeyboardFrame = { height: number; progress: number };
7
+
8
+ /**
9
+ * How far the keyboard reaches over a view that ends `offset` above the bottom of the screen, as
10
+ * `KeyboardAwareLegendList` reckons it: the keyboard's height less the offset, scaled by how far
11
+ * the keyboard is open. In a worklet or on the JS thread.
12
+ */
13
+ export const keyboardOverlapOf = (keyboard: KeyboardFrame, offset: number) => {
14
+ 'worklet';
15
+ return Math.max(0, keyboard.height - offset * keyboard.progress);
16
+ };
17
+
18
+ /**
19
+ * The keyboard's height and how far it is open, as it moves. `onSettled` runs on the JS thread
20
+ * once it has finished moving.
21
+ */
22
+ export const useKeyboardFrame = (onSettled?: () => void): SharedValue<KeyboardFrame> => {
23
+ const initial = keyboardHeight();
24
+ const keyboard = useSharedValue<KeyboardFrame>({
25
+ height: initial,
26
+ progress: initial > 0 ? 1 : 0,
27
+ });
28
+ const settled = useRef(onSettled);
29
+ settled.current = onSettled;
30
+ const reportSettled = () => settled.current?.();
31
+
32
+ useKeyboardHandler(
33
+ {
34
+ onEnd: (event) => {
35
+ 'worklet';
36
+ keyboard.value = { height: event.height, progress: event.progress };
37
+ runOnJS(reportSettled)();
38
+ },
39
+ onInteractive: (event) => {
40
+ 'worklet';
41
+ keyboard.value = { height: event.height, progress: event.progress };
42
+ },
43
+ onMove: (event) => {
44
+ 'worklet';
45
+ keyboard.value = { height: event.height, progress: event.progress };
46
+ },
47
+ },
48
+ [],
49
+ );
50
+
51
+ return keyboard;
52
+ };