stream-chat-react-native-core 5.28.1-beta.1 → 5.29.0-beta.1

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 (381) hide show
  1. package/lib/commonjs/components/Attachment/Attachment.js +2 -2
  2. package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/AudioAttachment.js +247 -115
  4. package/lib/commonjs/components/Attachment/AudioAttachment.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js +30 -50
  6. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js.map +1 -1
  7. package/lib/commonjs/components/Attachment/VideoThumbnail.js +3 -3
  8. package/lib/commonjs/components/Attachment/VideoThumbnail.js.map +1 -1
  9. package/lib/commonjs/components/Channel/Channel.js +43 -1
  10. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  11. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +24 -0
  12. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  13. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js +6 -6
  14. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  15. package/lib/commonjs/components/Message/Message.js +1 -1
  16. package/lib/commonjs/components/Message/Message.js.map +1 -1
  17. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +1 -1
  18. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  19. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +1 -1
  20. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  21. package/lib/commonjs/components/Message/hooks/useMessageActions.js +4 -2
  22. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
  23. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +55 -74
  24. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  25. package/lib/commonjs/components/MessageInput/InputButtons.js +1 -1
  26. package/lib/commonjs/components/MessageInput/InputButtons.js.map +1 -1
  27. package/lib/commonjs/components/MessageInput/MessageInput.js +250 -43
  28. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  29. package/lib/commonjs/components/MessageInput/SendButton.js +9 -7
  30. package/lib/commonjs/components/MessageInput/SendButton.js.map +1 -1
  31. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecorder.js +221 -0
  32. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecorder.js.map +1 -0
  33. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +121 -0
  34. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -0
  35. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.js +68 -0
  36. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.js.map +1 -0
  37. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +75 -0
  38. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -0
  39. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.js +87 -0
  40. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.js.map +1 -0
  41. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.js +47 -0
  42. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.js.map +1 -0
  43. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js +452 -0
  44. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js.map +1 -0
  45. package/lib/commonjs/components/MessageInput/utils/audioSampling.js +91 -0
  46. package/lib/commonjs/components/MessageInput/utils/audioSampling.js.map +1 -0
  47. package/lib/commonjs/components/MessageInput/utils/normalizeAudioLevel.js +18 -0
  48. package/lib/commonjs/components/MessageInput/utils/normalizeAudioLevel.js.map +1 -0
  49. package/lib/commonjs/components/ProgressControl/ProgressControl.js +57 -40
  50. package/lib/commonjs/components/ProgressControl/ProgressControl.js.map +1 -1
  51. package/lib/commonjs/components/ProgressControl/WaveProgressBar.js +162 -0
  52. package/lib/commonjs/components/ProgressControl/WaveProgressBar.js.map +1 -0
  53. package/lib/commonjs/components/Reply/Reply.js +45 -20
  54. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  55. package/lib/commonjs/components/index.js +66 -0
  56. package/lib/commonjs/components/index.js.map +1 -1
  57. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +23 -12
  58. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  59. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +24 -0
  60. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  61. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +76 -28
  62. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  63. package/lib/commonjs/contexts/themeContext/utils/theme.js +62 -7
  64. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  65. package/lib/commonjs/i18n/en.json +2 -0
  66. package/lib/commonjs/i18n/es.json +11 -9
  67. package/lib/commonjs/i18n/fr.json +11 -9
  68. package/lib/commonjs/i18n/he.json +11 -9
  69. package/lib/commonjs/i18n/hi.json +11 -9
  70. package/lib/commonjs/i18n/it.json +11 -9
  71. package/lib/commonjs/i18n/ja.json +11 -9
  72. package/lib/commonjs/i18n/ko.json +11 -9
  73. package/lib/commonjs/i18n/nl.json +11 -9
  74. package/lib/commonjs/i18n/pt-BR.json +11 -9
  75. package/lib/commonjs/i18n/ru.json +11 -9
  76. package/lib/commonjs/i18n/tr.json +11 -9
  77. package/lib/commonjs/icons/ArrowLeft.js +27 -0
  78. package/lib/commonjs/icons/ArrowLeft.js.map +1 -0
  79. package/lib/commonjs/icons/ArrowUp.js +26 -0
  80. package/lib/commonjs/icons/ArrowUp.js.map +1 -0
  81. package/lib/commonjs/icons/Audio.js +24 -24
  82. package/lib/commonjs/icons/Audio.js.map +1 -1
  83. package/lib/commonjs/icons/CircleStop.js +27 -0
  84. package/lib/commonjs/icons/CircleStop.js.map +1 -0
  85. package/lib/commonjs/icons/Delete.js +17 -6
  86. package/lib/commonjs/icons/Delete.js.map +1 -1
  87. package/lib/commonjs/icons/Lock.js +30 -0
  88. package/lib/commonjs/icons/Lock.js.map +1 -0
  89. package/lib/commonjs/icons/Mic.js +30 -0
  90. package/lib/commonjs/icons/Mic.js.map +1 -0
  91. package/lib/commonjs/icons/Pause.js +15 -20
  92. package/lib/commonjs/icons/Pause.js.map +1 -1
  93. package/lib/commonjs/icons/Play.js +18 -10
  94. package/lib/commonjs/icons/Play.js.map +1 -1
  95. package/lib/commonjs/icons/SendCheck.js +30 -0
  96. package/lib/commonjs/icons/SendCheck.js.map +1 -0
  97. package/lib/commonjs/icons/SendRight.js +24 -6
  98. package/lib/commonjs/icons/SendRight.js.map +1 -1
  99. package/lib/commonjs/icons/SendUp.js +24 -6
  100. package/lib/commonjs/icons/SendUp.js.map +1 -1
  101. package/lib/commonjs/icons/Stop.js +19 -0
  102. package/lib/commonjs/icons/Stop.js.map +1 -0
  103. package/lib/commonjs/icons/index.js +77 -0
  104. package/lib/commonjs/icons/index.js.map +1 -1
  105. package/lib/commonjs/native.js +10 -1
  106. package/lib/commonjs/native.js.map +1 -1
  107. package/lib/commonjs/utils/getTrimmedAttachmentTitle.js +11 -0
  108. package/lib/commonjs/utils/getTrimmedAttachmentTitle.js.map +1 -0
  109. package/lib/commonjs/version.json +1 -1
  110. package/lib/module/components/Attachment/Attachment.js +2 -2
  111. package/lib/module/components/Attachment/Attachment.js.map +1 -1
  112. package/lib/module/components/Attachment/AudioAttachment.js +247 -115
  113. package/lib/module/components/Attachment/AudioAttachment.js.map +1 -1
  114. package/lib/module/components/Attachment/FileAttachmentGroup.js +30 -50
  115. package/lib/module/components/Attachment/FileAttachmentGroup.js.map +1 -1
  116. package/lib/module/components/Attachment/VideoThumbnail.js +3 -3
  117. package/lib/module/components/Attachment/VideoThumbnail.js.map +1 -1
  118. package/lib/module/components/Channel/Channel.js +43 -1
  119. package/lib/module/components/Channel/Channel.js.map +1 -1
  120. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +24 -0
  121. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  122. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js +6 -6
  123. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  124. package/lib/module/components/Message/Message.js +1 -1
  125. package/lib/module/components/Message/Message.js.map +1 -1
  126. package/lib/module/components/Message/MessageSimple/MessageContent.js +1 -1
  127. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  128. package/lib/module/components/Message/MessageSimple/MessageSimple.js +1 -1
  129. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  130. package/lib/module/components/Message/hooks/useMessageActions.js +4 -2
  131. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
  132. package/lib/module/components/MessageInput/FileUploadPreview.js +55 -74
  133. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  134. package/lib/module/components/MessageInput/InputButtons.js +1 -1
  135. package/lib/module/components/MessageInput/InputButtons.js.map +1 -1
  136. package/lib/module/components/MessageInput/MessageInput.js +250 -43
  137. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  138. package/lib/module/components/MessageInput/SendButton.js +9 -7
  139. package/lib/module/components/MessageInput/SendButton.js.map +1 -1
  140. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecorder.js +221 -0
  141. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecorder.js.map +1 -0
  142. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +121 -0
  143. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -0
  144. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.js +68 -0
  145. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.js.map +1 -0
  146. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +75 -0
  147. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -0
  148. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.js +87 -0
  149. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.js.map +1 -0
  150. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.js +47 -0
  151. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.js.map +1 -0
  152. package/lib/module/components/MessageInput/hooks/useAudioController.js +452 -0
  153. package/lib/module/components/MessageInput/hooks/useAudioController.js.map +1 -0
  154. package/lib/module/components/MessageInput/utils/audioSampling.js +91 -0
  155. package/lib/module/components/MessageInput/utils/audioSampling.js.map +1 -0
  156. package/lib/module/components/MessageInput/utils/normalizeAudioLevel.js +18 -0
  157. package/lib/module/components/MessageInput/utils/normalizeAudioLevel.js.map +1 -0
  158. package/lib/module/components/ProgressControl/ProgressControl.js +57 -40
  159. package/lib/module/components/ProgressControl/ProgressControl.js.map +1 -1
  160. package/lib/module/components/ProgressControl/WaveProgressBar.js +162 -0
  161. package/lib/module/components/ProgressControl/WaveProgressBar.js.map +1 -0
  162. package/lib/module/components/Reply/Reply.js +45 -20
  163. package/lib/module/components/Reply/Reply.js.map +1 -1
  164. package/lib/module/components/index.js +66 -0
  165. package/lib/module/components/index.js.map +1 -1
  166. package/lib/module/contexts/messageInputContext/MessageInputContext.js +23 -12
  167. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  168. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +24 -0
  169. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  170. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +76 -28
  171. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  172. package/lib/module/contexts/themeContext/utils/theme.js +62 -7
  173. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  174. package/lib/module/i18n/en.json +2 -0
  175. package/lib/module/i18n/es.json +11 -9
  176. package/lib/module/i18n/fr.json +11 -9
  177. package/lib/module/i18n/he.json +11 -9
  178. package/lib/module/i18n/hi.json +11 -9
  179. package/lib/module/i18n/it.json +11 -9
  180. package/lib/module/i18n/ja.json +11 -9
  181. package/lib/module/i18n/ko.json +11 -9
  182. package/lib/module/i18n/nl.json +11 -9
  183. package/lib/module/i18n/pt-BR.json +11 -9
  184. package/lib/module/i18n/ru.json +11 -9
  185. package/lib/module/i18n/tr.json +11 -9
  186. package/lib/module/icons/ArrowLeft.js +27 -0
  187. package/lib/module/icons/ArrowLeft.js.map +1 -0
  188. package/lib/module/icons/ArrowUp.js +26 -0
  189. package/lib/module/icons/ArrowUp.js.map +1 -0
  190. package/lib/module/icons/Audio.js +24 -24
  191. package/lib/module/icons/Audio.js.map +1 -1
  192. package/lib/module/icons/CircleStop.js +27 -0
  193. package/lib/module/icons/CircleStop.js.map +1 -0
  194. package/lib/module/icons/Delete.js +17 -6
  195. package/lib/module/icons/Delete.js.map +1 -1
  196. package/lib/module/icons/Lock.js +30 -0
  197. package/lib/module/icons/Lock.js.map +1 -0
  198. package/lib/module/icons/Mic.js +30 -0
  199. package/lib/module/icons/Mic.js.map +1 -0
  200. package/lib/module/icons/Pause.js +15 -20
  201. package/lib/module/icons/Pause.js.map +1 -1
  202. package/lib/module/icons/Play.js +18 -10
  203. package/lib/module/icons/Play.js.map +1 -1
  204. package/lib/module/icons/SendCheck.js +30 -0
  205. package/lib/module/icons/SendCheck.js.map +1 -0
  206. package/lib/module/icons/SendRight.js +24 -6
  207. package/lib/module/icons/SendRight.js.map +1 -1
  208. package/lib/module/icons/SendUp.js +24 -6
  209. package/lib/module/icons/SendUp.js.map +1 -1
  210. package/lib/module/icons/Stop.js +19 -0
  211. package/lib/module/icons/Stop.js.map +1 -0
  212. package/lib/module/icons/index.js +77 -0
  213. package/lib/module/icons/index.js.map +1 -1
  214. package/lib/module/native.js +10 -1
  215. package/lib/module/native.js.map +1 -1
  216. package/lib/module/utils/getTrimmedAttachmentTitle.js +11 -0
  217. package/lib/module/utils/getTrimmedAttachmentTitle.js.map +1 -0
  218. package/lib/module/version.json +1 -1
  219. package/lib/typescript/components/Attachment/Attachment.d.ts.map +1 -1
  220. package/lib/typescript/components/Attachment/AudioAttachment.d.ts +3 -8
  221. package/lib/typescript/components/Attachment/AudioAttachment.d.ts.map +1 -1
  222. package/lib/typescript/components/Attachment/FileAttachmentGroup.d.ts.map +1 -1
  223. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  224. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +15 -3
  225. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts.map +1 -1
  226. package/lib/typescript/components/ImageGallery/components/ImageGalleryVideoControl.d.ts.map +1 -1
  227. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
  228. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
  229. package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts +1 -1
  230. package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts.map +1 -1
  231. package/lib/typescript/components/MessageInput/InputButtons.d.ts.map +1 -1
  232. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  233. package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
  234. package/lib/typescript/components/MessageInput/SendButton.d.ts.map +1 -1
  235. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecorder.d.ts +51 -0
  236. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecorder.d.ts.map +1 -0
  237. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingButton.d.ts +43 -0
  238. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingButton.d.ts.map +1 -0
  239. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.d.ts +29 -0
  240. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.d.ts.map +1 -0
  241. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.d.ts +22 -0
  242. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.d.ts.map +1 -0
  243. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.d.ts +31 -0
  244. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.d.ts.map +1 -0
  245. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.d.ts +19 -0
  246. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.d.ts.map +1 -0
  247. package/lib/typescript/components/MessageInput/hooks/useAudioController.d.ts +28 -0
  248. package/lib/typescript/components/MessageInput/hooks/useAudioController.d.ts.map +1 -0
  249. package/lib/typescript/components/MessageInput/utils/audioSampling.d.ts +11 -0
  250. package/lib/typescript/components/MessageInput/utils/audioSampling.d.ts.map +1 -0
  251. package/lib/typescript/components/MessageInput/utils/normalizeAudioLevel.d.ts +5 -0
  252. package/lib/typescript/components/MessageInput/utils/normalizeAudioLevel.d.ts.map +1 -0
  253. package/lib/typescript/components/ProgressControl/ProgressControl.d.ts +2 -2
  254. package/lib/typescript/components/ProgressControl/ProgressControl.d.ts.map +1 -1
  255. package/lib/typescript/components/ProgressControl/WaveProgressBar.d.ts +11 -0
  256. package/lib/typescript/components/ProgressControl/WaveProgressBar.d.ts.map +1 -0
  257. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  258. package/lib/typescript/components/index.d.ts +6 -0
  259. package/lib/typescript/components/index.d.ts.map +1 -1
  260. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +70 -4
  261. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
  262. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  263. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  264. package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts.map +1 -1
  265. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +62 -7
  266. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  267. package/lib/typescript/i18n/en.json +2 -0
  268. package/lib/typescript/i18n/es.json +11 -9
  269. package/lib/typescript/i18n/fr.json +11 -9
  270. package/lib/typescript/i18n/he.json +11 -9
  271. package/lib/typescript/i18n/hi.json +11 -9
  272. package/lib/typescript/i18n/it.json +11 -9
  273. package/lib/typescript/i18n/ja.json +11 -9
  274. package/lib/typescript/i18n/ko.json +11 -9
  275. package/lib/typescript/i18n/nl.json +11 -9
  276. package/lib/typescript/i18n/pt-BR.json +11 -9
  277. package/lib/typescript/i18n/ru.json +11 -9
  278. package/lib/typescript/i18n/tr.json +11 -9
  279. package/lib/typescript/icons/ArrowLeft.d.ts +8 -0
  280. package/lib/typescript/icons/ArrowLeft.d.ts.map +1 -0
  281. package/lib/typescript/icons/ArrowUp.d.ts +9 -0
  282. package/lib/typescript/icons/ArrowUp.d.ts.map +1 -0
  283. package/lib/typescript/icons/Audio.d.ts.map +1 -1
  284. package/lib/typescript/icons/CircleStop.d.ts +8 -0
  285. package/lib/typescript/icons/CircleStop.d.ts.map +1 -0
  286. package/lib/typescript/icons/Delete.d.ts +5 -1
  287. package/lib/typescript/icons/Delete.d.ts.map +1 -1
  288. package/lib/typescript/icons/Lock.d.ts +9 -0
  289. package/lib/typescript/icons/Lock.d.ts.map +1 -0
  290. package/lib/typescript/icons/Mic.d.ts +8 -0
  291. package/lib/typescript/icons/Mic.d.ts.map +1 -0
  292. package/lib/typescript/icons/Pause.d.ts +3 -1
  293. package/lib/typescript/icons/Pause.d.ts.map +1 -1
  294. package/lib/typescript/icons/Play.d.ts +3 -1
  295. package/lib/typescript/icons/Play.d.ts.map +1 -1
  296. package/lib/typescript/icons/SendCheck.d.ts +8 -0
  297. package/lib/typescript/icons/SendCheck.d.ts.map +1 -0
  298. package/lib/typescript/icons/SendRight.d.ts +5 -1
  299. package/lib/typescript/icons/SendRight.d.ts.map +1 -1
  300. package/lib/typescript/icons/SendUp.d.ts +5 -1
  301. package/lib/typescript/icons/SendUp.d.ts.map +1 -1
  302. package/lib/typescript/icons/Stop.d.ts +4 -0
  303. package/lib/typescript/icons/Stop.d.ts.map +1 -0
  304. package/lib/typescript/icons/index.d.ts +7 -0
  305. package/lib/typescript/icons/index.d.ts.map +1 -1
  306. package/lib/typescript/native.d.ts +49 -0
  307. package/lib/typescript/native.d.ts.map +1 -1
  308. package/lib/typescript/types/types.d.ts +6 -0
  309. package/lib/typescript/types/types.d.ts.map +1 -1
  310. package/lib/typescript/utils/Streami18n.d.ts +2 -0
  311. package/lib/typescript/utils/Streami18n.d.ts.map +1 -1
  312. package/lib/typescript/utils/getTrimmedAttachmentTitle.d.ts +2 -0
  313. package/lib/typescript/utils/getTrimmedAttachmentTitle.d.ts.map +1 -0
  314. package/package.json +1 -1
  315. package/src/components/Attachment/Attachment.tsx +7 -2
  316. package/src/components/Attachment/AudioAttachment.tsx +223 -119
  317. package/src/components/Attachment/FileAttachmentGroup.tsx +35 -55
  318. package/src/components/Attachment/VideoThumbnail.tsx +1 -1
  319. package/src/components/Channel/Channel.tsx +32 -0
  320. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +24 -0
  321. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +1 -1
  322. package/src/components/ImageGallery/__tests__/ImageGalleryVideoControl.test.tsx +2 -2
  323. package/src/components/ImageGallery/components/ImageGalleryVideoControl.tsx +2 -7
  324. package/src/components/Message/Message.tsx +1 -1
  325. package/src/components/Message/MessageSimple/MessageContent.tsx +2 -1
  326. package/src/components/Message/MessageSimple/MessageSimple.tsx +2 -1
  327. package/src/components/Message/hooks/useMessageActions.tsx +2 -2
  328. package/src/components/MessageInput/FileUploadPreview.tsx +67 -98
  329. package/src/components/MessageInput/InputButtons.tsx +2 -1
  330. package/src/components/MessageInput/MessageInput.tsx +320 -49
  331. package/src/components/MessageInput/SendButton.tsx +7 -3
  332. package/src/components/MessageInput/__tests__/MessageInput.test.js +0 -1
  333. package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.js.snap +132 -48
  334. package/src/components/MessageInput/components/AudioRecorder/AudioRecorder.tsx +313 -0
  335. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingButton.tsx +192 -0
  336. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingInProgress.tsx +114 -0
  337. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.tsx +85 -0
  338. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingPreview.tsx +102 -0
  339. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingWaveform.tsx +62 -0
  340. package/src/components/MessageInput/hooks/useAudioController.tsx +288 -0
  341. package/src/components/MessageInput/utils/audioSampling.ts +108 -0
  342. package/src/components/MessageInput/utils/normalizeAudioLevel.ts +20 -0
  343. package/src/components/ProgressControl/ProgressControl.tsx +69 -40
  344. package/src/components/ProgressControl/WaveProgressBar.tsx +180 -0
  345. package/src/components/Reply/Reply.tsx +89 -56
  346. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +38 -20
  347. package/src/components/index.ts +6 -0
  348. package/src/contexts/messageInputContext/MessageInputContext.tsx +95 -10
  349. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +25 -0
  350. package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +80 -27
  351. package/src/contexts/themeContext/utils/theme.ts +111 -14
  352. package/src/i18n/en.json +2 -0
  353. package/src/i18n/es.json +11 -9
  354. package/src/i18n/fr.json +11 -9
  355. package/src/i18n/he.json +11 -9
  356. package/src/i18n/hi.json +11 -9
  357. package/src/i18n/it.json +11 -9
  358. package/src/i18n/ja.json +11 -9
  359. package/src/i18n/ko.json +11 -9
  360. package/src/i18n/nl.json +11 -9
  361. package/src/i18n/pt-BR.json +11 -9
  362. package/src/i18n/ru.json +11 -9
  363. package/src/i18n/tr.json +11 -9
  364. package/src/icons/ArrowLeft.tsx +18 -0
  365. package/src/icons/ArrowUp.tsx +19 -0
  366. package/src/icons/Audio.tsx +24 -24
  367. package/src/icons/CircleStop.tsx +18 -0
  368. package/src/icons/Delete.tsx +14 -8
  369. package/src/icons/Lock.tsx +22 -0
  370. package/src/icons/Mic.tsx +20 -0
  371. package/src/icons/Pause.tsx +12 -11
  372. package/src/icons/Play.tsx +9 -13
  373. package/src/icons/SendCheck.tsx +18 -0
  374. package/src/icons/SendRight.tsx +16 -7
  375. package/src/icons/SendUp.tsx +16 -7
  376. package/src/icons/Stop.tsx +12 -0
  377. package/src/icons/index.ts +7 -0
  378. package/src/native.ts +69 -0
  379. package/src/types/types.ts +6 -0
  380. package/src/utils/getTrimmedAttachmentTitle.ts +5 -0
  381. package/src/version.json +1 -1
