@kesha-antonov/react-native-chat 4.1.0

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 (263) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +1087 -0
  3. package/lib/Actions.d.ts +16 -0
  4. package/lib/Actions.d.ts.map +1 -0
  5. package/lib/Actions.js +64 -0
  6. package/lib/Actions.js.map +1 -0
  7. package/lib/Avatar.d.ts +19 -0
  8. package/lib/Avatar.d.ts.map +1 -0
  9. package/lib/Avatar.js +93 -0
  10. package/lib/Avatar.js.map +1 -0
  11. package/lib/Bubble/index.d.ts +6 -0
  12. package/lib/Bubble/index.d.ts.map +1 -0
  13. package/lib/Bubble/index.js +391 -0
  14. package/lib/Bubble/index.js.map +1 -0
  15. package/lib/Bubble/styles.d.ts +57 -0
  16. package/lib/Bubble/styles.d.ts.map +1 -0
  17. package/lib/Bubble/styles.js +59 -0
  18. package/lib/Bubble/styles.js.map +1 -0
  19. package/lib/Bubble/types.d.ts +62 -0
  20. package/lib/Bubble/types.d.ts.map +1 -0
  21. package/lib/Bubble/types.js +2 -0
  22. package/lib/Bubble/types.js.map +1 -0
  23. package/lib/Chat/index.d.ts +10 -0
  24. package/lib/Chat/index.d.ts.map +1 -0
  25. package/lib/Chat/index.js +243 -0
  26. package/lib/Chat/index.js.map +1 -0
  27. package/lib/Chat/styles.d.ts +13 -0
  28. package/lib/Chat/styles.d.ts.map +1 -0
  29. package/lib/Chat/styles.js +13 -0
  30. package/lib/Chat/styles.js.map +1 -0
  31. package/lib/Chat/types.d.ts +102 -0
  32. package/lib/Chat/types.d.ts.map +1 -0
  33. package/lib/Chat/types.js +2 -0
  34. package/lib/Chat/types.js.map +1 -0
  35. package/lib/ChatAvatar.d.ts +12 -0
  36. package/lib/ChatAvatar.d.ts.map +1 -0
  37. package/lib/ChatAvatar.js +100 -0
  38. package/lib/ChatAvatar.js.map +1 -0
  39. package/lib/ChatContext.d.ts +12 -0
  40. package/lib/ChatContext.d.ts.map +1 -0
  41. package/lib/ChatContext.js +10 -0
  42. package/lib/ChatContext.js.map +1 -0
  43. package/lib/Color.d.ts +18 -0
  44. package/lib/Color.d.ts.map +1 -0
  45. package/lib/Color.js +18 -0
  46. package/lib/Color.js.map +1 -0
  47. package/lib/Composer.d.ts +9 -0
  48. package/lib/Composer.d.ts.map +1 -0
  49. package/lib/Composer.js +63 -0
  50. package/lib/Composer.js.map +1 -0
  51. package/lib/Constant.d.ts +8 -0
  52. package/lib/Constant.d.ts.map +1 -0
  53. package/lib/Constant.js +8 -0
  54. package/lib/Constant.js.map +1 -0
  55. package/lib/Day/index.d.ts +5 -0
  56. package/lib/Day/index.d.ts.map +1 -0
  57. package/lib/Day/index.js +39 -0
  58. package/lib/Day/index.js.map +1 -0
  59. package/lib/Day/styles.d.ts +21 -0
  60. package/lib/Day/styles.d.ts.map +1 -0
  61. package/lib/Day/styles.js +22 -0
  62. package/lib/Day/styles.js.map +1 -0
  63. package/lib/Day/types.d.ts +17 -0
  64. package/lib/Day/types.d.ts.map +1 -0
  65. package/lib/Day/types.js +2 -0
  66. package/lib/Day/types.js.map +1 -0
  67. package/lib/InputToolbar.d.ts +36 -0
  68. package/lib/InputToolbar.d.ts.map +1 -0
  69. package/lib/InputToolbar.js +108 -0
  70. package/lib/InputToolbar.js.map +1 -0
  71. package/lib/LoadEarlierMessages.d.ts +17 -0
  72. package/lib/LoadEarlierMessages.d.ts.map +1 -0
  73. package/lib/LoadEarlierMessages.js +44 -0
  74. package/lib/LoadEarlierMessages.js.map +1 -0
  75. package/lib/Message/index.d.ts +6 -0
  76. package/lib/Message/index.d.ts.map +1 -0
  77. package/lib/Message/index.js +180 -0
  78. package/lib/Message/index.js.map +1 -0
  79. package/lib/Message/styles.d.ts +18 -0
  80. package/lib/Message/styles.d.ts.map +1 -0
  81. package/lib/Message/styles.js +18 -0
  82. package/lib/Message/styles.js.map +1 -0
  83. package/lib/Message/types.d.ts +28 -0
  84. package/lib/Message/types.d.ts.map +1 -0
  85. package/lib/Message/types.js +2 -0
  86. package/lib/Message/types.js.map +1 -0
  87. package/lib/MessageAudio.d.ts +3 -0
  88. package/lib/MessageAudio.d.ts.map +1 -0
  89. package/lib/MessageAudio.js +24 -0
  90. package/lib/MessageAudio.js.map +1 -0
  91. package/lib/MessageImage.d.ts +12 -0
  92. package/lib/MessageImage.d.ts.map +1 -0
  93. package/lib/MessageImage.js +164 -0
  94. package/lib/MessageImage.js.map +1 -0
  95. package/lib/MessageReply.d.ts +15 -0
  96. package/lib/MessageReply.d.ts.map +1 -0
  97. package/lib/MessageReply.js +102 -0
  98. package/lib/MessageReply.js.map +1 -0
  99. package/lib/MessageText.d.ts +24 -0
  100. package/lib/MessageText.d.ts.map +1 -0
  101. package/lib/MessageText.js +51 -0
  102. package/lib/MessageText.js.map +1 -0
  103. package/lib/MessageVideo.d.ts +3 -0
  104. package/lib/MessageVideo.d.ts.map +1 -0
  105. package/lib/MessageVideo.js +24 -0
  106. package/lib/MessageVideo.js.map +1 -0
  107. package/lib/MessagesContainer/components/DayAnimated/debug.d.ts +8 -0
  108. package/lib/MessagesContainer/components/DayAnimated/debug.d.ts.map +1 -0
  109. package/lib/MessagesContainer/components/DayAnimated/debug.js +38 -0
  110. package/lib/MessagesContainer/components/DayAnimated/debug.js.map +1 -0
  111. package/lib/MessagesContainer/components/DayAnimated/index.d.ts +5 -0
  112. package/lib/MessagesContainer/components/DayAnimated/index.d.ts.map +1 -0
  113. package/lib/MessagesContainer/components/DayAnimated/index.js +123 -0
  114. package/lib/MessagesContainer/components/DayAnimated/index.js.map +1 -0
  115. package/lib/MessagesContainer/components/DayAnimated/styles.d.ts +12 -0
  116. package/lib/MessagesContainer/components/DayAnimated/styles.d.ts.map +1 -0
  117. package/lib/MessagesContainer/components/DayAnimated/styles.js +12 -0
  118. package/lib/MessagesContainer/components/DayAnimated/styles.js.map +1 -0
  119. package/lib/MessagesContainer/components/DayAnimated/types.d.ts +22 -0
  120. package/lib/MessagesContainer/components/DayAnimated/types.d.ts.map +1 -0
  121. package/lib/MessagesContainer/components/DayAnimated/types.js +2 -0
  122. package/lib/MessagesContainer/components/DayAnimated/types.js.map +1 -0
  123. package/lib/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.d.ts +4 -0
  124. package/lib/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.d.ts.map +1 -0
  125. package/lib/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.js +37 -0
  126. package/lib/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.js.map +1 -0
  127. package/lib/MessagesContainer/components/Item/index.d.ts +6 -0
  128. package/lib/MessagesContainer/components/Item/index.d.ts.map +1 -0
  129. package/lib/MessagesContainer/components/Item/index.js +86 -0
  130. package/lib/MessagesContainer/components/Item/index.js.map +1 -0
  131. package/lib/MessagesContainer/components/Item/types.d.ts +22 -0
  132. package/lib/MessagesContainer/components/Item/types.d.ts.map +1 -0
  133. package/lib/MessagesContainer/components/Item/types.js +2 -0
  134. package/lib/MessagesContainer/components/Item/types.js.map +1 -0
  135. package/lib/MessagesContainer/components/dayLayout.d.ts +10 -0
  136. package/lib/MessagesContainer/components/dayLayout.d.ts.map +1 -0
  137. package/lib/MessagesContainer/components/dayLayout.js +37 -0
  138. package/lib/MessagesContainer/components/dayLayout.js.map +1 -0
  139. package/lib/MessagesContainer/index.d.ts +6 -0
  140. package/lib/MessagesContainer/index.d.ts.map +1 -0
  141. package/lib/MessagesContainer/index.js +308 -0
  142. package/lib/MessagesContainer/index.js.map +1 -0
  143. package/lib/MessagesContainer/styles.d.ts +55 -0
  144. package/lib/MessagesContainer/styles.d.ts.map +1 -0
  145. package/lib/MessagesContainer/styles.js +42 -0
  146. package/lib/MessagesContainer/styles.js.map +1 -0
  147. package/lib/MessagesContainer/types.d.ts +91 -0
  148. package/lib/MessagesContainer/types.d.ts.map +1 -0
  149. package/lib/MessagesContainer/types.js +10 -0
  150. package/lib/MessagesContainer/types.js.map +1 -0
  151. package/lib/Models.d.ts +67 -0
  152. package/lib/Models.d.ts.map +1 -0
  153. package/lib/Models.js +2 -0
  154. package/lib/Models.js.map +1 -0
  155. package/lib/QuickReplies.d.ts +16 -0
  156. package/lib/QuickReplies.d.ts.map +1 -0
  157. package/lib/QuickReplies.js +107 -0
  158. package/lib/QuickReplies.js.map +1 -0
  159. package/lib/Reactions/MessageReactions.d.ts +5 -0
  160. package/lib/Reactions/MessageReactions.d.ts.map +1 -0
  161. package/lib/Reactions/MessageReactions.js +83 -0
  162. package/lib/Reactions/MessageReactions.js.map +1 -0
  163. package/lib/Reactions/ReactionPicker.d.ts +10 -0
  164. package/lib/Reactions/ReactionPicker.d.ts.map +1 -0
  165. package/lib/Reactions/ReactionPicker.js +84 -0
  166. package/lib/Reactions/ReactionPicker.js.map +1 -0
  167. package/lib/Reactions/index.d.ts +6 -0
  168. package/lib/Reactions/index.d.ts.map +1 -0
  169. package/lib/Reactions/index.js +6 -0
  170. package/lib/Reactions/index.js.map +1 -0
  171. package/lib/Reactions/types.d.ts +79 -0
  172. package/lib/Reactions/types.d.ts.map +1 -0
  173. package/lib/Reactions/types.js +2 -0
  174. package/lib/Reactions/types.js.map +1 -0
  175. package/lib/Reply/index.d.ts +2 -0
  176. package/lib/Reply/index.d.ts.map +1 -0
  177. package/lib/Reply/index.js +2 -0
  178. package/lib/Reply/index.js.map +1 -0
  179. package/lib/Reply/types.d.ts +72 -0
  180. package/lib/Reply/types.d.ts.map +1 -0
  181. package/lib/Reply/types.js +2 -0
  182. package/lib/Reply/types.js.map +1 -0
  183. package/lib/ReplyPreview.d.ts +14 -0
  184. package/lib/ReplyPreview.d.ts.map +1 -0
  185. package/lib/ReplyPreview.js +94 -0
  186. package/lib/ReplyPreview.js.map +1 -0
  187. package/lib/Send.d.ts +19 -0
  188. package/lib/Send.d.ts.map +1 -0
  189. package/lib/Send.js +56 -0
  190. package/lib/Send.js.map +1 -0
  191. package/lib/SystemMessage.d.ts +14 -0
  192. package/lib/SystemMessage.d.ts.map +1 -0
  193. package/lib/SystemMessage.js +42 -0
  194. package/lib/SystemMessage.js.map +1 -0
  195. package/lib/Time.d.ts +12 -0
  196. package/lib/Time.d.ts.map +1 -0
  197. package/lib/Time.js +38 -0
  198. package/lib/Time.js.map +1 -0
  199. package/lib/TypingIndicator/index.d.ts +5 -0
  200. package/lib/TypingIndicator/index.d.ts.map +1 -0
  201. package/lib/TypingIndicator/index.js +94 -0
  202. package/lib/TypingIndicator/index.js.map +1 -0
  203. package/lib/TypingIndicator/styles.d.ts +21 -0
  204. package/lib/TypingIndicator/styles.d.ts.map +1 -0
  205. package/lib/TypingIndicator/styles.js +22 -0
  206. package/lib/TypingIndicator/styles.js.map +1 -0
  207. package/lib/TypingIndicator/types.d.ts +6 -0
  208. package/lib/TypingIndicator/types.d.ts.map +1 -0
  209. package/lib/TypingIndicator/types.js +2 -0
  210. package/lib/TypingIndicator/types.js.map +1 -0
  211. package/lib/components/MessageReply.d.ts +29 -0
  212. package/lib/components/MessageReply.d.ts.map +1 -0
  213. package/lib/components/MessageReply.js +87 -0
  214. package/lib/components/MessageReply.js.map +1 -0
  215. package/lib/components/ReplyPreview.d.ts +17 -0
  216. package/lib/components/ReplyPreview.d.ts.map +1 -0
  217. package/lib/components/ReplyPreview.js +148 -0
  218. package/lib/components/ReplyPreview.js.map +1 -0
  219. package/lib/components/StreamingCursor.d.ts +15 -0
  220. package/lib/components/StreamingCursor.d.ts.map +1 -0
  221. package/lib/components/StreamingCursor.js +16 -0
  222. package/lib/components/StreamingCursor.js.map +1 -0
  223. package/lib/components/TouchableOpacity.d.ts +9 -0
  224. package/lib/components/TouchableOpacity.d.ts.map +1 -0
  225. package/lib/components/TouchableOpacity.js +47 -0
  226. package/lib/components/TouchableOpacity.js.map +1 -0
  227. package/lib/hooks/useColorScheme.d.ts +8 -0
  228. package/lib/hooks/useColorScheme.d.ts.map +1 -0
  229. package/lib/hooks/useColorScheme.js +17 -0
  230. package/lib/hooks/useColorScheme.js.map +1 -0
  231. package/lib/hooks/useStreamingMessages.d.ts +42 -0
  232. package/lib/hooks/useStreamingMessages.d.ts.map +1 -0
  233. package/lib/hooks/useStreamingMessages.js +96 -0
  234. package/lib/hooks/useStreamingMessages.js.map +1 -0
  235. package/lib/hooks/useUpdateLayoutEffect.d.ts +9 -0
  236. package/lib/hooks/useUpdateLayoutEffect.d.ts.map +1 -0
  237. package/lib/hooks/useUpdateLayoutEffect.js +17 -0
  238. package/lib/hooks/useUpdateLayoutEffect.js.map +1 -0
  239. package/lib/index.d.ts +35 -0
  240. package/lib/index.d.ts.map +1 -0
  241. package/lib/index.js +34 -0
  242. package/lib/index.js.map +1 -0
  243. package/lib/linkParser.d.ts +39 -0
  244. package/lib/linkParser.d.ts.map +1 -0
  245. package/lib/linkParser.js +154 -0
  246. package/lib/linkParser.js.map +1 -0
  247. package/lib/logging.d.ts +3 -0
  248. package/lib/logging.d.ts.map +1 -0
  249. package/lib/logging.js +5 -0
  250. package/lib/logging.js.map +1 -0
  251. package/lib/styles.d.ts +14 -0
  252. package/lib/styles.d.ts.map +1 -0
  253. package/lib/styles.js +23 -0
  254. package/lib/styles.js.map +1 -0
  255. package/lib/types.d.ts +19 -0
  256. package/lib/types.d.ts.map +1 -0
  257. package/lib/types.js +2 -0
  258. package/lib/types.js.map +1 -0
  259. package/lib/utils.d.ts +8 -0
  260. package/lib/utils.d.ts.map +1 -0
  261. package/lib/utils.js +105 -0
  262. package/lib/utils.js.map +1 -0
  263. package/package.json +119 -0
