@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,86 @@
1
+ import React, { useMemo } from 'react';
2
+ import { View } from 'react-native';
3
+ import Animated, { useAnimatedStyle, useDerivedValue } from 'react-native-reanimated';
4
+ import { Day } from '../../../Day';
5
+ import { Message } from '../../../Message';
6
+ import { isSameDay } from '../../../utils';
7
+ import { DAY_HANDOFF_OFFSET, dayPositionScreenTop, findDayPosition } from '../dayLayout';
8
+ export * from './types';
9
+ const DayWrapper = (props) => {
10
+ const { renderDay: renderDayProp, currentMessage, previousMessage, } = props;
11
+ if (!currentMessage?.createdAt || isSameDay(currentMessage, previousMessage))
12
+ return null;
13
+ const {
14
+ /* eslint-disable @typescript-eslint/no-unused-vars */
15
+ containerStyle, onMessageLayout,
16
+ /* eslint-enable @typescript-eslint/no-unused-vars */
17
+ ...rest } = props;
18
+ return (<View>
19
+ {renderDayProp
20
+ ? renderDayProp({ ...rest, createdAt: currentMessage.createdAt, isAnimated: false })
21
+ : <Day {...rest} createdAt={currentMessage.createdAt} isAnimated={false}/>}
22
+ </View>);
23
+ };
24
+ const AnimatedDayWrapper = (props) => {
25
+ const { scrolledY, daysPositions, listHeight, floatingRenderedDate, ...rest } = props;
26
+ const createdAt = useMemo(() => new Date(props.currentMessage.createdAt).getTime(), [props.currentMessage.createdAt]);
27
+ // On-screen Y of this day's separator. Infinity (treated as below the pin, i.e.
28
+ // visible) until the day has been measured.
29
+ const separatorScreenTop = useDerivedValue(() => {
30
+ 'worklet';
31
+ const day = findDayPosition(daysPositions.value, createdAt);
32
+ if (!day)
33
+ return Infinity;
34
+ return dayPositionScreenTop(listHeight.value + scrolledY.value, day);
35
+ }, [daysPositions, listHeight, scrolledY, createdAt]);
36
+ const style = useAnimatedStyle(() => {
37
+ // The inline separator is the in-conversation date marker. It is shown while its
38
+ // day is below the handoff line, and hidden once its day is the one the floating
39
+ // header is actually rendering at the pin - a hard step (no fade) so the date
40
+ // goes floating(1) <-> inline(1) at the same pixel with no dip and no duplicate.
41
+ //
42
+ // Hiding on `floatingRenderedDate` (the header's *rendered* date) rather than on
43
+ // position alone is what kills the 1-frame flash when scrolling into a newer day:
44
+ // the worklet picks the new stuck day instantly but the header's text only
45
+ // updates ~1 frame later on the JS thread; until it does, this inline separator
46
+ // stays up and shows the correct date, so the header never flashes the old one.
47
+ const belowHandoff = separatorScreenTop.value > DAY_HANDOFF_OFFSET;
48
+ const headerShowsThisDay = floatingRenderedDate != null && floatingRenderedDate.value === createdAt;
49
+ return {
50
+ opacity: belowHandoff || !headerShowsThisDay ? 1 : 0,
51
+ };
52
+ }, [separatorScreenTop, floatingRenderedDate, createdAt]);
53
+ return (<Animated.View style={style}>
54
+ <DayWrapper {...rest}/>
55
+ </Animated.View>);
56
+ };
57
+ export const Item = (props) => {
58
+ const { renderMessage: renderMessageProp, isDayAnimationEnabled, reply,
59
+ /* eslint-disable @typescript-eslint/no-unused-vars */
60
+ scrolledY: _scrolledY, daysPositions: _daysPositions, listHeight: _listHeight,
61
+ /* eslint-enable @typescript-eslint/no-unused-vars */
62
+ ...rest } = props;
63
+ // Transform reply props for Message and Bubble
64
+ const messageProps = useMemo(() => ({
65
+ ...rest,
66
+ // Swipe to reply for Message component
67
+ swipeToReply: reply?.swipe,
68
+ // Message reply styling for Bubble component
69
+ messageReply: reply ? {
70
+ renderMessageReply: reply.renderMessageReply,
71
+ onPress: reply.onPress,
72
+ ...reply.messageStyle,
73
+ } : undefined,
74
+ }), [rest, reply]);
75
+ return (
76
+ // do not remove key. it helps to get correct position of the day container
77
+ <View key={props.currentMessage._id.toString()}>
78
+ {isDayAnimationEnabled
79
+ ? <AnimatedDayWrapper {...props}/>
80
+ : <DayWrapper {...messageProps}/>}
81
+ {renderMessageProp
82
+ ? renderMessageProp(messageProps)
83
+ : <Message {...messageProps}/>}
84
+ </View>);
85
+ };
86
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/Item/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { IMessage } from '../../../Models';
2
+ import { MessagesContainerProps, DaysPositions } from '../../types';
3
+ export interface ItemProps<TMessage extends IMessage> extends MessagesContainerProps<TMessage> {
4
+ currentMessage: TMessage;
5
+ previousMessage?: TMessage;
6
+ nextMessage?: TMessage;
7
+ position: 'left' | 'right';
8
+ scrolledY: {
9
+ value: number;
10
+ };
11
+ daysPositions: {
12
+ value: DaysPositions;
13
+ };
14
+ listHeight: {
15
+ value: number;
16
+ };
17
+ floatingRenderedDate?: {
18
+ value: number | undefined;
19
+ };
20
+ isDayAnimationEnabled?: boolean;
21
+ }
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/MessagesContainer/components/Item/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEnE,MAAM,WAAW,SAAS,CAAC,QAAQ,SAAS,QAAQ,CAAE,SAAQ,sBAAsB,CAAC,QAAQ,CAAC;IAC5F,cAAc,EAAE,QAAQ,CAAA;IACxB,eAAe,CAAC,EAAE,QAAQ,CAAA;IAC1B,WAAW,CAAC,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;IAC1B,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;IAI7B,oBAAoB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IACpD,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC"}
@@ -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/Item/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { DaysPositions } from '../types';
2
+ export declare const DAY_PIN_OFFSET = 10;
3
+ export declare const DAY_MARGIN_TOP = 5;
4
+ export declare const DAY_PUSH_GAP = 8;
5
+ export declare const DAY_HANDOFF_OFFSET: number;
6
+ type DayPosition = DaysPositions[string];
7
+ export declare const dayPositionScreenTop: (scrolledTop: number, day: DayPosition) => number;
8
+ export declare const findDayPosition: (positions: DaysPositions, createdAt: number) => DayPosition | undefined;
9
+ export {};
10
+ //# sourceMappingURL=dayLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dayLayout.d.ts","sourceRoot":"","sources":["../../../src/MessagesContainer/components/dayLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAUxC,eAAO,MAAM,cAAc,KAAK,CAAA;AAIhC,eAAO,MAAM,cAAc,IAAI,CAAA;AAI/B,eAAO,MAAM,YAAY,IAAI,CAAA;AAO7B,eAAO,MAAM,kBAAkB,QAAkC,CAAA;AAEjE,KAAK,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;AAIxC,eAAO,MAAM,oBAAoB,GAAI,aAAa,MAAM,EAAE,KAAK,WAAW,WAIzE,CAAA;AAID,eAAO,MAAM,eAAe,GAAI,WAAW,aAAa,EAAE,WAAW,MAAM,KAAG,WAAW,GAAG,SAS3F,CAAA"}
@@ -0,0 +1,37 @@
1
+ // Shared layout constants and math so the inline day separators (rendered inside
2
+ // the list) and the floating sticky day header (the DayAnimated overlay) hand off
3
+ // at exactly the same screen line. Keeping these in sync is what makes the
4
+ // Telegram-style sticky push read as a single header with no duplicate badge and
5
+ // no gap at the day boundary.
6
+ // Screen-Y (px from the top of the list) where a day header sticks and where the
7
+ // inline separator hands over to the floating header.
8
+ export const DAY_PIN_OFFSET = 10;
9
+ // Vertical margin baked into the inline separator's pill position (Day's container
10
+ // marginTop). The inline pill renders this far below its separatorScreenTop.
11
+ export const DAY_MARGIN_TOP = 5;
12
+ // Vertical gap kept between the outgoing floating header and the incoming
13
+ // separator's pill during the push, so the two dates don't touch.
14
+ export const DAY_PUSH_GAP = 8;
15
+ // The separatorScreenTop value at which an inline separator's pill reaches the
16
+ // floating header's pinned pill. The inline pill sits DAY_MARGIN_TOP below its
17
+ // separatorScreenTop; the floating header overrides that margin to 0, so its
18
+ // pinned pill sits DAY_MARGIN_TOP higher. They coincide - and hand off - at
19
+ // separatorScreenTop = DAY_PIN_OFFSET - DAY_MARGIN_TOP.
20
+ export const DAY_HANDOFF_OFFSET = DAY_PIN_OFFSET - DAY_MARGIN_TOP;
21
+ // On-screen Y of a day separator's top edge. `scrolledTop` is `listHeight + scrolledY`.
22
+ // (Inverted list: a separator is above the pin when this is <= DAY_HANDOFF_OFFSET.)
23
+ export const dayPositionScreenTop = (scrolledTop, day) => {
24
+ 'worklet';
25
+ return scrolledTop - (day.y + day.height);
26
+ };
27
+ // The measured position of the day with the given createdAt (ms), or undefined if
28
+ // that day hasn't been laid out yet.
29
+ export const findDayPosition = (positions, createdAt) => {
30
+ 'worklet';
31
+ const values = Object.values(positions);
32
+ for (let i = 0; i < values.length; i++)
33
+ if (values[i].createdAt === createdAt)
34
+ return values[i];
35
+ return undefined;
36
+ };
37
+ //# sourceMappingURL=dayLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dayLayout.js","sourceRoot":"","sources":["../../../src/MessagesContainer/components/dayLayout.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,kFAAkF;AAClF,2EAA2E;AAC3E,iFAAiF;AACjF,8BAA8B;AAE9B,iFAAiF;AACjF,sDAAsD;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAA;AAEhC,mFAAmF;AACnF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAA;AAE/B,0EAA0E;AAC1E,kEAAkE;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAA;AAE7B,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,wDAAwD;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAA;AAIjE,wFAAwF;AACxF,oFAAoF;AACpF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,WAAmB,EAAE,GAAgB,EAAE,EAAE;IAC5E,SAAS,CAAA;IAET,OAAO,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED,kFAAkF;AAClF,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAwB,EAAE,SAAiB,EAA2B,EAAE;IACtG,SAAS,CAAA;IAET,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QACpC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS;YACnC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAEpB,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { IMessage } from '../Models';
3
+ import { MessagesContainerProps } from './types';
4
+ export * from './types';
5
+ export declare const MessagesContainer: <TMessage extends IMessage>(props: MessagesContainerProps<TMessage>) => React.JSX.Element;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MessagesContainer/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAWhF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAQpC,OAAO,EAAE,sBAAsB,EAAmC,MAAM,SAAS,CAAA;AAEjF,cAAc,SAAS,CAAA;AAEvB,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,QAAQ,EAAE,OAAO,sBAAsB,CAAC,QAAQ,CAAC,sBAmdnG,CAAA"}
@@ -0,0 +1,308 @@
1
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { View, Text } from 'react-native';
3
+ import { Pressable } from 'react-native-gesture-handler';
4
+ import Animated, { runOnJS, useAnimatedScrollHandler, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
5
+ import { LoadEarlierMessages } from '../LoadEarlierMessages';
6
+ import { warning } from '../logging';
7
+ import stylesCommon from '../styles';
8
+ import { TypingIndicator } from '../TypingIndicator';
9
+ import { isSameDay, useCallbackThrottled } from '../utils';
10
+ import { DayAnimated } from './components/DayAnimated';
11
+ import { Item } from './components/Item';
12
+ import styles from './styles';
13
+ import { AnimatedFlatList } from './types';
14
+ export * from './types';
15
+ export const MessagesContainer = (props) => {
16
+ const { messages = [], user, isTyping = false, renderChatEmpty: renderChatEmptyProp, isInverted = true, listProps, isScrollToBottomEnabled = false, scrollToBottomOffset = 200, isAlignedTop = false, scrollToBottomStyle, scrollToBottomContentStyle, loadEarlierMessagesProps, renderTypingIndicator: renderTypingIndicatorProp, renderFooter: renderFooterProp, renderLoadEarlier: renderLoadEarlierProp, forwardRef, scrollToBottomComponent: scrollToBottomComponentProp, renderDay: renderDayProp, isDayAnimationEnabled = true, } = props;
17
+ const listPropsOnScrollProp = listProps?.onScroll;
18
+ const scrollToBottomOpacity = useSharedValue(0);
19
+ const isScrollingDown = useSharedValue(false);
20
+ const lastScrolledY = useSharedValue(0);
21
+ const [isScrollToBottomVisible, setIsScrollToBottomVisible] = useState(false);
22
+ const scrollToBottomStyleAnim = useAnimatedStyle(() => ({
23
+ opacity: scrollToBottomOpacity.value,
24
+ }), [scrollToBottomOpacity]);
25
+ const daysPositions = useSharedValue({});
26
+ const listHeight = useSharedValue(0);
27
+ const contentHeight = useSharedValue(0);
28
+ const scrolledY = useSharedValue(0);
29
+ // The date (createdAt ms) the floating day header is currently rendering. Used to
30
+ // keep the inline separator visible until the header's text has caught up, hiding
31
+ // the 1-frame JS-thread lag of the header on each day change.
32
+ const floatingRenderedDate = useSharedValue(undefined);
33
+ // true while the user is actively scrolling (finger down dragging or momentum
34
+ // running). Drives the floating day header visibility so it stays opaque for the
35
+ // whole gesture and only fades once scrolling fully stops.
36
+ const isScrollActive = useSharedValue(false);
37
+ const renderTypingIndicator = useCallback(() => {
38
+ if (renderTypingIndicatorProp)
39
+ return renderTypingIndicatorProp();
40
+ return <TypingIndicator isTyping={isTyping} style={props.typingIndicatorStyle}/>;
41
+ }, [isTyping, renderTypingIndicatorProp, props.typingIndicatorStyle]);
42
+ const ListFooterComponent = useMemo(() => {
43
+ if (renderFooterProp)
44
+ return renderFooterProp(props);
45
+ return renderTypingIndicator();
46
+ }, [renderFooterProp, renderTypingIndicator, props]);
47
+ const renderLoadEarlier = useCallback(() => {
48
+ if (loadEarlierMessagesProps?.isAvailable) {
49
+ if (renderLoadEarlierProp)
50
+ return renderLoadEarlierProp(loadEarlierMessagesProps);
51
+ return <LoadEarlierMessages {...loadEarlierMessagesProps}/>;
52
+ }
53
+ return null;
54
+ }, [loadEarlierMessagesProps, renderLoadEarlierProp]);
55
+ const changeScrollToBottomVisibility = useCallbackThrottled((isVisible) => {
56
+ if (isScrollingDown.value && isVisible)
57
+ return;
58
+ if (isVisible)
59
+ setIsScrollToBottomVisible(true);
60
+ scrollToBottomOpacity.value = withTiming(isVisible ? 1 : 0, { duration: 250 }, isFinished => {
61
+ if (isFinished && !isVisible)
62
+ runOnJS(setIsScrollToBottomVisible)(false);
63
+ });
64
+ }, [scrollToBottomOpacity, isScrollingDown], 50);
65
+ const scrollTo = useCallback((options) => {
66
+ if (options)
67
+ forwardRef?.current?.scrollToOffset(options);
68
+ }, [forwardRef]);
69
+ const doScrollToBottom = useCallback((animated = true) => {
70
+ isScrollingDown.value = true;
71
+ changeScrollToBottomVisibility(false);
72
+ if (isInverted)
73
+ scrollTo({ offset: 0, animated });
74
+ else if (forwardRef?.current)
75
+ forwardRef.current.scrollToEnd({ animated });
76
+ }, [forwardRef, isInverted, scrollTo, isScrollingDown, changeScrollToBottomVisibility]);
77
+ const handleOnScroll = useCallback((event) => {
78
+ listPropsOnScrollProp?.(event);
79
+ const { contentOffset: { y: contentOffsetY }, contentSize: { height: contentSizeHeight }, layoutMeasurement: { height: layoutMeasurementHeight }, } = event;
80
+ isScrollingDown.value =
81
+ (isInverted && lastScrolledY.value > contentOffsetY) ||
82
+ (!isInverted && lastScrolledY.value < contentOffsetY);
83
+ lastScrolledY.value = contentOffsetY;
84
+ contentHeight.value = contentSizeHeight;
85
+ if (isInverted)
86
+ if (contentOffsetY > scrollToBottomOffset)
87
+ changeScrollToBottomVisibility(true);
88
+ else
89
+ changeScrollToBottomVisibility(false);
90
+ else if (contentOffsetY < scrollToBottomOffset &&
91
+ contentSizeHeight - layoutMeasurementHeight > scrollToBottomOffset)
92
+ changeScrollToBottomVisibility(false);
93
+ else
94
+ changeScrollToBottomVisibility(false);
95
+ }, [isInverted, scrollToBottomOffset, changeScrollToBottomVisibility, isScrollingDown, lastScrolledY, contentHeight, listPropsOnScrollProp]);
96
+ // Auto-scroll to the newest message when it arrives in a non-inverted list.
97
+ // Inverted lists keep the newest message visible on their own, but a
98
+ // non-inverted list appends new messages off-screen at the end (#2612).
99
+ // Only scroll when the user is already near the bottom so we don't yank
100
+ // them away while they are reading earlier messages.
101
+ const latestMessageId = !isInverted && messages.length > 0
102
+ ? messages[messages.length - 1]._id
103
+ : undefined;
104
+ const previousLatestMessageId = useRef(latestMessageId);
105
+ useEffect(() => {
106
+ if (isInverted) {
107
+ previousLatestMessageId.current = latestMessageId;
108
+ return;
109
+ }
110
+ if (latestMessageId != null &&
111
+ latestMessageId !== previousLatestMessageId.current &&
112
+ // skip the very first render; initial positioning is handled on layout
113
+ previousLatestMessageId.current !== undefined) {
114
+ const isNearBottom = contentHeight.value === 0 ||
115
+ lastScrolledY.value + listHeight.value >= contentHeight.value - scrollToBottomOffset;
116
+ if (isNearBottom)
117
+ doScrollToBottom(true);
118
+ }
119
+ previousLatestMessageId.current = latestMessageId;
120
+ }, [latestMessageId, isInverted, doScrollToBottom, contentHeight, lastScrolledY, listHeight, scrollToBottomOffset]);
121
+ const restProps = useMemo(() => {
122
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
123
+ const { messages: _, ...rest } = props;
124
+ return rest;
125
+ }, [props]);
126
+ const renderItem = useCallback(({ item, index }) => {
127
+ const messageItem = item;
128
+ if (!messageItem._id && messageItem._id !== 0)
129
+ warning('Chat: `_id` is missing for message', JSON.stringify(item));
130
+ if (!messageItem.user) {
131
+ if (!messageItem.system)
132
+ warning('Chat: `user` is missing for message', JSON.stringify(messageItem));
133
+ messageItem.user = { _id: 0 };
134
+ }
135
+ if (messages) {
136
+ const previousMessage = (isInverted ? messages[index + 1] : messages[index - 1]) || {};
137
+ const nextMessage = (isInverted ? messages[index - 1] : messages[index + 1]) || {};
138
+ const messageProps = {
139
+ position: user?._id != null && messageItem.user?._id === user._id ? 'right' : 'left',
140
+ ...restProps,
141
+ currentMessage: messageItem,
142
+ previousMessage,
143
+ nextMessage,
144
+ scrolledY,
145
+ daysPositions,
146
+ listHeight,
147
+ floatingRenderedDate,
148
+ isDayAnimationEnabled,
149
+ };
150
+ return (<Item {...messageProps}/>);
151
+ }
152
+ return null;
153
+ }, [messages, restProps, isInverted, scrolledY, daysPositions, listHeight, floatingRenderedDate, isDayAnimationEnabled, user]);
154
+ const emptyContent = useMemo(() => {
155
+ if (!renderChatEmptyProp)
156
+ return null;
157
+ return renderChatEmptyProp();
158
+ }, [renderChatEmptyProp]);
159
+ const renderChatEmpty = useCallback(() => {
160
+ if (renderChatEmptyProp)
161
+ return isInverted
162
+ ? (emptyContent)
163
+ : (<View style={[stylesCommon.fill, styles.emptyChatContainer]}>
164
+ {emptyContent}
165
+ </View>);
166
+ return <View style={stylesCommon.fill}/>;
167
+ }, [isInverted, renderChatEmptyProp, emptyContent]);
168
+ const ListHeaderComponent = useMemo(() => {
169
+ const content = renderLoadEarlier();
170
+ if (!content)
171
+ return null;
172
+ return (<View style={stylesCommon.fill}>{content}</View>);
173
+ }, [renderLoadEarlier]);
174
+ const renderScrollBottomComponent = useCallback(() => {
175
+ if (scrollToBottomComponentProp)
176
+ return scrollToBottomComponentProp();
177
+ return <Text>{'V'}</Text>;
178
+ }, [scrollToBottomComponentProp]);
179
+ const handleScrollToBottomPress = useCallback(() => {
180
+ doScrollToBottom();
181
+ }, [doScrollToBottom]);
182
+ const scrollToBottomContent = useMemo(() => {
183
+ return (<Animated.View style={[
184
+ stylesCommon.centerItems,
185
+ styles.scrollToBottomContent,
186
+ scrollToBottomContentStyle,
187
+ scrollToBottomStyleAnim,
188
+ ]}>
189
+ {renderScrollBottomComponent()}
190
+ </Animated.View>);
191
+ }, [scrollToBottomStyleAnim, scrollToBottomContentStyle, renderScrollBottomComponent]);
192
+ const ScrollToBottomWrapper = useCallback(() => {
193
+ if (!isScrollToBottomEnabled)
194
+ return null;
195
+ if (!isScrollToBottomVisible)
196
+ return null;
197
+ return (<Pressable style={[styles.scrollToBottom, scrollToBottomStyle]} onPress={handleScrollToBottomPress}>
198
+ {scrollToBottomContent}
199
+ </Pressable>);
200
+ }, [isScrollToBottomEnabled, isScrollToBottomVisible, handleScrollToBottomPress, scrollToBottomContent, scrollToBottomStyle]);
201
+ const onLayoutList = useCallback((event) => {
202
+ listHeight.value = event.nativeEvent.layout.height;
203
+ if (!isInverted &&
204
+ messages?.length &&
205
+ isScrollToBottomEnabled)
206
+ setTimeout(() => {
207
+ doScrollToBottom(false);
208
+ }, 500);
209
+ // listProps.onLayout may be a SharedValue in Reanimated types, but we only accept functions
210
+ const onLayoutProp = listProps?.onLayout;
211
+ onLayoutProp?.(event);
212
+ }, [isInverted, messages, doScrollToBottom, listHeight, listProps, isScrollToBottomEnabled]);
213
+ const onEndReached = useCallback(() => {
214
+ if (loadEarlierMessagesProps &&
215
+ loadEarlierMessagesProps.isAvailable &&
216
+ loadEarlierMessagesProps.isInfiniteScrollEnabled &&
217
+ !loadEarlierMessagesProps.isLoading)
218
+ loadEarlierMessagesProps.onPress();
219
+ }, [loadEarlierMessagesProps]);
220
+ const keyExtractor = useCallback((item) => item._id.toString(), []);
221
+ const renderCell = useCallback((props) => {
222
+ const { item, onLayout: onLayoutProp, children } = props;
223
+ const id = item._id.toString();
224
+ const handleOnLayout = (event) => {
225
+ onLayoutProp?.(event);
226
+ // Only track positions when day animation is enabled
227
+ if (!isDayAnimationEnabled)
228
+ return;
229
+ const { y, height } = event.nativeEvent.layout;
230
+ const newValue = {
231
+ y,
232
+ height,
233
+ createdAt: new Date(item.createdAt).getTime(),
234
+ };
235
+ daysPositions.modify(value => {
236
+ 'worklet';
237
+ const isSameDay = (date1, date2) => {
238
+ const d1 = new Date(date1);
239
+ const d2 = new Date(date2);
240
+ return (d1.getDate() === d2.getDate() &&
241
+ d1.getMonth() === d2.getMonth() &&
242
+ d1.getFullYear() === d2.getFullYear());
243
+ };
244
+ for (const [key, item] of Object.entries(value))
245
+ if (isSameDay(newValue.createdAt, item.createdAt) && (isInverted ? item.y <= newValue.y : item.y >= newValue.y)) {
246
+ delete value[key];
247
+ break;
248
+ }
249
+ // @ts-expect-error: https://docs.swmansion.com/react-native-reanimated/docs/core/useSharedValue#remarks
250
+ value[id] = newValue;
251
+ return value;
252
+ });
253
+ };
254
+ return (<View {...props} onLayout={handleOnLayout}>
255
+ {children}
256
+ </View>);
257
+ }, [daysPositions, isInverted, isDayAnimationEnabled]);
258
+ const scrollHandler = useAnimatedScrollHandler({
259
+ onScroll: event => {
260
+ scrolledY.value = event.contentOffset.y;
261
+ runOnJS(handleOnScroll)(event);
262
+ },
263
+ onBeginDrag: () => {
264
+ isScrollActive.value = true;
265
+ },
266
+ onEndDrag: () => {
267
+ // Momentum (if any) re-asserts isScrollActive via onMomentumBegin within the
268
+ // header's fade-out delay, so a flick keeps the header visible.
269
+ isScrollActive.value = false;
270
+ },
271
+ onMomentumBegin: () => {
272
+ isScrollActive.value = true;
273
+ },
274
+ onMomentumEnd: () => {
275
+ isScrollActive.value = false;
276
+ },
277
+ }, [handleOnScroll, isScrollActive]);
278
+ // removes unrendered days positions when messages are added/removed
279
+ useEffect(() => {
280
+ // Skip cleanup when day animation is disabled
281
+ if (!isDayAnimationEnabled)
282
+ return;
283
+ Object.keys(daysPositions.value).forEach(key => {
284
+ const messageIndex = messages.findIndex(m => m._id.toString() === key);
285
+ let shouldRemove = messageIndex === -1;
286
+ if (!shouldRemove) {
287
+ const prevMessage = messages[messageIndex + (isInverted ? 1 : -1)];
288
+ const message = messages[messageIndex];
289
+ shouldRemove = !!prevMessage && isSameDay(message, prevMessage);
290
+ }
291
+ if (shouldRemove)
292
+ daysPositions.modify(value => {
293
+ 'worklet';
294
+ delete value[key];
295
+ return value;
296
+ });
297
+ });
298
+ }, [messages, daysPositions, isInverted, isDayAnimationEnabled]);
299
+ return (<View style={[
300
+ styles.contentContainerStyle,
301
+ isAlignedTop ? styles.containerAlignTop : stylesCommon.fill,
302
+ ]}>
303
+ <AnimatedFlatList ref={forwardRef} keyExtractor={keyExtractor} data={messages} renderItem={renderItem} inverted={isInverted} automaticallyAdjustContentInsets={false} style={stylesCommon.fill} contentContainerStyle={styles.messagesContainer} ListEmptyComponent={renderChatEmpty} ListFooterComponent={isInverted ? ListHeaderComponent : <>{ListFooterComponent}</>} ListHeaderComponent={isInverted ? <>{ListFooterComponent}</> : ListHeaderComponent} scrollEventThrottle={1} onEndReached={onEndReached} onEndReachedThreshold={0.1} keyboardDismissMode='interactive' keyboardShouldPersistTaps='handled' {...listProps} onScroll={scrollHandler} onLayout={onLayoutList} CellRendererComponent={renderCell}/>
304
+ <ScrollToBottomWrapper />
305
+ {isDayAnimationEnabled && (<DayAnimated scrolledY={scrolledY} daysPositions={daysPositions} listHeight={listHeight} isScrollActive={isScrollActive} floatingRenderedDate={floatingRenderedDate} renderDay={renderDayProp} isLoading={loadEarlierMessagesProps?.isLoading ?? false} dateFormat={props.dateFormat} dateFormatCalendar={props.dateFormatCalendar}/>)}
306
+ </View>);
307
+ };
308
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MessagesContainer/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ declare const _default: {
2
+ containerAlignTop: {
3
+ flexDirection: "row";
4
+ alignItems: "flex-start";
5
+ };
6
+ contentContainerStyle: {
7
+ flexGrow: number;
8
+ justifyContent: "flex-start";
9
+ };
10
+ messagesContainer: {
11
+ paddingBottom: number;
12
+ };
13
+ emptyChatContainer: {
14
+ transform: {
15
+ scaleY: number;
16
+ }[];
17
+ };
18
+ scrollToBottom: {
19
+ position: "absolute";
20
+ right: number;
21
+ bottom: number;
22
+ zIndex: number;
23
+ };
24
+ scrollToBottomContent: {
25
+ height: number;
26
+ width: number;
27
+ borderRadius: number;
28
+ backgroundColor: string;
29
+ } | {
30
+ shadowColor: string;
31
+ shadowOpacity: number;
32
+ shadowOffset: {
33
+ width: number;
34
+ height: number;
35
+ };
36
+ shadowRadius: number;
37
+ elevation?: undefined;
38
+ height: number;
39
+ width: number;
40
+ borderRadius: number;
41
+ backgroundColor: string;
42
+ } | {
43
+ elevation: number;
44
+ shadowColor?: undefined;
45
+ shadowOpacity?: undefined;
46
+ shadowOffset?: undefined;
47
+ shadowRadius?: undefined;
48
+ height: number;
49
+ width: number;
50
+ borderRadius: number;
51
+ backgroundColor: string;
52
+ };
53
+ };
54
+ export default _default;
55
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/MessagesContainer/styles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAsCE"}
@@ -0,0 +1,42 @@
1
+ import { Platform, StyleSheet } from 'react-native';
2
+ import { Color } from '../Color';
3
+ export default StyleSheet.create({
4
+ containerAlignTop: {
5
+ flexDirection: 'row',
6
+ alignItems: 'flex-start',
7
+ },
8
+ contentContainerStyle: {
9
+ flexGrow: 1,
10
+ justifyContent: 'flex-start',
11
+ },
12
+ messagesContainer: {
13
+ paddingBottom: 10,
14
+ },
15
+ emptyChatContainer: {
16
+ transform: [{ scaleY: -1 }],
17
+ },
18
+ scrollToBottom: {
19
+ position: 'absolute',
20
+ right: 10,
21
+ bottom: 30,
22
+ zIndex: 999,
23
+ },
24
+ scrollToBottomContent: {
25
+ height: 40,
26
+ width: 40,
27
+ borderRadius: 20,
28
+ backgroundColor: Color.white,
29
+ ...Platform.select({
30
+ ios: {
31
+ shadowColor: Color.black,
32
+ shadowOpacity: 0.5,
33
+ shadowOffset: { width: 0, height: 0 },
34
+ shadowRadius: 1,
35
+ },
36
+ android: {
37
+ elevation: 5,
38
+ },
39
+ }),
40
+ },
41
+ });
42
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/MessagesContainer/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,eAAe,UAAU,CAAC,MAAM,CAAC;IAC/B,iBAAiB,EAAE;QACjB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,YAAY;KACzB;IACD,qBAAqB,EAAE;QACrB,QAAQ,EAAE,CAAC;QACX,cAAc,EAAE,YAAY;KAC7B;IACD,iBAAiB,EAAE;QACjB,aAAa,EAAE,EAAE;KAClB;IACD,kBAAkB,EAAE;QAClB,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;KAC5B;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,GAAG;KACZ;IACD,qBAAqB,EAAE;QACrB,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,KAAK,CAAC,KAAK;QAC5B,GAAG,QAAQ,CAAC,MAAM,CAAC;YACjB,GAAG,EAAE;gBACH,WAAW,EAAE,KAAK,CAAC,KAAK;gBACxB,aAAa,EAAE,GAAG;gBAClB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBACrC,YAAY,EAAE,CAAC;aAChB;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,CAAC;aACb;SACF,CAAC;KACH;CACF,CAAC,CAAA"}