stream-chat-react-native-core 9.1.3 → 9.2.0-beta.2

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 (466) hide show
  1. package/lib/commonjs/a11y/a11yUtils.js +40 -0
  2. package/lib/commonjs/a11y/a11yUtils.js.map +1 -0
  3. package/lib/commonjs/a11y/hooks/useA11yLabel.js +16 -0
  4. package/lib/commonjs/a11y/hooks/useA11yLabel.js.map +1 -0
  5. package/lib/commonjs/a11y/hooks/useAccessibilityActivateAction.js +25 -0
  6. package/lib/commonjs/a11y/hooks/useAccessibilityActivateAction.js.map +1 -0
  7. package/lib/commonjs/a11y/hooks/useAnnounceOnStateChange.js +36 -0
  8. package/lib/commonjs/a11y/hooks/useAnnounceOnStateChange.js.map +1 -0
  9. package/lib/commonjs/a11y/hooks/useReducedMotionPreference.js +34 -0
  10. package/lib/commonjs/a11y/hooks/useReducedMotionPreference.js.map +1 -0
  11. package/lib/commonjs/a11y/hooks/useResolvedModalAccessibilityProps.js +20 -0
  12. package/lib/commonjs/a11y/hooks/useResolvedModalAccessibilityProps.js.map +1 -0
  13. package/lib/commonjs/a11y/hooks/useScreenReaderEnabled.js +37 -0
  14. package/lib/commonjs/a11y/hooks/useScreenReaderEnabled.js.map +1 -0
  15. package/lib/commonjs/a11y/index.js +81 -0
  16. package/lib/commonjs/a11y/index.js.map +1 -0
  17. package/lib/commonjs/components/AITypingIndicatorView/AITypingIndicatorView.js +10 -0
  18. package/lib/commonjs/components/AITypingIndicatorView/AITypingIndicatorView.js.map +1 -1
  19. package/lib/commonjs/components/Accessibility/NotificationAnnouncer.js +37 -0
  20. package/lib/commonjs/components/Accessibility/NotificationAnnouncer.js.map +1 -0
  21. package/lib/commonjs/components/Accessibility/hooks/useIncomingMessageAnnouncements.js +109 -0
  22. package/lib/commonjs/components/Accessibility/hooks/useIncomingMessageAnnouncements.js.map +1 -0
  23. package/lib/commonjs/components/Accessibility/index.js +37 -0
  24. package/lib/commonjs/components/Accessibility/index.js.map +1 -0
  25. package/lib/commonjs/components/Accessibility/useAccessibilityAnnouncer.js +15 -0
  26. package/lib/commonjs/components/Accessibility/useAccessibilityAnnouncer.js.map +1 -0
  27. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +20 -0
  28. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  29. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentMediaPicker.js +1 -0
  30. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentMediaPicker.js.map +1 -1
  31. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +19 -2
  32. package/lib/commonjs/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  33. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerContent.js +2 -1
  34. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerContent.js.map +1 -1
  35. package/lib/commonjs/components/AttachmentPicker/components/AttachmentTypePickerButton.js +9 -1
  36. package/lib/commonjs/components/AttachmentPicker/components/AttachmentTypePickerButton.js.map +1 -1
  37. package/lib/commonjs/components/Channel/Channel.js +2 -1
  38. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  39. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +4 -0
  40. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  41. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +2 -2
  42. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  43. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +1 -1
  44. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  45. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js +1 -1
  46. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  47. package/lib/commonjs/components/Indicators/LoadingDots.js +2 -0
  48. package/lib/commonjs/components/Indicators/LoadingDots.js.map +1 -1
  49. package/lib/commonjs/components/Indicators/LoadingErrorIndicator.js +3 -0
  50. package/lib/commonjs/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  51. package/lib/commonjs/components/Indicators/LoadingIndicator.js +2 -0
  52. package/lib/commonjs/components/Indicators/LoadingIndicator.js.map +1 -1
  53. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AttachmentRemoveControl.js +16 -4
  54. package/lib/commonjs/components/MessageInput/components/AttachmentPreview/AttachmentRemoveControl.js.map +1 -1
  55. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecorder.js +3 -0
  56. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecorder.js.map +1 -1
  57. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +5 -0
  58. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  59. package/lib/commonjs/components/MessageInput/components/InputButtons/AttachButton.js +12 -3
  60. package/lib/commonjs/components/MessageInput/components/InputButtons/AttachButton.js.map +1 -1
  61. package/lib/commonjs/components/MessageInput/components/OutputButtons/EditButton.js +1 -0
  62. package/lib/commonjs/components/MessageInput/components/OutputButtons/EditButton.js.map +1 -1
  63. package/lib/commonjs/components/MessageInput/components/OutputButtons/SendButton.js +1 -0
  64. package/lib/commonjs/components/MessageInput/components/OutputButtons/SendButton.js.map +1 -1
  65. package/lib/commonjs/components/MessageList/MessageFlashList.js +19 -2
  66. package/lib/commonjs/components/MessageList/MessageFlashList.js.map +1 -1
  67. package/lib/commonjs/components/MessageList/MessageList.js +32 -8
  68. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  69. package/lib/commonjs/components/MessageList/ScrollToBottomButton.js +12 -1
  70. package/lib/commonjs/components/MessageList/ScrollToBottomButton.js.map +1 -1
  71. package/lib/commonjs/components/MessageList/UnreadMessagesNotification.js +1 -0
  72. package/lib/commonjs/components/MessageList/UnreadMessagesNotification.js.map +1 -1
  73. package/lib/commonjs/components/MessageList/hooks/useScrollToBottomAccessibilityAction.js +47 -0
  74. package/lib/commonjs/components/MessageList/hooks/useScrollToBottomAccessibilityAction.js.map +1 -0
  75. package/lib/commonjs/components/MessageMenu/MessageActionList.js +4 -1
  76. package/lib/commonjs/components/MessageMenu/MessageActionList.js.map +1 -1
  77. package/lib/commonjs/components/MessageMenu/MessageActionListItem.js +12 -3
  78. package/lib/commonjs/components/MessageMenu/MessageActionListItem.js.map +1 -1
  79. package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js +2 -0
  80. package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js.map +1 -1
  81. package/lib/commonjs/components/MessageMenu/ReactionButton.js +9 -1
  82. package/lib/commonjs/components/MessageMenu/ReactionButton.js.map +1 -1
  83. package/lib/commonjs/components/Poll/components/CreatePollHeader.js +2 -0
  84. package/lib/commonjs/components/Poll/components/CreatePollHeader.js.map +1 -1
  85. package/lib/commonjs/components/Poll/components/MultipleVotesSettings.js +2 -0
  86. package/lib/commonjs/components/Poll/components/MultipleVotesSettings.js.map +1 -1
  87. package/lib/commonjs/components/Poll/components/PollModalHeader.js +1 -0
  88. package/lib/commonjs/components/Poll/components/PollModalHeader.js.map +1 -1
  89. package/lib/commonjs/components/Poll/components/PollOption.js +15 -0
  90. package/lib/commonjs/components/Poll/components/PollOption.js.map +1 -1
  91. package/lib/commonjs/components/ProgressControl/ProgressControl.js +10 -0
  92. package/lib/commonjs/components/ProgressControl/ProgressControl.js.map +1 -1
  93. package/lib/commonjs/components/Reply/Reply.js +3 -0
  94. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  95. package/lib/commonjs/components/UIComponents/BottomSheetModal.js +6 -3
  96. package/lib/commonjs/components/UIComponents/BottomSheetModal.js.map +1 -1
  97. package/lib/commonjs/components/index.js +11 -0
  98. package/lib/commonjs/components/index.js.map +1 -1
  99. package/lib/commonjs/components/ui/Avatar/Avatar.js +17 -2
  100. package/lib/commonjs/components/ui/Avatar/Avatar.js.map +1 -1
  101. package/lib/commonjs/components/ui/Avatar/ChannelAvatar.js +3 -1
  102. package/lib/commonjs/components/ui/Avatar/ChannelAvatar.js.map +1 -1
  103. package/lib/commonjs/components/ui/Avatar/UserAvatar.js +1 -0
  104. package/lib/commonjs/components/ui/Avatar/UserAvatar.js.map +1 -1
  105. package/lib/commonjs/components/ui/Button/Button.js +64 -21
  106. package/lib/commonjs/components/ui/Button/Button.js.map +1 -1
  107. package/lib/commonjs/components/ui/Input/Input.js +63 -21
  108. package/lib/commonjs/components/ui/Input/Input.js.map +1 -1
  109. package/lib/commonjs/contexts/accessibilityContext/AccessibilityContext.js +134 -0
  110. package/lib/commonjs/contexts/accessibilityContext/AccessibilityContext.js.map +1 -0
  111. package/lib/commonjs/contexts/accessibilityContext/index.js +15 -0
  112. package/lib/commonjs/contexts/accessibilityContext/index.js.map +1 -0
  113. package/lib/commonjs/contexts/index.js +11 -0
  114. package/lib/commonjs/contexts/index.js.map +1 -1
  115. package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
  116. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +19 -14
  117. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  118. package/lib/commonjs/hooks/index.js +11 -0
  119. package/lib/commonjs/hooks/index.js.map +1 -1
  120. package/lib/commonjs/i18n/en.json +57 -1
  121. package/lib/commonjs/i18n/es.json +57 -1
  122. package/lib/commonjs/i18n/fr.json +57 -1
  123. package/lib/commonjs/i18n/he.json +57 -1
  124. package/lib/commonjs/i18n/hi.json +57 -1
  125. package/lib/commonjs/i18n/it.json +57 -1
  126. package/lib/commonjs/i18n/ja.json +57 -1
  127. package/lib/commonjs/i18n/ko.json +57 -1
  128. package/lib/commonjs/i18n/nl.json +57 -1
  129. package/lib/commonjs/i18n/pt-br.json +57 -1
  130. package/lib/commonjs/i18n/ru.json +57 -1
  131. package/lib/commonjs/i18n/tr.json +57 -1
  132. package/lib/commonjs/mock-builders/DB/mock.js +3 -1
  133. package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
  134. package/lib/commonjs/test-utils/BetterSqlite.js +3 -2
  135. package/lib/commonjs/test-utils/BetterSqlite.js.map +1 -1
  136. package/lib/commonjs/version.json +1 -1
  137. package/lib/module/a11y/a11yUtils.js +40 -0
  138. package/lib/module/a11y/a11yUtils.js.map +1 -0
  139. package/lib/module/a11y/hooks/useA11yLabel.js +16 -0
  140. package/lib/module/a11y/hooks/useA11yLabel.js.map +1 -0
  141. package/lib/module/a11y/hooks/useAccessibilityActivateAction.js +25 -0
  142. package/lib/module/a11y/hooks/useAccessibilityActivateAction.js.map +1 -0
  143. package/lib/module/a11y/hooks/useAnnounceOnStateChange.js +36 -0
  144. package/lib/module/a11y/hooks/useAnnounceOnStateChange.js.map +1 -0
  145. package/lib/module/a11y/hooks/useReducedMotionPreference.js +34 -0
  146. package/lib/module/a11y/hooks/useReducedMotionPreference.js.map +1 -0
  147. package/lib/module/a11y/hooks/useResolvedModalAccessibilityProps.js +20 -0
  148. package/lib/module/a11y/hooks/useResolvedModalAccessibilityProps.js.map +1 -0
  149. package/lib/module/a11y/hooks/useScreenReaderEnabled.js +37 -0
  150. package/lib/module/a11y/hooks/useScreenReaderEnabled.js.map +1 -0
  151. package/lib/module/a11y/index.js +81 -0
  152. package/lib/module/a11y/index.js.map +1 -0
  153. package/lib/module/components/AITypingIndicatorView/AITypingIndicatorView.js +10 -0
  154. package/lib/module/components/AITypingIndicatorView/AITypingIndicatorView.js.map +1 -1
  155. package/lib/module/components/Accessibility/NotificationAnnouncer.js +37 -0
  156. package/lib/module/components/Accessibility/NotificationAnnouncer.js.map +1 -0
  157. package/lib/module/components/Accessibility/hooks/useIncomingMessageAnnouncements.js +109 -0
  158. package/lib/module/components/Accessibility/hooks/useIncomingMessageAnnouncements.js.map +1 -0
  159. package/lib/module/components/Accessibility/index.js +37 -0
  160. package/lib/module/components/Accessibility/index.js.map +1 -0
  161. package/lib/module/components/Accessibility/useAccessibilityAnnouncer.js +15 -0
  162. package/lib/module/components/Accessibility/useAccessibilityAnnouncer.js.map +1 -0
  163. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +20 -0
  164. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  165. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentMediaPicker.js +1 -0
  166. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentMediaPicker.js.map +1 -1
  167. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js +19 -2
  168. package/lib/module/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.js.map +1 -1
  169. package/lib/module/components/AttachmentPicker/components/AttachmentPickerContent.js +2 -1
  170. package/lib/module/components/AttachmentPicker/components/AttachmentPickerContent.js.map +1 -1
  171. package/lib/module/components/AttachmentPicker/components/AttachmentTypePickerButton.js +9 -1
  172. package/lib/module/components/AttachmentPicker/components/AttachmentTypePickerButton.js.map +1 -1
  173. package/lib/module/components/Channel/Channel.js +2 -1
  174. package/lib/module/components/Channel/Channel.js.map +1 -1
  175. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +4 -0
  176. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  177. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +2 -2
  178. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  179. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +1 -1
  180. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  181. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js +1 -1
  182. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  183. package/lib/module/components/Indicators/LoadingDots.js +2 -0
  184. package/lib/module/components/Indicators/LoadingDots.js.map +1 -1
  185. package/lib/module/components/Indicators/LoadingErrorIndicator.js +3 -0
  186. package/lib/module/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  187. package/lib/module/components/Indicators/LoadingIndicator.js +2 -0
  188. package/lib/module/components/Indicators/LoadingIndicator.js.map +1 -1
  189. package/lib/module/components/MessageInput/components/AttachmentPreview/AttachmentRemoveControl.js +16 -4
  190. package/lib/module/components/MessageInput/components/AttachmentPreview/AttachmentRemoveControl.js.map +1 -1
  191. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecorder.js +3 -0
  192. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecorder.js.map +1 -1
  193. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +5 -0
  194. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  195. package/lib/module/components/MessageInput/components/InputButtons/AttachButton.js +12 -3
  196. package/lib/module/components/MessageInput/components/InputButtons/AttachButton.js.map +1 -1
  197. package/lib/module/components/MessageInput/components/OutputButtons/EditButton.js +1 -0
  198. package/lib/module/components/MessageInput/components/OutputButtons/EditButton.js.map +1 -1
  199. package/lib/module/components/MessageInput/components/OutputButtons/SendButton.js +1 -0
  200. package/lib/module/components/MessageInput/components/OutputButtons/SendButton.js.map +1 -1
  201. package/lib/module/components/MessageList/MessageFlashList.js +19 -2
  202. package/lib/module/components/MessageList/MessageFlashList.js.map +1 -1
  203. package/lib/module/components/MessageList/MessageList.js +32 -8
  204. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  205. package/lib/module/components/MessageList/ScrollToBottomButton.js +12 -1
  206. package/lib/module/components/MessageList/ScrollToBottomButton.js.map +1 -1
  207. package/lib/module/components/MessageList/UnreadMessagesNotification.js +1 -0
  208. package/lib/module/components/MessageList/UnreadMessagesNotification.js.map +1 -1
  209. package/lib/module/components/MessageList/hooks/useScrollToBottomAccessibilityAction.js +47 -0
  210. package/lib/module/components/MessageList/hooks/useScrollToBottomAccessibilityAction.js.map +1 -0
  211. package/lib/module/components/MessageMenu/MessageActionList.js +4 -1
  212. package/lib/module/components/MessageMenu/MessageActionList.js.map +1 -1
  213. package/lib/module/components/MessageMenu/MessageActionListItem.js +12 -3
  214. package/lib/module/components/MessageMenu/MessageActionListItem.js.map +1 -1
  215. package/lib/module/components/MessageMenu/MessageReactionPicker.js +2 -0
  216. package/lib/module/components/MessageMenu/MessageReactionPicker.js.map +1 -1
  217. package/lib/module/components/MessageMenu/ReactionButton.js +9 -1
  218. package/lib/module/components/MessageMenu/ReactionButton.js.map +1 -1
  219. package/lib/module/components/Poll/components/CreatePollHeader.js +2 -0
  220. package/lib/module/components/Poll/components/CreatePollHeader.js.map +1 -1
  221. package/lib/module/components/Poll/components/MultipleVotesSettings.js +2 -0
  222. package/lib/module/components/Poll/components/MultipleVotesSettings.js.map +1 -1
  223. package/lib/module/components/Poll/components/PollModalHeader.js +1 -0
  224. package/lib/module/components/Poll/components/PollModalHeader.js.map +1 -1
  225. package/lib/module/components/Poll/components/PollOption.js +15 -0
  226. package/lib/module/components/Poll/components/PollOption.js.map +1 -1
  227. package/lib/module/components/ProgressControl/ProgressControl.js +10 -0
  228. package/lib/module/components/ProgressControl/ProgressControl.js.map +1 -1
  229. package/lib/module/components/Reply/Reply.js +3 -0
  230. package/lib/module/components/Reply/Reply.js.map +1 -1
  231. package/lib/module/components/UIComponents/BottomSheetModal.js +6 -3
  232. package/lib/module/components/UIComponents/BottomSheetModal.js.map +1 -1
  233. package/lib/module/components/index.js +11 -0
  234. package/lib/module/components/index.js.map +1 -1
  235. package/lib/module/components/ui/Avatar/Avatar.js +17 -2
  236. package/lib/module/components/ui/Avatar/Avatar.js.map +1 -1
  237. package/lib/module/components/ui/Avatar/ChannelAvatar.js +3 -1
  238. package/lib/module/components/ui/Avatar/ChannelAvatar.js.map +1 -1
  239. package/lib/module/components/ui/Avatar/UserAvatar.js +1 -0
  240. package/lib/module/components/ui/Avatar/UserAvatar.js.map +1 -1
  241. package/lib/module/components/ui/Button/Button.js +64 -21
  242. package/lib/module/components/ui/Button/Button.js.map +1 -1
  243. package/lib/module/components/ui/Input/Input.js +63 -21
  244. package/lib/module/components/ui/Input/Input.js.map +1 -1
  245. package/lib/module/contexts/accessibilityContext/AccessibilityContext.js +134 -0
  246. package/lib/module/contexts/accessibilityContext/AccessibilityContext.js.map +1 -0
  247. package/lib/module/contexts/accessibilityContext/index.js +15 -0
  248. package/lib/module/contexts/accessibilityContext/index.js.map +1 -0
  249. package/lib/module/contexts/index.js +11 -0
  250. package/lib/module/contexts/index.js.map +1 -1
  251. package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
  252. package/lib/module/contexts/overlayContext/OverlayProvider.js +19 -14
  253. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  254. package/lib/module/hooks/index.js +11 -0
  255. package/lib/module/hooks/index.js.map +1 -1
  256. package/lib/module/i18n/en.json +57 -1
  257. package/lib/module/i18n/es.json +57 -1
  258. package/lib/module/i18n/fr.json +57 -1
  259. package/lib/module/i18n/he.json +57 -1
  260. package/lib/module/i18n/hi.json +57 -1
  261. package/lib/module/i18n/it.json +57 -1
  262. package/lib/module/i18n/ja.json +57 -1
  263. package/lib/module/i18n/ko.json +57 -1
  264. package/lib/module/i18n/nl.json +57 -1
  265. package/lib/module/i18n/pt-br.json +57 -1
  266. package/lib/module/i18n/ru.json +57 -1
  267. package/lib/module/i18n/tr.json +57 -1
  268. package/lib/module/mock-builders/DB/mock.js +3 -1
  269. package/lib/module/mock-builders/DB/mock.js.map +1 -1
  270. package/lib/module/test-utils/BetterSqlite.js +3 -2
  271. package/lib/module/test-utils/BetterSqlite.js.map +1 -1
  272. package/lib/module/version.json +1 -1
  273. package/lib/typescript/a11y/a11yUtils.d.ts +31 -0
  274. package/lib/typescript/a11y/a11yUtils.d.ts.map +1 -0
  275. package/lib/typescript/a11y/hooks/useA11yLabel.d.ts +13 -0
  276. package/lib/typescript/a11y/hooks/useA11yLabel.d.ts.map +1 -0
  277. package/lib/typescript/a11y/hooks/useAccessibilityActivateAction.d.ts +17 -0
  278. package/lib/typescript/a11y/hooks/useAccessibilityActivateAction.d.ts.map +1 -0
  279. package/lib/typescript/a11y/hooks/useAnnounceOnStateChange.d.ts +14 -0
  280. package/lib/typescript/a11y/hooks/useAnnounceOnStateChange.d.ts.map +1 -0
  281. package/lib/typescript/a11y/hooks/useReducedMotionPreference.d.ts +6 -0
  282. package/lib/typescript/a11y/hooks/useReducedMotionPreference.d.ts.map +1 -0
  283. package/lib/typescript/a11y/hooks/useResolvedModalAccessibilityProps.d.ts +18 -0
  284. package/lib/typescript/a11y/hooks/useResolvedModalAccessibilityProps.d.ts.map +1 -0
  285. package/lib/typescript/a11y/hooks/useScreenReaderEnabled.d.ts +10 -0
  286. package/lib/typescript/a11y/hooks/useScreenReaderEnabled.d.ts.map +1 -0
  287. package/lib/typescript/a11y/index.d.ts +8 -0
  288. package/lib/typescript/a11y/index.d.ts.map +1 -0
  289. package/lib/typescript/components/AITypingIndicatorView/AITypingIndicatorView.d.ts.map +1 -1
  290. package/lib/typescript/components/Accessibility/NotificationAnnouncer.d.ts +12 -0
  291. package/lib/typescript/components/Accessibility/NotificationAnnouncer.d.ts.map +1 -0
  292. package/lib/typescript/components/Accessibility/hooks/useIncomingMessageAnnouncements.d.ts +20 -0
  293. package/lib/typescript/components/Accessibility/hooks/useIncomingMessageAnnouncements.d.ts.map +1 -0
  294. package/lib/typescript/components/Accessibility/index.d.ts +4 -0
  295. package/lib/typescript/components/Accessibility/index.d.ts.map +1 -0
  296. package/lib/typescript/components/Accessibility/useAccessibilityAnnouncer.d.ts +15 -0
  297. package/lib/typescript/components/Accessibility/useAccessibilityAnnouncer.d.ts.map +1 -0
  298. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts.map +1 -1
  299. package/lib/typescript/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentMediaPicker.d.ts.map +1 -1
  300. package/lib/typescript/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.d.ts.map +1 -1
  301. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerContent.d.ts.map +1 -1
  302. package/lib/typescript/components/AttachmentPicker/components/AttachmentTypePickerButton.d.ts +2 -1
  303. package/lib/typescript/components/AttachmentPicker/components/AttachmentTypePickerButton.d.ts.map +1 -1
  304. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  305. package/lib/typescript/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.d.ts.map +1 -1
  306. package/lib/typescript/components/Indicators/LoadingDots.d.ts.map +1 -1
  307. package/lib/typescript/components/Indicators/LoadingErrorIndicator.d.ts.map +1 -1
  308. package/lib/typescript/components/MessageInput/components/AttachmentPreview/AttachmentRemoveControl.d.ts +5 -2
  309. package/lib/typescript/components/MessageInput/components/AttachmentPreview/AttachmentRemoveControl.d.ts.map +1 -1
  310. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecorder.d.ts.map +1 -1
  311. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingButton.d.ts.map +1 -1
  312. package/lib/typescript/components/MessageInput/components/InputButtons/AttachButton.d.ts +1 -0
  313. package/lib/typescript/components/MessageInput/components/InputButtons/AttachButton.d.ts.map +1 -1
  314. package/lib/typescript/components/MessageInput/components/OutputButtons/EditButton.d.ts.map +1 -1
  315. package/lib/typescript/components/MessageInput/components/OutputButtons/SendButton.d.ts.map +1 -1
  316. package/lib/typescript/components/MessageList/MessageFlashList.d.ts.map +1 -1
  317. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  318. package/lib/typescript/components/MessageList/ScrollToBottomButton.d.ts +2 -0
  319. package/lib/typescript/components/MessageList/ScrollToBottomButton.d.ts.map +1 -1
  320. package/lib/typescript/components/MessageList/UnreadMessagesNotification.d.ts.map +1 -1
  321. package/lib/typescript/components/MessageList/hooks/useScrollToBottomAccessibilityAction.d.ts +20 -0
  322. package/lib/typescript/components/MessageList/hooks/useScrollToBottomAccessibilityAction.d.ts.map +1 -0
  323. package/lib/typescript/components/MessageMenu/MessageActionList.d.ts.map +1 -1
  324. package/lib/typescript/components/MessageMenu/MessageActionListItem.d.ts.map +1 -1
  325. package/lib/typescript/components/MessageMenu/MessageReactionPicker.d.ts.map +1 -1
  326. package/lib/typescript/components/MessageMenu/ReactionButton.d.ts.map +1 -1
  327. package/lib/typescript/components/Poll/components/CreatePollHeader.d.ts.map +1 -1
  328. package/lib/typescript/components/Poll/components/MultipleVotesSettings.d.ts.map +1 -1
  329. package/lib/typescript/components/Poll/components/PollModalHeader.d.ts.map +1 -1
  330. package/lib/typescript/components/Poll/components/PollOption.d.ts.map +1 -1
  331. package/lib/typescript/components/ProgressControl/ProgressControl.d.ts.map +1 -1
  332. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  333. package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts.map +1 -1
  334. package/lib/typescript/components/index.d.ts +1 -0
  335. package/lib/typescript/components/index.d.ts.map +1 -1
  336. package/lib/typescript/components/ui/Avatar/Avatar.d.ts +12 -1
  337. package/lib/typescript/components/ui/Avatar/Avatar.d.ts.map +1 -1
  338. package/lib/typescript/components/ui/Avatar/ChannelAvatar.d.ts.map +1 -1
  339. package/lib/typescript/components/ui/Avatar/UserAvatar.d.ts.map +1 -1
  340. package/lib/typescript/components/ui/Button/Button.d.ts +10 -1
  341. package/lib/typescript/components/ui/Button/Button.d.ts.map +1 -1
  342. package/lib/typescript/components/ui/Input/Input.d.ts.map +1 -1
  343. package/lib/typescript/contexts/accessibilityContext/AccessibilityContext.d.ts +34 -0
  344. package/lib/typescript/contexts/accessibilityContext/AccessibilityContext.d.ts.map +1 -0
  345. package/lib/typescript/contexts/accessibilityContext/index.d.ts +2 -0
  346. package/lib/typescript/contexts/accessibilityContext/index.d.ts.map +1 -0
  347. package/lib/typescript/contexts/index.d.ts +1 -0
  348. package/lib/typescript/contexts/index.d.ts.map +1 -1
  349. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +7 -0
  350. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts.map +1 -1
  351. package/lib/typescript/contexts/overlayContext/OverlayProvider.d.ts.map +1 -1
  352. package/lib/typescript/hooks/index.d.ts +1 -0
  353. package/lib/typescript/hooks/index.d.ts.map +1 -1
  354. package/lib/typescript/hooks/useTranslatedMessage.d.ts +2 -2
  355. package/lib/typescript/i18n/en.json +57 -1
  356. package/lib/typescript/i18n/es.json +57 -1
  357. package/lib/typescript/i18n/fr.json +57 -1
  358. package/lib/typescript/i18n/he.json +57 -1
  359. package/lib/typescript/i18n/hi.json +57 -1
  360. package/lib/typescript/i18n/it.json +57 -1
  361. package/lib/typescript/i18n/ja.json +57 -1
  362. package/lib/typescript/i18n/ko.json +57 -1
  363. package/lib/typescript/i18n/nl.json +57 -1
  364. package/lib/typescript/i18n/pt-br.json +57 -1
  365. package/lib/typescript/i18n/ru.json +57 -1
  366. package/lib/typescript/i18n/tr.json +57 -1
  367. package/lib/typescript/test-utils/BetterSqlite.d.ts.map +1 -1
  368. package/lib/typescript/utils/i18n/Streami18n.d.ts +56 -0
  369. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  370. package/package.json +1 -1
  371. package/src/__tests__/offline-support/offline-feature.tsx +40 -34
  372. package/src/a11y/__tests__/a11yUtils.test.ts +70 -0
  373. package/src/a11y/a11yUtils.ts +50 -0
  374. package/src/a11y/hooks/useA11yLabel.ts +22 -0
  375. package/src/a11y/hooks/useAccessibilityActivateAction.ts +44 -0
  376. package/src/a11y/hooks/useAnnounceOnStateChange.ts +47 -0
  377. package/src/a11y/hooks/useReducedMotionPreference.ts +38 -0
  378. package/src/a11y/hooks/useResolvedModalAccessibilityProps.ts +30 -0
  379. package/src/a11y/hooks/useScreenReaderEnabled.ts +44 -0
  380. package/src/a11y/index.ts +7 -0
  381. package/src/components/AITypingIndicatorView/AITypingIndicatorView.tsx +17 -2
  382. package/src/components/AITypingIndicatorView/__tests__/AITypingIndicatorView.test.tsx +73 -0
  383. package/src/components/Accessibility/NotificationAnnouncer.tsx +43 -0
  384. package/src/components/Accessibility/__tests__/AccessibilityAnnouncer.test.tsx +75 -0
  385. package/src/components/Accessibility/hooks/useIncomingMessageAnnouncements.ts +157 -0
  386. package/src/components/Accessibility/index.ts +3 -0
  387. package/src/components/Accessibility/useAccessibilityAnnouncer.ts +30 -0
  388. package/src/components/AttachmentPicker/AttachmentPicker.tsx +23 -1
  389. package/src/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentMediaPicker.tsx +1 -0
  390. package/src/components/AttachmentPicker/components/AttachmentMediaPicker/AttachmentPickerItem.tsx +15 -2
  391. package/src/components/AttachmentPicker/components/AttachmentPickerContent.tsx +1 -0
  392. package/src/components/AttachmentPicker/components/AttachmentTypePickerButton.tsx +9 -0
  393. package/src/components/Channel/Channel.tsx +3 -0
  394. package/src/components/ChannelList/__tests__/ChannelListView.test.tsx +16 -5
  395. package/src/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.tsx +14 -1
  396. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +9 -3
  397. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +4 -1
  398. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +2 -2
  399. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +1 -1
  400. package/src/components/ImageGallery/components/ImageGalleryVideoControl.tsx +1 -1
  401. package/src/components/Indicators/LoadingDots.tsx +5 -1
  402. package/src/components/Indicators/LoadingErrorIndicator.tsx +7 -1
  403. package/src/components/Indicators/LoadingIndicator.tsx +1 -1
  404. package/src/components/Message/MessageItemView/__tests__/__snapshots__/MessageAuthor.test.tsx.snap +2 -0
  405. package/src/components/MessageInput/__tests__/__snapshots__/AttachButton.test.tsx.snap +30 -15
  406. package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.tsx.snap +20 -10
  407. package/src/components/MessageInput/components/AttachmentPreview/AttachmentRemoveControl.tsx +18 -2
  408. package/src/components/MessageInput/components/AudioRecorder/AudioRecorder.tsx +3 -0
  409. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingButton.tsx +8 -1
  410. package/src/components/MessageInput/components/InputButtons/AttachButton.tsx +13 -3
  411. package/src/components/MessageInput/components/OutputButtons/EditButton.tsx +1 -0
  412. package/src/components/MessageInput/components/OutputButtons/SendButton.tsx +1 -0
  413. package/src/components/MessageList/MessageFlashList.tsx +23 -2
  414. package/src/components/MessageList/MessageList.tsx +32 -2
  415. package/src/components/MessageList/ScrollToBottomButton.tsx +19 -1
  416. package/src/components/MessageList/UnreadMessagesNotification.tsx +1 -0
  417. package/src/components/MessageList/__tests__/MessageList.test.tsx +186 -0
  418. package/src/components/MessageList/__tests__/ScrollToBottomButton.test.tsx +2 -2
  419. package/src/components/MessageList/__tests__/__snapshots__/ScrollToBottomButton.test.tsx.snap +4 -1
  420. package/src/components/MessageList/__tests__/__snapshots__/TypingIndicator.test.tsx.snap +6 -0
  421. package/src/components/MessageList/hooks/useScrollToBottomAccessibilityAction.ts +74 -0
  422. package/src/components/MessageMenu/MessageActionList.tsx +4 -1
  423. package/src/components/MessageMenu/MessageActionListItem.tsx +11 -4
  424. package/src/components/MessageMenu/MessageReactionPicker.tsx +2 -0
  425. package/src/components/MessageMenu/ReactionButton.tsx +7 -1
  426. package/src/components/MessageMenu/__tests__/MessageReactionPicker.test.tsx +13 -15
  427. package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +20 -18
  428. package/src/components/MessageMenu/__tests__/ReactionButton.test.tsx +18 -5
  429. package/src/components/Poll/components/CreatePollHeader.tsx +2 -0
  430. package/src/components/Poll/components/MultipleVotesSettings.tsx +2 -0
  431. package/src/components/Poll/components/PollModalHeader.tsx +1 -0
  432. package/src/components/Poll/components/PollOption.tsx +11 -0
  433. package/src/components/ProgressControl/ProgressControl.tsx +8 -0
  434. package/src/components/Reply/Reply.tsx +9 -2
  435. package/src/components/Thread/__tests__/__snapshots__/Thread.test.tsx.snap +23 -6
  436. package/src/components/UIComponents/BottomSheetModal.tsx +4 -0
  437. package/src/components/index.ts +2 -0
  438. package/src/components/ui/Avatar/Avatar.tsx +24 -2
  439. package/src/components/ui/Avatar/ChannelAvatar.tsx +3 -0
  440. package/src/components/ui/Avatar/UserAvatar.tsx +1 -0
  441. package/src/components/ui/Button/Button.tsx +50 -0
  442. package/src/components/ui/Button/__tests__/Button.test.tsx +44 -0
  443. package/src/components/ui/Input/Input.tsx +35 -0
  444. package/src/contexts/accessibilityContext/AccessibilityContext.tsx +199 -0
  445. package/src/contexts/accessibilityContext/__tests__/AccessibilityContext.test.tsx +65 -0
  446. package/src/contexts/accessibilityContext/index.ts +1 -0
  447. package/src/contexts/index.ts +1 -0
  448. package/src/contexts/overlayContext/OverlayContext.tsx +7 -0
  449. package/src/contexts/overlayContext/OverlayProvider.tsx +18 -14
  450. package/src/contexts/overlayContext/__tests__/OverlayProvider.test.tsx +51 -0
  451. package/src/hooks/index.ts +1 -0
  452. package/src/i18n/en.json +57 -1
  453. package/src/i18n/es.json +57 -1
  454. package/src/i18n/fr.json +57 -1
  455. package/src/i18n/he.json +57 -1
  456. package/src/i18n/hi.json +57 -1
  457. package/src/i18n/it.json +57 -1
  458. package/src/i18n/ja.json +57 -1
  459. package/src/i18n/ko.json +57 -1
  460. package/src/i18n/nl.json +57 -1
  461. package/src/i18n/pt-br.json +57 -1
  462. package/src/i18n/ru.json +57 -1
  463. package/src/i18n/tr.json +57 -1
  464. package/src/mock-builders/DB/mock.ts +2 -1
  465. package/src/test-utils/BetterSqlite.ts +3 -1
  466. package/src/version.json +1 -1
