@ethora/chat-component-rn 26.8.2 → 26.8.4

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 (547) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +27 -1
  3. package/lib/commonjs/assets/EmptyChatIllustration.js +7 -6
  4. package/lib/commonjs/assets/EmptyChatIllustration.js.map +1 -1
  5. package/lib/commonjs/assets/icons.js +2 -2
  6. package/lib/commonjs/assets/icons.js.map +1 -1
  7. package/lib/commonjs/components/AuthForms/Login.js +23 -8
  8. package/lib/commonjs/components/AuthForms/Login.js.map +1 -1
  9. package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js +12 -4
  10. package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js.map +1 -1
  11. package/lib/commonjs/components/DropdownMenu/DropdownMenu.js +16 -9
  12. package/lib/commonjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
  13. package/lib/commonjs/components/ExampleComponents/CustomMessage.js +25 -7
  14. package/lib/commonjs/components/ExampleComponents/CustomMessage.js.map +1 -1
  15. package/lib/commonjs/components/ExampleComponents/CustomTypingIndicatorExamples.js +18 -6
  16. package/lib/commonjs/components/ExampleComponents/CustomTypingIndicatorExamples.js.map +1 -1
  17. package/lib/commonjs/components/Header/HeaderRoomList.js +9 -6
  18. package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
  19. package/lib/commonjs/components/InputComponents/Search.js +13 -4
  20. package/lib/commonjs/components/InputComponents/Search.js.map +1 -1
  21. package/lib/commonjs/components/MainComponents/ChatHeader.js +9 -3
  22. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  23. package/lib/commonjs/components/MainComponents/ChatRoom.js +6 -3
  24. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  25. package/lib/commonjs/components/MainComponents/ChatWrapper.js +8 -6
  26. package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
  27. package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js +37 -10
  28. package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js.map +1 -1
  29. package/lib/commonjs/components/MainComponents/MediaMessage.js +43 -19
  30. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  31. package/lib/commonjs/components/MainComponents/MessageList.js +9 -3
  32. package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
  33. package/lib/commonjs/components/MainComponents/RNStyled.js +12 -4
  34. package/lib/commonjs/components/MainComponents/RNStyled.js.map +1 -1
  35. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +61 -7
  36. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  37. package/lib/commonjs/components/MainComponents/RoomList.js +12 -9
  38. package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
  39. package/lib/commonjs/components/MainComponents/Select.js +29 -8
  40. package/lib/commonjs/components/MainComponents/Select.js.map +1 -1
  41. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +24 -13
  42. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
  43. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +24 -8
  44. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  45. package/lib/commonjs/components/MessageBubble/Message.js +46 -24
  46. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  47. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +15 -4
  48. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  49. package/lib/commonjs/components/MessageBubble/MessageReaction.js +10 -5
  50. package/lib/commonjs/components/MessageBubble/MessageReaction.js.map +1 -1
  51. package/lib/commonjs/components/Modals/AddMembersModal/AddMembersModal.js +1 -5
  52. package/lib/commonjs/components/Modals/AddMembersModal/AddMembersModal.js.map +1 -1
  53. package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js +42 -27
  54. package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
  55. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +77 -24
  56. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  57. package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js +5 -7
  58. package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
  59. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +18 -14
  60. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  61. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +20 -9
  62. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  63. package/lib/commonjs/components/Modals/ModalHeaderComponent.js +8 -2
  64. package/lib/commonjs/components/Modals/ModalHeaderComponent.js.map +1 -1
  65. package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js +8 -8
  66. package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
  67. package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js +1 -5
  68. package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js.map +1 -1
  69. package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js +18 -15
  70. package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
  71. package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js +14 -9
  72. package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js.map +1 -1
  73. package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js +3 -7
  74. package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
  75. package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +8 -6
  76. package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
  77. package/lib/commonjs/components/Modals/SettingsModals/Referrals/Referrals.js +7 -2
  78. package/lib/commonjs/components/Modals/SettingsModals/Referrals/Referrals.js.map +1 -1
  79. package/lib/commonjs/components/Modals/SettingsModals/SharedStyledComponents.js +7 -3
  80. package/lib/commonjs/components/Modals/SettingsModals/SharedStyledComponents.js.map +1 -1
  81. package/lib/commonjs/components/Modals/SettingsModals/Visibility/RadioInput.js +10 -6
  82. package/lib/commonjs/components/Modals/SettingsModals/Visibility/RadioInput.js.map +1 -1
  83. package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js +7 -6
  84. package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
  85. package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js +3 -1
  86. package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
  87. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +18 -15
  88. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  89. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +145 -9
  90. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  91. package/lib/commonjs/components/Modals/styledModalComponents.js +60 -16
  92. package/lib/commonjs/components/Modals/styledModalComponents.js.map +1 -1
  93. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +16 -10
  94. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
  95. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +6 -2
  96. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  97. package/lib/commonjs/components/RoomComponents/styled/StyledRoomComponents.js +6 -0
  98. package/lib/commonjs/components/RoomComponents/styled/StyledRoomComponents.js.map +1 -1
  99. package/lib/commonjs/components/Thread/ThreadWrapper.js +9 -2
  100. package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
  101. package/lib/commonjs/components/Toast/Toast.js +3 -1
  102. package/lib/commonjs/components/Toast/Toast.js.map +1 -1
  103. package/lib/commonjs/components/styled/AudioMessage.js +16 -11
  104. package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
  105. package/lib/commonjs/components/styled/Button.js +18 -9
  106. package/lib/commonjs/components/styled/Button.js.map +1 -1
  107. package/lib/commonjs/components/styled/DateLabel.js +8 -5
  108. package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
  109. package/lib/commonjs/components/styled/MediaModal.js +27 -21
  110. package/lib/commonjs/components/styled/MediaModal.js.map +1 -1
  111. package/lib/commonjs/components/styled/RoomListComponents/index.js +60 -38
  112. package/lib/commonjs/components/styled/RoomListComponents/index.js.map +1 -1
  113. package/lib/commonjs/components/styled/SendInput.js +13 -8
  114. package/lib/commonjs/components/styled/SendInput.js.map +1 -1
  115. package/lib/commonjs/components/styled/StyledComponents.js +67 -23
  116. package/lib/commonjs/components/styled/StyledComponents.js.map +1 -1
  117. package/lib/commonjs/components/styled/StyledInput.js +32 -18
  118. package/lib/commonjs/components/styled/StyledInput.js.map +1 -1
  119. package/lib/commonjs/components/styled/StyledInputComponents/CustomTypingIndicator.js +13 -8
  120. package/lib/commonjs/components/styled/StyledInputComponents/CustomTypingIndicator.js.map +1 -1
  121. package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js +20 -9
  122. package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
  123. package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js +39 -18
  124. package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
  125. package/lib/commonjs/components/styled/TreadLabel.js +6 -3
  126. package/lib/commonjs/components/styled/TreadLabel.js.map +1 -1
  127. package/lib/commonjs/context/MessageNotificationContext.js +14 -3
  128. package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
  129. package/lib/commonjs/helpers/getChatBackground.js +4 -1
  130. package/lib/commonjs/helpers/getChatBackground.js.map +1 -1
  131. package/lib/commonjs/helpers/getDateLabelColor.js +3 -1
  132. package/lib/commonjs/helpers/getDateLabelColor.js.map +1 -1
  133. package/lib/commonjs/helpers/getIconColor.js +4 -1
  134. package/lib/commonjs/helpers/getIconColor.js.map +1 -1
  135. package/lib/commonjs/helpers/getSenderNameColor.js +3 -1
  136. package/lib/commonjs/helpers/getSenderNameColor.js.map +1 -1
  137. package/lib/commonjs/helpers/markdownParser.js +27 -5
  138. package/lib/commonjs/helpers/markdownParser.js.map +1 -1
  139. package/lib/commonjs/helpers/parseMessageBody.js +82 -24
  140. package/lib/commonjs/helpers/parseMessageBody.js.map +1 -1
  141. package/lib/commonjs/helpers/preferencesStorage.js +44 -0
  142. package/lib/commonjs/helpers/preferencesStorage.js.map +1 -0
  143. package/lib/commonjs/hooks/useCustomTypingIndicator.js +7 -3
  144. package/lib/commonjs/hooks/useCustomTypingIndicator.js.map +1 -1
  145. package/lib/commonjs/hooks/useLogout.js +10 -3
  146. package/lib/commonjs/hooks/useLogout.js.map +1 -1
  147. package/lib/commonjs/hooks/useTheme.js +35 -0
  148. package/lib/commonjs/hooks/useTheme.js.map +1 -0
  149. package/lib/commonjs/i18n/strings.js +60 -0
  150. package/lib/commonjs/i18n/strings.js.map +1 -1
  151. package/lib/commonjs/main.js +88 -0
  152. package/lib/commonjs/main.js.map +1 -1
  153. package/lib/commonjs/networking/api-requests/push.api.js +130 -45
  154. package/lib/commonjs/networking/api-requests/push.api.js.map +1 -1
  155. package/lib/commonjs/networking/api-requests/rooms.api.js +13 -0
  156. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  157. package/lib/commonjs/roomStore/chatSettingsSlice.js +17 -4
  158. package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
  159. package/lib/commonjs/services/pushRegistration.js +261 -0
  160. package/lib/commonjs/services/pushRegistration.js.map +1 -0
  161. package/lib/commonjs/services/pushSubscriptionService.js +0 -24
  162. package/lib/commonjs/services/pushSubscriptionService.js.map +1 -1
  163. package/lib/commonjs/theme/index.js +38 -0
  164. package/lib/commonjs/theme/index.js.map +1 -0
  165. package/lib/commonjs/theme/styled.d.js +4 -0
  166. package/lib/commonjs/theme/styled.d.js.map +1 -0
  167. package/lib/commonjs/theme/theme.js +161 -0
  168. package/lib/commonjs/theme/theme.js.map +1 -0
  169. package/lib/commonjs/version.js +1 -1
  170. package/lib/module/assets/EmptyChatIllustration.js +7 -6
  171. package/lib/module/assets/EmptyChatIllustration.js.map +1 -1
  172. package/lib/module/assets/icons.js +1 -1
  173. package/lib/module/assets/icons.js.map +1 -1
  174. package/lib/module/components/AuthForms/Login.js +23 -8
  175. package/lib/module/components/AuthForms/Login.js.map +1 -1
  176. package/lib/module/components/ContextMenu/ContextMenuComponents.js +12 -4
  177. package/lib/module/components/ContextMenu/ContextMenuComponents.js.map +1 -1
  178. package/lib/module/components/DropdownMenu/DropdownMenu.js +16 -9
  179. package/lib/module/components/DropdownMenu/DropdownMenu.js.map +1 -1
  180. package/lib/module/components/ExampleComponents/CustomMessage.js +25 -7
  181. package/lib/module/components/ExampleComponents/CustomMessage.js.map +1 -1
  182. package/lib/module/components/ExampleComponents/CustomTypingIndicatorExamples.js +18 -6
  183. package/lib/module/components/ExampleComponents/CustomTypingIndicatorExamples.js.map +1 -1
  184. package/lib/module/components/Header/HeaderRoomList.js +9 -6
  185. package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
  186. package/lib/module/components/InputComponents/Search.js +13 -4
  187. package/lib/module/components/InputComponents/Search.js.map +1 -1
  188. package/lib/module/components/MainComponents/ChatHeader.js +9 -3
  189. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  190. package/lib/module/components/MainComponents/ChatRoom.js +6 -3
  191. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  192. package/lib/module/components/MainComponents/ChatWrapper.js +8 -6
  193. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  194. package/lib/module/components/MainComponents/LanguageSelectorModal.js +37 -10
  195. package/lib/module/components/MainComponents/LanguageSelectorModal.js.map +1 -1
  196. package/lib/module/components/MainComponents/MediaMessage.js +42 -19
  197. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  198. package/lib/module/components/MainComponents/MessageList.js +9 -3
  199. package/lib/module/components/MainComponents/MessageList.js.map +1 -1
  200. package/lib/module/components/MainComponents/RNStyled.js +12 -4
  201. package/lib/module/components/MainComponents/RNStyled.js.map +1 -1
  202. package/lib/module/components/MainComponents/ReduxWrapper.js +64 -10
  203. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  204. package/lib/module/components/MainComponents/RoomList.js +12 -9
  205. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  206. package/lib/module/components/MainComponents/Select.js +29 -8
  207. package/lib/module/components/MainComponents/Select.js.map +1 -1
  208. package/lib/module/components/Menu/HeaderRoomListMenu.js +24 -13
  209. package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
  210. package/lib/module/components/MessageBubble/BottomReplyContainer.js +24 -8
  211. package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  212. package/lib/module/components/MessageBubble/Message.js +47 -25
  213. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  214. package/lib/module/components/MessageBubble/MessageInteractions.js +15 -4
  215. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  216. package/lib/module/components/MessageBubble/MessageReaction.js +10 -5
  217. package/lib/module/components/MessageBubble/MessageReaction.js.map +1 -1
  218. package/lib/module/components/Modals/AddMembersModal/AddMembersModal.js +2 -6
  219. package/lib/module/components/Modals/AddMembersModal/AddMembersModal.js.map +1 -1
  220. package/lib/module/components/Modals/AttachSheet/AttachSheet.js +42 -27
  221. package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
  222. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +79 -26
  223. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  224. package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js +6 -8
  225. package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
  226. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +18 -16
  227. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  228. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +20 -9
  229. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  230. package/lib/module/components/Modals/ModalHeaderComponent.js +8 -2
  231. package/lib/module/components/Modals/ModalHeaderComponent.js.map +1 -1
  232. package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js +10 -10
  233. package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
  234. package/lib/module/components/Modals/NewChatModal/ModalContent.js +2 -6
  235. package/lib/module/components/Modals/NewChatModal/ModalContent.js.map +1 -1
  236. package/lib/module/components/Modals/NewChatModal/NewChatModal.js +18 -15
  237. package/lib/module/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
  238. package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js +14 -9
  239. package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js.map +1 -1
  240. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js +4 -8
  241. package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
  242. package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +8 -6
  243. package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
  244. package/lib/module/components/Modals/SettingsModals/Referrals/Referrals.js +7 -2
  245. package/lib/module/components/Modals/SettingsModals/Referrals/Referrals.js.map +1 -1
  246. package/lib/module/components/Modals/SettingsModals/SharedStyledComponents.js +7 -3
  247. package/lib/module/components/Modals/SettingsModals/SharedStyledComponents.js.map +1 -1
  248. package/lib/module/components/Modals/SettingsModals/Visibility/RadioInput.js +10 -6
  249. package/lib/module/components/Modals/SettingsModals/Visibility/RadioInput.js.map +1 -1
  250. package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js +7 -6
  251. package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
  252. package/lib/module/components/Modals/UserProfileModal/EditUserModal.js +3 -2
  253. package/lib/module/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
  254. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +18 -15
  255. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  256. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +148 -12
  257. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  258. package/lib/module/components/Modals/styledModalComponents.js +59 -15
  259. package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
  260. package/lib/module/components/RoomComponents/ChatRoomItem.js +16 -10
  261. package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
  262. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +6 -2
  263. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  264. package/lib/module/components/RoomComponents/styled/StyledRoomComponents.js +6 -0
  265. package/lib/module/components/RoomComponents/styled/StyledRoomComponents.js.map +1 -1
  266. package/lib/module/components/Thread/ThreadWrapper.js +9 -2
  267. package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
  268. package/lib/module/components/Toast/Toast.js +3 -1
  269. package/lib/module/components/Toast/Toast.js.map +1 -1
  270. package/lib/module/components/styled/AudioMessage.js +16 -11
  271. package/lib/module/components/styled/AudioMessage.js.map +1 -1
  272. package/lib/module/components/styled/Button.js +17 -9
  273. package/lib/module/components/styled/Button.js.map +1 -1
  274. package/lib/module/components/styled/DateLabel.js +8 -5
  275. package/lib/module/components/styled/DateLabel.js.map +1 -1
  276. package/lib/module/components/styled/MediaModal.js +29 -23
  277. package/lib/module/components/styled/MediaModal.js.map +1 -1
  278. package/lib/module/components/styled/RoomListComponents/index.js +62 -39
  279. package/lib/module/components/styled/RoomListComponents/index.js.map +1 -1
  280. package/lib/module/components/styled/SendInput.js +13 -8
  281. package/lib/module/components/styled/SendInput.js.map +1 -1
  282. package/lib/module/components/styled/StyledComponents.js +67 -23
  283. package/lib/module/components/styled/StyledComponents.js.map +1 -1
  284. package/lib/module/components/styled/StyledInput.js +32 -18
  285. package/lib/module/components/styled/StyledInput.js.map +1 -1
  286. package/lib/module/components/styled/StyledInputComponents/CustomTypingIndicator.js +13 -8
  287. package/lib/module/components/styled/StyledInputComponents/CustomTypingIndicator.js.map +1 -1
  288. package/lib/module/components/styled/StyledInputComponents/MediaComponents.js +20 -9
  289. package/lib/module/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
  290. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js +39 -18
  291. package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
  292. package/lib/module/components/styled/TreadLabel.js +6 -3
  293. package/lib/module/components/styled/TreadLabel.js.map +1 -1
  294. package/lib/module/context/MessageNotificationContext.js +14 -3
  295. package/lib/module/context/MessageNotificationContext.js.map +1 -1
  296. package/lib/module/helpers/getChatBackground.js +5 -1
  297. package/lib/module/helpers/getChatBackground.js.map +1 -1
  298. package/lib/module/helpers/getDateLabelColor.js +4 -1
  299. package/lib/module/helpers/getDateLabelColor.js.map +1 -1
  300. package/lib/module/helpers/getIconColor.js +5 -1
  301. package/lib/module/helpers/getIconColor.js.map +1 -1
  302. package/lib/module/helpers/getSenderNameColor.js +4 -1
  303. package/lib/module/helpers/getSenderNameColor.js.map +1 -1
  304. package/lib/module/helpers/markdownParser.js +27 -5
  305. package/lib/module/helpers/markdownParser.js.map +1 -1
  306. package/lib/module/helpers/parseMessageBody.js +82 -24
  307. package/lib/module/helpers/parseMessageBody.js.map +1 -1
  308. package/lib/module/helpers/preferencesStorage.js +36 -0
  309. package/lib/module/helpers/preferencesStorage.js.map +1 -0
  310. package/lib/module/hooks/useCustomTypingIndicator.js +8 -3
  311. package/lib/module/hooks/useCustomTypingIndicator.js.map +1 -1
  312. package/lib/module/hooks/useLogout.js +10 -3
  313. package/lib/module/hooks/useLogout.js.map +1 -1
  314. package/lib/module/hooks/useTheme.js +30 -0
  315. package/lib/module/hooks/useTheme.js.map +1 -0
  316. package/lib/module/i18n/strings.js +60 -0
  317. package/lib/module/i18n/strings.js.map +1 -1
  318. package/lib/module/main.js +4 -0
  319. package/lib/module/main.js.map +1 -1
  320. package/lib/module/networking/api-requests/push.api.js +119 -45
  321. package/lib/module/networking/api-requests/push.api.js.map +1 -1
  322. package/lib/module/networking/api-requests/rooms.api.js +12 -0
  323. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  324. package/lib/module/roomStore/chatSettingsSlice.js +14 -3
  325. package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
  326. package/lib/module/services/pushRegistration.js +250 -0
  327. package/lib/module/services/pushRegistration.js.map +1 -0
  328. package/lib/module/services/pushSubscriptionService.js +0 -24
  329. package/lib/module/services/pushSubscriptionService.js.map +1 -1
  330. package/lib/module/theme/index.js +7 -0
  331. package/lib/module/theme/index.js.map +1 -0
  332. package/lib/module/theme/styled.d.js +6 -0
  333. package/lib/module/theme/styled.d.js.map +1 -0
  334. package/lib/module/theme/theme.js +156 -0
  335. package/lib/module/theme/theme.js.map +1 -0
  336. package/lib/module/version.js +1 -1
  337. package/lib/typescript/assets/EmptyChatIllustration.d.ts +1 -0
  338. package/lib/typescript/assets/EmptyChatIllustration.d.ts.map +1 -1
  339. package/lib/typescript/assets/icons.d.ts +8 -0
  340. package/lib/typescript/assets/icons.d.ts.map +1 -1
  341. package/lib/typescript/components/AuthForms/Login.d.ts.map +1 -1
  342. package/lib/typescript/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  343. package/lib/typescript/components/ExampleComponents/CustomMessage.d.ts.map +1 -1
  344. package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
  345. package/lib/typescript/components/InputComponents/Search.d.ts.map +1 -1
  346. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  347. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  348. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  349. package/lib/typescript/components/MainComponents/LanguageSelectorModal.d.ts.map +1 -1
  350. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  351. package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
  352. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  353. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  354. package/lib/typescript/components/MainComponents/Select.d.ts.map +1 -1
  355. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
  356. package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
  357. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  358. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
  359. package/lib/typescript/components/MessageBubble/MessageReaction.d.ts.map +1 -1
  360. package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
  361. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  362. package/lib/typescript/components/Modals/ChatProfileModal/DeleteChatModal.d.ts.map +1 -1
  363. package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +1 -1
  364. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  365. package/lib/typescript/components/Modals/ModalHeaderComponent.d.ts.map +1 -1
  366. package/lib/typescript/components/Modals/ModalWrapper/ModalWrapper.d.ts.map +1 -1
  367. package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts.map +1 -1
  368. package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts.map +1 -1
  369. package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts.map +1 -1
  370. package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts.map +1 -1
  371. package/lib/typescript/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.d.ts.map +1 -1
  372. package/lib/typescript/components/Modals/SettingsModals/Referrals/Referrals.d.ts.map +1 -1
  373. package/lib/typescript/components/Modals/SettingsModals/SharedStyledComponents.d.ts +2 -2
  374. package/lib/typescript/components/Modals/SettingsModals/SharedStyledComponents.d.ts.map +1 -1
  375. package/lib/typescript/components/Modals/SettingsModals/Visibility/RadioInput.d.ts.map +1 -1
  376. package/lib/typescript/components/Modals/SettingsModals/Visibility/VisibilityModal.d.ts.map +1 -1
  377. package/lib/typescript/components/Modals/UserProfileModal/EditUserModal.d.ts.map +1 -1
  378. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  379. package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
  380. package/lib/typescript/components/Modals/styledModalComponents.d.ts +2 -0
  381. package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
  382. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
  383. package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
  384. package/lib/typescript/components/RoomComponents/styled/StyledRoomComponents.d.ts.map +1 -1
  385. package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
  386. package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
  387. package/lib/typescript/components/styled/Button.d.ts.map +1 -1
  388. package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
  389. package/lib/typescript/components/styled/MediaModal.d.ts +2 -2
  390. package/lib/typescript/components/styled/MediaModal.d.ts.map +1 -1
  391. package/lib/typescript/components/styled/RoomListComponents/index.d.ts.map +1 -1
  392. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  393. package/lib/typescript/components/styled/StyledComponents.d.ts.map +1 -1
  394. package/lib/typescript/components/styled/StyledInput.d.ts.map +1 -1
  395. package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts.map +1 -1
  396. package/lib/typescript/components/styled/StyledInputComponents/StyledInputComponents.d.ts.map +1 -1
  397. package/lib/typescript/components/styled/TreadLabel.d.ts.map +1 -1
  398. package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
  399. package/lib/typescript/helpers/getAvatarColor.d.ts +1 -1
  400. package/lib/typescript/helpers/getChatBackground.d.ts.map +1 -1
  401. package/lib/typescript/helpers/getDateLabelColor.d.ts +3 -7
  402. package/lib/typescript/helpers/getDateLabelColor.d.ts.map +1 -1
  403. package/lib/typescript/helpers/getIconColor.d.ts +4 -7
  404. package/lib/typescript/helpers/getIconColor.d.ts.map +1 -1
  405. package/lib/typescript/helpers/getSenderNameColor.d.ts +3 -7
  406. package/lib/typescript/helpers/getSenderNameColor.d.ts.map +1 -1
  407. package/lib/typescript/helpers/markdownParser.d.ts +8 -1
  408. package/lib/typescript/helpers/markdownParser.d.ts.map +1 -1
  409. package/lib/typescript/helpers/parseMessageBody.d.ts +8 -1
  410. package/lib/typescript/helpers/parseMessageBody.d.ts.map +1 -1
  411. package/lib/typescript/helpers/preferencesStorage.d.ts +11 -0
  412. package/lib/typescript/helpers/preferencesStorage.d.ts.map +1 -0
  413. package/lib/typescript/hooks/useCustomTypingIndicator.d.ts +2 -0
  414. package/lib/typescript/hooks/useCustomTypingIndicator.d.ts.map +1 -1
  415. package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
  416. package/lib/typescript/hooks/useTheme.d.ts +16 -0
  417. package/lib/typescript/hooks/useTheme.d.ts.map +1 -0
  418. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  419. package/lib/typescript/main.d.ts +9 -0
  420. package/lib/typescript/main.d.ts.map +1 -1
  421. package/lib/typescript/networking/api-requests/push.api.d.ts +46 -3
  422. package/lib/typescript/networking/api-requests/push.api.d.ts.map +1 -1
  423. package/lib/typescript/networking/api-requests/rooms.api.d.ts +1 -0
  424. package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
  425. package/lib/typescript/roomStore/chatSettingsSlice.d.ts +12 -1
  426. package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
  427. package/lib/typescript/services/pushRegistration.d.ts +21 -0
  428. package/lib/typescript/services/pushRegistration.d.ts.map +1 -0
  429. package/lib/typescript/services/pushSubscriptionService.d.ts +0 -4
  430. package/lib/typescript/services/pushSubscriptionService.d.ts.map +1 -1
  431. package/lib/typescript/theme/index.d.ts +5 -0
  432. package/lib/typescript/theme/index.d.ts.map +1 -0
  433. package/lib/typescript/theme/theme.d.ts +127 -0
  434. package/lib/typescript/theme/theme.d.ts.map +1 -0
  435. package/lib/typescript/types/models/room.model.d.ts +1 -0
  436. package/lib/typescript/types/models/room.model.d.ts.map +1 -1
  437. package/lib/typescript/types/types.d.ts +42 -0
  438. package/lib/typescript/types/types.d.ts.map +1 -1
  439. package/lib/typescript/version.d.ts +1 -1
  440. package/package.json +2 -2
  441. package/src/assets/EmptyChatIllustration.tsx +7 -5
  442. package/src/assets/icons.tsx +24 -0
  443. package/src/components/AuthForms/Login.tsx +11 -9
  444. package/src/components/ContextMenu/ContextMenuComponents.tsx +4 -4
  445. package/src/components/DropdownMenu/DropdownMenu.tsx +14 -6
  446. package/src/components/ExampleComponents/CustomMessage.tsx +9 -8
  447. package/src/components/ExampleComponents/CustomTypingIndicatorExamples.tsx +6 -6
  448. package/src/components/Header/HeaderRoomList.tsx +11 -6
  449. package/src/components/InputComponents/Search.tsx +7 -4
  450. package/src/components/MainComponents/ChatHeader.tsx +9 -3
  451. package/src/components/MainComponents/ChatRoom.tsx +5 -2
  452. package/src/components/MainComponents/ChatWrapper.tsx +8 -6
  453. package/src/components/MainComponents/LanguageSelectorModal.tsx +33 -7
  454. package/src/components/MainComponents/MediaMessage.tsx +37 -18
  455. package/src/components/MainComponents/MessageList.tsx +13 -3
  456. package/src/components/MainComponents/RNStyled.tsx +4 -4
  457. package/src/components/MainComponents/ReduxWrapper.tsx +67 -10
  458. package/src/components/MainComponents/RoomList.tsx +13 -7
  459. package/src/components/MainComponents/Select.tsx +13 -8
  460. package/src/components/Menu/HeaderRoomListMenu.tsx +30 -13
  461. package/src/components/MessageBubble/BottomReplyContainer.tsx +16 -11
  462. package/src/components/MessageBubble/Message.tsx +48 -25
  463. package/src/components/MessageBubble/MessageInteractions.tsx +17 -4
  464. package/src/components/MessageBubble/MessageReaction.tsx +9 -4
  465. package/src/components/Modals/AddMembersModal/AddMembersModal.tsx +2 -2
  466. package/src/components/Modals/AttachSheet/AttachSheet.tsx +57 -23
  467. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +63 -25
  468. package/src/components/Modals/ChatProfileModal/DeleteChatModal.tsx +6 -4
  469. package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +18 -14
  470. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +14 -9
  471. package/src/components/Modals/ModalHeaderComponent.tsx +9 -2
  472. package/src/components/Modals/ModalWrapper/ModalWrapper.tsx +14 -6
  473. package/src/components/Modals/NewChatModal/ModalContent.tsx +2 -2
  474. package/src/components/Modals/NewChatModal/NewChatModal.tsx +19 -15
  475. package/src/components/Modals/ProfileHeader/ProfileMenu.tsx +15 -8
  476. package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +2 -3
  477. package/src/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.tsx +8 -6
  478. package/src/components/Modals/SettingsModals/Referrals/Referrals.tsx +5 -3
  479. package/src/components/Modals/SettingsModals/SharedStyledComponents.ts +4 -4
  480. package/src/components/Modals/SettingsModals/Visibility/RadioInput.tsx +9 -5
  481. package/src/components/Modals/SettingsModals/Visibility/VisibilityModal.tsx +7 -7
  482. package/src/components/Modals/UserProfileModal/EditUserModal.tsx +3 -1
  483. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +19 -15
  484. package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +171 -9
  485. package/src/components/Modals/styledModalComponents.tsx +23 -15
  486. package/src/components/RoomComponents/ChatRoomItem.tsx +19 -10
  487. package/src/components/RoomComponents/styled/LastAudioMessage.tsx +4 -2
  488. package/src/components/RoomComponents/styled/StyledRoomComponents.ts +2 -0
  489. package/src/components/Thread/ThreadWrapper.tsx +6 -5
  490. package/src/components/Toast/Toast.tsx +1 -1
  491. package/src/components/styled/AudioMessage.tsx +12 -9
  492. package/src/components/styled/Button.tsx +15 -8
  493. package/src/components/styled/DateLabel.tsx +7 -3
  494. package/src/components/styled/MediaModal.tsx +30 -25
  495. package/src/components/styled/RoomListComponents/index.tsx +60 -35
  496. package/src/components/styled/SendInput.tsx +23 -8
  497. package/src/components/styled/StyledComponents.ts +30 -23
  498. package/src/components/styled/StyledInput.tsx +35 -21
  499. package/src/components/styled/StyledInputComponents/CustomTypingIndicator.tsx +8 -8
  500. package/src/components/styled/StyledInputComponents/MediaComponents.tsx +20 -7
  501. package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +15 -19
  502. package/src/components/styled/TreadLabel.tsx +9 -3
  503. package/src/context/MessageNotificationContext.tsx +18 -4
  504. package/src/helpers/getChatBackground.ts +3 -1
  505. package/src/helpers/getDateLabelColor.ts +5 -3
  506. package/src/helpers/getIconColor.ts +6 -3
  507. package/src/helpers/getSenderNameColor.ts +5 -3
  508. package/src/helpers/markdownParser.tsx +29 -5
  509. package/src/helpers/parseMessageBody.tsx +79 -26
  510. package/src/helpers/preferencesStorage.ts +40 -0
  511. package/src/hooks/useCustomTypingIndicator.tsx +7 -3
  512. package/src/hooks/useLogout.tsx +10 -3
  513. package/src/hooks/useTheme.ts +41 -0
  514. package/src/i18n/strings.ts +60 -0
  515. package/src/main.ts +33 -0
  516. package/src/networking/api-requests/push.api.ts +185 -62
  517. package/src/networking/api-requests/rooms.api.ts +9 -0
  518. package/src/roomStore/chatSettingsSlice.ts +24 -2
  519. package/src/services/pushRegistration.ts +369 -0
  520. package/src/services/pushSubscriptionService.ts +0 -34
  521. package/src/theme/index.ts +10 -0
  522. package/src/theme/styled.d.ts +9 -0
  523. package/src/theme/theme.ts +277 -0
  524. package/src/types/models/room.model.ts +1 -0
  525. package/src/types/types.ts +47 -0
  526. package/src/version.ts +1 -1
  527. package/lib/commonjs/context/PushNotificationProvider.js +0 -79
  528. package/lib/commonjs/context/PushNotificationProvider.js.map +0 -1
  529. package/lib/commonjs/hooks/usePushNotifications.js +0 -110
  530. package/lib/commonjs/hooks/usePushNotifications.js.map +0 -1
  531. package/lib/commonjs/services/pushNotifications.js +0 -143
  532. package/lib/commonjs/services/pushNotifications.js.map +0 -1
  533. package/lib/module/context/PushNotificationProvider.js +0 -79
  534. package/lib/module/context/PushNotificationProvider.js.map +0 -1
  535. package/lib/module/hooks/usePushNotifications.js +0 -106
  536. package/lib/module/hooks/usePushNotifications.js.map +0 -1
  537. package/lib/module/services/pushNotifications.js +0 -130
  538. package/lib/module/services/pushNotifications.js.map +0 -1
  539. package/lib/typescript/context/PushNotificationProvider.d.ts +0 -2
  540. package/lib/typescript/context/PushNotificationProvider.d.ts.map +0 -1
  541. package/lib/typescript/hooks/usePushNotifications.d.ts +0 -5
  542. package/lib/typescript/hooks/usePushNotifications.d.ts.map +0 -1
  543. package/lib/typescript/services/pushNotifications.d.ts +0 -10
  544. package/lib/typescript/services/pushNotifications.d.ts.map +0 -1
  545. package/src/context/PushNotificationProvider.tsx +0 -78
  546. package/src/hooks/usePushNotifications.ts +0 -131
  547. package/src/services/pushNotifications.ts +0 -170