@@ -40,14 +40,14 @@ exports[`SendButton should render a non-editing disabled SendButton 1`] = `
40
40
  >
41
41
  <RNSVGSvgView
42
42
  align="xMidYMid"
43
- bbHeight={24}
44
- bbWidth={24}
43
+ bbHeight={32}
44
+ bbWidth={32}
45
+ fill="#DBDBDB"
45
46
  focusable={false}
46
- height={24}
47
+ height={32}
47
48
  meetOrSlice={0}
48
49
  minX={0}
49
50
  minY={0}
50
- pathFill="#DBDBDB"
51
51
  style={
52
52
  [
53
53
  {
@@ -56,29 +56,50 @@ exports[`SendButton should render a non-editing disabled SendButton 1`] = `
56
56
  },
57
57
  {
58
58
  "flex": 0,
59
- "height": 24,
60
- "width": 24,
59
+ "height": 32,
60
+ "width": 32,
61
61
  },
62
62
  ]
63
63
  }
64
- vbHeight={24}
65
- vbWidth={24}
66
- width={24}
64
+ vbHeight={32}
65
+ vbWidth={32}
66
+ width={32}
67
67
  >
68
68
  <RNSVGGroup
69
69
  fill={
70
70
  {
71
- "payload": 4278190080,
71
+ "payload": 4292598747,
72
72
  "type": 0,
73
73
  }
74
74
  }
