stream-chat-react-native-core 3.10.1 → 4.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/lib/commonjs/components/Attachment/Card.js +18 -15
  2. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/Gallery.js +8 -15
  4. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/Giphy.js +3 -3
  6. package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
  7. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +21 -45
  8. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  9. package/lib/commonjs/components/AutoCompleteInput/{CommandsItem.js → AutoCompleteSuggestionCommandIcon.js} +21 -94
  10. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js.map +1 -0
  11. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +145 -0
  12. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -0
  13. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +248 -0
  14. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -0
  15. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +223 -0
  16. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -0
  17. package/lib/commonjs/components/Avatar/GroupAvatar.js +3 -9
  18. package/lib/commonjs/components/Avatar/GroupAvatar.js.map +1 -1
  19. package/lib/commonjs/components/Channel/Channel.js +293 -208
  20. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  21. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +5 -5
  22. package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  23. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -5
  24. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  25. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +9 -31
  26. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  27. package/lib/commonjs/components/Channel/hooks/useCreateOwnCapabilitiesContext.js +35 -0
  28. package/lib/commonjs/components/Channel/hooks/useCreateOwnCapabilitiesContext.js.map +1 -0
  29. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -0
  30. package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  31. package/lib/commonjs/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js +2 -1
  32. package/lib/commonjs/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js.map +1 -1
  33. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +32 -20
  34. package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  35. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessenger.js +8 -7
  36. package/lib/commonjs/components/ChannelPreview/ChannelPreviewMessenger.js.map +1 -1
  37. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js +16 -7
  38. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js.map +1 -1
  39. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  40. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  41. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +12 -5
  42. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  43. package/lib/commonjs/components/ImageGallery/ImageGallery.js +1 -2
  44. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  45. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +14 -16
  46. package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  47. package/lib/commonjs/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  48. package/lib/commonjs/components/Message/Message.js +144 -851
  49. package/lib/commonjs/components/Message/Message.js.map +1 -1
  50. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +39 -38
  51. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  52. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js +4 -2
  53. package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  54. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +24 -16
  55. package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  56. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js +122 -0
  57. package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -0
  58. package/lib/commonjs/components/Message/MessageSimple/MessageReplies.js +5 -1
  59. package/lib/commonjs/components/Message/MessageSimple/MessageReplies.js.map +1 -1
  60. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +27 -13
  61. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  62. package/lib/commonjs/components/Message/MessageSimple/MessageStatus.js +19 -20
  63. package/lib/commonjs/components/Message/MessageSimple/MessageStatus.js.map +1 -1
  64. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +7 -3
  65. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  66. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js +52 -80
  67. package/lib/commonjs/components/Message/MessageSimple/ReactionList.js.map +1 -1
  68. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js +42 -14
  69. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  70. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +1 -5
  71. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  72. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js +294 -0
  73. package/lib/commonjs/components/Message/hooks/useMessageActionHandlers.js.map +1 -0
  74. package/lib/commonjs/components/Message/hooks/useMessageActions.js +559 -0
  75. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -0
  76. package/lib/commonjs/components/Message/utils/messageActions.js +17 -15
  77. package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
  78. package/lib/commonjs/components/MessageInput/CooldownTimer.js +78 -0
  79. package/lib/commonjs/components/MessageInput/CooldownTimer.js.map +1 -0
  80. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +2 -2
  81. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  82. package/lib/commonjs/components/MessageInput/ImageUploadPreview.js +2 -2
  83. package/lib/commonjs/components/MessageInput/ImageUploadPreview.js.map +1 -1
  84. package/lib/commonjs/components/MessageInput/InputButtons.js +16 -21
  85. package/lib/commonjs/components/MessageInput/InputButtons.js.map +1 -1
  86. package/lib/commonjs/components/MessageInput/MessageInput.js +90 -62
  87. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  88. package/lib/commonjs/components/MessageInput/SendMessageDisallowedIndicator.js +71 -0
  89. package/lib/commonjs/components/MessageInput/SendMessageDisallowedIndicator.js.map +1 -0
  90. package/lib/commonjs/components/MessageInput/ShowThreadMessageInChannelButton.js +1 -0
  91. package/lib/commonjs/components/MessageInput/ShowThreadMessageInChannelButton.js.map +1 -1
  92. package/lib/commonjs/components/MessageInput/hooks/useCooldown.js +63 -0
  93. package/lib/commonjs/components/MessageInput/hooks/useCooldown.js.map +1 -0
  94. package/lib/commonjs/components/MessageInput/hooks/useCountdown.js +57 -0
  95. package/lib/commonjs/components/MessageInput/hooks/useCountdown.js.map +1 -0
  96. package/lib/commonjs/components/MessageList/DateHeader.js +2 -2
  97. package/lib/commonjs/components/MessageList/DateHeader.js.map +1 -1
  98. package/lib/commonjs/components/MessageList/InlineDateSeparator.js +2 -2
  99. package/lib/commonjs/components/MessageList/InlineDateSeparator.js.map +1 -1
  100. package/lib/commonjs/components/MessageList/MessageList.js +75 -42
  101. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  102. package/lib/commonjs/components/MessageList/hooks/useMessageList.js +16 -3
  103. package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
  104. package/lib/commonjs/components/MessageList/utils/getDateSeparators.js +2 -1
  105. package/lib/commonjs/components/MessageList/utils/getDateSeparators.js.map +1 -1
  106. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js +10 -5
  107. package/lib/commonjs/components/MessageList/utils/getGroupStyles.js.map +1 -1
  108. package/lib/{module/components/MessageOverlay/MessageActions.js → commonjs/components/MessageOverlay/MessageActionList.js} +33 -85
  109. package/lib/commonjs/components/MessageOverlay/MessageActionList.js.map +1 -0
  110. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js +131 -0
  111. package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js.map +1 -0
  112. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +83 -70
  113. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  114. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js +38 -0
  115. package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js.map +1 -0
  116. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js +1 -0
  117. package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js.map +1 -1
  118. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js +37 -0
  119. package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +1 -0
  120. package/lib/commonjs/components/Thread/Thread.js +13 -4
  121. package/lib/commonjs/components/Thread/Thread.js.map +1 -1
  122. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js +9 -1
  123. package/lib/commonjs/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  124. package/lib/commonjs/components/docs/ListProps.md +1 -1
  125. package/lib/commonjs/components/index.js +107 -55
  126. package/lib/commonjs/components/index.js.map +1 -1
  127. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +68 -0
  128. package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -0
  129. package/lib/commonjs/contexts/channelContext/ChannelContext.js +2 -2
  130. package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
  131. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  132. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js +155 -0
  133. package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -0
  134. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js +144 -0
  135. package/lib/commonjs/contexts/channelsStateContext/useChannelState.js.map +1 -0
  136. package/lib/commonjs/contexts/messageContext/MessageContext.js +2 -2
  137. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  138. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +112 -78
  139. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  140. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -5
  141. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  142. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  143. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
  144. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  145. package/lib/commonjs/contexts/overlayContext/OverlayContext.js +1 -1
  146. package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
  147. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +31 -24
  148. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  149. package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +61 -0
  150. package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -0
  151. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +19 -32
  152. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  153. package/lib/commonjs/contexts/themeContext/utils/theme.js +25 -9
  154. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  155. package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
  156. package/lib/commonjs/contexts/utils/getDisplayName.js.map +1 -1
  157. package/lib/commonjs/emoji-data/compiled.js +0 -315
  158. package/lib/commonjs/emoji-data/compiled.js.map +1 -1
  159. package/lib/commonjs/emoji-data/emojiNames.js +0 -105
  160. package/lib/commonjs/emoji-data/emojiNames.js.map +1 -1
  161. package/lib/commonjs/emoji-data/emojis.js +0 -175
  162. package/lib/commonjs/emoji-data/emojis.js.map +1 -1
  163. package/lib/commonjs/i18n/en.json +9 -3
  164. package/lib/commonjs/i18n/fr.json +9 -3
  165. package/lib/commonjs/i18n/hi.json +9 -3
  166. package/lib/commonjs/i18n/it.json +9 -3
  167. package/lib/commonjs/i18n/ja.json +9 -0
  168. package/lib/commonjs/i18n/ko.json +9 -0
  169. package/lib/commonjs/i18n/nl.json +9 -3
  170. package/lib/commonjs/i18n/ru.json +9 -3
  171. package/lib/commonjs/i18n/tr.json +10 -4
  172. package/lib/commonjs/icons/Pin.js +42 -0
  173. package/lib/commonjs/icons/Pin.js.map +1 -0
  174. package/lib/commonjs/icons/PinHeader.js +38 -0
  175. package/lib/commonjs/icons/PinHeader.js.map +1 -0
  176. package/lib/commonjs/icons/Unpin.js +38 -0
  177. package/lib/commonjs/icons/Unpin.js.map +1 -0
  178. package/lib/commonjs/icons/index.js +39 -0
  179. package/lib/commonjs/icons/index.js.map +1 -1
  180. package/lib/commonjs/mock-builders/api/sendMessage.js +4 -1
  181. package/lib/commonjs/mock-builders/api/sendMessage.js.map +1 -1
  182. package/lib/commonjs/mock-builders/generator/channel.js +1 -0
  183. package/lib/commonjs/mock-builders/generator/channel.js.map +1 -1
  184. package/lib/commonjs/mock-builders/mock.js +2 -2
  185. package/lib/commonjs/mock-builders/mock.js.map +1 -1
  186. package/lib/commonjs/native.js +1 -7
  187. package/lib/commonjs/native.js.map +1 -1
  188. package/lib/commonjs/utils/date.js +13 -0
  189. package/lib/commonjs/utils/date.js.map +1 -0
  190. package/lib/commonjs/utils/utils.js +9 -7
  191. package/lib/commonjs/utils/utils.js.map +1 -1
  192. package/lib/commonjs/version.json +1 -1
  193. package/lib/module/components/Attachment/Card.js +18 -15
  194. package/lib/module/components/Attachment/Card.js.map +1 -1
  195. package/lib/module/components/Attachment/Gallery.js +8 -15
  196. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  197. package/lib/module/components/Attachment/Giphy.js +3 -3
  198. package/lib/module/components/Attachment/Giphy.js.map +1 -1
  199. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +21 -45
  200. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  201. package/lib/module/components/AutoCompleteInput/{CommandsItem.js → AutoCompleteSuggestionCommandIcon.js} +21 -94
  202. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js.map +1 -0
  203. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +145 -0
  204. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -0
  205. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js +248 -0
  206. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionItem.js.map +1 -0
  207. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +223 -0
  208. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -0
  209. package/lib/module/components/Avatar/GroupAvatar.js +3 -9
  210. package/lib/module/components/Avatar/GroupAvatar.js.map +1 -1
  211. package/lib/module/components/Channel/Channel.js +293 -208
  212. package/lib/module/components/Channel/Channel.js.map +1 -1
  213. package/lib/module/components/Channel/hooks/useCreateChannelContext.js +5 -5
  214. package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
  215. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -5
  216. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  217. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +9 -31
  218. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  219. package/lib/module/components/Channel/hooks/useCreateOwnCapabilitiesContext.js +35 -0
  220. package/lib/module/components/Channel/hooks/useCreateOwnCapabilitiesContext.js.map +1 -0
  221. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -0
  222. package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
  223. package/lib/module/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js +2 -1
  224. package/lib/module/components/ChannelList/ChannelListHeaderNetworkDownIndicator.js.map +1 -1
  225. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +32 -20
  226. package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
  227. package/lib/module/components/ChannelPreview/ChannelPreviewMessenger.js +8 -7
  228. package/lib/module/components/ChannelPreview/ChannelPreviewMessenger.js.map +1 -1
  229. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js +16 -7
  230. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.js.map +1 -1
  231. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  232. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  233. package/lib/module/components/Chat/hooks/useIsOnline.js +12 -5
  234. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  235. package/lib/module/components/ImageGallery/ImageGallery.js +1 -2
  236. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  237. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +14 -16
  238. package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
  239. package/lib/module/components/Indicators/LoadingErrorIndicator.js.map +1 -1
  240. package/lib/module/components/Message/Message.js +144 -851
  241. package/lib/module/components/Message/Message.js.map +1 -1
  242. package/lib/module/components/Message/MessageSimple/MessageContent.js +39 -38
  243. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  244. package/lib/module/components/Message/MessageSimple/MessageDeleted.js +4 -2
  245. package/lib/module/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
  246. package/lib/module/components/Message/MessageSimple/MessageFooter.js +24 -16
  247. package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
  248. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js +122 -0
  249. package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -0
  250. package/lib/module/components/Message/MessageSimple/MessageReplies.js +5 -1
  251. package/lib/module/components/Message/MessageSimple/MessageReplies.js.map +1 -1
  252. package/lib/module/components/Message/MessageSimple/MessageSimple.js +27 -13
  253. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  254. package/lib/module/components/Message/MessageSimple/MessageStatus.js +19 -20
  255. package/lib/module/components/Message/MessageSimple/MessageStatus.js.map +1 -1
  256. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +7 -3
  257. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  258. package/lib/module/components/Message/MessageSimple/ReactionList.js +52 -80
  259. package/lib/module/components/Message/MessageSimple/ReactionList.js.map +1 -1
  260. package/lib/module/components/Message/MessageSimple/utils/renderText.js +42 -14
  261. package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  262. package/lib/module/components/Message/hooks/useCreateMessageContext.js +1 -5
  263. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  264. package/lib/module/components/Message/hooks/useMessageActionHandlers.js +294 -0
  265. package/lib/module/components/Message/hooks/useMessageActionHandlers.js.map +1 -0
  266. package/lib/module/components/Message/hooks/useMessageActions.js +559 -0
  267. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -0
  268. package/lib/module/components/Message/utils/messageActions.js +17 -15
  269. package/lib/module/components/Message/utils/messageActions.js.map +1 -1
  270. package/lib/module/components/MessageInput/CooldownTimer.js +78 -0
  271. package/lib/module/components/MessageInput/CooldownTimer.js.map +1 -0
  272. package/lib/module/components/MessageInput/FileUploadPreview.js +2 -2
  273. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  274. package/lib/module/components/MessageInput/ImageUploadPreview.js +2 -2
  275. package/lib/module/components/MessageInput/ImageUploadPreview.js.map +1 -1
  276. package/lib/module/components/MessageInput/InputButtons.js +16 -21
  277. package/lib/module/components/MessageInput/InputButtons.js.map +1 -1
  278. package/lib/module/components/MessageInput/MessageInput.js +90 -62
  279. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  280. package/lib/module/components/MessageInput/SendMessageDisallowedIndicator.js +71 -0
  281. package/lib/module/components/MessageInput/SendMessageDisallowedIndicator.js.map +1 -0
  282. package/lib/module/components/MessageInput/ShowThreadMessageInChannelButton.js +1 -0
  283. package/lib/module/components/MessageInput/ShowThreadMessageInChannelButton.js.map +1 -1
  284. package/lib/module/components/MessageInput/hooks/useCooldown.js +63 -0
  285. package/lib/module/components/MessageInput/hooks/useCooldown.js.map +1 -0
  286. package/lib/module/components/MessageInput/hooks/useCountdown.js +57 -0
  287. package/lib/module/components/MessageInput/hooks/useCountdown.js.map +1 -0
  288. package/lib/module/components/MessageList/DateHeader.js +2 -2
  289. package/lib/module/components/MessageList/DateHeader.js.map +1 -1
  290. package/lib/module/components/MessageList/InlineDateSeparator.js +2 -2
  291. package/lib/module/components/MessageList/InlineDateSeparator.js.map +1 -1
  292. package/lib/module/components/MessageList/MessageList.js +75 -42
  293. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  294. package/lib/module/components/MessageList/hooks/useMessageList.js +16 -3
  295. package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
  296. package/lib/module/components/MessageList/utils/getDateSeparators.js +2 -1
  297. package/lib/module/components/MessageList/utils/getDateSeparators.js.map +1 -1
  298. package/lib/module/components/MessageList/utils/getGroupStyles.js +10 -5
  299. package/lib/module/components/MessageList/utils/getGroupStyles.js.map +1 -1
  300. package/lib/{commonjs/components/MessageOverlay/MessageActions.js → module/components/MessageOverlay/MessageActionList.js} +33 -85
  301. package/lib/module/components/MessageOverlay/MessageActionList.js.map +1 -0
  302. package/lib/module/components/MessageOverlay/MessageActionListItem.js +131 -0
  303. package/lib/module/components/MessageOverlay/MessageActionListItem.js.map +1 -0
  304. package/lib/module/components/MessageOverlay/MessageOverlay.js +83 -70
  305. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  306. package/lib/module/components/MessageOverlay/OverlayBackdrop.js +38 -0
  307. package/lib/module/components/MessageOverlay/OverlayBackdrop.js.map +1 -0
  308. package/lib/module/components/MessageOverlay/OverlayReactionList.js +1 -0
  309. package/lib/module/components/MessageOverlay/OverlayReactionList.js.map +1 -1
  310. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js +37 -0
  311. package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +1 -0
  312. package/lib/module/components/Thread/Thread.js +13 -4
  313. package/lib/module/components/Thread/Thread.js.map +1 -1
  314. package/lib/module/components/Thread/components/ThreadFooterComponent.js +9 -1
  315. package/lib/module/components/Thread/components/ThreadFooterComponent.js.map +1 -1
  316. package/lib/module/components/docs/ListProps.md +1 -1
  317. package/lib/module/components/index.js +107 -55
  318. package/lib/module/components/index.js.map +1 -1
  319. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +68 -0
  320. package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -0
  321. package/lib/module/contexts/channelContext/ChannelContext.js +2 -2
  322. package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
  323. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  324. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js +155 -0
  325. package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -0
  326. package/lib/module/contexts/channelsStateContext/useChannelState.js +144 -0
  327. package/lib/module/contexts/channelsStateContext/useChannelState.js.map +1 -0
  328. package/lib/module/contexts/messageContext/MessageContext.js +2 -2
  329. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  330. package/lib/module/contexts/messageInputContext/MessageInputContext.js +112 -78
  331. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  332. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -5
  333. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  334. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  335. package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
  336. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  337. package/lib/module/contexts/overlayContext/OverlayContext.js +1 -1
  338. package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
  339. package/lib/module/contexts/overlayContext/OverlayProvider.js +31 -24
  340. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  341. package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +61 -0
  342. package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -0
  343. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +19 -32
  344. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  345. package/lib/module/contexts/themeContext/utils/theme.js +25 -9
  346. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  347. package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
  348. package/lib/module/contexts/utils/getDisplayName.js.map +1 -1
  349. package/lib/module/emoji-data/compiled.js +0 -315
  350. package/lib/module/emoji-data/compiled.js.map +1 -1
  351. package/lib/module/emoji-data/emojiNames.js +0 -105
  352. package/lib/module/emoji-data/emojiNames.js.map +1 -1
  353. package/lib/module/emoji-data/emojis.js +0 -175
  354. package/lib/module/emoji-data/emojis.js.map +1 -1
  355. package/lib/module/i18n/en.json +9 -3
  356. package/lib/module/i18n/fr.json +9 -3
  357. package/lib/module/i18n/hi.json +9 -3
  358. package/lib/module/i18n/it.json +9 -3
  359. package/lib/module/i18n/ja.json +9 -0
  360. package/lib/module/i18n/ko.json +9 -0
  361. package/lib/module/i18n/nl.json +9 -3
  362. package/lib/module/i18n/ru.json +9 -3
  363. package/lib/module/i18n/tr.json +10 -4
  364. package/lib/module/icons/Pin.js +42 -0
  365. package/lib/module/icons/Pin.js.map +1 -0
  366. package/lib/module/icons/PinHeader.js +38 -0
  367. package/lib/module/icons/PinHeader.js.map +1 -0
  368. package/lib/module/icons/Unpin.js +38 -0
  369. package/lib/module/icons/Unpin.js.map +1 -0
  370. package/lib/module/icons/index.js +39 -0
  371. package/lib/module/icons/index.js.map +1 -1
  372. package/lib/module/mock-builders/api/sendMessage.js +4 -1
  373. package/lib/module/mock-builders/api/sendMessage.js.map +1 -1
  374. package/lib/module/mock-builders/generator/channel.js +1 -0
  375. package/lib/module/mock-builders/generator/channel.js.map +1 -1
  376. package/lib/module/mock-builders/mock.js +2 -2
  377. package/lib/module/mock-builders/mock.js.map +1 -1
  378. package/lib/module/native.js +1 -7
  379. package/lib/module/native.js.map +1 -1
  380. package/lib/module/utils/date.js +13 -0
  381. package/lib/module/utils/date.js.map +1 -0
  382. package/lib/module/utils/utils.js +9 -7
  383. package/lib/module/utils/utils.js.map +1 -1
  384. package/lib/module/version.json +1 -1
  385. package/lib/typescript/components/Attachment/Card.d.ts +2 -0
  386. package/lib/typescript/components/Attachment/Gallery.d.ts +3 -2
  387. package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts +7 -1
  388. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.d.ts +4 -0
  389. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionHeader.d.ts +8 -0
  390. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionItem.d.ts +10 -0
  391. package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts +22 -0
  392. package/lib/typescript/components/Channel/Channel.d.ts +11 -10
  393. package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
  394. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +1 -68
  395. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -126
  396. package/lib/typescript/components/Channel/hooks/useCreateOwnCapabilitiesContext.d.ts +7 -0
  397. package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts +1 -1
  398. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.d.ts +12 -0
  399. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +1 -0
  400. package/lib/typescript/components/Indicators/LoadingErrorIndicator.d.ts +1 -1
  401. package/lib/typescript/components/Message/Message.d.ts +3 -2
  402. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts +1 -1
  403. package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts +8 -0
  404. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts +1 -1
  405. package/lib/typescript/components/Message/MessageSimple/MessageStatus.d.ts +1 -1
  406. package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts +1 -0
  407. package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts +2 -1
  408. package/lib/typescript/components/Message/MessageSimple/utils/renderText.d.ts +1 -0
  409. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  410. package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts +15 -0
  411. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +26 -0
  412. package/lib/typescript/components/Message/utils/messageActions.d.ts +22 -21
  413. package/lib/typescript/components/MessageInput/CooldownTimer.d.ts +10 -0
  414. package/lib/typescript/components/MessageInput/InputButtons.d.ts +1 -1
  415. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  416. package/lib/typescript/components/MessageInput/SendMessageDisallowedIndicator.d.ts +1 -0
  417. package/lib/typescript/components/MessageInput/hooks/useCooldown.d.ts +9 -0
  418. package/lib/typescript/components/MessageInput/hooks/useCountdown.d.ts +8 -0
  419. package/lib/typescript/components/MessageList/MessageList.d.ts +2 -1
  420. package/lib/typescript/components/MessageList/hooks/useMessageList.d.ts +1 -0
  421. package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts +12 -0
  422. package/lib/typescript/components/MessageOverlay/MessageActionListItem.d.ts +20 -0
  423. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts +4 -4
  424. package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts +6 -0
  425. package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts +12 -0
  426. package/lib/typescript/components/index.d.ts +11 -7
  427. package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts +9 -0
  428. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +28 -30
  429. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -1
  430. package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts +41 -0
  431. package/lib/typescript/contexts/channelsStateContext/useChannelState.d.ts +20 -0
  432. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +2 -6
  433. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +15 -6
  434. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  435. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +8 -11
  436. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +15 -106
  437. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +10 -3
  438. package/lib/typescript/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.d.ts +25 -0
  439. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts +15 -14
  440. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +24 -8
  441. package/lib/typescript/contexts/utils/getDisplayName.d.ts +2 -2
  442. package/lib/typescript/i18n/en.json +9 -3
  443. package/lib/typescript/i18n/fr.json +9 -3
  444. package/lib/typescript/i18n/hi.json +9 -3
  445. package/lib/typescript/i18n/it.json +9 -3
  446. package/lib/typescript/i18n/ja.json +9 -0
  447. package/lib/typescript/i18n/ko.json +9 -0
  448. package/lib/typescript/i18n/nl.json +9 -3
  449. package/lib/typescript/i18n/ru.json +9 -3
  450. package/lib/typescript/i18n/tr.json +10 -4
  451. package/lib/typescript/icons/Pin.d.ts +3 -0
  452. package/lib/typescript/icons/PinHeader.d.ts +3 -0
  453. package/lib/typescript/icons/Unpin.d.ts +3 -0
  454. package/lib/typescript/icons/index.d.ts +3 -0
  455. package/lib/typescript/native.d.ts +1 -9
  456. package/lib/typescript/utils/Streami18n.d.ts +9 -6
  457. package/lib/typescript/utils/date.d.ts +2 -0
  458. package/lib/typescript/utils/utils.d.ts +8 -10
  459. package/package.json +5 -3
  460. package/src/components/Attachment/Card.tsx +5 -1
  461. package/src/components/Attachment/Gallery.tsx +5 -10
  462. package/src/components/Attachment/Giphy.tsx +3 -3
  463. package/src/components/Attachment/__tests__/Attachment.test.js +13 -6
  464. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +41 -27
  465. package/src/components/AutoCompleteInput/{CommandsItem.tsx → AutoCompleteSuggestionCommandIcon.tsx} +2 -56
  466. package/src/components/AutoCompleteInput/AutoCompleteSuggestionHeader.tsx +109 -0
  467. package/src/components/AutoCompleteInput/AutoCompleteSuggestionItem.tsx +154 -0
  468. package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +213 -0
  469. package/src/components/AutoCompleteInput/__tests__/AutoCompleteInput.test.js +0 -4
  470. package/src/components/Avatar/GroupAvatar.tsx +0 -19
  471. package/src/components/Avatar/__tests__/Avatar.test.js +0 -28
  472. package/src/components/Channel/Channel.tsx +225 -176
  473. package/src/components/Channel/__tests__/Channel.test.js +25 -20
  474. package/src/components/Channel/__tests__/ownCapabilities.test.js +376 -0
  475. package/src/components/Channel/hooks/useCreateChannelContext.ts +6 -6
  476. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +4 -3
  477. package/src/components/Channel/hooks/useCreateMessagesContext.ts +9 -30
  478. package/src/components/Channel/hooks/useCreateOwnCapabilitiesContext.ts +53 -0
  479. package/src/components/ChannelList/ChannelListFooterLoadingIndicator.tsx +1 -1
  480. package/src/components/ChannelList/ChannelListHeaderNetworkDownIndicator.tsx +4 -1
  481. package/src/components/ChannelList/hooks/usePaginatedChannels.ts +16 -4
  482. package/src/components/ChannelPreview/ChannelPreviewMessenger.tsx +4 -1
  483. package/src/components/ChannelPreview/hooks/useChannelPreviewDisplayAvatar.ts +6 -0
  484. package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +2 -1
  485. package/src/components/Chat/__tests__/Chat.test.js +6 -2
  486. package/src/components/Chat/hooks/useIsOnline.ts +8 -5
  487. package/src/components/ImageGallery/ImageGallery.tsx +3 -2
  488. package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +4 -5
  489. package/src/components/Indicators/LoadingErrorIndicator.tsx +1 -1
  490. package/src/components/Message/Message.tsx +140 -579
  491. package/src/components/Message/MessageSimple/MessageContent.tsx +21 -22
  492. package/src/components/Message/MessageSimple/MessageDeleted.tsx +5 -2
  493. package/src/components/Message/MessageSimple/MessageFooter.tsx +36 -17
  494. package/src/components/Message/MessageSimple/MessagePinnedHeader.tsx +150 -0
  495. package/src/components/Message/MessageSimple/MessageReplies.tsx +5 -0
  496. package/src/components/Message/MessageSimple/MessageSimple.tsx +47 -26
  497. package/src/components/Message/MessageSimple/MessageStatus.tsx +10 -29
  498. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +5 -0
  499. package/src/components/Message/MessageSimple/ReactionList.tsx +64 -77
  500. package/src/components/Message/MessageSimple/__tests__/Message.test.js +0 -1
  501. package/src/components/Message/MessageSimple/__tests__/MessageContent.test.js +32 -22
  502. package/src/components/Message/MessageSimple/__tests__/MessagePinnedHeader.test.js +53 -0
  503. package/src/components/Message/MessageSimple/__tests__/__snapshots__/MessagePinnedHeader.test.js.snap +80 -0
  504. package/src/components/Message/MessageSimple/utils/renderText.tsx +25 -3
  505. package/src/components/Message/hooks/useCreateMessageContext.ts +0 -5
  506. package/src/components/Message/hooks/useMessageActionHandlers.ts +163 -0
  507. package/src/components/Message/hooks/useMessageActions.tsx +381 -0
  508. package/src/components/Message/utils/messageActions.ts +64 -38
  509. package/src/components/MessageInput/CooldownTimer.tsx +66 -0
  510. package/src/components/MessageInput/FileUploadPreview.tsx +2 -2
  511. package/src/components/MessageInput/ImageUploadPreview.tsx +2 -2
  512. package/src/components/MessageInput/InputButtons.tsx +4 -10
  513. package/src/components/MessageInput/MessageInput.tsx +59 -31
  514. package/src/components/MessageInput/SendMessageDisallowedIndicator.tsx +47 -0
  515. package/src/components/MessageInput/ShowThreadMessageInChannelButton.tsx +1 -1
  516. package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +29 -29
  517. package/src/components/MessageInput/__tests__/ImageUploadPreview.test.js +12 -12
  518. package/src/components/MessageInput/__tests__/MessageInput.test.js +8 -16
  519. package/src/components/MessageInput/__tests__/__snapshots__/FileUploadPreview.test.js.snap +6061 -2789
  520. package/src/components/MessageInput/__tests__/__snapshots__/ImageUploadPreview.test.js.snap +1912 -1572
  521. package/src/components/MessageInput/__tests__/__snapshots__/MessageInput.test.js.snap +1167 -282
  522. package/src/components/MessageInput/__tests__/__snapshots__/UploadProgressIndicator.test.js.snap +4 -4
  523. package/src/components/MessageInput/hooks/useCooldown.ts +60 -0
  524. package/src/components/MessageInput/hooks/useCountdown.ts +47 -0
  525. package/src/components/MessageList/DateHeader.tsx +2 -2
  526. package/src/components/MessageList/InlineDateSeparator.tsx +2 -2
  527. package/src/components/MessageList/MessageList.tsx +60 -36
  528. package/src/components/MessageList/__tests__/MessageList.test.js +231 -106
  529. package/src/components/MessageList/hooks/useMessageList.ts +14 -2
  530. package/src/components/MessageList/utils/getDateSeparators.ts +4 -3
  531. package/src/components/MessageList/utils/getGroupStyles.ts +13 -7
  532. package/src/components/MessageOverlay/{MessageActions.tsx → MessageActionList.tsx} +57 -89
  533. package/src/components/MessageOverlay/MessageActionListItem.tsx +111 -0
  534. package/src/components/MessageOverlay/MessageOverlay.tsx +242 -205
  535. package/src/components/MessageOverlay/OverlayBackdrop.tsx +17 -0
  536. package/src/components/MessageOverlay/OverlayReactionList.tsx +1 -1
  537. package/src/components/MessageOverlay/hooks/useMessageActionAnimation.tsx +43 -0
  538. package/src/components/Thread/Thread.tsx +8 -0
  539. package/src/components/Thread/__tests__/Thread.test.js +28 -101
  540. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +1085 -1018
  541. package/src/components/Thread/components/ThreadFooterComponent.tsx +13 -1
  542. package/src/components/docs/ListProps.md +1 -1
  543. package/src/components/index.ts +11 -7
  544. package/src/contexts/activeChannelsRefContext/ActiveChannelsRefContext.tsx +33 -0
  545. package/src/contexts/channelContext/ChannelContext.tsx +27 -30
  546. package/src/contexts/channelsContext/ChannelsContext.tsx +1 -1
  547. package/src/contexts/channelsStateContext/ChannelsStateContext.tsx +287 -0
  548. package/src/contexts/channelsStateContext/useChannelState.ts +206 -0
  549. package/src/contexts/messageContext/MessageContext.tsx +1 -8
  550. package/src/contexts/messageInputContext/MessageInputContext.tsx +56 -18
  551. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +7 -3
  552. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +12 -12
  553. package/src/contexts/messagesContext/MessagesContext.tsx +28 -129
  554. package/src/contexts/overlayContext/OverlayContext.tsx +10 -4
  555. package/src/contexts/overlayContext/OverlayProvider.tsx +21 -20
  556. package/src/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.tsx +38 -0
  557. package/src/contexts/suggestionsContext/SuggestionsContext.tsx +27 -48
  558. package/src/contexts/suggestionsContext/__tests__/Suggestions.test.js +0 -1
  559. package/src/contexts/themeContext/utils/theme.ts +48 -16
  560. package/src/contexts/translationContext/TranslationContext.tsx +1 -1
  561. package/src/contexts/utils/getDisplayName.ts +2 -1
  562. package/src/emoji-data/compiled.ts +1830 -9609
  563. package/src/emoji-data/emojiNames.ts +0 -140
  564. package/src/emoji-data/emojis.ts +0 -210
  565. package/src/i18n/en.json +9 -3
  566. package/src/i18n/fr.json +9 -3
  567. package/src/i18n/hi.json +9 -3
  568. package/src/i18n/it.json +9 -3
  569. package/src/i18n/ja.json +9 -0
  570. package/src/i18n/ko.json +9 -0
  571. package/src/i18n/nl.json +9 -3
  572. package/src/i18n/ru.json +9 -3
  573. package/src/i18n/tr.json +10 -4
  574. package/src/icons/Pin.tsx +17 -0
  575. package/src/icons/PinHeader.tsx +12 -0
  576. package/src/icons/Unpin.tsx +12 -0
  577. package/src/icons/index.ts +3 -0
  578. package/src/mock-builders/api/sendMessage.js +3 -2
  579. package/src/mock-builders/generator/channel.js +18 -0
  580. package/src/mock-builders/mock.js +2 -2
  581. package/src/native.ts +1 -13
  582. package/src/utils/date.ts +4 -0
  583. package/src/utils/utils.ts +14 -12
  584. package/src/version.json +1 -1
  585. package/lib/commonjs/components/AutoCompleteInput/CommandsHeader.js +0 -78
  586. package/lib/commonjs/components/AutoCompleteInput/CommandsHeader.js.map +0 -1
  587. package/lib/commonjs/components/AutoCompleteInput/CommandsItem.js.map +0 -1
  588. package/lib/commonjs/components/AutoCompleteInput/EmojisHeader.js +0 -81
  589. package/lib/commonjs/components/AutoCompleteInput/EmojisHeader.js.map +0 -1
  590. package/lib/commonjs/components/AutoCompleteInput/EmojisItem.js +0 -75
  591. package/lib/commonjs/components/AutoCompleteInput/EmojisItem.js.map +0 -1
  592. package/lib/commonjs/components/AutoCompleteInput/MentionsItem.js +0 -125
  593. package/lib/commonjs/components/AutoCompleteInput/MentionsItem.js.map +0 -1
  594. package/lib/commonjs/components/AutoCompleteInput/SuggestionsList.js +0 -199
  595. package/lib/commonjs/components/AutoCompleteInput/SuggestionsList.js.map +0 -1
  596. package/lib/commonjs/components/MessageOverlay/MessageActions.js.map +0 -1
  597. package/lib/module/components/AutoCompleteInput/CommandsHeader.js +0 -78
  598. package/lib/module/components/AutoCompleteInput/CommandsHeader.js.map +0 -1
  599. package/lib/module/components/AutoCompleteInput/CommandsItem.js.map +0 -1
  600. package/lib/module/components/AutoCompleteInput/EmojisHeader.js +0 -81
  601. package/lib/module/components/AutoCompleteInput/EmojisHeader.js.map +0 -1
  602. package/lib/module/components/AutoCompleteInput/EmojisItem.js +0 -75
  603. package/lib/module/components/AutoCompleteInput/EmojisItem.js.map +0 -1
  604. package/lib/module/components/AutoCompleteInput/MentionsItem.js +0 -125
  605. package/lib/module/components/AutoCompleteInput/MentionsItem.js.map +0 -1
  606. package/lib/module/components/AutoCompleteInput/SuggestionsList.js +0 -199
  607. package/lib/module/components/AutoCompleteInput/SuggestionsList.js.map +0 -1
  608. package/lib/module/components/MessageOverlay/MessageActions.js.map +0 -1
  609. package/lib/typescript/components/AutoCompleteInput/CommandsHeader.d.ts +0 -2
  610. package/lib/typescript/components/AutoCompleteInput/CommandsItem.d.ts +0 -15
  611. package/lib/typescript/components/AutoCompleteInput/EmojisHeader.d.ts +0 -5
  612. package/lib/typescript/components/AutoCompleteInput/EmojisItem.d.ts +0 -12
  613. package/lib/typescript/components/AutoCompleteInput/MentionsItem.d.ts +0 -16
  614. package/lib/typescript/components/AutoCompleteInput/SuggestionsList.d.ts +0 -13
  615. package/lib/typescript/components/MessageOverlay/MessageActions.d.ts +0 -11
  616. package/src/components/AutoCompleteInput/CommandsHeader.tsx +0 -43
  617. package/src/components/AutoCompleteInput/EmojisHeader.tsx +0 -45
  618. package/src/components/AutoCompleteInput/EmojisItem.tsx +0 -52
  619. package/src/components/AutoCompleteInput/MentionsItem.tsx +0 -74
  620. package/src/components/AutoCompleteInput/SuggestionsList.tsx +0 -138
  621. package/src/components/AutoCompleteInput/__tests__/CommandsItem.test.js +0 -26
  622. package/src/components/AutoCompleteInput/__tests__/MentionsItem.test.js +0 -62
  623. package/src/components/MessageList/__tests__/__snapshots__/MessageList.test.js.snap +0 -936
