@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,8 +1,15 @@
1
+ import { ColorSchemeName } from 'react-native';
2
+ /**
3
+ * React Native 0.86 widened `ColorSchemeName` with `'unspecified'`, which means
4
+ * "no preference expressed" rather than a real scheme. Everything downstream
5
+ * only understands light/dark, so collapse it (and `undefined`) to `null`.
6
+ */
7
+ export declare const normalizeColorScheme: (scheme: ColorSchemeName | "light" | "dark" | null | undefined) => "light" | "dark" | null;
1
8
  /**
2
9
  * Custom hook that returns the color scheme from Chat context if provided,
3
10
  * otherwise falls back to the system color scheme from React Native.
4
11
  *
5
- * @returns The current color scheme ('light', 'dark', null, or undefined)
12
+ * @returns The current color scheme ('light', 'dark', or null)
6
13
  */
7
- export declare function useColorScheme(): import("react-native").ColorSchemeName;
14
+ export declare function useColorScheme(): "light" | "dark" | null;
8
15
  //# sourceMappingURL=useColorScheme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useColorScheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,cAAc,2CAQ7B"}
1
+ {"version":3,"file":"useColorScheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAsC,MAAM,cAAc,CAAA;AAGlF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KAC5D,OAAO,GAAG,MAAM,GAAG,IACmC,CAAA;AAEzD;;;;;GAKG;AACH,wBAAgB,cAAc,4BAU7B"}
@@ -1,17 +1,23 @@
1
1
  import { useColorScheme as useRNColorScheme } from 'react-native';
2
2
  import { useChatContext } from '../ChatContext';
3
+ /**
4
+ * React Native 0.86 widened `ColorSchemeName` with `'unspecified'`, which means
5
+ * "no preference expressed" rather than a real scheme. Everything downstream
6
+ * only understands light/dark, so collapse it (and `undefined`) to `null`.
7
+ */
8
+ export const normalizeColorScheme = (scheme) => scheme === 'light' || scheme === 'dark' ? scheme : null;
3
9
  /**
4
10
  * Custom hook that returns the color scheme from Chat context if provided,
5
11
  * otherwise falls back to the system color scheme from React Native.
6
12
  *
7
- * @returns The current color scheme ('light', 'dark', null, or undefined)
13
+ * @returns The current color scheme ('light', 'dark', or null)
8
14
  */
9
15
  export function useColorScheme() {
10
16
  const { getColorScheme } = useChatContext();
11
17
  const contextColorScheme = getColorScheme();
12
18
  const systemColorScheme = useRNColorScheme();
13
- return contextColorScheme !== undefined && contextColorScheme !== null
19
+ return normalizeColorScheme(contextColorScheme !== undefined && contextColorScheme !== null
14
20
  ? contextColorScheme
15
- : systemColorScheme;
21
+ : systemColorScheme);
16
22
  }
17
23
  //# sourceMappingURL=useColorScheme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useColorScheme.js","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAA;IAE5C,OAAO,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI;QACpE,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,iBAAiB,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"useColorScheme.js","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAA6D,EACpC,EAAE,CAC3B,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAA;IAE5C,OAAO,oBAAoB,CACzB,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI;QAC7D,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,iBAAiB,CACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ChatIcons } from '../Icons';
