stream-chat-react-native-core 9.4.0-beta.1 → 9.4.0-beta.11

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 (483) hide show
  1. package/lib/commonjs/components/Attachment/Attachment.js +10 -5
  2. package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/Audio/AudioAttachment.js +2 -4
  4. package/lib/commonjs/components/Attachment/Audio/AudioAttachment.js.map +1 -1
  5. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +7 -0
  6. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  7. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +2 -0
  8. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -1
  9. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +41 -55
  10. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -1
  11. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +27 -7
  12. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
  13. package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js +55 -0
  14. package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js.map +1 -0
  15. package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js +47 -0
  16. package/lib/commonjs/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js.map +1 -0
  17. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js +39 -0
  18. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js.map +1 -0
  19. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionItem.js +45 -0
  20. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionItem.js.map +1 -0
  21. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionRoleItem.js +33 -0
  22. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionRoleItem.js.map +1 -0
  23. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js +26 -0
  24. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js.map +1 -0
  25. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserItem.js +53 -0
  26. package/lib/commonjs/components/AutoCompleteInput/mentionItems/MentionUserItem.js.map +1 -0
  27. package/lib/commonjs/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js +38 -0
  28. package/lib/commonjs/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js.map +1 -0
  29. package/lib/commonjs/components/AutoCompleteInput/mentionItems/index.js +60 -0
  30. package/lib/commonjs/components/AutoCompleteInput/mentionItems/index.js.map +1 -0
  31. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsActionItems.js +2 -1
  32. package/lib/commonjs/components/ChannelDetails/hooks/useChannelDetailsActionItems.js.map +1 -1
  33. package/lib/commonjs/components/ChannelList/ChannelList.js +4 -1
  34. package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
  35. package/lib/commonjs/components/ChannelList/hooks/useCreateChannelsContext.js +5 -3
  36. package/lib/commonjs/components/ChannelList/hooks/useCreateChannelsContext.js.map +1 -1
  37. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +5 -3
  38. package/lib/commonjs/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  39. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js +3 -0
  40. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js.map +1 -1
  41. package/lib/commonjs/components/ChannelPreview/ChannelPreviewPinnedStatus.js +30 -0
  42. package/lib/commonjs/components/ChannelPreview/ChannelPreviewPinnedStatus.js.map +1 -0
  43. package/lib/commonjs/components/ChannelPreview/ChannelPreviewView.js +8 -3
  44. package/lib/commonjs/components/ChannelPreview/ChannelPreviewView.js.map +1 -1
  45. package/lib/commonjs/components/ChannelPreview/ChannelSwipableWrapper.js +2 -1
  46. package/lib/commonjs/components/ChannelPreview/ChannelSwipableWrapper.js.map +1 -1
  47. package/lib/commonjs/components/ChannelPreview/hooks/index.js +11 -0
  48. package/lib/commonjs/components/ChannelPreview/hooks/index.js.map +1 -1
  49. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewData.js +3 -0
  50. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewData.js.map +1 -1
  51. package/lib/commonjs/components/ChannelPreview/hooks/useIsChannelPinned.js +11 -0
  52. package/lib/commonjs/components/ChannelPreview/hooks/useIsChannelPinned.js.map +1 -0
  53. package/lib/commonjs/components/Message/Message.js +53 -16
  54. package/lib/commonjs/components/Message/Message.js.map +1 -1
  55. package/lib/commonjs/components/Message/MessageItemView/MessageItemView.js +6 -84
  56. package/lib/commonjs/components/Message/MessageItemView/MessageItemView.js.map +1 -1
  57. package/lib/commonjs/components/Message/MessageItemView/MessageTextContainer.js +14 -0
  58. package/lib/commonjs/components/Message/MessageItemView/MessageTextContainer.js.map +1 -1
  59. package/lib/commonjs/components/Message/MessageItemView/utils/renderText.js +69 -11
  60. package/lib/commonjs/components/Message/MessageItemView/utils/renderText.js.map +1 -1
  61. package/lib/commonjs/components/MessageInput/MessageComposer.js +13 -41
  62. package/lib/commonjs/components/MessageInput/MessageComposer.js.map +1 -1
  63. package/lib/commonjs/components/MessageList/MessageFlashList.js +22 -3
  64. package/lib/commonjs/components/MessageList/MessageFlashList.js.map +1 -1
  65. package/lib/commonjs/components/MessageList/MessageList.js +23 -4
  66. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  67. package/lib/commonjs/components/MessageMenu/MessageActionList.js +1 -1
  68. package/lib/commonjs/components/Poll/components/CreatePollHeader.js +5 -5
  69. package/lib/commonjs/components/Poll/components/CreatePollHeader.js.map +1 -1
  70. package/lib/commonjs/components/Poll/components/PollButtons.js +25 -56
  71. package/lib/commonjs/components/Poll/components/PollButtons.js.map +1 -1
  72. package/lib/commonjs/components/Poll/components/PollInputDialog.js +9 -11
  73. package/lib/commonjs/components/Poll/components/PollInputDialog.js.map +1 -1
  74. package/lib/commonjs/components/Poll/components/PollModal.js +50 -0
  75. package/lib/commonjs/components/Poll/components/PollModal.js.map +1 -0
  76. package/lib/commonjs/components/Poll/components/PollModalHeader.js +4 -5
  77. package/lib/commonjs/components/Poll/components/PollModalHeader.js.map +1 -1
  78. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js +10 -24
  79. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  80. package/lib/commonjs/components/Poll/components/index.js +11 -0
  81. package/lib/commonjs/components/Poll/components/index.js.map +1 -1
  82. package/lib/commonjs/components/UIComponents/BottomSheetModal.js +4 -17
  83. package/lib/commonjs/components/UIComponents/BottomSheetModal.js.map +1 -1
  84. package/lib/commonjs/components/UIComponents/ClippingFadeBottom.js +56 -0
  85. package/lib/commonjs/components/UIComponents/ClippingFadeBottom.js.map +1 -0
  86. package/lib/commonjs/components/UIComponents/PortalWhileClosingView.js +0 -3
  87. package/lib/commonjs/components/UIComponents/PortalWhileClosingView.js.map +1 -1
  88. package/lib/commonjs/components/UIComponents/index.js +11 -0
  89. package/lib/commonjs/components/UIComponents/index.js.map +1 -1
  90. package/lib/commonjs/components/index.js +22 -0
  91. package/lib/commonjs/components/index.js.map +1 -1
  92. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  93. package/lib/commonjs/contexts/componentsContext/defaultComponents.js +3 -0
  94. package/lib/commonjs/contexts/componentsContext/defaultComponents.js.map +1 -1
  95. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageComposer.js +2 -2
  96. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageComposer.js.map +1 -1
  97. package/lib/commonjs/contexts/themeContext/utils/theme.js +9 -2
  98. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  99. package/lib/commonjs/hooks/actions/useChannelActionItems.js +20 -1
  100. package/lib/commonjs/hooks/actions/useChannelActionItems.js.map +1 -1
  101. package/lib/commonjs/hooks/actions/useChannelActionItemsById.js +3 -1
  102. package/lib/commonjs/hooks/actions/useChannelActionItemsById.js.map +1 -1
  103. package/lib/commonjs/i18n/ar.json +12 -1
  104. package/lib/commonjs/i18n/en.json +12 -1
  105. package/lib/commonjs/i18n/es.json +12 -1
  106. package/lib/commonjs/i18n/fr.json +12 -1
  107. package/lib/commonjs/i18n/he.json +12 -1
  108. package/lib/commonjs/i18n/hi.json +12 -1
  109. package/lib/commonjs/i18n/it.json +12 -1
  110. package/lib/commonjs/i18n/ja.json +12 -1
  111. package/lib/commonjs/i18n/ko.json +12 -1
  112. package/lib/commonjs/i18n/nl.json +12 -1
  113. package/lib/commonjs/i18n/pt-br.json +12 -1
  114. package/lib/commonjs/i18n/ru.json +12 -1
  115. package/lib/commonjs/i18n/tr.json +12 -1
  116. package/lib/commonjs/icons/index.js +12 -0
  117. package/lib/commonjs/icons/index.js.map +1 -1
  118. package/lib/commonjs/icons/megaphone.js +36 -0
  119. package/lib/commonjs/icons/megaphone.js.map +1 -0
  120. package/lib/commonjs/icons/shield.js +36 -0
  121. package/lib/commonjs/icons/shield.js.map +1 -0
  122. package/lib/commonjs/store/SqliteClient.js +1 -1
  123. package/lib/commonjs/store/mappers/mapDraftMessageToStorable.js +8 -0
  124. package/lib/commonjs/store/mappers/mapDraftMessageToStorable.js.map +1 -1
  125. package/lib/commonjs/store/mappers/mapStorableToDraftMessage.js +8 -0
  126. package/lib/commonjs/store/mappers/mapStorableToDraftMessage.js.map +1 -1
  127. package/lib/commonjs/store/schema.js +4 -0
  128. package/lib/commonjs/store/schema.js.map +1 -1
  129. package/lib/commonjs/theme/generated/dark/StreamTokens.android.js +10 -1
  130. package/lib/commonjs/theme/generated/dark/StreamTokens.android.js.map +1 -1
  131. package/lib/commonjs/theme/generated/dark/StreamTokens.ios.js +10 -1
  132. package/lib/commonjs/theme/generated/dark/StreamTokens.ios.js.map +1 -1
  133. package/lib/commonjs/theme/generated/dark/StreamTokens.web.js +10 -1
  134. package/lib/commonjs/theme/generated/dark/StreamTokens.web.js.map +1 -1
  135. package/lib/commonjs/theme/generated/light/StreamTokens.android.js +10 -1
  136. package/lib/commonjs/theme/generated/light/StreamTokens.android.js.map +1 -1
  137. package/lib/commonjs/theme/generated/light/StreamTokens.ios.js +10 -1
  138. package/lib/commonjs/theme/generated/light/StreamTokens.ios.js.map +1 -1
  139. package/lib/commonjs/theme/generated/light/StreamTokens.web.js +10 -1
  140. package/lib/commonjs/theme/generated/light/StreamTokens.web.js.map +1 -1
  141. package/lib/commonjs/version.json +1 -1
  142. package/lib/module/components/Attachment/Attachment.js +10 -5
  143. package/lib/module/components/Attachment/Attachment.js.map +1 -1
  144. package/lib/module/components/Attachment/Audio/AudioAttachment.js +2 -4
  145. package/lib/module/components/Attachment/Audio/AudioAttachment.js.map +1 -1
  146. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +7 -0
  147. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  148. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +2 -0
  149. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -1
  150. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +41 -55
  151. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -1
  152. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +27 -7
  153. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
  154. package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js +55 -0
  155. package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.js.map +1 -0
  156. package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js +47 -0
  157. package/lib/module/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.js.map +1 -0
  158. package/lib/module/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js +39 -0
  159. package/lib/module/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.js.map +1 -0
  160. package/lib/module/components/AutoCompleteInput/mentionItems/MentionItem.js +45 -0
  161. package/lib/module/components/AutoCompleteInput/mentionItems/MentionItem.js.map +1 -0
  162. package/lib/module/components/AutoCompleteInput/mentionItems/MentionRoleItem.js +33 -0
  163. package/lib/module/components/AutoCompleteInput/mentionItems/MentionRoleItem.js.map +1 -0
  164. package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js +26 -0
  165. package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.js.map +1 -0
  166. package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserItem.js +53 -0
  167. package/lib/module/components/AutoCompleteInput/mentionItems/MentionUserItem.js.map +1 -0
  168. package/lib/module/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js +38 -0
  169. package/lib/module/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.js.map +1 -0
  170. package/lib/module/components/AutoCompleteInput/mentionItems/index.js +60 -0
  171. package/lib/module/components/AutoCompleteInput/mentionItems/index.js.map +1 -0
  172. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsActionItems.js +2 -1
  173. package/lib/module/components/ChannelDetails/hooks/useChannelDetailsActionItems.js.map +1 -1
  174. package/lib/module/components/ChannelList/ChannelList.js +4 -1
  175. package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
  176. package/lib/module/components/ChannelList/hooks/useCreateChannelsContext.js +5 -3
  177. package/lib/module/components/ChannelList/hooks/useCreateChannelsContext.js.map +1 -1
  178. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js +5 -3
  179. package/lib/module/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.js.map +1 -1
  180. package/lib/module/components/ChannelPreview/ChannelPreview.js +3 -0
  181. package/lib/module/components/ChannelPreview/ChannelPreview.js.map +1 -1
  182. package/lib/module/components/ChannelPreview/ChannelPreviewPinnedStatus.js +30 -0
  183. package/lib/module/components/ChannelPreview/ChannelPreviewPinnedStatus.js.map +1 -0
  184. package/lib/module/components/ChannelPreview/ChannelPreviewView.js +8 -3
  185. package/lib/module/components/ChannelPreview/ChannelPreviewView.js.map +1 -1
  186. package/lib/module/components/ChannelPreview/ChannelSwipableWrapper.js +2 -1
  187. package/lib/module/components/ChannelPreview/ChannelSwipableWrapper.js.map +1 -1
  188. package/lib/module/components/ChannelPreview/hooks/index.js +11 -0
  189. package/lib/module/components/ChannelPreview/hooks/index.js.map +1 -1
  190. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewData.js +3 -0
  191. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewData.js.map +1 -1
  192. package/lib/module/components/ChannelPreview/hooks/useIsChannelPinned.js +11 -0
  193. package/lib/module/components/ChannelPreview/hooks/useIsChannelPinned.js.map +1 -0
  194. package/lib/module/components/Message/Message.js +53 -16
  195. package/lib/module/components/Message/Message.js.map +1 -1
  196. package/lib/module/components/Message/MessageItemView/MessageItemView.js +6 -84
  197. package/lib/module/components/Message/MessageItemView/MessageItemView.js.map +1 -1
  198. package/lib/module/components/Message/MessageItemView/MessageTextContainer.js +14 -0
  199. package/lib/module/components/Message/MessageItemView/MessageTextContainer.js.map +1 -1
  200. package/lib/module/components/Message/MessageItemView/utils/renderText.js +69 -11
  201. package/lib/module/components/Message/MessageItemView/utils/renderText.js.map +1 -1
  202. package/lib/module/components/MessageInput/MessageComposer.js +13 -41
  203. package/lib/module/components/MessageInput/MessageComposer.js.map +1 -1
  204. package/lib/module/components/MessageList/MessageFlashList.js +22 -3
  205. package/lib/module/components/MessageList/MessageFlashList.js.map +1 -1
  206. package/lib/module/components/MessageList/MessageList.js +23 -4
  207. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  208. package/lib/module/components/MessageMenu/MessageActionList.js +1 -1
  209. package/lib/module/components/Poll/components/CreatePollHeader.js +5 -5
  210. package/lib/module/components/Poll/components/CreatePollHeader.js.map +1 -1
  211. package/lib/module/components/Poll/components/PollButtons.js +25 -56
  212. package/lib/module/components/Poll/components/PollButtons.js.map +1 -1
  213. package/lib/module/components/Poll/components/PollInputDialog.js +9 -11
  214. package/lib/module/components/Poll/components/PollInputDialog.js.map +1 -1
  215. package/lib/module/components/Poll/components/PollModal.js +50 -0
  216. package/lib/module/components/Poll/components/PollModal.js.map +1 -0
  217. package/lib/module/components/Poll/components/PollModalHeader.js +4 -5
  218. package/lib/module/components/Poll/components/PollModalHeader.js.map +1 -1
  219. package/lib/module/components/Poll/components/PollResults/PollResultItem.js +10 -24
  220. package/lib/module/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
  221. package/lib/module/components/Poll/components/index.js +11 -0
  222. package/lib/module/components/Poll/components/index.js.map +1 -1
  223. package/lib/module/components/UIComponents/BottomSheetModal.js +4 -17
  224. package/lib/module/components/UIComponents/BottomSheetModal.js.map +1 -1
  225. package/lib/module/components/UIComponents/ClippingFadeBottom.js +56 -0
  226. package/lib/module/components/UIComponents/ClippingFadeBottom.js.map +1 -0
  227. package/lib/module/components/UIComponents/PortalWhileClosingView.js +0 -3
  228. package/lib/module/components/UIComponents/PortalWhileClosingView.js.map +1 -1
  229. package/lib/module/components/UIComponents/index.js +11 -0
  230. package/lib/module/components/UIComponents/index.js.map +1 -1
  231. package/lib/module/components/index.js +22 -0
  232. package/lib/module/components/index.js.map +1 -1
  233. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  234. package/lib/module/contexts/componentsContext/defaultComponents.js +3 -0
  235. package/lib/module/contexts/componentsContext/defaultComponents.js.map +1 -1
  236. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageComposer.js +2 -2
  237. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageComposer.js.map +1 -1
  238. package/lib/module/contexts/themeContext/utils/theme.js +9 -2
  239. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  240. package/lib/module/hooks/actions/useChannelActionItems.js +20 -1
  241. package/lib/module/hooks/actions/useChannelActionItems.js.map +1 -1
  242. package/lib/module/hooks/actions/useChannelActionItemsById.js +3 -1
  243. package/lib/module/hooks/actions/useChannelActionItemsById.js.map +1 -1
  244. package/lib/module/i18n/ar.json +12 -1
  245. package/lib/module/i18n/en.json +12 -1
  246. package/lib/module/i18n/es.json +12 -1
  247. package/lib/module/i18n/fr.json +12 -1
  248. package/lib/module/i18n/he.json +12 -1
  249. package/lib/module/i18n/hi.json +12 -1
  250. package/lib/module/i18n/it.json +12 -1
  251. package/lib/module/i18n/ja.json +12 -1
  252. package/lib/module/i18n/ko.json +12 -1
  253. package/lib/module/i18n/nl.json +12 -1
  254. package/lib/module/i18n/pt-br.json +12 -1
  255. package/lib/module/i18n/ru.json +12 -1
  256. package/lib/module/i18n/tr.json +12 -1
  257. package/lib/module/icons/index.js +12 -0
  258. package/lib/module/icons/index.js.map +1 -1
  259. package/lib/module/icons/megaphone.js +36 -0
  260. package/lib/module/icons/megaphone.js.map +1 -0
  261. package/lib/module/icons/shield.js +36 -0
  262. package/lib/module/icons/shield.js.map +1 -0
  263. package/lib/module/store/SqliteClient.js +1 -1
  264. package/lib/module/store/mappers/mapDraftMessageToStorable.js +8 -0
  265. package/lib/module/store/mappers/mapDraftMessageToStorable.js.map +1 -1
  266. package/lib/module/store/mappers/mapStorableToDraftMessage.js +8 -0
  267. package/lib/module/store/mappers/mapStorableToDraftMessage.js.map +1 -1
  268. package/lib/module/store/schema.js +4 -0
  269. package/lib/module/store/schema.js.map +1 -1
  270. package/lib/module/theme/generated/dark/StreamTokens.android.js +10 -1
  271. package/lib/module/theme/generated/dark/StreamTokens.android.js.map +1 -1
  272. package/lib/module/theme/generated/dark/StreamTokens.ios.js +10 -1
  273. package/lib/module/theme/generated/dark/StreamTokens.ios.js.map +1 -1
  274. package/lib/module/theme/generated/dark/StreamTokens.web.js +10 -1
  275. package/lib/module/theme/generated/dark/StreamTokens.web.js.map +1 -1
  276. package/lib/module/theme/generated/light/StreamTokens.android.js +10 -1
  277. package/lib/module/theme/generated/light/StreamTokens.android.js.map +1 -1
  278. package/lib/module/theme/generated/light/StreamTokens.ios.js +10 -1
  279. package/lib/module/theme/generated/light/StreamTokens.ios.js.map +1 -1
  280. package/lib/module/theme/generated/light/StreamTokens.web.js +10 -1
  281. package/lib/module/theme/generated/light/StreamTokens.web.js.map +1 -1
  282. package/lib/module/version.json +1 -1
  283. package/lib/typescript/components/Attachment/Audio/AudioAttachment.d.ts +1 -0
  284. package/lib/typescript/components/Attachment/Audio/AudioAttachment.d.ts.map +1 -1
  285. package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts.map +1 -1
  286. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionHeader.d.ts.map +1 -1
  287. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionItem.d.ts +8 -2
  288. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionItem.d.ts.map +1 -1
  289. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts +1 -1
  290. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts.map +1 -1
  291. package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.d.ts +13 -0
  292. package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.d.ts.map +1 -0
  293. package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.d.ts +26 -0
  294. package/lib/typescript/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.d.ts.map +1 -0
  295. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.d.ts +7 -0
  296. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.d.ts.map +1 -0
  297. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionItem.d.ts +17 -0
  298. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionItem.d.ts.map +1 -0
  299. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionRoleItem.d.ts +7 -0
  300. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionRoleItem.d.ts.map +1 -0
  301. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.d.ts +7 -0
  302. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.d.ts.map +1 -0
  303. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserItem.d.ts +7 -0
  304. package/lib/typescript/components/AutoCompleteInput/mentionItems/MentionUserItem.d.ts.map +1 -0
  305. package/lib/typescript/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.d.ts +21 -0
  306. package/lib/typescript/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.d.ts.map +1 -0
  307. package/lib/typescript/components/AutoCompleteInput/mentionItems/index.d.ts +17 -0
  308. package/lib/typescript/components/AutoCompleteInput/mentionItems/index.d.ts.map +1 -0
  309. package/lib/typescript/components/ChannelList/ChannelList.d.ts +1 -1
  310. package/lib/typescript/components/ChannelList/ChannelList.d.ts.map +1 -1
  311. package/lib/typescript/components/ChannelList/hooks/useCreateChannelsContext.d.ts +1 -1
  312. package/lib/typescript/components/ChannelList/hooks/useCreateChannelsContext.d.ts.map +1 -1
  313. package/lib/typescript/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
  314. package/lib/typescript/components/ChannelPreview/ChannelPreviewPinnedStatus.d.ts +6 -0
  315. package/lib/typescript/components/ChannelPreview/ChannelPreviewPinnedStatus.d.ts.map +1 -0
  316. package/lib/typescript/components/ChannelPreview/ChannelPreviewView.d.ts +3 -1
  317. package/lib/typescript/components/ChannelPreview/ChannelPreviewView.d.ts.map +1 -1
  318. package/lib/typescript/components/ChannelPreview/ChannelSwipableWrapper.d.ts.map +1 -1
  319. package/lib/typescript/components/ChannelPreview/hooks/index.d.ts +1 -0
  320. package/lib/typescript/components/ChannelPreview/hooks/index.d.ts.map +1 -1
  321. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewData.d.ts +1 -0
  322. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewData.d.ts.map +1 -1
  323. package/lib/typescript/components/ChannelPreview/hooks/useIsChannelPinned.d.ts +3 -0
  324. package/lib/typescript/components/ChannelPreview/hooks/useIsChannelPinned.d.ts.map +1 -0
  325. package/lib/typescript/components/Message/Message.d.ts +11 -1
  326. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  327. package/lib/typescript/components/Message/MessageItemView/MessageItemView.d.ts.map +1 -1
  328. package/lib/typescript/components/Message/MessageItemView/MessageTextContainer.d.ts.map +1 -1
  329. package/lib/typescript/components/Message/MessageItemView/utils/renderText.d.ts.map +1 -1
  330. package/lib/typescript/components/MessageInput/MessageComposer.d.ts.map +1 -1
  331. package/lib/typescript/components/MessageList/MessageFlashList.d.ts.map +1 -1
  332. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  333. package/lib/typescript/components/Poll/components/CreatePollHeader.d.ts.map +1 -1
  334. package/lib/typescript/components/Poll/components/PollButtons.d.ts.map +1 -1
  335. package/lib/typescript/components/Poll/components/PollModal.d.ts +9 -0
  336. package/lib/typescript/components/Poll/components/PollModal.d.ts.map +1 -0
  337. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts.map +1 -1
  338. package/lib/typescript/components/Poll/components/index.d.ts +1 -0
  339. package/lib/typescript/components/Poll/components/index.d.ts.map +1 -1
  340. package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts.map +1 -1
  341. package/lib/typescript/components/UIComponents/ClippingFadeBottom.d.ts +18 -0
  342. package/lib/typescript/components/UIComponents/ClippingFadeBottom.d.ts.map +1 -0
  343. package/lib/typescript/components/UIComponents/index.d.ts +1 -0
  344. package/lib/typescript/components/UIComponents/index.d.ts.map +1 -1
  345. package/lib/typescript/components/index.d.ts +2 -0
  346. package/lib/typescript/components/index.d.ts.map +1 -1
  347. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -0
  348. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts.map +1 -1
  349. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts +2 -0
  350. package/lib/typescript/contexts/componentsContext/defaultComponents.d.ts.map +1 -1
  351. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageComposer.d.ts.map +1 -1
  352. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts +7 -0
  353. package/lib/typescript/contexts/themeContext/ThemeContext.d.ts.map +1 -1
  354. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +7 -0
  355. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  356. package/lib/typescript/hooks/actions/useChannelActionItems.d.ts +35 -2
  357. package/lib/typescript/hooks/actions/useChannelActionItems.d.ts.map +1 -1
  358. package/lib/typescript/hooks/actions/useChannelActionItemsById.d.ts +3 -2
  359. package/lib/typescript/hooks/actions/useChannelActionItemsById.d.ts.map +1 -1
  360. package/lib/typescript/i18n/ar.json +12 -1
  361. package/lib/typescript/i18n/en.json +12 -1
  362. package/lib/typescript/i18n/es.json +12 -1
  363. package/lib/typescript/i18n/fr.json +12 -1
  364. package/lib/typescript/i18n/he.json +12 -1
  365. package/lib/typescript/i18n/hi.json +12 -1
  366. package/lib/typescript/i18n/it.json +12 -1
  367. package/lib/typescript/i18n/ja.json +12 -1
  368. package/lib/typescript/i18n/ko.json +12 -1
  369. package/lib/typescript/i18n/nl.json +12 -1
  370. package/lib/typescript/i18n/pt-br.json +12 -1
  371. package/lib/typescript/i18n/ru.json +12 -1
  372. package/lib/typescript/i18n/tr.json +12 -1
  373. package/lib/typescript/icons/index.d.ts +1 -0
  374. package/lib/typescript/icons/index.d.ts.map +1 -1
  375. package/lib/typescript/icons/megaphone.d.ts +4 -0
  376. package/lib/typescript/icons/megaphone.d.ts.map +1 -0
  377. package/lib/typescript/icons/shield.d.ts +4 -0
  378. package/lib/typescript/icons/shield.d.ts.map +1 -0
  379. package/lib/typescript/store/mappers/mapDraftMessageToStorable.d.ts.map +1 -1
  380. package/lib/typescript/store/mappers/mapStorableToDraftMessage.d.ts.map +1 -1
  381. package/lib/typescript/store/schema.d.ts +4 -0
  382. package/lib/typescript/store/schema.d.ts.map +1 -1
  383. package/lib/typescript/theme/generated/StreamTokens.types.d.ts +9 -0
  384. package/lib/typescript/theme/generated/StreamTokens.types.d.ts.map +1 -1
  385. package/lib/typescript/theme/generated/dark/StreamTokens.android.d.ts.map +1 -1
  386. package/lib/typescript/theme/generated/dark/StreamTokens.ios.d.ts.map +1 -1
  387. package/lib/typescript/theme/generated/dark/StreamTokens.web.d.ts.map +1 -1
  388. package/lib/typescript/theme/generated/light/StreamTokens.android.d.ts.map +1 -1
  389. package/lib/typescript/theme/generated/light/StreamTokens.ios.d.ts.map +1 -1
  390. package/lib/typescript/theme/generated/light/StreamTokens.web.d.ts.map +1 -1
  391. package/lib/typescript/utils/i18n/Streami18n.d.ts +11 -0
  392. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  393. package/package.json +2 -2
  394. package/src/components/Attachment/Attachment.tsx +15 -6
  395. package/src/components/Attachment/Audio/AudioAttachment.tsx +3 -4
  396. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +13 -0
  397. package/src/components/AutoCompleteInput/AutoCompleteSuggestionHeader.tsx +2 -1
  398. package/src/components/AutoCompleteInput/AutoCompleteSuggestionItem.tsx +35 -43
  399. package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +28 -3
  400. package/src/components/AutoCompleteInput/mentionItems/EnhancedMentionContent.tsx +71 -0
  401. package/src/components/AutoCompleteInput/mentionItems/EnhancedMentionIcon.tsx +71 -0
  402. package/src/components/AutoCompleteInput/mentionItems/MentionBroadcastItem.tsx +36 -0
  403. package/src/components/AutoCompleteInput/mentionItems/MentionItem.tsx +59 -0
  404. package/src/components/AutoCompleteInput/mentionItems/MentionRoleItem.tsx +27 -0
  405. package/src/components/AutoCompleteInput/mentionItems/MentionUserGroupItem.tsx +23 -0
  406. package/src/components/AutoCompleteInput/mentionItems/MentionUserItem.tsx +55 -0
  407. package/src/components/AutoCompleteInput/mentionItems/TokenizedSuggestionParts.tsx +56 -0
  408. package/src/components/AutoCompleteInput/mentionItems/__tests__/MentionItems.test.tsx +129 -0
  409. package/src/components/AutoCompleteInput/mentionItems/__tests__/TokenizedSuggestionParts.test.tsx +63 -0
  410. package/src/components/AutoCompleteInput/mentionItems/index.ts +16 -0
  411. package/src/components/ChannelDetails/__tests__/useChannelDetailsActionItems.test.tsx +6 -2
  412. package/src/components/ChannelDetails/hooks/useChannelDetailsActionItems.ts +1 -1
  413. package/src/components/ChannelList/ChannelList.tsx +3 -0
  414. package/src/components/ChannelList/hooks/useCreateChannelsContext.ts +3 -0
  415. package/src/components/ChannelPreview/ChannelMessagePreviewDeliveryStatus.tsx +3 -2
  416. package/src/components/ChannelPreview/ChannelPreview.tsx +21 -3
  417. package/src/components/ChannelPreview/ChannelPreviewPinnedStatus.tsx +25 -0
  418. package/src/components/ChannelPreview/ChannelPreviewView.tsx +18 -2
  419. package/src/components/ChannelPreview/ChannelSwipableWrapper.tsx +5 -1
  420. package/src/components/ChannelPreview/hooks/__tests__/useIsChannelPinned.test.tsx +35 -0
  421. package/src/components/ChannelPreview/hooks/index.ts +1 -0
  422. package/src/components/ChannelPreview/hooks/useChannelPreviewData.ts +3 -1
  423. package/src/components/ChannelPreview/hooks/useIsChannelPinned.ts +8 -0
  424. package/src/components/Message/Message.tsx +82 -24
  425. package/src/components/Message/MessageItemView/MessageItemView.tsx +5 -116
  426. package/src/components/Message/MessageItemView/MessageTextContainer.tsx +25 -0
  427. package/src/components/Message/MessageItemView/__tests__/MessageItemView.test.tsx +22 -13
  428. package/src/components/Message/MessageItemView/utils/renderText.tsx +97 -18
  429. package/src/components/MessageInput/MessageComposer.tsx +16 -39
  430. package/src/components/MessageList/MessageFlashList.tsx +28 -0
  431. package/src/components/MessageList/MessageList.tsx +28 -0
  432. package/src/components/MessageMenu/MessageActionList.tsx +1 -1
  433. package/src/components/Poll/components/CreatePollHeader.tsx +12 -5
  434. package/src/components/Poll/components/PollButtons.tsx +14 -38
  435. package/src/components/Poll/components/PollInputDialog.tsx +12 -12
  436. package/src/components/Poll/components/PollModal.tsx +55 -0
  437. package/src/components/Poll/components/PollModalHeader.tsx +4 -5
  438. package/src/components/Poll/components/PollResults/PollResultItem.tsx +6 -18
  439. package/src/components/Poll/components/__tests__/CreatePollHeader.test.tsx +4 -36
  440. package/src/components/Poll/components/__tests__/PollModalHeader.test.tsx +8 -45
  441. package/src/components/Poll/components/index.ts +1 -0
  442. package/src/components/Thread/__tests__/__snapshots__/Thread.test.tsx.snap +29 -20
  443. package/src/components/UIComponents/BottomSheetModal.tsx +2 -17
  444. package/src/components/UIComponents/ClippingFadeBottom.tsx +47 -0
  445. package/src/components/UIComponents/PortalWhileClosingView.tsx +0 -4
  446. package/src/components/UIComponents/index.ts +1 -0
  447. package/src/components/index.ts +2 -0
  448. package/src/contexts/channelsContext/ChannelsContext.tsx +1 -0
  449. package/src/contexts/componentsContext/defaultComponents.ts +7 -1
  450. package/src/contexts/messageInputContext/hooks/useCreateMessageComposer.ts +10 -4
  451. package/src/contexts/themeContext/utils/theme.ts +14 -0
  452. package/src/hooks/actions/__tests__/useChannelActionItems.test.tsx +137 -14
  453. package/src/hooks/actions/__tests__/useChannelActionItemsById.test.tsx +3 -1
  454. package/src/hooks/actions/useChannelActionItems.tsx +60 -2
  455. package/src/hooks/actions/useChannelActionItemsById.ts +8 -1
  456. package/src/i18n/ar.json +12 -1
  457. package/src/i18n/en.json +12 -1
  458. package/src/i18n/es.json +12 -1
  459. package/src/i18n/fr.json +12 -1
  460. package/src/i18n/he.json +12 -1
  461. package/src/i18n/hi.json +12 -1
  462. package/src/i18n/it.json +12 -1
  463. package/src/i18n/ja.json +12 -1
  464. package/src/i18n/ko.json +12 -1
  465. package/src/i18n/nl.json +12 -1
  466. package/src/i18n/pt-br.json +12 -1
  467. package/src/i18n/ru.json +12 -1
  468. package/src/i18n/tr.json +12 -1
  469. package/src/icons/index.ts +1 -0
  470. package/src/icons/megaphone.tsx +21 -0
  471. package/src/icons/shield.tsx +21 -0
  472. package/src/store/SqliteClient.ts +1 -1
  473. package/src/store/mappers/mapDraftMessageToStorable.ts +8 -0
  474. package/src/store/mappers/mapStorableToDraftMessage.ts +8 -0
  475. package/src/store/schema.ts +8 -0
  476. package/src/theme/generated/StreamTokens.types.ts +9 -0
  477. package/src/theme/generated/dark/StreamTokens.android.ts +10 -1
  478. package/src/theme/generated/dark/StreamTokens.ios.ts +10 -1
  479. package/src/theme/generated/dark/StreamTokens.web.ts +10 -1
  480. package/src/theme/generated/light/StreamTokens.android.ts +10 -1
  481. package/src/theme/generated/light/StreamTokens.ios.ts +10 -1
  482. package/src/theme/generated/light/StreamTokens.web.ts +10 -1
  483. package/src/version.json +1 -1