75
+ propList={
76
+ [
77
+ "fill",
78
+ ]
79
+ }
75
80
  >
81
+ <RNSVGCircle
82
+ cx={16}
83
+ cy={16}
84
+ fill={
85
+ {
86
+ "payload": 4292598747,
87
+ "type": 0,
88
+ }
89
+ }
90
+ propList={
91
+ [
92
+ "fill",
93
+ ]
94
+ }
95
+ r={16}
96
+ />
76
97
  <RNSVGPath
77
98
  clipRule={0}
78
- d="M22 12c0-5.52-4.48-10-10-10S2 6.48 2 12s4.48 10 10 10 10-4.48 10-10zM8 11h4V8l4 4-4 4v-3H8v-2z"
99
+ d="M9.33398 14.6666H16.0007V9.33325L22.6673 15.9999L16.0007 22.6666V17.3333H9.33398V14.6666Z"
79
100
  fill={
80
101
  {
81
- "payload": 4292598747,
102
+ "payload": 4294967295,
82
103
  "type": 0,
83
104
  }
84
105
  }
@@ -135,14 +156,14 @@ exports[`SendButton should render a non-editing enabled SendButton 1`] = `
135
156
  >
136
157
  <RNSVGSvgView
137
158
  align="xMidYMid"
138
- bbHeight={24}
139
- bbWidth={24}
159
+ bbHeight={32}
160
+ bbWidth={32}
161
+ fill="#005FFF"
140
162
  focusable={false}
141
- height={24}
163
+ height={32}
142
164
  meetOrSlice={0}
143
165
  minX={0}
144
166
  minY={0}
145
- pathFill="#005FFF"
146
167
  style={
147
168
  [
148
169
  {
@@ -151,29 +172,50 @@ exports[`SendButton should render a non-editing enabled SendButton 1`] = `
151
172
  },
