stream-chat-react-native-core 10.0.0-rc.2 → 10.0.0-rc.3

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 (500) hide show
  1. package/lib/commonjs/ai-components/README.md +50 -2
  2. package/lib/commonjs/ai-components/index.js +24 -0
  3. package/lib/commonjs/ai-components/index.js.map +1 -1
  4. package/lib/commonjs/ai-components/message-composer/ComposerView.js +4 -2
  5. package/lib/commonjs/ai-components/message-composer/ComposerView.js.map +1 -1
  6. package/lib/commonjs/ai-components/message-composer/SpeechToTextButton.js +4 -1
  7. package/lib/commonjs/ai-components/message-composer/SpeechToTextButton.js.map +1 -1
  8. package/lib/commonjs/ai-components/native/AIDictation.js +6 -0
  9. package/lib/commonjs/ai-components/native/AIDictation.js.map +1 -1
  10. package/lib/commonjs/ai-components/store/dictation/store.js +4 -2
  11. package/lib/commonjs/ai-components/store/dictation/store.js.map +1 -1
  12. package/lib/commonjs/ai-components/store/dictation/useDictationState.js +4 -2
  13. package/lib/commonjs/ai-components/store/dictation/useDictationState.js.map +1 -1
  14. package/lib/commonjs/ai-components/store/index.js +22 -0
  15. package/lib/commonjs/ai-components/store/index.js.map +1 -1
  16. package/lib/commonjs/ai-components/theme.js +3 -0
  17. package/lib/commonjs/ai-components/theme.js.map +1 -1
  18. package/lib/commonjs/ai-components/transcription/useDictation.js +7 -3
  19. package/lib/commonjs/ai-components/transcription/useDictation.js.map +1 -1
  20. package/lib/commonjs/ai-components/transcription/useDictationAudioLevel.js +32 -0
  21. package/lib/commonjs/ai-components/transcription/useDictationAudioLevel.js.map +1 -0
  22. package/lib/commonjs/ai-components/voice-visualization/VoiceGlow.js +79 -0
  23. package/lib/commonjs/ai-components/voice-visualization/VoiceGlow.js.map +1 -0
  24. package/lib/commonjs/ai-components/voice-visualization/VoiceVisualizationView.js +147 -0
  25. package/lib/commonjs/ai-components/voice-visualization/VoiceVisualizationView.js.map +1 -0
  26. package/lib/commonjs/ai-components/voice-visualization/VoiceWave.js +58 -0
  27. package/lib/commonjs/ai-components/voice-visualization/VoiceWave.js.map +1 -0
  28. package/lib/commonjs/ai-components/voice-visualization/bounce.js +60 -0
  29. package/lib/commonjs/ai-components/voice-visualization/bounce.js.map +1 -0
  30. package/lib/commonjs/ai-components/voice-visualization/driver.js +208 -0
  31. package/lib/commonjs/ai-components/voice-visualization/driver.js.map +1 -0
  32. package/lib/commonjs/ai-components/voice-visualization/glowShader.js +218 -0
  33. package/lib/commonjs/ai-components/voice-visualization/glowShader.js.map +1 -0
  34. package/lib/commonjs/ai-components/voice-visualization/index.js +18 -0
  35. package/lib/commonjs/ai-components/voice-visualization/index.js.map +1 -0
  36. package/lib/commonjs/ai-components/voice-visualization/math.js +70 -0
  37. package/lib/commonjs/ai-components/voice-visualization/math.js.map +1 -0
  38. package/lib/commonjs/ai-components/voice-visualization/palette.js +47 -0
  39. package/lib/commonjs/ai-components/voice-visualization/palette.js.map +1 -0
  40. package/lib/commonjs/ai-components/voice-visualization/simplex.js +77 -0
  41. package/lib/commonjs/ai-components/voice-visualization/simplex.js.map +1 -0
  42. package/lib/commonjs/ai-components/voice-visualization/styles.js +33 -0
  43. package/lib/commonjs/ai-components/voice-visualization/styles.js.map +1 -0
  44. package/lib/commonjs/ai-components/voice-visualization/types.js +4 -0
  45. package/lib/commonjs/ai-components/voice-visualization/types.js.map +1 -0
  46. package/lib/commonjs/ai-components/voice-visualization/useReduceMotion.js +28 -0
  47. package/lib/commonjs/ai-components/voice-visualization/useReduceMotion.js.map +1 -0
  48. package/lib/commonjs/ai-components/voice-visualization/useVoiceVisualization.js +129 -0
  49. package/lib/commonjs/ai-components/voice-visualization/useVoiceVisualization.js.map +1 -0
  50. package/lib/commonjs/ai-components/voice-visualization/waveGeometry.js +124 -0
  51. package/lib/commonjs/ai-components/voice-visualization/waveGeometry.js.map +1 -0
  52. package/lib/commonjs/components/Channel/hooks/useChannelLifecycle.js +2 -1
  53. package/lib/commonjs/components/Channel/hooks/useChannelLifecycle.js.map +1 -1
  54. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js +1 -1
  55. package/lib/commonjs/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  56. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js +1 -1
  57. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js.map +1 -1
  58. package/lib/commonjs/components/ChannelList/ChannelListView.js +0 -2
  59. package/lib/commonjs/components/ChannelList/ChannelListView.js.map +1 -1
  60. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +1 -1
  61. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  62. package/lib/commonjs/components/ChannelPreview/ChannelDetailsBottomSheet.js +1 -1
  63. package/lib/commonjs/components/ChannelPreview/ChannelDetailsBottomSheet.js.map +1 -1
  64. package/lib/commonjs/components/ChannelPreview/ChannelLastMessagePreview.js +1 -0
  65. package/lib/commonjs/components/ChannelPreview/ChannelLastMessagePreview.js.map +1 -1
  66. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +2 -0
  67. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  68. package/lib/commonjs/components/ChannelPreview/ChannelPreviewTitle.js +1 -0
  69. package/lib/commonjs/components/ChannelPreview/ChannelPreviewTitle.js.map +1 -1
  70. package/lib/commonjs/components/ChannelPreview/ChannelPreviewView.js +1 -1
  71. package/lib/commonjs/components/ChannelPreview/ChannelPreviewView.js.map +1 -1
  72. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewData.js +5 -5
  73. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewData.js.map +1 -1
  74. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js +1 -1
  75. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
  76. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayPresence.js +1 -1
  77. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayPresence.js.map +1 -1
  78. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js +4 -1
  79. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js.map +1 -1
  80. package/lib/commonjs/components/Chat/hooks/useConnectionLifecycle.js +6 -2
  81. package/lib/commonjs/components/Chat/hooks/useConnectionLifecycle.js.map +1 -1
  82. package/lib/commonjs/components/Indicators/LoadingErrorIndicator.js +5 -0
  83. package/lib/commonjs/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  84. package/lib/commonjs/components/Message/Message.js +1 -1
  85. package/lib/commonjs/components/Message/Message.js.map +1 -1
  86. package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js +4 -0
  87. package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js.map +1 -1
  88. package/lib/commonjs/components/Message/MessageItemView/MessageWrapper.js +7 -4
  89. package/lib/commonjs/components/Message/MessageItemView/MessageWrapper.js.map +1 -1
  90. package/lib/commonjs/components/Message/hooks/useCreateMessageActionHandlers.js +3 -3
  91. package/lib/commonjs/components/Message/hooks/useCreateMessageActionHandlers.js.map +1 -1
  92. package/lib/commonjs/components/Message/hooks/useProcessReactions.js +2 -2
  93. package/lib/commonjs/components/Message/hooks/useProcessReactions.js.map +1 -1
  94. package/lib/commonjs/components/Message/hooks/useUserMuteActive.js +1 -1
  95. package/lib/commonjs/components/Message/hooks/useUserMuteActive.js.map +1 -1
  96. package/lib/commonjs/components/MessageInput/MessageComposer.js +2 -1
  97. package/lib/commonjs/components/MessageInput/MessageComposer.js.map +1 -1
  98. package/lib/commonjs/components/MessageList/MessageFlashList.js +2 -2
  99. package/lib/commonjs/components/MessageList/MessageFlashList.js.map +1 -1
  100. package/lib/commonjs/components/MessageList/MessageList.js +2 -2
  101. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  102. package/lib/commonjs/components/MessageList/hooks/useOwnUnreadCount.js +1 -1
  103. package/lib/commonjs/components/MessageList/hooks/useOwnUnreadCount.js.map +1 -1
  104. package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js +1 -1
  105. package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js.map +1 -1
  106. package/lib/commonjs/components/MessageMenu/hooks/useMessageOwnReactions.js +2 -2
  107. package/lib/commonjs/components/MessageMenu/hooks/useMessageOwnReactions.js.map +1 -1
  108. package/lib/commonjs/components/Poll/components/PollAnswersList.js +1 -1
  109. package/lib/commonjs/components/Poll/components/PollAnswersList.js.map +1 -1
  110. package/lib/commonjs/components/Poll/components/PollButtons.js +1 -1
  111. package/lib/commonjs/components/Poll/components/PollButtons.js.map +1 -1
  112. package/lib/commonjs/components/Poll/hook/useIsPollCreatedByCurrentUser.js +1 -1
  113. package/lib/commonjs/components/Poll/hook/useIsPollCreatedByCurrentUser.js.map +1 -1
  114. package/lib/commonjs/components/Thread/Thread.js +1 -1
  115. package/lib/commonjs/components/Thread/Thread.js.map +1 -1
  116. package/lib/commonjs/components/ThreadList/ThreadListItem.js +1 -1
  117. package/lib/commonjs/components/ThreadList/ThreadListItem.js.map +1 -1
  118. package/lib/commonjs/components/ThreadList/ThreadListUnreadBanner.js +9 -2
  119. package/lib/commonjs/components/ThreadList/ThreadListUnreadBanner.js.map +1 -1
  120. package/lib/commonjs/components/index.js +24 -0
  121. package/lib/commonjs/components/index.js.map +1 -1
  122. package/lib/commonjs/contexts/componentsContext/defaultComponents.js +0 -2
  123. package/lib/commonjs/contexts/componentsContext/defaultComponents.js.map +1 -1
  124. package/lib/commonjs/contexts/liveLocationManagerContext/LiveLocationManagerContext.js +1 -1
  125. package/lib/commonjs/contexts/liveLocationManagerContext/LiveLocationManagerContext.js.map +1 -1
  126. package/lib/commonjs/hooks/actions/useChannelActionItems.js +1 -1
  127. package/lib/commonjs/hooks/actions/useChannelActionItems.js.map +1 -1
  128. package/lib/commonjs/hooks/actions/useChannelActions.js +2 -2
  129. package/lib/commonjs/hooks/actions/useChannelActions.js.map +1 -1
  130. package/lib/commonjs/hooks/actions/useChannelMemberActionItems.js +1 -1
  131. package/lib/commonjs/hooks/actions/useChannelMemberActionItems.js.map +1 -1
  132. package/lib/commonjs/hooks/index.js +11 -0
  133. package/lib/commonjs/hooks/index.js.map +1 -1
  134. package/lib/commonjs/hooks/messagePreview/useMessageDeliveryStatus.js +6 -6
  135. package/lib/commonjs/hooks/messagePreview/useMessageDeliveryStatus.js.map +1 -1
  136. package/lib/commonjs/hooks/useIsDirectChat.js +1 -1
  137. package/lib/commonjs/hooks/useIsDirectChat.js.map +1 -1
  138. package/lib/commonjs/i18n/runtimeDefaults.js +1 -0
  139. package/lib/commonjs/i18n/runtimeDefaults.js.map +1 -1
  140. package/lib/commonjs/store/apis/getChannelMessages.js +5 -3
  141. package/lib/commonjs/store/apis/getChannelMessages.js.map +1 -1
  142. package/lib/commonjs/store/apis/getChannels.js +6 -3
  143. package/lib/commonjs/store/apis/getChannels.js.map +1 -1
  144. package/lib/commonjs/store/apis/getChannelsForFilterSort.js +2 -1
  145. package/lib/commonjs/store/apis/getChannelsForFilterSort.js.map +1 -1
  146. package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js +7 -5
  147. package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  148. package/lib/commonjs/utils/installNativeMultipartAdapter.js.map +1 -1
  149. package/lib/commonjs/version.json +1 -1
  150. package/lib/module/ai-components/README.md +50 -2
  151. package/lib/module/ai-components/index.js +24 -0
  152. package/lib/module/ai-components/index.js.map +1 -1
  153. package/lib/module/ai-components/message-composer/ComposerView.js +4 -2
  154. package/lib/module/ai-components/message-composer/ComposerView.js.map +1 -1
  155. package/lib/module/ai-components/message-composer/SpeechToTextButton.js +4 -1
  156. package/lib/module/ai-components/message-composer/SpeechToTextButton.js.map +1 -1
  157. package/lib/module/ai-components/native/AIDictation.js +6 -0
  158. package/lib/module/ai-components/native/AIDictation.js.map +1 -1
  159. package/lib/module/ai-components/store/dictation/store.js +4 -2
  160. package/lib/module/ai-components/store/dictation/store.js.map +1 -1
  161. package/lib/module/ai-components/store/dictation/useDictationState.js +4 -2
  162. package/lib/module/ai-components/store/dictation/useDictationState.js.map +1 -1
  163. package/lib/module/ai-components/store/index.js +22 -0
  164. package/lib/module/ai-components/store/index.js.map +1 -1
  165. package/lib/module/ai-components/theme.js +3 -0
  166. package/lib/module/ai-components/theme.js.map +1 -1
  167. package/lib/module/ai-components/transcription/useDictation.js +7 -3
  168. package/lib/module/ai-components/transcription/useDictation.js.map +1 -1
  169. package/lib/module/ai-components/transcription/useDictationAudioLevel.js +32 -0
  170. package/lib/module/ai-components/transcription/useDictationAudioLevel.js.map +1 -0
  171. package/lib/module/ai-components/voice-visualization/VoiceGlow.js +79 -0
  172. package/lib/module/ai-components/voice-visualization/VoiceGlow.js.map +1 -0
  173. package/lib/module/ai-components/voice-visualization/VoiceVisualizationView.js +147 -0
  174. package/lib/module/ai-components/voice-visualization/VoiceVisualizationView.js.map +1 -0
  175. package/lib/module/ai-components/voice-visualization/VoiceWave.js +58 -0
  176. package/lib/module/ai-components/voice-visualization/VoiceWave.js.map +1 -0
  177. package/lib/module/ai-components/voice-visualization/bounce.js +60 -0
  178. package/lib/module/ai-components/voice-visualization/bounce.js.map +1 -0
  179. package/lib/module/ai-components/voice-visualization/driver.js +208 -0
  180. package/lib/module/ai-components/voice-visualization/driver.js.map +1 -0
  181. package/lib/module/ai-components/voice-visualization/glowShader.js +218 -0
  182. package/lib/module/ai-components/voice-visualization/glowShader.js.map +1 -0
  183. package/lib/module/ai-components/voice-visualization/index.js +18 -0
  184. package/lib/module/ai-components/voice-visualization/index.js.map +1 -0
  185. package/lib/module/ai-components/voice-visualization/math.js +70 -0
  186. package/lib/module/ai-components/voice-visualization/math.js.map +1 -0
  187. package/lib/module/ai-components/voice-visualization/palette.js +47 -0
  188. package/lib/module/ai-components/voice-visualization/palette.js.map +1 -0
  189. package/lib/module/ai-components/voice-visualization/simplex.js +77 -0
  190. package/lib/module/ai-components/voice-visualization/simplex.js.map +1 -0
  191. package/lib/module/ai-components/voice-visualization/styles.js +33 -0
  192. package/lib/module/ai-components/voice-visualization/styles.js.map +1 -0
  193. package/lib/module/ai-components/voice-visualization/types.js +4 -0
  194. package/lib/module/ai-components/voice-visualization/types.js.map +1 -0
  195. package/lib/module/ai-components/voice-visualization/useReduceMotion.js +28 -0
  196. package/lib/module/ai-components/voice-visualization/useReduceMotion.js.map +1 -0
  197. package/lib/module/ai-components/voice-visualization/useVoiceVisualization.js +129 -0
  198. package/lib/module/ai-components/voice-visualization/useVoiceVisualization.js.map +1 -0
  199. package/lib/module/ai-components/voice-visualization/waveGeometry.js +124 -0
  200. package/lib/module/ai-components/voice-visualization/waveGeometry.js.map +1 -0
  201. package/lib/module/components/Channel/hooks/useChannelLifecycle.js +2 -1
  202. package/lib/module/components/Channel/hooks/useChannelLifecycle.js.map +1 -1
  203. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js +1 -1
  204. package/lib/module/components/ChannelDetails/components/members/ChannelMemberItem.js.map +1 -1
  205. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js +1 -1
  206. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.js.map +1 -1
  207. package/lib/module/components/ChannelList/ChannelListView.js +0 -2
  208. package/lib/module/components/ChannelList/ChannelListView.js.map +1 -1
  209. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +1 -1
  210. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  211. package/lib/module/components/ChannelPreview/ChannelDetailsBottomSheet.js +1 -1
  212. package/lib/module/components/ChannelPreview/ChannelDetailsBottomSheet.js.map +1 -1
  213. package/lib/module/components/ChannelPreview/ChannelLastMessagePreview.js +1 -0
  214. package/lib/module/components/ChannelPreview/ChannelLastMessagePreview.js.map +1 -1
  215. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +2 -0
  216. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  217. package/lib/module/components/ChannelPreview/ChannelPreviewTitle.js +1 -0
  218. package/lib/module/components/ChannelPreview/ChannelPreviewTitle.js.map +1 -1
  219. package/lib/module/components/ChannelPreview/ChannelPreviewView.js +1 -1
  220. package/lib/module/components/ChannelPreview/ChannelPreviewView.js.map +1 -1
  221. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewData.js +5 -5
  222. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewData.js.map +1 -1
  223. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js +1 -1
  224. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
  225. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayPresence.js +1 -1
  226. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayPresence.js.map +1 -1
  227. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js +4 -1
  228. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewPollLabel.js.map +1 -1
  229. package/lib/module/components/Chat/hooks/useConnectionLifecycle.js +6 -2
  230. package/lib/module/components/Chat/hooks/useConnectionLifecycle.js.map +1 -1
  231. package/lib/module/components/Indicators/LoadingErrorIndicator.js +5 -0
  232. package/lib/module/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  233. package/lib/module/components/Message/Message.js +1 -1
  234. package/lib/module/components/Message/Message.js.map +1 -1
  235. package/lib/module/components/Message/MessageItemView/MessageStatus.js +4 -0
  236. package/lib/module/components/Message/MessageItemView/MessageStatus.js.map +1 -1
  237. package/lib/module/components/Message/MessageItemView/MessageWrapper.js +7 -4
  238. package/lib/module/components/Message/MessageItemView/MessageWrapper.js.map +1 -1
  239. package/lib/module/components/Message/hooks/useCreateMessageActionHandlers.js +3 -3
  240. package/lib/module/components/Message/hooks/useCreateMessageActionHandlers.js.map +1 -1
  241. package/lib/module/components/Message/hooks/useProcessReactions.js +2 -2
  242. package/lib/module/components/Message/hooks/useProcessReactions.js.map +1 -1
  243. package/lib/module/components/Message/hooks/useUserMuteActive.js +1 -1
  244. package/lib/module/components/Message/hooks/useUserMuteActive.js.map +1 -1
  245. package/lib/module/components/MessageInput/MessageComposer.js +2 -1
  246. package/lib/module/components/MessageInput/MessageComposer.js.map +1 -1
  247. package/lib/module/components/MessageList/MessageFlashList.js +2 -2
  248. package/lib/module/components/MessageList/MessageFlashList.js.map +1 -1
  249. package/lib/module/components/MessageList/MessageList.js +2 -2
  250. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  251. package/lib/module/components/MessageList/hooks/useOwnUnreadCount.js +1 -1
  252. package/lib/module/components/MessageList/hooks/useOwnUnreadCount.js.map +1 -1
  253. package/lib/module/components/MessageMenu/MessageUserReactionsItem.js +1 -1
  254. package/lib/module/components/MessageMenu/MessageUserReactionsItem.js.map +1 -1
  255. package/lib/module/components/MessageMenu/hooks/useMessageOwnReactions.js +2 -2
  256. package/lib/module/components/MessageMenu/hooks/useMessageOwnReactions.js.map +1 -1
  257. package/lib/module/components/Poll/components/PollAnswersList.js +1 -1
  258. package/lib/module/components/Poll/components/PollAnswersList.js.map +1 -1
  259. package/lib/module/components/Poll/components/PollButtons.js +1 -1
  260. package/lib/module/components/Poll/components/PollButtons.js.map +1 -1
  261. package/lib/module/components/Poll/hook/useIsPollCreatedByCurrentUser.js +1 -1
  262. package/lib/module/components/Poll/hook/useIsPollCreatedByCurrentUser.js.map +1 -1
  263. package/lib/module/components/Thread/Thread.js +1 -1
  264. package/lib/module/components/Thread/Thread.js.map +1 -1
  265. package/lib/module/components/ThreadList/ThreadListItem.js +1 -1
  266. package/lib/module/components/ThreadList/ThreadListItem.js.map +1 -1
  267. package/lib/module/components/ThreadList/ThreadListUnreadBanner.js +9 -2
  268. package/lib/module/components/ThreadList/ThreadListUnreadBanner.js.map +1 -1
  269. package/lib/module/components/index.js +24 -0
  270. package/lib/module/components/index.js.map +1 -1
  271. package/lib/module/contexts/componentsContext/defaultComponents.js +0 -2
  272. package/lib/module/contexts/componentsContext/defaultComponents.js.map +1 -1
  273. package/lib/module/contexts/liveLocationManagerContext/LiveLocationManagerContext.js +1 -1
  274. package/lib/module/contexts/liveLocationManagerContext/LiveLocationManagerContext.js.map +1 -1
  275. package/lib/module/hooks/actions/useChannelActionItems.js +1 -1
  276. package/lib/module/hooks/actions/useChannelActionItems.js.map +1 -1
  277. package/lib/module/hooks/actions/useChannelActions.js +2 -2
  278. package/lib/module/hooks/actions/useChannelActions.js.map +1 -1
  279. package/lib/module/hooks/actions/useChannelMemberActionItems.js +1 -1
  280. package/lib/module/hooks/actions/useChannelMemberActionItems.js.map +1 -1
  281. package/lib/module/hooks/index.js +11 -0
  282. package/lib/module/hooks/index.js.map +1 -1
  283. package/lib/module/hooks/messagePreview/useMessageDeliveryStatus.js +6 -6
  284. package/lib/module/hooks/messagePreview/useMessageDeliveryStatus.js.map +1 -1
  285. package/lib/module/hooks/useIsDirectChat.js +1 -1
  286. package/lib/module/hooks/useIsDirectChat.js.map +1 -1
  287. package/lib/module/i18n/runtimeDefaults.js +1 -0
  288. package/lib/module/i18n/runtimeDefaults.js.map +1 -1
  289. package/lib/module/store/apis/getChannelMessages.js +5 -3
  290. package/lib/module/store/apis/getChannelMessages.js.map +1 -1
  291. package/lib/module/store/apis/getChannels.js +6 -3
  292. package/lib/module/store/apis/getChannels.js.map +1 -1
  293. package/lib/module/store/apis/getChannelsForFilterSort.js +2 -1
  294. package/lib/module/store/apis/getChannelsForFilterSort.js.map +1 -1
  295. package/lib/module/store/apis/queries/selectMessagesForChannels.js +7 -5
  296. package/lib/module/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  297. package/lib/module/utils/installNativeMultipartAdapter.js.map +1 -1
  298. package/lib/module/version.json +1 -1
  299. package/lib/typescript/ai-components/index.d.ts +3 -1
  300. package/lib/typescript/ai-components/index.d.ts.map +1 -1
  301. package/lib/typescript/ai-components/message-composer/ComposerView.d.ts.map +1 -1
  302. package/lib/typescript/ai-components/native/AIDictation.d.ts +6 -0
  303. package/lib/typescript/ai-components/native/AIDictation.d.ts.map +1 -1
  304. package/lib/typescript/ai-components/store/dictation/store.d.ts +7 -0
  305. package/lib/typescript/ai-components/store/dictation/store.d.ts.map +1 -1
  306. package/lib/typescript/ai-components/store/dictation/useDictationState.d.ts +1 -0
  307. package/lib/typescript/ai-components/store/dictation/useDictationState.d.ts.map +1 -1
  308. package/lib/typescript/ai-components/store/index.d.ts +2 -0
  309. package/lib/typescript/ai-components/store/index.d.ts.map +1 -1
  310. package/lib/typescript/ai-components/theme.d.ts +13 -0
  311. package/lib/typescript/ai-components/theme.d.ts.map +1 -1
  312. package/lib/typescript/ai-components/transcription/useDictation.d.ts +9 -1
  313. package/lib/typescript/ai-components/transcription/useDictation.d.ts.map +1 -1
  314. package/lib/typescript/ai-components/transcription/useDictationAudioLevel.d.ts +11 -0
  315. package/lib/typescript/ai-components/transcription/useDictationAudioLevel.d.ts.map +1 -0
  316. package/lib/typescript/ai-components/voice-visualization/VoiceGlow.d.ts +13 -0
  317. package/lib/typescript/ai-components/voice-visualization/VoiceGlow.d.ts.map +1 -0
  318. package/lib/typescript/ai-components/voice-visualization/VoiceVisualizationView.d.ts +26 -0
  319. package/lib/typescript/ai-components/voice-visualization/VoiceVisualizationView.d.ts.map +1 -0
  320. package/lib/typescript/ai-components/voice-visualization/VoiceWave.d.ts +13 -0
  321. package/lib/typescript/ai-components/voice-visualization/VoiceWave.d.ts.map +1 -0
  322. package/lib/typescript/ai-components/voice-visualization/bounce.d.ts +20 -0
  323. package/lib/typescript/ai-components/voice-visualization/bounce.d.ts.map +1 -0
  324. package/lib/typescript/ai-components/voice-visualization/driver.d.ts +96 -0
  325. package/lib/typescript/ai-components/voice-visualization/driver.d.ts.map +1 -0
  326. package/lib/typescript/ai-components/voice-visualization/glowShader.d.ts +7 -0
  327. package/lib/typescript/ai-components/voice-visualization/glowShader.d.ts.map +1 -0
  328. package/lib/typescript/ai-components/voice-visualization/index.d.ts +4 -0
  329. package/lib/typescript/ai-components/voice-visualization/index.d.ts.map +1 -0
  330. package/lib/typescript/ai-components/voice-visualization/math.d.ts +26 -0
  331. package/lib/typescript/ai-components/voice-visualization/math.d.ts.map +1 -0
  332. package/lib/typescript/ai-components/voice-visualization/palette.d.ts +18 -0
  333. package/lib/typescript/ai-components/voice-visualization/palette.d.ts.map +1 -0
  334. package/lib/typescript/ai-components/voice-visualization/simplex.d.ts +11 -0
  335. package/lib/typescript/ai-components/voice-visualization/simplex.d.ts.map +1 -0
  336. package/lib/typescript/ai-components/voice-visualization/styles.d.ts +24 -0
  337. package/lib/typescript/ai-components/voice-visualization/styles.d.ts.map +1 -0
  338. package/lib/typescript/ai-components/voice-visualization/types.d.ts +45 -0
  339. package/lib/typescript/ai-components/voice-visualization/types.d.ts.map +1 -0
  340. package/lib/typescript/ai-components/voice-visualization/useReduceMotion.d.ts +10 -0
  341. package/lib/typescript/ai-components/voice-visualization/useReduceMotion.d.ts.map +1 -0
  342. package/lib/typescript/ai-components/voice-visualization/useVoiceVisualization.d.ts +18 -0
  343. package/lib/typescript/ai-components/voice-visualization/useVoiceVisualization.d.ts.map +1 -0
  344. package/lib/typescript/ai-components/voice-visualization/waveGeometry.d.ts +25 -0
  345. package/lib/typescript/ai-components/voice-visualization/waveGeometry.d.ts.map +1 -0
  346. package/lib/typescript/components/Channel/hooks/useChannelLifecycle.d.ts.map +1 -1
  347. package/lib/typescript/components/ChannelList/ChannelListView.d.ts +1 -1
  348. package/lib/typescript/components/ChannelList/ChannelListView.d.ts.map +1 -1
  349. package/lib/typescript/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.d.ts.map +1 -1
  350. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewData.d.ts.map +1 -1
  351. package/lib/typescript/components/Chat/hooks/useConnectionLifecycle.d.ts +5 -4
  352. package/lib/typescript/components/Chat/hooks/useConnectionLifecycle.d.ts.map +1 -1
  353. package/lib/typescript/components/Indicators/LoadingErrorIndicator.d.ts +1 -1
  354. package/lib/typescript/components/Indicators/LoadingErrorIndicator.d.ts.map +1 -1
  355. package/lib/typescript/components/Message/MessageItemView/MessageStatus.d.ts.map +1 -1
  356. package/lib/typescript/components/Message/MessageItemView/MessageWrapper.d.ts.map +1 -1
  357. package/lib/typescript/components/MessageInput/MessageComposer.d.ts.map +1 -1
  358. package/lib/typescript/components/ThreadList/ThreadListUnreadBanner.d.ts.map +1 -1
  359. package/lib/typescript/components/index.d.ts +2 -0
  360. package/lib/typescript/components/index.d.ts.map +1 -1
  361. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +0 -1
  362. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
  363. package/lib/typescript/hooks/index.d.ts +1 -0
  364. package/lib/typescript/hooks/index.d.ts.map +1 -1
  365. package/lib/typescript/hooks/messagePreview/useMessageDeliveryStatus.d.ts +3 -0
  366. package/lib/typescript/hooks/messagePreview/useMessageDeliveryStatus.d.ts.map +1 -1
  367. package/lib/typescript/i18n/keys.d.ts +3 -1
  368. package/lib/typescript/i18n/keys.d.ts.map +1 -1
  369. package/lib/typescript/i18n/runtimeDefaults.d.ts +1 -0
  370. package/lib/typescript/i18n/runtimeDefaults.d.ts.map +1 -1
  371. package/lib/typescript/store/apis/getChannelMessages.d.ts +2 -1
  372. package/lib/typescript/store/apis/getChannelMessages.d.ts.map +1 -1
  373. package/lib/typescript/store/apis/getChannels.d.ts +3 -1
  374. package/lib/typescript/store/apis/getChannels.d.ts.map +1 -1
  375. package/lib/typescript/store/apis/getChannelsForFilterSort.d.ts.map +1 -1
  376. package/lib/typescript/store/apis/queries/selectMessagesForChannels.d.ts +3 -1
  377. package/lib/typescript/store/apis/queries/selectMessagesForChannels.d.ts.map +1 -1
  378. package/lib/typescript/utils/installNativeMultipartAdapter.d.ts +5 -3
  379. package/lib/typescript/utils/installNativeMultipartAdapter.d.ts.map +1 -1
  380. package/package.json +4 -4
  381. package/src/__tests__/offline-support/offline-feature.tsx +7 -7
  382. package/src/__tests__/offline-support/optimistic-update.tsx +5 -5
  383. package/src/ai-components/README.md +50 -2
  384. package/src/ai-components/__tests__/VoiceVisualization.test.tsx +208 -0
  385. package/src/ai-components/__tests__/dictation.test.tsx +58 -1
  386. package/src/ai-components/__tests__/voiceDriver.test.ts +317 -0
  387. package/src/ai-components/__tests__/voicePalette.test.ts +124 -0
  388. package/src/ai-components/index.ts +3 -1
  389. package/src/ai-components/message-composer/ComposerView.tsx +6 -3
  390. package/src/ai-components/message-composer/SpeechToTextButton.tsx +5 -2
  391. package/src/ai-components/native/AIDictation.ts +11 -0
  392. package/src/ai-components/store/dictation/store.ts +9 -0
  393. package/src/ai-components/store/dictation/useDictationState.ts +2 -1
  394. package/src/ai-components/store/index.ts +2 -0
  395. package/src/ai-components/theme.ts +16 -0
  396. package/src/ai-components/transcription/useDictation.ts +16 -3
  397. package/src/ai-components/transcription/useDictationAudioLevel.ts +38 -0
  398. package/src/ai-components/voice-visualization/VoiceGlow.tsx +79 -0
  399. package/src/ai-components/voice-visualization/VoiceVisualizationView.tsx +179 -0
  400. package/src/ai-components/voice-visualization/VoiceWave.tsx +67 -0
  401. package/src/ai-components/voice-visualization/bounce.ts +61 -0
  402. package/src/ai-components/voice-visualization/driver.ts +240 -0
  403. package/src/ai-components/voice-visualization/glowShader.ts +227 -0
  404. package/src/ai-components/voice-visualization/index.ts +3 -0
  405. package/src/ai-components/voice-visualization/math.ts +73 -0
  406. package/src/ai-components/voice-visualization/palette.ts +59 -0
  407. package/src/ai-components/voice-visualization/simplex.ts +92 -0
  408. package/src/ai-components/voice-visualization/styles.ts +42 -0
  409. package/src/ai-components/voice-visualization/types.ts +44 -0
  410. package/src/ai-components/voice-visualization/useReduceMotion.ts +34 -0
  411. package/src/ai-components/voice-visualization/useVoiceVisualization.ts +153 -0
  412. package/src/ai-components/voice-visualization/waveGeometry.ts +137 -0
  413. package/src/components/Channel/__tests__/Channel.test.tsx +44 -5
  414. package/src/components/Channel/hooks/useChannelLifecycle.ts +4 -1
  415. package/src/components/ChannelDetails/__tests__/ChannelDetails.test.tsx +1 -1
  416. package/src/components/ChannelDetails/__tests__/ChannelDetailsActionsSection.test.tsx +1 -1
  417. package/src/components/ChannelDetails/__tests__/ChannelDetailsEditButton.test.tsx +1 -1
  418. package/src/components/ChannelDetails/__tests__/ChannelDetailsMemberSection.test.tsx +1 -1
  419. package/src/components/ChannelDetails/__tests__/ChannelDetailsNavHeader.test.tsx +1 -1
  420. package/src/components/ChannelDetails/__tests__/ChannelDetailsProfile.test.tsx +2 -2
  421. package/src/components/ChannelDetails/__tests__/ChannelEditDetailsForm.test.tsx +1 -1
  422. package/src/components/ChannelDetails/__tests__/ChannelEditDetailsFormContent.test.tsx +2 -2
  423. package/src/components/ChannelDetails/__tests__/ChannelEditName.test.tsx +1 -1
  424. package/src/components/ChannelDetails/__tests__/members/ChannelAddMembersForm.test.tsx +1 -1
  425. package/src/components/ChannelDetails/__tests__/members/ChannelMemberActionsSheet.test.tsx +2 -2
  426. package/src/components/ChannelDetails/__tests__/members/ChannelMemberItem.test.tsx +1 -1
  427. package/src/components/ChannelDetails/__tests__/useChannelDetailsMemberStatusText.test.tsx +1 -1
  428. package/src/components/ChannelDetails/components/members/ChannelMemberItem.tsx +1 -1
  429. package/src/components/ChannelDetails/hooks/useChannelDetailsMemberStatusText.ts +1 -1
  430. package/src/components/ChannelList/ChannelListView.tsx +1 -3
  431. package/src/components/ChannelList/__tests__/ChannelList.test.tsx +44 -0
  432. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +1 -1
  433. package/src/components/ChannelPreview/ChannelDetailsBottomSheet.tsx +1 -1
  434. package/src/components/ChannelPreview/ChannelLastMessagePreview.tsx +1 -1
  435. package/src/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.tsx +8 -2
  436. package/src/components/ChannelPreview/ChannelPreviewTitle.tsx +1 -1
  437. package/src/components/ChannelPreview/ChannelPreviewView.tsx +1 -1
  438. package/src/components/ChannelPreview/__tests__/ChannelPreview.test.tsx +4 -4
  439. package/src/components/ChannelPreview/__tests__/ChannelPreviewView.test.tsx +40 -0
  440. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewData.test.tsx +51 -0
  441. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayName.test.tsx +1 -1
  442. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayPresence.test.tsx +1 -1
  443. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewPollLabel.test.tsx +87 -0
  444. package/src/components/ChannelPreview/hooks/useChannelPreviewData.ts +3 -4
  445. package/src/components/ChannelPreview/hooks/useChannelPreviewDisplayName.ts +1 -1
  446. package/src/components/ChannelPreview/hooks/useChannelPreviewDisplayPresence.ts +1 -1
  447. package/src/components/ChannelPreview/hooks/useChannelPreviewPollLabel.ts +1 -1
  448. package/src/components/Chat/__tests__/Chat.test.tsx +31 -1
  449. package/src/components/Chat/hooks/useConnectionLifecycle.ts +12 -6
  450. package/src/components/Indicators/LoadingErrorIndicator.tsx +8 -1
  451. package/src/components/Message/Message.tsx +1 -1
  452. package/src/components/Message/MessageItemView/MessageStatus.tsx +16 -2
  453. package/src/components/Message/MessageItemView/MessageWrapper.tsx +14 -4
  454. package/src/components/Message/MessageItemView/__tests__/MessageStatus.test.tsx +21 -0
  455. package/src/components/Message/hooks/__tests__/useCreateMessageActionHandlers.test.tsx +1 -1
  456. package/src/components/Message/hooks/__tests__/useUserMuteActive.test.tsx +1 -1
  457. package/src/components/Message/hooks/useCreateMessageActionHandlers.ts +3 -3
  458. package/src/components/Message/hooks/useProcessReactions.ts +2 -2
  459. package/src/components/Message/hooks/useUserMuteActive.ts +1 -1
  460. package/src/components/MessageInput/MessageComposer.tsx +4 -2
  461. package/src/components/MessageList/MessageFlashList.tsx +2 -2
  462. package/src/components/MessageList/MessageList.tsx +2 -2
  463. package/src/components/MessageList/__tests__/MessageList.test.tsx +26 -8
  464. package/src/components/MessageList/__tests__/ScrollToBottomButton.test.tsx +3 -3
  465. package/src/components/MessageList/hooks/useOwnUnreadCount.ts +1 -1
  466. package/src/components/MessageMenu/MessageUserReactionsItem.tsx +1 -1
  467. package/src/components/MessageMenu/hooks/useMessageOwnReactions.ts +2 -2
  468. package/src/components/Poll/components/PollAnswersList.tsx +1 -1
  469. package/src/components/Poll/components/PollButtons.tsx +1 -1
  470. package/src/components/Poll/hook/useIsPollCreatedByCurrentUser.ts +1 -1
  471. package/src/components/Thread/Thread.tsx +1 -1
  472. package/src/components/Thread/__tests__/Thread.test.tsx +4 -2
  473. package/src/components/ThreadList/ThreadListItem.tsx +1 -1
  474. package/src/components/ThreadList/ThreadListUnreadBanner.tsx +6 -2
  475. package/src/components/ThreadList/__tests__/ThreadList.test.tsx +21 -0
  476. package/src/components/index.ts +2 -0
  477. package/src/contexts/componentsContext/defaultComponents.ts +0 -2
  478. package/src/contexts/liveLocationManagerContext/LiveLocationManagerContext.tsx +1 -1
  479. package/src/hooks/__tests__/useChannelMuteActive.test.tsx +1 -1
  480. package/src/hooks/__tests__/useIsDirectChat.test.tsx +1 -1
  481. package/src/hooks/actions/__tests__/useChannelActionItems.test.tsx +1 -1
  482. package/src/hooks/actions/__tests__/useChannelActions.test.tsx +1 -1
  483. package/src/hooks/actions/__tests__/useChannelMemberActionItems.test.tsx +6 -6
  484. package/src/hooks/actions/useChannelActionItems.tsx +1 -1
  485. package/src/hooks/actions/useChannelActions.ts +2 -2
  486. package/src/hooks/actions/useChannelMemberActionItems.tsx +1 -1
  487. package/src/hooks/index.ts +1 -0
  488. package/src/hooks/messagePreview/__tests__/useMessageDeliveryStatus.test.tsx +57 -32
  489. package/src/hooks/messagePreview/useMessageDeliveryStatus.ts +13 -7
  490. package/src/hooks/useIsDirectChat.ts +1 -1
  491. package/src/i18n/__tests__/catalog.fixture.json +2 -0
  492. package/src/i18n/keys.ts +3 -0
  493. package/src/i18n/runtimeDefaults.ts +1 -0
  494. package/src/store/__tests__/selectMessagesForChannels.test.ts +34 -12
  495. package/src/store/apis/getChannelMessages.ts +4 -1
  496. package/src/store/apis/getChannels.ts +5 -1
  497. package/src/store/apis/getChannelsForFilterSort.ts +1 -0
  498. package/src/store/apis/queries/selectMessagesForChannels.ts +7 -2
  499. package/src/utils/installNativeMultipartAdapter.ts +5 -3
  500. package/src/version.json +1 -1
