stream-chat-react-native-core 9.3.1-beta.6 → 9.3.1-beta.7

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 (205) hide show
  1. package/lib/commonjs/a11y/hooks/useAnnounceOnShow.js +27 -0
  2. package/lib/commonjs/a11y/hooks/useAnnounceOnShow.js.map +1 -0
  3. package/lib/commonjs/a11y/index.js +11 -0
  4. package/lib/commonjs/a11y/index.js.map +1 -1
  5. package/lib/commonjs/components/Accessibility/CompositeAccessibilityProbe.js +29 -0
  6. package/lib/commonjs/components/Accessibility/CompositeAccessibilityProbe.js.map +1 -0
  7. package/lib/commonjs/components/Accessibility/HiddenA11yText.js +30 -0
  8. package/lib/commonjs/components/Accessibility/HiddenA11yText.js.map +1 -0
  9. package/lib/commonjs/components/Accessibility/index.js +22 -0
  10. package/lib/commonjs/components/Accessibility/index.js.map +1 -1
  11. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +31 -29
  12. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  13. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMutedStatus.js +11 -5
  14. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMutedStatus.js.map +1 -1
  15. package/lib/commonjs/components/ChannelPreview/ChannelPreviewStatus.js +8 -1
  16. package/lib/commonjs/components/ChannelPreview/ChannelPreviewStatus.js.map +1 -1
  17. package/lib/commonjs/components/ChannelPreview/ChannelPreviewUnreadCount.js +8 -2
  18. package/lib/commonjs/components/ChannelPreview/ChannelPreviewUnreadCount.js.map +1 -1
  19. package/lib/commonjs/components/ChannelPreview/ChannelPreviewView.js +3 -0
  20. package/lib/commonjs/components/ChannelPreview/ChannelPreviewView.js.map +1 -1
  21. package/lib/commonjs/components/Message/MessageItemView/MessageContent.js +2 -1
  22. package/lib/commonjs/components/Message/MessageItemView/MessageContent.js.map +1 -1
  23. package/lib/commonjs/components/Message/MessageItemView/MessageFooter.js +2 -0
  24. package/lib/commonjs/components/Message/MessageItemView/MessageFooter.js.map +1 -1
  25. package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js +35 -30
  26. package/lib/commonjs/components/Message/MessageItemView/MessageStatus.js.map +1 -1
  27. package/lib/commonjs/components/Message/MessageItemView/ReactionList/ReactionListClustered.js +19 -6
  28. package/lib/commonjs/components/Message/MessageItemView/ReactionList/ReactionListClustered.js.map +1 -1
  29. package/lib/commonjs/components/Message/MessageItemView/ReactionList/ReactionListItem.js +6 -1
  30. package/lib/commonjs/components/Message/MessageItemView/ReactionList/ReactionListItem.js.map +1 -1
  31. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js +8 -0
  32. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  33. package/lib/commonjs/components/Poll/Poll.js +0 -17
  34. package/lib/commonjs/components/Poll/Poll.js.map +1 -1
  35. package/lib/commonjs/components/Reply/Reply.js +43 -6
  36. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  37. package/lib/commonjs/components/ui/Avatar/ChannelAvatar.js +17 -11
  38. package/lib/commonjs/components/ui/Avatar/ChannelAvatar.js.map +1 -1
  39. package/lib/commonjs/components/ui/Badge/BadgeNotification.js +3 -1
  40. package/lib/commonjs/components/ui/Badge/BadgeNotification.js.map +1 -1
  41. package/lib/commonjs/i18n/ar.json +20 -8
  42. package/lib/commonjs/i18n/en.json +17 -5
  43. package/lib/commonjs/i18n/es.json +17 -5
  44. package/lib/commonjs/i18n/fr.json +17 -5
  45. package/lib/commonjs/i18n/he.json +17 -5
  46. package/lib/commonjs/i18n/hi.json +18 -6
  47. package/lib/commonjs/i18n/it.json +17 -5
  48. package/lib/commonjs/i18n/ja.json +17 -5
  49. package/lib/commonjs/i18n/ko.json +17 -5
  50. package/lib/commonjs/i18n/nl.json +18 -6
  51. package/lib/commonjs/i18n/pt-br.json +19 -7
  52. package/lib/commonjs/i18n/ru.json +17 -5
  53. package/lib/commonjs/i18n/tr.json +18 -6
  54. package/lib/commonjs/version.json +1 -1
  55. package/lib/module/a11y/hooks/useAnnounceOnShow.js +27 -0
  56. package/lib/module/a11y/hooks/useAnnounceOnShow.js.map +1 -0
  57. package/lib/module/a11y/index.js +11 -0
  58. package/lib/module/a11y/index.js.map +1 -1
  59. package/lib/module/components/Accessibility/CompositeAccessibilityProbe.js +29 -0
  60. package/lib/module/components/Accessibility/CompositeAccessibilityProbe.js.map +1 -0
  61. package/lib/module/components/Accessibility/HiddenA11yText.js +30 -0
  62. package/lib/module/components/Accessibility/HiddenA11yText.js.map +1 -0
  63. package/lib/module/components/Accessibility/index.js +22 -0
  64. package/lib/module/components/Accessibility/index.js.map +1 -1
  65. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +31 -29
  66. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  67. package/lib/module/components/ChannelPreview/ChannelPreviewMutedStatus.js +11 -5
  68. package/lib/module/components/ChannelPreview/ChannelPreviewMutedStatus.js.map +1 -1
  69. package/lib/module/components/ChannelPreview/ChannelPreviewStatus.js +8 -1
  70. package/lib/module/components/ChannelPreview/ChannelPreviewStatus.js.map +1 -1
  71. package/lib/module/components/ChannelPreview/ChannelPreviewUnreadCount.js +8 -2
  72. package/lib/module/components/ChannelPreview/ChannelPreviewUnreadCount.js.map +1 -1
  73. package/lib/module/components/ChannelPreview/ChannelPreviewView.js +3 -0
  74. package/lib/module/components/ChannelPreview/ChannelPreviewView.js.map +1 -1
  75. package/lib/module/components/Message/MessageItemView/MessageContent.js +2 -1
  76. package/lib/module/components/Message/MessageItemView/MessageContent.js.map +1 -1
  77. package/lib/module/components/Message/MessageItemView/MessageFooter.js +2 -0
  78. package/lib/module/components/Message/MessageItemView/MessageFooter.js.map +1 -1
  79. package/lib/module/components/Message/MessageItemView/MessageStatus.js +35 -30
  80. package/lib/module/components/Message/MessageItemView/MessageStatus.js.map +1 -1
  81. package/lib/module/components/Message/MessageItemView/ReactionList/ReactionListClustered.js +19 -6
  82. package/lib/module/components/Message/MessageItemView/ReactionList/ReactionListClustered.js.map +1 -1
  83. package/lib/module/components/Message/MessageItemView/ReactionList/ReactionListItem.js +6 -1
  84. package/lib/module/components/Message/MessageItemView/ReactionList/ReactionListItem.js.map +1 -1
  85. package/lib/module/components/Message/hooks/useMessageActionHandlers.js +8 -0
  86. package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -1
  87. package/lib/module/components/Poll/Poll.js +0 -17
  88. package/lib/module/components/Poll/Poll.js.map +1 -1
  89. package/lib/module/components/Reply/Reply.js +43 -6
  90. package/lib/module/components/Reply/Reply.js.map +1 -1
  91. package/lib/module/components/ui/Avatar/ChannelAvatar.js +17 -11
  92. package/lib/module/components/ui/Avatar/ChannelAvatar.js.map +1 -1
  93. package/lib/module/components/ui/Badge/BadgeNotification.js +3 -1
  94. package/lib/module/components/ui/Badge/BadgeNotification.js.map +1 -1
  95. package/lib/module/i18n/ar.json +20 -8
  96. package/lib/module/i18n/en.json +17 -5
  97. package/lib/module/i18n/es.json +17 -5
  98. package/lib/module/i18n/fr.json +17 -5
  99. package/lib/module/i18n/he.json +17 -5
  100. package/lib/module/i18n/hi.json +18 -6
  101. package/lib/module/i18n/it.json +17 -5
  102. package/lib/module/i18n/ja.json +17 -5
  103. package/lib/module/i18n/ko.json +17 -5
  104. package/lib/module/i18n/nl.json +18 -6
  105. package/lib/module/i18n/pt-br.json +19 -7
  106. package/lib/module/i18n/ru.json +17 -5
  107. package/lib/module/i18n/tr.json +18 -6
  108. package/lib/module/version.json +1 -1
  109. package/lib/typescript/a11y/hooks/useAnnounceOnShow.d.ts +21 -0
  110. package/lib/typescript/a11y/hooks/useAnnounceOnShow.d.ts.map +1 -0
  111. package/lib/typescript/a11y/index.d.ts +1 -0
  112. package/lib/typescript/a11y/index.d.ts.map +1 -1
  113. package/lib/typescript/components/Accessibility/CompositeAccessibilityProbe.d.ts +30 -0
  114. package/lib/typescript/components/Accessibility/CompositeAccessibilityProbe.d.ts.map +1 -0
  115. package/lib/typescript/components/Accessibility/HiddenA11yText.d.ts +25 -0
  116. package/lib/typescript/components/Accessibility/HiddenA11yText.d.ts.map +1 -0
  117. package/lib/typescript/components/Accessibility/index.d.ts +2 -0
  118. package/lib/typescript/components/Accessibility/index.d.ts.map +1 -1
  119. package/lib/typescript/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.d.ts.map +1 -1
  120. package/lib/typescript/components/ChannelPreview/ChannelPreviewMutedStatus.d.ts.map +1 -1
  121. package/lib/typescript/components/ChannelPreview/ChannelPreviewStatus.d.ts.map +1 -1
  122. package/lib/typescript/components/ChannelPreview/ChannelPreviewUnreadCount.d.ts.map +1 -1
  123. package/lib/typescript/components/ChannelPreview/ChannelPreviewView.d.ts.map +1 -1
  124. package/lib/typescript/components/Message/MessageItemView/MessageContent.d.ts.map +1 -1
  125. package/lib/typescript/components/Message/MessageItemView/MessageFooter.d.ts.map +1 -1
  126. package/lib/typescript/components/Message/MessageItemView/MessageStatus.d.ts.map +1 -1
  127. package/lib/typescript/components/Message/MessageItemView/ReactionList/ReactionListClustered.d.ts.map +1 -1
  128. package/lib/typescript/components/Message/MessageItemView/ReactionList/ReactionListItem.d.ts.map +1 -1
  129. package/lib/typescript/components/Message/MessageOverlayWrapper.d.ts +1 -1
  130. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts.map +1 -1
  131. package/lib/typescript/components/Poll/Poll.d.ts.map +1 -1
  132. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  133. package/lib/typescript/components/ui/Avatar/ChannelAvatar.d.ts.map +1 -1
  134. package/lib/typescript/components/ui/Badge/BadgeNotification.d.ts +5 -0
  135. package/lib/typescript/components/ui/Badge/BadgeNotification.d.ts.map +1 -1
  136. package/lib/typescript/hooks/useTranslatedMessage.d.ts +1 -1
  137. package/lib/typescript/i18n/ar.json +20 -8
  138. package/lib/typescript/i18n/en.json +17 -5
  139. package/lib/typescript/i18n/es.json +17 -5
  140. package/lib/typescript/i18n/fr.json +17 -5
  141. package/lib/typescript/i18n/he.json +17 -5
  142. package/lib/typescript/i18n/hi.json +18 -6
  143. package/lib/typescript/i18n/it.json +17 -5
  144. package/lib/typescript/i18n/ja.json +17 -5
  145. package/lib/typescript/i18n/ko.json +17 -5
  146. package/lib/typescript/i18n/nl.json +18 -6
  147. package/lib/typescript/i18n/pt-br.json +19 -7
  148. package/lib/typescript/i18n/ru.json +17 -5
  149. package/lib/typescript/i18n/tr.json +18 -6
  150. package/lib/typescript/utils/i18n/Streami18n.d.ts +16 -4
  151. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  152. package/package.json +1 -1
  153. package/src/a11y/hooks/useAnnounceOnShow.ts +44 -0
  154. package/src/a11y/index.ts +1 -0
  155. package/src/components/Accessibility/CompositeAccessibilityProbe.tsx +48 -0
  156. package/src/components/Accessibility/HiddenA11yText.tsx +49 -0
  157. package/src/components/Accessibility/index.ts +2 -0
  158. package/src/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.tsx +19 -16
  159. package/src/components/ChannelPreview/ChannelPreviewMutedStatus.tsx +8 -1
  160. package/src/components/ChannelPreview/ChannelPreviewStatus.tsx +10 -4
  161. package/src/components/ChannelPreview/ChannelPreviewUnreadCount.tsx +5 -1
  162. package/src/components/ChannelPreview/ChannelPreviewView.tsx +3 -0
  163. package/src/components/Message/MessageItemView/MessageContent.tsx +12 -1
  164. package/src/components/Message/MessageItemView/MessageFooter.tsx +6 -1
  165. package/src/components/Message/MessageItemView/MessageStatus.tsx +36 -39
  166. package/src/components/Message/MessageItemView/ReactionList/ReactionListClustered.tsx +24 -10
  167. package/src/components/Message/MessageItemView/ReactionList/ReactionListItem.tsx +5 -1
  168. package/src/components/Message/MessageItemView/__tests__/MessageStatus.test.tsx +10 -7
  169. package/src/components/Message/MessageItemView/__tests__/ReactionListBottom.test.tsx +1 -1
  170. package/src/components/Message/hooks/useMessageActionHandlers.ts +7 -0
  171. package/src/components/Poll/Poll.tsx +1 -25
  172. package/src/components/Reply/Reply.tsx +58 -7
  173. package/src/components/Thread/__tests__/__snapshots__/Thread.test.tsx.snap +8 -0
  174. package/src/components/ui/Avatar/ChannelAvatar.tsx +39 -29
  175. package/src/components/ui/Badge/BadgeNotification.tsx +11 -2
  176. package/src/i18n/ar.json +20 -8
  177. package/src/i18n/en.json +17 -5
  178. package/src/i18n/es.json +17 -5
  179. package/src/i18n/fr.json +17 -5
  180. package/src/i18n/he.json +17 -5
  181. package/src/i18n/hi.json +18 -6
  182. package/src/i18n/it.json +17 -5
  183. package/src/i18n/ja.json +17 -5
  184. package/src/i18n/ko.json +17 -5
  185. package/src/i18n/nl.json +18 -6
  186. package/src/i18n/pt-br.json +19 -7
  187. package/src/i18n/ru.json +17 -5
  188. package/src/i18n/tr.json +18 -6
  189. package/src/version.json +1 -1
  190. package/lib/commonjs/components/Poll/hooks/usePollAccessibilityActions.js +0 -150
  191. package/lib/commonjs/components/Poll/hooks/usePollAccessibilityActions.js.map +0 -1
  192. package/lib/commonjs/components/Poll/hooks/usePollAccessibilityLabel.js +0 -59
  193. package/lib/commonjs/components/Poll/hooks/usePollAccessibilityLabel.js.map +0 -1
  194. package/lib/module/components/Poll/hooks/usePollAccessibilityActions.js +0 -150
  195. package/lib/module/components/Poll/hooks/usePollAccessibilityActions.js.map +0 -1
  196. package/lib/module/components/Poll/hooks/usePollAccessibilityLabel.js +0 -59
  197. package/lib/module/components/Poll/hooks/usePollAccessibilityLabel.js.map +0 -1
  198. package/lib/typescript/components/Poll/hooks/usePollAccessibilityActions.d.ts +0 -25
  199. package/lib/typescript/components/Poll/hooks/usePollAccessibilityActions.d.ts.map +0 -1
  200. package/lib/typescript/components/Poll/hooks/usePollAccessibilityLabel.d.ts +0 -8
  201. package/lib/typescript/components/Poll/hooks/usePollAccessibilityLabel.d.ts.map +0 -1
  202. package/src/components/Poll/hooks/__tests__/usePollAccessibilityActions.test.tsx +0 -358
  203. package/src/components/Poll/hooks/__tests__/usePollAccessibilityLabel.test.tsx +0 -142
  204. package/src/components/Poll/hooks/usePollAccessibilityActions.ts +0 -191
  205. package/src/components/Poll/hooks/usePollAccessibilityLabel.ts +0 -75