@@ -1,9 +1,18 @@
1
- import React, {useMemo} from 'react';
2
- import {Provider, useDispatch} from 'react-redux';
1
+ import React, {useEffect, useMemo, useRef} from 'react';
2
+ import {useColorScheme} from 'react-native';
3
+ import {Provider, useDispatch, useSelector} from 'react-redux';
3
4
  import {KeyboardProvider} from 'react-native-keyboard-controller';
4
5
  import {SafeAreaProvider} from 'react-native-safe-area-context';
6
+ import {ThemeProvider} from 'styled-components/native';
7
+ import {applyThemePreference, resolveTheme} from '../../theme/theme';
5
8
  import {store} from '../../roomStore';
6
- import {setConfig} from '../../roomStore/chatSettingsSlice';
9
+ import type {RootState} from '../../roomStore';
10
+ import {
11
+ setConfig,
12
+ setPushEnabled,
13
+ setThemePreference,
14
+ } from '../../roomStore/chatSettingsSlice';
15
+ import {loadPreferences} from '../../helpers/preferencesStorage';
7
16
  import {ConfigUser, IConfig, MessageProps} from '../../types/types';
8
17
  import {XmppProvider} from '../../context/xmppProvider';
9
18
  import {MessageNotificationProvider} from '../../context/MessageNotificationContext';
