@kesha-antonov/react-native-chat 4.2.0 → 4.4.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 (318) hide show
  1. package/README.md +253 -47
  2. package/lib/Actions.d.ts +5 -5
  3. package/lib/Actions.d.ts.map +1 -1
  4. package/lib/Actions.js +28 -39
  5. package/lib/Actions.js.map +1 -1
  6. package/lib/Avatar.d.ts.map +1 -1
  7. package/lib/Avatar.js +34 -32
  8. package/lib/Avatar.js.map +1 -1
  9. package/lib/Bubble/index.d.ts.map +1 -1
  10. package/lib/Bubble/index.js +98 -28
  11. package/lib/Bubble/index.js.map +1 -1
  12. package/lib/Bubble/styles.d.ts +28 -11
  13. package/lib/Bubble/styles.d.ts.map +1 -1
  14. package/lib/Bubble/styles.js +108 -80
  15. package/lib/Bubble/styles.js.map +1 -1
  16. package/lib/Bubble/types.d.ts +12 -7
  17. package/lib/Bubble/types.d.ts.map +1 -1
  18. package/lib/Chat/ChatKeyboardAvoidingView.d.ts +8 -3
  19. package/lib/Chat/ChatKeyboardAvoidingView.d.ts.map +1 -1
  20. package/lib/Chat/ChatKeyboardAvoidingView.js +3 -5
  21. package/lib/Chat/ChatKeyboardAvoidingView.js.map +1 -1
  22. package/lib/Chat/index.d.ts +1 -0
  23. package/lib/Chat/index.d.ts.map +1 -1
  24. package/lib/Chat/index.js +94 -28
  25. package/lib/Chat/index.js.map +1 -1
  26. package/lib/Chat/types.d.ts +66 -24
  27. package/lib/Chat/types.d.ts.map +1 -1
  28. package/lib/ChatAvatar.d.ts.map +1 -1
  29. package/lib/ChatAvatar.js +11 -17
  30. package/lib/ChatAvatar.js.map +1 -1
  31. package/lib/ChatContext.d.ts +31 -1
  32. package/lib/ChatContext.d.ts.map +1 -1
  33. package/lib/ChatContext.js +4 -0
  34. package/lib/ChatContext.js.map +1 -1
  35. package/lib/Color.d.ts.map +1 -1
  36. package/lib/Color.js +6 -2
  37. package/lib/Color.js.map +1 -1
  38. package/lib/Composer.d.ts +14 -1
  39. package/lib/Composer.d.ts.map +1 -1
  40. package/lib/Composer.js +68 -50
  41. package/lib/Composer.js.map +1 -1
  42. package/lib/Constant.d.ts +1 -0
  43. package/lib/Constant.d.ts.map +1 -1
  44. package/lib/Constant.js +1 -0
  45. package/lib/Constant.js.map +1 -1
  46. package/lib/Day/index.d.ts.map +1 -1
  47. package/lib/Day/index.js +7 -3
  48. package/lib/Day/index.js.map +1 -1
  49. package/lib/Day/styles.d.ts +6 -7
  50. package/lib/Day/styles.d.ts.map +1 -1
  51. package/lib/Day/styles.js +11 -13
  52. package/lib/Day/styles.js.map +1 -1
  53. package/lib/Icons.d.ts +24 -0
  54. package/lib/Icons.d.ts.map +1 -0
  55. package/lib/Icons.js +2 -0
  56. package/lib/Icons.js.map +1 -0
  57. package/lib/InputToolbar.d.ts +18 -5
  58. package/lib/InputToolbar.d.ts.map +1 -1
  59. package/lib/InputToolbar.js +246 -19
  60. package/lib/InputToolbar.js.map +1 -1
  61. package/lib/LoadEarlierMessages.d.ts.map +1 -1
  62. package/lib/LoadEarlierMessages.js +12 -7
  63. package/lib/LoadEarlierMessages.js.map +1 -1
  64. package/lib/Message/index.d.ts.map +1 -1
  65. package/lib/Message/index.js +21 -12
  66. package/lib/Message/index.js.map +1 -1
  67. package/lib/Message/styles.js +2 -2
  68. package/lib/Message/styles.js.map +1 -1
  69. package/lib/MessageAudio.d.ts +2 -1
  70. package/lib/MessageAudio.d.ts.map +1 -1
  71. package/lib/MessageAudio.js +121 -19
  72. package/lib/MessageAudio.js.map +1 -1
  73. package/lib/MessageLocation.d.ts +9 -0
  74. package/lib/MessageLocation.d.ts.map +1 -0
  75. package/lib/MessageLocation.js +85 -0
  76. package/lib/MessageLocation.js.map +1 -0
  77. package/lib/MessageText.d.ts +12 -1
  78. package/lib/MessageText.d.ts.map +1 -1
  79. package/lib/MessageText.js +38 -11
  80. package/lib/MessageText.js.map +1 -1
  81. package/lib/MessageVideo.d.ts +2 -1
  82. package/lib/MessageVideo.d.ts.map +1 -1
  83. package/lib/MessageVideo.js +156 -18
  84. package/lib/MessageVideo.js.map +1 -1
  85. package/lib/MessagesContainer/components/Item/index.d.ts +2 -1
  86. package/lib/MessagesContainer/components/Item/index.d.ts.map +1 -1
  87. package/lib/MessagesContainer/components/Item/index.js +23 -1
  88. package/lib/MessagesContainer/components/Item/index.js.map +1 -1
  89. package/lib/MessagesContainer/index.d.ts.map +1 -1
  90. package/lib/MessagesContainer/index.js +24 -11
  91. package/lib/MessagesContainer/index.js.map +1 -1
  92. package/lib/MessagesContainer/styles.d.ts +23 -3
  93. package/lib/MessagesContainer/styles.d.ts.map +1 -1
  94. package/lib/MessagesContainer/styles.js +25 -5
  95. package/lib/MessagesContainer/styles.js.map +1 -1
  96. package/lib/Models.d.ts +72 -0
  97. package/lib/Models.d.ts.map +1 -1
  98. package/lib/QuickReplies.d.ts +1 -1
  99. package/lib/QuickReplies.d.ts.map +1 -1
  100. package/lib/QuickReplies.js +13 -7
  101. package/lib/QuickReplies.js.map +1 -1
  102. package/lib/Reactions/MessageReactions.d.ts.map +1 -1
  103. package/lib/Reactions/MessageReactions.js +11 -10
  104. package/lib/Reactions/MessageReactions.js.map +1 -1
  105. package/lib/Reactions/ReactionPicker.d.ts.map +1 -1
  106. package/lib/Reactions/ReactionPicker.js +5 -3
  107. package/lib/Reactions/ReactionPicker.js.map +1 -1
  108. package/lib/Send.d.ts +2 -2
  109. package/lib/Send.d.ts.map +1 -1
  110. package/lib/Send.js +37 -37
  111. package/lib/Send.js.map +1 -1
  112. package/lib/SystemMessage.d.ts.map +1 -1
  113. package/lib/SystemMessage.js +8 -5
  114. package/lib/SystemMessage.js.map +1 -1
  115. package/lib/Theme.d.ts +159 -0
  116. package/lib/Theme.d.ts.map +1 -0
  117. package/lib/Theme.js +147 -0
  118. package/lib/Theme.js.map +1 -0
  119. package/lib/Time.d.ts.map +1 -1
  120. package/lib/Time.js +7 -5
  121. package/lib/Time.js.map +1 -1
  122. package/lib/TypingIndicator/index.d.ts.map +1 -1
  123. package/lib/TypingIndicator/index.js +4 -1
  124. package/lib/TypingIndicator/index.js.map +1 -1
  125. package/lib/TypingIndicator/styles.d.ts +2 -2
  126. package/lib/TypingIndicator/styles.d.ts.map +1 -1
  127. package/lib/TypingIndicator/styles.js +4 -5
  128. package/lib/TypingIndicator/styles.js.map +1 -1
  129. package/lib/components/AttachmentSheet.d.ts +28 -0
  130. package/lib/components/AttachmentSheet.d.ts.map +1 -0
  131. package/lib/components/AttachmentSheet.js +177 -0
  132. package/lib/components/AttachmentSheet.js.map +1 -0
  133. package/lib/components/BasicMarkdown.d.ts +12 -0
  134. package/lib/components/BasicMarkdown.d.ts.map +1 -0
  135. package/lib/components/BasicMarkdown.js +220 -0
  136. package/lib/components/BasicMarkdown.js.map +1 -0
  137. package/lib/components/ContextMenu.d.ts +25 -0
  138. package/lib/components/ContextMenu.d.ts.map +1 -0
  139. package/lib/components/ContextMenu.js +122 -0
  140. package/lib/components/ContextMenu.js.map +1 -0
  141. package/lib/components/Icon.d.ts +17 -0
  142. package/lib/components/Icon.d.ts.map +1 -0
  143. package/lib/components/Icon.js +19 -0
  144. package/lib/components/Icon.js.map +1 -0
  145. package/lib/components/LucideIcon.d.ts +10 -0
  146. package/lib/components/LucideIcon.d.ts.map +1 -0
  147. package/lib/components/LucideIcon.js +118 -0
  148. package/lib/components/LucideIcon.js.map +1 -0
  149. package/lib/components/MarkdownMessageText.d.ts +19 -0
  150. package/lib/components/MarkdownMessageText.d.ts.map +1 -0
  151. package/lib/components/MarkdownMessageText.js +35 -0
  152. package/lib/components/MarkdownMessageText.js.map +1 -0
  153. package/lib/components/MediaCard.d.ts +19 -0
  154. package/lib/components/MediaCard.d.ts.map +1 -0
  155. package/lib/components/MediaCard.js +102 -0
  156. package/lib/components/MediaCard.js.map +1 -0
  157. package/lib/components/MediaControls.d.ts +41 -0
  158. package/lib/components/MediaControls.d.ts.map +1 -0
  159. package/lib/components/MediaControls.js +524 -0
  160. package/lib/components/MediaControls.js.map +1 -0
  161. package/lib/components/MessageReply.d.ts.map +1 -1
  162. package/lib/components/MessageReply.js +11 -9
  163. package/lib/components/MessageReply.js.map +1 -1
  164. package/lib/components/ReplyPreview.d.ts +3 -1
  165. package/lib/components/ReplyPreview.d.ts.map +1 -1
  166. package/lib/components/ReplyPreview.js +37 -36
  167. package/lib/components/ReplyPreview.js.map +1 -1
  168. package/lib/components/SendIcon.d.ts +13 -0
  169. package/lib/components/SendIcon.d.ts.map +1 -0
  170. package/lib/components/SendIcon.js +37 -0
  171. package/lib/components/SendIcon.js.map +1 -0
  172. package/lib/components/Ticks.d.ts +25 -0
  173. package/lib/components/Ticks.d.ts.map +1 -0
  174. package/lib/components/Ticks.js +102 -0
  175. package/lib/components/Ticks.js.map +1 -0
  176. package/lib/components/VideoNoteOverlay.d.ts +25 -0
  177. package/lib/components/VideoNoteOverlay.d.ts.map +1 -0
  178. package/lib/components/VideoNoteOverlay.js +151 -0
  179. package/lib/components/VideoNoteOverlay.js.map +1 -0
  180. package/lib/components/VideoNoteRecorder.d.ts +19 -0
  181. package/lib/components/VideoNoteRecorder.d.ts.map +1 -0
  182. package/lib/components/VideoNoteRecorder.js +634 -0
  183. package/lib/components/VideoNoteRecorder.js.map +1 -0
  184. package/lib/components/VideoRecordButton.d.ts +29 -0
  185. package/lib/components/VideoRecordButton.d.ts.map +1 -0
  186. package/lib/components/VideoRecordButton.js +117 -0
  187. package/lib/components/VideoRecordButton.js.map +1 -0
  188. package/lib/components/VoiceMessageInput.d.ts +33 -0
  189. package/lib/components/VoiceMessageInput.d.ts.map +1 -0
  190. package/lib/components/VoiceMessageInput.js +403 -0
  191. package/lib/components/VoiceMessageInput.js.map +1 -0
  192. package/lib/components/WaveformPlayer.d.ts +19 -0
  193. package/lib/components/WaveformPlayer.d.ts.map +1 -0
  194. package/lib/components/WaveformPlayer.js +367 -0
  195. package/lib/components/WaveformPlayer.js.map +1 -0
  196. package/lib/components/mediaPalette.d.ts +23 -0
  197. package/lib/components/mediaPalette.d.ts.map +1 -0
  198. package/lib/components/mediaPalette.js +16 -0
  199. package/lib/components/mediaPalette.js.map +1 -0
  200. package/lib/components/mediaPlayback.d.ts +22 -0
  201. package/lib/components/mediaPlayback.d.ts.map +1 -0
  202. package/lib/components/mediaPlayback.js +34 -0
  203. package/lib/components/mediaPlayback.js.map +1 -0
  204. package/lib/dayjsLocales.d.ts +18 -0
  205. package/lib/dayjsLocales.d.ts.map +1 -0
  206. package/lib/dayjsLocales.js +36 -0
  207. package/lib/dayjsLocales.js.map +1 -0
  208. package/lib/hooks/useColorScheme.d.ts +9 -2
  209. package/lib/hooks/useColorScheme.d.ts.map +1 -1
  210. package/lib/hooks/useColorScheme.js +9 -3
  211. package/lib/hooks/useColorScheme.js.map +1 -1
  212. package/lib/hooks/useIcons.d.ts +4 -0
  213. package/lib/hooks/useIcons.d.ts.map +1 -0
  214. package/lib/hooks/useIcons.js +8 -0
  215. package/lib/hooks/useIcons.js.map +1 -0
  216. package/lib/hooks/useIsRTL.d.ts +3 -0
  217. package/lib/hooks/useIsRTL.d.ts.map +1 -0
  218. package/lib/hooks/useIsRTL.js +7 -0
  219. package/lib/hooks/useIsRTL.js.map +1 -0
  220. package/lib/hooks/useKeyboardVerticalOffset.d.ts +29 -8
  221. package/lib/hooks/useKeyboardVerticalOffset.d.ts.map +1 -1
  222. package/lib/hooks/useKeyboardVerticalOffset.js +41 -8
  223. package/lib/hooks/useKeyboardVerticalOffset.js.map +1 -1
  224. package/lib/hooks/useLabels.d.ts +4 -0
  225. package/lib/hooks/useLabels.d.ts.map +1 -0
  226. package/lib/hooks/useLabels.js +8 -0
  227. package/lib/hooks/useLabels.js.map +1 -0
  228. package/lib/hooks/useTheme.d.ts +21 -0
  229. package/lib/hooks/useTheme.d.ts.map +1 -0
  230. package/lib/hooks/useTheme.js +32 -0
  231. package/lib/hooks/useTheme.js.map +1 -0
  232. package/lib/i18n.d.ts +66 -0
  233. package/lib/i18n.d.ts.map +1 -0
  234. package/lib/i18n.js +53 -0
  235. package/lib/i18n.js.map +1 -0
  236. package/lib/index.d.ts +19 -0
  237. package/lib/index.d.ts.map +1 -1
  238. package/lib/index.js +19 -0
  239. package/lib/index.js.map +1 -1
  240. package/lib/locales/ar.d.ts +3 -0
  241. package/lib/locales/ar.d.ts.map +1 -0
  242. package/lib/locales/ar.js +22 -0
  243. package/lib/locales/ar.js.map +1 -0
  244. package/lib/locales/de.d.ts +3 -0
  245. package/lib/locales/de.d.ts.map +1 -0
  246. package/lib/locales/de.js +22 -0
  247. package/lib/locales/de.js.map +1 -0
  248. package/lib/locales/es.d.ts +3 -0
  249. package/lib/locales/es.d.ts.map +1 -0
  250. package/lib/locales/es.js +22 -0
  251. package/lib/locales/es.js.map +1 -0
  252. package/lib/locales/fr.d.ts +3 -0
  253. package/lib/locales/fr.d.ts.map +1 -0
  254. package/lib/locales/fr.js +22 -0
  255. package/lib/locales/fr.js.map +1 -0
  256. package/lib/locales/hi.d.ts +3 -0
  257. package/lib/locales/hi.d.ts.map +1 -0
  258. package/lib/locales/hi.js +22 -0
  259. package/lib/locales/hi.js.map +1 -0
  260. package/lib/locales/id.d.ts +3 -0
  261. package/lib/locales/id.d.ts.map +1 -0
  262. package/lib/locales/id.js +22 -0
  263. package/lib/locales/id.js.map +1 -0
  264. package/lib/locales/index.d.ts +19 -0
  265. package/lib/locales/index.d.ts.map +1 -0
  266. package/lib/locales/index.js +39 -0
  267. package/lib/locales/index.js.map +1 -0
  268. package/lib/locales/it.d.ts +3 -0
  269. package/lib/locales/it.d.ts.map +1 -0
  270. package/lib/locales/it.js +22 -0
  271. package/lib/locales/it.js.map +1 -0
  272. package/lib/locales/ja.d.ts +3 -0
  273. package/lib/locales/ja.d.ts.map +1 -0
  274. package/lib/locales/ja.js +22 -0
  275. package/lib/locales/ja.js.map +1 -0
  276. package/lib/locales/ko.d.ts +3 -0
  277. package/lib/locales/ko.d.ts.map +1 -0
  278. package/lib/locales/ko.js +22 -0
  279. package/lib/locales/ko.js.map +1 -0
  280. package/lib/locales/nl.d.ts +3 -0
  281. package/lib/locales/nl.d.ts.map +1 -0
  282. package/lib/locales/nl.js +22 -0
  283. package/lib/locales/nl.js.map +1 -0
  284. package/lib/locales/pl.d.ts +3 -0
  285. package/lib/locales/pl.d.ts.map +1 -0
  286. package/lib/locales/pl.js +22 -0
  287. package/lib/locales/pl.js.map +1 -0
  288. package/lib/locales/pt.d.ts +3 -0
  289. package/lib/locales/pt.d.ts.map +1 -0
  290. package/lib/locales/pt.js +22 -0
  291. package/lib/locales/pt.js.map +1 -0
  292. package/lib/locales/ru.d.ts +3 -0
  293. package/lib/locales/ru.d.ts.map +1 -0
  294. package/lib/locales/ru.js +22 -0
  295. package/lib/locales/ru.js.map +1 -0
  296. package/lib/locales/tr.d.ts +3 -0
  297. package/lib/locales/tr.d.ts.map +1 -0
  298. package/lib/locales/tr.js +22 -0
  299. package/lib/locales/tr.js.map +1 -0
  300. package/lib/locales/zh.d.ts +3 -0
  301. package/lib/locales/zh.d.ts.map +1 -0
  302. package/lib/locales/zh.js +22 -0
  303. package/lib/locales/zh.js.map +1 -0
  304. package/lib/rtl.d.ts +18 -0
  305. package/lib/rtl.d.ts.map +1 -0
  306. package/lib/rtl.js +31 -0
  307. package/lib/rtl.js.map +1 -0
  308. package/lib/types.d.ts +2 -1
  309. package/lib/types.d.ts.map +1 -1
  310. package/package.json +99 -44
  311. package/lib/MessageReply.d.ts +0 -15
  312. package/lib/MessageReply.d.ts.map +0 -1
  313. package/lib/MessageReply.js +0 -102
  314. package/lib/MessageReply.js.map +0 -1
  315. package/lib/ReplyPreview.d.ts +0 -14
  316. package/lib/ReplyPreview.d.ts.map +0 -1
  317. package/lib/ReplyPreview.js +0 -94
  318. package/lib/ReplyPreview.js.map +0 -1
