Repository: cometchat/cometchat-uikit-react-native Branch: v5 Commit: 33dac7ee0a1f Files: 1301 Total size: 5.4 MB Directory structure: gitextract_hs1fkjg0/ ├── .gitignore ├── README.md ├── examples/ │ ├── SampleApp/ │ │ ├── .bundle/ │ │ │ └── config │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .prettierrc.js │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── .watchmanconfig │ │ ├── App.tsx │ │ ├── AppErrorBoundary.tsx │ │ ├── Gemfile │ │ ├── README.md │ │ ├── android/ │ │ │ ├── app/ │ │ │ │ ├── build.gradle │ │ │ │ ├── debug.keystore │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── sampleapp/ │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ └── MainApplication.kt │ │ │ │ └── res/ │ │ │ │ ├── drawable/ │ │ │ │ │ └── rn_edit_text_material.xml │ │ │ │ └── values/ │ │ │ │ ├── colors.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradle.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ └── settings.gradle │ │ ├── app.json │ │ ├── babel.config.js │ │ ├── gesture-handler.js │ │ ├── gesture-handler.native.js │ │ ├── index.js │ │ ├── ios/ │ │ │ ├── .xcode.env │ │ │ ├── Podfile │ │ │ ├── SampleApp/ │ │ │ │ ├── AppDelegate.swift │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Info.plist │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── PrivacyInfo.xcprivacy │ │ │ ├── SampleApp.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ └── SampleApp.xcscheme │ │ │ └── SampleApp.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── WorkspaceSettings.xcsettings │ │ ├── jest.config.js │ │ ├── metro.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── assets/ │ │ │ │ └── icons/ │ │ │ │ ├── AccountCircle.tsx │ │ │ │ ├── AddComment.tsx │ │ │ │ ├── AiIcon.tsx │ │ │ │ ├── ArrowBack.tsx │ │ │ │ ├── Block.tsx │ │ │ │ ├── Builder.tsx │ │ │ │ ├── Call.tsx │ │ │ │ ├── CallFill.tsx │ │ │ │ ├── Chat.tsx │ │ │ │ ├── Chatfill.tsx │ │ │ │ ├── CheckFill.tsx │ │ │ │ ├── Close.tsx │ │ │ │ ├── Delete.tsx │ │ │ │ ├── Flash.tsx │ │ │ │ ├── Group.tsx │ │ │ │ ├── GroupAdd.tsx │ │ │ │ ├── GroupFill.tsx │ │ │ │ ├── Info.tsx │ │ │ │ ├── InfoIcon.tsx │ │ │ │ ├── Logout.tsx │ │ │ │ ├── Person.tsx │ │ │ │ ├── PersonAdd.tsx │ │ │ │ ├── PersonFill.tsx │ │ │ │ ├── PersonOff.tsx │ │ │ │ ├── Reset.tsx │ │ │ │ ├── UserEmptyIcon.tsx │ │ │ │ └── VideoCam.tsx │ │ │ ├── components/ │ │ │ │ ├── AIAgent/ │ │ │ │ │ └── AIAgents.tsx │ │ │ │ ├── calls/ │ │ │ │ │ ├── CallDetailHelper.tsx │ │ │ │ │ ├── CallDetails.tsx │ │ │ │ │ ├── CallHistory.tsx │ │ │ │ │ ├── CallLogDetailHeader.tsx │ │ │ │ │ ├── CallParticipants.tsx │ │ │ │ │ ├── CallRecordings.tsx │ │ │ │ │ ├── Calls.tsx │ │ │ │ │ └── icons/ │ │ │ │ │ ├── call-end-fill.tsx │ │ │ │ │ ├── call-end.tsx │ │ │ │ │ ├── call-fill.tsx │ │ │ │ │ ├── call-log-fill.tsx │ │ │ │ │ ├── call-log.tsx │ │ │ │ │ ├── call-made-fill.tsx │ │ │ │ │ ├── call-made.tsx │ │ │ │ │ ├── call-missed-fill.tsx │ │ │ │ │ ├── call-missed-outgoing-fill.tsx │ │ │ │ │ ├── call-missed-outgoing.tsx │ │ │ │ │ ├── call-missed.tsx │ │ │ │ │ ├── call-received-fill.tsx │ │ │ │ │ ├── call-received.tsx │ │ │ │ │ ├── call.tsx │ │ │ │ │ ├── cancel-fill.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── play-arrow.tsx │ │ │ │ ├── conversations/ │ │ │ │ │ ├── helper/ │ │ │ │ │ │ └── GroupListeners.ts │ │ │ │ │ └── screens/ │ │ │ │ │ ├── AddMember.tsx │ │ │ │ │ ├── AddMemberStyles.tsx │ │ │ │ │ ├── BannedMember.tsx │ │ │ │ │ ├── BannedMemberStyles.tsx │ │ │ │ │ ├── Conversations.tsx │ │ │ │ │ ├── CreateConversation.tsx │ │ │ │ │ ├── GroupInfo.tsx │ │ │ │ │ ├── GroupInfoStyles.tsx │ │ │ │ │ ├── Messages.tsx │ │ │ │ │ ├── OngoingCallScreen.tsx │ │ │ │ │ ├── SearchMessages.tsx │ │ │ │ │ ├── ThreadView.tsx │ │ │ │ │ ├── TransferOwnership.tsx │ │ │ │ │ ├── TransferOwnershipStyles.tsx │ │ │ │ │ ├── UserInfo.tsx │ │ │ │ │ ├── UserInfoStyles.tsx │ │ │ │ │ ├── ViewMembers.tsx │ │ │ │ │ └── qr_screen.tsx │ │ │ │ ├── groups/ │ │ │ │ │ ├── GroupHelper.tsx │ │ │ │ │ ├── Groups.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── login/ │ │ │ │ │ ├── AppCredentials.tsx │ │ │ │ │ ├── SampleUser.tsx │ │ │ │ │ └── Skeleton.tsx │ │ │ │ └── users/ │ │ │ │ └── Users.tsx │ │ │ ├── config/ │ │ │ │ ├── config.json │ │ │ │ └── store.ts │ │ │ ├── declarations.d.ts │ │ │ ├── hooks/ │ │ │ │ ├── useGroupMemberStatus.ts │ │ │ │ └── useIsKeyboardVisible.ts │ │ │ ├── navigation/ │ │ │ │ ├── AuthContext.tsx │ │ │ │ ├── BottomTabNavigator.tsx │ │ │ │ ├── NavigationService.ts │ │ │ │ ├── RootStackNavigator.tsx │ │ │ │ └── types.ts │ │ │ └── utils/ │ │ │ ├── ActiveChatContext.tsx │ │ │ ├── AppConstants.tsx │ │ │ ├── CommonUtils.ts │ │ │ ├── TooltipMenu.tsx │ │ │ ├── helper.ts │ │ │ └── themeTypography.ts │ │ └── tsconfig.json │ ├── SampleAppAI/ │ │ ├── .bundle/ │ │ │ └── config │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .prettierrc.js │ │ ├── .watchmanconfig │ │ ├── App.tsx │ │ ├── AppErrorBoundary.tsx │ │ ├── Gemfile │ │ ├── README.md │ │ ├── android/ │ │ │ ├── app/ │ │ │ │ ├── build.gradle │ │ │ │ ├── debug.keystore │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── cometchat/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── sampleapp/ │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ └── MainApplication.kt │ │ │ │ └── res/ │ │ │ │ ├── drawable/ │ │ │ │ │ └── rn_edit_text_material.xml │ │ │ │ └── values/ │ │ │ │ ├── colors.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradle.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ └── settings.gradle │ │ ├── app.json │ │ ├── babel.config.js │ │ ├── gesture-handler.js │ │ ├── gesture-handler.native.js │ │ ├── index.js │ │ ├── ios/ │ │ │ ├── .xcode.env │ │ │ ├── Podfile │ │ │ ├── SampleApp/ │ │ │ │ ├── AppDelegate.swift │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Info.plist │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── PrivacyInfo.xcprivacy │ │ │ ├── SampleApp.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ └── SampleApp.xcscheme │ │ │ └── SampleApp.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── WorkspaceSettings.xcsettings │ │ ├── jest.config.js │ │ ├── metro.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── assets/ │ │ │ │ └── icons/ │ │ │ │ ├── AccountCircle.tsx │ │ │ │ ├── AddComment.tsx │ │ │ │ ├── ArrowBack.tsx │ │ │ │ ├── Block.tsx │ │ │ │ ├── Call.tsx │ │ │ │ ├── CallFill.tsx │ │ │ │ ├── Chat.tsx │ │ │ │ ├── Chatfill.tsx │ │ │ │ ├── CheckFill.tsx │ │ │ │ ├── Close.tsx │ │ │ │ ├── Delete.tsx │ │ │ │ ├── Group.tsx │ │ │ │ ├── GroupAdd.tsx │ │ │ │ ├── GroupFill.tsx │ │ │ │ ├── Info.tsx │ │ │ │ ├── InfoIcon.tsx │ │ │ │ ├── Logout.tsx │ │ │ │ ├── Person.tsx │ │ │ │ ├── PersonAdd.tsx │ │ │ │ ├── PersonFill.tsx │ │ │ │ ├── PersonOff.tsx │ │ │ │ ├── UserEmptyIcon.tsx │ │ │ │ └── VideoCam.tsx │ │ │ ├── components/ │ │ │ │ ├── AIAgents.tsx │ │ │ │ ├── Messages.tsx │ │ │ │ └── login/ │ │ │ │ ├── AppCredentials.tsx │ │ │ │ ├── SampleUser.tsx │ │ │ │ └── Skeleton.tsx │ │ │ ├── declarations.d.ts │ │ │ ├── navigation/ │ │ │ │ ├── AuthContext.tsx │ │ │ │ ├── BottomTabNavigator.tsx │ │ │ │ ├── NavigationService.ts │ │ │ │ ├── RootStackNavigator.tsx │ │ │ │ └── types.ts │ │ │ └── utils/ │ │ │ ├── ActiveChatContext.tsx │ │ │ ├── AppConstants.tsx │ │ │ ├── CommonUtils.ts │ │ │ ├── TooltipMenu.tsx │ │ │ └── helper.ts │ │ └── tsconfig.json │ ├── SampleAppExpo/ │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── App.tsx │ │ ├── README.md │ │ ├── app.json │ │ ├── gesture-handler.js │ │ ├── gesture-handler.native.js │ │ ├── index.js │ │ ├── metro.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── assets/ │ │ │ │ └── icons/ │ │ │ │ ├── AccountCircle.tsx │ │ │ │ ├── AddComment.tsx │ │ │ │ ├── AiIcon.tsx │ │ │ │ ├── ArrowBack.tsx │ │ │ │ ├── Block.tsx │ │ │ │ ├── Builder.tsx │ │ │ │ ├── Call.tsx │ │ │ │ ├── CallFill.tsx │ │ │ │ ├── Chat.tsx │ │ │ │ ├── Chatfill.tsx │ │ │ │ ├── CheckFill.tsx │ │ │ │ ├── Close.tsx │ │ │ │ ├── Delete.tsx │ │ │ │ ├── Flash.tsx │ │ │ │ ├── Group.tsx │ │ │ │ ├── GroupAdd.tsx │ │ │ │ ├── GroupFill.tsx │ │ │ │ ├── Info.tsx │ │ │ │ ├── InfoIcon.tsx │ │ │ │ ├── Logout.tsx │ │ │ │ ├── Person.tsx │ │ │ │ ├── PersonAdd.tsx │ │ │ │ ├── PersonFill.tsx │ │ │ │ ├── PersonOff.tsx │ │ │ │ ├── Reset.tsx │ │ │ │ ├── UserEmptyIcon.tsx │ │ │ │ └── VideoCam.tsx │ │ │ ├── components/ │ │ │ │ ├── AIAgent/ │ │ │ │ │ └── AIAgents.tsx │ │ │ │ ├── calls/ │ │ │ │ │ ├── CallDetailHelper.tsx │ │ │ │ │ ├── CallDetails.tsx │ │ │ │ │ ├── CallHistory.tsx │ │ │ │ │ ├── CallLogDetailHeader.tsx │ │ │ │ │ ├── CallParticipants.tsx │ │ │ │ │ ├── CallRecordings.tsx │ │ │ │ │ ├── Calls.tsx │ │ │ │ │ └── icons/ │ │ │ │ │ ├── call-end-fill.tsx │ │ │ │ │ ├── call-end.tsx │ │ │ │ │ ├── call-fill.tsx │ │ │ │ │ ├── call-log-fill.tsx │ │ │ │ │ ├── call-log.tsx │ │ │ │ │ ├── call-made-fill.tsx │ │ │ │ │ ├── call-made.tsx │ │ │ │ │ ├── call-missed-fill.tsx │ │ │ │ │ ├── call-missed-outgoing-fill.tsx │ │ │ │ │ ├── call-missed-outgoing.tsx │ │ │ │ │ ├── call-missed.tsx │ │ │ │ │ ├── call-received-fill.tsx │ │ │ │ │ ├── call-received.tsx │ │ │ │ │ ├── call.tsx │ │ │ │ │ ├── cancel-fill.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── play-arrow.tsx │ │ │ │ ├── conversations/ │ │ │ │ │ ├── helper/ │ │ │ │ │ │ └── GroupListeners.ts │ │ │ │ │ └── screens/ │ │ │ │ │ ├── AddMember.tsx │ │ │ │ │ ├── AddMemberStyles.tsx │ │ │ │ │ ├── BannedMember.tsx │ │ │ │ │ ├── BannedMemberStyles.tsx │ │ │ │ │ ├── Conversations.tsx │ │ │ │ │ ├── CreateConversation.tsx │ │ │ │ │ ├── GroupInfo.tsx │ │ │ │ │ ├── GroupInfoStyles.tsx │ │ │ │ │ ├── Messages.tsx │ │ │ │ │ ├── OngoingCallScreen.tsx │ │ │ │ │ ├── SearchMessages.tsx │ │ │ │ │ ├── ThreadView.tsx │ │ │ │ │ ├── TransferOwnership.tsx │ │ │ │ │ ├── TransferOwnershipStyles.tsx │ │ │ │ │ ├── UserInfo.tsx │ │ │ │ │ ├── UserInfoStyles.tsx │ │ │ │ │ ├── ViewMembers.tsx │ │ │ │ │ └── qr_screen.tsx │ │ │ │ ├── groups/ │ │ │ │ │ ├── GroupHelper.tsx │ │ │ │ │ ├── Groups.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── login/ │ │ │ │ │ ├── AppCredentials.tsx │ │ │ │ │ ├── SampleUser.tsx │ │ │ │ │ └── Skeleton.tsx │ │ │ │ └── users/ │ │ │ │ └── Users.tsx │ │ │ ├── config/ │ │ │ │ ├── config.json │ │ │ │ └── store.ts │ │ │ ├── declarations.d.ts │ │ │ ├── hooks/ │ │ │ │ ├── useGroupMemberStatus.ts │ │ │ │ └── useIsKeyboardVisible.ts │ │ │ ├── navigation/ │ │ │ │ ├── AuthContext.tsx │ │ │ │ ├── BottomTabNavigator.tsx │ │ │ │ ├── NavigationService.ts │ │ │ │ ├── RootStackNavigator.tsx │ │ │ │ └── types.ts │ │ │ └── utils/ │ │ │ ├── ActiveChatContext.tsx │ │ │ ├── AppConstants.tsx │ │ │ ├── CommonUtils.ts │ │ │ ├── TooltipMenu.tsx │ │ │ ├── helper.ts │ │ │ └── themeTypography.ts │ │ └── tsconfig.json │ └── SampleAppWithPushNotifications/ │ ├── .bundle/ │ │ └── config │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierrc.js │ ├── .vscode/ │ │ └── settings.json │ ├── .watchmanconfig │ ├── App.tsx │ ├── AppErrorBoundary.tsx │ ├── Gemfile │ ├── README.md │ ├── __tests__/ │ │ └── App.test.tsx │ ├── android/ │ │ ├── app/ │ │ │ ├── build.gradle │ │ │ ├── cometchat_team_messanger.jks │ │ │ ├── debug.keystore │ │ │ ├── google-services.json │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── sampleappwithpushnotifications/ │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainApplication.kt │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── rn_edit_text_material.xml │ │ │ └── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── settings.gradle │ ├── app.json │ ├── babel.config.js │ ├── cometchat_team_messanger.jks │ ├── gesture-handler.js │ ├── gesture-handler.native.js │ ├── google-services.json │ ├── index.js │ ├── ios/ │ │ ├── .xcode.env │ │ ├── GoogleService-Info.plist │ │ ├── Podfile │ │ ├── SampleAppWithPushNotifications/ │ │ │ ├── AppDelegate.swift │ │ │ ├── Images.xcassets/ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ ├── PrivacyInfo.xcprivacy │ │ │ ├── SampleAppWithPushNotifications-Bridging-Header.h │ │ │ ├── SampleAppWithPushNotifications.entitlements │ │ │ └── SampleAppWithPushNotificationsRelease.entitlements │ │ ├── SampleAppWithPushNotifications-Bridging-Header.h │ │ ├── SampleAppWithPushNotifications.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── SampleAppWithPushNotifications.xcscheme │ │ └── SampleAppWithPushNotifications.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── WorkspaceSettings.xcsettings │ ├── jest.config.js │ ├── metro.config.js │ ├── package.json │ ├── src/ │ │ ├── assets/ │ │ │ └── icons/ │ │ │ ├── AccountCircle.tsx │ │ │ ├── AddComment.tsx │ │ │ ├── AiIcon.tsx │ │ │ ├── ArrowBack.tsx │ │ │ ├── Block.tsx │ │ │ ├── Builder.tsx │ │ │ ├── Call.tsx │ │ │ ├── CallFill.tsx │ │ │ ├── Chat.tsx │ │ │ ├── Chatfill.tsx │ │ │ ├── CheckFill.tsx │ │ │ ├── Close.tsx │ │ │ ├── Delete.tsx │ │ │ ├── Flash.tsx │ │ │ ├── Group.tsx │ │ │ ├── GroupAdd.tsx │ │ │ ├── GroupFill.tsx │ │ │ ├── Info.tsx │ │ │ ├── InfoIcon.tsx │ │ │ ├── Logout.tsx │ │ │ ├── Person.tsx │ │ │ ├── PersonAdd.tsx │ │ │ ├── PersonFill.tsx │ │ │ ├── PersonOff.tsx │ │ │ ├── Reset.tsx │ │ │ ├── UserEmptyIcon.tsx │ │ │ └── VideoCam.tsx │ │ ├── components/ │ │ │ ├── AIAgent/ │ │ │ │ └── AIAgents.tsx │ │ │ ├── calls/ │ │ │ │ ├── CallDetailHelper.tsx │ │ │ │ ├── CallDetails.tsx │ │ │ │ ├── CallHistory.tsx │ │ │ │ ├── CallLogDetailHeader.tsx │ │ │ │ ├── CallParticipants.tsx │ │ │ │ ├── CallRecordings.tsx │ │ │ │ ├── Calls.tsx │ │ │ │ └── icons/ │ │ │ │ ├── call-end-fill.tsx │ │ │ │ ├── call-end.tsx │ │ │ │ ├── call-fill.tsx │ │ │ │ ├── call-log-fill.tsx │ │ │ │ ├── call-log.tsx │ │ │ │ ├── call-made-fill.tsx │ │ │ │ ├── call-made.tsx │ │ │ │ ├── call-missed-fill.tsx │ │ │ │ ├── call-missed-outgoing-fill.tsx │ │ │ │ ├── call-missed-outgoing.tsx │ │ │ │ ├── call-missed.tsx │ │ │ │ ├── call-received-fill.tsx │ │ │ │ ├── call-received.tsx │ │ │ │ ├── call.tsx │ │ │ │ ├── cancel-fill.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── play-arrow.tsx │ │ │ ├── conversations/ │ │ │ │ ├── helper/ │ │ │ │ │ └── GroupListeners.ts │ │ │ │ └── screens/ │ │ │ │ ├── AddMember.tsx │ │ │ │ ├── AddMemberStyles.tsx │ │ │ │ ├── BannedMember.tsx │ │ │ │ ├── BannedMemberStyles.tsx │ │ │ │ ├── Conversations.tsx │ │ │ │ ├── CreateConversation.tsx │ │ │ │ ├── GroupInfo.tsx │ │ │ │ ├── GroupInfoStyles.tsx │ │ │ │ ├── Messages.tsx │ │ │ │ ├── OngoingCallScreen.tsx │ │ │ │ ├── SearchMessages.tsx │ │ │ │ ├── ThreadView.tsx │ │ │ │ ├── TransferOwnership.tsx │ │ │ │ ├── TransferOwnershipStyles.tsx │ │ │ │ ├── UserInfo.tsx │ │ │ │ ├── UserInfoStyles.tsx │ │ │ │ ├── ViewMembers.tsx │ │ │ │ └── qr_screen.tsx │ │ │ ├── groups/ │ │ │ │ ├── GroupHelper.tsx │ │ │ │ ├── Groups.tsx │ │ │ │ └── styles.ts │ │ │ ├── login/ │ │ │ │ ├── AppCredentials.tsx │ │ │ │ ├── SampleUser.tsx │ │ │ │ └── Skeleton.tsx │ │ │ └── users/ │ │ │ └── Users.tsx │ │ ├── config/ │ │ │ ├── config.json │ │ │ └── store.ts │ │ ├── declarations.d.ts │ │ ├── hooks/ │ │ │ ├── useGroupMemberStatus.ts │ │ │ └── useIsKeyboardVisible.ts │ │ ├── navigation/ │ │ │ ├── AuthContext.tsx │ │ │ ├── BottomTabNavigator.tsx │ │ │ ├── NavigationService.ts │ │ │ ├── RootStackNavigator.tsx │ │ │ └── types.ts │ │ └── utils/ │ │ ├── ActiveChatContext.tsx │ │ ├── AppConstants.tsx │ │ ├── CommonUtils.ts │ │ ├── PendingCallManager.ts │ │ ├── PushNotification.tsx │ │ ├── TooltipMenu.tsx │ │ ├── VoipNotificationHandler.ts │ │ ├── helper.ts │ │ └── themeTypography.ts │ └── tsconfig.json └── packages/ └── ChatUiKit/ ├── .gitignore ├── .prettierrc.json ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── android/ │ ├── .settings/ │ │ └── org.eclipse.buildship.core.prefs │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── java/ │ │ └── com/ │ │ ├── reactnativecometchatuikit/ │ │ │ ├── CometChatImageViewer.java │ │ │ ├── CometChatSoundModule.java │ │ │ ├── CometChatVideoPlayer.java │ │ │ ├── CometChatWebView.java │ │ │ ├── CometchatUiKitModule.java │ │ │ ├── CometchatUiKitPackage.java │ │ │ ├── FileManager.java │ │ │ ├── ImageManager.java │ │ │ ├── ProximityModule.java │ │ │ ├── ReactVideoView.java │ │ │ ├── ReactVideoViewManager.java │ │ │ ├── RichTextEditorPackage.kt │ │ │ ├── RichTextEditorView.kt │ │ │ ├── RichTextEditorViewManager.kt │ │ │ ├── SoundPlayer.java │ │ │ ├── TimeZoneCodeManager.java │ │ │ └── WebViewManager.java │ │ ├── scalablevideoview/ │ │ │ ├── BuildConfig.java │ │ │ ├── PivotPoint.java │ │ │ ├── ScalableType.java │ │ │ ├── ScalableVideoView.java │ │ │ ├── ScaleManager.java │ │ │ └── Size.java │ │ └── zipfile/ │ │ ├── APEZProvider.java │ │ ├── APKExpansionSupport.java │ │ └── ZipResourceFile.java │ └── res/ │ ├── values/ │ │ └── attrs.xml │ └── xml/ │ └── filepaths.xml ├── babel.config.js ├── ios/ │ ├── CometChatSoundModule.h │ ├── CometChatSoundModule.m │ ├── CometchatUiKit.h │ ├── CometchatUiKit.mm │ ├── CometchatUiKit.xcodeproj/ │ │ ├── project.pbxproj │ │ └── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ ├── CommonUtil.h │ ├── CommonUtil.m │ ├── FileManager.h │ ├── FileManager.m │ ├── Proximity.h │ ├── Proximity.m │ ├── RichTextEditorView.swift │ ├── RichTextEditorViewManager.m │ ├── RichTextEditorViewManager.swift │ ├── SoundPlayer.h │ ├── SoundPlayer.m │ ├── TimeZoneCodeManager.h │ ├── TimeZoneCodeManager.m │ ├── ToolbarIcons.swift │ ├── Video/ │ │ ├── CCRCTVideo.h │ │ ├── CCRCTVideo.m │ │ ├── CCRCTVideoManager.h │ │ ├── CCRCTVideoManager.m │ │ ├── CCRCTVideoPlayerViewController.h │ │ ├── CCRCTVideoPlayerViewController.m │ │ ├── CCRCTVideoPlayerViewControllerDelegate.h │ │ ├── UIView+FindUIViewController.h │ │ └── UIView+FindUIViewController.m │ ├── VideoManager.h │ ├── VideoManager.m │ ├── VideoPickerModule.h │ ├── VideoPickerModule.mm │ ├── WebViewManager.h │ └── WebViewManager.m ├── package.json ├── packager.js ├── react-native-cometchat-ui-kit.podspec ├── src/ │ ├── CometChatAIAssistantChatHistory/ │ │ ├── CometChatAIAssistantChatHistory.tsx │ │ ├── Skeleton.tsx │ │ ├── index.ts │ │ └── style.ts │ ├── CometChatCompactMessageComposer/ │ │ ├── CometChatCompactMessageComposer.tsx │ │ ├── SingleLineTextComposerConfiguration.tsx │ │ ├── heightUtils.ts │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── styles.ts │ ├── CometChatConversations/ │ │ ├── CometChatConversations.tsx │ │ ├── Skeleton.tsx │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── style.ts │ ├── CometChatGroupMembers/ │ │ ├── CometChatGroupMembers.tsx │ │ ├── Skeleton.tsx │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── style.ts │ ├── CometChatGroups/ │ │ ├── CometChatGroups.tsx │ │ ├── GroupsStyle.ts │ │ ├── Skeleton.tsx │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── style.ts │ ├── CometChatMessageComposer/ │ │ ├── CometChatMessageComposer.tsx │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── styles.tsx │ ├── CometChatMessageHeader/ │ │ ├── CometChatMessageHeader.tsx │ │ ├── index.ts │ │ ├── listners.ts │ │ └── styles.ts │ ├── CometChatMessageInformation/ │ │ ├── CometChatMessageInformation.tsx │ │ ├── Skeleton.tsx │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── styles.ts │ ├── CometChatMessageList/ │ │ ├── CometChatMessageList.tsx │ │ ├── Skeleton.tsx │ │ ├── components/ │ │ │ ├── MessageListItem.tsx │ │ │ ├── MessageModals.tsx │ │ │ ├── MessageOptionsSheet.tsx │ │ │ └── ReactionModals.tsx │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── style.ts │ ├── CometChatRichTextEditor/ │ │ ├── RichTextEditorViewNativeComponent.ts │ │ ├── index.tsx │ │ └── types.ts │ ├── CometChatSearch/ │ │ ├── CometChatSearch.tsx │ │ ├── SearchConstants.ts │ │ ├── Skeleton.tsx │ │ ├── index.ts │ │ └── style.ts │ ├── CometChatThreadHeader/ │ │ ├── CometChatThreadHeader.tsx │ │ ├── Header.tsx │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── index.ts │ │ └── style.ts │ ├── CometChatUsers/ │ │ ├── CometChatUsers.tsx │ │ ├── Skeleton.tsx │ │ ├── index.ts │ │ └── style.ts │ ├── calls/ │ │ ├── CallEvents.ts │ │ ├── CallUtils.ts │ │ ├── CallingConfiguration.ts │ │ ├── CallingExtension.tsx │ │ ├── CallingExtensionDecorator.tsx │ │ ├── CallingPackage.ts │ │ ├── CometChatCallBubble/ │ │ │ ├── CometChatCallBubble.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── styles.ts │ │ ├── CometChatCallButtons/ │ │ │ ├── CometChatCallButtonConfiguration.ts │ │ │ ├── CometChatCallButtons.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatCallLogs/ │ │ │ ├── CometChatCallLogs.tsx │ │ │ ├── Skeleton.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatIncomingCall/ │ │ │ ├── CometChatIncomingCall.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatOngoingCall/ │ │ │ ├── CometChatOngoingCall.tsx │ │ │ └── index.ts │ │ ├── CometChatOutgoingCall/ │ │ │ ├── CometChatOutgoingCall.tsx │ │ │ ├── OutgoingCallConfiguration.ts │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── styles.ts │ │ ├── index.ts │ │ └── resources/ │ │ └── index.ts │ ├── extensions/ │ │ ├── CollaborativeBubble/ │ │ │ ├── CometChatCollaborativeBubble.tsx │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CollaborativeDocument/ │ │ │ ├── CollaborativeDocumentExtension.tsx │ │ │ ├── CollaborativeDocumentExtensionDecorator.tsx │ │ │ ├── index.ts │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── CollaborativeWhiteboard/ │ │ │ ├── CollaborativeWhiteboardExtension.tsx │ │ │ ├── CollaborativeWhiteboardExtensionDecorator.tsx │ │ │ ├── index.ts │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── ExtensionConstants.tsx │ │ ├── ExtensionModerator.tsx │ │ ├── LinkPreview/ │ │ │ ├── LinkPreviewBubble.tsx │ │ │ ├── LinkPreviewExtension.tsx │ │ │ ├── LinkPreviewExtensionDecorator.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── MessageTranslation/ │ │ │ ├── MessageTranslationBubble.tsx │ │ │ ├── MessageTranslationDecorator.tsx │ │ │ ├── MessageTranslationExtension.tsx │ │ │ ├── index.ts │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── Polls/ │ │ │ ├── Header.tsx │ │ │ ├── Polls.tsx │ │ │ ├── PollsBubble.tsx │ │ │ ├── PollsConfigurations.ts │ │ │ ├── PollsDecorator.tsx │ │ │ ├── PollsExtension.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── Stickers/ │ │ │ ├── CometChatStickerKeyboard/ │ │ │ │ ├── CometChatStickerKeyboard.tsx │ │ │ │ ├── Skeleton.tsx │ │ │ │ ├── StickerKeyboardConfiguration.ts │ │ │ │ ├── hooks.ts │ │ │ │ ├── index.ts │ │ │ │ └── style.ts │ │ │ ├── StickerConfiguration.ts │ │ │ ├── StickersBubble.tsx │ │ │ ├── StickersExtension.ts │ │ │ ├── StickersExtensionDecorator.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── ThumbnailGeneration/ │ │ │ ├── ThumbnailGenerationDecorator.tsx │ │ │ ├── ThumbnailGenerationExtension.tsx │ │ │ ├── index.ts │ │ │ └── resources/ │ │ │ └── index.ts │ │ └── index.ts │ ├── imageresolver.d.ts │ ├── index.ts │ ├── shared/ │ │ ├── CometChatUiKit/ │ │ │ ├── CometChatUIKit.ts │ │ │ ├── CometChatUIKitHelper.ts │ │ │ ├── UIKitSettings.ts │ │ │ └── index.ts │ │ ├── assets/ │ │ │ └── images/ │ │ │ └── index.ts │ │ ├── base/ │ │ │ ├── BaseStyle.ts │ │ │ ├── BorderStyle.ts │ │ │ ├── FontStyle.ts │ │ │ ├── ShadowStyle.ts │ │ │ ├── Types.ts │ │ │ ├── index.ts │ │ │ └── vars.ts │ │ ├── constants/ │ │ │ └── UIKitConstants.ts │ │ ├── events/ │ │ │ ├── CometChatMessageEvents/ │ │ │ │ └── index.ts │ │ │ ├── CometChatUIEventHandler/ │ │ │ │ ├── CometChatUIEventHandler.ts │ │ │ │ └── Listener.ts │ │ │ ├── CometChatUIEvents.ts │ │ │ ├── ListenerInitializer.ts │ │ │ ├── conversations.ts │ │ │ ├── groups.ts │ │ │ ├── index.ts │ │ │ └── messages.ts │ │ ├── formatters/ │ │ │ ├── CometChatMentionsFormatter/ │ │ │ │ ├── CometChatMentionsFormatter.tsx │ │ │ │ ├── MentionTextStyle.ts │ │ │ │ └── index.ts │ │ │ ├── CometChatRichTextFormatter/ │ │ │ │ └── index.tsx │ │ │ ├── CometChatTextFormatter.ts │ │ │ ├── CometChatUrlsFormatter/ │ │ │ │ └── index.tsx │ │ │ └── index.ts │ │ ├── framework/ │ │ │ ├── ChatConfigurator.ts │ │ │ ├── DataSource.ts │ │ │ ├── DataSourceDecorator.tsx │ │ │ ├── ExtensionsDataSource.tsx │ │ │ ├── MessageDataSource.tsx │ │ │ ├── index.ts │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── helper/ │ │ │ ├── LocalizedDateHelper.ts │ │ │ ├── Toast.tsx │ │ │ ├── composerHelpers.ts │ │ │ ├── dateHelper.ts │ │ │ ├── functions.js │ │ │ ├── helperFunctions.ts │ │ │ ├── types/ │ │ │ │ └── index.ts │ │ │ ├── useKeyboard.tsx │ │ │ └── useLocalizedDateHook.tsx │ │ ├── icons/ │ │ │ ├── Icon.tsx │ │ │ ├── components/ │ │ │ │ ├── ListItemCheck.tsx │ │ │ │ ├── StickerBase-icon.tsx │ │ │ │ ├── account-circle-fill.tsx │ │ │ │ ├── account-circle.tsx │ │ │ │ ├── activity.tsx │ │ │ │ ├── add-a-photo-fill.tsx │ │ │ │ ├── add-a-photo.tsx │ │ │ │ ├── add-box-fill.tsx │ │ │ │ ├── add-box.tsx │ │ │ │ ├── add-call-fill.tsx │ │ │ │ ├── add-call.tsx │ │ │ │ ├── add-circle-fill.tsx │ │ │ │ ├── add-circle.tsx │ │ │ │ ├── add-comment-fill.tsx │ │ │ │ ├── add-comment.tsx │ │ │ │ ├── add-fill.tsx │ │ │ │ ├── add-reaction-fill.tsx │ │ │ │ ├── add-reaction.tsx │ │ │ │ ├── add.tsx │ │ │ │ ├── ai-chat-history.tsx │ │ │ │ ├── ai-conversation-summary-fill.tsx │ │ │ │ ├── ai-conversation-summary.tsx │ │ │ │ ├── ai-copy-option.tsx │ │ │ │ ├── ai-fill.tsx │ │ │ │ ├── ai-new-chat.tsx │ │ │ │ ├── ai-send-button.tsx │ │ │ │ ├── ai-suggest-reply-fill.tsx │ │ │ │ ├── ai-suggest-reply.tsx │ │ │ │ ├── ai.tsx │ │ │ │ ├── alternate-email-fill.tsx │ │ │ │ ├── alternate-email.tsx │ │ │ │ ├── animals-&-nature.tsx │ │ │ │ ├── archive-fill.tsx │ │ │ │ ├── archive.tsx │ │ │ │ ├── arrow-back-fill.tsx │ │ │ │ ├── arrow-back.tsx │ │ │ │ ├── arrow-forward-fill.tsx │ │ │ │ ├── arrow-forward.tsx │ │ │ │ ├── attach-file-fill.tsx │ │ │ │ ├── attach-file.tsx │ │ │ │ ├── audio-file-type.tsx │ │ │ │ ├── bar-chart-fill.tsx │ │ │ │ ├── bar-chart.tsx │ │ │ │ ├── base-icon.tsx │ │ │ │ ├── bedtime-fill.tsx │ │ │ │ ├── bedtime.tsx │ │ │ │ ├── block-fill.tsx │ │ │ │ ├── block.tsx │ │ │ │ ├── bookmark-add-fill.tsx │ │ │ │ ├── bookmark-add.tsx │ │ │ │ ├── bookmark-fill.tsx │ │ │ │ ├── bookmark.tsx │ │ │ │ ├── calendar-add-on-fill.tsx │ │ │ │ ├── calendar-add-on.tsx │ │ │ │ ├── calendar-today-fill.tsx │ │ │ │ ├── calendar-today.tsx │ │ │ │ ├── call-end-fill.tsx │ │ │ │ ├── call-end.tsx │ │ │ │ ├── call-fill.tsx │ │ │ │ ├── call-log-fill.tsx │ │ │ │ ├── call-log.tsx │ │ │ │ ├── call-made-fill.tsx │ │ │ │ ├── call-made.tsx │ │ │ │ ├── call-missed-fill.tsx │ │ │ │ ├── call-missed-outgoing-fill.tsx │ │ │ │ ├── call-missed-outgoing.tsx │ │ │ │ ├── call-missed.tsx │ │ │ │ ├── call-received-fill.tsx │ │ │ │ ├── call-received.tsx │ │ │ │ ├── call.tsx │ │ │ │ ├── cancel-fill.tsx │ │ │ │ ├── cancel.tsx │ │ │ │ ├── change-circle-fill.tsx │ │ │ │ ├── change-circle.tsx │ │ │ │ ├── chat-bot-fill.tsx │ │ │ │ ├── chat-bot.tsx │ │ │ │ ├── chat-fill.tsx │ │ │ │ ├── chat.tsx │ │ │ │ ├── check-circle-fill.tsx │ │ │ │ ├── check-circle.tsx │ │ │ │ ├── check-fill.tsx │ │ │ │ ├── check.tsx │ │ │ │ ├── chevron-left-fill.tsx │ │ │ │ ├── chevron-left.tsx │ │ │ │ ├── chevron-right-fill.tsx │ │ │ │ ├── chevron-right.tsx │ │ │ │ ├── close-fill.tsx │ │ │ │ ├── close.tsx │ │ │ │ ├── code-blocks.tsx │ │ │ │ ├── code.tsx │ │ │ │ ├── collaborative-document-fill.tsx │ │ │ │ ├── collaborative-document-icon.tsx │ │ │ │ ├── collaborative-document.tsx │ │ │ │ ├── collaborative-whiteboard-fill.tsx │ │ │ │ ├── collaborative-whiteboard-icon.tsx │ │ │ │ ├── collaborative-whiteboard.tsx │ │ │ │ ├── content-copy-fill.tsx │ │ │ │ ├── content-copy.tsx │ │ │ │ ├── crop-fill.tsx │ │ │ │ ├── crop.tsx │ │ │ │ ├── delete-fill.tsx │ │ │ │ ├── delete.tsx │ │ │ │ ├── description-fill.tsx │ │ │ │ ├── description.tsx │ │ │ │ ├── document-file-type.tsx │ │ │ │ ├── documents.tsx │ │ │ │ ├── done-all-fill.tsx │ │ │ │ ├── done-all.tsx │ │ │ │ ├── download-fill.tsx │ │ │ │ ├── download.tsx │ │ │ │ ├── edit-calendar-fill.tsx │ │ │ │ ├── edit-calendar.tsx │ │ │ │ ├── edit-fill.tsx │ │ │ │ ├── edit-square-fill.tsx │ │ │ │ ├── edit-square.tsx │ │ │ │ ├── edit.tsx │ │ │ │ ├── empty-search.tsx │ │ │ │ ├── empty-state.tsx │ │ │ │ ├── error-fill.tsx │ │ │ │ ├── error-state.tsx │ │ │ │ ├── error.tsx │ │ │ │ ├── event-available-fill.tsx │ │ │ │ ├── event-available.tsx │ │ │ │ ├── event-fill.tsx │ │ │ │ ├── event.tsx │ │ │ │ ├── favorite-fill.tsx │ │ │ │ ├── favorite.tsx │ │ │ │ ├── filter-list-fill.tsx │ │ │ │ ├── filter-list-off-fill.tsx │ │ │ │ ├── filter-list-off.tsx │ │ │ │ ├── filter-list.tsx │ │ │ │ ├── flags.tsx │ │ │ │ ├── flip-camera-ios-fill.tsx │ │ │ │ ├── flip-camera-ios.tsx │ │ │ │ ├── food-&-drink.tsx │ │ │ │ ├── format-bold.tsx │ │ │ │ ├── format-italic.tsx │ │ │ │ ├── format-list-bulleted.tsx │ │ │ │ ├── format-list-numbered.tsx │ │ │ │ ├── format-quote.tsx │ │ │ │ ├── format-strikethrough.tsx │ │ │ │ ├── format-underlined.tsx │ │ │ │ ├── forward-fill.tsx │ │ │ │ ├── forward.tsx │ │ │ │ ├── gif-fill.tsx │ │ │ │ ├── gif.tsx │ │ │ │ ├── graphic-eq-fill.tsx │ │ │ │ ├── graphic-eq.tsx │ │ │ │ ├── group-add.tsx │ │ │ │ ├── group-fill.tsx │ │ │ │ ├── group.tsx │ │ │ │ ├── help-fill.tsx │ │ │ │ ├── help.tsx │ │ │ │ ├── history-fill.tsx │ │ │ │ ├── history.tsx │ │ │ │ ├── image-file-type.tsx │ │ │ │ ├── incoming-audio-fill.tsx │ │ │ │ ├── incoming-audio.tsx │ │ │ │ ├── incoming-video-fill.tsx │ │ │ │ ├── incoming-video.tsx │ │ │ │ ├── info-fill.tsx │ │ │ │ ├── info.tsx │ │ │ │ ├── keep-fill.tsx │ │ │ │ ├── keep-off-fill.tsx │ │ │ │ ├── keep-off.tsx │ │ │ │ ├── keep.tsx │ │ │ │ ├── keyboard-arrow-down-fill.tsx │ │ │ │ ├── keyboard-arrow-down.tsx │ │ │ │ ├── keyboard-arrow-up-fill.tsx │ │ │ │ ├── keyboard-arrow-up.tsx │ │ │ │ ├── keyboard-fill.tsx │ │ │ │ ├── keyboard.tsx │ │ │ │ ├── language-fill.tsx │ │ │ │ ├── language.tsx │ │ │ │ ├── link-fill.tsx │ │ │ │ ├── link.tsx │ │ │ │ ├── loading-fill.tsx │ │ │ │ ├── loading.tsx │ │ │ │ ├── location-on-fill.tsx │ │ │ │ ├── location-on.tsx │ │ │ │ ├── lock-fill.tsx │ │ │ │ ├── lock-open-fill.tsx │ │ │ │ ├── lock-open.tsx │ │ │ │ ├── lock.tsx │ │ │ │ ├── logout-fill.tsx │ │ │ │ ├── logout.tsx │ │ │ │ ├── mail-fill.tsx │ │ │ │ ├── mail.tsx │ │ │ │ ├── message-blocked.tsx │ │ │ │ ├── mic-fill.tsx │ │ │ │ ├── mic-off-fill.tsx │ │ │ │ ├── mic-off.tsx │ │ │ │ ├── mic.tsx │ │ │ │ ├── missed-video-call-fill.tsx │ │ │ │ ├── missed-video-call.tsx │ │ │ │ ├── mood-fill.tsx │ │ │ │ ├── mood.tsx │ │ │ │ ├── more-vert-fill.tsx │ │ │ │ ├── more-vert.tsx │ │ │ │ ├── near-me-fill.tsx │ │ │ │ ├── near-me.tsx │ │ │ │ ├── no-photography-fill.tsx │ │ │ │ ├── no-photography.tsx │ │ │ │ ├── notifications-fill.tsx │ │ │ │ ├── notifications-off-fill.tsx │ │ │ │ ├── notifications-off.tsx │ │ │ │ ├── notifications.tsx │ │ │ │ ├── objects.tsx │ │ │ │ ├── outgoing-audio-fill.tsx │ │ │ │ ├── outgoing-audio.tsx │ │ │ │ ├── outgoing-video-fill.tsx │ │ │ │ ├── outgoing-video.tsx │ │ │ │ ├── pause-fill.tsx │ │ │ │ ├── pause.tsx │ │ │ │ ├── pdf-file-type.tsx │ │ │ │ ├── person-add-fill.tsx │ │ │ │ ├── person-add.tsx │ │ │ │ ├── person-fill.tsx │ │ │ │ ├── person-off.tsx │ │ │ │ ├── person.tsx │ │ │ │ ├── phone-in-talk-fill.tsx │ │ │ │ ├── phone-in-talk.tsx │ │ │ │ ├── phone-incoming-fill.tsx │ │ │ │ ├── phone-incoming.tsx │ │ │ │ ├── phone-missed-fill.tsx │ │ │ │ ├── phone-missed.tsx │ │ │ │ ├── phone-outgoing-fill.tsx │ │ │ │ ├── phone-outgoing.tsx │ │ │ │ ├── photo-camera-fill.tsx │ │ │ │ ├── photo-camera.tsx │ │ │ │ ├── photo-fill.tsx │ │ │ │ ├── photo.tsx │ │ │ │ ├── play-arrow-fill.tsx │ │ │ │ ├── play-arrow.tsx │ │ │ │ ├── play-circle-fill.tsx │ │ │ │ ├── play-circle.tsx │ │ │ │ ├── poll-Icon.tsx │ │ │ │ ├── poll-fill.tsx │ │ │ │ ├── poll.tsx │ │ │ │ ├── presentation-file-type.tsx │ │ │ │ ├── rearrange-fill.tsx │ │ │ │ ├── rearrange.tsx │ │ │ │ ├── refresh-fill.tsx │ │ │ │ ├── refresh.tsx │ │ │ │ ├── reply-all-fill.tsx │ │ │ │ ├── reply-all.tsx │ │ │ │ ├── reply-fill.tsx │ │ │ │ ├── reply.tsx │ │ │ │ ├── retry-fill.tsx │ │ │ │ ├── retry.tsx │ │ │ │ ├── right-arrow.tsx │ │ │ │ ├── schedule-fill.tsx │ │ │ │ ├── schedule.tsx │ │ │ │ ├── screen-share-fill.tsx │ │ │ │ ├── screen-share.tsx │ │ │ │ ├── search-fill.tsx │ │ │ │ ├── search.tsx │ │ │ │ ├── send-fill.tsx │ │ │ │ ├── send.tsx │ │ │ │ ├── settings-fill.tsx │ │ │ │ ├── settings.tsx │ │ │ │ ├── share-fill.tsx │ │ │ │ ├── share.tsx │ │ │ │ ├── shield-fill.tsx │ │ │ │ ├── shield.tsx │ │ │ │ ├── smileys-&-people.tsx │ │ │ │ ├── spreadsheet-file-type.tsx │ │ │ │ ├── star-fill.tsx │ │ │ │ ├── star.tsx │ │ │ │ ├── sticker-fill.tsx │ │ │ │ ├── sticker.tsx │ │ │ │ ├── stop-circle-fill.tsx │ │ │ │ ├── stop-circle.tsx │ │ │ │ ├── stop-fill.tsx │ │ │ │ ├── stop-screen-share-fill.tsx │ │ │ │ ├── stop-screen-share.tsx │ │ │ │ ├── stop.tsx │ │ │ │ ├── subdirectory-arrow-left-fill.tsx │ │ │ │ ├── subdirectory-arrow-left.tsx │ │ │ │ ├── subdirectory-arrow-right-fill.tsx │ │ │ │ ├── subdirectory-arrow-right.tsx │ │ │ │ ├── sunny-fill.tsx │ │ │ │ ├── sunny.tsx │ │ │ │ ├── symbols.tsx │ │ │ │ ├── text-file-type.tsx │ │ │ │ ├── thumb-down-fill.tsx │ │ │ │ ├── thumb-down.tsx │ │ │ │ ├── thumb-up-fill.tsx │ │ │ │ ├── thumb-up.tsx │ │ │ │ ├── translate-fill.tsx │ │ │ │ ├── translate.tsx │ │ │ │ ├── travel-&-places.tsx │ │ │ │ ├── unknown-file-type.tsx │ │ │ │ ├── unread.tsx │ │ │ │ ├── upload-fill.tsx │ │ │ │ ├── upload.tsx │ │ │ │ ├── user-empty-icon.tsx │ │ │ │ ├── video-call-fill.tsx │ │ │ │ ├── video-call.tsx │ │ │ │ ├── video-file-type.tsx │ │ │ │ ├── videocam-fill.tsx │ │ │ │ ├── videocam-off-fill.tsx │ │ │ │ ├── videocam-off.tsx │ │ │ │ ├── videocam.tsx │ │ │ │ ├── visibility-off-fill.tsx │ │ │ │ ├── visibility-off.tsx │ │ │ │ ├── volume-down-fill.tsx │ │ │ │ ├── volume-down.tsx │ │ │ │ ├── volume-mute-fill.tsx │ │ │ │ ├── volume-mute.tsx │ │ │ │ ├── volume-off-fill.tsx │ │ │ │ ├── volume-off.tsx │ │ │ │ ├── volume-up-fill.tsx │ │ │ │ ├── volume-up.tsx │ │ │ │ ├── warning-fill.tsx │ │ │ │ ├── warning.tsx │ │ │ │ ├── wifi-fill.tsx │ │ │ │ ├── wifi.tsx │ │ │ │ ├── zip-file-type.tsx │ │ │ │ ├── zoom-in-map-fill.tsx │ │ │ │ ├── zoom-in-map.tsx │ │ │ │ ├── zoom-out-map-fill.tsx │ │ │ │ └── zoom-out-map.tsx │ │ │ └── icon-mapping.tsx │ │ ├── index.ts │ │ ├── libs/ │ │ │ ├── ImageZoom/ │ │ │ │ ├── ReactNativeZoomableView.tsx │ │ │ │ ├── ReactNativeZoomableViewWithGestures.tsx │ │ │ │ ├── helper.ts │ │ │ │ ├── index.tsx │ │ │ │ └── types/ │ │ │ │ └── index.ts │ │ │ └── VideoPlayer/ │ │ │ ├── DRMType.js │ │ │ ├── FilterType.js │ │ │ ├── TextTrackType.js │ │ │ └── VideoResizeMode.js │ │ ├── modals/ │ │ │ ├── CometChatAIAssistantTools.ts │ │ │ ├── CometChatMessageOption.ts │ │ │ ├── CometChatMessageTemplate.ts │ │ │ ├── StreamMessage.ts │ │ │ └── index.ts │ │ ├── resources/ │ │ │ ├── CometChatLocalizeNew/ │ │ │ │ ├── CometChatI18nProvider.tsx │ │ │ │ ├── CometChatLocalizationHelper.ts │ │ │ │ ├── CometChatLocalizeContext.tsx │ │ │ │ ├── LocalizationManager.ts │ │ │ │ ├── index.ts │ │ │ │ ├── resources/ │ │ │ │ │ ├── de/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── en/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── es/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── fr/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── hi/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── hu/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── it/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ja/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ko/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── lt/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ms/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── nl/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── pt/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── ru/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── sv/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── tr/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ ├── zh/ │ │ │ │ │ │ └── translation.json │ │ │ │ │ └── zh-tw/ │ │ │ │ │ └── translation.json │ │ │ │ ├── type.ts │ │ │ │ └── useCometChatTranslationHook.ts │ │ │ ├── CometChatSoundManager/ │ │ │ │ ├── CometChatSoundManager.js │ │ │ │ ├── index.ts │ │ │ │ ├── resources/ │ │ │ │ │ └── index.js │ │ │ │ └── sound.js │ │ │ └── index.ts │ │ ├── services/ │ │ │ └── stream-message.service.ts │ │ ├── utils/ │ │ │ ├── CometChatMessageHelper/ │ │ │ │ └── index.ts │ │ │ ├── CometChatMessagePreview/ │ │ │ │ ├── CometChatMessagePreview.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── resources/ │ │ │ │ │ └── index.ts │ │ │ │ └── style.ts │ │ │ ├── CommonUtils.ts │ │ │ ├── MarkdownUtils.ts │ │ │ ├── MentionUtils.ts │ │ │ ├── MessageReceiptUtils.ts │ │ │ ├── MessageUtils.tsx │ │ │ ├── NetworkUtils.tsx │ │ │ ├── PermissionUtil.ts │ │ │ ├── conversationUtils.ts │ │ │ ├── icsToJson.js │ │ │ └── index.ts │ │ └── views/ │ │ ├── CometChatAIAssistantMessageBubble/ │ │ │ ├── CometChatAIAssistantMessageBubble.tsx │ │ │ └── index.ts │ │ ├── CometChatAICard/ │ │ │ ├── CometChatAICard.tsx │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── CometChatActionSheet/ │ │ │ ├── ActionItem.ts │ │ │ ├── CometChatActionSheet.tsx │ │ │ ├── hooks.ts │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatAudioBubble/ │ │ │ ├── AnimatedAudioWaves.tsx │ │ │ ├── CometChatAudioBubble.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatAvatar/ │ │ │ ├── CometChatAvatar.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatBadge/ │ │ │ ├── CometChatBadge.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatBottomSheet/ │ │ │ ├── CometChatBottomSheet.tsx │ │ │ └── index.ts │ │ ├── CometChatConfirmDialog/ │ │ │ ├── CometChatConfirmDialog.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatDate/ │ │ │ ├── CometChatDate.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatDateSeperator/ │ │ │ ├── CometChatDateSeparator.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatDeletedBubble/ │ │ │ ├── CometChatDeletedBubble.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatEmojiKeyboard/ │ │ │ ├── CometChatEmojiKeyboard.tsx │ │ │ ├── Emoji.ts │ │ │ ├── EmojiCategory.ts │ │ │ ├── emojis.ts │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatFileBubble/ │ │ │ ├── CometChatFileBubble.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatImageBubble/ │ │ │ ├── CometChatImageBubble.tsx │ │ │ ├── CometChatImageLoader.tsx │ │ │ ├── assets/ │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── CometChatImageViewerModal/ │ │ │ ├── ImageViewerModal.tsx │ │ │ ├── index.tsx │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── CometChatInlineAudioRecorder/ │ │ │ ├── AudioWaveformVisualizer.tsx │ │ │ ├── CometChatInlineAudioRecorder.tsx │ │ │ ├── index.ts │ │ │ ├── style.ts │ │ │ ├── types.ts │ │ │ └── useAudioRecorder.ts │ │ ├── CometChatLinkConfirmPopup/ │ │ │ ├── CometChatLinkConfirmPopup.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatList/ │ │ │ ├── CometChatList.tsx │ │ │ ├── Header.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── styles.ts │ │ ├── CometChatListItem/ │ │ │ ├── CometChatListItem.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatMediaRecorder/ │ │ │ ├── AnimatingMic.tsx │ │ │ ├── CometChatAudioPlayer.tsx │ │ │ ├── CometChatAudioPreview/ │ │ │ │ └── CometChatAudioPreview.tsx │ │ │ ├── CometChatMediaRecorder.tsx │ │ │ ├── Timer.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatMessageBubble/ │ │ │ ├── CometChatMessageBubble.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatMessageInput/ │ │ │ ├── CometChatMessageInput.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatNewMessageIndicator/ │ │ │ ├── CometChatNewMessageIndicator.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatQuickReactions/ │ │ │ ├── CometChatQuickReactions.tsx │ │ │ ├── QuickReactionsStyle.tsx │ │ │ ├── index.ts │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── CometChatReactionList/ │ │ │ ├── CometChatReactionList.tsx │ │ │ ├── ReactionListStyle.tsx │ │ │ ├── Skeleton.tsx │ │ │ ├── index.ts │ │ │ └── resources/ │ │ │ └── index.ts │ │ ├── CometChatReactions/ │ │ │ ├── CometChatReactions.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatReceipt/ │ │ │ ├── CometChatReceipt.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatReportDialog/ │ │ │ ├── CometChatReportDialog.tsx │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatRetryButton/ │ │ │ ├── CometChatRetryButton.tsx │ │ │ └── index.ts │ │ ├── CometChatSendButtonView/ │ │ │ ├── CometChatSendButtonView.tsx │ │ │ └── index.ts │ │ ├── CometChatStatusIndicator/ │ │ │ ├── CometChatStatusIndicator.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatStreamMessageBubble/ │ │ │ ├── CometChatStreamMessageBubble.tsx │ │ │ └── index.ts │ │ ├── CometChatSuggestionList/ │ │ │ ├── CometChatSuggestionList.tsx │ │ │ ├── Skeleton.tsx │ │ │ ├── SuggestionItem.ts │ │ │ ├── index.ts │ │ │ └── style.ts │ │ ├── CometChatTextBubble/ │ │ │ ├── CometChatTextBubble.tsx │ │ │ └── index.ts │ │ ├── CometChatTooltipMenu/ │ │ │ ├── CometChatTooltipMenu.tsx │ │ │ ├── index.ts │ │ │ └── styles.ts │ │ ├── CometChatVideoBubble/ │ │ │ ├── CometChatVideoBubble.tsx │ │ │ ├── index.ts │ │ │ ├── resources/ │ │ │ │ └── index.ts │ │ │ └── style.ts │ │ ├── CometChatVideoPlayer/ │ │ │ ├── CometChatVideoPlayer.tsx │ │ │ └── index.tsx │ │ ├── ErrorEmptyView/ │ │ │ └── ErrorEmptyView.tsx │ │ └── index.ts │ └── theme/ │ ├── CometChatThemeHelper.ts │ ├── context.ts │ ├── default/ │ │ ├── color/ │ │ │ ├── dark.ts │ │ │ └── light.ts │ │ ├── default.ts │ │ ├── index.ts │ │ ├── resources/ │ │ │ └── icons/ │ │ │ └── index.ts │ │ ├── spacing.ts │ │ └── typography.ts │ ├── hook.ts │ ├── index.ts │ ├── provider.tsx │ └── type.ts └── tsconfig.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # OSX # .DS_Store # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate **/.xcode.env.local # Android/IntelliJ # build/ .idea .gradle local.properties *.iml *.hprof .cxx/ *.keystore !debug.keystore # node.js # node_modules/ npm-debug.log yarn-error.log # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/ **/fastlane/report.xml **/fastlane/Preview.html **/fastlane/screenshots **/fastlane/test_output # Bundle artifact *.jsbundle # Ruby / CocoaPods **/Pods/ /vendor/bundle/ # Temporary files created by Metro to check the health of the file watcher .metro-health-check* # testing /coverage # Yarn .yarn/* !.yarn/patches !.yarn/plugins !.yarn/releases !.yarn/sdks !.yarn/versions # Ignore android and ios folders in SampleAppExpo examples/SampleAppExpo/android/ examples/SampleAppExpo/ios/ ================================================ FILE: README.md ================================================

