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
@@ -1,12 +1,10 @@
1
1
  import { useEffect, useMemo } from 'react';
2
2
 
3
- import { FixedSizeQueueCache, MessageComposer } from 'stream-chat';
3
+ import { MessageComposer } from 'stream-chat';
4
4
 
5
5
  import { useChatContext } from '../../chatContext/ChatContext';
6
6
  import { MessageComposerContextValue } from '../../messageComposerContext/MessageComposerContext';
7
7
 
8
- const queueCache = new FixedSizeQueueCache<string, MessageComposer>(64);
9
-
10
8
  export const useCreateMessageComposer = ({
11
9
  editing: editedMessage,
12
10
  thread: parentMessage,
@@ -14,6 +12,7 @@ export const useCreateMessageComposer = ({
14
12
  channel,
15
13
  }: Pick<MessageComposerContextValue, 'channel' | 'threadInstance' | 'thread' | 'editing'>) => {
16
14
  const { client } = useChatContext();
15
+ const { messageComposerCache: queueCache } = client;
17
16
 
18
17
  const cachedEditedMessage = useMemo(() => {
19
18
  if (!editedMessage) return undefined;
@@ -69,7 +68,14 @@ export const useCreateMessageComposer = ({
69
68
  } else {
70
69
  return channel.messageComposer;
71
70
  }
72
- }, [cachedEditedMessage, cachedParentMessage, channel, client, threadInstance]);
71
+ }, [
72
+ cachedEditedMessage,
73
+ cachedParentMessage,
74
+ channel.messageComposer,
75
+ client,
76
+ queueCache,
77
+ threadInstance,
78
+ ]);
73
79
 
74
80
  if (
75
81
  (['legacy_thread', 'message'] as MessageComposer['contextType'][]).includes(
@@ -299,12 +299,14 @@ export type Theme = {
299
299
  contentContainer: ViewStyle;
300
300
  date: TextStyle;
301
301
  mutedStatus: IconProps;
302
+ pinnedStatus: IconProps;
302
303
  messageDeliveryStatus: {
303
304
  container: ViewStyle;
304
305
  text: TextStyle;
305
306
  checkAllIcon: IconProps;
306
307
  checkIcon: IconProps;
307
308
  timeIcon: IconProps;
309
+ username: TextStyle;
308
310
  };
309
311
  lowerRow: ViewStyle;
310
312
  title: TextStyle;
@@ -561,6 +563,10 @@ export type Theme = {
561
563
  avatarSize: number;
562
564
  column: ViewStyle;
563
565
  container: ViewStyle;
566
+ enhancedMentionContainer: ViewStyle;
567
+ enhancedMentionIcon: ViewStyle;
568
+ enhancedMentionSubtitle: TextStyle;
569
+ enhancedMentionTitle: TextStyle;
564
570
  name: TextStyle;
565
571
  tag: TextStyle;
566
572
  };
@@ -568,6 +574,7 @@ export type Theme = {
568
574
  suggestionsListContainer: {
569
575
  container: ViewStyle;
570
576
  flatlist: ViewStyle;
577
+ flatlistContentContainer: ViewStyle;
571
578
  };
572
579
  videoAttachmentUploadPreview: {
573
580
  durationContainer: ViewStyle;
@@ -1355,8 +1362,10 @@ export const defaultTheme: Theme = {
1355
1362
  checkAllIcon: {},
1356
1363
  checkIcon: {},
1357
1364
  timeIcon: {},
1365
+ username: {},
1358
1366
  },
1359
1367
  mutedStatus: {},
1368
+ pinnedStatus: {},
1360
1369
  lowerRow: {},
1361
1370
  title: {},
1362
1371
  unreadContainer: {},
@@ -1598,6 +1607,10 @@ export const defaultTheme: Theme = {
1598
1607
  avatarSize: 40,
1599
1608
  column: {},
1600
1609
  container: {},
1610
+ enhancedMentionContainer: {},
1611
+ enhancedMentionIcon: {},
1612
+ enhancedMentionSubtitle: {},
1613
+ enhancedMentionTitle: {},
1601
1614
  name: {},
1602
1615
  tag: {},
1603
1616
  },
@@ -1605,6 +1618,7 @@ export const defaultTheme: Theme = {
1605
1618
  suggestionsListContainer: {
1606
1619
  container: {},
1607
1620
  flatlist: {},
1621
+ flatlistContentContainer: {},
1608
1622
  },
1609
1623
  wrapper: {},
1610
1624
  linkPreviewList: {
@@ -99,30 +99,43 @@ describe('useChannelActionItems', () => {
99
99
  });
100
100
 
101
101
  it('returns default channel action items', () => {
102
- const { result } = renderHook(() => useChannelActionItems({ channel }));
102
+ const { result } = renderHook(() => useChannelActionItems({ channel, surface: 'list' }));
103
103
 
104
- expect(result.current).toHaveLength(3);
104
+ expect(result.current).toHaveLength(4);
105
105
  expect(result.current.map((item) => item.action)).toEqual([
106
106
  channelActions.muteChannel,
107
+ channelActions.pin,
107
108
  channelActions.leave,
108
109
  expect.any(Function),
109
110
  ]);
110
- expect(result.current.map((item) => item.id)).toEqual(['mute', 'leave', 'deleteChannel']);
111
+ expect(result.current.map((item) => item.id)).toEqual([
112
+ 'mute',
113
+ 'pin',
114
+ 'leave',
115
+ 'deleteChannel',
116
+ ]);
111
117
  expect(result.current.map((item) => item.type)).toEqual([
118
+ 'standard',
112
119
  'standard',
113
120
  'destructive',
114
121
  'destructive',
115
122
  ]);
116
- expect(result.current.map((item) => item.placement)).toEqual(['swipe', 'sheet', 'sheet']);
123
+ expect(result.current.map((item) => item.placement)).toEqual([
124
+ 'swipe',
125
+ 'sheet',
126
+ 'sheet',
127
+ 'sheet',
128
+ ]);
117
129
  });
118
130
 
119
131
  it('returns muteUser only in direct chats', () => {
120
132
  jest.spyOn(useIsDirectChatModule, 'useIsDirectChat').mockReturnValue(true);
121
133
 
122
- const { result } = renderHook(() => useChannelActionItems({ channel }));
134
+ const { result } = renderHook(() => useChannelActionItems({ channel, surface: 'list' }));
123
135
 
124
136
  expect(result.current.map((item) => item.id)).toEqual([
125
137
  'mute',
138
+ 'pin',
126
139
  'muteUser',
127
140
  'block',
128
141
  'leave',
@@ -143,7 +156,7 @@ describe('useChannelActionItems', () => {
143
156
  });
144
157
  jest.spyOn(useMutedUsersModule, 'useMutedUsers').mockReturnValue([] as Mute[]);
145
158
 
146
- const { result } = renderHook(() => useChannelActionItems({ channel }));
159
+ const { result } = renderHook(() => useChannelActionItems({ channel, surface: 'list' }));
147
160
 
148
161
  const muteItem = result.current.find((item) => item.id === 'mute');
149
162
  const muteUserItem = result.current.find((item) => item.id === 'muteUser');
@@ -152,7 +165,7 @@ describe('useChannelActionItems', () => {
152
165
  });
153
166
 
154
167
  it('forwards options from item.action to the underlying channel action', async () => {
155
- const { result } = renderHook(() => useChannelActionItems({ channel }));
168
+ const { result } = renderHook(() => useChannelActionItems({ channel, surface: 'list' }));
156
169
 
157
170
  const muteItem = result.current.find((item) => item.id === 'mute');
158
171
  expect(muteItem).toBeDefined();
@@ -165,7 +178,7 @@ describe('useChannelActionItems', () => {
165
178
  it('marks block as destructive when user is not blocked', () => {
166
179
  jest.spyOn(useIsDirectChatModule, 'useIsDirectChat').mockReturnValue(true);
167
180
 
168
- const { result } = renderHook(() => useChannelActionItems({ channel }));
181
+ const { result } = renderHook(() => useChannelActionItems({ channel, surface: 'list' }));
169
182
 
170
183
  const blockItem = result.current.find((item) => item.id === 'block');
171
184
  expect(blockItem?.type).toBe('destructive');
@@ -175,7 +188,9 @@ describe('useChannelActionItems', () => {
175
188
  jest.spyOn(useIsDirectChatModule, 'useIsDirectChat').mockReturnValue(true);
176
189
  const blockedChannel = createChannelMock({ blockedUserIds: ['other-user-id'] });
177
190
 
178
- const { result } = renderHook(() => useChannelActionItems({ channel: blockedChannel }));
191
+ const { result } = renderHook(() =>
192
+ useChannelActionItems({ channel: blockedChannel, surface: 'list' }),
193
+ );
179
194
 
180
195
  const blockItem = result.current.find((item) => item.id === 'block');
181
196
  expect(blockItem?.type).toBe('standard');
@@ -190,6 +205,7 @@ describe('useChannelActionItems', () => {
190
205
  useChannelActionItems({
191
206
  channel,
192
207
  getChannelActionItems: customGetChannelActionItems,
208
+ surface: 'list',
193
209
  }),
194
210
  );
195
211
 
@@ -202,6 +218,7 @@ describe('useChannelActionItems', () => {
202
218
  isBlocked: undefined,
203
219
  isDirectChat: false,
204
220
  isPinned: false,
221
+ surface: 'list',
205
222
  t: expect.any(Function),
206
223
  userMuteActive: false,
207
224
  },
@@ -228,6 +245,7 @@ describe('getChannelActionItems', () => {
228
245
  isBlocked: undefined,
229
246
  isDirectChat: false,
230
247
  isPinned: false,
248
+ surface: 'list',
231
249
  t: ((value: string) => value) as TranslationContextValue['t'],
232
250
  userMuteActive: false,
233
251
  });
@@ -240,6 +258,7 @@ describe('getChannelActionItems', () => {
240
258
  isBlocked: undefined,
241
259
  isDirectChat: false,
242
260
  isPinned: false,
261
+ surface: 'list',
243
262
  t: ((value: string) => value) as TranslationContextValue['t'],
244
263
  userMuteActive: false,
245
264
  },
@@ -248,11 +267,13 @@ describe('getChannelActionItems', () => {
248
267
 
249
268
  expect(actionItems.map((item) => item.action)).toEqual([
250
269
  channelActions.muteChannel,
270
+ channelActions.pin,
251
271
  channelActions.leave,
252
272
  expect.any(Function),
253
273
  ]);
254
- expect(actionItems.map((item) => item.id)).toEqual(['mute', 'leave', 'deleteChannel']);
274
+ expect(actionItems.map((item) => item.id)).toEqual(['mute', 'pin', 'leave', 'deleteChannel']);
255
275
  expect(actionItems.map((item) => item.type)).toEqual([
276
+ 'standard',
256
277
  'standard',
257
278
  'destructive',
258
279
  'destructive',
@@ -269,12 +290,14 @@ describe('getChannelActionItems', () => {
269
290
  isBlocked: true,
270
291
  isDirectChat: true,
271
292
  isPinned: false,
293
+ surface: 'list',
272
294
  t: ((value: string) => value) as TranslationContextValue['t'],
273
295
  userMuteActive: true,
274
296
  });
275
297
 
276
298
  expect(actionItems.map((item) => item.id)).toEqual([
277
299
  'mute',
300
+ 'pin',
278
301
  'muteUser',
279
302
  'block',
280
303
  'leave',
@@ -282,6 +305,7 @@ describe('getChannelActionItems', () => {
282
305
  ]);
283
306
  expect(actionItems.map((item) => item.action)).toEqual([
284
307
  channelActions.unmuteChannel,
308
+ channelActions.pin,
285
309
  channelActions.unmuteUser,
286
310
  channelActions.unblockUser,
287
311
  channelActions.leave,
@@ -289,6 +313,7 @@ describe('getChannelActionItems', () => {
289
313
  ]);
290
314
  expect(actionItems.map((item) => item.label)).toEqual([
291
315
  'Unmute Chat',
316
+ 'Pin Chat',
292
317
  'Unmute User',
293
318
  'Unblock User',
294
319
  'Leave Chat',
@@ -300,6 +325,7 @@ describe('getChannelActionItems', () => {
300
325
  'sheet',
301
326
  'sheet',
302
327
  'sheet',
328
+ 'sheet',
303
329
  ]);
304
330
  });
305
331
 
@@ -312,6 +338,7 @@ describe('getChannelActionItems', () => {
312
338
  isBlocked: undefined,
313
339
  isDirectChat: false,
314
340
  isPinned: false,
341
+ surface: 'list',
315
342
  t: ((value: string) => value) as TranslationContextValue['t'],
316
343
  userMuteActive: false,
317
344
  });
@@ -328,11 +355,12 @@ describe('getChannelActionItems', () => {
328
355
  isBlocked: undefined,
329
356
  isDirectChat: false,
330
357
  isPinned: false,
358
+ surface: 'list',
331
359
  t: ((value: string) => value) as TranslationContextValue['t'],
332
360
  userMuteActive: false,
333
361
  });
334
362
 
335
- expect(actionItems.map((item) => item.id)).toEqual(['mute', 'leave']);
363
+ expect(actionItems.map((item) => item.id)).toEqual(['mute', 'pin', 'leave']);
336
364
  });
337
365
 
338
366
  it('uses group mute variants for labels and placements', () => {
@@ -345,6 +373,7 @@ describe('getChannelActionItems', () => {
345
373
  isBlocked: undefined,
346
374
  isDirectChat: false,
347
375
  isPinned: false,
376
+ surface: 'list',
348
377
  t: ((value: string) => value) as TranslationContextValue['t'],
349
378
  userMuteActive: false,
350
379
  });
@@ -353,9 +382,101 @@ describe('getChannelActionItems', () => {
353
382
  expect(actionItems[0].label).toBe('Unmute Group');
354
383
  expect(actionItems[0].placement).toBe('swipe');
355
384
 
356
- expect(actionItems[1].action).toBe(channelActions.leave);
357
- expect(actionItems[1].label).toBe('Leave Group');
358
- expect(actionItems[1].placement).toBe('sheet');
385
+ const leaveItem = actionItems.find((item) => item.id === 'leave');
386
+ expect(leaveItem?.action).toBe(channelActions.leave);
387
+ expect(leaveItem?.label).toBe('Leave Group');
388
+ expect(leaveItem?.placement).toBe('sheet');
389
+ });
390
+
391
+ it('pin item toggles to unpin when channel is pinned', () => {
392
+ const channelActions = createChannelActions();
393
+ const actionItems = buildDefaultChannelActionItems({
394
+ actions: channelActions,
395
+ channel,
396
+ channelMuteActive: false,
397
+ isArchived: false,
398
+ isBlocked: undefined,
399
+ isDirectChat: false,
400
+ isPinned: true,
401
+ surface: 'list',
402
+ t: ((value: string) => value) as TranslationContextValue['t'],
403
+ userMuteActive: false,
404
+ });
405
+
406
+ const pinItem = actionItems.find((item) => item.id === 'pin');
407
+ expect(pinItem?.action).toBe(channelActions.unpin);
408
+ expect(pinItem?.label).toBe('Unpin Group');
409
+ expect(pinItem?.placement).toBe('sheet');
410
+ });
411
+
412
+ it('pin item uses direct-chat label variant', () => {
413
+ const channelActions = createChannelActions();
414
+ const actionItems = buildDefaultChannelActionItems({
415
+ actions: channelActions,
416
+ channel,
417
+ channelMuteActive: false,
418
+ isArchived: false,
419
+ isBlocked: undefined,
420
+ isDirectChat: true,
421
+ isPinned: false,
422
+ surface: 'list',
423
+ t: ((value: string) => value) as TranslationContextValue['t'],
424
+ userMuteActive: false,
425
+ });
426
+
427
+ const pinItem = actionItems.find((item) => item.id === 'pin');
428
+ expect(pinItem?.action).toBe(channelActions.pin);
429
+ expect(pinItem?.label).toBe('Pin Chat');
430
+ });
431
+
432
+ it('omits the pin item when building for the details surface', () => {
433
+ const actionItems = buildDefaultChannelActionItems({
434
+ actions: createChannelActions(),
435
+ channel,
436
+ channelMuteActive: false,
437
+ isArchived: false,
438
+ isBlocked: undefined,
439
+ isDirectChat: false,
440
+ isPinned: false,
441
+ surface: 'details',
442
+ t: ((value: string) => value) as TranslationContextValue['t'],
443
+ userMuteActive: false,
444
+ });
445
+
446
+ expect(actionItems.map((item) => item.id)).not.toContain('pin');
447
+ });
448
+
449
+ it('includes the pin item when building for the list surface', () => {
450
+ const actionItems = buildDefaultChannelActionItems({
451
+ actions: createChannelActions(),
452
+ channel,
453
+ channelMuteActive: false,
454
+ isArchived: false,
455
+ isBlocked: undefined,
456
+ isDirectChat: false,
457
+ isPinned: false,
458
+ surface: 'list',
459
+ t: ((value: string) => value) as TranslationContextValue['t'],
460
+ userMuteActive: false,
461
+ });
462
+
463
+ expect(actionItems.map((item) => item.id)).toContain('pin');
464
+ });
465
+
466
+ it('applies no surface-specific filtering when surface is omitted', () => {
467
+ const actionItems = buildDefaultChannelActionItems({
468
+ actions: createChannelActions(),
469
+ channel,
470
+ channelMuteActive: false,
471
+ isArchived: false,
472
+ isBlocked: undefined,
473
+ isDirectChat: false,
474
+ isPinned: false,
475
+ t: ((value: string) => value) as TranslationContextValue['t'],
476
+ userMuteActive: false,
477
+ });
478
+
479
+ expect(actionItems.map((item) => item.id)).toEqual(['mute', 'pin', 'leave', 'deleteChannel']);
359
480
  });
360
481
 
361
482
  it('mute and muteUser reflect their respective active states independently', () => {
@@ -368,6 +489,7 @@ describe('getChannelActionItems', () => {
368
489
  isBlocked: undefined,
369
490
  isDirectChat: true,
370
491
  isPinned: false,
492
+ surface: 'list',
371
493
  t: ((value: string) => value) as TranslationContextValue['t'],
372
494
  userMuteActive: true,
373
495
  });
@@ -393,6 +515,7 @@ describe('getChannelActionItems', () => {
393
515
  isBlocked: undefined,
394
516
  isDirectChat: false,
395
517
  isPinned: false,
518
+ surface: 'list',
396
519
  t: ((value: string) => value) as TranslationContextValue['t'],
397
520
  userMuteActive: false,
398
521
  });
@@ -41,7 +41,7 @@ describe('useChannelActionItemsById', () => {
41
41
  .spyOn(useChannelActionItemsModule, 'useChannelActionItems')
42
42
  .mockReturnValue(channelActionItems);
43
43
 
44
- const { result } = renderHook(() => useChannelActionItemsById({ channel }));
44
+ const { result } = renderHook(() => useChannelActionItemsById({ channel, surface: 'list' }));
45
45
 
46
46
  expect(result.current.pin).toBe(channelActionItems[0]);
47
47
  expect(result.current.deleteChannel).toBe(channelActionItems[1]);
@@ -59,12 +59,14 @@ describe('useChannelActionItemsById', () => {
59
59
  useChannelActionItemsById({
60
60
  channel,
61
61
  getChannelActionItems,
62
+ surface: 'list',
62
63
  }),
63
64
  );
64
65
 
65
66
  expect(useChannelActionItemsSpy).toHaveBeenCalledWith({
66
67
  channel,
67
68
  getChannelActionItems,
69
+ surface: 'list',
68
70
  });
69
71
  });
70
72
  });
@@ -15,18 +15,50 @@ import { useIsChannelMuted } from '../../components/ChannelPreview/hooks/useIsCh
15
15
  import { useUserMuteActive } from '../../components/Message/hooks/useUserMuteActive';
16
16
  import { useTheme, useTranslationContext } from '../../contexts';
17
17
  import type { TranslationContextValue } from '../../contexts/translationContext/TranslationContext';
18
- import { IconProps, Mute, BlockUser, Delete, Sound } from '../../icons';
18
+ import { IconProps, Mute, BlockUser, Delete, Pin, Sound, Unpin } from '../../icons';
19
19
  import { ArrowBoxLeft } from '../../icons/leave';
20
20
  import { useChannelMembershipState } from '../useChannelMembershipState';
21
21
  import { useIsDirectChat } from '../useIsDirectChat';
22
22
  import { useStateStore } from '../useStateStore';
23
23
 
24
24
  export type ChannelActionItem = ActionItem<
25
- 'mute' | 'muteUser' | 'block' | 'leave' | 'deleteChannel' | string
25
+ 'mute' | 'muteUser' | 'block' | 'leave' | 'deleteChannel' | 'pin' | string
26
26
  > & {
27
+ /**
28
+ * Per item routing **within a channel preview interaction** (swipe row vs
29
+ * the sheet that opens from it). Only meaningful when the items are consumed
30
+ * from `<ChannelSwipableWrapper>`:
31
+ *
32
+ * - `'swipe'`: shown only in the swipe-row chips.
33
+ * - `'sheet'`: shown only in the swipe-triggered options sheet.
34
+ * - `'both'`: shown in both swipe row and sheet.
35
+ *
36
+ * The standalone Channel Details screen does **not** filter by `placement` -
37
+ * use {@link ChannelActionSurface} (`surface`) instead to vary items between
38
+ * the channel list and the Channel Details screen.
39
+ */
27
40
  placement: 'both' | 'sheet' | 'swipe';
28
41
  };
29
42
 
43
+ /**
44
+ * Identifies which top level UI surface is requesting channel action items.
45
+ * Passed verbatim into {@link ChannelActionItemsParams} so the default builder
46
+ * and any integrator supplied `getChannelActionItems` can branch on it - i.e.
47
+ * to drop or relabel an item on a specific surface or to provide an entirely
48
+ * different builder per surface.
49
+ *
50
+ * - `'list'`: anything driven by a ChannelList interaction, the swipe row
51
+ * chips on a channel preview and the bottom sheet that opens from them.
52
+ * Subrouting between the swipe row and the sheet is handled by the per item
53
+ * {@link ChannelActionItem.placement} field.
54
+ * - `'details'`: items for the standalone Channel Details screen.
55
+ *
56
+ * `surface` operates at the call site level (which UI is asking). It is
57
+ * optional and when omitted, the default builder applies no surface specific
58
+ * filtering and returns every item it would otherwise produce.
59
+ */
60
+ export type ChannelActionSurface = 'list' | 'details';
61
+
30
62
  export type ChannelActionItemsParams = {
31
63
  actions: ChannelActions;
32
64
  channel: Channel;
@@ -35,6 +67,7 @@ export type ChannelActionItemsParams = {
35
67
  isBlocked: boolean | undefined;
36
68
  isDirectChat: boolean;
37
69
  isPinned: boolean;
70
+ surface?: ChannelActionSurface;
38
71
  t: TranslationContextValue['t'];
39
72
  userMuteActive: boolean;
40
73
  };
@@ -67,10 +100,14 @@ export const buildDefaultChannelActionItems: BuildDefaultChannelActionItems = (
67
100
  unmuteUser,
68
101
  blockUser,
69
102
  unblockUser,
103
+ pin,
104
+ unpin,
70
105
  },
71
106
  channelMuteActive,
72
107
  isBlocked,
73
108
  isDirectChat,
109
+ isPinned,
110
+ surface,
74
111
  userMuteActive,
75
112
  t,
76
113
  channel,
@@ -105,6 +142,23 @@ export const buildDefaultChannelActionItems: BuildDefaultChannelActionItems = (
105
142
  },
106
143
  ];
107
144
 
145
+ if (surface !== 'details') {
146
+ actionItems.push({
147
+ action: isPinned ? unpin : pin,
148
+ Icon: (props) => <ChannelActionsIcon Icon={isPinned ? Unpin : Pin} {...props} />,
149
+ id: 'pin',
150
+ label: isDirectChat
151
+ ? isPinned
152
+ ? t('Unpin Chat')
153
+ : t('Pin Chat')
154
+ : isPinned
155
+ ? t('Unpin Group')
156
+ : t('Pin Group'),
157
+ placement: 'sheet',
158
+ type: 'standard',
159
+ });
160
+ }
161
+
108
162
  if (isDirectChat) {
109
163
  actionItems.push({
110
164
  action: userMuteActive ? unmuteUser : muteUser,
@@ -186,6 +240,7 @@ export const getChannelActionItems: GetChannelActionItems = ({ defaultItems }) =
186
240
 
187
241
  type UseChannelActionItemsParams = {
188
242
  channel: Channel;
243
+ surface?: ChannelActionSurface;
189
244
  getChannelActionItems?: GetChannelActionItems;
190
245
  };
191
246
 
@@ -194,6 +249,7 @@ const blockedUsersStateSelector = (state: BlockedUsersState) =>
194
249
 
195
250
  export const useChannelActionItems = ({
196
251
  channel,
252
+ surface,
197
253
  getChannelActionItems: getChannelActionItemsProp = getChannelActionItems,
198
254
  }: UseChannelActionItemsParams) => {
199
255
  const { t } = useTranslationContext();
@@ -225,6 +281,7 @@ export const useChannelActionItems = ({
225
281
  isBlocked,
226
282
  isDirectChat,
227
283
  isPinned,
284
+ surface,
228
285
  t,
229
286
  userMuteActive,
230
287
  }),
@@ -236,6 +293,7 @@ export const useChannelActionItems = ({
236
293
  isBlocked,
237
294
  isDirectChat,
238
295
  isPinned,
296
+ surface,
239
297
  t,
240
298
  userMuteActive,
241
299
  ],
@@ -2,23 +2,30 @@ import { useMemo } from 'react';
2
2
 
3
3
  import type { Channel } from 'stream-chat';
4
4
 
5
- import type { ChannelActionItem, GetChannelActionItems } from './useChannelActionItems';
5
+ import type {
6
+ ChannelActionItem,
7
+ ChannelActionSurface,
8
+ GetChannelActionItems,
9
+ } from './useChannelActionItems';
6
10
  import { useChannelActionItems } from './useChannelActionItems';
7
11
 
8
12
  export type ChannelActionItemsById = Partial<Record<ChannelActionItem['id'], ChannelActionItem>>;
9
13
 
10
14
  type UseChannelActionItemsByIdParams = {
11
15
  channel: Channel;
16
+ surface?: ChannelActionSurface;
12
17
  getChannelActionItems?: GetChannelActionItems;
13
18
  };
14
19
 
15
20
  export const useChannelActionItemsById = ({
16
21
  channel,
22
+ surface,
17
23
  getChannelActionItems,
18
24
  }: UseChannelActionItemsByIdParams) => {
19
25
  const channelActionItems = useChannelActionItems({
20
26
  channel,
21
27
  getChannelActionItems,
28
+ surface,
22
29
  });
23
30
 
24
31
  return useMemo(
package/src/i18n/ar.json CHANGED
@@ -274,6 +274,7 @@
274
274
  "a11y/Loading failed": "Loading failed",
275
275
  "a11y/Message actions": "Message actions",
276
276
  "a11y/Muted": "مكتوم",
277
+ "a11y/Pinned": "مثبت",
277
278
  "a11y/New message from {{user}}": "New message from {{user}}",
278
279
  "a11y/Offline": "Offline",
279
280
  "a11y/Open message actions": "Open message actions",
@@ -435,5 +436,15 @@
435
436
  "a11y/Message from {{sender}}": "رسالة من {{sender}}",
436
437
  "a11y/Gallery Image": "صورة من المعرض",
437
438
  "a11y/Gallery Video": "فيديو من المعرض",
438
- "a11y/{{position}} of {{count}}": "{{position}} من {{count}}"
439
+ "a11y/{{position}} of {{count}}": "{{position}} من {{count}}",
440
+ "Notify all {{ role }} members": "Notify all {{ role }} members",
441
+ "a11y/Command suggestions available": "Command suggestions available",
442
+ "a11y/Emoji suggestions available": "Emoji suggestions available",
443
+ "a11y/Mention suggestions available": "Mention suggestions available",
444
+ "mention/Channel Description": "Notify everyone in this channel",
445
+ "mention/Here Description": "Notify every online member in this channel",
446
+ "Pin Chat": "تثبيت الدردشة",
447
+ "Pin Group": "تثبيت المجموعة",
448
+ "Unpin Chat": "إلغاء تثبيت الدردشة",
449
+ "Unpin Group": "إلغاء تثبيت المجموعة"
439
450
  }
package/src/i18n/en.json CHANGED
@@ -246,6 +246,8 @@
246
246
  "Leave Group": "Leave Group",
247
247
  "Mute Chat": "Mute Chat",
248
248
  "Mute Group": "Mute Group",
249
+ "Pin Chat": "Pin Chat",
250
+ "Pin Group": "Pin Group",
249
251
  "Admin": "Admin",
250
252
  "Moderator": "Moderator",
251
253
  "Offline": "Offline",
@@ -255,6 +257,8 @@
255
257
  "Unarchive Group": "Unarchive Group",
256
258
  "Unmute Chat": "Unmute Chat",
257
259
  "Unmute Group": "Unmute Group",
260
+ "Unpin Chat": "Unpin Chat",
261
+ "Unpin Group": "Unpin Group",
258
262
  "{{memberCount}} members, {{onlineCount}} online_one": "{{memberCount}} member, {{onlineCount}} online",
259
263
  "{{memberCount}} members, {{onlineCount}} online_other": "{{memberCount}} members, {{onlineCount}} online",
260
264
  "{{memberCount}} members, {{onlineCount}} online_many": "{{memberCount}} members, {{onlineCount}} online",
@@ -284,6 +288,7 @@
284
288
  "a11y/Message from you": "Message from you",
285
289
  "a11y/Message from {{sender}}": "Message from {{sender}}",
286
290
  "a11y/Muted": "Muted",
291
+ "a11y/Pinned": "Pinned",
287
292
  "a11y/New message from {{user}}": "New message from {{user}}",
288
293
  "a11y/Offline": "Offline",
289
294
  "a11y/Open message actions": "Open message actions",
@@ -435,5 +440,11 @@
435
440
  "a11y/{{count}} unread messages": "{{count}} unread messages",
436
441
  "a11y/Gallery Image": "Gallery image",
437
442
  "a11y/Gallery Video": "Gallery video",
438
- "a11y/{{position}} of {{count}}": "{{position}} of {{count}}"
443
+ "a11y/{{position}} of {{count}}": "{{position}} of {{count}}",
444
+ "Notify all {{ role }} members": "Notify all {{ role }} members",
445
+ "a11y/Command suggestions available": "Command suggestions available",
446
+ "a11y/Emoji suggestions available": "Emoji suggestions available",
447
+ "a11y/Mention suggestions available": "Mention suggestions available",
448
+ "mention/Channel Description": "Notify everyone in this channel",
449
+ "mention/Here Description": "Notify every online member in this channel"
439
450
  }