2
+ /** Returns the icon override registry from context (empty outside of Chat). */
3
+ export declare function useIcons(): ChatIcons;
4
+ //# sourceMappingURL=useIcons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIcons.d.ts","sourceRoot":"","sources":["../../src/hooks/useIcons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIpC,+EAA+E;AAC/E,wBAAgB,QAAQ,IAAK,SAAS,CAGrC"}
@@ -0,0 +1,8 @@
1
+ import { useChatContext } from '../ChatContext';
2
+ const EMPTY = {};
3
+ /** Returns the icon override registry from context (empty outside of Chat). */
4
+ export function useIcons() {
5
+ const { getIcons } = useChatContext();
6
+ return getIcons?.() ?? EMPTY;
7
+ }
8
+ //# sourceMappingURL=useIcons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIcons.js","sourceRoot":"","sources":["../../src/hooks/useIcons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAG/C,MAAM,KAAK,GAAc,EAAE,CAAA;AAE3B,+EAA+E;AAC/E,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAA;IACrC,OAAO,QAAQ,EAAE,EAAE,IAAI,KAAK,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Whether the chat is laying out right-to-left (`false` when used outside `Chat`). */
2
+ export declare function useIsRTL(): boolean;
3
+ //# sourceMappingURL=useIsRTL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsRTL.d.ts","sourceRoot":"","sources":["../../src/hooks/useIsRTL.ts"],"names":[],"mappings":"AAEA,uFAAuF;AACvF,wBAAgB,QAAQ,IAAK,OAAO,CAGnC"}
@@ -0,0 +1,7 @@
1
+ import { useChatContext } from '../ChatContext';
2
+ /** Whether the chat is laying out right-to-left (`false` when used outside `Chat`). */
3
+ export function useIsRTL() {
4
+ const { getIsRTL } = useChatContext();
5
+ return getIsRTL?.() ?? false;
6
+ }
7
+ //# sourceMappingURL=useIsRTL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIsRTL.js","sourceRoot":"","sources":["../../src/hooks/useIsRTL.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,uFAAuF;AACvF,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAA;IACrC,OAAO,QAAQ,EAAE,EAAE,IAAI,KAAK,CAAA;AAC9B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { View } from 'react-native';
1
2
  /**
2
3
  * How far down the window the chat container starts - the value
3
4
  * `KeyboardAvoidingView` needs to keep the input toolbar on top of the keyboard.
@@ -7,13 +8,33 @@
7
8
  * roughly a header-height too low, i.e. behind the keyboard.
8
9
  * See https://github.com/kesha-antonov/react-native-chat/issues/11
9
10
  *
10
- * The `SafeAreaProvider` that `ChatWrapper` mounts right around us reports exactly
11
- * this: its frame is measured natively against the root view
12
- * (`offsetDescendantRectToMyCoords` on Android, `convertRect:toView:` on iOS) and
13
- * refreshed on every layout change. That provider is what makes this work - it is
14
- * mounted unconditionally on purpose, and every wrapper between it and the
15
- * `KeyboardAvoidingView` is a zero-offset fill view so that its top edge and the
16
- * chat's top edge are the same line.
11
+ * It cannot come from `useSafeAreaFrame()` alone either. That reads the nearest
12
+ * `SafeAreaProvider`, and react-native-safe-area-context (v5) seeds a nested
13
+ * provider from its *parent's* metrics - so when the host app already mounts one
14
+ * at the root (the documented setup, and what expo-router does), the provider
15
+ * `ChatWrapper` mounts reports the root frame and `y` stays 0 no matter where the
16
+ * chat actually sits. A chat under a navigation header then got offset 0 and its
17
+ * toolbar landed a header-height too low: back behind the keyboard.
18
+ *
19
+ * So the offset is measured from the chat container itself, in window
20
+ * coordinates, and the safe-area frame is kept only as the pre-measurement
21
+ * seed. Attach `onLayout`/`ref` to the view that wraps the chat.
22
+ *
23
+ * `isMeasured` reports whether that real measurement has landed yet, as opposed
24
+ * to `keyboardVerticalOffset` still being the seed. It exists because the seed
25
+ * can be wrong, not just imprecise: Chat mounts its own `SafeAreaProvider`
26
+ * seeded with the *window's* frame (`y = 0`), so a chat nested below a header
27
+ * briefly reports offset 0 - correct for a full-screen chat, wrong for this one -
28
+ * until `measureInWindow`'s native round trip resolves. Reveal the toolbar only
29
+ * once `isMeasured` is true so it never paints at that wrong offset, which
30
+ * otherwise showed as the toolbar sitting under the keyboard for a frame when
31
+ * the keyboard was already up as the chat mounted.
32
+ * See https://github.com/kesha-antonov/react-native-chat/issues/12
17
33
  */
18
- export declare function useKeyboardVerticalOffset(): number;
34
+ export declare function useKeyboardVerticalOffset(): {
35
+ ref: import("react").RefObject<View | null>;
36
+ onLayout: () => void;
37
+ keyboardVerticalOffset: number;
38
+ isMeasured: boolean;
39
+ };
19
40
  //# sourceMappingURL=useKeyboardVerticalOffset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardVerticalOffset.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,IAAK,MAAM,CAEnD"}