@@ -223,38 +223,47 @@ describe('MessageItemView', () => {
223
223
  });
224
224
  });
225
225
 
226
- it('applies correct styles for when group styles are not single or bottom', async () => {
226
+ it('keeps message-item-view-wrapper free of group-positional padding', async () => {
227
227
  const user = generateUser();
228
228
  const message = generateMessage({ user });
229
229
 
230
230
  renderMessage({ groupStyles: ['top'], message });
231
231
 
232
232
  await waitFor(() => {
233
- expect(screen.getByTestId('message-item-view-wrapper').props.style).toMatchObject({
233
+ const innerStyle = screen.getByTestId('message-item-view-wrapper').props.style;
234
+ expect(innerStyle).toMatchObject({
234
235
  alignItems: 'flex-end',
235
236
  gap: 8,
236
237
  flexDirection: 'row',
237
- paddingTop: 8,
238
- paddingBottom: 4,
239
238
  });
239
+ expect(innerStyle.paddingTop).toBeUndefined();
240
+ expect(innerStyle.paddingBottom).toBeUndefined();
240
241
  });
241
242
  });
242
243
 
243
- it('applies correct styles for when group styles are single/bottom and not last message', async () => {
244
+ it('hoists the per-group padding delta onto message-wrapper for top messages', async () => {
244
245
  const user = generateUser();
245
246
  const message = generateMessage({ user });
246
247
 
247
- renderMessage({ message });
248
+ renderMessage({ groupStyles: ['top'], message });
248
249
 
249
250
  await waitFor(() => {
250
- const data = screen.getByTestId('message-item-view-wrapper').props.style;
251
+ expect(screen.getByTestId('message-wrapper').props.style).toEqual(
252
+ expect.arrayContaining([expect.objectContaining({ paddingTop: 8 })]),
253
+ );
254
+ });
255
+ });
251
256
 
252
- expect(data).toMatchObject({
253
- alignItems: 'flex-end',
254
- gap: 8,
255
- flexDirection: 'row',
256
- paddingBottom: 8,
257
- });
257
+ it('hoists the per-group padding delta onto message-wrapper for bottom messages', async () => {
258
+ const user = generateUser();
259
+ const message = generateMessage({ user });
260
+
261
+ renderMessage({ message });
262
+
263
+ await waitFor(() => {
264
+ expect(screen.getByTestId('message-wrapper').props.style).toEqual(
265
+ expect.arrayContaining([expect.objectContaining({ paddingBottom: 8 })]),
266
+ );
258
267
  });
259
268
  });
260
269
 
@@ -27,7 +27,7 @@ import {
27
27
  State,
28
28
  } from 'simple-markdown';
29
29
 
30
- import type { LocalMessage, UserResponse } from 'stream-chat';
30
+ import type { LocalMessage, MentionEntity, UserResponse } from 'stream-chat';
31
31
 
32
32
  import { generateMarkdownText } from './generateMarkdownText';
33
33
 
@@ -152,7 +152,7 @@ const defaultMarkdownStyles: MarkdownStyle = {
152
152
  flexDirection: 'row',
153
153
  },
154
154
  mentions: {
155
- fontWeight: '700',
155
+ fontWeight: primitives.typographyFontWeightRegular,
156
156
  fontSize: primitives.typographyFontSizeMd,
157
157
  lineHeight: primitives.typographyLineHeightNormal,
158
158
  },
@@ -286,7 +286,7 @@ export const renderText = (params: RenderTextParams) => {
286
286
  },
287
287
  mentions: {
288
288
  ...defaultMarkdownStyles.mentions,
289
- color: semantics.accentPrimary,
289
+ color: semantics.chatTextMention,
290
290
  ...markdownStyles?.mentions,
291
291
  },
292
292
  table: {
@@ -404,26 +404,96 @@ export const renderText = (params: RenderTextParams) => {
404
404
  );
405
405
  };
406
406
 
407
- // take the @ mentions and turn them into markdown?
408
- // translate links
409
- const { mentioned_users } = message;
410
- const mentionedUsernames = (mentioned_users || [])
411
- .map((user) => user.name || user.id)
412
- .filter(Boolean)
407
+ // Collect every mention type the server sent us into a single typed list so
408
+ // the markdown rule, the lookup, and the press payload all see the same shape.
409
+ const {
410
+ mentioned_channel,
411
+ mentioned_group_ids,
412
+ mentioned_groups,
413
+ mentioned_here,
414
+ mentioned_roles,
415
+ mentioned_users,
416
+ } = message;
417
+
418
+ const mentionEntities: MentionEntity[] = [
419
+ ...((mentioned_users ?? []) as UserResponse[]).map(
420
+ (user) => ({ ...user, mentionType: 'user' }) as MentionEntity,
421
+ ),
422
+ ...(mentioned_channel
423
+ ? ([{ id: 'channel', mentionType: 'channel', name: 'channel' }] as MentionEntity[])
424
+ : []),
425
+ ...(mentioned_here
426
+ ? ([{ id: 'here', mentionType: 'here', name: 'here' }] as MentionEntity[])
427
+ : []),
428
+ ...((mentioned_roles ?? []) as string[]).map(
429
+ (role) => ({ id: role, mentionType: 'role', name: role }) as MentionEntity,
430
+ ),
431
+ ...(
432
+ (mentioned_groups ?? (mentioned_group_ids ?? []).map((id) => ({ id, name: id }))) as Array<{
433
+ id: string;
434
+ name?: string;
435
+ }>
436
+ ).map(
437
+ (group) =>
438
+ ({
439
+ id: group.id,
440
+ mentionType: 'user_group',
441
+ name: group.name ?? group.id,
442
+ }) as MentionEntity,
443
+ ),
444
+ ];
445
+
446
+ // Lookup keyed by the rendered mention text (sans `@`), lowercased so we
447
+ // resolve case-insensitively. First-write-wins: if a user shares a name with
448
+ // a role/group, the user entity is preferred — same precedence the React SDK
449
+ // applies via insertion order in its plugin.
450
+ const mentionLookup = new Map<string, MentionEntity>();
451
+ for (const entity of mentionEntities) {
452
+ const key = (entity.name ?? entity.id).toLowerCase();
453
+ if (!mentionLookup.has(key)) mentionLookup.set(key, entity);
454
+ }
455
+
456
+ const mentionTokens = mentionEntities
457
+ .map((entity) => entity.name ?? entity.id)
458
+ .filter((value): value is string => Boolean(value))
413
459
  .sort((a, b) => b.length - a.length)
414
- .map(escapeRegExp);
415
- const mentionedUsers = mentionedUsernames.map((username) => `@${username}`).join('|');
416
- const regEx = new RegExp(`^\\B(${mentionedUsers})`, 'g');
460
+ .map((value) => `@${escapeRegExp(value)}`)
461
+ .join('|');
462
+ const regEx = new RegExp(`^\\B(${mentionTokens})`, 'g');
417
463
  const mentionsMatchFunction: MatchFunction = (source) => regEx.exec(source);
418
464
 
465
+ const colorForMentionType = (mentionType: MentionEntity['mentionType']) => {
466
+ switch (mentionType) {
467
+ case 'user':
468
+ return semantics.chatTextMentionUser;
469
+ case 'channel':
470
+ case 'here':
471
+ return semantics.chatTextMentionBroadcast;
472
+ case 'role':
473
+ return semantics.chatTextMentionRole;
474
+ case 'user_group':
475
+ return semantics.chatTextMentionGroup;
476
+ default:
477
+ return semantics.chatTextMention;
478
+ }
479
+ };
480
+
419
481
  const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {
420
- /**removes the @ prefix of username */
421
- const userName = node.content[0]?.content?.substring(1);
482
+ const matchedText: string | undefined = node.content[0]?.content;
483
+ const matchedName = matchedText?.substring(1) ?? '';
484
+ const matchedEntity = mentionLookup.get(matchedName.toLowerCase());
485
+ const mentionedUser =
486
+ matchedEntity?.mentionType === 'user' ? (matchedEntity as UserResponse) : undefined;
487
+ const mentionColor = matchedEntity
488
+ ? colorForMentionType(matchedEntity.mentionType)
489
+ : semantics.chatTextMention;
490
+
422
491
  const onPress = (event: GestureResponderEvent) => {
423
492
  if (!preventPress && onPressParam) {
424
493
  onPressParam({
425
494
  additionalInfo: {
426
- user: mentioned_users?.find((user: UserResponse) => userName === user.name),
495
+ mentionedEntity: matchedEntity,
496
+ user: mentionedUser,
427
497
  },
428
498
  emitter: 'textMention',
429
499
  event,
@@ -434,6 +504,10 @@ export const renderText = (params: RenderTextParams) => {
434
504
  const onLongPress = (event: GestureResponderEvent) => {
435
505
  if (!preventPress && onLongPressParam) {
436
506
  onLongPressParam({
507
+ additionalInfo: {
508
+ mentionedEntity: matchedEntity,
509
+ user: mentionedUser,
510
+ },
437
511
  emitter: 'textMention',
438
512
  event,
439
513
  });
@@ -441,7 +515,12 @@ export const renderText = (params: RenderTextParams) => {
441
515
  };
442
516
 
443
517
  return (
444
- <Text key={state.key} onLongPress={onLongPress} onPress={onPress} style={styles.mentions}>
518
+ <Text
519
+ key={state.key}
520
+ onLongPress={onLongPress}
521
+ onPress={onPress}
522
+ style={[styles.mentions, { color: mentionColor }]}
523
+ >
445
524
  {Array.isArray(node.content)
446
525
  ? node.content.reduce((acc, current) => acc + current.content, '') || ''
447
526
  : output(node.content, state)}
@@ -492,7 +571,7 @@ export const renderText = (params: RenderTextParams) => {
492
571
  // we have no react rendering support for reflinks
493
572
  reflink: { match: () => null },
494
573
  sublist: { react: listReact },
495
- ...(mentionedUsers
574
+ ...(mentionTokens
496
575
  ? {
497
576
  mentions: {
498
577
  match: mentionsMatchFunction,
@@ -507,7 +586,7 @@ export const renderText = (params: RenderTextParams) => {
507
586
 
508
587
  return (
509
588
  <Markdown
510
- key={`${JSON.stringify(mentioned_users)}-${onlyEmojis}-${
589
+ key={`${JSON.stringify(mentionEntities)}-${onlyEmojis}-${
511
590
  messageOverlay ? JSON.stringify(markdownStyles) : undefined
512
591
  }-${JSON.stringify(semantics)}`}
513
592
  onLink={onLink}
@@ -1,7 +1,6 @@
1
1
  import React, { useEffect, useMemo } from 'react';
2
- import { Modal, StyleSheet, View } from 'react-native';
2
+ import { StyleSheet, View } from 'react-native';
3
3
 
4
- import { GestureHandlerRootView } from 'react-native-gesture-handler';
5
4
  import Animated, {
6
5
  Extrapolation,
7
6
  interpolate,
@@ -52,9 +51,9 @@ import { MessageInputHeightState } from '../../state-store/message-input-height-
52
51
  import { primitives } from '../../theme';
53
52
  import { transitions } from '../../utils/animations/transitions';
54
53
  import { type TextInputOverrideComponent } from '../AutoCompleteInput/AutoCompleteInput';
54
+ import { PollModal } from '../Poll/components/PollModal';
55
55
  import { CreatePoll } from '../Poll/CreatePollContent';
56
56
  import { PortalWhileClosingView } from '../UIComponents/PortalWhileClosingView';
57
- import { SafeAreaViewWrapper } from '../UIComponents/SafeAreaViewWrapper';
58
57
 
59
58
  const useStyles = () => {
60
59
  const {
@@ -67,16 +66,6 @@ const useStyles = () => {
67
66
  flexShrink: 1,
68
67
  minWidth: 0,
69
68
  },
70
- pollModalWrapper: {
71
- alignItems: 'center',
72
- flex: 1,
73
- justifyContent: 'center',
74
- backgroundColor: semantics.backgroundCoreElevation1,
75
- },
76
- pollSafeArea: {
77
- flex: 1,
78
- backgroundColor: semantics.backgroundCoreElevation1,
79
- },
80
69
  container: {
81
70
  alignItems: 'center',
82
71
  flexDirection: 'row',
@@ -129,7 +118,7 @@ const useStyles = () => {
129
118
  shadowRadius: 12,
130
119
  },
131
120
  suggestionsListContainer: {
132
- backgroundColor: semantics.backgroundCoreElevation1,
121
+ backgroundColor: 'transparent',
133
122
  position: 'absolute',
134
123
  width: '100%',
135
124
  },
@@ -211,7 +200,6 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
211
200
  AudioRecordingInProgress,
212
201
  AudioRecordingLockIndicator,
213
202
  AudioRecordingPreview,
214
- AutoCompleteSuggestionList,
215
203
  Input,
216
204
  InputView,
217
205
  MessageComposerLeadingView,
@@ -238,7 +226,6 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
238
226
  inputBoxWrapper,
239
227
  inputContainer,
240
228
  inputFloatingContainer,
241
- suggestionsListContainer: { container: suggestionListContainer },
242
229
  wrapper,
243
230
  },
244
231
  },
@@ -366,7 +353,12 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
366
353
  layout: { height: newHeight },
367
354
  },
368
355
  }) => {
369
- messageInputHeightStore.setHeight(newHeight);
356
+ messageInputHeightStore.setHeight(
357
+ newHeight -
358
+ (selectedPicker && !isKeyboardVisible
359
+ ? attachmentPickerBottomSheetHeight - bottomInset
360
+ : 0),
361
+ );
370
362
  }}
371
363
  style={
372
364
  messageInputFloating
@@ -448,32 +440,17 @@ const MessageComposerWithContext = (props: MessageComposerPropsWithContext) => {
448
440
  <MessageComposerTrailingView />
449
441
  )}
450
442
  </View>
451
- <View
452
- style={[styles.suggestionsListContainer, { bottom: height }, suggestionListContainer]}
453
- >
454
- <AutoCompleteSuggestionList />
455
- </View>
456
443
  </PortalWhileClosingView>
457
444
  </Animated.View>
458
445
 
459
446
  {showPollCreationDialog ? (
460
- <View style={styles.pollModalWrapper}>
461
- <Modal
462
- animationType='slide'
463
- onRequestClose={closePollCreationDialog}
464
- visible={showPollCreationDialog}
465
- >
466
- <GestureHandlerRootView style={styles.pollSafeArea}>
467
- <SafeAreaViewWrapper style={styles.pollSafeArea}>
468
- <CreatePoll
469
- closePollCreationDialog={closePollCreationDialog}
470
- createPollOptionGap={createPollOptionGap}
471
- sendMessage={sendMessage}
472
- />
473
- </SafeAreaViewWrapper>
474
- </GestureHandlerRootView>
475
- </Modal>
476
- </View>
447
+ <PollModal onRequestClose={closePollCreationDialog} visible={showPollCreationDialog}>
448
+ <CreatePoll
449
+ closePollCreationDialog={closePollCreationDialog}
450
+ createPollOptionGap={createPollOptionGap}
451
+ sendMessage={sendMessage}
452
+ />
453
+ </PollModal>
477
454
  ) : null}
478
455
  </MicPositionProvider>
479
456
  );
@@ -60,6 +60,7 @@ import { MessageInputHeightState } from '../../state-store/message-input-height-
60
60
  import { primitives } from '../../theme';
61
61
  import { transitions } from '../../utils/animations/transitions';
62
62
  import { MessageWrapper } from '../Message/MessageItemView/MessageWrapper';
63
+ import { PortalWhileClosingView } from '../UIComponents/PortalWhileClosingView';
63
64
 
64
65
  type FlashListContextApi = { getRef?: () => FlashListRef<LocalMessage> | null } | undefined;
65
66
 
@@ -297,6 +298,7 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
297
298
  threadList = false,
298
299
  } = props;
299
300
  const {
301
+ AutoCompleteSuggestionList,
300
302
  EmptyStateIndicator,
301
303
  MessageListLoadingIndicator: LoadingIndicator,
302
304
  NetworkDownIndicator,
@@ -1135,6 +1137,22 @@ const MessageFlashListWithContext = (props: MessageFlashListPropsWithContext) =>
1135
1137
  />
1136
1138
  </View>
1137
1139
  ) : null}
1140
+ <Animated.View
1141
+ layout={transitions.layout200}
1142
+ style={[
1143
+ {
1144
+ bottom: messageInputFloating ? messageInputHeight + 16 : 0,
1145
+ },
1146
+ styles.suggestionsListContainer,
1147
+ ]}
1148
+ >
1149
+ <PortalWhileClosingView
1150
+ portalHostName='overlay-suggestion-list'
1151
+ portalName='autocomplete-suggestion-list'
1152
+ >
1153
+ <AutoCompleteSuggestionList />
1154
+ </PortalWhileClosingView>
1155
+ </Animated.View>
1138
1156
  <NotificationList bottomOffset={messageInputFloating ? messageInputHeight + 16 : undefined} />
1139
1157
  </View>
1140
1158
  );
@@ -1279,6 +1297,9 @@ const useStyles = () => {
1279
1297
  scrollToBottomButtonContainer,
1280
1298
  unreadMessagesNotificationContainer,
1281
1299
  },
1300
+ messageComposer: {
1301
+ suggestionsListContainer: { container: suggestionListContainer },
1302
+ },
1282
1303
  },
1283
1304
  } = useTheme();
1284
1305
 
@@ -1287,6 +1308,12 @@ const useStyles = () => {
1287
1308
  return useMemo(
1288
1309
  () =>
1289
1310
  StyleSheet.create({
1311
+ suggestionsListContainer: {
1312
+ backgroundColor: 'transparent',
1313
+ position: 'absolute',
1314
+ width: '100%',
1315
+ ...suggestionListContainer,
1316
+ },
1290
1317
  container: {
1291
1318
  flex: 1,
1292
1319
  width: '100%',
@@ -1338,6 +1365,7 @@ const useStyles = () => {
1338
1365
  scrollToBottomButtonContainer,
1339
1366
  stickyHeaderContainer,
1340
1367
  unreadMessagesNotificationContainer,
1368
+ suggestionListContainer,
1341
1369
  ],
1342
1370
  );
1343
1371
  };
@@ -74,6 +74,7 @@ import { primitives } from '../../theme';
74
74
  import { transitions } from '../../utils/animations/transitions';
75
75
  import { useIncomingMessageAnnouncements } from '../Accessibility/hooks/useIncomingMessageAnnouncements';
76
76
  import { MessageWrapper } from '../Message/MessageItemView/MessageWrapper';
77
+ import { PortalWhileClosingView } from '../UIComponents';
77
78
 
78
79
  // This is just to make sure that the scrolling happens in a different task queue.
79
80
  // TODO: Think if we really need this and strive to remove it if we can.
@@ -92,6 +93,9 @@ const useStyles = () => {
92
93
  scrollToBottomButtonContainer,
93
94
  unreadMessagesNotificationContainer,
94
95
  },
96
+ messageComposer: {
97
+ suggestionsListContainer: { container: suggestionListContainer },
98
+ },
95
99
  },
96
100
  } = useTheme();
97
101
 
@@ -100,6 +104,12 @@ const useStyles = () => {
100
104
  return useMemo(
101
105
  () =>
102
106
  StyleSheet.create({
107
+ suggestionsListContainer: {
108
+ backgroundColor: 'transparent',
109
+ position: 'absolute',
110
+ width: '100%',
111
+ ...suggestionListContainer,
112
+ },
103
113
  container: {
104
114
  flex: 1,
105
115
  width: '100%',
@@ -151,6 +161,7 @@ const useStyles = () => {
151
161
  scrollToBottomButtonContainer,
152
162
  stickyHeaderContainer,
153
163
  unreadMessagesNotificationContainer,
164
+ suggestionListContainer,
154
165
  ],
155
166
  );
156
167
  };
@@ -360,6 +371,7 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
360
371
  TypingIndicator,
361
372
  TypingIndicatorContainer,
362
373
  UnreadMessagesNotification,
374
+ AutoCompleteSuggestionList,
363
375
  } = useComponentsContext();
364
376
  const [isUnreadNotificationOpen, setIsUnreadNotificationOpen] = useState<boolean>(false);
365
377
  const { theme } = useTheme();
@@ -1363,6 +1375,22 @@ const MessageListWithContext = (props: MessageListPropsWithContext) => {
1363
1375
  />
1364
1376
  </View>
1365
1377
  ) : null}
1378
+ <Animated.View
1379
+ layout={transitions.layout200}
1380
+ style={[
1381
+ {
1382
+ bottom: messageInputFloating ? messageInputHeight + 16 : 0,
1383
+ },
1384
+ styles.suggestionsListContainer,
1385
+ ]}
1386
+ >
1387
+ <PortalWhileClosingView
1388
+ portalHostName='overlay-suggestion-list'
1389
+ portalName='autocomplete-suggestion-list'
1390
+ >
1391
+ <AutoCompleteSuggestionList />
1392
+ </PortalWhileClosingView>
1393
+ </Animated.View>
1366
1394
  <NotificationList bottomOffset={messageInputFloating ? messageInputHeight + 16 : undefined} />
1367
1395
  </View>
1368
1396
  );
@@ -78,7 +78,7 @@ const useStyles = () => {
78
78
  StyleSheet.create({
79
79
  container: {
80
80
  borderRadius: primitives.radiusLg,
81
- marginTop: 6,
81
+ marginTop: 8,
82
82
  backgroundColor: semantics.backgroundCoreElevation2,
83
83
  borderWidth: 1,
84
84
  borderColor: semantics.borderCoreDefault,
@@ -4,7 +4,7 @@ import { StyleSheet, Text, View } from 'react-native';
4
4
  import { useTheme } from '../../../contexts/themeContext/ThemeContext';
5
5
  import { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';
6
6
  import { Check, IconProps } from '../../../icons';
7
- import { ArrowLeft } from '../../../icons/arrow-left';
7
+ import { Cross } from '../../../icons/xmark-1';
8
8
  import { primitives } from '../../../theme';
9
9
  import { Button } from '../../ui';
10
10
  import { useCanCreatePoll } from '../hooks/useCanCreatePoll';
@@ -43,9 +43,16 @@ export const CreatePollHeader = ({
43
43
 
44
44
  const renderSendPollIcon = useCallback(
45
45
  (props: IconProps) => {
46
- return <Check {...props} height={18} stroke={semantics.textOnAccent} width={18} />;
46
+ return (
47
+ <Check
48
+ {...props}
49
+ height={18}
50
+ stroke={canCreatePoll ? semantics.textOnAccent : semantics.textDisabled}
51
+ width={18}
52
+ />
53
+ );
47
54
  },
48
- [semantics.textOnAccent],
55
+ [canCreatePoll, semantics.textOnAccent, semantics.textDisabled],
49
56
  );
50
57
 
51
58
  return (
@@ -54,9 +61,9 @@ export const CreatePollHeader = ({
54
61
  accessibilityLabelKey='a11y/Close poll creation'
55
62
  variant='secondary'
56
63
  onPress={onBackPressHandler}
57
- type='ghost'
64
+ type='outline'
58
65
  size='md'
59
- LeadingIcon={ArrowLeft}
66
+ LeadingIcon={Cross}
60
67
  iconOnly
61
68
  />
62
69
 
@@ -1,10 +1,10 @@
1
1
  import React, { useCallback, useMemo } from 'react';
2
- import { Modal, StyleSheet, View } from 'react-native';
3
- import { GestureHandlerRootView } from 'react-native-gesture-handler';
2
+ import { StyleSheet, View } from 'react-native';
4
3
 
5
4
  import { GenericPollButton, PollButtonProps } from './Button';
6
5
  import { PollAnswersList } from './PollAnswersList';
7
6
  import { PollInputDialog } from './PollInputDialog';
7
+ import { PollModal } from './PollModal';
8
8
  import { PollModalHeader } from './PollModalHeader';
9
9
  import { PollAllOptions } from './PollOption';
10
10
  import { PollResults } from './PollResults';
@@ -12,7 +12,6 @@ import { PollResults } from './PollResults';
12
12
  import { useChatContext, usePollContext, useTheme, useTranslationContext } from '../../../contexts';
13
13
  import { primitives } from '../../../theme';
14
14
  import { defaultPollOptionCount } from '../../../utils/constants';
15
- import { SafeAreaViewWrapper } from '../../UIComponents/SafeAreaViewWrapper';
16
15
  import {
17
16
  useAddCommentOpen,
18
17
  useAllCommentsOpen,
@@ -51,14 +50,10 @@ export const ViewResultsButton = (props: PollButtonProps) => {
51
50
  type='outline'
52
51
  />
53
52
  {showResults ? (
54
- <Modal animationType='slide' onRequestClose={closeViewResults} visible={showResults}>
55
- <GestureHandlerRootView style={styles.modalRoot}>
56
- <SafeAreaViewWrapper style={styles.safeArea}>
57
- <PollModalHeader onPress={closeViewResults} title={t('Poll Results')} />
58
- <PollResults message={message} poll={poll} />
59
- </SafeAreaViewWrapper>
60
- </GestureHandlerRootView>
61
- </Modal>
53
+ <PollModal onRequestClose={closeViewResults} visible={showResults}>
54
+ <PollModalHeader onPress={closeViewResults} title={t('Poll Results')} />
55
+ <PollResults message={message} poll={poll} />
56
+ </PollModal>
62
57
  ) : null}
63
58
  </>
64
59
  );
@@ -81,8 +76,6 @@ export const ShowAllOptionsButton = (props: PollButtonProps) => {
81
76
  openAllOptions();
82
77
  }, [message, onPress, openAllOptions, poll]);
83
78
 
84
- const styles = useStyles();
85
-
86
79
  return (
87
80
  <>
88
81
  {options && options.length > defaultPollOptionCount ? (
@@ -92,14 +85,10 @@ export const ShowAllOptionsButton = (props: PollButtonProps) => {
92
85
  />
93
86
  ) : null}
94
87
  {showAllOptions ? (
95
- <Modal animationType='slide' onRequestClose={closeAllOptions} visible={showAllOptions}>
96
- <GestureHandlerRootView style={styles.modalRoot}>
97
- <SafeAreaViewWrapper style={styles.safeArea}>
98
- <PollModalHeader onPress={closeAllOptions} title={t('Poll Options')} />
99
- <PollAllOptions message={message} poll={poll} />
100
- </SafeAreaViewWrapper>
101
- </GestureHandlerRootView>
102
- </Modal>
88
+ <PollModal onRequestClose={closeAllOptions} visible={showAllOptions}>
89
+ <PollModalHeader onPress={closeAllOptions} title={t('Poll Options')} />
90
+ <PollAllOptions message={message} poll={poll} />
91
+ </PollModal>
103
92
  ) : null}
104
93
  </>
105
94
  );
@@ -122,8 +111,6 @@ export const ShowAllCommentsButton = (props: PollButtonProps) => {
122
111
  openAllComments();
123
112
  }, [message, onPress, openAllComments, poll]);
124
113
 
125
- const styles = useStyles();
126
-
127
114
  return (
128
115
  <>
129
116
  {answersCount && answersCount > 0 ? (
@@ -133,14 +120,10 @@ export const ShowAllCommentsButton = (props: PollButtonProps) => {
133
120
  />
134
121
  ) : null}
135
122
  {showAnswers ? (
136
- <Modal animationType='slide' onRequestClose={closeAllComments} visible={showAnswers}>
137
- <GestureHandlerRootView style={styles.modalRoot}>
138
- <SafeAreaViewWrapper style={styles.safeArea}>
139
- <PollModalHeader onPress={closeAllComments} title={t('Poll Comments')} />
140
- <PollAnswersList message={message} poll={poll} />
141
- </SafeAreaViewWrapper>
142
- </GestureHandlerRootView>
143
- </Modal>
123
+ <PollModal onRequestClose={closeAllComments} visible={showAnswers}>
124
+ <PollModalHeader onPress={closeAllComments} title={t('Poll Comments')} />
125
+ <PollAnswersList message={message} poll={poll} />
126
+ </PollModal>
144
127
  ) : null}
145
128
  </>
146
129
  );
@@ -254,9 +237,6 @@ const useStyles = () => {
254
237
  return useMemo(() => {
255
238
  return StyleSheet.create({
256
239
  buttonsContainer: { gap: primitives.spacingXs },
257
- modalRoot: {
258
- flex: 1,
259
- },
260
240
  endVoteButton: {
261
241
  borderColor: isPollCreatedByClient
262
242
  ? semantics.chatBorderOnChatOutgoing
@@ -267,10 +247,6 @@ const useStyles = () => {
267
247
  ? semantics.chatBorderOnChatOutgoing
268
248
  : semantics.chatBorderOnChatIncoming,
269
249
  },
270
- safeArea: {
271
- backgroundColor: semantics.backgroundCoreElevation1,
272
- flex: 1,
273
- },
274
250
  });
275
251
  }, [semantics, isPollCreatedByClient]);
276
252
  };