@@ -0,0 +1,102 @@
1
+ import React, { useMemo, useCallback } from 'react';
2
+ import { StyleSheet, View, Pressable, Image, Text } from 'react-native';
3
+ import { Color } from './Color';
4
+ import { getStyleWithPosition } from './styles';
5
+ export function MessageReply({ currentMessage, position = 'left', containerStyle, contentContainerStyle, imageStyle, usernameStyle, textStyle, onPress: onPressProp, }) {
6
+ const handlePress = useCallback(() => {
7
+ if (!onPressProp || !currentMessage.replyMessage)
8
+ return;
9
+ onPressProp(currentMessage.replyMessage);
10
+ }, [onPressProp, currentMessage.replyMessage]);
11
+ const containerStyleMemo = useMemo(() => [
12
+ styles.container,
13
+ getStyleWithPosition(styles, 'container', position),
14
+ containerStyle?.[position],
15
+ ], [position, containerStyle]);
16
+ const contentContainerStyleMemo = useMemo(() => [
17
+ styles.contentContainer,
18
+ contentContainerStyle?.[position],
19
+ ], [position, contentContainerStyle]);
20
+ const imageStyleMemo = useMemo(() => [
21
+ styles.image,
22
+ imageStyle,
23
+ ], [imageStyle]);
24
+ const usernameStyleMemo = useMemo(() => [
25
+ styles.username,
26
+ getStyleWithPosition(styles, 'username', position),
27
+ usernameStyle,
28
+ ], [position, usernameStyle]);
29
+ const textStyleMemo = useMemo(() => [
30
+ styles.text,
31
+ getStyleWithPosition(styles, 'text', position),
32
+ textStyle,
33
+ ], [position, textStyle]);
34
+ if (!currentMessage.replyMessage)
35
+ return null;
36
+ const { replyMessage } = currentMessage;
37
+ return (<Pressable onPress={handlePress} style={containerStyleMemo}>
38
+ <View style={contentContainerStyleMemo}>
39
+ {replyMessage.image && (<Image source={{ uri: replyMessage.image }} style={imageStyleMemo}/>)}
40
+ <View style={styles.textContainer}>
41
+ <Text style={usernameStyleMemo} numberOfLines={1}>
42
+ {replyMessage.user?.name || 'User'}
43
+ </Text>
44
+ <Text numberOfLines={1} style={textStyleMemo}>
45
+ {replyMessage.text || (replyMessage.image ? 'Photo' : (replyMessage.audio ? 'Audio' : 'Message'))}
46
+ </Text>
47
+ </View>
48
+ </View>
49
+ </Pressable>);
50
+ }
51
+ const styles = StyleSheet.create({
52
+ container: {
53
+ marginHorizontal: 10,
54
+ marginTop: 5,
55
+ marginBottom: 2,
56
+ padding: 8,
57
+ borderRadius: 8,
58
+ borderLeftWidth: 3,
59
+ borderLeftColor: Color.defaultBlue,
60
+ minWidth: 150,
61
+ },
62
+ container_left: {
63
+ backgroundColor: 'rgba(0, 0, 0, 0.05)',
64
+ },
65
+ container_right: {
66
+ backgroundColor: 'rgba(255, 255, 255, 0.15)',
67
+ },
68
+ contentContainer: {
69
+ flexDirection: 'row',
70
+ alignItems: 'center',
71
+ },
72
+ image: {
73
+ width: 36,
74
+ height: 36,
75
+ borderRadius: 4,
76
+ marginRight: 8,
77
+ },
78
+ textContainer: {
79
+ flex: 1,
80
+ },
81
+ username: {
82
+ fontSize: 13,
83
+ fontWeight: '600',
84
+ marginBottom: 2,
85
+ },
86
+ username_left: {
87
+ color: Color.defaultBlue,
88
+ },
89
+ username_right: {
90
+ color: Color.white,
91
+ },
92
+ text: {
93
+ fontSize: 13,
94
+ },
95
+ text_left: {
96
+ color: Color.black,
97
+ },
98
+ text_right: {
99
+ color: 'rgba(255, 255, 255, 0.8)',
100
+ },
101
+ });
102
+ //# sourceMappingURL=MessageReply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageReply.js","sourceRoot":"","sources":["../src/MessageReply.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { StyleProp, ViewStyle, TextStyle } from 'react-native';
3
+ import { LinkMatcher, LinkType } from './linkParser';
4
+ import { LeftRightStyle, IMessage } from './Models';
5
+ export type MessageTextProps<TMessage extends IMessage> = {
6
+ position?: 'left' | 'right';
7
+ currentMessage: TMessage;
8
+ containerStyle?: LeftRightStyle<ViewStyle>;
9
+ textStyle?: LeftRightStyle<TextStyle>;
10
+ linkStyle?: LeftRightStyle<TextStyle>;
11
+ customTextStyle?: StyleProp<TextStyle>;
12
+ onPress?: (message: TMessage, url: string, type: LinkType) => void;
13
+ matchers?: LinkMatcher[];
14
+ email?: boolean;
15
+ phone?: boolean;
16
+ url?: boolean;
17
+ hashtag?: boolean;
18
+ mention?: boolean;
19
+ hashtagUrl?: string;
20
+ mentionUrl?: string;
21
+ stripPrefix?: boolean;
22
+ };
23
+ export declare function MessageText<TMessage extends IMessage>({ currentMessage, position, containerStyle, textStyle, linkStyle: linkStyleProp, customTextStyle, onPress: onPressProp, matchers, email, phone, url, hashtag, mention, hashtagUrl, mentionUrl, stripPrefix, }: MessageTextProps<TMessage>): React.JSX.Element;
24
+ //# sourceMappingURL=MessageText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageText.d.ts","sourceRoot":"","sources":["../src/MessageText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AACnD,OAAO,EAEL,SAAS,EACT,SAAS,EACT,SAAS,EAEH,MAAM,cAAc,CAAA;AAG5B,OAAO,EAAc,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnD,MAAM,MAAM,gBAAgB,CAAC,QAAQ,SAAS,QAAQ,IAAI;IACxD,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3B,cAAc,EAAE,QAAQ,CAAA;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IAC1C,SAAS,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IACrC,SAAS,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IACrC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IACtC,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,QAAQ,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,QAAQ,KACX,IAAI,CAAA;IAET,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,wBAAgB,WAAW,CAAC,QAAQ,SAAS,QAAQ,EAAE,EACrD,cAAc,EACd,QAAiB,EACjB,cAAc,EACd,SAAS,EACT,SAAS,EAAE,aAAa,EACxB,eAAe,EACf,OAAO,EAAE,WAAW,EACpB,QAAQ,EACR,KAAY,EACZ,KAAY,EACZ,GAAU,EACV,OAAe,EACf,OAAe,EACf,UAAU,EACV,UAAU,EACV,WAAmB,GACpB,EAAE,gBAAgB,CAAC,QAAQ,CAAC,qBAmD5B"}
@@ -0,0 +1,51 @@
1
+ import React, { useMemo, useCallback } from 'react';
2
+ import { StyleSheet, View, Text } from 'react-native';
3
+ import { StreamingCursor } from './components/StreamingCursor';
4
+ import { LinkParser } from './linkParser';
5
+ export function MessageText({ currentMessage, position = 'left', containerStyle, textStyle, linkStyle: linkStyleProp, customTextStyle, onPress: onPressProp, matchers, email = true, phone = true, url = true, hashtag = false, mention = false, hashtagUrl, mentionUrl, stripPrefix = false, }) {
6
+ const linkStyle = useMemo(() => StyleSheet.flatten([
7
+ styles.link,
8
+ linkStyleProp?.[position],
9
+ ]), [position, linkStyleProp]);
10
+ const style = useMemo(() => [
11
+ styles[`text_${position}`],
12
+ textStyle?.[position],
13
+ customTextStyle,
14
+ ], [position, textStyle, customTextStyle]);
15
+ const handlePress = useCallback((url, type) => {
16
+ onPressProp?.(currentMessage, url, type);
17
+ }, [onPressProp, currentMessage]);
18
+ const isStreaming = !!currentMessage?.streaming;
19
+ const parsed = (<LinkParser text={currentMessage.text} matchers={matchers} email={email} phone={phone} url={url} hashtag={hashtag} mention={mention} hashtagUrl={hashtagUrl} mentionUrl={mentionUrl} stripPrefix={stripPrefix} linkStyle={linkStyle} textStyle={style} onPress={onPressProp ? handlePress : undefined} TextComponent={Text}/>);
20
+ return (<View style={[styles.container, containerStyle?.[position]]}>
21
+ {isStreaming
22
+ ? (
23
+ // Wrap in a Text so the caret flows inline after the last word and
24
+ // inherits the bubble text color.
25
+ <Text style={style}>
26
+ {parsed}
27
+ <StreamingCursor />
28
+ </Text>)
29
+ : parsed}
30
+ </View>);
31
+ }
32
+ const styles = StyleSheet.create({
33
+ container: {
34
+ marginVertical: 5,
35
+ marginHorizontal: 10,
36
+ },
37
+ text: {
38
+ fontSize: 16,
39
+ lineHeight: 20,
40
+ },
41
+ text_left: {
42
+ color: 'black',
43
+ },
44
+ text_right: {
45
+ color: 'white',
46
+ },
47
+ link: {
48
+ textDecorationLine: 'underline',
49
+ },
50
+ });
51
+ //# sourceMappingURL=MessageText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageText.js","sourceRoot":"","sources":["../src/MessageText.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare function MessageVideo(): React.JSX.Element;
3
+ //# sourceMappingURL=MessageVideo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageVideo.d.ts","sourceRoot":"","sources":["../src/MessageVideo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AActC,wBAAgB,YAAY,sBAa3B"}
@@ -0,0 +1,24 @@
1
+ import React, { useMemo } from 'react';
2
+ import { View, StyleSheet, Text } from 'react-native';
3
+ import { Color } from './Color';
4
+ const styles = StyleSheet.create({
5
+ container: {
6
+ padding: 10,
7
+ },
8
+ text: {
9
+ color: Color.alizarin,
10
+ fontWeight: '600',
11
+ },
12
+ });
13
+ export function MessageVideo() {
14
+ const content = useMemo(() => (<View style={styles.container}>
15
+ <Text style={styles.text}>
16
+ {'Video is not implemented by Chat.'}
17
+ </Text>
18
+ <Text style={styles.text}>
19
+ {'\nYou need to provide your own implementation by using renderMessageVideo prop.'}
20
+ </Text>
21
+ </View>), []);
22
+ return content;
23
+ }
24
+ //# sourceMappingURL=MessageVideo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageVideo.js","sourceRoot":"","sources":["../src/MessageVideo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAG,IAAI,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,OAAO,EAAE,EAAE;KACZ;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,UAAU,EAAE,KAAK;KAClB;CACF,CAAC,CAAA;AAEF,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAC5B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CACvB;QAAA,CAAC,mCAAmC,CACtC;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CACvB;QAAA,CAAC,iFAAiF,CACpF;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,IAAI,CAAC,CACR,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export declare const DAY_DEBUG: {
3
+ timeScale: number;
4
+ forceOpacity: boolean;
5
+ overlay: boolean;
6
+ };
7
+ export declare function useDayDebugOverlay(select: () => string, deps: unknown[]): React.ReactElement | null;
8
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/debug.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAMvC,eAAO,MAAM,SAAS;;;;CAQrB,CAAA;AAID,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAgBpG"}
@@ -0,0 +1,38 @@
1
+ import React, { useState } from 'react';
2
+ import { StyleSheet, Text } from 'react-native';
3
+ import { runOnJS, useAnimatedReaction } from 'react-native-reanimated';
4
+ // Debug switches for the animated day header. All OFF/1 for production - flip them
5
+ // here when working on the animation.
6
+ export const DAY_DEBUG = {
7
+ // Multiply the fade durations/delay so the fades can be captured frame-by-frame.
8
+ timeScale: 1,
9
+ // Keep the floating header at full opacity (ignore the scroll fade) so the
10
+ // slide/push geometry can be studied independently of the fade.
11
+ forceOpacity: false,
12
+ // Render an on-screen readout of the sticky worklet values.
13
+ overlay: false,
14
+ };
15
+ // On-screen readout for the header, driven by a worklet `select` that returns the
16
+ // readout string. Returns null (and runs nothing) when DAY_DEBUG.overlay is off.
17
+ export function useDayDebugOverlay(select, deps) {
18
+ const [text, setText] = useState('');
19
+ useAnimatedReaction(() => (DAY_DEBUG.overlay ? select() : ''), value => {
20
+ if (value)
21
+ runOnJS(setText)(value);
22
+ }, deps);
23
+ if (!DAY_DEBUG.overlay)
24
+ return null;
25
+ return <Text style={styles.overlay}>{text}</Text>;
26
+ }
27
+ const styles = StyleSheet.create({
28
+ overlay: {
29
+ position: 'absolute',
30
+ top: 2,
31
+ left: 4,
32
+ fontSize: 11,
33
+ color: 'red',
34
+ zIndex: 9999,
35
+ backgroundColor: 'rgba(255,255,255,0.8)',
36
+ },
37
+ });
38
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/debug.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAEtE,mFAAmF;AACnF,sCAAsC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,iFAAiF;IACjF,SAAS,EAAE,CAAC;IACZ,2EAA2E;IAC3E,gEAAgE;IAChE,YAAY,EAAE,KAAK;IACnB,4DAA4D;IAC5D,OAAO,EAAE,KAAK;CACf,CAAA;AAED,kFAAkF;AAClF,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAE,MAAoB,EAAE,IAAe;IACvE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEpC,mBAAmB,CACjB,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACzC,KAAK,CAAC,EAAE;QACN,IAAI,KAAK;YACP,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC,EACD,IAAI,CACL,CAAA;IAED,IAAI,CAAC,SAAS,CAAC,OAAO;QACpB,OAAO,IAAI,CAAA;IAEb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE;QACP,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,uBAAuB;KACzC;CACF,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { DayAnimatedProps } from './types';
3
+ export * from './types';
4
+ export declare const DayAnimated: ({ scrolledY, daysPositions, listHeight, isScrollActive, floatingRenderedDate, renderDay, isLoading, ...rest }: DayAnimatedProps) => React.JSX.Element | null;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAQxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG1C,cAAc,SAAS,CAAA;AAEvB,eAAO,MAAM,WAAW,GAAI,+GAA+G,gBAAgB,6BA6J1J,CAAA"}
@@ -0,0 +1,123 @@
1
+ import React, { useEffect, useMemo, useState, useCallback } from 'react';
2
+ import Animated, { useAnimatedStyle, useDerivedValue, useSharedValue, useAnimatedReaction, runOnJS } from 'react-native-reanimated';
3
+ import { Day } from '../../../Day';
4
+ import stylesCommon from '../../../styles';
5
+ import { DAY_HANDOFF_OFFSET, DAY_MARGIN_TOP, DAY_PIN_OFFSET, DAY_PUSH_GAP, dayPositionScreenTop } from '../dayLayout';
6
+ import { DAY_DEBUG, useDayDebugOverlay } from './debug';
7
+ import styles from './styles';
8
+ import { useScrollGatedOpacity } from './useScrollGatedOpacity';
9
+ export * from './types';
10
+ export const DayAnimated = ({ scrolledY, daysPositions, listHeight, isScrollActive, floatingRenderedDate, renderDay, isLoading, ...rest }) => {
11
+ const containerHeight = useSharedValue(0);
12
+ const isLoadingAnim = useSharedValue(isLoading);
13
+ // Telegram only shows the floating date while scrolling; this opacity fades in on
14
+ // scroll start and out after the gesture fully ends.
15
+ const opacity = useScrollGatedOpacity(isScrollActive);
16
+ // Sort newest day first. Sorting by createdAt (stable) rather than measured y
17
+ // keeps the order deterministic even while cells are (re)measured mid-scroll, so
18
+ // the stuck-day selection below can't briefly jump to the wrong day.
19
+ const daysPositionsArray = useDerivedValue(() => Object.values(daysPositions.value).sort((a, b) => {
20
+ 'worklet';
21
+ return b.createdAt - a.createdAt;
22
+ }));
23
+ const [createdAt, setCreatedAt] = useState();
24
+ // Telegram-style sticky day header (iOS section-header behaviour).
25
+ //
26
+ // The list is inverted: older days sit higher on screen, newer days lower.
27
+ // `daysPositionsArray` is sorted by createdAt (newest first), so index 0 is the
28
+ // newest day. Each separator's on-screen top edge is `dayPositionScreenTop`; the
29
+ // separator's pill renders DAY_MARGIN_TOP below that, and the floating header
30
+ // overrides that margin to 0, so its pinned pill (top = DAY_PIN_OFFSET) lines up
31
+ // with an inline separator at separatorScreenTop === DAY_HANDOFF_OFFSET.
32
+ //
33
+ // A day becomes "stuck" (shown by the floating header) the instant its separator
34
+ // reaches the handoff line. At that same pixel the inline separator hard-cuts off
35
+ // (see Item) and the floating hard-cuts on - the date hands off floating<->inline
36
+ // with no fade and no duplicate. The floating is then positioned off the next
37
+ // (newer) day's separator so it slides pixel by pixel: down from the top edge as
38
+ // an older day takes over (scrolling up), or up and off as a newer day rises
39
+ // (scrolling down), keeping a DAY_PUSH_GAP margin between the two pills.
40
+ const sticky = useDerivedValue(() => {
41
+ 'worklet';
42
+ const days = daysPositionsArray.value;
43
+ const n = days.length;
44
+ if (n === 0)
45
+ return { top: DAY_PIN_OFFSET, createdAt: undefined, curSep: NaN };
46
+ const scrolledTop = listHeight.value + scrolledY.value;
47
+ let idx = n - 1;
48
+ for (let i = 0; i < n; i++)
49
+ if (dayPositionScreenTop(scrolledTop, days[i]) <= DAY_HANDOFF_OFFSET) {
50
+ idx = i;
51
+ break;
52
+ }
53
+ const current = days[idx];
54
+ const curSep = dayPositionScreenTop(scrolledTop, current);
55
+ if (isLoadingAnim.value)
56
+ return { top: -containerHeight.value, createdAt: current.createdAt, curSep };
57
+ let top = DAY_PIN_OFFSET;
58
+ if (idx > 0) {
59
+ const nextSep = dayPositionScreenTop(scrolledTop, days[idx - 1]);
60
+ top = Math.min(DAY_PIN_OFFSET, nextSep + DAY_MARGIN_TOP - containerHeight.value - DAY_PUSH_GAP);
61
+ }
62
+ return { top, createdAt: current.createdAt, curSep };
63
+ }, [daysPositionsArray, listHeight, scrolledY, containerHeight, isLoadingAnim]);
64
+ const style = useAnimatedStyle(() => ({
65
+ top: sticky.value.top,
66
+ }), [sticky]);
67
+ const contentStyle = useAnimatedStyle(() => {
68
+ // The scroll-gated fade (see useScrollGatedOpacity); DAY_DEBUG.forceOpacity pins
69
+ // it to 1 so the slide/push can be studied without the fade.
70
+ const fade = DAY_DEBUG.forceOpacity ? 1 : opacity.value;
71
+ // stuckGate hides the floating header when no day is actually stuck above the
72
+ // pin - i.e. at the top of history, once the oldest day's own separator drops
73
+ // back below the pin (e.g. the "Load earlier" button scrolls in). It is a hard
74
+ // step (not a fade) so the date hands off floating->inline at the same pixel
75
+ // with no fading duplicate over the loader, mirroring the inline separator's
76
+ // hard cutoff.
77
+ const stuckGate = sticky.value.curSep <= DAY_HANDOFF_OFFSET ? 1 : 0;
78
+ // renderGate hides the header while its rendered text hasn't caught up to the
79
+ // worklet's current stuck day (the ~1-frame JS-thread lag after a day change).
80
+ // The inline separator stays up during this frame and shows the correct date, so
81
+ // the header never flashes the previous date when scrolling into a newer day.
82
+ const renderGate = sticky.value.createdAt === floatingRenderedDate.value ? 1 : 0;
83
+ return { opacity: fade * stuckGate * renderGate };
84
+ }, [opacity, sticky, floatingRenderedDate]);
85
+ const handleLayout = useCallback(({ nativeEvent }) => {
86
+ containerHeight.value = nativeEvent.layout.height;
87
+ }, [containerHeight]);
88
+ useAnimatedReaction(() => sticky.value.createdAt, (value, prevValue) => {
89
+ if (value && value !== prevValue)
90
+ runOnJS(setCreatedAt)(value);
91
+ }, [sticky]);
92
+ const debugOverlay = useDayDebugOverlay(() => {
93
+ 'worklet';
94
+ const v = sticky.value;
95
+ return `top=${Math.round(v.top)} cur=${Math.round(v.curSep)} ch=${Math.round(containerHeight.value)} load=${isLoadingAnim.value ? 1 : 0}`;
96
+ }, [sticky, containerHeight, isLoadingAnim]);
97
+ useEffect(() => {
98
+ isLoadingAnim.value = isLoading;
99
+ }, [isLoadingAnim, isLoading]);
100
+ // Publish the date the header is actually rendering so the inline separators (and
101
+ // the header's own renderGate) know when the text has caught up to the worklet.
102
+ useEffect(() => {
103
+ floatingRenderedDate.value = createdAt;
104
+ }, [createdAt, floatingRenderedDate]);
105
+ const dayContent = useMemo(() => {
106
+ if (!createdAt)
107
+ return null;
108
+ return renderDay
109
+ ? renderDay({ ...rest, createdAt, isAnimated: true })
110
+ : <Day {...rest} containerStyle={[styles.dayAnimatedDayContainerStyle, rest.containerStyle]} createdAt={createdAt} isAnimated/>;
111
+ }, [createdAt, renderDay, rest]);
112
+ if (!createdAt)
113
+ return debugOverlay;
114
+ return (<>
115
+ {debugOverlay}
116
+ <Animated.View style={[stylesCommon.centerItems, styles.dayAnimated, style]} onLayout={handleLayout} pointerEvents='none'>
117
+ <Animated.View style={contentStyle} pointerEvents='none'>
118
+ {dayContent}
119
+ </Animated.View>
120
+ </Animated.View>
121
+ </>);
122
+ };
123
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ declare const _default: {
2
+ dayAnimated: {
3
+ position: "absolute";
4
+ width: "100%";
5
+ };
6
+ dayAnimatedDayContainerStyle: {
7
+ marginTop: number;
8
+ marginBottom: number;
9
+ };
10
+ };
11
+ export default _default;
12
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/styles.ts"],"names":[],"mappings":";;;;;;;;;;AAEA,wBASE"}
@@ -0,0 +1,12 @@
1
+ import { StyleSheet } from 'react-native';
2
+ export default StyleSheet.create({
3
+ dayAnimated: {
4
+ position: 'absolute',
5
+ width: '100%',
6
+ },
7
+ dayAnimatedDayContainerStyle: {
8
+ marginTop: 0,
9
+ marginBottom: 0,
10
+ },
11
+ });
12
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,eAAe,UAAU,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE;QACX,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,MAAM;KACd;IACD,4BAA4B,EAAE;QAC5B,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,CAAC;KAChB;CACF,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { DayProps } from '../../../Day';
2
+ import { DaysPositions } from '../../types';
3
+ export interface DayAnimatedProps extends Omit<DayProps, 'createdAt'> {
4
+ scrolledY: {
5
+ value: number;
6
+ };
7
+ daysPositions: {
8
+ value: DaysPositions;
9
+ };
10
+ listHeight: {
11
+ value: number;
12
+ };
13
+ isScrollActive: {
14
+ value: boolean;
15
+ };
16
+ floatingRenderedDate: {
17
+ value: number | undefined;
18
+ };
19
+ renderDay?: (props: DayProps) => React.ReactNode;
20
+ isLoading: boolean;
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;IACnE,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,aAAa,EAAE;QAAE,KAAK,EAAE,aAAa,CAAA;KAAE,CAAA;IACvC,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,cAAc,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;IAGlC,oBAAoB,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IACnD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAA;IAChD,SAAS,EAAE,OAAO,CAAA;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export declare function useScrollGatedOpacity(isScrollActive: {
2
+ value: boolean;
3
+ }): import("react-native-reanimated").SharedValue<number>;
4
+ //# sourceMappingURL=useScrollGatedOpacity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollGatedOpacity.d.ts","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.ts"],"names":[],"mappings":"AAcA,wBAAgB,qBAAqB,CAAE,cAAc,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,yDAiCxE"}
@@ -0,0 +1,37 @@
1
+ import { useCallback } from 'react';
2
+ import { runOnJS, useAnimatedReaction, useSharedValue, withTiming } from 'react-native-reanimated';
3
+ import { DAY_DEBUG } from './debug';
4
+ const FADE_IN_DURATION = 150;
5
+ const FADE_OUT_DURATION = 300;
6
+ const FADE_OUT_DELAY = 600;
7
+ // Opacity (0..1) that follows the scroll gesture, Telegram-style: the floating date
8
+ // header is hidden at rest, fades in fast when scrolling starts, stays fully opaque
9
+ // for the whole gesture (drag + momentum, including slow drags and short pauses),
10
+ // and fades out a short delay after scrolling fully stops. Driven by the
11
+ // `isScrollActive` flag (begin/end drag + momentum) rather than per-scroll-delta
12
+ // idle timers, so a pause mid-drag doesn't flicker it out and back in.
13
+ export function useScrollGatedOpacity(isScrollActive) {
14
+ const opacity = useSharedValue(0);
15
+ const fadeOutTimeoutId = useSharedValue(undefined);
16
+ const fadeOut = useCallback(() => {
17
+ 'worklet';
18
+ opacity.value = withTiming(0, { duration: FADE_OUT_DURATION * DAY_DEBUG.timeScale });
19
+ }, [opacity]);
20
+ const scheduleFadeOut = useCallback(() => {
21
+ clearTimeout(fadeOutTimeoutId.value);
22
+ fadeOutTimeoutId.value = setTimeout(fadeOut, FADE_OUT_DELAY * DAY_DEBUG.timeScale);
23
+ }, [fadeOut, fadeOutTimeoutId]);
24
+ useAnimatedReaction(() => isScrollActive.value, (active, prevActive) => {
25
+ if (active === prevActive)
26
+ return;
27
+ if (active) {
28
+ clearTimeout(fadeOutTimeoutId.value);
29
+ opacity.value = withTiming(1, { duration: FADE_IN_DURATION * DAY_DEBUG.timeScale });
30
+ }
31
+ else {
32
+ runOnJS(scheduleFadeOut)();
33
+ }
34
+ }, [isScrollActive, scheduleFadeOut, fadeOutTimeoutId]);
35
+ return opacity;
36
+ }
37
+ //# sourceMappingURL=useScrollGatedOpacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollGatedOpacity.js","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/DayAnimated/useScrollGatedOpacity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAClG,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAC5B,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAC7B,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B,oFAAoF;AACpF,oFAAoF;AACpF,kFAAkF;AAClF,yEAAyE;AACzE,iFAAiF;AACjF,uEAAuE;AACvE,MAAM,UAAU,qBAAqB,CAAE,cAAkC;IACvE,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;IACjC,MAAM,gBAAgB,GAAG,cAAc,CAA4C,SAAS,CAAC,CAAA;IAE7F,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,SAAS,CAAA;QAET,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAA;IACtF,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEpC,gBAAgB,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;IACpF,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAE/B,mBAAmB,CACjB,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAC1B,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QACrB,IAAI,MAAM,KAAK,UAAU;YACvB,OAAM;QAER,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;YACpC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAA;QACrF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,eAAe,CAAC,EAAE,CAAA;QAC5B,CAAC;IACH,CAAC,EACD,CAAC,cAAc,EAAE,eAAe,EAAE,gBAAgB,CAAC,CACpD,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { IMessage } from '../../../Models';
3
+ import { ItemProps } from './types';
4
+ export * from './types';
5
+ export declare const Item: <TMessage extends IMessage>(props: ItemProps<TMessage>) => React.JSX.Element;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/Item/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAKtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,cAAc,SAAS,CAAA;AAkFvB,eAAO,MAAM,IAAI,GAAI,QAAQ,SAAS,QAAQ,EAAE,OAAO,SAAS,CAAC,QAAQ,CAAC,sBAuCzE,CAAA"}