stream-chat-react-native-core 5.39.5 → 5.40.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1019) hide show
  1. package/README.md +0 -1
  2. package/lib/commonjs/components/Attachment/Attachment.js +1 -1
  3. package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
  4. package/lib/commonjs/components/Attachment/Card.js +6 -6
  5. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  6. package/lib/commonjs/components/Attachment/FileAttachment.js +5 -5
  7. package/lib/commonjs/components/Attachment/FileAttachment.js.map +1 -1
  8. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js +1 -1
  9. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js.map +1 -1
  10. package/lib/commonjs/components/Attachment/Gallery.js +29 -22
  11. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  12. package/lib/commonjs/components/Attachment/Giphy.js +8 -8
  13. package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
  14. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGallery.js +7 -0
  15. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGallery.js.map +1 -1
  16. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js +3 -1
  17. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js.map +1 -1
  18. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js +3 -0
  19. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js.map +1 -1
  20. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js +4 -0
  21. package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js.map +1 -1
  22. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js +2 -0
  23. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  24. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnailGrid.js +2 -0
  25. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnailGrid.js.map +1 -1
  26. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +3 -3
  27. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  28. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +1 -2
  29. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
  30. package/lib/commonjs/components/Avatar/Avatar.js +4 -0
  31. package/lib/commonjs/components/Avatar/Avatar.js.map +1 -1
  32. package/lib/commonjs/components/Avatar/GroupAvatar.js +4 -0
  33. package/lib/commonjs/components/Avatar/GroupAvatar.js.map +1 -1
  34. package/lib/commonjs/components/Channel/Channel.js +298 -429
  35. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  36. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +0 -2
  37. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  38. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
  39. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  40. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +26 -10
  41. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  42. package/lib/commonjs/components/ChannelList/ChannelList.js +0 -2
  43. package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
  44. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -1
  45. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  46. package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessageNotification.js +8 -18
  47. package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessageNotification.js.map +1 -1
  48. package/lib/commonjs/components/Chat/Chat.js +2 -9
  49. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  50. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +3 -3
  51. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  52. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +0 -2
  53. package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  54. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +16 -13
  55. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  56. package/lib/commonjs/components/ImageGallery/ImageGallery.js +58 -96
  57. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  58. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js +3 -3
  59. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  60. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +92 -90
  61. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  62. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +39 -39
  63. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  64. package/lib/commonjs/components/ImageGallery/components/ImageGalleryOverlay.js.map +1 -1
  65. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +221 -221
  66. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
  67. package/lib/commonjs/components/Indicators/LoadingIndicator.js +1 -1
  68. package/lib/commonjs/components/Indicators/LoadingIndicator.js.map +1 -1
  69. package/lib/commonjs/components/Message/Message.js +123 -173
  70. package/lib/commonjs/components/Message/Message.js.map +1 -1
  71. package/lib/commonjs/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
  72. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +40 -144
  73. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  74. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js +1 -1
  75. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  76. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +0 -1
  77. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  78. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js +20 -34
  79. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
  80. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +180 -44
  81. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  82. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +1 -1
  83. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  84. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListBottom.js +234 -0
  85. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListBottom.js.map +1 -0
  86. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListTop.js +195 -0
  87. package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListTop.js.map +1 -0
  88. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +4 -16
  89. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  90. package/lib/commonjs/components/Message/hooks/useMessageActions.js +36 -72
  91. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
  92. package/lib/commonjs/components/Message/hooks/useMessageData.js +38 -0
  93. package/lib/commonjs/components/Message/hooks/useMessageData.js.map +1 -0
  94. package/lib/commonjs/components/Message/hooks/useProcessReactions.js +3 -3
  95. package/lib/commonjs/components/Message/hooks/useProcessReactions.js.map +1 -1
  96. package/lib/commonjs/components/Message/utils/messageActions.js +4 -6
  97. package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
  98. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +1 -1
  99. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  100. package/lib/commonjs/components/MessageInput/MessageInput.js +1 -2
  101. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  102. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +1 -0
  103. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  104. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +1 -2
  105. package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -1
  106. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js +42 -60
  107. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js.map +1 -1
  108. package/lib/commonjs/components/MessageList/MessageList.js +1 -3
  109. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  110. package/lib/commonjs/components/MessageMenu/MessageActionList.js +35 -0
  111. package/lib/commonjs/components/MessageMenu/MessageActionList.js.map +1 -0
  112. package/lib/commonjs/components/MessageMenu/MessageActionListItem.js +60 -0
  113. package/lib/commonjs/components/MessageMenu/MessageActionListItem.js.map +1 -0
  114. package/lib/commonjs/components/MessageMenu/MessageMenu.js +70 -0
  115. package/lib/commonjs/components/MessageMenu/MessageMenu.js.map +1 -0
  116. package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js +81 -0
  117. package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js.map +1 -0
  118. package/lib/commonjs/components/MessageMenu/MessageUserReactions.js +171 -0
  119. package/lib/commonjs/components/MessageMenu/MessageUserReactions.js.map +1 -0
  120. package/lib/commonjs/components/{MessageOverlay/OverlayReactionsAvatar.js → MessageMenu/MessageUserReactionsAvatar.js} +5 -6
  121. package/lib/commonjs/components/MessageMenu/MessageUserReactionsAvatar.js.map +1 -0
  122. package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js +110 -0
  123. package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js.map +1 -0
  124. package/lib/commonjs/components/MessageMenu/ReactionButton.js +59 -0
  125. package/lib/commonjs/components/MessageMenu/ReactionButton.js.map +1 -0
  126. package/lib/commonjs/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.js +2 -0
  127. package/lib/commonjs/components/MessageMenu/hooks/useFetchReactions.js.map +1 -0
  128. package/lib/commonjs/components/ProgressControl/ProgressControl.js +21 -28
  129. package/lib/commonjs/components/ProgressControl/ProgressControl.js.map +1 -1
  130. package/lib/commonjs/components/ProgressControl/WaveProgressBar.js +22 -27
  131. package/lib/commonjs/components/ProgressControl/WaveProgressBar.js.map +1 -1
  132. package/lib/commonjs/components/Reply/Reply.js +6 -2
  133. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  134. package/lib/commonjs/components/UIComponents/BottomSheetModal.js +152 -0
  135. package/lib/commonjs/components/UIComponents/BottomSheetModal.js.map +1 -0
  136. package/lib/commonjs/components/{ImageBackground.js → UIComponents/ImageBackground.js} +1 -1
  137. package/lib/commonjs/components/UIComponents/ImageBackground.js.map +1 -0
  138. package/lib/{module/components/Spinner → commonjs/components/UIComponents}/Spinner.js +1 -1
  139. package/lib/commonjs/components/UIComponents/Spinner.js.map +1 -0
  140. package/lib/commonjs/components/UIComponents/index.js +37 -0
  141. package/lib/commonjs/components/UIComponents/index.js.map +1 -0
  142. package/lib/commonjs/components/docs/data.js.map +1 -1
  143. package/lib/commonjs/components/index.js +56 -45
  144. package/lib/commonjs/components/index.js.map +1 -1
  145. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +1 -13
  146. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -1
  147. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js +1 -11
  148. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  149. package/lib/commonjs/contexts/channelContext/ChannelContext.js +1 -11
  150. package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
  151. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js +1 -11
  152. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  153. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js +1 -11
  154. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -1
  155. package/lib/commonjs/contexts/chatConfigContext/ChatConfigContext.js +33 -0
  156. package/lib/commonjs/contexts/chatConfigContext/ChatConfigContext.js.map +1 -0
  157. package/lib/commonjs/contexts/chatContext/ChatContext.js +1 -11
  158. package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
  159. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js +1 -11
  160. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  161. package/lib/commonjs/contexts/index.js +11 -11
  162. package/lib/commonjs/contexts/index.js.map +1 -1
  163. package/lib/commonjs/contexts/keyboardContext/KeyboardContext.js +1 -11
  164. package/lib/commonjs/contexts/keyboardContext/KeyboardContext.js.map +1 -1
  165. package/lib/commonjs/contexts/messageContext/MessageContext.js +1 -11
  166. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  167. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +4 -14
  168. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  169. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +1 -1
  170. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  171. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +1 -11
  172. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  173. package/lib/commonjs/contexts/overlayContext/OverlayContext.js +1 -14
  174. package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
  175. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +18 -54
  176. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  177. package/lib/commonjs/contexts/paginatedMessageListContext/PaginatedMessageListContext.js +1 -11
  178. package/lib/commonjs/contexts/paginatedMessageListContext/PaginatedMessageListContext.js.map +1 -1
  179. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +1 -11
  180. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  181. package/lib/commonjs/contexts/themeContext/utils/theme.js +68 -50
  182. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  183. package/lib/commonjs/contexts/threadContext/ThreadContext.js +1 -11
  184. package/lib/commonjs/contexts/threadContext/ThreadContext.js.map +1 -1
  185. package/lib/commonjs/contexts/translationContext/TranslationContext.js +1 -11
  186. package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
  187. package/lib/commonjs/contexts/typingContext/TypingContext.js +1 -11
  188. package/lib/commonjs/contexts/typingContext/TypingContext.js.map +1 -1
  189. package/lib/commonjs/hooks/useTranslatedMessage.js +1 -4
  190. package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -1
  191. package/lib/commonjs/icons/PinHeader.js +17 -6
  192. package/lib/commonjs/icons/PinHeader.js.map +1 -1
  193. package/lib/commonjs/index.js +4 -23
  194. package/lib/commonjs/index.js.map +1 -1
  195. package/lib/commonjs/mock-builders/DB/mock.js +79 -82
  196. package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
  197. package/lib/commonjs/native.js +36 -25
  198. package/lib/commonjs/native.js.map +1 -1
  199. package/lib/commonjs/store/SqliteClient.js +179 -0
  200. package/lib/commonjs/store/SqliteClient.js.map +1 -0
  201. package/lib/commonjs/store/apis/addPendingTask.js +5 -5
  202. package/lib/commonjs/store/apis/addPendingTask.js.map +1 -1
  203. package/lib/commonjs/store/apis/deleteChannel.js +3 -3
  204. package/lib/commonjs/store/apis/deleteChannel.js.map +1 -1
  205. package/lib/commonjs/store/apis/deleteMember.js +3 -3
  206. package/lib/commonjs/store/apis/deleteMember.js.map +1 -1
  207. package/lib/commonjs/store/apis/deleteMessage.js +3 -3
  208. package/lib/commonjs/store/apis/deleteMessage.js.map +1 -1
  209. package/lib/commonjs/store/apis/deleteMessagesForChannel.js +3 -3
  210. package/lib/commonjs/store/apis/deleteMessagesForChannel.js.map +1 -1
  211. package/lib/commonjs/store/apis/deletePendingTask.js +3 -3
  212. package/lib/commonjs/store/apis/deletePendingTask.js.map +1 -1
  213. package/lib/commonjs/store/apis/deleteReaction.js +3 -3
  214. package/lib/commonjs/store/apis/deleteReaction.js.map +1 -1
  215. package/lib/commonjs/store/apis/deleteReactions.js +2 -2
  216. package/lib/commonjs/store/apis/deleteReactions.js.map +1 -1
  217. package/lib/commonjs/store/apis/getAllChannelIds.js +2 -2
  218. package/lib/commonjs/store/apis/getAllChannelIds.js.map +1 -1
  219. package/lib/commonjs/store/apis/getAppSettings.js +3 -3
  220. package/lib/commonjs/store/apis/getAppSettings.js.map +1 -1
  221. package/lib/commonjs/store/apis/getChannelMessages.js +2 -2
  222. package/lib/commonjs/store/apis/getChannelMessages.js.map +1 -1
  223. package/lib/commonjs/store/apis/getChannels.js +2 -2
  224. package/lib/commonjs/store/apis/getChannels.js.map +1 -1
  225. package/lib/commonjs/store/apis/getChannelsForFilterSort.js +2 -2
  226. package/lib/commonjs/store/apis/getChannelsForFilterSort.js.map +1 -1
  227. package/lib/commonjs/store/apis/getLastSyncedAt.js +3 -3
  228. package/lib/commonjs/store/apis/getLastSyncedAt.js.map +1 -1
  229. package/lib/commonjs/store/apis/getMembers.js +2 -2
  230. package/lib/commonjs/store/apis/getMembers.js.map +1 -1
  231. package/lib/commonjs/store/apis/getPendingTasks.js +3 -3
  232. package/lib/commonjs/store/apis/getPendingTasks.js.map +1 -1
  233. package/lib/commonjs/store/apis/getReactions.js +2 -2
  234. package/lib/commonjs/store/apis/getReactions.js.map +1 -1
  235. package/lib/commonjs/store/apis/getReactionsforFilterSort.js +6 -3
  236. package/lib/commonjs/store/apis/getReactionsforFilterSort.js.map +1 -1
  237. package/lib/commonjs/store/apis/getReads.js +2 -2
  238. package/lib/commonjs/store/apis/getReads.js.map +1 -1
  239. package/lib/commonjs/store/apis/insertReaction.js +3 -3
  240. package/lib/commonjs/store/apis/insertReaction.js.map +1 -1
  241. package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js +3 -3
  242. package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
  243. package/lib/commonjs/store/apis/queries/selectChannels.js +3 -3
  244. package/lib/commonjs/store/apis/queries/selectChannels.js.map +1 -1
  245. package/lib/commonjs/store/apis/queries/selectMembersForChannels.js +3 -3
  246. package/lib/commonjs/store/apis/queries/selectMembersForChannels.js.map +1 -1
  247. package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js +3 -3
  248. package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  249. package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js +3 -3
  250. package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  251. package/lib/commonjs/store/apis/queries/selectReadsForChannels.js +3 -3
  252. package/lib/commonjs/store/apis/queries/selectReadsForChannels.js.map +1 -1
  253. package/lib/commonjs/store/apis/updateMessage.js +4 -4
  254. package/lib/commonjs/store/apis/updateMessage.js.map +1 -1
  255. package/lib/commonjs/store/apis/updateReaction.js +3 -3
  256. package/lib/commonjs/store/apis/updateReaction.js.map +1 -1
  257. package/lib/commonjs/store/apis/upsertAppSettings.js +3 -3
  258. package/lib/commonjs/store/apis/upsertAppSettings.js.map +1 -1
  259. package/lib/commonjs/store/apis/upsertChannelData.js +3 -3
  260. package/lib/commonjs/store/apis/upsertChannelData.js.map +1 -1
  261. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js +2 -2
  262. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js.map +1 -1
  263. package/lib/commonjs/store/apis/upsertChannels.js +3 -3
  264. package/lib/commonjs/store/apis/upsertChannels.js.map +1 -1
  265. package/lib/commonjs/store/apis/upsertCidsForQuery.js +3 -3
  266. package/lib/commonjs/store/apis/upsertCidsForQuery.js.map +1 -1
  267. package/lib/commonjs/store/apis/upsertMembers.js +3 -3
  268. package/lib/commonjs/store/apis/upsertMembers.js.map +1 -1
  269. package/lib/commonjs/store/apis/upsertMessages.js +3 -3
  270. package/lib/commonjs/store/apis/upsertMessages.js.map +1 -1
  271. package/lib/commonjs/store/apis/upsertReads.js +3 -3
  272. package/lib/commonjs/store/apis/upsertReads.js.map +1 -1
  273. package/lib/commonjs/store/apis/upsertUserSyncStatus.js +3 -3
  274. package/lib/commonjs/store/apis/upsertUserSyncStatus.js.map +1 -1
  275. package/lib/commonjs/utils/DBSyncManager.js +4 -4
  276. package/lib/commonjs/utils/DBSyncManager.js.map +1 -1
  277. package/lib/commonjs/utils/getResizedImageUrl.js +5 -3
  278. package/lib/commonjs/utils/getResizedImageUrl.js.map +1 -1
  279. package/lib/commonjs/version.json +1 -1
  280. package/lib/module/components/Attachment/Attachment.js +1 -1
  281. package/lib/module/components/Attachment/Attachment.js.map +1 -1
  282. package/lib/module/components/Attachment/Card.js +6 -6
  283. package/lib/module/components/Attachment/Card.js.map +1 -1
  284. package/lib/module/components/Attachment/FileAttachment.js +5 -5
  285. package/lib/module/components/Attachment/FileAttachment.js.map +1 -1
  286. package/lib/module/components/Attachment/FileAttachmentGroup.js +1 -1
  287. package/lib/module/components/Attachment/FileAttachmentGroup.js.map +1 -1
  288. package/lib/module/components/Attachment/Gallery.js +29 -22
  289. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  290. package/lib/module/components/Attachment/Giphy.js +8 -8
  291. package/lib/module/components/Attachment/Giphy.js.map +1 -1
  292. package/lib/module/components/Attachment/utils/buildGallery/buildGallery.js +7 -0
  293. package/lib/module/components/Attachment/utils/buildGallery/buildGallery.js.map +1 -1
  294. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js +3 -1
  295. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js.map +1 -1
  296. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js +3 -0
  297. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js.map +1 -1
  298. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js +4 -0
  299. package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js.map +1 -1
  300. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js +2 -0
  301. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  302. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnailGrid.js +2 -0
  303. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnailGrid.js.map +1 -1
  304. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +3 -3
  305. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  306. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +1 -2
  307. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
  308. package/lib/module/components/Avatar/Avatar.js +4 -0
  309. package/lib/module/components/Avatar/Avatar.js.map +1 -1
  310. package/lib/module/components/Avatar/GroupAvatar.js +4 -0
  311. package/lib/module/components/Avatar/GroupAvatar.js.map +1 -1
  312. package/lib/module/components/Channel/Channel.js +298 -429
  313. package/lib/module/components/Channel/Channel.js.map +1 -1
  314. package/lib/module/components/Channel/hooks/useCreateChannelContext.js +0 -2
  315. package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  316. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
  317. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  318. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +26 -10
  319. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  320. package/lib/module/components/ChannelList/ChannelList.js +0 -2
  321. package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
  322. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -1
  323. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  324. package/lib/module/components/ChannelList/hooks/listeners/useNewMessageNotification.js +8 -18
  325. package/lib/module/components/ChannelList/hooks/listeners/useNewMessageNotification.js.map +1 -1
  326. package/lib/module/components/Chat/Chat.js +2 -9
  327. package/lib/module/components/Chat/Chat.js.map +1 -1
  328. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +3 -3
  329. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  330. package/lib/module/components/Chat/hooks/useCreateChatContext.js +0 -2
  331. package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
  332. package/lib/module/components/Chat/hooks/useIsOnline.js +16 -13
  333. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  334. package/lib/module/components/ImageGallery/ImageGallery.js +58 -96
  335. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  336. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js +3 -3
  337. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  338. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +92 -90
  339. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  340. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +39 -39
  341. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  342. package/lib/module/components/ImageGallery/components/ImageGalleryOverlay.js.map +1 -1
  343. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +221 -221
  344. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
  345. package/lib/module/components/Indicators/LoadingIndicator.js +1 -1
  346. package/lib/module/components/Indicators/LoadingIndicator.js.map +1 -1
  347. package/lib/module/components/Message/Message.js +123 -173
  348. package/lib/module/components/Message/Message.js.map +1 -1
  349. package/lib/module/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
  350. package/lib/module/components/Message/MessageSimple/MessageContent.js +40 -144
  351. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  352. package/lib/module/components/Message/MessageSimple/MessageDeleted.js +1 -1
  353. package/lib/module/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  354. package/lib/module/components/Message/MessageSimple/MessageFooter.js +0 -1
  355. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  356. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js +20 -34
  357. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
  358. package/lib/module/components/Message/MessageSimple/MessageSimple.js +180 -44
  359. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  360. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +1 -1
  361. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  362. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListBottom.js +234 -0
  363. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListBottom.js.map +1 -0
  364. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListTop.js +195 -0
  365. package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListTop.js.map +1 -0
  366. package/lib/module/components/Message/hooks/useCreateMessageContext.js +4 -16
  367. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  368. package/lib/module/components/Message/hooks/useMessageActions.js +36 -72
  369. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
  370. package/lib/module/components/Message/hooks/useMessageData.js +38 -0
  371. package/lib/module/components/Message/hooks/useMessageData.js.map +1 -0
  372. package/lib/module/components/Message/hooks/useProcessReactions.js +3 -3
  373. package/lib/module/components/Message/hooks/useProcessReactions.js.map +1 -1
  374. package/lib/module/components/Message/utils/messageActions.js +4 -6
  375. package/lib/module/components/Message/utils/messageActions.js.map +1 -1
  376. package/lib/module/components/MessageInput/FileUploadPreview.js +1 -1
  377. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  378. package/lib/module/components/MessageInput/MessageInput.js +1 -2
  379. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  380. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +1 -0
  381. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
  382. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +1 -2
  383. package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -1
  384. package/lib/module/components/MessageInput/hooks/useAudioController.js +42 -60
  385. package/lib/module/components/MessageInput/hooks/useAudioController.js.map +1 -1
  386. package/lib/module/components/MessageList/MessageList.js +1 -3
  387. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  388. package/lib/module/components/MessageMenu/MessageActionList.js +35 -0
  389. package/lib/module/components/MessageMenu/MessageActionList.js.map +1 -0
  390. package/lib/module/components/MessageMenu/MessageActionListItem.js +60 -0
  391. package/lib/module/components/MessageMenu/MessageActionListItem.js.map +1 -0
  392. package/lib/module/components/MessageMenu/MessageMenu.js +70 -0
  393. package/lib/module/components/MessageMenu/MessageMenu.js.map +1 -0
  394. package/lib/module/components/MessageMenu/MessageReactionPicker.js +81 -0
  395. package/lib/module/components/MessageMenu/MessageReactionPicker.js.map +1 -0
  396. package/lib/module/components/MessageMenu/MessageUserReactions.js +171 -0
  397. package/lib/module/components/MessageMenu/MessageUserReactions.js.map +1 -0
  398. package/lib/module/components/{MessageOverlay/OverlayReactionsAvatar.js → MessageMenu/MessageUserReactionsAvatar.js} +5 -6
  399. package/lib/module/components/MessageMenu/MessageUserReactionsAvatar.js.map +1 -0
  400. package/lib/module/components/MessageMenu/MessageUserReactionsItem.js +110 -0
  401. package/lib/module/components/MessageMenu/MessageUserReactionsItem.js.map +1 -0
  402. package/lib/module/components/MessageMenu/ReactionButton.js +59 -0
  403. package/lib/module/components/MessageMenu/ReactionButton.js.map +1 -0
  404. package/lib/module/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.js +2 -0
  405. package/lib/module/components/MessageMenu/hooks/useFetchReactions.js.map +1 -0
  406. package/lib/module/components/ProgressControl/ProgressControl.js +21 -28
  407. package/lib/module/components/ProgressControl/ProgressControl.js.map +1 -1
  408. package/lib/module/components/ProgressControl/WaveProgressBar.js +22 -27
  409. package/lib/module/components/ProgressControl/WaveProgressBar.js.map +1 -1
  410. package/lib/module/components/Reply/Reply.js +6 -2
  411. package/lib/module/components/Reply/Reply.js.map +1 -1
  412. package/lib/module/components/UIComponents/BottomSheetModal.js +152 -0
  413. package/lib/module/components/UIComponents/BottomSheetModal.js.map +1 -0
  414. package/lib/module/components/{ImageBackground.js → UIComponents/ImageBackground.js} +1 -1
  415. package/lib/module/components/UIComponents/ImageBackground.js.map +1 -0
  416. package/lib/{commonjs/components/Spinner → module/components/UIComponents}/Spinner.js +1 -1
  417. package/lib/module/components/UIComponents/Spinner.js.map +1 -0
  418. package/lib/module/components/UIComponents/index.js +37 -0
  419. package/lib/module/components/UIComponents/index.js.map +1 -0
  420. package/lib/module/components/docs/data.js.map +1 -1
  421. package/lib/module/components/index.js +56 -45
  422. package/lib/module/components/index.js.map +1 -1
  423. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +1 -13
  424. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -1
  425. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js +1 -11
  426. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  427. package/lib/module/contexts/channelContext/ChannelContext.js +1 -11
  428. package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
  429. package/lib/module/contexts/channelsContext/ChannelsContext.js +1 -11
  430. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  431. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js +1 -11
  432. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -1
  433. package/lib/module/contexts/chatConfigContext/ChatConfigContext.js +33 -0
  434. package/lib/module/contexts/chatConfigContext/ChatConfigContext.js.map +1 -0
  435. package/lib/module/contexts/chatContext/ChatContext.js +1 -11
  436. package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
  437. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js +1 -11
  438. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
  439. package/lib/module/contexts/index.js +11 -11
  440. package/lib/module/contexts/index.js.map +1 -1
  441. package/lib/module/contexts/keyboardContext/KeyboardContext.js +1 -11
  442. package/lib/module/contexts/keyboardContext/KeyboardContext.js.map +1 -1
  443. package/lib/module/contexts/messageContext/MessageContext.js +1 -11
  444. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  445. package/lib/module/contexts/messageInputContext/MessageInputContext.js +4 -14
  446. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  447. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +1 -1
  448. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  449. package/lib/module/contexts/messagesContext/MessagesContext.js +1 -11
  450. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  451. package/lib/module/contexts/overlayContext/OverlayContext.js +1 -14
  452. package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
  453. package/lib/module/contexts/overlayContext/OverlayProvider.js +18 -54
  454. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  455. package/lib/module/contexts/paginatedMessageListContext/PaginatedMessageListContext.js +1 -11
  456. package/lib/module/contexts/paginatedMessageListContext/PaginatedMessageListContext.js.map +1 -1
  457. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +1 -11
  458. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  459. package/lib/module/contexts/themeContext/utils/theme.js +68 -50
  460. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  461. package/lib/module/contexts/threadContext/ThreadContext.js +1 -11
  462. package/lib/module/contexts/threadContext/ThreadContext.js.map +1 -1
  463. package/lib/module/contexts/translationContext/TranslationContext.js +1 -11
  464. package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
  465. package/lib/module/contexts/typingContext/TypingContext.js +1 -11
  466. package/lib/module/contexts/typingContext/TypingContext.js.map +1 -1
  467. package/lib/module/hooks/useTranslatedMessage.js +1 -4
  468. package/lib/module/hooks/useTranslatedMessage.js.map +1 -1
  469. package/lib/module/icons/PinHeader.js +17 -6
  470. package/lib/module/icons/PinHeader.js.map +1 -1
  471. package/lib/module/index.js +4 -23
  472. package/lib/module/index.js.map +1 -1
  473. package/lib/module/mock-builders/DB/mock.js +79 -82
  474. package/lib/module/mock-builders/DB/mock.js.map +1 -1
  475. package/lib/module/native.js +36 -25
  476. package/lib/module/native.js.map +1 -1
  477. package/lib/module/store/SqliteClient.js +179 -0
  478. package/lib/module/store/SqliteClient.js.map +1 -0
  479. package/lib/module/store/apis/addPendingTask.js +5 -5
  480. package/lib/module/store/apis/addPendingTask.js.map +1 -1
  481. package/lib/module/store/apis/deleteChannel.js +3 -3
  482. package/lib/module/store/apis/deleteChannel.js.map +1 -1
  483. package/lib/module/store/apis/deleteMember.js +3 -3
  484. package/lib/module/store/apis/deleteMember.js.map +1 -1
  485. package/lib/module/store/apis/deleteMessage.js +3 -3
  486. package/lib/module/store/apis/deleteMessage.js.map +1 -1
  487. package/lib/module/store/apis/deleteMessagesForChannel.js +3 -3
  488. package/lib/module/store/apis/deleteMessagesForChannel.js.map +1 -1
  489. package/lib/module/store/apis/deletePendingTask.js +3 -3
  490. package/lib/module/store/apis/deletePendingTask.js.map +1 -1
  491. package/lib/module/store/apis/deleteReaction.js +3 -3
  492. package/lib/module/store/apis/deleteReaction.js.map +1 -1
  493. package/lib/module/store/apis/deleteReactions.js +2 -2
  494. package/lib/module/store/apis/deleteReactions.js.map +1 -1
  495. package/lib/module/store/apis/getAllChannelIds.js +2 -2
  496. package/lib/module/store/apis/getAllChannelIds.js.map +1 -1
  497. package/lib/module/store/apis/getAppSettings.js +3 -3
  498. package/lib/module/store/apis/getAppSettings.js.map +1 -1
  499. package/lib/module/store/apis/getChannelMessages.js +2 -2
  500. package/lib/module/store/apis/getChannelMessages.js.map +1 -1
  501. package/lib/module/store/apis/getChannels.js +2 -2
  502. package/lib/module/store/apis/getChannels.js.map +1 -1
  503. package/lib/module/store/apis/getChannelsForFilterSort.js +2 -2
  504. package/lib/module/store/apis/getChannelsForFilterSort.js.map +1 -1
  505. package/lib/module/store/apis/getLastSyncedAt.js +3 -3
  506. package/lib/module/store/apis/getLastSyncedAt.js.map +1 -1
  507. package/lib/module/store/apis/getMembers.js +2 -2
  508. package/lib/module/store/apis/getMembers.js.map +1 -1
  509. package/lib/module/store/apis/getPendingTasks.js +3 -3
  510. package/lib/module/store/apis/getPendingTasks.js.map +1 -1
  511. package/lib/module/store/apis/getReactions.js +2 -2
  512. package/lib/module/store/apis/getReactions.js.map +1 -1
  513. package/lib/module/store/apis/getReactionsforFilterSort.js +6 -3
  514. package/lib/module/store/apis/getReactionsforFilterSort.js.map +1 -1
  515. package/lib/module/store/apis/getReads.js +2 -2
  516. package/lib/module/store/apis/getReads.js.map +1 -1
  517. package/lib/module/store/apis/insertReaction.js +3 -3
  518. package/lib/module/store/apis/insertReaction.js.map +1 -1
  519. package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js +3 -3
  520. package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
  521. package/lib/module/store/apis/queries/selectChannels.js +3 -3
  522. package/lib/module/store/apis/queries/selectChannels.js.map +1 -1
  523. package/lib/module/store/apis/queries/selectMembersForChannels.js +3 -3
  524. package/lib/module/store/apis/queries/selectMembersForChannels.js.map +1 -1
  525. package/lib/module/store/apis/queries/selectMessagesForChannels.js +3 -3
  526. package/lib/module/store/apis/queries/selectMessagesForChannels.js.map +1 -1
  527. package/lib/module/store/apis/queries/selectReactionsForMessages.js +3 -3
  528. package/lib/module/store/apis/queries/selectReactionsForMessages.js.map +1 -1
  529. package/lib/module/store/apis/queries/selectReadsForChannels.js +3 -3
  530. package/lib/module/store/apis/queries/selectReadsForChannels.js.map +1 -1
  531. package/lib/module/store/apis/updateMessage.js +4 -4
  532. package/lib/module/store/apis/updateMessage.js.map +1 -1
  533. package/lib/module/store/apis/updateReaction.js +3 -3
  534. package/lib/module/store/apis/updateReaction.js.map +1 -1
  535. package/lib/module/store/apis/upsertAppSettings.js +3 -3
  536. package/lib/module/store/apis/upsertAppSettings.js.map +1 -1
  537. package/lib/module/store/apis/upsertChannelData.js +3 -3
  538. package/lib/module/store/apis/upsertChannelData.js.map +1 -1
  539. package/lib/module/store/apis/upsertChannelDataFromChannel.js +2 -2
  540. package/lib/module/store/apis/upsertChannelDataFromChannel.js.map +1 -1
  541. package/lib/module/store/apis/upsertChannels.js +3 -3
  542. package/lib/module/store/apis/upsertChannels.js.map +1 -1
  543. package/lib/module/store/apis/upsertCidsForQuery.js +3 -3
  544. package/lib/module/store/apis/upsertCidsForQuery.js.map +1 -1
  545. package/lib/module/store/apis/upsertMembers.js +3 -3
  546. package/lib/module/store/apis/upsertMembers.js.map +1 -1
  547. package/lib/module/store/apis/upsertMessages.js +3 -3
  548. package/lib/module/store/apis/upsertMessages.js.map +1 -1
  549. package/lib/module/store/apis/upsertReads.js +3 -3
  550. package/lib/module/store/apis/upsertReads.js.map +1 -1
  551. package/lib/module/store/apis/upsertUserSyncStatus.js +3 -3
  552. package/lib/module/store/apis/upsertUserSyncStatus.js.map +1 -1
  553. package/lib/module/utils/DBSyncManager.js +4 -4
  554. package/lib/module/utils/DBSyncManager.js.map +1 -1
  555. package/lib/module/utils/getResizedImageUrl.js +5 -3
  556. package/lib/module/utils/getResizedImageUrl.js.map +1 -1
  557. package/lib/module/version.json +1 -1
  558. package/lib/typescript/components/Attachment/Card.d.ts +2 -2
  559. package/lib/typescript/components/Attachment/Card.d.ts.map +1 -1
  560. package/lib/typescript/components/Attachment/FileAttachment.d.ts +1 -1
  561. package/lib/typescript/components/Attachment/FileAttachment.d.ts.map +1 -1
  562. package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
  563. package/lib/typescript/components/Attachment/Gallery.d.ts.map +1 -1
  564. package/lib/typescript/components/Attachment/Giphy.d.ts +1 -1
  565. package/lib/typescript/components/Attachment/utils/buildGallery/buildGallery.d.ts +2 -1
  566. package/lib/typescript/components/Attachment/utils/buildGallery/buildGallery.d.ts.map +1 -1
  567. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.d.ts +2 -1
  568. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.d.ts.map +1 -1
  569. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.d.ts +2 -1
  570. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.d.ts.map +1 -1
  571. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.d.ts +2 -1
  572. package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.d.ts.map +1 -1
  573. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnail.d.ts +4 -2
  574. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnail.d.ts.map +1 -1
  575. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnailGrid.d.ts +2 -1
  576. package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnailGrid.d.ts.map +1 -1
  577. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.d.ts +2 -2
  578. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.d.ts.map +1 -1
  579. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts.map +1 -1
  580. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts.map +1 -1
  581. package/lib/typescript/components/Avatar/Avatar.d.ts.map +1 -1
  582. package/lib/typescript/components/Avatar/GroupAvatar.d.ts.map +1 -1
  583. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  584. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  585. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
  586. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts.map +1 -1
  587. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts.map +1 -1
  588. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  589. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
  590. package/lib/typescript/components/ChannelList/ChannelList.d.ts +0 -12
  591. package/lib/typescript/components/ChannelList/ChannelList.d.ts.map +1 -1
  592. package/lib/typescript/components/ChannelList/hooks/listeners/useNewMessageNotification.d.ts +1 -2
  593. package/lib/typescript/components/ChannelList/hooks/listeners/useNewMessageNotification.d.ts.map +1 -1
  594. package/lib/typescript/components/Chat/Chat.d.ts +1 -1
  595. package/lib/typescript/components/Chat/Chat.d.ts.map +1 -1
  596. package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
  597. package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
  598. package/lib/typescript/components/Chat/hooks/useIsOnline.d.ts.map +1 -1
  599. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +2 -2
  600. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts.map +1 -1
  601. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryImage.d.ts +5 -5
  602. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryImage.d.ts.map +1 -1
  603. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts +5 -5
  604. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts.map +1 -1
  605. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts +3 -3
  606. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts.map +1 -1
  607. package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts +3 -3
  608. package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts.map +1 -1
  609. package/lib/typescript/components/ImageGallery/components/ImageGalleryOverlay.d.ts +2 -2
  610. package/lib/typescript/components/ImageGallery/components/ImageGalleryOverlay.d.ts.map +1 -1
  611. package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts +4 -5
  612. package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts.map +1 -1
  613. package/lib/typescript/components/Message/Message.d.ts +4 -40
  614. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  615. package/lib/typescript/components/Message/MessageSimple/MessageAvatar.d.ts.map +1 -1
  616. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts +11 -5
  617. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
  618. package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts +2 -6
  619. package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts.map +1 -1
  620. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts +1 -1
  621. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
  622. package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts +1 -2
  623. package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts.map +1 -1
  624. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListBottom.d.ts +12 -0
  625. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListBottom.d.ts.map +1 -0
  626. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListTop.d.ts +20 -0
  627. package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListTop.d.ts.map +1 -0
  628. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  629. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
  630. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +5 -6
  631. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts.map +1 -1
  632. package/lib/typescript/components/Message/hooks/useMessageData.d.ts +12 -0
  633. package/lib/typescript/components/Message/hooks/useMessageData.d.ts.map +1 -0
  634. package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts +11 -3
  635. package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts.map +1 -1
  636. package/lib/typescript/components/Message/utils/messageActions.d.ts +6 -14
  637. package/lib/typescript/components/Message/utils/messageActions.d.ts.map +1 -1
  638. package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
  639. package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingButton.d.ts.map +1 -1
  640. package/lib/typescript/components/MessageInput/hooks/useAudioController.d.ts.map +1 -1
  641. package/lib/typescript/components/MessageMenu/MessageActionList.d.ts +16 -0
  642. package/lib/typescript/components/MessageMenu/MessageActionList.d.ts.map +1 -0
  643. package/lib/typescript/components/{MessageOverlay → MessageMenu}/MessageActionListItem.d.ts +2 -8
  644. package/lib/typescript/components/MessageMenu/MessageActionListItem.d.ts.map +1 -0
  645. package/lib/typescript/components/MessageMenu/MessageMenu.d.ts +32 -0
  646. package/lib/typescript/components/MessageMenu/MessageMenu.d.ts.map +1 -0
  647. package/lib/typescript/components/MessageMenu/MessageReactionPicker.d.ts +30 -0
  648. package/lib/typescript/components/MessageMenu/MessageReactionPicker.d.ts.map +1 -0
  649. package/lib/typescript/components/MessageMenu/MessageUserReactions.d.ts +21 -0
  650. package/lib/typescript/components/MessageMenu/MessageUserReactions.d.ts.map +1 -0
  651. package/lib/typescript/components/MessageMenu/MessageUserReactionsAvatar.d.ts +11 -0
  652. package/lib/typescript/components/MessageMenu/MessageUserReactionsAvatar.d.ts.map +1 -0
  653. package/lib/typescript/components/MessageMenu/MessageUserReactionsItem.d.ts +16 -0
  654. package/lib/typescript/components/MessageMenu/MessageUserReactionsItem.d.ts.map +1 -0
  655. package/lib/typescript/components/MessageMenu/ReactionButton.d.ts +25 -0
  656. package/lib/typescript/components/MessageMenu/ReactionButton.d.ts.map +1 -0
  657. package/lib/typescript/components/MessageMenu/hooks/useFetchReactions.d.ts.map +1 -0
  658. package/lib/typescript/components/ProgressControl/ProgressControl.d.ts.map +1 -1
  659. package/lib/typescript/components/ProgressControl/WaveProgressBar.d.ts.map +1 -1
  660. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  661. package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts +21 -0
  662. package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts.map +1 -0
  663. package/lib/typescript/components/UIComponents/ImageBackground.d.ts.map +1 -0
  664. package/lib/typescript/components/UIComponents/Spinner.d.ts.map +1 -0
  665. package/lib/typescript/components/UIComponents/index.d.ts +4 -0
  666. package/lib/typescript/components/UIComponents/index.d.ts.map +1 -0
  667. package/lib/typescript/components/index.d.ts +11 -10
  668. package/lib/typescript/components/index.d.ts.map +1 -1
  669. package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts +0 -11
  670. package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts.map +1 -1
  671. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +1 -11
  672. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts.map +1 -1
  673. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +1 -25
  674. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts.map +1 -1
  675. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -11
  676. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts.map +1 -1
  677. package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts +1 -11
  678. package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts.map +1 -1
  679. package/lib/typescript/contexts/chatConfigContext/ChatConfigContext.d.ts +16 -0
  680. package/lib/typescript/contexts/chatConfigContext/ChatConfigContext.d.ts.map +1 -0
  681. package/lib/typescript/contexts/chatContext/ChatContext.d.ts +1 -15
  682. package/lib/typescript/contexts/chatContext/ChatContext.d.ts.map +1 -1
  683. package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts +0 -10
  684. package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts.map +1 -1
  685. package/lib/typescript/contexts/index.d.ts +1 -1
  686. package/lib/typescript/contexts/index.d.ts.map +1 -1
  687. package/lib/typescript/contexts/keyboardContext/KeyboardContext.d.ts +0 -11
  688. package/lib/typescript/contexts/keyboardContext/KeyboardContext.d.ts.map +1 -1
  689. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +21 -56
  690. package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
  691. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +2 -12
  692. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
  693. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  694. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +77 -37
  695. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
  696. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +2 -27
  697. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts.map +1 -1
  698. package/lib/typescript/contexts/overlayContext/OverlayProvider.d.ts.map +1 -1
  699. package/lib/typescript/contexts/paginatedMessageListContext/PaginatedMessageListContext.d.ts +1 -11
  700. package/lib/typescript/contexts/paginatedMessageListContext/PaginatedMessageListContext.d.ts.map +1 -1
  701. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts +1 -11
  702. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts.map +1 -1
  703. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +61 -44
  704. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  705. package/lib/typescript/contexts/threadContext/ThreadContext.d.ts +1 -11
  706. package/lib/typescript/contexts/threadContext/ThreadContext.d.ts.map +1 -1
  707. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts +0 -11
  708. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts.map +1 -1
  709. package/lib/typescript/contexts/typingContext/TypingContext.d.ts +1 -11
  710. package/lib/typescript/contexts/typingContext/TypingContext.d.ts.map +1 -1
  711. package/lib/typescript/hooks/useTranslatedMessage.d.ts.map +1 -1
  712. package/lib/typescript/icons/PinHeader.d.ts +5 -1
  713. package/lib/typescript/icons/PinHeader.d.ts.map +1 -1
  714. package/lib/typescript/index.d.ts +2 -3
  715. package/lib/typescript/index.d.ts.map +1 -1
  716. package/lib/typescript/native.d.ts +9 -11
  717. package/lib/typescript/native.d.ts.map +1 -1
  718. package/lib/typescript/store/{QuickSqliteClient.d.ts → SqliteClient.d.ts} +6 -5
  719. package/lib/typescript/store/SqliteClient.d.ts.map +1 -0
  720. package/lib/typescript/store/apis/getReactionsforFilterSort.d.ts.map +1 -1
  721. package/lib/typescript/types/types.d.ts +6 -0
  722. package/lib/typescript/types/types.d.ts.map +1 -1
  723. package/lib/typescript/utils/getResizedImageUrl.d.ts +3 -2
  724. package/lib/typescript/utils/getResizedImageUrl.d.ts.map +1 -1
  725. package/package.json +11 -11
  726. package/src/__tests__/offline-support/offline-feature.js +5 -5
  727. package/src/__tests__/offline-support/optimistic-update.js +4 -4
  728. package/src/components/Attachment/Attachment.tsx +2 -2
  729. package/src/components/Attachment/Card.tsx +10 -10
  730. package/src/components/Attachment/FileAttachment.tsx +8 -16
  731. package/src/components/Attachment/FileAttachmentGroup.tsx +2 -2
  732. package/src/components/Attachment/Gallery.tsx +20 -17
  733. package/src/components/Attachment/Giphy.tsx +14 -14
  734. package/src/components/Attachment/__tests__/Attachment.test.js +4 -2
  735. package/src/components/Attachment/__tests__/Gallery.test.js +0 -2
  736. package/src/components/Attachment/utils/buildGallery/buildGallery.ts +10 -1
  737. package/src/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.ts +4 -1
  738. package/src/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.ts +5 -1
  739. package/src/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.ts +6 -1
  740. package/src/components/Attachment/utils/buildGallery/buildThumbnail.ts +13 -6
  741. package/src/components/Attachment/utils/buildGallery/buildThumbnailGrid.ts +5 -1
  742. package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx +2 -2
  743. package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +1 -1
  744. package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +1 -1
  745. package/src/components/Avatar/Avatar.tsx +3 -0
  746. package/src/components/Avatar/GroupAvatar.tsx +4 -0
  747. package/src/components/Channel/Channel.tsx +56 -132
  748. package/src/components/Channel/__tests__/ownCapabilities.test.js +57 -57
  749. package/src/components/Channel/hooks/useCreateChannelContext.ts +0 -2
  750. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +2 -6
  751. package/src/components/Channel/hooks/useCreateMessagesContext.ts +26 -10
  752. package/src/components/ChannelList/ChannelList.tsx +0 -17
  753. package/src/components/ChannelList/ChannelListFooterLoadingIndicator.tsx +1 -1
  754. package/src/components/ChannelList/__tests__/ChannelList.test.js +5 -5
  755. package/src/components/ChannelList/hooks/listeners/useNewMessageNotification.ts +2 -11
  756. package/src/components/Chat/Chat.tsx +3 -9
  757. package/src/components/Chat/__tests__/Chat.test.js +184 -179
  758. package/src/components/Chat/hooks/handleEventToSyncDB.ts +3 -3
  759. package/src/components/Chat/hooks/useCreateChatContext.ts +0 -2
  760. package/src/components/Chat/hooks/useIsOnline.ts +13 -10
  761. package/src/components/ImageGallery/ImageGallery.tsx +71 -121
  762. package/src/components/ImageGallery/__tests__/AnimatedVideoGallery.test.tsx +0 -11
  763. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +3 -4
  764. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +3 -5
  765. package/src/components/ImageGallery/__tests__/ImageGalleryGrid.test.tsx +1 -1
  766. package/src/components/ImageGallery/__tests__/ImageGalleryGridHandle.test.tsx +1 -1
  767. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +3 -5
  768. package/src/components/ImageGallery/__tests__/ImageGalleryOverlay.test.tsx +0 -3
  769. package/src/components/ImageGallery/components/AnimatedGalleryImage.tsx +5 -5
  770. package/src/components/ImageGallery/components/AnimatedGalleryVideo.tsx +9 -9
  771. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +97 -86
  772. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +46 -44
  773. package/src/components/ImageGallery/components/ImageGalleryOverlay.tsx +2 -1
  774. package/src/components/ImageGallery/components/__tests__/ImageGalleryHeader.test.tsx +3 -4
  775. package/src/components/ImageGallery/hooks/useImageGalleryGestures.tsx +481 -466
  776. package/src/components/Indicators/LoadingIndicator.tsx +1 -1
  777. package/src/components/Message/Message.tsx +112 -202
  778. package/src/components/Message/MessageSimple/MessageAvatar.tsx +1 -0
  779. package/src/components/Message/MessageSimple/MessageContent.tsx +28 -155
  780. package/src/components/Message/MessageSimple/MessageDeleted.tsx +1 -1
  781. package/src/components/Message/MessageSimple/MessageFooter.tsx +1 -1
  782. package/src/components/Message/MessageSimple/MessagePinnedHeader.tsx +21 -66
  783. package/src/components/Message/MessageSimple/MessageSimple.tsx +247 -55
  784. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +3 -4
  785. package/src/components/Message/MessageSimple/ReactionList/ReactionListBottom.tsx +295 -0
  786. package/src/components/Message/MessageSimple/ReactionList/ReactionListTop.tsx +271 -0
  787. package/src/components/Message/MessageSimple/__tests__/MessageContent.test.js +1 -2
  788. package/src/components/Message/MessageSimple/__tests__/MessageSimple.test.js +208 -0
  789. package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.tsx +3 -3
  790. package/src/components/Message/MessageSimple/__tests__/ReactionListBottom.test.js +166 -0
  791. package/src/components/Message/MessageSimple/__tests__/ReactionListTop.test.js +92 -0
  792. package/src/components/Message/MessageSimple/__tests__/__snapshots__/MessagePinnedHeader.test.js.snap +23 -19
  793. package/src/components/Message/hooks/useCreateMessageContext.ts +4 -16
  794. package/src/components/Message/hooks/useMessageActions.tsx +48 -68
  795. package/src/components/Message/hooks/useMessageData.ts +59 -0
  796. package/src/components/Message/hooks/useProcessReactions.ts +17 -10
  797. package/src/components/Message/utils/messageActions.ts +10 -20
  798. package/src/components/MessageInput/FileUploadPreview.tsx +2 -2
  799. package/src/components/MessageInput/MessageInput.tsx +0 -1
  800. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +1 -4
  801. package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +1 -4
  802. package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +3 -5
  803. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingButton.tsx +7 -1
  804. package/src/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.tsx +0 -1
  805. package/src/components/MessageInput/hooks/useAudioController.tsx +0 -3
  806. package/src/components/MessageList/MessageList.tsx +1 -1
  807. package/src/components/MessageList/__tests__/MessageList.test.js +0 -21
  808. package/src/components/MessageMenu/MessageActionList.tsx +49 -0
  809. package/src/components/MessageMenu/MessageActionListItem.tsx +86 -0
  810. package/src/components/MessageMenu/MessageMenu.tsx +123 -0
  811. package/src/components/MessageMenu/MessageReactionPicker.tsx +122 -0
  812. package/src/components/MessageMenu/MessageUserReactions.tsx +209 -0
  813. package/src/components/{MessageOverlay/OverlayReactionsAvatar.tsx → MessageMenu/MessageUserReactionsAvatar.tsx} +6 -6
  814. package/src/components/MessageMenu/MessageUserReactionsItem.tsx +130 -0
  815. package/src/components/MessageMenu/ReactionButton.tsx +72 -0
  816. package/src/components/MessageMenu/__tests__/MessageActionList.test.tsx +48 -0
  817. package/src/components/MessageMenu/__tests__/MessageActionListItem.test.tsx +48 -0
  818. package/src/components/MessageMenu/__tests__/MessageReactionPicker.test.tsx +101 -0
  819. package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +186 -0
  820. package/src/components/MessageMenu/__tests__/MessageUserReactionsAvatar.test.tsx +35 -0
  821. package/src/components/MessageMenu/__tests__/MessageUserReactionsItem.test.tsx +81 -0
  822. package/src/components/MessageMenu/__tests__/ReactionButton.test.tsx +77 -0
  823. package/src/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.ts +2 -0
  824. package/src/components/ProgressControl/ProgressControl.tsx +28 -38
  825. package/src/components/ProgressControl/WaveProgressBar.tsx +29 -37
  826. package/src/components/Reply/Reply.tsx +5 -2
  827. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +908 -801
  828. package/src/components/UIComponents/BottomSheetModal.tsx +170 -0
  829. package/src/components/UIComponents/index.ts +3 -0
  830. package/src/components/docs/data.js +13 -27
  831. package/src/components/index.ts +11 -10
  832. package/src/contexts/__tests__/index.test.tsx +0 -5
  833. package/src/contexts/activeChannelsRefContext/ActiveChannelsRefContext.tsx +0 -27
  834. package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +1 -29
  835. package/src/contexts/channelContext/ChannelContext.tsx +2 -46
  836. package/src/contexts/channelsContext/ChannelsContext.tsx +1 -28
  837. package/src/contexts/channelsStateContext/ChannelsStateContext.tsx +1 -30
  838. package/src/contexts/chatConfigContext/ChatConfigContext.tsx +33 -0
  839. package/src/contexts/chatContext/ChatContext.tsx +1 -30
  840. package/src/contexts/imageGalleryContext/ImageGalleryContext.tsx +0 -29
  841. package/src/contexts/index.ts +1 -1
  842. package/src/contexts/keyboardContext/KeyboardContext.tsx +0 -30
  843. package/src/contexts/messageContext/MessageContext.tsx +22 -75
  844. package/src/contexts/messageInputContext/MessageInputContext.tsx +11 -37
  845. package/src/contexts/messageInputContext/__tests__/isValidMessage.test.tsx +2 -3
  846. package/src/contexts/messageInputContext/__tests__/uploadFile.test.tsx +1 -2
  847. package/src/contexts/messageInputContext/__tests__/uploadImage.test.tsx +1 -2
  848. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +1 -5
  849. package/src/contexts/messagesContext/MessagesContext.tsx +83 -56
  850. package/src/contexts/overlayContext/OverlayContext.tsx +2 -55
  851. package/src/contexts/overlayContext/OverlayProvider.tsx +23 -64
  852. package/src/contexts/paginatedMessageListContext/PaginatedMessageListContext.tsx +1 -30
  853. package/src/contexts/suggestionsContext/SuggestionsContext.tsx +1 -30
  854. package/src/contexts/themeContext/utils/theme.ts +126 -93
  855. package/src/contexts/threadContext/ThreadContext.tsx +1 -28
  856. package/src/contexts/translationContext/TranslationContext.tsx +0 -29
  857. package/src/contexts/typingContext/TypingContext.tsx +1 -28
  858. package/src/hooks/__tests__/useTranslatedMessage.test.tsx +3 -9
  859. package/src/hooks/useTranslatedMessage.ts +1 -4
  860. package/src/icons/PinHeader.tsx +13 -7
  861. package/src/index.ts +2 -3
  862. package/src/mock-builders/DB/mock.ts +82 -84
  863. package/src/native.ts +15 -26
  864. package/src/store/{QuickSqliteClient.ts → SqliteClient.ts} +74 -54
  865. package/src/store/apis/addPendingTask.ts +5 -5
  866. package/src/store/apis/deleteChannel.ts +3 -3
  867. package/src/store/apis/deleteMember.ts +3 -3
  868. package/src/store/apis/deleteMessage.ts +3 -3
  869. package/src/store/apis/deleteMessagesForChannel.ts +3 -3
  870. package/src/store/apis/deletePendingTask.ts +3 -3
  871. package/src/store/apis/deleteReaction.ts +3 -3
  872. package/src/store/apis/deleteReactions.ts +2 -2
  873. package/src/store/apis/getAllChannelIds.ts +2 -2
  874. package/src/store/apis/getAppSettings.ts +3 -3
  875. package/src/store/apis/getChannelMessages.ts +2 -2
  876. package/src/store/apis/getChannels.ts +2 -2
  877. package/src/store/apis/getChannelsForFilterSort.ts +2 -2
  878. package/src/store/apis/getLastSyncedAt.ts +3 -3
  879. package/src/store/apis/getMembers.ts +2 -2
  880. package/src/store/apis/getPendingTasks.ts +3 -3
  881. package/src/store/apis/getReactions.ts +2 -2
  882. package/src/store/apis/getReactionsforFilterSort.ts +5 -3
  883. package/src/store/apis/getReads.ts +2 -2
  884. package/src/store/apis/insertReaction.ts +3 -3
  885. package/src/store/apis/queries/selectChannelIdsForFilterSort.ts +3 -3
  886. package/src/store/apis/queries/selectChannels.ts +3 -3
  887. package/src/store/apis/queries/selectMembersForChannels.ts +3 -3
  888. package/src/store/apis/queries/selectMessagesForChannels.ts +4 -4
  889. package/src/store/apis/queries/selectReactionsForMessages.ts +3 -3
  890. package/src/store/apis/queries/selectReadsForChannels.ts +4 -4
  891. package/src/store/apis/updateMessage.ts +4 -4
  892. package/src/store/apis/updateReaction.ts +3 -3
  893. package/src/store/apis/upsertAppSettings.ts +3 -3
  894. package/src/store/apis/upsertChannelData.ts +3 -3
  895. package/src/store/apis/upsertChannelDataFromChannel.ts +2 -2
  896. package/src/store/apis/upsertChannels.ts +3 -3
  897. package/src/store/apis/upsertCidsForQuery.ts +3 -3
  898. package/src/store/apis/upsertMembers.ts +3 -3
  899. package/src/store/apis/upsertMessages.ts +3 -3
  900. package/src/store/apis/upsertReads.ts +3 -3
  901. package/src/store/apis/upsertUserSyncStatus.ts +3 -3
  902. package/src/types/types.ts +7 -0
  903. package/src/utils/DBSyncManager.ts +4 -4
  904. package/src/utils/__tests__/getResizedImageUrl.test.ts +1 -2
  905. package/src/utils/getResizedImageUrl.ts +7 -5
  906. package/src/version.json +1 -1
  907. package/lib/commonjs/components/ImageBackground.js.map +0 -1
  908. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js +0 -305
  909. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js.map +0 -1
  910. package/lib/commonjs/components/MessageOverlay/MessageActionList.js +0 -112
  911. package/lib/commonjs/components/MessageOverlay/MessageActionList.js.map +0 -1
  912. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js +0 -87
  913. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js.map +0 -1
  914. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +0 -442
  915. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +0 -1
  916. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js +0 -24
  917. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js.map +0 -1
  918. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js +0 -305
  919. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js.map +0 -1
  920. package/lib/commonjs/components/MessageOverlay/OverlayReactions.js +0 -188
  921. package/lib/commonjs/components/MessageOverlay/OverlayReactions.js.map +0 -1
  922. package/lib/commonjs/components/MessageOverlay/OverlayReactionsAvatar.js.map +0 -1
  923. package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js +0 -166
  924. package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js.map +0 -1
  925. package/lib/commonjs/components/MessageOverlay/hooks/useFetchReactions.js.map +0 -1
  926. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js +0 -34
  927. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +0 -1
  928. package/lib/commonjs/components/Spinner/Spinner.js.map +0 -1
  929. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +0 -45
  930. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +0 -1
  931. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.js +0 -27
  932. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.js.map +0 -1
  933. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.test.js +0 -67
  934. package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.test.js.map +0 -1
  935. package/lib/commonjs/store/QuickSqliteClient.js +0 -158
  936. package/lib/commonjs/store/QuickSqliteClient.js.map +0 -1
  937. package/lib/commonjs/utils/StreamChatRN.js +0 -25
  938. package/lib/commonjs/utils/StreamChatRN.js.map +0 -1
  939. package/lib/module/components/ImageBackground.js.map +0 -1
  940. package/lib/module/components/Message/MessageSimple/ReactionList.js +0 -305
  941. package/lib/module/components/Message/MessageSimple/ReactionList.js.map +0 -1
  942. package/lib/module/components/MessageOverlay/MessageActionList.js +0 -112
  943. package/lib/module/components/MessageOverlay/MessageActionList.js.map +0 -1
  944. package/lib/module/components/MessageOverlay/MessageActionListItem.js +0 -87
  945. package/lib/module/components/MessageOverlay/MessageActionListItem.js.map +0 -1
  946. package/lib/module/components/MessageOverlay/MessageOverlay.js +0 -442
  947. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +0 -1
  948. package/lib/module/components/MessageOverlay/OverlayBackdrop.js +0 -24
  949. package/lib/module/components/MessageOverlay/OverlayBackdrop.js.map +0 -1
  950. package/lib/module/components/MessageOverlay/OverlayReactionList.js +0 -305
  951. package/lib/module/components/MessageOverlay/OverlayReactionList.js.map +0 -1
  952. package/lib/module/components/MessageOverlay/OverlayReactions.js +0 -188
  953. package/lib/module/components/MessageOverlay/OverlayReactions.js.map +0 -1
  954. package/lib/module/components/MessageOverlay/OverlayReactionsAvatar.js.map +0 -1
  955. package/lib/module/components/MessageOverlay/OverlayReactionsItem.js +0 -166
  956. package/lib/module/components/MessageOverlay/OverlayReactionsItem.js.map +0 -1
  957. package/lib/module/components/MessageOverlay/hooks/useFetchReactions.js.map +0 -1
  958. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js +0 -34
  959. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +0 -1
  960. package/lib/module/components/Spinner/Spinner.js.map +0 -1
  961. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +0 -45
  962. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +0 -1
  963. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.js +0 -27
  964. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.js.map +0 -1
  965. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.test.js +0 -67
  966. package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.test.js.map +0 -1
  967. package/lib/module/store/QuickSqliteClient.js +0 -158
  968. package/lib/module/store/QuickSqliteClient.js.map +0 -1
  969. package/lib/module/utils/StreamChatRN.js +0 -25
  970. package/lib/module/utils/StreamChatRN.js.map +0 -1
  971. package/lib/typescript/components/ImageBackground.d.ts.map +0 -1
  972. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts +0 -32
  973. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts.map +0 -1
  974. package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts +0 -14
  975. package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts.map +0 -1
  976. package/lib/typescript/components/MessageOverlay/MessageActionListItem.d.ts.map +0 -1
  977. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts +0 -15
  978. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts.map +0 -1
  979. package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts +0 -8
  980. package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts.map +0 -1
  981. package/lib/typescript/components/MessageOverlay/OverlayReactionList.d.ts +0 -36
  982. package/lib/typescript/components/MessageOverlay/OverlayReactionList.d.ts.map +0 -1
  983. package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts +0 -29
  984. package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts.map +0 -1
  985. package/lib/typescript/components/MessageOverlay/OverlayReactionsAvatar.d.ts +0 -11
  986. package/lib/typescript/components/MessageOverlay/OverlayReactionsAvatar.d.ts.map +0 -1
  987. package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts +0 -11
  988. package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts.map +0 -1
  989. package/lib/typescript/components/MessageOverlay/hooks/useFetchReactions.d.ts.map +0 -1
  990. package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts +0 -11
  991. package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts.map +0 -1
  992. package/lib/typescript/components/Spinner/Spinner.d.ts.map +0 -1
  993. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +0 -79
  994. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts.map +0 -1
  995. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.d.ts +0 -13
  996. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.d.ts.map +0 -1
  997. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.test.d.ts +0 -2
  998. package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.test.d.ts.map +0 -1
  999. package/lib/typescript/store/QuickSqliteClient.d.ts.map +0 -1
  1000. package/lib/typescript/utils/StreamChatRN.d.ts +0 -23
  1001. package/lib/typescript/utils/StreamChatRN.d.ts.map +0 -1
  1002. package/src/components/Message/MessageSimple/ReactionList.tsx +0 -398
  1003. package/src/components/MessageOverlay/MessageActionList.tsx +0 -171
  1004. package/src/components/MessageOverlay/MessageActionListItem.tsx +0 -144
  1005. package/src/components/MessageOverlay/MessageOverlay.tsx +0 -627
  1006. package/src/components/MessageOverlay/OverlayBackdrop.tsx +0 -18
  1007. package/src/components/MessageOverlay/OverlayReactionList.tsx +0 -447
  1008. package/src/components/MessageOverlay/OverlayReactions.tsx +0 -250
  1009. package/src/components/MessageOverlay/OverlayReactionsItem.tsx +0 -188
  1010. package/src/components/MessageOverlay/hooks/useMessageActionAnimation.tsx +0 -44
  1011. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +0 -147
  1012. package/src/contexts/messageOverlayContext/hooks/useResettableState.test.tsx +0 -48
  1013. package/src/contexts/messageOverlayContext/hooks/useResettableState.ts +0 -22
  1014. package/src/utils/StreamChatRN.ts +0 -27
  1015. /package/lib/typescript/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.d.ts +0 -0
  1016. /package/lib/typescript/components/{ImageBackground.d.ts → UIComponents/ImageBackground.d.ts} +0 -0
  1017. /package/lib/typescript/components/{Spinner → UIComponents}/Spinner.d.ts +0 -0
  1018. /package/src/components/{ImageBackground.tsx → UIComponents/ImageBackground.tsx} +0 -0
  1019. /package/src/components/{Spinner → UIComponents}/Spinner.tsx +0 -0