152
173
  {
153
174
  "flex": 0,
154
- "height": 24,
155
- "width": 24,
175
+ "height": 32,
176
+ "width": 32,
156
177
  },
157
178
  ]
158
179
  }
159
- vbHeight={24}
160
- vbWidth={24}
161
- width={24}
180
+ vbHeight={32}
181
+ vbWidth={32}
182
+ width={32}
162
183
  >
163
184
  <RNSVGGroup
164
185
  fill={
165
186
  {
166
- "payload": 4278190080,
187
+ "payload": 4278214655,
167
188
  "type": 0,
168
189
  }
169
190
  }
191
+ propList={
192
+ [
193
+ "fill",
194
+ ]
195
+ }
170
196
  >
197
+ <RNSVGCircle
198
+ cx={16}
199
+ cy={16}
200
+ fill={
201
+ {
202
+ "payload": 4278214655,
203
+ "type": 0,
204
+ }
205
+ }
206
+ propList={
207
+ [
208
+ "fill",
209
+ ]
210
+ }
211
+ r={16}
212
+ />
171
213
  <RNSVGPath
172
214
  clipRule={0}
173
- d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14v-4H8l4-4 4 4h-3v4h-2z"
215
+ d="M14.6673 16V22.6667H17.334V16H22.6673L16.0007 9.33337L9.33398 16H14.6673Z"
174
216
  fill={
175
217
  {
176
- "payload": 4278214655,
218
+ "payload": 4294967295,
177
219
  "type": 0,
178
220
  }
179
221
  }