@@ -12,12 +21,19 @@ import LoginWrapper from './LoginWrapper';
12
21
  import '../../helpers/storeConsole';
13
22
  import {installPromiseRejectionTracker} from '../../utils/installPromiseRejectionTracker';
14
23
  import {useChatFonts} from '../../hooks/useChatFonts';
24
+ import {installPushTokenHook} from '../../services/pushRegistration';
15
25
 
16
26
  // Mount-time, dev-only — wire a global unhandled-promise-rejection
17
27
  // tracker so any future leak surfaces with a real stack trace in Metro
18
28
  // logs (bug #4 follow-up). No-op in production.
19
29
  installPromiseRejectionTracker();
20
30
 
31
+ // Arms the push-token watcher once for the package: it runs
32
+ // `config.pushNotifications.getPushTokens` for every login and flushes
33
+ // tokens handed over through `registerPushToken` before sign-in. Cheap
34
+ // (one store subscription), no-op for hosts that never use push.
35
+ installPushTokenHook();
36
+
21
37
  interface ChatWrapperProps {
22
38
  token?: string;
23
39
  roomJID?: string;
@@ -44,6 +60,42 @@ const ConfigEnabler: React.FC<{config?: IConfig}> = ({config}) => {
44
60
  return null;
45
61
  };
46
62
 
63
+ const ChatThemeProvider: React.FC<{config?: IConfig; children: React.ReactNode}> = ({
64
+ config,
65
+ children,
66
+ }) => {
67
+ const dispatch = useDispatch();
68
+ const storeConfig = useSelector((s: RootState) => s.chatSettingStore.config);
69
+ const preference = useSelector(
70
+ (s: RootState) => s.chatSettingStore.themePreference,
71
+ );
72
+ const systemDark = useColorScheme() === 'dark';
73
+ const effective = applyThemePreference(storeConfig ?? config, preference);
74
+ const theme = useMemo(
75
+ () => resolveTheme(effective, systemDark),
76
+ [effective, systemDark],
77
+ );
78
+
79
+ const hydrated = useRef(false);
80
+ useEffect(() => {
81
+ if (hydrated.current) {return;}
82
+ hydrated.current = true;
83
+ loadPreferences().then((prefs) => {
84
+ if (prefs.theme) {dispatch(setThemePreference(prefs.theme));}
85
+ if (typeof prefs.pushEnabled === 'boolean') {
86
+ dispatch(setPushEnabled(prefs.pushEnabled));
87
+ }
88
+ });
89
+ }, [dispatch]);
90
+
91
+ const onThemeChange = config?.eventHandlers?.onThemeChange;
92
+ useEffect(() => {
93
+ if (preference && onThemeChange) {onThemeChange(preference, theme.dark);}
94
+ }, [preference, theme.dark, onThemeChange]);
95
+
96
+ return <ThemeProvider theme={theme}>{children}</ThemeProvider>;
97
+ };
98
+
47
99
  export const ReduxWrapper: React.FC<ChatWrapperProps> = React.memo(
48
100
  ({...props}) => {
49
101
  const memoizedConfig = useMemo(() => {
@@ -61,14 +113,19 @@ export const ReduxWrapper: React.FC<ChatWrapperProps> = React.memo(
61
113
  // KeyboardAvoidingView under the same flag).
62
114
  const ownKeyboardHandling = !memoizedConfig?.disableKeyboardAvoidingView;
63
115
 
116
+ // Light/dark palette (config.dark + config.darkColors + the Settings
117
+ // choice). Styled components read it via `({ theme }) => theme.surface`;
118
+ // plain RN styles via the `useTheme()` hook.
64
119
  const tree = (
65
- <XmppProvider config={memoizedConfig} isVisible={props.isVisible}>
66
- <ToastProvider>
67
- <MessageNotificationProvider config={memoizedConfig}>
68
- <LoginWrapper config={memoizedConfig} {...props} />
69
- </MessageNotificationProvider>
70
- </ToastProvider>
71
- </XmppProvider>
120
+ <ChatThemeProvider config={memoizedConfig}>
121
+ <XmppProvider config={memoizedConfig} isVisible={props.isVisible}>
122
+ <ToastProvider>
123
+ <MessageNotificationProvider config={memoizedConfig}>
124
+ <LoginWrapper config={memoizedConfig} {...props} />
125
+ </MessageNotificationProvider>
126
+ </ToastProvider>
127
+ </XmppProvider>
128
+ </ChatThemeProvider>
72
129
  );
73
130
 
74
131
  return (
@@ -26,6 +26,7 @@ import { HeaderRoomList } from '../Header/HeaderRoomList';
26
26
  import { HeaderRoomListMenu } from '../Menu/HeaderRoomListMenu';
27
27
  import { getIconColor } from '../../helpers/getIconColor';
28
28
  import { useT } from '../../i18n/useT';
29
+ import { useTheme } from '../../hooks/useTheme';
29
30
 
30
31
  const LONG_PRESS_THRESHOLD = 200;
31
32
 
@@ -35,9 +36,8 @@ interface RoomListProps {
35
36
  onRoomClick?: (chat: IRoom) => void;
36
37
  }
37
38
 
38
- /** Page ground behind the room list, the search field and the header's
39
- * rounded bottom corners. */
40
- const LIST_BACKGROUND = '#E8EDF2';
39
+ // The page ground behind the room list, the search field and the header's
40
+ // rounded bottom corners is `theme.listBackground` (applied inline below).
41
41
 
42
42
  /** A release that leaves the search strip in between is settled by
43
43
  * scrolling to whichever end is nearer; this delay lets the platform tell
@@ -78,6 +78,7 @@ const RoomList: React.FC<RoomListProps> = ({
78
78
  }) => {
79
79
  const { config } = useChatSettingState();
80
80
  const t = useT();
81
+ const theme = useTheme();
81
82
 
82
83
  const [open, setOpen] = useState(false);
83
84
  const [searchTerm, setSearchTerm] = useState('');
@@ -358,7 +359,11 @@ const RoomList: React.FC<RoomListProps> = ({
358
359
  )}
359
360
  <View
360
361
  ref={containerRef}
361
- style={[styles.container, config?.roomListStyles]}
362
+ style={[
363
+ styles.container,
364
+ { backgroundColor: theme.listBackground },
365
+ config?.roomListStyles,
366
+ ]}
362
367
  >
363
368
  {(open || !burgerMenu) && (
364
369
  <>
@@ -401,7 +406,10 @@ const RoomList: React.FC<RoomListProps> = ({
401
406
  <ChatRoomItem chat={item} config={config} />
402
407
  </Pressable>
403
408
  )}
404
- style={styles.chatList}
409
+ style={[
410
+ styles.chatList,
411
+ { backgroundColor: theme.listBackground },
412
+ ]}
405
413
  />
406
414
  </View>
407
415
 
@@ -429,7 +437,6 @@ const styles = StyleSheet.create({
429
437
  width: '100%',
430
438
  height: '100%',
431
439
  flex: 1,
432
- backgroundColor: LIST_BACKGROUND,
433
440
  },
434
441
  scrollContainer: {
435
442
  flexGrow: 1,
@@ -460,7 +467,6 @@ const styles = StyleSheet.create({
460
467
  chatList: {
461
468
  flex: 1,
462
469
  paddingHorizontal: 16,
463
- backgroundColor: LIST_BACKGROUND,
464
470
  },
465
471
  });
466
472
 
@@ -8,6 +8,7 @@ import {
8
8
  Keyboard,
9
9
  } from 'react-native';
10
10
  import { Iso639_1Codes } from '../../types/types';
11
+ import { useTheme } from '../../hooks/useTheme';
11
12
 
12
13
  const SelectWrapper = styled.View`
13
14
  position: relative;
@@ -18,20 +19,21 @@ const SelectBox = styled.TouchableOpacity<{
18
19
  isOpen: boolean;
19
20
  borderColor?: string;
20
21
  }>`
21
- border: ${({ borderColor }) =>
22
- borderColor ? `1px solid ${borderColor}` : '1px solid #ccc'};
22
+ border: ${({ borderColor, theme }) =>
23
+ `1px solid ${borderColor || theme.border}`};
23
24
  padding: 10px;
24
25
  flex-direction: row;
25
26
  justify-content: space-between;
26
27
  align-items: center;
27
- background-color: #fff;
28
+ background-color: ${({ theme }) => theme.surface};
28
29
  border-radius: 5px;
29
30
  box-shadow: ${({ isOpen }) =>
30
31
  isOpen ? '0px 4px 8px rgba(0, 0, 0, 0.1)' : 'none'};
31
32
  `;
32
33
 
34
+ // Light keeps its original #aaa; dark uses the palette's muted text.
33
35
  const Placeholder = styled.Text`
34
- color: #aaa;
36
+ color: ${({ theme }) => (theme.dark ? theme.textMuted : '#aaa')};
35
37
  `;
36
38
 
37
39
  const Icon = styled(Animated.Text)`
@@ -43,9 +45,9 @@ const Dropdown = styled.View`
43
45
  top: 100%;
44
46
  left: 0;
45
47
  right: 0;
46
- background-color: #fff;
48
+ background-color: ${({ theme }) => theme.surface};
47
49
  max-height: 200px;
48
- border: 1px solid #ccc;
50
+ border: 1px solid ${({ theme }) => theme.border};
49
51
  border-radius: 5px;
50
52
  z-index: 100;
51
53
  `;
@@ -54,7 +56,8 @@ const SearchBox = styled.TextInput`
54
56
  width: 100%;
55
57
  padding: 10px;
56
58
  border-bottom-width: 1px;
57
- border-color: #ccc;
59
+ border-color: ${({ theme }) => theme.border};
60
+ color: ${({ theme }) => theme.text};
58
61
  box-sizing: border-box;
59
62
  `;
60
63
 
@@ -63,7 +66,7 @@ const DropdownItem = styled.TouchableOpacity`
63
66
  `;
64
67
 
65
68
  const DropdownItemText = styled.Text`
66
- color: #000;
69
+ color: ${({ theme }) => theme.text};
67
70
  `;
68
71
 
69
72
  interface SelectProps {
@@ -81,6 +84,7 @@ const Select: React.FC<SelectProps> = ({
81
84
  accentColor,
82
85
  selectedValue = null,
83
86
  }) => {
87
+ const theme = useTheme();
84
88
  const [isOpen, setIsOpen] = useState(false);
85
89
  const [selected, setSelected] = useState<{ name: string; id: string } | null>(
86
90
  selectedValue
@@ -139,6 +143,7 @@ const Select: React.FC<SelectProps> = ({
139
143
  <Dropdown>
140
144
  <SearchBox
141
145
  placeholder="Search..."
146
+ placeholderTextColor={theme.textMuted}
142
147
  value={searchTerm}
143
148
  onChangeText={setSearchTerm}
144
149
  />
@@ -24,6 +24,7 @@ import { setActiveModal } from '../../roomStore/chatSettingsSlice';
24
24
  import { MODAL_TYPES } from '../../helpers/constants/MODAL_TYPES';
25
25
  import { useChatSettingState } from '../../hooks/useChatSettingState';
26
26
  import { useLogout } from '../../hooks/useLogout';
27
+ import { useTheme } from '../../hooks/useTheme';
27
28
  import {
28
29
  shouldClaimVerticalDrag,
29
30
  shouldDismissOnDrag,
@@ -112,7 +113,10 @@ export const HeaderRoomListMenu: FC<HeaderRoomListMenuProps> = ({
112
113
  const { config } = useChatSettingState();
113
114
  const performLogout = useLogout();
114
115
  const logoutConfig = config?.logout?.enabled ? config.logout : undefined;
115
- const primaryColor = config?.colors?.primary ?? '#0052CD';
116
+ const theme = useTheme();
117
+ const primaryColor = theme.primary;
118
+ const iconColor = theme.icon;
119
+ const labelColor = theme.text;
116
120
 
117
121
  const insets = useSafeAreaInsets();
118
122
  // Measured, so the sheet is exactly as tall as its rows and starts
@@ -243,22 +247,22 @@ export const HeaderRoomListMenu: FC<HeaderRoomListMenuProps> = ({
243
247
  }[] = [
244
248
  {
245
249
  label: 'New Chat',
246
- icon: <AddNewIcon color={primaryColor} />,
250
+ icon: <AddNewIcon color={iconColor} />,
247
251
  onClick: () => {
248
252
  dispatch(setActiveModal(MODAL_TYPES.NEW_CHAT));
249
253
  },
250
- styles: { color: '#141414' },
254
+ styles: { color: labelColor },
251
255
  },
252
256
  {
253
257
  label: 'Profile',
254
- icon: <ProfileIcon color={primaryColor} />,
258
+ icon: <ProfileIcon color={iconColor} />,
255
259
  onClick: () => {
256
260
  dispatch(setActiveModal(MODAL_TYPES.PROFILE));
257
261
  },
258
262
  },
259
263
  {
260
264
  label: 'Settings',
261
- icon: <SettingIcon color={primaryColor} />,
265
+ icon: <SettingIcon color={iconColor} />,
262
266
  onClick: () => {
263
267
  dispatch(setActiveModal(MODAL_TYPES.SETTINGS));
264
268
  },
@@ -267,7 +271,7 @@ export const HeaderRoomListMenu: FC<HeaderRoomListMenuProps> = ({
267
271
  if (logoutConfig) {
268
272
  options.push({
269
273
  label: logoutConfig.label ?? DEFAULT_LOGOUT_LABEL,
270
- icon: <LogoutIcon color={primaryColor} />,
274
+ icon: <LogoutIcon color={iconColor} />,
271
275
  styles: { color: primaryColor },
272
276
  onClick: () => {
273
277
  runLogoutFlow(logoutConfig, performLogout).catch(() => {});
@@ -275,7 +279,7 @@ export const HeaderRoomListMenu: FC<HeaderRoomListMenuProps> = ({
275
279
  });
276
280
  }
277
281
  return options;
278
- }, [dispatch, logoutConfig, performLogout, primaryColor]);
282
+ }, [dispatch, logoutConfig, performLogout, primaryColor, iconColor, labelColor]);
279
283
 
280
284
  return (
281
285
  // Presented through a real <Modal>: as an in-tree overlay the sheet was
@@ -308,6 +312,8 @@ export const HeaderRoomListMenu: FC<HeaderRoomListMenuProps> = ({
308
312
  style={[
309
313
  styles.sheet,
310
314
  {
315
+ backgroundColor: theme.surface,
316
+ shadowColor: theme.shadow,
311
317
  paddingBottom: insets.bottom + 20,
312
318
  // Two entries rather than Animated.add: the parent's value is
313
319
  // driven natively, and stacking the transforms keeps each node
@@ -324,7 +330,12 @@ export const HeaderRoomListMenu: FC<HeaderRoomListMenuProps> = ({
324
330
  style={styles.grabArea}
325
331
  {...handlePan.panHandlers}
326
332
  >
327
- <View style={styles.grabber} />
333
+ <View
334
+ style={[
335
+ styles.grabber,
336
+ theme.dark ? { backgroundColor: theme.textMuted } : null,
337
+ ]}
338
+ />
328
339
  </View>
329
340
  <View style={styles.card}>
330
341
  {menuOptions.map((option, index) => (
@@ -336,12 +347,19 @@ export const HeaderRoomListMenu: FC<HeaderRoomListMenuProps> = ({
336
347
  onPress={() => handleOptionPress(option.onClick)}
337
348
  >
338
349
  <View style={styles.iconSlot}>{option.icon}</View>
339
- <Text style={[styles.label, option?.styles]}>
350
+ <Text
351
+ style={[styles.label, { color: theme.text }, option?.styles]}
352
+ >
340
353
  {option.label}
341
354
  </Text>
342
355
  </TouchableOpacity>
343
356
  {index < menuOptions.length - 1 && (
344
- <View style={styles.divider} />
357
+ <View
358
+ style={[
359
+ styles.divider,
360
+ theme.dark ? { backgroundColor: theme.divider } : null,
361
+ ]}
362
+ />
345
363
  )}
346
364
  </View>
347
365
  ))}
@@ -369,12 +387,12 @@ const styles = StyleSheet.create({
369
387
  label: {
370
388
  fontSize: 16,
371
389
  fontWeight: '500',
372
- color: '#141414',
373
390
  marginLeft: 12,
374
391
  },
375
392
  divider: {
376
393
  height: StyleSheet.hairlineWidth,
377
394
  marginLeft: 54,
395
+ // Light hairline; swapped for theme.divider in dark mode.
378
396
  backgroundColor: '#E4E4E9',
379
397
  },
380
398
  sheet: {
@@ -385,9 +403,7 @@ const styles = StyleSheet.create({
385
403
  right: 3,
386
404
  bottom: 3,
387
405
  paddingTop: 8,
388
- backgroundColor: '#FFFFFF',
389
406
  borderRadius: 20,
390
- shadowColor: '#000',
391
407
  shadowOpacity: 0.12,
392
408
  shadowOffset: { width: 0, height: -3 },
393
409
  shadowRadius: 12,
@@ -403,6 +419,7 @@ const styles = StyleSheet.create({
403
419
  width: 40,
404
420
  height: 4,
405
421
  borderRadius: 2,
422
+ // Light pill; swapped for theme.textMuted in dark mode.
406
423
  backgroundColor: '#C9CBD1',
407
424
  },
408
425
  card: {
@@ -3,6 +3,7 @@ import { IReply, IUser } from '../../types/types';
3
3
  import { Avatar } from './Avatar';
4
4
  import { styled } from 'styled-components/native';
5
5
  import { Platform, Text, View } from 'react-native';
6
+ import { useTheme } from '../../hooks/useTheme';
6
7
 
7
8
  interface BottomReplyContainerProps {
8
9
  isUser: boolean;
@@ -11,7 +12,7 @@ interface BottomReplyContainerProps {
11
12
  }
12
13
 
13
14
  const ReplyContainer = styled.TouchableOpacity<{ isUser: boolean }>`
14
- background-color: #ffffff;
15
+ background-color: ${({ theme }) => theme.surface};
15
16
  left: ${(props) => (!props.isUser ? '10px' : 'auto')};
16
17
  right: ${(props) => (props.isUser ? '10px' : 'auto')};
17
18
  padding: 4px 8px 4px 16px;
@@ -21,17 +22,20 @@ const ReplyContainer = styled.TouchableOpacity<{ isUser: boolean }>`
21
22
  gap: 6px;
22
23
  margin: 8px 8px 0;
23
24
 
24
- ${Platform.select({
25
- ios: `
26
- shadow-color: rgba(185, 198, 199, 1);
25
+ ${({ theme }) =>
26
+ Platform.select({
27
+ // The light shadow is a soft bluish-grey tuned for a white card; on
28
+ // the dark palette that would read as a glow, so use the theme shadow.
29
+ ios: `
30
+ shadow-color: ${theme.dark ? theme.shadow : 'rgba(185, 198, 199, 1)'};
27
31
  shadow-offset: 0px 0px;
28
32
  shadow-opacity: 1;
29
33
  shadow-radius: 8px;
30
34
  `,
31
- android: `
35
+ android: `
32
36
  elevation: 8;
33
37
  `,
34
- })}
38
+ })}
35
39
  `;
36
40
 
37
41
  const AvatarCircle = styled.View`
@@ -46,20 +50,20 @@ const CircleCurrent = styled.View`
46
50
  display: flex;
47
51
  justify-content: center;
48
52
  align-items: center;
49
- border: 1px solid #f0f0f0;
53
+ border: 1px solid ${({ theme }) => theme.border};
50
54
  border-radius: 50%;
51
- background-color: #ffffff;
55
+ background-color: ${({ theme }) => theme.surface};
52
56
  `;
53
57
 
54
58
  const CircleCurrentText = styled.Text`
55
- color: #8c8c8c;
59
+ color: ${({ theme }) => theme.textSecondary};
56
60
  font-size: 10px;
57
61
  font-weight: 100;
58
62
  `;
59
63
 
60
64
  const CounterRepliesText = styled.Text`
61
65
  font-size: 12px;
62
- color: #0052cd;
66
+ color: ${({ theme }) => theme.primary};
63
67
  font-weight: 600;
64
68
  overflow: hidden;
65
69
  text-overflow: ellipsis;
@@ -70,6 +74,7 @@ export const BottomReplyContainer: FC<BottomReplyContainerProps> = ({
70
74
  reply,
71
75
  onClick,
72
76
  }) => {
77
+ const theme = useTheme();
73
78
  const uniqueUsers: IUser[] = useMemo(() => {
74
79
  return Object.values(
75
80
  reply.reduce<Record<string, IUser>>((acc, item) => {
@@ -94,7 +99,7 @@ export const BottomReplyContainer: FC<BottomReplyContainerProps> = ({
94
99
  height: '100%',
95
100
  width: '100%',
96
101
  borderWidth: 1,
97
- borderColor: '#F0F0F0',
102
+ borderColor: theme.border,
98
103
  borderStyle: 'solid',
99
104
  fontSize: 10,
100
105
  }}
@@ -1,4 +1,4 @@
1
- import React, { useRef, useState } from 'react';
1
+ import React, { useMemo, useRef, useState } from 'react';
2
2
  import {
3
3
  View,
4
4
  Pressable,
@@ -39,6 +39,7 @@ import { useXmppClient } from '../../context/xmppProvider';
39
39
  import { useSendMessage } from '../../hooks/useSendMessage';
40
40
  import { MessageReaction } from './MessageReaction';
41
41
  import { MessageFooter } from '../styled/StyledComponents';
42
+ import { useTheme } from '../../hooks/useTheme';
42
43
 
43
44
  const CustomMessageContainer = styled.View<{ isUser: boolean; reply?: number }>`
44
45
  flex-direction: row;
@@ -73,12 +74,13 @@ const CustomMessageBubble = styled.View<{
73
74
  deleted,
74
75
  backgroundMessageUser,
75
76
  backgroundMessage,
77
+ theme,
76
78
  }) =>
77
79
  deleted
78
- ? '#f5f5f5'
80
+ ? theme.systemMessageBackground
79
81
  : isUser
80
- ? backgroundMessageUser || '#d1e7ff'
81
- : backgroundMessage || '#fff'};
82
+ ? backgroundMessageUser || theme.messageBackgroundUser
83
+ : backgroundMessage || theme.messageBackground};
82
84
  `;
83
85
 
84
86
  const CustomMessageText = styled.Text<{
@@ -90,8 +92,8 @@ const CustomMessageText = styled.Text<{
90
92
  }>`
91
93
  font-size: ${({ fontSize }) => fontSize ?? 16}px;
92
94
  ${({ fontWeight }) => (fontWeight ? `font-weight: ${fontWeight};` : '')}
93
- color: ${({ color, colorUser, isUser }) =>
94
- isUser ? colorUser || '#333' : color || '#333'};
95
+ color: ${({ color, colorUser, isUser, theme }) =>
96
+ isUser ? colorUser || theme.messageTextUser : color || theme.messageText};
95
97
  `;
96
98
 
97
99
  const CustomMessagePhoto = styled.Image`
@@ -115,7 +117,7 @@ const CustomUserName = styled.Text<{
115
117
  padding-bottom: 8px;
116
118
  padding-left: ${({media}) => media ? '16px': 0};
117
119
  padding-top: ${({media}) => media ? '8px': 0};
118
- color: ${({ color }) => color || '#333'};
120
+ color: ${({ color, theme }) => color || theme.text};
119
121
  `;
120
122
 
121
123
  const CustomMessageTimestamp = styled.Text<{
@@ -124,9 +126,8 @@ const CustomMessageTimestamp = styled.Text<{
124
126
  colorUser?: string;
125
127
  }>`
126
128
  font-size: 12px;
127
- color: #999;
128
- color: ${({ isUser, color, colorUser }) =>
129
- isUser ? colorUser || '#999' : color || '#999'};
129
+ color: ${({ isUser, color, colorUser, theme }) =>
130
+ isUser ? colorUser || theme.textMuted : color || theme.textMuted};
130
131
  margin-top: 5px;
131
132
  align-self: flex-end;
132
133
  `;
@@ -144,6 +145,17 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
144
145
  const dispatch = useDispatch();
145
146
  const { client } = useXmppClient();
146
147
  const { config, langSource, user, translateMode } = useChatSettingState();
148
+ // Single theme read per message; the two colour overrides below are the
149
+ // only per-render allocations added for theming (memoized on the theme
150
+ // object, which useTheme keeps stable across renders).
151
+ const theme = useTheme();
152
+ const themedStyles = useMemo(
153
+ () => ({
154
+ muted: { color: theme.textMuted },
155
+ failed: { color: theme.danger },
156
+ }),
157
+ [theme]
158
+ );
147
159
 
148
160
  // `enableTranslates` predates the `translates` config block; keep it
149
161
  // working so existing hosts don't lose translations on upgrade.
@@ -354,7 +366,16 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
354
366
  // Body text size/weight is set on the parser's leaf <Text>s — the markdown
355
367
  // wraps content in <View>s which break Text-style inheritance, so the bubble
356
368
  // wrapper's fontSize alone never reached the actual text.
357
- const bodyTextStyle = chatTextStyle(config?.typography?.messageText);
369
+ // The parser wraps paragraphs / list items in <View>s, so the bubble's
370
+ // text colour never reaches the leaf <Text>s by inheritance — put the
371
+ // ink on the base leaf style explicitly (theme-aware).
372
+ const bodyTextStyle = useMemo(
373
+ () => ({
374
+ ...chatTextStyle(config?.typography?.messageText),
375
+ color: isUser ? theme.messageTextUser : theme.messageText,
376
+ }),
377
+ [config?.typography?.messageText, isUser, theme]
378
+ );
358
379
  // In auto mode, render the translation as the primary body — but NEVER for
359
380
  // the reader's own messages (they wrote it; no point translating it back).
360
381
  const showInlineTranslation =
@@ -365,9 +386,10 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
365
386
  const messageText = config?.messageTextFilter?.enabled
366
387
  ? parseMessageBody(
367
388
  config?.messageTextFilter.filterFunction(bodyToRender),
368
- bodyTextStyle
389
+ bodyTextStyle,
390
+ theme
369
391
  )
370
- : parseMessageBody(bodyToRender, bodyTextStyle);
392
+ : parseMessageBody(bodyToRender, bodyTextStyle, theme);
371
393
 
372
394
  const isFailed = failedIdSet.has(message.id);
373
395
  const isPending =
@@ -452,12 +474,13 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
452
474
  isUser={isUser}
453
475
  deleted={message.isDeleted}
454
476
  isMedia={message?.isMediafile === 'true' && !message?.isDeleted}
455
- backgroundMessageUser={config?.messageColor?.backgroundMessageUser}
456
- backgroundMessage={config?.messageColor?.backgroundMessage}
457
477
  >
458
478
  {!isUser && hasRealSenderName && (
459
479
  <CustomUserName
460
- color={config?.colors?.primary}
480
+ // Historically `config.colors.primary` with a plain-text
481
+ // fallback; theme.primary carries the same value in light
482
+ // mode and the dark accent in dark mode.
483
+ color={config?.colors?.primary ? theme.primary : undefined}
461
484
  media={message?.isMediafile === 'true'}
462
485
  fontSize={config?.typography?.senderName?.fontSize}
463
486
  fontWeight={config?.typography?.senderName?.fontWeight as any}
@@ -470,7 +493,7 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
470
493
  handleReplyMessage={handleReplyMessage}
471
494
  isUser={isUser}
472
495
  text={JSON.parse(message.mainMessage).text}
473
- color={config?.colors?.primary}
496
+ color={theme.primary}
474
497
  />
475
498
  )}
476
499
 
@@ -489,8 +512,6 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
489
512
  ) : (
490
513
  <CustomMessageText
491
514
  isUser={isUser}
492
- colorUser={config?.messageColor?.colorUser}
493
- color={config?.messageColor?.color}
494
515
  fontSize={config?.typography?.messageText?.fontSize}
495
516
  fontWeight={config?.typography?.messageText?.fontWeight as any}
496
517
  >
@@ -501,7 +522,7 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
501
522
  <TranslatedMessageBody
502
523
  isUser={isUser}
503
524
  originalText={translationDisplay.originalText}
504
- accentColor={config?.colors?.primary}
525
+ accentColor={theme.primary}
505
526
  >
506
527
  <Text>{messageText}</Text>
507
528
  </TranslatedMessageBody>
@@ -528,12 +549,14 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
528
549
  {/* <View style={styles.timestampRow}> */}
529
550
  <CustomTimestampRow media={message?.isMediafile === 'true'}>
530
551
  {!config?.disableSentLogic && isUser && isPending && (
531
- <Text style={styles.timestampText}>sending...</Text>
552
+ <Text style={[styles.timestampText, themedStyles.muted]}>
553
+ sending...
554
+ </Text>
532
555
  )}
533
556
  {!config?.disableSentLogic && isUser && isFailed && (
534
557
  <Text
535
558
  onPress={onRetryPress}
536
- style={styles.failedText}
559
+ style={[styles.failedText, themedStyles.failed]}
537
560
  accessibilityRole="button"
538
561
  accessibilityLabel="Retry sending message"
539
562
  >
@@ -541,9 +564,9 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
541
564
  </Text>
542
565
  )}
543
566
  {message?.isEdited && !message?.isDeleted && (
544
- <Text style={styles.editedText}>edited</Text>
567
+ <Text style={[styles.editedText, themedStyles.muted]}>edited</Text>
545
568
  )}
546
- <Text style={styles.timestampText}>
569
+ <Text style={[styles.timestampText, themedStyles.muted]}>
547
570
  {new Date(message.date).toLocaleTimeString([], {
548
571
  hour: '2-digit',
549
572
  minute: '2-digit',
@@ -570,7 +593,7 @@ const Message: React.FC<MessageProps> = ({ message, isUser, isReply }) => {
570
593
  <MessageReaction
571
594
  reaction={message.reaction}
572
595
  changeReaction={handleReactionMessage}
573
- color={config?.colors?.primary || '#0052CD'}
596
+ color={theme.primary}
574
597
  userName={`${user.firstName} ${user.lastName}`}
575
598
  />
576
599
  )}