@@ -5,10 +5,12 @@ import { UserResponse } from 'stream-chat';
5
5
 
6
6
  import { useUserMuteActive } from './useUserMuteActive';
7
7
 
8
+ import { useScreenReaderEnabled } from '../../../a11y/hooks/useScreenReaderEnabled';
8
9
  import type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';
9
10
  import type { ChatContextValue } from '../../../contexts/chatContext/ChatContext';
10
11
  import { MessageComposerAPIContextValue } from '../../../contexts/messageComposerContext/MessageComposerAPIContext';
11
12
  import type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';
13
+ import { useMessageInputContext } from '../../../contexts/messageInputContext/MessageInputContext';
12
14
  import type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';
13
15
 
14
16
  import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
@@ -67,6 +69,8 @@ export const useMessageActionHandlers = ({
67
69
  Pick<MessageComposerAPIContextValue, 'setEditingState' | 'setQuotedMessage'>) => {
68
70
  const { t } = useTranslationContext();
69
71
  const { addNotification } = useNotificationApi();
72
+ const { inputBoxRef } = useMessageInputContext();
73
+ const screenReaderEnabled = useScreenReaderEnabled();
70
74
  const handleResendMessage = useStableCallback(() => retrySendMessage(message));
71
75
  const translatedMessage = useTranslatedMessage(message);
72
76
 
@@ -74,6 +78,9 @@ export const useMessageActionHandlers = ({
74
78
 
75
79
  const handleQuotedReplyMessage = useStableCallback(() => {
76
80
  setQuotedMessage(message);
81
+ if (screenReaderEnabled) {
82
+ inputBoxRef.current?.focus();
83
+ }
77
84
  });
78
85
 
79
86
  const handleCopyMessage = useStableCallback(() => {
@@ -6,18 +6,14 @@ import { PollOption as PollOptionClass } from 'stream-chat';
6
6
  import { PollOption, ShowAllOptionsButton } from './components';
7
7
  import { PollUIStateProvider } from './contexts/PollUIStateContext';
8
8
 
9
- import { usePollAccessibilityActions } from './hooks/usePollAccessibilityActions';
10
- import { usePollAccessibilityLabel } from './hooks/usePollAccessibilityLabel';
11
9
  import { usePollState } from './hooks/usePollState';
12
10
 
13
- import { useA11yLabel } from '../../a11y/hooks/useA11yLabel';
14
11
  import {
15
12
  PollContextProvider,
16
13
  PollContextValue,
17
14
  useTheme,
18
15
  useTranslationContext,
19
16
  } from '../../contexts';
20
- import { useAccessibilityContext } from '../../contexts/accessibilityContext/AccessibilityContext';
21
17
  import { useComponentsContext } from '../../contexts/componentsContext/ComponentsContext';
22
18
 
23
19
  import { primitives } from '../../theme';
@@ -66,10 +62,6 @@ export const PollContent = () => {
66
62
  const styles = useStyles();
67
63
  const { PollButtons: PollButtonsComponent, PollHeader: PollHeaderComponent } =
68
64
  useComponentsContext();
69
- const { enabled: a11yEnabled } = useAccessibilityContext();
70
- const accessibilityHint = useA11yLabel('a11y/Double tap and hold to activate contextual menu');
71
- const accessibilityLabel = usePollAccessibilityLabel();
72
- const { accessibilityActions, onAccessibilityAction } = usePollAccessibilityActions();
73
65
 
74
66
  const {
75
67
  theme: {
@@ -79,24 +71,8 @@ export const PollContent = () => {
79
71
  },
80
72
  } = useTheme();
81
73
 
82
- // NOTE: Android custom accessibilityActions are broken in RN < 0.83.2 —
83
- // see facebook/react-native#47268, fixed by PR #52724. On affected versions
84
- // the actions menu surfaces only a subset of the list and dispatch
85
- // announces "Action not supported". iOS works correctly on all versions.
86
- // Once the SDK's minimum RN reaches 0.83.2, wrap the descendants below in
87
- // <View importantForAccessibility='no-hide-descendants'> so Android
88
- // TalkBack groups them under the composite rather than exposing each
89
- // interactive child as a separate focus stop.
90
74
  return (
91
- <View
92
- accessibilityActions={accessibilityActions}
93
- accessibilityHint={accessibilityHint}
94
- accessibilityLabel={accessibilityLabel}
95
- accessibilityRole={a11yEnabled ? 'button' : undefined}
96
- accessible={a11yEnabled || undefined}
97
- onAccessibilityAction={onAccessibilityAction}
98
- style={[styles.container, container]}
99
- >
75
+ <View style={[styles.container, container]}>
100
76
  <PollHeaderComponent />
101
77
  <View style={[styles.optionsWrapper, optionsWrapper]}>
102
78
  {options?.slice(0, defaultPollOptionCount)?.map((option: PollOptionClass) => (
@@ -20,6 +20,7 @@ import {
20
20
 
21
21
  import { ReplyMessageView } from './ReplyMessageView';
22
22
 
23
+ import { useAnnounceOnShow } from '../../a11y/hooks/useAnnounceOnShow';
23
24
  import { useChatContext } from '../../contexts/chatContext/ChatContext';
24
25
  import { useComponentsContext } from '../../contexts/componentsContext/ComponentsContext';
25
26
  import {
@@ -42,6 +43,8 @@ const messageComposerStateStoreSelector = (state: MessageComposerState) => ({
42
43
  quotedMessage: state.quotedMessage,
43
44
  });
44
45
 
46
+ const ANNOUNCEMENT_TEXT_MAX_LENGTH = 120;
47
+
45
48
  const RightContent = React.memo(
46
49
  (props: Pick<ReplyPropsWithContext, 'ImageComponent' | 'message'>) => {
47
50
  const { ImageComponent, message } = props;
@@ -234,6 +237,43 @@ export const MemoizedReply = React.memo(ReplyWithContext, areEqual) as typeof Re
234
237
  export type ReplyProps = Partial<ReplyPropsWithContext> &
235
238
  Pick<ReplyPropsWithContext, 'mode' | 'onDismiss'>;
236
239
 
240
+ /**
241
+ * Mounted only when the Reply is rendered as the composer header preview
242
+ * (edit/reply). Keeps the translation + announcer subscriptions off the
243
+ * per-row in-message quoted-reply render path.
244
+ */
245
+ const ReplyComposerAnnouncer = ({
246
+ message,
247
+ mode,
248
+ }: {
249
+ message: ReplyPropsWithContext['quotedMessage'];
250
+ mode: ReplyPropsWithContext['mode'];
251
+ }) => {
252
+ const { t } = useTranslationContext();
253
+ const truncatedText = useMemo(() => {
254
+ const raw = message?.text?.trim();
255
+ if (!raw) return undefined;
256
+ return raw.length > ANNOUNCEMENT_TEXT_MAX_LENGTH
257
+ ? `${raw.slice(0, ANNOUNCEMENT_TEXT_MAX_LENGTH).trimEnd()}…`
258
+ : raw;
259
+ }, [message?.text]);
260
+ const announcement = useMemo(() => {
261
+ if (mode === 'edit') {
262
+ return truncatedText
263
+ ? t('a11y/Editing message: {{text}}', { text: truncatedText })
264
+ : t('a11y/Editing message');
265
+ }
266
+ const name = message?.user?.name;
267
+ if (!name) return undefined;
268
+ return truncatedText
269
+ ? t('a11y/Replying to {{user}}: {{text}}', { text: truncatedText, user: name })
270
+ : t('a11y/Replying to {{user}}', { user: name });
271
+ }, [mode, message?.user?.name, truncatedText, t]);
272
+
273
+ useAnnounceOnShow(true, announcement);
274
+ return null;
275
+ };
276
+
237
277
  export const Reply = (props: ReplyProps) => {
238
278
  const { message: messageFromContext } = useMessageContext();
239
279
  const { client } = useChatContext();
@@ -251,14 +291,25 @@ export const Reply = (props: ReplyProps) => {
251
291
 
252
292
  const isMyMessage = client.user?.id === quotedMessage?.user?.id;
253
293
 
294
+ // Composer header passes `onDismiss`; the in-message quoted-reply renderer
295
+ // does not. Only the composer-preview path pays for announcement work.
296
+ const isComposerPreview = !!props.onDismiss;
297
+
254
298
  return (
255
- <MemoizedReply
256
- ImageComponent={ImageComponent}
257
- isMyMessage={isMyMessage}
258
- message={messageFromContext}
259
- quotedMessage={quotedMessage}
260
- {...props}
261
- />
299
+ <>
300
+ {isComposerPreview ? (
301
+ // Edit passes the message via `quotedMessage` prop; reply uses the
302
+ // composer-state quoted message we computed locally.
303
+ <ReplyComposerAnnouncer message={props.quotedMessage ?? quotedMessage} mode={props.mode} />
304
+ ) : null}
305
+ <MemoizedReply
306
+ ImageComponent={ImageComponent}
307
+ isMyMessage={isMyMessage}
308
+ message={messageFromContext}
309
+ quotedMessage={quotedMessage}
310
+ {...props}
311
+ />
312
+ </>
262
313
  );
263
314
  };
264
315
 
@@ -588,6 +588,8 @@ exports[`Thread should match thread snapshot 1`] = `
588
588
  </View>
589
589
  </View>
590
590
  <View
591
+ accessibilityRole="text"
592
+ accessible={true}
591
593
  style={
592
594
  [
593
595
  {
@@ -920,6 +922,8 @@ exports[`Thread should match thread snapshot 1`] = `
920
922
  </View>
921
923
  </View>
922
924
  <View
925
+ accessibilityRole="text"
926
+ accessible={true}
923
927
  style={
924
928
  [
925
929
  {
@@ -1285,6 +1289,8 @@ exports[`Thread should match thread snapshot 1`] = `
1285
1289
  </View>
1286
1290
  </View>
1287
1291
  <View
1292
+ accessibilityRole="text"
1293
+ accessible={true}
1288
1294
  style={
1289
1295
  [
1290
1296
  {
@@ -1611,6 +1617,8 @@ exports[`Thread should match thread snapshot 1`] = `
1611
1617
  </View>
1612
1618
  </View>
1613
1619
  <View
1620
+ accessibilityRole="text"
1621
+ accessible={true}
1614
1622
  style={
1615
1623
  [
1616
1624
  {
@@ -8,10 +8,12 @@ import { UserAvatarGroup } from './AvatarGroup';
8
8
 
9
9
  import { UserAvatar } from './UserAvatar';
10
10
 
11
+ import { useA11yLabel } from '../../../a11y/hooks/useA11yLabel';
11
12
  import { useChannelPreviewDisplayPresence } from '../../../components/ChannelPreview/hooks/useChannelPreviewDisplayPresence';
12
13
  import { useChatContext } from '../../../contexts/chatContext/ChatContext';
13
14
  import { useTheme } from '../../../contexts/themeContext/ThemeContext';
14
15
  import { hashStringToNumber } from '../../../utils/utils';
16
+ import { CompositeAccessibilityProbe } from '../../Accessibility/CompositeAccessibilityProbe';
15
17
 
16
18
  export type ChannelAvatarProps = {
17
19
  channel: Channel;
@@ -47,34 +49,42 @@ export const ChannelAvatar = (props: ChannelAvatarProps) => {
47
49
 
48
50
  const channelName = (channel.data?.name as string | undefined) ?? channel.cid;
49
51
 
50
- if (channelImage) {
51
- return (
52
- <Avatar
53
- backgroundColor={avatarBackgroundColor}
54
- imageUrl={channelImage}
55
- name={channelName}
56
- showBorder={showBorder}
57
- size={size}
58
- />
59
- );
60
- }
52
+ const memberCount = Object.keys(channel.state.members).length;
53
+ const isGroup = !!channel.data?.name || memberCount > 2;
54
+ const otherUserName = usersWithoutSelf[0]?.name || usersWithoutSelf[0]?.id;
55
+ const labelParams = useMemo(
56
+ () => ({ count: memberCount, name: otherUserName ?? '' }),
57
+ [memberCount, otherUserName],
58
+ );
59
+ const accessibilityLabel = useA11yLabel(
60
+ isGroup ? 'a11y/Channel with {{count}} members' : 'a11y/Direct chat with {{name}}',
61
+ labelParams,
62
+ );
61
63
 
62
- if (usersWithoutSelf.length > 1) {
63
- return (
64
- <UserAvatarGroup
65
- size={size}
66
- users={usersForGroup}
67
- showOnlineIndicator={showOnlineIndicator}
68
- />
69
- );
70
- } else {
71
- return (
72
- <UserAvatar
73
- user={usersWithoutSelf[0]}
74
- size={size}
75
- showBorder={showBorder}
76
- showOnlineIndicator={showOnlineIndicator}
77
- />
78
- );
79
- }
64
+ return (
65
+ <CompositeAccessibilityProbe label={accessibilityLabel}>
66
+ {channelImage ? (
67
+ <Avatar
68
+ backgroundColor={avatarBackgroundColor}
69
+ imageUrl={channelImage}
70
+ name={channelName}
71
+ showBorder={showBorder}
72
+ size={size}
73
+ />
74
+ ) : usersWithoutSelf.length > 1 ? (
75
+ <UserAvatarGroup
76
+ size={size}
77
+ users={usersForGroup}
78
+ showOnlineIndicator={showOnlineIndicator}
79
+ />
80
+ ) : (
81
+ <UserAvatar
82
+ user={usersWithoutSelf[0]}
83
+ size={size}
84
+ showBorder={showBorder}
85
+ showOnlineIndicator={showOnlineIndicator}
86
+ />
87
+ )}
88
+ </CompositeAccessibilityProbe>
89
+ );
80
90
  };
@@ -9,6 +9,11 @@ export type BadgeNotificationProps = {
9
9
  count: number;
10
10
  size: 'sm' | 'xs';
11
11
  testID?: string;
12
+ /**
13
+ * Optional accessibility label override. When provided, screen readers
14
+ * announce this string instead of the bare count.
15
+ */
16
+ accessibilityLabel?: string;
12
17
  };
13
18
 
14
19
  const sizes = {
@@ -34,7 +39,7 @@ const textStyles = {
34
39
  };
35
40
 
36
41
  export const BadgeNotification = (props: BadgeNotificationProps) => {
37
- const { type = 'primary', count, size = 'sm', testID } = props;
42
+ const { accessibilityLabel, type = 'primary', count, size = 'sm', testID } = props;
38
43
  const styles = useStyles();
39
44
  const {
40
45
  theme: { semantics },
@@ -49,7 +54,11 @@ export const BadgeNotification = (props: BadgeNotificationProps) => {
49
54
  return (
50
55
  <View style={styles.border}>
51
56
  <View style={[styles.container, { backgroundColor: colors[type] }, sizes[size]]}>
52
- <Text style={[styles.text, textStyles[size]]} testID={testID}>
57
+ <Text
58
+ accessibilityLabel={accessibilityLabel}
59
+ style={[styles.text, textStyles[size]]}
60
+ testID={testID}
61
+ >
53
62
  {count}
54
63
  </Text>
55
64
  </View>
package/src/i18n/ar.json CHANGED
@@ -253,28 +253,43 @@
253
253
  "a11y/AI is generating": "AI is generating",
254
254
  "a11y/AI is thinking": "AI is thinking",
255
255
  "a11y/Avatar of {{name}}": "Avatar of {{name}}",
256
+ "a11y/Channel with {{count}} members": "قناة بها {{count}} أعضاء",
256
257
  "a11y/Connected": "Connected",
257
- "a11y/Delivered": "Delivered",
258
+ "a11y/Delivered": "تم التسليم",
259
+ "a11y/Delivered, sent by you": "تم التسليم، مُرسلة منك",
260
+ "a11y/Direct chat with {{name}}": "محادثة مباشرة مع {{name}}",
261
+ "a11y/Double tap to open": "انقر مرتين للفتح",
262
+ "a11y/Double tap to view reactions": "انقر مرتين لعرض التفاعلات",
263
+ "a11y/Editing message": "تعديل الرسالة",
264
+ "a11y/Editing message: {{text}}": "تعديل الرسالة: {{text}}",
265
+ "a11y/Last message {{date}}": "آخر رسالة {{date}}",
258
266
  "a11y/Loading": "Loading",
259
267
  "a11y/Loading failed": "Loading failed",
260
268
  "a11y/Message actions": "Message actions",
269
+ "a11y/Muted": "مكتوم",
261
270
  "a11y/New message from {{user}}": "New message from {{user}}",
262
271
  "a11y/Offline": "Offline",
263
272
  "a11y/Open message actions": "Open message actions",
264
273
  "a11y/Reaction {{emoji}} by {{count}} users": "Reaction {{emoji}} by {{count}} users",
265
- "a11y/Read": "Read",
274
+ "a11y/Read": "مقروءة",
275
+ "a11y/Read, sent by you": "مقروءة، مُرسلة منك",
266
276
  "a11y/Reconnecting": "Reconnecting",
267
277
  "a11y/Reply to {{user}}": "Reply to {{user}}",
268
278
  "a11y/Remove edit": "Remove edit",
269
279
  "a11y/Remove reply": "Remove reply",
280
+ "a11y/Replying to {{user}}": "الرد على {{user}}",
281
+ "a11y/Replying to {{user}}: {{text}}": "الرد على {{user}}: {{text}}",
270
282
  "a11y/Scroll to bottom": "Scroll to bottom",
271
283
  "a11y/Scroll to bottom, {{count}} new messages": "Scroll to bottom, {{count}} new messages",
272
284
  "a11y/Scroll to latest": "Scroll to latest",
273
285
  "a11y/Scroll to latest, {{count}} unread": "Scroll to latest, {{count}} unread",
274
286
  "a11y/Send message": "Send message",
275
287
  "a11y/Sending": "Sending",
276
- "a11y/Sent": "Sent",
288
+ "a11y/Sent": "مُرسلة",
289
+ "a11y/Sent by you": "مُرسلة منك",
277
290
  "a11y/Voice message recording. Hold to record.": "Voice message recording. Hold to record.",
291
+ "a11y/and {{count}} more reactions": "و{{count}} تفاعلات أخرى",
292
+ "a11y/you reacted": "تفاعلت",
278
293
  "a11y/{{count}} new messages": "{{count}} new messages",
279
294
  "a11y/Add attachment": "Add attachment",
280
295
  "a11y/Close attachments": "Close attachments",
@@ -352,12 +367,9 @@
352
367
  "size limit": "حد الحجم",
353
368
  "unknown error": "خطأ غير معروف",
354
369
  "unsupported file type": "نوع ملف غير مدعوم",
355
- "a11y/Activate to view results": "فعّل لعرض النتائج",
356
- "a11y/End vote": "إنهاء التصويت",
357
- "a11y/Show all options": "إظهار جميع الخيارات",
358
- "a11y/Vote on {{option}}": "صوّت على {{option}}",
359
370
  "a11y/Double tap and hold to activate contextual menu": "انقر نقرًا مزدوجًا مع الاستمرار لتفعيل قائمة السياق",
360
371
  "a11y/Swipe right to go through different actions": "اسحب لليمين للتنقل بين الإجراءات المختلفة",
361
372
  "a11y/Close": "Close",
362
- "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss."
373
+ "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.",
374
+ "a11y/{{count}} unread messages": "{{count}} رسائل غير مقروءة"
363
375
  }
package/src/i18n/en.json CHANGED
@@ -253,20 +253,32 @@
253
253
  "a11y/AI is generating": "AI is generating",
254
254
  "a11y/AI is thinking": "AI is thinking",
255
255
  "a11y/Avatar of {{name}}": "Avatar of {{name}}",
256
+ "a11y/Channel with {{count}} members": "Channel with {{count}} members",
256
257
  "a11y/Connected": "Connected",
257
258
  "a11y/Delivered": "Delivered",
259
+ "a11y/Delivered, sent by you": "Delivered, sent by you",
260
+ "a11y/Direct chat with {{name}}": "Direct chat with {{name}}",
261
+ "a11y/Double tap to open": "Double tap to open",
262
+ "a11y/Double tap to view reactions": "Double tap to view reactions",
263
+ "a11y/Editing message": "Editing message",
264
+ "a11y/Editing message: {{text}}": "Editing message: {{text}}",
265
+ "a11y/Last message {{date}}": "Last message {{date}}",
258
266
  "a11y/Loading": "Loading",
259
267
  "a11y/Loading failed": "Loading failed",
260
268
  "a11y/Message actions": "Message actions",
269
+ "a11y/Muted": "Muted",
261
270
  "a11y/New message from {{user}}": "New message from {{user}}",
262
271
  "a11y/Offline": "Offline",
263
272
  "a11y/Open message actions": "Open message actions",
264
273
  "a11y/Reaction {{emoji}} by {{count}} users": "Reaction {{emoji}} by {{count}} users",
265
274
  "a11y/Read": "Read",
275
+ "a11y/Read, sent by you": "Read, sent by you",
266
276
  "a11y/Reconnecting": "Reconnecting",
267
277
  "a11y/Reply to {{user}}": "Reply to {{user}}",
268
278
  "a11y/Remove edit": "Remove edit",
269
279
  "a11y/Remove reply": "Remove reply",
280
+ "a11y/Replying to {{user}}": "Replying to {{user}}",
281
+ "a11y/Replying to {{user}}: {{text}}": "Replying to {{user}}: {{text}}",
270
282
  "a11y/Scroll to bottom": "Scroll to bottom",
271
283
  "a11y/Scroll to bottom, {{count}} new messages": "Scroll to bottom, {{count}} new messages",
272
284
  "a11y/Scroll to latest": "Scroll to latest",
@@ -274,7 +286,10 @@
274
286
  "a11y/Send message": "Send message",
275
287
  "a11y/Sending": "Sending",
276
288
  "a11y/Sent": "Sent",
289
+ "a11y/Sent by you": "Sent by you",
277
290
  "a11y/Voice message recording. Hold to record.": "Voice message recording. Hold to record.",
291
+ "a11y/and {{count}} more reactions": "and {{count}} more reactions",
292
+ "a11y/you reacted": "you reacted",
278
293
  "a11y/{{count}} new messages": "{{count}} new messages",
279
294
  "a11y/Add attachment": "Add attachment",
280
295
  "a11y/Close attachments": "Close attachments",
@@ -308,14 +323,10 @@
308
323
  "a11y/Stop voice recording": "Stop voice recording",
309
324
  "a11y/Notifications": "Notifications",
310
325
  "a11y/Dismiss notification": "Dismiss notification",
311
- "a11y/Activate to view results": "Activate to view results",
312
326
  "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.",
313
327
  "a11y/Close": "Close",
314
328
  "a11y/Double tap and hold to activate contextual menu": "Double tap and hold to activate contextual menu",
315
- "a11y/End vote": "End vote",
316
- "a11y/Show all options": "Show all options",
317
329
  "a11y/Swipe right to go through different actions": "Swipe right to go through different actions",
318
- "a11y/Vote on {{option}}": "Vote on {{option}}",
319
330
  "Attachment upload blocked due to {{reason}}": "Attachment upload blocked due to {{reason}}",
320
331
  "Attachment upload failed due to {{reason}}": "Attachment upload failed due to {{reason}}",
321
332
  "Command not available": "Command not available",
@@ -359,5 +370,6 @@
359
370
  "{{ user }} has been unmuted": "{{ user }} has been unmuted",
360
371
  "size limit": "size limit",
361
372
  "unknown error": "unknown error",
362
- "unsupported file type": "unsupported file type"
373
+ "unsupported file type": "unsupported file type",
374
+ "a11y/{{count}} unread messages": "{{count}} unread messages"
363
375
  }
package/src/i18n/es.json CHANGED
@@ -253,20 +253,32 @@
253
253
  "a11y/AI is generating": "La IA está generando",
254
254
  "a11y/AI is thinking": "La IA está pensando",
255
255
  "a11y/Avatar of {{name}}": "Avatar de {{name}}",
256
+ "a11y/Channel with {{count}} members": "Canal con {{count}} miembros",
256
257
  "a11y/Connected": "Conectado",
257
258
  "a11y/Delivered": "Entregado",
259
+ "a11y/Delivered, sent by you": "Entregado, enviado por ti",
260
+ "a11y/Direct chat with {{name}}": "Chat directo con {{name}}",
261
+ "a11y/Double tap to open": "Toca dos veces para abrir",
262
+ "a11y/Double tap to view reactions": "Toca dos veces para ver las reacciones",
263
+ "a11y/Editing message": "Editando mensaje",
264
+ "a11y/Editing message: {{text}}": "Editando mensaje: {{text}}",
265
+ "a11y/Last message {{date}}": "Último mensaje {{date}}",
258
266
  "a11y/Loading": "Cargando",
259
267
  "a11y/Loading failed": "Error al cargar",
260
268
  "a11y/Message actions": "Acciones del mensaje",
269
+ "a11y/Muted": "Silenciado",
261
270
  "a11y/New message from {{user}}": "Nuevo mensaje de {{user}}",
262
271
  "a11y/Offline": "Sin conexión",
263
272
  "a11y/Open message actions": "Abrir acciones del mensaje",
264
273
  "a11y/Reaction {{emoji}} by {{count}} users": "Reacción {{emoji}} de {{count}} usuarios",
265
274
  "a11y/Read": "Leído",
275
+ "a11y/Read, sent by you": "Leído, enviado por ti",
266
276
  "a11y/Reconnecting": "Reconectando",
267
277
  "a11y/Reply to {{user}}": "Responder a {{user}}",
268
278
  "a11y/Remove edit": "Eliminar edición",
269
279
  "a11y/Remove reply": "Eliminar respuesta",
280
+ "a11y/Replying to {{user}}": "Respondiendo a {{user}}",
281
+ "a11y/Replying to {{user}}: {{text}}": "Respondiendo a {{user}}: {{text}}",
270
282
  "a11y/Scroll to bottom": "Ir al final",
271
283
  "a11y/Scroll to bottom, {{count}} new messages": "Ir al final, {{count}} mensajes nuevos",
272
284
  "a11y/Scroll to latest": "Ir al último mensaje",
@@ -274,7 +286,10 @@
274
286
  "a11y/Send message": "Enviar mensaje",
275
287
  "a11y/Sending": "Enviando",
276
288
  "a11y/Sent": "Enviado",
289
+ "a11y/Sent by you": "Enviado por ti",
277
290
  "a11y/Voice message recording. Hold to record.": "Grabación de mensaje de voz. Mantén pulsado para grabar.",
291
+ "a11y/and {{count}} more reactions": "y {{count}} reacciones más",
292
+ "a11y/you reacted": "tú reaccionaste",
278
293
  "a11y/{{count}} new messages": "{{count}} mensajes nuevos",
279
294
  "a11y/Add attachment": "Add attachment",
280
295
  "a11y/Close attachments": "Close attachments",
@@ -352,12 +367,9 @@
352
367
  "size limit": "límite de tamaño",
353
368
  "unknown error": "error desconocido",
354
369
  "unsupported file type": "tipo de archivo no compatible",
355
- "a11y/Activate to view results": "Activa para ver los resultados",
356
- "a11y/End vote": "Finalizar votación",
357
- "a11y/Show all options": "Mostrar todas las opciones",
358
- "a11y/Vote on {{option}}": "Votar por {{option}}",
359
370
  "a11y/Double tap and hold to activate contextual menu": "Toca dos veces y mantén pulsado para activar el menú contextual",
360
371
  "a11y/Swipe right to go through different actions": "Desliza a la derecha para recorrer las diferentes acciones",
361
372
  "a11y/Close": "Close",
362
- "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss."
373
+ "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.",
374
+ "a11y/{{count}} unread messages": "{{count}} mensajes sin leer"
363
375
  }
package/src/i18n/fr.json CHANGED
@@ -253,20 +253,32 @@
253
253
  "a11y/AI is generating": "L'IA génère une réponse",
254
254
  "a11y/AI is thinking": "L'IA réfléchit",
255
255
  "a11y/Avatar of {{name}}": "Avatar de {{name}}",
256
+ "a11y/Channel with {{count}} members": "Canal avec {{count}} membres",
256
257
  "a11y/Connected": "Connecté",
257
258
  "a11y/Delivered": "Distribué",
259
+ "a11y/Delivered, sent by you": "Distribué, envoyé par vous",
260
+ "a11y/Direct chat with {{name}}": "Discussion directe avec {{name}}",
261
+ "a11y/Double tap to open": "Appuyez deux fois pour ouvrir",
262
+ "a11y/Double tap to view reactions": "Appuyez deux fois pour voir les réactions",
263
+ "a11y/Editing message": "Modification du message",
264
+ "a11y/Editing message: {{text}}": "Modification du message : {{text}}",
265
+ "a11y/Last message {{date}}": "Dernier message {{date}}",
258
266
  "a11y/Loading": "Chargement",
259
267
  "a11y/Loading failed": "Échec du chargement",
260
268
  "a11y/Message actions": "Actions du message",
269
+ "a11y/Muted": "Mis en sourdine",
261
270
  "a11y/New message from {{user}}": "Nouveau message de {{user}}",
262
271
  "a11y/Offline": "Hors ligne",
263
272
  "a11y/Open message actions": "Ouvrir les actions du message",
264
273
  "a11y/Reaction {{emoji}} by {{count}} users": "Réaction {{emoji}} par {{count}} utilisateurs",
265
274
  "a11y/Read": "Lu",
275
+ "a11y/Read, sent by you": "Lu, envoyé par vous",
266
276
  "a11y/Reconnecting": "Reconnexion",
267
277
  "a11y/Reply to {{user}}": "Répondre à {{user}}",
268
278
  "a11y/Remove edit": "Supprimer la modification",
269
279
  "a11y/Remove reply": "Supprimer la réponse",
280
+ "a11y/Replying to {{user}}": "Réponse à {{user}}",
281
+ "a11y/Replying to {{user}}: {{text}}": "Réponse à {{user}} : {{text}}",
270
282
  "a11y/Scroll to bottom": "Aller en bas",
271
283
  "a11y/Scroll to bottom, {{count}} new messages": "Aller en bas, {{count}} nouveaux messages",
272
284
  "a11y/Scroll to latest": "Aller au dernier message",
@@ -274,7 +286,10 @@
274
286
  "a11y/Send message": "Envoyer le message",
275
287
  "a11y/Sending": "Envoi",
276
288
  "a11y/Sent": "Envoyé",
289
+ "a11y/Sent by you": "Envoyé par vous",
277
290
  "a11y/Voice message recording. Hold to record.": "Enregistrement d'un message vocal. Maintenez appuyé pour enregistrer.",
291
+ "a11y/and {{count}} more reactions": "et {{count}} réactions de plus",
292
+ "a11y/you reacted": "vous avez réagi",
278
293
  "a11y/{{count}} new messages": "{{count}} nouveaux messages",
279
294
  "a11y/Add attachment": "Add attachment",
280
295
  "a11y/Close attachments": "Close attachments",
@@ -352,12 +367,9 @@
352
367
  "size limit": "limite de taille",
353
368
  "unknown error": "erreur inconnue",
354
369
  "unsupported file type": "type de fichier non pris en charge",
355
- "a11y/Activate to view results": "Activer pour voir les résultats",
356
- "a11y/End vote": "Terminer le vote",
357
- "a11y/Show all options": "Afficher toutes les options",
358
- "a11y/Vote on {{option}}": "Voter pour {{option}}",
359
370
  "a11y/Double tap and hold to activate contextual menu": "Appuyez deux fois et maintenez pour activer le menu contextuel",
360
371
  "a11y/Swipe right to go through different actions": "Glissez vers la droite pour parcourir les différentes actions",
361
372
  "a11y/Close": "Close",
362
- "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss."
373
+ "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.",
374
+ "a11y/{{count}} unread messages": "{{count}} messages non lus"
363
375
  }
package/src/i18n/he.json CHANGED
@@ -253,20 +253,32 @@
253
253
  "a11y/AI is generating": "הבינה המלאכותית יוצרת תשובה",
254
254
  "a11y/AI is thinking": "הבינה המלאכותית חושבת",
255
255
  "a11y/Avatar of {{name}}": "תמונת פרופיל של {{name}}",
256
+ "a11y/Channel with {{count}} members": "ערוץ עם {{count}} חברים",
256
257
  "a11y/Connected": "מחובר",
257
258
  "a11y/Delivered": "נמסר",
259
+ "a11y/Delivered, sent by you": "נמסר, נשלח על ידך",
260
+ "a11y/Direct chat with {{name}}": "צ׳אט ישיר עם {{name}}",
261
+ "a11y/Double tap to open": "הקש פעמיים כדי לפתוח",
262
+ "a11y/Double tap to view reactions": "הקש פעמיים כדי לראות תגובות",
263
+ "a11y/Editing message": "עריכת הודעה",
264
+ "a11y/Editing message: {{text}}": "עריכת הודעה: {{text}}",
265
+ "a11y/Last message {{date}}": "הודעה אחרונה {{date}}",
258
266
  "a11y/Loading": "טוען",
259
267
  "a11y/Loading failed": "הטעינה נכשלה",
260
268
  "a11y/Message actions": "פעולות הודעה",
269
+ "a11y/Muted": "מושתק",
261
270
  "a11y/New message from {{user}}": "הודעה חדשה מ-{{user}}",
262
271
  "a11y/Offline": "לא מקוון",
263
272
  "a11y/Open message actions": "פתח פעולות הודעה",
264
273
  "a11y/Reaction {{emoji}} by {{count}} users": "תגובה {{emoji}} מאת {{count}} משתמשים",
265
274
  "a11y/Read": "נקרא",
275
+ "a11y/Read, sent by you": "נקרא, נשלח על ידך",
266
276
  "a11y/Reconnecting": "מתחבר מחדש",
267
277
  "a11y/Reply to {{user}}": "השב ל-{{user}}",
268
278
  "a11y/Remove edit": "הסר עריכה",
269
279
  "a11y/Remove reply": "הסר תגובה",
280
+ "a11y/Replying to {{user}}": "מגיב/ה ל-{{user}}",
281
+ "a11y/Replying to {{user}}: {{text}}": "מגיב/ה ל-{{user}}: {{text}}",
270
282
  "a11y/Scroll to bottom": "גלול לתחתית",
271
283
  "a11y/Scroll to bottom, {{count}} new messages": "גלול לתחתית, {{count}} הודעות חדשות",
272
284
  "a11y/Scroll to latest": "גלול להודעה האחרונה",
@@ -274,7 +286,10 @@
274
286
  "a11y/Send message": "שלח הודעה",
275
287
  "a11y/Sending": "שולח",
276
288
  "a11y/Sent": "נשלח",
289
+ "a11y/Sent by you": "נשלח על ידך",
277
290
  "a11y/Voice message recording. Hold to record.": "הקלטת הודעה קולית. החזק כדי להקליט.",
291
+ "a11y/and {{count}} more reactions": "ועוד {{count}} תגובות",
292
+ "a11y/you reacted": "הגבת",
278
293
  "a11y/{{count}} new messages": "{{count}} הודעות חדשות",
279
294
  "a11y/Add attachment": "Add attachment",
280
295
  "a11y/Close attachments": "Close attachments",
@@ -352,12 +367,9 @@
352
367
  "size limit": "מגבלת גודל",
353
368
  "unknown error": "שגיאה לא ידועה",
354
369
  "unsupported file type": "סוג קובץ לא נתמך",
355
- "a11y/Activate to view results": "הפעל כדי לראות את התוצאות",
356
- "a11y/End vote": "סיים הצבעה",
357
- "a11y/Show all options": "הצג את כל האפשרויות",
358
- "a11y/Vote on {{option}}": "הצבע עבור {{option}}",
359
370
  "a11y/Double tap and hold to activate contextual menu": "הקש פעמיים והחזק כדי להפעיל את התפריט ההקשרי",
360
371
  "a11y/Swipe right to go through different actions": "החלק ימינה כדי לעבור בין הפעולות השונות",
361
372
  "a11y/Close": "Close",
362
- "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss."
373
+ "a11y/Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.": "Bottom sheet opened. Activate the close action or use the escape gesture to dismiss.",
374
+ "a11y/{{count}} unread messages": "{{count}} הודעות שלא נקראו"
363
375
  }