@@ -36,13 +36,14 @@ exports[`SendButton should render a SendButton 1`] = `
36
36
  }
37
37
  >
38
38
  <View
39
+ accessibilityRole="button"
39
40
  accessibilityState={
40
41
  {
41
42
  "busy": undefined,
42
43
  "checked": undefined,
43
44
  "disabled": false,
44
45
  "expanded": undefined,
45
- "selected": undefined,
46
+ "selected": false,
46
47
  }
47
48
  }
48
49
  accessibilityValue={
@@ -194,13 +195,14 @@ exports[`SendButton should render a SendButton 1`] = `
194
195
  }
195
196
  >
196
197
  <View
198
+ accessibilityRole="button"
197
199
  accessibilityState={
198
200
  {
199
201
  "busy": undefined,
200
202
  "checked": undefined,
201
203
  "disabled": false,
202
204
  "expanded": undefined,
203
- "selected": undefined,
205
+ "selected": false,
204
206
  }
205
207
  }
206
208
  accessibilityValue={
@@ -333,13 +335,14 @@ exports[`SendButton should render a SendButton 1`] = `
333
335
  }
334
336
  >
335
337
  <View
338
+ accessibilityRole="button"
336
339
  accessibilityState={
337
340
  {
338
341
  "busy": undefined,
339
342
  "checked": undefined,
340
343
  "disabled": false,
341
344
  "expanded": undefined,
342
- "selected": undefined,
345
+ "selected": false,
343
346
  }
344
347
  }
345
348
  accessibilityValue={
@@ -501,13 +504,14 @@ exports[`SendButton should render a SendButton 1`] = `
501
504
  }