1
+ {"version":3,"file":"useKeyboardVerticalOffset.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,yBAAyB;;;;;EAqBxC"}
@@ -1,3 +1,4 @@
1
+ import { useCallback, useRef, useState } from 'react';
1
2
  import { useSafeAreaFrame } from 'react-native-safe-area-context';
2
3
  /**
3
4
  * How far down the window the chat container starts - the value
@@ -8,15 +9,47 @@ import { useSafeAreaFrame } from 'react-native-safe-area-context';
8
9
  * roughly a header-height too low, i.e. behind the keyboard.
9
10
  * See https://github.com/kesha-antonov/react-native-chat/issues/11
10
11
  *
11
- * The `SafeAreaProvider` that `ChatWrapper` mounts right around us reports exactly
12
- * this: its frame is measured natively against the root view
13
- * (`offsetDescendantRectToMyCoords` on Android, `convertRect:toView:` on iOS) and
14
- * refreshed on every layout change. That provider is what makes this work - it is
15
- * mounted unconditionally on purpose, and every wrapper between it and the
16
- * `KeyboardAvoidingView` is a zero-offset fill view so that its top edge and the
17
- * chat's top edge are the same line.
12
+ * It cannot come from `useSafeAreaFrame()` alone either. That reads the nearest
13
+ * `SafeAreaProvider`, and react-native-safe-area-context (v5) seeds a nested
14
+ * provider from its *parent's* metrics - so when the host app already mounts one
15
+ * at the root (the documented setup, and what expo-router does), the provider
16
+ * `ChatWrapper` mounts reports the root frame and `y` stays 0 no matter where the
17
+ * chat actually sits. A chat under a navigation header then got offset 0 and its
18
+ * toolbar landed a header-height too low: back behind the keyboard.
19
+ *
20
+ * So the offset is measured from the chat container itself, in window
21
+ * coordinates, and the safe-area frame is kept only as the pre-measurement
22
+ * seed. Attach `onLayout`/`ref` to the view that wraps the chat.
23
+ *
24
+ * `isMeasured` reports whether that real measurement has landed yet, as opposed
25
+ * to `keyboardVerticalOffset` still being the seed. It exists because the seed
26
+ * can be wrong, not just imprecise: Chat mounts its own `SafeAreaProvider`
27
+ * seeded with the *window's* frame (`y = 0`), so a chat nested below a header
28
+ * briefly reports offset 0 - correct for a full-screen chat, wrong for this one -
29
+ * until `measureInWindow`'s native round trip resolves. Reveal the toolbar only
30
+ * once `isMeasured` is true so it never paints at that wrong offset, which
31
+ * otherwise showed as the toolbar sitting under the keyboard for a frame when
32
+ * the keyboard was already up as the chat mounted.
33
+ * See https://github.com/kesha-antonov/react-native-chat/issues/12
18
34
  */
19
35
  export function useKeyboardVerticalOffset() {
20
- return useSafeAreaFrame().y;
36
+ const frameY = useSafeAreaFrame().y;
37
+ const ref = useRef(null);
38
+ const [measured, setMeasured] = useState(null);
39
+ const onLayout = useCallback(() => {
40
+ // measureInWindow, not the layout event: the event reports the position
41
+ // within the parent, which is 0 for a fill view and tells us nothing about
42
+ // where the chat sits on screen.
43
+ ref.current?.measureInWindow((_x, y) => {
44
+ if (Number.isFinite(y))
45
+ setMeasured(previous => (previous === y ? previous : y));
46
+ });
47
+ }, []);
48
+ return {
49
+ ref,
50
+ onLayout,
51
+ keyboardVerticalOffset: measured ?? frameY,
52
+ isMeasured: measured !== null,
53
+ };
21
54
  }
22
55
  //# sourceMappingURL=useKeyboardVerticalOffset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboardVerticalOffset.js","sourceRoot":"","sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEjE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,gBAAgB,EAAE,CAAC,CAAC,CAAA;AAC7B,CAAC"}