@@ -230,14 +272,14 @@ exports[`SendButton should render an editing disabled SendButton 1`] = `
230
272
  >
231
273
  <RNSVGSvgView
232
274
  align="xMidYMid"
233
- bbHeight={24}
234
- bbWidth={24}
275
+ bbHeight={32}
276
+ bbWidth={32}
277
+ fill="#DBDBDB"
235
278
  focusable={false}
236
- height={24}
279
+ height={32}
237
280
  meetOrSlice={0}
238
281
  minX={0}
239
282
  minY={0}
240
- pathFill="#DBDBDB"
241
283
  style={
242
284
  [
243
285
  {
@@ -246,29 +288,50 @@ exports[`SendButton should render an editing disabled SendButton 1`] = `
246
288
  },
247
289
  {
248
290
  "flex": 0,
249
- "height": 24,
250
- "width": 24,
291
+ "height": 32,
292
+ "width": 32,
251
293
  },
252
294
  ]
253
295
  }
254
- vbHeight={24}
255
- vbWidth={24}
256
- width={24}
296
+ vbHeight={32}
297
+ vbWidth={32}
298
+ width={32}
257
299
  >
258
300
  <RNSVGGroup
259
301
  fill={
260
302
  {
261
- "payload": 4278190080,
303
+ "payload": 4292598747,
262
304
  "type": 0,
263
305
  }
264
306
  }