CometChat

# CometChat React Native UI Kit CometChat React Native UIKit provides a pre-built user interface kit that developers can use to quickly integrate a reliable & fully-featured chat experience into an existing or a new mobile app.
## 🚀 Explore the Sample Apps! Dive straight into our Sample Apps to see CometChat UI Kit in action! Whether you're building a messaging app or enhancing your existing project, this sample app showcases the full potential of our React Native UI components. - [Sample App ](examples/SampleApp#readme) - [Sample App AI](examples/SampleAppAI#readme) - [Sample App Expo](examples/SampleAppExpo#readme) - [Sample App with Push Notifications](examples/SampleAppWithPushNotifications#readme) ## Prerequisites - **Node.js** 18 or higher - **React Native** Version 0.77 or later (up to the latest version) **iOS** - XCode - Pod (CocoaPods) for iOS - An iOS device or emulator with iOS 12.0 or above. **Android** - Android Studio - Android device or emulator with Android version 5.0 or above. ## Getting Started To set up React Native Chat UIKit and utilize CometChat for your chat functionality, you'll need to follow these steps: 1. Registration: Go to the [CometChat Dashboard](https://app.cometchat.com/) and sign up for an account. 2. After registering, log into your CometChat account and create a new app. Once created, CometChat will generate an Auth Key and App ID for you. Keep these credentials secure as you'll need them later. 3. Check the [Key Concepts](https://www.cometchat.com/docs/fundamentals/key-concepts) to understand the basic components of CometChat. 4. Refer to the [Integration Steps](https://www.cometchat.com/docs/ui-kit/react-native/5.0/getting-started) in our documentation to integrate the UI Kit into your iOS app. ## Help and Support For issues running the project or integrating with our UI Kits, consult our [documentation](https://www.cometchat.com/docs/ui-kit/react-native/5.0/overview) or create a [support ticket](https://help.cometchat.com/hc/en-us) or seek real-time support via the [CometChat Dashboard](https://app.cometchat.com/). ================================================ FILE: examples/SampleApp/.bundle/config ================================================ BUNDLE_PATH: "vendor/bundle" BUNDLE_FORCE_RUBY_PLATFORM: 1 ================================================ FILE: examples/SampleApp/.eslintrc.js ================================================ module.exports = { root: true, extends: '@react-native', }; ================================================ FILE: examples/SampleApp/.gitignore ================================================ # OSX # .DS_Store # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate **/.xcode.env.local # Android/IntelliJ # build/ .idea .gradle local.properties *.iml *.hprof .cxx/ *.keystore !debug.keystore .kotlin/ # node.js # node_modules/ npm-debug.log yarn-error.log # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/ **/fastlane/report.xml **/fastlane/Preview.html **/fastlane/screenshots **/fastlane/test_output # Bundle artifact *.jsbundle # Ruby / CocoaPods **/Pods/ /vendor/bundle/ # Temporary files created by Metro to check the health of the file watcher .metro-health-check* # testing /coverage # Yarn .yarn/* !.yarn/patches !.yarn/plugins !.yarn/releases !.yarn/sdks !.yarn/versions ================================================ FILE: examples/SampleApp/.prettierrc.js ================================================ module.exports = { arrowParens: 'avoid', singleQuote: true, trailingComma: 'all', }; ================================================ FILE: examples/SampleApp/.vscode/settings.json ================================================ { "workbench.colorCustomizations": { "activityBar.activeBackground": "#fa1b49", "activityBar.background": "#fa1b49", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#155e02", "activityBarBadge.foreground": "#e7e7e7", "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#fa1b49", "statusBar.background": "#dd0531", "statusBar.foreground": "#e7e7e7", "statusBarItem.hoverBackground": "#fa1b49", "statusBarItem.remoteBackground": "#dd0531", "statusBarItem.remoteForeground": "#e7e7e7", "titleBar.activeBackground": "#dd0531", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#dd053199", "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.color": "#dd0531" } ================================================ FILE: examples/SampleApp/.watchmanconfig ================================================ {} ================================================ FILE: examples/SampleApp/App.tsx ================================================ import './gesture-handler'; import React, { useState, useEffect, useRef } from 'react'; import { Platform, View, PlatformColor, AppState, AppStateStatus, } from 'react-native'; import { enableScreens } from 'react-native-screens'; enableScreens(); import { CometChatI18nProvider, CometChatIncomingCall, CometChatTheme, CometChatThemeProvider, CometChatUIEventHandler, CometChatUIEvents, CometChatUIKit, UIKitSettings, } from '@cometchat/chat-uikit-react-native'; import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import { CometChat } from '@cometchat/chat-sdk-react-native'; import RootStackNavigator from './src/navigation/RootStackNavigator'; import { AppConstants } from './src/utils/AppConstants'; import { requestAndroidPermissions } from './src/utils/helper'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { useConfig } from './src/config/store'; import { DeepPartial } from '@cometchat/chat-uikit-react-native/src/shared/helper/types'; import { createTypography } from './src/utils/themeTypography'; // Listener ID for registering and removing CometChat listeners. const listenerId = 'app'; const App = (): React.ReactElement => { const [callReceived, setCallReceived] = useState(false); const incomingCall = useRef( null, ); const [isInitializing, setIsInitializing] = useState(true); const [isLoggedIn, setIsLoggedIn] = useState(false); const [userLoggedIn, setUserLoggedIn] = useState(false); const [currentToken, setCurrentToken] = useState(''); const [isTokenRegistered, setIsTokenRegistered] = useState(false); const [hasValidAppCredentials, setHasValidAppCredentials] = useState(false); const styleConfig = useConfig(state => state?.settings?.style); const theme : { light: DeepPartial; dark: DeepPartial } = { light: { color: { primary: styleConfig.color.brandColor, textPrimary: styleConfig.color.primaryTextLight, textSecondary: styleConfig.color.secondaryTextLight, }, typography: createTypography(styleConfig.typography.font), }, dark: { color: { primary: styleConfig.color.brandColor, textPrimary: styleConfig.color.primaryTextDark, textSecondary: styleConfig.color.secondaryTextDark, }, typography: createTypography(styleConfig.typography.font), }, }; /** * Initialize CometChat UIKit and configure Google Sign-In. * Retrieves credentials from AsyncStorage and uses fallback constants if needed. */ useEffect(() => { async function init() { try { // Retrieve stored app credentials or default to an empty object. const AppData = (await AsyncStorage.getItem('appCredentials')) || '{}'; const storedCredentials = JSON.parse(AppData); // Determine the final credentials (from AsyncStorage or AppConstants). const finalAppId = storedCredentials.appId || AppConstants.appId; const finalAuthKey = storedCredentials.authKey || AppConstants.authKey; const finalRegion = storedCredentials.region || AppConstants.region; // Set hasValidAppCredentials based on whether all values are available. if (finalAppId && finalAuthKey && finalRegion) { setHasValidAppCredentials(true); } else { setHasValidAppCredentials(false); } await CometChatUIKit.init({ appId: finalAppId, authKey: finalAuthKey, region: finalRegion, subscriptionType: CometChat.AppSettings .SUBSCRIPTION_TYPE_ALL_USERS as UIKitSettings['subscriptionType'], }); // If a user is already logged in, update the state. const loggedInUser = CometChatUIKit.loggedInUser; if (loggedInUser) { setIsLoggedIn(true); } } catch (error) { console.log('Error during initialization', error); } finally { // Mark initialization as complete. setIsInitializing(false); } } init(); }, []); /** * Monitor app state changes to verify the logged-in status and clear notifications. * When the app becomes active, it cancels Android notifications and checks the login status. */ useEffect(() => { if (Platform.OS === 'android') { // Request required Android permissions for notifications. requestAndroidPermissions(); } const handleAppStateChange = async (nextState: AppStateStatus) => { if (nextState === 'active') { try { // Verify if there is a valid logged-in user. const chatUser = await CometChat.getLoggedinUser(); setIsLoggedIn(!!chatUser); } catch (error) { console.log('Error verifying CometChat user on resume:', error); } } }; const subscription = AppState.addEventListener( 'change', handleAppStateChange, ); return () => subscription.remove(); }, []); /** * Attach CometChat login listener to handle login and logout events. * Updates user login status accordingly. */ useEffect(() => { CometChat.addLoginListener( listenerId, new CometChat.LoginListener({ loginSuccess: () => { setUserLoggedIn(true); }, loginFailure: (e: CometChat.CometChatException) => { console.log('LoginListener :: loginFailure', e.message); }, logoutSuccess: () => { setUserLoggedIn(false); }, logoutFailure: (e: CometChat.CometChatException) => { console.log('LoginListener :: logoutFailure', e.message); }, }), ); // Clean up the login listener on component unmount. return () => { CometChat.removeLoginListener(listenerId); }; }, []); /** * Attach CometChat call listeners to handle incoming, outgoing, and cancelled call events. * Also handles UI events for call end. */ useEffect(() => { // Listener for call events. CometChat.addCallListener( listenerId, new CometChat.CallListener({ onIncomingCallReceived: (call: CometChat.Call) => { // Check if there's already an active call try { const activeCall = CometChat.getActiveCall(); if (activeCall) { // If there's an active call, reject the incoming call with busy status setTimeout(() => { CometChat.rejectCall( call.getSessionId(), CometChat.CALL_STATUS.BUSY, ) .then(() => { console.log('Incoming call rejected due to active call'); }) .catch(error => { console.error( 'Error rejecting call with busy status:', error, ); }); }, 2000); } else { // No active call, proceed with normal incoming call handling // Hide any bottom sheet UI before showing the incoming call screen. CometChatUIEventHandler.emitUIEvent( CometChatUIEvents.ccToggleBottomSheet, { isBottomSheetVisible: false, }, ); // Store the incoming call and update state. incomingCall.current = call; setCallReceived(true); } } catch (error) { console.error('Error getting active call:', error); // If error getting active call, proceed with normal handling CometChatUIEventHandler.emitUIEvent( CometChatUIEvents.ccToggleBottomSheet, { isBottomSheetVisible: false, }, ); incomingCall.current = call; setCallReceived(true); } }, onOutgoingCallRejected: () => { // Clear the call state if outgoing call is rejected. incomingCall.current = null; setCallReceived(false); }, onIncomingCallCancelled: () => { // Clear the call state if the incoming call is cancelled. incomingCall.current = null; setCallReceived(false); }, }), ); // Additional listener to handle call end events. CometChatUIEventHandler.addCallListener(listenerId, { ccCallEnded: () => { incomingCall.current = null; setCallReceived(false); }, }); // Remove call listeners on cleanup. return () => { CometChatUIEventHandler.removeCallListener(listenerId); CometChat.removeCallListener(listenerId); }; }, [userLoggedIn]); // Show a blank/splash screen while the app is initializing. if (isInitializing) { return ( ); } // Once initialization is complete, render the main app UI. return ( {/* Render the incoming call UI if the user is logged in and a call is received */} {isLoggedIn && callReceived && incomingCall.current ? ( { // Handle call decline by clearing the incoming call state. incomingCall.current = null; setCallReceived(false); }} /> ) : null} {/* Render the main navigation stack, passing the login status as a prop */} ); }; export default App; ================================================ FILE: examples/SampleApp/AppErrorBoundary.tsx ================================================ import React from 'react'; import { View, Text, StyleSheet, Appearance, Button } from 'react-native'; interface State { hasError: boolean; error: Error | null; colorScheme: 'light' | 'dark' | null; } interface Props { children: React.ReactNode; } class AppErrorBoundary extends React.Component { constructor(props: Props) { super(props); const colorScheme = Appearance.getColorScheme() ?? null; this.state = { hasError: false, error: null, colorScheme }; } static getDerivedStateFromError(error: Error) { // Update state so the next render shows the fallback UI. return { hasError: true, error }; } componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { // Log error to an error reporting service here if needed. console.log('ErrorBoundary caught an error', error, errorInfo); } componentDidMount() { // Listen for changes in color scheme. Appearance.addChangeListener(({ colorScheme }) => { this.setState({ colorScheme: colorScheme ?? null }); }); } // Reset error state to allow retrying handleRetry = () => { this.setState({ hasError: false, error: null }); }; render() { if (this.state.hasError) { const styles = createStyles(this.state.colorScheme); return ( Something went wrong {/* Uncomment the next line to show the error message */} {/* {this.state.error ? this.state.error.toString() : 'Unknown error'} */}