@@ -1 +1 @@
1
- {"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","visible","theme","white_snow","colors","backgroundColor","imageGallery","overlay","setBlurType","setOverlay","translucentStatusBar","image","images","setImage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","showScreen","fadeScreen","show","value","duration","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","hasHitBottomScale","hasHitTopScale","doubleTapRef","panRef","pinchRef","singleTapRef","offsetX","offsetY","translateX","translateY","offsetScale","scale","translationX","originX","originY","focalX","focalY","oldFocalX","oldFocalY","focalOffsetX","focalOffsetY","adjustedFocalX","adjustedFocalY","tapX","tapY","numberOfPinchFingers","isSwiping","isPinch","hasPinched","resetTouchValues","UNDETERMINED","resetMovementValues","resetVisibleValues","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","title_link","og_scrape_url","image_url","thumb_url","attachmentPhotos","map","attachmentImage","created_at","id","messageId","uri","user","user_id","photoLength","length","updatePosition","newIndex","findIndex","photo","url","uriForCurrentImage","Image","getSize","width","imageHeight","Math","floor","onPan","onActive","evt","numberOfPointers","TRUE","FALSE","translationY","maxXYRatio","abs","localEvtScale","onFinish","finalXPosition","velocityX","finalYPosition","velocityY","clamp","deceleration","velocity","undefined","onStart","onPinch","triggerHaptic","onSingleTap","onDoubleTap","absoluteX","absoluteY","translateYTopBottom","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","snapTo","StyleSheet","absoluteFillObject","absoluteFill","styles","animatedContainer","i","marginRight","header","footer","gridHandle","grid","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;AAUA;;AACA;;AAQA;;AAcA;;AACA;;AAIA;;AAIA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;AAcA,IAAMA,SAAS,GAAGC,sBAASC,EAAT,KAAgB,SAAlC;;AACA,IAAMC,gBAAgB,GAAGC,wBAAWC,GAAX,CAAe,QAAf,EAAyBC,MAAlD;;AACA,IAAMC,oBAAoB,GAAG,eAAG,GAAH,CAA7B;AACA,IAAMC,WAAW,GAAG,eAAG,GAAH,CAApB;AACA,IAAMC,eAAe,GAAG,eAAG,EAAH,CAAxB;AACA,IAAMC,MAAM,GAAG,EAAf;IAEYC,U;;;WAAAA,U;AAAAA,EAAAA,U,CAAAA,U;AAAAA,EAAAA,U,CAAAA,U;GAAAA,U,0BAAAA,U;;IAKAC,S;;;WAAAA,S;AAAAA,EAAAA,S,CAAAA,S;AAAAA,EAAAA,S,CAAAA,S;AAAAA,EAAAA,S,CAAAA,S;GAAAA,S,yBAAAA,S;;AAyDL,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAS1BC,KAT0B,EAUvB;AAAA;;AACH,MACEC,4BADF,GAOID,KAPJ,CACEC,4BADF;AAAA,MAEEC,4BAFF,GAOIF,KAPJ,CAEEE,4BAFF;AAAA,MAGEC,0BAHF,GAOIH,KAPJ,CAGEG,0BAHF;AAAA,MAIEC,+BAJF,GAOIJ,KAPJ,CAIEI,+BAJF;AAAA,MAKEC,cALF,GAOIL,KAPJ,CAKEK,cALF;AAAA,MAMEC,OANF,GAOIN,KAPJ,CAMEM,OANF;;AAQA,kBAKI,6BALJ;AAAA,kCACEC,KADF;AAAA,MAEcC,UAFd,mBAEIC,MAFJ,CAEcD,UAFd;AAAA,MAGoBE,eAHpB,mBAGIC,YAHJ,CAGoBD,eAHpB;;AAMA,2BAAmE,wCAAnE;AAAA,MAAQE,OAAR,sBAAQA,OAAR;AAAA,MAAiBC,WAAjB,sBAAiBA,WAAjB;AAAA,MAA8BC,UAA9B,sBAA8BA,UAA9B;AAAA,MAA0CC,oBAA1C,sBAA0CA,oBAA1C;;AACA,8BAAoC,kDAApC;AAAA,MAAQC,KAAR,yBAAQA,KAAR;AAAA,MAAeC,MAAf,yBAAeA,MAAf;AAAA,MAAuBC,QAAvB,yBAAuBA,QAAvB;;AAKA,MAAMC,eAAe,4BAAGC,uBAAUC,aAAb,oCAA8B,CAAnD;AACA,MAAMC,eAAe,GAAGjC,gBAAgB,GAAGI,oBAAnB,GAA0C0B,eAAlE;AACA,MAAMI,6BAA6B,GAAGR,oBAAoB,GACtDO,eAAe,KAAKH,eAApB,IAAuCG,eAAe,GAAG,CAAzD,GACE,CADF,GAEEH,eAHoD,GAItDG,eAAe,KAAKH,eAApB,IAAuCG,eAAe,GAAG,CAAzD,GACA,CAACH,eADD,GAEA,CANJ;AAOA,MAAMK,YAAY,GAAGtC,SAAS,GAC1BI,wBAAWC,GAAX,CAAe,QAAf,EAAyBC,MAAzB,GAAkC+B,6BADR,GAE1B,eAAG,GAAH,CAFJ;AAGA,MAAME,gBAAgB,GAAGD,YAAY,GAAG,CAAxC;AACA,MAAME,mBAAmB,GAAGF,YAAY,GAAG,CAA3C;;AACA,MAAMG,UAAU,GAAGC,kBAAMC,OAAN,CAAc;AAAA,WAAM,CAAC,CAAD,EAAKL,YAAY,GAAG,CAAhB,GAAqB,EAAzB,CAAN;AAAA,GAAd,EAAkD,EAAlD,CAAnB;;AAKA,MAAMM,cAAc,GAAG,mBAAoB,IAApB,CAAvB;;AAKA,kBAA8D,qBAAS,CAAT,CAA9D;AAAA;AAAA,MAAOC,uBAAP;AAAA,MAAgCC,0BAAhC;;AACA,MAAMC,wBAAwB,GAAG,2CAAe,CAAf,CAAjC;AAMA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;;AACA,MAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,IAAD,EAAmB;AACpC;;AACAF,IAAAA,UAAU,CAACG,KAAX,GAAmB,uCAAWD,IAAI,GAAG,CAAH,GAAO,CAAtB,EAAyB;AAC1CE,MAAAA,QAAQ,EAAE,GADgC;AAE1CC,MAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFkC,KAAzB,CAAnB;AAID,GAND;;AAWA,wBAAU,YAAM;AACd,QAAIpC,OAAJ,EAAa;AACXqC,4BAASC,OAAT;AACD;;AACDT,IAAAA,UAAU,CAAC7B,OAAD,CAAV;AACD,GALD,EAKG,CAACA,OAAD,CALH;;AAUA,mBAAoD,qBAAiBkB,YAAjB,CAApD;AAAA;AAAA,MAAOqB,kBAAP;AAAA,MAA2BC,qBAA3B;;AAMA,mBAA0C,qBAAS,CAAT,CAA1C;AAAA;AAAA,MAAOC,aAAP;AAAA,MAAsBC,gBAAtB;;AACA,MAAMC,KAAK,GAAG,2CAAe,CAAf,CAAd;AAKA,MAAMC,mBAAmB,GAAG,2CAAe,CAAf,CAA5B;AAKA,MAAMC,iBAAiB,GAAG,2CAAe,CAAf,CAA1B;AACA,MAAMC,cAAc,GAAG,2CAAe,CAAf,CAAvB;AAKA,MAAMC,YAAY,GAAG,mBAA0B,IAA1B,CAArB;AACA,MAAMC,MAAM,GAAG,mBAA0B,IAA1B,CAAf;AACA,MAAMC,QAAQ,GAAG,mBAA4B,IAA5B,CAAjB;AACA,MAAMC,YAAY,GAAG,mBAA0B,IAA1B,CAArB;AAKA,MAAMC,OAAO,GAAG,2CAAe,CAAf,CAAhB;AACA,MAAMC,OAAO,GAAG,2CAAe,CAAf,CAAhB;AACA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;AACA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;AACA,MAAMC,WAAW,GAAG,2CAAe,CAAf,CAApB;AACA,MAAMC,KAAK,GAAG,2CAAe,CAAf,CAAd;AACA,MAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AAKA,MAAMC,OAAO,GAAG,2CAAe,CAAf,CAAhB;AACA,MAAMC,OAAO,GAAG,2CAAe,CAAf,CAAhB;AACA,MAAMC,MAAM,GAAG,2CAAe,CAAf,CAAf;AACA,MAAMC,MAAM,GAAG,2CAAe,CAAf,CAAf;AACA,MAAMC,SAAS,GAAG,2CAAe,CAAf,CAAlB;AACA,MAAMC,SAAS,GAAG,2CAAe,CAAf,CAAlB;AACA,MAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AACA,MAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AACA,MAAMC,cAAc,GAAG,2CAAe,CAAf,CAAvB;AACA,MAAMC,cAAc,GAAG,2CAAe,CAAf,CAAvB;AACA,MAAMC,IAAI,GAAG,2CAAe,CAAf,CAAb;AACA,MAAMC,IAAI,GAAG,2CAAe,CAAf,CAAb;AAKA,MAAMC,oBAAoB,GAAG,2CAAe,CAAf,CAA7B;AACA,MAAMC,SAAS,GAAG,2CAAe,CAAf,CAAlB;AACA,MAAMC,OAAO,GAAG,2CAAe,KAAf,CAAhB;AACA,MAAMC,UAAU,GAAG,2CAAe,CAAf,CAAnB;;AAKA,MAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,GAAM;AAC7B;;AACAd,IAAAA,MAAM,CAAC7B,KAAP,GAAe,CAAf;AACA8B,IAAAA,MAAM,CAAC9B,KAAP,GAAe,CAAf;AACA+B,IAAAA,SAAS,CAAC/B,KAAV,GAAkB,CAAlB;AACAgC,IAAAA,SAAS,CAAChC,KAAV,GAAkB,CAAlB;AACA2B,IAAAA,OAAO,CAAC3B,KAAR,GAAgB,CAAhB;AACA4B,IAAAA,OAAO,CAAC5B,KAAR,GAAgB,CAAhB;AACAiC,IAAAA,YAAY,CAACjC,KAAb,GAAqB,CAArB;AACAkC,IAAAA,YAAY,CAAClC,KAAb,GAAqB,CAArB;AACAuC,IAAAA,oBAAoB,CAACvC,KAArB,GAA6B,CAA7B;AACAyC,IAAAA,OAAO,CAACzC,KAAR,GAAgB,KAAhB;AACAwC,IAAAA,SAAS,CAACxC,KAAV,GAAkBvC,SAAS,CAACmF,YAA5B;AACD,GAbD;;AAkBA,MAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,GAAM;AAChC;;AACAvB,IAAAA,UAAU,CAACtB,KAAX,GAAmB,CAAnB;AACAuB,IAAAA,UAAU,CAACvB,KAAX,GAAmB,CAAnB;AACAyB,IAAAA,KAAK,CAACzB,KAAN,GAAc,CAAd;AACAwB,IAAAA,WAAW,CAACxB,KAAZ,GAAoB,CAApB;AACD,GAND;;AAWA,MAAM8C,kBAAkB,GAAG,SAArBA,kBAAqB,GAAM;AAC/B;;AACAH,IAAAA,gBAAgB;AAChBE,IAAAA,mBAAmB;AACnBhC,IAAAA,mBAAmB,CAACb,KAApB,GAA4B,CAA5B;AACAoB,IAAAA,OAAO,CAACpB,KAAR,GAAgB,CAAhB;AACAqB,IAAAA,OAAO,CAACrB,KAAR,GAAgB,CAAhB;AACAmC,IAAAA,cAAc,CAACnC,KAAf,GAAuB,CAAvB;AACAoC,IAAAA,cAAc,CAACpC,KAAf,GAAuB,CAAvB;AACAqC,IAAAA,IAAI,CAACrC,KAAL,GAAa,CAAb;AACAsC,IAAAA,IAAI,CAACtC,KAAL,GAAa,CAAb;AACD,GAXD;;AAaA,wBAAU,YAAM;AACd,QAAI,CAAC/B,OAAL,EAAc;AACZ6E,MAAAA,kBAAkB;AACnB;AACF,GAJD,EAIG,CAAC7E,OAAD,CAJH;AAUA,MAAM8E,MAAM,GAAGnE,MAAM,CAACoE,MAAP,CAAc,UAACC,GAAD,EAAmBC,GAAnB,EAA2B;AAAA;;AACtD,QAAMC,gBAAgB,GACpB,qBAAAD,GAAG,CAACE,WAAJ,sCAAiBC,MAAjB,CACE,UAACC,UAAD;AAAA,aACEA,UAAU,CAACC,IAAX,KAAoB,OAApB,IACA,CAACD,UAAU,CAACE,UADZ,IAEA,CAACF,UAAU,CAACG,aAFZ,KAGCH,UAAU,CAACI,SAAX,IAAwBJ,UAAU,CAACK,SAHpC,CADF;AAAA,KADF,MAMK,EAPP;AASA,QAAMC,gBAAgB,GAAGT,gBAAgB,CAACU,GAAjB,CAAqB,UAACC,eAAD;AAAA,aAAsB;AAClEC,QAAAA,UAAU,EAAEb,GAAG,CAACa,UADkD;AAElEC,QAAAA,EAAE,eAAad,GAAG,CAACc,EAAjB,UAAuBF,eAAe,CAACJ,SAAhB,IAA6BI,eAAe,CAACH,SAApE,CAFgE;AAGlEM,QAAAA,SAAS,EAAEf,GAAG,CAACc,EAHmD;AAIlEE,QAAAA,GAAG,EAAEJ,eAAe,CAACJ,SAAhB,IAA6BI,eAAe,CAACH,SAA7C,IAA0D,EAJG;AAKlEQ,QAAAA,IAAI,EAAEjB,GAAG,CAACiB,IALwD;AAMlEC,QAAAA,OAAO,EAAElB,GAAG,CAACkB;AANqD,OAAtB;AAAA,KAArB,CAAzB;AASA,yDAAWnB,GAAX,uCAAmBW,gBAAnB;AACD,GApBc,EAoBZ,EApBY,CAAf;AA4BA,MAAMS,WAAW,GAAGtB,MAAM,CAACuB,MAA3B;AAKA,wBAAU,YAAM;AACd,QAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,QAAD,EAAsB;AAC3C;;AAEA,UAAIA,QAAQ,GAAG,CAAC,CAAhB,EAAmB;AACjB5D,QAAAA,KAAK,CAACZ,KAAN,GAAcwE,QAAd;AACA9C,QAAAA,YAAY,CAAC1B,KAAb,GAAqB,EAAE3C,WAAW,GAAGE,MAAhB,IAA0BiH,QAA/C;AACA,4CAAQ7D,gBAAR,EAA0B6D,QAA1B;AACD;AACF,KARD;;AAUA,QAAMA,QAAQ,GAAGzB,MAAM,CAAC0B,SAAP,CACf,UAACC,KAAD;AAAA,aAAWA,KAAK,CAACT,SAAN,MAAoBtF,KAApB,oBAAoBA,KAAK,CAAEsF,SAA3B,KAAwCS,KAAK,CAACR,GAAN,MAAcvF,KAAd,oBAAcA,KAAK,CAAEgG,GAArB,CAAnD;AAAA,KADe,CAAjB;AAIA,wCAAQJ,cAAR,EAAwBC,QAAxB;AACD,GAhBD,EAgBG,CAAC7F,KAAD,EAAQ0F,WAAR,CAhBH;AAwBA,MAAMO,kBAAkB,4BAAG7B,MAAM,CAACrC,aAAD,CAAT,qBAAG,sBAAuBwD,GAAlD;AACA,wBAAU,YAAM;AAAA;;AACdzD,IAAAA,qBAAqB,CAACtB,YAAD,CAArB;;AACA,+BAAI4D,MAAM,CAACnC,KAAK,CAACZ,KAAP,CAAV,aAAI,oBAAqBkE,GAAzB,EAA8B;AAC5BW,yBAAMC,OAAN,CAAc/B,MAAM,CAACnC,KAAK,CAACZ,KAAP,CAAN,CAAoBkE,GAAlC,EAAuC,UAACa,KAAD,EAAQ5H,MAAR,EAAmB;AACxD,YAAM6H,WAAW,GAAGC,IAAI,CAACC,KAAL,CAAW/H,MAAM,IAAIE,WAAW,GAAG0H,KAAlB,CAAjB,CAApB;AACAtE,QAAAA,qBAAqB,CAACuE,WAAW,GAAG7F,YAAd,GAA6BA,YAA7B,GAA4C6F,WAA7C,CAArB;AACD,OAHD;AAID;AACF,GARD,EAQG,CAACJ,kBAAD,CARH;AAgBA,MAAMO,KAAK,GAAG,sDACZ;AACEC,IAAAA,QAAQ,EAAE,kBAACC,GAAD,EAAS;AACjB,UAAIA,GAAG,CAACC,gBAAJ,KAAyB,CAAzB,IAA8B,CAAC7C,OAAO,CAACzC,KAA3C,EAAkD;AAMhD,YAAInD,SAAS,IAAI6F,UAAU,CAAC1C,KAAX,KAAqBxC,UAAU,CAAC+H,IAAjD,EAAuD;AACrD7C,UAAAA,UAAU,CAAC1C,KAAX,GAAmBxC,UAAU,CAACgI,KAA9B;AACAhD,UAAAA,SAAS,CAACxC,KAAV,GAAkBvC,SAAS,CAAC+H,KAA5B;AACApE,UAAAA,OAAO,CAACpB,KAAR,GAAgBsB,UAAU,CAACtB,KAAX,GAAmBqF,GAAG,CAAC3D,YAAvC;AACAL,UAAAA,OAAO,CAACrB,KAAR,GAAgBuB,UAAU,CAACvB,KAAX,GAAmBqF,GAAG,CAACI,YAAvC;AACD;;AAQD,YAAIjD,SAAS,CAACxC,KAAV,KAAoBvC,SAAS,CAACmF,YAAlC,EAAgD;AAC9C,cAAM8C,UAAU,GAAG7I,SAAS,GAAG,CAAH,GAAO,IAAnC;;AACA,cACEoI,IAAI,CAACU,GAAL,CAASN,GAAG,CAAC3D,YAAJ,GAAmB2D,GAAG,CAACI,YAAhC,IAAgDC,UAAhD,KACCT,IAAI,CAACU,GAAL,CAAS,CAACrI,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,IAAuCoB,OAAO,CAACpB,KAAxD,IAAiE,CAAjE,IACCiF,IAAI,CAACU,GAAL,CAASrI,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAAf,GAAsCoB,OAAO,CAACpB,KAAvD,IAAgE,CAFlE,CADF,EAIE;AACAwC,YAAAA,SAAS,CAACxC,KAAV,GAAkBvC,SAAS,CAAC8H,IAA5B;AACD;;AACD,cAAIN,IAAI,CAACU,GAAL,CAASN,GAAG,CAACI,YAAb,IAA6B,EAAjC,EAAqC;AACnCjD,YAAAA,SAAS,CAACxC,KAAV,GAAkBvC,SAAS,CAAC+H,KAA5B;AACD;AACF;;AAKD,YAAMI,aAAa,GAAGnE,KAAK,CAACzB,KAAN,GAAcwB,WAAW,CAACxB,KAAhD;AASAsB,QAAAA,UAAU,CAACtB,KAAX,GACEyB,KAAK,CAACzB,KAAN,KAAgBwB,WAAW,CAACxB,KAA5B,GACIoB,OAAO,CAACpB,KAAR,GAAgB4F,aAAhB,GAAgCP,GAAG,CAAC3D,YADxC,GAEIN,OAAO,CAACpB,KAAR,GAAgBqF,GAAG,CAAC3D,YAH1B;AAIAH,QAAAA,UAAU,CAACvB,KAAX,GACEwC,SAAS,CAACxC,KAAV,KAAoBvC,SAAS,CAAC8H,IAA9B,GACI9D,KAAK,CAACzB,KAAN,KAAgBwB,WAAW,CAACxB,KAA5B,GACEqB,OAAO,CAACrB,KAAR,GAAgB4F,aAAhB,GAAgCP,GAAG,CAACI,YADtC,GAEEpE,OAAO,CAACrB,KAAR,GAAgBqF,GAAG,CAACI,YAH1B,GAIIlE,UAAU,CAACvB,KALjB;AAWAyB,QAAAA,KAAK,CAACzB,KAAN,GACEQ,kBAAkB,GAAGgB,WAAW,CAACxB,KAAjC,GAAyCb,YAAzC,IAAyDoC,UAAU,CAACvB,KAAX,GAAmB,CAA5E,GACIwB,WAAW,CAACxB,KAAZ,IAAqB,IAAK,IAAI,CAAL,IAAWuB,UAAU,CAACvB,KAAX,GAAmBb,YAA9B,CAAzB,CADJ,GAEIqB,kBAAkB,GAAGgB,WAAW,CAACxB,KAAjC,GAAyCb,YAAzC,IACAoC,UAAU,CAACvB,KAAX,GAAoBQ,kBAAkB,GAAG,CAAtB,GAA2BgB,WAAW,CAACxB,KAAvC,GAA+CZ,gBADlE,GAEAoC,WAAW,CAACxB,KAAZ,IACC,IACE,IAAI,CAAL,IACG,CAACuB,UAAU,CAACvB,KAAX,IACEQ,kBAAkB,GAAG,CAAtB,GAA2BgB,WAAW,CAACxB,KAAvC,GAA+CZ,gBADhD,CAAD,IAECD,YAHJ,CAFF,CAFA,GAQAsC,KAAK,CAACzB,KAXZ;AAaAhC,QAAAA,cAAc,CAACgC,KAAf,GAAuB4F,aAAvB;AACD;AACF,KA7EH;AA8EEC,IAAAA,QAAQ,EAAE,kBAACR,GAAD,EAAS;AACjB,UAAI,CAAC5C,OAAO,CAACzC,KAAT,IAAkBqF,GAAG,CAACC,gBAAJ,GAAuB,CAA7C,EAAgD;AAM9C,YAAMQ,cAAc,GAAGT,GAAG,CAAC3D,YAAJ,GAAmB2D,GAAG,CAACU,SAAJ,GAAgB,GAA1D;AACA,YAAMC,cAAc,GAAGX,GAAG,CAACI,YAAJ,GAAmBJ,GAAG,CAACY,SAAJ,GAAgB,GAA1D;;AAOA,YACErF,KAAK,CAACZ,KAAN,GAAcqE,WAAW,GAAG,CAA5B,IACAY,IAAI,CAACU,GAAL,CAASrI,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAAf,GAAsCoB,OAAO,CAACpB,KAAvD,IAAgE,CADhE,IAEAsB,UAAU,CAACtB,KAAX,GAAmB,CAFnB,IAGA8F,cAAc,GAAG,CAACxI,eAHlB,IAIAkF,SAAS,CAACxC,KAAV,KAAoBvC,SAAS,CAAC8H,IALhC,EAME;AACA,sDAAgB7D,YAAhB;AACAA,UAAAA,YAAY,CAAC1B,KAAb,GAAqB,uCACnB,EAAE3C,WAAW,GAAGE,MAAhB,KAA2BqD,KAAK,CAACZ,KAAN,GAAc,CAAzC,CADmB,EAEnB;AACEC,YAAAA,QAAQ,EAAE,GADZ;AAEEC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFV,WAFmB,EAMnB,YAAM;AACJwC,YAAAA,mBAAmB;AACnBjC,YAAAA,KAAK,CAACZ,KAAN,GAAcY,KAAK,CAACZ,KAAN,GAAc,CAA5B;AACA,gDAAQW,gBAAR,EAA0BC,KAAK,CAACZ,KAAhC;AACD,WAVkB,CAArB;AAkBD,SA1BD,MA0BO,IACLY,KAAK,CAACZ,KAAN,GAAc,CAAd,IACAiF,IAAI,CAACU,GAAL,CAAS,CAACrI,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,IAAuCoB,OAAO,CAACpB,KAAxD,IAAiE,CADjE,IAEAsB,UAAU,CAACtB,KAAX,GAAmB,CAFnB,IAGA8F,cAAc,GAAGxI,eAHjB,IAIAkF,SAAS,CAACxC,KAAV,KAAoBvC,SAAS,CAAC8H,IALzB,EAML;AACA,sDAAgB7D,YAAhB;AACAA,UAAAA,YAAY,CAAC1B,KAAb,GAAqB,uCACnB,EAAE3C,WAAW,GAAGE,MAAhB,KAA2BqD,KAAK,CAACZ,KAAN,GAAc,CAAzC,CADmB,EAEnB;AACEC,YAAAA,QAAQ,EAAE,GADZ;AAEEC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFV,WAFmB,EAMnB,YAAM;AACJwC,YAAAA,mBAAmB;AACnBjC,YAAAA,KAAK,CAACZ,KAAN,GAAcY,KAAK,CAACZ,KAAN,GAAc,CAA5B;AACA,gDAAQW,gBAAR,EAA0BC,KAAK,CAACZ,KAAhC;AACD,WAVkB,CAArB;AAYD;;AASDsB,QAAAA,UAAU,CAACtB,KAAX,GACEyB,KAAK,CAACzB,KAAN,GAAc,CAAd,GACI,uCAAW,CAAX,CADJ,GAEIsB,UAAU,CAACtB,KAAX,GAAmB1C,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAAlC,GACA,uCAAW1C,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAA1B,EAAgD;AAC9CC,UAAAA,QAAQ,EAAE;AADoC,SAAhD,CADA,GAIAqB,UAAU,CAACtB,KAAX,GAAmB,CAAC1C,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,CAAnB,GACA,uCAAW,CAAC1C,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,CAAX,EAAiD;AAC/CC,UAAAA,QAAQ,EAAE;AADqC,SAAjD,CADA,GAIA,sCAAU;AACRiG,UAAAA,KAAK,EAAE,CACL,CAAC5I,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,CADK,EAEL1C,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAFV,CADC;AAKRmG,UAAAA,YAAY,EAAE,IALN;AAMRC,UAAAA,QAAQ,EAAE,CAACf,GAAG,CAACU;AANP,SAAV,CAXN;AA2BAxE,QAAAA,UAAU,CAACvB,KAAX,GACEQ,kBAAkB,GAAGiB,KAAK,CAACzB,KAA3B,GAAmCb,YAAnC,GACI,uCAAW,CAAX,CADJ,GAEIoC,UAAU,CAACvB,KAAX,GAAoBQ,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCZ,gBAA5D,GACA,uCAAYoB,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCZ,gBAApD,CADA,GAEAmC,UAAU,CAACvB,KAAX,GAAoB,CAACQ,kBAAD,GAAsB,CAAvB,GAA4BiB,KAAK,CAACzB,KAAlC,GAA0CZ,gBAA7D,GACA,uCAAY,CAACoB,kBAAD,GAAsB,CAAvB,GAA4BiB,KAAK,CAACzB,KAAlC,GAA0CZ,gBAArD,CADA,GAEA,sCAAU;AACR8G,UAAAA,KAAK,EAAE,CACJ,CAAC1F,kBAAD,GAAsB,CAAvB,GAA4BiB,KAAK,CAACzB,KAAlC,GAA0CZ,gBADrC,EAEJoB,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCZ,gBAFpC,CADC;AAKR+G,UAAAA,YAAY,EAAE,IALN;AAMRC,UAAAA,QAAQ,EAAEf,GAAG,CAACY;AANN,SAAV,CAPN;AAgBAtD,QAAAA,gBAAgB;AAMhBlB,QAAAA,KAAK,CAACzB,KAAN,GACEyB,KAAK,CAACzB,KAAN,KAAgBwB,WAAW,CAACxB,KAA5B,GAAoC,uCAAWwB,WAAW,CAACxB,KAAvB,CAApC,GAAoEwB,WAAW,CAACxB,KADlF;;AASA,YACEgG,cAAc,GAAG5G,gBAAjB,IACAiC,OAAO,CAACrB,KAAR,GAAgB,CAAhB,IAAsBQ,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCZ,gBAD9D,IAEAoD,SAAS,CAACxC,KAAV,KAAoBvC,SAAS,CAAC8H,IAF9B,IAGAhE,UAAU,CAACvB,KAAX,KAAqB,CAHrB,IAIA,EACEiF,IAAI,CAACU,GAAL,CAASrI,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAAf,GAAsCoB,OAAO,CAACpB,KAAvD,IAAgE,CAAhE,IACAsB,UAAU,CAACtB,KAAX,GAAmB,CADnB,IAEA8F,cAAc,GAAG,CAACxI,eAHpB,CAJA,IASA,EACE2H,IAAI,CAACU,GAAL,CAAS,CAACrI,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,IAAuCoB,OAAO,CAACpB,KAAxD,IAAiE,CAAjE,IACAsB,UAAU,CAACtB,KAAX,GAAmB,CADnB,IAEA8F,cAAc,GAAGxI,eAHnB,CAVF,EAeE;AACA,sDAAgBgE,UAAhB;AACA,sDAAgBC,UAAhB;AACA,sDAAgBE,KAAhB;AACAzD,UAAAA,cAAc,CAACgC,KAAf,GAAuB,uCACrB,CADqB,EAErB;AACEC,YAAAA,QAAQ,EAAE,GADZ;AAEEC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFV,WAFqB,EAMrB,YAAM;AACJR,YAAAA,UAAU,CAACG,KAAX,GAAmB,CAAnB;AACA,gDAAQvB,UAAR,EAAoB,MAApB;AACA,gDAAQD,WAAR,EAAqB6H,SAArB;AACD,WAVoB,CAAvB;AAYA5E,UAAAA,KAAK,CAACzB,KAAN,GAAc,uCAAW,GAAX,EAAgB;AAC5BC,YAAAA,QAAQ,EAAE,GADkB;AAE5BC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFoB,WAAhB,CAAd;AAIAkB,UAAAA,UAAU,CAACvB,KAAX,GACEqF,GAAG,CAACY,SAAJ,GAAgB,IAAhB,GACI,sCAAU;AACRG,YAAAA,QAAQ,EAAEf,GAAG,CAACY;AADN,WAAV,CADJ,GAII,uCAAW7G,gBAAgB,GAAIoB,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAA/D,EAAsE;AACpEC,YAAAA,QAAQ,EAAE,GAD0D;AAEpEC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAF4D,WAAtE,CALN;AASAiB,UAAAA,UAAU,CAACtB,KAAX,GAAmB,sCAAU;AAC3BoG,YAAAA,QAAQ,EAAE,CAACf,GAAG,CAACU;AADY,WAAV,CAAnB;AAGD;AACF;AACF,KA/PH;AAiQEO,IAAAA,OAAO,EAAE,mBAAM;AACb,UAAI,CAAC7D,OAAO,CAACzC,KAAb,EAAoB;AAKlB,oDAAgBsB,UAAhB;AACA,oDAAgBC,UAAhB;AACA,oDAAgBE,KAAhB;AACAL,QAAAA,OAAO,CAACpB,KAAR,GAAgBsB,UAAU,CAACtB,KAA3B;AACAqB,QAAAA,OAAO,CAACrB,KAAR,GAAgBuB,UAAU,CAACvB,KAA3B;AACD;;AAKD0C,MAAAA,UAAU,CAAC1C,KAAX,GAAmBxC,UAAU,CAACgI,KAA9B;AACD;AAlRH,GADY,EAqRZ,CAAChF,kBAAD,EAAqB6D,WAArB,CArRY,CAAd;AA6RA,MAAMkC,OAAO,GAAG,sDACd;AACEnB,IAAAA,QAAQ,EAAE,kBAACC,GAAD,EAAS;AAMjB,UAAI,CAAC5C,OAAO,CAACzC,KAAT,IAAkBnD,SAAtB,EAAiC;AAK/B6F,QAAAA,UAAU,CAAC1C,KAAX,GAAmBxC,UAAU,CAAC+H,IAA9B;AAMA,oDAAgBjE,UAAhB;AACA,oDAAgBC,UAAhB;AACA,oDAAgBE,KAAhB;AAKAe,QAAAA,SAAS,CAACxC,KAAV,GAAkBvC,SAAS,CAACmF,YAA5B;AAKAL,QAAAA,oBAAoB,CAACvC,KAArB,GAA6BqF,GAAG,CAACC,gBAAjC;AACAlE,QAAAA,OAAO,CAACpB,KAAR,GAAgBsB,UAAU,CAACtB,KAA3B;AACAqB,QAAAA,OAAO,CAACrB,KAAR,GAAgBuB,UAAU,CAACvB,KAA3B;AACAmC,QAAAA,cAAc,CAACnC,KAAf,GAAuBqF,GAAG,CAACxD,MAAJ,IAAcvE,eAAe,GAAG8D,OAAO,CAACpB,KAAxC,CAAvB;AACAoC,QAAAA,cAAc,CAACpC,KAAf,GAAuBqF,GAAG,CAACvD,MAAJ,IAAc1C,gBAAgB,GAAGiC,OAAO,CAACrB,KAAzC,CAAvB;AACA2B,QAAAA,OAAO,CAAC3B,KAAR,GAAgBmC,cAAc,CAACnC,KAA/B;AACA4B,QAAAA,OAAO,CAAC5B,KAAR,GAAgBoC,cAAc,CAACpC,KAA/B;AACAwB,QAAAA,WAAW,CAACxB,KAAZ,GAAoByB,KAAK,CAACzB,KAA1B;AACD;;AAMDyC,MAAAA,OAAO,CAACzC,KAAR,GAAgB,IAAhB;AASAyB,MAAAA,KAAK,CAACzB,KAAN,GAAckG,KAAK,CAAC1E,WAAW,CAACxB,KAAZ,GAAoBqF,GAAG,CAAC5D,KAAzB,EAAgC,CAAhC,EAAmC,CAAnC,CAAnB;AACA,UAAMmE,aAAa,GAAGnE,KAAK,CAACzB,KAAN,GAAcwB,WAAW,CAACxB,KAAhD;;AAMA,UAAIyB,KAAK,CAACzB,KAAN,KAAgB,CAAhB,IAAqByB,KAAK,CAACzB,KAAN,KAAgB,CAAzC,EAA4C;AAC1Ce,QAAAA,cAAc,CAACf,KAAf,GAAuB,CAAvB;AACAc,QAAAA,iBAAiB,CAACd,KAAlB,GAA0B,CAA1B;AACD,OAHD,MAGO,IAAIyB,KAAK,CAACzB,KAAN,KAAgB,CAAhB,IAAqBe,cAAc,CAACf,KAAf,KAAyB,CAAlD,EAAqD;AAC1De,QAAAA,cAAc,CAACf,KAAf,GAAuB,CAAvB;AACA,4CAAQwG,qBAAR,EAAuB,aAAvB;AACD,OAHM,MAGA,IAAI/E,KAAK,CAACzB,KAAN,KAAgB,CAAhB,IAAqBc,iBAAiB,CAACd,KAAlB,KAA4B,CAArD,EAAwD;AAC7Dc,QAAAA,iBAAiB,CAACd,KAAlB,GAA0B,CAA1B;AACA,4CAAQwG,qBAAR,EAAuB,aAAvB;AACD;;AAMDrE,MAAAA,cAAc,CAACnC,KAAf,GAAuBqF,GAAG,CAACxD,MAAJ,IAAcvE,eAAe,GAAG8D,OAAO,CAACpB,KAAxC,CAAvB;AACAoC,MAAAA,cAAc,CAACpC,KAAf,GAAuBqF,GAAG,CAACvD,MAAJ,IAAc1C,gBAAgB,GAAGiC,OAAO,CAACrB,KAAzC,CAAvB;;AAaA,UAAIuC,oBAAoB,CAACvC,KAArB,KAA+BqF,GAAG,CAACC,gBAAvC,EAAyD;AACvD/C,QAAAA,oBAAoB,CAACvC,KAArB,GAA6BqF,GAAG,CAACC,gBAAjC;;AACA,YAAID,GAAG,CAACC,gBAAJ,KAAyB,CAA7B,EAAgC;AAC9BrD,UAAAA,YAAY,CAACjC,KAAb,GAAqB+B,SAAS,CAAC/B,KAAV,GAAkBmC,cAAc,CAACnC,KAAtD;AACAkC,UAAAA,YAAY,CAAClC,KAAb,GAAqBgC,SAAS,CAAChC,KAAV,GAAkBoC,cAAc,CAACpC,KAAtD;AACD,SAHD,MAGO,IAAIuC,oBAAoB,CAACvC,KAArB,GAA6B,CAAjC,EAAoC;AACzC2B,UAAAA,OAAO,CAAC3B,KAAR,GACE2B,OAAO,CAAC3B,KAAR,IACC+B,SAAS,CAAC/B,KAAV,GAAkB4F,aAAlB,GAAkCzD,cAAc,CAACnC,KAAf,GAAuB4F,aAD1D,CADF;AAGAhE,UAAAA,OAAO,CAAC5B,KAAR,GACE4B,OAAO,CAAC5B,KAAR,IACCgC,SAAS,CAAChC,KAAV,GAAkB4F,aAAlB,GAAkCxD,cAAc,CAACpC,KAAf,GAAuB4F,aAD1D,CADF;AAGD;AACF;;AAQD,UAAIrD,oBAAoB,CAACvC,KAArB,KAA+B,CAAnC,EAAsC;AACpC+B,QAAAA,SAAS,CAAC/B,KAAV,GAAkBmC,cAAc,CAACnC,KAAf,GAAuBiC,YAAY,CAACjC,KAAtD;AACAgC,QAAAA,SAAS,CAAChC,KAAV,GAAkBoC,cAAc,CAACpC,KAAf,GAAuBkC,YAAY,CAAClC,KAAtD;AACAsB,QAAAA,UAAU,CAACtB,KAAX,GAAmBoB,OAAO,CAACpB,KAAR,GAAgB+B,SAAS,CAAC/B,KAA1B,GAAkC4F,aAAa,GAAGjE,OAAO,CAAC3B,KAA7E;AACAuB,QAAAA,UAAU,CAACvB,KAAX,GAAmBqB,OAAO,CAACrB,KAAR,GAAgBgC,SAAS,CAAChC,KAA1B,GAAkC4F,aAAa,GAAGhE,OAAO,CAAC5B,KAA7E;AAOD,OAXD,MAWO,IAAIuC,oBAAoB,CAACvC,KAArB,GAA6B,CAAjC,EAAoC;AACzC+B,QAAAA,SAAS,CAAC/B,KAAV,GAAkBmC,cAAc,CAACnC,KAAjC;AACAgC,QAAAA,SAAS,CAAChC,KAAV,GAAkBoC,cAAc,CAACpC,KAAjC;AACAsB,QAAAA,UAAU,CAACtB,KAAX,GAAmBoB,OAAO,CAACpB,KAAR,GAAgBmC,cAAc,CAACnC,KAA/B,GAAuC4F,aAAa,GAAGjE,OAAO,CAAC3B,KAAlF;AACAuB,QAAAA,UAAU,CAACvB,KAAX,GAAmBqB,OAAO,CAACrB,KAAR,GAAgBoC,cAAc,CAACpC,KAA/B,GAAuC4F,aAAa,GAAGhE,OAAO,CAAC5B,KAAlF;AACD;AACF,KA/HH;AAgIE6F,IAAAA,QAAQ,EAAE,oBAAM;AACd,UAAIpD,OAAO,CAACzC,KAAZ,EAAmB;AAOjBsB,QAAAA,UAAU,CAACtB,KAAX,GACEyB,KAAK,CAACzB,KAAN,GAAc,CAAd,GACI,uCAAW,CAAX,CADJ,GAEIsB,UAAU,CAACtB,KAAX,GAAmB1C,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAAlC,GACA,uCAAW1C,eAAe,IAAImE,KAAK,CAACzB,KAAN,GAAc,CAAlB,CAA1B,CADA,GAEAsB,UAAU,CAACtB,KAAX,GAAmB,CAAC1C,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,CAAnB,GACA,uCAAW,CAAC1C,eAAD,IAAoBmE,KAAK,CAACzB,KAAN,GAAc,CAAlC,CAAX,CADA,GAEAsB,UAAU,CAACtB,KAPjB;AAeAuB,QAAAA,UAAU,CAACvB,KAAX,GACEQ,kBAAkB,GAAGiB,KAAK,CAACzB,KAA3B,GAAmCb,YAAnC,GACI,uCAAW,CAAX,CADJ,GAEIoC,UAAU,CAACvB,KAAX,GAAoBQ,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCb,YAAY,GAAG,CAA3E,GACA,uCAAYqB,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCb,YAAY,GAAG,CAAnE,CADA,GAEAoC,UAAU,CAACvB,KAAX,GAAoB,CAACQ,kBAAD,GAAsB,CAAvB,GAA4BiB,KAAK,CAACzB,KAAlC,GAA0Cb,YAAY,GAAG,CAA5E,GACA,uCAAY,CAACqB,kBAAD,GAAsB,CAAvB,GAA4BiB,KAAK,CAACzB,KAAlC,GAA0Cb,YAAY,GAAG,CAApE,CADA,GAEAoC,UAAU,CAACvB,KAPjB;AAaAwB,QAAAA,WAAW,CAACxB,KAAZ,GAAoByB,KAAK,CAACzB,KAAN,GAAc,CAAd,GAAkB,CAAlB,GAAsByB,KAAK,CAACzB,KAAhD;AACAyB,QAAAA,KAAK,CAACzB,KAAN,GAAcyB,KAAK,CAACzB,KAAN,GAAc,CAAd,GAAkB,uCAAW,CAAX,CAAlB,GAAkCyB,KAAK,CAACzB,KAAtD;AACA2C,QAAAA,gBAAgB;AACjB;AACF,KAxKH;AAyKE2D,IAAAA,OAAO,EAAE,iBAACjB,GAAD,EAAS;AAMhB,UAAI,CAACxI,SAAL,EAAgB;AAKd,oDAAgByE,UAAhB;AACA,oDAAgBC,UAAhB;AACA,oDAAgBE,KAAhB;AAKAgB,QAAAA,OAAO,CAACzC,KAAR,GAAgB,IAAhB;AAKAwC,QAAAA,SAAS,CAACxC,KAAV,GAAkBvC,SAAS,CAACmF,YAA5B;AAKAL,QAAAA,oBAAoB,CAACvC,KAArB,GAA6BqF,GAAG,CAACC,gBAAjC;AACAlE,QAAAA,OAAO,CAACpB,KAAR,GAAgBsB,UAAU,CAACtB,KAA3B;AACAqB,QAAAA,OAAO,CAACrB,KAAR,GAAgBuB,UAAU,CAACvB,KAA3B;AACAmC,QAAAA,cAAc,CAACnC,KAAf,GAAuBqF,GAAG,CAACxD,MAAJ,IAAcvE,eAAe,GAAG8D,OAAO,CAACpB,KAAxC,CAAvB;AACAoC,QAAAA,cAAc,CAACpC,KAAf,GAAuBqF,GAAG,CAACvD,MAAJ,IAAc1C,gBAAgB,GAAGiC,OAAO,CAACrB,KAAzC,CAAvB;AACA2B,QAAAA,OAAO,CAAC3B,KAAR,GAAgBmC,cAAc,CAACnC,KAA/B;AACA4B,QAAAA,OAAO,CAAC5B,KAAR,GAAgBoC,cAAc,CAACpC,KAA/B;AACAwB,QAAAA,WAAW,CAACxB,KAAZ,GAAoByB,KAAK,CAACzB,KAA1B;AACD;;AAKD0C,MAAAA,UAAU,CAAC1C,KAAX,GAAmBxC,UAAU,CAACgI,KAA9B;AACD;AAnNH,GADc,EAsNd,CAAChF,kBAAD,CAtNc,CAAhB;AA4NA,MAAMiG,WAAW,GAAG,sDAAyD;AAC3ErB,IAAAA,QAAQ,EAAE,oBAAM;AACd,kDAAgBvE,mBAAhB;AACAA,MAAAA,mBAAmB,CAACb,KAApB,GAA4Ba,mBAAmB,CAACb,KAApB,GAA4B,CAA5B,GAAgC,uCAAW,CAAX,CAAhC,GAAgD,uCAAW,CAAX,CAA5E;AACD;AAJ0E,GAAzD,CAApB;AAUA,MAAM0G,WAAW,GAAG,sDAAyD;AAC3EtB,IAAAA,QAAQ,EAAE,kBAACC,GAAD,EAAS;AACjB,UAAIJ,IAAI,CAACU,GAAL,CAAStD,IAAI,CAACrC,KAAL,GAAaqF,GAAG,CAACsB,SAA1B,IAAuC,EAAvC,IAA6C1B,IAAI,CAACU,GAAL,CAASrD,IAAI,CAACtC,KAAL,GAAaqF,GAAG,CAACuB,SAA1B,IAAuC,EAAxF,EAA4F;AAC1F,YAAIpF,WAAW,CAACxB,KAAZ,KAAsB,CAAtB,IAA2BoB,OAAO,CAACpB,KAAR,KAAkB,CAA7C,IAAkDqB,OAAO,CAACrB,KAAR,KAAkB,CAAxE,EAA2E;AACzEwB,UAAAA,WAAW,CAACxB,KAAZ,GAAoB,CAApB;AACAyB,UAAAA,KAAK,CAACzB,KAAN,GAAc,uCAAW,CAAX,EAAc;AAC1BC,YAAAA,QAAQ,EAAE,GADgB;AAE1BC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFkB,WAAd,CAAd;AAIAiB,UAAAA,UAAU,CAACtB,KAAX,GAAmB,uCAAWqF,GAAG,CAACsB,SAAJ,GAAgBrJ,eAA3B,EAA4C;AAC7D2C,YAAAA,QAAQ,EAAE,GADmD;AAE7DC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFqD,WAA5C,CAAnB;;AAIA,cAAIG,kBAAkB,GAAG,CAArB,GAAyBrB,YAA7B,EAA2C;AACzC,gBAAM0H,mBAAmB,GACvBxB,GAAG,CAACuB,SAAJ,GAAgBxH,gBAAhB,GACI,EAAEoB,kBAAkB,GAAG,CAArB,GAAyBrB,YAA3B,IAA2C,CAD/C,GAEI,CAACqB,kBAAkB,GAAG,CAArB,GAAyBrB,YAA1B,IAA0C,CAHhD;AAIAoC,YAAAA,UAAU,CAACvB,KAAX,GAAmB,uCAAW6G,mBAAX,EAAgC;AACjD5G,cAAAA,QAAQ,EAAE,GADuC;AAEjDC,cAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFyC,aAAhC,CAAnB;AAID;AACF,SApBD,MAoBO;AACLmB,UAAAA,WAAW,CAACxB,KAAZ,GAAoB,CAApB;AACAyB,UAAAA,KAAK,CAACzB,KAAN,GAAc,uCAAW,CAAX,EAAc;AAC1BC,YAAAA,QAAQ,EAAE,GADgB;AAE1BC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFkB,WAAd,CAAd;AAIAe,UAAAA,OAAO,CAACpB,KAAR,GAAgB,CAAhB;AACAqB,UAAAA,OAAO,CAACrB,KAAR,GAAgB,CAAhB;AACAsB,UAAAA,UAAU,CAACtB,KAAX,GAAmB,uCAAW,CAAX,EAAc;AAC/BC,YAAAA,QAAQ,EAAE,GADqB;AAE/BC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFuB,WAAd,CAAnB;AAIAkB,UAAAA,UAAU,CAACvB,KAAX,GAAmB,uCAAW,CAAX,EAAc;AAC/BC,YAAAA,QAAQ,EAAE,GADqB;AAE/BC,YAAAA,MAAM,EAAEC,8BAAOC,GAAP,CAAWD,8BAAOE,IAAlB;AAFuB,WAAd,CAAnB;;AAIA,cAAIQ,mBAAmB,CAACb,KAApB,KAA8B,CAAlC,EAAqC;AACnC,wDAAgBa,mBAAhB;AACAA,YAAAA,mBAAmB,CAACb,KAApB,GAA4B,uCAAW,CAAX,CAA5B;AACD;AACF;AACF;AACF,KA7C0E;AA8C3EsG,IAAAA,OAAO,EAAE,iBAACjB,GAAD,EAAS;AAChBhD,MAAAA,IAAI,CAACrC,KAAL,GAAaqF,GAAG,CAACsB,SAAjB;AACArE,MAAAA,IAAI,CAACtC,KAAL,GAAaqF,GAAG,CAACuB,SAAjB;AACD;AAjD0E,GAAzD,CAApB;AAwDA,MAAME,mBAAmB,GAAG,4CAC1B;AAAA,WACEtG,kBAAkB,GAAGiB,KAAK,CAACzB,KAA3B,GAAmCb,YAAnC,IAAmDoC,UAAU,CAACvB,KAAX,GAAmB,CAAtE,GACI,IAAIuB,UAAU,CAACvB,KAAX,GAAmBX,mBAD3B,GAEImB,kBAAkB,GAAGiB,KAAK,CAACzB,KAA3B,GAAmCb,YAAnC,IACAoC,UAAU,CAACvB,KAAX,GAAoBQ,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCZ,gBAD5D,GAEA,IACA,CAACmC,UAAU,CAACvB,KAAX,IAAqBQ,kBAAkB,GAAG,CAAtB,GAA2BiB,KAAK,CAACzB,KAAjC,GAAyCZ,gBAA7D,CAAD,IACEC,mBAJF,GAKA,CARN;AAAA,GAD0B,EAU1B,CAACmB,kBAAD,CAV0B,CAA5B;AAgBA,MAAMuG,UAAU,GAAG,6CACjB;AAAA,WAAO;AACLC,MAAAA,SAAS,EAAE,CACT;AAAEC,QAAAA,MAAM,EAAE,CAAC;AAAX,OADS,EAET;AACE3F,QAAAA,UAAU,EAAEI,YAAY,CAAC1B;AAD3B,OAFS;AADN,KAAP;AAAA,GADiB,EASjB,CAAC/B,OAAD,CATiB,CAAnB;AAeA,MAAMiJ,mBAAmB,GAAG,6CAC1B;AAAA,WAAO;AACL7I,MAAAA,eAAe,EAAEA,eAAe,IAAIF,UAD/B;AAELgJ,MAAAA,OAAO,EAAEL,mBAAmB,CAAC9G;AAFxB,KAAP;AAAA,GAD0B,EAK1B,CAAC8G,mBAAD,CAL0B,CAA5B;AAYA,MAAMM,eAAe,GAAG,6CACtB;AAAA,WAAO;AACLD,MAAAA,OAAO,EAAE,wCAAYtH,UAAU,CAACG,KAAvB,EAA8B,CAAC,CAAD,EAAI,IAAJ,EAAU,CAAV,CAA9B,EAA4C,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,CAA5C,CADJ;AAELgH,MAAAA,SAAS,EAAE,CACT;AACEzF,QAAAA,UAAU,EAAE,wCAAY1B,UAAU,CAACG,KAAvB,EAA8B,CAAC,CAAD,EAAI,CAAJ,CAA9B,EAAsC,CAACb,YAAD,EAAe,CAAf,CAAtC;AADd,OADS;AAFN,KAAP;AAAA,GADsB,EAStB,EATsB,CAAxB;;AAeA,MAAMkI,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B,QAAI5H,cAAc,CAAC6H,OAAnB,EAA4B;AAC1B7H,MAAAA,cAAc,CAAC6H,OAAf,CAAuBC,KAAvB;AACD;AACF,GAJD;;AAKA,MAAMC,YAAY,GAAG,SAAfA,YAAe,GAAM;AACzB,QAAI/H,cAAc,CAAC6H,OAAnB,EAA4B;AAC1B7H,MAAAA,cAAc,CAAC6H,OAAf,CAAuBG,MAAvB,CAA8B,CAA9B;AACD;AACF,GAJD;;AAMA,SACE,gCAAC,iCAAD,CAAU,IAAV;AACE,IAAA,aAAa,EAAExJ,OAAO,GAAG,MAAH,GAAY,MADpC;AAEE,IAAA,KAAK,EAAE,CAACyJ,wBAAWC,kBAAZ,EAAgCP,eAAhC,CAFT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAIE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAE,CAACM,wBAAWC,kBAAZ,EAAgCT,mBAAhC,CAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAJF,EAKE,gCAAC,4CAAD;AACE,IAAA,WAAW,EAAE,CADf;AAEE,IAAA,YAAY,EAAE,CAFhB;AAGE,IAAA,cAAc,EAAET,WAHlB;AAIE,IAAA,GAAG,EAAEtF,YAJP;AAKE,IAAA,OAAO,EAAE,CAACF,MAAD,EAASC,QAAT,EAAmBF,YAAnB,CALX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAE0G,wBAAWC,kBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,4CAAD;AACE,IAAA,SAAS,EAAE,CADb;AAEE,IAAA,SAAS,EAAE,CAFb;AAGE,IAAA,OAAO,EAAE,CAHX;AAIE,IAAA,WAAW,EAAE,CAJf;AAKE,IAAA,YAAY,EAAE,CALhB;AAME,IAAA,cAAc,EAAEjB,WANlB;AAOE,IAAA,GAAG,EAAE1F,YAPP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAE0G,wBAAWC,kBAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,8CAAD;AACE,IAAA,cAAc,EAAEpB,OADlB;AAEE,IAAA,GAAG,EAAErF,QAFP;AAGE,IAAA,oBAAoB,EAAE,CAACD,MAAD,CAHxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAKE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEyG,wBAAWE,YAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,4CAAD;AACE,IAAA,OAAO,EAAErJ,OAAO,KAAK,SADvB;AAEE,IAAA,WAAW,EAAE1B,SAAS,GAAGwJ,SAAH,GAAe,CAFvC;AAGE,IAAA,OAAO,EAAE,EAHX;AAIE,IAAA,cAAc,EAAElB,KAJlB;AAKE,IAAA,GAAG,EAAElE,MALP;AAME,IAAA,oBAAoB,EAAE,CAACC,QAAD,CANxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQE,gCAAC,iCAAD,CAAU,IAAV;AAAe,IAAA,KAAK,EAAEwG,wBAAWE,YAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iCAAD,CAAU,IAAV;AACE,IAAA,KAAK,EAAE,CACLC,MAAM,CAACC,iBADF,EAELf,UAFK,EAGL;AACEC,MAAAA,SAAS,EAAE,CACT;AAAEC,QAAAA,MAAM,EAAE,CAAC;AAAX,OADS,EAET;AACE3F,QAAAA,UAAU,EAAEI,YAAY,CAAC1B;AAD3B,OAFS;AADb,KAHK,CADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAcG+C,MAAM,CAACc,GAAP,CAAW,UAACa,KAAD,EAAQqD,CAAR;AAAA,WACV,gCAAC,0CAAD;AACE,MAAA,KAAK,EAAEA,CADT;AAEE,MAAA,GAAG,EAAKrD,KAAK,CAACR,GAAX,SAAkB6D,CAFvB;AAGE,MAAA,WAAW,EAAEvG,WAHf;AAIE,MAAA,KAAK,EAAEkD,KAJT;AAKE,MAAA,QAAQ,EAAEhE,aAAa,GAAGqH,CAL5B;AAME,MAAA,KAAK,EAAEtG,KANT;AAOE,MAAA,YAAY,EAAEtC,YAPhB;AAQE,MAAA,QAAQ,EAAEuB,aAAa,KAAKqH,CAR9B;AASE,MAAA,YAAY,EAAE9C,IAAI,CAACU,GAAL,CAASjF,aAAa,GAAGqH,CAAzB,IAA8B,CAT9C;AAUE,MAAA,KAAK,EAAE;AACL5K,QAAAA,MAAM,EAAEgC,YAAY,GAAG,CADlB;AAEL6I,QAAAA,WAAW,EAAEzK,MAFR;AAGLwH,QAAAA,KAAK,EAAE1H,WAAW,GAAG;AAHhB,OAVT;AAeE,MAAA,UAAU,EAAEiE,UAfd;AAgBE,MAAA,UAAU,EAAEC,UAhBd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MADU;AAAA,GAAX,CAdH,CADF,CARF,CADF,CALF,CADF,CATF,CADF,CAPF,CALF,EAiFE,gCAAC,sCAAD;AACE,IAAA,OAAO,EAAEuF,mBADX;AAEE,IAAA,KAAK,EAAE/D,MAAM,CAACrC,aAAD,CAFf;AAGE,IAAA,OAAO,EAAEG;AAHX,KAIMjD,4BAJN,oBAIMA,4BAA4B,CAAEqK,MAJpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAjFF,EAuFE,gCAAC,sCAAD;AACE,IAAA,OAAO,EAAEnB,mBADX;AAEE,IAAA,YAAY,EAAEU,YAFhB;AAGE,IAAA,KAAK,EAAEzE,MAAM,CAACrC,aAAD,CAHf;AAIE,IAAA,WAAW,EAAE2D,WAJf;AAKE,IAAA,aAAa,EAAE3D,aALjB;AAME,IAAA,OAAO,EAAEG;AANX,KAOMjD,4BAPN,oBAOMA,4BAA4B,CAAEsK,MAPpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAvFF,EAgGE,gCAAC,wCAAD;AACE,IAAA,wBAAwB,EAAEtI,wBAD5B;AAEE,IAAA,aAAa,EAAEyH,aAFjB;AAGE,IAAA,uBAAuB,EAAE3H,uBAH3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAhGF,EAqGE,gCAAC,uBAAD;AACE,IAAA,aAAa,EAAEE,wBADjB;AAEE,IAAA,eAAe,EAAE5C,gBAFnB;AAGE,IAAA,eAAe,EAAE;AAAA,aACf,gCAAC,gCAAD;AACE,QAAA,aAAa,EAAEqK;AADjB,SAEMzJ,4BAFN,oBAEMA,4BAA4B,CAAEuK,UAFpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SADe;AAAA,KAHnB;AASE,IAAA,YAAY,EAAEtK,4BAAF,WAAEA,4BAAF,GAAkC,EAThD;AAUE,IAAA,KAAK,EAAE,CAVT;AAWE,IAAA,QAAQ,EAAE,kBAAC+C,KAAD;AAAA,aAAmBjB,0BAA0B,CAACiB,KAAD,CAA7C;AAAA,KAXZ;AAYE,IAAA,GAAG,EAAEnB,cAZP;AAaE,IAAA,UAAU,EAAE3B,0BAA0B,IAAIwB,UAb5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAeE,gCAAC,oBAAD;AACE,IAAA,aAAa,EAAE+H,aADjB;AAEE,IAAA,+BAA+B,EAAEtJ,+BAFnC;AAGE,IAAA,MAAM,EAAEgF,MAHV;AAIE,IAAA,kBAAkB,EAAED,kBAJtB;AAKE,IAAA,QAAQ,EAAEjE;AALZ,KAMMjB,4BANN,oBAMMA,4BAA4B,CAAEwK,IANpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAfF,CArGF,CADF;AAgID,CAphCM;;;;AAyhCA,IAAMlC,KAAK,GAAG,SAARA,KAAQ,CAAClG,KAAD,EAAgBqI,UAAhB,EAAoCC,UAApC,EAA2D;AAC9E;;AACA,SAAOrD,IAAI,CAACsD,GAAL,CAAStD,IAAI,CAACuD,GAAL,CAASH,UAAT,EAAqBrI,KAArB,CAAT,EAAsCsI,UAAtC,CAAP;AACD,CAHM;;;;AAKP,IAAMT,MAAM,GAAGH,wBAAWe,MAAX,CAAkB;AAC/BX,EAAAA,iBAAiB,EAAE;AACjBY,IAAAA,UAAU,EAAE,QADK;AAEjBC,IAAAA,aAAa,EAAE;AAFE;AADY,CAAlB,CAAf;;AAgBAjL,YAAY,CAACkL,WAAb,GAA2B,4BAA3B","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport BottomSheet from '@gorhom/bottom-sheet';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n PinchGestureHandler,\n PinchGestureHandlerGestureEvent,\n TapGestureHandler,\n TapGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n Easing,\n interpolate,\n runOnJS,\n runOnUI,\n useAnimatedGestureHandler,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withDecay,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { triggerHaptic } from '../../native';\nimport { vh, vw } from '../../utils/utils';\n\nimport type { UserResponse } from 'stream-chat';\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../types/types';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<Us extends UnknownType = DefaultUserType> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<Us>;\n grid?: ImageGalleryGridImageComponents<Us>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<Us>;\n };\n};\n\ntype Props<Us extends UnknownType = DefaultUserType> = ImageGalleryCustomComponents<Us> & {\n overlayOpacity: Animated.SharedValue<number>;\n visible: boolean;\n imageGalleryGridHandleHeight?: number;\n /**\n * This should be\n */\n imageGalleryGridSnapPoints?: [string | number, string | number];\n numberOfImageGalleryGridColumns?: number;\n};\n\nexport const ImageGallery = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: Props<Us>,\n) => {\n const {\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n visible,\n } = props;\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor },\n },\n } = useTheme();\n const { overlay, setBlurType, setOverlay, translucentStatusBar } = useOverlayContext();\n const { image, images, setImage } = useImageGalleryContext<At, Ch, Co, Ev, Me, Re, Us>();\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(() => [0, (screenHeight * 9) / 10], []);\n\n /**\n * BottomSheet ref\n */\n const bottomSheetRef = useRef<BottomSheet>(null);\n\n /**\n * BottomSheet state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const showScreen = useSharedValue(0);\n const fadeScreen = (show: boolean) => {\n 'worklet';\n showScreen.value = withTiming(show ? 1 : 0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n if (visible) {\n Keyboard.dismiss();\n }\n fadeScreen(visible);\n }, [visible]);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Values to track scale for haptic feedback firing\n */\n const hasHitBottomScale = useSharedValue(1);\n const hasHitTopScale = useSharedValue(0);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const offsetX = useSharedValue(0);\n const offsetY = useSharedValue(0);\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const originX = useSharedValue(0);\n const originY = useSharedValue(0);\n const focalX = useSharedValue(0);\n const focalY = useSharedValue(0);\n const oldFocalX = useSharedValue(0);\n const oldFocalY = useSharedValue(0);\n const focalOffsetX = useSharedValue(0);\n const focalOffsetY = useSharedValue(0);\n const adjustedFocalX = useSharedValue(0);\n const adjustedFocalY = useSharedValue(0);\n const tapX = useSharedValue(0);\n const tapY = useSharedValue(0);\n\n /**\n * Shared values for gesture tracking\n */\n const numberOfPinchFingers = useSharedValue(0);\n const isSwiping = useSharedValue(0);\n const isPinch = useSharedValue(false);\n const hasPinched = useSharedValue(0);\n\n /**\n * Reset gesture values for use on touch release\n */\n const resetTouchValues = () => {\n 'worklet';\n focalX.value = 0;\n focalY.value = 0;\n oldFocalX.value = 0;\n oldFocalY.value = 0;\n originX.value = 0;\n originY.value = 0;\n focalOffsetX.value = 0;\n focalOffsetY.value = 0;\n numberOfPinchFingers.value = 0;\n isPinch.value = false;\n isSwiping.value = IsSwiping.UNDETERMINED;\n };\n\n /**\n * Reset movement values for use on selected photo change\n */\n const resetMovementValues = () => {\n 'worklet';\n translateX.value = 0;\n translateY.value = 0;\n scale.value = 1;\n offsetScale.value = 1;\n };\n\n /**\n * Reset all key values for visible\n */\n const resetVisibleValues = () => {\n 'worklet';\n resetTouchValues();\n resetMovementValues();\n headerFooterVisible.value = 1;\n offsetX.value = 0;\n offsetY.value = 0;\n adjustedFocalX.value = 0;\n adjustedFocalY.value = 0;\n tapX.value = 0;\n tapY.value = 0;\n };\n\n useEffect(() => {\n if (!visible) {\n resetVisibleValues();\n }\n }, [visible]);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n const photos = images.reduce((acc: Photo<Us>[], cur) => {\n const attachmentImages =\n cur.attachments?.filter(\n (attachment) =>\n attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n (attachment.image_url || attachment.thumb_url),\n ) || [];\n\n const attachmentPhotos = attachmentImages.map((attachmentImage) => ({\n created_at: cur.created_at,\n id: `photoId-${cur.id}-${attachmentImage.image_url || attachmentImage.thumb_url}`,\n messageId: cur.id,\n uri: attachmentImage.image_url || attachmentImage.thumb_url || '',\n user: cur.user,\n user_id: cur.user_id,\n }));\n\n return [...acc, ...attachmentPhotos];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) => photo.messageId === image?.messageId && photo.uri === image?.url,\n );\n\n runOnUI(updatePosition)(newIndex);\n }, [image, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = photos[selectedIndex]?.uri;\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n if (photos[index.value]?.uri) {\n Image.getSize(photos[index.value].uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }, [uriForCurrentImage]);\n\n /**\n * We use simultaneousHandlers to allow pan and pinch gesture handlers\n * depending on the gesture. The touch is fully handled by the pinch\n * gesture handler once it has began so all interactions by the pan\n * handler are blocked if isPinch.value is true\n */\n const onPan = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n if (evt.numberOfPointers === 1 && !isPinch.value) {\n /**\n * If Android where a second finger cannot be added back and\n * removing one finger returns to Pan Handler then adjust origin\n * on finger remove and set swiping false\n */\n if (isAndroid && hasPinched.value === HasPinched.TRUE) {\n hasPinched.value = HasPinched.FALSE;\n isSwiping.value = IsSwiping.FALSE;\n offsetX.value = translateX.value + evt.translationX;\n offsetY.value = translateY.value - evt.translationY;\n }\n\n /**\n * isSwiping is used to prevent Y movement if a clear swipe to next\n * or previous is begun when at the edge of a photo. The value is\n * either 0, 1, or 2, via the IsSwiping enum designating undetermined,\n * true, or false and is reset on releasing the touch\n */\n if (isSwiping.value === IsSwiping.UNDETERMINED) {\n const maxXYRatio = isAndroid ? 1 : 0.25;\n if (\n Math.abs(evt.translationX / evt.translationY) > maxXYRatio &&\n (Math.abs(-halfScreenWidth * (scale.value - 1) - offsetX.value) < 3 ||\n Math.abs(halfScreenWidth * (scale.value - 1) - offsetX.value) < 3)\n ) {\n isSwiping.value = IsSwiping.TRUE;\n }\n if (Math.abs(evt.translationY) > 25) {\n isSwiping.value = IsSwiping.FALSE;\n }\n }\n\n /**\n * localEvtScale is used for swipe away\n */\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * If not swiping translate the image in X and Y to the event\n * translation plus offset. If swiping only translate X, if\n * swiping down when at top of screen or centered balance scale\n * using offset to a degree (this needs improvement the calculation\n * is incorrect but likely needs origin use to be 100%)\n */\n translateX.value =\n scale.value !== offsetScale.value\n ? offsetX.value * localEvtScale - evt.translationX\n : offsetX.value - evt.translationX;\n translateY.value =\n isSwiping.value !== IsSwiping.TRUE\n ? scale.value !== offsetScale.value\n ? offsetY.value * localEvtScale + evt.translationY\n : offsetY.value + evt.translationY\n : translateY.value;\n\n /**\n * If swiping down start scaling down the image for swipe\n * away effect\n */\n scale.value =\n currentImageHeight * offsetScale.value < screenHeight && translateY.value > 0\n ? offsetScale.value * (1 - (1 / 3) * (translateY.value / screenHeight))\n : currentImageHeight * offsetScale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * offsetScale.value - halfScreenHeight\n ? offsetScale.value *\n (1 -\n (1 / 3) *\n ((translateY.value -\n ((currentImageHeight / 2) * offsetScale.value - halfScreenHeight)) /\n screenHeight))\n : scale.value;\n\n overlayOpacity.value = localEvtScale;\n }\n },\n onFinish: (evt) => {\n if (!isPinch.value && evt.numberOfPointers < 2) {\n /**\n * To determine if the fling should page to the next image we\n * calculate a final position based on the current position and\n * event velocity\n */\n const finalXPosition = evt.translationX - evt.velocityX * 0.3;\n const finalYPosition = evt.translationY + evt.velocityY * 0.1;\n\n /**\n * If there is a next photo, the image is lined up to the right\n * edge, the swipe is to the left, and the final position is more\n * than half the screen width, move to the next image\n */\n if (\n index.value < photoLength - 1 &&\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value + 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value + 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n\n /**\n * If there is a previous photo, the image is lined up to the left\n * edge, the swipe is to the right, and the final position is more\n * than half the screen width, move to the previous image\n */\n } else if (\n index.value > 0 &&\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value - 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value - 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n }\n\n /**\n * When the pan is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise use decay\n * with a clamping at the edges to give the effect the image is\n * sliding along using velocity and friction\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : withDecay({\n clamp: [\n -halfScreenWidth * (scale.value - 1),\n halfScreenWidth * (scale.value - 1),\n ],\n deceleration: 0.99,\n velocity: -evt.velocityX,\n });\n\n /**\n * When the pan is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise use decay with a clamping at the edges to give the effect\n * the image is sliding along using velocity and friction\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? withTiming((currentImageHeight / 2) * scale.value - halfScreenHeight)\n : translateY.value < (-currentImageHeight / 2) * scale.value + halfScreenHeight\n ? withTiming((-currentImageHeight / 2) * scale.value + halfScreenHeight)\n : withDecay({\n clamp: [\n (-currentImageHeight / 2) * scale.value + halfScreenHeight,\n (currentImageHeight / 2) * scale.value - halfScreenHeight,\n ],\n deceleration: 0.99,\n velocity: evt.velocityY,\n });\n\n resetTouchValues();\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n scale.value =\n scale.value !== offsetScale.value ? withTiming(offsetScale.value) : offsetScale.value;\n\n /**\n * If the photo is centered or at the top of the screen if scaled larger\n * than the screen, and not paging left or right, and the final Y position\n * is greater than half the screen using swipe velocity and position, close\n * the overlay\n */\n if (\n finalYPosition > halfScreenHeight &&\n offsetY.value + 8 >= (currentImageHeight / 2) * scale.value - halfScreenHeight &&\n isSwiping.value !== IsSwiping.TRUE &&\n translateY.value !== 0 &&\n !(\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth\n ) &&\n !(\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth\n )\n ) {\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n overlayOpacity.value = withTiming(\n 0,\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n showScreen.value = 0;\n runOnJS(setOverlay)('none');\n runOnJS(setBlurType)(undefined);\n },\n );\n scale.value = withTiming(0.6, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value =\n evt.velocityY > 1000\n ? withDecay({\n velocity: evt.velocityY,\n })\n : withTiming(halfScreenHeight + (currentImageHeight / 2) * scale.value, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withDecay({\n velocity: -evt.velocityX,\n });\n }\n }\n },\n\n onStart: () => {\n if (!isPinch.value) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight, photoLength],\n );\n\n /**\n * On pinch is run when two or more fingers touch the screen, it then takes over\n * all touch handling even if the number of fingers is reduced to one until the\n * touch is complete\n */\n const onPinch = useAnimatedGestureHandler<PinchGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isPinch.value && isAndroid) {\n /**\n * Set hasPinched to true so when removing one finger the pan active\n * state adjusts the offset\n */\n hasPinched.value = HasPinched.TRUE;\n\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Set pinch to true to stop all pan gesture interactions, we do this\n * again here for Android outside the check that creates type\n */\n isPinch.value = true;\n\n /**\n * The scale is clamped to a minimum of 1 and maximum of 8 for aesthetics.\n * We use the clamped value to determine a local event scale so the focal\n * point does not become out of sync with the actual photo scaling, e.g.\n * evt.scale is 20 but scale is 8, using evt.scale for offset will put the\n * photo and calculations out of sync\n */\n scale.value = clamp(offsetScale.value * evt.scale, 1, 8);\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * When we hit the top or bottom of the scale clamping we run a haptic\n * trigger, we track if it has been run to not spam the trigger\n */\n if (scale.value !== 8 && scale.value !== 1) {\n hasHitTopScale.value = 0;\n hasHitBottomScale.value = 0;\n } else if (scale.value === 8 && hasHitTopScale.value === 0) {\n hasHitTopScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n } else if (scale.value === 1 && hasHitBottomScale.value === 0) {\n hasHitBottomScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n }\n\n /**\n * We calculate the adjusted focal point on the photo using the events\n * focal position on the screen, screen size, and current photo offset\n */\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n\n /**\n * If the number of fingers on the screen changes, the position of the\n * focal point will change and this needs to be accounted for, e.g. if\n * two fingers are on the screen the focal is between them, but if one is\n * then removed the focal is now at the remaining fingers touch position.\n * If this happens without accounting for the change the image will jump\n * around, we keep track of the previous two finger focal to adjust for this\n * change in a reduction from two fingers to one, then if another finger\n * is added again we adjust the origin to account for the difference between\n * the original two finger touch and the new two finger touch position.\n */\n if (numberOfPinchFingers.value !== evt.numberOfPointers) {\n numberOfPinchFingers.value = evt.numberOfPointers;\n if (evt.numberOfPointers === 1) {\n focalOffsetX.value = oldFocalX.value - adjustedFocalX.value;\n focalOffsetY.value = oldFocalY.value - adjustedFocalY.value;\n } else if (numberOfPinchFingers.value > 1) {\n originX.value =\n originX.value -\n (oldFocalX.value / localEvtScale - adjustedFocalX.value / localEvtScale);\n originY.value =\n originY.value -\n (oldFocalY.value / localEvtScale - adjustedFocalY.value / localEvtScale);\n }\n }\n\n /**\n * If pinch handler has been activated via two fingers then the fingers\n * reduced to one we keep track of the old focal using the focal offset\n * from when the number of fingers was two. We then translate the photo\n * taking into account the offset, focal, focal offset, origin, and scale.\n */\n if (numberOfPinchFingers.value === 1) {\n oldFocalX.value = adjustedFocalX.value + focalOffsetX.value;\n oldFocalY.value = adjustedFocalY.value + focalOffsetY.value;\n translateX.value = offsetX.value - oldFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + oldFocalY.value - localEvtScale * originY.value;\n\n /**\n * If the number of fingers in the gesture is greater than one the\n * adjusted focal point is saved as the old focal and the photo is\n * translated taking into account the offset, focal, origin, and scale.\n */\n } else if (numberOfPinchFingers.value > 1) {\n oldFocalX.value = adjustedFocalX.value;\n oldFocalY.value = adjustedFocalY.value;\n translateX.value = offsetX.value - adjustedFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + adjustedFocalY.value - localEvtScale * originY.value;\n }\n },\n onFinish: () => {\n if (isPinch.value) {\n /**\n * When the pinch is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise leave the\n * photo in its current position\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1))\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1))\n : translateX.value;\n\n /**\n * When the pinch is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise leave the photo in its current position\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - screenHeight / 2\n ? withTiming((currentImageHeight / 2) * scale.value - screenHeight / 2)\n : translateY.value < (-currentImageHeight / 2) * scale.value + screenHeight / 2\n ? withTiming((-currentImageHeight / 2) * scale.value + screenHeight / 2)\n : translateY.value;\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n offsetScale.value = scale.value < 1 ? 1 : scale.value;\n scale.value = scale.value < 1 ? withTiming(1) : scale.value;\n resetTouchValues();\n }\n },\n onStart: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isAndroid) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Set pinch to true to stop all pan gesture interactions\n */\n isPinch.value = true;\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight],\n );\n\n /**\n * Single tap handler for header hiding and showing\n */\n const onSingleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: () => {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = headerFooterVisible.value > 0 ? withTiming(0) : withTiming(1);\n },\n });\n\n /**\n * Double tap handler to zoom back out and hide header and footer\n */\n const onDoubleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: (evt) => {\n if (Math.abs(tapX.value - evt.absoluteX) < 64 && Math.abs(tapY.value - evt.absoluteY) < 64) {\n if (offsetScale.value === 1 && offsetX.value === 0 && offsetY.value === 0) {\n offsetScale.value = 2;\n scale.value = withTiming(2, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withTiming(evt.absoluteX - halfScreenWidth, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (currentImageHeight * 2 > screenHeight) {\n const translateYTopBottom =\n evt.absoluteY > halfScreenHeight\n ? -(currentImageHeight * 2 - screenHeight) / 2\n : (currentImageHeight * 2 - screenHeight) / 2;\n translateY.value = withTiming(translateYTopBottom, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n }\n } else {\n offsetScale.value = 1;\n scale.value = withTiming(1, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n offsetX.value = 0;\n offsetY.value = 0;\n translateX.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (headerFooterVisible.value !== 0) {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = withTiming(0);\n }\n }\n }\n },\n onStart: (evt) => {\n tapX.value = evt.absoluteX;\n tapY.value = evt.absoluteY;\n },\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [visible],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: interpolate(showScreen.value, [0, 0.01, 1], [0, 1, 1]),\n transform: [\n {\n translateY: interpolate(showScreen.value, [0, 1], [screenHeight, 0]),\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions to open and close BottomSheet with image grid\n */\n const closeGridView = () => {\n if (bottomSheetRef.current) {\n bottomSheetRef.current.close();\n }\n };\n const openGridView = () => {\n if (bottomSheetRef.current) {\n bottomSheetRef.current.snapTo(1);\n }\n };\n\n return (\n <Animated.View\n pointerEvents={visible ? 'auto' : 'none'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View\n style={[\n styles.animatedContainer,\n pagerStyle,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\n {photos.map((photo, i) => (\n <AnimatedGalleryImage\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={{\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n }}\n translateX={translateX}\n translateY={translateY}\n />\n ))}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<Us>\n opacity={headerFooterOpacity}\n photo={photos[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n <ImageGalleryFooter<Us>\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n photo={photos[selectedIndex]}\n photoLength={photoLength}\n selectedIndex={selectedIndex}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheet\n animatedIndex={animatedBottomSheetIndex}\n containerHeight={fullScreenHeight}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={photos}\n resetVisibleValues={resetVisibleValues}\n setImage={setImage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheet>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<Us extends UnknownType = DefaultUserType> = {\n id: string;\n uri: string;\n created_at?: string | Date;\n messageId?: string;\n user?: UserResponse<Us> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"]}
1
+ {"version":3,"sources":["ImageGallery.tsx"],"names":["isAndroid","Platform","OS","fullScreenHeight","Dimensions","get","height","measuredScreenHeight","screenWidth","halfScreenWidth","MARGIN","HasPinched","IsSwiping","ImageGallery","props","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","visible","theme","white_snow","colors","backgroundColor","imageGallery","overlay","setOverlay","translucentStatusBar","image","images","setImage","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetRef","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","showScreen","fadeScreen","show","value","duration","easing","Easing","out","ease","Keyboard","dismiss","currentImageHeight","setCurrentImageHeight","selectedIndex","setSelectedIndex","index","headerFooterVisible","hasHitBottomScale","hasHitTopScale","doubleTapRef","panRef","pinchRef","singleTapRef","offsetX","offsetY","translateX","translateY","offsetScale","scale","translationX","originX","originY","focalX","focalY","oldFocalX","oldFocalY","focalOffsetX","focalOffsetY","adjustedFocalX","adjustedFocalY","tapX","tapY","numberOfPinchFingers","isSwiping","isPinch","hasPinched","resetTouchValues","UNDETERMINED","resetMovementValues","resetVisibleValues","photos","reduce","acc","cur","attachmentImages","attachments","filter","attachment","type","title_link","og_scrape_url","image_url","thumb_url","attachmentPhotos","map","attachmentImage","channelId","cid","created_at","id","messageId","uri","user","user_id","photoLength","length","updatePosition","newIndex","findIndex","photo","url","uriForCurrentImage","Image","getSize","width","imageHeight","Math","floor","onPan","onActive","evt","numberOfPointers","TRUE","FALSE","translationY","maxXYRatio","abs","localEvtScale","onFinish","finalXPosition","velocityX","finalYPosition","velocityY","clamp","deceleration","velocity","onStart","onPinch","triggerHaptic","onSingleTap","onDoubleTap","absoluteX","absoluteY","translateYTopBottom","headerFooterOpacity","pagerStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","current","close","openGridView","snapTo","StyleSheet","absoluteFillObject","absoluteFill","undefined","styles","animatedContainer","i","marginRight","header","footer","gridHandle","grid","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\nimport BottomSheet from '@gorhom/bottom-sheet';\nimport {\n PanGestureHandler,\n PanGestureHandlerGestureEvent,\n PinchGestureHandler,\n PinchGestureHandlerGestureEvent,\n TapGestureHandler,\n TapGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport Animated, {\n cancelAnimation,\n Easing,\n interpolate,\n runOnJS,\n runOnUI,\n useAnimatedGestureHandler,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withDecay,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { triggerHaptic } from '../../native';\nimport { vh, vw } from '../../utils/utils';\n\nimport type { UserResponse } from 'stream-chat';\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../types/types';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<Us extends UnknownType = DefaultUserType> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<Us>;\n grid?: ImageGalleryGridImageComponents<Us>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<Us>;\n };\n};\n\ntype Props<Us extends UnknownType = DefaultUserType> = ImageGalleryCustomComponents<Us> & {\n overlayOpacity: Animated.SharedValue<number>;\n visible: boolean;\n imageGalleryGridHandleHeight?: number;\n /**\n * This should be\n */\n imageGalleryGridSnapPoints?: [string | number, string | number];\n numberOfImageGalleryGridColumns?: number;\n};\n\nexport const ImageGallery = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: Props<Us>,\n) => {\n const {\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n visible,\n } = props;\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor },\n },\n } = useTheme();\n const { overlay, setOverlay, translucentStatusBar } = useOverlayContext();\n const { image, images, setImage } = useImageGalleryContext<At, Ch, Co, Ev, Me, Re, Us>();\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(() => [0, (screenHeight * 9) / 10], []);\n\n /**\n * BottomSheet ref\n */\n const bottomSheetRef = useRef<BottomSheet>(null);\n\n /**\n * BottomSheet state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const showScreen = useSharedValue(0);\n const fadeScreen = (show: boolean) => {\n 'worklet';\n showScreen.value = withTiming(show ? 1 : 0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n if (visible) {\n Keyboard.dismiss();\n }\n fadeScreen(visible);\n }, [visible]);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Values to track scale for haptic feedback firing\n */\n const hasHitBottomScale = useSharedValue(1);\n const hasHitTopScale = useSharedValue(0);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const offsetX = useSharedValue(0);\n const offsetY = useSharedValue(0);\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const originX = useSharedValue(0);\n const originY = useSharedValue(0);\n const focalX = useSharedValue(0);\n const focalY = useSharedValue(0);\n const oldFocalX = useSharedValue(0);\n const oldFocalY = useSharedValue(0);\n const focalOffsetX = useSharedValue(0);\n const focalOffsetY = useSharedValue(0);\n const adjustedFocalX = useSharedValue(0);\n const adjustedFocalY = useSharedValue(0);\n const tapX = useSharedValue(0);\n const tapY = useSharedValue(0);\n\n /**\n * Shared values for gesture tracking\n */\n const numberOfPinchFingers = useSharedValue(0);\n const isSwiping = useSharedValue(0);\n const isPinch = useSharedValue(false);\n const hasPinched = useSharedValue(0);\n\n /**\n * Reset gesture values for use on touch release\n */\n const resetTouchValues = () => {\n 'worklet';\n focalX.value = 0;\n focalY.value = 0;\n oldFocalX.value = 0;\n oldFocalY.value = 0;\n originX.value = 0;\n originY.value = 0;\n focalOffsetX.value = 0;\n focalOffsetY.value = 0;\n numberOfPinchFingers.value = 0;\n isPinch.value = false;\n isSwiping.value = IsSwiping.UNDETERMINED;\n };\n\n /**\n * Reset movement values for use on selected photo change\n */\n const resetMovementValues = () => {\n 'worklet';\n translateX.value = 0;\n translateY.value = 0;\n scale.value = 1;\n offsetScale.value = 1;\n };\n\n /**\n * Reset all key values for visible\n */\n const resetVisibleValues = () => {\n 'worklet';\n resetTouchValues();\n resetMovementValues();\n headerFooterVisible.value = 1;\n offsetX.value = 0;\n offsetY.value = 0;\n adjustedFocalX.value = 0;\n adjustedFocalY.value = 0;\n tapX.value = 0;\n tapY.value = 0;\n };\n\n useEffect(() => {\n if (!visible) {\n resetVisibleValues();\n }\n }, [visible]);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n const photos = images.reduce((acc: Photo<Us>[], cur) => {\n const attachmentImages =\n cur.attachments?.filter(\n (attachment) =>\n attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n (attachment.image_url || attachment.thumb_url),\n ) || [];\n\n const attachmentPhotos = attachmentImages.map((attachmentImage) => ({\n channelId: cur.cid,\n created_at: cur.created_at,\n id: `photoId-${cur.id}-${attachmentImage.image_url || attachmentImage.thumb_url}`,\n messageId: cur.id,\n uri: attachmentImage.image_url || attachmentImage.thumb_url || '',\n user: cur.user,\n user_id: cur.user_id,\n }));\n\n return [...acc, ...attachmentPhotos];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) => photo.messageId === image?.messageId && photo.uri === image?.url,\n );\n\n runOnUI(updatePosition)(newIndex);\n }, [image, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = photos[selectedIndex]?.uri;\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n if (photos[index.value]?.uri) {\n Image.getSize(photos[index.value].uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }, [uriForCurrentImage]);\n\n /**\n * We use simultaneousHandlers to allow pan and pinch gesture handlers\n * depending on the gesture. The touch is fully handled by the pinch\n * gesture handler once it has began so all interactions by the pan\n * handler are blocked if isPinch.value is true\n */\n const onPan = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n if (evt.numberOfPointers === 1 && !isPinch.value) {\n /**\n * If Android where a second finger cannot be added back and\n * removing one finger returns to Pan Handler then adjust origin\n * on finger remove and set swiping false\n */\n if (isAndroid && hasPinched.value === HasPinched.TRUE) {\n hasPinched.value = HasPinched.FALSE;\n isSwiping.value = IsSwiping.FALSE;\n offsetX.value = translateX.value + evt.translationX;\n offsetY.value = translateY.value - evt.translationY;\n }\n\n /**\n * isSwiping is used to prevent Y movement if a clear swipe to next\n * or previous is begun when at the edge of a photo. The value is\n * either 0, 1, or 2, via the IsSwiping enum designating undetermined,\n * true, or false and is reset on releasing the touch\n */\n if (isSwiping.value === IsSwiping.UNDETERMINED) {\n const maxXYRatio = isAndroid ? 1 : 0.25;\n if (\n Math.abs(evt.translationX / evt.translationY) > maxXYRatio &&\n (Math.abs(-halfScreenWidth * (scale.value - 1) - offsetX.value) < 3 ||\n Math.abs(halfScreenWidth * (scale.value - 1) - offsetX.value) < 3)\n ) {\n isSwiping.value = IsSwiping.TRUE;\n }\n if (Math.abs(evt.translationY) > 25) {\n isSwiping.value = IsSwiping.FALSE;\n }\n }\n\n /**\n * localEvtScale is used for swipe away\n */\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * If not swiping translate the image in X and Y to the event\n * translation plus offset. If swiping only translate X, if\n * swiping down when at top of screen or centered balance scale\n * using offset to a degree (this needs improvement the calculation\n * is incorrect but likely needs origin use to be 100%)\n */\n translateX.value =\n scale.value !== offsetScale.value\n ? offsetX.value * localEvtScale - evt.translationX\n : offsetX.value - evt.translationX;\n translateY.value =\n isSwiping.value !== IsSwiping.TRUE\n ? scale.value !== offsetScale.value\n ? offsetY.value * localEvtScale + evt.translationY\n : offsetY.value + evt.translationY\n : translateY.value;\n\n /**\n * If swiping down start scaling down the image for swipe\n * away effect\n */\n scale.value =\n currentImageHeight * offsetScale.value < screenHeight && translateY.value > 0\n ? offsetScale.value * (1 - (1 / 3) * (translateY.value / screenHeight))\n : currentImageHeight * offsetScale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * offsetScale.value - halfScreenHeight\n ? offsetScale.value *\n (1 -\n (1 / 3) *\n ((translateY.value -\n ((currentImageHeight / 2) * offsetScale.value - halfScreenHeight)) /\n screenHeight))\n : scale.value;\n\n overlayOpacity.value = localEvtScale;\n }\n },\n onFinish: (evt) => {\n if (!isPinch.value && evt.numberOfPointers < 2) {\n /**\n * To determine if the fling should page to the next image we\n * calculate a final position based on the current position and\n * event velocity\n */\n const finalXPosition = evt.translationX - evt.velocityX * 0.3;\n const finalYPosition = evt.translationY + evt.velocityY * 0.1;\n\n /**\n * If there is a next photo, the image is lined up to the right\n * edge, the swipe is to the left, and the final position is more\n * than half the screen width, move to the next image\n */\n if (\n index.value < photoLength - 1 &&\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value + 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value + 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n\n /**\n * If there is a previous photo, the image is lined up to the left\n * edge, the swipe is to the right, and the final position is more\n * than half the screen width, move to the previous image\n */\n } else if (\n index.value > 0 &&\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value - 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value - 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n }\n\n /**\n * When the pan is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise use decay\n * with a clamping at the edges to give the effect the image is\n * sliding along using velocity and friction\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : withDecay({\n clamp: [\n -halfScreenWidth * (scale.value - 1),\n halfScreenWidth * (scale.value - 1),\n ],\n deceleration: 0.99,\n velocity: -evt.velocityX,\n });\n\n /**\n * When the pan is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise use decay with a clamping at the edges to give the effect\n * the image is sliding along using velocity and friction\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? withTiming((currentImageHeight / 2) * scale.value - halfScreenHeight)\n : translateY.value < (-currentImageHeight / 2) * scale.value + halfScreenHeight\n ? withTiming((-currentImageHeight / 2) * scale.value + halfScreenHeight)\n : withDecay({\n clamp: [\n (-currentImageHeight / 2) * scale.value + halfScreenHeight,\n (currentImageHeight / 2) * scale.value - halfScreenHeight,\n ],\n deceleration: 0.99,\n velocity: evt.velocityY,\n });\n\n resetTouchValues();\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n scale.value =\n scale.value !== offsetScale.value ? withTiming(offsetScale.value) : offsetScale.value;\n\n /**\n * If the photo is centered or at the top of the screen if scaled larger\n * than the screen, and not paging left or right, and the final Y position\n * is greater than half the screen using swipe velocity and position, close\n * the overlay\n */\n if (\n finalYPosition > halfScreenHeight &&\n offsetY.value + 8 >= (currentImageHeight / 2) * scale.value - halfScreenHeight &&\n isSwiping.value !== IsSwiping.TRUE &&\n translateY.value !== 0 &&\n !(\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth\n ) &&\n !(\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth\n )\n ) {\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n overlayOpacity.value = withTiming(\n 0,\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n showScreen.value = 0;\n runOnJS(setOverlay)('none');\n },\n );\n scale.value = withTiming(0.6, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value =\n evt.velocityY > 1000\n ? withDecay({\n velocity: evt.velocityY,\n })\n : withTiming(halfScreenHeight + (currentImageHeight / 2) * scale.value, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withDecay({\n velocity: -evt.velocityX,\n });\n }\n }\n },\n\n onStart: () => {\n if (!isPinch.value) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight, photoLength],\n );\n\n /**\n * On pinch is run when two or more fingers touch the screen, it then takes over\n * all touch handling even if the number of fingers is reduced to one until the\n * touch is complete\n */\n const onPinch = useAnimatedGestureHandler<PinchGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isPinch.value && isAndroid) {\n /**\n * Set hasPinched to true so when removing one finger the pan active\n * state adjusts the offset\n */\n hasPinched.value = HasPinched.TRUE;\n\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Set pinch to true to stop all pan gesture interactions, we do this\n * again here for Android outside the check that creates type\n */\n isPinch.value = true;\n\n /**\n * The scale is clamped to a minimum of 1 and maximum of 8 for aesthetics.\n * We use the clamped value to determine a local event scale so the focal\n * point does not become out of sync with the actual photo scaling, e.g.\n * evt.scale is 20 but scale is 8, using evt.scale for offset will put the\n * photo and calculations out of sync\n */\n scale.value = clamp(offsetScale.value * evt.scale, 1, 8);\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * When we hit the top or bottom of the scale clamping we run a haptic\n * trigger, we track if it has been run to not spam the trigger\n */\n if (scale.value !== 8 && scale.value !== 1) {\n hasHitTopScale.value = 0;\n hasHitBottomScale.value = 0;\n } else if (scale.value === 8 && hasHitTopScale.value === 0) {\n hasHitTopScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n } else if (scale.value === 1 && hasHitBottomScale.value === 0) {\n hasHitBottomScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n }\n\n /**\n * We calculate the adjusted focal point on the photo using the events\n * focal position on the screen, screen size, and current photo offset\n */\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n\n /**\n * If the number of fingers on the screen changes, the position of the\n * focal point will change and this needs to be accounted for, e.g. if\n * two fingers are on the screen the focal is between them, but if one is\n * then removed the focal is now at the remaining fingers touch position.\n * If this happens without accounting for the change the image will jump\n * around, we keep track of the previous two finger focal to adjust for this\n * change in a reduction from two fingers to one, then if another finger\n * is added again we adjust the origin to account for the difference between\n * the original two finger touch and the new two finger touch position.\n */\n if (numberOfPinchFingers.value !== evt.numberOfPointers) {\n numberOfPinchFingers.value = evt.numberOfPointers;\n if (evt.numberOfPointers === 1) {\n focalOffsetX.value = oldFocalX.value - adjustedFocalX.value;\n focalOffsetY.value = oldFocalY.value - adjustedFocalY.value;\n } else if (numberOfPinchFingers.value > 1) {\n originX.value =\n originX.value -\n (oldFocalX.value / localEvtScale - adjustedFocalX.value / localEvtScale);\n originY.value =\n originY.value -\n (oldFocalY.value / localEvtScale - adjustedFocalY.value / localEvtScale);\n }\n }\n\n /**\n * If pinch handler has been activated via two fingers then the fingers\n * reduced to one we keep track of the old focal using the focal offset\n * from when the number of fingers was two. We then translate the photo\n * taking into account the offset, focal, focal offset, origin, and scale.\n */\n if (numberOfPinchFingers.value === 1) {\n oldFocalX.value = adjustedFocalX.value + focalOffsetX.value;\n oldFocalY.value = adjustedFocalY.value + focalOffsetY.value;\n translateX.value = offsetX.value - oldFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + oldFocalY.value - localEvtScale * originY.value;\n\n /**\n * If the number of fingers in the gesture is greater than one the\n * adjusted focal point is saved as the old focal and the photo is\n * translated taking into account the offset, focal, origin, and scale.\n */\n } else if (numberOfPinchFingers.value > 1) {\n oldFocalX.value = adjustedFocalX.value;\n oldFocalY.value = adjustedFocalY.value;\n translateX.value = offsetX.value - adjustedFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + adjustedFocalY.value - localEvtScale * originY.value;\n }\n },\n onFinish: () => {\n if (isPinch.value) {\n /**\n * When the pinch is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise leave the\n * photo in its current position\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1))\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1))\n : translateX.value;\n\n /**\n * When the pinch is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise leave the photo in its current position\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - screenHeight / 2\n ? withTiming((currentImageHeight / 2) * scale.value - screenHeight / 2)\n : translateY.value < (-currentImageHeight / 2) * scale.value + screenHeight / 2\n ? withTiming((-currentImageHeight / 2) * scale.value + screenHeight / 2)\n : translateY.value;\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n offsetScale.value = scale.value < 1 ? 1 : scale.value;\n scale.value = scale.value < 1 ? withTiming(1) : scale.value;\n resetTouchValues();\n }\n },\n onStart: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isAndroid) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Set pinch to true to stop all pan gesture interactions\n */\n isPinch.value = true;\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight],\n );\n\n /**\n * Single tap handler for header hiding and showing\n */\n const onSingleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: () => {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = headerFooterVisible.value > 0 ? withTiming(0) : withTiming(1);\n },\n });\n\n /**\n * Double tap handler to zoom back out and hide header and footer\n */\n const onDoubleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: (evt) => {\n if (Math.abs(tapX.value - evt.absoluteX) < 64 && Math.abs(tapY.value - evt.absoluteY) < 64) {\n if (offsetScale.value === 1 && offsetX.value === 0 && offsetY.value === 0) {\n offsetScale.value = 2;\n scale.value = withTiming(2, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withTiming(evt.absoluteX - halfScreenWidth, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (currentImageHeight * 2 > screenHeight) {\n const translateYTopBottom =\n evt.absoluteY > halfScreenHeight\n ? -(currentImageHeight * 2 - screenHeight) / 2\n : (currentImageHeight * 2 - screenHeight) / 2;\n translateY.value = withTiming(translateYTopBottom, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n }\n } else {\n offsetScale.value = 1;\n scale.value = withTiming(1, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n offsetX.value = 0;\n offsetY.value = 0;\n translateX.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (headerFooterVisible.value !== 0) {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = withTiming(0);\n }\n }\n }\n },\n onStart: (evt) => {\n tapX.value = evt.absoluteX;\n tapY.value = evt.absoluteY;\n },\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [visible],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n opacity: interpolate(showScreen.value, [0, 0.01, 1], [0, 1, 1]),\n transform: [\n {\n translateY: interpolate(showScreen.value, [0, 1], [screenHeight, 0]),\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions to open and close BottomSheet with image grid\n */\n const closeGridView = () => {\n if (bottomSheetRef.current) {\n bottomSheetRef.current.close();\n }\n };\n const openGridView = () => {\n if (bottomSheetRef.current) {\n bottomSheetRef.current.snapTo(1);\n }\n };\n\n return (\n <Animated.View\n pointerEvents={visible ? 'auto' : 'none'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View\n style={[\n styles.animatedContainer,\n pagerStyle,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\n {photos.map((photo, i) => (\n <AnimatedGalleryImage\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={{\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n }}\n translateX={translateX}\n translateY={translateY}\n />\n ))}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<Us>\n opacity={headerFooterOpacity}\n photo={photos[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n <ImageGalleryFooter<Us>\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n photo={photos[selectedIndex]}\n photoLength={photoLength}\n selectedIndex={selectedIndex}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheet\n animatedIndex={animatedBottomSheetIndex}\n containerHeight={fullScreenHeight}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={photos}\n resetVisibleValues={resetVisibleValues}\n setImage={setImage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheet>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<Us extends UnknownType = DefaultUserType> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n messageId?: string;\n user?: UserResponse<Us> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"]}
@@ -98,12 +98,11 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
98
98
  tDateTimeParser = _useTranslationContex.tDateTimeParser;