307
+ propList={
308
+ [
309
+ "fill",
310
+ ]
311
+ }
265
312
  >
313
+ <RNSVGCircle
314
+ cx={16}
315
+ cy={16}
316
+ fill={
317
+ {
318
+ "payload": 4292598747,
319
+ "type": 0,
320
+ }
321
+ }
322
+ propList={
323
+ [
324
+ "fill",
325
+ ]
326
+ }
327
+ r={16}
328
+ />
266
329
  <RNSVGPath
267
330
  clipRule={0}
268
- d="M22 12c0-5.52-4.48-10-10-10S2 6.48 2 12s4.48 10 10 10 10-4.48 10-10zM8 11h4V8l4 4-4 4v-3H8v-2z"
331
+ d="M9.33398 14.6666H16.0007V9.33325L22.6673 15.9999L16.0007 22.6666V17.3333H9.33398V14.6666Z"
269
332
  fill={
270
333
  {
271
- "payload": 4292598747,
334
+ "payload": 4294967295,
272
335
  "type": 0,
273
336
  }
274
337
  }
@@ -325,14 +388,14 @@ exports[`SendButton should render an editing enabled SendButton 1`] = `
325
388
  >
326
389
  <RNSVGSvgView
327
390
  align="xMidYMid"
328
- bbHeight={24}
329
- bbWidth={24}
391
+ bbHeight={32}
392
+ bbWidth={32}
393
+ fill="#005FFF"
330
394
  focusable={false}
331
- height={24}
395
+ height={32}
332
396
  meetOrSlice={0}
333
397
  minX={0}
334
398
  minY={0}
335
- pathFill="#005FFF"
336
399
  style={
337
400
  [
338
401
  {
@@ -341,29 +404,50 @@ exports[`SendButton should render an editing enabled SendButton 1`] = `
341
404
  },
342
405
  {
343
406
  "flex": 0,
344
- "height": 24,
345
- "width": 24,
407
+ "height": 32,
408
+ "width": 32,
346
409
  },
347
410
  ]
348
411
  }
349
- vbHeight={24}
350
- vbWidth={24}
351
- width={24}
412
+ vbHeight={32}
413
+ vbWidth={32}
414
+ width={32}
352
415
  >
353
416
  <RNSVGGroup
354
417
  fill={
355
418
  {
356
- "payload": 4278190080,
419
+ "payload": 4278214655,
357
420
  "type": 0,
358
421
  }
359
422
  }
423
+ propList={
424
+ [
425
+ "fill",
426
+ ]
427
+ }
360
428
  >
429
+ <RNSVGCircle
430
+ cx={16}
431
+ cy={16}
432
+ fill={
433
+ {
434
+ "payload": 4278214655,
435
+ "type": 0,
436
+ }
437
+ }
438
+ propList={
439
+ [
440
+ "fill",
441
+ ]
442
+ }
443
+ r={16}
444
+ />
361
445
  <RNSVGPath
362
446
  clipRule={0}
363
- d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14v-4H8l4-4 4 4h-3v4h-2z"
447
+ d="M14.6673 16V22.6667H17.334V16H22.6673L16.0007 9.33337L9.33398 16H14.6673Z"
364
448
  fill={
365
449
  {
366
- "payload": 4278214655,
450
+ "payload": 4294967295,
367
451
  "type": 0,
368
452
  }
369
453
  }