502
505
  >
503
506
  <View
507
+ accessibilityRole="button"
504
508
  accessibilityState={
505
509
  {
506
510
  "busy": undefined,
507
511
  "checked": undefined,
508
512
  "disabled": false,
509
513
  "expanded": undefined,
510
- "selected": undefined,
514
+ "selected": false,
511
515
  }
512
516
  }
513
517
  accessibilityValue={
@@ -636,13 +640,14 @@ exports[`SendButton should render a SendButton 1`] = `
636
640
  }
637
641
  >
638
642
  <View
643
+ accessibilityRole="button"
639
644
  accessibilityState={
640
645
  {
641
646
  "busy": undefined,
642
647
  "checked": undefined,
643
648
  "disabled": false,
644
649
  "expanded": undefined,
645
- "selected": undefined,
650
+ "selected": false,
646
651
  }
647
652
  }
648
653
  accessibilityValue={
@@ -903,13 +908,14 @@ exports[`SendButton should render a disabled SendButton 1`] = `
903
908
  }
904
909
  >
905
910
  <View
911
+ accessibilityRole="button"
906
912
  accessibilityState={
907
913
  {
908
914
  "busy": undefined,
909
915
  "checked": undefined,
910
916
  "disabled": true,
911
917
  "expanded": undefined,
912
- "selected": undefined,
918
+ "selected": false,
913
919
  }
914
920
  }
