@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.
- package/CHANGELOG.md +18 -0
- package/README.md +27 -1
- package/lib/commonjs/assets/EmptyChatIllustration.js +7 -6
- package/lib/commonjs/assets/EmptyChatIllustration.js.map +1 -1
- package/lib/commonjs/assets/icons.js +2 -2
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/AuthForms/Login.js +23 -8
- package/lib/commonjs/components/AuthForms/Login.js.map +1 -1
- package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js +12 -4
- package/lib/commonjs/components/ContextMenu/ContextMenuComponents.js.map +1 -1
- package/lib/commonjs/components/DropdownMenu/DropdownMenu.js +16 -9
- package/lib/commonjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/lib/commonjs/components/ExampleComponents/CustomMessage.js +25 -7
- package/lib/commonjs/components/ExampleComponents/CustomMessage.js.map +1 -1
- package/lib/commonjs/components/ExampleComponents/CustomTypingIndicatorExamples.js +18 -6
- package/lib/commonjs/components/ExampleComponents/CustomTypingIndicatorExamples.js.map +1 -1
- package/lib/commonjs/components/Header/HeaderRoomList.js +9 -6
- package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/commonjs/components/InputComponents/Search.js +13 -4
- package/lib/commonjs/components/InputComponents/Search.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +9 -3
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +6 -3
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +8 -6
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js +37 -10
- package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MediaMessage.js +43 -19
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageList.js +9 -3
- package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RNStyled.js +12 -4
- package/lib/commonjs/components/MainComponents/RNStyled.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +61 -7
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +12 -9
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/Select.js +29 -8
- package/lib/commonjs/components/MainComponents/Select.js.map +1 -1
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +24 -13
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +24 -8
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js +46 -24
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +15 -4
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageReaction.js +10 -5
- package/lib/commonjs/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/commonjs/components/Modals/AddMembersModal/AddMembersModal.js +1 -5
- package/lib/commonjs/components/Modals/AddMembersModal/AddMembersModal.js.map +1 -1
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js +42 -27
- package/lib/commonjs/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +77 -24
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js +5 -7
- package/lib/commonjs/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +18 -14
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +20 -9
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/ModalHeaderComponent.js +8 -2
- package/lib/commonjs/components/Modals/ModalHeaderComponent.js.map +1 -1
- package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js +8 -8
- package/lib/commonjs/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
- package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js +1 -5
- package/lib/commonjs/components/Modals/NewChatModal/ModalContent.js.map +1 -1
- package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js +18 -15
- package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js +14 -9
- package/lib/commonjs/components/Modals/ProfileHeader/ProfileMenu.js.map +1 -1
- package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js +3 -7
- package/lib/commonjs/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
- package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +8 -6
- package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
- package/lib/commonjs/components/Modals/SettingsModals/Referrals/Referrals.js +7 -2
- package/lib/commonjs/components/Modals/SettingsModals/Referrals/Referrals.js.map +1 -1
- package/lib/commonjs/components/Modals/SettingsModals/SharedStyledComponents.js +7 -3
- package/lib/commonjs/components/Modals/SettingsModals/SharedStyledComponents.js.map +1 -1
- package/lib/commonjs/components/Modals/SettingsModals/Visibility/RadioInput.js +10 -6
- package/lib/commonjs/components/Modals/SettingsModals/Visibility/RadioInput.js.map +1 -1
- package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js +7 -6
- package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js +3 -1
- package/lib/commonjs/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +18 -15
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +145 -9
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/commonjs/components/Modals/styledModalComponents.js +60 -16
- package/lib/commonjs/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +16 -10
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +6 -2
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/StyledRoomComponents.js +6 -0
- package/lib/commonjs/components/RoomComponents/styled/StyledRoomComponents.js.map +1 -1
- package/lib/commonjs/components/Thread/ThreadWrapper.js +9 -2
- package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/commonjs/components/Toast/Toast.js +3 -1
- package/lib/commonjs/components/Toast/Toast.js.map +1 -1
- package/lib/commonjs/components/styled/AudioMessage.js +16 -11
- package/lib/commonjs/components/styled/AudioMessage.js.map +1 -1
- package/lib/commonjs/components/styled/Button.js +18 -9
- package/lib/commonjs/components/styled/Button.js.map +1 -1
- package/lib/commonjs/components/styled/DateLabel.js +8 -5
- package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
- package/lib/commonjs/components/styled/MediaModal.js +27 -21
- package/lib/commonjs/components/styled/MediaModal.js.map +1 -1
- package/lib/commonjs/components/styled/RoomListComponents/index.js +60 -38
- package/lib/commonjs/components/styled/RoomListComponents/index.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +13 -8
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/components/styled/StyledComponents.js +67 -23
- package/lib/commonjs/components/styled/StyledComponents.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInput.js +32 -18
- package/lib/commonjs/components/styled/StyledInput.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInputComponents/CustomTypingIndicator.js +13 -8
- package/lib/commonjs/components/styled/StyledInputComponents/CustomTypingIndicator.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js +20 -9
- package/lib/commonjs/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
- package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js +39 -18
- package/lib/commonjs/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
- package/lib/commonjs/components/styled/TreadLabel.js +6 -3
- package/lib/commonjs/components/styled/TreadLabel.js.map +1 -1
- package/lib/commonjs/context/MessageNotificationContext.js +14 -3
- package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
- package/lib/commonjs/helpers/getChatBackground.js +4 -1
- package/lib/commonjs/helpers/getChatBackground.js.map +1 -1
- package/lib/commonjs/helpers/getDateLabelColor.js +3 -1
- package/lib/commonjs/helpers/getDateLabelColor.js.map +1 -1
- package/lib/commonjs/helpers/getIconColor.js +4 -1
- package/lib/commonjs/helpers/getIconColor.js.map +1 -1
- package/lib/commonjs/helpers/getSenderNameColor.js +3 -1
- package/lib/commonjs/helpers/getSenderNameColor.js.map +1 -1
- package/lib/commonjs/helpers/markdownParser.js +27 -5
- package/lib/commonjs/helpers/markdownParser.js.map +1 -1
- package/lib/commonjs/helpers/parseMessageBody.js +82 -24
- package/lib/commonjs/helpers/parseMessageBody.js.map +1 -1
- package/lib/commonjs/helpers/preferencesStorage.js +44 -0
- package/lib/commonjs/helpers/preferencesStorage.js.map +1 -0
- package/lib/commonjs/hooks/useCustomTypingIndicator.js +7 -3
- package/lib/commonjs/hooks/useCustomTypingIndicator.js.map +1 -1
- package/lib/commonjs/hooks/useLogout.js +10 -3
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/useTheme.js +35 -0
- package/lib/commonjs/hooks/useTheme.js.map +1 -0
- package/lib/commonjs/i18n/strings.js +60 -0
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/main.js +88 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/push.api.js +130 -45
- package/lib/commonjs/networking/api-requests/push.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +13 -0
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/roomStore/chatSettingsSlice.js +17 -4
- package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/commonjs/services/pushRegistration.js +261 -0
- package/lib/commonjs/services/pushRegistration.js.map +1 -0
- package/lib/commonjs/services/pushSubscriptionService.js +0 -24
- package/lib/commonjs/services/pushSubscriptionService.js.map +1 -1
- package/lib/commonjs/theme/index.js +38 -0
- package/lib/commonjs/theme/index.js.map +1 -0
- package/lib/commonjs/theme/styled.d.js +4 -0
- package/lib/commonjs/theme/styled.d.js.map +1 -0
- package/lib/commonjs/theme/theme.js +161 -0
- package/lib/commonjs/theme/theme.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/module/assets/EmptyChatIllustration.js +7 -6
- package/lib/module/assets/EmptyChatIllustration.js.map +1 -1
- package/lib/module/assets/icons.js +1 -1
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/AuthForms/Login.js +23 -8
- package/lib/module/components/AuthForms/Login.js.map +1 -1
- package/lib/module/components/ContextMenu/ContextMenuComponents.js +12 -4
- package/lib/module/components/ContextMenu/ContextMenuComponents.js.map +1 -1
- package/lib/module/components/DropdownMenu/DropdownMenu.js +16 -9
- package/lib/module/components/DropdownMenu/DropdownMenu.js.map +1 -1
- package/lib/module/components/ExampleComponents/CustomMessage.js +25 -7
- package/lib/module/components/ExampleComponents/CustomMessage.js.map +1 -1
- package/lib/module/components/ExampleComponents/CustomTypingIndicatorExamples.js +18 -6
- package/lib/module/components/ExampleComponents/CustomTypingIndicatorExamples.js.map +1 -1
- package/lib/module/components/Header/HeaderRoomList.js +9 -6
- package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/module/components/InputComponents/Search.js +13 -4
- package/lib/module/components/InputComponents/Search.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +9 -3
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +6 -3
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +8 -6
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/LanguageSelectorModal.js +37 -10
- package/lib/module/components/MainComponents/LanguageSelectorModal.js.map +1 -1
- package/lib/module/components/MainComponents/MediaMessage.js +42 -19
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageList.js +9 -3
- package/lib/module/components/MainComponents/MessageList.js.map +1 -1
- package/lib/module/components/MainComponents/RNStyled.js +12 -4
- package/lib/module/components/MainComponents/RNStyled.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +64 -10
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +12 -9
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/MainComponents/Select.js +29 -8
- package/lib/module/components/MainComponents/Select.js.map +1 -1
- package/lib/module/components/Menu/HeaderRoomListMenu.js +24 -13
- package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/module/components/MessageBubble/BottomReplyContainer.js +24 -8
- package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/module/components/MessageBubble/Message.js +47 -25
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +15 -4
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageReaction.js +10 -5
- package/lib/module/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/module/components/Modals/AddMembersModal/AddMembersModal.js +2 -6
- package/lib/module/components/Modals/AddMembersModal/AddMembersModal.js.map +1 -1
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js +42 -27
- package/lib/module/components/Modals/AttachSheet/AttachSheet.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +79 -26
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js +6 -8
- package/lib/module/components/Modals/ChatProfileModal/DeleteChatModal.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +18 -16
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +20 -9
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/ModalHeaderComponent.js +8 -2
- package/lib/module/components/Modals/ModalHeaderComponent.js.map +1 -1
- package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js +10 -10
- package/lib/module/components/Modals/ModalWrapper/ModalWrapper.js.map +1 -1
- package/lib/module/components/Modals/NewChatModal/ModalContent.js +2 -6
- package/lib/module/components/Modals/NewChatModal/ModalContent.js.map +1 -1
- package/lib/module/components/Modals/NewChatModal/NewChatModal.js +18 -15
- package/lib/module/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
- package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js +14 -9
- package/lib/module/components/Modals/ProfileHeader/ProfileMenu.js.map +1 -1
- package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js +4 -8
- package/lib/module/components/Modals/SelectUsersModal/SelectUsersModal.js.map +1 -1
- package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +8 -6
- package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
- package/lib/module/components/Modals/SettingsModals/Referrals/Referrals.js +7 -2
- package/lib/module/components/Modals/SettingsModals/Referrals/Referrals.js.map +1 -1
- package/lib/module/components/Modals/SettingsModals/SharedStyledComponents.js +7 -3
- package/lib/module/components/Modals/SettingsModals/SharedStyledComponents.js.map +1 -1
- package/lib/module/components/Modals/SettingsModals/Visibility/RadioInput.js +10 -6
- package/lib/module/components/Modals/SettingsModals/Visibility/RadioInput.js.map +1 -1
- package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js +7 -6
- package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/EditUserModal.js +3 -2
- package/lib/module/components/Modals/UserProfileModal/EditUserModal.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +18 -15
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +148 -12
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/module/components/Modals/styledModalComponents.js +59 -15
- package/lib/module/components/Modals/styledModalComponents.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +16 -10
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +6 -2
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/StyledRoomComponents.js +6 -0
- package/lib/module/components/RoomComponents/styled/StyledRoomComponents.js.map +1 -1
- package/lib/module/components/Thread/ThreadWrapper.js +9 -2
- package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/module/components/Toast/Toast.js +3 -1
- package/lib/module/components/Toast/Toast.js.map +1 -1
- package/lib/module/components/styled/AudioMessage.js +16 -11
- package/lib/module/components/styled/AudioMessage.js.map +1 -1
- package/lib/module/components/styled/Button.js +17 -9
- package/lib/module/components/styled/Button.js.map +1 -1
- package/lib/module/components/styled/DateLabel.js +8 -5
- package/lib/module/components/styled/DateLabel.js.map +1 -1
- package/lib/module/components/styled/MediaModal.js +29 -23
- package/lib/module/components/styled/MediaModal.js.map +1 -1
- package/lib/module/components/styled/RoomListComponents/index.js +62 -39
- package/lib/module/components/styled/RoomListComponents/index.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +13 -8
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/components/styled/StyledComponents.js +67 -23
- package/lib/module/components/styled/StyledComponents.js.map +1 -1
- package/lib/module/components/styled/StyledInput.js +32 -18
- package/lib/module/components/styled/StyledInput.js.map +1 -1
- package/lib/module/components/styled/StyledInputComponents/CustomTypingIndicator.js +13 -8
- package/lib/module/components/styled/StyledInputComponents/CustomTypingIndicator.js.map +1 -1
- package/lib/module/components/styled/StyledInputComponents/MediaComponents.js +20 -9
- package/lib/module/components/styled/StyledInputComponents/MediaComponents.js.map +1 -1
- package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js +39 -18
- package/lib/module/components/styled/StyledInputComponents/StyledInputComponents.js.map +1 -1
- package/lib/module/components/styled/TreadLabel.js +6 -3
- package/lib/module/components/styled/TreadLabel.js.map +1 -1
- package/lib/module/context/MessageNotificationContext.js +14 -3
- package/lib/module/context/MessageNotificationContext.js.map +1 -1
- package/lib/module/helpers/getChatBackground.js +5 -1
- package/lib/module/helpers/getChatBackground.js.map +1 -1
- package/lib/module/helpers/getDateLabelColor.js +4 -1
- package/lib/module/helpers/getDateLabelColor.js.map +1 -1
- package/lib/module/helpers/getIconColor.js +5 -1
- package/lib/module/helpers/getIconColor.js.map +1 -1
- package/lib/module/helpers/getSenderNameColor.js +4 -1
- package/lib/module/helpers/getSenderNameColor.js.map +1 -1
- package/lib/module/helpers/markdownParser.js +27 -5
- package/lib/module/helpers/markdownParser.js.map +1 -1
- package/lib/module/helpers/parseMessageBody.js +82 -24
- package/lib/module/helpers/parseMessageBody.js.map +1 -1
- package/lib/module/helpers/preferencesStorage.js +36 -0
- package/lib/module/helpers/preferencesStorage.js.map +1 -0
- package/lib/module/hooks/useCustomTypingIndicator.js +8 -3
- package/lib/module/hooks/useCustomTypingIndicator.js.map +1 -1
- package/lib/module/hooks/useLogout.js +10 -3
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/useTheme.js +30 -0
- package/lib/module/hooks/useTheme.js.map +1 -0
- package/lib/module/i18n/strings.js +60 -0
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/main.js +4 -0
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/push.api.js +119 -45
- package/lib/module/networking/api-requests/push.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +12 -0
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/roomStore/chatSettingsSlice.js +14 -3
- package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/module/services/pushRegistration.js +250 -0
- package/lib/module/services/pushRegistration.js.map +1 -0
- package/lib/module/services/pushSubscriptionService.js +0 -24
- package/lib/module/services/pushSubscriptionService.js.map +1 -1
- package/lib/module/theme/index.js +7 -0
- package/lib/module/theme/index.js.map +1 -0
- package/lib/module/theme/styled.d.js +6 -0
- package/lib/module/theme/styled.d.js.map +1 -0
- package/lib/module/theme/theme.js +156 -0
- package/lib/module/theme/theme.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/typescript/assets/EmptyChatIllustration.d.ts +1 -0
- package/lib/typescript/assets/EmptyChatIllustration.d.ts.map +1 -1
- package/lib/typescript/assets/icons.d.ts +8 -0
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/AuthForms/Login.d.ts.map +1 -1
- package/lib/typescript/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/lib/typescript/components/ExampleComponents/CustomMessage.d.ts.map +1 -1
- package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
- package/lib/typescript/components/InputComponents/Search.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/LanguageSelectorModal.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/Select.d.ts.map +1 -1
- package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageReaction.d.ts.map +1 -1
- package/lib/typescript/components/Modals/AttachSheet/AttachSheet.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/DeleteChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ModalHeaderComponent.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ModalWrapper/ModalWrapper.d.ts.map +1 -1
- package/lib/typescript/components/Modals/NewChatModal/ModalContent.d.ts.map +1 -1
- package/lib/typescript/components/Modals/NewChatModal/NewChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ProfileHeader/ProfileMenu.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SelectUsersModal/SelectUsersModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SettingsModals/Referrals/Referrals.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SettingsModals/SharedStyledComponents.d.ts +2 -2
- package/lib/typescript/components/Modals/SettingsModals/SharedStyledComponents.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SettingsModals/Visibility/RadioInput.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SettingsModals/Visibility/VisibilityModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/EditUserModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/styledModalComponents.d.ts +2 -0
- package/lib/typescript/components/Modals/styledModalComponents.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/StyledRoomComponents.d.ts.map +1 -1
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
- package/lib/typescript/components/styled/AudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/styled/Button.d.ts.map +1 -1
- package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
- package/lib/typescript/components/styled/MediaModal.d.ts +2 -2
- package/lib/typescript/components/styled/MediaModal.d.ts.map +1 -1
- package/lib/typescript/components/styled/RoomListComponents/index.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledInput.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledInputComponents/MediaComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/StyledInputComponents/StyledInputComponents.d.ts.map +1 -1
- package/lib/typescript/components/styled/TreadLabel.d.ts.map +1 -1
- package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
- package/lib/typescript/helpers/getAvatarColor.d.ts +1 -1
- package/lib/typescript/helpers/getChatBackground.d.ts.map +1 -1
- package/lib/typescript/helpers/getDateLabelColor.d.ts +3 -7
- package/lib/typescript/helpers/getDateLabelColor.d.ts.map +1 -1
- package/lib/typescript/helpers/getIconColor.d.ts +4 -7
- package/lib/typescript/helpers/getIconColor.d.ts.map +1 -1
- package/lib/typescript/helpers/getSenderNameColor.d.ts +3 -7
- package/lib/typescript/helpers/getSenderNameColor.d.ts.map +1 -1
- package/lib/typescript/helpers/markdownParser.d.ts +8 -1
- package/lib/typescript/helpers/markdownParser.d.ts.map +1 -1
- package/lib/typescript/helpers/parseMessageBody.d.ts +8 -1
- package/lib/typescript/helpers/parseMessageBody.d.ts.map +1 -1
- package/lib/typescript/helpers/preferencesStorage.d.ts +11 -0
- package/lib/typescript/helpers/preferencesStorage.d.ts.map +1 -0
- package/lib/typescript/hooks/useCustomTypingIndicator.d.ts +2 -0
- package/lib/typescript/hooks/useCustomTypingIndicator.d.ts.map +1 -1
- package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
- package/lib/typescript/hooks/useTheme.d.ts +16 -0
- package/lib/typescript/hooks/useTheme.d.ts.map +1 -0
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +9 -0
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/push.api.d.ts +46 -3
- package/lib/typescript/networking/api-requests/push.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts +1 -0
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts +12 -1
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
- package/lib/typescript/services/pushRegistration.d.ts +21 -0
- package/lib/typescript/services/pushRegistration.d.ts.map +1 -0
- package/lib/typescript/services/pushSubscriptionService.d.ts +0 -4
- package/lib/typescript/services/pushSubscriptionService.d.ts.map +1 -1
- package/lib/typescript/theme/index.d.ts +5 -0
- package/lib/typescript/theme/index.d.ts.map +1 -0
- package/lib/typescript/theme/theme.d.ts +127 -0
- package/lib/typescript/theme/theme.d.ts.map +1 -0
- package/lib/typescript/types/models/room.model.d.ts +1 -0
- package/lib/typescript/types/models/room.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +42 -0
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/assets/EmptyChatIllustration.tsx +7 -5
- package/src/assets/icons.tsx +24 -0
- package/src/components/AuthForms/Login.tsx +11 -9
- package/src/components/ContextMenu/ContextMenuComponents.tsx +4 -4
- package/src/components/DropdownMenu/DropdownMenu.tsx +14 -6
- package/src/components/ExampleComponents/CustomMessage.tsx +9 -8
- package/src/components/ExampleComponents/CustomTypingIndicatorExamples.tsx +6 -6
- package/src/components/Header/HeaderRoomList.tsx +11 -6
- package/src/components/InputComponents/Search.tsx +7 -4
- package/src/components/MainComponents/ChatHeader.tsx +9 -3
- package/src/components/MainComponents/ChatRoom.tsx +5 -2
- package/src/components/MainComponents/ChatWrapper.tsx +8 -6
- package/src/components/MainComponents/LanguageSelectorModal.tsx +33 -7
- package/src/components/MainComponents/MediaMessage.tsx +37 -18
- package/src/components/MainComponents/MessageList.tsx +13 -3
- package/src/components/MainComponents/RNStyled.tsx +4 -4
- package/src/components/MainComponents/ReduxWrapper.tsx +67 -10
- package/src/components/MainComponents/RoomList.tsx +13 -7
- package/src/components/MainComponents/Select.tsx +13 -8
- package/src/components/Menu/HeaderRoomListMenu.tsx +30 -13
- package/src/components/MessageBubble/BottomReplyContainer.tsx +16 -11
- package/src/components/MessageBubble/Message.tsx +48 -25
- package/src/components/MessageBubble/MessageInteractions.tsx +17 -4
- package/src/components/MessageBubble/MessageReaction.tsx +9 -4
- package/src/components/Modals/AddMembersModal/AddMembersModal.tsx +2 -2
- package/src/components/Modals/AttachSheet/AttachSheet.tsx +57 -23
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +63 -25
- package/src/components/Modals/ChatProfileModal/DeleteChatModal.tsx +6 -4
- package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +18 -14
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +14 -9
- package/src/components/Modals/ModalHeaderComponent.tsx +9 -2
- package/src/components/Modals/ModalWrapper/ModalWrapper.tsx +14 -6
- package/src/components/Modals/NewChatModal/ModalContent.tsx +2 -2
- package/src/components/Modals/NewChatModal/NewChatModal.tsx +19 -15
- package/src/components/Modals/ProfileHeader/ProfileMenu.tsx +15 -8
- package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +2 -3
- package/src/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.tsx +8 -6
- package/src/components/Modals/SettingsModals/Referrals/Referrals.tsx +5 -3
- package/src/components/Modals/SettingsModals/SharedStyledComponents.ts +4 -4
- package/src/components/Modals/SettingsModals/Visibility/RadioInput.tsx +9 -5
- package/src/components/Modals/SettingsModals/Visibility/VisibilityModal.tsx +7 -7
- package/src/components/Modals/UserProfileModal/EditUserModal.tsx +3 -1
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +19 -15
- package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +171 -9
- package/src/components/Modals/styledModalComponents.tsx +23 -15
- package/src/components/RoomComponents/ChatRoomItem.tsx +19 -10
- package/src/components/RoomComponents/styled/LastAudioMessage.tsx +4 -2
- package/src/components/RoomComponents/styled/StyledRoomComponents.ts +2 -0
- package/src/components/Thread/ThreadWrapper.tsx +6 -5
- package/src/components/Toast/Toast.tsx +1 -1
- package/src/components/styled/AudioMessage.tsx +12 -9
- package/src/components/styled/Button.tsx +15 -8
- package/src/components/styled/DateLabel.tsx +7 -3
- package/src/components/styled/MediaModal.tsx +30 -25
- package/src/components/styled/RoomListComponents/index.tsx +60 -35
- package/src/components/styled/SendInput.tsx +23 -8
- package/src/components/styled/StyledComponents.ts +30 -23
- package/src/components/styled/StyledInput.tsx +35 -21
- package/src/components/styled/StyledInputComponents/CustomTypingIndicator.tsx +8 -8
- package/src/components/styled/StyledInputComponents/MediaComponents.tsx +20 -7
- package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +15 -19
- package/src/components/styled/TreadLabel.tsx +9 -3
- package/src/context/MessageNotificationContext.tsx +18 -4
- package/src/helpers/getChatBackground.ts +3 -1
- package/src/helpers/getDateLabelColor.ts +5 -3
- package/src/helpers/getIconColor.ts +6 -3
- package/src/helpers/getSenderNameColor.ts +5 -3
- package/src/helpers/markdownParser.tsx +29 -5
- package/src/helpers/parseMessageBody.tsx +79 -26
- package/src/helpers/preferencesStorage.ts +40 -0
- package/src/hooks/useCustomTypingIndicator.tsx +7 -3
- package/src/hooks/useLogout.tsx +10 -3
- package/src/hooks/useTheme.ts +41 -0
- package/src/i18n/strings.ts +60 -0
- package/src/main.ts +33 -0
- package/src/networking/api-requests/push.api.ts +185 -62
- package/src/networking/api-requests/rooms.api.ts +9 -0
- package/src/roomStore/chatSettingsSlice.ts +24 -2
- package/src/services/pushRegistration.ts +369 -0
- package/src/services/pushSubscriptionService.ts +0 -34
- package/src/theme/index.ts +10 -0
- package/src/theme/styled.d.ts +9 -0
- package/src/theme/theme.ts +277 -0
- package/src/types/models/room.model.ts +1 -0
- package/src/types/types.ts +47 -0
- package/src/version.ts +1 -1
- package/lib/commonjs/context/PushNotificationProvider.js +0 -79
- package/lib/commonjs/context/PushNotificationProvider.js.map +0 -1
- package/lib/commonjs/hooks/usePushNotifications.js +0 -110
- package/lib/commonjs/hooks/usePushNotifications.js.map +0 -1
- package/lib/commonjs/services/pushNotifications.js +0 -143
- package/lib/commonjs/services/pushNotifications.js.map +0 -1
- package/lib/module/context/PushNotificationProvider.js +0 -79
- package/lib/module/context/PushNotificationProvider.js.map +0 -1
- package/lib/module/hooks/usePushNotifications.js +0 -106
- package/lib/module/hooks/usePushNotifications.js.map +0 -1
- package/lib/module/services/pushNotifications.js +0 -130
- package/lib/module/services/pushNotifications.js.map +0 -1
- package/lib/typescript/context/PushNotificationProvider.d.ts +0 -2
- package/lib/typescript/context/PushNotificationProvider.d.ts.map +0 -1
- package/lib/typescript/hooks/usePushNotifications.d.ts +0 -5
- package/lib/typescript/hooks/usePushNotifications.d.ts.map +0 -1
- package/lib/typescript/services/pushNotifications.d.ts +0 -10
- package/lib/typescript/services/pushNotifications.d.ts.map +0 -1
- package/src/context/PushNotificationProvider.tsx +0 -78
- package/src/hooks/usePushNotifications.ts +0 -131
- package/src/services/pushNotifications.ts +0 -170
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,24 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this pr
|
|
|
7
7
|
|
|
8
8
|
### Added
|
|
9
9
|
|
|
10
|
+
- **Settings: Appearance (Light / Dark / System) and a Push notifications switch.** Two new cards on the Settings screen, in the same card style as Manage Data / Visibility. The appearance pick is persisted per device (`@ethora/preferences`, `helpers/preferencesStorage.ts`), folded into `config.dark` by the store (`setThemePreference`; a later `setConfig` from the host keeps the user's choice) so every consumer sees it, and reported to the host through `eventHandlers.onThemeChange(preference, isDark)`. `config.dark` accepts `'system'`, resolved against the OS scheme (`resolveTheme(config, systemDark)` / `isDarkTheme`, falling back to `Appearance.getColorScheme()` for callers without a hook). The push switch (`setPushEnabled`) is wired into the SDK's own token registration: off releases every device-token registration on the backend and keeps the tokens, on registers them again, `registerPushToken` resolves `'disabled'` meanwhile; the host is told through `eventHandlers.onPushNotificationsToggle(enabled)`. `settings.hideAppearance` / `settings.hidePushToggle` hide either card. `ThemePreference`, `setThemePreference`, `setPushEnabled` are exported. Tests in `userSettingsScreen.test.tsx`, `theme.test.ts`, `pushRegistration.test.ts`.
|
|
11
|
+
|
|
12
|
+
- **`registerPushToken` / `unregisterPushToken` / `getRegisteredPushToken` — the host hands the SDK its push token; the SDK does the rest.** Until now the only code that filed a device token was `usePushNotifications`, a Firebase-bound hook that was never mounted and not exported, so a host had no way to register a token through the SDK at all (`instructions.md` claimed otherwise). `registerPushToken(token, { tokenType? })` (`src/services/pushRegistration.ts`) files the token under the signed-in user via `POST /v1/push/subscription/{appId}` — the endpoint the web SDK and the Ethora RN app already use — waits for a session when called before sign-in (`'deferred'`), dedupes the same token + account, honours `pushNotifications.enabled: false` (`'disabled'`), and rejects with `PushRegistrationError` (`status`, `body`) when the backend refuses. On logout `logoutService` releases the registration (`DELETE`, before the access token is cleared) and keeps the token, so the next login of any account is registered again without another call. `unregisterPushToken()` deletes and forgets (`'unregistered' | 'forgotten'`). `detectPushTokenType` tells `expo` / `apns` / `fcm` tokens apart by shape; a backend that predates `tokenType` still gets `apns` / `fcm` tokens through the legacy payload, while `expo` and `apns-voip` are never downgraded into something it could not deliver to. `pushNotifications.apiUrl` keeps the standalone push gateway (`ethora-node-push`) reachable as an explicit legacy mode with its own strict schema (`projectName`, not `projectId`, which the SDK used to send). A device holds up to two tokens — the chat token (`expo` / `fcm` / `apns`) and an optional PushKit `apns-voip` token — registered, released and re-registered together; a rotated token releases the one it replaces. `config.pushNotifications.getPushTokens` is the declarative alternative (called once per login, retried after a back-off on failure), so a host can hand over tokens without wiring `registerPushToken` itself; both can be combined. `PushTokenType`, `PushTokenRegistration`, `PushDeviceType`, `PushSubscriptionPayload`, `RegisterPushTokenOptions/Outcome`, `UnregisterPushTokenOptions/Outcome`, `RegisteredPushToken`, `getRegisteredPushTokens` and `isPushRegistrationError` are exported. The two-slot model and the declarative hook follow `feat/push-token-providers`; the transport differs (main API instead of the gateway, see Fixed). Tests in `pushRegistration.test.ts`.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- **Android crashed on launch with `NoClassDefFoundError: expo.modules.kotlin.types.AnyTypeProvider` (expo-secure-store).** `expo-secure-store` was pinned to the SDK 54 line (`~15.0.7`, resolved 15.0.8) while the app runs Expo 57. Expo 57 consumes modules as prebuilt AARs, and that AAR was compiled against an `expo-modules-core` where `AnyTypeProvider` still existed, so the crash surfaced at native module registration, not at build time. Bumped to `~57.0.4` (`npx expo install --check` lists the rest of the drift).
|
|
17
|
+
|
|
18
|
+
- **Push registration pointed at a dead endpoint with the wrong payload.** The SDK's only registration path posted `projectId` to `{pushNotifications.apiUrl}/subscriptions` — the standalone gateway, whose Joi schema requires `projectName` and rejects unknown keys, and which the hosted clusters no longer expose at all (`nginx 405`). Every attempt failed and was logged as a success. Registration now goes through the main API by default (see Added); the gateway contract is fixed and kept behind `apiUrl` for self-hosted setups.
|
|
19
|
+
|
|
20
|
+
### Removed
|
|
21
|
+
|
|
22
|
+
- **Dead Firebase push code.** `hooks/usePushNotifications.ts`, `services/pushNotifications.ts` (the `@react-native-firebase/messaging` wrapper) and the fully commented-out `context/PushNotificationProvider.tsx` are gone, together with the ambient `@react-native-firebase/*` type shims that only existed to keep them compiling: the package was never installed and nothing reachable imported them. `pushNotifications.firebaseConfig` stays in `IConfig` as a deprecated no-op so existing configs still type-check. The push section of `instructions.md` is rewritten around the real contract (host mints the token, SDK registers it), with Firebase and expo-notifications examples.
|
|
23
|
+
|
|
24
|
+
- **Dark theme — `config.dark` + `config.darkColors`.** One flag switches the whole component (room list, both headers, conversation, bubbles, composer, attach sheet, context menus, every modal and sheet) to a dark palette. Colours live in one place now: `src/theme/theme.ts` holds `LIGHT_THEME` (the previously hard-coded values, so light rendering is unchanged) and `DARK_THEME`; `resolveTheme(config)` merges `darkColors` over the dark defaults, so a host passing `{ dark: true }` alone gets the built-in palette and `{ dark: true, darkColors: { primary, surface, … } }` overrides only what it names. `darkColors.primary` also drives `icon` / `senderName` / `dateLabel` unless set, mirroring `colors.primary`. In dark mode the light-only knobs (`colors` except `colors.avatar`, `messageColor`, `backgroundChat.color`) are not applied — they were tuned for white surfaces. Components read the palette through `useTheme()` (which works without a redux Provider, so leaf components stay renderable in isolation) or `({ theme }) => theme.x` in styled templates via a `ThemeProvider` mounted in `ReduxWrapper`; the existing `getIconColor` / `getSenderNameColor` / `getDateLabelColor` / `getChatBackgroundColor` helpers are theme-aware. `LIGHT_THEME`, `DARK_THEME`, `resolveTheme`, `isDarkTheme`, `useTheme` and the `ChatTheme*` types are exported from the package root so a host can paint its own chrome (status bar: `resolveTheme(config).statusBarStyle`). Testbed: a "Dark theme" toggle on the Setup tab. Tests in `theme.test.ts`.
|
|
25
|
+
|
|
26
|
+
- **Mute / unmute a chat from its profile.** A bell button joins Search, Leave and Report in the chat-profile hero (first in the row, per the design): "Unmuted" with a bell, "Muted" with a crossed bell. It toggles the caller's own membership flag through `PUT` / `DELETE /v1/chats/my/{chatName}/mute` and reads the initial state from `muted` in `/chats/my` (new `IRoom.muted`). The flip is optimistic and rolls back with an error toast if the request fails. This is a stored preference only — the server does not change push delivery by itself yet.
|
|
27
|
+
|
|
10
28
|
- **`config.inputDockPaddingBottom`** - controls the input dock's bottom padding directly, used verbatim on both platforms when a number is given (0 allowed), instead of the built-in default (iOS safe-area inset, 12dp on Android). Customer-reported #44.
|
|
11
29
|
- **`handlePushPayload(data)` / `openRoomFromPush(jid)` are exported from the package root.** The host owns the native push side (token, permission, tap listeners) and hands the tapped notification's `data` to `handlePushPayload`: a call push rings, a message push (`data.jid` / `chatJid` / `roomJid`) opens its room — immediately when the room list is loaded, otherwise as soon as it is (`usePendingNotification` is now mounted in `ChatWrapper` and actually opens the room; it used to find it and do nothing). The pending jid is also persisted (with a 5-minute TTL), so a tap handled by a JS context that gets replaced right after (cold-start races) still opens the room on the next mount.
|
|
12
30
|
- **`config.headerLayout.safeAreaTop`** — the room-list and chat header cards pad their top by the safe-area inset and run under the status bar as one white surface. Hosts used to wrap `<Chat>` in a top-edge `SafeAreaView`, which painted its own white band above the card; on Android the card's elevation drew a hairline seam where the two met. Off by default, so existing hosts keep their layout; when on, drop the host-side top inset.
|
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ React Native chat UI + chat core for iOS and Android, powered by the Ethora plat
|
|
|
20
20
|
- [Customization flags worth knowing](#customization-flags-worth-knowing)
|
|
21
21
|
- [Keyboard handling](#keyboard-handling)
|
|
22
22
|
- [Header height & font sizing](#header-height--font-sizing)
|
|
23
|
+
- [Dark theme](#dark-theme)
|
|
23
24
|
- [Quality & test coverage](#quality--test-coverage)
|
|
24
25
|
- [Local development](#local-development)
|
|
25
26
|
- [Changelog](CHANGELOG.md)
|
|
@@ -29,7 +30,7 @@ React Native chat UI + chat core for iOS and Android, powered by the Ethora plat
|
|
|
29
30
|
- Room list and room chat UI (Native / iOS + Android)
|
|
30
31
|
- Message history (MAM), replies, edits, deletes
|
|
31
32
|
- Typing indicators
|
|
32
|
-
- Push notifications (
|
|
33
|
+
- Push notifications — bring your own token (Firebase or Expo), the SDK registers it and handles taps
|
|
33
34
|
- Pluggable auth (default / JWT / injected user / custom)
|
|
34
35
|
- Custom message bubble, input, scroll, and day-separator overrides
|
|
35
36
|
- Cross-session unread tracking with built-in badges — see [docs/unread-tracking.md](docs/unread-tracking.md)
|
|
@@ -362,6 +363,31 @@ Individual labels accept a `{ fontSize?, fontWeight? }` override. Each only sets
|
|
|
362
363
|
|
|
363
364
|
See the [`TypographyConfig`](src/types/types.ts) JSDoc for the full list of overridable elements and their defaults.
|
|
364
365
|
|
|
366
|
+
## Dark theme
|
|
367
|
+
|
|
368
|
+
Switch the whole component (room list, chat, composer, modals, sheets) to a dark palette with one flag. Colours come from the built-in `DARK_THEME`; any entry can be overridden through `darkColors`, and anything you omit keeps its dark default.
|
|
369
|
+
|
|
370
|
+
```tsx
|
|
371
|
+
<Chat
|
|
372
|
+
config={{
|
|
373
|
+
dark: true,
|
|
374
|
+
// Optional — omit the object entirely to use the default dark palette.
|
|
375
|
+
darkColors: {
|
|
376
|
+
primary: '#7C3AED',
|
|
377
|
+
surface: '#15171B',
|
|
378
|
+
chatBackground: '#0E1013',
|
|
379
|
+
},
|
|
380
|
+
}}
|
|
381
|
+
/>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
Notes:
|
|
385
|
+
|
|
386
|
+
- In dark mode the light-only knobs (`colors`, `messageColor`, `backgroundChat.color`) are **not** applied — they were tuned for white surfaces. Pass brand colours via `darkColors` instead. `colors.avatar` still applies in both modes.
|
|
387
|
+
- `darkColors.primary` also drives `icon`, `senderName` and `dateLabel` unless you set those explicitly, mirroring how `colors.primary` behaves in light mode.
|
|
388
|
+
- The full key list (`surface`, `surfaceSecondary`, `text`, `textSecondary`, `border`, `messageBackground`, `messageBackgroundUser`, …) is the `ChatThemeColors` type, exported from the package together with `LIGHT_THEME`, `DARK_THEME`, `resolveTheme(config)` and the `useTheme()` hook, so a host can paint its own chrome (status bar, tab bar) with the same palette.
|
|
389
|
+
- The status bar is host-owned: use `resolveTheme(config).statusBarStyle` (`'light-content'` in dark mode) for `<StatusBar barStyle>`.
|
|
390
|
+
|
|
365
391
|
## Quality & test coverage
|
|
366
392
|
|
|
367
393
|
### Jest (unit + integration)
|
|
@@ -15,7 +15,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
15
15
|
const EmptyChatIllustration = ({
|
|
16
16
|
width = 240,
|
|
17
17
|
height = 153,
|
|
18
|
-
color = '#0052CD'
|
|
18
|
+
color = '#0052CD',
|
|
19
|
+
panelColor
|
|
19
20
|
}) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeSvg.default, {
|
|
20
21
|
viewBox: "0 0 2481 1578",
|
|
21
22
|
width: width,
|
|
@@ -25,19 +26,19 @@ const EmptyChatIllustration = ({
|
|
|
25
26
|
fill: color,
|
|
26
27
|
d: "M1711 206h493c.16 51.98.16 51.98 1 315 4.67-23.34 4.67-23.34 5.62-31.53.12-.99.24-1.98.37-2.99 1.28-11.1 2.05-22.23 2.77-33.37.33-4.96.67-9.92 1-14.87l.51-7.5c.7-10.42 1.45-20.83 2.23-31.25.18-2.48.37-4.97.55-7.46.11-1.5.22-3 .34-4.5.09-1.27.19-2.54.28-3.85.35-3.91.82-7.79 1.33-11.68 3.41 1.93 6.74 3.83 10 6l.48-3.92c3.67-28.04 3.67-28.04 13.52-36.08 5.73-3.29 10.94-3.89 17.3-2.5 5.81 1.71 10.53 4.13 13.92 9.39 7.28 13.63 2.91 29.13-1.22 43.11.46-.32.46-.32 2.81-1.94C2280 384 2280 384 2283 383c-1.08 17.11-2.51 34.18-4.06 51.25-.09 1.04-.19 2.09-.29 3.17-.89 9.86-1.78 19.72-2.69 29.57l-1.77 19.51c-.09 1.06-.19 2.13-.29 3.22-1.04 11.6-2 23.2-2.75 34.83-.06 1.01-.13 2.02-.2 3.07-.3 4.74-.59 9.49-.85 14.25-2.46 41.87-2.46 41.87-16.29 54.82-.82.8-1.65 1.6-2.5 2.43a269 269 0 0 1-11.15 10.21c-4 3.48-7.77 7.15-11.5 10.92-.66.65-1.31 1.31-1.99 1.98-2.06 2.07-4.11 4.14-6.17 6.21-1.41 1.41-2.82 2.82-4.23 4.24-3.42 3.44-6.85 6.88-10.27 10.32 7.2 4.47 14.39 8.91 21.81 13l2.3 1.27c6.86 3.76 13.8 7.31 20.83 10.72 2.12 1.04 4.23 2.1 6.33 3.15 12.6 6.24 25.62 11.08 38.84 15.82 3.65 1.31 7.27 2.67 10.89 4.04-3.12 2.08-5.29 2.71-8.91 3.59l-3.68.9c-1.32.32-2.65.63-3.98.95l-4.07.99c-3.58.88-7.15 1.74-10.73 2.6-5.72 1.38-11.45 2.78-17.17 4.17-2.01.49-4.01.97-6.01 1.45-1.21.29-2.42.59-3.67.89-1.07.26-2.14.52-3.24.78-2.54.68-2.54.68-4.54 1.68 16.02 24.43 32.15 48.79 48.54 72.97 5.61 8.27 11.19 16.54 16.46 25.03-2.54 2.58-4.95 4.84-8 6.81-.66.44-1.32.88-2 1.33-2.53 1.09-3.45.82-6-.14-1.39-1.5-1.39-1.5-2.66-3.47q-.72-1.11-1.47-2.25c-.53-.82-1.05-1.65-1.58-2.49-.56-.86-1.12-1.72-1.7-2.6-1.22-1.87-2.43-3.74-3.63-5.62-3.23-5.01-6.49-10-9.74-14.99-.67-1.03-1.34-2.06-2.04-3.13-7.25-11.13-14.67-22.14-22.12-33.14l-3.69-5.46c-1.67-2.47-3.34-4.93-5.01-7.4-3.48-5.13-6.93-10.29-10.36-15.45-7.04 8.56-13.56 17.48-20.11 26.42-1.91 2.61-3.84 5.22-5.77 7.82-.62.85-1.25 1.7-1.9 2.58l-3.6 4.86c-2.39 3.24-4.74 6.46-6.89 9.86L2186 773h-2l2-32h-475Z"
|
|
27
28
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
28
|
-
fill:
|
|
29
|
+
fill: panelColor ?? '#f3f3f3',
|
|
29
30
|
d: "M1711 836h493v535h-493Z"
|
|
30
31
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
31
|
-
fill:
|
|
32
|
+
fill: panelColor ?? '#f1f1f1',
|
|
32
33
|
d: "M1009 836h493v535h-493Z"
|
|
33
34
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
34
|
-
fill:
|
|
35
|
+
fill: panelColor ?? '#f0f0f0',
|
|
35
36
|
d: "M307 836h493v535H307Z"
|
|
36
37
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
37
|
-
fill:
|
|
38
|
+
fill: panelColor ?? '#f1f1f1',
|
|
38
39
|
d: "M1009 206h493v535h-493Z"
|
|
39
40
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
40
|
-
fill:
|
|
41
|
+
fill: panelColor ?? '#f3f3f3',
|
|
41
42
|
d: "M307 206h493v535H307Z"
|
|
42
43
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeSvg.Path, {
|
|
43
44
|
fill: "#e3ebf6",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSvg","_interopRequireWildcard","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","EmptyChatIllustration","width","height","color","jsxs","viewBox","fill","children","jsx","Path","d","exports","_default"],"sourceRoot":"../../../src","sources":["assets/EmptyChatIllustration.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,uBAAA,CAAAF,OAAA;AAA6C,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAE,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAN,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNativeSvg","_interopRequireWildcard","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","EmptyChatIllustration","width","height","color","panelColor","jsxs","viewBox","fill","children","jsx","Path","d","exports","_default"],"sourceRoot":"../../../src","sources":["assets/EmptyChatIllustration.tsx"],"mappings":"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","ignoreList":[]}
|