1
+ {"version":3,"file":"useKeyboardVerticalOffset.js","sourceRoot":"","sources":["../../src/hooks/useKeyboardVerticalOffset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAA;IACnC,MAAM,GAAG,GAAG,MAAM,CAAO,IAAI,CAAC,CAAA;IAC9B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAE7D,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,wEAAwE;QACxE,2EAA2E;QAC3E,iCAAiC;QACjC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpB,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO;QACL,GAAG;QACH,QAAQ;QACR,sBAAsB,EAAE,QAAQ,IAAI,MAAM;QAC1C,UAAU,EAAE,QAAQ,KAAK,IAAI;KAC9B,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ChatLabels } from '../i18n';
2
+ /** Returns the resolved UI labels (English defaults when used outside Chat). */
3
+ export declare function useLabels(): ChatLabels;
4
+ //# sourceMappingURL=useLabels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLabels.d.ts","sourceRoot":"","sources":["../../src/hooks/useLabels.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAA;AAEnD,gFAAgF;AAChF,wBAAgB,SAAS,IAAK,UAAU,CAGvC"}
@@ -0,0 +1,8 @@
1
+ import { useChatContext } from '../ChatContext';
2
+ import { defaultLabels } from '../i18n';
3
+ /** Returns the resolved UI labels (English defaults when used outside Chat). */
4
+ export function useLabels() {
5
+ const { getLabels } = useChatContext();
6
+ return getLabels?.() ?? defaultLabels;
7
+ }
8
+ //# sourceMappingURL=useLabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLabels.js","sourceRoot":"","sources":["../../src/hooks/useLabels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAc,aAAa,EAAE,MAAM,SAAS,CAAA;AAEnD,gFAAgF;AAChF,MAAM,UAAU,SAAS;IACvB,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAA;IACtC,OAAO,SAAS,EAAE,EAAE,IAAI,aAAa,CAAA;AACvC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { ChatTheme } from '../Theme';
2
+ /**
3
+ * Returns the active {@link ChatTheme}. Inside `Chat` this is the resolved theme
4
+ * shared through context (defaults merged with `theme` / `darkTheme` overrides),
5
+ * so switching the theme prop or the system color scheme at runtime updates
6
+ * every consumer. Used standalone (outside `Chat`), it falls back to the
7
+ * built-in defaults for the current system color scheme.
8
+ */
9
+ export declare function useTheme(): ChatTheme;
10
+ /**
11
+ * DRY helper for theme-aware StyleSheets. Pass a module-level factory that maps
12
+ * a theme to a `StyleSheet.create(...)` result; the styles are memoized on the
13
+ * theme, so they are rebuilt only when the theme actually changes.
14
+ *
15
+ * @example
16
+ * const createStyles = (theme: ChatTheme) => StyleSheet.create({ ... })
17
+ * // inside a component:
18
+ * const styles = useThemedStyles(createStyles)
19
+ */
20
+ export declare function useThemedStyles<T>(factory: (theme: ChatTheme) => T): T;
21
+ //# sourceMappingURL=useTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAuC,MAAM,UAAU,CAAA;AAGzE;;;;;;GAMG;AACH,wBAAgB,QAAQ,IAAK,SAAS,CASrC;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAG,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,CAGvE"}
@@ -0,0 +1,32 @@
1
+ import { useMemo } from 'react';
2
+ import { useChatContext } from '../ChatContext';
3
+ import { defaultDarkTheme, defaultLightTheme } from '../Theme';
4
+ import { useColorScheme } from './useColorScheme';
5
+ /**
6
+ * Returns the active {@link ChatTheme}. Inside `Chat` this is the resolved theme
7
+ * shared through context (defaults merged with `theme` / `darkTheme` overrides),
8
+ * so switching the theme prop or the system color scheme at runtime updates
9
+ * every consumer. Used standalone (outside `Chat`), it falls back to the
10
+ * built-in defaults for the current system color scheme.
11
+ */
12
+ export function useTheme() {
13
+ const colorScheme = useColorScheme();
14
+ const { getTheme } = useChatContext();
15
+ const contextTheme = getTheme?.();
16
+ return useMemo(() => contextTheme ?? (colorScheme === 'dark' ? defaultDarkTheme : defaultLightTheme), [contextTheme, colorScheme]);
17
+ }
18
+ /**
19
+ * DRY helper for theme-aware StyleSheets. Pass a module-level factory that maps
20
+ * a theme to a `StyleSheet.create(...)` result; the styles are memoized on the
21
+ * theme, so they are rebuilt only when the theme actually changes.
22
+ *
23
+ * @example
24
+ * const createStyles = (theme: ChatTheme) => StyleSheet.create({ ... })
25
+ * // inside a component:
26
+ * const styles = useThemedStyles(createStyles)
27
+ */
28
+ export function useThemedStyles(factory) {
29
+ const theme = useTheme();
30
+ return useMemo(() => factory(theme), [factory, theme]);
31
+ }
32
+ //# sourceMappingURL=useTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.js","sourceRoot":"","sources":["../../src/hooks/useTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAa,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAA;IACrC,MAAM,YAAY,GAAG,QAAQ,EAAE,EAAE,CAAA;IAEjC,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,YAAY,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,EACrF,CAAC,YAAY,EAAE,WAAW,CAAC,CAC5B,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAK,OAAgC;IAClE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;AACxD,CAAC"}
package/lib/i18n.d.ts ADDED
@@ -0,0 +1,66 @@
1
+ /**
2
+ * UI string localization for the chat. Date/time localization (month/day names, calendar
3
+ * formats) is handled separately by Day.js via the `locale` prop - dayjsLocales.ts bundles the
4
+ * matching dayjs locale for every language translated here, kept in sync via the
5
+ * `SupportedLocale` type in ./locales (compile time) and dayjsLocales.test.ts (runtime). This
6
+ * file covers the static UI labels (composer placeholder, buttons, recording hint, media/
7
+ * location labels, etc.); the actual per-language strings live one-per-file under `src/locales/`.
8
+ *
9
+ * Provide overrides through the `labels` prop on `Chat`, or rely on the built-in
10
+ * translations selected by the `locale` prop. Labels resolve as:
11
+ * labels (prop) > translations[locale] > defaultLabels (English)
12
+ */
13
+ import { translations } from './locales';
14
+ export interface ChatLabels {
15
+ /** Composer placeholder. */
16
+ placeholder: string;
17
+ /** Send button / quick-reply send label. */
18
+ send: string;
19
+ /** Cancel row in the attachment sheet. */
20
+ cancel: string;
21
+ /** "Load earlier messages" button. */
22
+ loadEarlier: string;
23
+ /** Day separator label for today's date. */
24
+ today: string;
25
+ /** Video message fallback label. */
26
+ video: string;
27
+ /** Voice/audio message fallback label. */
28
+ voiceMessage: string;
29
+ videoMessage: string;
30
+ /** Location message title. */
31
+ location: string;
32
+ /** Accessibility label for the location card. */
33
+ openLocationAccessibility: string;
34
+ /** Voice recording slide-to-cancel hint. */
35
+ slideToCancel: string;
36
+ /** Reply banner title; `{name}` is replaced with the author's name. */
37
+ replyingTo: string;
38
+ /** Edit banner title. */
39
+ editing: string;
40
+ /** Shown in the video recorder when camera permission is missing. */
41
+ cameraPermission: string;
42
+ /** Shown in the video recorder when no camera device is found. */
43
+ noCamera: string;
44
+ /** Hint under the video recorder's shutter while a take is running. */
45
+ stopAndSend: string;
46
+ /** Hint under the video recorder's shutter before recording starts. */
47
+ tapToRecord: string;
48
+ /** Hint while holding the video shutter. */
49
+ releaseToSend: string;
50
+ /** Idle hint for the hold-to-record video shutter. */
51
+ holdToRecord: string;
52
+ }
53
+ export declare const defaultLabels: ChatLabels;
54
+ /**
55
+ * Built-in translations (a starter set), one language per file under `src/locales/`. Re-exported
56
+ * here so `import { translations } from 'react-native-chat'` keeps working.
57
+ */
58
+ export { translations };
59
+ /**
60
+ * Resolve the active labels: the `labels` override on top of the built-in
61
+ * translation for `locale` (if any) on top of English defaults.
62
+ */
63
+ export declare function resolveLabels(locale?: string, labels?: Partial<ChatLabels>): ChatLabels;
64
+ /** Interpolate `{name}`-style placeholders in a label. */
65
+ export declare function formatLabel(label: string, values: Record<string, string | number>): string;
66
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAwB,YAAY,EAAE,MAAM,WAAW,CAAA;AAE9D,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,yBAAyB,EAAE,MAAM,CAAA;IACjC,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAA;IAClB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAA;IACxB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAA;IAChB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,UAoB3B,CAAA;AAED;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC3B,UAAU,CAIZ;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAE3F"}
package/lib/i18n.js ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * UI string localization for the chat. Date/time localization (month/day names, calendar
3
+ * formats) is handled separately by Day.js via the `locale` prop - dayjsLocales.ts bundles the
4
+ * matching dayjs locale for every language translated here, kept in sync via the
5
+ * `SupportedLocale` type in ./locales (compile time) and dayjsLocales.test.ts (runtime). This
6
+ * file covers the static UI labels (composer placeholder, buttons, recording hint, media/
7
+ * location labels, etc.); the actual per-language strings live one-per-file under `src/locales/`.
8
+ *
9
+ * Provide overrides through the `labels` prop on `Chat`, or rely on the built-in
10
+ * translations selected by the `locale` prop. Labels resolve as:
11
+ * labels (prop) > translations[locale] > defaultLabels (English)
12
+ */
13
+ import { matchSupportedLocale, translations } from './locales';
14
+ export const defaultLabels = {
15
+ placeholder: 'Type a message...',
16
+ send: 'Send',
17
+ cancel: 'Cancel',
18
+ loadEarlier: 'Load earlier messages',
19
+ today: 'Today',
20
+ video: 'Video',
21
+ voiceMessage: 'Voice message',
22
+ videoMessage: 'Video message',
23
+ location: 'Location',
24
+ openLocationAccessibility: 'Open location in maps',
25
+ slideToCancel: 'Slide left to cancel...',
26
+ replyingTo: 'Replying to {name}',
27
+ editing: 'Editing',
28
+ cameraPermission: 'Camera permission needed',
29
+ noCamera: 'No camera available',
30
+ stopAndSend: 'Tap to stop and send',
31
+ tapToRecord: 'Tap to record',
32
+ releaseToSend: 'Release to send, slide up to lock',
33
+ holdToRecord: 'Hold to record',
34
+ };
35
+ /**
36
+ * Built-in translations (a starter set), one language per file under `src/locales/`. Re-exported
37
+ * here so `import { translations } from 'react-native-chat'` keeps working.
38
+ */
39
+ export { translations };
40
+ /**
41
+ * Resolve the active labels: the `labels` override on top of the built-in
42
+ * translation for `locale` (if any) on top of English defaults.
43
+ */
44
+ export function resolveLabels(locale, labels) {
45
+ const matched = matchSupportedLocale(locale);
46
+ const translated = matched ? translations[matched] : undefined;
47
+ return { ...defaultLabels, ...translated, ...labels };
48
+ }
49
+ /** Interpolate `{name}`-style placeholders in a label. */
50
+ export function formatLabel(label, values) {
51
+ return label.replace(/\{(\w+)\}/g, (_match, key) => String(values[key] ?? ''));
52
+ }
53
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AA0C9D,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,WAAW,EAAE,mBAAmB;IAChC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,uBAAuB;IACpC,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;IAC7B,QAAQ,EAAE,UAAU;IACpB,yBAAyB,EAAE,uBAAuB;IAClD,aAAa,EAAE,yBAAyB;IACxC,UAAU,EAAE,oBAAoB;IAChC,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,0BAA0B;IAC5C,QAAQ,EAAE,qBAAqB;IAC/B,WAAW,EAAE,sBAAsB;IACnC,WAAW,EAAE,eAAe;IAC5B,aAAa,EAAE,mCAAmC;IAClD,YAAY,EAAE,gBAAgB;CAC/B,CAAA;AAED;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAe,EACf,MAA4B;IAE5B,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,OAAO,EAAE,GAAG,aAAa,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,EAAE,CAAA;AACvD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,WAAW,CAAE,KAAa,EAAE,MAAuC;IACjF,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAChF,CAAC"}
package/lib/index.d.ts CHANGED
@@ -8,6 +8,10 @@ export * from './linkParser';
8
8
  export * from './Reply';
9
9
  export * from './Reactions';
10
10
  export * from './styles';
11
+ export * from './Theme';
12
+ export * from './Icons';
13
+ export * from './i18n';
14
+ export { isRTLLocale, mirrorPosition } from './rtl';
11
15
  export { Color } from './Color';
12
16
  export { Actions } from './Actions';
13
17
  export { Avatar } from './Avatar';
@@ -15,6 +19,16 @@ export { Bubble } from './Bubble';
15
19
  export { SystemMessage } from './SystemMessage';
16
20
  export { MessageImage } from './MessageImage';
17
21
  export { MessageText } from './MessageText';
22
+ export { MessageLocation } from './MessageLocation';
23
+ export { MediaCard } from './components/MediaCard';
24
+ export { AttachmentSheet } from './components/AttachmentSheet';
25
+ export { ContextMenu } from './components/ContextMenu';
26
+ export { MarkdownMessageText, isMarkdownAvailable } from './components/MarkdownMessageText';
27
+ export { BasicMarkdown } from './components/BasicMarkdown';
28
+ export { WaveformPlayer, isWaveformAvailable } from './components/WaveformPlayer';
29
+ export { VoiceMessageInput, isVoiceRecordingAvailable } from './components/VoiceMessageInput';
30
+ export { VideoRecordButton, isVideoRecordingAvailable } from './components/VideoRecordButton';
31
+ export { VideoNoteRecorder, isVisionCameraAvailable } from './components/VideoNoteRecorder';
18
32
  export { Composer } from './Composer';
19
33
  export { Day } from './Day';
20
34
  export { InputToolbar } from './InputToolbar';
@@ -30,6 +44,11 @@ export { MessageReply } from './components/MessageReply';
30
44
  export { ReplyPreview } from './components/ReplyPreview';
31
45
  export { StreamingCursor } from './components/StreamingCursor';
32
46
  export { useColorScheme } from './hooks/useColorScheme';
47
+ export { useTheme, useThemedStyles } from './hooks/useTheme';
48
+ export { useIcons } from './hooks/useIcons';
49
+ export { useLabels } from './hooks/useLabels';
50
+ export { useIsRTL } from './hooks/useIsRTL';
51
+ export { Icon } from './components/Icon';
33
52
  export { useStreamingMessages } from './hooks/useStreamingMessages';
34
53
  export type { UseStreamingMessagesOptions, UseStreamingMessagesResult, StreamHandle } from './hooks/useStreamingMessages';
35
54
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,KAAK,EAAE,CAAA;AAChB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,YAAY,EACb,MAAM,8BAA8B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -8,6 +8,10 @@ export * from './linkParser';
8
8
  export * from './Reply';
9
9
  export * from './Reactions';
10
10
  export * from './styles';
11
+ export * from './Theme';
12
+ export * from './Icons';
13
+ export * from './i18n';
14
+ export { isRTLLocale, mirrorPosition } from './rtl';
11
15
  export { Color } from './Color';
12
16
  export { Actions } from './Actions';
13
17
  export { Avatar } from './Avatar';
@@ -15,6 +19,16 @@ export { Bubble } from './Bubble';
15
19
  export { SystemMessage } from './SystemMessage';
16
20
  export { MessageImage } from './MessageImage';
17
21
  export { MessageText } from './MessageText';
22
+ export { MessageLocation } from './MessageLocation';
23
+ export { MediaCard } from './components/MediaCard';
24
+ export { AttachmentSheet } from './components/AttachmentSheet';
25
+ export { ContextMenu } from './components/ContextMenu';
26
+ export { MarkdownMessageText, isMarkdownAvailable } from './components/MarkdownMessageText';
27
+ export { BasicMarkdown } from './components/BasicMarkdown';
28
+ export { WaveformPlayer, isWaveformAvailable } from './components/WaveformPlayer';
29
+ export { VoiceMessageInput, isVoiceRecordingAvailable } from './components/VoiceMessageInput';
30
+ export { VideoRecordButton, isVideoRecordingAvailable } from './components/VideoRecordButton';
31
+ export { VideoNoteRecorder, isVisionCameraAvailable } from './components/VideoNoteRecorder';
18
32
  export { Composer } from './Composer';
19
33
  export { Day } from './Day';
20
34
  export { InputToolbar } from './InputToolbar';
@@ -30,5 +44,10 @@ export { MessageReply } from './components/MessageReply';
30
44
  export { ReplyPreview } from './components/ReplyPreview';
31
45
  export { StreamingCursor } from './components/StreamingCursor';
32
46
  export { useColorScheme } from './hooks/useColorScheme';
47
+ export { useTheme, useThemedStyles } from './hooks/useTheme';
48
+ export { useIcons } from './hooks/useIcons';
49
+ export { useLabels } from './hooks/useLabels';
50
+ export { useIsRTL } from './hooks/useIsRTL';
51
+ export { Icon } from './components/Icon';
33
52
  export { useStreamingMessages } from './hooks/useStreamingMessages';
34
53
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,KAAK,EAAE,CAAA;AAChB,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ChatLabels } from '../i18n';
2
+ export declare const ar: Partial<ChatLabels>;
3
+ //# sourceMappingURL=ar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../src/locales/ar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,OAAO,CAAC,UAAU,CAoBlC,CAAA"}
@@ -0,0 +1,22 @@
1
+ export const ar = {
2
+ placeholder: 'اكتب رسالة...',
3
+ send: 'إرسال',
4
+ cancel: 'إلغاء',
5
+ loadEarlier: 'تحميل الرسائل السابقة',
6
+ today: 'اليوم',
7
+ video: 'فيديو',
8
+ voiceMessage: 'رسالة صوتية',
9
+ videoMessage: 'رسالة فيديو',
10
+ location: 'الموقع',
11
+ openLocationAccessibility: 'فتح الموقع في الخرائط',
12
+ slideToCancel: 'اسحب لليمين للإلغاء...',
13
+ replyingTo: 'الرد على {name}',
14
+ editing: 'تعديل',
15
+ cameraPermission: 'مطلوب إذن الكاميرا',
16
+ noCamera: 'لا توجد كاميرا متاحة',
17
+ stopAndSend: 'اضغط للإيقاف والإرسال',
18
+ tapToRecord: 'اضغط للتسجيل',
19
+ releaseToSend: 'اترك للإرسال، اسحب للأعلى للقفل',
20
+ holdToRecord: 'اضغط مطولاً للتسجيل',
21
+ };
22
+ //# sourceMappingURL=ar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ar.js","sourceRoot":"","sources":["../../src/locales/ar.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAwB;IACrC,WAAW,EAAE,eAAe;IAC5B,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,uBAAuB;IACpC,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,aAAa;IAC3B,YAAY,EAAE,aAAa;IAC3B,QAAQ,EAAE,QAAQ;IAClB,yBAAyB,EAAE,uBAAuB;IAClD,aAAa,EAAE,wBAAwB;IACvC,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,OAAO;IAChB,gBAAgB,EAAE,oBAAoB;IACtC,QAAQ,EAAE,sBAAsB;IAChC,WAAW,EAAE,uBAAuB;IACpC,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,qBAAqB;CACpC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { ChatLabels } from '../i18n';
2
+ export declare const de: Partial<ChatLabels>;
3
+ //# sourceMappingURL=de.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"de.d.ts","sourceRoot":"","sources":["../../src/locales/de.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,eAAO,MAAM,EAAE,EAAE,OAAO,CAAC,UAAU,CAoBlC,CAAA"}
@@ -0,0 +1,22 @@
1
+ export const de = {
2
+ placeholder: 'Nachricht schreiben...',
3
+ send: 'Senden',
4
+ cancel: 'Abbrechen',
5
+ loadEarlier: 'Fruhere Nachrichten laden',
6
+ today: 'Heute',
7
+ video: 'Video',
8
+ voiceMessage: 'Sprachnachricht',
9
+ videoMessage: 'Videonachricht',
10
+ location: 'Standort',
11
+ openLocationAccessibility: 'Standort in Karten offnen',
12
+ slideToCancel: 'zum Abbrechen wischen',
13
+ replyingTo: 'Antwort an {name}',
14
+ editing: 'Bearbeiten',
15
+ cameraPermission: 'Kameraberechtigung erforderlich',
16
+ noCamera: 'Keine Kamera verfugbar',
17
+ stopAndSend: 'Tippen zum Beenden und Senden',
18
+ tapToRecord: 'Zum Aufnehmen tippen',
19
+ releaseToSend: 'Loslassen zum Senden, nach oben wischen zum Sperren',
20
+ holdToRecord: 'Zum Aufnehmen gedruckt halten',
21
+ };
22
+ //# sourceMappingURL=de.js.map