915
921
  accessibilityValue={
@@ -1061,13 +1067,14 @@ exports[`SendButton should render a disabled SendButton 1`] = `
1061
1067
  }
1062
1068
  >
1063
1069
  <View
1070
+ accessibilityRole="button"
1064
1071
  accessibilityState={
1065
1072
  {
1066
1073
  "busy": undefined,
1067
1074
  "checked": undefined,
1068
1075
  "disabled": false,
1069
1076
  "expanded": undefined,
1070
- "selected": undefined,
1077
+ "selected": false,
1071
1078
  }
1072
1079
  }
1073
1080
  accessibilityValue={
@@ -1200,13 +1207,14 @@ exports[`SendButton should render a disabled SendButton 1`] = `
1200
1207
  }
1201
1208
  >
1202
1209
  <View
1210
+ accessibilityRole="button"
1203
1211
  accessibilityState={
1204
1212
  {
1205
1213
  "busy": undefined,
1206
1214
  "checked": undefined,
1207
1215
  "disabled": false,
1208
1216
  "expanded": undefined,
1209
- "selected": undefined,
1217
+ "selected": false,
1210
1218
  }
1211
1219
  }
1212
1220
  accessibilityValue={
@@ -1368,13 +1376,14 @@ exports[`SendButton should render a disabled SendButton 1`] = `
1368
1376
  }
1369
1377
  >
1370
1378
  <View
1379
+ accessibilityRole="button"
1371
1380
  accessibilityState={
1372
1381
  {
1373
1382
  "busy": undefined,
1374
1383
  "checked": undefined,
1375
1384
  "disabled": false,
1376
1385
  "expanded": undefined,
1377
- "selected": undefined,
1386
+ "selected": false,
1378
1387
  }
1379
1388
  }
1380
1389
  accessibilityValue={
@@ -1503,13 +1512,14 @@ exports[`SendButton should render a disabled SendButton 1`] = `
1503
1512
  }