@@ -1,21 +1,25 @@
1
1
  import React, { RefObject } from 'react';
2
2
  import { TextInput, StyleProp, TextStyle, ViewStyle } from 'react-native';
3
- import { ActionSheetOptions } from '@expo/react-native-action-sheet';
4
3
  import { KeyboardProvider, KeyboardAvoidingViewProps } from 'react-native-keyboard-controller';
5
4
  import { ActionsProps } from '../Actions';
6
5
  import { AvatarProps } from '../Avatar';
7
6
  import { BubbleProps } from '../Bubble';
7
+ import { ActionSheetOptions } from '../ChatContext';
8
+ import { AttachmentAction } from '../components/AttachmentSheet';
8
9
  import { ComposerProps } from '../Composer';
10
+ import { ChatLabels } from '../i18n';
11
+ import { ChatIcons } from '../Icons';
9
12
  import { InputToolbarProps } from '../InputToolbar';
10
13
  import { MessageImageProps } from '../MessageImage';
11
14
  import { AnimatedList, MessagesContainerProps } from '../MessagesContainer';
12
15
  import { MessageTextProps } from '../MessageText';
13
- import { IMessage, LeftRightStyle, MessageAudioProps, MessageVideoProps, User } from '../Models';
16
+ import { AudioRecordingProps, IMessage, LeftRightStyle, MessageAudioProps, MessageLocationProps, MessageMenuItem, MessageVideoProps, User, VideoRecordingProps } from '../Models';
14
17
  import { QuickRepliesProps } from '../QuickReplies';