99
99
 
100
100
  var _useOverlayContext = (0, _OverlayContext.useOverlayContext)(),
101
- setBlurType = _useOverlayContext.setBlurType,
102
101
  setOverlay = _useOverlayContext.setOverlay,
103
102
  translucentStatusBar = _useOverlayContext.translucentStatusBar;
104
103
 
105
- var parsedDate = tDateTimeParser(photo == null ? void 0 : photo.created_at);
106
- var date = parsedDate && (0, _TranslationContext.isDayOrMoment)(parsedDate) ? parsedDate.calendar ? parsedDate.calendar() : parsedDate.fromNow() : parsedDate;
104
+ var parsedDate = photo ? tDateTimeParser(photo == null ? void 0 : photo.created_at) : null;
105
+ var date = parsedDate && (0, _TranslationContext.isDayOrMoment)(parsedDate) ? parsedDate.calendar ? parsedDate.calendar() : parsedDate.fromNow() : null;
107
106
  var headerStyle = (0, _reactNativeReanimated.useAnimatedStyle)(function () {
108
107
  return {
109
108
  opacity: opacity.value,
@@ -118,7 +117,6 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
118
117
 
119
118
  var hideOverlay = function hideOverlay() {
120
119
  setOverlay('none');
121
- setBlurType(undefined);
122
120
  };
123
121
 
124
122
  return _react["default"].createElement(_reactNative.View, {
@@ -129,7 +127,7 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
129
127
  __self: _this,
130
128
  __source: {
131
129
  fileName: _jsxFileName,
132
- lineNumber: 139,
130
+ lineNumber: 138,
133
131
  columnNumber: 5
134
132
  }
135
133
  }, _react["default"].createElement(ReanimatedSafeAreaView, {
@@ -139,7 +137,7 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
139
137
  __self: _this,
140
138
  __source: {
141
139
  fileName: _jsxFileName,
142
- lineNumber: 143,
140
+ lineNumber: 142,
143
141
  columnNumber: 7
144
142
  }
145
143
  }, _react["default"].createElement(_reactNative.View, {
@@ -147,7 +145,7 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
147
145
  __self: _this,
148
146
  __source: {
149
147
  fileName: _jsxFileName,
150
- lineNumber: 146,
148
+ lineNumber: 145,
151
149
  columnNumber: 9
152
150
  }
153
151
  }, leftElement ? leftElement({
@@ -158,7 +156,7 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
158
156
  __self: _this,
159
157
  __source: {
160
158
  fileName: _jsxFileName,
161
- lineNumber: 150,
159
+ lineNumber: 149,
162
160
  columnNumber: 13
163
161
  }
164
162
  }, _react["default"].createElement(_reactNative.View, {
@@ -166,14 +164,14 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
166
164
  __self: _this,
167
165
  __source: {
168
166
  fileName: _jsxFileName,
169
- lineNumber: 151,
167
+ lineNumber: 150,
170
168
  columnNumber: 15
171
169
  }
172
170
  }, CloseIcon ? CloseIcon : _react["default"].createElement(_icons.Close, {
173
171
  __self: _this,
174
172
  __source: {
175
173
  fileName: _jsxFileName,
176
- lineNumber: 152,
174
+ lineNumber: 151,
177
175
  columnNumber: 42
178
176
  }
179
177
  }))), centerElement ? centerElement({
@@ -184,7 +182,7 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
184
182
  __self: _this,
185
183
  __source: {
186
184
  fileName: _jsxFileName,
187
- lineNumber: 159,
185
+ lineNumber: 158,
188
186
  columnNumber: 13
189
187
  }
190
188
  }, _react["default"].createElement(_reactNative.Text, {
@@ -194,18 +192,18 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
194
192
  __self: _this,
195
193
  __source: {
196
194
  fileName: _jsxFileName,
197
- lineNumber: 160,
195
+ lineNumber: 159,
198
196
  columnNumber: 15
199
197
  }
200
- }, (photo == null ? void 0 : (_photo$user = photo.user) == null ? void 0 : _photo$user.name) || t('Unknown User')), _react["default"].createElement(_reactNative.Text, {
198
+ }, (photo == null ? void 0 : (_photo$user = photo.user) == null ? void 0 : _photo$user.name) || t('Unknown User')), date && _react["default"].createElement(_reactNative.Text, {
201
199
  style: [styles.date, {
202
200
  color: black
203
201
  }, dateText],
204
202
  __self: _this,
205
203
  __source: {
206
204
  fileName: _jsxFileName,
207
- lineNumber: 163,
208
- columnNumber: 15
205
+ lineNumber: 162,
206
+ columnNumber: 24
209
207
  }
210
208
  }, date)), rightElement ? rightElement({
211
209
  hideOverlay: hideOverlay,
@@ -215,7 +213,7 @@ var ImageGalleryHeader = function ImageGalleryHeader(props) {
215
213
  __self: _this,
216
214
  __source: {
217
215
  fileName: _jsxFileName,
218
- lineNumber: 169,
216
+ lineNumber: 168,
219
217
  columnNumber: 13
220
218
  }
221
219
  }))));
@@ -1 +1 @@
1
- {"version":3,"sources":["ImageGalleryHeader.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","date","fontSize","fontWeight","marginTop","opacity","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","width","userName","ImageGalleryHeader","props","centerElement","CloseIcon","leftElement","photo","rightElement","visible","setHeight","theme","colors","black","white","imageGallery","header","container","dateText","usernameText","t","tDateTimeParser","setBlurType","setOverlay","translucentStatusBar","parsedDate","created_at","calendar","fromNow","headerStyle","value","transform","translateY","Extrapolate","CLAMP","androidTranslucentHeaderStyle","paddingTop","Platform","OS","StatusBar","currentHeight","undefined","hideOverlay","event","nativeEvent","layout","backgroundColor","color","user","name","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport {\n Platform,\n SafeAreaView,\n StatusBar,\n StyleSheet,\n Text,\n TouchableOpacity,\n View,\n ViewStyle,\n} from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { useOverlayContext } from '../../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport {\n isDayOrMoment,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\nimport { Close } from '../../../icons';\n\nimport type { Photo } from '../ImageGallery';\n\nimport type { DefaultUserType, UnknownType } from '../../../types/types';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n date: {\n fontSize: 12,\n fontWeight: '500',\n marginTop: 4,\n opacity: 0.5,\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n marginRight: 8,\n width: 24, // Width of icon currently on left\n },\n userName: {\n fontSize: 16,\n fontWeight: '700',\n },\n});\n\nexport type ImageGalleryHeaderCustomComponent<Us extends UnknownType = DefaultUserType> = ({\n hideOverlay,\n photo,\n}: {\n hideOverlay: () => void;\n photo?: Photo<Us>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryHeaderCustomComponentProps<Us extends UnknownType = DefaultUserType> = {\n centerElement?: ImageGalleryHeaderCustomComponent<Us>;\n CloseIcon?: React.ReactElement;\n leftElement?: ImageGalleryHeaderCustomComponent<Us>;\n rightElement?: ImageGalleryHeaderCustomComponent<Us>;\n};\n\ntype Props<Us extends UnknownType = DefaultUserType> =\n ImageGalleryHeaderCustomComponentProps<Us> & {\n opacity: Animated.SharedValue<number>;\n visible: Animated.SharedValue<number>;\n photo?: Photo<Us>;\n };\n\nexport const ImageGalleryHeader = <Us extends UnknownType = DefaultUserType>(props: Props<Us>) => {\n const { centerElement, CloseIcon, leftElement, opacity, photo, rightElement, visible } = props;\n const [height, setHeight] = useState(200);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n header: {\n centerContainer,\n container,\n dateText,\n innerContainer,\n leftContainer,\n rightContainer,\n usernameText,\n },\n },\n },\n } = useTheme();\n const { t, tDateTimeParser } = useTranslationContext();\n const { setBlurType, setOverlay, translucentStatusBar } = useOverlayContext();\n\n const parsedDate = tDateTimeParser(photo?.created_at);\n\n /**\n * .calendar is required on moment types, but in reality it\n * is unavailable on first render. We therefore check if it\n * is available and call it, otherwise we call .fromNow.\n */\n const date =\n parsedDate && isDayOrMoment(parsedDate)\n ? parsedDate.calendar\n ? parsedDate.calendar()\n : parsedDate.fromNow()\n : parsedDate;\n\n const headerStyle = useAnimatedStyle<ViewStyle>(() => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [-height, 0], Extrapolate.CLAMP),\n },\n ],\n }));\n\n const androidTranslucentHeaderStyle = {\n paddingTop:\n Platform.OS === 'android' && translucentStatusBar ? StatusBar.currentHeight : undefined,\n };\n\n const hideOverlay = () => {\n setOverlay('none');\n setBlurType(undefined);\n };\n\n return (\n <View\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n >\n <ReanimatedSafeAreaView\n style={[{ backgroundColor: white }, androidTranslucentHeaderStyle, container, headerStyle]}\n >\n <View style={[styles.innerContainer, innerContainer]}>\n {leftElement ? (\n leftElement({ hideOverlay, photo })\n ) : (\n <TouchableOpacity onPress={hideOverlay}>\n <View style={[styles.leftContainer, leftContainer]}>\n {CloseIcon ? CloseIcon : <Close />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ hideOverlay, photo })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.userName, { color: black }, usernameText]}>\n {photo?.user?.name || t('Unknown User')}\n </Text>\n <Text style={[styles.date, { color: black }, dateText]}>{date}</Text>\n </View>\n )}\n {rightElement ? (\n rightElement({ hideOverlay, photo })\n ) : (\n <View style={[styles.rightContainer, rightContainer]} />\n )}\n </View>\n </ReanimatedSafeAreaView>\n </View>\n );\n};\n\nImageGalleryHeader.displayName = 'ImageGalleryHeader{imageGallery{header}}';\n"]}
1
+ {"version":3,"sources":["ImageGalleryHeader.tsx"],"names":["ReanimatedSafeAreaView","Animated","createAnimatedComponent","SafeAreaView","styles","StyleSheet","create","centerContainer","alignItems","flex","justifyContent","date","fontSize","fontWeight","marginTop","opacity","innerContainer","flexDirection","height","leftContainer","marginLeft","rightContainer","marginRight","width","userName","ImageGalleryHeader","props","centerElement","CloseIcon","leftElement","photo","rightElement","visible","setHeight","theme","colors","black","white","imageGallery","header","container","dateText","usernameText","t","tDateTimeParser","setOverlay","translucentStatusBar","parsedDate","created_at","calendar","fromNow","headerStyle","value","transform","translateY","Extrapolate","CLAMP","androidTranslucentHeaderStyle","paddingTop","Platform","OS","StatusBar","currentHeight","undefined","hideOverlay","event","nativeEvent","layout","backgroundColor","color","user","name","displayName"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAUA;;AAEA;;AACA;;AACA;;AAIA;;;;;;;;;AAMA,IAAMA,sBAAsB,GAAGC,kCAASC,uBAAT,GAC3BD,kCAASC,uBAAT,CAAiCC,yBAAjC,CAD2B,GAE3BA,yBAFJ;;AAIA,IAAMC,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,eAAe,EAAE;AACfC,IAAAA,UAAU,EAAE,QADG;AAEfC,IAAAA,IAAI,EAAE,CAFS;AAGfC,IAAAA,cAAc,EAAE;AAHD,GADc;AAM/BC,EAAAA,IAAI,EAAE;AACJC,IAAAA,QAAQ,EAAE,EADN;AAEJC,IAAAA,UAAU,EAAE,KAFR;AAGJC,IAAAA,SAAS,EAAE,CAHP;AAIJC,IAAAA,OAAO,EAAE;AAJL,GANyB;AAY/BC,EAAAA,cAAc,EAAE;AACdC,IAAAA,aAAa,EAAE,KADD;AAEdC,IAAAA,MAAM,EAAE;AAFM,GAZe;AAgB/BC,EAAAA,aAAa,EAAE;AACbV,IAAAA,IAAI,EAAE,CADO;AAEbC,IAAAA,cAAc,EAAE,QAFH;AAGbU,IAAAA,UAAU,EAAE;AAHC,GAhBgB;AAqB/BC,EAAAA,cAAc,EAAE;AACdC,IAAAA,WAAW,EAAE,CADC;AAEdC,IAAAA,KAAK,EAAE;AAFO,GArBe;AAyB/BC,EAAAA,QAAQ,EAAE;AACRZ,IAAAA,QAAQ,EAAE,EADF;AAERC,IAAAA,UAAU,EAAE;AAFJ;AAzBqB,CAAlB,CAAf;;AAqDO,IAAMY,kBAAkB,GAAG,SAArBA,kBAAqB,CAA2CC,KAA3C,EAAgE;AAAA;;AAChG,MAAQC,aAAR,GAAyFD,KAAzF,CAAQC,aAAR;AAAA,MAAuBC,SAAvB,GAAyFF,KAAzF,CAAuBE,SAAvB;AAAA,MAAkCC,WAAlC,GAAyFH,KAAzF,CAAkCG,WAAlC;AAAA,MAA+Cd,OAA/C,GAAyFW,KAAzF,CAA+CX,OAA/C;AAAA,MAAwDe,KAAxD,GAAyFJ,KAAzF,CAAwDI,KAAxD;AAAA,MAA+DC,YAA/D,GAAyFL,KAAzF,CAA+DK,YAA/D;AAAA,MAA6EC,OAA7E,GAAyFN,KAAzF,CAA6EM,OAA7E;;AACA,kBAA4B,qBAAS,GAAT,CAA5B;AAAA;AAAA,MAAOd,MAAP;AAAA,MAAee,SAAf;;AACA,kBAeI,6BAfJ;AAAA,kCACEC,KADF;AAAA,8CAEIC,MAFJ;AAAA,MAEcC,KAFd,yBAEcA,KAFd;AAAA,MAEqBC,KAFrB,yBAEqBA,KAFrB;AAAA,8CAGIC,YAHJ,CAIMC,MAJN;AAAA,MAKQhC,eALR,yBAKQA,eALR;AAAA,MAMQiC,SANR,yBAMQA,SANR;AAAA,MAOQC,QAPR,yBAOQA,QAPR;AAAA,MAQQzB,cARR,yBAQQA,cARR;AAAA,MASQG,aATR,yBASQA,aATR;AAAA,MAUQE,cAVR,yBAUQA,cAVR;AAAA,MAWQqB,YAXR,yBAWQA,YAXR;;AAgBA,8BAA+B,gDAA/B;AAAA,MAAQC,CAAR,yBAAQA,CAAR;AAAA,MAAWC,eAAX,yBAAWA,eAAX;;AACA,2BAA6C,wCAA7C;AAAA,MAAQC,UAAR,sBAAQA,UAAR;AAAA,MAAoBC,oBAApB,sBAAoBA,oBAApB;;AAEA,MAAMC,UAAU,GAAGjB,KAAK,GAAGc,eAAe,CAACd,KAAD,oBAACA,KAAK,CAAEkB,UAAR,CAAlB,GAAwC,IAAhE;AAOA,MAAMrC,IAAI,GACRoC,UAAU,IAAI,uCAAcA,UAAd,CAAd,GACIA,UAAU,CAACE,QAAX,GACEF,UAAU,CAACE,QAAX,EADF,GAEEF,UAAU,CAACG,OAAX,EAHN,GAII,IALN;AAOA,MAAMC,WAAW,GAAG,6CAA4B;AAAA,WAAO;AACrDpC,MAAAA,OAAO,EAAEA,OAAO,CAACqC,KADoC;AAErDC,MAAAA,SAAS,EAAE,CACT;AACEC,QAAAA,UAAU,EAAE,wCAAYtB,OAAO,CAACoB,KAApB,EAA2B,CAAC,CAAD,EAAI,CAAJ,CAA3B,EAAmC,CAAC,CAAClC,MAAF,EAAU,CAAV,CAAnC,EAAiDqC,mCAAYC,KAA7D;AADd,OADS;AAF0C,KAAP;AAAA,GAA5B,CAApB;AASA,MAAMC,6BAA6B,GAAG;AACpCC,IAAAA,UAAU,EACRC,sBAASC,EAAT,KAAgB,SAAhB,IAA6Bd,oBAA7B,GAAoDe,uBAAUC,aAA9D,GAA8EC;AAF5C,GAAtC;;AAKA,MAAMC,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxBnB,IAAAA,UAAU,CAAC,MAAD,CAAV;AACD,GAFD;;AAIA,SACE,gCAAC,iBAAD;AACE,IAAA,QAAQ,EAAE,kBAACoB,KAAD;AAAA,aAAWhC,SAAS,CAACgC,KAAK,CAACC,WAAN,CAAkBC,MAAlB,CAAyBjD,MAA1B,CAApB;AAAA,KADZ;AAEE,IAAA,aAAa,EAAE,UAFjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAIE,gCAAC,sBAAD;AACE,IAAA,KAAK,EAAE,CAAC;AAAEkD,MAAAA,eAAe,EAAE/B;AAAnB,KAAD,EAA6BoB,6BAA7B,EAA4DjB,SAA5D,EAAuEW,WAAvE,CADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAGE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAC/C,MAAM,CAACY,cAAR,EAAwBA,cAAxB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGa,WAAW,GACVA,WAAW,CAAC;AAAEmC,IAAAA,WAAW,EAAXA,WAAF;AAAelC,IAAAA,KAAK,EAALA;AAAf,GAAD,CADD,GAGV,gCAAC,6BAAD;AAAkB,IAAA,OAAO,EAAEkC,WAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAC5D,MAAM,CAACe,aAAR,EAAuBA,aAAvB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGS,SAAS,GAAGA,SAAH,GAAe,gCAAC,YAAD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAD3B,CADF,CAJJ,EAUGD,aAAa,GACZA,aAAa,CAAC;AAAEqC,IAAAA,WAAW,EAAXA,WAAF;AAAelC,IAAAA,KAAK,EAALA;AAAf,GAAD,CADD,GAGZ,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAC1B,MAAM,CAACG,eAAR,EAAyBA,eAAzB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAACH,MAAM,CAACoB,QAAR,EAAkB;AAAE6C,MAAAA,KAAK,EAAEjC;AAAT,KAAlB,EAAoCM,YAApC,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACG,CAAAZ,KAAK,QAAL,2BAAAA,KAAK,CAAEwC,IAAP,iCAAaC,IAAb,KAAqB5B,CAAC,CAAC,cAAD,CADzB,CADF,EAIGhC,IAAI,IAAI,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAACP,MAAM,CAACO,IAAR,EAAc;AAAE0D,MAAAA,KAAK,EAAEjC;AAAT,KAAd,EAAgCK,QAAhC,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAyD9B,IAAzD,CAJX,CAbJ,EAoBGoB,YAAY,GACXA,YAAY,CAAC;AAAEiC,IAAAA,WAAW,EAAXA,WAAF;AAAelC,IAAAA,KAAK,EAALA;AAAf,GAAD,CADD,GAGX,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAAC1B,MAAM,CAACiB,cAAR,EAAwBA,cAAxB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAvBJ,CAHF,CAJF,CADF;AAqCD,CA3FM;;;AA6FPI,kBAAkB,CAAC+C,WAAnB,GAAiC,0CAAjC","sourcesContent":["import React, { useState } from 'react';\nimport {\n Platform,\n SafeAreaView,\n StatusBar,\n StyleSheet,\n Text,\n TouchableOpacity,\n View,\n ViewStyle,\n} from 'react-native';\nimport Animated, { Extrapolate, interpolate, useAnimatedStyle } from 'react-native-reanimated';\n\nimport { useOverlayContext } from '../../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport {\n isDayOrMoment,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\nimport { Close } from '../../../icons';\n\nimport type { Photo } from '../ImageGallery';\n\nimport type { DefaultUserType, UnknownType } from '../../../types/types';\n\nconst ReanimatedSafeAreaView = Animated.createAnimatedComponent\n ? Animated.createAnimatedComponent(SafeAreaView)\n : SafeAreaView;\n\nconst styles = StyleSheet.create({\n centerContainer: {\n alignItems: 'center',\n flex: 1,\n justifyContent: 'center',\n },\n date: {\n fontSize: 12,\n fontWeight: '500',\n marginTop: 4,\n opacity: 0.5,\n },\n innerContainer: {\n flexDirection: 'row',\n height: 56,\n },\n leftContainer: {\n flex: 1,\n justifyContent: 'center',\n marginLeft: 8,\n },\n rightContainer: {\n marginRight: 8,\n width: 24, // Width of icon currently on left\n },\n userName: {\n fontSize: 16,\n fontWeight: '700',\n },\n});\n\nexport type ImageGalleryHeaderCustomComponent<Us extends UnknownType = DefaultUserType> = ({\n hideOverlay,\n photo,\n}: {\n hideOverlay: () => void;\n photo?: Photo<Us>;\n}) => React.ReactElement | null;\n\nexport type ImageGalleryHeaderCustomComponentProps<Us extends UnknownType = DefaultUserType> = {\n centerElement?: ImageGalleryHeaderCustomComponent<Us>;\n CloseIcon?: React.ReactElement;\n leftElement?: ImageGalleryHeaderCustomComponent<Us>;\n rightElement?: ImageGalleryHeaderCustomComponent<Us>;\n};\n\ntype Props<Us extends UnknownType = DefaultUserType> =\n ImageGalleryHeaderCustomComponentProps<Us> & {\n opacity: Animated.SharedValue<number>;\n visible: Animated.SharedValue<number>;\n photo?: Photo<Us>;\n };\n\nexport const ImageGalleryHeader = <Us extends UnknownType = DefaultUserType>(props: Props<Us>) => {\n const { centerElement, CloseIcon, leftElement, opacity, photo, rightElement, visible } = props;\n const [height, setHeight] = useState(200);\n const {\n theme: {\n colors: { black, white },\n imageGallery: {\n header: {\n centerContainer,\n container,\n dateText,\n innerContainer,\n leftContainer,\n rightContainer,\n usernameText,\n },\n },\n },\n } = useTheme();\n const { t, tDateTimeParser } = useTranslationContext();\n const { setOverlay, translucentStatusBar } = useOverlayContext();\n\n const parsedDate = photo ? tDateTimeParser(photo?.created_at) : null;\n\n /**\n * .calendar is required on moment types, but in reality it\n * is unavailable on first render. We therefore check if it\n * is available and call it, otherwise we call .fromNow.\n */\n const date =\n parsedDate && isDayOrMoment(parsedDate)\n ? parsedDate.calendar\n ? parsedDate.calendar()\n : parsedDate.fromNow()\n : null;\n\n const headerStyle = useAnimatedStyle<ViewStyle>(() => ({\n opacity: opacity.value,\n transform: [\n {\n translateY: interpolate(visible.value, [0, 1], [-height, 0], Extrapolate.CLAMP),\n },\n ],\n }));\n\n const androidTranslucentHeaderStyle = {\n paddingTop:\n Platform.OS === 'android' && translucentStatusBar ? StatusBar.currentHeight : undefined,\n };\n\n const hideOverlay = () => {\n setOverlay('none');\n };\n\n return (\n <View\n onLayout={(event) => setHeight(event.nativeEvent.layout.height)}\n pointerEvents={'box-none'}\n >\n <ReanimatedSafeAreaView\n style={[{ backgroundColor: white }, androidTranslucentHeaderStyle, container, headerStyle]}\n >\n <View style={[styles.innerContainer, innerContainer]}>\n {leftElement ? (\n leftElement({ hideOverlay, photo })\n ) : (\n <TouchableOpacity onPress={hideOverlay}>\n <View style={[styles.leftContainer, leftContainer]}>\n {CloseIcon ? CloseIcon : <Close />}\n </View>\n </TouchableOpacity>\n )}\n {centerElement ? (\n centerElement({ hideOverlay, photo })\n ) : (\n <View style={[styles.centerContainer, centerContainer]}>\n <Text style={[styles.userName, { color: black }, usernameText]}>\n {photo?.user?.name || t('Unknown User')}\n </Text>\n {date && <Text style={[styles.date, { color: black }, dateText]}>{date}</Text>}\n </View>\n )}\n {rightElement ? (\n rightElement({ hideOverlay, photo })\n ) : (\n <View style={[styles.rightContainer, rightContainer]} />\n )}\n </View>\n </ReanimatedSafeAreaView>\n </View>\n );\n};\n\nImageGalleryHeader.displayName = 'ImageGalleryHeader{imageGallery{header}}';\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["LoadingErrorIndicator.tsx"],"names":["styles","StyleSheet","create","container","alignItems","height","justifyContent","width","errorText","fontSize","fontWeight","marginTop","retryText","LoadingErrorWrapper","props","children","onPress","text","theme","accent_red","colors","loadingErrorIndicator","color","LoadingErrorIndicator","listType","retry","black","t","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleSheet, Text, TouchableOpacity } from 'react-native';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../contexts/translationContext/TranslationContext';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n errorText: {\n fontSize: 14,\n fontWeight: '600',\n marginTop: 20,\n },\n retryText: {\n fontSize: 30,\n fontWeight: '600',\n },\n});\n\ntype LoadingErrorWrapperProps = {\n text: string;\n onPress?: () => void;\n};\n\nconst LoadingErrorWrapper: React.FC<LoadingErrorWrapperProps> = (props) => {\n const { children, onPress, text } = props;\n\n const {\n theme: {\n colors: { accent_red },\n loadingErrorIndicator: { container, errorText },\n },\n } = useTheme();\n\n return (\n <TouchableOpacity onPress={onPress} style={[styles.container, container]}>\n <Text style={[styles.errorText, { color: accent_red }, errorText]} testID='loading-error'>\n {text}\n </Text>\n {children}\n </TouchableOpacity>\n );\n};\n\nexport type LoadingErrorProps = {\n error?: boolean;\n listType?: 'channel' | 'message' | 'default';\n loadNextPage?: () => Promise<void>;\n retry?: () => void;\n};\n\nexport const LoadingErrorIndicator: React.FC<LoadingErrorProps> = (props) => {\n const { listType, retry = () => null } = props;\n\n const {\n theme: {\n colors: { black },\n loadingErrorIndicator: { retryText },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n switch (listType) {\n case 'channel':\n return (\n <LoadingErrorWrapper onPress={retry} text={t('Error loading channel list...')}>\n <Text style={[styles.retryText, { color: black }, retryText]}>⟳</Text>\n </LoadingErrorWrapper>\n );\n case 'message':\n return (\n <LoadingErrorWrapper\n onPress={retry}\n text={t('Error loading messages for this channel...')}\n />\n );\n default:\n return <LoadingErrorWrapper text={t('Error loading')} />;\n }\n};\n\nLoadingErrorIndicator.displayName = 'LoadingErrorIndicator{loadingErrorIndicator}';\n"]}
1
+ {"version":3,"sources":["LoadingErrorIndicator.tsx"],"names":["styles","StyleSheet","create","container","alignItems","height","justifyContent","width","errorText","fontSize","fontWeight","marginTop","retryText","LoadingErrorWrapper","props","children","onPress","text","theme","accent_red","colors","loadingErrorIndicator","color","LoadingErrorIndicator","listType","retry","black","t","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { StyleSheet, Text, TouchableOpacity } from 'react-native';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../contexts/translationContext/TranslationContext';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n errorText: {\n fontSize: 14,\n fontWeight: '600',\n marginTop: 20,\n },\n retryText: {\n fontSize: 30,\n fontWeight: '600',\n },\n});\n\ntype LoadingErrorWrapperProps = {\n text: string;\n onPress?: () => void;\n};\n\nconst LoadingErrorWrapper: React.FC<LoadingErrorWrapperProps> = (props) => {\n const { children, onPress, text } = props;\n\n const {\n theme: {\n colors: { accent_red },\n loadingErrorIndicator: { container, errorText },\n },\n } = useTheme();\n\n return (\n <TouchableOpacity onPress={onPress} style={[styles.container, container]}>\n <Text style={[styles.errorText, { color: accent_red }, errorText]} testID='loading-error'>\n {text}\n </Text>\n {children}\n </TouchableOpacity>\n );\n};\n\nexport type LoadingErrorProps = {\n error?: boolean | Error;\n listType?: 'channel' | 'message' | 'default';\n loadNextPage?: () => Promise<void>;\n retry?: () => void;\n};\n\nexport const LoadingErrorIndicator: React.FC<LoadingErrorProps> = (props) => {\n const { listType, retry = () => null } = props;\n\n const {\n theme: {\n colors: { black },\n loadingErrorIndicator: { retryText },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n switch (listType) {\n case 'channel':\n return (\n <LoadingErrorWrapper onPress={retry} text={t('Error loading channel list...')}>\n <Text style={[styles.retryText, { color: black }, retryText]}>⟳</Text>\n </LoadingErrorWrapper>\n );\n case 'message':\n return (\n <LoadingErrorWrapper\n onPress={retry}\n text={t('Error loading messages for this channel...')}\n />\n );\n default:\n return <LoadingErrorWrapper text={t('Error loading')} />;\n }\n};\n\nLoadingErrorIndicator.displayName = 'LoadingErrorIndicator{loadingErrorIndicator}';\n"]}