@@ -0,0 +1,313 @@
1
+ import React from 'react';
2
+ import { Pressable, StyleProp, StyleSheet, Text, View, ViewStyle } from 'react-native';
3
+
4
+ import Animated from 'react-native-reanimated';
5
+
6
+ import dayjs from 'dayjs';
7
+
8
+ import {
9
+ ChannelContextValue,
10
+ useChannelContext,
11
+ } from '../../../../contexts/channelContext/ChannelContext';
12
+ import {
13
+ MessageInputContextValue,
14
+ useMessageInputContext,
15
+ } from '../../../../contexts/messageInputContext/MessageInputContext';
16
+ import { useTheme } from '../../../../contexts/themeContext/ThemeContext';
17
+ import { ArrowLeft, CircleStop, Delete, Mic, SendCheck } from '../../../../icons';
18
+
19
+ import { AudioRecordingReturnType } from '../../../../native';
20
+ import type { DefaultStreamChatGenerics } from '../../../../types/types';
21
+
22
+ type AudioRecorderPropsWithContext<
23
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
24
+ > = Pick<ChannelContextValue<StreamChatGenerics>, 'disabled'> &
25
+ Pick<MessageInputContextValue<StreamChatGenerics>, 'asyncMessagesMultiSendEnabled'> & {
26
+ /**
27
+ * Function to stop and delete the voice recording.
28
+ */
29
+ deleteVoiceRecording: () => Promise<void>;
30
+ /**
31
+ * Boolean used to show if the voice recording state is locked. This makes sure the mic button shouldn't be pressed any longer.
32
+ * When the mic is locked the `AudioRecordingInProgress` component shows up.
33
+ */
34
+ micLocked: boolean;
35
+ /**
36
+ * The current voice recording that is in progress.
37
+ */
38
+ recording: AudioRecordingReturnType;
39
+ /**
40
+ * Boolean to determine if the recording has been stopped.
41
+ */
42
+ recordingStopped: boolean;
43
+ /**
44
+ * Function to stop the ongoing voice recording.
45
+ */
46
+ stopVoiceRecording: () => Promise<void>;
47
+ /**
48
+ * Function to upload the voice recording.
49
+ */
50
+ uploadVoiceRecording: (multiSendEnabled: boolean) => Promise<void>;
51
+ /**
52
+ * The duration of the voice recording.
53
+ */
54
+ recordingDuration?: number;
55
+ /**
56
+ * Style used in slide to cancel container.
57
+ */
58
+ slideToCancelStyle?: StyleProp<ViewStyle>;
59
+ };
60
+
61
+ const StopRecording = ({
62
+ stopVoiceRecordingHandler,
63
+ }: {
64
+ stopVoiceRecordingHandler: () => Promise<void>;
65
+ }) => {
66
+ const {
67
+ theme: {
68
+ colors: { accent_red },
69
+ messageInput: {
70
+ audioRecorder: { circleStopIcon, pausedContainer },
71
+ },
72
+ },
73
+ } = useTheme();
74
+ return (
75
+ <Pressable
76
+ onPress={stopVoiceRecordingHandler}
77
+ style={[styles.pausedContainer, pausedContainer]}
78
+ >
79
+ <CircleStop fill={accent_red} size={32} {...circleStopIcon} />
80
+ </Pressable>
81
+ );
82
+ };
83
+
84
+ const UploadRecording = ({
85
+ asyncMessagesMultiSendEnabled,
86
+ uploadVoiceRecordingHandler,
87
+ }: {
88
+ asyncMessagesMultiSendEnabled: boolean;
89
+ uploadVoiceRecordingHandler: (multiSendEnabled: boolean) => Promise<void>;
90
+ }) => {
91
+ const {
92
+ theme: {
93
+ colors: { accent_blue },
94
+ messageInput: {
95
+ audioRecorder: { checkContainer, sendCheckIcon },
96
+ },
97
+ },
98
+ } = useTheme();
99
+ return (
100
+ <Pressable
101
+ onPress={async () => {
102
+ await uploadVoiceRecordingHandler(asyncMessagesMultiSendEnabled);
103
+ }}
104
+ style={[styles.checkContainer, checkContainer]}
105
+ >
106
+ <SendCheck fill={accent_blue} size={32} {...sendCheckIcon} />
107
+ </Pressable>
108
+ );
109
+ };
110
+
111
+ const DeleteRecording = ({
112
+ deleteVoiceRecordingHandler,
113
+ disabled,
114
+ }: {
115
+ deleteVoiceRecordingHandler: () => Promise<void>;
116
+ disabled?: boolean;
117
+ }) => {
118
+ const {
119
+ theme: {
120
+ colors: { accent_blue },
121
+ messageInput: {
122
+ audioRecorder: { deleteContainer, deleteIcon },
123
+ },
124
+ },
125
+ } = useTheme();
126
+ return (
127
+ <Pressable
128
+ disabled={disabled}
129
+ onPress={deleteVoiceRecordingHandler}
130
+ style={[styles.deleteContainer, deleteContainer]}
131
+ testID='delete-button'
132
+ >
133
+ <Delete fill={accent_blue} size={32} {...deleteIcon} />
134
+ </Pressable>
135
+ );
136
+ };
137
+
138
+ const AudioRecorderWithContext = <
139
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
140
+ >(
141
+ props: AudioRecorderPropsWithContext<StreamChatGenerics>,
142
+ ) => {
143
+ const {
144
+ asyncMessagesMultiSendEnabled,
145
+ deleteVoiceRecording,
146
+ disabled,
147
+ micLocked,
148
+ recordingDuration,
149
+ recordingStopped,
150
+ slideToCancelStyle,
151
+ stopVoiceRecording,
152
+ uploadVoiceRecording,
153
+ } = props;
154
+
155
+ const {
156
+ theme: {
157
+ colors: { accent_red, grey_dark },
158
+ messageInput: {
159
+ audioRecorder: { arrowLeftIcon, micContainer, micIcon, slideToCancelContainer },
160
+ },
161
+ },
162
+ } = useTheme();
163
+
164
+ if (micLocked) {
165
+ if (recordingStopped) {
166
+ return (
167
+ <>
168
+ <DeleteRecording deleteVoiceRecordingHandler={deleteVoiceRecording} disabled={disabled} />
169
+ <UploadRecording
170
+ asyncMessagesMultiSendEnabled={asyncMessagesMultiSendEnabled}
171
+ uploadVoiceRecordingHandler={uploadVoiceRecording}
172
+ />
173
+ </>
174
+ );
175
+ } else {
176
+ return (
177
+ <>
178
+ <View style={[styles.micContainer, micContainer]}>
179
+ <Mic fill={recordingDuration !== 0 ? accent_red : grey_dark} size={32} {...micIcon} />
180
+ </View>
181
+ <StopRecording stopVoiceRecordingHandler={stopVoiceRecording} />
182
+ <UploadRecording
183
+ asyncMessagesMultiSendEnabled={asyncMessagesMultiSendEnabled}
184
+ uploadVoiceRecordingHandler={uploadVoiceRecording}
185
+ />
186
+ </>
187
+ );
188
+ }
189
+ } else {
190
+ return (
191
+ <>
192
+ <View style={[styles.micContainer, micContainer]}>
193
+ <Mic fill={recordingDuration !== 0 ? accent_red : grey_dark} size={32} {...micIcon} />
194
+ <Text style={[styles.durationLabel, { color: grey_dark }]}>
195
+ {recordingDuration ? dayjs.duration(recordingDuration).format('mm:ss') : null}
196
+ </Text>
197
+ </View>
198
+ <Animated.View
199
+ style={[styles.slideToCancelContainer, slideToCancelStyle, slideToCancelContainer]}
200
+ >
201
+ <Text style={[styles.slideToCancel, { color: grey_dark }]}>Slide to Cancel</Text>
202
+ <ArrowLeft fill={grey_dark} size={24} {...arrowLeftIcon} />
203
+ </Animated.View>
204
+ </>
205
+ );
206
+ }
207
+ };
208
+
209
+ const areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(
210
+ prevProps: AudioRecorderPropsWithContext<StreamChatGenerics>,
211
+ nextProps: AudioRecorderPropsWithContext<StreamChatGenerics>,
212
+ ) => {
213
+ const {
214
+ asyncMessagesMultiSendEnabled: prevAsyncMessagesMultiSendEnabled,
215
+ disabled: prevDisabled,
216
+ micLocked: prevMicLocked,
217
+ recording: prevRecording,
218
+ recordingDuration: prevRecordingDuration,
219
+ recordingStopped: prevRecordingStopped,
220
+ } = prevProps;
221
+ const {
222
+ asyncMessagesMultiSendEnabled: nextAsyncMessagesMultiSendEnabled,
223
+ disabled: nextDisabled,
224
+ micLocked: nextMicLocked,
225
+ recording: nextRecording,
226
+ recordingDuration: nextRecordingDuration,
227
+ recordingStopped: nextRecordingStopped,
228
+ } = nextProps;
229
+
230
+ const asyncMessagesMultiSendEnabledEqual =
231
+ prevAsyncMessagesMultiSendEnabled === nextAsyncMessagesMultiSendEnabled;
232
+ if (!asyncMessagesMultiSendEnabledEqual) return false;
233
+
234
+ const disabledEqual = prevDisabled === nextDisabled;
235
+ if (!disabledEqual) return false;
236
+
237
+ const micLockedEqual = prevMicLocked === nextMicLocked;
238
+ if (!micLockedEqual) return false;
239
+
240
+ const recordingEqual = prevRecording === nextRecording;
241
+ if (!recordingEqual) return false;
242
+
243
+ const recordingDurationEqual = prevRecordingDuration === nextRecordingDuration;
244
+ if (!recordingDurationEqual) return false;
245
+
246
+ const recordingStoppedEqual = prevRecordingStopped === nextRecordingStopped;
247
+ if (!recordingStoppedEqual) return false;
248
+
249
+ return true;
250
+ };
251
+
252
+ const MemoizedAudioRecorder = React.memo(
253
+ AudioRecorderWithContext,
254
+ areEqual,
255
+ ) as typeof AudioRecorderWithContext;
256
+
257
+ export type AudioRecorderProps<
258
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
259
+ > = Partial<AudioRecorderPropsWithContext<StreamChatGenerics>> &
260
+ Pick<
261
+ AudioRecorderPropsWithContext<StreamChatGenerics>,
262
+ | 'deleteVoiceRecording'
263
+ | 'micLocked'
264
+ | 'recording'
265
+ | 'recordingStopped'
266
+ | 'stopVoiceRecording'
267
+ | 'uploadVoiceRecording'
268
+ >;
269
+
270
+ /**
271
+ * Component to display the Recording UI in the Message Input.
272
+ */
273
+ export const AudioRecorder = <
274
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
275
+ >(
276
+ props: AudioRecorderProps<StreamChatGenerics>,
277
+ ) => {
278
+ const { disabled = false } = useChannelContext<StreamChatGenerics>();
279
+ const { asyncMessagesMultiSendEnabled } = useMessageInputContext<StreamChatGenerics>();
280
+
281
+ return (
282
+ <MemoizedAudioRecorder
283
+ {...{
284
+ asyncMessagesMultiSendEnabled,
285
+ disabled,
286
+ }}
287
+ {...props}
288
+ />
289
+ );
290
+ };
291
+
292
+ const styles = StyleSheet.create({
293
+ checkContainer: {},
294
+ deleteContainer: {},
295
+ durationLabel: {
296
+ fontSize: 14,
297
+ },
298
+ micContainer: {
299
+ alignItems: 'center',
300
+ flexDirection: 'row',
301
+ justifyContent: 'center',
302
+ },
303
+ pausedContainer: {},
304
+ slideToCancel: {
305
+ fontSize: 18,
306
+ },
307
+ slideToCancelContainer: {
308
+ alignItems: 'center',
309
+ flexDirection: 'row',
310
+ },
311
+ });
312
+
313
+ AudioRecorder.displayName = 'AudioRecorder{messageInput}';