15
18
  import { ReactionsProps } from '../Reactions';
16
19
  import { ReplyProps } from '../Reply';
17
20
  import { SendProps } from '../Send';
18
21
  import { SystemMessageProps } from '../SystemMessage';
22
+ import { PartialChatTheme } from '../Theme';
19
23
  import { TimeProps } from '../Time';
20
24
  export interface ChatProps<TMessage extends IMessage> extends Partial<Omit<MessagesContainerProps<TMessage>, 'messageReplyContainerStyle'>> {
21
25
  messagesContainerRef?: RefObject<AnimatedList<TMessage>>;
@@ -26,7 +30,17 @@ export interface ChatProps<TMessage extends IMessage> extends Partial<Omit<Messa
26
30
  initialText?: string;
27
31
  user?: User;
28
32
  locale?: string;
33
+ /**
34
+ * Force right-to-left layout on or off. Defaults to auto-detecting from `locale` (Arabic,
35
+ * Hebrew, Persian, Urdu, and a few others). Set this to override the guess - e.g. `true` for
36
+ * an RTL language not in the auto-detected set, or `false` to keep LTR layout for one of them.
37
+ */
38
+ forceRTL?: boolean;
29
39
  colorScheme?: 'light' | 'dark';
40
+ theme?: PartialChatTheme;
41
+ darkTheme?: PartialChatTheme;
42
+ icons?: ChatIcons;
43
+ labels?: Partial<ChatLabels>;
30
44
  timeFormat?: string;
31
45
  dateFormat?: string;
32
46
  dateFormatCalendar?: object;
@@ -34,16 +48,29 @@ export interface ChatProps<TMessage extends IMessage> extends Partial<Omit<Messa
34
48
  isAvatarVisibleForEveryMessage?: boolean;
35
49
  isAvatarOnTop?: boolean;
36
50
  imageProps?: MessageImageProps<TMessage>;
51
+ /**
52
+ * @deprecated Not read anywhere - the input toolbar has no height floor. Use
53
+ * `textInputProps.style` to constrain the composer instead. Will be removed
54
+ * in 5.0.0. See https://github.com/kesha-antonov/react-native-chat/issues/14
55
+ */
37
56
  minInputToolbarHeight?: number;
38
57
  textInputProps?: Partial<React.ComponentProps<typeof TextInput>>;
39
58
  isSendButtonAlwaysVisible?: boolean;
40
59
  imageStyle?: StyleProp<ViewStyle>;
60
+ /**
61
+ * @deprecated Not read anywhere - `Composer` derives its minimum from its own
62
+ * stylesheet and grows via `onContentSizeChange`. Use `textInputProps.style`
63
+ * to constrain the composer instead. Will be removed in 5.0.0.
64
+ * See https://github.com/kesha-antonov/react-native-chat/issues/14
65
+ */
41
66
  minComposerHeight?: number;
67
+ /**
68
+ * @deprecated Not read anywhere. Use `textInputProps.style` to constrain the
69
+ * composer instead. Will be removed in 5.0.0.
70
+ * See https://github.com/kesha-antonov/react-native-chat/issues/14
71
+ */
42
72
  maxComposerHeight?: number;
43
- actions?: Array<{
44
- title: string;
45
- action: () => void;
46
- }>;
73
+ actions?: AttachmentAction[];
47
74
  actionSheetOptionTintColor?: string;
48
75
  quickReplyStyle?: StyleProp<ViewStyle>;
49
76
  quickReplyTextStyle?: StyleProp<TextStyle>;
@@ -68,6 +95,7 @@ export interface ChatProps<TMessage extends IMessage> extends Partial<Omit<Messa
68
95
  renderMessageImage?: (props: MessageImageProps<TMessage>) => React.ReactNode;
69
96
  renderMessageVideo?: (props: MessageVideoProps<TMessage>) => React.ReactNode;
70
97
  renderMessageAudio?: (props: MessageAudioProps<TMessage>) => React.ReactNode;
98
+ renderMessageLocation?: (props: MessageLocationProps<TMessage>) => React.ReactNode;
71
99
  renderCustomView?: (props: BubbleProps<TMessage>) => React.ReactNode;
72
100
  renderTime?: (props: TimeProps<TMessage>) => React.ReactNode;
73
101
  renderChatFooter?: () => React.ReactNode;
@@ -80,43 +108,57 @@ export interface ChatProps<TMessage extends IMessage> extends Partial<Omit<Messa
80
108
  messageTextProps?: Partial<MessageTextProps<TMessage>>;
81
109
  renderQuickReplies?: (quickReplies: QuickRepliesProps<TMessage>) => React.ReactNode;
82
110
  renderQuickReplySend?: () => React.ReactNode;
83
- /**
84
- * Props for the built-in `KeyboardProvider`. Ignored when your app already mounts
85
- * its own - configure the provider where you mount it instead.
86
- */
87
111
  keyboardProviderProps?: React.ComponentProps<typeof KeyboardProvider>;
88
112
  /**
89
113
  * Skip rendering the built-in `KeyboardProvider` wrapper.
90
- * A `KeyboardProvider` mounted by your app is detected and reused automatically, so
91
- * this is only needed to opt out entirely - e.g. when the default `statusBarTranslucent` /
114
+ * Enable this when your app already mounts its own `KeyboardProvider`
115
+ * (e.g. once at the root), or when the default `statusBarTranslucent` /
92
116
  * `navigationBarTranslucent` edge-to-edge behavior causes layout shift,
93
117
  * flicker on mount, or a header/content jump on Android/Expo.
94
118
  * Default is `false`.
95
119
  */
96
120
  disableKeyboardProvider?: boolean;
121
+ /** Props for KeyboardAvoidingView. Use `keyboardVerticalOffset` to account for headers or iOS predictive text bar (~44pt). */
122
+ keyboardAvoidingViewProps?: KeyboardAvoidingViewProps;
97
123
  /**
98
- * Props for the `KeyboardAvoidingView` that keeps the input toolbar above the keyboard.
99
- *
100
- * `keyboardVerticalOffset` no longer needs to be set - Chat measures how far down the
101
- * window it sits, navigation header included. Pass it only to override that measurement:
102
- * too small leaves the toolbar behind the keyboard, too large leaves a gap above it.
124
+ * Skip the `GestureHandlerRootView` Chat mounts around itself. Unlike
125
+ * `KeyboardProvider`, an existing `GestureHandlerRootView` can't be detected from
126
+ * here - `react-native-gesture-handler` doesn't expose that publicly - so enable
127
+ * this yourself when your app (or a library it uses, e.g. a bottom sheet) already
128
+ * mounts one at the root. Nesting a second one is not just redundant: it changes
129
+ * the native view hierarchy around the composer, which has been observed to make
130
+ * a rare Fabric/Yoga layout assertion on iOS more likely (#17). Default is `false`.
103
131
  */
104
- keyboardAvoidingViewProps?: KeyboardAvoidingViewProps;
132
+ disableGestureHandlerRootView?: boolean;
105
133
  /** Enable animated day label that appears on scroll; default is true */
106
134
  isDayAnimationEnabled?: boolean;
107
135
  /** Reply functionality configuration */
108
136
  reply?: ReplyProps<TMessage>;
109
137
  /** Emoji reactions configuration */
110
138
  reactions?: ReactionsProps<TMessage>;
139
+ /** Telegram-style long-press context menu actions (array or per-message function) */
140
+ messageActions?: MessageMenuItem[] | ((message: TMessage) => MessageMenuItem[]);
111
141
  /**
112
- * Controls whether the bubble itself is part of the row's tap / long-press
113
- * surface that `reactions` relies on. Pass `false` (or a predicate returning
114
- * `false`) for messages that render natively interactive content - a video
115
- * player with its own controls, a map, a WebView - whose touches must not
116
- * compete with the bubble. The surface beside the bubble stays pressable
117
- * either way, so reactions are never lost for that message.
142
+ * Controls whether message bubbles attach the tap / long-press gestures that
143
+ * `reactions` and `messageActions` rely on. Pass `false` (or a predicate
144
+ * returning `false`) for messages rendering natively interactive content -
145
+ * a video player with its own controls, a map, a WebView - whose touches
146
+ * must not compete with the bubble.
147
+ * Note: with gestures off, those messages can no longer open the reaction
148
+ * picker or the context menu.
118
149
  * @default true
119
150
  */
120
151
  isMessageGestureEnabled?: boolean | ((message: TMessage) => boolean);
152
+ /** Show an emoji button inset on the left of the composer field; called on press */
153
+ onPressEmoji?: () => void;
154
+ /**
155
+ * Whether the composer accepts multiple lines. `true` (default) keeps the
156
+ * return key inserting a newline; `false` turns it into Send.
157
+ */
158
+ isMultiline?: boolean;
159
+ /** Telegram-style hold-to-record voice messages (needs optional expo-audio) */
160
+ audioRecording?: AudioRecordingProps;
161
+ /** Record-and-send video messages from the camera (needs optional expo-image-picker) */
162
+ videoRecording?: VideoRecordingProps;
121
163
  }