@@ -197,7 +197,7 @@ export const useCreateMessageActionHandlers = ({
197
197
 
198
198
  const isMuted = isUserMuted(
199
199
  client.mutedUsersStore.getLatestValue().mutedUsers,
200
- client.userID,
200
+ client.userId,
201
201
  message.user.id,
202
202
  );
203
203
 
@@ -371,9 +371,9 @@ export const useCreateMessageActionHandlers = ({
371
371
  const userExistingReaction = own_reactions.find((reaction) => {
372
372
  // `own_reactions` should only hold the current user's reactions; checked anyway so a bad
373
373
  // message update cannot break toggling.
374
- if (reaction.user && client.userID === reaction.user.id && reaction.type === reactionType) {
374
+ if (reaction.user && client.userId === reaction.user.id && reaction.type === reactionType) {
375
375
  return true;
376
- } else if (reaction.user && client.userID !== reaction.user.id) {
376
+ } else if (reaction.user && client.userId !== reaction.user.id) {
377
377
  console.warn(
378
378
  'message.own_reactions contained reactions from a different user, this indicates a bug',
379
379
  );
@@ -113,7 +113,7 @@ export const useProcessReactions = (props: UseProcessReactionsParams) => {
113
113
  Icon: getEmojiByReactionType(reactionType, supportedReactions),
114
114
  lastReactionAt: convertTimestampToDate(last_reaction_at) ?? null,
115
115
  latestReactedUserNames,
116
- own: isOwnReaction(reactionType, own_reactions, latest_reactions, client.userID),
116
+ own: isOwnReaction(reactionType, own_reactions, latest_reactions, client.userId),
117
117
  type: reactionType,
118
118
  unlistedReactedUserCount: count - latestReactedUserNames.length,
119
119
  };
@@ -126,7 +126,7 @@ export const useProcessReactions = (props: UseProcessReactionsParams) => {
126
126
  totalReactionCount: unsortedReactions.reduce((total, { count }) => total + count, 0),
127
127
  };
128
128
  }, [
129
- client.userID,
129
+ client.userId,
130
130
  reaction_groups,
131
131
  own_reactions,
132
132
  latest_reactions,
@@ -32,7 +32,7 @@ export const isUserMuted = (
32
32
  */
33
33
  export const useUserMuteActive = (user: UserResponse | null | undefined) => {
34
34
  const { client } = useChatContext();
35
- const currentUserId = client?.userID;
35
+ const currentUserId = client?.userId;
36
36
  const userId = user?.id;
37
37
 
38
38
  const selector = useCallback(
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useMemo } from 'react';
2
- import { StyleSheet, View } from 'react-native';
2
+ import { Platform, StyleSheet, View } from 'react-native';
3
3
 
4
4
  import Animated, {
5
5
  Extrapolation,
@@ -328,7 +328,9 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
328
328
  }));
329
329
  const { bottom } = useSafeAreaInsets();
330
330
 
331
- const BOTTOM_OFFSET = isKeyboardVisible || selectedPicker ? 16 : bottom ? bottom : 16;
331
+ const safeAreaBottomOffset = Platform.OS === 'android' ? bottom + 16 : bottom;
332
+ const BOTTOM_OFFSET =
333
+ isKeyboardVisible || selectedPicker ? 16 : bottom ? safeAreaBottomOffset : 16;
332
334
 
333
335
  const micPositionContextValue = useMemo(
334
336
  () => ({ micPositionX, micPositionY }),
@@ -321,7 +321,7 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
321
321
  channel,
322
322
  markRead,
323
323
  readEvents,
324
- userId: client.userID,
324
+ userId: client.userId,
325
325
  });
326
326
 
327
327
  const renderItem = useCallback(
@@ -343,7 +343,7 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
343
343
 
344
344
  const shouldScrollToRecentOnNewOwnMessageRef = useShouldScrollToRecentOnNewOwnMessage(
345
345
  rawMessageList,
346
- client.userID,
346
+ client.userId,
347
347
  );
348
348
 
349
349
  const [autoscrollToRecent, setAutoscrollToRecent] = useState(true);
@@ -321,7 +321,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
321
321
  channel,
322
322
  markRead,
323
323
  readEvents,
324
- userId: client.userID,
324
+ userId: client.userId,
325
325
  });
326
326
 
327
327
  const previousDerivedItemsRef = useRef<Map<string, MessageListItemWithNeighbours>>(undefined);
@@ -355,7 +355,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
355
355
 
356
356
  const shouldScrollToRecentOnNewOwnMessageRef = useShouldScrollToRecentOnNewOwnMessage(
357
357
  rawMessageList,
358
- client.userID,
358
+ client.userId,
359
359
  );
360
360
 
361
361
  const [autoscrollToRecent, setAutoscrollToRecent] = useState(false);
@@ -1375,7 +1375,9 @@ describe('MessageList in a thread', () => {
1375
1375
  expect(markReadLocally).not.toHaveBeenCalled();
1376
1376
  });
1377
1377
 
1378
- it("places the unread separator from the thread's unread state, not the channel's", async () => {
1378
+ // The LLC seeds the thread's snapshot from the channel's read state, which says nothing about the
1379
+ // replies, so a thread draws no separator from either snapshot.
1380
+ it('draws no unread separator in a thread', async () => {
1379
1381
  const { channel, queryAllByLabelText, replies, threadInstance } = await setup();
1380
1382
 
1381
1383
  act(() =>
@@ -1386,12 +1388,28 @@ describe('MessageList in a thread', () => {
1386
1388
  );
1387
1389
  expect(queryAllByLabelText('Inline unread indicator')).toHaveLength(0);
1388
1390
 
1389
- act(() =>
1390
- threadInstance.messagePaginator.unreadStateSnapshot.partialNext({
1391
- firstUnreadMessageId: replies[3].id,
1392
- unreadCount: 2,
1393
- }),
1394
- );
1395
- await waitFor(() => expect(queryAllByLabelText('Inline unread indicator')).toHaveLength(1));
1391
+ // The first reply too, whose separator row would be the parent message.
1392
+ for (const firstUnread of [replies[0], replies[3]]) {
1393
+ await act(async () => {
1394
+ threadInstance.messagePaginator.unreadStateSnapshot.partialNext({
1395
+ firstUnreadMessageId: firstUnread.id,
1396
+ unreadCount: 2,
1397
+ });
1398
+ await new Promise((resolve) => setTimeout(resolve, 0));
1399
+ });
1400
+ expect(queryAllByLabelText('Inline unread indicator')).toHaveLength(0);
1401
+ }
1402
+
1403
+ // The live boundary, from the read time rather than a frozen first-unread ID.
1404
+ await act(async () => {
1405
+ threadInstance.messagePaginator.unreadStateSnapshot.next({
1406
+ firstUnreadMessageId: null,
1407
+ lastReadAt: replies[1].created_at,
1408
+ lastReadMessageId: replies[1].id,
1409
+ unreadCount: 3,
1410
+ });
1411
+ await new Promise((resolve) => setTimeout(resolve, 0));
1412
+ });
1413
+ expect(queryAllByLabelText('Inline unread indicator')).toHaveLength(0);
1396
1414
  });
1397
1415
  });
@@ -75,7 +75,7 @@ describe('ScrollToBottomButton', () => {
75
75
  const i18nInstance = new Streami18n();
76
76
  const translators = await i18nInstance.init();
77
77
  // The button reads OUR user's count from `channel.state` (a v10 reactive StateStore) via
78
- // `useStateStore`, keyed by the chat client's userID. Seed the `read` slice with 3 unread
78
+ // `useStateStore`, keyed by the chat client's `userId`. Seed the `read` slice with 3 unread
79
79
  // for that user.
80
80
  const channel = {
81
81
  state: generateChannelState({
@@ -91,7 +91,7 @@ describe('ScrollToBottomButton', () => {
91
91
  const { getByTestId, getByText } = render(
92
92
  <ThemeProvider>
93
93
  <TranslationProvider value={{ ...translators, t } as unknown as TranslationContextValue}>
94
- <ChatProvider value={{ client: { userID: 'me' } } as unknown as ChatContextValue}>
94
+ <ChatProvider value={{ client: { userId: 'me' } } as unknown as ChatContextValue}>
95
95
  <ChannelProvider value={{ channel } as unknown as ChannelContextValue}>
96
96
  <ScrollToBottomButton onPress={() => null} showNotification={true} />
97
97
  </ChannelProvider>
@@ -139,7 +139,7 @@ describe('ScrollToBottomButton', () => {
139
139
  <ThemeProvider>
140
140
  <AccessibilityProvider value={{ enabled: true }}>
141
141
  <TranslationProvider value={{ ...translators, userLanguage: 'en' }}>
142
- <ChatProvider value={{ client: { userID: 'me' } } as unknown as ChatContextValue}>
142
+ <ChatProvider value={{ client: { userId: 'me' } } as unknown as ChatContextValue}>
143
143
  <ChannelProvider value={{ channel } as unknown as ChannelContextValue}>
144
144
  <ScrollToBottomButton onPress={() => null} showNotification={true} />
145
145
  </ChannelProvider>
@@ -14,7 +14,7 @@ import { useStateStore } from '../../../hooks/useStateStore';
14
14
  */
15
15
  export const useOwnUnreadCount = (channel: Channel | undefined) => {
16
16
  const { client } = useChatContext();
17
- const userId = client?.userID;
17
+ const userId = client?.userId;
18
18
  const selector = useMemo(
19
19
  () => (state: ReadState) => ({
20
20
  unreadCount: userId ? (state.read[userId]?.unread_messages ?? 0) : 0,
@@ -36,7 +36,7 @@ export const MessageUserReactionsItem = ({
36
36
  const styles = useStyles();
37
37
 
38
38
  const { client } = useChatContext();
39
- const isOwnReaction = client.userID === id;
39
+ const isOwnReaction = client.userId === id;
40
40
  const { t } = useTranslationContext();
41
41
 
42
42
  const { handleReaction } = useMessageContext();
@@ -10,9 +10,9 @@ export const useMessageOwnReactions = () => {
10
10
  const ownReactionTypes = message?.own_reactions?.map((reaction) => reaction.type) || [];
11
11
  const latestReactionTypesByCurrentUser =
12
12
  message?.latest_reactions
13
- ?.filter((reaction) => reaction.user?.id === client.userID)
13
+ ?.filter((reaction) => reaction.user?.id === client.userId)
14
14
  .map((reaction) => reaction.type) || [];
15
15
 
16
16
  return Array.from(new Set([...ownReactionTypes, ...latestReactionTypesByCurrentUser]));
17
- }, [client.userID, message?.latest_reactions, message?.own_reactions]);
17
+ }, [client.userId, message?.latest_reactions, message?.own_reactions]);
18
18
  };
@@ -96,7 +96,7 @@ export const PollAnswerListItem = ({ answer }: { answer: PollVoteResponseData })
96
96
  [answer.updated_at, t, tDateTimeParser],
97
97
  );
98
98
 
99
- const isMyAnswer = client.userID === answer.user?.id;
99
+ const isMyAnswer = client.userId === answer.user?.id;
100
100
 
101
101
  const isAnonymous = useMemo(
102
102
  () => votingVisibility === 'anonymous' && !isMyAnswer,
@@ -229,7 +229,7 @@ export const EndVoteButton = () => {
229
229
  const { client } = useChatContext();
230
230
  const styles = useStyles();
231
231
 
232
- return !isClosed && createdBy?.id === client.userID ? (
232
+ return !isClosed && createdBy?.id === client.userId ? (
233
233
  <GenericPollButton
234
234
  label={t('poll.endVote.label', 'End Vote')}
235
235
  onPress={endVote}
@@ -10,5 +10,5 @@ export const useIsPollCreatedByCurrentUser = () => {
10
10
  const { createdBy } = usePollState();
11
11
  const { client } = useChatContext();
12
12
 
13
- return createdBy?.id === client.userID;
13
+ return createdBy?.id === client.userId;
14
14
  };
@@ -138,7 +138,7 @@ export const Thread = (props: PropsWithChildren<ThreadProps>) => {
138
138
  .toTail()
139
139
  .catch((err: unknown) => console.warn('Reloading the thread replies failed:', err));
140
140
 
141
- return <LoadingErrorIndicator error={lastQueryError} listType='message' retry={retry} />;
141
+ return <LoadingErrorIndicator error={lastQueryError} listType='thread' retry={retry} />;
142
142
  }
143
143
 
144
144
  return (
@@ -328,6 +328,8 @@ describe('Thread', () => {
328
328
  await waitFor(() => {
329
329
  expect(screen.getByTestId('loading-error')).toBeTruthy();
330
330
  });
331
+ // The thread's own copy, not the channel's "Error loading messages for this channel...".
332
+ expect(screen.getByTestId('loading-error')).toHaveTextContent('Error loading replies...');
331
333
  });
332
334
 
333
335
  it('retries the reply query — and only the reply query — from the indicator', async () => {
@@ -511,10 +513,10 @@ describe('Thread lifecycle', () => {
511
513
  generateMessage({ reply_count: 3, user }),
512
514
  );
513
515
  const readState = (unreadMessageCount: number) => ({
514
- [chatClient.userID as string]: {
516
+ [chatClient.userId as string]: {
515
517
  lastReadAt: 1,
516
518
  unreadMessageCount,
517
- user: { id: chatClient.userID as string },
519
+ user: { id: chatClient.userId as string },
518
520
  },
519
521
  });
520
522
  return { markRead, parentMessage, readState, testChannel };
@@ -158,7 +158,7 @@ export const ThreadListItem = (props: ThreadListItemProps) => {
158
158
  channel: nextValue.channel,
159
159
  deletedAt: nextValue.deletedAt,
160
160
  ownUnreadMessageCount:
161
- (client.userID && nextValue.read[client.userID]?.unreadMessageCount) || 0,
161
+ (client.userId && nextValue.read[client.userId]?.unreadMessageCount) || 0,
162
162
  parentMessage: nextValue.parentMessage,
163
163
  }) as const,
164
164
  [client],
@@ -11,13 +11,15 @@ import { primitives } from '../../theme';
11
11
  const selector = (nextValue: ThreadManagerState) =>
12
12
  ({ unseenThreadIds: nextValue.unseenThreadIds }) as const;
13
13
 
14
- // The paginator records a failed reload and clears it on the next successful query.
14
+ // The paginator records a failed query and clears it on the next successful one.
15
15
  const lastQueryErrorSelector = (nextValue: { lastQueryError?: Error }) => ({
16
16
  lastQueryError: nextValue.lastQueryError,
17
17
  });
18
18
 
19
19
  export const ThreadListUnreadBanner = () => {
20
+ // we need the two extra states so we can tell the client's states apart
20
21
  const [loading, setLoading] = useState(false);
22
+ const [reloadFailed, setReloadFailed] = useState(false);
21
23
  const { client } = useChatContext();
22
24
  const { icons } = useComponentsContext();
23
25
  const { t } = useTranslationContext();
@@ -48,8 +50,10 @@ export const ThreadListUnreadBanner = () => {
48
50
  setLoading(true);
49
51
  try {
50
52
  await client.threads.reload();
53
+ setReloadFailed(!!client.threads.paginator.lastQueryError);
51
54
  } catch {
52
55
  // Only with the paginator's `throwErrors`; the error is already in its state.
56
+ setReloadFailed(true);
53
57
  } finally {
54
58
  setLoading(false);
55
59
  }
@@ -64,7 +68,7 @@ export const ThreadListUnreadBanner = () => {
64
68
  );
65
69
  }
66
70
 
67
- if (lastQueryError) {
71
+ if (reloadFailed && lastQueryError) {
68
72
  return (
69
73
  <Pressable onPress={handlePress} style={pressableStyle}>
70
74
  <icons.ExclamationCircle stroke={semantics.textSecondary} height={20} width={20} />
@@ -179,4 +179,25 @@ describe('ThreadList loading states', () => {
179
179
  await waitFor(() => expect(rows()).toHaveLength(2));
180
180
  expect(screen.queryByText("Couldn't load new threads. Tap to retry")).toBeNull();
181
181
  });
182
+
183
+ it('keeps the new threads count when a different thread query failed', async () => {
184
+ jest
185
+ .spyOn(chatClient, 'queryThreadsAndHydrate')
186
+ .mockResolvedValueOnce({ next: undefined, threads: [makeThread()] });
187
+ render(
188
+ <Chat client={chatClient}>
189
+ <ThreadList isFocused />
190
+ </Chat>,
191
+ );
192
+ await waitFor(() => expect(rows()).toHaveLength(1));
193
+
194
+ // A failed next page, for example: the paginator records it the same way as a failed reload.
195
+ act(() => {
196
+ chatClient.threads.paginator.state.partialNext({ lastQueryError: new Error('offline') });
197
+ chatClient.threads.state.partialNext({ unseenThreadIds: ['a'] });
198
+ });
199
+
200
+ await waitFor(() => expect(screen.getByText('1 new thread')).toBeTruthy());
201
+ expect(screen.queryByText("Couldn't load new threads. Tap to retry")).toBeNull();
202
+ });
182
203
  });
@@ -150,7 +150,9 @@ export * from './MessageList/hooks/useMarkRead';
150
150
  // Only the constant, for integrators running their own `jumpToMessage`.
151
151
  export { DEFAULT_HIGHLIGHT_DURATION } from './MessageList/hooks/useMessageListFocus';
152
152
  export * from './MessageList/hooks/useMessageList';
153
+ export * from './MessageList/hooks/useOwnUnreadCount';
153
154
  export * from './MessageList/hooks/useTypingString';
155
+ export * from './MessageList/hooks/useTypingUsers';
154
156
  export * from './MessageList/InlineDateSeparator';
155
157
  export * from './MessageList/InlineLoadingMoreIndicator';
156
158
  export * from './MessageList/InlineLoadingMoreRecentIndicator';
@@ -149,7 +149,6 @@ import { StopMessageStreamingButton } from '../../components/MessageInput/StopMe
149
149
  import { DateHeader } from '../../components/MessageList/DateHeader';
150
150
  import { InlineDateSeparator } from '../../components/MessageList/InlineDateSeparator';
151
151
  import { InlineUnreadIndicator } from '../../components/MessageList/InlineUnreadIndicator';
152
- import { MessageList } from '../../components/MessageList/MessageList';
153
152
  import { MessageSystem } from '../../components/MessageList/MessageSystem';
154
153
  import { NetworkDownIndicator } from '../../components/MessageList/NetworkDownIndicator';
155
154
  import { ScrollToBottomButton } from '../../components/MessageList/ScrollToBottomButton';
@@ -448,7 +447,6 @@ const components = {
448
447
  MessageInputLeadingView,
449
448
  MessageInputTrailingView,
450
449
  MessageItemView,
451
- MessageList,
452
450
  MessagePinnedHeader,
453
451
  MessageReactionPicker,
454
452
  MessageReminderHeader,
@@ -35,7 +35,7 @@ export const LiveLocationManagerProvider = (
35
35
  }
36
36
  return new LiveLocationManager({
37
37
  client,
38
- getDeviceId: getDeviceId ?? (() => `react-native-${Platform.OS}-${client.userID}`),
38
+ getDeviceId: getDeviceId ?? (() => `react-native-${Platform.OS}-${client.userId}`),
39
39
  watchLocation,
40
40
  });
41
41
  }, [client, getDeviceId, watchLocation]);
@@ -21,7 +21,7 @@ const createClient = ({
21
21
  // muted USERS stay client-global — useMutedUsers reads them reactively from mutedUsersStore.
22
22
  mutedUsersStore: new StateStore({ mutedUsers }),
23
23
  on: jest.fn(() => ({ unsubscribe: jest.fn() })),
24
- userID: CURRENT_USER_ID,
24
+ userId: CURRENT_USER_ID,
25
25
  }) as never;
26
26
 
27
27
  // Back the mock channel with a real StateStore (so `useStateStore` can subscribe to `members` and
@@ -23,7 +23,7 @@ describe('useIsDirectChat', () => {
23
23
  jest
24
24
  .spyOn(ChatContext, 'useChatContext')
25
25
  .mockImplementation(
26
- () => ({ client: { userID: OWN_USER_ID } }) as unknown as ChatContextValue,
26
+ () => ({ client: { userId: OWN_USER_ID } }) as unknown as ChatContextValue,
27
27
  );
28
28
  });
29
29
 
@@ -58,7 +58,7 @@ const createChannelMock = (params?: {
58
58
  getLatestValue: () => ({ userIds: blockedUserIds }),
59
59
  subscribeWithSelector: () => () => {},
60
60
  },
61
- userID: ownUserId,
61
+ userId: ownUserId,
62
62
  }),
63
63
  state: {
64
64
  members: {
@@ -58,7 +58,7 @@ const createClient = () => ({
58
58
  unblockUser: jest.fn(),
59
59
  unmuteUser: jest.fn(),
60
60
  uploadImage: jest.fn().mockResolvedValue({ file: 'https://cdn.example.com/uploaded.png' }),
61
- userID: 'current-user-id',
61
+ userId: 'current-user-id',
62
62
  });
63
63
 
64
64
  const createChannel = (client: ReturnType<typeof createClient>) =>
@@ -35,15 +35,15 @@ const createMemberMock = (userId = 'target-user-id'): ChannelMemberResponse =>
35
35
  user_id: userId,
36
36
  }) as ChannelMemberResponse;
37
37
 
38
- const createChannelMock = (params?: { blockedUserIds?: string[]; userID?: string }): Channel => {
39
- const { blockedUserIds = [], userID = 'current-user-id' } = params ?? {};
38
+ const createChannelMock = (params?: { blockedUserIds?: string[]; userId?: string }): Channel => {
39
+ const { blockedUserIds = [], userId = 'current-user-id' } = params ?? {};
40
40
  return {
41
41
  getClient: () => ({
42
42
  blockedUsers: {
43
43
  getLatestValue: () => ({ userIds: blockedUserIds }),
44
44
  subscribeWithSelector: () => () => {},
45
45
  },
46
- userID,
46
+ userId,
47
47
  }),
48
48
  } as unknown as Channel;
49
49
  };
@@ -84,7 +84,7 @@ describe('useChannelMemberActionItems', () => {
84
84
  });
85
85
 
86
86
  it('returns no action items when the member is the current user', () => {
87
- const currentUserChannel = createChannelMock({ userID: 'target-user-id' });
87
+ const currentUserChannel = createChannelMock({ userId: 'target-user-id' });
88
88
 
89
89
  const { result } = renderHook(() =>
90
90
  useChannelMemberActionItems({ channel: currentUserChannel, member }),
@@ -101,7 +101,7 @@ describe('useChannelMemberActionItems', () => {
101
101
  });
102
102
 
103
103
  const wrapper = ({ children }: PropsWithChildren) => (
104
- <ChatProvider value={{ client: { mutedUsersStore, userID: 'current-user-id' } } as never}>
104
+ <ChatProvider value={{ client: { mutedUsersStore, userId: 'current-user-id' } } as never}>
105
105
  {children}
106
106
  </ChatProvider>
107
107
  );
@@ -166,7 +166,7 @@ describe('useChannelMemberActionItems', () => {
166
166
  jest
167
167
  .spyOn(useChannelOwnCapabilitiesModule, 'useChannelOwnCapabilities')
168
168
  .mockReturnValue(['update-channel-members']);
169
- const currentUserChannel = createChannelMock({ userID: 'target-user-id' });
169
+ const currentUserChannel = createChannelMock({ userId: 'target-user-id' });
170
170
 
171
171
  const { result } = renderHook(() =>
172
172
  useChannelMemberActionItems({ channel: currentUserChannel, member }),
@@ -112,7 +112,7 @@ export const buildDefaultChannelActionItems: BuildDefaultChannelActionItems = (
112
112
  t,
113
113
  channel,
114
114
  } = channelActionItemsParams;
115
- const ownUserId = channel.getClient().userID;
115
+ const ownUserId = channel.getClient().userId;
116
116
 
117
117
  const actionItems: ChannelActionItem[] = [
118
118
  {
@@ -39,7 +39,7 @@ export type ChannelActions = {
39
39
  export const getOtherUserInDirectChannel = (channel: Channel) => {
40
40
  const members = Object.values(channel.state.members);
41
41
  return members.length === 2
42
- ? members.find((member) => member.user?.id !== channel.getClient().userID)
42
+ ? members.find((member) => member.user?.id !== channel.getClient().userId)
43
43
  : undefined;
44
44
  };
45
45
 
@@ -62,7 +62,7 @@ export const useChannelActions = (channel: Channel) => {
62
62
  const { client } = useChatContext();
63
63
  const { addNotification } = useNotificationApi();
64
64
  const { t } = useTranslationContext();
65
- const ownUserId = client.userID;
65
+ const ownUserId = client.userId;
66
66
 
67
67
  const pin = useStableCallback(async (options?: ChannelActionOptions) => {
68
68
  try {
@@ -211,7 +211,7 @@ export const useChannelMemberActionItems = ({
211
211
 
212
212
  const isBlocked = blockedUserIds.includes(member.user?.id ?? '');
213
213
 
214
- const isCurrentUser = member.user?.id === channel.getClient().userID;
214
+ const isCurrentUser = member.user?.id === channel.getClient().userId;
215
215
 
216
216
  const channelMemberActionItemsParams = useMemo<ChannelMemberActionItemsParams>(
217
217
  () => ({
@@ -13,6 +13,7 @@ export * from './useChannelMuteActive';
13
13
  export * from './useIsDirectChat';
14
14
  export * from './useIsChannelMember';
15
15
  export * from './useStreami18n';
16
+ export * from './useTranslatedMessage';
16
17
  export * from './useViewport';
17
18
  export * from './useScreenDimensions';
18
19
  export * from './useScreenOrientation';