@@ -1,20 +1,17 @@
1
+ import { useRef } from 'react';
1
2
  import { Platform } from 'react-native';
2
- import type {
3
- PanGestureHandlerGestureEvent,
4
- PinchGestureHandlerGestureEvent,
5
- TapGestureHandlerGestureEvent,
6
- } from 'react-native-gesture-handler';
3
+ import { Gesture, GestureType } from 'react-native-gesture-handler';
7
4
  import {
8
5
  cancelAnimation,
9
6
  Easing,
10
7
  runOnJS,
11
8
  SharedValue,
12
- useAnimatedGestureHandler,
13
9
  useSharedValue,
14
10
  withDecay,
15
11
  withTiming,
16
12
  } from 'react-native-reanimated';
17
13
 
14
+ import { useImageGalleryContext } from '../../../contexts/imageGalleryContext/ImageGalleryContext';
18
15
  import { useOverlayContext } from '../../../contexts/overlayContext/OverlayContext';
19
16
  import { triggerHaptic } from '../../../native';
20
17
 
@@ -64,7 +61,15 @@ export const useImageGalleryGestures = ({
64
61
  translateY: SharedValue<number>;
65
62
  translationX: SharedValue<number>;
66
63
  }) => {
67
- const { setOverlay } = useOverlayContext();
64
+ const { setMessages, setSelectedMessage } = useImageGalleryContext();
65
+ /**
66
+ * Gesture handler refs
67
+ */
68
+ const doubleTapRef = useRef<GestureType | undefined>(undefined);
69
+ const panRef = useRef<GestureType | undefined>(undefined);
70
+ const pinchRef = useRef<GestureType | undefined>(undefined);
71
+ const singleTapRef = useRef<GestureType | undefined>(undefined);
72
+ const { overlay, setOverlay } = useOverlayContext();
68
73
  const isAndroid = Platform.OS === 'android';
69
74
 
70
75
  /**
@@ -157,534 +162,548 @@ export const useImageGalleryGestures = ({
157
162
  * gesture handler once it has began so all interactions by the pan
158
163
  * handler are blocked if isPinch.value is true
159
164
  */
160
- const onPan = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(
161
- {
162
- onActive: (evt) => {
163
- if (evt.numberOfPointers === 1 && !isPinch.value) {
164
- /**
165
- * If Android where a second finger cannot be added back and
166
- * removing one finger returns to Pan Handler then adjust origin
167
- * on finger remove and set swiping false
168
- */
169
- if (isAndroid && hasPinched.value === HasPinched.TRUE) {
170
- hasPinched.value = HasPinched.FALSE;
171
- isSwiping.value = IsSwiping.FALSE;
172
- offsetX.value = translateX.value + evt.translationX;
173
- offsetY.value = translateY.value - evt.translationY;
174
- }
175
-
176
- /**
177
- * isSwiping is used to prevent Y movement if a clear swipe to next
178
- * or previous is begun when at the edge of a photo. The value is
179
- * either 0, 1, or 2, via the IsSwiping enum designating undetermined,
180
- * true, or false and is reset on releasing the touch
181
- */
182
- if (isSwiping.value === IsSwiping.UNDETERMINED) {
183
- const maxXYRatio = isAndroid ? 1 : 0.25;
184
- if (
185
- Math.abs(evt.translationX / evt.translationY) > maxXYRatio &&
186
- (Math.abs(-halfScreenWidth * (scale.value - 1) - offsetX.value) < 3 ||
187
- Math.abs(halfScreenWidth * (scale.value - 1) - offsetX.value) < 3)
188
- ) {
189
- isSwiping.value = IsSwiping.TRUE;
190
- }
191
- if (Math.abs(evt.translationY) > 25) {
192
- isSwiping.value = IsSwiping.FALSE;
193
- }
194
- }
195
-
196
- /**
197
- * localEvtScale is used for swipe away
198
- */
199
- const localEvtScale = scale.value / offsetScale.value;
200
-
201
- /**
202
- * If not swiping translate the image in X and Y to the event
203
- * translation plus offset. If swiping only translate X, if
204
- * swiping down when at top of screen or centered balance scale
205
- * using offset to a degree (this needs improvement the calculation
206
- * is incorrect but likely needs origin use to be 100%)
207
- */
208
- translateX.value =
209
- scale.value !== offsetScale.value
210
- ? offsetX.value * localEvtScale - evt.translationX
211
- : offsetX.value - evt.translationX;
212
- translateY.value =
213
- isSwiping.value !== IsSwiping.TRUE
214
- ? scale.value !== offsetScale.value
215
- ? offsetY.value * localEvtScale + evt.translationY
216
- : offsetY.value + evt.translationY
217
- : translateY.value;
165
+ const pan = Gesture.Pan()
166
+ .enabled(overlay === 'gallery')
167
+ .maxPointers(isAndroid ? 0 : 1)
168
+ .minDistance(10)
169
+ .onStart(() => {
170
+ if (!isPinch.value) {
171
+ /**
172
+ * Cancel any previous motion animation on translations when a touch
173
+ * begins to interrupt the animation and take over the position handling
174
+ */
175
+ cancelAnimation(translateX);
176
+ cancelAnimation(translateY);
177
+ cancelAnimation(scale);
178
+ offsetX.value = translateX.value;
179
+ offsetY.value = translateY.value;
180
+ }
218
181
 
219
- /**
220
- * If swiping down start scaling down the image for swipe
221
- * away effect
222
- */
223
- scale.value =
224
- currentImageHeight * offsetScale.value < screenHeight && translateY.value > 0
225
- ? offsetScale.value * (1 - (1 / 3) * (translateY.value / screenHeight))
226
- : currentImageHeight * offsetScale.value > screenHeight &&
227
- translateY.value > (currentImageHeight / 2) * offsetScale.value - halfScreenHeight
228
- ? offsetScale.value *
229
- (1 -
230
- (1 / 3) *
231
- ((translateY.value -
232
- ((currentImageHeight / 2) * offsetScale.value - halfScreenHeight)) /
233
- screenHeight))
234
- : scale.value;
235
-
236
- overlayOpacity.value = localEvtScale;
182
+ /**
183
+ * Reset hasPinched for Android single finger offset
184
+ */
185
+ hasPinched.value = HasPinched.FALSE;
186
+ })
187
+ .onChange((event) => {
188
+ if (event.numberOfPointers === 1 && !isPinch.value) {
189
+ /**
190
+ * If Android where a second finger cannot be added back and
191
+ * removing one finger returns to Pan Handler then adjust origin
192
+ * on finger remove and set swiping false
193
+ */
194
+ if (isAndroid && hasPinched.value === HasPinched.TRUE) {
195
+ hasPinched.value = HasPinched.FALSE;
196
+ isSwiping.value = IsSwiping.FALSE;
197
+ offsetX.value = translateX.value + event.translationX;
198
+ offsetY.value = translateY.value - event.translationY;
237
199
  }
238
- },
239
- onFinish: (evt) => {
240
- if (!isPinch.value && evt.numberOfPointers < 2) {
241
- /**
242
- * To determine if the fling should page to the next image we
243
- * calculate a final position based on the current position and
244
- * event velocity
245
- */
246
- const finalXPosition = evt.translationX - evt.velocityX * 0.3;
247
- const finalYPosition = evt.translationY + evt.velocityY * 0.1;
248
200
 
249
- /**
250
- * If there is a next photo, the image is lined up to the right
251
- * edge, the swipe is to the left, and the final position is more
252
- * than half the screen width, move to the next image
253
- */
201
+ /**
202
+ * isSwiping is used to prevent Y movement if a clear swipe to next
203
+ * or previous is begun when at the edge of a photo. The value is
204
+ * either 0, 1, or 2, via the IsSwiping enum designating undetermined,
205
+ * true, or false and is reset on releasing the touch
206
+ */
207
+ if (isSwiping.value === IsSwiping.UNDETERMINED) {
208
+ const maxXYRatio = isAndroid ? 1 : 0.25;
254
209
  if (
255
- index.value < photoLength - 1 &&
256
- Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
257
- translateX.value < 0 &&
258
- finalXPosition < -halfScreenWidth &&
259
- isSwiping.value === IsSwiping.TRUE
210
+ Math.abs(event.translationX / event.translationY) > maxXYRatio &&
211
+ (Math.abs(-halfScreenWidth * (scale.value - 1) - offsetX.value) < 3 ||
212
+ Math.abs(halfScreenWidth * (scale.value - 1) - offsetX.value) < 3)
260
213
  ) {
261
- cancelAnimation(translationX);
262
- translationX.value = withTiming(
263
- -(screenWidth + MARGIN) * (index.value + 1),
264
- {
265
- duration: 200,
266
- easing: Easing.out(Easing.ease),
267
- },
268
- () => {
269
- resetMovementValues();
270
- index.value = index.value + 1;
271
- runOnJS(setSelectedIndex)(index.value);
272
- },
273
- );
274
-
275
- /**
276
- * If there is a previous photo, the image is lined up to the left
277
- * edge, the swipe is to the right, and the final position is more
278
- * than half the screen width, move to the previous image
279
- */
280
- } else if (
281
- index.value > 0 &&
282
- Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
283
- translateX.value > 0 &&
284
- finalXPosition > halfScreenWidth &&
285
- isSwiping.value === IsSwiping.TRUE
286
- ) {
287
- cancelAnimation(translationX);
288
- translationX.value = withTiming(
289
- -(screenWidth + MARGIN) * (index.value - 1),
290
- {
291
- duration: 200,
292
- easing: Easing.out(Easing.ease),
293
- },
294
- () => {
295
- resetMovementValues();
296
- index.value = index.value - 1;
297
- runOnJS(setSelectedIndex)(index.value);
298
- },
299
- );
214
+ isSwiping.value = IsSwiping.TRUE;
300
215
  }
216
+ if (Math.abs(event.translationY) > 25) {
217
+ isSwiping.value = IsSwiping.FALSE;
218
+ }
219
+ }
301
220
 
302
- /**
303
- * When the pan is finished if the scale is less than 1 return the
304
- * photo to center, if the photo is inside the edges of the screen
305
- * return the photo to line up with the edges, otherwise use decay
306
- * with a clamping at the edges to give the effect the image is
307
- * sliding along using velocity and friction
308
- */
309
- translateX.value =
310
- scale.value < 1
311
- ? withTiming(0)
312
- : translateX.value > halfScreenWidth * (scale.value - 1)
313
- ? withTiming(halfScreenWidth * (scale.value - 1), {
314
- duration: 200,
315
- })
316
- : translateX.value < -halfScreenWidth * (scale.value - 1)
317
- ? withTiming(-halfScreenWidth * (scale.value - 1), {
318
- duration: 200,
319
- })
320
- : withDecay({
321
- clamp: [
322
- -halfScreenWidth * (scale.value - 1),
323
- halfScreenWidth * (scale.value - 1),
324
- ],
325
- deceleration: 0.99,
326
- velocity: -evt.velocityX,
327
- });
221
+ /**
222
+ * localEvtScale is used for swipe away
223
+ */
224
+ const localEvtScale = scale.value / offsetScale.value;
328
225
 
329
- /**
330
- * When the pan is finished if the height is less than the screen
331
- * height return the photo to center, if the photo is inside the
332
- * edges of the screen return the photo to line up with the edges,
333
- * otherwise use decay with a clamping at the edges to give the effect
334
- * the image is sliding along using velocity and friction
335
- */
336
- translateY.value =
337
- currentImageHeight * scale.value < screenHeight
338
- ? withTiming(0)
339
- : translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight
340
- ? withTiming((currentImageHeight / 2) * scale.value - halfScreenHeight)
341
- : translateY.value < (-currentImageHeight / 2) * scale.value + halfScreenHeight
342
- ? withTiming((-currentImageHeight / 2) * scale.value + halfScreenHeight)
343
- : withDecay({
344
- clamp: [
345
- (-currentImageHeight / 2) * scale.value + halfScreenHeight,
346
- (currentImageHeight / 2) * scale.value - halfScreenHeight,
347
- ],
348
- deceleration: 0.99,
349
- velocity: evt.velocityY,
350
- });
226
+ /**
227
+ * If not swiping translate the image in X and Y to the event
228
+ * translation plus offset. If swiping only translate X, if
229
+ * swiping down when at top of screen or centered balance scale
230
+ * using offset to a degree (this needs improvement the calculation
231
+ * is incorrect but likely needs origin use to be 100%)
232
+ */
233
+ translateX.value =
234
+ scale.value !== offsetScale.value
235
+ ? offsetX.value * localEvtScale - event.translationX
236
+ : offsetX.value - event.translationX;
237
+ translateY.value =
238
+ isSwiping.value !== IsSwiping.TRUE
239
+ ? scale.value !== offsetScale.value
240
+ ? offsetY.value * localEvtScale + event.translationY
241
+ : offsetY.value + event.translationY
242
+ : translateY.value;
351
243
 
352
- resetTouchValues();
244
+ /**
245
+ * If swiping down start scaling down the image for swipe
246
+ * away effect
247
+ */
248
+ scale.value =
249
+ currentImageHeight * offsetScale.value < screenHeight && translateY.value > 0
250
+ ? offsetScale.value * (1 - (1 / 3) * (translateY.value / screenHeight))
251
+ : currentImageHeight * offsetScale.value > screenHeight &&
252
+ translateY.value > (currentImageHeight / 2) * offsetScale.value - halfScreenHeight
253
+ ? offsetScale.value *
254
+ (1 -
255
+ (1 / 3) *
256
+ ((translateY.value -
257
+ ((currentImageHeight / 2) * offsetScale.value - halfScreenHeight)) /
258
+ screenHeight))
259
+ : scale.value;
260
+
261
+ overlayOpacity.value = localEvtScale;
262
+ }
263
+ })
264
+ .onEnd((event) => {
265
+ if (!isPinch.value && event.numberOfPointers < 2) {
266
+ /**
267
+ * To determine if the fling should page to the next image we
268
+ * calculate a final position based on the current position and
269
+ * event velocity
270
+ */
271
+ const finalXPosition = event.translationX - event.velocityX * 0.3;
272
+ const finalYPosition = event.translationY + event.velocityY * 0.1;
353
273
 
354
- /**
355
- * If the scale has been reduced below one, i.e. zoomed out, translate
356
- * the zoom back to one
357
- */
358
- scale.value =
359
- scale.value !== offsetScale.value ? withTiming(offsetScale.value) : offsetScale.value;
274
+ /**
275
+ * If there is a next photo, the image is lined up to the right
276
+ * edge, the swipe is to the left, and the final position is more
277
+ * than half the screen width, move to the next image
278
+ */
279
+ if (
280
+ index.value < photoLength - 1 &&
281
+ Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
282
+ translateX.value < 0 &&
283
+ finalXPosition < -halfScreenWidth &&
284
+ isSwiping.value === IsSwiping.TRUE
285
+ ) {
286
+ cancelAnimation(translationX);
287
+ translationX.value = withTiming(
288
+ -(screenWidth + MARGIN) * (index.value + 1),
289
+ {
290
+ duration: 200,
291
+ easing: Easing.out(Easing.ease),
292
+ },
293
+ () => {
294
+ resetMovementValues();
295
+ index.value = index.value + 1;
296
+ runOnJS(setSelectedIndex)(index.value);
297
+ },
298
+ );
360
299
 
361
300
  /**
362
- * If the photo is centered or at the top of the screen if scaled larger
363
- * than the screen, and not paging left or right, and the final Y position
364
- * is greater than half the screen using swipe velocity and position, close
365
- * the overlay
301
+ * If there is a previous photo, the image is lined up to the left
302
+ * edge, the swipe is to the right, and the final position is more
303
+ * than half the screen width, move to the previous image
366
304
  */
367
- if (
368
- finalYPosition > halfScreenHeight &&
369
- offsetY.value + 8 >= (currentImageHeight / 2) * scale.value - halfScreenHeight &&
370
- isSwiping.value !== IsSwiping.TRUE &&
371
- translateY.value !== 0 &&
372
- !(
373
- Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
374
- translateX.value < 0 &&
375
- finalXPosition < -halfScreenWidth
376
- ) &&
377
- !(
378
- Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
379
- translateX.value > 0 &&
380
- finalXPosition > halfScreenWidth
381
- )
382
- ) {
383
- cancelAnimation(translateX);
384
- cancelAnimation(translateY);
385
- cancelAnimation(scale);
386
- overlayOpacity.value = withTiming(
387
- 0,
388
- {
389
- duration: 200,
390
- easing: Easing.out(Easing.ease),
391
- },
392
- () => {
393
- runOnJS(setOverlay)('none');
394
- },
395
- );
396
- scale.value = withTiming(0.6, {
305
+ } else if (
306
+ index.value > 0 &&
307
+ Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
308
+ translateX.value > 0 &&
309
+ finalXPosition > halfScreenWidth &&
310
+ isSwiping.value === IsSwiping.TRUE
311
+ ) {
312
+ cancelAnimation(translationX);
313
+ translationX.value = withTiming(
314
+ -(screenWidth + MARGIN) * (index.value - 1),
315
+ {
397
316
  duration: 200,
398
317
  easing: Easing.out(Easing.ease),
399
- });
400
- translateY.value =
401
- evt.velocityY > 1000
402
- ? withDecay({
403
- velocity: evt.velocityY,
404
- })
405
- : withTiming(halfScreenHeight + (currentImageHeight / 2) * scale.value, {
406
- duration: 200,
407
- easing: Easing.out(Easing.ease),
408
- });
409
- translateX.value = withDecay({
410
- velocity: -evt.velocityX,
411
- });
412
- }
413
- }
414
- },
415
- onStart: () => {
416
- if (!isPinch.value) {
417
- /**
418
- * Cancel any previous motion animation on translations when a touch
419
- * begins to interrupt the animation and take over the position handling
420
- */
421
- cancelAnimation(translateX);
422
- cancelAnimation(translateY);
423
- cancelAnimation(scale);
424
- offsetX.value = translateX.value;
425
- offsetY.value = translateY.value;
318
+ },
319
+ () => {
320
+ resetMovementValues();
321
+ index.value = index.value - 1;
322
+ runOnJS(setSelectedIndex)(index.value);
323
+ },
324
+ );
426
325
  }
427
326
 
428
327
  /**
429
- * Reset hasPinched for Android single finger offset
328
+ * When the pan is finished if the scale is less than 1 return the
329
+ * photo to center, if the photo is inside the edges of the screen
330
+ * return the photo to line up with the edges, otherwise use decay
331
+ * with a clamping at the edges to give the effect the image is
332
+ * sliding along using velocity and friction
430
333
  */
431
- hasPinched.value = HasPinched.FALSE;
432
- },
433
- },
434
- [currentImageHeight, photoLength],
435
- );
334
+ translateX.value =
335
+ scale.value < 1
336
+ ? withTiming(0)
337
+ : translateX.value > halfScreenWidth * (scale.value - 1)
338
+ ? withTiming(halfScreenWidth * (scale.value - 1), {
339
+ duration: 200,
340
+ })
341
+ : translateX.value < -halfScreenWidth * (scale.value - 1)
342
+ ? withTiming(-halfScreenWidth * (scale.value - 1), {
343
+ duration: 200,
344
+ })
345
+ : withDecay({
346
+ clamp: [-halfScreenWidth * (scale.value - 1), halfScreenWidth * (scale.value - 1)],
347
+ deceleration: 0.99,
348
+ velocity: -event.velocityX,
349
+ });
436
350
 
437
- /**
438
- * On pinch is run when two or more fingers touch the screen, it then takes over
439
- * all touch handling even if the number of fingers is reduced to one until the
440
- * touch is complete
441
- */
442
- const onPinch = useAnimatedGestureHandler<PinchGestureHandlerGestureEvent>(
443
- {
444
- onActive: (evt) => {
445
351
  /**
446
- * Android starts with a zero event with 1 touch instead of two
447
- * we therefore must wait to capture starting info until the double
448
- * touch begins
352
+ * When the pan is finished if the height is less than the screen
353
+ * height return the photo to center, if the photo is inside the
354
+ * edges of the screen return the photo to line up with the edges,
355
+ * otherwise use decay with a clamping at the edges to give the effect
356
+ * the image is sliding along using velocity and friction
449
357
  */
450
- if (!isPinch.value && isAndroid) {
451
- /**
452
- * Set hasPinched to true so when removing one finger the pan active
453
- * state adjusts the offset
454
- */
455
- hasPinched.value = HasPinched.TRUE;
358
+ translateY.value =
359
+ currentImageHeight * scale.value < screenHeight
360
+ ? withTiming(0)
361
+ : translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight
362
+ ? withTiming((currentImageHeight / 2) * scale.value - halfScreenHeight)
363
+ : translateY.value < (-currentImageHeight / 2) * scale.value + halfScreenHeight
364
+ ? withTiming((-currentImageHeight / 2) * scale.value + halfScreenHeight)
365
+ : withDecay({
366
+ clamp: [
367
+ (-currentImageHeight / 2) * scale.value + halfScreenHeight,
368
+ (currentImageHeight / 2) * scale.value - halfScreenHeight,
369
+ ],
370
+ deceleration: 0.99,
371
+ velocity: event.velocityY,
372
+ });
373
+
374
+ resetTouchValues();
456
375
 
457
- /**
458
- * Cancel any previous motion animation on translations when a touch
459
- * begins to interrupt the animation and take over the position handling
460
- */
376
+ /**
377
+ * If the scale has been reduced below one, i.e. zoomed out, translate
378
+ * the zoom back to one
379
+ */
380
+ scale.value =
381
+ scale.value !== offsetScale.value ? withTiming(offsetScale.value) : offsetScale.value;
382
+
383
+ /**
384
+ * If the photo is centered or at the top of the screen if scaled larger
385
+ * than the screen, and not paging left or right, and the final Y position
386
+ * is greater than half the screen using swipe velocity and position, close
387
+ * the overlay
388
+ */
389
+ if (
390
+ finalYPosition > halfScreenHeight &&
391
+ offsetY.value + 8 >= (currentImageHeight / 2) * scale.value - halfScreenHeight &&
392
+ isSwiping.value !== IsSwiping.TRUE &&
393
+ translateY.value !== 0 &&
394
+ !(
395
+ Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
396
+ translateX.value < 0 &&
397
+ finalXPosition < -halfScreenWidth
398
+ ) &&
399
+ !(
400
+ Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&
401
+ translateX.value > 0 &&
402
+ finalXPosition > halfScreenWidth
403
+ )
404
+ ) {
461
405
  cancelAnimation(translateX);
462
406
  cancelAnimation(translateY);
463
407
  cancelAnimation(scale);
464
408
 
465
- /**
466
- * Reset isSwiping as now the pan gesture handler is no longer running
467
- */
468
- isSwiping.value = IsSwiping.UNDETERMINED;
469
-
470
- /**
471
- * Set initial values for pinch gesture interaction handler
472
- */
473
- numberOfPinchFingers.value = evt.numberOfPointers;
474
- offsetX.value = translateX.value;
475
- offsetY.value = translateY.value;
476
- adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);
477
- adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);
478
- originX.value = adjustedFocalX.value;
479
- originY.value = adjustedFocalY.value;
480
- offsetScale.value = scale.value;
409
+ overlayOpacity.value = withTiming(
410
+ 0,
411
+ {
412
+ duration: 200,
413
+ easing: Easing.out(Easing.ease),
414
+ },
415
+ () => {
416
+ runOnJS(setSelectedMessage)(undefined);
417
+ runOnJS(setMessages)([]);
418
+ runOnJS(setOverlay)('none');
419
+ },
420
+ );
421
+ scale.value = withTiming(0.6, {
422
+ duration: 200,
423
+ easing: Easing.out(Easing.ease),
424
+ });
425
+ translateY.value =
426
+ event.velocityY > 1000
427
+ ? withDecay({
428
+ velocity: event.velocityY,
429
+ })
430
+ : withTiming(halfScreenHeight + (currentImageHeight / 2) * scale.value, {
431
+ duration: 200,
432
+ easing: Easing.out(Easing.ease),
433
+ });
434
+ translateX.value = withDecay({
435
+ velocity: -event.velocityX,
436
+ });
481
437
  }
438
+ }
439
+ })
440
+ .simultaneousWithExternalGesture(pinchRef)
441
+ .withRef(panRef);
442
+
443
+ /**
444
+ * On pinch is run when two or more fingers touch the screen, it then takes over
445
+ * all touch handling even if the number of fingers is reduced to one until the
446
+ * touch is complete
447
+ */
448
+ const pinch = Gesture.Pinch()
449
+ .onStart((event) => {
450
+ /**
451
+ * Android starts with a zero event with 1 touch instead of two
452
+ * we therefore must wait to capture starting info until the double
453
+ * touch begins
454
+ */
455
+ if (!isAndroid) {
456
+ /**
457
+ * Cancel any previous motion animation on translations when a touch
458
+ * begins to interrupt the animation and take over the position handling
459
+ */
460
+ cancelAnimation(translateX);
461
+ cancelAnimation(translateY);
462
+ cancelAnimation(scale);
482
463
 
483
464
  /**
484
- * Set pinch to true to stop all pan gesture interactions, we do this
485
- * again here for Android outside the check that creates type
465
+ * Set pinch to true to stop all pan gesture interactions
486
466
  */
487
467
  isPinch.value = true;
488
468
 
489
469
  /**
490
- * The scale is clamped to a minimum of 1 and maximum of 8 for aesthetics.
491
- * We use the clamped value to determine a local event scale so the focal
492
- * point does not become out of sync with the actual photo scaling, e.g.
493
- * evt.scale is 20 but scale is 8, using evt.scale for offset will put the
494
- * photo and calculations out of sync
470
+ * Reset isSwiping as now the pan gesture handler is no longer running
495
471
  */
496
- scale.value = clamp(offsetScale.value * evt.scale, 1, 8);
497
- const localEvtScale = scale.value / offsetScale.value;
472
+ isSwiping.value = IsSwiping.UNDETERMINED;
498
473
 
499
474
  /**
500
- * When we hit the top or bottom of the scale clamping we run a haptic
501
- * trigger, we track if it has been run to not spam the trigger
475
+ * Set initial values for pinch gesture interaction handler
502
476
  */
503
- if (scale.value !== 8 && scale.value !== 1) {
504
- hasHitTopScale.value = 0;
505
- hasHitBottomScale.value = 0;
506
- } else if (scale.value === 8 && hasHitTopScale.value === 0) {
507
- hasHitTopScale.value = 1;
508
- runOnJS(triggerHaptic)('impactLight');
509
- } else if (scale.value === 1 && hasHitBottomScale.value === 0) {
510
- hasHitBottomScale.value = 1;
511
- runOnJS(triggerHaptic)('impactLight');
512
- }
477
+ numberOfPinchFingers.value = event.numberOfPointers;
478
+ offsetX.value = translateX.value;
479
+ offsetY.value = translateY.value;
480
+ adjustedFocalX.value = event.focalX - (halfScreenWidth - offsetX.value);
481
+ adjustedFocalY.value = event.focalY - (halfScreenHeight + offsetY.value);
482
+ originX.value = adjustedFocalX.value;
483
+ originY.value = adjustedFocalY.value;
484
+ offsetScale.value = scale.value;
485
+ }
513
486
 
487
+ /**
488
+ * Reset hasPinched for Android single finger offset
489
+ */
490
+ hasPinched.value = HasPinched.FALSE;
491
+ })
492
+ .onChange((event) => {
493
+ /**
494
+ * Android starts with a zero event with 1 touch instead of two
495
+ * we therefore must wait to capture starting info until the double
496
+ * touch begins
497
+ */
498
+ if (!isPinch.value && isAndroid) {
514
499
  /**
515
- * We calculate the adjusted focal point on the photo using the events
516
- * focal position on the screen, screen size, and current photo offset
500
+ * Set hasPinched to true so when removing one finger the pan active
501
+ * state adjusts the offset
517
502
  */
518
- adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);
519
- adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);
503
+ hasPinched.value = HasPinched.TRUE;
520
504
 
521
505
  /**
522
- * If the number of fingers on the screen changes, the position of the
523
- * focal point will change and this needs to be accounted for, e.g. if
524
- * two fingers are on the screen the focal is between them, but if one is
525
- * then removed the focal is now at the remaining fingers touch position.
526
- * If this happens without accounting for the change the image will jump
527
- * around, we keep track of the previous two finger focal to adjust for this
528
- * change in a reduction from two fingers to one, then if another finger
529
- * is added again we adjust the origin to account for the difference between
530
- * the original two finger touch and the new two finger touch position.
506
+ * Cancel any previous motion animation on translations when a touch
507
+ * begins to interrupt the animation and take over the position handling
531
508
  */
532
- if (numberOfPinchFingers.value !== evt.numberOfPointers) {
533
- numberOfPinchFingers.value = evt.numberOfPointers;
534
- if (evt.numberOfPointers === 1) {
535
- focalOffsetX.value = oldFocalX.value - adjustedFocalX.value;
536
- focalOffsetY.value = oldFocalY.value - adjustedFocalY.value;
537
- } else if (numberOfPinchFingers.value > 1) {
538
- originX.value =
539
- originX.value -
540
- (oldFocalX.value / localEvtScale - adjustedFocalX.value / localEvtScale);
541
- originY.value =
542
- originY.value -
543
- (oldFocalY.value / localEvtScale - adjustedFocalY.value / localEvtScale);
544
- }
545
- }
509
+ cancelAnimation(translateX);
510
+ cancelAnimation(translateY);
511
+ cancelAnimation(scale);
546
512
 
547
513
  /**
548
- * If pinch handler has been activated via two fingers then the fingers
549
- * reduced to one we keep track of the old focal using the focal offset
550
- * from when the number of fingers was two. We then translate the photo
551
- * taking into account the offset, focal, focal offset, origin, and scale.
514
+ * Reset isSwiping as now the pan gesture handler is no longer running
552
515
  */
553
- if (numberOfPinchFingers.value === 1) {
554
- oldFocalX.value = adjustedFocalX.value + focalOffsetX.value;
555
- oldFocalY.value = adjustedFocalY.value + focalOffsetY.value;
556
- translateX.value = offsetX.value - oldFocalX.value + localEvtScale * originX.value;
557
- translateY.value = offsetY.value + oldFocalY.value - localEvtScale * originY.value;
516
+ isSwiping.value = IsSwiping.UNDETERMINED;
558
517
 
559
- /**
560
- * If the number of fingers in the gesture is greater than one the
561
- * adjusted focal point is saved as the old focal and the photo is
562
- * translated taking into account the offset, focal, origin, and scale.
563
- */
518
+ /**
519
+ * Set initial values for pinch gesture interaction handler
520
+ */
521
+ numberOfPinchFingers.value = event.numberOfPointers;
522
+ offsetX.value = translateX.value;
523
+ offsetY.value = translateY.value;
524
+ adjustedFocalX.value = event.focalX - (halfScreenWidth - offsetX.value);
525
+ adjustedFocalY.value = event.focalY - (halfScreenHeight + offsetY.value);
526
+ originX.value = adjustedFocalX.value;
527
+ originY.value = adjustedFocalY.value;
528
+ offsetScale.value = scale.value;
529
+ }
530
+
531
+ /**
532
+ * Set pinch to true to stop all pan gesture interactions, we do this
533
+ * again here for Android outside the check that creates type
534
+ */
535
+ isPinch.value = true;
536
+
537
+ /**
538
+ * The scale is clamped to a minimum of 1 and maximum of 8 for aesthetics.
539
+ * We use the clamped value to determine a local event scale so the focal
540
+ * point does not become out of sync with the actual photo scaling, e.g.
541
+ * evt.scale is 20 but scale is 8, using evt.scale for offset will put the
542
+ * photo and calculations out of sync
543
+ */
544
+ scale.value = clamp(offsetScale.value * event.scale, 1, 8);
545
+ const localEvtScale = scale.value / offsetScale.value;
546
+
547
+ /**
548
+ * When we hit the top or bottom of the scale clamping we run a haptic
549
+ * trigger, we track if it has been run to not spam the trigger
550
+ */
551
+ if (scale.value !== 8 && scale.value !== 1) {
552
+ hasHitTopScale.value = 0;
553
+ hasHitBottomScale.value = 0;
554
+ } else if (scale.value === 8 && hasHitTopScale.value === 0) {
555
+ hasHitTopScale.value = 1;
556
+ runOnJS(triggerHaptic)('impactLight');
557
+ } else if (scale.value === 1 && hasHitBottomScale.value === 0) {
558
+ hasHitBottomScale.value = 1;
559
+ runOnJS(triggerHaptic)('impactLight');
560
+ }
561
+
562
+ /**
563
+ * We calculate the adjusted focal point on the photo using the events
564
+ * focal position on the screen, screen size, and current photo offset
565
+ */
566
+ adjustedFocalX.value = event.focalX - (halfScreenWidth - offsetX.value);
567
+ adjustedFocalY.value = event.focalY - (halfScreenHeight + offsetY.value);
568
+
569
+ /**
570
+ * If the number of fingers on the screen changes, the position of the
571
+ * focal point will change and this needs to be accounted for, e.g. if
572
+ * two fingers are on the screen the focal is between them, but if one is
573
+ * then removed the focal is now at the remaining fingers touch position.
574
+ * If this happens without accounting for the change the image will jump
575
+ * around, we keep track of the previous two finger focal to adjust for this
576
+ * change in a reduction from two fingers to one, then if another finger
577
+ * is added again we adjust the origin to account for the difference between
578
+ * the original two finger touch and the new two finger touch position.
579
+ */
580
+ if (numberOfPinchFingers.value !== event.numberOfPointers) {
581
+ numberOfPinchFingers.value = event.numberOfPointers;
582
+ if (event.numberOfPointers === 1) {
583
+ focalOffsetX.value = oldFocalX.value - adjustedFocalX.value;
584
+ focalOffsetY.value = oldFocalY.value - adjustedFocalY.value;
564
585
  } else if (numberOfPinchFingers.value > 1) {
565
- oldFocalX.value = adjustedFocalX.value;
566
- oldFocalY.value = adjustedFocalY.value;
567
- translateX.value = offsetX.value - adjustedFocalX.value + localEvtScale * originX.value;
568
- translateY.value = offsetY.value + adjustedFocalY.value - localEvtScale * originY.value;
586
+ originX.value =
587
+ originX.value -
588
+ (oldFocalX.value / localEvtScale - adjustedFocalX.value / localEvtScale);
589
+ originY.value =
590
+ originY.value -
591
+ (oldFocalY.value / localEvtScale - adjustedFocalY.value / localEvtScale);
569
592
  }
570
- },
571
- onFinish: () => {
572
- if (isPinch.value) {
573
- /**
574
- * When the pinch is finished if the scale is less than 1 return the
575
- * photo to center, if the photo is inside the edges of the screen
576
- * return the photo to line up with the edges, otherwise leave the
577
- * photo in its current position
578
- */
579
- translateX.value =
580
- scale.value < 1
581
- ? withTiming(0)
582
- : translateX.value > halfScreenWidth * (scale.value - 1)
583
- ? withTiming(halfScreenWidth * (scale.value - 1))
584
- : translateX.value < -halfScreenWidth * (scale.value - 1)
585
- ? withTiming(-halfScreenWidth * (scale.value - 1))
586
- : translateX.value;
593
+ }
587
594
 
588
- /**
589
- * When the pinch is finished if the height is less than the screen
590
- * height return the photo to center, if the photo is inside the
591
- * edges of the screen return the photo to line up with the edges,
592
- * otherwise leave the photo in its current position
593
- */
594
- translateY.value =
595
- currentImageHeight * scale.value < screenHeight
596
- ? withTiming(0)
597
- : translateY.value > (currentImageHeight / 2) * scale.value - screenHeight / 2
598
- ? withTiming((currentImageHeight / 2) * scale.value - screenHeight / 2)
599
- : translateY.value < (-currentImageHeight / 2) * scale.value + screenHeight / 2
600
- ? withTiming((-currentImageHeight / 2) * scale.value + screenHeight / 2)
601
- : translateY.value;
595
+ /**
596
+ * If pinch handler has been activated via two fingers then the fingers
597
+ * reduced to one we keep track of the old focal using the focal offset
598
+ * from when the number of fingers was two. We then translate the photo
599
+ * taking into account the offset, focal, focal offset, origin, and scale.
600
+ */
601
+ if (numberOfPinchFingers.value === 1) {
602
+ oldFocalX.value = adjustedFocalX.value + focalOffsetX.value;
603
+ oldFocalY.value = adjustedFocalY.value + focalOffsetY.value;
604
+ translateX.value = offsetX.value - oldFocalX.value + localEvtScale * originX.value;
605
+ translateY.value = offsetY.value + oldFocalY.value - localEvtScale * originY.value;
602
606
 
603
- /**
604
- * If the scale has been reduced below one, i.e. zoomed out, translate
605
- * the zoom back to one
606
- */
607
- offsetScale.value = scale.value < 1 ? 1 : scale.value;
608
- scale.value = scale.value < 1 ? withTiming(1) : scale.value;
609
- resetTouchValues();
610
- }
611
- },
612
- onStart: (evt) => {
613
607
  /**
614
- * Android starts with a zero event with 1 touch instead of two
615
- * we therefore must wait to capture starting info until the double
616
- * touch begins
608
+ * If the number of fingers in the gesture is greater than one the
609
+ * adjusted focal point is saved as the old focal and the photo is
610
+ * translated taking into account the offset, focal, origin, and scale.
617
611
  */
618
- if (!isAndroid) {
619
- /**
620
- * Cancel any previous motion animation on translations when a touch
621
- * begins to interrupt the animation and take over the position handling
622
- */
623
- cancelAnimation(translateX);
624
- cancelAnimation(translateY);
625
- cancelAnimation(scale);
626
-
627
- /**
628
- * Set pinch to true to stop all pan gesture interactions
629
- */
630
- isPinch.value = true;
631
-
632
- /**
633
- * Reset isSwiping as now the pan gesture handler is no longer running
634
- */
635
- isSwiping.value = IsSwiping.UNDETERMINED;
612
+ } else if (numberOfPinchFingers.value > 1) {
613
+ oldFocalX.value = adjustedFocalX.value;
614
+ oldFocalY.value = adjustedFocalY.value;
615
+ translateX.value = offsetX.value - adjustedFocalX.value + localEvtScale * originX.value;
616
+ translateY.value = offsetY.value + adjustedFocalY.value - localEvtScale * originY.value;
617
+ }
618
+ })
619
+ .onEnd(() => {
620
+ if (isPinch.value) {
621
+ /**
622
+ * When the pinch is finished if the scale is less than 1 return the
623
+ * photo to center, if the photo is inside the edges of the screen
624
+ * return the photo to line up with the edges, otherwise leave the
625
+ * photo in its current position
626
+ */
627
+ translateX.value =
628
+ scale.value < 1
629
+ ? withTiming(0)
630
+ : translateX.value > halfScreenWidth * (scale.value - 1)
631
+ ? withTiming(halfScreenWidth * (scale.value - 1))
632
+ : translateX.value < -halfScreenWidth * (scale.value - 1)
633
+ ? withTiming(-halfScreenWidth * (scale.value - 1))
634
+ : translateX.value;
636
635
 
637
- /**
638
- * Set initial values for pinch gesture interaction handler
639
- */
640
- numberOfPinchFingers.value = evt.numberOfPointers;
641
- offsetX.value = translateX.value;
642
- offsetY.value = translateY.value;
643
- adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);
644
- adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);
645
- originX.value = adjustedFocalX.value;
646
- originY.value = adjustedFocalY.value;
647
- offsetScale.value = scale.value;
648
- }
636
+ /**
637
+ * When the pinch is finished if the height is less than the screen
638
+ * height return the photo to center, if the photo is inside the
639
+ * edges of the screen return the photo to line up with the edges,
640
+ * otherwise leave the photo in its current position
641
+ */
642
+ translateY.value =
643
+ currentImageHeight * scale.value < screenHeight
644
+ ? withTiming(0)
645
+ : translateY.value > (currentImageHeight / 2) * scale.value - screenHeight / 2
646
+ ? withTiming((currentImageHeight / 2) * scale.value - screenHeight / 2)
647
+ : translateY.value < (-currentImageHeight / 2) * scale.value + screenHeight / 2
648
+ ? withTiming((-currentImageHeight / 2) * scale.value + screenHeight / 2)
649
+ : translateY.value;
649
650
 
650
651
  /**
651
- * Reset hasPinched for Android single finger offset
652
+ * If the scale has been reduced below one, i.e. zoomed out, translate
653
+ * the zoom back to one
652
654
  */
653
- hasPinched.value = HasPinched.FALSE;
654
- },
655
- },
656
- [currentImageHeight],
657
- );
655
+ offsetScale.value = scale.value < 1 ? 1 : scale.value;
656
+ scale.value = scale.value < 1 ? withTiming(1) : scale.value;
657
+ resetTouchValues();
658
+ }
659
+ })
660
+ .withRef(pinchRef)
661
+ .simultaneousWithExternalGesture(panRef);
658
662
 