122
164
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Chat/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Chat/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAE9F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EACL,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,IAAI,EACJ,mBAAmB,EACpB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,MAAM,WAAW,SAAS,CAAC,QAAQ,SAAS,QAAQ,CAAE,SAAQ,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAEzI,oBAAoB,CAAC,EAAE,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;IAExD,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAEnC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,sBAAsB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAE7C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,IAAI,CAAC,EAAE,IAAI,CAAA;IAEX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAE9B,KAAK,CAAC,EAAE,gBAAgB,CAAA;IAExB,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAE5B,KAAK,CAAC,EAAE,SAAS,CAAA;IAEjB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAE5B,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B,8BAA8B,CAAC,EAAE,OAAO,CAAA;IAExC,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB,UAAU,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACxC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B,cAAc,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC,CAAA;IAEhE,yBAAyB,CAAC,EAAE,OAAO,CAAA;IAEnC,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IACjC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC5B,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IACtC,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAC1C,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAE/C,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IAEzC,WAAW,CAAC,EAAE,MAAM;QAClB,0BAA0B,EAAE,CAC1B,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KACpD,IAAI,CAAA;KACV,CAAA;IAED,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAEpC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAExC,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAA;IAEnD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAA;IAEvC,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IAErC,YAAY,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,CAAA;IAEzE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAEhE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAE9E,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IAE9D,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAA;IAElE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,SAAS,CAAA;IAGhD,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAEhF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAE5E,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAE5E,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAE5E,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAElF,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAEpE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAE5D,gBAAgB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IAExC,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;IAE7J,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,KAAK,CAAC,SAAS,CAAA;IAE1D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,CAAA;IAExD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAE5D,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAA;IAEzE,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAA;IAEhC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,kBAAkB,CAAC,EAAE,CACnB,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KACtC,KAAK,CAAC,SAAS,CAAA;IACpB,oBAAoB,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IAC5C,qBAAqB,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAA;IACrE;;;;;;;OAOG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,8HAA8H;IAC9H,yBAAyB,CAAC,EAAE,yBAAyB,CAAA;IACrD;;;;;;;;OAQG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAE/B,wCAAwC;IACxC,KAAK,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC5B,oCAAoC;IACpC,SAAS,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;IACpC,qFAAqF;IACrF,cAAc,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,eAAe,EAAE,CAAC,CAAA;IAC/E;;;;;;;;;OASG;IACH,uBAAuB,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAA;IACpE,oFAAoF;IACpF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,mBAAmB,CAAA;IACpC,wFAAwF;IACxF,cAAc,CAAC,EAAE,mBAAmB,CAAA;CACrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatAvatar.d.ts","sourceRoot":"","sources":["../src/ChatAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AACnD,OAAO,EAIL,SAAS,EACT,UAAU,EACV,SAAS,EACH,MAAM,cAAc,CAAA;AAG5B,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AA8B/B,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,WAAW,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IAC1C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;CAC/C;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,eAAe,qBAuIvB"}
1
+ {"version":3,"file":"ChatAvatar.d.ts","sourceRoot":"","sources":["../src/ChatAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AACnD,OAAO,EAIL,SAAS,EACT,UAAU,EACV,SAAS,EACH,MAAM,cAAc,CAAA;AAI5B,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAqB/B,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,WAAW,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IAC1C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;CAC/C;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,eAAe,qBAkIvB"}
package/lib/ChatAvatar.js CHANGED
@@ -2,9 +2,9 @@ import React, { useCallback, useMemo } from 'react';
2
2
  import { Image, View, StyleSheet, Text } from 'react-native';
3
3
  import { Color } from './Color';
4
4
  import { TouchableOpacity } from './components/TouchableOpacity';
5
+ import { useTheme, useThemedStyles } from './hooks/useTheme';
5
6
  import stylesCommon from './styles';
6
- const { carrot, emerald, peterRiver, wisteria, alizarin, turquoise, midnightBlue, } = Color;
7
- const styles = StyleSheet.create({
7
+ const createStyles = (theme) => StyleSheet.create({
8
8
  avatarStyle: {
9
9
  width: 40,
10
10
  height: 40,
@@ -14,7 +14,7 @@ const styles = StyleSheet.create({
14
14
  backgroundColor: Color.backgroundTransparent,
15
15
  },
16
16
  textStyle: {
17
- color: Color.white,
17
+ color: theme.avatar.textColor,
18
18
  fontSize: 16,
19
19
  backgroundColor: Color.backgroundTransparent,
20
20
  fontWeight: '100',
@@ -22,6 +22,8 @@ const styles = StyleSheet.create({
22
22
  });
23
23
  export function ChatAvatar(props) {
24
24
  const { user, avatarStyle, textStyle, onPress, } = props;
25
+ const theme = useTheme();
26
+ const styles = useThemedStyles(createStyles);
25
27
  const avatarName = useMemo(() => {
26
28
  const userName = user?.name || '';
27
29
  const name = userName.toUpperCase().split(' ');
@@ -38,18 +40,10 @@ export function ChatAvatar(props) {
38
40
  for (let i = 0; i < user.name.length; i += 1)
39
41
  sumChars += user.name.charCodeAt(i);
40
42
  // inspired by https://github.com/wbinnssmith/react-user-avatar
41
- // colors from https://flatuicolors.com/
42
- const colors = [
43
- carrot,
44
- emerald,
45
- peterRiver,
46
- wisteria,
47
- alizarin,
48
- turquoise,
49
- midnightBlue,
50
- ];
43
+ // palette is themeable via theme.avatar.palette
44
+ const colors = theme.avatar.palette;
51
45
  return colors[sumChars % colors.length];
52
- }, [user?.name]);
46
+ }, [user?.name, theme]);
53
47
  const renderAvatar = useCallback(() => {
54
48
  switch (typeof user?.avatar) {
55
49
  case 'function':
@@ -61,12 +55,12 @@ export function ChatAvatar(props) {
61
55
  default:
62
56
  return null;
63
57
  }
64
- }, [user, avatarStyle]);
58
+ }, [user, avatarStyle, styles]);
65
59
  const renderInitials = useCallback(() => {
66
60
  return (<Text style={[styles.textStyle, textStyle]}>
67
61
  {avatarName}
68
62
  </Text>);
69
- }, [textStyle, avatarName]);
63
+ }, [textStyle, avatarName, styles]);
70
64
  const handleOnPress = useCallback(() => {
71
65
  const { onPress, ...rest } = props;
72
66
  onPress?.(rest);
@@ -81,7 +75,7 @@ export function ChatAvatar(props) {
81
75
  styles.avatarStyle,
82
76
  styles.avatarTransparent,
83
77
  avatarStyle,
84
- ]} accessibilityRole='image'/>), [avatarStyle]);
78
+ ]} accessibilityRole='image'/>), [avatarStyle, styles]);
85
79
  if (!user || (!user.name && !user.avatar))