1504
1513
  >
1505
1514
  <View
1515
+ accessibilityRole="button"
1506
1516
  accessibilityState={
1507
1517
  {
1508
1518
  "busy": undefined,
1509
1519
  "checked": undefined,
1510
1520
  "disabled": false,
1511
1521
  "expanded": undefined,
1512
- "selected": undefined,
1522
+ "selected": false,
1513
1523
  }
1514
1524
  }
1515
1525
  accessibilityValue={
@@ -2,13 +2,22 @@ import React, { useMemo } from 'react';
2
2
 
3
3
  import { Pressable, PressableProps, StyleSheet } from 'react-native';
4
4
 
5
+ import { useA11yLabel } from '../../../../a11y/hooks/useA11yLabel';
5
6
  import { useTheme } from '../../../../contexts/themeContext/ThemeContext';
6
7
  import { NewClose } from '../../../../icons/xmark';
7
8
  import { primitives } from '../../../../theme';
8
9
 
9
- type AttachmentRemoveControlProps = PressableProps;
10
+ type AttachmentRemoveControlProps = PressableProps & {
11
+ accessibilityLabelKey?: string;
12
+ accessibilityLabelParams?: Record<string, unknown>;
13
+ };
10
14
 
11
- export const AttachmentRemoveControl = ({ onPress }: AttachmentRemoveControlProps) => {
15
+ export const AttachmentRemoveControl = ({
16
+ accessibilityLabelKey = 'a11y/Remove attachment',
17
+ accessibilityLabelParams,
18
+ onPress,
19
+ ...rest
20
+ }: AttachmentRemoveControlProps) => {
12
21
  const {
13
22
  theme: {
14
23
  semantics,
@@ -18,9 +27,15 @@ export const AttachmentRemoveControl = ({ onPress }: AttachmentRemoveControlProp
18
27
  },
19
28
  } = useTheme();
20
29
  const styles = useStyles();
30
+ const translatedAccessibilityLabel = useA11yLabel(
31
+ accessibilityLabelKey,
32
+ accessibilityLabelParams,
33
+ );
21
34
 
22
35
  return (
23
36
  <Pressable
37
+ accessibilityLabel={translatedAccessibilityLabel}
38
+ accessibilityRole='button'
24
39
  hitSlop={15}
25
40
  onPress={onPress}
26
41
  style={({ pressed }) => [
@@ -31,6 +46,7 @@ export const AttachmentRemoveControl = ({ onPress }: AttachmentRemoveControlProp
31
46
  dismiss,
32
47
  ]}
33
48
  testID='remove-upload-preview'
49
+ {...rest}
34
50
  >
35
51
  <NewClose
36
52
  height={16}
@@ -59,6 +59,7 @@ const StopRecording = ({
59
59
 
60
60
  return (
61
61
  <Button
62
+ accessibilityLabelKey='a11y/Stop voice recording'
62
63
  variant='destructive'
63
64
  type='outline'
64
65
  size='sm'
@@ -83,6 +84,7 @@ const UploadRecording = ({
83
84
 
84
85
  return (
85
86
  <Button
87
+ accessibilityLabelKey='a11y/Send voice recording'
86
88
  variant='primary'
87
89
  type='solid'
88
90
  onPress={onUploadVoiceRecording}
@@ -104,6 +106,7 @@ const DeleteRecording = ({
104
106
  };
105
107
  return (
106
108
  <Button
109
+ accessibilityLabelKey='a11y/Delete voice recording'
107
110
  variant='secondary'
108
111
  type='outline'
109
112
  size='sm'
@@ -10,6 +10,7 @@ import Animated, {
10
10
  withSpring,
11
11
  } from 'react-native-reanimated';
12
12
 
13
+ import { useA11yLabel } from '../../../../a11y/hooks/useA11yLabel';
13
14
  import { useActiveAudioPlayer } from '../../../../contexts/audioPlayerContext/AudioPlayerContext';
14
15
  import {
15
16
  MessageInputContextValue,
@@ -83,6 +84,7 @@ export const AudioRecordingButtonWithContext = (props: AudioRecordingButtonProps
83
84
  const pressed = useSharedValue(false);
84
85
 
85
86
  const { t } = useTranslationContext();
87
+ const startVoiceRecordingAccessibilityLabel = useA11yLabel('a11y/Start voice recording');
86
88
  const {
87
89
  theme: {
88
90
  messageComposer: { micButtonContainer },
@@ -238,7 +240,12 @@ export const AudioRecordingButtonWithContext = (props: AudioRecordingButtonProps
238
240
 
239
241
  return (
240
242
  <GestureDetector gesture={Gesture.Simultaneous(panGesture, tapGesture)}>
241
- <Animated.View style={[styles.container, animatedStyle, micButtonContainer]}>
243
+ <Animated.View
244
+ accessibilityLabel={startVoiceRecordingAccessibilityLabel}
245
+ accessibilityRole='button'
246
+ accessible
247
+ style={[styles.container, animatedStyle, micButtonContainer]}
248
+ >
242
249
  <Mic height={20} width={20} strokeWidth={1.5} stroke={buttonStyles.foregroundColor} />
243
250
  </Animated.View>
244
251
  </GestureDetector>
@@ -10,6 +10,7 @@ import {
10
10
  useMessageInputContext,
11
11
  } from '../../../../contexts/messageInputContext/MessageInputContext';
12
12
  import { useStableCallback } from '../../../../hooks';
13
+ import { useAttachmentPickerState } from '../../../../hooks/useAttachmentPickerState';
13
14
  import { Plus } from '../../../../icons/plus';
14
15
  import { Button } from '../../../ui/';
15
16
 
@@ -18,6 +19,7 @@ type AttachButtonPropsWithContext = Pick<MessageInputContextValue, 'handleAttach
18
19
  disabled?: boolean;
19
20
  /** Function that opens attachment options bottom sheet */
20
21
  handleOnPress?: ((event: GestureResponderEvent) => void) & (() => void);
22
+ isAttachmentPickerOpen?: boolean;
21
23
  } & { toggleAttachmentPicker: () => void };
22
24
 
23
25
  const AttachButtonWithContext = (props: AttachButtonPropsWithContext) => {
@@ -25,6 +27,7 @@ const AttachButtonWithContext = (props: AttachButtonPropsWithContext) => {
25
27
  disabled = false,
26
28
  handleAttachButtonPress,
27
29
  handleOnPress,
30
+ isAttachmentPickerOpen = false,
28
31
  toggleAttachmentPicker,
29
32
  } = props;
30
33
 
@@ -45,6 +48,9 @@ const AttachButtonWithContext = (props: AttachButtonPropsWithContext) => {
45
48
 
46
49
  return (
47
50
  <Button
51
+ accessibilityLabelKey={
52
+ isAttachmentPickerOpen ? 'a11y/Close attachments' : 'a11y/Add attachment'
53
+ }
48
54
  variant='secondary'
49
55
  type='outline'
50
56
  size='lg'
@@ -61,15 +67,17 @@ const areEqual = (
61
67
  prevProps: AttachButtonPropsWithContext,
62
68
  nextProps: AttachButtonPropsWithContext,
63
69
  ) => {
64
- const { handleOnPress: prevHandleOnPress } = prevProps;
65
- const { handleOnPress: nextHandleOnPress } = nextProps;
70
+ const { handleOnPress: prevHandleOnPress, isAttachmentPickerOpen: prevIsAttachmentPickerOpen } =
71
+ prevProps;
72
+ const { handleOnPress: nextHandleOnPress, isAttachmentPickerOpen: nextIsAttachmentPickerOpen } =
73
+ nextProps;
66
74
 
67
75
  const handleOnPressEqual = prevHandleOnPress === nextHandleOnPress;
68
76
  if (!handleOnPressEqual) {
69
77
  return false;
70
78
  }
71
79
 
72
- return true;
80
+ return prevIsAttachmentPickerOpen === nextIsAttachmentPickerOpen;
73
81
  };
74
82
 
75
83
  const MemoizedAttachButton = React.memo(
@@ -86,6 +94,7 @@ export const AttachButton = (props: AttachButtonProps) => {
86
94
  const { disableAttachmentPicker } = useAttachmentPickerContext();
87
95
  const { inputBoxRef, handleAttachButtonPress, openAttachmentPicker } = useMessageInputContext();
88
96
  const { attachmentPickerStore } = useAttachmentPickerContext();
97
+ const { selectedPicker } = useAttachmentPickerState();
89
98
 
90
99
  const toggleAttachmentPicker = useStableCallback(() => {
91
100
  if (attachmentPickerStore.state.getLatestValue().selectedPicker) {
@@ -100,6 +109,7 @@ export const AttachButton = (props: AttachButtonProps) => {
100
109
  {...{
101
110
  disableAttachmentPicker,
102
111
  handleAttachButtonPress,
112
+ isAttachmentPickerOpen: !!selectedPicker,
103
113
  toggleAttachmentPicker,
104
114
  }}
105
115
  {...props}
@@ -26,6 +26,7 @@ export const EditButton = (props: EditButtonProps) => {
26
26
 
27
27
  return (
28
28
  <Button
29
+ accessibilityLabelKey='a11y/Save edited message'
29
30
  variant='primary'
30
31
  type='solid'
31
32
  LeadingIcon={Tick}
@@ -26,6 +26,7 @@ export const SendButton = (props: SendButtonProps) => {
26
26
 
27
27
  return (
28
28
  <Button
29
+ accessibilityLabelKey='a11y/Send message'
29
30
  variant='primary'
30
31
  type='solid'
31
32
  disabled={disabled}
@@ -14,6 +14,7 @@ import type { FlashListProps, FlashListRef } from '@shopify/flash-list';
14
14
  import type { Channel, Event, LocalMessage, MessageResponse } from 'stream-chat';
15
15
 
16
16
  import { useMessageList } from './hooks/useMessageList';
17
+ import { useScrollToBottomAccessibilityAction } from './hooks/useScrollToBottomAccessibilityAction';
17
18
  import { useShouldScrollToRecentOnNewOwnMessage } from './hooks/useShouldScrollToRecentOnNewOwnMessage';
18
19
  import { useTypingUsers } from './hooks/useTypingUsers';
19
20
  import { InlineLoadingMoreIndicator } from './InlineLoadingMoreIndicator';
@@ -920,6 +921,19 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
920
921
  });
921
922
  });
922
923
 
924
+ const scrollToBottomUnreadCount =
925
+ scrollToBottomButtonVisible && !threadList ? channel?.countUnread() : undefined;
926
+ const {
927
+ accessibilityActions: messageListAccessibilityActions,
928
+ onAccessibilityAction: messageListOnAccessibilityAction,
929
+ } = useScrollToBottomAccessibilityAction({
930
+ accessibilityActions: additionalFlashListProps?.accessibilityActions,
931
+ onAccessibilityAction: additionalFlashListProps?.onAccessibilityAction,
932
+ onScrollToBottom: goToNewMessages,
933
+ unreadCount: scrollToBottomUnreadCount,
934
+ visible: scrollToBottomButtonVisible,
935
+ });
936
+
923
937
  const dismissImagePicker = useStableCallback(() => {
924
938
  if (attachmentPickerStore.state.getLatestValue().selectedPicker) {
925
939
  attachmentPickerStore.setSelectedPicker(undefined);
@@ -1072,10 +1086,17 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
1072
1086
  testID='message-flash-list'
1073
1087
  viewabilityConfig={flatListViewabilityConfig}
1074
1088
  {...additionalFlashListPropsExcludingStyle}
1089
+ accessibilityActions={messageListAccessibilityActions}
1090
+ onAccessibilityAction={messageListOnAccessibilityAction}
1075
1091
  />
1076
1092
  </MessageListItemProvider>
1077
1093
  )}
1078
- <View style={styles.stickyHeaderContainer}>
1094
+ <View
1095
+ accessibilityElementsHidden
1096
+ accessible={false}
1097
+ importantForAccessibility='no-hide-descendants'
1098
+ style={styles.stickyHeaderContainer}
1099
+ >
1079
1100
  {messageListLengthAfterUpdate && StickyHeader ? (
1080
1101
  <StickyHeader date={stickyHeaderDate} />
1081
1102
  ) : null}
@@ -1094,7 +1115,7 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
1094
1115
  <ScrollToBottomButton
1095
1116
  onPress={goToNewMessages}
1096
1117
  showNotification={scrollToBottomButtonVisible}
1097
- unreadCount={threadList ? 0 : channel?.countUnread()}
1118
+ unreadCount={scrollToBottomUnreadCount}
1098
1119
  />
1099
1120
  </Animated.View>
1100
1121
  <NetworkDownIndicator />
@@ -18,6 +18,7 @@ import debounce from 'lodash/debounce';
18
18
  import type { Channel, Event, LocalMessage, MessageResponse } from 'stream-chat';
19
19
 
20
20
  import { useMessageList } from './hooks/useMessageList';
21
+ import { useScrollToBottomAccessibilityAction } from './hooks/useScrollToBottomAccessibilityAction';
21
22
  import { useShouldScrollToRecentOnNewOwnMessage } from './hooks/useShouldScrollToRecentOnNewOwnMessage';
22
23
 
23
24
  import { InlineLoadingMoreIndicator } from './InlineLoadingMoreIndicator';
@@ -37,6 +38,7 @@ import {
37
38
  ChannelContextValue,
38
39
  useChannelContext,
39
40
  } from '../../contexts/channelContext/ChannelContext';
41
+
40
42
  import { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';
41
43
  import { useComponentsContext } from '../../contexts/componentsContext/ComponentsContext';
42
44
  import { useDebugContext } from '../../contexts/debugContext/DebugContext';
@@ -70,6 +72,7 @@ import { bumpOverlayLayoutRevision } from '../../state-store';
70
72
  import { MessageInputHeightState } from '../../state-store/message-input-height-store';
71
73
  import { primitives } from '../../theme';
72
74
  import { transitions } from '../../utils/transitions';
75
+ import { useIncomingMessageAnnouncements } from '../Accessibility/hooks/useIncomingMessageAnnouncements';
73
76
  import { MessageWrapper } from '../Message/MessageItemView/MessageWrapper';
74
77
 
75
78
  // This is just to make sure that the scrolling happens in a different task queue.
@@ -365,6 +368,13 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
365
368
  messageInputHeightStoreSelector,
366
369
  );
367
370
 
371
+ useIncomingMessageAnnouncements({
372
+ activeThreadId: thread?.id,
373
+ channel,
374
+ ownUserId: client.user?.id,
375
+ threadList,
376
+ });
377
+
368
378
  const myMessageThemeString = useMemo(() => JSON.stringify(myMessageTheme), [myMessageTheme]);
369
379
 
370
380
  const modifiedTheme = useMemo(
@@ -1037,6 +1047,19 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
1037
1047
  });
1038
1048
  });
1039
1049
 
1050
+ const scrollToBottomUnreadCount =
1051
+ scrollToBottomButtonVisible && !threadList ? channel?.countUnread() : undefined;
1052
+ const {
1053
+ accessibilityActions: messageListAccessibilityActions,
1054
+ onAccessibilityAction: messageListOnAccessibilityAction,
1055
+ } = useScrollToBottomAccessibilityAction({
1056
+ accessibilityActions: additionalFlatListProps?.accessibilityActions,
1057
+ onAccessibilityAction: additionalFlatListProps?.onAccessibilityAction,
1058
+ onScrollToBottom: goToNewMessages,
1059
+ unreadCount: scrollToBottomUnreadCount,
1060
+ visible: scrollToBottomButtonVisible,
1061
+ });
1062
+
1040
1063
  const scrollToIndexFailedRetryCountRef = useRef<number>(0);
1041
1064
  const failScrollTimeoutId = useRef<ReturnType<typeof setTimeout>>(undefined);
1042
1065
  const onScrollToIndexFailedRef = useRef<
@@ -1289,10 +1312,17 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
1289
1312
  testID='message-flat-list'
1290
1313
  viewabilityConfig={flatListViewabilityConfig}
1291
1314
  {...additionalFlatListPropsExcludingStyle}
1315
+ accessibilityActions={messageListAccessibilityActions}
1316
+ onAccessibilityAction={messageListOnAccessibilityAction}
1292
1317
  />
1293
1318
  </MessageListItemProvider>
1294
1319
  )}
1295
- <View style={styles.stickyHeaderContainer}>
1320
+ <View
1321
+ accessibilityElementsHidden
1322
+ accessible={false}
1323
+ importantForAccessibility='no-hide-descendants'
1324
+ style={styles.stickyHeaderContainer}
1325
+ >
1296
1326
  {messageListLengthAfterUpdate && StickyHeader ? (
1297
1327
  <StickyHeader date={stickyHeaderDate} />
1298
1328
  ) : null}
@@ -1312,7 +1342,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
1312
1342
  <ScrollToBottomButton
1313
1343
  onPress={goToNewMessages}
1314
1344
  showNotification={scrollToBottomButtonVisible}
1315
- unreadCount={threadList ? 0 : channel?.countUnread()}
1345
+ unreadCount={scrollToBottomUnreadCount}
1316
1346
  />
1317
1347
  </Animated.View>
1318
1348
  ) : null}
@@ -9,6 +9,10 @@ import { primitives } from '../../theme';
9
9
  import { BadgeNotification } from '../ui';
10
10
  import { Button } from '../ui/Button';
11
11
 
12
+ export const SCROLL_TO_BOTTOM_ACCESSIBILITY_LABEL_KEY = 'a11y/Scroll to bottom';
13
+ export const SCROLL_TO_BOTTOM_WITH_COUNT_ACCESSIBILITY_LABEL_KEY =
14
+ 'a11y/Scroll to bottom, {{count}} new messages';
15
+
12
16
  export type ScrollToBottomButtonProps = {
13
17
  /** onPress handler */
14
18
  onPress: () => void;
@@ -22,6 +26,10 @@ export const ScrollToBottomButton = (props: ScrollToBottomButtonProps) => {
22
26
  const {
23
27
  theme: { semantics },
24
28
  } = useTheme();
29
+ const accessibilityLabelParams = React.useMemo(
30
+ () => (unreadCount ? { count: unreadCount } : undefined),
31
+ [unreadCount],
32
+ );
25
33
 
26
34
  if (!showNotification) {
27
35
  return null;
@@ -42,6 +50,12 @@ export const ScrollToBottomButton = (props: ScrollToBottomButtonProps) => {
42
50
  ]}
43
51
  >
44
52
  <Button
53
+ accessibilityLabelKey={
54
+ unreadCount
55
+ ? SCROLL_TO_BOTTOM_WITH_COUNT_ACCESSIBILITY_LABEL_KEY
56
+ : SCROLL_TO_BOTTOM_ACCESSIBILITY_LABEL_KEY
57
+ }
58
+ accessibilityLabelParams={accessibilityLabelParams}
45
59
  variant='secondary'
46
60
  type='outline'
47
61
  LeadingIcon={Down}
@@ -52,7 +66,11 @@ export const ScrollToBottomButton = (props: ScrollToBottomButtonProps) => {
52
66
  />
53
67
  </View>
54
68
 
55
- <View style={styles.unreadCountNotificationContainer}>
69
+ <View
70
+ accessibilityElementsHidden
71
+ importantForAccessibility='no-hide-descendants'
72
+ style={styles.unreadCountNotificationContainer}
73
+ >
56
74
  {unreadCount ? (
57
75
  <BadgeNotification count={unreadCount} size='xs' type='primary' testID='unread-count' />
58
76
  ) : null}
@@ -84,6 +84,7 @@ export const UnreadMessagesNotification = (props: UnreadMessagesNotificationProp
84
84
  </View>
85
85
  <View style={styles.rightButtonContainer}>
86
86
  <Button
87
+ accessibilityLabelKey='a11y/Dismiss unread messages'
87
88
  variant='secondary'
88
89
  type='ghost'
89
90
  iconOnly