659
663
  /**
660
664
  * Single tap handler for header hiding and showing
661
665
  */
662
- const onSingleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({
663
- onActive: () => {
666
+ const singleTap = Gesture.Tap()
667
+ .minPointers(1)
668
+ .numberOfTaps(1)
669
+ .onEnd(() => {
664
670
  cancelAnimation(headerFooterVisible);
665
671
  headerFooterVisible.value = headerFooterVisible.value > 0 ? withTiming(0) : withTiming(1);
666
- },
667
- });
672
+ })
673
+ .requireExternalGestureToFail(panRef, pinchRef, doubleTapRef)
674
+ .withRef(singleTapRef);
668
675
 
669
676
  /**
670
677
  * Double tap handler to zoom back out and hide header and footer
671
678
  */
672
- const onDoubleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({
673
- onActive: (evt) => {
674
- if (Math.abs(tapX.value - evt.absoluteX) < 64 && Math.abs(tapY.value - evt.absoluteY) < 64) {
679
+ const doubleTap = Gesture.Tap()
680
+ .maxDeltaX(8)
681
+ .maxDeltaY(8)
682
+ .maxDistance(8)
683
+ .minPointers(1)
684
+ .numberOfTaps(2)
685
+ .onStart((event) => {
686
+ tapX.value = event.absoluteX;
687
+ tapY.value = event.absoluteY;
688
+ })
689
+ .onEnd((event) => {
690
+ if (
691
+ Math.abs(tapX.value - event.absoluteX) < 64 &&
692
+ Math.abs(tapY.value - event.absoluteY) < 64
693
+ ) {
675
694
  if (offsetScale.value === 1 && offsetX.value === 0 && offsetY.value === 0) {
676
695
  offsetScale.value = 2;
677
696
  scale.value = withTiming(2, {
678
697
  duration: 200,
679
698
  easing: Easing.out(Easing.ease),
680
699
  });
681
- translateX.value = withTiming(evt.absoluteX - halfScreenWidth, {
700
+ translateX.value = withTiming(event.absoluteX - halfScreenWidth, {
682
701
  duration: 200,
683
702
  easing: Easing.out(Easing.ease),
684
703
  });
685
704
  if (currentImageHeight * 2 > screenHeight) {
686
705
  const translateYTopBottom =
687
- evt.absoluteY > halfScreenHeight
706
+ event.absoluteY > halfScreenHeight
688
707
  ? -(currentImageHeight * 2 - screenHeight) / 2
689
708
  : (currentImageHeight * 2 - screenHeight) / 2;
690
709
  translateY.value = withTiming(translateYTopBottom, {
@@ -714,18 +733,14 @@ export const useImageGalleryGestures = ({
714
733
  }
715
734
  }
716
735
  }
717
- },
718
- onStart: (evt) => {
719
- tapX.value = evt.absoluteX;
720
- tapY.value = evt.absoluteY;
721
- },
722
- });
736
+ })
737
+ .withRef(doubleTapRef);
723
738
 
724
739
  return {
725
- onDoubleTap,
726
- onPan,
727
- onPinch,
728
- onSingleTap,
740
+ doubleTap,
741
+ pan,
742
+ pinch,
743
+ singleTap,
729
744
  };
730
745
  };
731
746