86
80
  return placeholderView;
87
81
  if (user.avatar)
@@ -1 +1 @@
1
- {"version":3,"file":"ChatAvatar.js","sourceRoot":"","sources":["../src/ChatAvatar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatAvatar.js","sourceRoot":"","sources":["../src/ChatAvatar.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,41 @@
1
1
  import { ColorSchemeName } from 'react-native';
2
- import { ActionSheetOptions } from '@expo/react-native-action-sheet';
2
+ import { ChatLabels } from './i18n';
3
+ import { ChatIcons } from './Icons';
4
+ import { ChatTheme } from './Theme';
5
+ /**
6
+ * Minimal, library-agnostic action-sheet options. The built-in UI no longer
7
+ * depends on @expo/react-native-action-sheet; this type lets consumers still
8
+ * plug their own action-sheet implementation in via the `actionSheet` prop
9
+ * (its options are a superset of these fields, so it stays compatible).
10
+ */
11
+ export interface ActionSheetOptions {
12
+ options: string[];
13
+ cancelButtonIndex?: number;
14
+ destructiveButtonIndex?: number | number[];
15
+ title?: string;
16
+ message?: string;
17
+ tintColor?: string;
18
+ [key: string]: unknown;
19
+ }
3
20
  export interface IChatContext {
4
21
  actionSheet(): {
5
22
  showActionSheetWithOptions: (options: ActionSheetOptions, callback: (buttonIndex?: number) => void | Promise<void>) => void;
6
23
  };
7
24
  getLocale(): string;
25
+ /** Whether the chat is laying out right-to-left (see `forceRTL` / `locale` on `Chat`). */
26
+ getIsRTL?(): boolean;
8
27
  getColorScheme(): ColorSchemeName | null | undefined;
28
+ /**
29
+ * The fully-resolved theme for the current color scheme (defaults merged with
30
+ * any `theme` / `darkTheme` overrides). Returns undefined when a component is
31
+ * rendered outside of `Chat`, in which case `useTheme` falls back to the
32
+ * built-in defaults for the system color scheme.
33
+ */
34
+ getTheme?(): ChatTheme | undefined;
35
+ /** Icon override registry (drawn icons are used for any name not provided). */
36
+ getIcons?(): ChatIcons | undefined;
37
+ /** Resolved UI labels for the current locale (English defaults outside Chat). */
38
+ getLabels?(): ChatLabels | undefined;
9
39
  }
10
40
  export declare const ChatContext: import("react").Context<IChatContext>;
11
41
  export declare const useChatContext: () => IChatContext;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../src/ChatContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EACL,kBAAkB,EACnB,MAAM,iCAAiC,CAAA;AAExC,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI;QACb,0BAA0B,EAAE,CAC1B,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KACrD,IAAI,CAAA;KACV,CAAA;IACD,SAAS,IAAI,MAAM,CAAA;IACnB,cAAc,IAAI,eAAe,GAAG,IAAI,GAAG,SAAS,CAAA;CACrD;AAED,eAAO,MAAM,WAAW,uCAMtB,CAAA;AAEF,eAAO,MAAM,cAAc,oBAAgC,CAAA"}
1
+ {"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../src/ChatContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI;QACb,0BAA0B,EAAE,CAC1B,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KACrD,IAAI,CAAA;KACV,CAAA;IACD,SAAS,IAAI,MAAM,CAAA;IACnB,0FAA0F;IAC1F,QAAQ,CAAC,IAAI,OAAO,CAAA;IACpB,cAAc,IAAI,eAAe,GAAG,IAAI,GAAG,SAAS,CAAA;IACpD;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,SAAS,GAAG,SAAS,CAAA;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,SAAS,GAAG,SAAS,CAAA;IAClC,iFAAiF;IACjF,SAAS,CAAC,IAAI,UAAU,GAAG,SAAS,CAAA;CACrC;AAED,eAAO,MAAM,WAAW,uCAUtB,CAAA;AAEF,eAAO,MAAM,cAAc,oBAAgC,CAAA"}
@@ -1,10 +1,14 @@
1
1
  import { createContext, useContext } from 'react';
2
2
  export const ChatContext = createContext({
3
3
  getLocale: () => 'en',
4
+ getIsRTL: () => false,
4
5
  actionSheet: () => ({
5
6
  showActionSheetWithOptions: () => { },
6
7
  }),
7
8
  getColorScheme: () => null,
9
+ getTheme: () => undefined,
10
+ getIcons: () => undefined,
11
+ getLabels: () => undefined,
8
12
  });
9
13
  export const useChatContext = () => useContext(ChatContext);
10
14
  //# sourceMappingURL=ChatContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatContext.js","sourceRoot":"","sources":["../src/ChatContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAiBjD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAe;IACrD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;IACrB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAClB,0BAA0B,EAAE,GAAG,EAAE,GAAE,CAAC;KACrC,CAAC;IACF,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"ChatContext.js","sourceRoot":"","sources":["../src/ChatContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AA8CjD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAe;IACrD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;IACrB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;IACrB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAClB,0BAA0B,EAAE,GAAG,EAAE,GAAE,CAAC;KACrC,CAAC;IACF,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;IAC1B,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;IACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;IACzB,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../src/Color.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;CAgBjB,CAAA"}
1
+ {"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../src/Color.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;CAoBjB,CAAA"}
package/lib/Color.js CHANGED
@@ -1,8 +1,12 @@
1
1
  export const Color = {
2
2
  defaultColor: '#b2b2b2',
3
3
  backgroundTransparent: 'transparent',
4
- defaultBlue: '#0084ff',
5
- leftBubbleBackground: '#f0f0f0',
4
+ // Modern azure accent (Telegram-style), replacing the old Messenger blue.
5
+ // Also exposed as `theme.colors.accent`; kept here for components that read
6
+ // Color directly (reply preview, swipe-to-reply icon) so the accent stays
7
+ // consistent across the whole UI.
8
+ defaultBlue: '#3390EC',
9
+ leftBubbleBackground: '#FFFFFF',
6
10
  black: '#000',
7
11
  white: '#fff',
8
12
  carrot: '#e67e22',
package/lib/Color.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Color.js","sourceRoot":"","sources":["../src/Color.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,YAAY,EAAE,SAAS;IACvB,qBAAqB,EAAE,aAAa;IACpC,WAAW,EAAE,SAAS;IACtB,oBAAoB,EAAE,SAAS;IAC/B,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,SAAS;IAC1B,aAAa,EAAE,MAAM;CACtB,CAAA"}
1
+ {"version":3,"file":"Color.js","sourceRoot":"","sources":["../src/Color.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,YAAY,EAAE,SAAS;IACvB,qBAAqB,EAAE,aAAa;IACpC,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,kCAAkC;IAClC,WAAW,EAAE,SAAS;IACtB,oBAAoB,EAAE,SAAS;IAC/B,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,SAAS;IAC1B,aAAa,EAAE,MAAM;CACtB,CAAA"}
package/lib/Composer.d.ts CHANGED
@@ -1,9 +1,22 @@
1
1
  import React from 'react';
2
2
  import { TextInputProps } from 'react-native';
3
+ import { IMessage } from './Models';
3
4
  export interface ComposerProps {
4
5
  composerHeight?: number;
5
6
  text?: string;
6
7
  textInputProps?: Partial<TextInputProps>;
8
+ /**
9
+ * Whether the field accepts multiple lines.
10
+ *
11
+ * `true` (default) keeps the return key inserting a newline - send with the
12
+ * send button. `false` turns the return key into Send, which is what a
13
+ * single-line composer should do. Previously the field was always multiline
14
+ * with no submit handler, so the return key could never send at all.
15
+ */
16
+ isMultiline?: boolean;
17
+ /** Allow sending an empty message (media-only sends). */
18
+ isTextOptional?: boolean;
19
+ onSend?(messages: Partial<IMessage> | Partial<IMessage>[], shouldResetInputToolbar: boolean): void;
7
20
  }
8
- export declare function Composer({ text, textInputProps, }: ComposerProps): React.ReactElement;
21
+ export declare function Composer({ text, textInputProps, isMultiline, isTextOptional, onSend, }: ComposerProps): React.ReactElement;
9
22
  //# sourceMappingURL=Composer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../src/Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAA;AACxE,OAAO,EAKL,cAAc,EAEf,MAAM,cAAc,CAAA;AAMrB,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CACzC;AAED,wBAAgB,QAAQ,CAAE,EACxB,IAAS,EACT,cAAc,GACf,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAgEpC"}
1
+ {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../src/Composer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAC1C,OAAO,EAEL,cAAc,EAEf,MAAM,cAAc,CAAA;AAMrB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IACxC;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,CACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,EACjD,uBAAuB,EAAE,OAAO,GAC/B,IAAI,CAAA;CACR;AAWD,wBAAgB,QAAQ,CAAE,EACxB,IAAS,EACT,cAAc,EACd,WAAkB,EAClB,cAAsB,EACtB,MAAM,GACP,EAAE,aAAa,GAAG,KAAK,CAAC,YAAY,CAyDpC"}
package/lib/Composer.js CHANGED
@@ -1,59 +1,77 @@
1
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
- import { Platform, StyleSheet, View, } from 'react-native';
1
+ import React, { useCallback } from 'react';
2
+ import { StyleSheet, View, } from 'react-native';
3
3
  import { TextInput } from 'react-native-gesture-handler';
4
- import { Color } from './Color';
5
4
  import { useColorScheme } from './hooks/useColorScheme';
6
- import stylesCommon, { getColorSchemeStyle } from './styles';
7
- export function Composer({ text = '', textInputProps, }) {
5
+ import { useIsRTL } from './hooks/useIsRTL';
6
+ import { useLabels } from './hooks/useLabels';
7
+ import { useTheme, useThemedStyles } from './hooks/useTheme';
8
+ // Static text-input metrics. lineHeight matches typography.message.lineHeight
9
+ // (21) so composed text and sent bubbles share identical metrics. The vertical
10
+ // padding is derived from the bar height (see createStyles) so a single line of
11
+ // text is vertically centered in the field.
12
+ const TEXT_INPUT_METRICS = {
13
+ fontSize: 16,
14
+ lineHeight: 21,
15
+ };
16
+ export function Composer({ text = '', textInputProps, isMultiline = true, isTextOptional = false, onSend, }) {
8
17
  const colorScheme = useColorScheme();
18
+ const theme = useTheme();
19
+ const labels = useLabels();
20
+ const styles = useThemedStyles(createStyles);
9
21
  const isDark = colorScheme === 'dark';
10
- const placeholder = textInputProps?.placeholder ?? 'Type a message...';
11
- const minHeight = useMemo(() => Platform.select({
12
- web: styles.textInput.lineHeight + styles.textInput.paddingTop + styles.textInput.paddingBottom,
13
- default: undefined,
14
- }), []);
15
- const [height, setHeight] = useState(minHeight);
16
- // Reset the (web) auto-grown height back to its minimum once the text is
17
- // cleared, e.g. after sending. Without this the composer stays expanded at
18
- // the height of the previously sent multiline message. (#2716)
19
- useEffect(() => {
20
- if (Platform.OS === 'web' && text.length === 0)
21
- setHeight(minHeight);
22
- }, [text, minHeight]);
23
- const handleContentSizeChange = useMemo(() => {
24
- if (Platform.OS === 'web')
25
- return (e) => {
26
- const contentHeight = e.nativeEvent.contentSize.height;
27
- setHeight(Math.max(minHeight ?? 0, contentHeight));
28
- };
29
- return undefined;
30
- }, [minHeight]);
31
- const handleChange = useCallback((event) => {
32
- if (Platform.OS === 'web')
33
- // Reset height to 0 to get the correct scrollHeight
34
- requestAnimationFrame(() => {
35
- // @ts-expect-error - web-specific code
36
- event.nativeEvent.target.style.height = '0px';
37
- // @ts-expect-error - web-specific code
38
- event.nativeEvent.target.style.height = `${event.nativeEvent.target.scrollHeight}px`;
39
- });
40
- }, []);
41
- return (<View style={stylesCommon.fill}>
42
- <TextInput testID={placeholder} accessible accessibilityLabel={placeholder} placeholderTextColor={textInputProps?.placeholderTextColor ?? (isDark ? '#888' : Color.defaultColor)} value={text} enablesReturnKeyAutomatically underlineColorAndroid='transparent' keyboardAppearance={isDark ? 'dark' : 'default'} multiline placeholder={placeholder} onContentSizeChange={handleContentSizeChange} onChange={handleChange} {...textInputProps} style={[getColorSchemeStyle(styles, 'textInput', colorScheme), stylesWeb.textInput, { height }, textInputProps?.style]}/>
22
+ const isRTL = useIsRTL();
23
+ const maxHeight = theme.composer.maxHeight;
24
+ const placeholder = textInputProps?.placeholder ?? labels.placeholder;
25
+ // A single line fills the bar height so its text sits centered (symmetric
26
+ // padding); it grows from there up to maxHeight.
27
+ const ONE_LINE = theme.composer.minHeight;
28
+ // Single-line mode: the return key sends, mirroring the send button exactly.
29
+ const handleSubmitEditing = useCallback(() => {
30
+ const trimmedText = text.trim();
31
+ if (onSend && (trimmedText.length || isTextOptional))
32
+ onSend({ text: trimmedText }, true);
33
+ }, [text, onSend, isTextOptional]);
34
+ return (<View style={styles.field}>
35
+ <TextInput testID={placeholder} accessible accessibilityLabel={placeholder} placeholderTextColor={textInputProps?.placeholderTextColor ?? theme.colors.placeholder} value={text} enablesReturnKeyAutomatically underlineColorAndroid='transparent' keyboardAppearance={isDark ? 'dark' : 'default'} multiline={isMultiline} placeholder={placeholder} {...(isMultiline
36
+ ? null
37
+ : {
38
+ returnKeyType: 'send',
39
+ onSubmitEditing: handleSubmitEditing,
40
+ // Keep the keyboard up after sending, the way a chat should behave.
41
+ submitBehavior: 'submit',
42
+ })} {...textInputProps} style={[
43
+ styles.textInput,
44
+ stylesWeb.textInput,
45
+ { minHeight: ONE_LINE, maxHeight },
46
+ // Otherwise an empty RTL-locale field has nothing to auto-detect
47
+ // direction from: the caret and placeholder would default to LTR.
48
+ isRTL && { writingDirection: 'rtl', textAlign: 'right' },
49
+ textInputProps?.style,
50
+ ]}/>
43
51
  </View>);
44
52
  }
45
- const styles = StyleSheet.create({
46
- textInput: {
47
- fontSize: 16,
48
- lineHeight: 22,
49
- paddingTop: 8,
50
- paddingBottom: 10,
51
- paddingHorizontal: 8,
52
- },
53
- textInput_dark: {
54
- color: '#fff',
55
- },
56
- });
53
+ const createStyles = (theme) => {
54
+ // Center a single line vertically: split the leftover space (bar height minus
55
+ // one line of text) into equal top/bottom padding.
56
+ const paddingVertical = Math.max(4, (theme.composer.minHeight - TEXT_INPUT_METRICS.lineHeight) / 2);
57
+ return StyleSheet.create({
58
+ // Transparent slot: the rounded pill is provided by the InputToolbar field
59
+ // group so the inset emoji/attachment buttons share the pill surface.
60
+ field: {
61
+ flex: 1,
62
+ justifyContent: 'center',
63
+ minHeight: theme.composer.minHeight,
64
+ },
65
+ textInput: {
66
+ fontSize: TEXT_INPUT_METRICS.fontSize,
67
+ lineHeight: TEXT_INPUT_METRICS.lineHeight,
68
+ paddingTop: paddingVertical,
69
+ paddingBottom: paddingVertical,
70
+ paddingHorizontal: 0,
71
+ color: theme.colors.inputText,
72
+ },
73
+ });
74
+ };
57
75
  const stylesWeb = StyleSheet.create({
58
76
  textInput: {
59
77
  /* @ts-expect-error - web-specific styles */
@@ -1 +1 @@
1
- {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../src/Composer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../src/Composer.tsx"],"names":[],"mappings":"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"}
package/lib/Constant.d.ts CHANGED
@@ -2,6 +2,7 @@ export declare const DATE_FORMAT = "D MMMM";
2
2
  export declare const TIME_FORMAT = "LT";
3
3
  export declare const TEST_ID: {
4
4
  WRAPPER: string;
5
+ CONTENT: string;
5
6
  LOADING_WRAPPER: string;
6
7
  SEND_TOUCHABLE: string;
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../src/Constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,WAAW,CAAA;AACnC,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B,eAAO,MAAM,OAAO;;;;CAInB,CAAA"}
1
+ {"version":3,"file":"Constant.d.ts","sourceRoot":"","sources":["../src/Constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,WAAW,CAAA;AACnC,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B,eAAO,MAAM,OAAO;;;;;CAKnB,CAAA"}
package/lib/Constant.js CHANGED
@@ -2,6 +2,7 @@ export const DATE_FORMAT = 'D MMMM';
2
2
  export const TIME_FORMAT = 'LT';
3
3
  export const TEST_ID = {
4
4
  WRAPPER: 'GC_WRAPPER',
5
+ CONTENT: 'GC_CONTENT',
5
6
  LOADING_WRAPPER: 'GC_LOADING_CONTAINER',
6
7
  SEND_TOUCHABLE: 'GC_SEND_TOUCHABLE',
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Constant.js","sourceRoot":"","sources":["../src/Constant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAA;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAA;AAE/B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,OAAO,EAAE,YAAY;IACrB,eAAe,EAAE,sBAAsB;IACvC,cAAc,EAAE,mBAAmB;CACpC,CAAA"}
1
+ {"version":3,"file":"Constant.js","sourceRoot":"","sources":["../src/Constant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAA;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAA;AAE/B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,eAAe,EAAE,sBAAsB;IACvC,cAAc,EAAE,mBAAmB;CACpC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Day/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAWtC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,cAAc,SAAS,CAAA;AAKvB,wBAAgB,GAAG,CAAE,EACnB,UAAwB,EACxB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,GACV,EAAE,QAAQ,4BAkCV"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Day/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAatC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,cAAc,SAAS,CAAA;AAKvB,wBAAgB,GAAG,CAAE,EACnB,UAAwB,EACxB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,GACV,EAAE,QAAQ,4BAoCV"}